12.2 ARMv6 SIMD 組み込み関数、要約説明、バイトレーン、影響を受けるフラグ

次の表では、ARMv6 SIMD コンパイラ組み込み関数別に説明し、バイトレーンや影響を受ける情報に関する要約説明を示します。

表 12-2 ARMv6 SIMD 組み込み関数、要約説明、バイトレーン、影響を受けるフラグ

組み込み関数 要約説明 バイトレーン 影響を受けるフラグ
戻り値 オペランド
__qadd16 2 つの 16 ビット加算を実行し、範囲 -215 x ≤ 215 - 1 にサチュレート。 int16x2 int16x2, int16x2 なし
__qadd8 4 つの 8 ビット加算を実行し、範囲 -27 x ≤ 27 - 1 にサチュレート。 int8x4 int8x4, int8x4 なし
__qasx 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行し、それぞれの結果をサチュレート。 int16x2 int16x2, int16x2 なし
__qsax 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行し、それぞれの結果をサチュレート。 int16x2 int16x2, int16x2 なし
__qsub16 2 つの 16 ビット減算とサチュレーション。 int16x2 int16x2, int16x2 なし
__qsub8 4 つの 8 ビット減算とサチュレーション。 int8x4 int8x4, int8x4 なし
__sadd16 2 つの 16 ビット符号付き加算 int16x2 int16x2, int16x2 APSR.GE ビット
__sadd8 4 つの 8 ビット符号付き加算 int8x4 int8x4, int8x4 APSR.GE ビット
__sasx 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行。 int16x2 int16x2, int16x2 APSR.GE ビット
__sel 結果の各バイトを、GE ビットの値に基づいて、第 1 オペランドまたは第 2 オペランドから選択します。結果の各バイトについて、対応する GE ビットが設定されている場合は、第 1 オペランドのバイトが選択されます。対応する GE ビットが設定されていない場合は、第 2 オペランドのバイトが選択されます。int16x2 の演算では値ごとに 2 つの(二重の)GE ビットが設定されるため、作用の対象が (u)int16x2 データであれ (u)int8x4 データであれ、__sel コンパイラ組み込み関数は正しく機能します。 uint8x4 uint8x4, uint8x4 なし
__shadd16 2 つの 16 ビット符号付き加算を実行し、結果を半分にします。 int16x2 int16x2, int16x2 なし
__shadd8 4 つの 8 ビット符号付き加算を実行し、結果を半分にします。 int8x4 int8x4, int8x4 なし
__shasx 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行し、結果を半分にします。 int16x2 int16x2, int16x2 なし
__shsax 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行し、結果を半分にします。 int16x2 int16x2, int16x2 なし
__shsub16 2 つの 16 ビット符号付き減算を実行し、結果を半分にします。 int16x2 int16x2, int16x2 なし
__shsub8 4 つの 8 ビット符号付き減算を実行し、結果を半分にします。 int8x4 int8x4, int8x4 なし
__smlad 2 つの 16 ビット乗算を実行し、両方の結果を第 3 オペランドに加算します。 int32 int16x2, int16x2, int32 Q ビット
__smladx 第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット乗算を実行し、その両方の結果を第 3 オペランドに加算します。 int16x2 int16x2, int16x2 Q ビット
__smlald 2 つの 16 ビット乗算を実行し、両方の結果を第 3 オペランドに加算します。加算のオーバーフローは検出されません。 int64 int16x2, int16x2, int64 なし
__smlaldx 第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット乗算を実行し、その両方の結果を第 3 オペランドに加算します。加算のオーバーフローは検出されません。 int64 int16x2, int16x2, int64 なし
__smlsd 2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求め、第 3 オペランドにその差を加算します。 int32 int16x2, int16x2, int32 Q ビット
__smlsdx 第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット符号付き乗算を実行します。その積の差を第 3 累算オペランドに加算します。 int32 int16x2, int16x2, int32 Q ビット
__smlsld 2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求め、第 3 オペランドにその差を加算します。加算のオーバーフローは検出されません。 int64 int16x2, int16x2, int64 なし
__smlsldx 第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求め、第 3 オペランドにその差を加算します。加算のオーバーフローは検出されません。 int64 int16x2, int16x2, u64 なし
__smuad 2 つの 16 ビット符号付き乗算を実行し、その積を加算します。 int32 int16x2, int16x2 Q ビット
__smusd 2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求めます。 int32 int16x2, int16x2 なし
__smusdx 2 つの 16 ビット符号付き乗算を実行します。第 1 オペランドの上位ハーフワードと第 2 オペランドの下位ハーフワードの積を、第 1 オペランドの下位ハーフワードと第 2 オペランドの上位ハーフワードの積から減算し、その差を第 3 オペランドに加算します。 int32 int16x2, int16x2 なし
__ssat16 2 つの符号付き 16 ビット値を、選択された幅にサチュレートします。 int16x2 int16x2, /*constant*/ unsigned int Q ビット
__ssax 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行します。 int16x2 int16x2, int16x2 APSR.GE ビット
__ssub16 2 つの 16 ビット符号付き減算を実行します。 int16x2 int16x2, int16x2 APSR.GE ビット
__ssub8 4 つの 8 ビット符号付き減算を実行します。 int8x4 int8x4 APSR.GE ビット
__smuadx 第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット符号付き乗算を実行し、その積を加算します。 int32 int16x2, int16x2 Q ビット
__sxtab16 第 2 オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットに符号拡張し、第 1 オペランドに加算します。 int16x2 int8x4, int16x2 なし
__sxtb16 オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットに符号拡張します。 int16x2 int8x4 なし
__uadd16 2 つの 16 ビット符号なし加算。 uint16x2 uint16x2, uint16x2 APSR.GE ビット
__uadd8 4 つの 8 ビット符号なし加算。 uint8x4 uint8x4, uint8x4 APSR.GE ビット
__uasx 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行します。 uint16x2 uint16x2, uint16x2 APSR.GE ビット
__uhadd16 2 つの 16 ビット符号なし加算を実行し、結果を半分にします。 uint16x2 uint16x2, uint16x2 なし
__uhadd8 4 つの 8 ビット符号なし加算を実行し、結果を半分にします。 uint8x4 uint8x4, uint8x4 なし
__uhasx 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行し、結果を半分にします。 uint16x2 uint16x2, uint16x2 なし
__uhsax 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行し、結果を半分にします。 uint16x2 uint16x2, uint16x2 なし
__uhsub16 2 つの 16 ビット符号なし減算を実行し、結果を半分にします。 uint16x2 uint16x2, uint16x2 なし
__uhsub8 4 つの 8 ビット符号なし減算を実行し、結果を半分にします。 uint8x4 uint8x4 なし
__uqadd16 2 つの 16 ビット符号なし加算を実行し、範囲 0 ≤ x ≤ 216 - 1 にサチュレートします。 uint16x2 uint16x2, uint16x2 なし
__uqadd8 4 つの 8 ビット符号なし加算を実行し、範囲 0 ≤ x ≤ 28 - 1 にサチュレートします。 uint8x4 uint8x4, uint8x4 なし
__uqasx 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの符号なし加算と下位ハーフワードの符号なし減算を実行し、それぞれの結果をサチュレートします。 uint16x2 uint16x2, uint16x2 なし
__uqsax 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの符号なし減算と下位ハーフワードの符号なし加算を実行し、それぞれの結果をサチュレートします。 uint16x2 uint16x2, uint16x2 なし
__uqsub16 2 つの 16 ビット符号なし減算を実行し、範囲 0 ≤ x ≤ 216 - 1 にサチュレートします。 uint16x2 uint16x2, uint16x2 なし
__uqsub8 4 つの 8 ビット符号なし減算を実行し、範囲 0 ≤ x ≤ 28 - 1 にサチュレートします。 uint8x4 uint8x4, uint8x4 なし
__usad8 4 つの 8 ビット符号なし減算を実行して、それぞれの差の絶対値を加算し、単一の符号なし整数として結果を返します。 uint32 uint8x4, uint8x4 なし
__usada8 4 つの 8 ビット符号なし減算を実行して、それぞれの差の絶対値を加算し、その結果を第 3 オペランドに加算します。 uint32 uint8x4, uint8x4, uint32 なし
__usax 第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行します。 uint16x2 uint16x2, uint16x2 APSR.GE ビット
__usat16 2 つの 16 ビット値を、選択した符号なし範囲にサチュレートします。入力は符号付きの値、出力は負以外の値になります。 int16x2 int16x2, /*constant*/ unsigned int Q フラグ
__usub16 2 つの 16 ビット符号なし減算を実行します。 uint16x2 uint16x2, uint16x2 APSR.GE ビット
__usub8 4 つの 8 ビット符号なし減算を実行します。 uint8x4 uint8x4, uint8x4 APSR.GE ビット
__uxtab16 第 2 オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットにゼロ拡張し、第 1 オペランドに加算します。 uint16x2 uint8x4, uint16x2 なし
__uxtb16 オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットにゼロ拡張します。 uint16x2 uint8x4 なし
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.