summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Src/ABI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/Src/ABI.cpp')
-rw-r--r--Source/Core/Common/Src/ABI.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/Source/Core/Common/Src/ABI.cpp b/Source/Core/Common/Src/ABI.cpp
index f565a77633..d18e5b1e41 100644
--- a/Source/Core/Common/Src/ABI.cpp
+++ b/Source/Core/Common/Src/ABI.cpp
@@ -127,12 +127,20 @@ void XEmitter::ABI_CallFunctionRR(void *func, Gen::X64Reg reg1, Gen::X64Reg reg2
void XEmitter::ABI_CallFunctionAC(void *func, const Gen::OpArg &arg1, u32 param2)
{
ABI_AlignStack(2 * 4);
- PUSH(32, arg1);
PUSH(32, Imm32(param2));
+ PUSH(32, arg1);
CALL(func);
ABI_RestoreStack(2 * 4);
}
+void XEmitter::ABI_CallFunctionA(void *func, const Gen::OpArg &arg1)
+{
+ ABI_AlignStack(1 * 4);
+ PUSH(32, arg1);
+ CALL(func);
+ ABI_RestoreStack(1 * 4);
+}
+
void XEmitter::ABI_PushAllCalleeSavedRegsAndAdjustStack() {
// Note: 4 * 4 = 16 bytes, so alignment is preserved.
PUSH(EBP);
@@ -259,6 +267,13 @@ void XEmitter::ABI_CallFunctionAC(void *func, const Gen::OpArg &arg1, u32 param2
CALL(func);
}
+void XEmitter::ABI_CallFunctionA(void *func, const Gen::OpArg &arg1)
+{
+ if (!arg1.IsSimpleReg(ABI_PARAM1))
+ MOV(32, R(ABI_PARAM1), arg1);
+ CALL(func);
+}
+
unsigned int XEmitter::ABI_GetAlignedFrameSize(unsigned int frameSize) {
return frameSize;
}