mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
fpu/softfloat: implement float16_squash_input_denormal
This will be required when expanding the MINMAX() macro for 16 bit/half-precision operations. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
a6e0344fa0
commit
210cbd4910
@ -3488,6 +3488,21 @@ static float16 roundAndPackFloat16(flag zSign, int zExp,
|
||||
return packFloat16(zSign, zExp, zSig >> 13);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| If `a' is denormal and we are in flush-to-zero mode then set the
|
||||
| input-denormal exception and return zero. Otherwise just return the value.
|
||||
*----------------------------------------------------------------------------*/
|
||||
float16 float16_squash_input_denormal(float16 a, float_status *status)
|
||||
{
|
||||
if (status->flush_inputs_to_zero) {
|
||||
if (extractFloat16Exp(a) == 0 && extractFloat16Frac(a) != 0) {
|
||||
float_raise(float_flag_input_denormal, status);
|
||||
return make_float16(float16_val(a) & 0x8000);
|
||||
}
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
static void normalizeFloat16Subnormal(uint32_t aSig, int *zExpPtr,
|
||||
uint32_t *zSigPtr)
|
||||
{
|
||||
|
@ -277,6 +277,7 @@ void float_raise(uint8_t flags, float_status *status);
|
||||
| If `a' is denormal and we are in flush-to-zero mode then set the
|
||||
| input-denormal exception and return zero. Otherwise just return the value.
|
||||
*----------------------------------------------------------------------------*/
|
||||
float16 float16_squash_input_denormal(float16 a, float_status *status);
|
||||
float32 float32_squash_input_denormal(float32 a, float_status *status);
|
||||
float64 float64_squash_input_denormal(float64 a, float_status *status);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user