While preparing my previous patch, I concentrated on running the tests with the software-emulated IDIV enabled. Otherwise, I only run SunSpider and not many other tests, and relied on previous test runs from previous/interim good patches. So after giving it yet another look, I realized that, by using GPRResult in the hardware modulo operation, things broke (although I can't really explain to myself why...) A fix will follow.
Created attachment 200088 [details] Patch
It broke Octane/Crypto, not Octane/Splay (sorry, it's almost 4am EDT).
Created attachment 200089 [details] Patch Updating bug title in the ChangeLog.
Comment on attachment 200089 [details] Patch Yeah, I think this is still wrong. GPRResult is for forcing the return register to be live across a call to flushRegisters(), when you're making an unconditional call that clobbers all registers. It looks like you're doing an unconditional register-clobbering call if !supportsIntegerDiv(). So, this will still break things. I think you need to use GPRResult if !supportsIntegerDiv() and GPRTemporary otherwise.
Closing bug as RESOLVED WONTFIX. Bug 115138 is now reopened, and the full fix will be in there instead.