#ifndef BASE_CONVERSION_H
#define BASE_CONVERSION_H
#include <errno.h>
#include <floatingpoint.h>
#include <sys/isa_defs.h>
#define SINGLE_BIAS 127
#define DOUBLE_BIAS 1023
#define EXTENDED_BIAS 16383
#define QUAD_BIAS 16383
#define UNPACKED_SIZE 5
typedef struct {
int sign;
enum fp_class_type fpclass;
int exponent;
unsigned significand[UNPACKED_SIZE];
} unpacked;
#ifdef _LITTLE_ENDIAN
typedef struct {
unsigned significand:23;
unsigned exponent:8;
unsigned sign:1;
} single_msw;
typedef struct {
unsigned significand:20;
unsigned exponent:11;
unsigned sign:1;
} double_msw;
typedef struct {
unsigned exponent:15;
unsigned sign:1;
unsigned unused:16;
} extended_msw;
typedef struct {
unsigned significand:16;
unsigned exponent:15;
unsigned sign:1;
} quadruple_msw;
typedef struct {
single_msw msw;
} single_formatted;
typedef struct {
unsigned significand2;
double_msw msw;
} double_formatted;
typedef struct {
unsigned significand2;
unsigned significand;
extended_msw msw;
} extended_formatted;
typedef struct {
unsigned significand4;
unsigned significand3;
unsigned significand2;
quadruple_msw msw;
} quadruple_formatted;
#else
typedef struct {
unsigned sign:1;
unsigned exponent:8;
unsigned significand:23;
} single_msw;
typedef struct {
unsigned sign:1;
unsigned exponent:11;
unsigned significand:20;
} double_msw;
typedef struct {
unsigned sign:1;
unsigned exponent:15;
unsigned unused:16;
} extended_msw;
typedef struct {
unsigned sign:1;
unsigned exponent:15;
unsigned significand:16;
} quadruple_msw;
typedef struct {
single_msw msw;
} single_formatted;
typedef struct {
double_msw msw;
unsigned significand2;
} double_formatted;
typedef struct {
extended_msw msw;
unsigned significand;
unsigned significand2;
} extended_formatted;
typedef struct {
quadruple_msw msw;
unsigned significand2;
unsigned significand3;
unsigned significand4;
} quadruple_formatted;
#endif
typedef union {
single_formatted f;
single x;
} single_equivalence;
typedef union {
double_formatted f;
double x;
} double_equivalence;
typedef union {
extended_formatted f;
extended x;
} extended_equivalence;
typedef union {
quadruple_formatted f;
quadruple x;
} quadruple_equivalence;
#define _BIG_FLOAT_SIZE (DECIMAL_STRING_LENGTH/2)
typedef struct {
unsigned short bsize;
unsigned short blength;
short int bexponent;
unsigned short bsignificand[_BIG_FLOAT_SIZE];
} _big_float;
typedef struct {
int status, mode;
} __ieee_flags_type;
extern int *_thrp_get_inf_read(void);
extern int *_thrp_get_inf_written(void);
extern int *_thrp_get_nan_read(void);
extern int *_thrp_get_nan_written(void);
#define __inf_read (*(int *)_thrp_get_inf_read())
#define __inf_written (*(int *)_thrp_get_inf_written())
#define __nan_read (*(int *)_thrp_get_nan_read())
#define __nan_written (*(int *)_thrp_get_nan_written())
#define __TBL_10_SMALL_SIZE 64
#define __TBL_10_BIG_SIZE 16
#define __TBL_10_HUGE_SIZE 6
extern const unsigned short
__tbl_10_small_digits[], __tbl_10_small_start[],
__tbl_10_big_digits[], __tbl_10_big_start[],
__tbl_10_huge_digits[], __tbl_10_huge_start[];
#define __TBL_2_SMALL_SIZE 176
#define __TBL_2_BIG_SIZE 16
#define __TBL_2_HUGE_SIZE 6
extern const unsigned short
__tbl_2_small_digits[], __tbl_2_small_start[],
__tbl_2_big_digits[], __tbl_2_big_start[],
__tbl_2_huge_digits[], __tbl_2_huge_start[];
#define __TBL_TENS_EXACT 22
#define __TBL_TENS_MAX 49
extern const double __tbl_tens[];
extern void __base_conversion_set_exception(fp_exception_field_type);
extern void __four_digits_quick(unsigned short, char *);
extern int __fast_double_to_decimal(double *dd, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);
extern void __pack_single(unpacked *, single *, enum fp_direction_type,
fp_exception_field_type *);
extern void __pack_double(unpacked *, double *, enum fp_direction_type,
fp_exception_field_type *);
extern void __pack_extended(unpacked *, extended *, enum fp_direction_type,
fp_exception_field_type *);
extern void __pack_quadruple(unpacked *, quadruple *,
enum fp_direction_type, fp_exception_field_type *);
extern void __infnanstring(enum fp_class_type cl, int ndigits, char *buf);
extern void __big_float_times_power(_big_float *pbf, int mult, int n,
int precision, _big_float **pnewbf);
extern void __get_ieee_flags(__ieee_flags_type *);
extern void __set_ieee_flags(__ieee_flags_type *);
extern double __mul_set(double, double, int *);
extern double __div_set(double, double, int *);
extern double __dabs(double *);
#if defined(sparc) || defined(__sparc)
extern enum fp_direction_type _QgetRD(void);
#endif
#include "base_inlines.h"
#endif