1 2 /* single : S 8*E 23*F */ 3 /* double : S 11*E 52*F */ 4 /* extended : S 15*E 64*F */ 5 /* E = 0 & F = 0 -> 0 */ 6 /* E = MAX & F = 0 -> Infin */ 7 /* E = MAX & F # 0 -> NotANumber */ 8 /* E = biased by 127 (single) ,1023 (double) ,16383 (extended) */ 9 10 #define FPSR_BSUN 0x00008000 11 #define FPSR_SNAN 0x00004000 12 #define FPSR_OPERR 0x00002000 13 #define FPSR_OVFL 0x00001000 14 #define FPSR_UNFL 0x00000800 15 #define FPSR_DZ 0x00000400 16 #define FPSR_INEX2 0x00000200 17 #define FPSR_INEX1 0x00000100 18 19 extern void fp_init_native(void); 20 #ifdef MSVC_LONG_DOUBLE 21 extern void fp_init_native_80(void); 22 #endif 23 extern void fp_init_softfloat(int); 24 extern void fpsr_set_exception(uae_u32 exception); 25 extern void fpu_modechange(void); 26 extern void fpu_clearstatus(void); 27 28 #ifdef WINUAE_FOR_HATARI 29 extern double softfloat_tan(double v); 30 #endif 31 32 33 #if defined(CPU_i386) || defined(CPU_x86_64) 34 extern void init_fpucw_x87(void); 35 #ifdef MSVC_LONG_DOUBLE 36 extern void init_fpucw_x87_80(void); 37 #endif 38 #endif 39 40 #define PREC_NORMAL 0 41 #define PREC_FLOAT 1 42 #define PREC_DOUBLE 2 43 #define PREC_EXTENDED 3 44 45 #define FPU_FEATURE_EXCEPTIONS 1 46 #define FPU_FEATURE_DENORMALS 2 47 48 typedef void (*FPP_ABQS)(fpdata*, fpdata*, uae_u64*, uae_u8*); 49 typedef void (*FPP_AB)(fpdata*, fpdata*); 50 typedef void (*FPP_ABP)(fpdata*, fpdata*, int); 51 typedef void (*FPP_A)(fpdata*); 52 53 typedef bool (*FPP_IS)(fpdata*); 54 typedef void (*FPP_SET_MODE)(uae_u32); 55 typedef void (*FPP_GET_STATUS)(uae_u32*); 56 typedef void (*FPP_CLEAR_STATUS)(void); 57 typedef uae_u32 (*FPP_SUPPORT_FLAGS)(void); 58 59 typedef void (*FPP_FROM_NATIVE)(fptype, fpdata*); 60 typedef void (*FPP_TO_NATIVE)(fptype*, fpdata*); 61 62 typedef void (*FPP_FROM_INT)(fpdata*,uae_s32); 63 typedef uae_s64 (*FPP_TO_INT)(fpdata*, int); 64 65 typedef void (*FPP_TO_SINGLE)(fpdata*, uae_u32); 66 typedef uae_u32 (*FPP_FROM_SINGLE)(fpdata*); 67 68 typedef void (*FPP_TO_DOUBLE)(fpdata*, uae_u32, uae_u32); 69 typedef void (*FPP_FROM_DOUBLE)(fpdata*, uae_u32*, uae_u32*); 70 71 typedef void (*FPP_TO_EXTEN)(fpdata*, uae_u32, uae_u32, uae_u32); 72 typedef void (*FPP_FROM_EXTEN)(fpdata*, uae_u32*, uae_u32*, uae_u32*); 73 74 typedef void (*FPP_PACK)(fpdata*, uae_u32*, int); 75 76 typedef const TCHAR* (*FPP_PRINT)(fpdata*,int); 77 typedef uae_u32 (*FPP_GET32)(void); 78 79 typedef void (*FPP_DENORMALIZE)(fpdata*,int); 80 81 extern FPP_PRINT fpp_print; 82 83 extern FPP_IS fpp_unset_snan; 84 extern FPP_IS fpp_is_init; 85 extern FPP_IS fpp_is_snan; 86 extern FPP_IS fpp_is_nan; 87 extern FPP_IS fpp_is_infinity; 88 extern FPP_IS fpp_is_zero; 89 extern FPP_IS fpp_is_neg; 90 extern FPP_IS fpp_is_denormal; 91 extern FPP_IS fpp_is_unnormal; 92 extern FPP_A fpp_fix_infinity; 93 94 extern FPP_GET_STATUS fpp_get_status; 95 extern FPP_CLEAR_STATUS fpp_clear_status; 96 extern FPP_SET_MODE fpp_set_mode; 97 extern FPP_SUPPORT_FLAGS fpp_get_support_flags; 98 99 extern FPP_TO_INT fpp_to_int; 100 extern FPP_FROM_INT fpp_from_int; 101 102 extern FPP_PACK fpp_to_pack; 103 extern FPP_PACK fpp_from_pack; 104 105 extern FPP_TO_SINGLE fpp_to_single; 106 extern FPP_FROM_SINGLE fpp_from_single; 107 extern FPP_TO_DOUBLE fpp_to_double; 108 extern FPP_FROM_DOUBLE fpp_from_double; 109 extern FPP_TO_EXTEN fpp_to_exten; 110 extern FPP_FROM_EXTEN fpp_from_exten; 111 extern FPP_TO_EXTEN fpp_to_exten_fmovem; 112 extern FPP_FROM_EXTEN fpp_from_exten_fmovem; 113 114 extern FPP_A fpp_round_single; 115 extern FPP_A fpp_round_double; 116 extern FPP_A fpp_round32; 117 extern FPP_A fpp_round64; 118 119 extern FPP_A fpp_normalize; 120 extern FPP_DENORMALIZE fpp_denormalize; 121 extern FPP_A fpp_get_internal_overflow; 122 extern FPP_A fpp_get_internal_underflow; 123 extern FPP_A fpp_get_internal_round_all; 124 extern FPP_A fpp_get_internal_round; 125 extern FPP_A fpp_get_internal_round_exten; 126 extern FPP_A fpp_get_internal; 127 extern FPP_GET32 fpp_get_internal_grs; 128 129 extern FPP_AB fpp_int; 130 extern FPP_AB fpp_sinh; 131 extern FPP_AB fpp_intrz; 132 extern FPP_ABP fpp_sqrt; 133 extern FPP_AB fpp_lognp1; 134 extern FPP_AB fpp_etoxm1; 135 extern FPP_AB fpp_tanh; 136 extern FPP_AB fpp_atan; 137 extern FPP_AB fpp_atanh; 138 extern FPP_AB fpp_sin; 139 extern FPP_AB fpp_asin; 140 extern FPP_AB fpp_tan; 141 extern FPP_AB fpp_etox; 142 extern FPP_AB fpp_twotox; 143 extern FPP_AB fpp_tentox; 144 extern FPP_AB fpp_logn; 145 extern FPP_AB fpp_log10; 146 extern FPP_AB fpp_log2; 147 extern FPP_ABP fpp_abs; 148 extern FPP_AB fpp_cosh; 149 extern FPP_ABP fpp_neg; 150 extern FPP_AB fpp_acos; 151 extern FPP_AB fpp_cos; 152 extern FPP_AB fpp_getexp; 153 extern FPP_AB fpp_getman; 154 extern FPP_ABP fpp_div; 155 extern FPP_ABQS fpp_mod; 156 extern FPP_ABP fpp_add; 157 extern FPP_ABP fpp_mul; 158 extern FPP_ABQS fpp_rem; 159 extern FPP_AB fpp_scale; 160 extern FPP_ABP fpp_sub; 161 extern FPP_AB fpp_sgldiv; 162 extern FPP_AB fpp_sglmul; 163 extern FPP_AB fpp_cmp; 164 extern FPP_AB fpp_tst; 165 extern FPP_ABP fpp_move; 166