_mm_cvtsi64x_si128 的铿锵声支持

Posted

技术标签:

【中文标题】_mm_cvtsi64x_si128 的铿锵声支持【英文标题】:clang support of _mm_cvtsi64x_si128 【发布时间】:2014-11-15 00:04:50 【问题描述】:

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

use of undeclared identifier '_mm_cvtsi64x_si128'; did you mean '_mm_cvtsi64_si128'

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

#include "emmintrin.h"

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

【问题讨论】:

clang 在对 FPU 和内部函数的支持方面远远落后于 gcc,我对此并不感到惊讶。经过快速的网络搜索,这里只提到了内在学 llvm.org/svn/llvm-project/llvm-gcc-4.0/trunk/gcc/ChangeLog.9 所以尝试包括 xmmintrin.h 【参考方案1】:

看起来 intel 的 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

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

【讨论】:

以上是关于_mm_cvtsi64x_si128 的铿锵声支持的主要内容,如果未能解决你的问题,请参考以下文章

铿锵声“你好,世界!” windows中的链接错误

我如何让铿锵声转储没有颜色的 AST?

铿锵声:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)而实现?

如何从GCC /铿锵声组件输出中消除“噪音”?

conflict , clash ,collision 表示冲突、矛盾的时候有啥区别?

用于 C++/SSE 代码的高效 NEON 内在函数