diff options
| author | ptitSeb <seebastien.chev@gmail.com> | 2023-09-16 16:55:29 +0200 |
|---|---|---|
| committer | ptitSeb <seebastien.chev@gmail.com> | 2023-09-16 16:55:29 +0200 |
| commit | 0329bbc55e914fe813c6b3d4002ea46297862d09 (patch) | |
| tree | 31cf31b5c7e2bb05d95a7d7dc1b85013b5a6117e | |
| parent | c9549e8ab6b162df263138ce92d2f9536cf3ff8d (diff) | |
| download | box64-0329bbc55e914fe813c6b3d4002ea46297862d09.tar.gz box64-0329bbc55e914fe813c6b3d4002ea46297862d09.zip | |
[ARM64_DYNAREC] Added 64/65 01/21/29/31 opcodes
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_64.c | 43 |
1 files changed, 43 insertions, 0 deletions
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); |