为何在-O2与-O3优化级别下,循环中使用__sync_or_and_fetch内置函数会触发无限循环?
为何在-O2与-O3优化级别下,循环中使用__sync_or_and_fetch内置函数会触发无限循环?
[SOLVED] 直接上解决方案:把代码里的__sync_or_and_fetch替换成__sync_fetch_and_or就能解决无限循环的问题了!不过这里生成的双重amoor指令我感觉还是可能存在bug,这点我暂时还没完全搞清楚。
[Disclaimer] 我刚接触RISC-V汇编,所以这事儿也有可能是GCC的bug,但我目前还没法100%确定!
说下我的情况:我最近正在尝试用C和asm()混合编写RISC-V(64位)平台下的“快速”自旋锁函数,用的是GCC 14.2.0和15.1.0交叉编译。结果碰到了这个诡异的问题——在-O2和-O3优化级别下,循环里调用__sync_or_and_fetch内置函数就会触发无限循环,折腾了好一阵才找到替换函数的解决办法,但关于生成的汇编指令的疑问还没完全解开。
备注:内容来源于stack exchange,提问作者EnzoR
相关产品推荐
相关产品推荐

