Math Processor Unit Library

libmpu – library of arithmetic functions for integer, real, and complex numbers of increased digit capacity

16 Commits   0 Branches   2 Tags
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) ])