diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 9 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 11 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/i386.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/lea-optimize.d | 13 |
4 files changed, 31 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 4f1aeed..0cbd2a5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,4 +1,11 @@ -2020-02-XX Jan Beulich <jbeulich@suse.com> +2020-02-14 Jan Beulich <jbeulich@suse.com> + + * config/tc-i386.c (process_operands): Drop ineffectual segment + overrides when optimizing. + * testsuite/gas/i386/lea-optimize.d: New. + * testsuite/gas/i386/i386.exp: Run new test. + +2020-02-14 Jan Beulich <jbeulich@suse.com> * config/tc-i386.c (process_operands): Also check insn prefix for ineffectual segment override warning. Don't cover possible diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 05151f2..d7d45de 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -7165,10 +7165,17 @@ duplicate: } if ((i.seg[0] || i.prefix[SEG_PREFIX]) - && !quiet_warnings && i.tm.base_opcode == 0x8d /* lea */ && !is_any_vex_encoding(&i.tm)) - as_warn (_("segment override on `%s' is ineffectual"), i.tm.name); + { + if (!quiet_warnings) + as_warn (_("segment override on `%s' is ineffectual"), i.tm.name); + if (optimize) + { + i.seg[0] = NULL; + i.prefix[SEG_PREFIX] = 0; + } + } /* If a segment was explicitly specified, and the specified segment is not the default, use an opcode prefix to select it. If we diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 147297e..258fb76 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -502,6 +502,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] run_list_test "optimize-6a" "-I${srcdir}/$subdir -march=+noavx -al" run_dump_test "optimize-6b" run_list_test "optimize-7" "-I${srcdir}/$subdir -march=+noavx2 -al" + run_dump_test "lea-optimize" run_dump_test "align-branch-1a" run_dump_test "align-branch-1b" run_dump_test "align-branch-1c" diff --git a/gas/testsuite/gas/i386/lea-optimize.d b/gas/testsuite/gas/i386/lea-optimize.d new file mode 100644 index 0000000..16e5b82 --- /dev/null +++ b/gas/testsuite/gas/i386/lea-optimize.d @@ -0,0 +1,13 @@ +#as: -O -q +#objdump: -dw +#name: i386 LEA-like segment overrride dropping +#source: lea.s + +.*: +file format .* + +Disassembly of section .text: + +0+ <start>: +[ ]*[0-9a-f]+:[ ]+8d 00[ ]+lea[ ]+\(%eax\),%eax +[ ]*[0-9a-f]+:[ ]+8d 00[ ]+lea[ ]+\(%eax\),%eax +#pass |