summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2023-06-15 11:32:30 -0400
committerGitHub <noreply@github.com>2023-06-15 11:32:30 -0400
commitf0f8225ff8bcbee618e68e717f51678ea076fd72 (patch)
tree80a88f8bcdce3b65fef2421fe879419b4d35cfb1 /Source/Core
parentbd125733f0248017f6d3361f7a80381650c93aac (diff)
parentc55e08ff738d58ce4b49988c6d9a6cf06e45c069 (diff)
Merge pull request #11424 from Pokechu22/jit-imm-loadstore-update
Jit64: Attempt to fix updating stores with an immediate value
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp2
-rw-r--r--Source/Core/Core/PowerPC/Jit64/Jit_LoadStoreFloating.cpp8
2 files changed, 5 insertions, 5 deletions
diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp
index 6b7df45908..88424d2136 100644
--- a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp
+++ b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp
@@ -507,7 +507,7 @@ void Jit64::stX(UGeckoInstruction inst)
}
else
{
- RCOpArg Ra = gpr.UseNoImm(a, RCMode::Write);
+ RCOpArg Ra = gpr.RevertableBind(a, RCMode::Write);
RegCache::Realize(Ra);
MemoryExceptionCheck();
MOV(32, Ra, Imm32(addr));
diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStoreFloating.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStoreFloating.cpp
index 0af85a9f26..7ac34f5d6e 100644
--- a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStoreFloating.cpp
+++ b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStoreFloating.cpp
@@ -22,7 +22,7 @@ void Jit64::lfXXX(UGeckoInstruction inst)
bool indexed = inst.OPCD == 31;
bool update = indexed ? !!(inst.SUBOP10 & 0x20) : !!(inst.OPCD & 1);
bool single = indexed ? !(inst.SUBOP10 & 0x40) : !(inst.OPCD & 2);
- update &= indexed || inst.SIMM_16;
+ update &= indexed || (inst.SIMM_16 != 0);
int d = inst.RD;
int a = inst.RA;
@@ -93,7 +93,7 @@ void Jit64::stfXXX(UGeckoInstruction inst)
bool indexed = inst.OPCD == 31;
bool update = indexed ? !!(inst.SUBOP10 & 0x20) : !!(inst.OPCD & 1);
bool single = indexed ? !(inst.SUBOP10 & 0x40) : !(inst.OPCD & 2);
- update &= indexed || inst.SIMM_16;
+ update &= indexed || (inst.SIMM_16 != 0);
int s = inst.RS;
int a = inst.RA;
@@ -101,7 +101,7 @@ void Jit64::stfXXX(UGeckoInstruction inst)
s32 imm = (s16)inst.SIMM_16;
int accessSize = single ? 32 : 64;
- FALLBACK_IF(update && jo.memcheck && a == b);
+ FALLBACK_IF(update && jo.memcheck && indexed && a == b);
if (single)
{
@@ -144,7 +144,7 @@ void Jit64::stfXXX(UGeckoInstruction inst)
}
else
{
- RCOpArg Ra = gpr.UseNoImm(a, RCMode::Write);
+ RCOpArg Ra = gpr.RevertableBind(a, RCMode::Write);
RegCache::Realize(Ra);
MemoryExceptionCheck();
MOV(32, Ra, Imm32(addr));