about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-18 17:35:39 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-18 17:35:39 +0100
commitadea4ceef2b17111a60298f8ea57225f923e80fb (patch)
treed6fe6f292662986bfb55617a21690650951b5d71
parentcc85f793220ad65089c11340a9ddd3168fe3be32 (diff)
downloadbox64-adea4ceef2b17111a60298f8ea57225f923e80fb.tar.gz
box64-adea4ceef2b17111a60298f8ea57225f923e80fb.zip
[DYNAREC] Fixed PF flags computation
-rwxr-xr-xsrc/dynarec/dynarec_arm64_emit_math.c2
-rwxr-xr-xsrc/dynarec/dynarec_arm64_helper.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/dynarec/dynarec_arm64_emit_math.c b/src/dynarec/dynarec_arm64_emit_math.c
index 4e172e56..fcd2a73c 100755
--- a/src/dynarec/dynarec_arm64_emit_math.c
+++ b/src/dynarec/dynarec_arm64_emit_math.c
@@ -904,7 +904,7 @@ void emit_dec32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s3, int s4
         ANDxw_REG(s3, s3, s1);   // s3 = (~op1 | op2) & res
         ORRxw_REG(s3, s3, s4);   // s4 = (~op1 & op2) | ((~op1 | op2) & ~ res)
         LSRxw(s4, s3, 3);
-        BFIxw(xFlags, s4, F_AF, 1);    // AF: bc & 0x08
+        BFIw(xFlags, s4, F_AF, 1);    // AF: bc & 0x08
     }
     IFX(X_ZF|X_OF) {
         MOV32w(s3, (1<<F_ZF)|(1<<F_OF));
diff --git a/src/dynarec/dynarec_arm64_helper.c b/src/dynarec/dynarec_arm64_helper.c
index 2f257929..24aca546 100755
--- a/src/dynarec/dynarec_arm64_helper.c
+++ b/src/dynarec/dynarec_arm64_helper.c
@@ -977,7 +977,7 @@ void fpu_reset(dynarec_arm_t* dyn, int ninst)
 void emit_pf(dynarec_arm_t* dyn, int ninst, int s1, int s3, int s4)
 {
     // PF: (((emu->x64emu_parity_tab[(res) / 32] >> ((res) % 32)) & 1) == 0)
-    ANDw_mask(s3, s1, 0b011011, 000010); // lsr 5 masking pre-applied
+    ANDw_mask(s3, s1, 0b011011, 0b000010); // mask=0xE0
     LSRw(s3, s3, 5);
     MOV64x(s4, (uintptr_t)GetParityTab());
     LDRw_REG_LSL2(s4, s4, s3);