18.3 NEON コンパイラ組み込み関数

NEON 組み込み関数は、NEON 命令にほぼそのまま対応しています。

コンパイラ組み込み関数では、統一された NEON アセンブラ構文と同じ命名方式が使用されます。各組み込み関数の形式は以下のとおりです。
<opname>[q]_<type>
オプションの q フラグは、コンパイラ組み込み関数が 128 ビットベクタで動作するように指定します。
以下に例を示します。
  • vmul_s16 は、符号付き 16 ビット値の 2 つのベクタを乗算します。
    これは VMUL.I16 d2d0d1 にコンパイルされます。
  • vaddl_u8 は、符号なし 8 ビット値を含む 2 つの 64 ビットベクタの long 加算です。この演算の結果は、符合なし 16 ビット値の 128 ビットベクタになります。
    これは、VADDL.U8 q1d0d1 にコンパイルされます。
この例に示した以外のレジスタが使用される可能性もあります。また、ソースコードのコンパイル後の命令が変更されるような最適化が、コンパイラによって実行される場合もあります。

このマニュアルで示すコンパイラ組み込み関数のプロトタイプでは、次の型注釈が使用されています。
__const(n)
引数 n はコンパイル時定数でなければなりません。
__constrange(min, max)
引数は、 min max の範囲内のコンパイル時定数でなければなりません。
__transfersize(n)
コンパイラ組み込み関数によってこのポインタから n レーンがロードされます。

__fp16 を使用する NEON コンパイラ組み込み関数のプロトタイプは、NEON 半精度 VFP 拡張のあるターゲットでしか使用できません。__fp16 を使用できるようにするには、 --fp16_format コマンドラインオプションを使用します。
関連する参考文書
8.85 --fp16_format=format
18.4 加算の NEON 組み込み関数
18.5 乗算の NEON 組み込み関数
18.6 減算の NEON 組み込み関数
18.7 比較の NEON 組み込み関数
18.8 絶対差の NEON 組み込み関数
18.9 最大値と最小値の NEON 組み込み関数
18.10 対加算の NEON 組み込み関数
18.11 最大値の畳み込みの NEON 組み込み関数
18.12 最小値の畳み込みの NEON 組み込み関数
18.13 逆数と平方根の NEON 組み込み関数
18.14 符号付き変数によるシフトの NEON 組み込み関数
18.15 定数によるシフトの NEON 組み込み関数
18.16 シフトして挿入の NEON 組み込み関数
18.17 単一ベクタまたはレーンのロードの NEON 組み込み関数
18.18 単一ベクタまたはレーンをストアするための NEON 組み込み関数
18.19 n 要素構造体のロードの NEON 組み込み関数
18.20 ベクタからのレーンの抽出とレジスタへの挿入の NEON 組み込み関数
18.21 リテラルからの単一のベクタレーンのロードの NEON 組み込み関数
18.22 リテラルビットパターンからのベクタの初期化の NEON 組み込み関数
18.23 すべてのレーンを同じ値に設定するための NEON 組み込み関数
18.24 ベクタの結合の NEON 組み込み関数
18.25 ベクタの分割の NEON 組み込み関数
18.26 ベクタの変換の NEON 組み込み関数
18.27 テーブル検索の NEON 組み込み関数
18.28 拡張テーブル検索の NEON 組み込み関数
18.29 スカラ値での演算の NEON 組み込み関数
18.30 ベクタ抽出のための NEON 組み込み関数
18.31 ベクタ要素反転のための NEON コンパイラ組み込み関数(エンディアン方式のスワップ)
18.32 その他の単一オペランドの数学関数の NEON 組み込み関数
18.33 論理演算の NEON 組み込み関数
18.34 転置操作の NEON 組み込み関数
18.35 ベクタのキャスト操作用 NEON 組み込み関数
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.