aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2020-07-06 13:41:58 +0200
committerJan Beulich <jbeulich@suse.com>2020-07-06 13:41:58 +0200
commit3a57774c7b3840355b5b21818515fa2b6df3e5e9 (patch)
treef27b9d1ac1ae2c062431f735cbd57aba825b8643 /opcodes
parente74d9fa9cf7cbbcd290b74564d58456611a019bf (diff)
downloadfsf-binutils-gdb-3a57774c7b3840355b5b21818515fa2b6df3e5e9.zip
fsf-binutils-gdb-3a57774c7b3840355b5b21818515fa2b6df3e5e9.tar.gz
fsf-binutils-gdb-3a57774c7b3840355b5b21818515fa2b6df3e5e9.tar.bz2
x86: AVX512 VPERM{D,Q,PS,PD} insns need to honor EVEX.L'L
Just like (where they exist) their AVX counterparts do for VEX.L. For all of them the 128-bit forms are invalid.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog11
-rw-r--r--opcodes/i386-dis-evex-len.h28
-rw-r--r--opcodes/i386-dis-evex-prefix.h4
-rw-r--r--opcodes/i386-dis-evex-w.h4
-rw-r--r--opcodes/i386-dis.c4
5 files changed, 47 insertions, 4 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 62f8a08..c72e1d1 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,16 @@
2020-07-06 Jan Beulich <jbeulich@suse.com>
+ * i386-dis.c (EVEX_LEN_0F3816_P_2, EVEX_LEN_0F3836_P_2,
+ EVEX_LEN_0F3A00_P_2_W_1, EVEX_LEN_0F3A01_P_2_W_1): New
+ enumerators.
+ * i386-dis-evex-len.h (evex_len_table): New EVEX_LEN_0F3816_P_2,
+ EVEX_LEN_0F3836_P_2, EVEX_LEN_0F3A00_P_2_W_1, and
+ EVEX_LEN_0F3A01_P_2_W_1 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 (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,
diff --git a/opcodes/i386-dis-evex-len.h b/opcodes/i386-dis-evex-len.h
index 51ce98f..2941ab1 100644
--- a/opcodes/i386-dis-evex-len.h
+++ b/opcodes/i386-dis-evex-len.h
@@ -29,6 +29,13 @@ static const struct dis386 evex_len_table[][3] = {
{ VEX_W_TABLE (EVEX_W_0FD6_P_2) },
},
+ /* EVEX_LEN_0F3816_P_2 */
+ {
+ { Bad_Opcode },
+ { "vpermp%XW", { XM, Vex, EXx }, 0 },
+ { "vpermp%XW", { XM, Vex, EXx }, 0 },
+ },
+
/* EVEX_LEN_0F3819_P_2_W_0 */
{
{ Bad_Opcode },
@@ -71,6 +78,13 @@ static const struct dis386 evex_len_table[][3] = {
{ "vbroadcastf64x4", { XM, EXymm }, 0 },
},
+ /* EVEX_LEN_0F3836_P_2 */
+ {
+ { Bad_Opcode },
+ { "vperm%LW", { XM, Vex, EXx }, 0 },
+ { "vperm%LW", { XM, Vex, EXx }, 0 },
+ },
+
/* EVEX_LEN_0F385A_P_2_W_0 */
{
{ Bad_Opcode },
@@ -183,6 +197,20 @@ static const struct dis386 evex_len_table[][3] = {
{ "vscatterpf1qpd", { MVexVSIBQWpX }, 0 },
},
+ /* EVEX_LEN_0F3A00_P_2_W_1 */
+ {
+ { Bad_Opcode },
+ { "vpermq", { XM, EXx, Ib }, 0 },
+ { "vpermq", { XM, EXx, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A01_P_2_W_1 */
+ {
+ { Bad_Opcode },
+ { "vpermpd", { XM, EXx, Ib }, 0 },
+ { "vpermpd", { XM, EXx, Ib }, 0 },
+ },
+
/* EVEX_LEN_0F3A14_P_2 */
{
{ "vpextrb", { Edqb, XM, Ib }, 0 },
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
index f5cce6f..25514db 100644
--- a/opcodes/i386-dis-evex-prefix.h
+++ b/opcodes/i386-dis-evex-prefix.h
@@ -487,7 +487,7 @@
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vpermp%XW", { XM, Vex, EXx }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3816_P_2) },
},
/* PREFIX_EVEX_0F3819 */
{
@@ -643,7 +643,7 @@
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "vperm%LW", { XM, Vex, EXx }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3836_P_2) },
},
/* PREFIX_EVEX_0F3837 */
{
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
index 72cd648..b388def 100644
--- a/opcodes/i386-dis-evex-w.h
+++ b/opcodes/i386-dis-evex-w.h
@@ -688,12 +688,12 @@
/* EVEX_W_0F3A00_P_2 */
{
{ Bad_Opcode },
- { "vpermq", { XM, EXx, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A00_P_2_W_1) },
},
/* EVEX_W_0F3A01_P_2 */
{
{ Bad_Opcode },
- { "vpermpd", { XM, EXx, Ib }, 0 },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A01_P_2_W_1) },
},
/* EVEX_W_0F3A05_P_2 */
{
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 25a2f13..58fa21c 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1833,12 +1833,14 @@ enum
EVEX_LEN_0FC4_P_2,
EVEX_LEN_0FC5_P_2,
EVEX_LEN_0FD6_P_2,
+ EVEX_LEN_0F3816_P_2,
EVEX_LEN_0F3819_P_2_W_0,
EVEX_LEN_0F3819_P_2_W_1,
EVEX_LEN_0F381A_P_2_W_0,
EVEX_LEN_0F381A_P_2_W_1,
EVEX_LEN_0F381B_P_2_W_0,
EVEX_LEN_0F381B_P_2_W_1,
+ EVEX_LEN_0F3836_P_2,
EVEX_LEN_0F385A_P_2_W_0,
EVEX_LEN_0F385A_P_2_W_1,
EVEX_LEN_0F385B_P_2_W_0,
@@ -1855,6 +1857,8 @@ 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_0F3A00_P_2_W_1,
+ EVEX_LEN_0F3A01_P_2_W_1,
EVEX_LEN_0F3A14_P_2,
EVEX_LEN_0F3A15_P_2,
EVEX_LEN_0F3A16_P_2,