aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-i386.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2019-03-19 21:10:21 +0800
committerH.J. Lu <hjl.tools@gmail.com>2019-03-19 21:11:21 +0800
commit7b1d7ca194544554f7d41aea7fdf7a69c232f15d (patch)
treeefa88167376872739faa0b065fda004b0da59ae2 /gas/config/tc-i386.c
parent89199bb5a027d21c56dafd2cd898487118949ecf (diff)
downloadfsf-binutils-gdb-7b1d7ca194544554f7d41aea7fdf7a69c232f15d.zip
fsf-binutils-gdb-7b1d7ca194544554f7d41aea7fdf7a69c232f15d.tar.gz
fsf-binutils-gdb-7b1d7ca194544554f7d41aea7fdf7a69c232f15d.tar.bz2
x86: Correct EVEX to 128-bit EVEX optimization
Since not all AVX512F processors support AVX512VL, we can optimize 512-bit EVEX to 128-bit EVEX encoding for upper 16 vector registers only when AVX512VL is enabled explicitly at command-line or via ".arch .avx512vl" directive. PR gas/24352 * config/tc-i386.c (optimize_encoding): Check only cpu_arch_flags.bitfield.cpuavx512vl. * testsuite/gas/i386/i386.exp: Run x86-64-optimize-2b. * testsuite/gas/i386/x86-64-optimize-2.d: Revert the last change. * testsuite/gas/i386/x86-64-optimize-2b.d: New file. * testsuite/gas/i386/x86-64-optimize-2b.s: Likewise.
Diffstat (limited to 'gas/config/tc-i386.c')
-rw-r--r--gas/config/tc-i386.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index fa06075..3885728 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -3985,9 +3985,6 @@ optimize_encoding (void)
&& !i.rounding
&& is_evex_encoding (&i.tm)
&& (i.vec_encoding != vex_encoding_evex
- || cpu_arch_flags.bitfield.cpuavx
- || cpu_arch_isa_flags.bitfield.cpuavx
- || cpu_arch_flags.bitfield.cpuavx512vl
|| cpu_arch_isa_flags.bitfield.cpuavx512vl
|| i.tm.cpu_flags.bitfield.cpuavx512vl
|| (i.tm.operand_types[2].bitfield.zmmword
@@ -4045,17 +4042,13 @@ optimize_encoding (void)
*/
if (is_evex_encoding (&i.tm))
{
- if (i.vec_encoding != vex_encoding_evex
- && (cpu_arch_flags.bitfield.cpuavx
- || cpu_arch_isa_flags.bitfield.cpuavx))
+ if (i.vec_encoding != vex_encoding_evex)
{
i.tm.opcode_modifier.vex = VEX128;
i.tm.opcode_modifier.vexw = VEXW0;
i.tm.opcode_modifier.evex = 0;
}
- else if (optimize > 1
- && (cpu_arch_flags.bitfield.cpuavx512vl
- || cpu_arch_isa_flags.bitfield.cpuavx512vl))
+ else if (optimize > 1)
i.tm.opcode_modifier.evex = EVEX128;
else
return;