about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-29 15:19:38 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-10-29 15:19:38 +0100
commit4a440b6f0ab7cf63ed8f19783579e037a9e5be5f (patch)
treec614d6ae3e6b33111d2d3fa387b5c45f2a6ddbbe /src
parentfdfc5c4a419712953c1084fcdaf42af8895cd95b (diff)
downloadbox64-4a440b6f0ab7cf63ed8f19783579e037a9e5be5f.tar.gz
box64-4a440b6f0ab7cf63ed8f19783579e037a9e5be5f.zip
[ARM64_DYNAREC] Make sure neg on 16bits is correctly computed
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_emit_math.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_emit_math.c b/src/dynarec/arm64/dynarec_arm64_emit_math.c
index 4478b1ab..b443c312 100644
--- a/src/dynarec/arm64/dynarec_arm64_emit_math.c
+++ b/src/dynarec/arm64/dynarec_arm64_emit_math.c
@@ -1726,10 +1726,11 @@ void emit_neg16(dynarec_arm_t* dyn, int ninst, int s1, int s3, int s4)
     IFX(X_AF|X_OF) {
         MOVw_REG(s3, s1);
     }
+    NEGw_REG(s1, s1);
     IFX(X_ZF) {
-        NEGSw_REG(s1, s1);
+        ANDSw_mask(s1, s1, 0, 15);  //mask=0xffff
     } else {
-        NEGw_REG(s1, s1);
+        ANDw_mask(s1, s1, 0, 15);   //mask=0xffff
     }
     IFX(X_PEND) {
         STRH_U12(s1, xEmu, offsetof(x64emu_t, res));