| /**************************************************************************** |
| * include/stdint.h |
| * |
| * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved. |
| * Author: Gregory Nutt <gnutt@nuttx.org> |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * 3. Neither the name NuttX nor the names of its contributors may be |
| * used to endorse or promote products derived from this software |
| * without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
| * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
| * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
| * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
| * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| * |
| ****************************************************************************/ |
| |
| #ifndef __INCLUDE_STDINT_H |
| #define __INCLUDE_STDINT_H |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| #include <nuttx/config.h> |
| |
| #ifdef CONFIG_ARCH_STDINT_H |
| # include <arch/stdint.h> |
| #else |
| # include <nuttx/compiler.h> |
| # include <arch/types.h> |
| # include <limits.h> |
| |
| /**************************************************************************** |
| * Pre-processor Definitions |
| ****************************************************************************/ |
| |
| /* Limits of exact-width integer types */ |
| |
| #define INT8_MIN 0x80 |
| #define INT8_MAX 0x7f |
| #define UINT8_MAX 0xff |
| |
| #define INT16_MIN 0x8000 |
| #define INT16_MAX 0x7fff |
| #define UINT16_MAX 0xffff |
| |
| #ifdef __INT24_DEFINED |
| # define INT24_MIN 0x800000 |
| # define INT24_MAX 0x7fffff |
| # define UINT24_MAX 0xffffff |
| #endif |
| |
| #define INT32_MIN 0x80000000 |
| #define INT32_MAX 0x7fffffff |
| #define UINT32_MAX 0xffffffff |
| |
| #ifdef __INT64_DEFINED |
| # define INT64_MIN 0x8000000000000000 |
| # define INT64_MAX 0x7fffffffffffffff |
| # define UINT64_MAX 0xffffffffffffffff |
| #endif |
| |
| /* Limits of minimum-width integer types */ |
| |
| #define INT8_LEASTN_MIN 0x80 |
| #define INT8_LEASTN_MAX 0x7f |
| #define UINT8_LEASTN_MAX 0xff |
| |
| #define INT16_LEASTN_MIN 0x8000 |
| #define INT16_LEASTN_MAX 0x7fff |
| #define UINT16_LEASTN_MAX 0xffff |
| |
| #ifdef __INT24_DEFINED |
| # define INT24_LEASTN_MIN 0x800000 |
| # define INT24_LEASTN_MAX 0x7fffff |
| # define UINT24_LEASTN_MAX 0xffffff |
| #endif |
| |
| #define INT32_LEASTN_MIN 0x80000000 |
| #define INT32_LEASTN_MAX 0x7fffffff |
| #define UINT32_LEASTN_MAX 0xffffffff |
| |
| #ifdef __INT64_DEFINED |
| # define INT64_LEASTN_MIN 0x8000000000000000 |
| # define INT64_LEASTN_MAX 0x7fffffffffffffff |
| # define UINT64_LEASTN_MAX 0xffffffffffffffff |
| #endif |
| |
| /* Limits of fastest minimum-width integer types */ |
| |
| #define INT8_FASTN_MIN 0x80 |
| #define INT8_FASTN_MAX 0x7f |
| #define UINT8_FASTN_MAX 0xff |
| |
| #define INT16_FASTN_MIN 0x8000 |
| #define INT16_FASTN_MAX 0x7fff |
| #define UINT16_FASTN_MAX 0xffff |
| |
| #ifdef __INT24_DEFINED |
| # define INT24_FASTN_MIN 0x800000 |
| # define INT24_FASTN_MAX 0x7fffff |
| # define UINT24_FASTN_MAX 0xffffff |
| #endif |
| |
| #define INT32_FASTN_MIN 0x80000000 |
| #define INT32_FASTN_MAX 0x7fffffff |
| #define UINT32_FASTN_MAX 0xffffffff |
| |
| #ifdef __INT64_DEFINED |
| # define INT64_FASTN_MIN 0x8000000000000000 |
| # define INT64_FASTN_MAX 0x7fffffffffffffff |
| # define UINT64_FASTN_MAX 0xffffffffffffffff |
| #endif |
| |
| /* Limits of integer types capable of holding object pointers */ |
| |
| #define INTPTR_MIN PTR_MIN |
| #define INTPTR_MAX PTR_MIN |
| #define UINTPTR_MAX UPTR_MAX |
| |
| /* Limits of greatest-width integer types */ |
| |
| #ifdef __INT64_DEFINED |
| # define INTMAX_MIN INT64_MIN |
| # define INTMAX_MAX INT64_MAX |
| |
| # define UINTMAX_MIN UINT64_MIN |
| # define UINTMAX_MAX UINT64_MAX |
| #else |
| # define INTMAX_MIN INT32_MIN |
| # define INTMAX_MAX INT32_MAX |
| |
| # define UINTMAX_MIN UINT32_MIN |
| # define UINTMAX_MAX UINT32_MAX |
| #endif |
| |
| /* Macros for minimum-width integer constant expressions */ |
| |
| #if 0 /* REVISIT: Depends on architecture specific implementation */ |
| #define INT8_C(x) x |
| #define INT16_C(x) x |
| #define INT32_C(x) x ## L |
| #define INT64_C(x) x ## LL |
| |
| #define UINT8_C(x) x |
| #define UINT16_C(x) x |
| #define UINT32_C(x) x ## UL |
| #define UINT64_C(x) x ## ULL |
| #endif |
| |
| /* Macros for greatest-width integer constant expressions */ |
| |
| #ifdef CONFIG_HAVE_LONG_LONG |
| # define INTMAX_C(x) x ## LL |
| # define UINTMAX_C(x) x ## ULL |
| #else |
| # define INTMAX_C(x) x ## L |
| # define UINTMAX_C(x) x ## UL |
| #endif |
| |
| /* Limits of Other Integer Types */ |
| |
| #if 0 |
| # define PTRDIFF_MIN |
| # define PTRDIFF_MAX |
| #endif |
| |
| #ifdef CONFIG_SMALL_MEMORY |
| |
| #define SIZE_MAX UINT16_MAX /* See sys/types.h */ |
| #define RSIZE_MAX UINT16_MAX |
| |
| #else /* CONFIG_SMALL_MEMORY */ |
| |
| #define SIZE_MAX UINT32_MAX /* See sys/types.h */ |
| #define RSIZE_MAX UINT32_MAX |
| |
| #endif /* CONFIG_SMALL_MEMORY */ |
| |
| #if 0 |
| # define WCHAR_MIN |
| # define WCHAR_MAX |
| |
| # define WINT_MIN |
| # define WINT_MAX |
| #endif |
| |
| /**************************************************************************** |
| * Public Types |
| ****************************************************************************/ |
| |
| /* Exact-width integer types. NOTE that these types are defined in |
| * architecture-specific logic with leading underscore character. This file |
| * typedef's these to the final name without the underscore character. This |
| * roundabout way of doings things allows the stdint.h to be removed from the |
| * include/ directory in the event that the user prefers to use the definitions |
| * provided by their toolchain header files. |
| */ |
| |
| typedef _int8_t int8_t; |
| typedef _uint8_t uint8_t; |
| |
| typedef _int16_t int16_t; |
| typedef _uint16_t uint16_t; |
| |
| #ifdef __INT24_DEFINED |
| typedef _int24_t int24_t; |
| typedef _uint24_t uint24_t; |
| #endif |
| |
| typedef _int32_t int32_t; |
| typedef _uint32_t uint32_t; |
| |
| #ifdef __INT64_DEFINED |
| typedef _int64_t int64_t; |
| typedef _uint64_t uint64_t; |
| #endif |
| |
| /* Minimum-width integer types */ |
| |
| typedef _int8_t int_least8_t; |
| typedef _uint8_t uint_least8_t; |
| |
| typedef _int16_t int_least16_t; |
| typedef _uint16_t uint_least16_t; |
| |
| #ifdef __INT24_DEFINED |
| typedef _int24_t int_least24_t; |
| typedef _uint24_t uint_least24_t; |
| #else |
| typedef _int32_t int_least24_t; |
| typedef _uint32_t uint_least24_t; |
| #endif |
| |
| typedef _int32_t int_least32_t; |
| typedef _uint32_t uint_least32_t; |
| |
| #ifdef __INT64_DEFINED |
| typedef _int64_t int_least64_t; |
| typedef _uint64_t uint_least64_t; |
| #endif |
| |
| /* Fastest minimum-width integer types */ |
| |
| typedef _int8_t int_fast8_t; |
| typedef _uint8_t uint_fast8_t; |
| |
| typedef int int_fast16_t; |
| typedef unsigned int uint_fast16_t; |
| |
| #ifdef __INT24_DEFINED |
| typedef _int24_t int_fast24_t; |
| typedef _uint24_t uint_fast24_t; |
| #else |
| typedef _int32_t int_fast24_t; |
| typedef _uint32_t uint_fast24_t; |
| #endif |
| |
| typedef _int32_t int_fast32_t; |
| typedef _uint32_t uint_fast32_t; |
| |
| #ifdef __INT64_DEFINED |
| typedef _int64_t int_fast64_t; |
| typedef _uint64_t uint_fast64_t; |
| #endif |
| |
| /* Integer types capable of holding object pointers */ |
| |
| typedef _intptr_t intptr_t; |
| typedef _uintptr_t uintptr_t; |
| |
| /* Some architectures support a FAR pointer which is larger then the normal |
| * (near) pointer |
| */ |
| |
| #ifdef CONFIG_HAVE_FARPOINTER |
| typedef _int_farptr_t int_farptr_t; |
| typedef _uint_farptr_t uint_farptr_t; |
| #endif |
| |
| /* Greatest-width integer types */ |
| |
| #ifdef __INT64_DEFINED |
| typedef _int64_t intmax_t; |
| typedef _uint64_t uintmax_t; |
| #else |
| typedef _int32_t intmax_t; |
| typedef _uint32_t uintmax_t; |
| #endif |
| |
| #endif /* CONFIG_ARCH_STDBOOL_H */ |
| #endif /* __INCLUDE_STDINT_H */ |