1.1.4 加载和存储

SSE内置函数支持的加载和存储操作及其数据类型如表1-4所示。不但支持正向设置、逆向设置、清零、全部设置为某值,还支持不经过缓存的加载和存储,以及对应的存储和加载。

表1-4 SSE加载和存储

其中extract操作单精度浮点数据的定义如下:


int _mm_extract_ps(__m128 a, const int id);
r = a[id];

在SSE指令中,extract是非常耗时的操作,故不建议使用。

insert按照掩码的对应比特值决定对应位量元素乘积是否相加,并将结果写入掩码指定位置,如下所示:


__m128 _mm_insert_ps(__m128 a, __m128 b, const int id);
int bid = value of bit 6-7 for id
int bv = b[bid];
bid = value of bit 4-5 for id
r[0] = (bid == 0) ? bv : a[0];
r[1] = (bid == 1) ? bv : a[1];
r[2] = (bid == 2) ? bv : a[2];
r[3] = (bid == 3) ? bv : a[3];
r[0] = (0x1 & id == 1) ? 0.0 : r[0];
r[1] = (0x2 & id == 1) ? 0.0 : r[1];
r[2] = (0x4 & id == 1) ? 0.0 : r[2];
r[3] = (0x8 & id == 1) ? 0.0 : r[3];

掩码的第6、7位决定了取b的哪个元素取代a中元素,而第4、5位决定了a的哪个元素被取代。