aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2024-01-09 13:49:48 +0100
committerJan Beulich <jbeulich@suse.com>2024-01-09 13:49:48 +0100
commit7440781b67631ebdf1b0587724f5d77c3748b034 (patch)
tree04723bc6926322d35ccc3501f109a79d908ca6b3
parentac1b12b51344ad8568c7b2ca3ab50ca7306ba06d (diff)
downloadfsf-binutils-gdb-7440781b67631ebdf1b0587724f5d77c3748b034.zip
fsf-binutils-gdb-7440781b67631ebdf1b0587724f5d77c3748b034.tar.gz
fsf-binutils-gdb-7440781b67631ebdf1b0587724f5d77c3748b034.tar.bz2
x86: FMA insns aren't eligible to VEX2 encoding
PR gas/31178 In da0784f961d8 ("x86: fold FMA VEX and EVEX templates") I overlooked that C aliases StaticRounding, and hence build_vex_prefix() now needs to be aware of that aliasing. Disambiguation is easy, as StaticRounding is only ever used together with SAE (hence why the overlaying works in the first place).
-rw-r--r--gas/config/tc-i386.c2
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-2.d1
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-2.s3
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-2a.d1
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-2b.d1
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-2c.d1
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-5.d1
-rw-r--r--gas/testsuite/gas/i386/x86-64-optimize-6.d1
8 files changed, 11 insertions, 0 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 27d0742..f7276c1 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -3801,6 +3801,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
+ /* .commutative aliases .staticrounding; disambiguate. */
+ && !i.tm.opcode_modifier.sae
&& (i.tm.opcode_modifier.sse2avx
|| (optimize > 1 && !i.no_optimize))
&& i.rex == REX_B
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2.d b/gas/testsuite/gas/i386/x86-64-optimize-2.d
index 87bf3ed..518b5c0 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-2.d
+++ b/gas/testsuite/gas/i386/x86-64-optimize-2.d
@@ -222,4 +222,5 @@ Disassembly of section .text:
+[a-f0-9]+: 66 .* pxor %xmm12,%xmm12
+[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8
+[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1
+ +[a-f0-9]+: c4 .* vfnmadd231sd %xmm9,%xmm2,%xmm0
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2.s b/gas/testsuite/gas/i386/x86-64-optimize-2.s
index 1d1b8e1..b20b795 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-2.s
+++ b/gas/testsuite/gas/i386/x86-64-optimize-2.s
@@ -248,3 +248,6 @@ _start:
pcmpgtq %xmm12, %xmm12
vpcmpgtq %xmm2, %xmm2, %xmm8
vpcmpgtq %ymm12, %ymm12, %ymm1
+
+ # PR gas/31178
+ vfnmadd231sd %xmm9, %xmm2, %xmm0
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2a.d b/gas/testsuite/gas/i386/x86-64-optimize-2a.d
index f12507b..b42b1ad 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-2a.d
+++ b/gas/testsuite/gas/i386/x86-64-optimize-2a.d
@@ -223,4 +223,5 @@ Disassembly of section .text:
+[a-f0-9]+: 66 .* pxor %xmm12,%xmm12
+[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8
+[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1
+ +[a-f0-9]+: c4 .* vfnmadd231sd %xmm9,%xmm2,%xmm0
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2b.d b/gas/testsuite/gas/i386/x86-64-optimize-2b.d
index e572491..2d21ecce 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-2b.d
+++ b/gas/testsuite/gas/i386/x86-64-optimize-2b.d
@@ -222,4 +222,5 @@ Disassembly of section .text:
+[a-f0-9]+: 66 .* pxor %xmm12,%xmm12
+[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8
+[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1
+ +[a-f0-9]+: c4 .* vfnmadd231sd %xmm9,%xmm2,%xmm0
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2c.d b/gas/testsuite/gas/i386/x86-64-optimize-2c.d
index 73a50a3..7523149 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-2c.d
+++ b/gas/testsuite/gas/i386/x86-64-optimize-2c.d
@@ -223,4 +223,5 @@ Disassembly of section .text:
+[a-f0-9]+: c5 .* vpxor %xmm0,%xmm0,%xmm12
+[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8
+[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1
+ +[a-f0-9]+: c4 .* vfnmadd231sd %xmm9,%xmm2,%xmm0
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-5.d b/gas/testsuite/gas/i386/x86-64-optimize-5.d
index 5b272aa..837edc7 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-5.d
+++ b/gas/testsuite/gas/i386/x86-64-optimize-5.d
@@ -222,6 +222,7 @@ Disassembly of section .text:
+[a-f0-9]+: 66 .* pxor %xmm12,%xmm12
+[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8
+[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1
+ +[a-f0-9]+: c4 .* vfnmadd231sd %xmm9,%xmm2,%xmm0
+[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5
+[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5
+[a-f0-9]+: 62 f1 7d 28 6f d1 vmovdqa32 %ymm1,%ymm2
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-6.d b/gas/testsuite/gas/i386/x86-64-optimize-6.d
index 48105c3..8097174 100644
--- a/gas/testsuite/gas/i386/x86-64-optimize-6.d
+++ b/gas/testsuite/gas/i386/x86-64-optimize-6.d
@@ -222,6 +222,7 @@ Disassembly of section .text:
+[a-f0-9]+: 66 .* pxor %xmm12,%xmm12
+[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8
+[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1
+ +[a-f0-9]+: c4 .* vfnmadd231sd %xmm9,%xmm2,%xmm0
+[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5
+[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5
+[a-f0-9]+: 62 f1 7d 28 6f d1 vmovdqa32 %ymm1,%ymm2