考虑存储器,使得连续8个4字节块读取[abcdefgh]
。我将它们加载到两个寄存器v0.4s
和v1.4s
中,因此我得到v0.4s = [abcd]
和v1.4s = [efgh]
,其中每个字符代表一个32位块。我想重新排序它们以在两个(可能是不同的)寄存器中获取[abef]
和[cdgh]
。
我目前的做法是首先将[efgh]
的64位半部转换为[ghef]
。然后我可以使用提取来获取[abef]
和[ghcd]
。然后,我可以再次将[ghcd]
的64位半部分反转为[cdgh]
。
任何人都能说出更好的方法吗?
答案 0 :(得分: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。