diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-24 14:31:59 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-24 14:31:59 +0200 |
| commit | 15a4be2db14420b30de25a7386b4dab39be00ac2 (patch) | |
| tree | d56479c42b8adab2a004c9cb882f4b0c29857aa2 /src | |
| parent | 0c71d8d4e6ac8562074b3731153c8a46dc5eee33 (diff) | |
| download | box64-15a4be2db14420b30de25a7386b4dab39be00ac2.tar.gz box64-15a4be2db14420b30de25a7386b4dab39be00ac2.zip | |
[ARM64_DYNAREC] Added 66 0F BF opcode (and cosmetic fix on interpreter)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_660f.c | 14 | ||||
| -rw-r--r-- | src/emu/x64run660f.c | 4 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index c967374d..8a385ca4 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -2635,6 +2635,20 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } BFIx(gd, x1, 0, 16); break; + case 0xBF: + INST_NAME("MOVSX Gw, Ew"); + nextop = F8; + GETGW(x1); + if(MODREG) { + ed = xRAX+(nextop&7)+(rex.b<<3); + SXTHxw(gd, ed); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, &unscaled, 0xfff<<1, 1, rex, NULL, 0, 0); + LDSHxw(gd, ed, fixedaddress); + } + GWBACK; + break; case 0xC1: INST_NAME("XADD Gw, Ew"); diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index 35fd6eab..cc7ef8a2 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -2123,9 +2123,9 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) GETEW(0); GETGW; if(rex.w) - GW->sq[0] = EB->sword[0]; + GW->sq[0] = EW->sword[0]; else - GW->sword[0] = EB->sword[0]; + GW->sword[0] = EW->sword[0]; break; case 0xC1: /* XADD Gw,Ew */ // Xchange and Add |