Collection of DPF-based plugins for packaging
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
5.7KB

  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 <gabriele.svelto@gmail.com>
  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. #serial 6
  94. AC_DEFUN([AX_GCC_BUILTIN], [
  95. AS_VAR_PUSHDEF([ac_var], [ax_cv_have_$1])
  96. AC_CACHE_CHECK([for $1], [ac_var], [
  97. AC_LINK_IFELSE([AC_LANG_PROGRAM([], [
  98. m4_case([$1],
  99. [__builtin_assume_aligned], [$1("", 0)],
  100. [__builtin_bswap16], [$1(0)],
  101. [__builtin_bswap32], [$1(0)],
  102. [__builtin_bswap64], [$1(0)],
  103. [__builtin_choose_expr], [$1(0, 0, 0)],
  104. [__builtin___clear_cache], [$1("", "")],
  105. [__builtin_clrsb], [$1(0)],
  106. [__builtin_clrsbl], [$1(0)],
  107. [__builtin_clrsbll], [$1(0)],
  108. [__builtin_clz], [$1(0)],
  109. [__builtin_clzl], [$1(0)],
  110. [__builtin_clzll], [$1(0)],
  111. [__builtin_complex], [$1(0.0, 0.0)],
  112. [__builtin_constant_p], [$1(0)],
  113. [__builtin_ctz], [$1(0)],
  114. [__builtin_ctzl], [$1(0)],
  115. [__builtin_ctzll], [$1(0)],
  116. [__builtin_expect], [$1(0, 0)],
  117. [__builtin_ffs], [$1(0)],
  118. [__builtin_ffsl], [$1(0)],
  119. [__builtin_ffsll], [$1(0)],
  120. [__builtin_fpclassify], [$1(0, 1, 2, 3, 4, 0.0)],
  121. [__builtin_huge_val], [$1()],
  122. [__builtin_huge_valf], [$1()],
  123. [__builtin_huge_vall], [$1()],
  124. [__builtin_inf], [$1()],
  125. [__builtin_infd128], [$1()],
  126. [__builtin_infd32], [$1()],
  127. [__builtin_infd64], [$1()],
  128. [__builtin_inff], [$1()],
  129. [__builtin_infl], [$1()],
  130. [__builtin_isinf_sign], [$1(0.0)],
  131. [__builtin_nan], [$1("")],
  132. [__builtin_nand128], [$1("")],
  133. [__builtin_nand32], [$1("")],
  134. [__builtin_nand64], [$1("")],
  135. [__builtin_nanf], [$1("")],
  136. [__builtin_nanl], [$1("")],
  137. [__builtin_nans], [$1("")],
  138. [__builtin_nansf], [$1("")],
  139. [__builtin_nansl], [$1("")],
  140. [__builtin_object_size], [$1("", 0)],
  141. [__builtin_parity], [$1(0)],
  142. [__builtin_parityl], [$1(0)],
  143. [__builtin_parityll], [$1(0)],
  144. [__builtin_popcount], [$1(0)],
  145. [__builtin_popcountl], [$1(0)],
  146. [__builtin_popcountll], [$1(0)],
  147. [__builtin_powi], [$1(0, 0)],
  148. [__builtin_powif], [$1(0, 0)],
  149. [__builtin_powil], [$1(0, 0)],
  150. [__builtin_prefetch], [$1("")],
  151. [__builtin_trap], [$1()],
  152. [__builtin_types_compatible_p], [$1(int, int)],
  153. [__builtin_unreachable], [$1()],
  154. [m4_warn([syntax], [Unsupported built-in $1, the test may fail])
  155. $1()]
  156. )
  157. ])],
  158. [AS_VAR_SET([ac_var], [yes])],
  159. [AS_VAR_SET([ac_var], [no])])
  160. ])
  161. AS_IF([test yes = AS_VAR_GET([ac_var])],
  162. [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
  163. [Define to 1 if the system has the `$1' built-in function])], [])
  164. AS_VAR_POPDEF([ac_var])
  165. ])