【发布时间】:2014-09-03 00:30:01
【问题描述】:
有时(并非总是)当我在项目中包含我的数学头文件时,编译器会抱怨(尝试使用 gcc 和 clang)_mm_shuffle_ps 和 _mm_shuffle_pd 未声明,即使所有编译器标志都已设置(-msse -msse2 -msse3)和包含正确的标题 (<x86intrin.h>)。
以下是我如何使用这些功能:
extern "C"{
#include <x86intrin.h>
}
template<typename T>
struct sse_type;
template<>
struct sse_type<float>{
typedef __m128 type;
constexpr static type(&shuffle)(type, type, int) = _mm_shuffle_ps;
// other sse functions
};
template<>
struct sse_type<double>{
typedef __m128d type;
constexpr static type(&shuffle)(type, type, int) = _mm_shuffle_pd;
// other sse functions
};
然后我在这些类上定义了一堆运算符重载,以便于使用。
这就是我只使用这些函数的方式,因为编译器不会抱怨在这些类中定义的任何其他 sse 函数。
记住编译器并不总是抱怨这一点,而且有些项目使用这个头文件编译得很好,我到底做错了什么?或者这是一个编译器错误?
【问题讨论】:
-
使用
<immintrin.h>- 不要担心“C”链接。内在函数标头应该是幂等的。 -
@BrettHale 为什么这个标题更可取?