146283Sdfr/*-
2130803Smarcel * Copyright (c) 2001, 2002 Mike Barcroft <mike@FreeBSD.org>
398944Sobrien * Copyright (c) 2001 The NetBSD Foundation, Inc.
446283Sdfr * All rights reserved.
598944Sobrien *
646283Sdfr * This code is derived from software contributed to The NetBSD Foundation
798944Sobrien * by Klaus Klein.
898944Sobrien *
998944Sobrien * Redistribution and use in source and binary forms, with or without
1098944Sobrien * modification, are permitted provided that the following conditions
1146283Sdfr * are met:
1298944Sobrien * 1. Redistributions of source code must retain the above copyright
1398944Sobrien *    notice, this list of conditions and the following disclaimer.
1498944Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1598944Sobrien *    notice, this list of conditions and the following disclaimer in the
1646283Sdfr *    documentation and/or other materials provided with the distribution.
1798944Sobrien * 3. All advertising materials mentioning features or use of this software
1898944Sobrien *    must display the following acknowledgement:
1998944Sobrien *        This product includes software developed by the NetBSD
2098944Sobrien *        Foundation, Inc. and its contributors.
2146283Sdfr * 4. Neither the name of The NetBSD Foundation nor the names of its
2246283Sdfr *    contributors may be used to endorse or promote products derived
2346283Sdfr *    from this software without specific prior written permission.
2446283Sdfr *
2546283Sdfr * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2646283Sdfr * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2746283Sdfr * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2846283Sdfr * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2946283Sdfr * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
3046283Sdfr * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
3146283Sdfr * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3246283Sdfr * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3346283Sdfr * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3446283Sdfr * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3546283Sdfr * POSSIBILITY OF SUCH DAMAGE.
3646283Sdfr *
3746283Sdfr * $FreeBSD$
3846283Sdfr */
3946283Sdfr
4046283Sdfr#ifndef _MACHINE__STDINT_H_
4146283Sdfr#define	_MACHINE__STDINT_H_
4246283Sdfr
4346283Sdfr#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
4446283Sdfr
4546283Sdfr#define	INT8_C(c)		(c)
4646283Sdfr#define	INT16_C(c)		(c)
4746283Sdfr#define	INT32_C(c)		(c)
4846283Sdfr
4946283Sdfr#define	UINT8_C(c)		(c)
5046283Sdfr#define	UINT16_C(c)		(c)
5146283Sdfr#define	UINT32_C(c)		(c ## U)
5246283Sdfr
5346283Sdfr#ifdef __LP64__
5446283Sdfr#define	INT64_C(c)		(c ## L)
5546283Sdfr#define	UINT64_C(c)		(c ## UL)
5646283Sdfr#else
5746283Sdfr#define	INT64_C(c)		(c ## LL)
58130803Smarcel#define	UINT64_C(c)		(c ## ULL)
5946283Sdfr#endif
6046283Sdfr
6198944Sobrien#define	INTMAX_C(c)		INT64_C(c)
6298944Sobrien#define	UINTMAX_C(c)		UINT64_C(c)
6398944Sobrien
6446283Sdfr#endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */
65130803Smarcel
66130803Smarcel#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
6798944Sobrien
6898944Sobrien#ifndef __INT64_C
6946283Sdfr#ifdef __LP64__
7046283Sdfr#define	__INT64_C(c)		(c ## L)
7146283Sdfr#define	__UINT64_C(c)		(c ## UL)
7246283Sdfr#else
7346283Sdfr#define	__INT64_C(c)		(c ## LL)
7446283Sdfr#define	__UINT64_C(c)		(c ## ULL)
7546283Sdfr#endif
7646283Sdfr#endif
7798944Sobrien
7898944Sobrien/*
7998944Sobrien * ISO/IEC 9899:1999
8046283Sdfr * 7.18.2.1 Limits of exact-width integer types
8198944Sobrien */
8298944Sobrien/* Minimum values of exact-width signed integer types. */
8346283Sdfr#define	INT8_MIN	(-0x7f-1)
8446283Sdfr#define	INT16_MIN	(-0x7fff-1)
8546283Sdfr#define	INT32_MIN	(-0x7fffffff-1)
8646283Sdfr#define	INT64_MIN	(-__INT64_C(0x7fffffffffffffff)-1)
8746283Sdfr
8846283Sdfr/* Maximum values of exact-width signed integer types. */
8998944Sobrien#define	INT8_MAX	0x7f
9098944Sobrien#define	INT16_MAX	0x7fff
9198944Sobrien#define	INT32_MAX	0x7fffffff
9246283Sdfr#define	INT64_MAX	__INT64_C(0x7fffffffffffffff)
9346283Sdfr
9498944Sobrien/* Maximum values of exact-width unsigned integer types. */
9598944Sobrien#define	UINT8_MAX	0xff
9698944Sobrien#define	UINT16_MAX	0xffff
9798944Sobrien#define	UINT32_MAX	0xffffffff
9846283Sdfr#define	UINT64_MAX	__UINT64_C(0xffffffffffffffff)
9946283Sdfr
10046283Sdfr/*
10146283Sdfr * ISO/IEC 9899:1999
10246283Sdfr * 7.18.2.2  Limits of minimum-width integer types
10398944Sobrien */
10498944Sobrien/* Minimum values of minimum-width signed integer types. */
10598944Sobrien#define	INT_LEAST8_MIN	INT8_MIN
10698944Sobrien#define	INT_LEAST16_MIN	INT16_MIN
10798944Sobrien#define	INT_LEAST32_MIN	INT32_MIN
10898944Sobrien#define	INT_LEAST64_MIN	INT64_MIN
10998944Sobrien
11046283Sdfr/* Maximum values of minimum-width signed integer types. */
11198944Sobrien#define	INT_LEAST8_MAX	INT8_MAX
11298944Sobrien#define	INT_LEAST16_MAX	INT16_MAX
11346283Sdfr#define	INT_LEAST32_MAX	INT32_MAX
114130803Smarcel#define	INT_LEAST64_MAX	INT64_MAX
11598944Sobrien
11646283Sdfr/* Maximum values of minimum-width unsigned integer types. */
11798944Sobrien#define	UINT_LEAST8_MAX	 UINT8_MAX
11898944Sobrien#define	UINT_LEAST16_MAX UINT16_MAX
11998944Sobrien#define	UINT_LEAST32_MAX UINT32_MAX
12098944Sobrien#define	UINT_LEAST64_MAX UINT64_MAX
12198944Sobrien
12298944Sobrien/*
12398944Sobrien * ISO/IEC 9899:1999
12498944Sobrien * 7.18.2.3  Limits of fastest minimum-width integer types
12598944Sobrien */
12698944Sobrien/* Minimum values of fastest minimum-width signed integer types. */
12746283Sdfr#define	INT_FAST8_MIN	INT32_MIN
12846283Sdfr#define	INT_FAST16_MIN	INT32_MIN
12998944Sobrien#define	INT_FAST32_MIN	INT32_MIN
130130803Smarcel#define	INT_FAST64_MIN	INT64_MIN
13198944Sobrien
13298944Sobrien/* Maximum values of fastest minimum-width signed integer types. */
13398944Sobrien#define	INT_FAST8_MAX	INT32_MAX
134130803Smarcel#define	INT_FAST16_MAX	INT32_MAX
13598944Sobrien#define	INT_FAST32_MAX	INT32_MAX
136130803Smarcel#define	INT_FAST64_MAX	INT64_MAX
13798944Sobrien
138130803Smarcel/* Maximum values of fastest minimum-width unsigned integer types. */
139130803Smarcel#define	UINT_FAST8_MAX	UINT32_MAX
14098944Sobrien#define	UINT_FAST16_MAX	UINT32_MAX
141130803Smarcel#define	UINT_FAST32_MAX	UINT32_MAX
142130803Smarcel#define	UINT_FAST64_MAX	UINT64_MAX
143130803Smarcel
14498944Sobrien/*
145130803Smarcel * ISO/IEC 9899:1999
146130803Smarcel * 7.18.2.4  Limits of integer types capable of holding object pointers
14798944Sobrien */
14898944Sobrien#ifdef __LP64__
149130803Smarcel#define	INTPTR_MIN	INT64_MIN
150130803Smarcel#define	INTPTR_MAX	INT64_MAX
15198944Sobrien#define	UINTPTR_MAX	UINT64_MAX
152130803Smarcel#else
15398944Sobrien#define	INTPTR_MIN	INT32_MIN
154130803Smarcel#define	INTPTR_MAX	INT32_MAX
15598944Sobrien#define	UINTPTR_MAX	UINT32_MAX
156130803Smarcel#endif
15798944Sobrien
158130803Smarcel/*
15998944Sobrien * ISO/IEC 9899:1999
160130803Smarcel * 7.18.2.5  Limits of greatest-width integer types
16198944Sobrien */
162130803Smarcel#define	INTMAX_MIN	INT64_MIN
16398944Sobrien#define	INTMAX_MAX	INT64_MAX
164130803Smarcel#define	UINTMAX_MAX	UINT64_MAX
165130803Smarcel
16698944Sobrien/*
167130803Smarcel * ISO/IEC 9899:1999
16898944Sobrien * 7.18.3  Limits of other integer types
169130803Smarcel */
17098944Sobrien#ifdef __LP64__
171130803Smarcel/* Limits of ptrdiff_t. */
172130803Smarcel#define	PTRDIFF_MIN	INT64_MIN
17398944Sobrien#define	PTRDIFF_MAX	INT64_MAX
174130803Smarcel
175130803Smarcel/* Limits of sig_atomic_t. */
17698944Sobrien#define	SIG_ATOMIC_MIN	INT64_MIN
177130803Smarcel#define	SIG_ATOMIC_MAX	INT64_MAX
17898944Sobrien
179130803Smarcel/* Limit of size_t. */
18098944Sobrien#define	SIZE_MAX	UINT64_MAX
18198944Sobrien#else
18246283Sdfr/* Limits of ptrdiff_t. */
18346283Sdfr#define	PTRDIFF_MIN	INT32_MIN
18498944Sobrien#define	PTRDIFF_MAX	INT32_MAX
18546283Sdfr
18698944Sobrien/* Limits of sig_atomic_t. */
18746283Sdfr#define	SIG_ATOMIC_MIN	INT32_MIN
18898944Sobrien#define	SIG_ATOMIC_MAX	INT32_MAX
18946283Sdfr
19098944Sobrien/* Limit of size_t. */
19146283Sdfr#define	SIZE_MAX	UINT32_MAX
19298944Sobrien#endif
19346283Sdfr
19498944Sobrien#ifndef WCHAR_MIN /* Also possibly defined in <wchar.h> */
19598944Sobrien/* Limits of wchar_t. */
19646283Sdfr#define	WCHAR_MIN	INT32_MIN
19746283Sdfr#define	WCHAR_MAX	INT32_MAX
19846283Sdfr#endif
19946283Sdfr
20098944Sobrien/* Limits of wint_t. */
20146283Sdfr#define	WINT_MIN	INT32_MIN
20246283Sdfr#define	WINT_MAX	INT32_MAX
20398944Sobrien
20498944Sobrien#endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
20598944Sobrien
20698944Sobrien#endif /* !_MACHINE__STDINT_H_ */
20798944Sobrien