From: "Jan Beulich" <JBeulich@novell.com>
To: <binutils@sources.redhat.com>
Subject: [PATCH] x86: suppress emission of zero displacements in memory operands
Date: Fri, 06 May 2005 12:04:00 -0000 [thread overview]
Message-ID: <s27b6b48.036@emea1-mh.id2.novell.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 4329 bytes --]
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 #2: binutils-mainline-x86-zero-mem-disp.patch --]
[-- Type: text/plain, Size: 4211 bytes --]
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 */
next reply other threads:[~2005-05-06 12:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-06 12:04 Jan Beulich [this message]
2005-05-06 14:00 ` [PATCH] x86: suppress emission of zero displacements in memoryoperands Dave Korn
2005-05-06 14:21 ` Andreas Schwab
2005-05-06 14:26 ` Dave Korn
2005-05-06 14:36 ` H. J. Lu
2005-05-06 14:39 ` Andreas Schwab
2005-05-06 14:56 ` Dave Korn
2005-05-06 15:04 ` Andreas Schwab
2005-05-06 19:35 ` Richard Henderson
2006-07-14 17:03 ` Clifford T. Matthews
2006-07-14 17:30 ` H. J. Lu
2006-07-14 17:34 ` Dave Korn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=s27b6b48.036@emea1-mh.id2.novell.com \
--to=jbeulich@novell.com \
--cc=binutils@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).