1/* ===-- int_lib.h - configuration header for compiler-rt -----------------=== 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is dual licensed under the MIT and the University of Illinois Open 6 * Source Licenses. See LICENSE.TXT for details. 7 * 8 * ===----------------------------------------------------------------------=== 9 * 10 * This file is not part of the interface of this library. 11 * 12 * This file defines various standard types, most importantly a number of unions 13 * used to access parts of larger types. 14 * 15 * ===----------------------------------------------------------------------=== 16 */ 17 18#ifndef INT_TYPES_H 19#define INT_TYPES_H 20 21#include "int_endianness.h" 22 23typedef int si_int; 24typedef unsigned su_int; 25 26typedef long long di_int; 27typedef unsigned long long du_int; 28 29typedef union 30{ 31 di_int all; 32 struct 33 { 34#if _YUGA_LITTLE_ENDIAN 35 su_int low; 36 si_int high; 37#else 38 si_int high; 39 su_int low; 40#endif /* _YUGA_LITTLE_ENDIAN */ 41 }s; 42} dwords; 43 44typedef union 45{ 46 du_int all; 47 struct 48 { 49#if _YUGA_LITTLE_ENDIAN 50 su_int low; 51 su_int high; 52#else 53 su_int high; 54 su_int low; 55#endif /* _YUGA_LITTLE_ENDIAN */ 56 }s; 57} udwords; 58 59#if __x86_64 60 61typedef int ti_int __attribute__ ((mode (TI))); 62typedef unsigned tu_int __attribute__ ((mode (TI))); 63 64typedef union 65{ 66 ti_int all; 67 struct 68 { 69#if _YUGA_LITTLE_ENDIAN 70 du_int low; 71 di_int high; 72#else 73 di_int high; 74 du_int low; 75#endif /* _YUGA_LITTLE_ENDIAN */ 76 }s; 77} twords; 78 79typedef union 80{ 81 tu_int all; 82 struct 83 { 84#if _YUGA_LITTLE_ENDIAN 85 du_int low; 86 du_int high; 87#else 88 du_int high; 89 du_int low; 90#endif /* _YUGA_LITTLE_ENDIAN */ 91 }s; 92} utwords; 93 94static inline ti_int make_ti(di_int h, di_int l) { 95 twords r; 96 r.s.high = h; 97 r.s.low = l; 98 return r.all; 99} 100 101static inline tu_int make_tu(du_int h, du_int l) { 102 utwords r; 103 r.s.high = h; 104 r.s.low = l; 105 return r.all; 106} 107 108#endif /* __x86_64 */ 109 110typedef union 111{ 112 su_int u; 113 float f; 114} float_bits; 115 116typedef union 117{ 118 udwords u; 119 double f; 120} double_bits; 121 122typedef struct 123{ 124#if _YUGA_LITTLE_ENDIAN 125 udwords low; 126 udwords high; 127#else 128 udwords high; 129 udwords low; 130#endif /* _YUGA_LITTLE_ENDIAN */ 131} uqwords; 132 133typedef union 134{ 135 uqwords u; 136 long double f; 137} long_double_bits; 138 139#endif /* INT_TYPES_H */ 140 141