From 9819647a63bfca45a879650ac23fe80f51b89edb Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 6 Nov 2018 11:45:11 +0100 Subject: x86: correctly handle VMOVD with EVEX.W set outside of 64-bit mode For the flavors having a GPR operand EVEX.W is ignored outside of 64-bit mode. The mnemonic should therefore not be KMOVQ, the GPR operand should not name a non-existing 64-bit register, just like is already the case for the AVX counterparts, and the Disp8 scaling factor should be 4 rather than 8. --- opcodes/i386-dis-evex.h | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'opcodes/i386-dis-evex.h') diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h index 22c9165..84eaf83 100644 --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -3299,11 +3299,6 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { "vpunpckhqdq", { XM, Vex, EXx }, 0 }, }, - /* EVEX_W_0F6E_P_2 */ - { - { "vmovd", { XMScalar, Ed }, 0 }, - { "vmovq", { XMScalar, Eq }, 0 }, - }, /* EVEX_W_0F6F_P_1 */ { { "vmovdqu32", { XM, EXEvexXNoBcst }, 0 }, @@ -3400,11 +3395,6 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { "vmovq", { XMScalar, EXxmm_mq }, 0 }, }, - /* EVEX_W_0F7E_P_2 */ - { - { "vmovd", { Ed, XMScalar }, 0 }, - { "vmovq", { Eq, XMScalar }, 0 }, - }, /* EVEX_W_0F7F_P_1 */ { { "vmovdqu32", { EXxS, XM }, 0 }, @@ -4093,7 +4083,7 @@ static const struct dis386 evex_table[][256] = { #ifdef NEED_EVEX_LEN_TABLE /* EVEX_LEN_0F6E_P_2 */ { - { VEX_W_TABLE (EVEX_W_0F6E_P_2) }, + { "vmovK", { XMScalar, Edq }, 0 }, }, /* EVEX_LEN_0F7E_P_1 */ @@ -4103,7 +4093,7 @@ static const struct dis386 evex_table[][256] = { /* EVEX_LEN_0F7E_P_2 */ { - { VEX_W_TABLE (EVEX_W_0F7E_P_2) }, + { "vmovK", { Edq, XMScalar }, 0 }, }, /* EVEX_LEN_0FD6_P_2 */ -- cgit v1.1