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