/*
* Multiply A by 2 raised to the power N.
*/
-static void partsN(scalbn)(FloatPartsN *a, int n, float_status *s)
+FloatPartsN partsN(scalbn)(const FloatPartsN *a, int n, float_status *s)
{
switch (a->cls) {
case float_class_snan:
case float_class_qnan:
- *a = partsN(return_nan)(a, s);
- break;
+ return partsN(return_nan)(a, s);
case float_class_zero:
case float_class_inf:
- break;
+ return *a;
case float_class_denormal:
float_raise(float_flag_input_denormal_used, s);
/* fall through */
case float_class_normal:
- a->exp += MIN(MAX(n, -0x10000), 0x10000);
- break;
+ {
+ FloatPartsN r = *a;
+ r.exp += MIN(MAX(n, -0x10000), 0x10000);
+ return r;
+ }
default:
g_assert_not_reached();
}
/* Before rounding, scale. */
if (scale) {
- parts64_scalbn(pr, scale, status);
+ *pr = parts64_scalbn(pr, scale, status);
}
parts64_uncanon(pr, status, &float16_params, false);
/* After rounding, apply negate result, especially for -0.0. */
/* Before rounding, scale. */
if (scale) {
- parts64_scalbn(pr, scale, status);
+ *pr = parts64_scalbn(pr, scale, status);
}
parts64_uncanon(pr, status, &float32_params, false);
/* After rounding, apply negate result, especially for -0.0. */
/* Before rounding, scale. */
if (scale) {
- parts64_scalbn(pr, scale, status);
+ *pr = parts64_scalbn(pr, scale, status);
}
parts64_uncanon(pr, status, &float64_params, false);
/* After rounding, apply negate result, especially for -0.0. */
{
FloatParts64 p = float16_unpack_canonical(a, status);
- parts64_scalbn(&p, n, status);
+ p = parts64_scalbn(&p, n, status);
return float16_round_pack_canonical(&p, status);
}
{
FloatParts64 p = float32_unpack_canonical(a, status);
- parts64_scalbn(&p, n, status);
+ p = parts64_scalbn(&p, n, status);
return float32_round_pack_canonical(&p, status);
}
{
FloatParts64 p = float64_unpack_canonical(a, status);
- parts64_scalbn(&p, n, status);
+ p = parts64_scalbn(&p, n, status);
return float64_round_pack_canonical(&p, status);
}
{
FloatParts64 p = bfloat16_unpack_canonical(a, status);
- parts64_scalbn(&p, n, status);
+ p = parts64_scalbn(&p, n, status);
return bfloat16_round_pack_canonical(&p, status);
}
{
FloatParts128 p = float128_unpack_canonical(a, status);
- parts128_scalbn(&p, n, status);
+ p = parts128_scalbn(&p, n, status);
return float128_round_pack_canonical(&p, status);
}
if (!floatx80_unpack_canonical(&p, a, status)) {
return floatx80_default_nan(status);
}
- parts128_scalbn(&p, n, status);
+ p = parts128_scalbn(&p, n, status);
return floatx80_round_pack_canonical(&p, status);
}