在我的系统中文件 /usr/include/c++/4.9/atomic
下的 g++ 源代码中,函数 atomic::compare_exchange_strong
具有以下主体。
bool
compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
memory_order __f) noexcept
{
return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f);
}
但是,该文件仅包含 bits/atomic_base.h
,并且我在此文件中没有找到 __atomic_compare_exchange
的定义。
__atomic_compare_exchange
在哪里定义?
最佳答案
__atomic_compare_exchange
是内置编译器。它实际上并没有在任何地方的头文件中定义——编译器本身知道它是什么。
在 GCC 源代码本身中,它在 sync-builtins.def 中声明。 。我不熟悉 GCC 的源代码,所以我不确定它是如何渗透到特定于体系结构的实现的(尽管它似乎可能通过 maybe_emit_atomic_exchange ),但是例如的源代码代表它的 x86 指令可以在另一个名为 sync.md 的特定于平台的生成器文件中找到。 :
(define_insn "atomic_exchange<mode>"
[(set (match_operand:SWI 0 "register_operand" "=<r>") ;; output
(unspec_volatile:SWI
[(match_operand:SWI 1 "memory_operand" "+m") ;; memory
(match_operand:SI 3 "const_int_operand")] ;; model
UNSPECV_XCHG))
(set (match_dup 1)
(match_operand:SWI 2 "register_operand" "0"))] ;; input
""
"%K3xchg{<imodesuffix>}\t{%1, %0|%0, %1}")
关于c++ - `__atomic_compare_exchange` 在 g++ 源代码中的哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582035/