組み込み関数のプロトタイプは、ヘッダーファイル ia64intrin.h 内にあります。
次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。
組み込み関数 | 操作 | 対応する IA-64 命令 |
---|---|---|
_m64_czx1l | 0 の要素のインデックスのリターン | czx1.l |
_m64_czx1r | 0 の要素のインデックスのリターン | czx1.r |
_m64_czx2l | 0 の要素のインデックスのリターン | czx2.l |
_m64_czx2r | 0 の要素のインデックスのリターン | czx2.r |
_m64_mix1l | インターリーブ | mix1.l |
_m64_mix1r | インターリーブ | mix1.r |
_m64_mix2l | インターリーブ | mix2.l |
_m64_mix2r | インターリーブ | mix2.r |
_m64_mix4l | インターリーブ | mix4.l |
_m64_mix4r | インターリーブ | mix4.r |
_m64_mux1 | 並べ替え | mux1 |
_m64_mux2 | 並べ替え | mux2 |
_m64_padd1uus | 並列加算 | padd1.uus |
_m64_padd2uus | 並列加算 | padd2.uus |
_m64_pavg1_nraz | 並列加算および右シフト | pavg1 |
_m64_pavg2_nraz | 並列加算および右シフト | pavg2 |
_m64_pavgsub1 | 並列減算および右シフト | pavgsub1 |
_m64_pavgsub2 | 並列減算および右シフト | pavgsub2 |
_m64_pmpy2r | 並列乗算 | pmpy2.r |
_m64_pmpy2l | 並列乗算 | pmpy2.l |
_m64_pmpyshr2 | 並列乗算および右シフト | pmpyshr2 |
_m64_pmpyshr2u | 並列乗算および右シフト | pmpyshr2.u |
_m64_pshladd2 | 並列左シフトおよび加算 | pshladd2 |
_m64_pshradd2 | 並列右シフトおよび加算 | pshradd2 |
_m64_psub1uus | 並列減算 | psub1.uus |
_m64_psub2uus | 並列減算 | psub2.uus |
__int64 _m64_czx1l(__m64 a)
64 ビット値 a の中の 0 の要素を、最上位の要素から最下位の要素に向かってスキャンし、最初に見つかった 0 の要素のインデックスを返します。要素の幅は 8 ビットであるため、結果の範囲は 0 〜 7 になります。0 の要素が見つからない場合は、デフォルトでは結果は 8 になります。
__int64 _m64_czx1r(__m64 a)
64 ビット値 a の中の 0 の要素を、最下位の要素から最上位の要素に向かってスキャンし、最初に見つかった 0 の要素のインデックスを返します。要素の幅は 8 ビットであるため、結果の範囲は 0 〜 7 になります。0 の要素が見つからない場合は、デフォルトでは結果は 8 になります。
__int64 _m64_czx2l(__m64 a)
64 ビット値 a の中の 0 の要素を、最上位の要素から最下位の要素に向かってスキャンし、最初に見つかった 0 の要素のインデックスを返します。要素の幅は 16 ビットであるため、結果の範囲は 0 〜 3 になります。0 の要素が見つからない場合は、デフォルトでは結果は 4 になります。
__int64 _m64_czx2r(__m64 a)
64 ビット値 a の中の 0 の要素を、最下位の要素から最上位の要素に向かってスキャンし、最初に見つかった 0 の要素のインデックスを返します。要素の幅は 16 ビットであるため、結果の範囲は 0 〜 3 になります。0 の要素が見つからない場合は、デフォルトでは結果は 4 になります。
__m64 _m64_mix1l(__m64 a, __m64 b)
64 ビット値 a と b を、図 1 に示すように、1 バイトグループ単位で左から順にインターリーブし、得られた結果を返します。
__m64 _m64_mix1r(__m64 a, __m64 b)
64 ビット値 a と b を、図 2 に示すように、1 バイトグループ単位で右から順にインターリーブし、得られた結果を返します。
__m64 _m64_mix2l(__m64 a, __m64 b)
64 ビット値 a と b を、図 3 に示すように、2 バイトグループ単位で左から順にインターリーブし、得られた結果を返します。
__m64 _m64_mix2r(__m64 a, __m64 b)
64 ビット値 a と b を、図 4 に示すように、2 バイトグループ単位で右から順にインターリーブし、得られた結果を返します。
__m64 _m64_mix4l(__m64 a, __m64 b)
64 ビット値 a と b を、図 5 に示すように、4 バイトグループ単位で左から順にインターリーブし、得られた結果を返します。
__m64 _m64_mix4r(__m64 a, __m64 b)
64 ビット値 a と b を、図 6 に示すように、4 バイトグループ単位で右から順にインターリーブし、得られた結果を返します。
__m64 _m64_mux1(__m64 a, const int n)
n の値に基づいて、図 7 に示すように a の並べ替えを実行し、その結果を返します。表 1 に、指定可能な n の値を示します。
n | |
---|---|
@brcst | 0 |
@mix | 8 |
@shuf | 9 |
@alt | 0xA |
@rev | 0xB |
__m64 _m64_mux2(__m64 a, const int n)
n の値に基づいて、図 8 に示すように a の並べ替えを実行し、その結果を返します。
__m64 _m64_pavgsub1(__m64 a, __m64 b)
a の符号なしデータ要素 (バイト) から b の符号なしデータ要素 (バイト) を引き、減算の結果をそれぞれ 1 ポジションだけ右にシフトします。各要素の上位ビットは、減算のボロービットで埋められます。
__m64 _m64_pavgsub2(__m64 a, __m64 b)
a の符号なしデータ要素 (ダブルバイト) から b の符号なしデータ要素 (ダブルバイト) を引き、減算の結果をそれぞれ 1 ポジションだけ右にシフトします。各要素の上位ビットは、減算のボロービットで埋められます。
__m64 _m64_pmpy2l(__m64 a, __m64 b)
図 9 に示すように、a の 2 つの符号付き 16 ビット・データ要素に、最上位の要素から順に、それに対応する b の 2 つの符号付き 16 ビット・データ要素を掛けて、2 つの 32 ビットの結果を返します。
__m64 _m64_pmpy2r(__m64 a, __m64 b)
図 10 に示すように、a の 2 つの符号付き 16 ビット・データ要素に、最下位の要素から順に、それに対応する b の 2 つの符号付き 16 ビット・データ要素を掛けて、2 つの 32 ビットの結果を返します。
__m64 _m64_pmpyshr2(__m64 a, __m64 b, const int count)
a の 4 つの符号付き 16 ビット・データ要素に、それに対応する b の符号付き 16 ビット・データ要素を掛けて、4 つの 32 ビットの積を求めます。それぞれの積を、count ビットだけ右にシフトします。シフトしたそれぞれの積の最下位 16 ビットから、4 つの 16 ビットの結果を生成し、1 つの 64 ビット・ワードとして返します。
__m64 _m64_pmpyshr2u(__m64 a, __m64 b, const int count)
a の 4 つの符号なし 16 ビット・データ要素に、それに対応する b の符号なし 16 ビット・データ要素を掛けて、4 つの 32 ビットの積を求めます。それぞれの積を、count ビットだけ右にシフトします。シフトしたそれぞれの積の最下位 16 ビットから、4 つの 16 ビットの結果を生成し、1 つの 64 ビット・ワードとして返します。
__m64 _m64_pshladd2(__m64 a, const int count, __m64 b)
a を count ビットだけ左にシフトして、b に加算します。結果の上位 32 ビットを 0 にクリアして、b のビット [31:30] を結果のビット [62:61] にコピーし、その結果を返します。結果を返します。
__m64 _m64_pshradd2(__m64 a, const int count, __m64 b)
a の 4 つの符号付き 16 ビット・データ要素を、それぞれ count ビットだけ右にシフトします (各要素の上位ビットは、a のデータ要素の符号ビットの初期値で埋められます)。次に、これらの要素を、b の 4 つの符号付き 16 ビット・データ要素に加算し、その結果を返します。結果を返します。
__m64 _m64_padd1uus(__m64 a, __m64 b)
8 つの 1 バイト要素として、a を b に加算します。a の要素は符号なしデータとして処理され、b の要素は符号付きデータとして処理されます。演算の結果は符号なしデータとして処理され、1 つの 64 ビット・ワードとして返されます。
__m64 _m64_padd2uus(__m64 a, __m64 b)
4 つの 16 ビット要素として、a を b に加算します。a の要素は符号なしデータとして処理され、b の要素は符号付きデータとして処理されます。演算の結果は符号なしデータとして処理され、1 つの 64 ビット・ワードとして返されます。
__m64 _m64_psub1uus(__m64 a, __m64 b)
8 つの 1 バイト要素として、b から a を引きます。a の要素は符号なしデータとして処理され、b の要素は符号付きデータとして処理されます。演算の結果は符号なしデータとして処理され、1 つの 64 ビット・ワードとして返されます。
__m64 _m64_psub2uus(__m64 a, __m64 b)
4 つの 16 ビット要素として、b から a を引きます。a の要素は符号なしデータとして処理され、b の要素は符号付きデータとして処理されます。演算の結果は符号なしデータとして処理され、1 つの 64 ビット・ワードとして返されます。
__m64 _m64_pavg1_nraz(__m64 a, __m64 b)
a の符号なしのバイトデータ要素を、b の符号なしのバイトデータ要素に加算し、それぞれの加算の結果を 1 ポジションだけ右にシフトします。各要素の上位ビットは、和のキャリービットで埋められます。
__m64 _m64_pavg2_nraz(__m64 a, __m64 b)
a の符号なしの 16 ビット・データ要素を、b の符号なしの 16 ビット・データ要素に加算し、それぞれの加算の結果を 1 ポジションだけ右にシフトします。各要素の上位ビットは、和のキャリービットで埋められます。