【问题标题】:GCC atomic built-ins: Is there a list showing which are supported on which platform?GCC atomic built-ins:是否有一个列表显示哪个平台支持哪些?
【发布时间】:2011-12-10 20:32:16
【问题描述】:

是否有一个网站列出了各种平台以及它们对 GCC 的 atomic built-ins 以及各种 GCC 版本的支持?

编辑:

为了更清楚: GCC 添加 _sync... 作为其支持的平台上的内在函数。在所有其他平台上,它将这些保留为普通函数声明,但不提供实现。这必须由某个框架来完成。

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

【问题讨论】:

    标签: gcc atomic


    【解决方案1】:

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

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

    gcc 的 __sync 内置函数从 4.1 版开始就存在(例如,参见 gcc 4.1.2 manual。如上所述:

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

    因此,当没有特定架构的实现时,会出现编译警告,我猜是链接时错误,除非您提供具有适当名称的所需函数。

    在 gcc 4.7 之后还有 __atomic 内置函数和 __sync 内置函数已被弃用。 例如,看看 Fedora 如何使用 gcc __sync 和 __atomic here

    【讨论】:

    • 与此同时,我将代码切换到 __atomic 内置函数 :-)
    【解决方案2】:

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

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

    这些函数可以在目标的机器描述中使用特定于机器的扩展器(通常在名为 `sync.md' 的文件中)进行扩展,或者在缺少此类扩展器时使用 CAS 循环。如果 `sync.md' 文件的存在表明适当的原子支持,那么您可以计算 MIPS、i386、ARM、BlackFin、Alpha、PowerPC、IA64 和 Sparc。

    【讨论】:

      猜你喜欢
      • 2018-12-25
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2016-12-06
      相关资源
      最近更新 更多