On 03/12/2015 09:29 AM, Richard Henderson wrote: > On 02/25/2015 02:45 AM, Markus Armbruster wrote: >> return 0x8000000000000000u >> (clz64(value - 1) - 1); > > I realize this was weeks ago, but it would certainly be preferable to shift a > small constant left than a large constant right. > > Most RISC machines can't form 0x8000000000000000ull without loading 1 and then > left shifting to start with. So end the end you're better off with > > return 1ull << (63 - clz64(value));
Since the value being shifted is a constant either way, can't gcc figure out the equivalence and generate the optimal code to begin with? If not, should it be opened as a gcc bug for potential optimization? -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature