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.
This commit is contained in:
Jan Beulich
2022-04-20 16:56:05 +02:00
parent 85649ec8eb
commit 1db5a7fe0b
3 changed files with 11 additions and 1 deletions

View File

@ -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;

View File

@ -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

View File

@ -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