diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp index 4362e2b1b3f..ec3be83438c 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp @@ -568,12 +568,19 @@ void Jit64::stX(UGeckoInstruction inst) { RCX64Reg Ra = gpr.Bind(a, update ? RCMode::ReadWrite : RCMode::Read); RCOpArg reg_value; - if (!gpr.IsImm(s) && WriteClobbersRegValue(accessSize, /* swap */ true)) + if (WriteClobbersRegValue(accessSize, /* swap */ true)) { - RCOpArg Rs = gpr.Use(s, RCMode::Read); - RegCache::Realize(Rs); - reg_value = RCOpArg::R(RSCRATCH2); - MOV(32, reg_value, Rs); + if (gpr.IsImm(s)) + { + reg_value = RCOpArg::Imm32(gpr.Imm32(s)); + } + else + { + RCOpArg Rs = gpr.Use(s, RCMode::Read); + RegCache::Realize(Rs); + reg_value = RCOpArg::R(RSCRATCH2); + MOV(32, reg_value, Rs); + } } else { @@ -624,7 +631,9 @@ void Jit64::stXx(UGeckoInstruction inst) RCOpArg Ra = update ? gpr.Bind(a, RCMode::ReadWrite) : gpr.Use(a, RCMode::Read); RCOpArg Rb = gpr.Use(b, RCMode::Read); - RCOpArg Rs = does_clobber ? gpr.Use(s, RCMode::Read) : gpr.BindOrImm(s, RCMode::Read); + RCOpArg Rs = does_clobber ? + (gpr.IsImm(s) ? RCOpArg::Imm32(gpr.Imm32(s)) : gpr.Use(s, RCMode::Read)) : + gpr.BindOrImm(s, RCMode::Read); RegCache::Realize(Ra, Rb, Rs); MOV_sum(32, RSCRATCH2, Ra, Rb);