|
| 1 | +# =========================================================================== |
| 2 | +# https://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_bswap16 |
| 28 | +# __builtin_bswap32 |
| 29 | +# __builtin_bswap64 |
| 30 | +# __builtin_choose_expr |
| 31 | +# __builtin___clear_cache |
| 32 | +# __builtin_clrsb |
| 33 | +# __builtin_clrsbl |
| 34 | +# __builtin_clrsbll |
| 35 | +# __builtin_clz |
| 36 | +# __builtin_clzl |
| 37 | +# __builtin_clzll |
| 38 | +# __builtin_complex |
| 39 | +# __builtin_constant_p |
| 40 | +# __builtin_ctz |
| 41 | +# __builtin_ctzl |
| 42 | +# __builtin_ctzll |
| 43 | +# __builtin_expect |
| 44 | +# __builtin_ffs |
| 45 | +# __builtin_ffsl |
| 46 | +# __builtin_ffsll |
| 47 | +# __builtin_fpclassify |
| 48 | +# __builtin_huge_val |
| 49 | +# __builtin_huge_valf |
| 50 | +# __builtin_huge_vall |
| 51 | +# __builtin_inf |
| 52 | +# __builtin_infd128 |
| 53 | +# __builtin_infd32 |
| 54 | +# __builtin_infd64 |
| 55 | +# __builtin_inff |
| 56 | +# __builtin_infl |
| 57 | +# __builtin_isinf_sign |
| 58 | +# __builtin_nan |
| 59 | +# __builtin_nand128 |
| 60 | +# __builtin_nand32 |
| 61 | +# __builtin_nand64 |
| 62 | +# __builtin_nanf |
| 63 | +# __builtin_nanl |
| 64 | +# __builtin_nans |
| 65 | +# __builtin_nansf |
| 66 | +# __builtin_nansl |
| 67 | +# __builtin_object_size |
| 68 | +# __builtin_parity |
| 69 | +# __builtin_parityl |
| 70 | +# __builtin_parityll |
| 71 | +# __builtin_popcount |
| 72 | +# __builtin_popcountl |
| 73 | +# __builtin_popcountll |
| 74 | +# __builtin_powi |
| 75 | +# __builtin_powif |
| 76 | +# __builtin_powil |
| 77 | +# __builtin_prefetch |
| 78 | +# __builtin_trap |
| 79 | +# __builtin_types_compatible_p |
| 80 | +# __builtin_unreachable |
| 81 | +# |
| 82 | +# Unsupported built-ins will be tested with an empty parameter set and the |
| 83 | +# result of the check might be wrong or meaningless so use with care. |
| 84 | +# |
| 85 | +# LICENSE |
| 86 | +# |
| 87 | +# Copyright (c) 2013 Gabriele Svelto <[email protected]> |
| 88 | +# |
| 89 | +# Copying and distribution of this file, with or without modification, are |
| 90 | +# permitted in any medium without royalty provided the copyright notice |
| 91 | +# and this notice are preserved. This file is offered as-is, without any |
| 92 | +# warranty. |
| 93 | + |
| 94 | +#serial 6 |
| 95 | + |
| 96 | +AC_DEFUN([AX_GCC_BUILTIN], [ |
| 97 | + AS_VAR_PUSHDEF([ac_var], [ax_cv_have_$1]) |
| 98 | +
|
| 99 | + AC_CACHE_CHECK([for $1], [ac_var], [ |
| 100 | + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [ |
| 101 | + m4_case([$1], |
| 102 | + [__builtin_assume_aligned], [$1("", 0)], |
| 103 | + [__builtin_bswap16], [$1(0)], |
| 104 | + [__builtin_bswap32], [$1(0)], |
| 105 | + [__builtin_bswap64], [$1(0)], |
| 106 | + [__builtin_choose_expr], [$1(0, 0, 0)], |
| 107 | + [__builtin___clear_cache], [$1("", "")], |
| 108 | + [__builtin_clrsb], [$1(0)], |
| 109 | + [__builtin_clrsbl], [$1(0)], |
| 110 | + [__builtin_clrsbll], [$1(0)], |
| 111 | + [__builtin_clz], [$1(0)], |
| 112 | + [__builtin_clzl], [$1(0)], |
| 113 | + [__builtin_clzll], [$1(0)], |
| 114 | + [__builtin_complex], [$1(0.0, 0.0)], |
| 115 | + [__builtin_constant_p], [$1(0)], |
| 116 | + [__builtin_ctz], [$1(0)], |
| 117 | + [__builtin_ctzl], [$1(0)], |
| 118 | + [__builtin_ctzll], [$1(0)], |
| 119 | + [__builtin_expect], [$1(0, 0)], |
| 120 | + [__builtin_ffs], [$1(0)], |
| 121 | + [__builtin_ffsl], [$1(0)], |
| 122 | + [__builtin_ffsll], [$1(0)], |
| 123 | + [__builtin_fpclassify], [$1(0, 1, 2, 3, 4, 0.0)], |
| 124 | + [__builtin_huge_val], [$1()], |
| 125 | + [__builtin_huge_valf], [$1()], |
| 126 | + [__builtin_huge_vall], [$1()], |
| 127 | + [__builtin_inf], [$1()], |
| 128 | + [__builtin_infd128], [$1()], |
| 129 | + [__builtin_infd32], [$1()], |
| 130 | + [__builtin_infd64], [$1()], |
| 131 | + [__builtin_inff], [$1()], |
| 132 | + [__builtin_infl], [$1()], |
| 133 | + [__builtin_isinf_sign], [$1(0.0)], |
| 134 | + [__builtin_nan], [$1("")], |
| 135 | + [__builtin_nand128], [$1("")], |
| 136 | + [__builtin_nand32], [$1("")], |
| 137 | + [__builtin_nand64], [$1("")], |
| 138 | + [__builtin_nanf], [$1("")], |
| 139 | + [__builtin_nanl], [$1("")], |
| 140 | + [__builtin_nans], [$1("")], |
| 141 | + [__builtin_nansf], [$1("")], |
| 142 | + [__builtin_nansl], [$1("")], |
| 143 | + [__builtin_object_size], [$1("", 0)], |
| 144 | + [__builtin_parity], [$1(0)], |
| 145 | + [__builtin_parityl], [$1(0)], |
| 146 | + [__builtin_parityll], [$1(0)], |
| 147 | + [__builtin_popcount], [$1(0)], |
| 148 | + [__builtin_popcountl], [$1(0)], |
| 149 | + [__builtin_popcountll], [$1(0)], |
| 150 | + [__builtin_powi], [$1(0, 0)], |
| 151 | + [__builtin_powif], [$1(0, 0)], |
| 152 | + [__builtin_powil], [$1(0, 0)], |
| 153 | + [__builtin_prefetch], [$1("")], |
| 154 | + [__builtin_trap], [$1()], |
| 155 | + [__builtin_types_compatible_p], [$1(int, int)], |
| 156 | + [__builtin_unreachable], [$1()], |
| 157 | + [m4_warn([syntax], [Unsupported built-in $1, the test may fail]) |
| 158 | + $1()] |
| 159 | + ) |
| 160 | + ])], |
| 161 | + [AS_VAR_SET([ac_var], [yes])], |
| 162 | + [AS_VAR_SET([ac_var], [no])]) |
| 163 | + ]) |
| 164 | +
|
| 165 | + AS_IF([test yes = AS_VAR_GET([ac_var])], |
| 166 | + [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1, |
| 167 | + [Define to 1 if the system has the `$1' built-in function])], []) |
| 168 | +
|
| 169 | + AS_VAR_POPDEF([ac_var]) |
| 170 | +]) |
0 commit comments