1

考虑内存布局,以便读取八个连续的 4 字节块[abcdefgh]。我将它们加载到两个寄存器v0.4sv1.4s,所以我得到了v0.4s = [abcd]v1.4s = [efgh],其中每个字符代表一个 32 位块。我想对它们重新排序以获得[abef]两个[cdgh](可能不同的)寄存器。

我目前的方法是首先反转 64 位的一半[efgh]以获得[ghef]. 然后我可以使用 extract 来获取[abef]and [ghcd]。然后,我终于可以再次反转 64 位的一半[ghcd]来获得[cdgh].

谁能告诉一个更好的方法?

4

1 回答 1

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。

于 2017-10-14T12:12:19.483 回答