MIPS 32位上缺少__sync_fetch_and_add_8的备选方案

Alternative for missing __sync_fetch_and_add_8 on MIPS 32-bit

本文关键字:add 方案 and fetch 32位 sync MIPS      更新时间:2023-10-16

我正在为int64_t类型编写一个原子增量函数,该函数适用于许多不同的OS/CPU组合。例如,在Windows上,我可以使用InterlockedIncrement64,在OS X上,我可使用OSAtomicIncrement64Barrier,在Linux变体上,我可用GCC内置__sync_fetch_and_add。

然而,当使用GCC对MIPS 32位体系结构进行交叉编译时,我遇到了一个链接错误,即缺少对__sync_fetch_and_add_8的引用。一些快速的谷歌搜索显示MIPS 32位体系结构不支持64位原子增量指令(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56300)。错误报告中关于链接libatomic的建议似乎不起作用,这可能是因为我仍在使用GCC 4.7。

我知道我总是可以使用pthread互斥来保护增量逻辑,但这比使用本机指令要慢得多。

对于MIPS 32位体系结构,如何以任何其他方式实现64位原子增量,您有什么建议吗?

我在使用__atomic 时遇到了类似的问题

对`__atomic_fetch_add_8'的未定义引用

我通过链接libatomic解决了这个问题。

顺便说一句,我的mipsel交叉编译器是GCC 4.8.1

另请参阅:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56300