5

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

4

1 回答 1

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;
于 2012-05-29T15:21:58.157 回答