我想使用bts和bt x86汇编指令来加速Mac上C代码中的位操作.在

Windows上,_bittestandset和_bittest内在函数运行良好,并提供显着的性能提升.在Mac上,gcc编译器似乎不支持这些,所以我试图直接在汇编程序中执行它.

这是我的C代码(注意’bit’可以是> = 32):

typedef unsigned long LongWord;

#define DivLongWord(w) ((unsigned)w >> 5)

#define ModLongWord(w) ((unsigned)w & (32-1))

inline void SetBit(LongWord array[], const int bit)

{

array[DivLongWord(bit)] |= 1 << ModLongWord(bit);

}

inline bool TestBit(const LongWord array[], const int bit)

{

return (array[DivLongWord(bit)] & (1 << ModLongWord(bit))) != 0;

}

以下汇编程序代码可以工作,但不是最优的,因为编译器无法优化寄存器分配:

inline void SetBit(LongWord* array, const int bit)

{

__asm {

mov eax, bit

mov ecx, array

bts [ecx], eax

}

}

问题:如何使编译器完全优化bts指令?如何用bt指令替换TestBit?

c语言包头文件bts,c – 使用bts汇编指令和gcc编译器相关推荐

  1. ARM汇编指令学习---基于启动文件startup.S分析

    本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...

  2. c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...

    各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作.主要从以下几个方面进行介绍: 读取文件 写入文件 重命名文件 读取目录 读取目录下的文 ...

  3. c语言头文件中定义inline static相关函数的优劣

    头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...

  4. linux c 判断文件打开文件,Linux 用C语言判断文件和文件夹

    Linux 用C语言判断文件和文件夹 #include #include #include #include int access(const char *pathname, int mode); i ...

  5. c语言程序头文件作用,C语言头文件

    C语言头文件教程 C 语言的头文件一般都是 .h 做为结尾的. C语言头文件详解 语法 #include 参数 参数 描述 filename 我们需要引入的头文件的名称. 说明 C 语言的头文件一般都 ...

  6. c语言课件 文件,C语言课件--文件.ppt

    C语言课件--文件 例12-5 /*将字符串"apple", "grape", "pear" 写入到磁盘文件f12-5.txt中,然后再从该 ...

  7. c语言删除文件中的结构体_C语言插入、删除、更改文件内容

    我们平时所见的文件,例如 txt.doc.mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件. 除了顺序文件,还有索引文件.散列文件等,一般用于特殊领域, ...

  8. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )

    文章目录 一.追加键值对数据 二.更新键值对数据 三.完整代码示例 一.追加键值对数据 在上一篇博客 [C 语言]文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取 ...

  9. 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )

    文章目录 一.文件名路径设置 二.文件打开方式 三.fputc 函数 | 按照字符方式写文件 1.fputc 函数 2.代码示例 四.fgetc 函数 | 按照字符方式读文件 1.fgetc 函数 2 ...

最新文章

  1. java中锁的介绍及运用
  2. Go的内存管理(最新学习)
  3. Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
  4. python字典类型可迭代_核心数据类型--字典
  5. Android应用程序的Activity启动过程简要介绍和学习计划 .
  6. c语言程序设计100题,编程题(c语言编程题库100题)
  7. 关于树莓派(一):如何让树莓派和笔记本直连SSH
  8. 6.5-6.7 理解线性方程组解的结构
  9. SVN 文件夹图标不显示问题的解决办法
  10. ubuntu 局域网连接
  11. cf修改游戏客户端是什么意思_cf封号原因是非法篡改游戏客户端是什么意思
  12. shell编程100例(附PDF下载)
  13. 当下非常火的VR全景展示到底是什么?
  14. 二维码扫描+长按识别二维码demo
  15. 郭禹缘:鲍威尔释放鹰派言论,国际黄金或跌势重启后市分析。
  16. Stetho调试神器使用
  17. Python backtrader回测之布林带策略
  18. 攻防世界——如来十三掌 give_you_flag
  19. 3884: 上帝与集合的正确用法 欧拉函数+降幂公式
  20. 超大XML文件怎么打开

热门文章

  1. 绝绝子,画框架图就用这个工具
  2. SDL农场游戏开发 4.Crop类,作物的产生及成长
  3. IDEA WEB项目,网页出现乱码问题
  4. Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(三)
  5. 网络自动化之ZTP自动装机(H3C)
  6. FANSMI音乐下载器原理
  7. 重生之我要学习C++_Day1
  8. 数字化转型,你懂多少?(一)
  9. 深度linux笔记本独显,deepin V20 深度系统双显卡 独显 解决方案
  10. CAD外部参照是什么?最全CAD外部参照攻略!