mirror of https://github.com/PCSX2/pcsx2.git
Linux: Experimental fix for exception propagation out of the recompiler; this version is based on the theory that the cause is GCC optimizing out exception handling because it sees the inline asm "call DispatcherReg;" as a no-throw(). So I removed the asm and replaced it with a direct C++ invocation. This should work since the new rec never exits except via catch() clauses anyway, so pushing/popping clobbered registers isn't needed.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1973 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
8de443878a
commit
6583b1623b
|
@ -600,30 +600,7 @@ static void recExecute()
|
|||
}
|
||||
|
||||
#else // _MSC_VER
|
||||
|
||||
__asm__ __volatile__
|
||||
(
|
||||
// We should be able to rely on GAS syntax (the register clobber list) as a
|
||||
// replacement for manual push/pop of unpreserved registers.
|
||||
|
||||
// EBP note: As I feared, EBP is "required" for C++ excepion handling in Linux, and trying
|
||||
// to issue a clobber specifier for it causes an error. We really need to find a way to
|
||||
// disable EBP regalloc in iCore. --air
|
||||
|
||||
".intel_syntax noprefix\n"
|
||||
//"push ebx\n"
|
||||
//"push esi\n"
|
||||
//"push edi\n"
|
||||
"push ebp\n"
|
||||
|
||||
"call DispatcherReg\n"
|
||||
|
||||
"pop ebp\n"
|
||||
//"pop edi\n"
|
||||
//"pop esi\n"
|
||||
//"pop ebx\n"
|
||||
".att_syntax\n"
|
||||
: : : "eax", "ebx", "ecx", "edx", "esi", "edi", "memory" );
|
||||
DispatcherReg();
|
||||
#endif
|
||||
}
|
||||
catch( Exception::ForceDispatcherReg& )
|
||||
|
|
Loading…
Reference in New Issue