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