GCC原子内置插件:是否有一个列表显示哪个平台支持哪些?

时间:2011-10-19 11:20:29

标签: gcc atomic

对于各种GCC版本,是否有网站列出了各种平台及其对GCC原子内置插件的支持?

编辑:

更清楚: GCC在其包含支持的平台上添加_ sync ...作为内在函数。在所有其他平台上,它将这些保留为正常的函数声明,但不提供实现。这必须通过一些框架来完成。

所以问题是:GCC为哪些平台提供内在函数而不需要添加函数实现?

2 个答案:

答案 0 :(得分:3)

我不知道是否有这样的列表,但是http://gcc.gnu.org/projects/cxx0x.html表示自GCC 4.4以来支持原子。

GCC libstdc ++实现< atomic>在内置函数`__sync_fetch_and_add'和朋友(http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Atomic-Builtins.html)之上。

使用CAS循环,使用目标机器描述中的机器特定扩展器(通常在名为`sync.md'的文件中)或缺少此类扩展器来扩展这些函数。如果`sync.md'文件的存在是对正确的原子支持的任何指示,那么你可以计入MIPS,i386,ARM,BlackFin,Alpha,PowerPC,IA64和Sparc。

答案 1 :(得分:2)

[虽然这是一个老问题,但我认为我应该更新并完成答案]

我不知道每个架构版本和每个gcc版本的表,描述了受支持的内置函数。

自4.1版以来,gcc的__sync内置函数一直存在(例如,参见gcc 4.1.2 manual。如上所述:

  

并非所有目标处理器都支持所有操作。如果无法在目标处理器上实现特定操作,则将生成警告并将生成调用外部函数。外部函数将带有与内置函数相同的名称,附加后缀为“_n”,其中n是数据类型的大小。

因此,当没有针对特定体系结构的实现时,将出现编译警告,并且我猜测会出现链接时错误,除非您使用适当的名称提供所需的函数。

在gcc 4.7之后,还有__atomic内置函数,并且不推荐使用__sync内置函数。 例如,看看Fedora如何使用gcc __sync和__atomic here