From: Jan Beulich Date: Mon, 9 May 2005 15:41:47 +0000 (+0000) Subject: gas/ X-Git-Url: http://drtracing.org/?a=commitdiff_plain;ds=sidebyside;h=34d9ee9e68940274e34bf5de84f46119ecd66855;p=deliverable%2Fbinutils-gdb.git gas/ 2005-05-09 Jan Beulich * config/tc-i386.c (optimize_disp): Discard displacement entirely when zero and not required by encoding constraints. gas/testsuite/ 2005-05-09 Jan Beulich * gas/i386/tlsd.[sd]: Adjust to not assume zero displacement will actually be present in memory addressing. * gas/i386/tlspic.[sd]: Likewise. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index a9a6c5fc59..a8efca8a82 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2005-05-09 Jan Beulich + + * config/tc-i386.c (optimize_disp): Discard displacement entirely when zero and + not required by encoding constraints. + 2005-05-09 H.J. Lu PR 936 diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index baf3583ca1..1e1a11adfb 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 96eb8705f3..e0603e484c 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-05-09 Jan Beulich + + * 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 PR 940 diff --git a/gas/testsuite/gas/i386/tlsd.d b/gas/testsuite/gas/i386/tlsd.d index 62efaa3450..bbf6fd49cf 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 [ ]+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 9ce01ec708..f5c2c50e0d 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 fbe83a47c4..bd5dbb7bac 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 c9b97574ab..bd63fd47b0 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 */