1*e4b17023SJohn Marino /* Public domain. */ 2*e4b17023SJohn Marino typedef int SItype __attribute__ ((mode (SI))); 3*e4b17023SJohn Marino typedef unsigned int USItype __attribute__ ((mode (SI))); 4*e4b17023SJohn Marino typedef float SFtype __attribute__ ((mode (SF))); 5*e4b17023SJohn Marino 6*e4b17023SJohn Marino SFtype __floatunsisf(USItype u)7*e4b17023SJohn Marino__floatunsisf (USItype u) 8*e4b17023SJohn Marino { 9*e4b17023SJohn Marino SItype s = (SItype) u; 10*e4b17023SJohn Marino if (s < 0) 11*e4b17023SJohn Marino { 12*e4b17023SJohn Marino /* As in expand_float, compute (u & 1) | (u >> 1) to ensure 13*e4b17023SJohn Marino correct rounding if a nonzero bit is shifted out. */ 14*e4b17023SJohn Marino return (SFtype) 2.0 * (SFtype) (SItype) ((u & 1) | (u >> 1)); 15*e4b17023SJohn Marino } 16*e4b17023SJohn Marino else 17*e4b17023SJohn Marino return (SFtype) s; 18*e4b17023SJohn Marino } 19