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>