在为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扩展吗?
答案 0 :(得分:1)
这些__builtin_aarch64_*
函数是AArch64特定的GCC内置函数。它们主要用于在arm_neon.h
中实现内在函数。
GCC在其代码内部定义它们,而不是在某些头文件中定义它们。它们没有在任何地方记录,因为它们可以在不同版本之间进行更改,用户不应该依赖于它们的行为。
arm_neon.h
中的高级SIMD内在函数已在ACLE中进行了记录和定义(例如https://developer.arm.com/technologies/neon/intrinsics),因此您应该使用这些内容。
特定于目标的内置程序本身只是此上下文中的实现细节。