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.
This commit is contained in:
H.J. Lu
2018-07-24 09:47:47 -07:00
parent 1d97232ae3
commit 56522fc5af
2 changed files with 11 additions and 5 deletions

View File

@ -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> 2018-07-24 Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (check_VecOperands): Handle EVEXLIG when * config/tc-i386.c (check_VecOperands): Handle EVEXLIG when

View File

@ -3362,12 +3362,12 @@ build_vex_prefix (const insn_template *t)
vector_length = 1; vector_length = 1;
else else
{ {
int op; unsigned int op;
/* Determine vector length from the last multi-length vector /* Determine vector length from the last multi-length vector
operand. */ operand. */
vector_length = 0; vector_length = 0;
for (op = t->operands - 1; op >= 0; op--) for (op = t->operands; op--;)
if (t->operand_types[op].bitfield.xmmword if (t->operand_types[op].bitfield.xmmword
&& t->operand_types[op].bitfield.ymmword && t->operand_types[op].bitfield.ymmword
&& i.types[op].bitfield.ymmword) && i.types[op].bitfield.ymmword)
@ -3612,12 +3612,12 @@ build_evex_prefix (void)
if (!i.tm.opcode_modifier.evex if (!i.tm.opcode_modifier.evex
|| i.tm.opcode_modifier.evex == EVEXDYN) || i.tm.opcode_modifier.evex == EVEXDYN)
{ {
int op; unsigned int op;
/* Determine vector length from the last multi-length vector /* Determine vector length from the last multi-length vector
operand. */ operand. */
vec_length = 0; vec_length = 0;
for (op = i.operands - 1; op >= 0; op--) for (op = i.operands; op--;)
if (i.tm.operand_types[op].bitfield.xmmword if (i.tm.operand_types[op].bitfield.xmmword
+ i.tm.operand_types[op].bitfield.ymmword + i.tm.operand_types[op].bitfield.ymmword
+ i.tm.operand_types[op].bitfield.zmmword > 1) + i.tm.operand_types[op].bitfield.zmmword > 1)
@ -3658,7 +3658,7 @@ build_evex_prefix (void)
} }
} }
if (op < 0) if (op >= MAX_OPERANDS)
abort (); abort ();
} }