19#include "int_endianness.h"
25typedef int32_t si_int;
26typedef uint32_t su_int;
27#if UINT_MAX == 0xFFFFFFFF
28#define clzsi __builtin_clz
29#define ctzsi __builtin_ctz
30#elif ULONG_MAX == 0xFFFFFFFF
31#define clzsi __builtin_clzl
32#define ctzsi __builtin_ctzl
34#error could not determine appropriate clzsi macro for this system
37typedef int64_t di_int;
38typedef uint64_t du_int;
43#if _YUGA_LITTLE_ENDIAN
56#if _YUGA_LITTLE_ENDIAN
66#if defined(__LP64__) || defined(__wasm__) || defined(__mips64) || \
67 defined(__SIZEOF_INT128__) || defined(_WIN64)
74#if defined(_MSC_VER) && !defined(__clang__)
79typedef int ti_int __attribute__((mode(TI)));
80typedef unsigned tu_int __attribute__((mode(TI)));
85#if _YUGA_LITTLE_ENDIAN
98#if _YUGA_LITTLE_ENDIAN
108static __inline ti_int make_ti(di_int h, di_int l) {
110 r.s.high = (du_int)h;
115static __inline tu_int make_tu(du_int h, du_int l) {
126#if defined(__FreeBSD__) && defined(_STANDALONE)
127#define CRT_HAS_FLOATING_POINT 0
129#define CRT_HAS_FLOATING_POINT 1
132#if CRT_HAS_FLOATING_POINT
144#if _YUGA_LITTLE_ENDIAN
158#if (defined(__i386__) || defined(__x86_64__)) && \
159 !(defined(_MSC_VER) || defined(__ANDROID__))
160#define HAS_80_BIT_LONG_DOUBLE 1
161#elif defined(__m68k__) || defined(__ia64__)
162#define HAS_80_BIT_LONG_DOUBLE 1
164#define HAS_80_BIT_LONG_DOUBLE 0
167#if HAS_80_BIT_LONG_DOUBLE
168typedef long double xf_float;
184typedef long double tf_float;
185#define CRT_LDBL_128BIT
187#if __LDBL_MANT_DIG__ == 113 && !defined(__LONG_DOUBLE_IBM128__)
188#define CRT_HAS_IEEE_TF
189#define CRT_LDBL_IEEE_F128
192#elif __LDBL_MANT_DIG__ == 113 || \
193 (__FLT_RADIX__ == 16 && __LDBL_MANT_DIG__ == 28)
196#define CRT_LDBL_128BIT
198#if __LDBL_MANT_DIG__ == 113
199#define CRT_HAS_IEEE_TF
200#define CRT_LDBL_IEEE_F128
202typedef long double tf_float;
204#elif defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
205#define CRT_HAS___FLOAT128_KEYWORD
208#define CRT_HAS_IEEE_TF
209typedef __float128 tf_float;
222#if defined(CRT_HAS_128BIT) && defined(CRT_HAS_F128)
223#define CRT_HAS_TF_MODE
226#if __STDC_VERSION__ >= 199901L && !defined(_MSC_VER)
229typedef long double _Complex
Lcomplex;
230#if defined(CRT_LDBL_128BIT)
232#define CRT_HAS_NATIVE_COMPLEX_F128
233#elif defined(CRT_HAS___FLOAT128_KEYWORD)
234#if defined(__clang_major__) && __clang_major__ > 10
236typedef __float128 _Complex Qcomplex;
237#define CRT_HAS_NATIVE_COMPLEX_F128
238#elif defined(__GNUC__) && __GNUC__ >= 7
240typedef _Float128 _Complex Qcomplex;
241#define CRT_HAS_NATIVE_COMPLEX_F128
245#define COMPLEX_REAL(x) __real__(x)
246#define COMPLEX_IMAGINARY(x) __imag__(x)
249 float real, imaginary;
253 double real, imaginary;
257 long double real, imaginary;
260#define COMPLEX_REAL(x) (x).real
261#define COMPLEX_IMAGINARY(x) (x).imaginary
264#ifdef CRT_HAS_NATIVE_COMPLEX_F128
265#define COMPLEXTF_REAL(x) __real__(x)
266#define COMPLEXTF_IMAGINARY(x) __imag__(x)
267#elif defined(CRT_HAS_F128)
269 tf_float real, imaginary;
271#define COMPLEXTF_REAL(x) (x).real
272#define COMPLEXTF_IMAGINARY(x) (x).imaginary
Definition int_types.h:252
Definition int_types.h:248
Definition int_types.h:256
Definition int_types.h:143
Definition int_types.h:138
Definition int_types.h:40
Definition int_types.h:133
Definition int_types.h:53