From: Jan Beulich Date: Fri, 3 Feb 2023 07:22:35 +0000 (+0100) Subject: x86-64: respect {nooptimize} when building VEX prefix X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=33740f219e4eec3ee0f428a76390b9afc8140ad6;p=binutils-gdb.git x86-64: respect {nooptimize} when building VEX prefix Swapping operands for commutative insns occurs outside of optimize_encoding() and hence needs explicit checking for a request to avoid any optimizations. --- diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index c3aa40b2a02..d5a24ae1637 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -3624,7 +3624,8 @@ build_vex_prefix (const insn_template *t) && i.reg_operands == i.operands - i.imm_operands && i.tm.opcode_modifier.vex && i.tm.opcode_modifier.commutative - && (i.tm.opcode_modifier.sse2avx || optimize > 1) + && (i.tm.opcode_modifier.sse2avx + || (optimize > 1 && !i.no_optimize)) && i.rex == REX_B && i.vex.register_specifier && !(i.vex.register_specifier->reg_flags & RegRex)) diff --git a/gas/testsuite/gas/i386/x86-64-optimize-4.d b/gas/testsuite/gas/i386/x86-64-optimize-4.d index d25d24d3c6f..ed01f2150c4 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-4.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-4.d @@ -9,6 +9,8 @@ Disassembly of section .text: 0+ <_start>: +[a-f0-9]+: a9 7f 00 00 00 test \$0x7f,%eax + +[a-f0-9]+: c4 c1 61 db e4 vpand %xmm12,%xmm3,%xmm4 + +[a-f0-9]+: c5 91 db e2 vpand %xmm2,%xmm13,%xmm4 +[a-f0-9]+: 62 f1 7d 28 6f d1 vmovdqa32 %ymm1,%ymm2 +[a-f0-9]+: 62 f1 fd 28 6f d1 vmovdqa64 %ymm1,%ymm2 +[a-f0-9]+: 62 f1 7f 08 6f d1 vmovdqu8 %xmm1,%xmm2 diff --git a/gas/testsuite/gas/i386/x86-64-optimize-4.s b/gas/testsuite/gas/i386/x86-64-optimize-4.s index a3f69a3f775..97264e25d3f 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-4.s +++ b/gas/testsuite/gas/i386/x86-64-optimize-4.s @@ -5,6 +5,9 @@ _start: {nooptimize} testl $0x7f, %eax + {nooptimize} vpand %xmm12, %xmm3, %xmm4 + {nooptimize} vpand %xmm2, %xmm13, %xmm4 + {nooptimize} vmovdqa32 %ymm1, %ymm2 {nooptimize} vmovdqa64 %ymm1, %ymm2 {nooptimize} vmovdqu8 %xmm1, %xmm2