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 に答える