ARM Neon 組み込み vcombine_s16 は、2 つのベクトルを 1 つの長いベクトルに結合します。そのアセンブリ コードは何ですか?
質問する
1161 次
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 に答える