mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
A few more JIT functions for loads; I had something somewhat more
aggressive, but it didn't really give a significant improvement over this. This is probably my last checkin for today. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1260 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -71,9 +71,68 @@ namespace Jit64
|
|||||||
MOV(32, R(ABI_PARAM1), gpr.R(b));
|
MOV(32, R(ABI_PARAM1), gpr.R(b));
|
||||||
if (a)
|
if (a)
|
||||||
ADD(32, R(ABI_PARAM1), gpr.R(a));
|
ADD(32, R(ABI_PARAM1), gpr.R(a));
|
||||||
//SafeLoadRegToEAX(ABI_PARAM1, 8, 0);
|
#if 0
|
||||||
|
SafeLoadRegToEAX(ABI_PARAM1, 8, 0);
|
||||||
|
MOV(32, gpr.R(d), R(EAX));
|
||||||
|
#else
|
||||||
UnsafeLoadRegToReg(ABI_PARAM1, gpr.RX(d), 8, 0, false);
|
UnsafeLoadRegToReg(ABI_PARAM1, gpr.RX(d), 8, 0, false);
|
||||||
//MOV(32, gpr.R(d), R(EAX));
|
#endif
|
||||||
|
gpr.UnlockAll();
|
||||||
|
gpr.UnlockAllX();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lwzx(UGeckoInstruction inst)
|
||||||
|
{
|
||||||
|
#ifdef JIT_OFF_OPTIONS
|
||||||
|
if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff)
|
||||||
|
{Default(inst); return;} // turn off from debugger
|
||||||
|
#endif
|
||||||
|
INSTRUCTION_START;
|
||||||
|
|
||||||
|
int a = inst.RA, b = inst.RB, d = inst.RD;
|
||||||
|
gpr.Lock(a, b, d);
|
||||||
|
gpr.FlushLockX(ABI_PARAM1);
|
||||||
|
if (b == d || a == d)
|
||||||
|
gpr.LoadToX64(d, true, true);
|
||||||
|
else
|
||||||
|
gpr.LoadToX64(d, false, true);
|
||||||
|
MOV(32, R(ABI_PARAM1), gpr.R(b));
|
||||||
|
if (a)
|
||||||
|
ADD(32, R(ABI_PARAM1), gpr.R(a));
|
||||||
|
#if 1
|
||||||
|
SafeLoadRegToEAX(ABI_PARAM1, 32, 0);
|
||||||
|
MOV(32, gpr.R(d), R(EAX));
|
||||||
|
#else
|
||||||
|
UnsafeLoadRegToReg(ABI_PARAM1, gpr.RX(d), 32, 0, false);
|
||||||
|
#endif
|
||||||
|
gpr.UnlockAll();
|
||||||
|
gpr.UnlockAllX();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lhax(UGeckoInstruction inst)
|
||||||
|
{
|
||||||
|
#ifdef JIT_OFF_OPTIONS
|
||||||
|
if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff)
|
||||||
|
{Default(inst); return;} // turn off from debugger
|
||||||
|
#endif
|
||||||
|
INSTRUCTION_START;
|
||||||
|
|
||||||
|
int a = inst.RA, b = inst.RB, d = inst.RD;
|
||||||
|
gpr.Lock(a, b, d);
|
||||||
|
gpr.FlushLockX(ABI_PARAM1);
|
||||||
|
if (b == d || a == d)
|
||||||
|
gpr.LoadToX64(d, true, true);
|
||||||
|
else
|
||||||
|
gpr.LoadToX64(d, false, true);
|
||||||
|
MOV(32, R(ABI_PARAM1), gpr.R(b));
|
||||||
|
if (a)
|
||||||
|
ADD(32, R(ABI_PARAM1), gpr.R(a));
|
||||||
|
#if 1
|
||||||
|
SafeLoadRegToEAX(ABI_PARAM1, 16, 0, true);
|
||||||
|
MOV(32, gpr.R(d), R(EAX));
|
||||||
|
#else
|
||||||
|
UnsafeLoadRegToReg(ABI_PARAM1, gpr.RX(d), 16, 0, true);
|
||||||
|
#endif
|
||||||
gpr.UnlockAll();
|
gpr.UnlockAll();
|
||||||
gpr.UnlockAllX();
|
gpr.UnlockAllX();
|
||||||
}
|
}
|
||||||
|
@ -288,7 +288,7 @@ GekkoOPTemplate table31[] =
|
|||||||
{922, Interpreter::extshx, Jit64::extshx, {"extshx", OPTYPE_INTEGER, FL_IN_A | FL_OUT_S | FL_RC_BIT}},
|
{922, Interpreter::extshx, Jit64::extshx, {"extshx", OPTYPE_INTEGER, FL_IN_A | FL_OUT_S | FL_RC_BIT}},
|
||||||
{954, Interpreter::extsbx, Jit64::extsbx, {"extsbx", OPTYPE_INTEGER, FL_IN_A | FL_OUT_S | FL_RC_BIT}},
|
{954, Interpreter::extsbx, Jit64::extsbx, {"extsbx", OPTYPE_INTEGER, FL_IN_A | FL_OUT_S | FL_RC_BIT}},
|
||||||
{536, Interpreter::srwx, Jit64::srwx, {"srwx", OPTYPE_INTEGER, FL_RC_BIT}},
|
{536, Interpreter::srwx, Jit64::srwx, {"srwx", OPTYPE_INTEGER, FL_RC_BIT}},
|
||||||
{792, Interpreter::srawx, Jit64::srawx, {"srawx", OPTYPE_INTEGER, FL_RC_BIT}},
|
{792, Interpreter::srawx, Jit64::srawx, {"srawx", OPTYPE_INTEGER, FL_RC_BIT}},
|
||||||
{824, Interpreter::srawix, Jit64::srawix, {"srawix", OPTYPE_INTEGER, FL_RC_BIT}},
|
{824, Interpreter::srawix, Jit64::srawix, {"srawix", OPTYPE_INTEGER, FL_RC_BIT}},
|
||||||
{24, Interpreter::slwx, Jit64::slwx, {"slwx", OPTYPE_INTEGER, FL_RC_BIT}},
|
{24, Interpreter::slwx, Jit64::slwx, {"slwx", OPTYPE_INTEGER, FL_RC_BIT}},
|
||||||
|
|
||||||
@ -301,7 +301,7 @@ GekkoOPTemplate table31[] =
|
|||||||
{1014, Interpreter::dcbz, Jit64::dcbz, {"dcbz", OPTYPE_DCACHE, 0, 4}},
|
{1014, Interpreter::dcbz, Jit64::dcbz, {"dcbz", OPTYPE_DCACHE, 0, 4}},
|
||||||
|
|
||||||
//load word
|
//load word
|
||||||
{23, Interpreter::lwzx, Jit64::Default, {"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}},
|
{23, Interpreter::lwzx, Jit64::lwzx, {"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}},
|
||||||
{55, Interpreter::lwzux, Jit64::Default, {"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_IN_A | FL_IN_B}},
|
{55, Interpreter::lwzux, Jit64::Default, {"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_IN_A | FL_IN_B}},
|
||||||
|
|
||||||
//load halfword
|
//load halfword
|
||||||
@ -309,7 +309,7 @@ GekkoOPTemplate table31[] =
|
|||||||
{311, Interpreter::lhzux, Jit64::Default, {"lhzux", OPTYPE_LOAD, FL_OUT_D | FL_IN_A | FL_IN_B}},
|
{311, Interpreter::lhzux, Jit64::Default, {"lhzux", OPTYPE_LOAD, FL_OUT_D | FL_IN_A | FL_IN_B}},
|
||||||
|
|
||||||
//load halfword signextend
|
//load halfword signextend
|
||||||
{343, Interpreter::lhax, Jit64::Default, {"lhax", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}},
|
{343, Interpreter::lhax, Jit64::lhax, {"lhax", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}},
|
||||||
{375, Interpreter::lhaux, Jit64::Default, {"lhaux", OPTYPE_LOAD, FL_OUT_D | FL_IN_A | FL_IN_B}},
|
{375, Interpreter::lhaux, Jit64::Default, {"lhaux", OPTYPE_LOAD, FL_OUT_D | FL_IN_A | FL_IN_B}},
|
||||||
|
|
||||||
//load byte
|
//load byte
|
||||||
|
Reference in New Issue
Block a user