From 0329bbc55e914fe813c6b3d4002ea46297862d09 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 16 Sep 2023 16:55:29 +0200 Subject: [ARM64_DYNAREC] Added 64/65 01/21/29/31 opcodes --- src/dynarec/arm64/dynarec_arm64_64.c | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index 5f91ec76..ed80d97b 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -58,6 +58,16 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch(opcode) { + case 0x01: + INST_NAME("ADD Seg:Ed, Gd"); + SETFLAGS(X_ALL, SF_SET_PENDING); + grab_segdata(dyn, addr, ninst, x4, seg); + nextop = F8; + GETGD; + GETEDO(x4, 0); + emit_add32(dyn, ninst, rex, ed, gd, x3, x5); + WBACKO(x4); + break; case 0x03: INST_NAME("ADD Gd, Seg:Ed"); SETFLAGS(X_ALL, SF_SET_PENDING); @@ -268,6 +278,28 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x21: + INST_NAME("AND Seg:Ed, Gd"); + SETFLAGS(X_ALL, SF_SET_PENDING); + grab_segdata(dyn, addr, ninst, x4, seg); + nextop = F8; + GETGD; + GETEDO(x4, 0); + emit_and32(dyn, ninst, rex, ed, gd, x3, x5); + WBACKO(x4); + break; + + case 0x29: + INST_NAME("SUB Seg:Ed, Gd"); + SETFLAGS(X_ALL, SF_SET_PENDING); + grab_segdata(dyn, addr, ninst, x4, seg); + nextop = F8; + GETGD; + GETEDO(x4, 0); + emit_sub32(dyn, ninst, rex, ed, gd, x3, x5); + WBACKO(x4); + break; + case 0x2B: INST_NAME("SUB Gd, Seg:Ed"); SETFLAGS(X_ALL, SF_SET_PENDING); @@ -278,6 +310,17 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_sub32(dyn, ninst, rex, gd, ed, x3, x4); break; + case 0x31: + INST_NAME("XOR Seg:Ed, Gd"); + SETFLAGS(X_ALL, SF_SET_PENDING); + grab_segdata(dyn, addr, ninst, x4, seg); + nextop = F8; + GETGD; + GETEDO(x4, 0); + emit_xor32(dyn, ninst, rex, ed, gd, x3, x5); + WBACKO(x4); + break; + case 0x33: INST_NAME("XOR Gd, Seg:Ed"); SETFLAGS(X_ALL, SF_SET_PENDING); -- cgit 1.4.1