x86: Swap destination/source to encode VEX only if possible

When encoding VEX, we can swap destination and source only if there are
more than 1 register operand.

	* config/tc-i386.c (build_vex_prefix): Swap destination and
	source only if there are more than 1 register operand.
This commit is contained in:
H.J. Lu
2018-09-13 06:12:31 -07:00
parent 57f6375ec1
commit 79f0fa25b9
2 changed files with 9 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2018-09-13 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (build_vex_prefix): Swap destination and
source only if there are more than 1 register operand.
2018-09-13 Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (operand_size_match): Also deal with three

View File

@ -3364,9 +3364,10 @@ build_vex_prefix (const insn_template *t)
else
register_specifier = 0xf;
/* Use 2-byte VEX prefix by swapping destination and source
operand. */
if (i.vec_encoding != vex_encoding_vex3
/* Use 2-byte VEX prefix by swapping destination and source operand
if there are more than 1 register operand. */
if (i.reg_operands > 1
&& i.vec_encoding != vex_encoding_vex3
&& i.dir_encoding == dir_encoding_default
&& i.operands == i.reg_operands
&& operand_type_equal (&i.types[0], &i.types[i.operands - 1])