[binutils-gdb] x86: reject all invalid SAE variants
Jan Beulich
jbeulich@sourceware.org
Wed Apr 20 14:56:14 GMT 2022
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1db5a7fe0be94e839648079f6a7fa24f44310275
commit 1db5a7fe0be94e839648079f6a7fa24f44310275
Author: Jan Beulich <jbeulich@suse.com>
Date: Wed Apr 20 16:56:05 2022 +0200
x86: reject all invalid SAE variants
So far an SAE-only specifier was accepted for static-rounding insns,
while SAE-only insns didn't accept static rounding specifiers. If
anything it would make sense the other way around, allowing SAE-only
insns to have the (ignored) rounding mode specified individually rather
than globally via -mevexrcig=. But for now make things match the SDM.
Diff:
---
gas/config/tc-i386.c | 2 +-
gas/testsuite/gas/i386/inval-avx512f.l | 7 +++++++
gas/testsuite/gas/i386/inval-avx512f.s | 3 +++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index b8e3c24c25d..61b9af1c24b 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -6272,7 +6272,7 @@ check_VecOperands (const insn_template *t)
if (i.rounding.type != rc_none)
{
if (!t->opcode_modifier.sae
- || (i.rounding.type != saeonly && !t->opcode_modifier.staticrounding))
+ || ((i.rounding.type != saeonly) != t->opcode_modifier.staticrounding))
{
i.error = unsupported_rc_sae;
return 1;
diff --git a/gas/testsuite/gas/i386/inval-avx512f.l b/gas/testsuite/gas/i386/inval-avx512f.l
index d45ae250ba0..d46e61a9a9a 100644
--- a/gas/testsuite/gas/i386/inval-avx512f.l
+++ b/gas/testsuite/gas/i386/inval-avx512f.l
@@ -220,6 +220,8 @@
.*:319: Error: .*unsupported broadcast for `vcvtneps2bf16'
.*:321: Error: .*vaddps.*
.*:322: Error: .*vcmpss.*
+.*:324: Error: .*vaddss.*
+.*:325: Error: .*vcmpps.*
GAS LISTING .*
@@ -574,4 +576,9 @@ GAS LISTING .*
[ ]*320[ ]*
[ ]*321[ ]+vaddps \$0xcc, %zmm0, %zmm0, %zmm0
[ ]*322[ ]+vcmpss \$0, \$0xcc, %xmm0, %xmm0, %k0
+[ ]*323[ ]*
+
GAS LISTING .*
+#...
+[ ]*324[ ]+vaddss \{sae\}, %xmm0, %xmm0, %xmm0
+[ ]*325[ ]+vcmpps \$0, \{rn-sae\}, %zmm0, %zmm0, %k0
#pass
diff --git a/gas/testsuite/gas/i386/inval-avx512f.s b/gas/testsuite/gas/i386/inval-avx512f.s
index 841992bbd79..d9a85e005b3 100644
--- a/gas/testsuite/gas/i386/inval-avx512f.s
+++ b/gas/testsuite/gas/i386/inval-avx512f.s
@@ -321,4 +321,7 @@ _start:
vaddps $0xcc, %zmm0, %zmm0, %zmm0
vcmpss $0, $0xcc, %xmm0, %xmm0, %k0
+ vaddss {sae}, %xmm0, %xmm0, %xmm0
+ vcmpps $0, {rn-sae}, %zmm0, %zmm0, %k0
+
.p2align 4
More information about the Binutils-cvs
mailing list