SSE一些指令集

0、变量类型

01. __m128i(以下内容来源于 此处

// data_types__m128i.cpp
#include <emmintrin.h>
int main() {
   __m128i x;
}

SSE2中的指令集指令,定义在 emmintrin.h 中。__m128i 类型变量映射到XMM[0-7]寄存器,它的地址会自动对齐到16字节的边界, 即__m128i类型的变量的起始地址总是16的整数倍。

1、函数接口

01. _mm_load_si128

__m128i _mm_load_si128 (__m128i *p);

加载128位值。返回加载在代表寄存器的变量中的值,地址p必须为16字节对齐。

02. _mm_loadu_si128

__m128i _mm_loadu_si128 (__m128i *p);

加载128位值。返回值代表寄存器的变量中的相同值,地址p不需要16字节对齐。

03. _mm_set_epi8

__m128i _mm_set_epi8 (char b15, char b14,    char b13, char b12,   char b11, char b10,   char b9, char b8,   char b7, char b6,   char b5, char b4,   char b3, char b2,   char b1, char b0);

设置16个带符号的8位整数值。

03. _mm_setr_epi8

__m128i _mm_setr_epi8 (char b0, char b1,    char b2, char b3,   char b4, char b5,   char b6, char b7,   char b8, char b9,   char b10, char b11,   char b12, char b13,   char b14, char b15);

以相反的顺序设置16个带符号的8位整数值。

04. _mm_shuffle_epi8

__m128i __mm_shuffle_epi8(
	__m128i a,
	__m128i mask
);

该指令将128位参数中的16字节参数改写。
头文件:tmmintrin.h
示例:

#include <stdio.h>
#include <tmmintrin.h>

int main ()
{
    __m128i a = _mm_setr_epi8(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

    __m128i mask =
            _mm_set_epi8(5, -1, -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0);

    __m128i p = _mm_shuffle_epi8(a, mask);

    int8_t  *res = (int8_t *) &p;

    printf("Result res:\t%2d\t%2d\t%2d\t%2d\n\t\t\t%2d\t%2d\t%2d\t%2d\n",
             res[0], res[1], res[2],
             res[3], res[4], res[5],
             res[6], res[7]);
    printf("\t\t\t%2d\t%2d\t%2d\t%2d\n\t\t\t%2d\t%2d\t%2d\t%2d\n",
             res[8],  res[9], res[10],
             res[11], res[12], res[13],
             res[14], res[15]);

    return 0;
}

打印结果:

Result res:	10	 0	 0	11
			 0	 0	12	 0
			 0	13	 0	 0
			14	 0	 0	15

05. _mm_or_si128

 __m128i _mm_and_si128 ( __m128i a, __m128i b);

将a中128 bits数值与b中的128bits数值对应位按位做"或(OR)"运算。

06. _mm_storeu_si128

void _mm_storeu_si128 (__m128i *p, __m128i a);

地址p不需要16字节对齐。
头文件: emmintrin.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值