x86: Remove mod_table pass for MVexSIBMEM

Message ID 20250113073702.1626976-1-haochen.jiang@intel.com
State New
Headers
Series x86: Remove mod_table pass for MVexSIBMEM |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 success Test passed
linaro-tcwg-bot/tcwg_binutils_check--master-arm success Test passed

Commit Message

Haochen Jiang Jan. 13, 2025, 7:37 a.m. UTC
  Hi all,

As mentioned in AMX-MOVRS thread, MVexSIBMEM does not need mod_table
pass since OP_M will do that. This patch will remove the mod_table
pass added in AMX_TRANSPOSE.

Ok for trunk?

Thx,
Haochen

---

When using MVexSIBMEM, OP_M will help check modrm. Thus, no need
to pass mod_table.

opcodes/ChangeLog:

	* i386-dis.c: Remove mod_table pass for MVexSIBMEM.
---
 opcodes/i386-dis.c | 46 ++++++++++++++++++----------------------------
 1 file changed, 18 insertions(+), 28 deletions(-)
  

Comments

Jan Beulich Jan. 13, 2025, 7:42 a.m. UTC | #1
On 13.01.2025 08:37, Haochen Jiang wrote:
> As mentioned in AMX-MOVRS thread, MVexSIBMEM does not need mod_table
> pass since OP_M will do that. This patch will remove the mod_table
> pass added in AMX_TRANSPOSE.
> 
> Ok for trunk?

Yes, and thanks. I did mention it before; perhaps it needs putting in
a comment: mod_table[] shouldn't gain any new entries unless both slots
of them are populated (and neither being Bad_Opcode).

Jan
  

Patch

diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index f9b6cf30fd0..96d8d1e4db7 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -963,8 +963,6 @@  enum
   MOD_0F38F8,
 
   MOD_VEX_0F3849_X86_64_L_0_W_0,
-  MOD_VEX_0F386E_X86_64,
-  MOD_VEX_0F386F_X86_64,
 
   MOD_EVEX_MAP4_60,
   MOD_EVEX_MAP4_61,
@@ -1142,8 +1140,8 @@  enum
   PREFIX_VEX_0F385F_X86_64_L_0_W_0,
   PREFIX_VEX_0F386B_X86_64_L_0_W_0,
   PREFIX_VEX_0F386C_X86_64_L_0_W_0,
-  PREFIX_VEX_0F386E_X86_64_M_0_L_0_W_0,
-  PREFIX_VEX_0F386F_X86_64_M_0_L_0_W_0,
+  PREFIX_VEX_0F386E_X86_64_L_0_W_0,
+  PREFIX_VEX_0F386F_X86_64_L_0_W_0,
   PREFIX_VEX_0F3872,
   PREFIX_VEX_0F38B0_W_0,
   PREFIX_VEX_0F38B1_W_0,
@@ -1443,8 +1441,8 @@  enum
   VEX_LEN_0F385F_X86_64,
   VEX_LEN_0F386B_X86_64,
   VEX_LEN_0F386C_X86_64,
-  VEX_LEN_0F386E_X86_64_M_0,
-  VEX_LEN_0F386F_X86_64_M_0,
+  VEX_LEN_0F386E_X86_64,
+  VEX_LEN_0F386F_X86_64,
   VEX_LEN_0F38CB_P_3_W_0,
   VEX_LEN_0F38CC_P_3_W_0,
   VEX_LEN_0F38CD_P_3_W_0,
@@ -1622,8 +1620,8 @@  enum
   VEX_W_0F385F_X86_64_L_0,
   VEX_W_0F386B_X86_64_L_0,
   VEX_W_0F386C_X86_64_L_0,
-  VEX_W_0F386E_X86_64_M_0_L_0,
-  VEX_W_0F386F_X86_64_M_0_L_0,
+  VEX_W_0F386E_X86_64_L_0,
+  VEX_W_0F386F_X86_64_L_0,
   VEX_W_0F3872_P_1,
   VEX_W_0F3878,
   VEX_W_0F3879,
@@ -4161,14 +4159,14 @@  static const struct dis386 prefix_table[][4] = {
     { "ttdpfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
   },
 
-  /* PREFIX_VEX_0F386E_X86_64_M_0_L_0_W_0 */
+  /* PREFIX_VEX_0F386E_X86_64_L_0_W_0 */
   {
     { "t2rpntlvwz0",	{ TMM, MVexSIBMEM }, 0 },
     { Bad_Opcode },
     { "t2rpntlvwz1",	{ TMM, MVexSIBMEM }, 0 },
   },
 
-  /* PREFIX_VEX_0F386F_X86_64_M_0_L_0_W_0 */
+  /* PREFIX_VEX_0F386F_X86_64_L_0_W_0 */
   {
     { "t2rpntlvwz0t1",	{ TMM, MVexSIBMEM }, 0 },
     { Bad_Opcode },
@@ -4679,13 +4677,13 @@  static const struct dis386 x86_64_table[][2] = {
   /* X86_64_VEX_0F386E */
   {
     { Bad_Opcode },
-    { MOD_TABLE (MOD_VEX_0F386E_X86_64) },
+    { VEX_LEN_TABLE (VEX_LEN_0F386E_X86_64) },
   },
 
   /* X86_64_VEX_0F386F */
   {
     { Bad_Opcode },
-    { MOD_TABLE (MOD_VEX_0F386F_X86_64) },
+    { VEX_LEN_TABLE (VEX_LEN_0F386F_X86_64) },
   },
 
   /* X86_64_VEX_0F38Ex */
@@ -7277,14 +7275,14 @@  static const struct dis386 vex_len_table[][2] = {
     { VEX_W_TABLE (VEX_W_0F386C_X86_64_L_0) },
   },
 
-  /* VEX_LEN_0F386E_X86_64_M_0 */
+  /* VEX_LEN_0F386E_X86_64 */
   {
-    { VEX_W_TABLE (VEX_W_0F386E_X86_64_M_0_L_0) },
+    { VEX_W_TABLE (VEX_W_0F386E_X86_64_L_0) },
   },
 
-  /* VEX_LEN_0F386F_X86_64_M_0 */
+  /* VEX_LEN_0F386F_X86_64 */
   {
-    { VEX_W_TABLE (VEX_W_0F386F_X86_64_M_0_L_0) },
+    { VEX_W_TABLE (VEX_W_0F386F_X86_64_L_0) },
   },
 
   /* VEX_LEN_0F38CB_P_3_W_0 */
@@ -7988,12 +7986,12 @@  static const struct dis386 vex_w_table[][2] = {
     { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_L_0_W_0) },
   },
   {
-    /* VEX_W_0F386E_X86_64_M_0_L_0 */
-    { PREFIX_TABLE (PREFIX_VEX_0F386E_X86_64_M_0_L_0_W_0) },
+    /* VEX_W_0F386E_X86_64_L_0 */
+    { PREFIX_TABLE (PREFIX_VEX_0F386E_X86_64_L_0_W_0) },
   },
   {
-    /* VEX_W_0F386F_X86_64_M_0_L_0 */
-    { PREFIX_TABLE (PREFIX_VEX_0F386F_X86_64_M_0_L_0_W_0) },
+    /* VEX_W_0F386F_X86_64_L_0 */
+    { PREFIX_TABLE (PREFIX_VEX_0F386F_X86_64_L_0_W_0) },
   },
   {
     /* VEX_W_0F3872_P_1 */
@@ -8493,14 +8491,6 @@  static const struct dis386 mod_table[][2] = {
     { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0) },
     { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_1) },
   },
-  {
-    /* MOD_VEX_0F386E_X86_64 */
-    { VEX_LEN_TABLE (VEX_LEN_0F386E_X86_64_M_0) },
-  },
-  {
-    /* MOD_VEX_0F386F_X86_64 */
-    { VEX_LEN_TABLE (VEX_LEN_0F386F_X86_64_M_0) },
-  },
 
 #include "i386-dis-evex-mod.h"
 };