我正在尝试使用AArch64上的高级SIMD汇编指令开发高度优化的代码。我想要做的是将两个64位元素的上半部分和下半部分分成两个向量寄存器,如下图所示:
在AArch32 NEON指令集中,我们可以通过一条vtrn.32
指令执行此操作:
"vtrn.32 q0, q1 \n\t"
,但在AArch64中尝试几乎所有trn1
和trn2
的组合后,我可以这样做:
"trn2 v1.4s, v0.4s, v1.4s \n\t"
"trn1 v0.4s, v0.4s, v2.4s \n\t" //v2 is another vector register which is set to "0"
在我的代码中,我需要这样做500次,因为它需要一个额外的指令与AArch32 NEON相比,我的AArch64性能大大降低。我想知道你们是否可以帮助我,并建议我任何一个可以像AArch32那样做这个逻辑的指令。