16553608aSNikolas Klauser //===----------------------------------------------------------------------===// 26553608aSNikolas Klauser // 36553608aSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 46553608aSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 56553608aSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66553608aSNikolas Klauser // 76553608aSNikolas Klauser //===----------------------------------------------------------------------===// 86553608aSNikolas Klauser 96553608aSNikolas Klauser #ifndef _LIBCPP___MATH_HYPERBOLIC_FUNCTIONS_H 106553608aSNikolas Klauser #define _LIBCPP___MATH_HYPERBOLIC_FUNCTIONS_H 116553608aSNikolas Klauser 126553608aSNikolas Klauser #include <__config> 136553608aSNikolas Klauser #include <__type_traits/enable_if.h> 146553608aSNikolas Klauser #include <__type_traits/is_integral.h> 156553608aSNikolas Klauser 166553608aSNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 176553608aSNikolas Klauser # pragma GCC system_header 186553608aSNikolas Klauser #endif 196553608aSNikolas Klauser 206553608aSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 216553608aSNikolas Klauser 226553608aSNikolas Klauser namespace __math { 236553608aSNikolas Klauser 246553608aSNikolas Klauser // cosh 256553608aSNikolas Klauser cosh(float __x)266553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI float cosh(float __x) _NOEXCEPT { return __builtin_coshf(__x); } 276553608aSNikolas Klauser 286553608aSNikolas Klauser template <class = int> cosh(double __x)296553608aSNikolas Klauser_LIBCPP_HIDE_FROM_ABI double cosh(double __x) _NOEXCEPT { 306553608aSNikolas Klauser return __builtin_cosh(__x); 316553608aSNikolas Klauser } 326553608aSNikolas Klauser cosh(long double __x)336553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI long double cosh(long double __x) _NOEXCEPT { return __builtin_coshl(__x); } 346553608aSNikolas Klauser 35*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0> cosh(_A1 __x)36*f3589d25SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI double cosh(_A1 __x) _NOEXCEPT { 370e4d812fSNikolas Klauser return __builtin_cosh((double)__x); 380e4d812fSNikolas Klauser } 396553608aSNikolas Klauser 406553608aSNikolas Klauser // sinh 416553608aSNikolas Klauser sinh(float __x)426553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI float sinh(float __x) _NOEXCEPT { return __builtin_sinhf(__x); } 436553608aSNikolas Klauser 446553608aSNikolas Klauser template <class = int> sinh(double __x)456553608aSNikolas Klauser_LIBCPP_HIDE_FROM_ABI double sinh(double __x) _NOEXCEPT { 466553608aSNikolas Klauser return __builtin_sinh(__x); 476553608aSNikolas Klauser } 486553608aSNikolas Klauser sinh(long double __x)496553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI long double sinh(long double __x) _NOEXCEPT { return __builtin_sinhl(__x); } 506553608aSNikolas Klauser 51*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0> sinh(_A1 __x)52*f3589d25SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI double sinh(_A1 __x) _NOEXCEPT { 530e4d812fSNikolas Klauser return __builtin_sinh((double)__x); 540e4d812fSNikolas Klauser } 556553608aSNikolas Klauser 566553608aSNikolas Klauser // tanh 576553608aSNikolas Klauser tanh(float __x)586553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI float tanh(float __x) _NOEXCEPT { return __builtin_tanhf(__x); } 596553608aSNikolas Klauser 606553608aSNikolas Klauser template <class = int> tanh(double __x)616553608aSNikolas Klauser_LIBCPP_HIDE_FROM_ABI double tanh(double __x) _NOEXCEPT { 626553608aSNikolas Klauser return __builtin_tanh(__x); 636553608aSNikolas Klauser } 646553608aSNikolas Klauser tanh(long double __x)656553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI long double tanh(long double __x) _NOEXCEPT { return __builtin_tanhl(__x); } 666553608aSNikolas Klauser 67*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0> tanh(_A1 __x)68*f3589d25SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI double tanh(_A1 __x) _NOEXCEPT { 690e4d812fSNikolas Klauser return __builtin_tanh((double)__x); 700e4d812fSNikolas Klauser } 716553608aSNikolas Klauser 726553608aSNikolas Klauser } // namespace __math 736553608aSNikolas Klauser 746553608aSNikolas Klauser _LIBCPP_END_NAMESPACE_STD 756553608aSNikolas Klauser 766553608aSNikolas Klauser #endif // _LIBCPP___MATH_HYPERBOLIC_FUNCTIONS_H 77