30 #ifndef _GLIBCXX_BITS_STD_ABS_H
31 #define _GLIBCXX_BITS_STD_ABS_H
33 #ifdef _GLIBCXX_SYSHDR
34 #pragma GCC system_header
39 #pragma GCC diagnostic push
40 #pragma GCC diagnostic ignored "-Wpedantic" // include_next
41 #pragma GCC diagnostic ignored "-Wlong-long"
43 #define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
44 #include_next <stdlib.h>
45 #ifdef __CORRECT_ISO_CPP_MATH_H_PROTO
46 # include_next <math.h>
48 #undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
54 namespace std _GLIBCXX_VISIBILITY(default)
56 _GLIBCXX_BEGIN_NAMESPACE_VERSION
60 #ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO
62 abs(
long __i) {
return __builtin_labs(__i); }
65 #ifdef _GLIBCXX_USE_LONG_LONG
67 abs(
long long __x) {
return __builtin_llabs (__x); }
75 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
76 inline _GLIBCXX_CONSTEXPR
double
78 {
return __builtin_fabs(__x); }
80 inline _GLIBCXX_CONSTEXPR
float
82 {
return __builtin_fabsf(__x); }
84 inline _GLIBCXX_CONSTEXPR
long double
86 {
return __builtin_fabsl(__x); }
89 #if defined(__GLIBCXX_TYPE_INT_N_0)
90 __extension__
inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0
91 abs(__GLIBCXX_TYPE_INT_N_0 __x) {
return __x >= 0 ? __x : -__x; }
93 #if defined(__GLIBCXX_TYPE_INT_N_1)
94 __extension__
inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_1
95 abs(__GLIBCXX_TYPE_INT_N_1 __x) {
return __x >= 0 ? __x : -__x; }
97 #if defined(__GLIBCXX_TYPE_INT_N_2)
98 __extension__
inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_2
99 abs(__GLIBCXX_TYPE_INT_N_2 __x) {
return __x >= 0 ? __x : -__x; }
101 #if defined(__GLIBCXX_TYPE_INT_N_3)
102 __extension__
inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3
103 abs(__GLIBCXX_TYPE_INT_N_3 __x) {
return __x >= 0 ? __x : -__x; }
106 #if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
109 __extension__
inline _GLIBCXX_CONSTEXPR __int128
110 abs(__int128 __x) {
return __x >= 0 ? __x : -__x; }
113 #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
116 {
return _Float16(__builtin_fabsf(__x)); }
119 #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
122 {
return __builtin_fabsf(__x); }
125 #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
128 {
return __builtin_fabs(__x); }
131 #if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
134 {
return __builtin_fabsl(__x); }
135 #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH)
138 {
return __builtin_fabsf128(__x); }
141 #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
142 constexpr __gnu_cxx::__bfloat16_t
143 abs(__gnu_cxx::__bfloat16_t __x)
144 {
return __gnu_cxx::__bfloat16_t(__builtin_fabsf(__x)); }
147 #if defined(_GLIBCXX_USE_FLOAT128) && !defined(__CUDACC__)
148 __extension__
inline _GLIBCXX_CONSTEXPR
152 #if defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
153 return __builtin_fabsl(__x);
154 #elif defined(_GLIBCXX_HAVE_FLOAT128_MATH)
155 return __builtin_fabsf128(__x);
158 return __builtin_signbit(__x) ? -__x : __x;
163 _GLIBCXX_END_NAMESPACE_VERSION
167 #pragma GCC diagnostic pop
169 #endif // _GLIBCXX_BITS_STD_ABS_H