SPU: Don't break blocks on DSYNC instruction in Safe mode (#6731)

This commit is contained in:
Eladash 2019-11-11 22:12:21 +02:00 committed by Ivan
parent 8234bdb8f0
commit a21d7def33
2 changed files with 3 additions and 3 deletions

View file

@ -1459,7 +1459,7 @@ void spu_recompiler::SYNC(spu_opcode_t op)
void spu_recompiler::DSYNC(spu_opcode_t op)
{
// This instruction forces all earlier load, store, and channel instructions to complete before proceeding.
SYNC(op);
c->mfence();
}
void spu_recompiler::MFSPR(spu_opcode_t op)

View file

@ -1332,7 +1332,6 @@ std::vector<u32> spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_poi
}
case spu_itype::SYNC:
case spu_itype::DSYNC:
case spu_itype::STOP:
case spu_itype::STOPD:
{
@ -1696,6 +1695,7 @@ std::vector<u32> spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_poi
break;
}
case spu_itype::DSYNC:
case spu_itype::HEQ:
case spu_itype::HEQI:
case spu_itype::HGT:
@ -6086,7 +6086,7 @@ public:
void DSYNC(spu_opcode_t op) //
{
// This instruction forces all earlier load, store, and channel instructions to complete before proceeding.
SYNC(op);
m_ir->CreateFence(llvm::AtomicOrdering::SequentiallyConsistent);
}
void MFSPR(spu_opcode_t op) //