1 //===-- Definitions from stdfix.h -----------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_LIBC_MACROS_STDFIX_MACROS_H
10 #define LLVM_LIBC_MACROS_STDFIX_MACROS_H
13 // _Fract and _Accum types are available
14 #define LIBC_COMPILER_HAS_FIXED_POINT
15 #endif // __FRACT_FBIT__
17 #ifdef LIBC_COMPILER_HAS_FIXED_POINT
23 // Default values: from ISO/IEC TR 18037:2008 standard - Annex A.3 - Typical
26 #ifdef __SFRACT_FBIT__
27 #define SFRACT_FBIT __SFRACT_FBIT__
33 #define SFRACT_MIN __SFRACT_MIN__
35 #define SFRACT_MIN (-0.5HR - 0.5HR)
39 #define SFRACT_MAX __SFRACT_MAX__
41 #define SFRACT_MAX 0x1.FCp-1HR
44 #ifdef __SFRACT_EPSILON__
45 #define SFRACT_EPSILON __SFRACT_EPSILON__
47 #define SFRACT_EPSILON 0x1.0p-7HR
48 #endif // SFRACT_EPSILON
50 #ifdef __USFRACT_FBIT__
51 #define USFRACT_FBIT __USFRACT_FBIT__
53 #define USFRACT_FBIT 8
54 #endif // USFRACT_FBIT
56 #define USFRACT_MIN 0.0UHR
58 #ifdef __USFRACT_MAX__
59 #define USFRACT_MAX __USFRACT_MAX__
61 #define USFRACT_MAX 0x1.FEp-1UHR
64 #ifdef __USFRACT_EPSILON__
65 #define USFRACT_EPSILON __USFRACT_EPSILON__
67 #define USFRACT_EPSILON 0x1.0p-8UHR
68 #endif // USFRACT_EPSILON
71 #define FRACT_FBIT __FRACT_FBIT__
77 #define FRACT_MIN __FRACT_MIN__
79 #define FRACT_MIN (-0.5R - 0.5R)
83 #define FRACT_MAX __FRACT_MAX__
85 #define FRACT_MAX 0x1.FFFCp-1R
88 #ifdef __FRACT_EPSILON__
89 #define FRACT_EPSILON __FRACT_EPSILON__
91 #define FRACT_EPSILON 0x1.0p-15R
92 #endif // FRACT_EPSILON
94 #ifdef __UFRACT_FBIT__
95 #define UFRACT_FBIT __UFRACT_FBIT__
97 #define UFRACT_FBIT 16
100 #define UFRACT_MIN 0.0UR
102 #ifdef __UFRACT_MAX__
103 #define UFRACT_MAX __UFRACT_MAX__
105 #define UFRACT_MAX 0x1.FFFEp-1UR
108 #ifdef __UFRACT_EPSILON__
109 #define UFRACT_EPSILON __UFRACT_EPSILON__
111 #define UFRACT_EPSILON 0x1.0p-16UR
112 #endif // UFRACT_EPSILON
114 #ifdef __LFRACT_FBIT__
115 #define LFRACT_FBIT __LFRACT_FBIT__
117 #define LFRACT_FBIT 31
118 #endif // LFRACT_FBIT
120 #ifdef __LFRACT_MIN__
121 #define LFRACT_MIN __LFRACT_MIN__
123 #define LFRACT_MIN (-0.5LR - 0.5LR)
126 #ifdef __LFRACT_MAX__
127 #define LFRACT_MAX __LFRACT_MAX__
129 #define LFRACT_MAX 0x1.FFFFFFFCp-1LR
132 #ifdef __LFRACT_EPSILON__
133 #define LFRACT_EPSILON __LFRACT_EPSILON__
135 #define LFRACT_EPSILON 0x1.0p-31LR
136 #endif // LFRACT_EPSILON
138 #ifdef __ULFRACT_FBIT__
139 #define ULFRACT_FBIT __ULFRACT_FBIT__
141 #define ULFRACT_FBIT 32
142 #endif // ULFRACT_FBIT
144 #define ULFRACT_MIN 0.0ULR
146 #ifdef __ULFRACT_MAX__
147 #define ULFRACT_MAX __ULFRACT_MAX__
149 #define ULFRACT_MAX 0x1.FFFFFFFEp-1ULR
150 #endif // ULFRACT_MAX
152 #ifdef __ULFRACT_EPSILON__
153 #define ULFRACT_EPSILON __ULFRACT_EPSILON__
155 #define ULFRACT_EPSILON 0x1.0p-32ULR
156 #endif // ULFRACT_EPSILON
158 #ifdef __SACCUM_FBIT__
159 #define SACCUM_FBIT __SACCUM_FBIT__
161 #define SACCUM_FBIT 7
162 #endif // SACCUM_FBIT
164 #ifdef __SACCUM_IBIT__
165 #define SACCUM_IBIT __SACCUM_IBIT__
167 #define SACCUM_IBIT 8
168 #endif // SACCUM_IBIT
170 #ifdef __SACCUM_MIN__
171 #define SACCUM_MIN __SACCUM_MIN__
173 #define SACCUM_MIN (-0x1.0p+7HK - 0x1.0p+7HK)
176 #ifdef __SACCUM_MAX__
177 #define SACCUM_MAX __SACCUM_MAX__
179 #define SACCUM_MAX 0x1.FFFCp+7HK
182 #ifdef __SACCUM_EPSILON__
183 #define SACCUM_EPSILON __SACCUM_EPSILON__
185 #define SACCUM_EPSILON 0x1.0p-7HK
186 #endif // SACCUM_EPSILON
188 #ifdef __USACCUM_FBIT__
189 #define USACCUM_FBIT __USACCUM_FBIT__
191 #define USACCUM_FBIT 8
192 #endif // USACCUM_FBIT
194 #ifdef __USACCUM_IBIT__
195 #define USACCUM_IBIT __USACCUM_IBIT__
197 #define USACCUM_IBIT 8
198 #endif // USACCUM_IBIT
200 #define USACCUM_MIN 0.0UHK
202 #ifdef __USACCUM_MAX__
203 #define USACCUM_MAX __USACCUM_MAX__
205 #define USACCUM_MAX 0x1.FFFEp+7UHK
206 #endif // USACCUM_MAX
208 #ifdef __USACCUM_EPSILON__
209 #define USACCUM_EPSILON __USACCUM_EPSILON__
211 #define USACCUM_EPSILON 0x1.0p-8UHK
212 #endif // USACCUM_EPSILON
214 #ifdef __ACCUM_FBIT__
215 #define ACCUM_FBIT __ACCUM_FBIT__
217 #define ACCUM_FBIT 15
220 #ifdef __ACCUM_IBIT__
221 #define ACCUM_IBIT __ACCUM_IBIT__
223 #define ACCUM_IBIT 16
227 #define ACCUM_MIN __ACCUM_MIN__
229 #define ACCUM_MIN (-0x1.0p+15K - 0x1.0p+15K)
233 #define ACCUM_MAX __ACCUM_MAX__
235 #define ACCUM_MAX 0x1.FFFFFFFCp+15K
238 #ifdef __ACCUM_EPSILON__
239 #define ACCUM_EPSILON __ACCUM_EPSILON__
241 #define ACCUM_EPSILON 0x1.0p-15K
242 #endif // ACCUM_EPSILON
244 #ifdef __UACCUM_FBIT__
245 #define UACCUM_FBIT __UACCUM_FBIT__
247 #define UACCUM_FBIT 16
248 #endif // UACCUM_FBIT
250 #ifdef __UACCUM_IBIT__
251 #define UACCUM_IBIT __UACCUM_IBIT__
253 #define UACCUM_IBIT 16
254 #endif // UACCUM_IBIT
256 #define UACCUM_MIN 0.0UK
258 #ifdef __UACCUM_MAX__
259 #define UACCUM_MAX __UACCUM_MAX__
261 #define UACCUM_MAX 0x1.FFFFFFFEp+15UK
264 #ifdef __UACCUM_EPSILON__
265 #define UACCUM_EPSILON __UACCUM_EPSILON__
267 #define UACCUM_EPSILON 0x1.0p-16UK
268 #endif // UACCUM_EPSILON
270 #ifdef __LACCUM_FBIT__
271 #define LACCUM_FBIT __LACCUM_FBIT__
273 #define LACCUM_FBIT 31
274 #endif // LACCUM_FBIT
276 #ifdef __LACCUM_IBIT__
277 #define LACCUM_IBIT __LACCUM_IBIT__
279 #define LACCUM_IBIT 32
280 #endif // LACCUM_IBIT
282 #ifdef __LACCUM_MIN__
283 #define LACCUM_MIN __LACCUM_MIN__
285 #define LACCUM_MIN (-0x1.0p+31LK - 0x1.0p+31LK)
288 #ifdef __LACCUM_MAX__
289 #define LACCUM_MAX __LACCUM_MAX__
291 #define LACCUM_MAX 0x1.FFFFFFFFFFFFFFFCp+31LK
294 #ifdef __LACCUM_EPSILON__
295 #define LACCUM_EPSILON __LACCUM_EPSILON__
297 #define LACCUM_EPSILON 0x1.0p-31LK
298 #endif // LACCUM_EPSILON
300 #ifdef __ULACCUM_FBIT__
301 #define ULACCUM_FBIT __ULACCUM_FBIT__
303 #define ULACCUM_FBIT 32
304 #endif // ULACCUM_FBIT
306 #ifdef __ULACCUM_IBIT__
307 #define ULACCUM_IBIT __ULACCUM_IBIT__
309 #define ULACCUM_IBIT 32
310 #endif // ULACCUM_IBIT
312 #define ULACCUM_MIN 0.0ULK
314 #ifdef __ULACCUM_MAX__
315 #define ULACCUM_MAX __ULACCUM_MAX__
317 #define ULACCUM_MAX 0x1.FFFFFFFFFFFFFFFEp+31ULK
318 #endif // ULACCUM_MAX
320 #ifdef __ULACCUM_EPSILON__
321 #define ULACCUM_EPSILON __ULACCUM_EPSILON__
323 #define ULACCUM_EPSILON 0x1.0p-32ULK
324 #endif // ULACCUM_EPSILON
326 #endif // LIBC_COMPILER_HAS_FIXED_POINT
328 #endif // LLVM_LIBC_MACROS_STDFIX_MACROS_H