11f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer/*===-- 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|*                                                                            *|
18b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar|* No library is required when using these functions.                         *|
19a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|*                                                                            *|
20a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar|*===----------------------------------------------------------------------===*/
21a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar
22a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Please leave this file C-compatible. */
233d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
24b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar/* Please keep this file in sync with DataTypes.h.in */
25b5e8bc1fac7475ae8e2d0f8210bd72b7fe04df4bDaniel Dunbar
263d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifndef SUPPORT_DATATYPES_H
273d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#define SUPPORT_DATATYPES_H
283d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
293d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H}
303d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H}
319c091a4846044f18cfdd8bca55957c2aa6c9a8a5Douglas Gregor#cmakedefine HAVE_UINT64_T ${HAVE_UINT64_T}
329c091a4846044f18cfdd8bca55957c2aa6c9a8a5Douglas Gregor#cmakedefine HAVE_U_INT64_T ${HAVE_U_INT64_T}
333d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
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
503d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifndef _MSC_VER
513d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
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). */
563d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(__STDC_LIMIT_MACROS)
571f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer# error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h"
583d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
593d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
60cd6213233ea584531cf4c137db838551a3c454ffOscar Fuentes#if !defined(__STDC_CONSTANT_MACROS)
61cd6213233ea584531cf4c137db838551a3c454ffOscar Fuentes# error "Must #define __STDC_CONSTANT_MACROS before " \
621f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer        "#including Support/DataTypes.h"
63cd6213233ea584531cf4c137db838551a3c454ffOscar Fuentes#endif
64cd6213233ea584531cf4c137db838551a3c454ffOscar Fuentes
65a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */
663d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#include <sys/types.h>
673d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
683d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifdef _AIX
691f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/AIXDataTypesFix.h"
703d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
713d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
72a84b15575906b6a0e9ada7646724cc716cff1cd1Erick Tryzelaar/* Handle incorrect definition of uint64_t as u_int64_t */
733d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifndef HAVE_UINT64_T
743d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifdef HAVE_U_INT64_T
753d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentestypedef u_int64_t uint64_t;
763d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#else
773d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# error "Don't have a definition for uint64_t on this platform"
783d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
793d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
803d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
813d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#else /* _MSC_VER */
823d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#include <stdlib.h>
833d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#include <stddef.h>
843d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#include <sys/types.h>
851126038436feef10620baa9f1528ad5c3c61fd4fEli Friedman#ifdef __cplusplus
861126038436feef10620baa9f1528ad5c3c61fd4fEli Friedman#include <cmath>
871126038436feef10620baa9f1528ad5c3c61fd4fEli Friedman#else
881126038436feef10620baa9f1528ad5c3c61fd4fEli Friedman#include <math.h>
891126038436feef10620baa9f1528ad5c3c61fd4fEli Friedman#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 */
105e2aa5d53db175dff634069cacb31487e3ddb9754NAKAMURA Takumi
1063d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif /* _MSC_VER */
1073d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1083d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes/* Set defaults for constants which we cannot find. */
1093d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(INT64_MAX)
1103d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# define INT64_MAX 9223372036854775807LL
1113d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1123d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(INT64_MIN)
1133d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# define INT64_MIN ((-INT64_MAX)-1)
1143d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1153d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(UINT64_MAX)
1163d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# define UINT64_MAX 0xffffffffffffffffULL
1173d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1183d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1193d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if __GNUC__ > 3
1203d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#define END_WITH_NULL __attribute__((sentinel))
1213d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#else
1223d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#define END_WITH_NULL
1233d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1243d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1253d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifndef HUGE_VALF
1263d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#define HUGE_VALF (float)HUGE_VAL
1273d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1283d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1293d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif  /* SUPPORT_DATATYPES_H */
130