diff --git a/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp b/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp index 9c7493fd7a..bcc92380d3 100644 --- a/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp +++ b/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp @@ -2688,25 +2688,26 @@ void spu_recompiler::IRET(spu_opcode_t op) void spu_recompiler::BISLED(spu_opcode_t op) { + get_events(); + c->mov(*addr, SPU_OFF_32(gpr, op.ra, &v128::_u32, 3)); - c->and_(*addr, 0x3fffc); const XmmLink& vr = XmmAlloc(); c->lea(*qw0, get_pc(m_pos + 4)); - c->and_(qw0->r32(), 0x3fffc); c->movd(vr, qw0->r32()); + c->pand(vr, XmmConst(_mm_set1_epi32(0x3fffc))); c->pslldq(vr, 12); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); asmjit::Label branch_label = c->newLabel(); - get_events(); c->jne(branch_label); after.emplace_back([=] { c->align(asmjit::kAlignCode, 16); c->bind(branch_label); - branch_indirect(op); + c->and_(*addr, 0x3fffc); + branch_indirect(op, true, false); }); }