2017-08-21 47 views
1

考慮存儲器佈局,使得8個連續的4字節塊讀取[abcdefgh]。我把它們加載到兩個寄存器v0.4sv1.4s,所以我得到v0.4s = [abcd]v1.4s = [efgh],其中每個字符代表一個32位塊。我想重新排序它們以獲得兩個(可能不同)寄存器中的[abef][cdgh]ARMv8 NEON向量置換

我現在的做法是首先將[efgh]的64位二進制取反,得到[ghef]。然後我可以使用提取得到[abef][ghcd]。然後,我可以再次終止[ghcd]的64位二分之一,得到[cdgh]

任何人都可以說更好的方法嗎?

+0

有沒有原因你不使用'zip','uzp'或'trn'? – EOF

回答

1

這正是TRN指令意味着:

// V0:ABCD // V1:EFGH

trn1 v2.2d, v0.2d, v1.2d 
trn2 v3.2d, v0.2d, v1.2d 

// V2:ABEF // V3:cdgh

請請,不要問我爲什麼它是2D而不是4S。