diff options
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 |