读懂SIMD/ARM汇编风格命名-个人整理表格 1
起
读某些代码时,由于项目与汇编指令相关,或者作者比较“老派”,喜欢用汇编术语来给各种操作命名,那么就会给不了解相关术语的人带来阅读困难。
我最近就遇到了这种困难,在C/C++/Shader中读到很多汇编指令命名的函数,一眼没看出是什么意思。这种其实是不熟悉+生理适应困难。幸好我之前玩过《深圳IO》,算是克服了一些生理困难,建议以前不十分熟悉汇编的朋友可以玩玩这个游戏(别像我一样沉迷纸牌!游戏里打工还一个劲地摸鱼!)。
由于也没有搜到相关的合集向内容,所以自己整理一下。
本篇将我遇到的这些指令,和其不完全的原指(从官网上的摘取部分), 意指(作者把这个指令的行为思想放到项目语境下的意思),整理出来。(.md写表格太恶心了,我就直接空格了)
表格
注:除了指令名,还有非指令名的术语,就用小写;指令都用大写。
指令名 原指 意指
LD1 将从float*地址处赋予1~4个寄存器 float4=x[4], float3 = x[3]...
DUP 将单元素赋予1~4个寄存器 float4=x,float3=x...
lane 向量的某1个通道 float4.r
swz/swizzle 向量的某n个通道 float4.rgba,float4.rgb...
MOV 赋值
ORR a|b
AND a&b
EOR 同或
XOR 异或
MVN 位反
SHL 左移
SHR 右移
ADDV 向量的所有分量相加
ADD 加
SUB 减
MUL 乘
div 除
ceq CompareEqual ==
clt CompareLittlerThan <
cgt CompareGreaterThan >
cle CompareLittlerEqual <=
cge CompareGreaterEqual >=
ST1 (Store a single-element structure from one lane of one register.) 向p地址中存储向量
ST1+lane () 向p地址中存储向量的某个通道
operand 操作数 参数
rndn ()(rounded to the nearest integer)
rtn () (round to nearest)
VPADD float4(a.x+a.y,a.z+a.w,b.x+b.y,b.z+b.w)
BSL (Bitwise Select) 按位选,mask中1选a,0选b,des = BSL(mask,a,b)
cond 条件指令
VCVT float和int类型互相转换(Convert)
hmin (Horizontal)float4中最小通道值
hmax (Horizontal)float4中最大通道值