JITIL: Disable all load/store instructions in 64-bit mode. This actually makes a lot of games work - but slowly. Investigation needed. Reindent a bunch of code.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3405 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
46f8178ab1
commit
759263351a
|
@ -71,6 +71,14 @@ struct CONTEXT
|
|||
Core::g_CoreStartupParameter.bJIT##type##Off) \
|
||||
{Default(inst); return;}
|
||||
|
||||
#ifdef _M_X64
|
||||
#define DISABLE64 \
|
||||
{Default(inst); return;}
|
||||
#else
|
||||
#define DISABLE64
|
||||
#endif
|
||||
|
||||
|
||||
class TrampolineCache : public Gen::XCodeBlock
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -191,4 +191,3 @@ using namespace Gen;
|
|||
ibuild.EmitStoreLink(ibuild.EmitIntConst(js.compilerPC + 4));
|
||||
ibuild.EmitBranchUncond(destination);
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
void Jit64::lhax(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitLoadGReg(inst.RB);
|
||||
if (inst.RA)
|
||||
|
@ -53,6 +54,7 @@ void Jit64::lhax(UGeckoInstruction inst)
|
|||
void Jit64::lXz(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16);
|
||||
if (inst.RA)
|
||||
|
@ -73,6 +75,7 @@ void Jit64::lXz(UGeckoInstruction inst)
|
|||
void Jit64::lha(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr =
|
||||
ibuild.EmitIntConst((s32)(s16)inst.SIMM_16);
|
||||
|
@ -86,6 +89,7 @@ void Jit64::lha(UGeckoInstruction inst)
|
|||
void Jit64::lXzx(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitLoadGReg(inst.RB);
|
||||
if (inst.RA) {
|
||||
|
@ -108,6 +112,8 @@ void Jit64::lXzx(UGeckoInstruction inst)
|
|||
void Jit64::dcbz(UGeckoInstruction inst)
|
||||
{
|
||||
Default(inst); return;
|
||||
|
||||
// TODO!
|
||||
#if 0
|
||||
if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff)
|
||||
{Default(inst); return;} // turn off from debugger
|
||||
|
@ -131,6 +137,7 @@ void Jit64::dcbz(UGeckoInstruction inst)
|
|||
void Jit64::stX(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16),
|
||||
value = ibuild.EmitLoadGReg(inst.RS);
|
||||
|
@ -150,6 +157,7 @@ void Jit64::stX(UGeckoInstruction inst)
|
|||
void Jit64::stXx(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitLoadGReg(inst.RB),
|
||||
value = ibuild.EmitLoadGReg(inst.RS);
|
||||
|
@ -169,6 +177,7 @@ void Jit64::stXx(UGeckoInstruction inst)
|
|||
void Jit64::lmw(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16);
|
||||
if (inst.RA)
|
||||
|
@ -184,6 +193,7 @@ void Jit64::lmw(UGeckoInstruction inst)
|
|||
void Jit64::stmw(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStore)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16);
|
||||
if (inst.RA)
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
void Jit64::lfs(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStoreFloating)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16), val;
|
||||
if (inst.RA)
|
||||
|
@ -58,6 +59,7 @@ void Jit64::lfs(UGeckoInstruction inst)
|
|||
void Jit64::lfd(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStoreFloating)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16), val;
|
||||
if (inst.RA)
|
||||
|
@ -72,6 +74,7 @@ void Jit64::lfd(UGeckoInstruction inst)
|
|||
void Jit64::stfd(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStoreFloating)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16),
|
||||
val = ibuild.EmitLoadFReg(inst.RS);
|
||||
|
@ -87,6 +90,7 @@ void Jit64::stfd(UGeckoInstruction inst)
|
|||
void Jit64::stfs(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStoreFloating)
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_16),
|
||||
val = ibuild.EmitLoadFReg(inst.RS);
|
||||
|
@ -103,6 +107,7 @@ void Jit64::stfs(UGeckoInstruction inst)
|
|||
void Jit64::stfsx(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStoreFloating)
|
||||
IREmitter::InstLoc addr = ibuild.EmitLoadGReg(inst.RB),
|
||||
val = ibuild.EmitLoadFReg(inst.RS);
|
||||
|
@ -117,6 +122,7 @@ void Jit64::stfsx(UGeckoInstruction inst)
|
|||
void Jit64::lfsx(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStoreFloating)
|
||||
IREmitter::InstLoc addr = ibuild.EmitLoadGReg(inst.RB), val;
|
||||
if (inst.RA)
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
void Jit64::psq_st(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStorePaired)
|
||||
if (inst.W || !Core::GetStartupParameter().bOptimizeQuantizers) {Default(inst); return;}
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_12), val;
|
||||
|
@ -59,6 +60,7 @@ void Jit64::psq_st(UGeckoInstruction inst)
|
|||
void Jit64::psq_l(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
DISABLE64
|
||||
JITDISABLE(LoadStorePaired)
|
||||
if (inst.W || !Core::GetStartupParameter().bOptimizeQuantizers) {Default(inst); return;}
|
||||
IREmitter::InstLoc addr = ibuild.EmitIntConst(inst.SIMM_12), val;
|
||||
|
|
Loading…
Reference in New Issue