mirror of
https://github.com/bkaradzic/bx.git
synced 2026-06-08 03:03:48 +00:00
Fixed Rgb9E5F decoding. Removed union cast in favor of bx::bitCast.
This commit is contained in:
33
src/dtoa.cpp
33
src/dtoa.cpp
@@ -606,12 +606,6 @@ namespace bx
|
||||
#define DOUBLE_PLUS_INFINITY UINT64_C(0x7ff0000000000000)
|
||||
#define DOUBLE_MINUS_INFINITY UINT64_C(0xfff0000000000000)
|
||||
|
||||
union HexDouble
|
||||
{
|
||||
double d;
|
||||
uint64_t u;
|
||||
};
|
||||
|
||||
#define lsr96(s2, s1, s0, d2, d1, d0) \
|
||||
d0 = ( (s0) >> 1) | ( ( (s1) & 1) << 31); \
|
||||
d1 = ( (s1) >> 1) | ( ( (s2) & 1) << 31); \
|
||||
@@ -932,13 +926,12 @@ namespace bx
|
||||
static double converter(PrepNumber* _pn)
|
||||
{
|
||||
int binexp = 92;
|
||||
HexDouble hd;
|
||||
uint32_t s2, s1, s0; /* 96-bit precision integer */
|
||||
uint32_t q2, q1, q0; /* 96-bit precision integer */
|
||||
uint32_t r2, r1, r0; /* 96-bit precision integer */
|
||||
uint32_t mask28 = UINT32_C(0xf) << 28;
|
||||
|
||||
hd.u = 0;
|
||||
uint64_t hdu = 0;
|
||||
|
||||
s0 = (uint32_t)(_pn->mantissa & UINT32_MAX);
|
||||
s1 = (uint32_t)(_pn->mantissa >> 32);
|
||||
@@ -1011,18 +1004,18 @@ namespace bx
|
||||
{
|
||||
if (_pn->negative)
|
||||
{
|
||||
hd.u = DOUBLE_MINUS_INFINITY;
|
||||
hdu = DOUBLE_MINUS_INFINITY;
|
||||
}
|
||||
else
|
||||
{
|
||||
hd.u = DOUBLE_PLUS_INFINITY;
|
||||
hdu = DOUBLE_PLUS_INFINITY;
|
||||
}
|
||||
}
|
||||
else if (binexp < 1)
|
||||
{
|
||||
if (_pn->negative)
|
||||
{
|
||||
hd.u = DOUBLE_MINUS_ZERO;
|
||||
hdu = DOUBLE_MINUS_ZERO;
|
||||
}
|
||||
}
|
||||
else if (s2)
|
||||
@@ -1039,10 +1032,10 @@ namespace bx
|
||||
q |= (1ULL << 63);
|
||||
}
|
||||
|
||||
hd.u = q;
|
||||
hdu = q;
|
||||
}
|
||||
|
||||
return hd.d;
|
||||
return bitCast<double>(hdu);
|
||||
}
|
||||
|
||||
int32_t toString(char* _out, int32_t _max, bool _value)
|
||||
@@ -1074,9 +1067,6 @@ namespace bx
|
||||
pn.negative = 0;
|
||||
pn.exponent = 0;
|
||||
|
||||
HexDouble hd;
|
||||
hd.u = DOUBLE_PLUS_ZERO;
|
||||
|
||||
switch (parser(_str.getPtr(), _str.getTerm(), &pn) )
|
||||
{
|
||||
case PARSER_OK:
|
||||
@@ -1084,22 +1074,19 @@ namespace bx
|
||||
break;
|
||||
|
||||
case PARSER_PZERO:
|
||||
*_out = hd.d;
|
||||
*_out = bitCast<double>(DOUBLE_PLUS_ZERO);
|
||||
break;
|
||||
|
||||
case PARSER_MZERO:
|
||||
hd.u = DOUBLE_MINUS_ZERO;
|
||||
*_out = hd.d;
|
||||
*_out = bitCast<double>(DOUBLE_MINUS_ZERO);
|
||||
break;
|
||||
|
||||
case PARSER_PINF:
|
||||
hd.u = DOUBLE_PLUS_INFINITY;
|
||||
*_out = hd.d;
|
||||
*_out = bitCast<double>(DOUBLE_PLUS_INFINITY);
|
||||
break;
|
||||
|
||||
case PARSER_MINF:
|
||||
hd.u = DOUBLE_MINUS_INFINITY;
|
||||
*_out = hd.d;
|
||||
*_out = bitCast<double>(DOUBLE_MINUS_INFINITY);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user