Andres Freund <and...@anarazel.de> writes: > On 2019-02-14 15:47:13 -0300, Alvaro Herrera wrote: >> Hah, I just realized you have to add -mlzcnt in order for these builtins >> to use the lzcnt instructions. It goes from something like >> >> bsrq %rax, %rax >> xorq $63, %rax
> I'm confused how this is a general count leading zero operation? Did you > use constants or something that allowed ot infer a range in the test? If > so the compiler probably did some optimizations allowing it to do the > above. No. If you compile int myclz(unsigned long long x) { return __builtin_clzll(x); } at -O2, on just about any x86_64 gcc, you will get myclz: .LFB1: .cfi_startproc bsrq %rdi, %rax xorq $63, %rax ret .cfi_endproc regards, tom lane