114 lines
3.2 KiB
C
114 lines
3.2 KiB
C
|
/*
|
||
|
* This file is part of the coreboot project.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; version 2 of the License.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*/
|
||
|
|
||
|
#ifndef STDINT_H
|
||
|
#define STDINT_H
|
||
|
|
||
|
/* romcc does not support long long, _Static_assert, or _Bool, so we must ifdef that code out.
|
||
|
Also, GCC can provide its own implementation of stdint.h, so in theory we could use that
|
||
|
instead of this custom file once romcc is no more. */
|
||
|
|
||
|
/* Fixed width integer types */
|
||
|
typedef signed char int8_t;
|
||
|
typedef unsigned char uint8_t;
|
||
|
|
||
|
typedef signed short int16_t;
|
||
|
typedef unsigned short uint16_t;
|
||
|
|
||
|
typedef signed int int32_t;
|
||
|
typedef unsigned int uint32_t;
|
||
|
|
||
|
#ifndef __ROMCC__
|
||
|
typedef signed long long int64_t;
|
||
|
typedef unsigned long long uint64_t;
|
||
|
#endif
|
||
|
|
||
|
/* Types for 'void *' pointers */
|
||
|
typedef signed long intptr_t;
|
||
|
typedef unsigned long uintptr_t;
|
||
|
|
||
|
/* Ensure that the widths are all correct */
|
||
|
#ifndef __ROMCC__
|
||
|
_Static_assert(sizeof(int8_t) == 1, "Size of int8_t is incorrect");
|
||
|
_Static_assert(sizeof(uint8_t) == 1, "Size of uint8_t is incorrect");
|
||
|
|
||
|
_Static_assert(sizeof(int16_t) == 2, "Size of int16_t is incorrect");
|
||
|
_Static_assert(sizeof(uint16_t) == 2, "Size of uint16_t is incorrect");
|
||
|
|
||
|
_Static_assert(sizeof(int32_t) == 4, "Size of int32_t is incorrect");
|
||
|
_Static_assert(sizeof(uint32_t) == 4, "Size of uint32_t is incorrect");
|
||
|
|
||
|
_Static_assert(sizeof(int64_t) == 8, "Size of int64_t is incorrect");
|
||
|
_Static_assert(sizeof(uint64_t) == 8, "Size of uint64_t is incorrect");
|
||
|
|
||
|
_Static_assert(sizeof(intptr_t) == sizeof(void *), "Size of intptr_t is incorrect");
|
||
|
_Static_assert(sizeof(uintptr_t) == sizeof(void *), "Size of uintptr_t is incorrect");
|
||
|
#endif
|
||
|
|
||
|
/* Maximum width integer types */
|
||
|
#ifndef __ROMCC__
|
||
|
typedef int64_t intmax_t;
|
||
|
typedef uint64_t uintmax_t;
|
||
|
#endif
|
||
|
|
||
|
/* Convenient typedefs */
|
||
|
typedef int8_t s8;
|
||
|
typedef uint8_t u8;
|
||
|
|
||
|
typedef int16_t s16;
|
||
|
typedef uint16_t u16;
|
||
|
|
||
|
typedef int32_t s32;
|
||
|
typedef uint32_t u32;
|
||
|
|
||
|
#ifndef __ROMCC__
|
||
|
typedef int64_t s64;
|
||
|
typedef uint64_t u64;
|
||
|
#endif
|
||
|
|
||
|
/* Limits of integer types */
|
||
|
#define INT8_MIN ((int8_t)0x80)
|
||
|
#define INT8_MAX ((int8_t)0x7F)
|
||
|
#define UINT8_MAX ((uint8_t)0xFF)
|
||
|
|
||
|
#define INT16_MIN ((int16_t)0x8000)
|
||
|
#define INT16_MAX ((int16_t)0x7FFF)
|
||
|
#define UINT16_MAX ((uint16_t)0xFFFF)
|
||
|
|
||
|
#define INT32_MIN ((int32_t)0x80000000)
|
||
|
#define INT32_MAX ((int32_t)0x7FFFFFFF)
|
||
|
#define UINT32_MAX ((uint32_t)0xFFFFFFFF)
|
||
|
|
||
|
#ifndef __ROMCC__
|
||
|
#define INT64_MIN ((int64_t)0x8000000000000000)
|
||
|
#define INT64_MAX ((int64_t)0x7FFFFFFFFFFFFFFF)
|
||
|
#define UINT64_MAX ((uint64_t)0xFFFFFFFFFFFFFFFF)
|
||
|
#endif
|
||
|
|
||
|
#ifndef __ROMCC__
|
||
|
#define INTMAX_MIN INT64_MIN
|
||
|
#define INTMAX_MAX INT64_MAX
|
||
|
#define UINTMAX_MAX UINT64_MAX
|
||
|
#endif
|
||
|
|
||
|
/* TODO: move into stdbool.h */
|
||
|
#ifdef __ROMCC__
|
||
|
typedef uint8_t bool;
|
||
|
#else
|
||
|
typedef _Bool bool;
|
||
|
#endif
|
||
|
#define true 1
|
||
|
#define false 0
|
||
|
|
||
|
#endif /* STDINT_H */
|