mirror of https://github.com/xemu-project/xemu.git
softfloat: Convert float128_default_nan to parts
Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
0018b1f41b
commit
e9034ea87e
|
@ -171,6 +171,25 @@ static void parts64_default_nan(FloatParts64 *p, float_status *status)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void parts128_default_nan(FloatParts128 *p, float_status *status)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Extrapolate from the choices made by parts64_default_nan to fill
|
||||||
|
* in the quad-floating format. If the low bit is set, assume we
|
||||||
|
* want to set all non-snan bits.
|
||||||
|
*/
|
||||||
|
FloatParts64 p64;
|
||||||
|
parts64_default_nan(&p64, status);
|
||||||
|
|
||||||
|
*p = (FloatParts128) {
|
||||||
|
.cls = float_class_qnan,
|
||||||
|
.sign = p64.sign,
|
||||||
|
.exp = INT_MAX,
|
||||||
|
.frac_hi = p64.frac,
|
||||||
|
.frac_lo = -(p64.frac & 1)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns a quiet NaN from a signalling NaN for the deconstructed
|
| Returns a quiet NaN from a signalling NaN for the deconstructed
|
||||||
| floating-point parts.
|
| floating-point parts.
|
||||||
|
|
|
@ -706,7 +706,7 @@ static float128 float128_pack_raw(const FloatParts128 *p)
|
||||||
#define PARTS_GENERIC_64_128(NAME, P) \
|
#define PARTS_GENERIC_64_128(NAME, P) \
|
||||||
QEMU_GENERIC(P, (FloatParts128 *, parts128_##NAME), parts64_##NAME)
|
QEMU_GENERIC(P, (FloatParts128 *, parts128_##NAME), parts64_##NAME)
|
||||||
|
|
||||||
#define parts_default_nan parts64_default_nan
|
#define parts_default_nan(P, S) PARTS_GENERIC_64_128(default_nan, P)(P, S)
|
||||||
#define parts_silence_nan(P, S) PARTS_GENERIC_64_128(silence_nan, P)(P, S)
|
#define parts_silence_nan(P, S) PARTS_GENERIC_64_128(silence_nan, P)(P, S)
|
||||||
|
|
||||||
|
|
||||||
|
@ -3837,20 +3837,11 @@ float64 float64_default_nan(float_status *status)
|
||||||
|
|
||||||
float128 float128_default_nan(float_status *status)
|
float128 float128_default_nan(float_status *status)
|
||||||
{
|
{
|
||||||
FloatParts64 p;
|
FloatParts128 p;
|
||||||
float128 r;
|
|
||||||
|
|
||||||
parts_default_nan(&p, status);
|
parts_default_nan(&p, status);
|
||||||
/* Extrapolate from the choices made by parts_default_nan to fill
|
frac_shr(&p, float128_params.frac_shift);
|
||||||
* in the quad-floating format. If the low bit is set, assume we
|
return float128_pack_raw(&p);
|
||||||
* want to set all non-snan bits.
|
|
||||||
*/
|
|
||||||
r.low = -(p.frac & 1);
|
|
||||||
r.high = p.frac >> (DECOMPOSED_BINARY_POINT - 48);
|
|
||||||
r.high |= UINT64_C(0x7FFF000000000000);
|
|
||||||
r.high |= (uint64_t)p.sign << 63;
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bfloat16 bfloat16_default_nan(float_status *status)
|
bfloat16 bfloat16_default_nan(float_status *status)
|
||||||
|
|
Loading…
Reference in New Issue