about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-01-01 10:00:22 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-01-01 10:01:45 +0100
commiteea3857065ced3ed16d467068ca2a1f859ef6e2e (patch)
treeb3cf4d8e021e4b8230a46dd98e34a0aeaa39eae8 /src
parenta8fc74a033f2fe264d13d15fdbfd12cb0b0edf77 (diff)
downloadbox64-eea3857065ced3ed16d467068ca2a1f859ef6e2e.tar.gz
box64-eea3857065ced3ed16d467068ca2a1f859ef6e2e.zip
[DYNAREC] Added some more Memory Barrier when trying to emulate StrongMem model (should help RimWorld)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_00.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c
index 4cd18a25..77451bb1 100755
--- a/src/dynarec/dynarec_arm64_00.c
+++ b/src/dynarec/dynarec_arm64_00.c
@@ -926,6 +926,10 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             } else {                    // mem <= reg
                 addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, 0, 0);
                 STRxw_U12(gd, ed, fixedaddress);
+                if(box64_dynarec_strongmem && 
+                 (dyn->insts[ninst].x64.barrier || box64_dynarec_strongmem>1 || (dyn->insts[ninst+1].x64.barrier || dyn->insts[ninst+1].x64.jmp))) {
+                    DMB_ISH();
+                }
             }
             break;
         case 0x8A: