我正在寻找与SSE / SSE2一起引入的Intel内存屏障内在函数_mm_lfence(), _mm_sfence(), _mm_mfence()
的ARM模拟。
我正在使用gcc(4.8),但解决方案应该可以移植到其他编译器(icc,clang)。
来自此ARM文档
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka14552.html
我总结说我需要__dmb()
和__schedule_barrier()
这样的内在函数,但是根据这个网站
https://answers.launchpad.net/gcc-arm-embedded/+question/258449
这些内在函数在gcc上不可用。
我不确定那里提到的CMSIS库,这会提供便携式解决方案吗?
我还想过将3个fence内在函数映射到__sync_synchronize()
(完全内存屏障),但我也不确定这个内在函数的可移植性(并且没有用于读取或写入障碍的版本,仅这个完全障碍。)
感谢您的帮助!