diff options
author | Jan Beulich <jbeulich@suse.com> | 2024-01-09 13:49:48 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2024-01-09 13:49:48 +0100 |
commit | 7440781b67631ebdf1b0587724f5d77c3748b034 (patch) | |
tree | 04723bc6926322d35ccc3501f109a79d908ca6b3 /gas | |
parent | ac1b12b51344ad8568c7b2ca3ab50ca7306ba06d (diff) | |
download | gdb-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.c | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-2.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-2.s | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-2a.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-2b.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-2c.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-5.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-optimize-6.d | 1 |
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 |