i386: Check vector length for scatter/gather prefetch instructions
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 27 Jun 2019 20:39:19 +0000 (13:39 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 27 Jun 2019 20:39:32 +0000 (13:39 -0700)
Since not all vector lengths are supported by scatter/gather prefetch
instructions, decode them only with supported vector lengths.

gas/

PR binutils/24719
* testsuite/gas/i386/disassem.s: Add test for vgatherpf0dps
with invalid vector length.
* testsuite/gas/i386/x86-64-disassem.s: Likewise.
* testsuite/gas/i386/disassem.d: Updated.
* testsuite/gas/i386/x86-64-disassem.d: Likewise.

opcodes/

PR binutils/24719
* i386-dis-evex-len.h: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2,
EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2,
EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0,
EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0,
EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0,
EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and
EVEX_LEN_0F38C7_R_6_P_2_W_1.
* i386-dis-evex-prefix.h: Update PREFIX_EVEX_0F38C6_REG_1,
PREFIX_EVEX_0F38C6_REG_2, PREFIX_EVEX_0F38C6_REG_5 and
PREFIX_EVEX_0F38C6_REG_6 entries.
* i386-dis-evex-w.h: Update EVEX_W_0F38C7_R_1_P_2,
EVEX_W_0F38C7_R_2_P_2, EVEX_W_0F38C7_R_5_P_2 and
EVEX_W_0F38C7_R_6_P_2 entries.
* i386-dis.c: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2,
EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2,
EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0,
EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0,
EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0,
EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and
EVEX_LEN_0F38C7_R_6_P_2_W_1 enums.

gas/ChangeLog
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 98bae969fc5c96ca88e0cb0ba2b27df63883b0b7..91c4d494ea8a00617f43580d57e1751302202165 100644 (file)
@@ -1,3 +1,12 @@
+2019-06-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/24719
+       * testsuite/gas/i386/disassem.s: Add test for vgatherpf0dps
+       with invalid vector length.
+       * testsuite/gas/i386/x86-64-disassem.s: Likewise.
+       * testsuite/gas/i386/disassem.d: Updated.
+       * testsuite/gas/i386/x86-64-disassem.d: Likewise.
+
 2019-06-27  Barnaby Wilk  s<barnaby.wilks@arm.com>
 
        * config/tc-arm.c (do_smc): Add range check for immediate operand.
index abf77bee2848ba11ba27d5d30cf1e1bf703c5728..a6eb697c58d0da1cfab2af3ad2f6b416d3170f43 100644 (file)
@@ -1,3 +1,27 @@
+2019-06-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/24719
+       * i386-dis-evex-len.h: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2,
+       EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2,
+       EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0,
+       EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0,
+       EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0,
+       EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and
+       EVEX_LEN_0F38C7_R_6_P_2_W_1.
+       * i386-dis-evex-prefix.h: Update PREFIX_EVEX_0F38C6_REG_1,
+       PREFIX_EVEX_0F38C6_REG_2, PREFIX_EVEX_0F38C6_REG_5 and
+       PREFIX_EVEX_0F38C6_REG_6 entries.
+       * i386-dis-evex-w.h: Update EVEX_W_0F38C7_R_1_P_2,
+       EVEX_W_0F38C7_R_2_P_2, EVEX_W_0F38C7_R_5_P_2 and
+       EVEX_W_0F38C7_R_6_P_2 entries.
+       * i386-dis.c: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2,
+       EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2,
+       EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0,
+       EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0,
+       EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0,
+       EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and
+       EVEX_LEN_0F38C7_R_6_P_2_W_1 enums.
+
 2019-06-27  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (VEX_LEN_0F2A_P_1, VEX_LEN_0F2A_P_3,
index 50b89ebc57abb3319f349bf24e8f3726d720ae06..ce5819959808fffb6c5c2ab6b849357c5729505c 100644 (file)
@@ -89,6 +89,90 @@ static const struct dis386 evex_len_table[][3] = {
     { "vbroadcasti64x4",       { XM, EXymm }, 0 },
   },
 
+  /* EVEX_LEN_0F38C6_REG_1_PREFIX_2 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vgatherpf0dp%XW",  { MVexVSIBDWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C6_REG_2_PREFIX_2 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vgatherpf1dp%XW",  { MVexVSIBDWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C6_REG_5_PREFIX_2 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vscatterpf0dp%XW",  { MVexVSIBDWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C6_REG_6_PREFIX_2 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vscatterpf1dp%XW",  { MVexVSIBDWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_1_P_2_W_0 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vgatherpf0qps",  { MVexVSIBDQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_1_P_2_W_1 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vgatherpf0qpd",  { MVexVSIBQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_2_P_2_W_0 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vgatherpf1qps",  { MVexVSIBDQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_2_P_2_W_1 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vgatherpf1qpd",  { MVexVSIBQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_5_P_2_W_0 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vscatterpf0qps",  { MVexVSIBDQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_5_P_2_W_1 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vscatterpf0qpd",  { MVexVSIBQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_6_P_2_W_0 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vscatterpf1qps",  { MVexVSIBDQWpX }, 0 },
+  },
+
+  /* EVEX_LEN_0F38C7_R_6_P_2_W_1 */
+  {
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vscatterpf1qpd",  { MVexVSIBQWpX }, 0 },
+  },
+
   /* EVEX_LEN_0F3A18_P_2_W_0 */
   {
     { Bad_Opcode },
index 261b01f0f7fa9ea233cd19cd4edcae0861cd6bee..248d7a299b9ccb9f1e603a2142c0541af9edc228 100644 (file)
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgatherpf0dp%XW",  { MVexVSIBDWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_1_PREFIX_2) },
   },
   /* PREFIX_EVEX_0F38C6_REG_2 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgatherpf1dp%XW",  { MVexVSIBDWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_2_PREFIX_2) },
   },
   /* PREFIX_EVEX_0F38C6_REG_5 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscatterpf0dp%XW",  { MVexVSIBDWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_5_PREFIX_2) },
   },
   /* PREFIX_EVEX_0F38C6_REG_6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscatterpf1dp%XW",  { MVexVSIBDWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_6_PREFIX_2) },
   },
   /* PREFIX_EVEX_0F38C7_REG_1 */
   {
index 2adfde9650f0d4b248668bf0b7e833978be2ae19..44e4b483e05cda624c0ebf79a28415f6997438d4 100644 (file)
   },
   /* EVEX_W_0F38C7_R_1_P_2 */
   {
-    { "vgatherpf0qps",  { MVexVSIBDQWpX }, 0 },
-    { "vgatherpf0qpd",  { MVexVSIBQWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_P_2_W_0) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_P_2_W_1) },
   },
   /* EVEX_W_0F38C7_R_2_P_2 */
   {
-    { "vgatherpf1qps",  { MVexVSIBDQWpX }, 0 },
-    { "vgatherpf1qpd",  { MVexVSIBQWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_P_2_W_0) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_P_2_W_1) },
   },
   /* EVEX_W_0F38C7_R_5_P_2 */
   {
-    { "vscatterpf0qps",  { MVexVSIBDQWpX }, 0 },
-    { "vscatterpf0qpd",  { MVexVSIBQWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_P_2_W_0) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_P_2_W_1) },
   },
   /* EVEX_W_0F38C7_R_6_P_2 */
   {
-    { "vscatterpf1qps",  { MVexVSIBDQWpX }, 0 },
-    { "vscatterpf1qpd",  { MVexVSIBQWpX }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_P_2_W_0) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_P_2_W_1) },
   },
   /* EVEX_W_0F3A00_P_2 */
   {
index 281d02c7c25e6a5f077e69bd72826df56be080c9..de9946222de5c91582f467fa934e13e361a7391f 100644 (file)
@@ -1939,6 +1939,18 @@ enum
   EVEX_LEN_0F385A_P_2_W_1,
   EVEX_LEN_0F385B_P_2_W_0,
   EVEX_LEN_0F385B_P_2_W_1,
+  EVEX_LEN_0F38C6_REG_1_PREFIX_2,
+  EVEX_LEN_0F38C6_REG_2_PREFIX_2,
+  EVEX_LEN_0F38C6_REG_5_PREFIX_2,
+  EVEX_LEN_0F38C6_REG_6_PREFIX_2,
+  EVEX_LEN_0F38C7_R_1_P_2_W_0,
+  EVEX_LEN_0F38C7_R_1_P_2_W_1,
+  EVEX_LEN_0F38C7_R_2_P_2_W_0,
+  EVEX_LEN_0F38C7_R_2_P_2_W_1,
+  EVEX_LEN_0F38C7_R_5_P_2_W_0,
+  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_0F3A18_P_2_W_0,
   EVEX_LEN_0F3A18_P_2_W_1,
   EVEX_LEN_0F3A19_P_2_W_0,