diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 8 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/tlsd.d | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/tlsd.s | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/tlspic.d | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/tlspic.s | 4 |
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 */ |