x86-64: respect {nooptimize} when building VEX prefix
authorJan Beulich <jbeulich@suse.com>
Fri, 3 Feb 2023 07:22:35 +0000 (08:22 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 3 Feb 2023 07:22:35 +0000 (08:22 +0100)
Swapping operands for commutative insns occurs outside of
optimize_encoding() and hence needs explicit checking for a request to
avoid any optimizations.

gas/config/tc-i386.c
gas/testsuite/gas/i386/x86-64-optimize-4.d
gas/testsuite/gas/i386/x86-64-optimize-4.s

index c3aa40b2a02a210fa24b3e6fe323e721f05cc636..d5a24ae1637e02ea81e138379ecec0abfce68aac 100644 (file)
@@ -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))
index d25d24d3c6f2423b1b2cafd5b0a5727991e92729..ed01f2150c433a2f2f2618603e1309b8631ceaaa 100644 (file)
@@ -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
index a3f69a3f7753d48582f690f973f4d13b7cea71b0..97264e25d3f7330e283e264b982282036dd23c53 100644 (file)
@@ -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