x86: fold OP_Mwaitx() into OP_Mwait()
authorJan Beulich <jbeulich@suse.com>
Tue, 5 Nov 2019 08:19:50 +0000 (09:19 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 5 Nov 2019 08:19:50 +0000 (09:19 +0100)
There's no need to have separate functions, the difference can easily be
expressed using the function arguments.

opcodes/ChangeLog
opcodes/i386-dis.c

index 4f27092152bbc09c6005e51a02a9b6b36f02fb0a..94c619b0d5ca7dcd64e882d039bf556bc28a451f 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-05  Jan Beulich  <jbeulich@suse.com>
+
+       * i386-dis.c (OP_Mwaitx): Delete.
+       (prefix_table): Use OP_Mwait for mwaitx entry.
+       (OP_Mwait): Also handle mwaitx.
+
 2019-11-05  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (PREFIX_0F01_REG_7_MOD_3_RM_2,
index 11a9e33fbe751aa75f2b13c5a7e6ac2c8df8ced7..0f4a844dce78a3260f92514695126f77ea24eb3a 100644 (file)
@@ -101,7 +101,6 @@ static void VPCOM_Fixup (int, int);
 static void OP_0f07 (int, int);
 static void OP_Monitor (int, int);
 static void OP_Mwait (int, int);
-static void OP_Mwaitx (int, int);
 static void NOP_Fixup1 (int, int);
 static void NOP_Fixup2 (int, int);
 static void OP_3DNowSuffix (int, int);
@@ -3652,7 +3651,7 @@ static const struct dis386 prefix_table[][4] = {
 
   /* PREFIX_0F01_REG_7_MOD_3_RM_3 */
   {
-    { "mwaitx",                { { OP_Mwaitx,  0 } }, 0  },
+    { "mwaitx",                { { OP_Mwait, eBX_reg } }, 0  },
   },
 
   /* PREFIX_0F09 */
@@ -15516,35 +15515,17 @@ CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
 }
 
 static void
-OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
-         int sizeflag ATTRIBUTE_UNUSED)
+OP_Mwait (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
 {
-  /* mwaitx %eax,%ecx,%ebx */
-  if (!intel_syntax)
-    {
-      const char **names = (address_mode == mode_64bit
-                           ? names64 : names32);
-      strcpy (op_out[0], names[0]);
-      strcpy (op_out[1], names[1]);
-      strcpy (op_out[2], names[3]);
-      two_source_ops = 1;
-    }
-  /* Skip mod/rm byte.  */
-  MODRM_CHECK;
-  codep++;
-}
-
-static void
-OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
-         int sizeflag ATTRIBUTE_UNUSED)
-{
-  /* mwait %eax,%ecx  */
+  /* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx  */
   if (!intel_syntax)
     {
       const char **names = (address_mode == mode_64bit
                            ? names64 : names32);
       strcpy (op_out[0], names[0]);
       strcpy (op_out[1], names[1]);
+      if (bytemode == eBX_reg)
+       strcpy (op_out[2], names[3]);
       two_source_ops = 1;
     }
   /* Skip mod/rm byte.  */