静态与外部内在函数

时间:2019-07-19 03:52:41

标签: c gcc static clang intrinsics

Clang 6.0.1 avxintrin.h具有以下声明:

static __inline __m256i __DEFAULT_FN_ATTRS _mm256_set1_epi32(int)

GCC 5.5具有:

extern __inline __m256i __attribute__((__gnu_inline__, _always_inline__, __artificial__)) _mm256_set1_epi32(int)

为什么一个是extern而另一个是static这在调用inline的{​​{1}}函数中向我显示。 Clang希望将其声明为_mm256_set1_epi32

static

使用#include <immintrin.h> inline void SimdBlockBloomFilter_make_mask() { _mm256_set1_epi32(1); }

-Weverything

使用Clang ++编译时,不会出现此错误

1 个答案:

答案 0 :(得分:3)

在GCC版本中,gnu_inline attribute接近于{99}和更高版本的static inline

在重新定义extern inline的含义时,C委员会忽略了GNU的先例:对于GNU编译器,extern inline意味着编译器永远不应生成该函数的非内联副本(即使地址)。在C99中,extern inline表示翻译单元中的定义完成了另一个翻译单元中的inline定义。

<immintrin.h>的GCC版本使用gnu_inline属性来获得所有编译器模式(特别是C89 / C90和C99)下的预期行为。