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

问题描述 投票:2回答:2

在以这种方式定义__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>
c++ sse
2个回答
-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;

3
投票

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

__m128i a = _mm_setr_epi32(0, 1, 2, 3);
© www.soinside.com 2019 - 2024. All rights reserved.