x86: honor VEX.W for VCVT{PH2PS,PS2PH}
authorJan Beulich <jbeulich@suse.com>
Mon, 6 Jul 2020 11:40:40 +0000 (13:40 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 6 Jul 2020 11:40:40 +0000 (13:40 +0200)
Unlike for the EVEX-encoded versions, the VEX ones failed to decode
VEX.W. Once the necessary adjustments are done, it becomes obvious that
the EVEX and VEX table entries for VCVTPS2PH are identical and can hence
be folded.

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

index f5463b0b58f58a2f5a4dda7ff1da52ae46aecd05..296ef264a2c07866c92927ed790183c86e1a5e7d 100644 (file)
@@ -1,3 +1,17 @@
+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
+       respectively.
+       (vex_w_table): New VEX_W_0F3813_P_2 and VEX_W_0F3A1D_P_2 table
+       entries.
+       * i386-dis-evex.h (evex_table): Reference VEX table entry for
+       opcode 0F3A1D.
+       * i386-dis-evex-prefix.h (PREFIX_EVEX_0F3A1D): Delete table
+       entry.
+       * i386-dis-evex-w.h (EVEX_W_0F3A1D_P_2): Likewise.
+
 2020-07-06  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (PREFIX_EVEX_0F60, PREFIX_EVEX_0F61,
index 413fd9724ec533df7be8cee9026aec2e393e85a9..01998c58232ec2756ac489c2d632512d8db0a9dd 100644 (file)
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3A1B_P_2) },
   },
-  /* PREFIX_EVEX_0F3A1D */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3A1D_P_2) },
-  },
   /* PREFIX_EVEX_0F3A1E */
   {
     { Bad_Opcode },
index dd3caad33c03488afebe774f7ef2a0a2feffd8d0..ed7968a54602c63e5e80b24bed9613f582ebab9e 100644 (file)
     { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_P_2_W_0) },
     { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_P_2_W_1) },
   },
-  /* EVEX_W_0F3A1D_P_2 */
-  {
-    { "vcvtps2ph",     { EXxmmq, XM, EXxEVexS, Ib }, 0 },
-  },
   /* EVEX_W_0F3A21_P_2 */
   {
     { "vinsertps",     { XMM, Vex, EXxmm_md, Ib }, 0 },
index 249812b83044c74792a23f55dbf99f197b91cdd4..667d39d43f2ee682ff3aabb93d21037e62061857 100644 (file)
@@ -616,7 +616,7 @@ static const struct dis386 evex_table[][256] = {
     { PREFIX_TABLE (PREFIX_EVEX_0F3A1A) },
     { PREFIX_TABLE (PREFIX_EVEX_0F3A1B) },
     { Bad_Opcode },
-    { PREFIX_TABLE (PREFIX_EVEX_0F3A1D) },
+    { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
     { PREFIX_TABLE (PREFIX_EVEX_0F3A1E) },
     { PREFIX_TABLE (PREFIX_EVEX_0F3A1F) },
     /* 20 */
index 62f42815d8d9fbabde4543a155381290cf937042..7f521b2766f4f566289e006c587d3c267ce2fb7f 100644 (file)
@@ -1615,7 +1615,6 @@ enum
   PREFIX_EVEX_0F3A19,
   PREFIX_EVEX_0F3A1A,
   PREFIX_EVEX_0F3A1B,
-  PREFIX_EVEX_0F3A1D,
   PREFIX_EVEX_0F3A1E,
   PREFIX_EVEX_0F3A1F,
   PREFIX_EVEX_0F3A20,
@@ -1910,6 +1909,7 @@ enum
   VEX_W_0F380D_P_2,
   VEX_W_0F380E_P_2,
   VEX_W_0F380F_P_2,
+  VEX_W_0F3813_P_2,
   VEX_W_0F3816_P_2,
   VEX_W_0F3818_P_2,
   VEX_W_0F3819_P_2,
@@ -1934,6 +1934,7 @@ enum
   VEX_W_0F3A06_P_2,
   VEX_W_0F3A18_P_2,
   VEX_W_0F3A19_P_2,
+  VEX_W_0F3A1D_P_2,
   VEX_W_0F3A30_P_2_LEN_0,
   VEX_W_0F3A31_P_2_LEN_0,
   VEX_W_0F3A32_P_2_LEN_0,
@@ -2110,7 +2111,6 @@ enum
   EVEX_W_0F3A19_P_2,
   EVEX_W_0F3A1A_P_2,
   EVEX_W_0F3A1B_P_2,
-  EVEX_W_0F3A1D_P_2,
   EVEX_W_0F3A21_P_2,
   EVEX_W_0F3A23_P_2,
   EVEX_W_0F3A38_P_2,
@@ -5504,7 +5504,7 @@ static const struct dis386 prefix_table[][4] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vcvtph2ps", { XM, EXxmmq }, 0 },
+    { VEX_W_TABLE (VEX_W_0F3813_P_2) },
   },
 
   /* PREFIX_VEX_0F3816 */
@@ -6326,7 +6326,7 @@ static const struct dis386 prefix_table[][4] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
+    { VEX_W_TABLE (VEX_W_0F3A1D_P_2) },
   },
 
   /* PREFIX_VEX_0F3A20 */
@@ -9902,6 +9902,10 @@ static const struct dis386 vex_w_table[][2] = {
     /* VEX_W_0F380F_P_2  */
     { "vtestpd",       { XM, EXx }, 0 },
   },
+  {
+    /* VEX_W_0F3813_P_2 */
+    { "vcvtph2ps", { XM, EXxmmq }, 0 },
+  },
   {
     /* VEX_W_0F3816_P_2  */
     { "vpermps",       { XM, Vex, EXx }, 0 },
@@ -10000,6 +10004,10 @@ static const struct dis386 vex_w_table[][2] = {
     /* VEX_W_0F3A19_P_2 */
     { "vextractf128",  { EXxmm, XM, Ib }, 0 },
   },
+  {
+    /* VEX_W_0F3A1D_P_2 */
+    { "vcvtps2ph", { EXxmmq, XM, EXxEVexS, Ib }, 0 },
+  },
   {
     /* VEX_W_0F3A30_P_2_LEN_0 */
     { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },