_mm_cvtsi64x_si128 的 clang 支持

Pee*_*oot 3 clang

使用 clang-3.5.0(但不是 gcc-4.9.2,也不是 intel 编译器)我收到消息:

use of undeclared identifier '_mm_cvtsi64x_si128'; did you mean '_mm_cvtsi64_si128'
Run Code Online (Sandbox Code Playgroud)

这是我发现在intel intrisics guide 中记录的内在函数,并且有问题的代码确实包含在 intinsics 指南中记录的包含:

#include "emmintrin.h"
Run Code Online (Sandbox Code Playgroud)

我想知道这个错误是否是因为没有传递正确的 -mcpu= 标志,但我尝试了 -mcpu=nahelem,这对于这个 sse2 指令应该足够了。知道 clang 是否支持此内在函数,如果支持,需要哪些编译标志才能使用它?

Pee*_*oot 5

英特尔的 emmintrin.h 中似乎有几个替代的内在名称:

#define _mm_load_pd1 _mm_load1_pd
#define _mm_set_pd1 _mm_set1_pd
#define _mm_store_pd1 _mm_store1_pd
#define _mm_cvtsi64x_si128 _mm_cvtsi64_si128
#define _mm_cvtsi128_si64x _mm_cvtsi128_si64
Run Code Online (Sandbox Code Playgroud)

看起来 clang 的 emmintrin.h 没有任何这些备用名称,但我可以调整我们的代码以使用非备用名称(我们的代码使用了上面的最后两个备用名称)。