59a95143dd
For sources which can't use any vector instructions, <x86intrin.h> and <immintrin.h> cannot be included for compiler intrinsics: $ echo "#include <x86intrin.h>" | gcc -S -O2 -mno-sse -mno-mmx -x c - In file included from /usr/include/stdlib.h:1013, from /usr/lib/gcc/x86_64-redhat-linux/10/include/mm_malloc.h:27, from /usr/lib/gcc/x86_64-redhat-linux/10/include/xmmintrin.h:34, from /usr/lib/gcc/x86_64-redhat-linux/10/include/immintrin.h:29, from /usr/lib/gcc/x86_64-redhat-linux/10/include/x86intrin.h:32, from <stdin>:1: /usr/include/bits/stdlib-float.h: In function ‘atof’: /usr/include/bits/stdlib-float.h:26:1: error: SSE register return with SSE disabled 26 | { | ^ $ libgcc/config/i386/shadow-stack-unwind.h has a workaround: /* NB: We need _get_ssp and _inc_ssp from <cetintrin.h>. But we can't include <x86intrin.h> which ends up including <mm_malloc.h>, which includes <stdlib.h> and <errno.h> unconditionally. But we can't include any libc system headers unconditionally from libgcc. Avoid including <mm_malloc.h> here by defining _IMMINTRIN_H_INCLUDED. */ #define _IMMINTRIN_H_INCLUDED #include <cetintrin.h> #undef _IMMINTRIN_H_INCLUDED Add a standalone intrinsic header file, <x86gprintrin.h>, to provide integer only intrinsics. All integer only intrinsics are placed in <x86gprintrin.h>. <x86intrin.h> and <immintrin.h> simply include <x86gprintrin.h>. gcc/ PR target/97148 * config.gcc (extra_headers): Add x86gprintrin.h. * config/i386/adxintrin.h: Check _X86GPRINTRIN_H_INCLUDED for <x86gprintrin.h>. * config/i386/bmi2intrin.h: Likewise. * config/i386/bmiintrin.h: Likewise. * config/i386/cetintrin.h: Likewise. * config/i386/cldemoteintrin.h: Likewise. * config/i386/clflushoptintrin.h: Likewise. * config/i386/clwbintrin.h: Likewise. * config/i386/enqcmdintrin.h: Likewise. * config/i386/fxsrintrin.h: Likewise. * config/i386/ia32intrin.h: Likewise. * config/i386/lwpintrin.h: Likewise. * config/i386/lzcntintrin.h: Likewise. * config/i386/movdirintrin.h: Likewise. * config/i386/pconfigintrin.h: Likewise. * config/i386/pkuintrin.h: Likewise. * config/i386/rdseedintrin.h: Likewise. * config/i386/rtmintrin.h: Likewise. * config/i386/serializeintrin.h: Likewise. * config/i386/tbmintrin.h: Likewise. * config/i386/tsxldtrkintrin.h: Likewise. * config/i386/waitpkgintrin.h: Likewise. * config/i386/wbnoinvdintrin.h: Likewise. * config/i386/xsavecintrin.h: Likewise. * config/i386/xsaveintrin.h: Likewise. * config/i386/xsaveoptintrin.h: Likewise. * config/i386/xsavesintrin.h: Likewise. * config/i386/xtestintrin.h: Likewise. * config/i386/immintrin.h: Include <x86gprintrin.h> instead of <fxsrintrin.h>, <xsaveintrin.h>, <xsaveoptintrin.h>, <xsavesintrin.h>, <xsavecintrin.h>, <lzcntintrin.h>, <bmiintrin.h>, <bmi2intrin.h>, <xtestintrin.h>, <cetintrin.h>, <movdirintrin.h>, <sgxintrin.h, <pconfigintrin.h>, <waitpkgintrin.h>, <cldemoteintrin.h>, <enqcmdintrin.h>, <serializeintrin.h>, <tsxldtrkintrin.h>, <adxintrin.h>, <clwbintrin.h>, <clflushoptintrin.h>, <wbnoinvdintrin.h> and <pkuintrin.h>. (_wbinvd): Moved to config/i386/x86gprintrin.h. (_rdrand16_step): Likewise. (_rdrand32_step): Likewise. (_rdpid_u32): Likewise. (_readfsbase_u32): Likewise. (_readfsbase_u64): Likewise. (_readgsbase_u32): Likewise. (_readgsbase_u64): Likewise. (_writefsbase_u32): Likewise. (_writefsbase_u64): Likewise. (_writegsbase_u32): Likewise. (_writegsbase_u64): Likewise. (_rdrand64_step): Likewise. (_ptwrite64): Likewise. (_ptwrite32): Likewise. * config/i386/x86gprintrin.h: New file. * config/i386/x86intrin.h: Include <x86gprintrin.h>. Don't include <ia32intrin.h>, <lwpintrin.h>, <tbmintrin.h>, <popcntintrin.h>, <mwaitxintrin.h> and <clzerointrin.h>. gcc/testsuite/ * gcc.target/i386/avx-1.c (__builtin_ia32_lwpval32): New to support <lwpintrin.h> included in <x86gprintrin.h>. (__builtin_ia32_lwpval64): Likewise. (__builtin_ia32_lwpins32): Likewise. (__builtin_ia32_lwpins64): Likewise. (__builtin_ia32_bextri_u32): New to support <tbmintrin.h> included in <x86gprintrin.h>. (__builtin_ia32_bextri_u64): Likewise. * gcc.target/i386/x86gprintrin-1.c: New test. * gcc.target/i386/x86gprintrin-2.c: Likewise. * gcc.target/i386/x86gprintrin-3.c: Likewise. * gcc.target/i386/x86gprintrin-4.c: Likewise. * gcc.target/i386/x86gprintrin-4a.c: Likewise. * gcc.target/i386/x86gprintrin-5.c: Likewise. * gcc.target/i386/x86gprintrin-5a.c: Likewise. * gcc.target/i386/x86gprintrin-5b.c: Likewise. * gcc.target/i386/x86gprintrin-6.c: Likewise. libgcc/ PR target/97148 * config/i386/shadow-stack-unwind.h: Include <x86gprintrin.h> instead of <cetintrin.h>. |
||
---|---|---|
.. | ||
aarch64 | ||
alpha | ||
arc | ||
arm | ||
avr | ||
bfin | ||
bpf | ||
c6x | ||
cr16 | ||
cris | ||
csky | ||
epiphany | ||
fr30 | ||
frv | ||
ft32 | ||
gcn | ||
h8300 | ||
i386 | ||
ia64 | ||
iq2000 | ||
libbid | ||
lm32 | ||
m32c | ||
m32r | ||
m68k | ||
mcore | ||
microblaze | ||
mips | ||
mmix | ||
moxie | ||
msp430 | ||
nds32 | ||
nios2 | ||
nvptx | ||
or1k | ||
pa | ||
pdp11 | ||
pru | ||
riscv | ||
rl78 | ||
rs6000 | ||
rx | ||
s390 | ||
score | ||
sh | ||
sol2 | ||
sparc | ||
stormy16 | ||
tilegx | ||
tilepro | ||
v850 | ||
vax | ||
visium | ||
vms | ||
xtensa | ||
darwin10-unwind-find-enc-func.c | ||
darwin-64.c | ||
darwin-crt3.c | ||
darwin-crt-tm.c | ||
gthr-lynx.h | ||
gthr-rtems.h | ||
gthr-vxworks-cond.c | ||
gthr-vxworks-thread.c | ||
gthr-vxworks-tls.c | ||
gthr-vxworks.c | ||
gthr-vxworks.h | ||
hardfp.c | ||
libgcc-glibc.ver | ||
libgcc-libsystem.ver | ||
no-sfp-machine.h | ||
no-unwind.h | ||
t-crtfm | ||
t-crtstuff-pic | ||
t-darwin | ||
t-dfprules | ||
t-eh-dw2-dip | ||
t-fdpbit | ||
t-fixedpoint-gnu-prefix | ||
t-fpbit | ||
t-freebsd-thread | ||
t-gnu-prefix | ||
t-gthr-noweak | ||
t-gthr-vxworks | ||
t-gthr-vxworksae | ||
t-hardfp | ||
t-hardfp-sfdf | ||
t-libgcc-pic | ||
t-libunwind | ||
t-libunwind-elf | ||
t-linux | ||
t-openbsd-thread | ||
t-rtems | ||
t-slibgcc | ||
t-slibgcc-darwin | ||
t-slibgcc-elf-ver | ||
t-slibgcc-fuchsia | ||
t-slibgcc-gld | ||
t-slibgcc-gld-nover | ||
t-slibgcc-hpux | ||
t-slibgcc-libgcc | ||
t-slibgcc-nolc-override | ||
t-slibgcc-sld | ||
t-slibgcc-vms | ||
t-softfp | ||
t-softfp-compat | ||
t-softfp-excl | ||
t-softfp-sfdf | ||
t-softfp-sfdftf | ||
t-softfp-tf | ||
t-stack | ||
t-tls | ||
t-vxcrtstuff | ||
t-vxworks | ||
t-vxworks7 | ||
t-vxworksae | ||
unwind-dw2-fde-darwin.c | ||
vxcache.c | ||
vxcrtstuff.c |