On Fri, Oct 2, 2020 at 5:51 AM H.J. Lu <hjl.to...@gmail.com> wrote: > > On Wed, Sep 23, 2020 at 10:58 AM H.J. Lu <hjl.to...@gmail.com> wrote: > > > > 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>. > > > > Add the FSF copyright to <pconfigintrin.h>, <tsxldtrkintrin.h> and > > <wbnoinvdintrin.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/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/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/waitpkgintrin.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/enqcmdintrin.h: Check _X86GPRINTRIN_H_INCLUDED for > > <x86gprintrin.h>. Replace <enqcmdntrin.h> with <enqcmdintrin.h> > > in the error message. > > * 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/pconfigintrin.h: Add the FSF copyright. Check > > _X86GPRINTRIN_H_INCLUDED for <x86gprintrin.h>. > > * config/i386/tsxldtrkintrin.h: Likewise. > > * config/i386/wbnoinvdintrin.h: Likewise. > > * 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>. > > PING: > > https://gcc.gnu.org/pipermail/gcc-patches/2020-September/554642.html >
There are no codegen changes. I will check it in tomorrow if there are objections. -- H.J.