target/hexagon: Remove Float

This structure, with bitfields, is incorrect for big-endian.
Use the existing float32_getexp_raw which uses extract32.

Reviewed-by: Brian Cain <brian.cain@oss.qualcomm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2024-12-08 15:23:36 -06:00
parent 795d6a2c49
commit fefc9702e6

View File

@ -53,16 +53,6 @@ typedef union {
}; };
} Double; } 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) static uint64_t float64_getmant(float64 f64)
{ {
Double a = { .i = f64 }; Double a = { .i = f64 };
@ -92,12 +82,12 @@ int32_t float64_getexp(float64 f64)
int32_t float32_getexp(float32 f32) int32_t float32_getexp(float32 f32)
{ {
Float a = { .i = f32 }; int exp = float32_getexp_raw(f32);
if (float32_is_normal(f32)) { if (float32_is_normal(f32)) {
return a.exp; return exp;
} }
if (float32_is_denormal(f32)) { if (float32_is_denormal(f32)) {
return a.exp + 1; return exp + 1;
} }
return -1; return -1;
} }