1bb722a7dSDimitry Andric //===-- Definition of macros from float.h ---------------------------------===// 2bb722a7dSDimitry Andric // 3bb722a7dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4bb722a7dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5bb722a7dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6bb722a7dSDimitry Andric // 7bb722a7dSDimitry Andric //===----------------------------------------------------------------------===// 8bb722a7dSDimitry Andric 9bb722a7dSDimitry Andric #ifndef LLVM_LIBC_MACROS_FLOAT_MACROS_H 10bb722a7dSDimitry Andric #define LLVM_LIBC_MACROS_FLOAT_MACROS_H 11bb722a7dSDimitry Andric 12bb722a7dSDimitry Andric #ifndef FLT_RADIX 13bb722a7dSDimitry Andric #define FLT_RADIX __FLT_RADIX__ 14bb722a7dSDimitry Andric #endif // FLT_RADIX 15bb722a7dSDimitry Andric 16bb722a7dSDimitry Andric #ifndef FLT_EVAL_METHOD 17bb722a7dSDimitry Andric #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ 18bb722a7dSDimitry Andric #endif // FLT_EVAL_METHOD 19bb722a7dSDimitry Andric 20bb722a7dSDimitry Andric #ifndef FLT_ROUNDS 21bb722a7dSDimitry Andric #if __has_builtin(__builtin_flt_rounds) 22bb722a7dSDimitry Andric #define FLT_ROUNDS __builtin_flt_rounds() 23bb722a7dSDimitry Andric #else 24bb722a7dSDimitry Andric #define FLT_ROUNDS 1 25bb722a7dSDimitry Andric #endif 26bb722a7dSDimitry Andric #endif // FLT_ROUNDS 27bb722a7dSDimitry Andric 28bb722a7dSDimitry Andric #ifndef FLT_DECIMAL_DIG 29bb722a7dSDimitry Andric #define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ 30bb722a7dSDimitry Andric #endif // FLT_DECIMAL_DIG 31bb722a7dSDimitry Andric 32bb722a7dSDimitry Andric #ifndef DBL_DECIMAL_DIG 33bb722a7dSDimitry Andric #define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ 34bb722a7dSDimitry Andric #endif // DBL_DECIMAL_DIG 35bb722a7dSDimitry Andric 36bb722a7dSDimitry Andric #ifndef LDBL_DECIMAL_DIG 37bb722a7dSDimitry Andric #define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ 38bb722a7dSDimitry Andric #endif // LDBL_DECIMAL_DIG 39bb722a7dSDimitry Andric 40bb722a7dSDimitry Andric #ifndef DECIMAL_DIG 41bb722a7dSDimitry Andric #define DECIMAL_DIG __DECIMAL_DIG__ 42bb722a7dSDimitry Andric #endif // DECIMAL_DIG 43bb722a7dSDimitry Andric 44bb722a7dSDimitry Andric #ifndef FLT_DIG 45bb722a7dSDimitry Andric #define FLT_DIG __FLT_DIG__ 46bb722a7dSDimitry Andric #endif // FLT_DIG 47bb722a7dSDimitry Andric 48bb722a7dSDimitry Andric #ifndef DBL_DIG 49bb722a7dSDimitry Andric #define DBL_DIG __DBL_DIG__ 50bb722a7dSDimitry Andric #endif // DBL_DIG 51bb722a7dSDimitry Andric 52bb722a7dSDimitry Andric #ifndef LDBL_DIG 53bb722a7dSDimitry Andric #define LDBL_DIG __LDBL_DIG__ 54bb722a7dSDimitry Andric #endif // LDBL_DIG 55bb722a7dSDimitry Andric 56bb722a7dSDimitry Andric #ifndef FLT_MANT_DIG 57bb722a7dSDimitry Andric #define FLT_MANT_DIG __FLT_MANT_DIG__ 58bb722a7dSDimitry Andric #endif // FLT_MANT_DIG 59bb722a7dSDimitry Andric 60bb722a7dSDimitry Andric #ifndef DBL_MANT_DIG 61bb722a7dSDimitry Andric #define DBL_MANT_DIG __DBL_MANT_DIG__ 62bb722a7dSDimitry Andric #endif // DBL_MANT_DIG 63bb722a7dSDimitry Andric 64*718e5874SDimitry Andric // Kludge for gcc defining LDBL_MANT_DIG as 53 on i386 65*718e5874SDimitry Andric #if defined(LDBL_MANT_DIG) && defined(__GNUC__) && !defined(__clang__) && defined(__i386__) 66*718e5874SDimitry Andric #undef LDBL_MANT_DIG 67*718e5874SDimitry Andric #endif 68*718e5874SDimitry Andric 69bb722a7dSDimitry Andric #ifndef LDBL_MANT_DIG 70bb722a7dSDimitry Andric #define LDBL_MANT_DIG __LDBL_MANT_DIG__ 71bb722a7dSDimitry Andric #endif // LDBL_MANT_DIG 72bb722a7dSDimitry Andric 73bb722a7dSDimitry Andric #ifndef FLT_MIN 74bb722a7dSDimitry Andric #define FLT_MIN __FLT_MIN__ 75bb722a7dSDimitry Andric #endif // FLT_MIN 76bb722a7dSDimitry Andric 77bb722a7dSDimitry Andric #ifndef DBL_MIN 78bb722a7dSDimitry Andric #define DBL_MIN __DBL_MIN__ 79bb722a7dSDimitry Andric #endif // DBL_MIN 80bb722a7dSDimitry Andric 81bb722a7dSDimitry Andric #ifndef LDBL_MIN 82bb722a7dSDimitry Andric #define LDBL_MIN __LDBL_MIN__ 83bb722a7dSDimitry Andric #endif // LDBL_MIN 84bb722a7dSDimitry Andric 85bb722a7dSDimitry Andric #ifndef FLT_MAX 86bb722a7dSDimitry Andric #define FLT_MAX __FLT_MAX__ 87bb722a7dSDimitry Andric #endif // FLT_MAX 88bb722a7dSDimitry Andric 89bb722a7dSDimitry Andric #ifndef DBL_MAX 90bb722a7dSDimitry Andric #define DBL_MAX __DBL_MAX__ 91bb722a7dSDimitry Andric #endif // DBL_MAX 92bb722a7dSDimitry Andric 93bb722a7dSDimitry Andric #ifndef LDBL_MAX 94bb722a7dSDimitry Andric #define LDBL_MAX __LDBL_MAX__ 95bb722a7dSDimitry Andric #endif // LDBL_MAX 96bb722a7dSDimitry Andric 97bb722a7dSDimitry Andric #ifndef FLT_TRUE_MIN 98bb722a7dSDimitry Andric #define FLT_TRUE_MIN __FLT_DENORM_MIN__ 99bb722a7dSDimitry Andric #endif // FLT_TRUE_MIN 100bb722a7dSDimitry Andric 101bb722a7dSDimitry Andric #ifndef DBL_TRUE_MIN 102bb722a7dSDimitry Andric #define DBL_TRUE_MIN __DBL_DENORM_MIN__ 103bb722a7dSDimitry Andric #endif // DBL_TRUE_MIN 104bb722a7dSDimitry Andric 105bb722a7dSDimitry Andric #ifndef LDBL_TRUE_MIN 106bb722a7dSDimitry Andric #define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ 107bb722a7dSDimitry Andric #endif // LDBL_TRUE_MIN 108bb722a7dSDimitry Andric 109bb722a7dSDimitry Andric #ifndef FLT_EPSILON 110bb722a7dSDimitry Andric #define FLT_EPSILON __FLT_EPSILON__ 111bb722a7dSDimitry Andric #endif // FLT_EPSILON 112bb722a7dSDimitry Andric 113bb722a7dSDimitry Andric #ifndef DBL_EPSILON 114bb722a7dSDimitry Andric #define DBL_EPSILON __DBL_EPSILON__ 115bb722a7dSDimitry Andric #endif // DBL_EPSILON 116bb722a7dSDimitry Andric 117bb722a7dSDimitry Andric #ifndef LDBL_EPSILON 118bb722a7dSDimitry Andric #define LDBL_EPSILON __LDBL_EPSILON__ 119bb722a7dSDimitry Andric #endif // LDBL_EPSILON 120bb722a7dSDimitry Andric 121bb722a7dSDimitry Andric #ifndef FLT_MIN_EXP 122bb722a7dSDimitry Andric #define FLT_MIN_EXP __FLT_MIN_EXP__ 123bb722a7dSDimitry Andric #endif // FLT_MIN_EXP 124bb722a7dSDimitry Andric 125bb722a7dSDimitry Andric #ifndef DBL_MIN_EXP 126bb722a7dSDimitry Andric #define DBL_MIN_EXP __DBL_MIN_EXP__ 127bb722a7dSDimitry Andric #endif // DBL_MIN_EXP 128bb722a7dSDimitry Andric 129bb722a7dSDimitry Andric #ifndef LDBL_MIN_EXP 130bb722a7dSDimitry Andric #define LDBL_MIN_EXP __LDBL_MIN_EXP__ 131bb722a7dSDimitry Andric #endif // LDBL_MIN_EXP 132bb722a7dSDimitry Andric 133bb722a7dSDimitry Andric #ifndef FLT_MIN_10_EXP 134bb722a7dSDimitry Andric #define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ 135bb722a7dSDimitry Andric #endif // FLT_MIN_10_EXP 136bb722a7dSDimitry Andric 137bb722a7dSDimitry Andric #ifndef DBL_MIN_10_EXP 138bb722a7dSDimitry Andric #define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ 139bb722a7dSDimitry Andric #endif // DBL_MIN_10_EXP 140bb722a7dSDimitry Andric 141bb722a7dSDimitry Andric #ifndef LDBL_MIN_10_EXP 142bb722a7dSDimitry Andric #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 143bb722a7dSDimitry Andric #endif // LDBL_MIN_10_EXP 144bb722a7dSDimitry Andric 145bb722a7dSDimitry Andric #ifndef FLT_MAX_EXP 146bb722a7dSDimitry Andric #define FLT_MAX_EXP __FLT_MAX_EXP__ 147bb722a7dSDimitry Andric #endif // FLT_MAX_EXP 148bb722a7dSDimitry Andric 149bb722a7dSDimitry Andric #ifndef DBL_MAX_EXP 150bb722a7dSDimitry Andric #define DBL_MAX_EXP __DBL_MAX_EXP__ 151bb722a7dSDimitry Andric #endif // DBL_MAX_EXP 152bb722a7dSDimitry Andric 153bb722a7dSDimitry Andric #ifndef LDBL_MAX_EXP 154bb722a7dSDimitry Andric #define LDBL_MAX_EXP __LDBL_MAX_EXP__ 155bb722a7dSDimitry Andric #endif // LDBL_MAX_EXP 156bb722a7dSDimitry Andric 157bb722a7dSDimitry Andric #ifndef FLT_MAX_10_EXP 158bb722a7dSDimitry Andric #define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ 159bb722a7dSDimitry Andric #endif // FLT_MAX_10_EXP 160bb722a7dSDimitry Andric 161bb722a7dSDimitry Andric #ifndef DBL_MAX_10_EXP 162bb722a7dSDimitry Andric #define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ 163bb722a7dSDimitry Andric #endif // DBL_MAX_10_EXP 164bb722a7dSDimitry Andric 165bb722a7dSDimitry Andric #ifndef LDBL_MAX_10_EXP 166bb722a7dSDimitry Andric #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 167bb722a7dSDimitry Andric #endif // LDBL_MAX_10_EXP 168bb722a7dSDimitry Andric 169bb722a7dSDimitry Andric #ifndef FLT_HAS_SUBNORM 170bb722a7dSDimitry Andric #define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ 171bb722a7dSDimitry Andric #endif // FLT_HAS_SUBNORM 172bb722a7dSDimitry Andric 173bb722a7dSDimitry Andric #ifndef DBL_HAS_SUBNORM 174bb722a7dSDimitry Andric #define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ 175bb722a7dSDimitry Andric #endif // DBL_HAS_SUBNORM 176bb722a7dSDimitry Andric 177bb722a7dSDimitry Andric #ifndef LDBL_HAS_SUBNORM 178bb722a7dSDimitry Andric #define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ 179bb722a7dSDimitry Andric #endif // LDBL_HAS_SUBNORM 180bb722a7dSDimitry Andric 181bb722a7dSDimitry Andric // TODO: Add FLT16 and FLT128 constants. 182bb722a7dSDimitry Andric 183bb722a7dSDimitry Andric #endif // LLVM_LIBC_MACROS_FLOAT_MACROS_H 184