Wer kam eigentlich auf die gloriose Idee, dass 
bsr/
BitScanReverse nichts mehr taugt um man jetzt Nullen zählt? In 99% der Fälle, in dem ich diesen Befehl brauche, will ich genau das machen was Schrompf auch machen will: Den Index des höchsten Bits. Nichts anderes. Niemand will 0en zählen. Warum sollte man auch 
von oben die Anzahl Nullen zählen wollen? Der Index des höchsten Bits hat zudem eine einfache mathematische Interpretation: Es ist die Abrundung von 
log2. 
log2 von 0 gibts halt nicht, tja. Das zu 64, 0 oder sonst was zu setzen, macht es nicht unbedingt sinnvoller, denn eine Verzweigung braucht man in fast allen Anwendungsfällen ohnehin. Wenn 
1/0 bereits 
Undefined Behaviour ist, dann halt auch 
bsr(0).
Der Effekt des ganzen Müll ist, dass Clang intern nur 0en zählen kann. Dabei kommt dann unter anderem raus, dass
Code: Alles auswählen
char Func(unsigned DataOffset)
{
	return 31 ^ __builtin_clz(DataOffset);
}
zu
Code: Alles auswählen
Func(unsigned int):
        bsr     eax, edi
        xor     eax, 31
        xor     al, 31
        ret
kompiliert. Super Ergebnis, gratuliere.
Ein entsprechender Bug Report von mir dazu, existiert seit einem halben Jahr: 
https://bugs.llvm.org/show_bug.cgi?id=47603.