1 //===-- Definition of macros from inttypes.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 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_LIBC_MACROS_INTTYPES_MACROS_H
9 #define LLVM_LIBC_MACROS_INTTYPES_MACROS_H
11 // fprintf/scanf format macros.
12 #define __STDC_VERSION_INTTYPES_H__ 202311L
14 // clang provides these macros, so we don't need to define them.
16 #if __UINTPTR_MAX__ == __UINT64_MAX__
19 #elif __UINTPTR_MAX__ == __UINT32_MAX__
23 // CHERI achitecture for example, has 128-bit pointers that use special "P"
25 #error "Unsupported pointer format"
27 #define __INT8_FMTd__ "hhd"
28 #define __INT16_FMTd__ "hd"
29 #define __INT32_FMTd__ "d"
30 #define __INT64_FMTd__ __PRI64 "d"
31 #define __INT_LEAST8_FMTd__ "hhd"
32 #define __INT_LEAST16_FMTd__ "hd"
33 #define __INT_LEAST32_FMTd__ "d"
34 #define __INT_LEAST64_FMTd__ __PRI64 "d"
35 #define __INT_FAST8_FMTd__ "hhd"
36 #define __INT_FAST16_FMTd__ "hd"
37 #define __INT_FAST32_FMTd__ "d"
38 #define __INT_FAST64_FMTd__ __PRI64 "d"
39 #define __INTMAX_FMTd__ __PRI64 "d"
40 #define __INTPTR_FMTd__ __PRIPTR "d"
42 #define __INT8_FMTi__ "hhi"
43 #define __INT16_FMTi__ "hi"
44 #define __INT32_FMTi__ "i"
45 #define __INT64_FMTi__ __PRI64 "i"
46 #define __INT_LEAST8_FMTi__ "hhi"
47 #define __INT_LEAST16_FMTi__ "hi"
48 #define __INT_LEAST32_FMTi__ "i"
49 #define __INT_LEAST64_FMTi__ __PRI64 "i"
50 #define __INT_FAST8_FMTi__ "hhi"
51 #define __INT_FAST16_FMTi__ "hi"
52 #define __INT_FAST32_FMTi__ "i"
53 #define __INT_FAST64_FMTi__ __PRI64 "i"
54 #define __INTMAX_FMTi__ __PRI64 "i"
55 #define __INTPTR_FMTi__ __PRIPTR "i"
57 #define __UINT8_FMTo__ "hho"
58 #define __UINT16_FMTo__ "ho"
59 #define __UINT32_FMTo__ "o"
60 #define __UINT64_FMTo__ __PRI64 "o"
61 #define __UINT_LEAST8_FMTo__ "hho"
62 #define __UINT_LEAST16_FMTo__ "ho"
63 #define __UINT_LEAST32_FMTo__ "o"
64 #define __UINT_LEAST64_FMTo__ __PRI64 "o"
65 #define __UINT_FAST8_FMTo__ "hho"
66 #define __UINT_FAST16_FMTo__ "ho"
67 #define __UINT_FAST32_FMTo__ "o"
68 #define __UINT_FAST64_FMTo__ __PRI64 "o"
69 #define __UINTMAX_FMTo__ __PRI64 "o"
70 #define __UINTPTR_FMTo__ __PRIPTR "o"
72 #define __UINT8_FMTu__ "hhu"
73 #define __UINT16_FMTu__ "hu"
74 #define __UINT32_FMTu__ "u"
75 #define __UINT64_FMTu__ __PRI64 "u"
76 #define __UINT_LEAST8_FMTu__ "hhu"
77 #define __UINT_LEAST16_FMTu__ "hu"
78 #define __UINT_LEAST32_FMTu__ "u"
79 #define __UINT_LEAST64_FMTu__ __PRI64 "u"
80 #define __UINT_FAST8_FMTu__ "hhu"
81 #define __UINT_FAST16_FMTu__ "hu"
82 #define __UINT_FAST32_FMTu__ "u"
83 #define __UINT_FAST64_FMTu__ __PRI64 "u"
84 #define __UINTMAX_FMTu__ __PRI64 "u"
85 #define __UINTPTR_FMTu__ __PRIPTR "u"
87 #define __UINT8_FMTx__ "hhx"
88 #define __UINT16_FMTx__ "hx"
89 #define __UINT32_FMTx__ "x"
90 #define __UINT64_FMTx__ __PRI64 "x"
91 #define __UINT_LEAST8_FMTx__ "hhx"
92 #define __UINT_LEAST16_FMTx__ "hx"
93 #define __UINT_LEAST32_FMTx__ "x"
94 #define __UINT_LEAST64_FMTx__ __PRI64 "x"
95 #define __UINT_FAST8_FMTx__ "hhx"
96 #define __UINT_FAST16_FMTx__ "hx"
97 #define __UINT_FAST32_FMTx__ "x"
98 #define __UINT_FAST64_FMTx__ __PRI64 "x"
99 #define __UINTMAX_FMTx__ __PRI64 "x"
100 #define __UINTPTR_FMTx__ __PRIPTR "x"
102 #define __UINT8_FMTX__ "hhX"
103 #define __UINT16_FMTX__ "hX"
104 #define __UINT32_FMTX__ "X"
105 #define __UINT64_FMTX__ __PRI64 "X"
106 #define __UINT_LEAST8_FMTX__ "hhX"
107 #define __UINT_LEAST16_FMTX__ "hX"
108 #define __UINT_LEAST32_FMTX__ "X"
109 #define __UINT_LEAST64_FMTX__ __PRI64 "X"
110 #define __UINT_FAST8_FMTX__ "hhX"
111 #define __UINT_FAST16_FMTX__ "hX"
112 #define __UINT_FAST32_FMTX__ "X"
113 #define __UINT_FAST64_FMTX__ __PRI64 "X"
114 #define __UINTMAX_FMTX__ __PRI64 "X"
115 #define __UINTPTR_FMTX__ __PRIPTR "X"
118 // only recent clang provides these macros, so we need to check if they are
120 #ifndef __UINT8_FMTb__
121 #define __UINT8_FMTb__ "hhb"
123 #ifndef __UINT16_FMTb__
124 #define __UINT16_FMTb__ "hb"
126 #ifndef __UINT32_FMTb__
127 #define __UINT32_FMTb__ "b"
129 #ifndef __UINT64_FMTb__
130 #define __UINT64_FMTb__ __PRI64 "b"
132 #ifndef __UINT_LEAST8_FMTb__
133 #define __UINT_LEAST8_FMTb__ "hhb"
135 #ifndef __UINT_LEAST16_FMTb__
136 #define __UINT_LEAST16_FMTb__ "hb"
138 #ifndef __UINT_LEAST32_FMTb__
139 #define __UINT_LEAST32_FMTb__ "b"
141 #ifndef __UINT_LEAST64_FMTb__
142 #define __UINT_LEAST64_FMTb__ __PRI64 "b"
144 #ifndef __UINT_FAST8_FMTb__
145 #define __UINT_FAST8_FMTb__ "hhb"
147 #ifndef __UINT_FAST16_FMTb__
148 #define __UINT_FAST16_FMTb__ "hb"
150 #ifndef __UINT_FAST32_FMTb__
151 #define __UINT_FAST32_FMTb__ "b"
153 #ifndef __UINT_FAST64_FMTb__
154 #define __UINT_FAST64_FMTb__ __PRI64 "b"
156 #ifndef __UINTMAX_FMTb__
157 #define __UINTMAX_FMTb__ __PRI64 "b"
159 #ifndef __UINTPTR_FMTb__
160 #define __UINTPTR_FMTb__ __PRIPTR "b"
163 #ifndef __UINT8_FMTB__
164 #define __UINT8_FMTB__ "hhB"
166 #ifndef __UINT16_FMTB__
167 #define __UINT16_FMTB__ "hB"
169 #ifndef __UINT32_FMTB__
170 #define __UINT32_FMTB__ "B"
172 #ifndef __UINT64_FMTB__
173 #define __UINT64_FMTB__ __PRI64 "B"
175 #ifndef __UINT_LEAST8_FMTB__
176 #define __UINT_LEAST8_FMTB__ "hhB"
178 #ifndef __UINT_LEAST16_FMTB__
179 #define __UINT_LEAST16_FMTB__ "hB"
181 #ifndef __UINT_LEAST32_FMTB__
182 #define __UINT_LEAST32_FMTB__ "B"
184 #ifndef __UINT_LEAST64_FMTB__
185 #define __UINT_LEAST64_FMTB__ __PRI64 "B"
187 #ifndef __UINT_FAST8_FMTB__
188 #define __UINT_FAST8_FMTB__ "hhB"
190 #ifndef __UINT_FAST16_FMTB__
191 #define __UINT_FAST16_FMTB__ "hB"
193 #ifndef __UINT_FAST32_FMTB__
194 #define __UINT_FAST32_FMTB__ "B"
196 #ifndef __UINT_FAST64_FMTB__
197 #define __UINT_FAST64_FMTB__ __PRI64 "B"
199 #ifndef __UINTMAX_FMTB__
200 #define __UINTMAX_FMTB__ __PRI64 "B"
202 #ifndef __UINTPTR_FMTB__
203 #define __UINTPTR_FMTB__ __PRIPTR "B"
206 // The fprintf() macros for signed integers.
207 #define PRId8 __INT8_FMTd__
208 #define PRId16 __INT16_FMTd__
209 #define PRId32 __INT32_FMTd__
210 #define PRId64 __INT64_FMTd__
211 #define PRIdLEAST8 __INT_LEAST8_FMTd__
212 #define PRIdLEAST16 __INT_LEAST16_FMTd__
213 #define PRIdLEAST32 __INT_LEAST32_FMTd__
214 #define PRIdLEAST64 __INT_LEAST64_FMTd__
215 #define PRIdFAST8 __INT_FAST8_FMTd__
216 #define PRIdFAST16 __INT_FAST16_FMTd__
217 #define PRIdFAST32 __INT_FAST32_FMTd__
218 #define PRIdFAST64 __INT_FAST64_FMTd__
219 #define PRIdMAX __INTMAX_FMTd__
220 #define PRIdPTR __INTPTR_FMTd__
222 #define PRIi8 __INT8_FMTi__
223 #define PRIi16 __INT16_FMTi__
224 #define PRIi32 __INT32_FMTi__
225 #define PRIi64 __INT64_FMTi__
226 #define PRIiLEAST8 __INT_LEAST8_FMTi__
227 #define PRIiLEAST16 __INT_LEAST16_FMTi__
228 #define PRIiLEAST32 __INT_LEAST32_FMTi__
229 #define PRIiLEAST64 __INT_LEAST64_FMTi__
230 #define PRIiFAST8 __INT_FAST8_FMTi__
231 #define PRIiFAST16 __INT_FAST16_FMTi__
232 #define PRIiFAST32 __INT_FAST32_FMTi__
233 #define PRIiFAST64 __INT_FAST64_FMTi__
234 #define PRIiMAX __INTMAX_FMTi__
235 #define PRIiPTR __INTPTR_FMTi__
237 // The fprintf() macros for unsigned integers.
238 #define PRIo8 __UINT8_FMTo__
239 #define PRIo16 __UINT16_FMTo__
240 #define PRIo32 __UINT32_FMTo__
241 #define PRIo64 __UINT64_FMTo__
242 #define PRIoLEAST8 __UINT_LEAST8_FMTo__
243 #define PRIoLEAST16 __UINT_LEAST16_FMTo__
244 #define PRIoLEAST32 __UINT_LEAST32_FMTo__
245 #define PRIoLEAST64 __UINT_LEAST64_FMTo__
246 #define PRIoFAST8 __UINT_FAST8_FMTo__
247 #define PRIoFAST16 __UINT_FAST16_FMTo__
248 #define PRIoFAST32 __UINT_FAST32_FMTo__
249 #define PRIoFAST64 __UINT_FAST64_FMTo__
250 #define PRIoMAX __UINTMAX_FMTo__
251 #define PRIoPTR __UINTPTR_FMTo__
253 #define PRIu8 __UINT8_FMTu__
254 #define PRIu16 __UINT16_FMTu__
255 #define PRIu32 __UINT32_FMTu__
256 #define PRIu64 __UINT64_FMTu__
257 #define PRIuLEAST8 __UINT_LEAST8_FMTu__
258 #define PRIuLEAST16 __UINT_LEAST16_FMTu__
259 #define PRIuLEAST32 __UINT_LEAST32_FMTu__
260 #define PRIuLEAST64 __UINT_LEAST64_FMTu__
261 #define PRIuFAST8 __UINT_FAST8_FMTu__
262 #define PRIuFAST16 __UINT_FAST16_FMTu__
263 #define PRIuFAST32 __UINT_FAST32_FMTu__
264 #define PRIuFAST64 __UINT_FAST64_FMTu__
265 #define PRIuMAX __UINTMAX_FMTu__
266 #define PRIuPTR __UINTPTR_FMTu__
268 #define PRIx8 __UINT8_FMTx__
269 #define PRIx16 __UINT16_FMTx__
270 #define PRIx32 __UINT32_FMTx__
271 #define PRIx64 __UINT64_FMTx__
272 #define PRIxLEAST8 __UINT_LEAST8_FMTx__
273 #define PRIxLEAST16 __UINT_LEAST16_FMTx__
274 #define PRIxLEAST32 __UINT_LEAST32_FMTx__
275 #define PRIxLEAST64 __UINT_LEAST64_FMTx__
276 #define PRIxFAST8 __UINT_FAST8_FMTx__
277 #define PRIxFAST16 __UINT_FAST16_FMTx__
278 #define PRIxFAST32 __UINT_FAST32_FMTx__
279 #define PRIxFAST64 __UINT_FAST64_FMTx__
280 #define PRIxMAX __UINTMAX_FMTx__
281 #define PRIxPTR __UINTPTR_FMTx__
283 #define PRIX8 __UINT8_FMTX__
284 #define PRIX16 __UINT16_FMTX__
285 #define PRIX32 __UINT32_FMTX__
286 #define PRIX64 __UINT64_FMTX__
287 #define PRIXLEAST8 __UINT_LEAST8_FMTX__
288 #define PRIXLEAST16 __UINT_LEAST16_FMTX__
289 #define PRIXLEAST32 __UINT_LEAST32_FMTX__
290 #define PRIXLEAST64 __UINT_LEAST64_FMTX__
291 #define PRIXFAST8 __UINT_FAST8_FMTX__
292 #define PRIXFAST16 __UINT_FAST16_FMTX__
293 #define PRIXFAST32 __UINT_FAST32_FMTX__
294 #define PRIXFAST64 __UINT_FAST64_FMTX__
295 #define PRIXMAX __UINTMAX_FMTX__
296 #define PRIXPTR __UINTPTR_FMTX__
298 #define PRIb8 __UINT8_FMTb__
299 #define PRIb16 __UINT16_FMTb__
300 #define PRIb32 __UINT32_FMTb__
301 #define PRIb64 __UINT64_FMTb__
302 #define PRIbLEAST8 __UINT_LEAST8_FMTb__
303 #define PRIbLEAST16 __UINT_LEAST16_FMTb__
304 #define PRIbLEAST32 __UINT_LEAST32_FMTb__
305 #define PRIbLEAST64 __UINT_LEAST64_FMTb__
306 #define PRIbFAST8 __UINT_FAST8_FMTb__
307 #define PRIbFAST16 __UINT_FAST16_FMTb__
308 #define PRIbFAST32 __UINT_FAST32_FMTb__
309 #define PRIbFAST64 __UINT_FAST64_FMTb__
310 #define PRIbMAX __UINTMAX_FMTb__
311 #define PRIbPTR __UINTPTR_FMTb__
313 #define PRIB8 __UINT8_FMTB__
314 #define PRIB16 __UINT16_FMTB__
315 #define PRIB32 __UINT32_FMTB__
316 #define PRIB64 __UINT64_FMTB__
317 #define PRIBLEAST8 __UINT_LEAST8_FMTB__
318 #define PRIBLEAST16 __UINT_LEAST16_FMTB__
319 #define PRIBLEAST32 __UINT_LEAST32_FMTB__
320 #define PRIBLEAST64 __UINT_LEAST64_FMTB__
321 #define PRIBFAST8 __UINT_FAST8_FMTB__
322 #define PRIBFAST16 __UINT_FAST16_FMTB__
323 #define PRIBFAST32 __UINT_FAST32_FMTB__
324 #define PRIBFAST64 __UINT_FAST64_FMTB__
325 #define PRIBMAX __UINTMAX_FMTB__
326 #define PRIBPTR __UINTPTR_FMTB__
328 // The fscanf() macros for signed integers.
329 #define SCNd8 __INT8_FMTd__
330 #define SCNd16 __INT16_FMTd__
331 #define SCNd32 __INT32_FMTd__
332 #define SCNd64 __INT64_FMTd__
333 #define SCNdLEAST8 __INT_LEAST8_FMTd__
334 #define SCNdLEAST16 __INT_LEAST16_FMTd__
335 #define SCNdLEAST32 __INT_LEAST32_FMTd__
336 #define SCNdLEAST64 __INT_LEAST64_FMTd__
337 #define SCNdFAST8 __INT_FAST8_FMTd__
338 #define SCNdFAST16 __INT_FAST16_FMTd__
339 #define SCNdFAST32 __INT_FAST32_FMTd__
340 #define SCNdFAST64 __INT_FAST64_FMTd__
341 #define SCNdMAX __INTMAX_FMTd__
342 #define SCNdPTR __INTPTR_FMTd__
344 #define SCNi8 __INT8_FMTi__
345 #define SCNi16 __INT16_FMTi__
346 #define SCNi32 __INT32_FMTi__
347 #define SCNi64 __INT64_FMTi__
348 #define SCNiLEAST8 __INT_LEAST8_FMTi__
349 #define SCNiLEAST16 __INT_LEAST16_FMTi__
350 #define SCNiLEAST32 __INT_LEAST32_FMTi__
351 #define SCNiLEAST64 __INT_LEAST64_FMTi__
352 #define SCNiFAST8 __INT_FAST8_FMTi__
353 #define SCNiFAST16 __INT_FAST16_FMTi__
354 #define SCNiFAST32 __INT_FAST32_FMTi__
355 #define SCNiFAST64 __INT_FAST64_FMTi__
356 #define SCNiMAX __INTMAX_FMTi__
357 #define SCNiPTR __INTPTR_FMTi__
359 // The fscanf() macros for unsigned integers.
360 #define SCNo8 __UINT8_FMTo__
361 #define SCNo16 __UINT16_FMTo__
362 #define SCNo32 __UINT32_FMTo__
363 #define SCNo64 __UINT64_FMTo__
364 #define SCNoLEAST8 __UINT_LEAST8_FMTo__
365 #define SCNoLEAST16 __UINT_LEAST16_FMTo__
366 #define SCNoLEAST32 __UINT_LEAST32_FMTo__
367 #define SCNoLEAST64 __UINT_LEAST64_FMTo__
368 #define SCNoFAST8 __UINT_FAST8_FMTo__
369 #define SCNoFAST16 __UINT_FAST16_FMTo__
370 #define SCNoFAST32 __UINT_FAST32_FMTo__
371 #define SCNoFAST64 __UINT_FAST64_FMTo__
372 #define SCNoMAX __UINTMAX_FMTo__
373 #define SCNoPTR __UINTPTR_FMTo__
375 #define SCNu8 __UINT8_FMTu__
376 #define SCNu16 __UINT16_FMTu__
377 #define SCNu32 __UINT32_FMTu__
378 #define SCNu64 __UINT64_FMTu__
379 #define SCNuLEAST8 __UINT_LEAST8_FMTu__
380 #define SCNuLEAST16 __UINT_LEAST16_FMTu__
381 #define SCNuLEAST32 __UINT_LEAST32_FMTu__
382 #define SCNuLEAST64 __UINT_LEAST64_FMTu__
383 #define SCNuFAST8 __UINT_FAST8_FMTu__
384 #define SCNuFAST16 __UINT_FAST16_FMTu__
385 #define SCNuFAST32 __UINT_FAST32_FMTu__
386 #define SCNuFAST64 __UINT_FAST64_FMTu__
387 #define SCNuMAX __UINTMAX_FMTu__
388 #define SCNuPTR __UINTPTR_FMTu__
390 #define SCNx8 __UINT8_FMTx__
391 #define SCNx16 __UINT16_FMTx__
392 #define SCNx32 __UINT32_FMTx__
393 #define SCNx64 __UINT64_FMTx__
394 #define SCNxLEAST8 __UINT_LEAST8_FMTx__
395 #define SCNxLEAST16 __UINT_LEAST16_FMTx__
396 #define SCNxLEAST32 __UINT_LEAST32_FMTx__
397 #define SCNxLEAST64 __UINT_LEAST64_FMTx__
398 #define SCNxFAST8 __UINT_FAST8_FMTx__
399 #define SCNxFAST16 __UINT_FAST16_FMTx__
400 #define SCNxFAST32 __UINT_FAST32_FMTx__
401 #define SCNxFAST64 __UINT_FAST64_FMTx__
402 #define SCNxMAX __UINTMAX_FMTx__
403 #define SCNxPTR __UINTPTR_FMTx__
405 #define SCNb8 __UINT8_FMTb__
406 #define SCNb16 __UINT16_FMTb__
407 #define SCNb32 __UINT32_FMTb__
408 #define SCNb64 __UINT64_FMTb__
409 #define SCNbLEAST8 __UINT_LEAST8_FMTb__
410 #define SCNbLEAST16 __UINT_LEAST16_FMTb__
411 #define SCNbLEAST32 __UINT_LEAST32_FMTb__
412 #define SCNbLEAST64 __UINT_LEAST64_FMTb__
413 #define SCNbFAST8 __UINT_FAST8_FMTb__
414 #define SCNbFAST16 __UINT_FAST16_FMTb__
415 #define SCNbFAST32 __UINT_FAST32_FMTb__
416 #define SCNbFAST64 __UINT_FAST64_FMTb__
417 #define SCNbMAX __UINTMAX_FMTb__
418 #define SCNbPTR __UINTPTR_FMTb__
420 #endif // LLVM_LIBC_MACROS_INTTYPES_MACROS_H