123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /* ===-- int_lib.h - configuration header for compiler-rt -----------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file is not part of the interface of this library.
- *
- * This file defines various standard types, most importantly a number of unions
- * used to access parts of larger types.
- *
- * ===----------------------------------------------------------------------===
- */
- #ifndef INT_TYPES_H
- #define INT_TYPES_H
- #include "int_endianness.h"
- typedef int si_int;
- typedef unsigned su_int;
- typedef long long di_int;
- typedef unsigned long long du_int;
- typedef union
- {
- di_int all;
- struct
- {
- #if _YUGA_LITTLE_ENDIAN
- su_int low;
- si_int high;
- #else
- si_int high;
- su_int low;
- #endif /* _YUGA_LITTLE_ENDIAN */
- }s;
- } dwords;
- typedef union
- {
- du_int all;
- struct
- {
- #if _YUGA_LITTLE_ENDIAN
- su_int low;
- su_int high;
- #else
- su_int high;
- su_int low;
- #endif /* _YUGA_LITTLE_ENDIAN */
- }s;
- } udwords;
- #if __LP64__
- #define CRT_HAS_128BIT
- #endif
- #ifdef CRT_HAS_128BIT
- typedef int ti_int __attribute__ ((mode (TI)));
- typedef unsigned tu_int __attribute__ ((mode (TI)));
- typedef union
- {
- ti_int all;
- struct
- {
- #if _YUGA_LITTLE_ENDIAN
- du_int low;
- di_int high;
- #else
- di_int high;
- du_int low;
- #endif /* _YUGA_LITTLE_ENDIAN */
- }s;
- } twords;
- typedef union
- {
- tu_int all;
- struct
- {
- #if _YUGA_LITTLE_ENDIAN
- du_int low;
- du_int high;
- #else
- du_int high;
- du_int low;
- #endif /* _YUGA_LITTLE_ENDIAN */
- }s;
- } utwords;
- static inline ti_int make_ti(di_int h, di_int l) {
- twords r;
- r.s.high = h;
- r.s.low = l;
- return r.all;
- }
- static inline tu_int make_tu(du_int h, du_int l) {
- utwords r;
- r.s.high = h;
- r.s.low = l;
- return r.all;
- }
- #endif /* CRT_HAS_128BIT */
- typedef union
- {
- su_int u;
- float f;
- } float_bits;
- typedef union
- {
- udwords u;
- double f;
- } double_bits;
- typedef struct
- {
- #if _YUGA_LITTLE_ENDIAN
- udwords low;
- udwords high;
- #else
- udwords high;
- udwords low;
- #endif /* _YUGA_LITTLE_ENDIAN */
- } uqwords;
- typedef union
- {
- uqwords u;
- long double f;
- } long_double_bits;
- #endif /* INT_TYPES_H */
|