Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 875 → Rev 876

/uspace/trunk/softfloat/include/conversion.h
50,5 → 50,12
 
float32 uint64_to_float32(__u64 i);
float32 int64_to_float32(__s64 i);
 
float64 uint32_to_float64(__u32 i);
float64 int32_to_float64(__s32 i);
 
float64 uint64_to_float64(__u64 i);
float64 int64_to_float64(__s64 i);
 
#endif
 
/uspace/trunk/softfloat/generic/softfloat.c
263,6 → 263,10
}
double __floatsidf(int i)
{
float64 da;
da = int_to_float64(i);
return da.d;
}
float __floatdisf(long i)
274,6 → 278,10
}
double __floatdidf(long i)
{
float64 da;
da = long_to_float64(i);
return da.d;
}
float __floattisf(long long i)
285,6 → 293,10
}
double __floattidf(long long i)
{
float64 da;
da = longlong_to_float64(i);
return da.d;
}
 
float __floatunsisf(unsigned int i)
296,6 → 308,10
}
double __floatunsidf(unsigned int i)
{
float64 da;
da = uint_to_float64(i);
return da.d;
}
float __floatundisf(unsigned long i)
307,6 → 323,10
}
double __floatundidf(unsigned long i)
{
float64 da;
da = ulong_to_float64(i);
return da.d;
}
float __floatuntisf(unsigned long long i)
318,6 → 338,10
}
double __floatuntidf(unsigned long long i)
{
float64 da;
da = ulonglong_to_float64(i);
return da.d;
}
 
/* Comparison functions */
/uspace/trunk/softfloat/generic/conversion.c
386,7 → 386,6
return (__s32)_float64_to_uint64_helper(a);
}
 
/** Convert unsigned integer to float32
*
*
485,3 → 484,101
 
return result;
}
 
/** Convert unsigned integer to float64
*
*
*/
float64 uint32_to_float64(__u32 i)
{
int counter;
__s32 exp;
float64 result;
__u64 frac;
result.parts.sign = 0;
result.parts.fraction = 0;
 
counter = countZeroes32(i);
 
exp = FLOAT64_BIAS + 32 - counter - 1;
if (counter == 32) {
result.binary = 0;
return result;
}
frac = i;
frac <<= counter + 32 - 1;
 
roundFloat64(&exp, &frac);
 
result.parts.fraction = frac >> 10;
result.parts.exp = exp;
 
return result;
}
 
float64 int32_to_float64(__s32 i)
{
float64 result;
 
if (i < 0) {
result = uint32_to_float64((__u32)(-i));
} else {
result = uint32_to_float64((__u32)i);
}
result.parts.sign = i < 0;
 
return result;
}
 
 
float64 uint64_to_float64(__u64 i)
{
int counter;
__s32 exp;
float64 result;
result.parts.sign = 0;
result.parts.fraction = 0;
 
counter = countZeroes64(i);
 
exp = FLOAT64_BIAS + 64 - counter - 1;
if (counter == 64) {
result.binary = 0;
return result;
}
if (counter > 0) {
i <<= counter - 1;
} else {
i >>= 1;
}
 
roundFloat64(&exp, &i);
 
result.parts.fraction = i >> 10;
result.parts.exp = exp;
return result;
}
 
float64 int64_to_float64(__s64 i)
{
float64 result;
 
if (i < 0) {
result = uint64_to_float64((__u64)(-i));
} else {
result = uint64_to_float64((__u64)i);
}
result.parts.sign = i < 0;
 
return result;
}