diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-26 15:42:54 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-26 15:42:54 +0100 |
| commit | 3e811f869e843443a85d693d7b5a2831aa13ca6b (patch) | |
| tree | bc7e351e6c20b00901c1b8b595c66f50750e0e29 /src | |
| parent | 1f17a575284a43f37c880900e8ff7347f97ad82d (diff) | |
| download | box64-3e811f869e843443a85d693d7b5a2831aa13ca6b.tar.gz box64-3e811f869e843443a85d693d7b5a2831aa13ca6b.zip | |
Added 66 0F 16/17 ocpode ([DYNAREC] too)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_660f.c | 24 | ||||
| -rw-r--r-- | src/emu/x64run660f.c | 12 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c index 9d575f94..c35f0224 100755 --- a/src/dynarec/dynarec_arm64_660f.c +++ b/src/dynarec/dynarec_arm64_660f.c @@ -119,6 +119,30 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VLD1_64(v0, 1, ed); } break; + case 0x16: + INST_NAME("MOVHPD Gx, Eq"); + nextop = F8; + GETGX(v0); + if(MODREG) { + // access register instead of memory is bad opcode! + DEFAULT; + return addr; + } + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0, rex, 0, 0); + VLD1_64(v0, 1, ed); + break; + case 0x17: + INST_NAME("MOVHPD Eq, Gx"); + nextop = F8; + GETGX(v0); + if(MODREG) { + // access register instead of memory is bad opcode! + DEFAULT; + return addr; + } + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0, rex, 0, 0); + VST1_64(v0, 1, ed); + break; case 0x1F: INST_NAME("NOP (multibyte)"); diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index abcf0253..0f7c0f80 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -78,6 +78,18 @@ int Run660F(x64emu_t *emu, rex_t rex) GX->q[0] = GX->q[1]; GX->q[1] = EX->q[1]; break; + case 0x16: /* MOVHPD Gx, Ed */ + nextop = F8; + GETED(0); + GETGX; + GX->q[1] = ED->q[0]; + break; + case 0x17: /* MOVHPD Ed, Gx */ + nextop = F8; + GETED(0); + GETGX; + ED->q[0] = GX->q[1]; + break; case 0x1F: /* NOP (multi-byte) */ nextop = F8; |