PowerPC instruction operand flag validation
This adds another check that might have saved me a little time recently if it had been present. * config/tc-ppc.c (insn_validate): Check that optional operands are not followed by non-optional operands.
This commit is contained in:
parent
4dd4e63945
commit
2eac3da184
|
@ -1,3 +1,8 @@
|
||||||
|
2018-11-06 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* config/tc-ppc.c (insn_validate): Check that optional operands
|
||||||
|
are not followed by non-optional operands.
|
||||||
|
|
||||||
2018-11-06 Jan Beulich <jbeulich@suse.com>
|
2018-11-06 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* testsuite/gas/i386/evex-wig.s: Add vpbroadcastd cases.
|
* testsuite/gas/i386/evex-wig.s: Add vpbroadcastd cases.
|
||||||
|
|
|
@ -1514,6 +1514,7 @@ insn_validate (const struct powerpc_opcode *op)
|
||||||
/* The operands must not overlap the opcode or each other. */
|
/* The operands must not overlap the opcode or each other. */
|
||||||
for (o = op->operands; *o; ++o)
|
for (o = op->operands; *o; ++o)
|
||||||
{
|
{
|
||||||
|
bfd_boolean optional = FALSE;
|
||||||
if (*o >= num_powerpc_operands)
|
if (*o >= num_powerpc_operands)
|
||||||
{
|
{
|
||||||
as_bad (_("operand index error for %s"), op->name);
|
as_bad (_("operand index error for %s"), op->name);
|
||||||
|
@ -1538,6 +1539,14 @@ insn_validate (const struct powerpc_opcode *op)
|
||||||
}
|
}
|
||||||
omask |= mask;
|
omask |= mask;
|
||||||
}
|
}
|
||||||
|
if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0)
|
||||||
|
optional = TRUE;
|
||||||
|
else if (optional)
|
||||||
|
{
|
||||||
|
as_bad (_("non-optional operand %d follows optional operand in %s"),
|
||||||
|
(int) (o - op->operands), op->name);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in New Issue