From 50398acc97fefb99ab73798be3cd2751d3a2e998 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 4 Mar 2021 20:17:43 +0100 Subject: Added REX D1/D3 opcodes --- src/emu/x64run.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src') diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 1eacb1a7..4dc8851d 100755 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -406,6 +406,36 @@ x64emurun: if(emu->quit) goto fini; break; + case 0xD1: /* GRP2 Ed,1 */ + case 0xD3: /* GRP2 Ed,CL */ + nextop = F8; + GETED; + tmp8u = (opcode==0xD1)?1:R_CL; + if(rex.w) { + switch((nextop>>3)&7) { + case 0: ED->q[0] = rol64(emu, ED->q[0], tmp8u); break; + case 1: ED->q[0] = ror64(emu, ED->q[0], tmp8u); break; + case 2: ED->q[0] = rcl64(emu, ED->q[0], tmp8u); break; + case 3: ED->q[0] = rcr64(emu, ED->q[0], tmp8u); break; + case 4: + case 6: ED->q[0] = shl64(emu, ED->q[0], tmp8u); break; + case 5: ED->q[0] = shr64(emu, ED->q[0], tmp8u); break; + case 7: ED->q[0] = sar64(emu, ED->q[0], tmp8u); break; + } + } else { + switch((nextop>>3)&7) { + case 0: ED->dword[0] = rol32(emu, ED->dword[0], tmp8u); break; + case 1: ED->dword[0] = ror32(emu, ED->dword[0], tmp8u); break; + case 2: ED->dword[0] = rcl32(emu, ED->dword[0], tmp8u); break; + case 3: ED->dword[0] = rcr32(emu, ED->dword[0], tmp8u); break; + case 4: + case 6: ED->dword[0] = shl32(emu, ED->dword[0], tmp8u); break; + case 5: ED->dword[0] = shr32(emu, ED->dword[0], tmp8u); break; + case 7: ED->dword[0] = sar32(emu, ED->dword[0], tmp8u); break; + } + } + break; + case 0xE8: /* CALL Id */ tmp32s = F32S; // call is relative Push(emu, R_RIP); -- cgit 1.4.1