vld4_f32
私はとvld4q_f32
ARM NEON 命令の違いを理解する立場にありません。
混乱は、コーディング レベルを上げて、情報量の少ない組み込み関数ではなくアセンブリ命令に目を向け始めたときに始まりました。
ここでvld4バリアント命令を使用する必要がある理由は、大きな配列の4 番目ごとの位置から4 をキャプチャしたいからです。float32_t
組み込み関数と対応するアセンブリ命令は次のvld4_f32
ようになります (このリンクから)
float32x2x4_t vld4_f32 (const float32_t *)
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
vld4q_f32
組み込み関数とそれに対応するアセンブリ命令は次のようになります。
float32x4x4_t vld4q_f32 (const float32_t *)
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
組み込みレベルで見た違いは戻り値の型ですが、アセンブリ命令とレジスタの数を見ると、どちらも同じように見えます。コンパイラまたはアセンブラは、この 2 つの違いをどのように認識しますか?
誰かがこれについてもっと明確にし、4番目のメモリ位置ごとに配置されている4つの float32_t値を単一のレジスタにロードする方法を説明できますか?