camenduru's picture
thanks to nvidia ❤
0dc1b04
//===----------------------------------------------------------------------===//
//
// Part of libcu++, the C++ Standard Library for your entire system,
// under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef _CUDA_CLIMITS
#define _CUDA_CLIMITS
#ifndef __CUDACC_RTC__
#include <climits>
#include <limits.h>
#include <cstdint>
#else
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 255
#define __CHAR_UNSIGNED__ ('\xff' > 0) // CURSED
#if __CHAR_UNSIGNED__
#define CHAR_MIN 0
#define CHAR_MAX UCHAR_MAX
#else
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX
#endif
#define SHRT_MIN (-SHRT_MAX - 1)
#define SHRT_MAX 0x7fff
#define USHRT_MAX 0xffff
#define INT_MIN (-INT_MAX - 1)
#define INT_MAX 0x7fffffff
#define UINT_MAX 0xffffffff
#define LONG_MIN (-LONG_MAX - 1)
#ifdef __LP64__
#define LONG_MAX LLONG_MAX
#define ULONG_MAX ULLONG_MAX
#else
#define LONG_MAX INT_MAX
#define ULONG_MAX UINT_MAX
#endif
#define LLONG_MIN (-LLONG_MAX - 1)
#define LLONG_MAX 0x7fffffffffffffff
#define ULLONG_MAX 0xffffffffffffffff
#define __FLT_RADIX__ 2
#define __FLT_MANT_DIG__ 24
#define __FLT_DIG__ 6
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
#define __FLT_MIN_EXP__ (-125)
#define __FLT_MIN_10_EXP__ (-37)
#define __FLT_MAX_EXP__ 128
#define __FLT_MAX_10_EXP__ 38
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
#define __DBL_MANT_DIG__ 53
#define __DBL_DIG__ 15
#define __DBL_MIN__ 2.22507385850720138309023271733240406e-308
#define __DBL_MAX__ 1.79769313486231570814527423731704357e+308
#define __DBL_EPSILON__ 2.22044604925031308084726333618164062e-16
#define __DBL_MIN_EXP__ (-1021)
#define __DBL_MIN_10_EXP__ (-307)
#define __DBL_MAX_EXP__ 1024
#define __DBL_MAX_10_EXP__ 308
#define __DBL_DENORM_MIN__ 4.94065645841246544176568792868221372e-324
template<typename _To, typename _From>
static __device__ __forceinline__
_To __cowchild_cast(_From __from)
{
static_assert(sizeof(_From) == sizeof(_To), "");
union __cast { _From __from; _To __to; };
__cast __c;
__c.__from = __from;
return __c.__to;
}
#define __builtin_huge_valf() __cowchild_cast<float>(0x7f800000)
#define __builtin_nanf(__dummy) __cowchild_cast<float>(0x7fc00000)
#define __builtin_nansf(__dummy) __cowchild_cast<float>(0x7fa00000)
#define __builtin_huge_val() __cowchild_cast<double>(0x7ff0000000000000)
#define __builtin_nan(__dummy) __cowchild_cast<double>(0x7ff8000000000000)
#define __builtin_nans(__dummy) __cowchild_cast<double>(0x7ff4000000000000)
#endif //__CUDACC_RTC__
#include "detail/__config"
#include "detail/__pragma_push"
#include "detail/libcxx/include/climits"
// ICC defines __CHAR_BIT__ by default
// accept that, but assert it is what we expect
#ifdef __CHAR_BIT__
static_assert(__CHAR_BIT__ == 8, "");
#else
#define __CHAR_BIT__ 8
#endif
#include "detail/__pragma_pop"
#endif //_CUDA_CLIMITS