mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 16:38:05 +08:00
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.
This commit is contained in:
@ -1,3 +1,23 @@
|
|||||||
|
2018-03-08 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* 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 <jbeulich@suse.com>
|
2018-03-08 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* config/tc-i386.c (operand_size_match): Drop / replace uses of
|
* config/tc-i386.c (operand_size_match): Drop / replace uses of
|
||||||
|
@ -4008,12 +4008,16 @@ md_assemble (char *line)
|
|||||||
|
|
||||||
if (sse_check != check_none
|
if (sse_check != check_none
|
||||||
&& !i.tm.opcode_modifier.noavx
|
&& !i.tm.opcode_modifier.noavx
|
||||||
|
&& !i.tm.cpu_flags.bitfield.cpuavx
|
||||||
&& (i.tm.cpu_flags.bitfield.cpusse
|
&& (i.tm.cpu_flags.bitfield.cpusse
|
||||||
|| i.tm.cpu_flags.bitfield.cpusse2
|
|| i.tm.cpu_flags.bitfield.cpusse2
|
||||||
|| i.tm.cpu_flags.bitfield.cpusse3
|
|| i.tm.cpu_flags.bitfield.cpusse3
|
||||||
|| i.tm.cpu_flags.bitfield.cpussse3
|
|| i.tm.cpu_flags.bitfield.cpussse3
|
||||||
|| i.tm.cpu_flags.bitfield.cpusse4_1
|
|| 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
|
(sse_check == check_warning
|
||||||
? as_warn
|
? as_warn
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
#source: ../sse-check-none.s
|
#source: ../sse-check-none.s
|
||||||
#as: -msse-check=error
|
#as: -msse-check=error -I${srcdir}/$subdir/..
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: x86-64 (ILP32) SSE check (.sse_check none)
|
#name: x86-64 (ILP32) SSE check (.sse_check none)
|
||||||
|
#dump: ../sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -3,16 +3,4 @@
|
|||||||
#as: -msse-check=warning
|
#as: -msse-check=warning
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: x86-64 (ILP32) SSE check (warning)
|
#name: x86-64 (ILP32) SSE check (warning)
|
||||||
|
#dump: ../sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -2,16 +2,4 @@
|
|||||||
#as: -msse-check=none
|
#as: -msse-check=none
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: x86-64 (ILP32) SSE check (none)
|
#name: x86-64 (ILP32) SSE check (none)
|
||||||
|
#dump: ../sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -5,6 +5,9 @@
|
|||||||
.*:16: Error: .*
|
.*:16: Error: .*
|
||||||
.*:19: Error: .*
|
.*:19: Error: .*
|
||||||
.*:20: Error: .*
|
.*:20: Error: .*
|
||||||
|
.*:23: Error: .*
|
||||||
|
.*:26: Error: .*
|
||||||
|
.*:29: Error: .*
|
||||||
GAS LISTING .*
|
GAS LISTING .*
|
||||||
|
|
||||||
|
|
||||||
@ -38,3 +41,18 @@ GAS LISTING .*
|
|||||||
[ ]*20[ ]+\?\?\?\? 660F3837 pcmpgtq %xmm1,%xmm0
|
[ ]*20[ ]+\?\?\?\? 660F3837 pcmpgtq %xmm1,%xmm0
|
||||||
.* Error: SSE instruction `pcmpgtq' is used
|
.* Error: SSE instruction `pcmpgtq' is used
|
||||||
[ ]*20[ ]+C1
|
[ ]*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
|
||||||
|
@ -1,16 +1,4 @@
|
|||||||
#as: -msse-check=error
|
#as: -msse-check=error -I${srcdir}/$subdir
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: i386 SSE check (.sse_check none)
|
#name: i386 SSE check (.sse_check none)
|
||||||
|
#dump: sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -1,21 +1,4 @@
|
|||||||
# Check SSE instructions
|
# Check SSE instructions
|
||||||
|
|
||||||
.sse_check none
|
.sse_check none
|
||||||
.text
|
.include "sse-check.s"
|
||||||
_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
|
|
||||||
|
@ -3,16 +3,4 @@
|
|||||||
#stderr: sse-check-warn.e
|
#stderr: sse-check-warn.e
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: i386 SSE check (warning)
|
#name: i386 SSE check (warning)
|
||||||
|
#dump: sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -5,3 +5,6 @@
|
|||||||
.*:16: Warning: SSE instruction `phaddw' is used
|
.*:16: Warning: SSE instruction `phaddw' is used
|
||||||
.*:19: Warning: SSE instruction `blendvpd' is used
|
.*:19: Warning: SSE instruction `blendvpd' is used
|
||||||
.*:20: Warning: SSE instruction `pcmpgtq' 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
|
||||||
|
@ -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 01 ca phaddw %xmm2,%xmm1
|
||||||
[ ]*[a-f0-9]+: 66 0f 38 15 c1 blendvpd %xmm0,%xmm1,%xmm0
|
[ ]*[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 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
|
#pass
|
||||||
|
@ -18,3 +18,12 @@ _start:
|
|||||||
# SSE4 instructions
|
# SSE4 instructions
|
||||||
blendvpd %xmm0,%xmm1,%xmm0
|
blendvpd %xmm0,%xmm1,%xmm0
|
||||||
pcmpgtq %xmm1,%xmm0
|
pcmpgtq %xmm1,%xmm0
|
||||||
|
|
||||||
|
# PCMUL instruction
|
||||||
|
pclmulqdq $-1,%xmm1,%xmm2
|
||||||
|
|
||||||
|
# AES instructions
|
||||||
|
aesdec %xmm1,%xmm2
|
||||||
|
|
||||||
|
# GFNI instructions
|
||||||
|
gf2p8mulb %xmm1,%xmm2
|
||||||
|
@ -5,6 +5,9 @@
|
|||||||
.*:16: Error: .*
|
.*:16: Error: .*
|
||||||
.*:19: Error: .*
|
.*:19: Error: .*
|
||||||
.*:20: Error: .*
|
.*:20: Error: .*
|
||||||
|
.*:23: Error: .*
|
||||||
|
.*:26: Error: .*
|
||||||
|
.*:29: Error: .*
|
||||||
GAS LISTING .*
|
GAS LISTING .*
|
||||||
|
|
||||||
|
|
||||||
@ -38,3 +41,18 @@ GAS LISTING .*
|
|||||||
[ ]*20[ ]+\?\?\?\? 660F3837 pcmpgtq %xmm1,%xmm0
|
[ ]*20[ ]+\?\?\?\? 660F3837 pcmpgtq %xmm1,%xmm0
|
||||||
.* Error: SSE instruction `pcmpgtq' is used
|
.* Error: SSE instruction `pcmpgtq' is used
|
||||||
[ ]*20[ ]+C1
|
[ ]*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
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
#source: sse-check-none.s
|
#source: sse-check-none.s
|
||||||
#as: -msse-check=error
|
#as: -msse-check=error -I${srcdir}/$subdir
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: x86-64 SSE check (.sse_check none)
|
#name: x86-64 SSE check (.sse_check none)
|
||||||
|
#dump: sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -3,16 +3,4 @@
|
|||||||
#stderr: sse-check-warn.e
|
#stderr: sse-check-warn.e
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: x86-64 SSE check (warning)
|
#name: x86-64 SSE check (warning)
|
||||||
|
#dump: sse-check.d
|
||||||
.*: 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
|
|
||||||
|
@ -2,16 +2,4 @@
|
|||||||
#as: -msse-check=none
|
#as: -msse-check=none
|
||||||
#objdump: -dw
|
#objdump: -dw
|
||||||
#name: x86-64 SSE check (none)
|
#name: x86-64 SSE check (none)
|
||||||
|
#dump: sse-check.d
|
||||||
.*: 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
|
|
||||||
|
Reference in New Issue
Block a user