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