2

ARM Neon 組み込み vcombine_s16 は、2 つのベクトルを 1 つの長いベクトルに結合します。そのアセンブリ コードは何ですか?

4

1 に答える 1

3
int16x8_t vcombine_s16 (int16x4_t, int16x4_t)

直接一致する命令はありません。これは、2 つのデュアル レジスタをクワッド レジスタとして扱い、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

私は実際にこれをオンラインで生成しました。

したがって、最後に、レジスタが隣接している場合、それらはすでに結合されていると思いvmovますvswp

レジスタの配置方法と参照方法については、このアームのドキュメントを参照してください。neon

ここに画像の説明を入力

于 2013-02-22T18:52:50.290 に答える