考虑这样的内存布局,即8个连续的4字节块读取[abcdefgh]。我将它们加载到两个寄存器v0.4s和v1.4s中,因此得到v0.4s = [abcd]和v1.4s = [efgh],其中每个字符代表一个32位块。我想对它们重新排序,以便在两个(可能是不同的)寄存器中获得[abef]和[cdgh]。
我目前的方法是首先反转[efgh]的64位部分,以获得[ghef]。然后我可以使用extract来获取[abef]和[ghcd]。然后,我可以再次反转[ghcd]的64位部分,以获得[cdgh]。
有没有人能说出更好的方法?
发布于 2017-10-14 20:12:19
这正是TRN指令的目的:
// v0: efgh // v1: efgh
trn1 v2.2d, v0.2d, v1.2d
trn2 v3.2d, v0.2d, v1.2d// v2: abef // v3: cdgh
请不要问我为什么是2d而不是4s。
https://stackoverflow.com/questions/45792141
复制相似问题