codegen: add a 'size' argument to ALU_WRITES_FLAGS
[ajla.git] / m4 / ax_gcc_builtin.m4
blob54d87298eb1c7010c791efc9a7938feebcccfa59
1 # ===========================================================================
2 #      http://www.gnu.org/software/autoconf-archive/ax_gcc_builtin.html
3 # ===========================================================================
5 # SYNOPSIS
7 #   AX_GCC_BUILTIN(BUILTIN)
9 # DESCRIPTION
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.
14 #   The BUILTIN parameter is the name of the built-in function.
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()).
21 #   The macro caches its result in the ax_cv_have_<BUILTIN> variable (e.g.
22 #   ax_cv_have___builtin_expect).
24 #   The macro currently supports the following built-in functions:
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
82 #   Unsuppored 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.
85 # LICENSE
87 #   Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
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.
94 #serial 3
96 AC_DEFUN([AX_GCC_BUILTIN], [
97     AS_VAR_PUSHDEF([ac_var], [ax_cv_have_$1])
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     ])
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])], [])
169     AS_VAR_POPDEF([ac_var])