如何在 Delphi XE 或 XE2 下使用非常快的 Intel POPCNT 指令实现 16/32/64 位字内的 1 位计数?是否有库例程可以直接访问该指令?有人可以写一个演示汇编部分来说明其用法吗? 最后,64 位 Delphi 有哪些选项(没有可用的 asm)? 提前致谢 t
最佳答案
正如 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;
关于delphi - Delphi XE/XE2 64位中的POPCNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798051/