什么霓虹灯汇编代码将两个矢量组合成长矢量?

时间:2013-02-22 18:42:12

标签: assembly arm neon

ARM霓虹灯内在的vcombine_s16将两个向量组合成一个长向量。什么是汇编代码?

1 个答案:

答案 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

所以最后我认为这可以归结为寄存器是否相邻然后它们已经合并,如果不是,你可以使用vmovvswp

请参阅此online,了解neon如何记录和引用。

enter image description here