Itanium® アーキテクチャ用の組込み関数のプロトタイプは、ヘッダファイルia64intrin.h内にあります。
組込み関数 | 対応する命令 |
---|---|
__int64 _m64_czx1l(__m64 a) | czx1.l (Compute Zero Index) |
__int64 _m64_czx1r(__m64 a) | czx1.r (Compute Zero Index) |
__int64 _m64_czx2l(__m64 a) | czx2.l (Compute Zero Index) |
__int64 _m64_czx2r(__m64 a) | czx2.r (Compute Zero Index) |
__m64 _m64_mix1l(__m64 a, __m64 b) | mix1.l (Mix) |
__m64 _m64_mix1r(__m64 a, __m64 b) | mix1.r (Mix) |
__m64 _m64_mix2l(__m64 a, __m64 b) | mix2.l (Mix) |
__m64 _m64_mix2r(__m64 a, __m64 b) | mix2.r (Mix) |
__m64 _m64_mix4l(__m64 a, __m64 b) | mix4.l (Mix) |
__m64 _m64_mix4r(__m64 a, __m64 b) | mix4.r (Mix) |
__m64 _m64_mux1(__m64 a, const int n) | mux1 (Mux) |
__m64 _m64_mux2(__m64 a, const int n) | mux2 (Mux) |
__m64 _m64_padd1uus(__m64 a, __m64 b) | padd1.uus (Parallel add) |
__m64 _m64_padd2uus(__m64 a, __m64 b) | padd2.uus (Parallel add) |
__m64 _m64_pavg1_nraz(__m64 a, __m64 b) | pavg1 (Parallel average) |
__m64 _m64_pavg2_nraz(__m64 a, __m64 b) | pavg2 (Parallel average) |
__m64 _m64_pavgsub1(__m64 a, __m64 b) | pavgsub1 (Parallel average subtract) |
__m64 _m64_pavgsub2(__m64 a, __m64 b) | pavgsub2 (Parallel average subtract) |
__m64 _m64_pmpy2r(__m64 a, __m64 b) | pmpy2.r (Parallel multiply) |
__m64 _m64_pmpy2l(__m64 a, __m64 b) | pmpy2.l (Parallel multiply) |
__m64 _m64_pmpyshr2(__m64 a, __m64 b, const int count) | pmpyshr2 (Parallel multiply and shift right) |
__m64 _m64_pmpyshr2u(__m64 a, __m64 b, const int count) | pmpyshr2.u (Parallel multiply and shift right) |
__m64 _m64_pshladd2(__m64 a, const int count, __m64 b) | pshladd2 (Parallel shift left and add) |
__m64 _m64_pshradd2(__m64 a, const int count, __m64 b) | pshradd2 (Parallel shift right and add) |
__m64 _m64_psub1uus(__m64 a, __m64 b) | psub1.uus (Parallel subtract) |
__m64 _m64_psub2uus(__m64 a, __m64 b) | psub2.uus (Parallel subtract) |
__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に示すように、4バイト・グループ単位で右から順にインターリーブし、得られた結果を返します。
__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 の値を示します。
表1. m64_mux1 の 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ポジションだけ右にシフトします。各要素の上位ビットは、和のキャリービットで埋められます。