From 90fd2ff6a34ac1dca08adda2dc8d01c17a7401be Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 9 Nov 2023 10:56:40 +0100 Subject: [ARM64_DYNAREC] More accurate 0F BA opcodes on 64bits without rex.w --- src/dynarec/arm64/dynarec_arm64_0f.c | 6 +----- 1 file changed, 1 insertion(+), 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; -- cgit 1.4.1