diff options
| author | Fiora <fioraaeterna@gmail.com> | 2014-11-09 16:21:11 -0800 |
|---|---|---|
| committer | Fiora <fioraaeterna@gmail.com> | 2014-11-09 21:24:30 -0800 |
| commit | 6603f98d044ccab8889eb3428353911aaa910ee7 (patch) | |
| tree | ea54e5cb6faa3540ff172b7b02ce7ba3d0664955 /Source/Core/Common | |
| parent | c34c231df1e0855c277af5e66a13506f4fb75ed0 (diff) | |
JIT: add 64-bit write support to FIFO functions
Also fix 64-bit values passed to CallAC and otherwise correct immediate
handling in FIFO writes.
Fixes 007 Nightfire.
Diffstat (limited to 'Source/Core/Common')
| -rw-r--r-- | Source/Core/Common/x64ABI.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/Common/x64Emitter.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/Common/x64Emitter.h | 4 |
3 files changed, 7 insertions, 7 deletions
diff --git a/Source/Core/Common/x64ABI.cpp b/Source/Core/Common/x64ABI.cpp index 2815ab8495..44818ceb67 100644 --- a/Source/Core/Common/x64ABI.cpp +++ b/Source/Core/Common/x64ABI.cpp @@ -207,18 +207,18 @@ void XEmitter::MOVTwo(int bits, Gen::X64Reg dst1, Gen::X64Reg src1, Gen::X64Reg } } -void XEmitter::ABI_CallFunctionAC(const void *func, const Gen::OpArg &arg1, u32 param2) +void XEmitter::ABI_CallFunctionAC(int bits, const void *func, const Gen::OpArg &arg1, u32 param2) { if (!arg1.IsSimpleReg(ABI_PARAM1)) - MOV(32, R(ABI_PARAM1), arg1); + MOV(bits, R(ABI_PARAM1), arg1); MOV(32, R(ABI_PARAM2), Imm32(param2)); ABI_CallFunction(func); } -void XEmitter::ABI_CallFunctionA(const void *func, const Gen::OpArg &arg1) +void XEmitter::ABI_CallFunctionA(int bits, const void *func, const Gen::OpArg &arg1) { if (!arg1.IsSimpleReg(ABI_PARAM1)) - MOV(32, R(ABI_PARAM1), arg1); + MOV(bits, R(ABI_PARAM1), arg1); ABI_CallFunction(func); } diff --git a/Source/Core/Common/x64Emitter.cpp b/Source/Core/Common/x64Emitter.cpp index 3716d922aa..cbdae83c91 100644 --- a/Source/Core/Common/x64Emitter.cpp +++ b/Source/Core/Common/x64Emitter.cpp @@ -1184,7 +1184,7 @@ void OpArg::WriteNormalOp(XEmitter *emit, bool toRM, NormalOp op, const OpArg &o } else { - _assert_msg_(DYNA_REC, 0, "WriteNormalOp - Unhandled case"); + _assert_msg_(DYNA_REC, 0, "WriteNormalOp - Unhandled case %d %d", operand.scale, bits); } _operandReg = (X64Reg)normalops[op].ext; //pass extension in REG of ModRM } diff --git a/Source/Core/Common/x64Emitter.h b/Source/Core/Common/x64Emitter.h index 7f98497456..9df47e10eb 100644 --- a/Source/Core/Common/x64Emitter.h +++ b/Source/Core/Common/x64Emitter.h @@ -871,8 +871,8 @@ public: void ABI_CallFunctionCCCP(const void *func, u32 param1, u32 param2,u32 param3, void *param4); void ABI_CallFunctionPC(const void *func, void *param1, u32 param2); void ABI_CallFunctionPPC(const void *func, void *param1, void *param2, u32 param3); - void ABI_CallFunctionAC(const void *func, const OpArg &arg1, u32 param2); - void ABI_CallFunctionA(const void *func, const OpArg &arg1); + void ABI_CallFunctionAC(int bits, const void *func, const OpArg &arg1, u32 param2); + void ABI_CallFunctionA(int bits, const void *func, const OpArg &arg1); // Pass a register as a parameter. void ABI_CallFunctionR(const void *func, X64Reg reg1); |
