diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-09 10:56:40 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-09 10:56:40 +0100 |
| commit | 90fd2ff6a34ac1dca08adda2dc8d01c17a7401be (patch) | |
| tree | c827dda67e1f7f9a9c0a189255c3f00b630e4647 | |
| parent | 3a40b9f3a3741de127997263ee3821d0b29d4b48 (diff) | |
| download | box64-90fd2ff6a34ac1dca08adda2dc8d01c17a7401be.tar.gz box64-90fd2ff6a34ac1dca08adda2dc8d01c17a7401be.zip | |
[ARM64_DYNAREC] More accurate 0F BA opcodes on 64bits without rex.w
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 6 |
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; |