1208737Sjmallett/* Public domain.  */
2208737Sjmalletttypedef unsigned int USItype __attribute__ ((mode (SI)));
3208737Sjmalletttypedef int DItype __attribute__ ((mode (DI)));
4208737Sjmalletttypedef unsigned int UDItype __attribute__ ((mode (DI)));
5208737Sjmalletttypedef float DFtype __attribute__ ((mode (DF)));
6208737Sjmallett
7208737SjmallettDItype __fixdfdi (DFtype);
8208737Sjmallett
9208737Sjmallett/* This version is needed to prevent recursion; fixunsdfdi in libgcc
10208737Sjmallett   calls fixdfdi, which in turn calls calls fixunsdfdi.  */
11208737Sjmallett
12208737Sjmallettstatic DItype
13208737Sjmallettlocal_fixunsdfdi (DFtype a)
14208737Sjmallett{
15208737Sjmallett  USItype hi, lo;
16208737Sjmallett
17208737Sjmallett  hi = a / (((UDItype) 1) << (sizeof (USItype) * 8));
18208737Sjmallett  lo = a - ((DFtype) hi) * (((UDItype) 1) << (sizeof (USItype) * 8));
19208737Sjmallett  return ((UDItype) hi << (sizeof (USItype) * 8)) | lo;
20208737Sjmallett}
21208737Sjmallett
22208737SjmallettDItype
23208737Sjmallett__fixdfdi (DFtype a)
24208737Sjmallett{
25208737Sjmallett  if (a < 0)
26208737Sjmallett    return - local_fixunsdfdi (-a);
27208737Sjmallett  return local_fixunsdfdi (a);
28208737Sjmallett}
29