x86: further refine SSE check (SSE4a, SHA, GFNI)
authorJan Beulich <jbeulich@suse.com>
Wed, 11 Dec 2019 08:42:29 +0000 (09:42 +0100)
committerJan Beulich <jbeulich@suse.com>
Wed, 11 Dec 2019 08:42:29 +0000 (09:42 +0100)
In  ("x86: extend SSE check to PCLMULQDQ, AES, and GFNI insns") I went
both a little too far and not quite far enough:
- GFNI insns also have AVX512 variants, which also shouldn't get
  diagnosed,
- SSE4a insns should get diagnosed just like SSE4.x ones,
- SHA insns should get diagnosed just like PCLMULQDQ or AES ones.

gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/gas/i386/sse-check-error.l
gas/testsuite/gas/i386/sse-check-warn.e
gas/testsuite/gas/i386/sse-check.d
gas/testsuite/gas/i386/sse-check.s
gas/testsuite/gas/i386/x86-64-sse-check-error.l

index 093219747e901f24883f139fc0e7f8f5d4fcae4b..4931c1a8115b5c6c384a06e1c115a16853d6a248 100644 (file)
@@ -1,3 +1,13 @@
+2018-12-11  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386.c (md_assemble): Extend SSE check conditional.
+       * testsuite/gas/i386/sse-check.s: Add SSE4a and SHA tests.
+       Extend GFNI tests.
+       * testsuite/gas/i386/sse-check.d: Adjust expectations.
+       * testsuite/gas/i386/sse-check-error.l,
+       testsuite/gas/i386/x86-64-sse-check-error.l: Likewise.
+       * testsuite/gas/i386/sse-check-warn.e: Likewise.
+
 2019-12-10  Vladimir Murzin  <vladimir.murzin@arm.com>
 
        * config/tc-arm.c (s_arm_arch): Set selected_ctx_ext_table.
index b62af342684a7d29e73ac620e5256e74a1777777..accb6342038a5de8ea520fd19451fa96dce5bf77 100644 (file)
@@ -4286,14 +4286,17 @@ md_assemble (char *line)
   if (sse_check != check_none
       && !i.tm.opcode_modifier.noavx
       && !i.tm.cpu_flags.bitfield.cpuavx
+      && !i.tm.cpu_flags.bitfield.cpuavx512f
       && (i.tm.cpu_flags.bitfield.cpusse
          || i.tm.cpu_flags.bitfield.cpusse2
          || i.tm.cpu_flags.bitfield.cpusse3
          || i.tm.cpu_flags.bitfield.cpussse3
          || i.tm.cpu_flags.bitfield.cpusse4_1
          || i.tm.cpu_flags.bitfield.cpusse4_2
+         || i.tm.cpu_flags.bitfield.cpusse4a
          || i.tm.cpu_flags.bitfield.cpupclmul
          || i.tm.cpu_flags.bitfield.cpuaes
+         || i.tm.cpu_flags.bitfield.cpusha
          || i.tm.cpu_flags.bitfield.cpugfni))
     {
       (sse_check == check_warning
index 3f78120d0b0e0d83d9f0200c83902ae00b93e96c..30498b7e39ec079ec74d39972dc966e9a9c99b7e 100644 (file)
@@ -8,6 +8,8 @@
 .*:23: Error: .*
 .*:26: Error: .*
 .*:29: Error: .*
+.*:32: Error: .*
+.*:35: Error: .*
 GAS LISTING .*
 
 
@@ -42,17 +44,33 @@ GAS LISTING .*
 .*  Error: SSE instruction `pcmpgtq' is used
 [      ]*20[   ]+C1
 [      ]*21[   ]+
-[      ]*22[   ]+\# PCMUL instruction
-[      ]*23[   ]+\?\?\?\? 660F3A44             pclmulqdq \$-1,%xmm1,%xmm2
-.*  Error: SSE instruction `pclmulqdq' is used
-[      ]*23[   ]+D1FF
+[      ]*22[   ]+\# SSE4a instruction
+[      ]*23[   ]+\?\?\?\? 660F78C0             extrq \$0, \$0, %xmm0
+.*  Error: SSE instruction `extrq' is used
+[      ]*23[   ]+0000
 [      ]*24[   ]+
-[      ]*25[   ]+\# AES instructions
-[      ]*26[   ]+\?\?\?\? 660F38DE             aesdec %xmm1,%xmm2
-.*  Error: SSE instruction `aesdec' is used
-[      ]*26[   ]+D1
+[      ]*25[   ]+\# PCMUL instruction
+[      ]*26[   ]+\?\?\?\? 660F3A44             pclmulqdq \$-1,%xmm1,%xmm2
+.*  Error: SSE instruction `pclmulqdq' is used
+[      ]*26[   ]+D1FF
 [      ]*27[   ]+
-[      ]*28[   ]+\# GFNI instructions
-[      ]*29[   ]+\?\?\?\? 660F38CF             gf2p8mulb %xmm1,%xmm2
-.*  Error: SSE instruction `gf2p8mulb' is used
+[      ]*28[   ]+\# AES instructions
+[      ]*29[   ]+\?\?\?\? 660F38DE             aesdec %xmm1,%xmm2
+.*  Error: SSE instruction `aesdec' is used
 [      ]*29[   ]+D1
+[      ]*30[   ]+
+[      ]*31[   ]+\# SHA instruction
+[      ]*32[   ]+\?\?\?\? 0F38C8C0             sha1nexte %xmm0, %xmm0
+.*  Error: SSE instruction `sha1nexte' is used
+[      ]*33[   ]+
+[      ]*34[   ]+\# GFNI instructions
+[      ]*35[   ]+\?\?\?\? 660F38CF             gf2p8mulb %xmm1,%xmm2
+.*  Error: SSE instruction `gf2p8mulb' is used
+[      ]*35[   ]+D1
+[      ]*36[   ]+\?\?\?\? 62F27D09             vgf2p8mulb %xmm0, %xmm0, %xmm0\{%k1\}
+[      ]*36[   ]+CFC0
+[      ]*37[   ]+\?\?\?\? 62F27D48             vgf2p8mulb %zmm0, %zmm0, %zmm0
+\fGAS LISTING .*
+
+
+[      ]*37[   ]+CFC0
index 6498bc8f0972858a970ab8e6467ab78ad58fd9f8..33f07b24ebaf83b220a667ad692df455960f1e95 100644 (file)
@@ -5,6 +5,8 @@
 .*:16: Warning: SSE instruction `phaddw' is used
 .*:19: Warning: SSE instruction `blendvpd' is used
 .*:20: Warning: SSE instruction `pcmpgtq' is used
-.*:23: Warning: SSE instruction `pclmulqdq' is used
-.*:26: Warning: SSE instruction `aesdec' is used
-.*:29: Warning: SSE instruction `gf2p8mulb' is used
+.*:23: Warning: SSE instruction `extrq' is used
+.*:26: Warning: SSE instruction `pclmulqdq' is used
+.*:29: Warning: SSE instruction `aesdec' is used
+.*:32: Warning: SSE instruction `sha1nexte' is used
+.*:35: Warning: SSE instruction `gf2p8mulb' is used
index 67656ae19fe95a6caf98fbf4b07c8bbc664260c5..dd4d21aa3889d12ec6cdd20df845730516b78ae1 100644 (file)
@@ -13,7 +13,11 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f 38 01 ca          phaddw %xmm2,%xmm1
 [      ]*[a-f0-9]+:    66 0f 38 15 c1          blendvpd %xmm0,%xmm1,%xmm0
 [      ]*[a-f0-9]+:    66 0f 38 37 c1          pcmpgtq %xmm1,%xmm0
+[      ]*[a-f0-9]+:    66 0f 78 c0 00 00       extrq  \$0x0,\$0x0,%xmm0
 [      ]*[a-f0-9]+:    66 0f 3a 44 d1 ff       pclmulqdq \$0xff,%xmm1,%xmm2
 [      ]*[a-f0-9]+:    66 0f 38 de d1          aesdec %xmm1,%xmm2
+[      ]*[a-f0-9]+:    0f 38 c8 c0             sha1nexte %xmm0,%xmm0
 [      ]*[a-f0-9]+:    66 0f 38 cf d1          gf2p8mulb %xmm1,%xmm2
+[      ]*[a-f0-9]+:    62 f2 7d 09 cf c0       vgf2p8mulb %xmm0,%xmm0,%xmm0\{%k1\}
+[      ]*[a-f0-9]+:    62 f2 7d 48 cf c0       vgf2p8mulb %zmm0,%zmm0,%zmm0
 #pass
index 3ec1e560af457fc2c9e352718d6fe6d20c32da0d..a76d1ef9bc4a2113f47dc6c702e02ad83e53c992 100644 (file)
@@ -19,11 +19,19 @@ _start:
        blendvpd %xmm0,%xmm1,%xmm0
        pcmpgtq %xmm1,%xmm0
 
+# SSE4a instruction
+       extrq $0, $0, %xmm0
+
 # PCMUL instruction
        pclmulqdq $-1,%xmm1,%xmm2
 
 # AES instructions
        aesdec %xmm1,%xmm2
 
+# SHA instruction
+       sha1nexte %xmm0, %xmm0
+
 # GFNI instructions
        gf2p8mulb %xmm1,%xmm2
+       vgf2p8mulb %xmm0, %xmm0, %xmm0{%k1}
+       vgf2p8mulb %zmm0, %zmm0, %zmm0
index 3f78120d0b0e0d83d9f0200c83902ae00b93e96c..30498b7e39ec079ec74d39972dc966e9a9c99b7e 100644 (file)
@@ -8,6 +8,8 @@
 .*:23: Error: .*
 .*:26: Error: .*
 .*:29: Error: .*
+.*:32: Error: .*
+.*:35: Error: .*
 GAS LISTING .*
 
 
@@ -42,17 +44,33 @@ GAS LISTING .*
 .*  Error: SSE instruction `pcmpgtq' is used
 [      ]*20[   ]+C1
 [      ]*21[   ]+
-[      ]*22[   ]+\# PCMUL instruction
-[      ]*23[   ]+\?\?\?\? 660F3A44             pclmulqdq \$-1,%xmm1,%xmm2
-.*  Error: SSE instruction `pclmulqdq' is used
-[      ]*23[   ]+D1FF
+[      ]*22[   ]+\# SSE4a instruction
+[      ]*23[   ]+\?\?\?\? 660F78C0             extrq \$0, \$0, %xmm0
+.*  Error: SSE instruction `extrq' is used
+[      ]*23[   ]+0000
 [      ]*24[   ]+
-[      ]*25[   ]+\# AES instructions
-[      ]*26[   ]+\?\?\?\? 660F38DE             aesdec %xmm1,%xmm2
-.*  Error: SSE instruction `aesdec' is used
-[      ]*26[   ]+D1
+[      ]*25[   ]+\# PCMUL instruction
+[      ]*26[   ]+\?\?\?\? 660F3A44             pclmulqdq \$-1,%xmm1,%xmm2
+.*  Error: SSE instruction `pclmulqdq' is used
+[      ]*26[   ]+D1FF
 [      ]*27[   ]+
-[      ]*28[   ]+\# GFNI instructions
-[      ]*29[   ]+\?\?\?\? 660F38CF             gf2p8mulb %xmm1,%xmm2
-.*  Error: SSE instruction `gf2p8mulb' is used
+[      ]*28[   ]+\# AES instructions
+[      ]*29[   ]+\?\?\?\? 660F38DE             aesdec %xmm1,%xmm2
+.*  Error: SSE instruction `aesdec' is used
 [      ]*29[   ]+D1
+[      ]*30[   ]+
+[      ]*31[   ]+\# SHA instruction
+[      ]*32[   ]+\?\?\?\? 0F38C8C0             sha1nexte %xmm0, %xmm0
+.*  Error: SSE instruction `sha1nexte' is used
+[      ]*33[   ]+
+[      ]*34[   ]+\# GFNI instructions
+[      ]*35[   ]+\?\?\?\? 660F38CF             gf2p8mulb %xmm1,%xmm2
+.*  Error: SSE instruction `gf2p8mulb' is used
+[      ]*35[   ]+D1
+[      ]*36[   ]+\?\?\?\? 62F27D09             vgf2p8mulb %xmm0, %xmm0, %xmm0\{%k1\}
+[      ]*36[   ]+CFC0
+[      ]*37[   ]+\?\?\?\? 62F27D48             vgf2p8mulb %zmm0, %zmm0, %zmm0
+\fGAS LISTING .*
+
+
+[      ]*37[   ]+CFC0