【发布时间】:2011-01-03 15:14:59
【问题描述】:
受recent question的启发,我想知道是否有人知道如何让gcc在Linux x86-64平台上生成x86-64 bts指令(位测试和设置),无需使用内联汇编或非标准编译器内在函数。
相关问题:
Why doesn't gcc do this for a simple
|=operation were the right-hand side has exactly 1 bit set?How to get
btsusing compiler intrinsics or theasmdirective
可移植性对我来说比bts 更重要,所以我不会使用和asm 指令,如果有其他解决方案,我宁愿不使用编译器内在函数。
EDIT:C 源语言不支持原子操作,所以我对 atomic 测试和设置不是特别感兴趣(即使这是原始的test-and-set 首先存在的原因)。如果我想要一些原子的东西,我知道我没有机会用标准的 C 源代码来做:它必须是内在的、库函数或内联汇编。 (我在支持多线程的编译器中实现了原子操作。)
【问题讨论】:
-
嗯,好问题。我看到
vtst_*在 ARM+NEON 上进行矢量位测试,但没有更通用的... -
如果 bts 真的更快,请发送错误报告。我确信 gcc 程序员已经意识到 bts 的存在。毕竟,编译器不应该 1:1 映射。
-
更好的是,发送一个补丁以使用 bts 以及可以分析的测试用例,以证明优化是值得的。
-
@jbcreix:您要求的
gcc错误报告已在此 SO 发布前两年提交(并针对 4.3.0 进行了修复),请参阅:gcc.gnu.org/bugzilla/show_bug.cgi?id=36473