case float_class_snan:
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
if (s->default_nan_mode) {
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
} else {
partsN(silence_nan)(a, s);
}
break;
case float_class_qnan:
if (s->default_nan_mode) {
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
}
break;
default:
}
if (s->default_nan_mode) {
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
return ret;
default_nan:
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
p->exp = fmt->exp_max;
p->frac_hi = E4M3_NORMAL_FRAC_MAX;
} else {
- partsN(default_nan)(p, s);
+ *p = partsN(default_nan)(s);
}
}
}
/* Inf - Inf */
float_raise(float_flag_invalid | float_flag_invalid_isi, s);
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
} else {
/* Inf * Zero == NaN */
if (unlikely(ab_mask == float_cmask_infzero)) {
float_raise(float_flag_invalid | float_flag_invalid_imz, s);
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
goto finish_sign;
d_nan:
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
return a;
d_nan:
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
/* Inf % N; N % 0 */
if (a->cls == float_class_inf || b->cls == float_class_zero) {
float_raise(float_flag_invalid, s);
- partsN(default_nan)(a, s);
+ *a = partsN(default_nan)(s);
return a;
}
d_nan:
float_raise(float_flag_invalid | float_flag_invalid_sqrt, status);
- partsN(default_nan)(a, status);
+ *a = partsN(default_nan)(status);
}
/*
| The pattern for a default generated deconstructed floating-point NaN.
*----------------------------------------------------------------------------*/
-static void parts64_default_nan(FloatParts64 *p, float_status *status)
+static FloatParts64 parts64_default_nan(float_status *status)
{
bool sign = 0;
uint64_t frac;
frac = deposit64(0, DECOMPOSED_BINARY_POINT - 7, 7, dnan_pattern);
frac = deposit64(frac, 0, DECOMPOSED_BINARY_POINT - 7, -(dnan_pattern & 1));
- *p = (FloatParts64) {
+ return (FloatParts64) {
.cls = float_class_qnan,
.sign = sign,
.exp = INT_MAX,
};
}
-static void parts128_default_nan(FloatParts128 *p, float_status *status)
+static FloatParts128 parts128_default_nan(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);
+ FloatParts64 p64 = parts64_default_nan(status);
- *p = (FloatParts128) {
+ return (FloatParts128) {
.cls = float_class_qnan,
.sign = p64.sign,
.exp = INT_MAX,
*----------------------------------------------------------------------------*/
floatx80 floatx80_default_nan(float_status *status)
{
- floatx80 r;
/*
* Extrapolate from the choices made by parts64_default_nan to fill
* in the floatx80 format. We assume that floatx80's explicit
* integer bit is always set (this is true for i386 and m68k,
* which are the only real users of this format).
*/
- FloatParts64 p64;
- parts64_default_nan(&p64, status);
+ FloatParts64 p64 = parts64_default_nan(status);
- r.high = 0x7FFF | (p64.sign << 15);
- r.low = (1ULL << DECOMPOSED_BINARY_POINT) | p64.frac;
- return r;
+ return (floatx80) {
+ .high = 0x7FFF | (p64.sign << 15),
+ .low = (1ULL << DECOMPOSED_BINARY_POINT) | p64.frac,
+ };
}
/*----------------------------------------------------------------------------
if (floatx80_unpack_canonical(&p128, a, s)) {
p64 = parts128_to_parts64(&p128, s);
} else {
- parts64_default_nan(&p64, s);
+ p64 = parts64_default_nan(s);
}
return float32_round_pack_canonical(&p64, s);
}
if (floatx80_unpack_canonical(&p128, a, s)) {
p64 = parts128_to_parts64(&p128, s);
} else {
- parts64_default_nan(&p64, s);
+ p64 = parts64_default_nan(s);
}
return float64_round_pack_canonical(&p64, s);
}
if (floatx80_unpack_canonical(&p, a, s)) {
parts128_float_to_float(&p, s);
} else {
- parts128_default_nan(&p, s);
+ p = parts128_default_nan(s);
}
return float128_round_pack_canonical(&p, s);
}
FloatParts128 p;
if (!floatx80_unpack_canonical(&p, a, s)) {
- parts128_default_nan(&p, s);
+ p = parts128_default_nan(s);
}
return parts128_float_to_sint(&p, rmode, scale, INT32_MIN, INT32_MAX, s);
}
FloatParts128 p;
if (!floatx80_unpack_canonical(&p, a, s)) {
- parts128_default_nan(&p, s);
+ p = parts128_default_nan(s);
}
return parts128_float_to_sint(&p, rmode, scale, INT64_MIN, INT64_MAX, s);
}
d_nan:
float_raise(float_flag_invalid, s);
- parts64_default_nan(a, s);
+ *a = parts64_default_nan(s);
}
float32 float32_log2(float32 a, float_status *status)
float16 float16_default_nan(float_status *status)
{
- FloatParts64 p;
+ FloatParts64 p = parts64_default_nan(status);
- parts64_default_nan(&p, status);
p.frac >>= float16_params.frac_shift;
return pack_raw64(&p, &float16_params);
}
float32 float32_default_nan(float_status *status)
{
- FloatParts64 p;
+ FloatParts64 p = parts64_default_nan(status);
- parts64_default_nan(&p, status);
p.frac >>= float32_params.frac_shift;
return pack_raw64(&p, &float32_params);
}
float64 float64_default_nan(float_status *status)
{
- FloatParts64 p;
+ FloatParts64 p = parts64_default_nan(status);
- parts64_default_nan(&p, status);
p.frac >>= float64_params.frac_shift;
return pack_raw64(&p, &float64_params);
}
float128 float128_default_nan(float_status *status)
{
- FloatParts128 p;
+ FloatParts128 p = parts128_default_nan(status);
- parts128_default_nan(&p, status);
frac128_shr(&p, float128_params.frac_shift);
return float128_pack_raw(&p);
}
bfloat16 bfloat16_default_nan(float_status *status)
{
- FloatParts64 p;
+ FloatParts64 p = parts64_default_nan(status);
- parts64_default_nan(&p, status);
p.frac >>= bfloat16_params.frac_shift;
return pack_raw64(&p, &bfloat16_params);
}
*n = *r;
*cc = 1;
} else if (a->cls == float_class_inf || b->cls == float_class_zero) {
- parts64_default_nan(r, status);
+ *r = parts64_default_nan(status);
*n = *r;
*cc = 1;
status->float_exception_flags |= float_flag_invalid;