mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
softfloat: Introduce Floatx80RoundPrec
Use an enumeration instead of raw 32/64/80 values. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
d6e1f0cd59
commit
8da5f1dbb0
9 changed files with 182 additions and 134 deletions
|
@ -69,7 +69,7 @@ static inline void set_float_exception_flags(int val, float_status *status)
|
|||
status->float_exception_flags = val;
|
||||
}
|
||||
|
||||
static inline void set_floatx80_rounding_precision(int val,
|
||||
static inline void set_floatx80_rounding_precision(FloatX80RoundPrec val,
|
||||
float_status *status)
|
||||
{
|
||||
status->floatx80_rounding_precision = val;
|
||||
|
@ -120,7 +120,8 @@ static inline int get_float_exception_flags(float_status *status)
|
|||
return status->float_exception_flags;
|
||||
}
|
||||
|
||||
static inline int get_floatx80_rounding_precision(float_status *status)
|
||||
static inline FloatX80RoundPrec
|
||||
get_floatx80_rounding_precision(float_status *status)
|
||||
{
|
||||
return status->floatx80_rounding_precision;
|
||||
}
|
||||
|
|
|
@ -154,6 +154,14 @@ enum {
|
|||
float_flag_output_denormal = 128
|
||||
};
|
||||
|
||||
/*
|
||||
* Rounding precision for floatx80.
|
||||
*/
|
||||
typedef enum __attribute__((__packed__)) {
|
||||
floatx80_precision_x,
|
||||
floatx80_precision_d,
|
||||
floatx80_precision_s,
|
||||
} FloatX80RoundPrec;
|
||||
|
||||
/*
|
||||
* Floating Point Status. Individual architectures may maintain
|
||||
|
@ -165,7 +173,7 @@ enum {
|
|||
typedef struct float_status {
|
||||
FloatRoundMode float_rounding_mode;
|
||||
uint8_t float_exception_flags;
|
||||
signed char floatx80_rounding_precision;
|
||||
FloatX80RoundPrec floatx80_rounding_precision;
|
||||
bool tininess_before_rounding;
|
||||
/* should denormalised results go to zero and set the inexact flag? */
|
||||
bool flush_to_zero;
|
||||
|
|
|
@ -1152,7 +1152,7 @@ floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status *status);
|
|||
| Floating-Point Arithmetic.
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,
|
||||
floatx80 roundAndPackFloatx80(FloatX80RoundPrec roundingPrecision, bool zSign,
|
||||
int32_t zExp, uint64_t zSig0, uint64_t zSig1,
|
||||
float_status *status);
|
||||
|
||||
|
@ -1165,7 +1165,7 @@ floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,
|
|||
| normalized.
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
floatx80 normalizeRoundAndPackFloatx80(int8_t roundingPrecision,
|
||||
floatx80 normalizeRoundAndPackFloatx80(FloatX80RoundPrec roundingPrecision,
|
||||
bool zSign, int32_t zExp,
|
||||
uint64_t zSig0, uint64_t zSig1,
|
||||
float_status *status);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue