This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] x86: suppress emission of zero displacements in memoryoperands


When explicitly specified, gas encoded a pointless zero displacement in
memory addressing forms. Since this is not normally desired and was most
likely just an oversight, this patch adds an adjustment to eliminate the
displacement in that case.

Built and tested on i686-pc-linux-gnu and x86_64-unknown-linux-gnu.

Jan

gas/
2005-05-06  Jan Beulich  <jbeulich@novell.com>

	* config/tc-i386.c (optimize_disp): Discard displacement entirely when zero and
	not required by encoding constraints.

gas/testsuite/
2005-05-06  Jan Beulich  <jbeulich@novell.com>

	* gas/i386/tlsd.[sd]: Adjust to not assume zero displacement will
	actually be present in memory addressing.
	* gas/i386/tlspic.[sd]: Likewise.

--- /home/jbeulich/src/binutils/mainline/2005-05-06/gas/config/tc-i386.c	2005-05-06 08:24:28.000000000 +0200
+++ 2005-05-06/gas/config/tc-i386.c	2005-05-06 11:45:55.861726528 +0200
@@ -2069,7 +2082,13 @@ optimize_disp ()
 	    disp &= (((offsetT) 2 << 31) - 1);
 	    disp = (disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
 	  }
-	if (flag_code == CODE_64BIT)
+	if (!disp && (i.types[op] & BaseIndex))
+	  {
+	    i.types[op] &= ~Disp;
+	    i.op[op].disps = 0;
+	    i.disp_operands--;
+	  }
+	else if (flag_code == CODE_64BIT)
 	  {
 	    if (fits_in_signed_long (disp))
 	      i.types[op] |= Disp32S;
--- /home/jbeulich/src/binutils/mainline/2005-05-06/gas/testsuite/gas/i386/tlsd.d	2002-05-23 15:12:50.000000000 +0200
+++ 2005-05-06/gas/testsuite/gas/i386/tlsd.d	2005-05-06 11:01:48.000000000 +0200
@@ -22,10 +22,10 @@ Disassembly of section .text:
 [ 	]+1f: R_386_TLS_LDM	bar
   23:	e8 fc ff ff ff [ 	]*call   24 <fn\+0x24>
 [ 	]+24: R_386_PLT32	___tls_get_addr
-  28:	8d 7f 00 [ 	]*lea    0x0\(%edi\),%edi
+  28:	83 c7 00 [ 	]*add    \$0x0,%edi
   2b:	8d 90 00 00 00 00 [ 	]*lea    0x0\(%eax\),%edx
 [ 	]+2d: R_386_TLS_LDO_32	bar
-  31:	8d 76 00 [ 	]*lea    0x0\(%esi\),%esi
+  31:	83 c6 00 [ 	]*add    \$0x0,%esi
   34:	8d 88 00 00 00 00 [ 	]*lea    0x0\(%eax\),%ecx
 [ 	]+36: R_386_TLS_LDO_32	baz
   3a:	8b 5d fc [ 	]*mov    0xfffffffc\(%ebp\),%ebx
--- /home/jbeulich/src/binutils/mainline/2005-05-06/gas/testsuite/gas/i386/tlsd.s	2002-05-23 15:12:50.000000000 +0200
+++ 2005-05-06/gas/testsuite/gas/i386/tlsd.s	2005-05-06 11:03:36.000000000 +0200
@@ -26,13 +26,13 @@ fn:
 	call	___tls_get_addr@PLT
 
 	/* Just show that there can be arbitrary instructions here  */
-	leal	0(%edi, 1), %edi
+	addl	$0, %edi
 
 	leal	bar@DTPOFF(%eax), %edx
 	/* %edx now contains &bar  */
 
 	/* Again, arbitrary instructions  */
-	leal	0(%esi, 1), %esi
+	addl	$0, %esi
 
 	leal	baz@DTPOFF(%eax), %ecx
 	/* %ecx now contains &baz  */
--- /home/jbeulich/src/binutils/mainline/2005-05-06/gas/testsuite/gas/i386/tlspic.d	2002-09-19 21:01:13.000000000 +0200
+++ 2005-05-06/gas/testsuite/gas/i386/tlspic.d	2005-05-06 11:04:11.000000000 +0200
@@ -1,5 +1,5 @@
 #objdump: -dr
-#name: i386 non-pic tls
+#name: i386 pic tls
 
 .*: +file format .*
 
@@ -15,12 +15,12 @@ Disassembly of section .text:
    b:	81 c3 03 00 00 00 [ 	]*add    \$0x3,%ebx
 [ 	]+d: R_386_GOTPC	_GLOBAL_OFFSET_TABLE_
   11:	65 a1 00 00 00 00 [ 	]*mov    %gs:0x0,%eax
-  17:	8d 76 00 [ 	]*lea    0x0\(%esi\),%esi
+  17:	83 c6 00 [ 	]*add    \$0x0,%esi
   1a:	2b 83 00 00 00 00 [ 	]*sub    0x0\(%ebx\),%eax
 [ 	]+1c: R_386_TLS_IE_32	foo
   20:	8b 83 00 00 00 00 [ 	]*mov    0x0\(%ebx\),%eax
 [ 	]+22: R_386_TLS_GOTIE	foo
-  26:	8d 76 00 [ 	]*lea    0x0\(%esi\),%esi
+  26:	83 c6 00 [ 	]*add    \$0x0,%esi
   29:	65 8b 00 [ 	]*mov    %gs:\(%eax\),%eax
   2c:	65 8b 0d 00 00 00 00 [ 	]*mov    %gs:0x0,%ecx
   33:	03 8b 00 00 00 00 [ 	]*add    0x0\(%ebx\),%ecx
--- /home/jbeulich/src/binutils/mainline/2005-05-06/gas/testsuite/gas/i386/tlspic.s	2002-09-19 21:01:13.000000000 +0200
+++ 2005-05-06/gas/testsuite/gas/i386/tlspic.s	2005-05-06 11:03:48.000000000 +0200
@@ -17,7 +17,7 @@ fn:
 	movl	%gs:0, %eax
 
 	/* Arbitrary instructions in between.  */
-	leal	0(%esi, 1), %esi
+	addl	$0, %esi
 
 	subl	foo@GOTTPOFF(%ebx), %eax
 	/* %eax now contains &foo  */
@@ -26,7 +26,7 @@ fn:
 	movl	foo@GOTNTPOFF(%ebx), %eax
 
 	/* Arbitrary instructions in between.  */
-	leal	0(%esi, 1), %esi
+	addl	$0, %esi
 
 	movl	%gs:(%eax), %eax
 	/* %eax now contains foo  */

Attachment: binutils-mainline-x86-zero-mem-disp.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]