From f7567c89bdb6ce02b95ceabae1efe3bd5ae9063d Mon Sep 17 00:00:00 2001 From: Alexis Engelke Date: Sat, 23 Jan 2021 16:44:16 +0100 Subject: [PATCH] instrs: Fix VMOVSS/VMOVSD with memory operand --- instrs.txt | 6 ++++-- tests/test_decode.c | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/instrs.txt b/instrs.txt index 45c6f36..d5d592e 100644 --- a/instrs.txt +++ b/instrs.txt @@ -881,8 +881,10 @@ VEX.66.L0.0f3adf RMI XMM XMM IMM8 - VAESKEYGENASSIST # AVX VEX.NP.0f10 RM XMM XMM - - VMOVUPS VEX.66.0f10 RM XMM XMM - - VMOVUPD -VEX.F3.LIG.0f10 RVM XMM128 XMM128 XMM32 - VMOVSS -VEX.F2.LIG.0f10 RVM XMM128 XMM128 XMM64 - VMOVSD +VEX.F3.LIG.0f10/m RM XMM128 XMM32 - - VMOVSS +VEX.F3.LIG.0f10/r RVM XMM128 XMM128 XMM32 - VMOVSS +VEX.F2.LIG.0f10/m RM XMM128 XMM64 - - VMOVSD +VEX.F2.LIG.0f10/r RVM XMM128 XMM128 XMM64 - VMOVSD VEX.NP.0f11 MR XMM XMM - - VMOVUPS VEX.66.0f11 MR XMM XMM - - VMOVUPD VEX.F3.LIG.0f11/m MR XMM32 XMM32 - - VMOVSS diff --git a/tests/test_decode.c b/tests/test_decode.c index 917f0eb..29b624f 100644 --- a/tests/test_decode.c +++ b/tests/test_decode.c @@ -413,6 +413,8 @@ main(int argc, char** argv) TEST32("\xc4\xe1\xf9\x6e\xc8", "vmovd xmm1, eax"); TEST("\xc5\xf2\x10\xc2", "vmovss xmm0, xmm1, xmm2"); TEST("\xc5\xf6\x10\xc2", "vmovss xmm0, xmm1, xmm2"); // VEX.L=1 + TEST("\xc5\xfa\x10\x04\x25\x34\x12\x00\x00", "vmovss xmm0, dword ptr [0x1234]"); + TEST("\xc5\xf2\x10\x04\x25\x34\x12\x00\x00", "UD"); // VEX.vvvv != 0 TEST("\xc5\xfa\x11\x04\x25\x34\x12\x00\x00", "vmovss dword ptr [0x1234], xmm0"); TEST("\xc5\xf2\x11\x04\x25\x34\x12\x00\x00", "UD"); // VEX.vvvv != 0 TEST("\xc5\xf2\x2a\xc0", "vcvtsi2ss xmm0, xmm1, eax");