答案 0 :(得分:3)
int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
没有直接匹配指令,它是一种将两个双寄存器视为四重寄存器并在C中提供类型安全的方法。只需要在需要时调用双寄存器或四寄存器,就可以隐式地在汇编中执行此操作至。有关NEON寄存器组的可能用法,请参见下图。
对于内在函数,可以看到gcc
的{{3}}。
关于如何在汇编中实现这一点,您仍然可以使用gcc
#include "arm_neon.h"
int16x8_t c(int16x4_t a, int16x4_t b) {
return vcombine_s16(b, a);
}
变成
c(__simd64_int16_t, __simd64_int16_t):
vswp d1, d0
bx lr
我实际上已经生成了这个documentation。
所以最后我认为这可以归结为寄存器是否相邻然后它们已经合并,如果不是,你可以使用vmov
或vswp
。
请参阅此online,了解neon
如何记录和引用。