加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

POPCNT在Delphi XE / XE2 64bit中

发布时间:2020-12-15 09:47:15 所属栏目:大数据 来源:网络整理
导读:如何在Delphi XE或XE2下使用非常快速的Intel POPCNT指令在16/32/64位字内实现1位计数?是否存在可直接访问此指令的库例程?有人可以写一个演示asm部分来说明它的使用吗? 最后,64位Delphi有哪些选项(没有可用的asm)? 提前致谢 ? 解决方法 随着Rob Kennedy的
如何在Delphi XE或XE2下使用非常快速的Intel POPCNT指令在16/32/64位字内实现1位计数?是否存在可直接访问此指令的库例程?有人可以写一个演示asm部分来说明它的使用吗?
最后,64位Delphi有哪些选项(没有可用的asm)?
提前致谢
?

解决方法

随着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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读