【Optimization】常用SSE Intrinsic指令总结

Date: 2018.6.16


1、参考:

https://www.cnblogs.com/dragon2012/p/5200698.html
https://blog.csdn.net/ww506772362/article/details/41825215

2、常用SSE指令及其说明
movaps  把4个对齐的单精度值传送到xmm寄存器或者内存
movups  把4个不对齐的单精度值传送到xmm寄存器或者内存
movss   把1个单精度值传送到内存或者寄存器的低位双字
movlps  把2个单精度值传送到内存或者寄存器的低四字
movhps  把2个单精度值传送到内存或者寄存器的高四字
movlhps 把2个单精度值从低四字传送到高四字
movhlps 把2个单精度值从高四字传送到低四字

addps   将两个打包值相加
subps   将两个打包值相减
mulps   将两个打包值相乘
divps   将两个打包值相除
rcpps   计算打包值的倒数
sqrtps  计算打包值的平方根
rsqrtps 计算打包值的平方根倒数
maxps   计算两个打包值中的最大值
minps   计算两个打包值中的最小值
andps   计算两个打包值的按位逻辑与
andnps  计算两个打包值的按位逻辑非
orps    计算两个打包值的按位逻辑或
xorps   计算两个打包值的按位逻辑异或

cmpps   比较打包值
cmpss   比较标量值
comiss  比较标量值并且设置eflags寄存器
ucomiss 比较标量值(包括非法值)并设置eflags寄存器

注意:
1)操作数可以是128位内存或者xmm寄存器,目标操作数必须是xmm寄存器。
2) movaps指令要求数据在内存中对齐16字节边界,以提高效率,movups不需要对齐边界。

3 、SSE Intrinsic函数

(1) load指令函数:读指令,从内存到寄存器中

__m128 _mm_load_ss (float *p)  
__m128 _mm_load_ps (float *p)  
__m128 _mm_load1_ps (float *p)  
__m128 _mm_loadh_pi (__m128 a, __m64 *p)  
__m128 _mm_loadl_pi (__m128 a, __m64 *p)  
__m128 _mm_loadr_ps (float *p)  
__m128 _mm_loadu_ps (float *p)

(2) set指令函数:加载数据,类似于load

__m128 _mm_set_ss (float w)  
__m128 _mm_set_ps (float z, float y, float x, float w)  
__m128 _mm_set1_ps (float w)  
__m128 _mm_setr_ps (float z, float y, float x, float w)  
__m128 _mm_setzero_ps ()  

(3) store指令:写指令,从寄存器到内存中

__m128 _mm_set_ss (float w)  
__m128 _mm_set_ps (float z, float y, float x, float w)  
__m128 _mm_set1_ps (float w)  
__m128 _mm_setr_ps (float z, float y, float x, float w)  
__m128 _mm_setzero_ps ()  

(4) 算术指令:
SSE提供了大量的浮点运算指令,包括加法、减法、乘法、除法、开方、最大值、最小值、近似求倒数、求开方的倒数等等 。

__m128 _mm_add_ss (__m128 a, __m128 b)  
__m128 _mm_add_ps (__m128 a, __m128 b)
__m128 _mm_sub_ss (__m128 a, __m128 b)  
__m128 _mm_sub_ps (__m128 a, __m128 b)
__m128 _mm_mul_ss (__m128 a, __m128 b)  
__m128 _mm_mul_ps (__m128 a, __m128 b)
__m128 _mm_div_ss (__m128 a, __m128 b)  
__m128 _mm_div_ps (__m128 a, __m128 b)
__m128 _mm_min_ss (__m128 a, __m128 b)  
__m128 _mm_min_ps (__m128 a, __m128 b)
__m128 _mm_max_ss (__m128 a, __m128 b)  
__m128 _mm_max_ps (__m128 a, __m128 b)

Intel在线Intrinsic指令查询网址:
https://software.intel.com/sites/landingpage/IntrinsicsGuide/

猜你喜欢

转载自blog.csdn.net/soaringlee_fighting/article/details/80682679
今日推荐