about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-09-04 12:19:08 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-09-04 12:19:08 +0200
commit8b80cc328f6501119bacfc1c19a1080d493f5093 (patch)
treebfeb1d4c5d894ecb7d036358b3cf1b62e5af12af /src
parent72986e8ba350ced2d86904c704a2d8c756c3d14b (diff)
downloadbox64-8b80cc328f6501119bacfc1c19a1080d493f5093.tar.gz
box64-8b80cc328f6501119bacfc1c19a1080d493f5093.zip
[DYNAREC] Fixed (agaim) BTR/BTS/BTC with imm8==0
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index 68a68ad3..d8621a4a 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -1340,6 +1340,8 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     u8&=(rex.w?0x3f:0x1f);

                     if(u8) {

                         LSRxw(x4, ed, u8);

+                    } else {

+                        MOVw_REG(x4, ed);

                     }

                     BFIw(xFlags, x4, F_CF, 1);

                     TBNZ_MARK3(x4, 0); // bit already set, jump to next instruction

@@ -1366,6 +1368,8 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     u8&=(rex.w?0x3f:0x1f);

                     if(u8) {

                         LSRxw(x4, ed, u8);

+                    } else {

+                        MOVw_REG(x4, ed);

                     }

                     BFIw(xFlags, x4, F_CF, 1);

                     TBZ_MARK3(x4, 0); // bit already clear, jump to next instruction

@@ -1392,6 +1396,8 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     u8&=(rex.w?0x3f:0x1f);

                     if(u8) {

                         LSRxw(x4, ed, u8);

+                    } else {

+                        MOVw_REG(x4, ed);

                     }

                     BFIw(xFlags, x4, F_CF, 1);

                     MOV32w(x4, 1);