Convert softfloat to use the standard exception flag and rounding macros
in fenv.h instead of the non-standard and incomplete ones in ieeefp.h. Thanks to Ian Lepore for testing this patch.
This commit is contained in:
parent
b2eac838cc
commit
d6b9b99e3b
@ -45,7 +45,7 @@ the `FLOAT128' macro and the quadruple-precision format `float128'.
|
||||
/* #define FLOATX80 */
|
||||
/* #define FLOAT128 */
|
||||
|
||||
#include <machine/ieeefp.h>
|
||||
#include <fenv.h>
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
@ -84,12 +84,12 @@ enum {
|
||||
Software IEC/IEEE floating-point rounding mode.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
extern fp_rnd_t float_rounding_mode;
|
||||
extern int float_rounding_mode;
|
||||
enum {
|
||||
float_round_nearest_even = FP_RN,
|
||||
float_round_to_zero = FP_RZ,
|
||||
float_round_down = FP_RM,
|
||||
float_round_up = FP_RP
|
||||
float_round_nearest_even = FE_TONEAREST,
|
||||
float_round_to_zero = FE_TOWARDZERO,
|
||||
float_round_down = FE_DOWNWARD,
|
||||
float_round_up = FE_UPWARD
|
||||
};
|
||||
|
||||
/*
|
||||
@ -97,14 +97,14 @@ enum {
|
||||
Software IEC/IEEE floating-point exception flags.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
extern fp_except float_exception_flags;
|
||||
extern fp_except float_exception_mask;
|
||||
extern int float_exception_flags;
|
||||
extern int float_exception_mask;
|
||||
enum {
|
||||
float_flag_inexact = FP_X_IMP,
|
||||
float_flag_underflow = FP_X_UFL,
|
||||
float_flag_overflow = FP_X_OFL,
|
||||
float_flag_divbyzero = FP_X_DZ,
|
||||
float_flag_invalid = FP_X_INV
|
||||
float_flag_inexact = FE_INEXACT,
|
||||
float_flag_underflow = FE_UNDERFLOW,
|
||||
float_flag_overflow = FE_OVERFLOW,
|
||||
float_flag_divbyzero = FE_DIVBYZERO,
|
||||
float_flag_invalid = FE_INVALID
|
||||
};
|
||||
|
||||
/*
|
||||
@ -113,7 +113,7 @@ Routine to raise any or all of the software IEC/IEEE floating-point
|
||||
exception flags.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
void float_raise( fp_except );
|
||||
void float_raise( int );
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
|
@ -45,7 +45,7 @@ the `FLOAT128' macro and the quadruple-precision format `float128'.
|
||||
/* #define FLOATX80 */
|
||||
/* #define FLOAT128 */
|
||||
|
||||
#include <machine/ieeefp.h>
|
||||
#include <fenv.h>
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
@ -84,12 +84,12 @@ enum {
|
||||
Software IEC/IEEE floating-point rounding mode.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
extern fp_rnd_t float_rounding_mode;
|
||||
extern int float_rounding_mode;
|
||||
enum {
|
||||
float_round_nearest_even = FP_RN,
|
||||
float_round_to_zero = FP_RZ,
|
||||
float_round_down = FP_RM,
|
||||
float_round_up = FP_RP
|
||||
float_round_nearest_even = FE_TONEAREST,
|
||||
float_round_to_zero = FE_TOWARDZERO,
|
||||
float_round_down = FE_DOWNWARD,
|
||||
float_round_up = FE_UPWARD
|
||||
};
|
||||
|
||||
/*
|
||||
@ -97,14 +97,14 @@ enum {
|
||||
Software IEC/IEEE floating-point exception flags.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
extern fp_except float_exception_flags;
|
||||
extern fp_except float_exception_mask;
|
||||
extern int float_exception_flags;
|
||||
extern int float_exception_mask;
|
||||
enum {
|
||||
float_flag_inexact = FP_X_IMP,
|
||||
float_flag_underflow = FP_X_UFL,
|
||||
float_flag_overflow = FP_X_OFL,
|
||||
float_flag_divbyzero = FP_X_DZ,
|
||||
float_flag_invalid = FP_X_INV
|
||||
float_flag_inexact = FE_INEXACT,
|
||||
float_flag_underflow = FE_UNDERFLOW,
|
||||
float_flag_overflow = FE_OVERFLOW,
|
||||
float_flag_divbyzero = FE_DIVBYZERO,
|
||||
float_flag_invalid = FE_INVALID
|
||||
};
|
||||
|
||||
/*
|
||||
@ -113,7 +113,7 @@ Routine to raise any or all of the software IEC/IEEE floating-point
|
||||
exception flags.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
void float_raise( fp_except );
|
||||
void float_raise( int );
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
|
@ -77,8 +77,8 @@ __FBSDID("$FreeBSD$");
|
||||
Floating-point rounding mode and exception flags.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
fp_rnd_t float_rounding_mode = float_round_nearest_even;
|
||||
fp_except float_exception_flags = 0;
|
||||
int float_rounding_mode = float_round_nearest_even;
|
||||
int float_exception_flags = 0;
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
|
@ -71,8 +71,8 @@ Floating-point rounding mode, extended double-precision rounding precision,
|
||||
and exception flags.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
fp_rnd_t float_rounding_mode = float_round_nearest_even;
|
||||
fp_except float_exception_flags = 0;
|
||||
int float_rounding_mode = float_round_nearest_even;
|
||||
int float_exception_flags = 0;
|
||||
#ifdef FLOATX80
|
||||
int8 floatx80_rounding_precision = 80;
|
||||
#endif
|
||||
|
@ -58,8 +58,8 @@ substitute a result value. If traps are not implemented, this routine
|
||||
should be simply `float_exception_flags |= flags;'.
|
||||
-------------------------------------------------------------------------------
|
||||
*/
|
||||
fp_except float_exception_mask = 0;
|
||||
void float_raise( fp_except flags )
|
||||
int float_exception_mask = 0;
|
||||
void float_raise( int flags )
|
||||
{
|
||||
|
||||
float_exception_flags |= flags;
|
||||
|
Loading…
Reference in New Issue
Block a user