aboutsummaryrefslogtreecommitdiff
path: root/gas
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 /gas
parentac1b12b51344ad8568c7b2ca3ab50ca7306ba06d (diff)
downloadgdb-7440781b67631ebdf1b0587724f5d77c3748b034.zip
gdb-7440781b67631ebdf1b0587724f5d77c3748b034.tar.gz
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).
Diffstat (limited to 'gas')
-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