29 lines
753 B
C
29 lines
753 B
C
|
/* Public domain. */
|
||
|
typedef unsigned int USItype __attribute__ ((mode (SI)));
|
||
|
typedef int DItype __attribute__ ((mode (DI)));
|
||
|
typedef unsigned int UDItype __attribute__ ((mode (DI)));
|
||
|
typedef float DFtype __attribute__ ((mode (DF)));
|
||
|
|
||
|
DItype __fixdfdi (DFtype);
|
||
|
|
||
|
/* This version is needed to prevent recursion; fixunsdfdi in libgcc
|
||
|
calls fixdfdi, which in turn calls calls fixunsdfdi. */
|
||
|
|
||
|
static DItype
|
||
|
local_fixunsdfdi (DFtype a)
|
||
|
{
|
||
|
USItype hi, lo;
|
||
|
|
||
|
hi = a / (((UDItype) 1) << (sizeof (USItype) * 8));
|
||
|
lo = a - ((DFtype) hi) * (((UDItype) 1) << (sizeof (USItype) * 8));
|
||
|
return ((UDItype) hi << (sizeof (USItype) * 8)) | lo;
|
||
|
}
|
||
|
|
||
|
DItype
|
||
|
__fixdfdi (DFtype a)
|
||
|
{
|
||
|
if (a < 0)
|
||
|
return - local_fixunsdfdi (-a);
|
||
|
return local_fixunsdfdi (a);
|
||
|
}
|