summaryrefslogtreecommitdiff
path: root/Source/Core/Common
diff options
context:
space:
mode:
authornakeee <nakeee@gmail.com>2010-03-24 11:22:33 +0000
committernakeee <nakeee@gmail.com>2010-03-24 11:22:33 +0000
commit47239ce0f4bd61e3e95fb04bc185ae11d4872db4 (patch)
tree60f1dda3dcfb25eec70f1a37f431364e492d4f94 /Source/Core/Common
parentea90996852fd7b928acf9bd8ca1b6d97b700718a (diff)
XK patch for adding jit config to audiocommon/c16 function to x64emitter
and Skidu's fix for 64bit git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5230 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/Common')
-rw-r--r--Source/Core/Common/Src/ABI.cpp18
-rw-r--r--Source/Core/Common/Src/x64Emitter.h3
2 files changed, 20 insertions, 1 deletions
diff --git a/Source/Core/Common/Src/ABI.cpp b/Source/Core/Common/Src/ABI.cpp
index 522a8a572a..ba471a336f 100644
--- a/Source/Core/Common/Src/ABI.cpp
+++ b/Source/Core/Common/Src/ABI.cpp
@@ -66,6 +66,13 @@ void XEmitter::ABI_CallFunction(void *func) {
ABI_RestoreStack(0);
}
+void XEmitter::ABI_CallFunctionC16(void *func, u16 param1) {
+ ABI_AlignStack(1 * 2);
+ PUSH(16, Imm16(param1));
+ CALL(func);
+ ABI_RestoreStack(1 * 2);
+}
+
void XEmitter::ABI_CallFunctionC(void *func, u32 param1) {
ABI_AlignStack(1 * 4);
PUSH(32, Imm32(param1));
@@ -182,7 +189,16 @@ void XEmitter::ABI_RestoreStack(unsigned int frameSize) {
// Common functions
void XEmitter::ABI_CallFunction(void *func) {
- CALL(func);
+ // Far call
+ MOV(64, R(RAX), Imm64((u64)func));CALLptr(R(RAX));
+ //CALL(func);
+}
+
+void XEmitter::ABI_CallFunctionC16(void *func, u16 param1) {
+ MOV(16, R(ABI_PARAM1), Imm16(param1));
+ // Far call
+ MOV(64, R(RAX), Imm64((u64)func));CALLptr(R(RAX));
+ //CALL(func);
}
void XEmitter::ABI_CallFunctionC(void *func, u32 param1) {
diff --git a/Source/Core/Common/Src/x64Emitter.h b/Source/Core/Common/Src/x64Emitter.h
index dd11468580..e4d7013f87 100644
--- a/Source/Core/Common/Src/x64Emitter.h
+++ b/Source/Core/Common/Src/x64Emitter.h
@@ -590,6 +590,9 @@ public:
// The difference between this and CALL is that this aligns the stack
// where appropriate.
void ABI_CallFunction(void *func);
+
+ void ABI_CallFunctionC16(void *func, u16 param1);
+
// 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);