讀懂SIMD/ARM匯編風(fēng)格命名-個(gè)人整理表格 1
起
????讀某些代碼時(shí),由于項(xiàng)目與匯編指令相關(guān),或者作者比較“老派”,喜歡用匯編術(shù)語(yǔ)來(lái)給各種操作命名,那么就會(huì)給不了解相關(guān)術(shù)語(yǔ)的人帶來(lái)閱讀困難。
????我最近就遇到了這種困難,在C/C++/Shader中讀到很多匯編指令命名的函數(shù),一眼沒(méi)看出是什么意思。這種其實(shí)是不熟悉+生理適應(yīng)困難。幸好我之前玩過(guò)《深圳IO》,算是克服了一些生理困難,建議以前不十分熟悉匯編的朋友可以玩玩這個(gè)游戲(別像我一樣沉迷紙牌!游戲里打工還一個(gè)勁地摸魚(yú)?。?/p>
????由于也沒(méi)有搜到相關(guān)的合集向內(nèi)容,所以自己整理一下。
????本篇將我遇到的這些指令,和其不完全的原指(從官網(wǎng)上的摘取部分), 意指(作者把這個(gè)指令的行為思想放到項(xiàng)目語(yǔ)境下的意思),整理出來(lái)。(.md寫(xiě)表格太惡心了,我就直接空格了)
表格
注:除了指令名,還有非指令名的術(shù)語(yǔ),就用小寫(xiě);指令都用大寫(xiě)。
指令名?原指 意指
LD1 將從float*地址處賦予1~4個(gè)寄存器 float4=x[4], float3 = x[3]...
DUP 將單元素賦予1~4個(gè)寄存器 float4=x,float3=x...
lane 向量的某1個(gè)通道 float4.r
swz/swizzle 向量的某n個(gè)通道 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地址中存儲(chǔ)向量
ST1+lane () 向p地址中存儲(chǔ)向量的某個(gè)通道
operand 操作數(shù) 參數(shù)
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類(lèi)型互相轉(zhuǎn)換(Convert)
hmin (Horizontal)float4中最小通道值
hmax (Horizontal)float4中最大通道值