1*05a0b428SJohn Marino /* s_ilogbf.c -- float version of s_ilogb.c. 2*05a0b428SJohn Marino * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3*05a0b428SJohn Marino */ 4*05a0b428SJohn Marino 5*05a0b428SJohn Marino /* 6*05a0b428SJohn Marino * ==================================================== 7*05a0b428SJohn Marino * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 8*05a0b428SJohn Marino * 9*05a0b428SJohn Marino * Developed at SunPro, a Sun Microsystems, Inc. business. 10*05a0b428SJohn Marino * Permission to use, copy, modify, and distribute this 11*05a0b428SJohn Marino * software is freely granted, provided that this notice 12*05a0b428SJohn Marino * is preserved. 13*05a0b428SJohn Marino * ==================================================== 14*05a0b428SJohn Marino */ 15*05a0b428SJohn Marino 16*05a0b428SJohn Marino #include "math.h" 17*05a0b428SJohn Marino #include "math_private.h" 18*05a0b428SJohn Marino 19*05a0b428SJohn Marino int 20*05a0b428SJohn Marino ilogbf(float x) 21*05a0b428SJohn Marino { 22*05a0b428SJohn Marino int32_t hx,ix; 23*05a0b428SJohn Marino 24*05a0b428SJohn Marino GET_FLOAT_WORD(hx,x); 25*05a0b428SJohn Marino hx &= 0x7fffffff; 26*05a0b428SJohn Marino if(hx<0x00800000) { 27*05a0b428SJohn Marino if(hx==0) 28*05a0b428SJohn Marino return 0x80000001; /* ilogb(0) = 0x80000001 */ 29*05a0b428SJohn Marino else /* subnormal x */ 30*05a0b428SJohn Marino for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1; 31*05a0b428SJohn Marino return ix; 32*05a0b428SJohn Marino } 33*05a0b428SJohn Marino else if (hx<0x7f800000) return (hx>>23)-127; 34*05a0b428SJohn Marino else return 0x7fffffff; 35*05a0b428SJohn Marino } 36