diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-09-16 20:54:40 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-09-16 20:54:40 +0200 |
| commit | 2b1e12dafd022b8a3627092d07f5cdf9059c8f64 (patch) | |
| tree | 44b1cfdc1d5c8cbced27ab3decbea6b3911ffeb9 | |
| parent | b4ca2be9e01492c053c64b3d43c08e9d31957de5 (diff) | |
| download | box64-2b1e12dafd022b8a3627092d07f5cdf9059c8f64.tar.gz box64-2b1e12dafd022b8a3627092d07f5cdf9059c8f64.zip | |
Fixed 66 0F 3A 22 opcode for REX.W ([DYNAREC] too) (should help #81)
| -rwxr-xr-x | src/dynarec/dynarec_arm64_660f.c | 6 | ||||
| -rw-r--r-- | src/emu/x64run660f.c | 5 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c index b1049e96..8f7882d5 100755 --- a/src/dynarec/dynarec_arm64_660f.c +++ b/src/dynarec/dynarec_arm64_660f.c @@ -532,7 +532,11 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(q0); GETED(1); u8 = F8; - VMOVQSfrom(q0, (u8&3), ed); + if(rex.w) { + VMOVQDfrom(q0, (u8&1), ed); + } else { + VMOVQSfrom(q0, (u8&3), ed); + } break; default: diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index 6f0a4d9d..1e7fcdf8 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -647,7 +647,10 @@ int Run660F(x64emu_t *emu, rex_t rex) GETED(1); GETGX; tmp8u = F8; - GX->ud[tmp8u&0x3] = ED->dword[0]; + if(rex.w) + GX->q[tmp8u&0x1] = ED->q[0]; + else + GX->ud[tmp8u&0x3] = ED->dword[0]; break; case 0x40: /* DPPS Gx, Ex, Ib */ |