Branch data Line data Source code
1 : : /* s_ilogbf.c -- float version of s_ilogb.c.
2 : : * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3 : : */
4 : :
5 : : /*
6 : : * ====================================================
7 : : * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8 : : *
9 : : * Developed at SunPro, a Sun Microsystems, Inc. business.
10 : : * Permission to use, copy, modify, and distribute this
11 : : * software is freely granted, provided that this notice
12 : : * is preserved.
13 : : * ====================================================
14 : : */
15 : :
16 : : #include "cdefs-compat.h"
17 : : //__FBSDID("$FreeBSD: src/lib/msun/src/s_ilogbf.c,v 1.8 2008/02/22 02:30:35 das Exp $");
18 : :
19 : : #include <limits.h>
20 : : #include <openlibm_math.h>
21 : :
22 : : #include "math_private.h"
23 : :
24 : : OLM_DLLEXPORT int
25 : 368 : ilogbf(float x)
26 : : {
27 : : int32_t hx,ix;
28 : :
29 : 368 : GET_FLOAT_WORD(hx,x);
30 : 368 : hx &= 0x7fffffff;
31 [ + + ]: 368 : if(hx<0x00800000) {
32 [ + - ]: 1 : if(hx==0)
33 : 1 : return FP_ILOGB0;
34 : : else /* subnormal x */
35 [ # # ]: 0 : for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1;
36 : 0 : return ix;
37 : : }
38 [ + + ]: 367 : else if (hx<0x7f800000) return (hx>>23)-127;
39 [ + + ]: 3 : else if (hx>0x7f800000) return FP_ILOGBNAN;
40 : 2 : else return INT_MAX;
41 : : }
|