x86: reuse VEX entries for EVEX vperm{q,pd}
authorJan Beulich <jbeulich@suse.com>
Wed, 10 Mar 2021 07:18:24 +0000 (08:18 +0100)
committerJan Beulich <jbeulich@suse.com>
Wed, 10 Mar 2021 07:18:24 +0000 (08:18 +0100)
By matching VEX decode order (L before W), some EVEX entries can refer
back to VEX ones instead of carrying duplicates.

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

index 1fbd3775940b7b37cd4821de6e9573ff1889b663..c40ca0f87d435a9eb111cef20c80dbb7f6e74130 100644 (file)
@@ -1,3 +1,13 @@
+2021-03-10  Jan Beulich  <jbeulich@suse.com>
+
+       * opcodes/i386-dis.c (EVEX_LEN_0F3A00_W_1, EVEX_LEN_0F3A01_W_1):
+       Rename to EVEX_LEN_0F3A00 and EVEX_LEN_0F3A01 respectively.
+       EVEX_W_0F3A00, EVEX_W_0F3A01): Delete.
+       * i386-dis-evex.h (evex_table): Adjust opcode 0F3A00 and 0F3A01
+       entries.
+       * i386-dis-evex-len.h (evex_len_table): Likewise.
+       * i386-dis-evex-w.h: Remove opcode 0F3A00 and 0F3A01 entries.
+
 2021-03-10  Jan Beulich  <jbeulich@suse.com>
 
        * opcodes/i386-dis.c (REG_EVEX_0F38C6, REG_EVEX_0F38C7,
index cef8ad9c2dd529cd639c36cd9f676a4a03d0b158..01a8ee568d0147ce4c87646d0d1b18da88978f82 100644 (file)
@@ -92,18 +92,18 @@ static const struct dis386 evex_len_table[][3] = {
     { VEX_W_TABLE (EVEX_W_0F38C7_M_0_L_2) },
   },
 
-  /* EVEX_LEN_0F3A00_W_1 */
+  /* EVEX_LEN_0F3A00 */
   {
     { Bad_Opcode },
-    { "vpermq",        { XM, EXx, Ib }, PREFIX_DATA },
-    { "vpermq",        { XM, EXx, Ib }, PREFIX_DATA },
+    { VEX_W_TABLE (VEX_W_0F3A00_L_1) },
+    { VEX_W_TABLE (VEX_W_0F3A00_L_1) },
   },
 
-  /* EVEX_LEN_0F3A01_W_1 */
+  /* EVEX_LEN_0F3A01 */
   {
     { Bad_Opcode },
-    { "vpermpd",       { XM, EXx, Ib }, PREFIX_DATA },
-    { "vpermpd",       { XM, EXx, Ib }, PREFIX_DATA },
+    { VEX_W_TABLE (VEX_W_0F3A01_L_1) },
+    { VEX_W_TABLE (VEX_W_0F3A01_L_1) },
   },
 
   /* EVEX_LEN_0F3A14 */
index e28c8459e5c79d26d643aa55c4733bba4dc80de9..0b9c25927bb78a6197a5aba86ebb4218ece581db 100644 (file)
     { REG_TABLE (REG_EVEX_0F38C7_M_0_L_2_W_0) },
     { REG_TABLE (REG_EVEX_0F38C7_M_0_L_2_W_1) },
   },
-  /* EVEX_W_0F3A00 */
-  {
-    { Bad_Opcode },
-    { EVEX_LEN_TABLE (EVEX_LEN_0F3A00_W_1) },
-  },
-  /* EVEX_W_0F3A01 */
-  {
-    { Bad_Opcode },
-    { EVEX_LEN_TABLE (EVEX_LEN_0F3A01_W_1) },
-  },
   /* EVEX_W_0F3A05 */
   {
     { Bad_Opcode },
index 013a338ecbbee6dbdcfa8cd3f57f30ed908e1c51..27446c43c83ffc469f718198b86fe0f71492341a 100644 (file)
@@ -584,8 +584,8 @@ static const struct dis386 evex_table[][256] = {
   /* EVEX_0F3A */
   {
     /* 00 */
-    { VEX_W_TABLE (EVEX_W_0F3A00) },
-    { VEX_W_TABLE (EVEX_W_0F3A01) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A00) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A01) },
     { Bad_Opcode },
     { "valign%DQ",     { XM, Vex, EXx, Ib }, PREFIX_DATA },
     { VEX_W_TABLE (VEX_W_0F3A04) },
index 25b9c44359a4369cd5e9d34bddd074a2a6a9428e..1a5ea0e62a0ba9189cf2d7afad5bd5e0d13bea52 100644 (file)
@@ -1349,8 +1349,8 @@ enum
   EVEX_LEN_0F385B_M_0,
   EVEX_LEN_0F38C6_M_0,
   EVEX_LEN_0F38C7_M_0,
-  EVEX_LEN_0F3A00_W_1,
-  EVEX_LEN_0F3A01_W_1,
+  EVEX_LEN_0F3A00,
+  EVEX_LEN_0F3A01,
   EVEX_LEN_0F3A14,
   EVEX_LEN_0F3A15,
   EVEX_LEN_0F3A16,
@@ -1614,8 +1614,6 @@ enum
   EVEX_W_0F38A3,
   EVEX_W_0F38C7_M_0_L_2,
 
-  EVEX_W_0F3A00,
-  EVEX_W_0F3A01,
   EVEX_W_0F3A05,
   EVEX_W_0F3A08,
   EVEX_W_0F3A09,