From 739d764954b69fafd4fa7b238cf95149a86b2bda Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 3 Feb 2023 08:22:12 +0100 Subject: [PATCH] x86: respect {nooptimize} for LEA Dropping a meaningless segment prefix occurs outside of optimize_encoding() and hence needs explicit checking for a request to avoid any optimizations. --- gas/config/tc-i386.c | 2 +- gas/testsuite/gas/i386/lea-optimize.d | 2 ++ gas/testsuite/gas/i386/lea.d | 2 ++ gas/testsuite/gas/i386/lea.e | 4 +++- gas/testsuite/gas/i386/lea.s | 2 ++ gas/testsuite/gas/i386/lea16-optimize.d | 2 ++ gas/testsuite/gas/i386/lea16-optimize2.d | 2 ++ gas/testsuite/gas/i386/lea16.d | 2 ++ 8 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 235deb841c8..c3aa40b2a02 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -8159,7 +8159,7 @@ process_operands (void) { if (!quiet_warnings) as_warn (_("segment override on `%s' is ineffectual"), insn_name (&i.tm)); - if (optimize) + if (optimize && !i.no_optimize) { i.seg[0] = NULL; i.prefix[SEG_PREFIX] = 0; diff --git a/gas/testsuite/gas/i386/lea-optimize.d b/gas/testsuite/gas/i386/lea-optimize.d index 283b994bbfc..cec43322cce 100644 --- a/gas/testsuite/gas/i386/lea-optimize.d +++ b/gas/testsuite/gas/i386/lea-optimize.d @@ -10,6 +10,7 @@ Disassembly of section .text: 0+ : [ ]*[0-9a-f]+:[ ]+8d 04 08[ ]+lea[ ]+\(%eax,%ecx(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+8d 04 08[ ]+lea[ ]+\(%eax,%ecx(,1)?\),%eax +[ ]*[0-9a-f]+:[ ]+26 8d 04 01[ ]+lea[ ]+%es:\(%ecx,%eax(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+8d 48 01[ ]+lea[ ]+0x1\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+8d 88 00 00 00 00[ ]+lea[ ]+0x0\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+8d 0c 25 00 00 00 00[ ]+lea[ ]+0x0\(,(%eiz)?(,1)?\),%ecx @@ -21,6 +22,7 @@ Disassembly of section .text: [ ]*[0-9a-f]+:[ ]+8b c8[ ]+mov[ ]+%eax,%ecx [ ]*[0-9a-f]+:[ ]+8b c8[ ]+mov[ ]+%eax,%ecx [ ]*[0-9a-f]+:[ ]+8b c8[ ]+mov[ ]+%eax,%ecx +[ ]*[0-9a-f]+:[ ]+64 8d 08[ ]+lea[ ]+%fs:\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+0f b7 c6[ ]+movzwl[ ]+%si,%eax [ ]*[0-9a-f]+:[ ]+0f b7 f6[ ]+movzwl[ ]+%si,%esi [ ]*[0-9a-f]+:[ ]+0f b7 c6[ ]+movzwl[ ]+%si,%eax diff --git a/gas/testsuite/gas/i386/lea.d b/gas/testsuite/gas/i386/lea.d index bfc9c13559a..f6172696336 100644 --- a/gas/testsuite/gas/i386/lea.d +++ b/gas/testsuite/gas/i386/lea.d @@ -9,6 +9,7 @@ Disassembly of section .text: 0+ : [ ]*[0-9a-f]+:[ ]+36 8d 04 08[ ]+lea[ ]+%ss:\(%eax,%ecx(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+36 8d 04 08[ ]+lea[ ]+%ss:\(%eax,%ecx(,1)?\),%eax +[ ]*[0-9a-f]+:[ ]+26 8d 04 01[ ]+lea[ ]+%es:\(%ecx,%eax(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+8d 48 01[ ]+lea[ ]+0x1\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+8d 88 00 00 00 00[ ]+lea[ ]+0x0\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+8d 0c 25 00 00 00 00[ ]+lea[ ]+0x0\(,(%eiz)?(,1)?\),%ecx @@ -20,6 +21,7 @@ Disassembly of section .text: [ ]*[0-9a-f]+:[ ]+8d 08[ ]+lea[ ]+\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+8d 08[ ]+lea[ ]+\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+65 8d 08[ ]+lea[ ]+%gs:\(%eax\),%ecx +[ ]*[0-9a-f]+:[ ]+64 8d 08[ ]+lea[ ]+%fs:\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 8d 04[ ]+lea[ ]+\(%si\),%eax [ ]*[0-9a-f]+:[ ]+67 8d 34[ ]+lea[ ]+\(%si\),%esi [ ]*[0-9a-f]+:[ ]+67 8d 04[ ]+lea[ ]+\(%si\),%eax diff --git a/gas/testsuite/gas/i386/lea.e b/gas/testsuite/gas/i386/lea.e index d0d47aeb3eb..dd8f606f346 100644 --- a/gas/testsuite/gas/i386/lea.e +++ b/gas/testsuite/gas/i386/lea.e @@ -1,4 +1,6 @@ .*: Assembler messages: .*:3: Warning: .* `lea' .* .*:4: Warning: .* `lea' .* -.*:19: Warning: .* `lea' .* +.*:5: Warning: .* `lea' .* +.*:20: Warning: .* `lea' .* +.*:21: Warning: .* `lea' .* diff --git a/gas/testsuite/gas/i386/lea.s b/gas/testsuite/gas/i386/lea.s index 1fb6aa85003..f9f19a509cc 100644 --- a/gas/testsuite/gas/i386/lea.s +++ b/gas/testsuite/gas/i386/lea.s @@ -2,6 +2,7 @@ start: lea %ss:(%eax,%ecx), %eax ss lea (%eax,%ecx), %eax + {nooptimize} es lea (%ecx,%eax), %eax .allow_index_reg lea 1(%eax), %ecx @@ -17,6 +18,7 @@ start: lea (%eax), %ecx lea 1-1(%eax), %ecx lea %gs:(%eax), %ecx + {nooptimize} lea %fs:(%eax), %ecx lea (%si), %eax lea (%si), %esi diff --git a/gas/testsuite/gas/i386/lea16-optimize.d b/gas/testsuite/gas/i386/lea16-optimize.d index be3075886a8..5585e8d53dd 100644 --- a/gas/testsuite/gas/i386/lea16-optimize.d +++ b/gas/testsuite/gas/i386/lea16-optimize.d @@ -10,6 +10,7 @@ Disassembly of section .text: 0+ : [ ]*[0-9a-f]+:[ ]+67 66 8d 04 08[ ]+lea[ ]+\(%eax,%ecx(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+67 66 8d 04 08[ ]+lea[ ]+\(%eax,%ecx(,1)?\),%eax +[ ]*[0-9a-f]+:[ ]+26 67 66 8d 04 01[ ]+lea[ ]+%es:\(%ecx,%eax(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+67 66 8d 48 01[ ]+lea[ ]+0x1\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 88 00 00 00 00[ ]+lea[ ]+0x0\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 0c 25 00 00 00 00[ ]+addr32 lea[ ]+0x0,%ecx @@ -21,6 +22,7 @@ Disassembly of section .text: [ ]*[0-9a-f]+:[ ]+66 8b c8[ ]+mov[ ]+%eax,%ecx [ ]*[0-9a-f]+:[ ]+66 8b c8[ ]+mov[ ]+%eax,%ecx [ ]*[0-9a-f]+:[ ]+66 8b c8[ ]+mov[ ]+%eax,%ecx +[ ]*[0-9a-f]+:[ ]+64 67 66 8d 08[ ]+lea[ ]+%fs:\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+66 8d 04[ ]+lea[ ]+\(%si\),%eax [ ]*[0-9a-f]+:[ ]+66 8d 34[ ]+lea[ ]+\(%si\),%esi [ ]*[0-9a-f]+:[ ]+66 8d 04[ ]+lea[ ]+\(%si\),%eax diff --git a/gas/testsuite/gas/i386/lea16-optimize2.d b/gas/testsuite/gas/i386/lea16-optimize2.d index d95f9acc640..7afd97ed990 100644 --- a/gas/testsuite/gas/i386/lea16-optimize2.d +++ b/gas/testsuite/gas/i386/lea16-optimize2.d @@ -10,6 +10,7 @@ Disassembly of section .text: 0+ : [ ]*[0-9a-f]+:[ ]+67 66 8d 04 08[ ]+lea[ ]+\(%eax,%ecx(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+67 66 8d 04 08[ ]+lea[ ]+\(%eax,%ecx(,1)?\),%eax +[ ]*[0-9a-f]+:[ ]+26 67 66 8d 04 01[ ]+lea[ ]+%es:\(%ecx,%eax(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+67 66 8d 48 01[ ]+lea[ ]+0x1\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 88 00 00 00 00[ ]+lea[ ]+0x0\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 0c 25 00 00 00 00[ ]+addr32 lea[ ]+0x0,%ecx @@ -21,6 +22,7 @@ Disassembly of section .text: [ ]*[0-9a-f]+:[ ]+66 8b c8[ ]+mov[ ]+%eax,%ecx [ ]*[0-9a-f]+:[ ]+66 8b c8[ ]+mov[ ]+%eax,%ecx [ ]*[0-9a-f]+:[ ]+66 8b c8[ ]+mov[ ]+%eax,%ecx +[ ]*[0-9a-f]+:[ ]+64 67 66 8d 08[ ]+lea[ ]+%fs:\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+66 8d 04[ ]+lea[ ]+\(%si\),%eax [ ]*[0-9a-f]+:[ ]+66 8d 34[ ]+lea[ ]+\(%si\),%esi [ ]*[0-9a-f]+:[ ]+66 8d 04[ ]+lea[ ]+\(%si\),%eax diff --git a/gas/testsuite/gas/i386/lea16.d b/gas/testsuite/gas/i386/lea16.d index 179102adb09..f01010aefb7 100644 --- a/gas/testsuite/gas/i386/lea16.d +++ b/gas/testsuite/gas/i386/lea16.d @@ -10,6 +10,7 @@ Disassembly of section .text: 0+ : [ ]*[0-9a-f]+:[ ]+36 67 66 8d 04 08[ ]+lea[ ]+%ss:\(%eax,%ecx(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+36 67 66 8d 04 08[ ]+lea[ ]+%ss:\(%eax,%ecx(,1)?\),%eax +[ ]*[0-9a-f]+:[ ]+26 67 66 8d 04 01[ ]+lea[ ]+%es:\(%ecx,%eax(,1)?\),%eax [ ]*[0-9a-f]+:[ ]+67 66 8d 48 01[ ]+lea[ ]+0x1\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 88 00 00 00 00[ ]+lea[ ]+0x0\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 0c 25 00 00 00 00[ ]+addr32 lea[ ]+0x0,%ecx @@ -21,6 +22,7 @@ Disassembly of section .text: [ ]*[0-9a-f]+:[ ]+67 66 8d 08[ ]+lea[ ]+\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+67 66 8d 08[ ]+lea[ ]+\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+65 67 66 8d 08[ ]+lea[ ]+%gs:\(%eax\),%ecx +[ ]*[0-9a-f]+:[ ]+64 67 66 8d 08[ ]+lea[ ]+%fs:\(%eax\),%ecx [ ]*[0-9a-f]+:[ ]+66 8d 04[ ]+lea[ ]+\(%si\),%eax [ ]*[0-9a-f]+:[ ]+66 8d 34[ ]+lea[ ]+\(%si\),%esi [ ]*[0-9a-f]+:[ ]+66 8d 04[ ]+lea[ ]+\(%si\),%eax -- 2.30.2