问题描述
我注意到在 gcc
中可以按索引访问 __ m128
字段,而不使用 union
trick。
__ m128 t;
float r(t [0] + t [1] + t [2] + t [3]);
我也可以像加载 __ m128
一样一个数组:
__ m128 t {1.f,2.f,3.f,4.f};
这一切都符合 gcc
' s矢量扩展。但是,这些可能在其他地方不可用。加载和访问功能是否支持intel编译器和msvc?
加载 __ m128
,您可以编写GCC,ICC支持的 _mm_setr_ps(1.f,2.f,3.f,4.f)
MSVC和clang。
据我所知,clang和最新版本的GCC支持按索引访问 __ m128
字段。我不知道如何在ICC或MSVC中执行此操作。我想 _mm_extract_ps
可以用于所有4种编译器,但它的返回类型很疯狂,使用起来很痛苦。
I've noticed that accessing __m128
fields by index is possible in gcc
, without using the union
trick.
__m128 t;
float r(t[0] + t[1] + t[2] + t[3]);
I can also load a __m128
just like an array:
__m128 t{1.f, 2.f, 3.f, 4.f};
This is all in line with gcc
's vector extensions. These, however, may not be available elsewhere. Are the loading and accessing features supported by the intel compiler and msvc?
To load a __m128
, you can write _mm_setr_ps(1.f, 2.f, 3.f, 4.f)
, which is supported by GCC, ICC, MSVC and clang.
So far as I know, clang and recent versions of GCC support accessing __m128
fields by index. I don't know how to do this in ICC or MSVC. I guess _mm_extract_ps
works for all 4 compilers but its return type is insane making it painful to use.
这篇关于在编译器中访问__m128字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!