aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-i386.c8
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/i386/tlsd.d4
-rw-r--r--gas/testsuite/gas/i386/tlsd.s4
-rw-r--r--gas/testsuite/gas/i386/tlspic.d6
-rw-r--r--gas/testsuite/gas/i386/tlspic.s4
7 files changed, 27 insertions, 10 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index a9a6c5f..a8efca8 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-09 Jan Beulich <jbeulich@novell.com>
+
+ * config/tc-i386.c (optimize_disp): Discard displacement entirely when zero and
+ not required by encoding constraints.
+
2005-05-09 H.J. Lu <hongjiu.lu@intel.com>
PR 936
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index baf3583..1e1a11a 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -2082,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;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 96eb870..e0603e4 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-09 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.
+
2005-05-07 H.J. Lu <hongjiu.lu@intel.com>
PR 940
diff --git a/gas/testsuite/gas/i386/tlsd.d b/gas/testsuite/gas/i386/tlsd.d
index 62efaa3..bbf6fd4 100644
--- a/gas/testsuite/gas/i386/tlsd.d
+++ b/gas/testsuite/gas/i386/tlsd.d
@@ -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
diff --git a/gas/testsuite/gas/i386/tlsd.s b/gas/testsuite/gas/i386/tlsd.s
index 9ce01ec..f5c2c50 100644
--- a/gas/testsuite/gas/i386/tlsd.s
+++ b/gas/testsuite/gas/i386/tlsd.s
@@ -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 */
diff --git a/gas/testsuite/gas/i386/tlspic.d b/gas/testsuite/gas/i386/tlspic.d
index fbe83a4..bd5dbb7 100644
--- a/gas/testsuite/gas/i386/tlspic.d
+++ b/gas/testsuite/gas/i386/tlspic.d
@@ -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
diff --git a/gas/testsuite/gas/i386/tlspic.s b/gas/testsuite/gas/i386/tlspic.s
index c9b9757..bd63fd4 100644
--- a/gas/testsuite/gas/i386/tlspic.s
+++ b/gas/testsuite/gas/i386/tlspic.s
@@ -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 */