diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-06-24 13:40:11 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-06-24 13:40:11 +0200 |
| commit | 179015a05004740594b509a8b552f914ddb6d64e (patch) | |
| tree | f46a91ea84cc42a5452c9c3bf3ce5365648ba898 /src | |
| parent | d34428d249b4a22b94656eb8b59c29f63075f2fc (diff) | |
| download | box64-179015a05004740594b509a8b552f914ddb6d64e.tar.gz box64-179015a05004740594b509a8b552f914ddb6d64e.zip | |
[ARM64_DYNAREC] Added 67 63 opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_67.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c index 9c7894df..58a959f1 100755 --- a/src/dynarec/arm64/dynarec_arm64_67.c +++ b/src/dynarec/arm64/dynarec_arm64_67.c @@ -605,6 +605,29 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_cmp32_0(dyn, ninst, rex, xRAX, x3, x4); break; + case 0x63: + INST_NAME("MOVSXD Gd, Ed"); + nextop = F8; + GETGD; + if(rex.w) { + if(MODREG) { // reg <= reg + SXTWx(gd, xRAX+(nextop&7)+(rex.b<<3)); + } else { // mem <= reg + SMREAD(); + addr = geted32(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); + LDSW(gd, ed, fixedaddress); + } + } else { + if(MODREG) { // reg <= reg + MOVw_REG(gd, xRAX+(nextop&7)+(rex.b<<3)); + } else { // mem <= reg + SMREAD(); + addr = geted32(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); + LDW(gd, ed, fixedaddress); + } + } + break; + case 0x81: case 0x83: nextop = F8; |