xref: /freebsd/contrib/llvm-project/libc/include/llvm-libc-macros/float-macros.h (revision 718e5874be0306ea302fd2b8e1d97fc79682abbe)
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