x86: change AVX512VL handling in cpu_flags_match()
authorJan Beulich <jbeulich@novell.com>
Thu, 8 Mar 2018 07:45:56 +0000 (08:45 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 8 Mar 2018 07:45:56 +0000 (08:45 +0100)
In order to add an AVX512F counterpart to the present AVX checking, it
is better to move the AVX512VL check out of the conditional it's
currently in.

gas/ChangeLog
gas/config/tc-i386.c

index 144edef..bd58786 100644 (file)
@@ -1,5 +1,9 @@
 2018-03-08  Jan Beulich  <jbeulich@suse.com>
 
+       * config/tc-i386.c (cpu_flags_match): Move AVX512VL check ahead.
+
+2018-03-08  Jan Beulich  <jbeulich@suse.com>
+
        * config/tc-i386.c (CPU_FLAGS_32BIT_MATCH): Delete.
        (cpu_flags_match): Use CPU_FLAGS_ARCH_MATCH instead of
        CPU_FLAGS_32BIT_MATCH.
index dee3644..7f2bd2d 100644 (file)
@@ -1712,6 +1712,11 @@ cpu_flags_match (const insn_template *t)
       /* This instruction is available only on some archs.  */
       i386_cpu_flags cpu = cpu_arch_flags;
 
+      /* AVX512VL is no standalone feature - match it and then strip it.  */
+      if (x.bitfield.cpuavx512vl && !cpu.bitfield.cpuavx512vl)
+       return match;
+      x.bitfield.cpuavx512vl = 0;
+
       cpu = cpu_flags_and (x, cpu);
       if (!cpu_flags_all_zero (&cpu))
        {
@@ -1724,17 +1729,6 @@ cpu_flags_match (const insn_template *t)
                  && (!x.bitfield.cpupclmul || cpu.bitfield.cpupclmul))
                match |= CPU_FLAGS_ARCH_MATCH;
            }
-         else if (x.bitfield.cpuavx512vl)
-           {
-             /* Match AVX512VL.  */
-             if (cpu.bitfield.cpuavx512vl)
-               {
-                 /* Need another match.  */
-                 cpu.bitfield.cpuavx512vl = 0;
-                 if (!cpu_flags_all_zero (&cpu))
-                   match |= CPU_FLAGS_ARCH_MATCH;
-               }
-           }
          else
            match |= CPU_FLAGS_ARCH_MATCH;
        }