x86: AVX512 VPERM{D,Q,PS,PD} insns need to honor EVEX.L'L
authorJan Beulich <jbeulich@suse.com>
Mon, 6 Jul 2020 11:41:58 +0000 (13:41 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 6 Jul 2020 11:41:58 +0000 (13:41 +0200)
Just like (where they exist) their AVX counterparts do for VEX.L. For
all of them the 128-bit forms are invalid.

opcodes/ChangeLog
opcodes/i386-dis-evex-len.h
opcodes/i386-dis-evex-prefix.h
opcodes/i386-dis-evex-w.h
opcodes/i386-dis.c

index 62f8a0874c81bf3899c892f26837547561a91284..c72e1d144aed5c15990eac5d0d9d0cd588fd7706 100644 (file)
@@ -1,3 +1,14 @@
+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,
index 51ce98f4a90fed41f81d9129d47f1a5c98455560..2941ab1dcbb7b6c1ea7fa18d59cb1694469bd980 100644 (file)
@@ -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 },
index f5cce6f370bc8b4b1a798391699cbc1a03b0ad10..25514dbfc7ea071851c8004eb41c1e14527c47a9 100644 (file)
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermp%XW",     { XM, Vex, EXx }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3816_P_2) },
   },
   /* PREFIX_EVEX_0F3819 */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vperm%LW",      { XM, Vex, EXx }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3836_P_2) },
   },
   /* PREFIX_EVEX_0F3837 */
   {
index 72cd648e68feff96391fd0e4adf9fd7ea304a3c2..b388defdd87436ca771fe23d917b9ce977829f14 100644 (file)
   /* 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 */
   {
index 25a2f13d09ab4235cc0c653c7bfe5d3051506d96..58fa21c9362f91553e867dada1730af85c7c9399 100644 (file)
@@ -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,