about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-05-15 16:47:49 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-05-15 16:47:49 +0200
commitf6cd825ab96ae489026fd5062d0d61321a618482 (patch)
tree17f197d94706408b34c7a7dc7d2e392eadafe087 /src
parentf8fa4387286a2df51c2020c9a29badd6cc7e5375 (diff)
downloadbox64-f6cd825ab96ae489026fd5062d0d61321a618482.tar.gz
box64-f6cd825ab96ae489026fd5062d0d61321a618482.zip
[ARM64_DYNAREC] Fixed a potential issue with 0F B1 opcode
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_0f.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 8f6a46e9..1172789a 100644
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -1899,7 +1899,13 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 UFLAG_IF {emit_cmp32(dyn, ninst, rex, xRAX, ed, x3, x4, x5);}

                 MOVxw_REG(x1, ed);  // save value

                 CMPSxw_REG(xRAX, x1);

-                CSELxw(ed, gd, ed, cEQ);

+                if(rex.w) {

+                    CSELxw(ed, gd, ed, cEQ);

+                } else {

+                    B_MARK2(cNE);

+                    MOVw_REG(ed, gd);

+                    MARK2;

+                }

             } else {

                 addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, &unscaled, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, NULL, 0, 0);

                 LDxw(x1, wback, fixedaddress);