about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-11-09 10:56:40 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-11-09 10:56:40 +0100
commit90fd2ff6a34ac1dca08adda2dc8d01c17a7401be (patch)
treec827dda67e1f7f9a9c0a189255c3f00b630e4647 /src
parent3a40b9f3a3741de127997263ee3821d0b29d4b48 (diff)
downloadbox64-90fd2ff6a34ac1dca08adda2dc8d01c17a7401be.tar.gz
box64-90fd2ff6a34ac1dca08adda2dc8d01c17a7401be.zip
[ARM64_DYNAREC] More accurate 0F BA opcodes on 64bits without rex.w
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_0f.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 2dc7f064..7b7cc338 100644
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -1585,14 +1585,12 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     u8 = F8;

                     u8&=(rex.w?0x3f:0x1f);

                     BFXILxw(xFlags, ed, u8, 1);  // inject 1 bit from u8 to F_CF (i.e. pos 0)

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

                     MOV32w(x4, 1);

                     ORRxw_REG_LSL(ed, ed, x4, u8);

                     if(wback) {

                         STxw(ed, wback, fixedaddress);

                         SMWRITE();

                     }

-                    MARK3;

                     break;

                 case 6:

                     INST_NAME("BTR Ed, Ib");

@@ -1610,14 +1608,13 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     u8 = F8;

                     u8&=(rex.w?0x3f:0x1f);

                     BFXILxw(xFlags, ed, u8, 1);  // inject 1 bit from u8 to F_CF (i.e. pos 0)

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

+                    UBFXw(x4, xFlags, 0, 1);

                     MOV32w(x4, 1);

                     BICxw_REG_LSL(ed, ed, x4, u8);

                     if(wback) {

                         STxw(ed, wback, fixedaddress);

                         SMWRITE();

                     }

-                    MARK3;

                     break;

                 case 7:

                     INST_NAME("BTC Ed, Ib");

@@ -1641,7 +1638,6 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STxw(ed, wback, fixedaddress);

                         SMWRITE();

                     }

-                    MARK3;

                     break;

                 default:

                     DEFAULT;