From 141975a1e53798a48917271295962fb1a7e967d0 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 15 Dec 2017 09:14:52 +0100 Subject: [PATCH] x86: correct operand type checks Again these look to be typos: No template currently allows for any two (or all three) of RegXMM, RegYMM, and RegZMM in a single operand. Quite clearly ! are missing, after the addition of which the checks for the first and (if present) second operands also fully match up. --- gas/ChangeLog | 5 +++++ gas/config/tc-i386.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 96ceb582a70..3e00c761d09 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2017-12-15 Jan Beulich + + * config/tc-i386.c (match_template): Add missing ! to + reg{x,y,z}mm checks in q- and l-suffix handling. + 2017-12-15 Jan Beulich * config/tc-i386.c (build_modrm_byte): Add missing ! to reg64 diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 36e5b1958a3..5c71bb69ff6 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4968,9 +4968,9 @@ match_template (char mnem_suffix) && !operand_types[0].bitfield.regymm && !operand_types[0].bitfield.regzmm) || (!operand_types[t->operands > 1].bitfield.regmmx - && operand_types[t->operands > 1].bitfield.regxmm - && operand_types[t->operands > 1].bitfield.regymm - && operand_types[t->operands > 1].bitfield.regzmm)) + && !operand_types[t->operands > 1].bitfield.regxmm + && !operand_types[t->operands > 1].bitfield.regymm + && !operand_types[t->operands > 1].bitfield.regzmm)) && (t->base_opcode != 0x0fc7 || t->extension_opcode != 1 /* cmpxchg8b */)) continue; @@ -4985,7 +4985,7 @@ match_template (char mnem_suffix) && ((!operand_types[0].bitfield.regmmx && !operand_types[0].bitfield.regxmm) || (!operand_types[t->operands > 1].bitfield.regmmx - && operand_types[t->operands > 1].bitfield.regxmm))) + && !operand_types[t->operands > 1].bitfield.regxmm))) continue; /* Do not verify operands when there are none. */