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:
das 2012-01-16 04:05:53 +00:00
parent b2eac838cc
commit d6b9b99e3b
5 changed files with 34 additions and 34 deletions

View File

@ -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 );
/*
-------------------------------------------------------------------------------

View File

@ -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 );
/*
-------------------------------------------------------------------------------

View File

@ -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;
/*
-------------------------------------------------------------------------------

View File

@ -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

View File

@ -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;