diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-21 16:04:28 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-21 16:04:28 +0100 |
| commit | eb96a1c03afbf23fb94087e83ebd8b422b14a385 (patch) | |
| tree | 1dcf456edd8e0c8d6733213df20f61e03dd96e2a /src | |
| parent | e99387aa8392154a4ca70a680c55fab910e2534a (diff) | |
| download | box64-eb96a1c03afbf23fb94087e83ebd8b422b14a385.tar.gz box64-eb96a1c03afbf23fb94087e83ebd8b422b14a385.zip | |
[DYNAREC] Added 63 opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_00.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index 13172dfb..652698f5 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -523,6 +523,27 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } 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 + addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, 0, 0); + LDRSW_U12(gd, ed, fixedaddress); + } + } else { + if(MODREG) { // reg <= reg + MOVw_REG(gd, xRAX+(nextop&7)+(rex.b<<3)); + } else { // mem <= reg + addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, 0, 0); + LDRw_U12(gd, ed, fixedaddress); + } + } + break; + case 0x66: addr = dynarec64_66(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); break; |