… | |
… | |
22 | |
22 | |
23 | e = w.u; |
23 | e = w.u; |
24 | } |
24 | } |
25 | |
25 | |
26 | #if !HAVE_GCC_BUILTINS |
26 | #if !HAVE_GCC_BUILTINS |
27 | int ctz (unsigned int x) |
27 | int ctz (unsigned int x) CONST |
28 | { |
28 | { |
29 | int r = 0; |
29 | int r = 0; |
30 | |
30 | |
31 | x &= -x; // this isolates the lowest bit |
31 | x &= -x; // this isolates the lowest bit |
32 | |
32 | |
… | |
… | |
37 | if (x & 0xffff0000) r += 16; |
37 | if (x & 0xffff0000) r += 16; |
38 | |
38 | |
39 | return r; |
39 | return r; |
40 | } |
40 | } |
41 | |
41 | |
42 | int popcount (unsigned int x) |
42 | int popcount (unsigned int x) CONST |
43 | { |
43 | { |
44 | x -= (x >> 1) & 0x55555555; |
44 | x -= (x >> 1) & 0x55555555; |
45 | x = ((x >> 2) & 0x33333333) + (x & 0x33333333); |
45 | x = ((x >> 2) & 0x33333333) + (x & 0x33333333); |
46 | x = ((x >> 4) + x) & 0x0f0f0f0f; |
46 | x = ((x >> 4) + x) & 0x0f0f0f0f; |
47 | x *= 0x01010101; |
47 | x *= 0x01010101; |