[2/3] Remove %ME and used %NE for movbe.

Message ID 20240611080630.163749-3-lili.cui@intel.com
State New
Headers
Series Support APX CCMP and CTEST |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Patch failed to apply

Commit Message

Cui, Lili June 11, 2024, 8:06 a.m. UTC
  %ME is added specifically for movbe. Now with %NE, we can use
MOD table + %NE to indicate whether a {evex} prefix is needed.

opcodes/ChangeLog:

        * i386-dis-evex-mod.h: Added movbe.
        * i386-dis-evex.h: Let movbe go through the mod table.
        * i386-dis.c (struct dis386): Removed %ME.
        (putop): Removed case ME.
---
 opcodes/i386-dis-evex-mod.h | 10 ++++++++++
 opcodes/i386-dis-evex.h     |  4 ++--
 opcodes/i386-dis.c          | 10 ++--------
 3 files changed, 14 insertions(+), 10 deletions(-)
  

Comments

Jan Beulich June 12, 2024, 2:40 p.m. UTC | #1
On 11.06.2024 10:06, Cui, Lili wrote:
> %ME is added specifically for movbe. Now with %NE, we can use
> MOD table + %NE to indicate whether a {evex} prefix is needed.
> 
> opcodes/ChangeLog:
> 
>         * i386-dis-evex-mod.h: Added movbe.
>         * i386-dis-evex.h: Let movbe go through the mod table.
>         * i386-dis.c (struct dis386): Removed %ME.
>         (putop): Removed case ME.

Okay.

Thanks, Jan
  

Patch

diff --git a/opcodes/i386-dis-evex-mod.h b/opcodes/i386-dis-evex-mod.h
index 879c91f3b76..bba32658ecf 100644
--- a/opcodes/i386-dis-evex-mod.h
+++ b/opcodes/i386-dis-evex-mod.h
@@ -1,3 +1,13 @@ 
+  /* MOD_EVEX_MAP4_60 */
+  {
+    { "movbeS",		{ Gv, Mv }, PREFIX_NP_OR_DATA },
+    { "%NEmovbeS",	{ Gv, Ev }, PREFIX_NP_OR_DATA },
+  },
+  /* MOD_EVEX_MAP4_61 */
+  {
+    { "movbeS",		{ Mv, Gv }, PREFIX_NP_OR_DATA },
+    { "%NEmovbeS",	{ Ev, Gv }, PREFIX_NP_OR_DATA },
+  },
   /* MOD_EVEX_MAP4_F8_P1 */
   {
     { "enqcmds",	{ Gva, M }, 0 },
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index 855734bcb5b..2f2363a72e2 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -983,8 +983,8 @@  static const struct dis386 evex_table[][256] = {
     { Bad_Opcode },
     { Bad_Opcode },
     /* 60 */
-    { "%MEmovbeS",	{ Gv, Ev }, PREFIX_NP_OR_DATA },
-    { "%MEmovbeS",	{ Ev, Gv }, PREFIX_NP_OR_DATA },
+    { MOD_TABLE (MOD_EVEX_MAP4_60) },
+    { MOD_TABLE (MOD_EVEX_MAP4_61) },
     { Bad_Opcode },
     { Bad_Opcode },
     { Bad_Opcode },
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 82362b25839..f7d5e367305 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -959,6 +959,8 @@  enum
 
   MOD_VEX_0F3849_X86_64_L_0_W_0,
 
+  MOD_EVEX_MAP4_60,
+  MOD_EVEX_MAP4_61,
   MOD_EVEX_MAP4_F8_P_1,
   MOD_EVEX_MAP4_F8_P_3,
 };
@@ -1828,9 +1830,6 @@  struct dis386 {
    "XV" => print "{vex} " pseudo prefix
    "XE" => print "{evex} " pseudo prefix if no EVEX-specific functionality is
 	   is used by an EVEX-encoded (AVX512VL) instruction.
-   "ME" => print "{evex} " pseudo prefix for ins->modrm.mod != 3,if no
-	   EVEX-specific functionality is used by an EVEX-encoded (AVX512VL)
-	   instruction.
    "NF" => print "{nf} " pseudo prefix when EVEX.NF = 1 and print "{evex} "
 	   pseudo prefix when instructions without NF, EGPR and VVVV,
    "NE" => don't print "{evex} " pseudo prefix for some special instructions
@@ -10637,11 +10636,6 @@  putop (instr_info *ins, const char *in_template, int sizeflag)
 		  /* Skip printing {evex} for some special instructions in MAP4.  */
 		  evex_printed = true;
 		  break;
-		case 'M':
-		  if (ins->modrm.mod != 3 && !(ins->rex2 & 7))
-		    oappend (ins, "{evex} ");
-		  evex_printed = true;
-		  break;
 		default:
 		  abort ();
 		}