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