1/* 2 * Copyright 2009-2011, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifdef HAIKU_HOST_PLATFORM_HAIKU 6#include_next <config/types.h> 7#elif !defined(_CONFIG_BUILD_TYPES_H) 8#define _CONFIG_BUILD_TYPES_H 9 10 11#include <config/HaikuConfig.h> 12 13#include <inttypes.h> 14 15 16/* fixed-width types -- the __haiku_std_[u]int* types correspond to the POSIX 17 [u]int*_t types, the _haiku_[u]int* types to the BeOS [u]int* types. If 18 __HAIKU_BEOS_COMPATIBLE_TYPES is not defined both sets are identical. Once 19 we drop compatibility for good, we can consolidate the types. 20*/ 21typedef int8_t __haiku_std_int8; 22typedef uint8_t __haiku_std_uint8; 23typedef int16_t __haiku_std_int16; 24typedef uint16_t __haiku_std_uint16; 25typedef int32_t __haiku_std_int32; 26typedef uint32_t __haiku_std_uint32; 27typedef int64_t __haiku_std_int64; 28typedef uint64_t __haiku_std_uint64; 29 30typedef __haiku_std_int8 __haiku_int8; 31typedef __haiku_std_uint8 __haiku_uint8; 32typedef __haiku_std_int16 __haiku_int16; 33typedef __haiku_std_uint16 __haiku_uint16; 34typedef __haiku_std_int32 __haiku_int32; 35typedef __haiku_std_uint32 __haiku_uint32; 36typedef __haiku_std_int64 __haiku_int64; 37typedef __haiku_std_uint64 __haiku_uint64; 38 39/* address types */ 40#ifdef __HAIKU_ARCH_64_BIT 41 typedef __haiku_int64 __haiku_saddr_t; 42 typedef __haiku_uint64 __haiku_addr_t; 43#else 44 typedef __haiku_int32 __haiku_saddr_t; 45 typedef __haiku_uint32 __haiku_addr_t; 46#endif 47 48#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT 49 typedef __haiku_int64 __haiku_phys_saddr_t; 50 typedef __haiku_uint64 __haiku_phys_addr_t; 51#else 52 typedef __haiku_int32 __haiku_phys_saddr_t; 53 typedef __haiku_uint32 __haiku_phys_addr_t; 54#endif 55 56/* address type limits */ 57#ifdef __HAIKU_ARCH_64_BIT 58# define __HAIKU_SADDR_MAX (9223372036854775807LL) 59# define __HAIKU_ADDR_MAX (18446744073709551615ULL) 60#else 61# define __HAIKU_SADDR_MAX (2147483647) 62# define __HAIKU_ADDR_MAX (4294967295U) 63#endif 64#define __HAIKU_SADDR_MIN (-__HAIKU_SADDR_MAX-1) 65 66#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT 67# define __HAIKU_PHYS_SADDR_MAX (9223372036854775807LL) 68# define __HAIKU_PHYS_ADDR_MAX (18446744073709551615ULL) 69#else 70# define __HAIKU_PHYS_SADDR_MAX (2147483647) 71# define __HAIKU_PHYS_ADDR_MAX (4294967295U) 72#endif 73#define __HAIKU_PHYS_SADDR_MIN (-__HAIKU_SADDR_MAX-1) 74 75 76/* printf()/scanf() format prefixes */ 77/* TODO: The following are only guesses! We should define them in the 78 build/host headers. */ 79#define __HAIKU_STD_PRI_PREFIX_32 "" 80#ifdef __HAIKU_ARCH_64_BIT 81# define __HAIKU_STD_PRI_PREFIX_64 "l" 82#else 83# define __HAIKU_STD_PRI_PREFIX_64 "ll" 84#endif 85 86#define __HAIKU_PRI_PREFIX_32 __HAIKU_STD_PRI_PREFIX_32 87#define __HAIKU_PRI_PREFIX_64 __HAIKU_STD_PRI_PREFIX_64 88 89#ifdef __HAIKU_ARCH_64_BIT 90# define __HAIKU_PRI_PREFIX_ADDR __HAIKU_PRI_PREFIX_64 91#else 92# define __HAIKU_PRI_PREFIX_ADDR __HAIKU_PRI_PREFIX_32 93#endif 94 95#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT 96# define __HAIKU_PRI_PREFIX_PHYS_ADDR __HAIKU_PRI_PREFIX_64 97#else 98# define __HAIKU_PRI_PREFIX_PHYS_ADDR __HAIKU_PRI_PREFIX_32 99#endif 100 101 102/* a generic address type wide enough for virtual and physical addresses */ 103#if __HAIKU_ARCH_BITS >= __HAIKU_ARCH_PHYSICAL_BITS 104 typedef __haiku_addr_t __haiku_generic_addr_t; 105# define __HAIKU_GENERIC_ADDR_MAX __HAIKU_ADDR_MAX 106# define __HAIKU_PRI_PREFIX_GENERIC_ADDR __HAIKU_PRI_PREFIX_ADDR 107#else 108 typedef __haiku_phys_addr_t __haiku_generic_addr_t; 109# define __HAIKU_GENERIC_ADDR_MAX __HAIKU_PHYS_ADDR_MAX 110# define __HAIKU_PRI_PREFIX_GENERIC_ADDR __HAIKU_PRI_PREFIX_PHYS_ADDR 111#endif 112 113 114#endif /* _CONFIG_BUILD_TYPES_H */ 115