aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2020-07-06 13:41:27 +0200
committerJan Beulich <jbeulich@suse.com>2020-07-06 13:41:27 +0200
commite74d9fa9cf7cbbcd290b74564d58456611a019bf (patch)
tree6a390c76c163f5cfe506794d3dd657950f85d0ab /opcodes
parent6431c8015b1d8a75facbd2d0ec6a4f1e98167f72 (diff)
downloadgdb-e74d9fa9cf7cbbcd290b74564d58456611a019bf.zip
gdb-e74d9fa9cf7cbbcd290b74564d58456611a019bf.tar.gz
gdb-e74d9fa9cf7cbbcd290b74564d58456611a019bf.tar.bz2
x86: AVX512 extract/insert insns need to honor EVEX.L'L
Just like their AVX counterparts do for VEX.L. At this occasion also make EVEX.W have the same effect as VEX.W on the printing of VPINSR{B,W}'s operands, bringing them also in sync with VPEXTR{B,W}.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog13
-rw-r--r--opcodes/i386-dis-evex-len.h45
-rw-r--r--opcodes/i386-dis-evex-prefix.h16
-rw-r--r--opcodes/i386-dis-evex-w.h2
-rw-r--r--opcodes/i386-dis.c9
5 files changed, 76 insertions, 9 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 296ef26..62f8a08 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,18 @@
2020-07-06 Jan Beulich <jbeulich@suse.com>
+ * i386-dis.c (EVEX_LEN_0FC4_P_2, EVEX_LEN_0FC5_P_2,
+ EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2, EVEX_LEN_0F3A16_P_2,
+ EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A20_P_2,
+ EVEX_LEN_0F3A21_P_2_W_0, EVEX_LEN_0F3A22_P_2): New enumerators.
+ * i386-dis-evex-len.h (evex_len_table): New EVEX_LEN_0FC4_P_2,
+ EVEX_LEN_0FC5_P_2, EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2,
+ EVEX_LEN_0F3A16_P_2, EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A20_P_2,
+ EVEX_LEN_0F3A21_P_2_W_0, and EVEX_LEN_0F3A22_P_2 table entries.
+ * i386-dis-evex-prefix.h, i386-dis-evex-w.h: Reference the above
+ entries.
+
+2020-07-06 Jan Beulich <jbeulich@suse.com>
+
* i386-dis.c (PREFIX_EVEX_0F3A1D, EVEX_W_0F3A1D_P_2): Delete.
(VEX_W_0F3813_P_2, VEX_W_0F3A1D_P_2): New enumerators.
(prefix_table): Reference VEX_W_0F3813_P_2 and VEX_W_0F3A1D_P_2
diff --git a/opcodes/i386-dis-evex-len.h b/opcodes/i386-dis-evex-len.h
index ce58199..51ce98f 100644
--- a/opcodes/i386-dis-evex-len.h
+++ b/opcodes/i386-dis-evex-len.h
@@ -14,6 +14,16 @@ static const struct dis386 evex_len_table[][3] = {
{ "vmovK", { Edq, XMScalar }, 0 },
},
+ /* EVEX_LEN_0FC4_P_2 */
+ {
+ { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0FC5_P_2 */
+ {
+ { "vpextrw", { Gdq, XS, Ib }, 0 },
+ },
+
/* EVEX_LEN_0FD6_P_2 */
{
{ VEX_W_TABLE (EVEX_W_0FD6_P_2) },
@@ -173,6 +183,26 @@ static const struct dis386 evex_len_table[][3] = {
{ "vscatterpf1qpd", { MVexVSIBQWpX }, 0 },
},
+ /* EVEX_LEN_0F3A14_P_2 */
+ {
+ { "vpextrb", { Edqb, XM, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A15_P_2 */
+ {
+ { "vpextrw", { Edqw, XM, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A16_P_2 */
+ {
+ { "vpextrK", { Edq, XM, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A17_P_2 */
+ {
+ { "vextractps", { Edqd, XMM, Ib }, 0 },
+ },
+
/* EVEX_LEN_0F3A18_P_2_W_0 */
{
{ Bad_Opcode },
@@ -229,6 +259,21 @@ static const struct dis386 evex_len_table[][3] = {
{ "vextractf64x4", { EXxmmq, XM, Ib }, 0 },
},
+ /* EVEX_LEN_0F3A20_P_2 */
+ {
+ { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A21_P_2_W_0 */
+ {
+ { "vinsertps", { XMM, Vex, EXxmm_md, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A22_P_2 */
+ {
+ { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
+ },
+
/* EVEX_LEN_0F3A23_P_2_W_0 */
{
{ Bad_Opcode },
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
index 01998c5..f5cce6f 100644
--- a/opcodes/i386-dis-evex-prefix.h
+++ b/opcodes/i386-dis-evex-prefix.h
@@ -330,13 +330,13 @@
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpinsrw", { XM, Vex128, Edw, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0FC4_P_2) },
},
/* PREFIX_EVEX_0FC5 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpextrw", { Gdq, XS, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0FC5_P_2) },
},
/* PREFIX_EVEX_0FD2 */
{
@@ -1191,25 +1191,25 @@
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpextrb", { Edqb, XM, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A14_P_2) },
},
/* PREFIX_EVEX_0F3A15 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpextrw", { Edqw, XM, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A15_P_2) },
},
/* PREFIX_EVEX_0F3A16 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpextrK", { Edq, XM, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A16_P_2) },
},
/* PREFIX_EVEX_0F3A17 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vextractps", { Edqd, XMM, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A17_P_2) },
},
/* PREFIX_EVEX_0F3A18 */
{
@@ -1251,7 +1251,7 @@
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpinsrb", { XM, Vex128, Edb, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A20_P_2) },
},
/* PREFIX_EVEX_0F3A21 */
{
@@ -1263,7 +1263,7 @@
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A22_P_2) },
},
/* PREFIX_EVEX_0F3A23 */
{
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
index ed7968a..72cd648 100644
--- a/opcodes/i386-dis-evex-w.h
+++ b/opcodes/i386-dis-evex-w.h
@@ -740,7 +740,7 @@
},
/* EVEX_W_0F3A21_P_2 */
{
- { "vinsertps", { XMM, Vex, EXxmm_md, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A21_P_2_W_0) },
},
/* EVEX_W_0F3A23_P_2 */
{
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 7f521b2..25a2f13 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1830,6 +1830,8 @@ enum
EVEX_LEN_0F6E_P_2 = 0,
EVEX_LEN_0F7E_P_1,
EVEX_LEN_0F7E_P_2,
+ EVEX_LEN_0FC4_P_2,
+ EVEX_LEN_0FC5_P_2,
EVEX_LEN_0FD6_P_2,
EVEX_LEN_0F3819_P_2_W_0,
EVEX_LEN_0F3819_P_2_W_1,
@@ -1853,6 +1855,10 @@ enum
EVEX_LEN_0F38C7_R_5_P_2_W_1,
EVEX_LEN_0F38C7_R_6_P_2_W_0,
EVEX_LEN_0F38C7_R_6_P_2_W_1,
+ EVEX_LEN_0F3A14_P_2,
+ EVEX_LEN_0F3A15_P_2,
+ EVEX_LEN_0F3A16_P_2,
+ EVEX_LEN_0F3A17_P_2,
EVEX_LEN_0F3A18_P_2_W_0,
EVEX_LEN_0F3A18_P_2_W_1,
EVEX_LEN_0F3A19_P_2_W_0,
@@ -1861,6 +1867,9 @@ enum
EVEX_LEN_0F3A1A_P_2_W_1,
EVEX_LEN_0F3A1B_P_2_W_0,
EVEX_LEN_0F3A1B_P_2_W_1,
+ EVEX_LEN_0F3A20_P_2,
+ EVEX_LEN_0F3A21_P_2_W_0,
+ EVEX_LEN_0F3A22_P_2,
EVEX_LEN_0F3A23_P_2_W_0,
EVEX_LEN_0F3A23_P_2_W_1,
EVEX_LEN_0F3A38_P_2_W_0,