如何在Delphi XE或XE2下使用非常快速的英特尔POPCNT指令在16/32/64位字内实现1位计数?是否存在可直接访问此指令的库例程?有人可以写一个演示asm部分来说明它的使用吗? 最后,64位Delphi有哪些选项(没有可用的asm)? 提前致谢 吨
答案 0 :(得分:2)
正如Rob Kennedy所说,这里有32位和64位Delphi IDE的功能。
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;