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