mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
JitArm64: Check the FIFO on EIEIO instructions
Copied from the Jit64 version
This commit is contained in:
parent
bbc0f0c744
commit
d841d9c7b3
@ -405,6 +405,7 @@ const u8* JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitB
|
||||
js.assumeNoPairedQuantize = false;
|
||||
js.blockStart = em_address;
|
||||
js.fifoBytesThisBlock = 0;
|
||||
js.mustCheckFifo = false;
|
||||
js.downcountAmount = 0;
|
||||
js.skipInstructions = 0;
|
||||
js.curBlock = b;
|
||||
@ -491,9 +492,11 @@ const u8* JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitB
|
||||
bool gatherPipeIntCheck =
|
||||
jit->js.fifoWriteAddresses.find(ops[i].address) != jit->js.fifoWriteAddresses.end();
|
||||
|
||||
if (jo.optimizeGatherPipe && js.fifoBytesThisBlock >= 32)
|
||||
if (jo.optimizeGatherPipe && (js.fifoBytesThisBlock >= 32 || js.mustCheckFifo))
|
||||
{
|
||||
js.fifoBytesThisBlock -= 32;
|
||||
if (js.fifoBytesThisBlock >= 32)
|
||||
js.fifoBytesThisBlock -= 32;
|
||||
js.mustCheckFifo = false;
|
||||
|
||||
gpr.Lock(W30);
|
||||
BitSet32 regs_in_use = gpr.GetCallerSavedUsed();
|
||||
|
@ -116,6 +116,7 @@ public:
|
||||
void dcbx(UGeckoInstruction inst);
|
||||
void dcbt(UGeckoInstruction inst);
|
||||
void dcbz(UGeckoInstruction inst);
|
||||
void eieio(UGeckoInstruction inst);
|
||||
|
||||
// LoadStore floating point
|
||||
void lfXX(UGeckoInstruction inst);
|
||||
|
@ -853,3 +853,15 @@ void JitArm64::dcbz(UGeckoInstruction inst)
|
||||
|
||||
gpr.Unlock(W0);
|
||||
}
|
||||
|
||||
void JitArm64::eieio(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
JITDISABLE(bJITLoadStoreOff);
|
||||
|
||||
// optimizeGatherPipe generally postpones FIFO checks to the end of the JIT block,
|
||||
// which is generally safe. However postponing FIFO writes across eieio instructions
|
||||
// is incorrect (would crash NBA2K11 strap screen if we improve our FIFO detection).
|
||||
if (jo.optimizeGatherPipe && js.fifoBytesThisBlock > 0)
|
||||
js.mustCheckFifo = true;
|
||||
}
|
||||
|
@ -314,7 +314,7 @@ static GekkoOPTemplate table31[] = {
|
||||
// Unused instructions on GC
|
||||
{310, &JitArm64::FallBackToInterpreter}, // eciwx
|
||||
{438, &JitArm64::FallBackToInterpreter}, // ecowx
|
||||
{854, &JitArm64::DoNothing}, // eieio
|
||||
{854, &JitArm64::eieio}, // eieio
|
||||
{306, &JitArm64::FallBackToInterpreter}, // tlbie
|
||||
{566, &JitArm64::DoNothing}, // tlbsync
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user