Delphi XE または XE2 で、非常に高速な Intel POPCNT 命令を使用して 16/32/64 ビット ワード内に 1 ビットのカウントを実装するにはどうすればよいですか? この命令に直接アクセスできるライブラリ ルーチンはありますか? 誰かがその使用法を示すデモ asm セクションを書いてくれませんか? 最後に、64 ビット Delphi のオプションは何ですか (asm は使用できません)。よろしくお願いします
質問する
1037 次
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 に答える