diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2019-03-19 21:10:21 +0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2019-03-19 21:11:21 +0800 |
commit | 7b1d7ca194544554f7d41aea7fdf7a69c232f15d (patch) | |
tree | efa88167376872739faa0b065fda004b0da59ae2 /gas/config/tc-i386.c | |
parent | 89199bb5a027d21c56dafd2cd898487118949ecf (diff) | |
download | fsf-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.c | 11 |
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; |