aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2017-12-15 09:14:52 +0100
committerJan Beulich <jbeulich@suse.com>2017-12-15 09:14:52 +0100
commit141975a1e53798a48917271295962fb1a7e967d0 (patch)
treeb827d40cf14e2d1b8f8383247b00e1afae0127bd /gas
parent93b71a266695669cb9aa8ddf2717a1ccd53c925d (diff)
downloadfsf-binutils-gdb-141975a1e53798a48917271295962fb1a7e967d0.zip
fsf-binutils-gdb-141975a1e53798a48917271295962fb1a7e967d0.tar.gz
fsf-binutils-gdb-141975a1e53798a48917271295962fb1a7e967d0.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-i386.c8
2 files changed, 9 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 96ceb58..3e00c76 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,10 @@
2017-12-15 Jan Beulich <jbeulich@suse.com>
+ * 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 <jbeulich@suse.com>
+
* config/tc-i386.c (build_modrm_byte): Add missing ! to reg64
check leading to abort().
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 36e5b19..5c71bb6 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. */