From 79f0fa25b95fd82122ee76d61fded661cc3ece87 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 13 Sep 2018 06:12:31 -0700 Subject: 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. --- gas/config/tc-i386.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'gas/config') diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 2bff48a..40b4583 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -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]) -- cgit v1.1