From: Jan Beulich <jbeulich@suse.com>
To: "binutils@sourceware.org" <binutils@sourceware.org>
Cc: "H.J. Lu" <hjl.tools@gmail.com>
Subject: [PATCH v2 3/4] x86: adjust segment override prefix emission
Date: Fri, 14 Feb 2020 11:44:00 -0000 [thread overview]
Message-ID: <de0179de-c9f7-ad67-9e1f-3fd63ea6ecdc@suse.com> (raw)
In-Reply-To: <1fc51e5f-f2d6-67d5-a034-11b32a1e750f@suse.com>
Since we already suppress the prefix altogether when it's the default
one for the chosen addressing mode, let's do so also when instruction
prefix and override specified with the memory operand match. (Note that
insn prefix specified segment overrides never get discarded.)
gas/
2020-02-XX Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (process_operands): Also skip segment
override prefix emission if it matches an already present one.
* testsuite/gas/i386/prefix32.s: Add double segment override
cases.
* testsuite/gas/i386/prefix32.l: Adjust expectations.
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -7208,11 +7208,12 @@ duplicate:
}
/* If a segment was explicitly specified, and the specified segment
- is not the default, use an opcode prefix to select it. If we
- never figured out what the default segment is, then default_seg
- will be zero at this point, and the specified segment prefix will
- always be used. */
- if ((i.seg[0]) && (i.seg[0] != default_seg))
+ is neither the default nor the one already recorded from a prefix,
+ use an opcode prefix to select it. If we never figured out what
+ the default segment is, then default_seg will be zero at this
+ point, and the specified segment prefix will always be used. */
+ if ((i.seg[0]) && (i.seg[0] != default_seg)
+ && (i.seg[0]->seg_prefix != i.prefix[SEG_PREFIX]))
{
if (!add_prefix (i.seg[0]->seg_prefix))
return 0;
--- a/gas/testsuite/gas/i386/prefix32.l
+++ b/gas/testsuite/gas/i386/prefix32.l
@@ -8,6 +8,7 @@
.*:19: Error: same type of prefix .*
.*:20: Error: data size .* `vaddps'
.*:21: Error: data size .* `vaddpd'
+.*:25: Error: same type of prefix .*
GAS LISTING .*
#...
[ ]*1[ ]+\.text
@@ -33,4 +34,10 @@ GAS LISTING .*
[ ]*20[ ]+data16 vaddps %xmm0, %xmm0, %xmm0
[ ]*21[ ]+data16 vaddpd %xmm0, %xmm0, %xmm0
[ ]*22[ ]*
-[ ]*23[ ]*[\?]+ 0+[ \t]+\.p2align 4,0
+[ ]*23[ ]+\.Lsegment:
+[ ]*24[ ]+\?\?\?\? 368B4500[ ]+ss mov %ss:\(%ebp\), %eax
+[ ]*25[ ]+ss mov %ds:\(%ebp\), %eax
+[ ]*26[ ]+\?\?\?\? 3E8B4500[ ]+ds mov %ss:\(%ebp\), %eax
+[ ]*27[ ]+\?\?\?\? 3E8B4500[ ]+ds mov %ds:\(%ebp\), %eax
+[ ]*28[ ]*
+#pass
--- a/gas/testsuite/gas/i386/prefix32.s
+++ b/gas/testsuite/gas/i386/prefix32.s
@@ -20,4 +20,10 @@ prefix:
data16 vaddps %xmm0, %xmm0, %xmm0
data16 vaddpd %xmm0, %xmm0, %xmm0
+.Lsegment:
+ ss mov %ss:(%ebp), %eax
+ ss mov %ds:(%ebp), %eax
+ ds mov %ss:(%ebp), %eax
+ ds mov %ds:(%ebp), %eax
+
.p2align 4,0
next prev parent reply other threads:[~2020-02-14 11:44 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-14 11:41 [PATCH v2 0/4] x86: segment override handling adjustments Jan Beulich
2020-02-14 11:43 ` [PATCH v2 1/4] x86: extend LEA's segment override warning Jan Beulich
2020-02-14 12:03 ` H.J. Lu
2020-02-14 12:06 ` Jan Beulich
2020-02-14 11:43 ` [PATCH v2 2/4] x86: optimize away pointless segment overrides Jan Beulich
2020-02-14 12:06 ` H.J. Lu
2020-02-14 11:44 ` [PATCH v2 4/4] x86: extend LEA's segment override warning to applicable MPX insns Jan Beulich
2020-02-14 12:05 ` H.J. Lu
2020-02-14 12:08 ` Jan Beulich
2020-02-14 11:44 ` Jan Beulich [this message]
2020-02-14 12:09 ` [PATCH v2 3/4] x86: adjust segment override prefix emission H.J. Lu
2020-02-14 12:17 ` Jan Beulich
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=de0179de-c9f7-ad67-9e1f-3fd63ea6ecdc@suse.com \
--to=jbeulich@suse.com \
--cc=binutils@sourceware.org \
--cc=hjl.tools@gmail.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).