From 3e811f869e843443a85d693d7b5a2831aa13ca6b Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 26 Mar 2021 15:42:54 +0100 Subject: Added 66 0F 16/17 ocpode ([DYNAREC] too) --- src/dynarec/dynarec_arm64_660f.c | 24 ++++++++++++++++++++++++ src/emu/x64run660f.c | 12 ++++++++++++ 2 files changed, 36 insertions(+) (limited to 'src') 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; -- cgit 1.4.1