aligned_stack: fix attempt #1 for RecExit. Changed the jump to a call, which (I think!) should give GCC the stackframe setup it expects to see when trying to throw an exception.

git-svn-id: http://pcsx2.googlecode.com/svn/branches/aligned_stack@2025 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-10-17 22:30:50 +00:00
parent 87cbaaf5ca
commit 9a1f3ae9f1
3 changed files with 11 additions and 8 deletions

View File

@ -58,6 +58,7 @@
</Target>
</Build>
<Compiler>
<Add option="-march=native" />
<Add directory="../../include/Utilities" />
<Add directory="../../include" />
<Add directory="../../../3rdparty" />

View File

@ -88,8 +88,6 @@
</Environment>
</Build>
<Compiler>
<Add option="-march=pentium4" />
<Add option="-march=i486" />
<Add option="-Wno-format" />
<Add option="-Wno-unused-parameter" />
<Add option="-Wno-unused-value" />
@ -420,7 +418,6 @@
<Option compiler="gcc" use="0" buildCommand="gcc $options -S $includes -c $file -o $object" />
</Unit>
<Unit filename="../x86/ir5900tables.cpp" />
<Unit filename="../x86/ix86-32/aR5900-32.S" />
<Unit filename="../x86/ix86-32/iCore-32.cpp" />
<Unit filename="../x86/ix86-32/iR5900-32.cpp" />
<Unit filename="../x86/ix86-32/iR5900Arit.cpp" />

View File

@ -422,11 +422,11 @@ static DynGenFunc* _DynGen_EnterRecompiledCode()
// esp into ebp, and then align esp. ebp references the original esp base
// for the duration of our function, and is used to restore the original
// esp before returning from the function
// Optimization: We "allocate" 0x20 bytes of stack ahead of time here. The first
// 16 bytes are used for saving esi, edi, and ebx. The second 16 bytes are used
// for passing parameters to stdcall/cdecl functions.
xPUSH( ebp );
xMOV( ebp, esp );
xAND( esp, -0x10 );
@ -834,10 +834,15 @@ void CheckForBIOSEnd()
xMOV( eax, &cpuRegs.pc );
xCMP( eax, 0x00200008 );
xJE( ExitRec );
xForwardJE8 CallExitRec;
xCMP( eax, 0x00100008 );
xJE( ExitRec );
xForwardJNE8 SkipExitRec;
CallExitRec.SetTarget();
xCALL( ExitRec );
SkipExitRec.SetTarget();
}
static int *s_pCode;
@ -1262,7 +1267,7 @@ void __fastcall dyna_block_discard(u32 start,u32 sz)
{
DevCon.WriteLn("dyna_block_discard .. start=0x%08X size=%d", start, sz*4);
recClear(start, sz);
// Note: this function is accessed via a JMP, and thus the RET here will exit
// recompiled code and take us back to recExecute.
}