PATCH: Fix disassembler for cmpxchg16b

Jan Beulich jbeulich@novell.com
Fri Dec 15 13:36:00 GMT 2006


Thanks!

>>> "H. J. Lu" <hjl@lucon.org> 15.12.06 14:09 >>>
On Fri, Dec 15, 2006 at 10:26:14AM +0000, Jan Beulich wrote:
> May I ask you to use 'oword ptr' instead of 'xmmword ptr' in Intel mode? This
> instruction really has nothing to do with XMM... Jan
> 

I will check in this patch.


H.J.
----
gas/testsuite/

2006-12-15  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/i386/x86-64-inval.s: cmpxchg16b needs oword ptr, instead of
	xmmword ptr.
	* gas/i386/x86_64.s: Likewise.
	* gas/i386/x86-64-inval.l: Updated.

opcodes/

2006-12-15  H.J. Lu  <hongjiu.lu@intel.com>

	* i386-dis.c (o_mode): New for 16-byte operand.
	(intel_operand_size): Generate "OWORD PTR " for o_mode.
	(CMPXCHG8B_Fixup): Set bytemode to o_mode instead of x_mode.

--- binutils/gas/testsuite/gas/i386/x86-64-inval.l.oword	2006-12-14 13:22:32.000000000 -0800
+++ binutils/gas/testsuite/gas/i386/x86-64-inval.l	2006-12-15 05:00:32.000000000 -0800
@@ -106,4 +106,4 @@ GAS LISTING .*
   51 [ 	]*retl		# can't have 32-bit stack operands
   52 [ 	]*insertq \$4,\$2,%xmm2,%ebx # The last operand must be XMM register.
   53 [ 	]*.intel_syntax noprefix
-  54 [ 	]*cmpxchg16b dword ptr \[rax\] # Must be xmmword
+  54 [ 	]*cmpxchg16b dword ptr \[rax\] # Must be oword
--- binutils/gas/testsuite/gas/i386/x86-64-inval.s.oword	2006-12-14 13:22:32.000000000 -0800
+++ binutils/gas/testsuite/gas/i386/x86-64-inval.s	2006-12-15 05:00:42.000000000 -0800
@@ -51,4 +51,4 @@ foo:	jcxz foo	# No prefix exists to sele
 	retl		# can't have 32-bit stack operands
 	insertq $4,$2,%xmm2,%ebx # The last operand must be XMM register.
 	.intel_syntax noprefix
-	cmpxchg16b dword ptr [rax] # Must be xmmword
+	cmpxchg16b dword ptr [rax] # Must be oword
--- binutils/gas/testsuite/gas/i386/x86_64.s.oword	2006-12-14 13:22:32.000000000 -0800
+++ binutils/gas/testsuite/gas/i386/x86_64.s	2006-12-15 05:00:08.000000000 -0800
@@ -191,7 +191,7 @@ movq %rax,0xffffffffff332211
 cmpxchg16b (%rax)
 
 .intel_syntax noprefix
-cmpxchg16b xmmword ptr [rax]
+cmpxchg16b oword ptr [rax]
 
 # Get a good alignment.
  .p2align	4,0
--- binutils/opcodes/i386-dis.c.oword	2006-12-14 13:22:30.000000000 -0800
+++ binutils/opcodes/i386-dis.c	2006-12-15 04:58:43.000000000 -0800
@@ -356,6 +356,7 @@ fetch_data (struct disassemble_info *inf
 #define const_1_mode 14
 #define stack_v_mode 15 /* v_mode for stack-related opcodes.  */
 #define z_mode 16 /* non-quad operand size depends on prefixes */
+#define o_mode 17  /* 16-byte operand */
 
 #define es_reg 100
 #define cs_reg 101
@@ -4183,6 +4184,9 @@ intel_operand_size (int bytemode, int si
     case x_mode:
       oappend ("XMMWORD PTR ");
       break;
+    case o_mode:
+      oappend ("OWORD PTR ");
+      break;
     default:
       break;
     }
@@ -5778,7 +5782,7 @@ CMPXCHG8B_Fixup (int bytemode, int sizef
       /* Change cmpxchg8b to cmpxchg16b.  */
       char *p = obuf + strlen (obuf) - 2;
       strcpy (p, "16b");
-      bytemode = x_mode;
+      bytemode = o_mode;
     }
   OP_M (bytemode, sizeflag);
 }



More information about the Binutils mailing list