Message ID | 20241208224844.570491-15-richard.henderson@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | softfloat, hexagon: Cleanup fmaf | expand |
On 12/8/2024 4:48 PM, Richard Henderson wrote: > This structure, with bitfields, is incorrect for big-endian. > Use the existing float32_getexp_raw which uses extract32. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/hexagon/fma_emu.c | 16 +++------------- > 1 file changed, 3 insertions(+), 13 deletions(-) > > diff --git a/target/hexagon/fma_emu.c b/target/hexagon/fma_emu.c > index bce3bd4dfb..c359eecffd 100644 > --- a/target/hexagon/fma_emu.c > +++ b/target/hexagon/fma_emu.c > @@ -53,16 +53,6 @@ typedef union { > }; > } Double; > > -typedef union { > - float f; > - uint32_t i; > - struct { > - uint32_t mant:23; > - uint32_t exp:8; > - uint32_t sign:1; > - }; > -} Float; > - > static uint64_t float64_getmant(float64 f64) > { > Double a = { .i = f64 }; > @@ -92,12 +82,12 @@ int32_t float64_getexp(float64 f64) > > int32_t float32_getexp(float32 f32) > { > - Float a = { .i = f32 }; > + int exp = float32_getexp_raw(f32); > if (float32_is_normal(f32)) { > - return a.exp; > + return exp; > } > if (float32_is_denormal(f32)) { > - return a.exp + 1; > + return exp + 1; > } > return -1; > } Reviewed-by: Brian Cain <brian.cain@oss.qualcomm.com>
diff --git a/target/hexagon/fma_emu.c b/target/hexagon/fma_emu.c index bce3bd4dfb..c359eecffd 100644 --- a/target/hexagon/fma_emu.c +++ b/target/hexagon/fma_emu.c @@ -53,16 +53,6 @@ typedef union { }; } Double; -typedef union { - float f; - uint32_t i; - struct { - uint32_t mant:23; - uint32_t exp:8; - uint32_t sign:1; - }; -} Float; - static uint64_t float64_getmant(float64 f64) { Double a = { .i = f64 }; @@ -92,12 +82,12 @@ int32_t float64_getexp(float64 f64) int32_t float32_getexp(float32 f32) { - Float a = { .i = f32 }; + int exp = float32_getexp_raw(f32); if (float32_is_normal(f32)) { - return a.exp; + return exp; } if (float32_is_denormal(f32)) { - return a.exp + 1; + return exp + 1; } return -1; }
This structure, with bitfields, is incorrect for big-endian. Use the existing float32_getexp_raw which uses extract32. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/hexagon/fma_emu.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-)