From 6e3e5c9e4181562682ffb60c562c4bce263b71a0 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 8 Mar 2018 08:35:01 +0100 Subject: [PATCH] x86: extend SSE check to PCLMULQDQ, AES, and GFNI insns When aiming at not mixing SSE and AVX insns, these should be warned about the same way other non-AVX ones are treated. --- gas/ChangeLog | 20 +++++++++++++++++++ gas/config/tc-i386.c | 6 +++++- .../gas/i386/ilp32/x86-64-sse-check-none.d | 16 ++------------- .../gas/i386/ilp32/x86-64-sse-check-warn.d | 14 +------------ .../gas/i386/ilp32/x86-64-sse-check.d | 14 +------------ gas/testsuite/gas/i386/sse-check-error.l | 18 +++++++++++++++++ gas/testsuite/gas/i386/sse-check-none.d | 16 ++------------- gas/testsuite/gas/i386/sse-check-none.s | 19 +----------------- gas/testsuite/gas/i386/sse-check-warn.d | 14 +------------ gas/testsuite/gas/i386/sse-check-warn.e | 3 +++ gas/testsuite/gas/i386/sse-check.d | 3 +++ gas/testsuite/gas/i386/sse-check.s | 9 +++++++++ .../gas/i386/x86-64-sse-check-error.l | 18 +++++++++++++++++ .../gas/i386/x86-64-sse-check-none.d | 16 ++------------- .../gas/i386/x86-64-sse-check-warn.d | 14 +------------ gas/testsuite/gas/i386/x86-64-sse-check.d | 14 +------------ 16 files changed, 88 insertions(+), 126 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index f1c18aa546..78fafb6615 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,23 @@ +2018-03-08 Jan Beulich + + * config/tc-i386.c (md_assemble): Extend SSE check conditional. + * testsuite/gas/i386/ilp32/x86-64-sse-check-none.d, + testsuite/gas/i386/ilp32/x86-64-sse-check-warn.d, + testsuite/gas/i386/ilp32/x86-64-sse-check.d, + testsuite/gas/i386/sse-check-none.d, + testsuite/gas/i386/sse-check-warn.d, + testsuite/gas/i386/x86-64-sse-check.d, + testsuite/gas/i386/x86-64-sse-check-none.d, + testsuite/gas/i386/x86-64-sse-check-warn.d: Refer to sse-check.d. + * testsuite/gas/i386/sse-check.s: Add AES, GFNI, and PCLMUL + tests. + * testsuite/gas/i386/sse-check-none.s: Replace code by inclusion + of sse-check.s. + * 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. + 2018-03-08 Jan Beulich * config/tc-i386.c (operand_size_match): Drop / replace uses of diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 16f11742e0..4cf7b9daf5 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4008,12 +4008,16 @@ 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.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.cpusse4_2 + || i.tm.cpu_flags.bitfield.cpupclmul + || i.tm.cpu_flags.bitfield.cpuaes + || i.tm.cpu_flags.bitfield.cpugfni)) { (sse_check == check_warning ? as_warn diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-none.d b/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-none.d index 7bef233c4e..1d4f1db2fc 100644 --- a/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-none.d +++ b/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-none.d @@ -1,17 +1,5 @@ #source: ../sse-check-none.s -#as: -msse-check=error +#as: -msse-check=error -I${srcdir}/$subdir/.. #objdump: -dw #name: x86-64 (ILP32) SSE check (.sse_check none) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: ../sse-check.d diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-warn.d b/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-warn.d index f315180b94..b5914883b9 100644 --- a/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-warn.d +++ b/gas/testsuite/gas/i386/ilp32/x86-64-sse-check-warn.d @@ -3,16 +3,4 @@ #as: -msse-check=warning #objdump: -dw #name: x86-64 (ILP32) SSE check (warning) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: ../sse-check.d diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-sse-check.d b/gas/testsuite/gas/i386/ilp32/x86-64-sse-check.d index a2f28892f6..f034f00a8e 100644 --- a/gas/testsuite/gas/i386/ilp32/x86-64-sse-check.d +++ b/gas/testsuite/gas/i386/ilp32/x86-64-sse-check.d @@ -2,16 +2,4 @@ #as: -msse-check=none #objdump: -dw #name: x86-64 (ILP32) SSE check (none) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: ../sse-check.d diff --git a/gas/testsuite/gas/i386/sse-check-error.l b/gas/testsuite/gas/i386/sse-check-error.l index 5df6d67138..3f78120d0b 100644 --- a/gas/testsuite/gas/i386/sse-check-error.l +++ b/gas/testsuite/gas/i386/sse-check-error.l @@ -5,6 +5,9 @@ .*:16: Error: .* .*:19: Error: .* .*:20: Error: .* +.*:23: Error: .* +.*:26: Error: .* +.*:29: Error: .* GAS LISTING .* @@ -38,3 +41,18 @@ GAS LISTING .* [ ]*20[ ]+\?\?\?\? 660F3837 pcmpgtq %xmm1,%xmm0 .* 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 +[ ]*24[ ]+ +[ ]*25[ ]+\# AES instructions +[ ]*26[ ]+\?\?\?\? 660F38DE aesdec %xmm1,%xmm2 +.* Error: SSE instruction `aesdec' is used +[ ]*26[ ]+D1 +[ ]*27[ ]+ +[ ]*28[ ]+\# GFNI instructions +[ ]*29[ ]+\?\?\?\? 660F38CF gf2p8mulb %xmm1,%xmm2 +.* Error: SSE instruction `gf2p8mulb' is used +[ ]*29[ ]+D1 diff --git a/gas/testsuite/gas/i386/sse-check-none.d b/gas/testsuite/gas/i386/sse-check-none.d index 87189f616e..1965070919 100644 --- a/gas/testsuite/gas/i386/sse-check-none.d +++ b/gas/testsuite/gas/i386/sse-check-none.d @@ -1,16 +1,4 @@ -#as: -msse-check=error +#as: -msse-check=error -I${srcdir}/$subdir #objdump: -dw #name: i386 SSE check (.sse_check none) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: sse-check.d diff --git a/gas/testsuite/gas/i386/sse-check-none.s b/gas/testsuite/gas/i386/sse-check-none.s index 336dd9f733..0af4972dac 100644 --- a/gas/testsuite/gas/i386/sse-check-none.s +++ b/gas/testsuite/gas/i386/sse-check-none.s @@ -1,21 +1,4 @@ # Check SSE instructions .sse_check none - .text -_start: - -# SSE instruction - addps %xmm2,%xmm1 - -# SSE2 instruction - addpd %xmm2,%xmm1 - -# SSE3 instruction - addsubpd %xmm2,%xmm1 - -# SSSE3 instruction - phaddw %xmm2,%xmm1 - -# SSE4 instructions - blendvpd %xmm0,%xmm1,%xmm0 - pcmpgtq %xmm1,%xmm0 + .include "sse-check.s" diff --git a/gas/testsuite/gas/i386/sse-check-warn.d b/gas/testsuite/gas/i386/sse-check-warn.d index 0b96b15f6f..694310e508 100644 --- a/gas/testsuite/gas/i386/sse-check-warn.d +++ b/gas/testsuite/gas/i386/sse-check-warn.d @@ -3,16 +3,4 @@ #stderr: sse-check-warn.e #objdump: -dw #name: i386 SSE check (warning) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: sse-check.d diff --git a/gas/testsuite/gas/i386/sse-check-warn.e b/gas/testsuite/gas/i386/sse-check-warn.e index 26b2001a68..6498bc8f09 100644 --- a/gas/testsuite/gas/i386/sse-check-warn.e +++ b/gas/testsuite/gas/i386/sse-check-warn.e @@ -5,3 +5,6 @@ .*: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 diff --git a/gas/testsuite/gas/i386/sse-check.d b/gas/testsuite/gas/i386/sse-check.d index 9329638c32..67656ae19f 100644 --- a/gas/testsuite/gas/i386/sse-check.d +++ b/gas/testsuite/gas/i386/sse-check.d @@ -13,4 +13,7 @@ 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 3a 44 d1 ff pclmulqdq \$0xff,%xmm1,%xmm2 +[ ]*[a-f0-9]+: 66 0f 38 de d1 aesdec %xmm1,%xmm2 +[ ]*[a-f0-9]+: 66 0f 38 cf d1 gf2p8mulb %xmm1,%xmm2 #pass diff --git a/gas/testsuite/gas/i386/sse-check.s b/gas/testsuite/gas/i386/sse-check.s index 7e5d208247..3ec1e560af 100644 --- a/gas/testsuite/gas/i386/sse-check.s +++ b/gas/testsuite/gas/i386/sse-check.s @@ -18,3 +18,12 @@ _start: # SSE4 instructions blendvpd %xmm0,%xmm1,%xmm0 pcmpgtq %xmm1,%xmm0 + +# PCMUL instruction + pclmulqdq $-1,%xmm1,%xmm2 + +# AES instructions + aesdec %xmm1,%xmm2 + +# GFNI instructions + gf2p8mulb %xmm1,%xmm2 diff --git a/gas/testsuite/gas/i386/x86-64-sse-check-error.l b/gas/testsuite/gas/i386/x86-64-sse-check-error.l index 5df6d67138..3f78120d0b 100644 --- a/gas/testsuite/gas/i386/x86-64-sse-check-error.l +++ b/gas/testsuite/gas/i386/x86-64-sse-check-error.l @@ -5,6 +5,9 @@ .*:16: Error: .* .*:19: Error: .* .*:20: Error: .* +.*:23: Error: .* +.*:26: Error: .* +.*:29: Error: .* GAS LISTING .* @@ -38,3 +41,18 @@ GAS LISTING .* [ ]*20[ ]+\?\?\?\? 660F3837 pcmpgtq %xmm1,%xmm0 .* 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 +[ ]*24[ ]+ +[ ]*25[ ]+\# AES instructions +[ ]*26[ ]+\?\?\?\? 660F38DE aesdec %xmm1,%xmm2 +.* Error: SSE instruction `aesdec' is used +[ ]*26[ ]+D1 +[ ]*27[ ]+ +[ ]*28[ ]+\# GFNI instructions +[ ]*29[ ]+\?\?\?\? 660F38CF gf2p8mulb %xmm1,%xmm2 +.* Error: SSE instruction `gf2p8mulb' is used +[ ]*29[ ]+D1 diff --git a/gas/testsuite/gas/i386/x86-64-sse-check-none.d b/gas/testsuite/gas/i386/x86-64-sse-check-none.d index ef38d8a8ab..f198573c3f 100644 --- a/gas/testsuite/gas/i386/x86-64-sse-check-none.d +++ b/gas/testsuite/gas/i386/x86-64-sse-check-none.d @@ -1,17 +1,5 @@ #source: sse-check-none.s -#as: -msse-check=error +#as: -msse-check=error -I${srcdir}/$subdir #objdump: -dw #name: x86-64 SSE check (.sse_check none) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: sse-check.d diff --git a/gas/testsuite/gas/i386/x86-64-sse-check-warn.d b/gas/testsuite/gas/i386/x86-64-sse-check-warn.d index 691185c34f..8719815e08 100644 --- a/gas/testsuite/gas/i386/x86-64-sse-check-warn.d +++ b/gas/testsuite/gas/i386/x86-64-sse-check-warn.d @@ -3,16 +3,4 @@ #stderr: sse-check-warn.e #objdump: -dw #name: x86-64 SSE check (warning) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: sse-check.d diff --git a/gas/testsuite/gas/i386/x86-64-sse-check.d b/gas/testsuite/gas/i386/x86-64-sse-check.d index 9ca0c79709..a3dd0599e4 100644 --- a/gas/testsuite/gas/i386/x86-64-sse-check.d +++ b/gas/testsuite/gas/i386/x86-64-sse-check.d @@ -2,16 +2,4 @@ #as: -msse-check=none #objdump: -dw #name: x86-64 SSE check (none) - -.*: file format .* - -Disassembly of section .text: - -0+ <_start>: -[ ]*[a-f0-9]+: 0f 58 ca addps %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f 58 ca addpd %xmm2,%xmm1 -[ ]*[a-f0-9]+: 66 0f d0 ca addsubpd %xmm2,%xmm1 -[ ]*[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 -#pass +#dump: sse-check.d