public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
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
> > >

  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).