[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 39/46] softfloat: Use add192 in mul128To256
From: |
Richard Henderson |
Subject: |
[PULL 39/46] softfloat: Use add192 in mul128To256 |
Date: |
Sun, 16 May 2021 07:34:24 -0500 |
We can perform the operation in 6 total adds instead of 8.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/fpu/softfloat-macros.h | 37 +++++++++++-----------------------
1 file changed, 12 insertions(+), 25 deletions(-)
diff --git a/include/fpu/softfloat-macros.h b/include/fpu/softfloat-macros.h
index f6dfbe108d..76327d844d 100644
--- a/include/fpu/softfloat-macros.h
+++ b/include/fpu/softfloat-macros.h
@@ -511,34 +511,21 @@ static inline void
| the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'.
*----------------------------------------------------------------------------*/
-static inline void
- mul128To256(
- uint64_t a0,
- uint64_t a1,
- uint64_t b0,
- uint64_t b1,
- uint64_t *z0Ptr,
- uint64_t *z1Ptr,
- uint64_t *z2Ptr,
- uint64_t *z3Ptr
- )
+static inline void mul128To256(uint64_t a0, uint64_t a1,
+ uint64_t b0, uint64_t b1,
+ uint64_t *z0Ptr, uint64_t *z1Ptr,
+ uint64_t *z2Ptr, uint64_t *z3Ptr)
{
- uint64_t z0, z1, z2, z3;
- uint64_t more1, more2;
+ uint64_t z0, z1, z2;
+ uint64_t m0, m1, m2, n1, n2;
- mul64To128( a1, b1, &z2, &z3 );
- mul64To128( a1, b0, &z1, &more2 );
- add128( z1, more2, 0, z2, &z1, &z2 );
- mul64To128( a0, b0, &z0, &more1 );
- add128( z0, more1, 0, z1, &z0, &z1 );
- mul64To128( a0, b1, &more1, &more2 );
- add128( more1, more2, 0, z2, &more1, &z2 );
- add128( z0, z1, 0, more1, &z0, &z1 );
- *z3Ptr = z3;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
+ mul64To128(a1, b0, &m1, &m2);
+ mul64To128(a0, b1, &n1, &n2);
+ mul64To128(a1, b1, &z2, z3Ptr);
+ mul64To128(a0, b0, &z0, &z1);
+ add192( 0, m1, m2, 0, n1, n2, &m0, &m1, &m2);
+ add192(m0, m1, m2, z0, z1, z2, z0Ptr, z1Ptr, z2Ptr);
}
/*----------------------------------------------------------------------------
--
2.25.1
- [PULL 24/46] softfloat: Use pointers with parts_silence_nan, (continued)
- [PULL 24/46] softfloat: Use pointers with parts_silence_nan, Richard Henderson, 2021/05/16
- [PULL 28/46] softfloat: Move return_nan to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 21/46] softfloat: Use pointers with ftype_pack_raw, Richard Henderson, 2021/05/16
- [PULL 30/46] softfloat: Move pick_nan_muladd to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 34/46] softfloat: Move addsub_floats to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 38/46] softfloat: Use mulu64 for mul64To128, Richard Henderson, 2021/05/16
- [PULL 27/46] softfloat: Convert float128_default_nan to parts, Richard Henderson, 2021/05/16
- [PULL 35/46] softfloat: Implement float128_add/sub via parts, Richard Henderson, 2021/05/16
- [PULL 37/46] softfloat: Move muladd_floats to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 32/46] softfloat: Move round_canonical to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 39/46] softfloat: Use add192 in mul128To256,
Richard Henderson <=
- [PULL 36/46] softfloat: Move mul_floats to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 41/46] softfloat: Introduce sh[lr]_double primitives, Richard Henderson, 2021/05/16
- [PULL 40/46] softfloat: Tidy mul128By64To192, Richard Henderson, 2021/05/16
- [PULL 42/46] softfloat: Move div_floats to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 45/46] softfloat: Move round_to_int to softfloat-parts.c.inc, Richard Henderson, 2021/05/16
- [PULL 44/46] softfloat: Convert float-to-float conversions with float128, Richard Henderson, 2021/05/16
- [PULL 43/46] softfloat: Split float_to_float, Richard Henderson, 2021/05/16