[PATH] AMD MWAITX enablement

H.J. Lu hjl.tools@gmail.com
Thu Jun 25 09:26:00 GMT 2015


On Thu, Jun 25, 2015 at 12:55 AM, Pawar, Amit <Amit.Pawar@amd.com> wrote:
> PFA MWAITX rebase patch without generated header files. Is ok to apply?
>
> Regards,
> Amit

+  if (i.tm.cpu_flags.bitfield.cpumwaitx && i.operands > 0)
+    {
+      /* MONITORX/MWAITX instructions have fixed operands with an opcode
+         suffix which is coded in the same place as an 8-bit immediate field
+         would be.
+ Here we check those operands and remove them afterwards.  */
^^^^
Align it with "would be".

+      unsigned int x;
+
+      if (strcmp(i.tm.name, "mwaitx") == 0)
+      {
+        x = 0;
+        if (register_number (i.op[x].regs) != x)
+          as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
+                  register_prefix, i.op[x].regs->reg_name, x + 1,
+                  i.tm.name);
+
+        x++;
+        if (register_number (i.op[x].regs) != x)
+          as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
+                  register_prefix, i.op[x].regs->reg_name, x + 1,
+                  i.tm.name);
+
+        x++;
+        if (register_number (i.op[x].regs) != x+1)
+          as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
+                  register_prefix, i.op[x].regs->reg_name, x + 1,
+                  i.tm.name);
+
+      }
+      else
+      {
+        for (x = 0; x < i.operands; x++)
+          if (register_number (i.op[x].regs) != x)
+            as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
+                    register_prefix, i.op[x].regs->reg_name, x + 1,
+                    i.tm.name);
+      }
+
+      i.operands = 0;
+    }
+

Please use a single for loop and fix indentation like

if (
  {
     if (
       {


H.J.
static void
+OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
+  int sizeflag ATTRIBUTE_UNUSED)
+{
+  /* mwait %eax,%ecx  */
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Please fix comments.

+  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++;
+}
+

-- 
H.J.



More information about the Binutils mailing list