diff options
Diffstat (limited to 'libcxx/include')
-rw-r--r-- | libcxx/include/__config | 15 | ||||
-rw-r--r-- | libcxx/include/__locale | 16 | ||||
-rw-r--r-- | libcxx/include/cmath | 34 | ||||
-rw-r--r-- | libcxx/include/cstdlib | 3 | ||||
-rw-r--r-- | libcxx/include/cstring | 2 |
5 files changed, 63 insertions, 7 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config index 6d551c94333..e0b9582cd08 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -58,6 +58,17 @@ # endif #endif // _WIN32 +#ifdef __sun__ +# include <sys/isa_defs.h> +# ifdef _LITTLE_ENDIAN +# define _LIBCPP_LITTLE_ENDIAN 1 +# define _LIBCPP_BIG_ENDIAN 0 +# else +# define _LIBCPP_LITTLE_ENDIAN 0 +# define _LIBCPP_BIG_ENDIAN 1 +# endif +#endif // __sun__ + #if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) # include <endian.h> # if __BYTE_ORDER == __LITTLE_ENDIAN @@ -394,7 +405,7 @@ template <unsigned> struct __static_assert_check {}; #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) #endif // _LIBCPP_HAS_NO_STRONG_ENUMS -#if __APPLE__ || __FreeBSD__ || _WIN32 +#if __APPLE__ || __FreeBSD__ || _WIN32 || __sun__ #define _LIBCPP_LOCALE__L_EXTENSIONS 1 #endif #if __FreeBSD__ @@ -405,7 +416,7 @@ template <unsigned> struct __static_assert_check {}; #define _LIBCPP_HAS_DEFAULTRUNELOCALE #endif -#if __APPLE__ || __FreeBSD__ +#if __APPLE__ || __FreeBSD__ || __sun__ #define _LIBCPP_WCTYPE_IS_MASK #endif diff --git a/libcxx/include/__locale b/libcxx/include/__locale index 54afdf9a5bd..b1e07113e7d 100644 --- a/libcxx/include/__locale +++ b/libcxx/include/__locale @@ -21,7 +21,7 @@ #include <locale.h> #if _WIN32 # include <support/win32/locale_win32.h> -#elif (__GLIBC__ || __APPLE__ || __FreeBSD__) +#elif (__GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__) # include <xlocale.h> #endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD_ @@ -348,7 +348,19 @@ public: static const mask punct = _CTYPE_P; static const mask xdigit = _CTYPE_X; static const mask blank = _CTYPE_B; -#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ +#elif __sun__ + typedef unsigned int mask; + static const mask space = _ISSPACE; + static const mask print = _ISPRINT; + static const mask cntrl = _ISCNTRL; + static const mask upper = _ISUPPER; + static const mask lower = _ISLOWER; + static const mask alpha = _ISALPHA; + static const mask digit = _ISDIGIT; + static const mask punct = _ISPUNCT; + static const mask xdigit = _ISXDIGIT; + static const mask blank = _ISBLANK; +#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ || __sun__ typedef unsigned long mask; static const mask space = 1<<0; static const mask print = 1<<1; diff --git a/libcxx/include/cmath b/libcxx/include/cmath index f0b985c8b0d..50316bd5e52 100644 --- a/libcxx/include/cmath +++ b/libcxx/include/cmath @@ -646,13 +646,17 @@ using ::isunordered; using ::float_t; using ::double_t; +#ifndef __sun__ // abs +#endif // __sun__ template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_floating_point<_A1>::value, _A1>::type abs(_A1 __x) {return fabs(__x);} +#ifndef __sun__ + // acos using ::acos; @@ -769,16 +773,20 @@ inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type cosh(_A1 __x) {return cosh((double)__x);} +#endif // __sun__ // exp using ::exp; using ::expf; +#ifndef __sun__ + #ifndef _MSC_VER inline _LIBCPP_INLINE_VISIBILITY float exp(float __x) {return expf(__x);} inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __x) {return expl(__x);} #endif + template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type @@ -816,8 +824,10 @@ floor(_A1 __x) {return floor((double)__x);} // fmod +#endif //__sun__ using ::fmod; using ::fmodf; +#ifndef __sun__ #ifndef _MSC_VER inline _LIBCPP_INLINE_VISIBILITY float fmod(float __x, float __y) {return fmodf(__x, __y);} @@ -840,6 +850,7 @@ fmod(_A1 __x, _A2 __y) return fmod((__result_type)__x, (__result_type)__y); } + // frexp using ::frexp; @@ -872,8 +883,10 @@ ldexp(_A1 __x, int __e) {return ldexp((double)__x, __e);} // log +#endif // __sun__ using ::log; using ::logf; +#ifndef __sun__ #ifndef _MSC_VER inline _LIBCPP_INLINE_VISIBILITY float log(float __x) {return logf(__x);} @@ -885,6 +898,7 @@ inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type log(_A1 __x) {return log((double)__x);} + // log10 using ::log10; @@ -912,9 +926,12 @@ inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __x, long double* // pow +#endif // __sun__ using ::pow; using ::powf; +#ifndef __sun__ + #ifndef _MSC_VER inline _LIBCPP_INLINE_VISIBILITY float pow(float __x, float __y) {return powf(__x, __y);} inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __x, long double __y) {return powl(__x, __y);} @@ -936,6 +953,7 @@ pow(_A1 __x, _A2 __y) return pow((__result_type)__x, (__result_type)__y); } + // sin using ::sin; @@ -968,10 +986,12 @@ sinh(_A1 __x) {return sinh((double)__x);} // sqrt +#endif // __sun__ using ::sqrt; using ::sqrtf; -#ifndef _MSC_VER + +#if !(defined(_MSC_VER) || defined(__sun__)) inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __x) {return sqrtf(__x);} inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __x) {return sqrtl(__x);} #endif @@ -981,10 +1001,14 @@ inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type sqrt(_A1 __x) {return sqrt((double)__x);} +#ifndef __sun__ + // tan +#endif // __sun__ using ::tan; using ::tanf; +#ifndef __sun__ #ifndef _MSC_VER inline _LIBCPP_INLINE_VISIBILITY float tan(float __x) {return tanf(__x);} @@ -1294,11 +1318,13 @@ using ::lgammaf; inline _LIBCPP_INLINE_VISIBILITY float lgamma(float __x) {return lgammaf(__x);} inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __x) {return lgammal(__x);} + template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type lgamma(_A1 __x) {return lgamma((double)__x);} + // llrint using ::llrint; @@ -1392,8 +1418,10 @@ lround(_A1 __x) {return lround((double)__x);} // nan +#endif // __sun__ using ::nan; using ::nanf; +#ifndef __sun__ // nearbyint @@ -1635,6 +1663,10 @@ using ::tgammal; using ::truncl; #endif // !_MSC_VER +#else +using ::lgamma; +using ::lgammaf; +#endif // __sun__ _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP_CMATH diff --git a/libcxx/include/cstdlib b/libcxx/include/cstdlib index 5d8a9d73464..1158db2c0ac 100644 --- a/libcxx/include/cstdlib +++ b/libcxx/include/cstdlib @@ -132,7 +132,8 @@ using ::wctomb; using ::mbstowcs; using ::wcstombs; -#ifndef _MSC_VER // MSVC already has the correct prototype in <stdlib.h.h> #ifdef __cplusplus +// MSVC already has the correct prototype in <stdlib.h.h> #ifdef __cplusplus +#if !defined(_MSC_VER) && !defined(__sun__) inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) {return labs(__x);} inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) {return llabs(__x);} diff --git a/libcxx/include/cstring b/libcxx/include/cstring index dd49d802d5e..13bb11892dc 100644 --- a/libcxx/include/cstring +++ b/libcxx/include/cstring @@ -94,7 +94,7 @@ using ::strspn; using ::strstr; // MSVC, GNU libc and its derivates already have the correct prototype in <string.h> #ifdef __cplusplus -#if !defined(__GLIBC__) && !defined(_MSC_VER) +#if !defined(__GLIBC__) && !defined(_MSC_VER) && !defined(__sun__) inline _LIBCPP_INLINE_VISIBILITY char* strchr( char* __s, int __c) {return ::strchr(__s, __c);} inline _LIBCPP_INLINE_VISIBILITY char* strpbrk( char* __s1, const char* __s2) {return ::strpbrk(__s1, __s2);} inline _LIBCPP_INLINE_VISIBILITY char* strrchr( char* __s, int __c) {return ::strrchr(__s, __c);} |