1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-4-Clause 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 2001, 2002 Mike Barcroft <[email protected]> 5a9643ea8Slogwang * Copyright (c) 2001 The NetBSD Foundation, Inc. 6a9643ea8Slogwang * All rights reserved. 7a9643ea8Slogwang * 8a9643ea8Slogwang * This code is derived from software contributed to The NetBSD Foundation 9a9643ea8Slogwang * by Klaus Klein. 10a9643ea8Slogwang * 11a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 12a9643ea8Slogwang * modification, are permitted provided that the following conditions 13a9643ea8Slogwang * are met: 14a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 15a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 16a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 17a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 18a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 19a9643ea8Slogwang * 3. All advertising materials mentioning features or use of this software 20a9643ea8Slogwang * must display the following acknowledgement: 21a9643ea8Slogwang * This product includes software developed by the NetBSD 22a9643ea8Slogwang * Foundation, Inc. and its contributors. 23a9643ea8Slogwang * 4. Neither the name of The NetBSD Foundation nor the names of its 24a9643ea8Slogwang * contributors may be used to endorse or promote products derived 25a9643ea8Slogwang * from this software without specific prior written permission. 26a9643ea8Slogwang * 27a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 28a9643ea8Slogwang * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 29a9643ea8Slogwang * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 30a9643ea8Slogwang * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 31a9643ea8Slogwang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32a9643ea8Slogwang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33a9643ea8Slogwang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34a9643ea8Slogwang * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35a9643ea8Slogwang * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36a9643ea8Slogwang * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37a9643ea8Slogwang * POSSIBILITY OF SUCH DAMAGE. 38a9643ea8Slogwang * 39a9643ea8Slogwang * $FreeBSD$ 40a9643ea8Slogwang */ 41a9643ea8Slogwang 42a9643ea8Slogwang #ifndef _MACHINE__STDINT_H_ 43a9643ea8Slogwang #define _MACHINE__STDINT_H_ 44a9643ea8Slogwang 45a9643ea8Slogwang #include <machine/_limits.h> 46a9643ea8Slogwang 47a9643ea8Slogwang #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) 48a9643ea8Slogwang 49a9643ea8Slogwang #define INT8_C(c) (c) 50a9643ea8Slogwang #define INT16_C(c) (c) 51a9643ea8Slogwang #define INT32_C(c) (c) 52a9643ea8Slogwang 53a9643ea8Slogwang #define UINT8_C(c) (c) 54a9643ea8Slogwang #define UINT16_C(c) (c) 55a9643ea8Slogwang #define UINT32_C(c) (c ## U) 56a9643ea8Slogwang 57a9643ea8Slogwang #ifdef __LP64__ 58a9643ea8Slogwang #define INT64_C(c) (c ## L) 59a9643ea8Slogwang #define UINT64_C(c) (c ## UL) 60a9643ea8Slogwang #else 61a9643ea8Slogwang #define INT64_C(c) (c ## LL) 62a9643ea8Slogwang #define UINT64_C(c) (c ## ULL) 63a9643ea8Slogwang #endif 64a9643ea8Slogwang 65a9643ea8Slogwang #define INTMAX_C(c) INT64_C(c) 66a9643ea8Slogwang #define UINTMAX_C(c) UINT64_C(c) 67a9643ea8Slogwang 68a9643ea8Slogwang #endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */ 69a9643ea8Slogwang 70a9643ea8Slogwang #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) 71a9643ea8Slogwang 72a9643ea8Slogwang /* 73a9643ea8Slogwang * ISO/IEC 9899:1999 74a9643ea8Slogwang * 7.18.2.1 Limits of exact-width integer types 75a9643ea8Slogwang */ 76a9643ea8Slogwang #define INT8_MIN (-0x7f-1) 77a9643ea8Slogwang #define INT16_MIN (-0x7fff-1) 78a9643ea8Slogwang #define INT32_MIN (-0x7fffffff-1) 79a9643ea8Slogwang 80a9643ea8Slogwang #define INT8_MAX 0x7f 81a9643ea8Slogwang #define INT16_MAX 0x7fff 82a9643ea8Slogwang #define INT32_MAX 0x7fffffff 83a9643ea8Slogwang 84a9643ea8Slogwang #define UINT8_MAX 0xff 85a9643ea8Slogwang #define UINT16_MAX 0xffff 86a9643ea8Slogwang #define UINT32_MAX 0xffffffffU 87a9643ea8Slogwang 88a9643ea8Slogwang #ifdef __LP64__ 89a9643ea8Slogwang #define INT64_MIN (-0x7fffffffffffffff-1) 90a9643ea8Slogwang #define INT64_MAX 0x7fffffffffffffff 91a9643ea8Slogwang #define UINT64_MAX 0xffffffffffffffff 92a9643ea8Slogwang #else 93a9643ea8Slogwang #define INT64_MIN (-0x7fffffffffffffffLL-1) 94a9643ea8Slogwang #define INT64_MAX 0x7fffffffffffffffLL 95a9643ea8Slogwang #define UINT64_MAX 0xffffffffffffffffULL 96a9643ea8Slogwang #endif 97a9643ea8Slogwang 98a9643ea8Slogwang /* 99a9643ea8Slogwang * ISO/IEC 9899:1999 100a9643ea8Slogwang * 7.18.2.2 Limits of minimum-width integer types 101a9643ea8Slogwang */ 102a9643ea8Slogwang /* Minimum values of minimum-width signed integer types. */ 103a9643ea8Slogwang #define INT_LEAST8_MIN INT8_MIN 104a9643ea8Slogwang #define INT_LEAST16_MIN INT16_MIN 105a9643ea8Slogwang #define INT_LEAST32_MIN INT32_MIN 106a9643ea8Slogwang #define INT_LEAST64_MIN INT64_MIN 107a9643ea8Slogwang 108a9643ea8Slogwang /* Maximum values of minimum-width signed integer types. */ 109a9643ea8Slogwang #define INT_LEAST8_MAX INT8_MAX 110a9643ea8Slogwang #define INT_LEAST16_MAX INT16_MAX 111a9643ea8Slogwang #define INT_LEAST32_MAX INT32_MAX 112a9643ea8Slogwang #define INT_LEAST64_MAX INT64_MAX 113a9643ea8Slogwang 114a9643ea8Slogwang /* Maximum values of minimum-width unsigned integer types. */ 115a9643ea8Slogwang #define UINT_LEAST8_MAX UINT8_MAX 116a9643ea8Slogwang #define UINT_LEAST16_MAX UINT16_MAX 117a9643ea8Slogwang #define UINT_LEAST32_MAX UINT32_MAX 118a9643ea8Slogwang #define UINT_LEAST64_MAX UINT64_MAX 119a9643ea8Slogwang 120a9643ea8Slogwang /* 121a9643ea8Slogwang * ISO/IEC 9899:1999 122a9643ea8Slogwang * 7.18.2.3 Limits of fastest minimum-width integer types 123a9643ea8Slogwang */ 124a9643ea8Slogwang /* Minimum values of fastest minimum-width signed integer types. */ 125a9643ea8Slogwang #define INT_FAST8_MIN INT32_MIN 126a9643ea8Slogwang #define INT_FAST16_MIN INT32_MIN 127a9643ea8Slogwang #define INT_FAST32_MIN INT32_MIN 128a9643ea8Slogwang #define INT_FAST64_MIN INT64_MIN 129a9643ea8Slogwang 130a9643ea8Slogwang /* Maximum values of fastest minimum-width signed integer types. */ 131a9643ea8Slogwang #define INT_FAST8_MAX INT32_MAX 132a9643ea8Slogwang #define INT_FAST16_MAX INT32_MAX 133a9643ea8Slogwang #define INT_FAST32_MAX INT32_MAX 134a9643ea8Slogwang #define INT_FAST64_MAX INT64_MAX 135a9643ea8Slogwang 136a9643ea8Slogwang /* Maximum values of fastest minimum-width unsigned integer types. */ 137a9643ea8Slogwang #define UINT_FAST8_MAX UINT32_MAX 138a9643ea8Slogwang #define UINT_FAST16_MAX UINT32_MAX 139a9643ea8Slogwang #define UINT_FAST32_MAX UINT32_MAX 140a9643ea8Slogwang #define UINT_FAST64_MAX UINT64_MAX 141a9643ea8Slogwang 142a9643ea8Slogwang /* 143a9643ea8Slogwang * ISO/IEC 9899:1999 144a9643ea8Slogwang * 7.18.2.4 Limits of integer types capable of holding object pointers 145a9643ea8Slogwang */ 146a9643ea8Slogwang #ifdef __LP64__ 147a9643ea8Slogwang #define INTPTR_MIN INT64_MIN 148a9643ea8Slogwang #define INTPTR_MAX INT64_MAX 149a9643ea8Slogwang #define UINTPTR_MAX UINT64_MAX 150a9643ea8Slogwang #else 151a9643ea8Slogwang #define INTPTR_MIN INT32_MIN 152a9643ea8Slogwang #define INTPTR_MAX INT32_MAX 153a9643ea8Slogwang #define UINTPTR_MAX UINT32_MAX 154a9643ea8Slogwang #endif 155a9643ea8Slogwang 156a9643ea8Slogwang /* 157a9643ea8Slogwang * ISO/IEC 9899:1999 158a9643ea8Slogwang * 7.18.2.5 Limits of greatest-width integer types 159a9643ea8Slogwang */ 160a9643ea8Slogwang #define INTMAX_MIN INT64_MIN 161a9643ea8Slogwang #define INTMAX_MAX INT64_MAX 162a9643ea8Slogwang #define UINTMAX_MAX UINT64_MAX 163a9643ea8Slogwang 164a9643ea8Slogwang /* 165a9643ea8Slogwang * ISO/IEC 9899:1999 166a9643ea8Slogwang * 7.18.3 Limits of other integer types 167a9643ea8Slogwang */ 168a9643ea8Slogwang #ifdef __LP64__ 169a9643ea8Slogwang /* Limits of ptrdiff_t. */ 170a9643ea8Slogwang #define PTRDIFF_MIN INT64_MIN 171a9643ea8Slogwang #define PTRDIFF_MAX INT64_MAX 172a9643ea8Slogwang 173a9643ea8Slogwang /* Limits of sig_atomic_t. */ 174a9643ea8Slogwang #define SIG_ATOMIC_MIN __LONG_MIN 175a9643ea8Slogwang #define SIG_ATOMIC_MAX __LONG_MAX 176a9643ea8Slogwang 177a9643ea8Slogwang /* Limit of size_t. */ 178a9643ea8Slogwang #define SIZE_MAX UINT64_MAX 179a9643ea8Slogwang #else 180a9643ea8Slogwang #define PTRDIFF_MIN INT32_MIN 181a9643ea8Slogwang #define PTRDIFF_MAX INT32_MAX 182a9643ea8Slogwang #define SIG_ATOMIC_MIN INT32_MIN 183a9643ea8Slogwang #define SIG_ATOMIC_MAX INT32_MAX 184a9643ea8Slogwang #define SIZE_MAX UINT32_MAX 185a9643ea8Slogwang #endif 186a9643ea8Slogwang 187a9643ea8Slogwang /* Limits of wint_t. */ 188a9643ea8Slogwang #define WINT_MIN INT32_MIN 189a9643ea8Slogwang #define WINT_MAX INT32_MAX 190a9643ea8Slogwang 191a9643ea8Slogwang #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */ 192a9643ea8Slogwang 193a9643ea8Slogwang #endif /* !_MACHINE__STDINT_H_ */ 194