From f94ceccc8aa8a51f644798686154b29bae63aa74 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 22 Mar 2021 21:16:42 +0100 Subject: [DYNAREC] Added (F2/F3) AE opcode --- src/dynarec/dynarec_arm64_00.c | 49 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index a4351282..148cbe92 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -992,7 +992,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xA6: switch(rep) { case 1: - INST_NAME("REPZ CMPSB"); + INST_NAME("REPNZ CMPSB"); SETFLAGS(X_ALL, SF_SET); GETDIR(x3, 1); CBZx_NEXT(xRCX); @@ -1008,7 +1008,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5); break; case 2: - INST_NAME("REPNZ CMPSB"); + INST_NAME("REPZ CMPSB"); SETFLAGS(X_ALL, SF_SET); GETDIR(x3, 1); CBZx_NEXT(xRCX); @@ -1052,6 +1052,51 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_test32(dyn, ninst, rex, xRAX, x2, x3, x4); break; + case 0xAE: + switch(rep) { + case 1: + INST_NAME("REPNZ SCASB"); + SETFLAGS(X_ALL, SF_SET); + GETDIR(x3, 1); + CBZx_NEXT(xRCX); + BFIw(x1, xRAX, 0, 8); + MARK; + LDRB_U12(x2, xRDI, 0); + ADDx_REG(xRDI, xRDI, x3); + SUBx_U12(xRCX, xRCX, 1); + CMPSw_REG(x1, x2); + Bcond(cEQ, 4+4); + CBNZx_MARK(xRCX); + emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5); + break; + case 2: + INST_NAME("REPZ SCASB"); + SETFLAGS(X_ALL, SF_SET); + GETDIR(x3, 1); + CBZx_NEXT(xRCX); + BFIw(x1, xRAX, 0, 8); + MARK; + LDRB_U12(x2, xRDI, 0); + ADDx_REG(xRDI, xRDI, x3); + SUBx_U12(xRCX, xRCX, 1); + CMPSw_REG(x1, x2); + Bcond(cNE, 4+4); + CBNZx_MARK(xRCX); + emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5); + break; + default: + INST_NAME("SCASB"); + SETFLAGS(X_ALL, SF_SET); + GETDIR(x3, 1); + BFIw(x1, xRAX, 0, 8); + LDRB_U12(x2, xRDI, 0); + ADDx_REG(xRDI, xRDI, x3); + emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5); + break; + } + break; + + case 0xB0: case 0xB1: case 0xB2: -- cgit 1.4.1