bugfix, more...
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@116 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
523ca5a682
commit
0c21d95606
|
@ -29,6 +29,14 @@ void ABI_CallFunctionR(void *func, X64Reg reg1) {
|
||||||
ADD(32, R(ESP), Imm8(4));
|
ADD(32, R(ESP), Imm8(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ABI_CallFunctionAC(void *func, const Gen::OpArg &arg1, u32 param2)
|
||||||
|
{
|
||||||
|
PUSH(32, arg1);
|
||||||
|
PUSH(32, Imm32(param2));
|
||||||
|
CALL(func);
|
||||||
|
ADD(32, R(ESP), Imm8(8));
|
||||||
|
}
|
||||||
|
|
||||||
void ABI_PushAllCalleeSavedRegsAndAdjustStack() {
|
void ABI_PushAllCalleeSavedRegsAndAdjustStack() {
|
||||||
PUSH(EBP);
|
PUSH(EBP);
|
||||||
PUSH(EBX);
|
PUSH(EBX);
|
||||||
|
@ -66,6 +74,14 @@ void ABI_CallFunctionR(void *func, X64Reg reg1) {
|
||||||
CALL(func);
|
CALL(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ABI_CallFunctionAC(void *func, const Gen::OpArg &arg1, u32 param2)
|
||||||
|
{
|
||||||
|
if (arg1.IsSimpleReg(ABI_PARAM1))
|
||||||
|
MOV(32, R(ABI_PARAM1), arg1);
|
||||||
|
MOV(32, R(ABI_PARAM2), Imm32(param2));
|
||||||
|
CALL(func);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Win64 Specific Code
|
// Win64 Specific Code
|
||||||
// ====================================
|
// ====================================
|
||||||
|
@ -74,7 +90,7 @@ void ABI_PushAllCalleeSavedRegsAndAdjustStack() {
|
||||||
PUSH(RBX);
|
PUSH(RBX);
|
||||||
PUSH(RSI);
|
PUSH(RSI);
|
||||||
PUSH(RDI);
|
PUSH(RDI);
|
||||||
PUSH(RBP);
|
//PUSH(RBP);
|
||||||
PUSH(R12);
|
PUSH(R12);
|
||||||
PUSH(R13);
|
PUSH(R13);
|
||||||
PUSH(R14);
|
PUSH(R14);
|
||||||
|
@ -89,7 +105,7 @@ void ABI_PopAllCalleeSavedRegsAndAdjustStack() {
|
||||||
POP(R14);
|
POP(R14);
|
||||||
POP(R13);
|
POP(R13);
|
||||||
POP(R12);
|
POP(R12);
|
||||||
POP(RBP);
|
//POP(RBP);
|
||||||
POP(RDI);
|
POP(RDI);
|
||||||
POP(RSI);
|
POP(RSI);
|
||||||
POP(RBX);
|
POP(RBX);
|
||||||
|
@ -99,11 +115,21 @@ void ABI_PopAllCalleeSavedRegsAndAdjustStack() {
|
||||||
// Unix64 Specific Code
|
// Unix64 Specific Code
|
||||||
// ====================================
|
// ====================================
|
||||||
void ABI_PushAllCalleeSavedRegsAndAdjustStack() {
|
void ABI_PushAllCalleeSavedRegsAndAdjustStack() {
|
||||||
|
PUSH(RBX);
|
||||||
|
PUSH(RBP);
|
||||||
|
PUSH(R12);
|
||||||
|
PUSH(R13);
|
||||||
|
PUSH(R14);
|
||||||
|
PUSH(R15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ABI_PopAllCalleeSavedRegsAndAdjustStack() {
|
void ABI_PopAllCalleeSavedRegsAndAdjustStack() {
|
||||||
|
POP(R15);
|
||||||
|
POP(R14);
|
||||||
|
POP(R13);
|
||||||
|
POP(R12);
|
||||||
|
POP(RBP);
|
||||||
|
POP(RBX);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -83,6 +83,7 @@
|
||||||
// These will destroy the 1 or 2 first "parameter regs".
|
// These will destroy the 1 or 2 first "parameter regs".
|
||||||
void ABI_CallFunctionC(void *func, u32 param1);
|
void ABI_CallFunctionC(void *func, u32 param1);
|
||||||
void ABI_CallFunctionCC(void *func, u32 param1, u32 param2);
|
void ABI_CallFunctionCC(void *func, u32 param1, u32 param2);
|
||||||
|
void ABI_CallFunctionAC(void *func, const Gen::OpArg &arg1, u32 param2);
|
||||||
|
|
||||||
// Pass a register as a paremeter.
|
// Pass a register as a paremeter.
|
||||||
void ABI_CallFunctionR(void *func, Gen::X64Reg reg1);
|
void ABI_CallFunctionR(void *func, Gen::X64Reg reg1);
|
||||||
|
|
|
@ -132,7 +132,11 @@ namespace Gen
|
||||||
void WriteNormalOp(bool toRM, NormalOp op, const OpArg &operand, int bits) const;
|
void WriteNormalOp(bool toRM, NormalOp op, const OpArg &operand, int bits) const;
|
||||||
bool IsImm() const {return scale == SCALE_IMM8 || scale == SCALE_IMM16 || scale == SCALE_IMM32 || scale == SCALE_IMM64;}
|
bool IsImm() const {return scale == SCALE_IMM8 || scale == SCALE_IMM16 || scale == SCALE_IMM32 || scale == SCALE_IMM64;}
|
||||||
bool IsSimpleReg() const {return scale == SCALE_NONE;}
|
bool IsSimpleReg() const {return scale == SCALE_NONE;}
|
||||||
|
bool IsSimpleReg(X64Reg reg) const {
|
||||||
|
if (!IsSimpleReg())
|
||||||
|
return false;
|
||||||
|
return GetSimpleReg() == reg;
|
||||||
|
}
|
||||||
bool CanDoOpWith(OpArg &other) const
|
bool CanDoOpWith(OpArg &other) const
|
||||||
{
|
{
|
||||||
if (IsSimpleReg()) return true;
|
if (IsSimpleReg()) return true;
|
||||||
|
|
|
@ -356,7 +356,7 @@ namespace Jit64
|
||||||
case 36: accessSize = 32; break; //stw
|
case 36: accessSize = 32; break; //stw
|
||||||
case 44: accessSize = 16; break; //sth
|
case 44: accessSize = 16; break; //sth
|
||||||
case 38: accessSize = 8; break; //stb
|
case 38: accessSize = 8; break; //stb
|
||||||
default: _assert_msg_(DYNA_REC,0,"AWETKLJASDLKF"); return;
|
default: _assert_msg_(DYNA_REC, 0, "AWETKLJASDLKF"); return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpr.R(a).IsImm() && !update)
|
if (gpr.R(a).IsImm() && !update)
|
||||||
|
|
Loading…
Reference in New Issue