1b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar/*===-- include/Support/DataTypes.h - Define fixed size types -----*- C -*-===*\ 2a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 3a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* The LLVM Compiler Infrastructure *| 4a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 5a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* This file is distributed under the University of Illinois Open Source *| 6a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* License. See LICENSE.TXT for details. *| 7a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 8a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|*===----------------------------------------------------------------------===*| 9a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 10a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* This file contains definitions to figure out the size of _HOST_ data types.*| 11a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* This file is important because different host OS's define different macros,*| 12a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* which makes portability tough. This file exports the following *| 13a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* definitions: *| 14a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 15a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*| 16a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *| 17a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 1828edeb765bc64e1859f698daf84e5500bf86a84cNick Lewycky|* No library is required when using these functions. *| 19a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|* *| 20a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|*===----------------------------------------------------------------------===*/ 21a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar 22a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Please leave this file C-compatible. */ 23009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner 24b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar/* Please keep this file in sync with DataTypes.h.cmake */ 25b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 26a9f6e4ae0eaea69949755807b7207177f256eaceBrian Gaeke#ifndef SUPPORT_DATATYPES_H 27a9f6e4ae0eaea69949755807b7207177f256eaceBrian Gaeke#define SUPPORT_DATATYPES_H 28009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner 295200ad1b344ab73139ae798a34513065c2dfde52Chris Lattner#undef HAVE_SYS_TYPES_H 305200ad1b344ab73139ae798a34513065c2dfde52Chris Lattner#undef HAVE_INTTYPES_H 315200ad1b344ab73139ae798a34513065c2dfde52Chris Lattner#undef HAVE_STDINT_H 327117c6ed9c9ff042b8d6fbcf2489cc0d47adc980Reid Spencer#undef HAVE_UINT64_T 337117c6ed9c9ff042b8d6fbcf2489cc0d47adc980Reid Spencer#undef HAVE_U_INT64_T 345200ad1b344ab73139ae798a34513065c2dfde52Chris Lattner 359b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#ifdef __cplusplus 369b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#include <cmath> 379b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#else 389b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#include <math.h> 399b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#endif 409b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit 41b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef _MSC_VER 42b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 43a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Note that this header's correct operation depends on __STDC_LIMIT_MACROS 44a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar being defined. We would define it here, but in order to prevent Bad Things 45a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar happening when system headers or C++ STL headers include stdint.h before we 46a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar define it here, we define it on the g++ command line (in Makefile.rules). */ 4795ee9bd81f629df35c9ebf7482a2a62b252dba6eBrian Gaeke#if !defined(__STDC_LIMIT_MACROS) 48b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h" 49681453dc77697c7cf842bdefd3c5e4ef181bb9a0Brian Gaeke#endif 50681453dc77697c7cf842bdefd3c5e4ef181bb9a0Brian Gaeke 51a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling#if !defined(__STDC_CONSTANT_MACROS) 52a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling# error "Must #define __STDC_CONSTANT_MACROS before " \ 53b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar "#including Support/DataTypes.h" 54a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling#endif 55a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling 56a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */ 575fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#ifdef HAVE_SYS_TYPES_H 585fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#include <sys/types.h> 595fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#endif 605fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell 615fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#ifdef HAVE_INTTYPES_H 625fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#include <inttypes.h> 635fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#endif 645fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell 655fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#ifdef HAVE_STDINT_H 665fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#include <stdint.h> 675fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#endif 682d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman 69e757752e39a9584ee6fb4017db7bef58cfd7e8f1Misha Brukman#ifdef _AIX 703cc52ea33c0b96d1682f14fc45c45b57df0f39b6Michael J. Spencer#include "llvm/Support/AIXDataTypesFix.h" 71e757752e39a9584ee6fb4017db7bef58cfd7e8f1Misha Brukman#endif 72103f2eede3f0586449be1601afc0ea26275c4c10Misha Brukman 73a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Handle incorrect definition of uint64_t as u_int64_t */ 742d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman#ifndef HAVE_UINT64_T 752d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman#ifdef HAVE_U_INT64_T 76206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencertypedef u_int64_t uint64_t; 77206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer#else 78206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer# error "Don't have a definition for uint64_t on this platform" 79206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer#endif 802d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman#endif 81206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer 82b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#else /* _MSC_VER */ 83b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar/* Visual C++ doesn't provide standard integer headers, but it does provide 84b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar built-in data types. */ 85b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <stdlib.h> 86b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <stddef.h> 87b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <sys/types.h> 88b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifdef __cplusplus 89b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <cmath> 90b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#else 91b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <math.h> 92b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 93b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef __int64 int64_t; 94b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef unsigned __int64 uint64_t; 95b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef signed int int32_t; 96b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef unsigned int uint32_t; 97b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef short int16_t; 98b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef unsigned short uint16_t; 99b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef signed char int8_t; 100b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef unsigned char uint8_t; 101b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbartypedef signed int ssize_t; 102b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT8_MAX 103b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT8_MAX 127 104b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 105b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT8_MIN 106b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT8_MIN -128 107b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 108b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT8_MAX 109b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT8_MAX 255 110b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 111b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT16_MAX 112b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT16_MAX 32767 113b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 114b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT16_MIN 115b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT16_MIN -32768 116b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 117b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT16_MAX 118b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT16_MAX 65535 119b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 120b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT32_MAX 121b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT32_MAX 2147483647 122b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 123b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT32_MIN 124b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar/* MSC treats -2147483648 as -(2147483648U). */ 125b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT32_MIN (-INT32_MAX - 1) 126b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 127b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT32_MAX 128b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT32_MAX 4294967295U 129b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 130b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar/* Certain compatibility updates to VC++ introduce the `cstdint' 131b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar * header, which defines the INT*_C macros. On default installs they 132b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar * are absent. */ 133b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT8_C 134b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT8_C(C) C##i8 135b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 136b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT8_C 137b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT8_C(C) C##ui8 138b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 139b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT16_C 140b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT16_C(C) C##i16 141b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 142b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT16_C 143b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT16_C(C) C##ui16 144b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 145b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT32_C 146b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT32_C(C) C##i32 147b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 148b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT32_C 149b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT32_C(C) C##ui32 150b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 151b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef INT64_C 152b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define INT64_C(C) C##i64 153b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 154b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef UINT64_C 155b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define UINT64_C(C) C##ui64 156b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 157b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 15841a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#ifndef PRId64 15941a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer# define PRId64 "I64d" 16041a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#endif 16141a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#ifndef PRIi64 162c09b770c13594ce6fd91820b31f934aadddc1bcdBenjamin Kramer# define PRIi64 "I64i" 16341a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#endif 16441a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#ifndef PRIo64 165c09b770c13594ce6fd91820b31f934aadddc1bcdBenjamin Kramer# define PRIo64 "I64o" 16641a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#endif 16741a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#ifndef PRIu64 16841a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer# define PRIu64 "I64u" 16941a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#endif 170b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef PRIx64 171b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# define PRIx64 "I64x" 172b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 17341a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#ifndef PRIX64 17441a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer# define PRIX64 "I64X" 17541a964931a0e0943ceef28b0c691843bf8ca87b7Benjamin Kramer#endif 176b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 177b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif /* _MSC_VER */ 178b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 179103f2eede3f0586449be1601afc0ea26275c4c10Misha Brukman/* Set defaults for constants which we cannot find. */ 18080d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#if !defined(INT64_MAX) 18195ee9bd81f629df35c9ebf7482a2a62b252dba6eBrian Gaeke# define INT64_MAX 9223372036854775807LL 18280d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#endif 1837a36ae8b0103088328e3a4992ac08b3dce312248Chris Lattner#if !defined(INT64_MIN) 1847a36ae8b0103088328e3a4992ac08b3dce312248Chris Lattner# define INT64_MIN ((-INT64_MAX)-1) 1857a36ae8b0103088328e3a4992ac08b3dce312248Chris Lattner#endif 18680d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#if !defined(UINT64_MAX) 18795ee9bd81f629df35c9ebf7482a2a62b252dba6eBrian Gaeke# define UINT64_MAX 0xffffffffffffffffULL 18880d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#endif 18980d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke 19066c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#if __GNUC__ > 3 19166c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#define END_WITH_NULL __attribute__((sentinel)) 19266c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#else 19366c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#define END_WITH_NULL 19466c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#endif 19566c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen 196d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey#ifndef HUGE_VALF 197d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey#define HUGE_VALF (float)HUGE_VAL 198d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey#endif 199d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey 200a9f6e4ae0eaea69949755807b7207177f256eaceBrian Gaeke#endif /* SUPPORT_DATATYPES_H */ 201