868b2b66 (kx 2024-12-20 16:11:07 +0300 1) # ===========================================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300 2) # https://www.gnu.org/software/autoconf-archive/ax_gcc_builtin.html
868b2b66 (kx 2024-12-20 16:11:07 +0300 3) # ===========================================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300 4) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 5) # SYNOPSIS
868b2b66 (kx 2024-12-20 16:11:07 +0300 6) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 7) # AX_GCC_BUILTIN(BUILTIN)
868b2b66 (kx 2024-12-20 16:11:07 +0300 8) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 9) # DESCRIPTION
868b2b66 (kx 2024-12-20 16:11:07 +0300 10) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 11) # This macro checks if the compiler supports one of GCC's built-in
868b2b66 (kx 2024-12-20 16:11:07 +0300 12) # functions; many other compilers also provide those same built-ins.
868b2b66 (kx 2024-12-20 16:11:07 +0300 13) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 14) # The BUILTIN parameter is the name of the built-in function.
868b2b66 (kx 2024-12-20 16:11:07 +0300 15) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 16) # If BUILTIN is supported define HAVE_<BUILTIN>. Keep in mind that since
868b2b66 (kx 2024-12-20 16:11:07 +0300 17) # builtins usually start with two underscores they will be copied over
868b2b66 (kx 2024-12-20 16:11:07 +0300 18) # into the HAVE_<BUILTIN> definition (e.g. HAVE___BUILTIN_EXPECT for
868b2b66 (kx 2024-12-20 16:11:07 +0300 19) # __builtin_expect()).
868b2b66 (kx 2024-12-20 16:11:07 +0300 20) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 21) # The macro caches its result in the ax_cv_have_<BUILTIN> variable (e.g.
868b2b66 (kx 2024-12-20 16:11:07 +0300 22) # ax_cv_have___builtin_expect).
868b2b66 (kx 2024-12-20 16:11:07 +0300 23) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 24) # The macro currently supports the following built-in functions:
868b2b66 (kx 2024-12-20 16:11:07 +0300 25) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 26) # __builtin_assume_aligned
868b2b66 (kx 2024-12-20 16:11:07 +0300 27) # __builtin_bswap16
868b2b66 (kx 2024-12-20 16:11:07 +0300 28) # __builtin_bswap32
868b2b66 (kx 2024-12-20 16:11:07 +0300 29) # __builtin_bswap64
868b2b66 (kx 2024-12-20 16:11:07 +0300 30) # __builtin_choose_expr
868b2b66 (kx 2024-12-20 16:11:07 +0300 31) # __builtin___clear_cache
868b2b66 (kx 2024-12-20 16:11:07 +0300 32) # __builtin_clrsb
868b2b66 (kx 2024-12-20 16:11:07 +0300 33) # __builtin_clrsbl
868b2b66 (kx 2024-12-20 16:11:07 +0300 34) # __builtin_clrsbll
868b2b66 (kx 2024-12-20 16:11:07 +0300 35) # __builtin_clz
868b2b66 (kx 2024-12-20 16:11:07 +0300 36) # __builtin_clzl
868b2b66 (kx 2024-12-20 16:11:07 +0300 37) # __builtin_clzll
868b2b66 (kx 2024-12-20 16:11:07 +0300 38) # __builtin_complex
868b2b66 (kx 2024-12-20 16:11:07 +0300 39) # __builtin_constant_p
868b2b66 (kx 2024-12-20 16:11:07 +0300 40) # __builtin_cpu_init
868b2b66 (kx 2024-12-20 16:11:07 +0300 41) # __builtin_cpu_is
868b2b66 (kx 2024-12-20 16:11:07 +0300 42) # __builtin_cpu_supports
868b2b66 (kx 2024-12-20 16:11:07 +0300 43) # __builtin_ctz
868b2b66 (kx 2024-12-20 16:11:07 +0300 44) # __builtin_ctzl
868b2b66 (kx 2024-12-20 16:11:07 +0300 45) # __builtin_ctzll
868b2b66 (kx 2024-12-20 16:11:07 +0300 46) # __builtin_expect
868b2b66 (kx 2024-12-20 16:11:07 +0300 47) # __builtin_ffs
868b2b66 (kx 2024-12-20 16:11:07 +0300 48) # __builtin_ffsl
868b2b66 (kx 2024-12-20 16:11:07 +0300 49) # __builtin_ffsll
868b2b66 (kx 2024-12-20 16:11:07 +0300 50) # __builtin_fpclassify
868b2b66 (kx 2024-12-20 16:11:07 +0300 51) # __builtin_huge_val
868b2b66 (kx 2024-12-20 16:11:07 +0300 52) # __builtin_huge_valf
868b2b66 (kx 2024-12-20 16:11:07 +0300 53) # __builtin_huge_vall
868b2b66 (kx 2024-12-20 16:11:07 +0300 54) # __builtin_inf
868b2b66 (kx 2024-12-20 16:11:07 +0300 55) # __builtin_infd128
868b2b66 (kx 2024-12-20 16:11:07 +0300 56) # __builtin_infd32
868b2b66 (kx 2024-12-20 16:11:07 +0300 57) # __builtin_infd64
868b2b66 (kx 2024-12-20 16:11:07 +0300 58) # __builtin_inff
868b2b66 (kx 2024-12-20 16:11:07 +0300 59) # __builtin_infl
868b2b66 (kx 2024-12-20 16:11:07 +0300 60) # __builtin_isinf_sign
868b2b66 (kx 2024-12-20 16:11:07 +0300 61) # __builtin_nan
868b2b66 (kx 2024-12-20 16:11:07 +0300 62) # __builtin_nand128
868b2b66 (kx 2024-12-20 16:11:07 +0300 63) # __builtin_nand32
868b2b66 (kx 2024-12-20 16:11:07 +0300 64) # __builtin_nand64
868b2b66 (kx 2024-12-20 16:11:07 +0300 65) # __builtin_nanf
868b2b66 (kx 2024-12-20 16:11:07 +0300 66) # __builtin_nanl
868b2b66 (kx 2024-12-20 16:11:07 +0300 67) # __builtin_nans
868b2b66 (kx 2024-12-20 16:11:07 +0300 68) # __builtin_nansf
868b2b66 (kx 2024-12-20 16:11:07 +0300 69) # __builtin_nansl
868b2b66 (kx 2024-12-20 16:11:07 +0300 70) # __builtin_object_size
868b2b66 (kx 2024-12-20 16:11:07 +0300 71) # __builtin_parity
868b2b66 (kx 2024-12-20 16:11:07 +0300 72) # __builtin_parityl
868b2b66 (kx 2024-12-20 16:11:07 +0300 73) # __builtin_parityll
868b2b66 (kx 2024-12-20 16:11:07 +0300 74) # __builtin_popcount
868b2b66 (kx 2024-12-20 16:11:07 +0300 75) # __builtin_popcountl
868b2b66 (kx 2024-12-20 16:11:07 +0300 76) # __builtin_popcountll
868b2b66 (kx 2024-12-20 16:11:07 +0300 77) # __builtin_powi
868b2b66 (kx 2024-12-20 16:11:07 +0300 78) # __builtin_powif
868b2b66 (kx 2024-12-20 16:11:07 +0300 79) # __builtin_powil
868b2b66 (kx 2024-12-20 16:11:07 +0300 80) # __builtin_prefetch
868b2b66 (kx 2024-12-20 16:11:07 +0300 81) # __builtin_trap
868b2b66 (kx 2024-12-20 16:11:07 +0300 82) # __builtin_types_compatible_p
868b2b66 (kx 2024-12-20 16:11:07 +0300 83) # __builtin_unreachable
868b2b66 (kx 2024-12-20 16:11:07 +0300 84) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 85) # Unsupported built-ins will be tested with an empty parameter set and the
868b2b66 (kx 2024-12-20 16:11:07 +0300 86) # result of the check might be wrong or meaningless so use with care.
868b2b66 (kx 2024-12-20 16:11:07 +0300 87) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 88) # LICENSE
868b2b66 (kx 2024-12-20 16:11:07 +0300 89) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 90) # Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
868b2b66 (kx 2024-12-20 16:11:07 +0300 91) #
868b2b66 (kx 2024-12-20 16:11:07 +0300 92) # Copying and distribution of this file, with or without modification, are
868b2b66 (kx 2024-12-20 16:11:07 +0300 93) # permitted in any medium without royalty provided the copyright notice
868b2b66 (kx 2024-12-20 16:11:07 +0300 94) # and this notice are preserved. This file is offered as-is, without any
868b2b66 (kx 2024-12-20 16:11:07 +0300 95) # warranty.
868b2b66 (kx 2024-12-20 16:11:07 +0300 96)
868b2b66 (kx 2024-12-20 16:11:07 +0300 97) #serial 7
868b2b66 (kx 2024-12-20 16:11:07 +0300 98)
868b2b66 (kx 2024-12-20 16:11:07 +0300 99) AC_DEFUN([AX_GCC_BUILTIN], [
868b2b66 (kx 2024-12-20 16:11:07 +0300 100) AS_VAR_PUSHDEF([ac_var], [ax_cv_have_$1])
868b2b66 (kx 2024-12-20 16:11:07 +0300 101)
868b2b66 (kx 2024-12-20 16:11:07 +0300 102) AC_CACHE_CHECK([for $1], [ac_var], [
868b2b66 (kx 2024-12-20 16:11:07 +0300 103) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [
868b2b66 (kx 2024-12-20 16:11:07 +0300 104) m4_case([$1],
868b2b66 (kx 2024-12-20 16:11:07 +0300 105) [__builtin_assume_aligned], [$1("", 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 106) [__builtin_bswap16], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 107) [__builtin_bswap32], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 108) [__builtin_bswap64], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 109) [__builtin_choose_expr], [$1(0, 0, 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 110) [__builtin___clear_cache], [$1("", "")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 111) [__builtin_clrsb], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 112) [__builtin_clrsbl], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 113) [__builtin_clrsbll], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 114) [__builtin_clz], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 115) [__builtin_clzl], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 116) [__builtin_clzll], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 117) [__builtin_complex], [$1(0.0, 0.0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 118) [__builtin_constant_p], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 119) [__builtin_cpu_init], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 120) [__builtin_cpu_is], [$1("intel")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 121) [__builtin_cpu_supports], [$1("sse")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 122) [__builtin_ctz], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 123) [__builtin_ctzl], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 124) [__builtin_ctzll], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 125) [__builtin_expect], [$1(0, 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 126) [__builtin_ffs], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 127) [__builtin_ffsl], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 128) [__builtin_ffsll], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 129) [__builtin_fpclassify], [$1(0, 1, 2, 3, 4, 0.0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 130) [__builtin_huge_val], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 131) [__builtin_huge_valf], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 132) [__builtin_huge_vall], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 133) [__builtin_inf], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 134) [__builtin_infd128], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 135) [__builtin_infd32], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 136) [__builtin_infd64], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 137) [__builtin_inff], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 138) [__builtin_infl], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 139) [__builtin_isinf_sign], [$1(0.0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 140) [__builtin_nan], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 141) [__builtin_nand128], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 142) [__builtin_nand32], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 143) [__builtin_nand64], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 144) [__builtin_nanf], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 145) [__builtin_nanl], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 146) [__builtin_nans], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 147) [__builtin_nansf], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 148) [__builtin_nansl], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 149) [__builtin_object_size], [$1("", 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 150) [__builtin_parity], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 151) [__builtin_parityl], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 152) [__builtin_parityll], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 153) [__builtin_popcount], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 154) [__builtin_popcountl], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 155) [__builtin_popcountll], [$1(0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 156) [__builtin_powi], [$1(0, 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 157) [__builtin_powif], [$1(0, 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 158) [__builtin_powil], [$1(0, 0)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 159) [__builtin_prefetch], [$1("")],
868b2b66 (kx 2024-12-20 16:11:07 +0300 160) [__builtin_trap], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 161) [__builtin_types_compatible_p], [$1(int, int)],
868b2b66 (kx 2024-12-20 16:11:07 +0300 162) [__builtin_unreachable], [$1()],
868b2b66 (kx 2024-12-20 16:11:07 +0300 163) [m4_warn([syntax], [Unsupported built-in $1, the test may fail])
868b2b66 (kx 2024-12-20 16:11:07 +0300 164) $1()]
868b2b66 (kx 2024-12-20 16:11:07 +0300 165) )
868b2b66 (kx 2024-12-20 16:11:07 +0300 166) ])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 167) [AS_VAR_SET([ac_var], [yes])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 168) [AS_VAR_SET([ac_var], [no])])
868b2b66 (kx 2024-12-20 16:11:07 +0300 169) ])
868b2b66 (kx 2024-12-20 16:11:07 +0300 170)
868b2b66 (kx 2024-12-20 16:11:07 +0300 171) AS_IF([test yes = AS_VAR_GET([ac_var])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 172) [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
868b2b66 (kx 2024-12-20 16:11:07 +0300 173) [Define to 1 if the system has the `$1' built-in function])], [])
868b2b66 (kx 2024-12-20 16:11:07 +0300 174)
868b2b66 (kx 2024-12-20 16:11:07 +0300 175) AS_VAR_POPDEF([ac_var])
868b2b66 (kx 2024-12-20 16:11:07 +0300 176) ])