gcc如何在编译期间使用__builtin_ <target> _func函数

时间:2018-04-25 23:47:09

标签: gcc compilation compiler-construction arm64

在为aarch64目标编译gcc时,我在build目录的include / arm_neon.h文件中看到了几个__builtin_aarch64 _ ## func ##函数。

例如,

__extension__ extern __inline float64_t
__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vmulxd_f64 (float64_t __a, float64_t __b)
{
  return __builtin_aarch64_fmulxdf (__a, __b);
}

__builtin_aarch64_fmulxdf()的定义在哪里?我无法弄清楚这些内置程序如何连接到目标特定的md文件。

上述意味着生成此指令的唯一方法是通过显式调用此GCC扩展吗?

1 个答案:

答案 0 :(得分:1)

这些__builtin_aarch64_*函数是AArch64特定的GCC内置函数。它们主要用于在arm_neon.h中实现内在函数。

GCC在其代码内部定义它们,而不是在某些头文件中定义它们。它们没有在任何地方记录,因为它们可以在不同版本之间进行更改,用户不应该依赖于它们的行为。

arm_neon.h中的高级SIMD内在函数已在ACLE中进行了记录和定义(例如https://developer.arm.com/technologies/neon/intrinsics),因此您应该使用这些内容。

特定于目标的内置程序本身只是此上下文中的实现细节。