diff --git a/libcxx/include/math.h b/libcxx/include/math.h --- a/libcxx/include/math.h +++ b/libcxx/include/math.h @@ -1120,16 +1120,23 @@ // copysign -inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x, - float __lcpp_y) _NOEXCEPT { +#if __has_builtin(__builtin_copysignf) +_LIBCPP_CONSTEXPR +#endif +inline _LIBCPP_INLINE_VISIBILITY float +__copysign(float __lcpp_x, float __lcpp_y) _NOEXCEPT { #if __has_builtin(__builtin_copysignf) return __builtin_copysignf(__lcpp_x, __lcpp_y); #else return ::copysignf(__lcpp_x, __lcpp_y); #endif } + +#if __has_builtin(__builtin_copysignl) +_LIBCPP_CONSTEXPR +#endif inline _LIBCPP_INLINE_VISIBILITY long double -copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT { +__copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT { #if __has_builtin(__builtin_copysignl) return __builtin_copysignl(__lcpp_x, __lcpp_y); #else @@ -1138,6 +1145,9 @@ } template +#if __has_builtin(__builtin_copysign) +_LIBCPP_CONSTEXPR +#endif inline _LIBCPP_INLINE_VISIBILITY typename std::_EnableIf < @@ -1145,8 +1155,7 @@ std::is_arithmetic<_A2>::value, std::__promote<_A1, _A2> >::type -copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ +__copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT { typedef typename std::__promote<_A1, _A2>::type __result_type; static_assert((!(std::_IsSame<_A1, __result_type>::value && std::_IsSame<_A2, __result_type>::value)), ""); @@ -1157,6 +1166,28 @@ #endif } +inline _LIBCPP_INLINE_VISIBILITY float +copysign(float __lcpp_x, float __lcpp_y) _NOEXCEPT { + return __copysign(__lcpp_x, __lcpp_y); +} + +inline _LIBCPP_INLINE_VISIBILITY long double +copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT { + return __copysign(__lcpp_x, __lcpp_y); +} + +template +inline _LIBCPP_INLINE_VISIBILITY +typename std::_EnableIf +< + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, + std::__promote<_A1, _A2> +>::type +copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT { + return __copysign(__lcpp_x, __lcpp_y); +} + // erf inline _LIBCPP_INLINE_VISIBILITY float erf(float __lcpp_x) _NOEXCEPT {return ::erff(__lcpp_x);}