From 73b17d4add139ecb590781042f55c98331aced5b Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 24 Nov 2024 15:28:21 +0100 Subject: [ARM64_DYNAREC] Fix a regression, as 90 opcode is not always NOP depending on REX (should help #2064) --- src/dynarec/arm64/dynarec_arm64_00.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index eed47b7a..3380911c 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -1416,13 +1416,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; case 0x90: - if (rep == 2) { - INST_NAME("PAUSE"); - WFE; - } else { - INST_NAME("NOP"); - } - break; case 0x91: case 0x92: case 0x93: @@ -1430,11 +1423,20 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x95: case 0x96: case 0x97: - INST_NAME("XCHG EAX, Reg"); - gd = xRAX + (opcode & 0x07) + (rex.b << 3); - MOVxw_REG(x2, xRAX); - MOVxw_REG(xRAX, gd); - MOVxw_REG(gd, x2); + gd = xRAX+(opcode&0x07)+(rex.b<<3); + if(gd==xRAX) { + if (rep == 2) { + INST_NAME("PAUSE"); + WFE; + } else { + INST_NAME("NOP"); + } + } else { + INST_NAME("XCHG EAX, Reg"); + MOVxw_REG(x2, xRAX); + MOVxw_REG(xRAX, gd); + MOVxw_REG(gd, x2); + } break; case 0x98: -- cgit 1.4.1