xref: /freebsd/sys/x86/include/_stdint.h (revision eb232cffc92d3bb9776cf0ce0c9a9c30913f8cfa)
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  * $FreeBSD$
408770e9dbSTijl Coosemans  */
418770e9dbSTijl Coosemans 
428770e9dbSTijl Coosemans #ifndef _MACHINE__STDINT_H_
438770e9dbSTijl Coosemans #define	_MACHINE__STDINT_H_
448770e9dbSTijl Coosemans 
458770e9dbSTijl Coosemans #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
468770e9dbSTijl Coosemans 
478770e9dbSTijl Coosemans #define	INT8_C(c)		(c)
488770e9dbSTijl Coosemans #define	INT16_C(c)		(c)
498770e9dbSTijl Coosemans #define	INT32_C(c)		(c)
508770e9dbSTijl Coosemans 
518770e9dbSTijl Coosemans #define	UINT8_C(c)		(c)
528770e9dbSTijl Coosemans #define	UINT16_C(c)		(c)
538770e9dbSTijl Coosemans #define	UINT32_C(c)		(c ## U)
548770e9dbSTijl Coosemans 
558bed40c9SDavid E. O'Brien #ifdef	__LP64__
568770e9dbSTijl Coosemans #define	INT64_C(c)		(c ## L)
578770e9dbSTijl Coosemans #define	UINT64_C(c)		(c ## UL)
588770e9dbSTijl Coosemans #else
598770e9dbSTijl Coosemans #define	INT64_C(c)		(c ## LL)
608770e9dbSTijl Coosemans #define	UINT64_C(c)		(c ## ULL)
618770e9dbSTijl Coosemans #endif
628770e9dbSTijl Coosemans 
638770e9dbSTijl Coosemans #define	INTMAX_C(c)		INT64_C(c)
648770e9dbSTijl Coosemans #define	UINTMAX_C(c)		UINT64_C(c)
658770e9dbSTijl Coosemans 
668770e9dbSTijl Coosemans #endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */
678770e9dbSTijl Coosemans 
688770e9dbSTijl Coosemans #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
698770e9dbSTijl Coosemans 
708770e9dbSTijl Coosemans /*
718770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
728770e9dbSTijl Coosemans  * 7.18.2.1 Limits of exact-width integer types
738770e9dbSTijl Coosemans  */
748770e9dbSTijl Coosemans #define	INT8_MIN	(-0x7f-1)
758770e9dbSTijl Coosemans #define	INT16_MIN	(-0x7fff-1)
768770e9dbSTijl Coosemans #define	INT32_MIN	(-0x7fffffff-1)
778770e9dbSTijl Coosemans 
788770e9dbSTijl Coosemans #define	INT8_MAX	0x7f
798770e9dbSTijl Coosemans #define	INT16_MAX	0x7fff
808770e9dbSTijl Coosemans #define	INT32_MAX	0x7fffffff
818770e9dbSTijl Coosemans 
828770e9dbSTijl Coosemans #define	UINT8_MAX	0xff
838770e9dbSTijl Coosemans #define	UINT16_MAX	0xffff
848770e9dbSTijl Coosemans #define	UINT32_MAX	0xffffffffU
8521d0ce78STijl Coosemans 
868bed40c9SDavid E. O'Brien #ifdef __LP64__
8721d0ce78STijl Coosemans #define	INT64_MIN	(-0x7fffffffffffffff-1)
8821d0ce78STijl Coosemans #define	INT64_MAX	0x7fffffffffffffff
8921d0ce78STijl Coosemans #define	UINT64_MAX	0xffffffffffffffff
9021d0ce78STijl Coosemans #else
9121d0ce78STijl Coosemans #define	INT64_MIN	(-0x7fffffffffffffffLL-1)
9221d0ce78STijl Coosemans #define	INT64_MAX	0x7fffffffffffffffLL
9321d0ce78STijl Coosemans #define	UINT64_MAX	0xffffffffffffffffULL
9421d0ce78STijl Coosemans #endif
958770e9dbSTijl Coosemans 
968770e9dbSTijl Coosemans /*
978770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
988770e9dbSTijl Coosemans  * 7.18.2.2  Limits of minimum-width integer types
998770e9dbSTijl Coosemans  */
1008770e9dbSTijl Coosemans /* Minimum values of minimum-width signed integer types. */
1018770e9dbSTijl Coosemans #define	INT_LEAST8_MIN	INT8_MIN
1028770e9dbSTijl Coosemans #define	INT_LEAST16_MIN	INT16_MIN
1038770e9dbSTijl Coosemans #define	INT_LEAST32_MIN	INT32_MIN
1048770e9dbSTijl Coosemans #define	INT_LEAST64_MIN	INT64_MIN
1058770e9dbSTijl Coosemans 
1068770e9dbSTijl Coosemans /* Maximum values of minimum-width signed integer types. */
1078770e9dbSTijl Coosemans #define	INT_LEAST8_MAX	INT8_MAX
1088770e9dbSTijl Coosemans #define	INT_LEAST16_MAX	INT16_MAX
1098770e9dbSTijl Coosemans #define	INT_LEAST32_MAX	INT32_MAX
1108770e9dbSTijl Coosemans #define	INT_LEAST64_MAX	INT64_MAX
1118770e9dbSTijl Coosemans 
1128770e9dbSTijl Coosemans /* Maximum values of minimum-width unsigned integer types. */
1138770e9dbSTijl Coosemans #define	UINT_LEAST8_MAX	 UINT8_MAX
1148770e9dbSTijl Coosemans #define	UINT_LEAST16_MAX UINT16_MAX
1158770e9dbSTijl Coosemans #define	UINT_LEAST32_MAX UINT32_MAX
1168770e9dbSTijl Coosemans #define	UINT_LEAST64_MAX UINT64_MAX
1178770e9dbSTijl Coosemans 
1188770e9dbSTijl Coosemans /*
1198770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1208770e9dbSTijl Coosemans  * 7.18.2.3  Limits of fastest minimum-width integer types
1218770e9dbSTijl Coosemans  */
1228770e9dbSTijl Coosemans /* Minimum values of fastest minimum-width signed integer types. */
1238770e9dbSTijl Coosemans #define	INT_FAST8_MIN	INT32_MIN
1248770e9dbSTijl Coosemans #define	INT_FAST16_MIN	INT32_MIN
1258770e9dbSTijl Coosemans #define	INT_FAST32_MIN	INT32_MIN
1268770e9dbSTijl Coosemans #define	INT_FAST64_MIN	INT64_MIN
1278770e9dbSTijl Coosemans 
1288770e9dbSTijl Coosemans /* Maximum values of fastest minimum-width signed integer types. */
1298770e9dbSTijl Coosemans #define	INT_FAST8_MAX	INT32_MAX
1308770e9dbSTijl Coosemans #define	INT_FAST16_MAX	INT32_MAX
1318770e9dbSTijl Coosemans #define	INT_FAST32_MAX	INT32_MAX
1328770e9dbSTijl Coosemans #define	INT_FAST64_MAX	INT64_MAX
1338770e9dbSTijl Coosemans 
1348770e9dbSTijl Coosemans /* Maximum values of fastest minimum-width unsigned integer types. */
1358770e9dbSTijl Coosemans #define	UINT_FAST8_MAX	UINT32_MAX
1368770e9dbSTijl Coosemans #define	UINT_FAST16_MAX	UINT32_MAX
1378770e9dbSTijl Coosemans #define	UINT_FAST32_MAX	UINT32_MAX
1388770e9dbSTijl Coosemans #define	UINT_FAST64_MAX	UINT64_MAX
1398770e9dbSTijl Coosemans 
1408770e9dbSTijl Coosemans /*
1418770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1428770e9dbSTijl Coosemans  * 7.18.2.4  Limits of integer types capable of holding object pointers
1438770e9dbSTijl Coosemans  */
1448bed40c9SDavid E. O'Brien #ifdef	__LP64__
1458770e9dbSTijl Coosemans #define	INTPTR_MIN	INT64_MIN
1468770e9dbSTijl Coosemans #define	INTPTR_MAX	INT64_MAX
1478770e9dbSTijl Coosemans #define	UINTPTR_MAX	UINT64_MAX
1488770e9dbSTijl Coosemans #else
1498770e9dbSTijl Coosemans #define	INTPTR_MIN	INT32_MIN
1508770e9dbSTijl Coosemans #define	INTPTR_MAX	INT32_MAX
1518770e9dbSTijl Coosemans #define	UINTPTR_MAX	UINT32_MAX
1528770e9dbSTijl Coosemans #endif
1538770e9dbSTijl Coosemans 
1548770e9dbSTijl Coosemans /*
1558770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1568770e9dbSTijl Coosemans  * 7.18.2.5  Limits of greatest-width integer types
1578770e9dbSTijl Coosemans  */
1588770e9dbSTijl Coosemans #define	INTMAX_MIN	INT64_MIN
1598770e9dbSTijl Coosemans #define	INTMAX_MAX	INT64_MAX
1608770e9dbSTijl Coosemans #define	UINTMAX_MAX	UINT64_MAX
1618770e9dbSTijl Coosemans 
1628770e9dbSTijl Coosemans /*
1638770e9dbSTijl Coosemans  * ISO/IEC 9899:1999
1648770e9dbSTijl Coosemans  * 7.18.3  Limits of other integer types
1658770e9dbSTijl Coosemans  */
1668bed40c9SDavid E. O'Brien #ifdef	__LP64__
1678770e9dbSTijl Coosemans /* Limits of ptrdiff_t. */
1688770e9dbSTijl Coosemans #define	PTRDIFF_MIN	INT64_MIN
1698770e9dbSTijl Coosemans #define	PTRDIFF_MAX	INT64_MAX
1708770e9dbSTijl Coosemans 
1718770e9dbSTijl Coosemans /* Limits of sig_atomic_t. */
172*eb232cffSBrooks Davis #define	SIG_ATOMIC_MIN	INT64_MIN
173*eb232cffSBrooks Davis #define	SIG_ATOMIC_MAX	INT64_MAX
1748770e9dbSTijl Coosemans 
1758770e9dbSTijl Coosemans /* Limit of size_t. */
1768770e9dbSTijl Coosemans #define	SIZE_MAX	UINT64_MAX
1778770e9dbSTijl Coosemans #else
1788770e9dbSTijl Coosemans #define	PTRDIFF_MIN	INT32_MIN
1798770e9dbSTijl Coosemans #define	PTRDIFF_MAX	INT32_MAX
1808770e9dbSTijl Coosemans #define	SIG_ATOMIC_MIN	INT32_MIN
1818770e9dbSTijl Coosemans #define	SIG_ATOMIC_MAX	INT32_MAX
1828770e9dbSTijl Coosemans #define	SIZE_MAX	UINT32_MAX
1838770e9dbSTijl Coosemans #endif
1848770e9dbSTijl Coosemans 
1858770e9dbSTijl Coosemans /* Limits of wint_t. */
1868770e9dbSTijl Coosemans #define	WINT_MIN	INT32_MIN
1878770e9dbSTijl Coosemans #define	WINT_MAX	INT32_MAX
1888770e9dbSTijl Coosemans 
1898770e9dbSTijl Coosemans #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
1908770e9dbSTijl Coosemans 
1918770e9dbSTijl Coosemans #endif /* !_MACHINE__STDINT_H_ */
192