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_INTTYPES_H 305200ad1b344ab73139ae798a34513065c2dfde52Chris Lattner#undef HAVE_STDINT_H 317117c6ed9c9ff042b8d6fbcf2489cc0d47adc980Reid Spencer#undef HAVE_UINT64_T 327117c6ed9c9ff042b8d6fbcf2489cc0d47adc980Reid Spencer#undef HAVE_U_INT64_T 335200ad1b344ab73139ae798a34513065c2dfde52Chris Lattner 349b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#ifdef __cplusplus 359b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#include <cmath> 369b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#else 379b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#include <math.h> 389b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit#endif 399b97fc785b5a925966c70919c2ee2889f4beff7eStefanus Du Toit 40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#ifdef HAVE_INTTYPES_H 41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include <inttypes.h> 42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif 43cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#ifdef HAVE_STDINT_H 45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include <stdint.h> 46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#else 47cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#error "Compiler must provide an implementation of stdint.h" 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif 49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 50b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifndef _MSC_VER 51b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 52a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Note that this header's correct operation depends on __STDC_LIMIT_MACROS 53a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar being defined. We would define it here, but in order to prevent Bad Things 54a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar happening when system headers or C++ STL headers include stdint.h before we 55a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar define it here, we define it on the g++ command line (in Makefile.rules). */ 5695ee9bd81f629df35c9ebf7482a2a62b252dba6eBrian Gaeke#if !defined(__STDC_LIMIT_MACROS) 57b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar# error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h" 58681453dc77697c7cf842bdefd3c5e4ef181bb9a0Brian Gaeke#endif 59681453dc77697c7cf842bdefd3c5e4ef181bb9a0Brian Gaeke 60a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling#if !defined(__STDC_CONSTANT_MACROS) 61a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling# error "Must #define __STDC_CONSTANT_MACROS before " \ 62b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar "#including Support/DataTypes.h" 63a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling#endif 64a872aae731a5e88de1a61df5855645887ea07e66Bill Wendling 65a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */ 665fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell#include <sys/types.h> 675fbb1f8fccd7226d7cd83442570856fcc9a7bf8eJohn Criswell 68e757752e39a9584ee6fb4017db7bef58cfd7e8f1Misha Brukman#ifdef _AIX 693cc52ea33c0b96d1682f14fc45c45b57df0f39b6Michael J. Spencer#include "llvm/Support/AIXDataTypesFix.h" 70e757752e39a9584ee6fb4017db7bef58cfd7e8f1Misha Brukman#endif 71103f2eede3f0586449be1601afc0ea26275c4c10Misha Brukman 72a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Handle incorrect definition of uint64_t as u_int64_t */ 732d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman#ifndef HAVE_UINT64_T 742d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman#ifdef HAVE_U_INT64_T 75206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencertypedef u_int64_t uint64_t; 76206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer#else 77206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer# error "Don't have a definition for uint64_t on this platform" 78206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer#endif 792d3dcb6a55c1c4a83b8e13e7cfd2e55f8cfe4740Misha Brukman#endif 80206043aac9f6fc670c9b2df587c8d42461f96ba0Reid Spencer 81b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#else /* _MSC_VER */ 82b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <stdlib.h> 83b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <stddef.h> 84b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <sys/types.h> 85b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#ifdef __cplusplus 86b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <cmath> 87b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#else 88b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#include <math.h> 89b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif 90cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 9198abba7b661502f71a090ab254fb3f0db248c4c6Aaron Ballman#if defined(_WIN64) 92cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinestypedef signed __int64 ssize_t; 9398abba7b661502f71a090ab254fb3f0db248c4c6Aaron Ballman#else 94cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinestypedef signed int ssize_t; 95cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif /* _WIN64 */ 96cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 97cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#ifndef HAVE_INTTYPES_H 98cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRId64 "I64d" 99cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRIi64 "I64i" 100cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRIo64 "I64o" 101cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRIu64 "I64u" 102cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRIx64 "I64x" 103cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRIX64 "I64X" 104cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif /* HAVE_INTTYPES_H */ 105b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 106b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar#endif /* _MSC_VER */ 107b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar 108103f2eede3f0586449be1601afc0ea26275c4c10Misha Brukman/* Set defaults for constants which we cannot find. */ 10980d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#if !defined(INT64_MAX) 11095ee9bd81f629df35c9ebf7482a2a62b252dba6eBrian Gaeke# define INT64_MAX 9223372036854775807LL 11180d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#endif 1127a36ae8b0103088328e3a4992ac08b3dce312248Chris Lattner#if !defined(INT64_MIN) 1137a36ae8b0103088328e3a4992ac08b3dce312248Chris Lattner# define INT64_MIN ((-INT64_MAX)-1) 1147a36ae8b0103088328e3a4992ac08b3dce312248Chris Lattner#endif 11580d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#if !defined(UINT64_MAX) 11695ee9bd81f629df35c9ebf7482a2a62b252dba6eBrian Gaeke# define UINT64_MAX 0xffffffffffffffffULL 11780d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke#endif 11880d79fa5b497fc076cbef514be2ac45794e67f70Brian Gaeke 11966c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#if __GNUC__ > 3 12066c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#define END_WITH_NULL __attribute__((sentinel)) 12166c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#else 12266c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#define END_WITH_NULL 12366c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen#endif 12466c5fd6c537269eaef0f630fa14360dcaff6a295Jeff Cohen 125d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey#ifndef HUGE_VALF 126d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey#define HUGE_VALF (float)HUGE_VAL 127d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey#endif 128d96e180da0a9395ac54960d4cc3d0b469fa11009Jim Laskey 129a9f6e4ae0eaea69949755807b7207177f256eaceBrian Gaeke#endif /* SUPPORT_DATATYPES_H */ 130