I've come up with this:
Code:
typedef union _pawkfdunion
{
pawkfd num;
pawku val;
pawcu raw[sizeof(pawkfd)];
} pawkfdunion;
static pawvu pawkfd_man_len = 0;
PAWSTR_API pawvu pawkfdexp( pawkfd src )
{
pawvu i = pawkfd_man_len;
pawkfdunion kfd = {0};
if ( !i )
{
# ifdef PAWKFD_INF
kfd.num = PAWKFD_INF;
kfd.num--;
# else
kfd.num = PAWKFD_MAX;
# endif
kfd.raw[sizeof(pawkfd)-1] &= PAWCD_MAX;
for ( ; kfd.val & 1u; ++i, kfd.val >>= 1 );
pawkfd_man_len = i;
}
kfd.num = src;
kfd.raw[sizeof(pawkfd)-1] &= PAWCD_MAX;
return (kfd.val >> i);
}
Assume pawku means __uint128, pawkfd means _Float128x & pawcu always means unsigned char, does anyone see any potential issues with this?