[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 22/28] softfloat: Convert floatx80_scalbn to FloatParts
From: |
Richard Henderson |
Subject: |
[PATCH v2 22/28] softfloat: Convert floatx80_scalbn to FloatParts |
Date: |
Tue, 25 May 2021 08:07:00 -0700 |
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
fpu/softfloat.c | 50 +++++++++++--------------------------------------
1 file changed, 11 insertions(+), 39 deletions(-)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 52a9aa1837..0d1d9df70d 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -3914,6 +3914,17 @@ float128 float128_scalbn(float128 a, int n, float_status
*status)
return float128_round_pack_canonical(&p, status);
}
+floatx80 floatx80_scalbn(floatx80 a, int n, float_status *status)
+{
+ FloatParts128 p;
+
+ if (!floatx80_unpack_canonical(&p, a, status)) {
+ return floatx80_default_nan(status);
+ }
+ parts_scalbn(&p, n, status);
+ return floatx80_round_pack_canonical(&p, status);
+}
+
/*
* Square Root
*/
@@ -5748,45 +5759,6 @@ FloatRelation floatx80_compare_quiet(floatx80 a,
floatx80 b,
return floatx80_compare_internal(a, b, 1, status);
}
-floatx80 floatx80_scalbn(floatx80 a, int n, float_status *status)
-{
- bool aSign;
- int32_t aExp;
- uint64_t aSig;
-
- if (floatx80_invalid_encoding(a)) {
- float_raise(float_flag_invalid, status);
- return floatx80_default_nan(status);
- }
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
-
- if ( aExp == 0x7FFF ) {
- if ( aSig<<1 ) {
- return propagateFloatx80NaN(a, a, status);
- }
- return a;
- }
-
- if (aExp == 0) {
- if (aSig == 0) {
- return a;
- }
- aExp++;
- }
-
- if (n > 0x10000) {
- n = 0x10000;
- } else if (n < -0x10000) {
- n = -0x10000;
- }
-
- aExp += n;
- return normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
- aSign, aExp, aSig, 0, status);
-}
-
static void __attribute__((constructor)) softfloat_init(void)
{
union_float64 ua, ub, uc, ur;
--
2.25.1
- [PATCH v2 10/28] softfloat: Introduce Floatx80RoundPrec, (continued)
- [PATCH v2 10/28] softfloat: Introduce Floatx80RoundPrec, Richard Henderson, 2021/05/25
- [PATCH v2 15/28] softfloat: Convert floatx80_div to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 18/28] softfloat: Convert floatx80_round_to_int to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 17/28] softfloat: Convert floatx80_round to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 21/28] softfloat: Convert floatx80 to integer to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 20/28] softfloat: Convert floatx80 float conversions to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 28/28] softfloat: Use hard-float for {u}int64_to_float{32, 64}, Richard Henderson, 2021/05/25
- [PATCH v2 27/28] tests/fp: Enable more tests, Richard Henderson, 2021/05/25
- [PATCH v2 14/28] softfloat: Convert floatx80_mul to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 13/28] softfloat: Convert floatx80_add/sub to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 22/28] softfloat: Convert floatx80_scalbn to FloatParts,
Richard Henderson <=
- [PATCH v2 16/28] softfloat: Convert floatx80_sqrt to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 25/28] softfloat: Move floatN_log2 to softfloat-parts.c.inc, Richard Henderson, 2021/05/25
- [PATCH v2 24/28] softfloat: Convert float32_exp2 to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 19/28] softfloat: Convert integer to floatx80 to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 23/28] softfloat: Convert floatx80 compare to FloatParts, Richard Henderson, 2021/05/25
- [PATCH v2 26/28] softfloat: Convert modrem operations to FloatParts, Richard Henderson, 2021/05/25
- Re: [PATCH v2 00/28] Convert floatx80 and float128 to FloatParts, no-reply, 2021/05/25