xref: /freebsd/sys/x86/include/_stdint.h (revision 95ee2897)
18770e9dbSTijl Coosemans /*-
2ebf5747bSPedro F. Giffuni  * SPDX-License-Identifier: BSD-4-Clause
3ebf5747bSPedro F. Giffuni  *
48770e9dbSTijl Coosemans  * Copyright (c) 2001, 2002 Mike Barcroft <mike@FreeBSD.org>
58770e9dbSTijl Coosemans  * Copyright (c) 2001 The NetBSD Foundation, Inc.
68770e9dbSTijl Coosemans  * All rights reserved.
78770e9dbSTijl Coosemans  *
88770e9dbSTijl Coosemans  * This code is derived from software contributed to The NetBSD Foundation
98770e9dbSTijl Coosemans  * by Klaus Klein.
108770e9dbSTijl Coosemans  *
118770e9dbSTijl Coosemans  * Redistribution and use in source and binary forms, with or without
128770e9dbSTijl Coosemans  * modification, are permitted provided that the following conditions
138770e9dbSTijl Coosemans  * are met:
148770e9dbSTijl Coosemans  * 1. Redistributions of source code must retain the above copyright
158770e9dbSTijl Coosemans  *    notice, this list of conditions and the following disclaimer.
168770e9dbSTijl Coosemans  * 2. Redistributions in binary form must reproduce the above copyright
178770e9dbSTijl Coosemans  *    notice, this list of conditions and the following disclaimer in the
188770e9dbSTijl Coosemans  *    documentation and/or other materials provided with the distribution.
198770e9dbSTijl Coosemans  * 3. All advertising materials mentioning features or use of this software
208770e9dbSTijl Coosemans  *    must display the following acknowledgement:
218770e9dbSTijl Coosemans  *        This product includes software developed by the NetBSD
228770e9dbSTijl Coosemans  *        Foundation, Inc. and its contributors.
238770e9dbSTijl Coosemans  * 4. Neither the name of The NetBSD Foundation nor the names of its
248770e9dbSTijl Coosemans  *    contributors may be used to endorse or promote products derived
258770e9dbSTijl Coosemans  *    from this software without specific prior written permission.
268770e9dbSTijl Coosemans  *
278770e9dbSTijl Coosemans  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
288770e9dbSTijl Coosemans  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
298770e9dbSTijl Coosemans  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
308770e9dbSTijl Coosemans  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
318770e9dbSTijl Coosemans  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
328770e9dbSTijl Coosemans  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
338770e9dbSTijl Coosemans  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
348770e9dbSTijl Coosemans  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
358770e9dbSTijl Coosemans  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
368770e9dbSTijl Coosemans  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
378770e9dbSTijl Coosemans  * POSSIBILITY OF SUCH DAMAGE.
388770e9dbSTijl Coosemans  */
398770e9dbSTijl Coosemans 
408770e9dbSTijl Coosemans #ifndef _MACHINE__STDINT_H_
418770e9dbSTijl Coosemans #define	_MACHINE__STDINT_H_
428770e9dbSTijl Coosemans 
438770e9dbSTijl Coosemans #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
448770e9dbSTijl Coosemans 
458770e9dbSTijl Coosemans #define	INT8_C(c)		(c)
468770e9dbSTijl Coosemans #define	INT16_C(c)		(c)
478770e9dbSTijl Coosemans #define	INT32_C(c)		(c)
488770e9dbSTijl Coosemans 
498770e9dbSTijl Coosemans #define	UINT8_C(c)		(c)
508770e9dbSTijl Coosemans #define	UINT16_C(c)		(c)
518770e9dbSTijl Coosemans #define	UINT32_C(c)		(c ## U)
528770e9dbSTijl Coosemans 
538bed40c9SDavid E. O'Brien #ifdef	__LP64__
548770e9dbSTijl Coosemans #define	INT64_C(c)		(c ## L)
558770e9dbSTijl Coosemans #define	UINT64_C(c)		(c ## UL)
568770e9dbSTijl Coosemans #else
578770e9dbSTijl Coosemans #define	INT64_C(c)		(c ## LL)
588770e9dbSTijl Coosemans #define	UINT64_C(c)		(c ## ULL)
598770e9dbSTijl Coosemans #endif
608770e9dbSTijl Coosemans 
618770e9dbSTijl Coosemans #define	INTMAX_C(c)		INT64_C(c)
628770e9dbSTijl Coosemans #define	UINTMAX_C(c)		UINT64_C(c)
638770e9dbSTijl Coosemans 
648770e9dbSTijl Coosemans #endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */
658770e9dbSTijl Coosemans 
668770e9dbSTijl Coosemans #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
678770e9dbSTijl Coosemans 
688770e9dbSTijl Coosemans /*
698770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
708770e9dbSTijl Coosemans  * 7.18.2.1 Limits of exact-width integer types
718770e9dbSTijl Coosemans  */
728770e9dbSTijl Coosemans #define	INT8_MIN	(-0x7f-1)
738770e9dbSTijl Coosemans #define	INT16_MIN	(-0x7fff-1)
748770e9dbSTijl Coosemans #define	INT32_MIN	(-0x7fffffff-1)
758770e9dbSTijl Coosemans 
768770e9dbSTijl Coosemans #define	INT8_MAX	0x7f
778770e9dbSTijl Coosemans #define	INT16_MAX	0x7fff
788770e9dbSTijl Coosemans #define	INT32_MAX	0x7fffffff
798770e9dbSTijl Coosemans 
808770e9dbSTijl Coosemans #define	UINT8_MAX	0xff
818770e9dbSTijl Coosemans #define	UINT16_MAX	0xffff
828770e9dbSTijl Coosemans #define	UINT32_MAX	0xffffffffU
8321d0ce78STijl Coosemans 
848bed40c9SDavid E. O'Brien #ifdef __LP64__
8521d0ce78STijl Coosemans #define	INT64_MIN	(-0x7fffffffffffffff-1)
8621d0ce78STijl Coosemans #define	INT64_MAX	0x7fffffffffffffff
8721d0ce78STijl Coosemans #define	UINT64_MAX	0xffffffffffffffff
8821d0ce78STijl Coosemans #else
8921d0ce78STijl Coosemans #define	INT64_MIN	(-0x7fffffffffffffffLL-1)
9021d0ce78STijl Coosemans #define	INT64_MAX	0x7fffffffffffffffLL
9121d0ce78STijl Coosemans #define	UINT64_MAX	0xffffffffffffffffULL
9221d0ce78STijl Coosemans #endif
938770e9dbSTijl Coosemans 
948770e9dbSTijl Coosemans /*
958770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
968770e9dbSTijl Coosemans  * 7.18.2.2  Limits of minimum-width integer types
978770e9dbSTijl Coosemans  */
988770e9dbSTijl Coosemans /* Minimum values of minimum-width signed integer types. */
998770e9dbSTijl Coosemans #define	INT_LEAST8_MIN	INT8_MIN
1008770e9dbSTijl Coosemans #define	INT_LEAST16_MIN	INT16_MIN
1018770e9dbSTijl Coosemans #define	INT_LEAST32_MIN	INT32_MIN
1028770e9dbSTijl Coosemans #define	INT_LEAST64_MIN	INT64_MIN
1038770e9dbSTijl Coosemans 
1048770e9dbSTijl Coosemans /* Maximum values of minimum-width signed integer types. */
1058770e9dbSTijl Coosemans #define	INT_LEAST8_MAX	INT8_MAX
1068770e9dbSTijl Coosemans #define	INT_LEAST16_MAX	INT16_MAX
1078770e9dbSTijl Coosemans #define	INT_LEAST32_MAX	INT32_MAX
1088770e9dbSTijl Coosemans #define	INT_LEAST64_MAX	INT64_MAX
1098770e9dbSTijl Coosemans 
1108770e9dbSTijl Coosemans /* Maximum values of minimum-width unsigned integer types. */
1118770e9dbSTijl Coosemans #define	UINT_LEAST8_MAX	 UINT8_MAX
1128770e9dbSTijl Coosemans #define	UINT_LEAST16_MAX UINT16_MAX
1138770e9dbSTijl Coosemans #define	UINT_LEAST32_MAX UINT32_MAX
1148770e9dbSTijl Coosemans #define	UINT_LEAST64_MAX UINT64_MAX
1158770e9dbSTijl Coosemans 
1168770e9dbSTijl Coosemans /*
1178770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1188770e9dbSTijl Coosemans  * 7.18.2.3  Limits of fastest minimum-width integer types
1198770e9dbSTijl Coosemans  */
1208770e9dbSTijl Coosemans /* Minimum values of fastest minimum-width signed integer types. */
1218770e9dbSTijl Coosemans #define	INT_FAST8_MIN	INT32_MIN
1228770e9dbSTijl Coosemans #define	INT_FAST16_MIN	INT32_MIN
1238770e9dbSTijl Coosemans #define	INT_FAST32_MIN	INT32_MIN
1248770e9dbSTijl Coosemans #define	INT_FAST64_MIN	INT64_MIN
1258770e9dbSTijl Coosemans 
1268770e9dbSTijl Coosemans /* Maximum values of fastest minimum-width signed integer types. */
1278770e9dbSTijl Coosemans #define	INT_FAST8_MAX	INT32_MAX
1288770e9dbSTijl Coosemans #define	INT_FAST16_MAX	INT32_MAX
1298770e9dbSTijl Coosemans #define	INT_FAST32_MAX	INT32_MAX
1308770e9dbSTijl Coosemans #define	INT_FAST64_MAX	INT64_MAX
1318770e9dbSTijl Coosemans 
1328770e9dbSTijl Coosemans /* Maximum values of fastest minimum-width unsigned integer types. */
1338770e9dbSTijl Coosemans #define	UINT_FAST8_MAX	UINT32_MAX
1348770e9dbSTijl Coosemans #define	UINT_FAST16_MAX	UINT32_MAX
1358770e9dbSTijl Coosemans #define	UINT_FAST32_MAX	UINT32_MAX
1368770e9dbSTijl Coosemans #define	UINT_FAST64_MAX	UINT64_MAX
1378770e9dbSTijl Coosemans 
1388770e9dbSTijl Coosemans /*
1398770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1408770e9dbSTijl Coosemans  * 7.18.2.4  Limits of integer types capable of holding object pointers
1418770e9dbSTijl Coosemans  */
1428bed40c9SDavid E. O'Brien #ifdef	__LP64__
1438770e9dbSTijl Coosemans #define	INTPTR_MIN	INT64_MIN
1448770e9dbSTijl Coosemans #define	INTPTR_MAX	INT64_MAX
1458770e9dbSTijl Coosemans #define	UINTPTR_MAX	UINT64_MAX
1468770e9dbSTijl Coosemans #else
1478770e9dbSTijl Coosemans #define	INTPTR_MIN	INT32_MIN
1488770e9dbSTijl Coosemans #define	INTPTR_MAX	INT32_MAX
1498770e9dbSTijl Coosemans #define	UINTPTR_MAX	UINT32_MAX
1508770e9dbSTijl Coosemans #endif
1518770e9dbSTijl Coosemans 
1528770e9dbSTijl Coosemans /*
1538770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1548770e9dbSTijl Coosemans  * 7.18.2.5  Limits of greatest-width integer types
1558770e9dbSTijl Coosemans  */
1568770e9dbSTijl Coosemans #define	INTMAX_MIN	INT64_MIN
1578770e9dbSTijl Coosemans #define	INTMAX_MAX	INT64_MAX
1588770e9dbSTijl Coosemans #define	UINTMAX_MAX	UINT64_MAX
1598770e9dbSTijl Coosemans 
1608770e9dbSTijl Coosemans /*
1618770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1628770e9dbSTijl Coosemans  * 7.18.3  Limits of other integer types
1638770e9dbSTijl Coosemans  */
1648bed40c9SDavid E. O'Brien #ifdef	__LP64__
1658770e9dbSTijl Coosemans /* Limits of ptrdiff_t. */
1668770e9dbSTijl Coosemans #define	PTRDIFF_MIN	INT64_MIN
1678770e9dbSTijl Coosemans #define	PTRDIFF_MAX	INT64_MAX
1688770e9dbSTijl Coosemans 
1698770e9dbSTijl Coosemans /* Limits of sig_atomic_t. */
170eb232cffSBrooks Davis #define	SIG_ATOMIC_MIN	INT64_MIN
171eb232cffSBrooks Davis #define	SIG_ATOMIC_MAX	INT64_MAX
1728770e9dbSTijl Coosemans 
1738770e9dbSTijl Coosemans /* Limit of size_t. */
1748770e9dbSTijl Coosemans #define	SIZE_MAX	UINT64_MAX
1758770e9dbSTijl Coosemans #else
1768770e9dbSTijl Coosemans #define	PTRDIFF_MIN	INT32_MIN
1778770e9dbSTijl Coosemans #define	PTRDIFF_MAX	INT32_MAX
1788770e9dbSTijl Coosemans #define	SIG_ATOMIC_MIN	INT32_MIN
1798770e9dbSTijl Coosemans #define	SIG_ATOMIC_MAX	INT32_MAX
1808770e9dbSTijl Coosemans #define	SIZE_MAX	UINT32_MAX
1818770e9dbSTijl Coosemans #endif
1828770e9dbSTijl Coosemans 
1838770e9dbSTijl Coosemans /* Limits of wint_t. */
1848770e9dbSTijl Coosemans #define	WINT_MIN	INT32_MIN
1858770e9dbSTijl Coosemans #define	WINT_MAX	INT32_MAX
1868770e9dbSTijl Coosemans 
1878770e9dbSTijl Coosemans #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
1888770e9dbSTijl Coosemans 
1898770e9dbSTijl Coosemans #endif /* !_MACHINE__STDINT_H_ */
190