mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-01 11:52:47 +00:00
81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
#ifndef _FIX64_H_
|
|
|
|
#define _FIX64_H_
|
|
|
|
#include <ieeefp.h>
|
|
#include <math.h>
|
|
#include <float.h>
|
|
#include <errno.h>
|
|
#include <sys/config.h>
|
|
|
|
#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_ */
|