* configure.ac (gcry_cv_cc_x86_avx512_intrinsics)
(GCRY_AARCH64_NEON_INTRINSICS_TEST)
(GCRY_POWERPC_VECTOR_INTRINSICS_TEST)
(GCRY_RISCV_VECTOR_INTRINSICS_TEST): Add main() function to test
program.
(gcry_cv_cc_x86_avx512_intrinsics)
(gcry_cv_cc_aarch64_neon_intrinsics)
(gcry_cv_cc_aarch64_neon_intrinsics_cflags)
(gcry_cv_cc_ppc_altivec, gcry_cv_cc_ppc_altivec_cflags)
(gcry_cv_cc_riscv_vector_intrinsics)
(gcry_cv_cc_riscv_vector_intrinsics_cflags): Change AC_COMPILE_IFELSE
to AC_LINK_IFELSE.
--

With LTO enabled, AC_COMPILE_IFELSE does not perform actual
compilation. Solve issue by using AC_LINK_IFELSE to ensure LTO
performs code generation to detect missing vector extensions.

Signed-off-by: Jussi Kivilinna <[email protected]>
---
 configure.ac | 52 +++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 43 insertions(+), 9 deletions(-)

diff --git a/configure.ac b/configure.ac
index 30be86b5..b41f67f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1768,7 +1768,7 @@ AC_CACHE_CHECK([whether compiler supports x86/AVX512 
intrinsics],
        gcry_cv_cc_x86_avx512_intrinsics="n/a"
       else
        gcry_cv_cc_x86_avx512_intrinsics=no
-       AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+       AC_LINK_IFELSE([AC_LANG_SOURCE(
        [[#include <immintrin.h>
          __m512i fn(void *in, __m128i y)
          {
@@ -1781,6 +1781,12 @@ AC_CACHE_CHECK([whether compiler supports x86/AVX512 
intrinsics],
                          ::"x"(y),"r"(in):"memory","xmm6");
            return x;
          }
+         int main(void)
+         {
+           __m128i y = _mm_setzero_si128();
+           __m512i r = fn(&y, y);
+           return (int)_mm_cvtsi128_si32(_mm512_castsi512_si128(r));
+         }
          ]])],
        [gcry_cv_cc_x86_avx512_intrinsics=yes])
       fi])
@@ -2303,6 +2309,12 @@ m4_define([GCRY_AARCH64_NEON_INTRINSICS_TEST],
        memory_barrier_with_vec(in);
        return in;
       }
+      int main(void)
+      {
+       __m128i v = {0, 0};
+       v = fn(v);
+       return (int)vgetq_lane_u64(v, 0);
+      }
     ]]
   )]
 )
@@ -2314,7 +2326,7 @@ AC_CACHE_CHECK([whether compiler supports 
AArch64/NEON/crypto intrinsics],
        gcry_cv_cc_aarch64_neon_intrinsics="n/a"
       else
        gcry_cv_cc_aarch64_neon_intrinsics=no
-       AC_COMPILE_IFELSE(
+       AC_LINK_IFELSE(
          [GCRY_AARCH64_NEON_INTRINSICS_TEST],
          [gcry_cv_cc_aarch64_neon_intrinsics=yes])
       fi])
@@ -2333,7 +2345,7 @@ if test "$gcry_cv_cc_aarch64_neon_intrinsics" = "no" &&
     [gcry_cv_cc_aarch64_neon_intrinsics_cflags],
     [
       gcry_cv_cc_aarch64_neon_intrinsics_cflags=no
-      AC_COMPILE_IFELSE(
+      AC_LINK_IFELSE(
        [GCRY_AARCH64_NEON_INTRINSICS_TEST],
        [gcry_cv_cc_aarch64_neon_intrinsics_cflags=yes])
     ])
@@ -2372,6 +2384,12 @@ m4_define([GCRY_POWERPC_VECTOR_INTRINSICS_TEST],
        y = vec_sld_u32 (y, y, 3);
        return vec_cipher_be (t, in) ^ (block)y;
       }
+      int main(void)
+      {
+       block b = {0};
+       b = fn(b);
+       return (int)vec_extract((vecu32)b, 0);
+      }
     ]]
   )]
 )
@@ -2383,7 +2401,7 @@ AC_CACHE_CHECK([whether compiler supports PowerPC 
AltiVec/VSX/crypto intrinsics]
        gcry_cv_cc_ppc_altivec="n/a"
       else
        gcry_cv_cc_ppc_altivec=no
-       AC_COMPILE_IFELSE(
+       AC_LINK_IFELSE(
          [GCRY_POWERPC_VECTOR_INTRINSICS_TEST],
          [gcry_cv_cc_ppc_altivec=yes])
       fi])
@@ -2402,7 +2420,7 @@ if test "$gcry_cv_cc_ppc_altivec" = "no" &&
     [gcry_cv_cc_ppc_altivec_cflags],
     [
       gcry_cv_cc_ppc_altivec_cflags=no
-      AC_COMPILE_IFELSE(
+      AC_LINK_IFELSE(
        [GCRY_POWERPC_VECTOR_INTRINSICS_TEST],
        [gcry_cv_cc_ppc_altivec_cflags=yes])
     ])
@@ -2771,6 +2789,12 @@ m4_define([GCRY_RISCV_VECTOR_INTRINSICS_TEST],
        clear_vec_reg_v0();
        return in;
       }
+      int main(void)
+      {
+       __m128i v = __riscv_vmv_v_x_u8m1(0, 16);
+       v = fn(v);
+       return (int)__riscv_vmv_x_s_u8m1_u8(v);
+      }
     ]]
   )]
 )
@@ -2782,7 +2806,7 @@ AC_CACHE_CHECK([whether compiler supports RISC-V vector 
intrinsics],
        gcry_cv_cc_riscv_vector_intrinsics="n/a"
       else
        gcry_cv_cc_riscv_vector_intrinsics=no
-       AC_COMPILE_IFELSE(
+       AC_LINK_IFELSE(
          [GCRY_RISCV_VECTOR_INTRINSICS_TEST],
          [gcry_cv_cc_riscv_vector_intrinsics=yes])
       fi])
@@ -2806,7 +2830,7 @@ if test "$gcry_cv_cc_riscv_vector_intrinsics" = "no" &&
     [gcry_cv_cc_riscv_vector_intrinsics_cflags],
     [
       gcry_cv_cc_riscv_vector_intrinsics_cflags=no
-      AC_COMPILE_IFELSE(
+      AC_LINK_IFELSE(
        [GCRY_RISCV_VECTOR_INTRINSICS_TEST],
        [gcry_cv_cc_riscv_vector_intrinsics_cflags=yes])
     ])
@@ -2906,6 +2930,16 @@ m4_define([GCRY_RISCV_VECTOR_CRYPTO_INTRINSICS_TEST],
        );
        __riscv_vse32_v_u32m1(ptr + 0 * vl, a, vl);
       }
+      int main(void)
+      {
+       unsigned int buf[256];
+       test_sha2(buf);
+       test_aes_key(buf);
+       test_aes_crypt(buf);
+       test_ghash(buf);
+       test_inline_vec_asm(buf);
+       return 0;
+      }
     ]]
   )]
 )
@@ -2917,7 +2951,7 @@ AC_CACHE_CHECK([whether compiler supports RISC-V vector 
cryptography intrinsics]
        gcry_cv_cc_riscv_vector_crypto_intrinsics="n/a"
       else
        gcry_cv_cc_riscv_vector_crypto_intrinsics=no
-       AC_COMPILE_IFELSE(
+       AC_LINK_IFELSE(
          [GCRY_RISCV_VECTOR_CRYPTO_INTRINSICS_TEST],
          [gcry_cv_cc_riscv_vector_crypto_intrinsics=yes])
       fi])
@@ -2941,7 +2975,7 @@ if test "$gcry_cv_cc_riscv_vector_crypto_intrinsics" = 
"no" &&
   AC_CACHE_CHECK([whether compiler supports RISC-V vector intrinsics with 
extra GCC flags],
     [gcry_cv_cc_riscv_vector_crypto_intrinsics_cflags],
     [gcry_cv_cc_riscv_vector_crypto_intrinsics_cflags=no
-    AC_COMPILE_IFELSE(
+    AC_LINK_IFELSE(
       [GCRY_RISCV_VECTOR_CRYPTO_INTRINSICS_TEST],
       [gcry_cv_cc_riscv_vector_crypto_intrinsics_cflags=yes])])
   if test "$gcry_cv_cc_riscv_vector_crypto_intrinsics_cflags" = "yes" ; then
-- 
2.53.0


_______________________________________________
Gcrypt-devel mailing list
[email protected]
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to