|
Boost Users : |
Subject: Re: [Boost-users] run-time integer log2
From: ajb_at_[hidden]
Date: 2010-07-14 22:13:03
G'day all.
Quoting joel falcou <joel.falcou_at_[hidden]>:
> In the good'ol Bits Twiddling Hacks page:
Many modern ISAs (at least EM64T, PPC and recent ARMs; these are just
the ones I know about) have a single-instruction priority encoder
usually called "count leading zeroes". In GCC, it's available as a
builtin:
uint64_t log2v = v == 1 ? 0 : 64 - __builtin_clzll(v - 1);
Note that this is branch free if your compiler is feeling speculative
and has a conditional move or skip instruction available. If not, it's
an easy branch to predict.
Andrew Bromage
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net