c语言包头文件bts,c – 使用bts汇编指令和gcc编译器
我想使用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编译器相关推荐
- ARM汇编指令学习---基于启动文件startup.S分析
本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...
- c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...
各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作.主要从以下几个方面进行介绍: 读取文件 写入文件 重命名文件 读取目录 读取目录下的文 ...
- c语言头文件中定义inline static相关函数的优劣
头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...
- linux c 判断文件打开文件,Linux 用C语言判断文件和文件夹
Linux 用C语言判断文件和文件夹 #include #include #include #include int access(const char *pathname, int mode); i ...
- c语言程序头文件作用,C语言头文件
C语言头文件教程 C 语言的头文件一般都是 .h 做为结尾的. C语言头文件详解 语法 #include 参数 参数 描述 filename 我们需要引入的头文件的名称. 说明 C 语言的头文件一般都 ...
- c语言课件 文件,C语言课件--文件.ppt
C语言课件--文件 例12-5 /*将字符串"apple", "grape", "pear" 写入到磁盘文件f12-5.txt中,然后再从该 ...
- c语言删除文件中的结构体_C语言插入、删除、更改文件内容
我们平时所见的文件,例如 txt.doc.mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件. 除了顺序文件,还有索引文件.散列文件等,一般用于特殊领域, ...
- 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
文章目录 一.追加键值对数据 二.更新键值对数据 三.完整代码示例 一.追加键值对数据 在上一篇博客 [C 语言]文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取 ...
- 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )
文章目录 一.文件名路径设置 二.文件打开方式 三.fputc 函数 | 按照字符方式写文件 1.fputc 函数 2.代码示例 四.fgetc 函数 | 按照字符方式读文件 1.fgetc 函数 2 ...
最新文章
- java中锁的介绍及运用
- Go的内存管理(最新学习)
- Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
- python字典类型可迭代_核心数据类型--字典
- Android应用程序的Activity启动过程简要介绍和学习计划 .
- c语言程序设计100题,编程题(c语言编程题库100题)
- 关于树莓派(一):如何让树莓派和笔记本直连SSH
- 6.5-6.7 理解线性方程组解的结构
- SVN 文件夹图标不显示问题的解决办法
- ubuntu 局域网连接
- cf修改游戏客户端是什么意思_cf封号原因是非法篡改游戏客户端是什么意思
- shell编程100例(附PDF下载)
- 当下非常火的VR全景展示到底是什么?
- 二维码扫描+长按识别二维码demo
- 郭禹缘:鲍威尔释放鹰派言论,国际黄金或跌势重启后市分析。
- Stetho调试神器使用
- Python backtrader回测之布林带策略
- 攻防世界——如来十三掌 give_you_flag
- 3884: 上帝与集合的正确用法 欧拉函数+降幂公式
- 超大XML文件怎么打开