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
40c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#ifdef HAVE_INTTYPES_H
41c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <inttypes.h>
42c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#endif
43c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines
44c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#ifdef HAVE_STDINT_H
45c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <stdint.h>
46c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#else
47c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#error "Compiler must provide an implementation of stdint.h"
48c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#endif
49c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen 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
90c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines
9198abba7b661502f71a090ab254fb3f0db248c4c6Aaron Ballman#if defined(_WIN64)
92c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinestypedef signed __int64 ssize_t;
9398abba7b661502f71a090ab254fb3f0db248c4c6Aaron Ballman#else
94c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinestypedef signed int ssize_t;
95c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#endif /* _WIN64 */
96c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines
97c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#ifndef HAVE_INTTYPES_H
98c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define PRId64 "I64d"
99c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define PRIi64 "I64i"
100c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define PRIo64 "I64o"
101c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define PRIu64 "I64u"
102c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define PRIx64 "I64x"
103c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define PRIX64 "I64X"
10437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
10537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define PRId32 "d"
10637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define PRIi32 "i"
10737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define PRIo32 "o"
10837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define PRIu32 "u"
10937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define PRIx32 "x"
11037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define PRIX32 "X"
111c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#endif /* HAVE_INTTYPES_H */
112e2aa5d53db175dff634069cacb31487e3ddb9754NAKAMURA Takumi
1133d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif /* _MSC_VER */
1143d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1153d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes/* Set defaults for constants which we cannot find. */
1163d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(INT64_MAX)
1173d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# define INT64_MAX 9223372036854775807LL
1183d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1193d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(INT64_MIN)
1203d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# define INT64_MIN ((-INT64_MAX)-1)
1213d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1223d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#if !defined(UINT64_MAX)
1233d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes# define UINT64_MAX 0xffffffffffffffffULL
1243d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1253d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1263d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifndef HUGE_VALF
1273d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#define HUGE_VALF (float)HUGE_VAL
1283d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif
1293d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
1303d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#endif  /* SUPPORT_DATATYPES_H */
131