Add a helper to make zero-argument calls from an aligned stack

correctly.



git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1663 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
magumagu9 2008-12-25 22:10:36 +00:00
parent b92c831857
commit be4c7e1399
2 changed files with 13 additions and 0 deletions

View File

@ -61,6 +61,12 @@ void XEmitter::ABI_EmitEpilogue(int maxCallParams)
// Shared code between Win32 and Unix32
// ====================================
void XEmitter::ABI_CallFunction(void *func) {
ABI_AlignStack(0);
CALL(func);
ABI_RestoreStack(0);
}
void XEmitter::ABI_CallFunctionC(void *func, u32 param1) {
ABI_AlignStack(1 * 4);
PUSH(32, Imm32(param1));
@ -156,6 +162,10 @@ void XEmitter::ABI_RestoreStack(unsigned int frameSize) {
#else
void XEmitter::ABI_CallFunction(void *func) {
CALL(func);
}
void XEmitter::ABI_CallFunctionC(void *func, u32 param1) {
MOV(32, R(ABI_PARAM1), Imm32(param1));
CALL(func);

View File

@ -574,6 +574,9 @@ public:
void RTDSC();
// Utility functions
// The difference between this and CALL is that this aligns the stack
// where appropriate.
void ABI_CallFunction(void *func);
// These only support u32 parameters, but that's enough for a lot of uses.
// These will destroy the 1 or 2 first "parameter regs".
void ABI_CallFunctionC(void *func, u32 param1);