SSE错误 - 使用m128i_i32定义__m128i变量的字段

时间:2017-12-19 07:40:11

标签: c++ sse

以这种方式定义__m128i变量:

__m128i a;
a.m128i_i32[0] = 65000;

我收到以下错误:

  

错误:请求'a'中的成员'm128i_i32',这是非类的   输入'__m128i {aka __vector(2)long long int}'a.m128i_i32 [0] =   65000;

我已经包含了followinf头文件:

#include <x86intrin.h>
#include <emmintrin.h>
#include <smmintrin.h>

2 个答案:

答案 0 :(得分:3)

m128i_i32是特定于MSVC的。并且您正在使用GCC或Clang进行编译(根据您的错误消息判断)。请改用_mm_setr_epi32

__m128i a = _mm_setr_epi32(0, 1, 2, 3);

答案 1 :(得分:-1)

您的代码将在Visual下工作, __ m128 定义为

typedef union __declspec(intrin_type) __declspec(align(16)) __m128i {
__int8              m128i_i8[16];
__int16             m128i_i16[8];
__int32             m128i_i32[4];
__int64             m128i_i64[2];
unsigned __int8     m128i_u8[16];
unsigned __int16    m128i_u16[8];
unsigned __int32    m128i_u32[4];
unsigned __int64    m128i_u64[2];
} __m128i;

因此您可以访问 m128_i32 ,但在g ++ __ m128 下定义为

typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));

并且您的代码不会被编译。

您可以按

指定值
int32_t* p = (int32_t*)&a;
p[0] = 65000;