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

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

組み込み関数要約説明バイトレーン影響を受けるフラグ
戻り値オペランド 
__qadd162 つの 16 ビット加算を実行し、範囲 -215 x ≤ 215 - 1 にサチュレートint16x2int16x2, int16x2なし
__qadd84 つの 8 ビット加算を実行し、範囲 -27 x ≤ 27 - 1 にサチュレートint8x4int8x4, int8x4なし
__qasx第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行し、それぞれの結果をサチュレートint16x2int16x2, int16x2なし
__qsax第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行し、それぞれの結果をサチュレートint16x2int16x2, int16x2なし
__qsub162 つの 16 ビット減算とサチュレーションint16x2int16x2, int16x2なし
__qsub84 つの 8 ビット減算とサチュレーションint8x4int8x4, int8x4なし
__sadd162 つの 16 ビット符号付き加算int16x2int16x2, int16x2APSR.GE ビット
__sadd84 つの 8 ビット符号付き加算int8x4int8x4, int8x4APSR.GE ビット
__sasx第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行int16x2int16x2, int16x2APSR.GE ビット
__sel結果の各バイトを、GE ビットの値に基づいて、第 1 オペランドまたは第 2 オペランドから選択します。結果の各バイトについて、対応する GE ビットが設定されている場合は、第 1 オペランドのバイトが選択されます。対応する GE ビットが設定されていない場合は、第 2 オペランドのバイトが選択されます。int16x2 の演算では値ごとに 2 つの(二重の)GE ビットが設定されるため、作用の対象が (u)int16x2 データであれ (u)int8x4 データであれ、__sel コンパイラ組み込み関数は正しく機能します。uint8x4uint8x4, uint8x4なし
__shadd162 つの 16 ビット符号付き加算を実行し、結果を半分にします。int16x2int16x2, int16x2なし
__shadd84 つの 8 ビット符号付き加算を実行し、結果を半分にします。int8x4int8x4, int8x4なし
__shasx第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行し、結果を半分にします。int16x2int16x2, int16x2なし
__shsax第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行し、結果を半分にします。int16x2int16x2, int16x2なし
__shsub162 つの 16 ビット符号付き減算を実行し、結果を半分にします。int16x2int16x2, int16x2なし
__shsub84 つの 8 ビット符号付き減算を実行し、結果を半分にします。int8x4int8x4, int8x4なし
__smlad2 つの 16 ビット乗算を実行し、両方の結果を第 3 オペランドに加算します。int32int16x2, int16x2, int32Q ビット
__smladx第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット乗算を実行し、その両方の結果を第 3 オペランドに加算します。int16x2int16x2, int16x2Q ビット
__smlald2 つの 16 ビット乗算を実行し、両方の結果を第 3 オペランドに加算します。加算のオーバーフローは検出されません。int64int16x2, int16x2, int64なし
__smlaldx第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット乗算を実行し、その両方の結果を第 3 オペランドに加算します。加算のオーバーローは検出されません。int64int16x2, int16x2, int64なし
__smlsd2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求め、第 3 オランドにその差を加算します。int32int16x2, int16x2, int32Q ビット
__smlsdx第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット符号付き乗算を実行します。その積の差を第 3 累算オペランドに加算します。int32int16x2, int16x2, int32Q ビット
__smlsld2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求め、第 3 オランドにその差を加算します。加算のオーバーフローは検出されません。int64int16x2, int16x2, int64なし
__smlsldx第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を算することによってその積の差を求め、第 3 オペランドにその差を加算します。加算のオーバーフローは検出されません。int64int16x2, int16x2, u64なし
__smuad2 つの 16 ビット符号付き乗算を実行し、その積を加算します。int32int16x2, int16x2Q ビット
__smusd2 つの 16 ビット符号付き乗算を実行します。下位ハーフワードの積から上位ハーフワードの積を減算することによってその積の差を求めます。int32int16x2, int16x2なし
__smusdx2 つの 16 ビット符号付き乗算を実行します。第 1 オペランドの上位ハーフワードと第 2 オペランドの下位ハーフワードの積を、第 1 オペランドの位ハーフワードと第 2 オペランドの上位ハーフワードの積から減算し、その差を第 3 オペランドに加算します。int32int16x2, int16x2なし
__ssat162 つの符号付き 16 ビット値を、選択された幅にサチュレートします。int16x2int16x2, /*constant*/ unsigned intQ ビット
__ssax第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行します。int16x2int16x2, int16x2APSR.GE ビット
__ssub162 つの 16 ビット符号付き減算を実行します。int16x2int16x2, int16x2APSR.GE ビット
__ssub84 つの 8 ビット符号付き減算を実行します。int8x4int8x4APSR.GE ビット
__smuadx第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット符号付き乗算を実行し、その積を加算します。int32int16x2, int16x2Q ビット
__sxtab16第 2 オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットに符号拡張し、第 1 オペランドに加算します。int16x2int8x4, int16x2なし
__sxtb16オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットに符号拡張します。int16x2int8x4なし
__uadd162 つの 16 ビット符号なし加算uint16x2uint16x2, uint16x2APSR.GE ビット
__uadd84 つの 8 ビット符号なし加算uint8x4uint8x4, uint8x4APSR.GE ビット
__uasx第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行します。uint16x2uint16x2, uint16x2APSR.GE ビット
__uhadd162 つの 16 ビット符号なし加算を実行し、結果を半分にします。uint16x2uint16x2, uint16x2なし
__uhadd84 つの 8 ビット符号なし加算を実行し、結果を半分にします。uint8x4uint8x4, uint8x4なし
__uhasx第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの加算と下位ハーフワードの減算を実行し、結果を半分にします。uint16x2uint16x2, uint16x2なし
__uhsax第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行し、結果を半分にします。uint16x2uint16x2, uint16x2なし
__uhsub162 つの 16 ビット符号なし減算を実行し、結果を半分にします。uint16x2uint16x2, uint16x2なし
__uhsub84 つの 8 ビット符号なし減算を実行し、結果を半分にします。uint8x4uint8x4なし
__uqadd162 つの 16 ビット符号なし加算を実行し、範囲 0 ≤ x ≤ 216 - 1 にサチュレートします。uint16x2uint16x2, uint16x2なし
__uqadd84 つの 8 ビット符号なし加算を実行し、範囲 0 ≤ x ≤ 28 - 1 にサチュレートします。uint8x4uint8x4, uint8x4なし
__uqasx第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの符号なし加算と下位ハーフワードの符号なし減算を実行し、それぞれの結果サチュレートします。uint16x2uint16x2, uint16x2なし
__uqsax第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの符号なし減算と下位ハーフワードの符号なし加算を実行し、それぞれの結果サチュレートします。uint16x2uint16x2, uint16x2なし
__uqsub162 つの 16 ビット符号なし減算を実行し、範囲 0 ≤ x ≤ 216 - 1 にサチュレートします。uint16x2uint16x2, uint16x2なし
__uqsub84 つの 8 ビット符号なし減算を実行し、範囲 0 ≤ x ≤ 28 - 1 にサチュレートします。uint8x4uint8x4, uint8x4なし
__usad84 つの 8 ビット符号なし減算を実行して、それぞれの差の絶対値を加算し、単一の符号なし整数として結果を返します。uint32uint8x4, uint8x4なし
__usada84 つの 8 ビット符号なし減算を実行して、それぞれの差の絶対値を加算し、その結果を第 3 オペランドに加算します。uint32uint8x4, uint8x4, uint32なし
__usax第 2 オペランドのハーフワードを交換した上で、上位ハーフワードの減算と下位ハーフワードの加算を実行します。uint16x2uint16x2, uint16x2APSR.GE ビット
__usat162 つの 16 ビット値を、選択した符号なし範囲にサチュレートします。入力は符号付きの値、出力は負以外の値になります。int16x2int16x2, /*constant*/ unsigned intQ フラグ
__usub162 つの 16 ビット符号なし減算を実行します。uint16x2uint16x2, uint16x2APSR.GE ビット
__usub84 つの 8 ビット符号なし減算を実行します。uint8x4uint8x4, uint8x4APSR.GE ビット
__uxtab16第 2 オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットにゼロ拡張し、第 1 オペランドに加算します。uint16x2uint8x4, uint16x2なし
__uxtb16オペランドからビット位置 [23:16][7:0] の 2 つの値を抽出して、16 ビットにゼロ拡張します。uint16x2uint8x4なし

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711