[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 69/72] target/hexagon: Remove Double
From: |
Richard Henderson |
Subject: |
[PULL 69/72] target/hexagon: Remove Double |
Date: |
Tue, 24 Dec 2024 12:05:18 -0800 |
This structure, with bitfields, is incorrect for big-endian.
Use extract64 and deposit64 instead.
Reviewed-by: Brian Cain <brian.cain@oss.qualcomm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/hexagon/fma_emu.c | 46 ++++++++++++++--------------------------
1 file changed, 16 insertions(+), 30 deletions(-)
diff --git a/target/hexagon/fma_emu.c b/target/hexagon/fma_emu.c
index 2a8f72fee3..ddc793fe14 100644
--- a/target/hexagon/fma_emu.c
+++ b/target/hexagon/fma_emu.c
@@ -43,39 +43,29 @@
#define WAY_BIG_EXP 4096
-typedef union {
- double f;
- uint64_t i;
- struct {
- uint64_t mant:52;
- uint64_t exp:11;
- uint64_t sign:1;
- };
-} Double;
-
static uint64_t float64_getmant(float64 f64)
{
- Double a = { .i = f64 };
+ uint64_t mant = extract64(f64, 0, 52);
if (float64_is_normal(f64)) {
- return a.mant | 1ULL << 52;
+ return mant | 1ULL << 52;
}
if (float64_is_zero(f64)) {
return 0;
}
if (float64_is_denormal(f64)) {
- return a.mant;
+ return mant;
}
return ~0ULL;
}
int32_t float64_getexp(float64 f64)
{
- Double a = { .i = f64 };
+ int exp = extract64(f64, 52, 11);
if (float64_is_normal(f64)) {
- return a.exp;
+ return exp;
}
if (float64_is_denormal(f64)) {
- return a.exp + 1;
+ return exp + 1;
}
return -1;
}
@@ -346,6 +336,8 @@ float32 infinite_float32(uint8_t sign)
/* Return a maximum finite value with the requested sign */
static float64 accum_round_float64(Accum a, float_status *fp_status)
{
+ uint64_t ret;
+
if ((int128_gethi(a.mant) == 0) && (int128_getlo(a.mant) == 0)
&& ((a.guard | a.round | a.sticky) == 0)) {
/* result zero */
@@ -455,22 +447,16 @@ static float64 accum_round_float64(Accum a, float_status
*fp_status)
}
}
/* Underflow? */
- if (int128_getlo(a.mant) & (1ULL << DF_MANTBITS)) {
+ ret = int128_getlo(a.mant);
+ if (ret & (1ULL << DF_MANTBITS)) {
/* Leading one means: No, we're normal. So, we should be done... */
- Double ret;
- ret.i = 0;
- ret.sign = a.sign;
- ret.exp = a.exp;
- ret.mant = int128_getlo(a.mant);
- return ret.i;
+ ret = deposit64(ret, 52, 11, a.exp);
+ } else {
+ assert(a.exp == 1);
+ ret = deposit64(ret, 52, 11, 0);
}
- assert(a.exp == 1);
- Double ret;
- ret.i = 0;
- ret.sign = a.sign;
- ret.exp = 0;
- ret.mant = int128_getlo(a.mant);
- return ret.i;
+ ret = deposit64(ret, 63, 1, a.sign);
+ return ret;
}
float64 internal_mpyhh(float64 a, float64 b,
--
2.43.0
- [PULL 49/72] tcg/optimize: Use finish_folding in fold_bitsel_vec, (continued)
- [PULL 49/72] tcg/optimize: Use finish_folding in fold_bitsel_vec, Richard Henderson, 2024/12/24
- [PULL 53/72] tcg/optimize: Move fold_bitsel_vec into alphabetic sort, Richard Henderson, 2024/12/24
- [PULL 58/72] softfloat: Remove float_muladd_halve_result, Richard Henderson, 2024/12/24
- [PULL 60/72] softfloat: Add float_muladd_suppress_add_product_zero, Richard Henderson, 2024/12/24
- [PULL 61/72] target/hexagon: Use float32_mul in helper_sfmpy, Richard Henderson, 2024/12/24
- [PULL 64/72] target/hexagon: Use float32_muladd_scalbn for helper_sffma_sc, Richard Henderson, 2024/12/24
- [PULL 68/72] target/hexagon: Remove Float, Richard Henderson, 2024/12/24
- [PULL 44/72] tcg/optimize: Simplify sign bit test in fold_shift, Richard Henderson, 2024/12/24
- [PULL 56/72] target/arm: Use float*_muladd_scalbn, Richard Henderson, 2024/12/24
- [PULL 52/72] tcg/optimize: Re-enable sign-mask optimizations, Richard Henderson, 2024/12/24
- [PULL 69/72] target/hexagon: Remove Double,
Richard Henderson <=
- [PULL 70/72] target/hexagon: Use mulu64 for int128_mul_6464, Richard Henderson, 2024/12/24
- [PULL 51/72] tcg/optimize: Remove z_mask, s_mask from OptContext, Richard Henderson, 2024/12/24
- [PULL 67/72] target/hexagon: Expand GEN_XF_ROUND, Richard Henderson, 2024/12/24
- [PULL 72/72] accel/tcg: Move gen_intermediate_code to TCGCPUOps.translate_core, Richard Henderson, 2024/12/24
- [PULL 62/72] target/hexagon: Use float32_muladd for helper_sffma, Richard Henderson, 2024/12/24
- [PULL 63/72] target/hexagon: Use float32_muladd for helper_sffms, Richard Henderson, 2024/12/24
- [PULL 66/72] target/hexagon: Remove internal_fmafx, Richard Henderson, 2024/12/24
- [PULL 71/72] target/hexagon: Simplify internal_mpyhh setup, Richard Henderson, 2024/12/24
- [PULL 65/72] target/hexagon: Use float32_muladd for helper_sffm[as]_lib, Richard Henderson, 2024/12/24
- Re: [PULL 00/72] tcg patch queue, Stefan Hajnoczi, 2024/12/25