AArch64中“VTRN”指令的优化替换

时间:2016-02-11 21:48:23

标签: c assembly arm neon arm64

我正在尝试使用AArch64上的高级SIMD汇编指令开发高度优化的代码。我想要做的是将两个64位元素的上半部分和下半部分分成两个向量寄存器,如下图所示: enter image description here

在AArch32 NEON指令集中,我们可以通过一条vtrn.32指令执行此操作: "vtrn.32 q0, q1 \n\t",但在AArch64中尝试几乎所有trn1trn2的组合后,我可以这样做:

"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那样做这个逻辑的指令。

0 个答案:

没有答案