x86: remove ModRM.mod decoding layer from AVX512F VMOVS{S,D}
authorJan Beulich <jbeulich@suse.com>
Mon, 1 Jul 2019 06:23:41 +0000 (08:23 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 1 Jul 2019 06:23:41 +0000 (08:23 +0200)
Just like their AVX counterparts they can utilize XMVexScalar /
EXdVexScalarS / EXqVexScalarS taking care of dropping the middle operand
for their memory forms.

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

index 965f7a7bcb520ccadf990c65bd437e48f7e16dfa..82172eb2562b21f89651b913277338a9feca71c5 100644 (file)
@@ -1,3 +1,22 @@
+2019-07-01  Jan Beulich  <jbeulich@suse.com>
+
+       * i386-dis.c (EXdScalarS, MOD_EVEX_0F10_PREFIX_1,
+       MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1,
+       MOD_EVEX_0F11_PREFIX_3, EVEX_W_0F10_P_1_M_0,
+       EVEX_W_0F10_P_1_M_1, EVEX_W_0F10_P_3_M_0, EVEX_W_0F10_P_3_M_1,
+       EVEX_W_0F11_P_1_M_0, EVEX_W_0F11_P_1_M_1, EVEX_W_0F11_P_3_M_0,
+       EVEX_W_0F11_P_3_M_1): Delete.
+       (EVEX_W_0F10_P_1, EVEX_W_0F10_P_3, EVEX_W_0F11_P_1,
+       EVEX_W_0F11_P_3): New.
+       * i386-dis-evex-mod.h: Remove MOD_EVEX_0F10_PREFIX_1,
+       MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1, and
+       MOD_EVEX_0F11_PREFIX_3 table entries.
+       * i386-dis-evex-prefix.h: Adjust PREFIX_EVEX_0F10 and
+       PREFIX_EVEX_0F11 table entries.
+       * i386-dis-evex-w.h: Replace EVEX_W_0F10_P_1_M_{0,1},
+       EVEX_W_0F10_P_3_M_{0,1}, EVEX_W_0F11_P_1_M_{0,1}, and
+       EVEX_W_0F11_P_3_M_{0,1} table entries.
+
 2019-07-01  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (EXdVex, EXdVexS, EXqVex, EXqVexS, XMVex):
index 2ae35c3a8f527affa2e61f2b5f58153d332ec8dc..37db98abf148e6c77fa8d7a5586f4ddfb1023035 100644 (file)
@@ -1,23 +1,3 @@
-  {
-    /* MOD_EVEX_0F10_PREFIX_1 */
-    { VEX_W_TABLE (EVEX_W_0F10_P_1_M_0) },
-    { VEX_W_TABLE (EVEX_W_0F10_P_1_M_1) },
-  },
-  {
-    /* MOD_EVEX_0F10_PREFIX_3 */
-    { VEX_W_TABLE (EVEX_W_0F10_P_3_M_0) },
-    { VEX_W_TABLE (EVEX_W_0F10_P_3_M_1) },
-  },
-  {
-    /* MOD_EVEX_0F11_PREFIX_1 */
-    { VEX_W_TABLE (EVEX_W_0F11_P_1_M_0) },
-    { VEX_W_TABLE (EVEX_W_0F11_P_1_M_1) },
-  },
-  {
-    /* MOD_EVEX_0F11_PREFIX_3 */
-    { VEX_W_TABLE (EVEX_W_0F11_P_3_M_0) },
-    { VEX_W_TABLE (EVEX_W_0F11_P_3_M_1) },
-  },
   {
     /* MOD_EVEX_0F12_PREFIX_0 */
     { VEX_W_TABLE (EVEX_W_0F12_P_0_M_0) },
index 248d7a299b9ccb9f1e603a2142c0541af9edc228..1f296c1b0df14068cdcfca236337ad992f3bd018 100644 (file)
@@ -1,16 +1,16 @@
   /* PREFIX_EVEX_0F10 */
   {
     { VEX_W_TABLE (EVEX_W_0F10_P_0) },
-    { MOD_TABLE (MOD_EVEX_0F10_PREFIX_1) },
+    { VEX_W_TABLE (EVEX_W_0F10_P_1) },
     { VEX_W_TABLE (EVEX_W_0F10_P_2) },
-    { MOD_TABLE (MOD_EVEX_0F10_PREFIX_3) },
+    { VEX_W_TABLE (EVEX_W_0F10_P_3) },
   },
   /* PREFIX_EVEX_0F11 */
   {
     { VEX_W_TABLE (EVEX_W_0F11_P_0) },
-    { MOD_TABLE (MOD_EVEX_0F11_PREFIX_1) },
+    { VEX_W_TABLE (EVEX_W_0F11_P_1) },
     { VEX_W_TABLE (EVEX_W_0F11_P_2) },
-    { MOD_TABLE (MOD_EVEX_0F11_PREFIX_3) },
+    { VEX_W_TABLE (EVEX_W_0F11_P_3) },
   },
   /* PREFIX_EVEX_0F12 */
   {
index 44e4b483e05cda624c0ebf79a28415f6997438d4..5aa2a634e95202ce02a0f6e348a1d44fe9d111aa 100644 (file)
@@ -2,55 +2,37 @@
   {
     { "vmovups",       { XM, EXEvexXNoBcst }, 0 },
   },
-  /* EVEX_W_0F10_P_1_M_0 */
+  /* EVEX_W_0F10_P_1 */
   {
-    { "vmovss",        { XMScalar, EXdScalar }, 0 },
-  },
-  /* EVEX_W_0F10_P_1_M_1 */
-  {
-    { "vmovss",        { XMScalar, VexScalar, EXxmm_md }, 0 },
+    { "vmovss",        { XMVexScalar, VexScalar, EXdScalar }, 0 },
   },
   /* EVEX_W_0F10_P_2 */
   {
     { Bad_Opcode },
     { "vmovupd",       { XM, EXEvexXNoBcst }, 0 },
   },
-  /* EVEX_W_0F10_P_3_M_0 */
-  {
-    { Bad_Opcode },
-    { "vmovsd",        { XMScalar, EXqScalar }, 0 },
-  },
-  /* EVEX_W_0F10_P_3_M_1 */
+  /* EVEX_W_0F10_P_3 */
   {
     { Bad_Opcode },
-    { "vmovsd",        { XMScalar, VexScalar, EXxmm_mq }, 0 },
+    { "vmovsd",        { XMVexScalar, VexScalar, EXqScalar }, 0 },
   },
   /* EVEX_W_0F11_P_0 */
   {
     { "vmovups",       { EXxS, XM }, 0 },
   },
-  /* EVEX_W_0F11_P_1_M_0 */
+  /* EVEX_W_0F11_P_1 */
   {
-    { "vmovss",        { EXdScalarS, XMScalar }, 0 },
-  },
-  /* EVEX_W_0F11_P_1_M_1 */
-  {
-    { "vmovss",        { EXxS, Vex, XMScalar }, 0 },
+    { "vmovss",        { EXdVexScalarS, VexScalar, XMScalar }, 0 },
   },
   /* EVEX_W_0F11_P_2 */
   {
     { Bad_Opcode },
     { "vmovupd",       { EXxS, XM }, 0 },
   },
-  /* EVEX_W_0F11_P_3_M_0 */
-  {
-    { Bad_Opcode },
-    { "vmovsd",        { EXqScalarS, XMScalar }, 0 },
-  },
-  /* EVEX_W_0F11_P_3_M_1 */
+  /* EVEX_W_0F11_P_3 */
   {
     { Bad_Opcode },
-    { "vmovsd",        { EXxS, Vex, XMScalar }, 0 },
+    { "vmovsd",        { EXqVexScalarS, VexScalar, XMScalar }, 0 },
   },
   /* EVEX_W_0F12_P_0_M_0 */
   {
index 5b47b4c7bcc7b1b324691e6cb810cf4a41a2c4ce..dc814209256a4609695c324518a05871e86ff3eb 100644 (file)
@@ -385,7 +385,6 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
 #define EXd { OP_EX, d_mode }
 #define EXdScalar { OP_EX, d_scalar_mode }
 #define EXdS { OP_EX, d_swap_mode }
-#define EXdScalarS { OP_EX, d_scalar_swap_mode }
 #define EXq { OP_EX, q_mode }
 #define EXqScalar { OP_EX, q_scalar_mode }
 #define EXqScalarS { OP_EX, q_scalar_swap_mode }
@@ -932,10 +931,6 @@ enum
   MOD_VEX_W_0_0F3A33_P_2_LEN_0,
   MOD_VEX_W_1_0F3A33_P_2_LEN_0,
 
-  MOD_EVEX_0F10_PREFIX_1,
-  MOD_EVEX_0F10_PREFIX_3,
-  MOD_EVEX_0F11_PREFIX_1,
-  MOD_EVEX_0F11_PREFIX_3,
   MOD_EVEX_0F12_PREFIX_0,
   MOD_EVEX_0F16_PREFIX_0,
   MOD_EVEX_0F38C6_REG_1,
@@ -2042,17 +2037,13 @@ enum
   VEX_W_0F3ACF_P_2,
 
   EVEX_W_0F10_P_0,
-  EVEX_W_0F10_P_1_M_0,
-  EVEX_W_0F10_P_1_M_1,
+  EVEX_W_0F10_P_1,
   EVEX_W_0F10_P_2,
-  EVEX_W_0F10_P_3_M_0,
-  EVEX_W_0F10_P_3_M_1,
+  EVEX_W_0F10_P_3,
   EVEX_W_0F11_P_0,
-  EVEX_W_0F11_P_1_M_0,
-  EVEX_W_0F11_P_1_M_1,
+  EVEX_W_0F11_P_1,
   EVEX_W_0F11_P_2,
-  EVEX_W_0F11_P_3_M_0,
-  EVEX_W_0F11_P_3_M_1,
+  EVEX_W_0F11_P_3,
   EVEX_W_0F12_P_0_M_0,
   EVEX_W_0F12_P_0_M_1,
   EVEX_W_0F12_P_1,