在Delphi XE或XE2下如何使用快速的Intel POPCNT指令计算16/32/64位字中1比特的数量?是否有一个库例程可以直接访问这个指令?能否有人编写一个演示汇编代码段来说明它的使用方法?最后,64位Delphi的选项是什么(无可用汇编)?
function GetBitCount(num: integer): integer;
asm
POPCNT eax, num
end;
function GetBitCount(num: Int64): integer;
asm
POPCNT rax, num
end;
编辑: 这是32位和64位Delphi兼容版本
{$IF CompilerVersion < 23} //pre-XE2
NativeInt = integer;
{$IFEND}
function GetBitCount(num: NativeInt): integer;
asm
{$IFNDEF CPUX64}
POPCNT eax, num
{$ELSE CPUX64}
POPCNT rax, num
{$ENDIF CPUX64}
end;
popcnt eax, eax
或popcnt rax, rcx
那么简单,是吗? - Rob Kennedy