2

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

4

1 回答 1

3
int16x8_t vcombine_s16 (int16x4_t, int16x4_t)

没有直接匹配的指令,这是一种将两个双寄存器视为四寄存器并在 C 中提供类型安全的方法。您可以通过在需要时调用双寄存器或四寄存器来隐式地在汇编中执行此操作。有关 NEON 寄存器组的可能用途,请参见下图。

可以查看内部函数gcc文档

对于如何在汇编中实现,您仍然可以使用 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

我实际上已经在网上生成了这个。

所以最后我认为这归结为如果寄存器是相邻的,那么它们已经组合了,如果不是,你可以使用vmovor vswp

有关寄存器如何放置和引用的信息,请参阅此arm 文档。neon

在此处输入图像描述

于 2013-02-22T18:52:50.290 回答