在以这种方式定义__m128i
变量时:
__m128i a;
a.m128i_i32[0] = 65000;
我收到以下错误:
错误:请求'a'中的成员'm128i_i32',它是非类型类型'__m128i {aka __vector(2)long long int}'a.m128i_i32 [0] = 65000;
我已经包含以下头文件:
#include <x86intrin.h>
#include <emmintrin.h>
#include <smmintrin.h>
您的代码将在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;
m128i_i32
是MSVC特有的。并且您正在使用GCC或Clang进行编译(根据您的错误消息判断)。请改用_mm_setr_epi32
。
__m128i a = _mm_setr_epi32(0, 1, 2, 3);