#define CVTFN(type1, type2) \ __attribute__((noinline)) type1 \ cvt_##type1##_##type2 (type2 x) \ { \ return x; \ } typedef signed char sc; #define sc_MIN (-__SCHAR_MAX__ - 1) #define sc_MAX __SCHAR_MAX__ typedef unsigned char uc; #define uc_MIN 0 #define uc_MAX (2U * __SCHAR_MAX__ + 1U) typedef char c; #define c_MIN ((((char) -1) > (char) 0) ? uc_MIN : sc_MIN) #define c_MAX ((((char) -1) > (char) 0) ? uc_MAX : sc_MAX) typedef signed short ss; #define ss_MIN (-__SHRT_MAX__ - 1) #define ss_MAX __SHRT_MAX__ typedef unsigned short us; #define us_MIN 0 #define us_MAX (2U * __SHRT_MAX__ + 1U) typedef signed int si; #define si_MIN (-__INT_MAX__ - 1) #define si_MAX __INT_MAX__ typedef unsigned int ui; #define ui_MIN 0 #define ui_MAX (2U * __INT_MAX__ + 1U) typedef signed long sl; #define sl_MIN (-__LONG_MAX__ - 1L) #define sl_MAX __LONG_MAX__ typedef unsigned long ul; #define ul_MIN 0L #define ul_MAX (2UL * __LONG_MAX__ + 1UL) typedef signed long long sll; #define sll_MIN (-__LONG_LONG_MAX__ - 1LL) #define sll_MAX __LONG_LONG_MAX__ typedef unsigned long long ull; #define ull_MIN 0LL #define ull_MAX (2ULL * __LONG_LONG_MAX__ + 1ULL) #ifdef USE_INT128 typedef signed __int128 si128; # define si128_MAX \ ((signed __int128) ((((unsigned __int128) 1) \ << (__CHAR_BIT__ * __SIZEOF_INT128__ - 1)) - 1)) # define si128_MIN (-si128_MAX - 1) typedef unsigned __int128 ui128; #define ui128_MIN ((unsigned __int128) 0) #define ui128_MAX (((unsigned __int128) 2) * si128_MAX + 1) #endif #ifdef si128_MAX # define CVTS128(type2) CVTFN (si128, type2) CVTFN (ui128, type2) #else # define CVTS128(type2) #endif #define CVTS(type2) \ CVTFN (sc, type2) CVTFN (c, type2) CVTFN (uc, type2) \ CVTFN (ss, type2) CVTFN (us, type2) \ CVTFN (si, type2) CVTFN (ui, type2) \ CVTFN (sl, type2) CVTFN (ul, type2) \ CVTFN (sll, type2) CVTFN (ull, type2) \ CVTS128 (type2) #ifdef __SIZEOF_INT128__ # define TWO ((unsigned __int128) 2) # define M1U ((unsigned __int128) -1) # define MAXS (__CHAR_BIT__ * __SIZEOF_INT128__) # define MAXT unsigned __int128 #else # define TWO 2ULL # define M1U -1ULL # define MAXS (__CHAR_BIT__ * __SIZEOF_LONG_LONG__) # define MAXT unsigned long long #endif #ifdef USE_FLT_DBL_LDBL typedef float f; #define f_RADIX 2 #define f_MANT_DIG __FLT_MANT_DIG__ #define f_MAX ((TWO << (f_MANT_DIG - 1)) - 1) typedef double d; #define d_RADIX 2 #define d_MANT_DIG __DBL_MANT_DIG__ #define d_MAX ((TWO << (d_MANT_DIG - 1)) - 1) typedef long double ld; #define ld_RADIX 2 #define ld_MANT_DIG __LDBL_MANT_DIG__ #define ld_MAX \ (ld_MANT_DIG > MAXS ? M1U : (TWO << (ld_MANT_DIG > MAXS \ ? 0 : ld_MANT_DIG - 1)) - 1) CVTS (f) CVTS (d) CVTS (ld) #endif #ifdef USE_FLOAT80 typedef __float80 f80; # define f80_RADIX 2 # define f80_MANT_DIG 64 # define f80_MAX ((TWO << (f80_MANT_DIG - 1)) - 1) CVTS (f80) #endif #ifdef USE_FLOAT128 typedef __float128 f128; # define f128_RADIX 2 # define f128_MANT_DIG 113 # define f128_MAX \ (f128_MANT_DIG > MAXS ? M1U : (TWO << (f128_MANT_DIG > MAXS \ ? 0 : f128_MANT_DIG - 1)) - 1) CVTS (f128) #endif #ifdef USE_DFP # ifdef __cplusplus typedef float _Decimal32 __attribute__((mode(SD))); typedef float _Decimal64 __attribute__((mode(DD))); typedef float _Decimal128 __attribute__((mode(TD))); # endif typedef _Decimal32 d32; # define d32_RADIX 10 # define d32_MANT_DIG __DEC32_MANT_DIG__ # if d32_MANT_DIG == 7 # define d32_MAX 9999999ULL # endif typedef _Decimal64 d64; # define d64_RADIX 10 # define d64_MANT_DIG __DEC64_MANT_DIG__ # if d64_MANT_DIG == 16 # define d64_MAX 9999999999999999ULL # endif typedef _Decimal128 d128; # define d128_RADIX 10 # define d128_MANT_DIG __DEC128_MANT_DIG__ # if d128_MANT_DIG == 34 # ifdef __SIZEOF_INT128__ /* #define d128_MAX 0x1ed09bead87c0378d8e63ffffffff */ # define d128_MAX \ ((((unsigned __int128) 0x1ed09bead87c0) << 64) + 0x378d8e63ffffffffULL) # else # define d128_MAX M1U # endif # endif # ifdef BROKEN_DECIMAL_INT128 # undef CVTS128 # define CVTS128(type2) # endif CVTS (d32) CVTS (d64) CVTS (d128) #endif extern #ifdef __cplusplus "C" #endif void abort ();