This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] x86: correct operand type checks


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=141975a1e53798a48917271295962fb1a7e967d0

commit 141975a1e53798a48917271295962fb1a7e967d0
Author: Jan Beulich <jbeulich@novell.com>
Date:   Fri Dec 15 09:14:52 2017 +0100

    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.

Diff:
---
 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 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.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]