POPCNT在Delphi XE/XE2 64bit中

use*_*467 5 delphi assembly delphi-xe basm

如何在Delphi XE或XE2下使用非常快速的Intel POPCNT指令在16/32/64位字内实现1位计数?是否存在可直接访问此指令的库例程?有人可以写一个演示asm部分来说明它的使用吗?最后,64位Delphi有哪些选项(没有可用的asm)?提前谢谢

GJ.*_*GJ. 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;
Run Code Online (Sandbox Code Playgroud)

编辑:这是 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;
Run Code Online (Sandbox Code Playgroud)