2 #if __LDBL_MANT_DIG__ == 106 || __LDBL_MANT_DIG__ == 113
3 typedef int DItype __attribute__ ((mode (DI)));
4 typedef int SItype __attribute__ ((mode (SI)));
5 typedef unsigned int UDItype __attribute__ ((mode (DI)));
6 typedef unsigned int USItype __attribute__ ((mode (SI)));
7 typedef float TFtype __attribute__ ((mode (TF)));
9 DItype __fixunstfdi (TFtype);
12 __fixunstfdi (TFtype a)
17 /* Compute high word of result, as a flonum. */
18 const TFtype b = (a / (((UDItype) 1) << (sizeof (SItype) * 8)));
19 /* Convert that to fixed (but not to DItype!),
20 and shift it into the high word. */
21 UDItype v = (USItype) b;
22 v <<= (sizeof (SItype) * 8);
23 /* Remove high part from the TFtype, leaving the low part as flonum. */
25 /* Convert that to fixed (but not to DItype!) and add it in.
26 Sometimes A comes out negative. This is significant, since
27 A has more bits than a long int does. */