New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Raise program exception on floating point exceptions #10043
Conversation
|
I guess I should note that this doesn't work yet. |
c8ec427
to
7170219
Compare
|
While it was painfully slow, enabling the floating point exceptions for Call of Duty: Finest Hour also fixed the crash there, but playing through that game with it on might be worse than it crashing. Actually, playing the game at all is worse than it crashing. |
|
JMC has confirmed on IRC that both of the affected games are fixed by just handling divide by zero exceptions (like the game INI commit enables). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've completed both known games that use this feature.
0f1b4d3
to
70f83e8
Compare
|
I'm putting a final call out for this. It will get merged if no one is going to review it. True Crime must be unleashed on the masses. |
The next commit will make the interpreter run this after every float instruction, so I think a little optimization here is justified.
This is needed not only for the next commit, but also for correctly emulating float instructions that write to CR1.
This is done entirely through interpreter fallbacks. It would probably be possible to implement this using host exception handlers instead, but I think it would be a lot of complexity for a rarely used feature, so let's not do it for now. For performance reasons, there are two settings for this feature: One setting which does enables just what True Crime: New York City needs and one setting which enables it all. The latter makes almost all float instructions fall back to the interpreter.
Combined with the previous commits in this pull request, this fixes https://bugs.dolphin-emu.org/issues/7230 (True Crime: New York City) and https://bugs.dolphin-emu.org/issues/9650 (Call of Duty: Finest Hour).
Fixes https://bugs.dolphin-emu.org/issues/7230 (True Crime: New York City) and https://bugs.dolphin-emu.org/issues/9650 (Call of Duty: Finest Hour).