libgfortran: Use __builtin_cpu_is/__builtin_cpu_supports
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 21 May 2020 10:54:32 +0000 (03:54 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 21 May 2020 10:54:47 +0000 (03:54 -0700)
* m4/matmul.m4: Don't include <config/i386/cpuinfo.h>.  Use
__builtin_cpu_is/__builtin_cpu_supports
* generated/matmul_c10.c: Regenerated.
* generated/matmul_c16.c: Likewise.
* generated/matmul_c4.c: Likewise.
* generated/matmul_c8.c: Likewise.
* generated/matmul_i1.c: Likewise.
* generated/matmul_i16.c: Likewise.
* generated/matmul_i2.c: Likewise.
* generated/matmul_i4.c: Likewise.
* generated/matmul_i8.c: Likewise.
* generated/matmul_r10.c: Likewise.
* generated/matmul_r16.c: Likewise.
* generated/matmul_r4.c: Likewise.
* generated/matmul_r8.c: Likewise.

15 files changed:
libgfortran/ChangeLog
libgfortran/generated/matmul_c10.c
libgfortran/generated/matmul_c16.c
libgfortran/generated/matmul_c4.c
libgfortran/generated/matmul_c8.c
libgfortran/generated/matmul_i1.c
libgfortran/generated/matmul_i16.c
libgfortran/generated/matmul_i2.c
libgfortran/generated/matmul_i4.c
libgfortran/generated/matmul_i8.c
libgfortran/generated/matmul_r10.c
libgfortran/generated/matmul_r16.c
libgfortran/generated/matmul_r4.c
libgfortran/generated/matmul_r8.c
libgfortran/m4/matmul.m4

index 149f45e1088fcd11dad3e5c5ef303634b29b6a28..71c233c87d6afe2ab56f63481cadf0400e34a025 100644 (file)
@@ -1,3 +1,21 @@
+2020-05-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * m4/matmul.m4: Don't include <config/i386/cpuinfo.h>.  Use
+       __builtin_cpu_is/__builtin_cpu_supports
+       * generated/matmul_c10.c: Regenerated.
+       * generated/matmul_c16.c: Likewise.
+       * generated/matmul_c4.c: Likewise.
+       * generated/matmul_c8.c: Likewise.
+       * generated/matmul_i1.c: Likewise.
+       * generated/matmul_i16.c: Likewise.
+       * generated/matmul_i2.c: Likewise.
+       * generated/matmul_i4.c: Likewise.
+       * generated/matmul_i8.c: Likewise.
+       * generated/matmul_r10.c: Likewise.
+       * generated/matmul_r16.c: Likewise.
+       * generated/matmul_r4.c: Likewise.
+       * generated/matmul_r8.c: Likewise.
+
 2020-05-15  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR bootstrap/95147
index e866a6a4df10775dc57f49dbc9099ae0df290462..ce5be246ddbc40434377eb0bb9eac36c2acaa43c 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_c10 (gfc_array_c10 * const restrict retarray, 
        gfc_array_c10 * const restrict a, gfc_array_c10 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_c10 (gfc_array_c10 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_c10_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_c10_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_c10 (gfc_array_c10 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_c10_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_c10 (gfc_array_c10 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_c10_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_c10_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_c10_avx128_fma4;
            goto store;
index e6605e89282de257cae1f33c3cda9155cabc775b..bf756d124ecf06b0c50a442d76ca65dd5ceb92d5 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_c16 (gfc_array_c16 * const restrict retarray, 
        gfc_array_c16 * const restrict a, gfc_array_c16 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_c16 (gfc_array_c16 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_c16_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_c16_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_c16 (gfc_array_c16 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_c16_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_c16 (gfc_array_c16 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_c16_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_c16_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_c16_avx128_fma4;
            goto store;
index e012fa200fd1fccf84504b8eb2d8c88b0e1b83e8..5b24410457489255d2829f03df031d3ba46d562a 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_c4 (gfc_array_c4 * const restrict retarray, 
        gfc_array_c4 * const restrict a, gfc_array_c4 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_c4 (gfc_array_c4 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_c4_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_c4_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_c4 (gfc_array_c4 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_c4_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_c4 (gfc_array_c4 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_c4_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_c4_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_c4_avx128_fma4;
            goto store;
index 8c19b49deaecffbc29c92b193778d00b399bb074..df3cb927e1c7ef66b2f8c13494ef13b3e75aa52a 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_c8 (gfc_array_c8 * const restrict retarray, 
        gfc_array_c8 * const restrict a, gfc_array_c8 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_c8 (gfc_array_c8 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_c8_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_c8_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_c8 (gfc_array_c8 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_c8_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_c8 (gfc_array_c8 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_c8_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_c8_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_c8_avx128_fma4;
            goto store;
index 8ae4194366ea5b6d5ee8a89a7264501a2cd1efea..49b0fbad21142d99c6a423bb259122d112cfb190 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_i1 (gfc_array_i1 * const restrict retarray, 
        gfc_array_i1 * const restrict a, gfc_array_i1 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_i1 (gfc_array_i1 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_i1_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_i1_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_i1 (gfc_array_i1 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_i1_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_i1 (gfc_array_i1 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_i1_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_i1_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_i1_avx128_fma4;
            goto store;
index cfbf9206c18dbf91653107f17158d91a0580cb7e..4e1d837682b3328c2d4b804a3974b42e47b10618 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_i16 (gfc_array_i16 * const restrict retarray, 
        gfc_array_i16 * const restrict a, gfc_array_i16 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_i16 (gfc_array_i16 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_i16_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_i16_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_i16 (gfc_array_i16 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_i16_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_i16 (gfc_array_i16 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_i16_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_i16_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_i16_avx128_fma4;
            goto store;
index 5a4aeed78e348ccd8f8c6058c294c267e7855fc5..191298708dcf4aae5969f03fc2ac114f24c1c487 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_i2 (gfc_array_i2 * const restrict retarray, 
        gfc_array_i2 * const restrict a, gfc_array_i2 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_i2 (gfc_array_i2 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_i2_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_i2_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_i2 (gfc_array_i2 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_i2_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_i2 (gfc_array_i2 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_i2_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_i2_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_i2_avx128_fma4;
            goto store;
index 80592a04d147e377ff7f0b7e1ff038201d9793b2..ab14a0a3ff3c8a9bafd381a01fd0f365d95cc158 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_i4 (gfc_array_i4 * const restrict retarray, 
        gfc_array_i4 * const restrict a, gfc_array_i4 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_i4 (gfc_array_i4 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_i4_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_i4_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_i4 (gfc_array_i4 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_i4_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_i4 (gfc_array_i4 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_i4_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_i4_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_i4_avx128_fma4;
            goto store;
index 7e4c5bcc1bb8a6dfc0a96da902322feb8381285d..bc627e189fe75c016adeb9ea5fae0e828cd394f7 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_i8 (gfc_array_i8 * const restrict retarray, 
        gfc_array_i8 * const restrict a, gfc_array_i8 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_i8 (gfc_array_i8 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_i8_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_i8_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_i8 (gfc_array_i8 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_i8_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_i8 (gfc_array_i8 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_i8_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_i8_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_i8_avx128_fma4;
            goto store;
index d97aa41315ebfe4e8b360dc3410866e5954a7d58..b5e63be244831c7fb56c646ef3e208d970915c64 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_r10 (gfc_array_r10 * const restrict retarray, 
        gfc_array_r10 * const restrict a, gfc_array_r10 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_r10 (gfc_array_r10 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_r10_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_r10_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_r10 (gfc_array_r10 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_r10_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_r10 (gfc_array_r10 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_r10_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_r10_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_r10_avx128_fma4;
            goto store;
index 82e8b502ba30b89126a4fae0a50f9d8102c5b57f..4e6c66bb8f35ec71cdc061631ddee3d793bddaf3 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_r16 (gfc_array_r16 * const restrict retarray, 
        gfc_array_r16 * const restrict a, gfc_array_r16 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_r16 (gfc_array_r16 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_r16_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_r16_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_r16 (gfc_array_r16 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_r16_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_r16 (gfc_array_r16 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_r16_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_r16_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_r16_avx128_fma4;
            goto store;
index 36ce7daf7812bf0be7d5247a194c506f07b21f27..202634b55d1411c368acfcd3972b062c269c11a1 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_r4 (gfc_array_r4 * const restrict retarray, 
        gfc_array_r4 * const restrict a, gfc_array_r4 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_r4 (gfc_array_r4 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_r4_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_r4_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_r4 (gfc_array_r4 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_r4_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_r4 (gfc_array_r4 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_r4_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_r4_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_r4_avx128_fma4;
            goto store;
index 9a81df189d5cdaae6599185e9cd7732c831efcc3..22c24e50c372ce30a66dbd9e49829ab60d9a0627 100644 (file)
@@ -2367,7 +2367,6 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_r8 (gfc_array_r8 * const restrict retarray, 
        gfc_array_r8 * const restrict a, gfc_array_r8 * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -2384,11 +2383,11 @@ void matmul_r8 (gfc_array_r8 * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_r8_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_r8_avx512f;
              goto store;
@@ -2397,8 +2396,8 @@ void matmul_r8 (gfc_array_r8 * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_r8_avx2;
              goto store;
@@ -2407,26 +2406,26 @@ void matmul_r8 (gfc_array_r8 * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_r8_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_r8_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_r8_avx128_fma4;
            goto store;
index 83f4ae63339b007a33fb34c08f28b0a33c6ccf1b..5acecf1edce6db1a2e56a223d3c9525d5cf80d3c 100644 (file)
@@ -134,7 +134,6 @@ internal_proto('matmul_name`);
 
 /* Currently, this is i386 only.  Adjust for other architectures.  */
 
-#include <config/i386/cpuinfo.h>
 void matmul_'rtype_code` ('rtype` * const restrict retarray, 
        'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas,
        int blas_limit, blas_call gemm)
@@ -151,11 +150,11 @@ void matmul_'rtype_code` ('rtype` * const restrict retarray,
   if (matmul_fn == NULL)
     {
       matmul_fn = matmul_'rtype_code`_vanilla;
-      if (__cpu_model.__cpu_vendor == VENDOR_INTEL)
+      if (__builtin_cpu_is ("intel"))
        {
           /* Run down the available processors in order of preference.  */
 #ifdef HAVE_AVX512F
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX512F))
+         if (__builtin_cpu_supports ("avx512f"))
            {
              matmul_fn = matmul_'rtype_code`_avx512f;
              goto store;
@@ -164,8 +163,8 @@ void matmul_'rtype_code` ('rtype` * const restrict retarray,
 #endif  /* HAVE_AVX512F */
 
 #ifdef HAVE_AVX2
-         if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX2))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+         if (__builtin_cpu_supports ("avx2")
+             && __builtin_cpu_supports ("fma"))
            {
              matmul_fn = matmul_'rtype_code`_avx2;
              goto store;
@@ -174,26 +173,26 @@ void matmul_'rtype_code` ('rtype` * const restrict retarray,
 #endif
 
 #ifdef HAVE_AVX
-         if (__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
+         if (__builtin_cpu_supports ("avx"))
            {
               matmul_fn = matmul_'rtype_code`_avx;
              goto store;
            }
 #endif  /* HAVE_AVX */
         }
-    else if (__cpu_model.__cpu_vendor == VENDOR_AMD)
+    else if (__builtin_cpu_is ("amd"))
       {
 #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-           && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma"))
          {
             matmul_fn = matmul_'rtype_code`_avx128_fma3;
            goto store;
          }
 #endif
 #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128)
-        if ((__cpu_model.__cpu_features[0] & (1 << FEATURE_AVX))
-            && (__cpu_model.__cpu_features[0] & (1 << FEATURE_FMA4)))
+       if (__builtin_cpu_supports ("avx")
+           && __builtin_cpu_supports ("fma4"))
          {
             matmul_fn = matmul_'rtype_code`_avx128_fma4;
            goto store;