[binutils-gdb] x86: Use unsigned int to iterate through vector operands

H.J.Lu hjl@sourceware.org
Tue Jul 24 16:51:00 GMT 2018


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

commit 56522fc5af76ec88f650d8d305c0aa3d669c2849
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Jul 24 09:47:47 2018 -0700

    x86: Use unsigned int to iterate through vector operands
    
    Use unsigned int to iterate through multi-length vector operands to avoid
    sign-extension.
    
    	* config/tc-i386.c (build_vex_prefix): Use unsigned int to
    	iterate through multi-length vector operands.
    	(build_evex_prefix): Likewise.

Diff:
---
 gas/ChangeLog        |  6 ++++++
 gas/config/tc-i386.c | 10 +++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 7fb9259..c0b6801 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2018-07-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/tc-i386.c (build_vex_prefix): Use unsigned int to
+	iterate through multi-length vector operands.
+	(build_evex_prefix): Likewise.
+
 2018-07-24  Jan Beulich  <jbeulich@suse.com>
 
 	* config/tc-i386.c (check_VecOperands): Handle EVEXLIG when
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 81643a7..bcd2904 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -3362,12 +3362,12 @@ build_vex_prefix (const insn_template *t)
     vector_length = 1;
   else
     {
-      int op;
+      unsigned int op;
 
       /* Determine vector length from the last multi-length vector
 	 operand.  */
       vector_length = 0;
-      for (op = t->operands - 1; op >= 0; op--)
+      for (op = t->operands; op--;)
 	if (t->operand_types[op].bitfield.xmmword
 	    && t->operand_types[op].bitfield.ymmword
 	    && i.types[op].bitfield.ymmword)
@@ -3612,12 +3612,12 @@ build_evex_prefix (void)
       if (!i.tm.opcode_modifier.evex
 	  || i.tm.opcode_modifier.evex == EVEXDYN)
 	{
-	  int op;
+	  unsigned int op;
 
 	  /* Determine vector length from the last multi-length vector
 	     operand.  */
 	  vec_length = 0;
-	  for (op = i.operands - 1; op >= 0; op--)
+	  for (op = i.operands; op--;)
 	    if (i.tm.operand_types[op].bitfield.xmmword
 		+ i.tm.operand_types[op].bitfield.ymmword
 		+ i.tm.operand_types[op].bitfield.zmmword > 1)
@@ -3658,7 +3658,7 @@ build_evex_prefix (void)
 		  }
 	      }
 
-	  if (op < 0)
+	  if (op >= MAX_OPERANDS)
 	    abort ();
 	}



More information about the Binutils-cvs mailing list