#ifndef _FIX64_H_ #define _FIX64_H_ #include #include #include #include #include #ifdef __IEEE_LITTLE_ENDIAN #define IEEE_8087 #endif #ifdef __IEEE_BIG_ENDIAN #define IEEE_MC68k #endif #ifdef __Z8000__ #define Just_16 #endif #if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1 Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined. #endif union long_double_union { long double ld; __uint32_t i[4]; }; typedef union long_double_union LONG_DOUBLE_UNION; extern void _simdstrtold (char *, char **, LONG_DOUBLE_UNION *); extern int _simdldcheck (LONG_DOUBLE_UNION *); #define SIMD_LDBL_MANT_DIG 113 #ifdef IEEE_8087 # define word0(x) (x.i[3]) # define word1(x) (x.i[2]) # define word2(x) (x.i[1]) # define word3(x) (x.i[0]) #else /* !IEEE_8087 */ # define word0(x) (x.i[0]) # define word1(x) (x.i[1]) # define word2(x) (x.i[2]) # define word3(x) (x.i[3]) #endif /* !IEEE_8087 */ #undef Exp_shift #define Exp_shift 16 #undef Exp_mask #define Exp_mask ((__uint32_t)0x7fff0000L) #undef Exp_msk1 #define Exp_msk1 ((__uint32_t)0x00010000L) #undef Bias #define Bias 16383 #undef Ebits #define Ebits 15 #undef Sign_bit #define Sign_bit ((__uint32_t)0x80000000L) #define init(x) {} union fix64_union { __uint64_t ll; __uint32_t j[2]; }; #ifdef __LITTLE_ENDIAN__ # define hiword(y) (y.j[1]) # define loword(y) (y.j[0]) #else /* __BIG_ENDIAN__ */ # define hiword(y) (y.j[0]) # define loword(y) (y.j[1]) #endif /* __BIG_ENDIAN__ */ #endif /* _FIX64_H_ */