Messages in this thread |  | | Date | Sat, 24 Aug 2002 10:05:36 -0500 | From | Oliver Xymoron <> | Subject | Re: [PATCH] (1/7) entropy, take 2 - log2 |
| |
On Sat, Aug 24, 2002 at 11:22:10AM +0200, Abramo Bagnara wrote: > Oliver Xymoron wrote: > > > >> +static inline __u32 int_log2_16bits(__u32 word) > > { > > /* Smear msbit right to make an n-bit mask */ > > word |= word >> 8; > > word |= word >> 4; > > word |= word >> 2; > > word |= word >> 1; ... > > + return hweight16(word)-1; > > } > > -#endif > > I suggest you to use a more efficient version like that below: > > static inline int ld2_16(__u16 v) > { > unsigned r = 0; > > if (v >= 0x100) { > v >>= 8; > r += 8; > } > if (v >= 0x10) { > v >>= 4; > r += 4; > } > if (v >= 4) { > v >>= 2; > r += 2; > } > if (v >= 2) > r++; > return r;
Four branches are almost certainly less efficient. In any case, the intent above is not to optimize the code, but to replace it with a call to identical code that exists in bitops so that optimizations can be made globally, and arch-specific if necessary.
-- "Love the dolphins," she advised him. "Write by W.A.S.T.E.." - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |