偶尔会使用SSE指令做优化,但是有的时候想不起来用什么指令,因此做一个个人偏向的简单整理,而具体功能可参考一下面网站。
SSE所有指令的网址:
https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#ig_expand=4106,7012,6396,6366,4107,4106,80,1104,1074,784,218,914,4329&techs=SSE_ALL
数学类:
绝对值:abs
加法:add,adds
减法:sub,subs
加减(一半做加法,一半做减法):addsub
加法+拼接:hadd,hadds
减法+拼接:hsub,hsubs
乘法:mul,mulhi,mulhrs,mullo
除法:div
倒数:rcp
平方根:sqrt,rsqrt
条件乘法再求和:dp
乘法+加法+扩展位宽:madd, maddubs
平均(自带四舍五入):avg,pavg
向上下取整:ceil,floor
四舍五入:round
最大/小值:max,min,minpos
绝对值误差计算:mpsadbw,sad
拼接类:
拼接+位移+截取:alignr
依据mask混合:blend,blendv
二合一(降位+饱和):packs,packus
二合一(各取部分):unpackhi,unpacklo
类型转换类:
_m128和_m64型间的转换:cast, movep
不同类型转换:cvt
不同类型转换(带截位):cvtt
mask获取(也许可以用于获取符号):movemask
赋值类:
赋值:set,setr,setzero
未定义:undefined
载入(非对齐):loadu,lddqu
载入(对齐):load,loadr,loadl,loadh,stream_load
载入(单个):load1, loaddup
存储(非对齐):storeu,lddqu
存储(对齐):store,storer,storel,storeh,stream
存储(单个):store1
存储(依据mask):maskmove
拷贝:move
部分类型转换为复制功能:cvtsi[xx]_si[yy]
提取:extract,pextrw
插入:insert,pinsrw
整理顺序:pshufw,shuffle
正负操作:sign
矩阵操作:TRANSPOSE4
位移类:
左右移(字节):bslli,bsrli
左右移(bit):sll, slli, sra, srai, srl, srli
逻辑类:
并:and
或:or
亦或:xor
先非后并:andnot
比较:cmp[eq, gt, ge, lt, le, neq, ngt, nge, nlt, nle]
比较(返回bool):com[ieq, igt, ige, ilt, ile, ineq]
比较(非数异常+返回bool):ucom[ieq, igt, ige, ilt, ile, ineq]
判断非数:cmp[ord, unord]
0和1检测:test
内存类:
申请和释放:malloc,free
字符类:
都是str做关键字,用的少
不太清楚应用场景:
清空缓存?:clflush
循环冗余校验?:crc32
MXCSR相关?:MODE,EXCEPTION,getcsr,setcsr
fence相关?:lfence,mfence,sfence
还没有评论,来说两句吧...