mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
mesa: fix strict aliasing issues in half-to-float/float-to-half conversions
use union instead of casts
This commit is contained in:
parent
7d9b2edb97
commit
c36d1aacf4
1 changed files with 9 additions and 8 deletions
|
|
@ -460,7 +460,7 @@ _mesa_inv_sqrtf(float n)
|
|||
#if 0 /* not used, see below -BP */
|
||||
float r3, x3, y3;
|
||||
#endif
|
||||
union { float f; unsigned int i; } u;
|
||||
fi_type u;
|
||||
unsigned int magic;
|
||||
|
||||
/*
|
||||
|
|
@ -649,10 +649,10 @@ _mesa_bitcount(unsigned int n)
|
|||
GLhalfARB
|
||||
_mesa_float_to_half(float val)
|
||||
{
|
||||
const int flt = *((int *) (void *) &val);
|
||||
const int flt_m = flt & 0x7fffff;
|
||||
const int flt_e = (flt >> 23) & 0xff;
|
||||
const int flt_s = (flt >> 31) & 0x1;
|
||||
const fi_type fi = {val};
|
||||
const int flt_m = fi.i & 0x7fffff;
|
||||
const int flt_e = (fi.i >> 23) & 0xff;
|
||||
const int flt_s = (fi.i >> 31) & 0x1;
|
||||
int s, e, m = 0;
|
||||
GLhalfARB result;
|
||||
|
||||
|
|
@ -739,7 +739,8 @@ _mesa_half_to_float(GLhalfARB val)
|
|||
const int m = val & 0x3ff;
|
||||
const int e = (val >> 10) & 0x1f;
|
||||
const int s = (val >> 15) & 0x1;
|
||||
int flt_m, flt_e, flt_s, flt;
|
||||
int flt_m, flt_e, flt_s;
|
||||
fi_type fi;
|
||||
float result;
|
||||
|
||||
/* sign bit */
|
||||
|
|
@ -774,8 +775,8 @@ _mesa_half_to_float(GLhalfARB val)
|
|||
flt_m = m << 13;
|
||||
}
|
||||
|
||||
flt = (flt_s << 31) | (flt_e << 23) | flt_m;
|
||||
result = *((float *) (void *) &flt);
|
||||
fi.i = (flt_s << 31) | (flt_e << 23) | flt_m;
|
||||
result = fi.f;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue