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