不知道,如果你發現你的答案,或者如果這是你的預期目標:
正如@ Dric512表示,我認爲你可以使用SIMD數據移動指令,INS。
在下面的例子中,我們將數字3和2分別插入到32位通道中的向量10和11中。
然後我們將相應的元素插入向量15的兩個32位通道;由此導致所有的位進入向量的64位通道15.
mov w1, 3
mov w2, 2
ins v10.s[0], w1
ins v11.s[1], w2
ins v15.s[1], v11.s[1]
ins v15.s[0], v10.s[0]
下面是使用P/T ...,顯示的gdb結果$ v10.ss,$ v11.ss,$ v15.ss在基數2中,最後的p/t $ v15.ds顯示64位的位模式。我不確定這是否有幫助,但也許它會啓動泵。
67 mov w1, 3
(gdb) si
$82 = {0, 0, 0, 0}
$83 = {0, 0, 0, 0}
$84 = {0, 0, 0, 0}
68 mov w2, 2
(gdb)
$85 = {0, 0, 0, 0}
$86 = {0, 0, 0, 0}
$87 = {0, 0, 0, 0}
70 ins v10.s[0], w1
(gdb)
$88 = {11, 0, 0, 0}
$89 = {0, 0, 0, 0}
$90 = {0, 0, 0, 0}
71 ins v11.s[1], w2
(gdb)
$91 = {11, 0, 0, 0}
$92 = {0, 10, 0, 0}
$93 = {0, 0, 0, 0}
73 ins v15.s[1], v11.s[1]
(gdb)
$94 = {11, 0, 0, 0}
$95 = {0, 10, 0, 0}
$96 = {0, 10, 0, 0}
74 ins v15.s[0], v10.s[0]
(gdb)
$97 = {11, 0, 0, 0}
$98 = {0, 10, 0, 0}
$99 = {11, 10, 0, 0}
.exit0() at stuff.s:78
78 _exit
(gdb) p/t $v15.d.s
$100 = {1000000000000000000000000000000011, 0}
我不確定我的答案是否很清楚。 ''EXT v15.8,v15.8,v11.8,#4「似乎在向量寄存器的下半部分(我的意思是'v15.d [0]'和'v11.d [0 ]')。然而,沒有辦法可以在這些向量的後半部分(我的意思是'v15.d [1]'和'v11.d [1]')做這個操作。在ARMv7中,正如你可以在我的問題中看到的,我們可以簡單地用'「vext.8」做到這一點。「d31,d31,d23,#4 \ n \ t」' – A23149577
對不起,我誤解了你的描述。 – Dric512