SSE指令简易分类整理

SSE指令简易分类整理

码农世界 2024-06-17 后端 98 次浏览 0个评论

偶尔会使用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

转载请注明来自码农世界,本文标题:《SSE指令简易分类整理》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,98人围观)参与讨论

还没有评论,来说两句吧...

Top