[Sanitizer/interception Win] Break into the debugger on unknown instructions
[blocksruntime.git] / lib / builtins / int_types.h
blob5107f71550acff429075b7957cd90de16978fb99
1 /* ===-- int_lib.h - configuration header for compiler-rt -----------------===
3 * The LLVM Compiler Infrastructure
5 * This file is dual licensed under the MIT and the University of Illinois Open
6 * Source Licenses. See LICENSE.TXT for details.
8 * ===----------------------------------------------------------------------===
10 * This file is not part of the interface of this library.
12 * This file defines various standard types, most importantly a number of unions
13 * used to access parts of larger types.
15 * ===----------------------------------------------------------------------===
18 #ifndef INT_TYPES_H
19 #define INT_TYPES_H
21 #include "int_endianness.h"
23 typedef int si_int;
24 typedef unsigned su_int;
26 typedef long long di_int;
27 typedef unsigned long long du_int;
29 typedef union
31 di_int all;
32 struct
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;
44 typedef union
46 du_int all;
47 struct
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;
59 #if __LP64__
60 #define CRT_HAS_128BIT
61 #endif
63 #ifdef CRT_HAS_128BIT
64 typedef int ti_int __attribute__ ((mode (TI)));
65 typedef unsigned tu_int __attribute__ ((mode (TI)));
67 typedef union
69 ti_int all;
70 struct
72 #if _YUGA_LITTLE_ENDIAN
73 du_int low;
74 di_int high;
75 #else
76 di_int high;
77 du_int low;
78 #endif /* _YUGA_LITTLE_ENDIAN */
79 }s;
80 } twords;
82 typedef union
84 tu_int all;
85 struct
87 #if _YUGA_LITTLE_ENDIAN
88 du_int low;
89 du_int high;
90 #else
91 du_int high;
92 du_int low;
93 #endif /* _YUGA_LITTLE_ENDIAN */
94 }s;
95 } utwords;
97 static inline ti_int make_ti(di_int h, di_int l) {
98 twords r;
99 r.s.high = h;
100 r.s.low = l;
101 return r.all;
104 static inline tu_int make_tu(du_int h, du_int l) {
105 utwords r;
106 r.s.high = h;
107 r.s.low = l;
108 return r.all;
111 #endif /* CRT_HAS_128BIT */
113 typedef union
115 su_int u;
116 float f;
117 } float_bits;
119 typedef union
121 udwords u;
122 double f;
123 } double_bits;
125 typedef struct
127 #if _YUGA_LITTLE_ENDIAN
128 udwords low;
129 udwords high;
130 #else
131 udwords high;
132 udwords low;
133 #endif /* _YUGA_LITTLE_ENDIAN */
134 } uqwords;
136 typedef union
138 uqwords u;
139 long double f;
140 } long_double_bits;
142 #endif /* INT_TYPES_H */