diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-27 15:40:37 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-27 15:40:47 +0100 |
| commit | 20d675ea489bf0bc540cf73be16988475ea580e0 (patch) | |
| tree | 5dd1a57a4b2567ac22576cdc3dba06f4bc8bc427 /src | |
| parent | 900dbc2a479ec703eee4d63c3ec7561d6995daf2 (diff) | |
| download | box64-20d675ea489bf0bc540cf73be16988475ea580e0.tar.gz box64-20d675ea489bf0bc540cf73be16988475ea580e0.zip | |
[ARM64_DYNAREC] copied code for F0 87 to 87 opcode, as they should behavee the same way
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 84eafed1..8bd8788a 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -1172,12 +1172,17 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETGD; addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, LOCK_LOCK, 0, 0); if(!ALIGNED_ATOMICxw) { - TSTx_mask(ed, 1, 0, 1+rex.w); // mask=3 or 7 - B_MARK(cNE); + if(arm64_uscat) { + ANDx_mask(x1, ed, 1, 0, 3); // mask = F + CMPSw_U12(x1, 16-(1<<(2+rex.w))); + B_MARK(cGT); + } else { + TSTx_mask(ed, 1, 0, 1+rex.w); // mask=3 or 7 + B_MARK(cNE); + } } if(arm64_atomics) { SWPALxw(gd, gd, ed); - SMDMB(); if(!ALIGNED_ATOMICxw) { B_NEXT_nocond; } @@ -1186,7 +1191,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDAXRxw(x1, ed); STLXRxw(x3, gd, ed); CBNZx_MARKLOCK(x3); - SMDMB(); if(!ALIGNED_ATOMICxw) { B_MARK2_nocond; } @@ -1198,9 +1202,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, gd, ed); CBNZx_MARK(x3); STRxw_U12(gd, ed, 0); - SMDMB(); MARK2; } + SMDMB(); if(!ALIGNED_ATOMICxw || !arm64_atomics) { MOVxw_REG(gd, x1); } |