Davon abgesehen ist in meinem originalem Code der Parameter "Value" mit Absicht als Cardinal deklariert. Der kann garnicht < 0 werden, mal abgesehen davon das ältere Delphi Versionen den vorzeichenlosen Cardinal als vorzeichenbehafteten Integer interpretierten.
Wenn du
ASM benutzen möchtest dann so
Delphi-Quellcode:
function IsPowerOfTwo(Value: Cardinal): Boolean;
assembler;
asm
LEA EDX, EAX -1
AND EAX, EDX
SETZ AL
end;
Diese Funktion dürfte die am schnellsten ausführbare auf heutigen Intel CPUs sein, also auch Branch frei. Allerdings wird der Wert 0 auch als Potenz von 2 betrachtet.
Deine BSF/BSR Opcodes sind "arsch langsam"
Gruß Hagen