From: Uros Bizjak <ubizjak@gmail.com>
To: Hongyu Wang <wwwhhhyyy333@gmail.com>
Cc: Haochen Jiang <haochen.jiang@intel.com>,
Hongtao Liu <hongtao.liu@intel.com>,
"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH] Reconstruct i386 testsuite with __builtin_cpu_supports
Date: Fri, 6 May 2022 11:17:14 +0200 [thread overview]
Message-ID: <CAFULd4ZeowUScrSg4kpc+BYHtODMObjPYQLJUE4=Ce27fqEGfQ@mail.gmail.com> (raw)
In-Reply-To: <CA+OydWkMP4saBN0HpsMRWRAxc2j4zpRvt9UCpSRME9ZzDorKyA@mail.gmail.com>
On Fri, May 6, 2022 at 11:00 AM Hongyu Wang <wwwhhhyyy333@gmail.com> wrote:
>
> > I don't think *_os_support calls should be removed. IIRC,
> > __builtin_cpu_supports function checks if the feature is supported by
> > CPU, whereas *_os_supports calls check via xgetbv if OS supports
> > handling of new registers.
>
> avx_os_support is like
>
> avx_os_support (void)
> {
> unsigned int eax, edx;
> unsigned int ecx = XCR_XFEATURE_ENABLED_MASK;
>
> __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (ecx));
>
> return (eax & (XSTATE_SSE | XSTATE_YMM)) == (XSTATE_SSE | XSTATE_YMM);
> }
>
> While in get_avaliable_features we have
>
> #define XCR_AVX_ENABLED_MASK \
> (XSTATE_SSE | XSTATE_YMM)
> if ((ecx & bit_OSXSAVE))
> {
> /* Check if XMM, YMM, OPMASK, upper 256 bits of ZMM0-ZMM15 and
> ZMM16-ZMM31 states are supported by OSXSAVE. */
> unsigned int xcrlow;
> unsigned int xcrhigh;
> __asm__ (".byte 0x0f, 0x01, 0xd0" /* xgetbv */
> : "=a" (xcrlow), "=d" (xcrhigh)
> : "c" (XCR_XFEATURE_ENABLED_MASK));
> if ((xcrlow & XCR_AVX_ENABLED_MASK) == XCR_AVX_ENABLED_MASK)
> {
> avx_usable = 1;
>
> So __builtin_cpu_supports already inherits same check
Indeed, thanks for the explanation.
OTOH, we don't change the existing tests (perhaps only dg- directives
when infrastructure improves), so I would leave the existing testcases
as they are. In future, new helper functions should be implemented
with __builtin_cpu_supports, but let's leave existing ones as they
are.
Uros.
> Uros Bizjak via Gcc-patches <gcc-patches@gcc.gnu.org> 于2022年5月6日周五 16:27写道:
> >
> > On Fri, May 6, 2022 at 9:57 AM Haochen Jiang <haochen.jiang@intel.com> wrote:
> > >
> > > Hi all,
> > >
> > > There are some check files in i386 testsuite are written before the function __builtin_cpu_supports is introduced. All of them are using __get_cpuid_count. This patch aims to reconstruct the i386 testsuite with __builtin_cpu_supports so that we can have a much clearer code.
> > >
> > > Regtested on x86_64-pc-linux-gnu. Ok for trunk?
> >
> > I don't think *_os_support calls should be removed. IIRC,
> > __builtin_cpu_supports function checks if the feature is supported by
> > CPU, whereas *_os_supports calls check via xgetbv if OS supports
> > handling of new registers.
> >
> > Uros.
> >
> > >
> > > Also when writting this patch, I also find some files in testsuite that might be useless currently. For example, in the file gcc/testsuite/gcc.target/i386/sse-os-support.h, it always return 1. And there are also some files will no longer be included at all with this patch. Should we remove those files when we have time?
> > >
> > > BRs,
> > > Haochen
> > >
> > > gcc/testsuite/ChangeLog:
> > >
> > > * gcc.target/i386/adx-check.h: Change bit check to
> > > __builtin_cpu_supports.
> > > * gcc.target/i386/aes-avx-check.h: Ditto.
> > > * gcc.target/i386/aes-check.h: Ditto.
> > > * gcc.target/i386/avx-check.h: Ditto.
> > > * gcc.target/i386/avx2-check.h: Ditto.
> > > * gcc.target/i386/avx512-check.h: Ditto.
> > > * gcc.target/i386/bmi-check.h: Ditto.
> > > * gcc.target/i386/bmi2-check.h: Ditto.
> > > * gcc.target/i386/f16c-check.h: Ditto.
> > > * gcc.target/i386/fma-check.h: Ditto.
> > > * gcc.target/i386/fma4-check.h: Ditto.
> > > * gcc.target/i386/lzcnt-check.h: Ditto.
> > > * gcc.target/i386/mmx-3dnow-check.h: Ditto.
> > > * gcc.target/i386/mmx-check.h: Ditto.
> > > * gcc.target/i386/pclmul-avx-check.h: Ditto.
> > > * gcc.target/i386/pclmul-check.h: Ditto.
> > > * gcc.target/i386/rtm-check.h: Ditto.
> > > * gcc.target/i386/sha-check.h: Ditto.
> > > * gcc.target/i386/sse-check.h: Ditto.
> > > * gcc.target/i386/sse2-check.h: Ditto.
> > > * gcc.target/i386/sse3-check.h: Ditto.
> > > * gcc.target/i386/sse4_1-check.h: Ditto.
> > > * gcc.target/i386/sse4_2-check.h: Ditto.
> > > * gcc.target/i386/sse4a-check.h: Ditto.
> > > * gcc.target/i386/ssse3-check.h: Ditto.
> > > * gcc.target/i386/xop-check.h: Ditto.
> > > ---
> > > gcc/testsuite/gcc.target/i386/adx-check.h | 10 +---
> > > gcc/testsuite/gcc.target/i386/aes-avx-check.h | 14 +----
> > > gcc/testsuite/gcc.target/i386/aes-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/avx-check.h | 12 +---
> > > gcc/testsuite/gcc.target/i386/avx2-check.h | 20 +------
> > > gcc/testsuite/gcc.target/i386/avx512-check.h | 59 +++++++------------
> > > gcc/testsuite/gcc.target/i386/bmi-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/bmi2-check.h | 10 +---
> > > gcc/testsuite/gcc.target/i386/f16c-check.h | 10 +---
> > > gcc/testsuite/gcc.target/i386/fma-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/fma4-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/lzcnt-check.h | 11 +---
> > > .../gcc.target/i386/mmx-3dnow-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/mmx-check.h | 11 +---
> > > .../gcc.target/i386/pclmul-avx-check.h | 14 +----
> > > gcc/testsuite/gcc.target/i386/pclmul-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/rtm-check.h | 10 +---
> > > gcc/testsuite/gcc.target/i386/sha-check.h | 10 +---
> > > gcc/testsuite/gcc.target/i386/sse-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/sse2-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/sse3-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/sse4_1-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/sse4_2-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/sse4a-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/ssse3-check.h | 11 +---
> > > gcc/testsuite/gcc.target/i386/xop-check.h | 11 +---
> > > 26 files changed, 73 insertions(+), 272 deletions(-)
> > >
> > > diff --git a/gcc/testsuite/gcc.target/i386/adx-check.h b/gcc/testsuite/gcc.target/i386/adx-check.h
> > > index cfed1a38483..bed5dcca385 100644
> > > --- a/gcc/testsuite/gcc.target/i386/adx-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/adx-check.h
> > > @@ -1,5 +1,4 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > >
> > > static void adx_test (void);
> > >
> > > @@ -11,13 +10,8 @@ static void __attribute__ ((noinline)) do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run ADX test only if host has ADX support. */
> > > - if (ebx & bit_ADX)
> > > + /* Check cpu support for ADX. */
> > > + if (__builtin_cpu_supports ("adx"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/aes-avx-check.h b/gcc/testsuite/gcc.target/i386/aes-avx-check.h
> > > index f2a4ead4014..74bf597ead4 100644
> > > --- a/gcc/testsuite/gcc.target/i386/aes-avx-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/aes-avx-check.h
> > > @@ -2,8 +2,6 @@
> > > #include <stdio.h>
> > > #endif
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > -#include "avx-os-support.h"
> > >
> > > static void aes_avx_test (void);
> > >
> > > @@ -17,15 +15,9 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run AES + AVX test only if host has AES + AVX support. */
> > > - if (((ecx & (bit_AVX | bit_OSXSAVE | bit_AES))
> > > - == (bit_AVX | bit_OSXSAVE | bit_AES))
> > > - && avx_os_support ())
> > > + /* Check cpu support for AES and AVX. */
> > > + if (__builtin_cpu_supports ("avx")
> > > + && __builtin_cpu_supports ("aes"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/aes-check.h b/gcc/testsuite/gcc.target/i386/aes-check.h
> > > index 7e794423e47..7c3a3b324a7 100644
> > > --- a/gcc/testsuite/gcc.target/i386/aes-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/aes-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void aes_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run AES test only if host has AES support. */
> > > - if (ecx & bit_AES)
> > > + /* Check cpu support for AES. */
> > > + if (__builtin_cpu_supports ("aes"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/avx-check.h b/gcc/testsuite/gcc.target/i386/avx-check.h
> > > index 7ddca9d7b80..4a3dbc257bc 100644
> > > --- a/gcc/testsuite/gcc.target/i386/avx-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/avx-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > #include "m256-check.h"
> > > -#include "avx-os-support.h"
> > >
> > > static void avx_test (void);
> > >
> > > @@ -15,14 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run AVX test only if host has AVX support. */
> > > - if (((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE))
> > > - && avx_os_support ())
> > > + /* Check cpu support for AVX. */
> > > + if (__builtin_cpu_supports ("avx"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/avx2-check.h b/gcc/testsuite/gcc.target/i386/avx2-check.h
> > > index 25bed5e0da6..2bc3c4425bb 100644
> > > --- a/gcc/testsuite/gcc.target/i386/avx2-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/avx2-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > #include "m256-check.h"
> > > -#include "avx-os-support.h"
> > >
> > > static void avx2_test (void);
> > >
> > > @@ -10,25 +8,11 @@ static void __attribute__ ((noinline)) do_test (void)
> > > avx2_test ();
> > > }
> > >
> > > -static int
> > > -check_osxsave (void)
> > > -{
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - __cpuid (1, eax, ebx, ecx, edx);
> > > - return (ecx & bit_OSXSAVE) != 0;
> > > -}
> > > -
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run AVX2 test only if host has AVX2 support. */
> > > - if (check_osxsave () && (ebx & bit_AVX2) && avx_os_support ())
> > > + /* Check cpu support for AVX2. */
> > > + if (__builtin_cpu_supports ("avx2"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h b/gcc/testsuite/gcc.target/i386/avx512-check.h
> > > index 0ad9064f637..339c79070c9 100644
> > > --- a/gcc/testsuite/gcc.target/i386/avx512-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/avx512-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > #include "m512-check.h"
> > > -#include "avx512f-os-support.h"
> > >
> > > #ifndef DO_TEST
> > > #define DO_TEST do_test
> > > @@ -25,81 +23,66 @@ do_test (void)
> > > }
> > > #endif
> > >
> > > -static int
> > > -check_osxsave (void)
> > > -{
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - __cpuid (1, eax, ebx, ecx, edx);
> > > - return (ecx & bit_OSXSAVE) != 0;
> > > -}
> > > -
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run AVX512 test only if host has ISA support. */
> > > - if (check_osxsave ()
> > > - && (ebx & bit_AVX512F)
> > > + /* Check cpu support for AVX512. */
> > > + if (__builtin_cpu_supports ("avx512f")
> > > #ifdef AVX512VL
> > > - && (ebx & bit_AVX512VL)
> > > + && __builtin_cpu_supports ("avx512vl")
> > > #endif
> > > #ifdef AVX512ER
> > > - && (ebx & bit_AVX512ER)
> > > + && __builtin_cpu_supports ("avx512er")
> > > #endif
> > > #ifdef AVX512CD
> > > - && (ebx & bit_AVX512CD)
> > > + && __builtin_cpu_supports ("avx512cd")
> > > #endif
> > > #ifdef AVX512DQ
> > > - && (ebx & bit_AVX512DQ)
> > > + && __builtin_cpu_supports ("avx512dq")
> > > #endif
> > > #ifdef AVX512BW
> > > - && (ebx & bit_AVX512BW)
> > > + && __builtin_cpu_supports ("avx512bw")
> > > #endif
> > > #ifdef AVX512IFMA
> > > - && (ebx & bit_AVX512IFMA)
> > > + && __builtin_cpu_supports ("avx512ifma")
> > > #endif
> > > #ifdef AVX512VBMI
> > > - && (ecx & bit_AVX512VBMI)
> > > + && __builtin_cpu_supports ("avx512vbmi")
> > > #endif
> > > #ifdef AVX5124FMAPS
> > > - && (edx & bit_AVX5124FMAPS)
> > > + && __builtin_cpu_supports ("avx5124fmaps")
> > > #endif
> > > #ifdef AVX5124VNNIW
> > > - && (edx & bit_AVX5124VNNIW)
> > > + && __builtin_cpu_supports ("avx5124vnniw")
> > > #endif
> > > #ifdef AVX512VPOPCNTDQ
> > > - && (ecx & bit_AVX512VPOPCNTDQ)
> > > + && __builtin_cpu_supports ("avx512vpopcntdq")
> > > #endif
> > > #ifdef AVX512BITALG
> > > - && (ecx & bit_AVX512BITALG)
> > > + && __builtin_cpu_supports ("avx512bitalg")
> > > #endif
> > > #ifdef GFNI
> > > - && (ecx & bit_GFNI)
> > > + && __builtin_cpu_supports ("gfni")
> > > #endif
> > > #ifdef AVX512VBMI2
> > > - && (ecx & bit_AVX512VBMI2)
> > > + && __builtin_cpu_supports ("avx512vbmi2")
> > > #endif
> > > #ifdef AVX512VNNI
> > > - && (ecx & bit_AVX512VNNI)
> > > + && __builtin_cpu_supports ("avx512vnni")
> > > #endif
> > > #ifdef AVX512FP16
> > > - && (edx & bit_AVX512FP16)
> > > + && __builtin_cpu_supports ("avx512fp16")
> > > #endif
> > > #ifdef VAES
> > > - && (ecx & bit_VAES)
> > > + && __builtin_cpu_supports ("vaes")
> > > #endif
> > > #ifdef VPCLMULQDQ
> > > - && (ecx & bit_VPCLMULQDQ)
> > > + && __builtin_cpu_supports ("vpclmulqdq")
> > > #endif
> > > #ifdef AVX512VP2INTERSECT
> > > - && (edx & bit_AVX512VP2INTERSECT)
> > > + && __builtin_cpu_supports ("avx512vp2intersect")
> > > #endif
> > > - && avx512f_os_support ())
> > > + )
> > > {
> > > DO_TEST ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/bmi-check.h b/gcc/testsuite/gcc.target/i386/bmi-check.h
> > > index 1973f3b6468..6af0291a947 100644
> > > --- a/gcc/testsuite/gcc.target/i386/bmi-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/bmi-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void bmi_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run BMI test only if host has BMI support. */
> > > - if (ebx & bit_BMI)
> > > + /* Check cpu support for BMI. */
> > > + if (__builtin_cpu_supports ("bmi"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/bmi2-check.h b/gcc/testsuite/gcc.target/i386/bmi2-check.h
> > > index ba91ef9b780..75c4d8d9616 100644
> > > --- a/gcc/testsuite/gcc.target/i386/bmi2-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/bmi2-check.h
> > > @@ -1,6 +1,5 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > >
> > > static void bmi2_test (void);
> > >
> > > @@ -14,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run BMI2 test only if host has BMI2 support. */
> > > - if (ebx & bit_BMI2)
> > > + /* Check cpu support for BMI2. */
> > > + if (__builtin_cpu_supports ("bmi2"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/f16c-check.h b/gcc/testsuite/gcc.target/i386/f16c-check.h
> > > index af7f32c5f4f..2cbf34ab516 100644
> > > --- a/gcc/testsuite/gcc.target/i386/f16c-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/f16c-check.h
> > > @@ -1,6 +1,5 @@
> > > #include <stdlib.h>
> > > #include <stdio.h>
> > > -#include "cpuid.h"
> > > #include "m256-check.h"
> > >
> > > static void f16c_test (void);
> > > @@ -8,13 +7,8 @@ static void f16c_test (void);
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run F16C test only if host has F16C support. */
> > > - if (ecx & bit_F16C)
> > > + /* Check cpu support for F16C. */
> > > + if (__builtin_cpu_supports ("f16c"))
> > > {
> > > f16c_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/fma-check.h b/gcc/testsuite/gcc.target/i386/fma-check.h
> > > index 8390f5088bd..6c1d3372218 100644
> > > --- a/gcc/testsuite/gcc.target/i386/fma-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/fma-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void fma_test (void);
> > >
> > > static void __attribute__ ((noinline)) do_test (void)
> > > @@ -12,13 +10,8 @@ static void __attribute__ ((noinline)) do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run FMA test only if host has FMA support. */
> > > - if (ecx & bit_FMA)
> > > + /* Check cpu support for FMA. */
> > > + if (__builtin_cpu_supports ("fma"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/fma4-check.h b/gcc/testsuite/gcc.target/i386/fma4-check.h
> > > index 33cd9628c04..2d2c2718029 100644
> > > --- a/gcc/testsuite/gcc.target/i386/fma4-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/fma4-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void fma4_test (void);
> > >
> > > static void
> > > @@ -14,13 +12,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run FMA4 test only if host has FMA4 support. */
> > > - if (ecx & bit_FMA4)
> > > + /* Check cpu support foe FMA4. */
> > > + if (__builtin_cpu_supports ("fma4"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/lzcnt-check.h b/gcc/testsuite/gcc.target/i386/lzcnt-check.h
> > > index 8aad834d6af..824f1a3b513 100644
> > > --- a/gcc/testsuite/gcc.target/i386/lzcnt-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/lzcnt-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void lzcnt_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run LZCNT test only if host has LZCNT support. */
> > > - if (ecx & bit_LZCNT)
> > > + /* Check cpu support for LZCNT. */
> > > + if (__builtin_cpu_supports ("lzcnt"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h b/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h
> > > index 4f2f7f3ac40..0ec2dca2e19 100644
> > > --- a/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void mmx_3dnow_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run 3DNow! test only if host has 3DNow! support. */
> > > - if (edx & bit_3DNOW)
> > > + /* Check cpu support for 3DNow!. */
> > > + if (__builtin_cpu_supports ("3dnow"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/mmx-check.h b/gcc/testsuite/gcc.target/i386/mmx-check.h
> > > index faf9b876f38..2afe5183ba2 100644
> > > --- a/gcc/testsuite/gcc.target/i386/mmx-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/mmx-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void mmx_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run MMX test only if host has MMX support. */
> > > - if (edx & bit_MMX)
> > > + /* Check cpu support for MMX. */
> > > + if (__builtin_cpu_supports ("mmx"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h b/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h
> > > index 5eed2e2203c..b506b3306e6 100644
> > > --- a/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h
> > > @@ -2,8 +2,6 @@
> > > #include <stdio.h>
> > > #endif
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > -#include "avx-os-support.h"
> > >
> > > static void pclmul_avx_test (void);
> > >
> > > @@ -17,15 +15,9 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run PCLMUL + AVX test only if host has PCLMUL + AVX support. */
> > > - if (((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
> > > - == (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
> > > - && avx_os_support ())
> > > + /* Check cpu support for PCLMUL and AVX. */
> > > + if (__builtin_cpu_supports ("pclmul")
> > > + && __builtin_cpu_supports ("avx"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/pclmul-check.h b/gcc/testsuite/gcc.target/i386/pclmul-check.h
> > > index 7526cbe2ddf..3ed1a044627 100644
> > > --- a/gcc/testsuite/gcc.target/i386/pclmul-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/pclmul-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void pclmul_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run PCLMULQDQ test only if host has PCLMULQDQ support. */
> > > - if (ecx & bit_PCLMUL)
> > > + /* Check cpu support for PCLMUL. */
> > > + if (__builtin_cpu_supports ("pclmul"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/rtm-check.h b/gcc/testsuite/gcc.target/i386/rtm-check.h
> > > index bdb5a6dc0bf..4121e602a7f 100644
> > > --- a/gcc/testsuite/gcc.target/i386/rtm-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/rtm-check.h
> > > @@ -1,5 +1,4 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > >
> > > static void rtm_test (void);
> > >
> > > @@ -11,13 +10,8 @@ static void __attribute__ ((noinline)) do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run RTM test only if host has RTM support. */
> > > - if (ebx & bit_RTM)
> > > + /* Check cpu support for RTM. */
> > > + if (__builtin_cpu_supports ("rtm"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/sha-check.h b/gcc/testsuite/gcc.target/i386/sha-check.h
> > > index 5bc5a59ab80..61ce43053f9 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sha-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sha-check.h
> > > @@ -1,5 +1,4 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > >
> > > static void sha_test (void);
> > >
> > > @@ -13,13 +12,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SHA test only if host has SHA support. */
> > > - if (ebx & bit_SHA)
> > > + /* Check cpu support for SHA. */
> > > + if (__builtin_cpu_supports ("sha"))
> > > {
> > > do_test ();
> > > #ifdef DEBUG
> > > diff --git a/gcc/testsuite/gcc.target/i386/sse-check.h b/gcc/testsuite/gcc.target/i386/sse-check.h
> > > index 11b71bc3e97..58bc88c5598 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sse-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sse-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > > #include "m128-check.h"
> > > -#include "cpuid.h"
> > > -#include "sse-os-support.h"
> > >
> > > static void sse_test (void);
> > >
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSE test only if host has SSE support. */
> > > - if ((edx & bit_SSE) && sse_os_support ())
> > > + /* Check cpu support for SSE. */
> > > + if (__builtin_cpu_supports ("sse"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/sse2-check.h b/gcc/testsuite/gcc.target/i386/sse2-check.h
> > > index fd4a6ce1dbf..4976a27022d 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sse2-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sse2-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > #include "m128-check.h"
> > > -#include "sse-os-support.h"
> > >
> > > static void sse2_test (void);
> > >
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSE2 test only if host has SSE2 support. */
> > > - if ((edx & bit_SSE2) && sse_os_support ())
> > > + /* Check cpu support for SSE2. */
> > > + if (__builtin_cpu_supports ("sse2"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/sse3-check.h b/gcc/testsuite/gcc.target/i386/sse3-check.h
> > > index 5a0a0b1a02e..3c58361e925 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sse3-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sse3-check.h
> > > @@ -1,7 +1,5 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > -#include "cpuid.h"
> > > -#include "sse-os-support.h"
> > >
> > > static void sse3_test (void);
> > >
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSE3 test only if host has SSE3 support. */
> > > - if ((ecx & bit_SSE3) && sse_os_support ())
> > > + /* Check cpu support for SSE3. */
> > > + if (__builtin_cpu_supports ("sse3"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-check.h b/gcc/testsuite/gcc.target/i386/sse4_1-check.h
> > > index 788f65d61cb..61d0d0284a8 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sse4_1-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sse4_1-check.h
> > > @@ -1,6 +1,4 @@
> > > #include <stdlib.h>
> > > -
> > > -#include "cpuid.h"
> > > #include "m128-check.h"
> > >
> > > static void sse4_1_test (void);
> > > @@ -17,13 +15,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSE4.1 test only if host has SSE4.1 support. */
> > > - if (ecx & bit_SSE4_1)
> > > + /* Check cpu support for SSE4.1. */
> > > + if (__builtin_cpu_supports ("sse4.1"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/sse4_2-check.h b/gcc/testsuite/gcc.target/i386/sse4_2-check.h
> > > index c33cd1b4986..6c921ac52c7 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sse4_2-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sse4_2-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > -
> > > #include "m128-check.h"
> > > -#include "cpuid.h"
> > >
> > > static void sse4_2_test (void);
> > >
> > > @@ -16,13 +14,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSE4.2 test only if host has SSE4.2 support. */
> > > - if (ecx & bit_SSE4_2)
> > > + /* Check cpu support for SSE4.2. */
> > > + if (__builtin_cpu_supports ("sse4.2"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/sse4a-check.h b/gcc/testsuite/gcc.target/i386/sse4a-check.h
> > > index d43b4b222b1..ae70ff0a268 100644
> > > --- a/gcc/testsuite/gcc.target/i386/sse4a-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/sse4a-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void sse4a_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSE4a test only if host has SSE4a support. */
> > > - if (ecx & bit_SSE4a)
> > > + /* Check cpu support for SSE4a. */
> > > + if (__builtin_cpu_supports ("sse4a"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/ssse3-check.h b/gcc/testsuite/gcc.target/i386/ssse3-check.h
> > > index 3ca79333c7f..3e834811f2d 100644
> > > --- a/gcc/testsuite/gcc.target/i386/ssse3-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/ssse3-check.h
> > > @@ -1,8 +1,6 @@
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > >
> > > -#include "cpuid.h"
> > > -
> > > static void ssse3_test (void);
> > >
> > > static void
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run SSSE3 test only if host has SSSE3 support. */
> > > - if (ecx & bit_SSSE3)
> > > + /* Check cpu support for SSSE3. */
> > > + if (__builtin_cpu_supports ("ssse3"))
> > > do_test ();
> > >
> > > return 0;
> > > diff --git a/gcc/testsuite/gcc.target/i386/xop-check.h b/gcc/testsuite/gcc.target/i386/xop-check.h
> > > index 395abe8766d..e1ef1273111 100644
> > > --- a/gcc/testsuite/gcc.target/i386/xop-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/xop-check.h
> > > @@ -1,6 +1,4 @@
> > > #include <stdlib.h>
> > > -
> > > -#include "cpuid.h"
> > > #include "m256-check.h"
> > >
> > > static void xop_test (void);
> > > @@ -15,13 +13,8 @@ do_test (void)
> > > int
> > > main ()
> > > {
> > > - unsigned int eax, ebx, ecx, edx;
> > > -
> > > - if (!__get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx))
> > > - return 0;
> > > -
> > > - /* Run XOP test only if host has XOP support. */
> > > - if (ecx & bit_XOP)
> > > + /* Check cpu support for XOP. */
> > > + if (__builtin_cpu_supports ("xop"))
> > > do_test ();
> > >
> > > return 0;
> > > --
> > > 2.18.1
> > >
next prev parent reply other threads:[~2022-05-06 9:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-06 7:57 Haochen Jiang
2022-05-06 8:26 ` Uros Bizjak
2022-05-06 9:00 ` Hongyu Wang
2022-05-06 9:17 ` Uros Bizjak [this message]
2022-05-07 1:20 ` Jiang, Haochen
2022-05-07 9:04 ` Uros Bizjak
2022-05-10 5:16 ` Jiang, Haochen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAFULd4ZeowUScrSg4kpc+BYHtODMObjPYQLJUE4=Ce27fqEGfQ@mail.gmail.com' \
--to=ubizjak@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=haochen.jiang@intel.com \
--cc=hongtao.liu@intel.com \
--cc=wwwhhhyyy333@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).