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 SFtype __attribute__ ((mode (SF)));
6208737Sjmalletttypedef float DFtype __attribute__ ((mode (DF)));
7208737Sjmallett
8208737SjmallettDItype __fixsfdi (SFtype);
9208737Sjmallett
10208737Sjmallett/* This version is needed to prevent recursion; fixunssfdi in libgcc
11208737Sjmallett   calls fixsfdi, which in turn calls calls fixunssfdi.  */
12208737Sjmallett
13208737Sjmallettstatic DItype
14208737Sjmallettlocal_fixunssfdi (SFtype original_a)
15208737Sjmallett{
16208737Sjmallett  DFtype a = original_a;
17208737Sjmallett  USItype hi, lo;
18208737Sjmallett
19208737Sjmallett  hi = a / (((UDItype) 1) << (sizeof (USItype) * 8));
20208737Sjmallett  lo = a - ((DFtype) hi) * (((UDItype) 1) << (sizeof (USItype) * 8));
21208737Sjmallett  return ((UDItype) hi << (sizeof (USItype) * 8)) | lo;
22208737Sjmallett}
23208737Sjmallett
24208737SjmallettDItype
25208737Sjmallett__fixsfdi (SFtype a)
26208737Sjmallett{
27208737Sjmallett  if (a < 0)
28208737Sjmallett    return - local_fixunssfdi (-a);
29208737Sjmallett  return local_fixunssfdi (a);
30208737Sjmallett}
31