如何让`gcc`从标准C生成x86-64的`bts`指令?

Nor*_*sey 17 c gcc x86-64

最近一个问题的启发,我想知道是否有人知道如何在Linux x86-64平台上gcc生成x86-64 bts指令(位测试和设置),而无需借助内联汇编或非标准编译器内在函数.

相关问题:

可移植性比bts我更重要,所以我不会使用和asm指令,如果有另一个解决方案,我宁愿不使用编译器instrinsics.

编辑:C源语言不支持原子操作,所以我对获得原子测试和设置并不特别感兴趣(尽管这是测试和设置首先存在的原始原因).如果我想要一些原子,我知道我没有机会使用标准C源:它必须是内在的,库函数或内联汇编.(我在支持多线程的编译器中实现了原子操作.)

DJ *_*lis 0

我相信(但不确定)C++ 或 C 标准还没有任何针对这些类型的同步机制的机制。对更高级别同步机制的支持处于各种标准化状态,但我什至不认为其中之一会允许您访问您所追求的原语类型。

您是否正在编写锁不足的无锁数据结构?

您可能只想继续使用 gcc 的非标准扩展和/或操作系统或库提供的同步原语。我敢打赌,如果您担心使用编译器内在函数,那么有一个库可能会提供您正在寻找的可移植性类型。(虽然说实话,我认为大多数人只是硬着头皮在需要时使用 gcc 特定的代码。这并不理想,但标准并没有真正跟上。)

  • OP 不要求同步方法。OP 询问是否有一种可移植的方法来提示编译器使用“bts”而不是“shl”+“or”,因为前者更快。 (7认同)