Subversion Repositories HelenOS-historic

Rev

Rev 771 | Rev 1310 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 771 Rev 772
Line 38... Line 38...
38
 */
38
 */
39
static inline int fnzb32(__u32 arg)
39
static inline int fnzb32(__u32 arg)
40
{
40
{
41
    int n = 0;
41
    int n = 0;
42
 
42
 
43
    if (arg & 0xffff0000) { arg >>= 16;n += 16;}
43
    if (arg >> 16) { arg >>= 16;n += 16;}
44
    if (arg & 0xff00) { arg >>= 8; n += 8;}
44
    if (arg >> 8) { arg >>= 8; n += 8;}
45
    if (arg & 0xf0) { arg >>= 4; n += 4;}
45
    if (arg >> 4) { arg >>= 4; n += 4;}
46
    if (arg & 0xc) { arg >>= 2; n+=2;}
46
    if (arg >> 2) { arg >>= 2; n+=2;}
47
    if (arg & 0x2) { arg >>= 1; n+=1;}
47
    if (arg >> 1) { arg >>= 1; n+=1;}
48
    return n;
48
    return n;
49
}
49
}
50
 
50
 
51
static inline int fnzb64(__u64 arg)
51
static inline int fnzb64(__u64 arg)
52
{
52
{
53
    int n = 0;
53
    int n = 0;
54
 
54
 
55
    /* This is because mips complains about big numbers,
-
 
56
     * other platforms should optimize it out */
-
 
57
    __u64 oper = 0xffffffff;
-
 
58
    oper <<= 32;
-
 
59
 
-
 
60
    if (arg & oper) { arg >>= 32;n += 32;}
55
    if (arg >> 32) { arg >>= 32;n += 32;}
61
    return n + fnzb32((__u32) arg);
56
    return n + fnzb32((__u32) arg);
62
}
57
}
63
 
58
 
64
#define fnzb(x) fnzb32(x)
59
#define fnzb(x) fnzb32(x)
65
 
60