x86: tighten .insn SAE and broadcast checking

SAE / embedded rounding are invalid when there's the memory operand, as
the bit encoding this specifies broadcast in that case.

Broadcast needs to be specified on the memory operand.
This commit is contained in:
Jan Beulich
2023-09-27 10:54:23 +02:00
parent f79d55e124
commit f586e3409b

View File

@ -11546,8 +11546,9 @@ s_insn (int dummy ATTRIBUTE_UNUSED)
? i.broadcast.type || i.broadcast.bytes
|| i.rounding.type != rc_none
|| i.mask.reg
: (i.broadcast.type || i.broadcast.bytes)
&& i.rounding.type != rc_none))
: (i.mem_operands && i.rounding.type != rc_none)
|| ((i.broadcast.type || i.broadcast.bytes)
&& !(i.flags[i.broadcast.operand] & Operand_Mem))))
{
as_bad (_("conflicting .insn operands"));
goto done;