以这种方式定义__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>
答案 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;