@@ -568,12 +568,19 @@ void Jit64::stX(UGeckoInstruction inst)
568568 {
569569 RCX64Reg Ra = gpr.Bind (a, update ? RCMode::ReadWrite : RCMode::Read);
570570 RCOpArg reg_value;
571- if (!gpr. IsImm (s) && WriteClobbersRegValue (accessSize, /* swap */ true ))
571+ if (WriteClobbersRegValue (accessSize, /* swap */ true ))
572572 {
573- RCOpArg Rs = gpr.Use (s, RCMode::Read);
574- RegCache::Realize (Rs);
575- reg_value = RCOpArg::R (RSCRATCH2);
576- MOV (32 , reg_value, Rs);
573+ if (gpr.IsImm (s))
574+ {
575+ reg_value = RCOpArg::Imm32 (gpr.Imm32 (s));
576+ }
577+ else
578+ {
579+ RCOpArg Rs = gpr.Use (s, RCMode::Read);
580+ RegCache::Realize (Rs);
581+ reg_value = RCOpArg::R (RSCRATCH2);
582+ MOV (32 , reg_value, Rs);
583+ }
577584 }
578585 else
579586 {
@@ -624,7 +631,9 @@ void Jit64::stXx(UGeckoInstruction inst)
624631
625632 RCOpArg Ra = update ? gpr.Bind (a, RCMode::ReadWrite) : gpr.Use (a, RCMode::Read);
626633 RCOpArg Rb = gpr.Use (b, RCMode::Read);
627- RCOpArg Rs = does_clobber ? gpr.Use (s, RCMode::Read) : gpr.BindOrImm (s, RCMode::Read);
634+ RCOpArg Rs = does_clobber ?
635+ (gpr.IsImm (s) ? RCOpArg::Imm32 (gpr.Imm32 (s)) : gpr.Use (s, RCMode::Read)) :
636+ gpr.BindOrImm (s, RCMode::Read);
628637 RegCache::Realize (Ra, Rb, Rs);
629638
630639 MOV_sum (32 , RSCRATCH2, Ra, Rb);
0 commit comments