aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2018-11-06 11:45:11 +0100
committerJan Beulich <jbeulich@suse.com>2018-11-06 11:45:11 +0100
commit9819647a63bfca45a879650ac23fe80f51b89edb (patch)
treeb66dab102a91cab94582794f77b2ec8ae96f2a81 /opcodes
parent58a211d2602df0a39779c84a344b1b4d12deb2d0 (diff)
downloadgdb-9819647a63bfca45a879650ac23fe80f51b89edb.zip
gdb-9819647a63bfca45a879650ac23fe80f51b89edb.tar.gz
gdb-9819647a63bfca45a879650ac23fe80f51b89edb.tar.bz2
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.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/i386-dis-evex.h14
-rw-r--r--opcodes/i386-dis.c2
3 files changed, 8 insertions, 14 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 2212d8e..70b95f3 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,11 @@
2018-11-06 Jan Beulich <jbeulich@suse.com>
+ * i386-dis.c (EVEX_W_0F6E_P_2, EVEX_W_0F7E_P_2): Delete.
+ * i386-dis-evex.h (evex_table): Move vmov[dq} with GPR operand
+ cases up one level in the hierarchy.
+
+2018-11-06 Jan Beulich <jbeulich@suse.com>
+
* i386-dis.c (MOD_VEX_W_0_0F92_P_3_LEN_0,
MOD_VEX_W_1_0F92_P_3_LEN_0): Fold into MOD_VEX_0F92_P_3_LEN_0.
(MOD_VEX_W_0_0F93_P_3_LEN_0, MOD_VEX_W_1_0F93_P_3_LEN_0): Fold
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 */
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index f3fbf19..3f3fd36 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -2100,7 +2100,6 @@ enum
EVEX_W_0F6B_P_2,
EVEX_W_0F6C_P_2,
EVEX_W_0F6D_P_2,
- EVEX_W_0F6E_P_2,
EVEX_W_0F6F_P_1,
EVEX_W_0F6F_P_2,
EVEX_W_0F6F_P_3,
@@ -2121,7 +2120,6 @@ enum
EVEX_W_0F7B_P_2,
EVEX_W_0F7B_P_3,
EVEX_W_0F7E_P_1,
- EVEX_W_0F7E_P_2,
EVEX_W_0F7F_P_1,
EVEX_W_0F7F_P_2,
EVEX_W_0F7F_P_3,