aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/config/tc-i386.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 4e3af89..ad68ba9 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -8024,18 +8024,16 @@ check_VecOperands (const insn_template *t)
return 1;
}
- /* Non-EVEX.LIG forms need to have a ZMM register as at least one
- operand. */
- if (t->opcode_modifier.evex != EVEXLIG)
- {
- for (op = 0; op < t->operands; ++op)
- if (i.types[op].bitfield.zmmword)
- break;
- if (op >= t->operands)
- {
- i.error = operand_size_mismatch;
- return 1;
- }
+ /* Non-EVEX.{LIG,512} forms need to have a ZMM register as at least one
+ operand. There's no need to check all operands, though: Either of the
+ last two operands will be of the right size in all relevant templates. */
+ if (t->opcode_modifier.evex != EVEXLIG
+ && t->opcode_modifier.evex != EVEX512
+ && !i.types[t->operands - 1].bitfield.zmmword
+ && !i.types[t->operands - 2].bitfield.zmmword)
+ {
+ i.error = operand_size_mismatch;
+ return 1;
}
}