10e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/*===-- include/Support/DataTypes.h - Define fixed size types -----*- C -*-===*\ 20e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 30e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* The LLVM Compiler Infrastructure *| 40e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 50e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* This file is distributed under the University of Illinois Open Source *| 60e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* License. See LICENSE.TXT for details. *| 70e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 80e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|*===----------------------------------------------------------------------===*| 90e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 100e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* This file contains definitions to figure out the size of _HOST_ data types.*| 110e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* This file is important because different host OS's define different macros,*| 120e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* which makes portability tough. This file exports the following *| 130e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* definitions: *| 140e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 150e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*| 160e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *| 170e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 180e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* No library is required when using these functions. *| 190e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|* *| 200e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens|*===----------------------------------------------------------------------===*/ 210e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 220e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* Please leave this file C-compatible. */ 230e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 240e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifndef SUPPORT_DATATYPES_H 250e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define SUPPORT_DATATYPES_H 260e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 270e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define HAVE_INTTYPES_H 1 280e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define HAVE_STDINT_H 1 290e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define HAVE_UINT64_T 1 300e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define HAVE_U_INT64_T 1 310e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 320e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef __cplusplus 330e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <cmath> 340e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 350e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <math.h> 360e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 370e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 380e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef __cplusplus 390e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <cinttypes> 400e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 410e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef HAVE_INTTYPES_H 420e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <inttypes.h> 430e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 440e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 450e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 460e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef __cplusplus 470e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <cstdint> 480e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 490e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef HAVE_STDINT_H 500e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <stdint.h> 510e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 520e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#error "Compiler must provide an implementation of stdint.h" 530e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 540e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 550e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 560e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifndef _MSC_VER 570e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 580e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if !defined(UINT32_MAX) 590e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens# error "The standard header <cstdint> is not C++11 compliant. Must #define "\ 600e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens "__STDC_LIMIT_MACROS before #including Support/DataTypes.h" 610e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 620e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 630e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if !defined(UINT32_C) 640e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens# error "The standard header <cstdint> is not C++11 compliant. Must #define "\ 650e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens "__STDC_CONSTANT_MACROS before #including Support/DataTypes.h" 660e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 670e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 680e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */ 690e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <sys/types.h> 700e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 710e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef _AIX 720e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens// GCC is strict about defining large constants: they must have LL modifier. 730e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#undef INT64_MAX 740e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#undef INT64_MIN 750e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 760e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 770e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* Handle incorrect definition of uint64_t as u_int64_t */ 780e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifndef HAVE_UINT64_T 790e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef HAVE_U_INT64_T 800e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capenstypedef u_int64_t uint64_t; 810e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 820e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens# error "Don't have a definition for uint64_t on this platform" 830e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 840e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 850e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 860e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else /* _MSC_VER */ 870e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifdef __cplusplus 880e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <cstdlib> 890e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <cstddef> 900e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 910e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <stdlib.h> 920e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <stddef.h> 930e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 940e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#include <sys/types.h> 950e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 960e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if defined(_WIN64) 970e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capenstypedef signed __int64 ssize_t; 980e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 990e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capenstypedef signed int ssize_t; 1000e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif /* _WIN64 */ 1010e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 1020e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifndef HAVE_INTTYPES_H 1030e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRId64 "I64d" 1040e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIi64 "I64i" 1050e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIo64 "I64o" 1060e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIu64 "I64u" 1070e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIx64 "I64x" 1080e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIX64 "I64X" 1090e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 1100e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRId32 "d" 1110e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIi32 "i" 1120e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIo32 "o" 1130e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIu32 "u" 1140e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIx32 "x" 1150e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define PRIX32 "X" 1160e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif /* HAVE_INTTYPES_H */ 1170e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 1180e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif /* _MSC_VER */ 1190e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 1200e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* Set defaults for constants which we cannot find. */ 1210e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if !defined(INT64_MAX) 1220e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens# define INT64_MAX 9223372036854775807LL 1230e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 1240e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if !defined(INT64_MIN) 1250e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens# define INT64_MIN ((-INT64_MAX)-1) 1260e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 1270e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if !defined(UINT64_MAX) 1280e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens# define UINT64_MAX 0xffffffffffffffffULL 1290e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 1300e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 1310e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifndef HUGE_VALF 1320e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define HUGE_VALF (float)HUGE_VAL 1330e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 1340e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 1350e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif /* SUPPORT_DATATYPES_H */ 136