IA-64 命令用のネイティブ組み込み関数

組み込み関数のプロトタイプは、ヘッダーファイル ia64intrin.h 内にあります。

整数演算

組み込み関数 操作 対応する IA-64
命令
_m64_dep_mr デポジット dep
_m64_dep_mi デポジット dep
_m64_dep_zr デポジット dep.z
_m64_dep_zi デポジット dep.z
_m64_extr 抽出 extr
_m64_extru 抽出 extr.u
_m64_xmal 積和 xma.l
_m64_xmalu 積和 xma.lu
_m64_xmah 積和 xma.h
_m64_xmahu 積和 xma.hu
_m64_popcnt 1 に設定されたビットのカウント popcnt
_m64_shladd 左シフトおよび加算 shladd
_m64_shrp 連結右シフト shrp

FSR 演算

組み込み関数 説明
void _fsetc(unsigned int amask, unsigned int omask) FPSR.sf0 の制御ビットをセットします。fsetc.sf0 r, r 命令に対応付けます。これに対応する、制御ビットの読み取り命令はありません。_mm_getfpsr() を使用してください。
void _fclrf(void) 浮動小数点ステータスフラグ (FPSR.sf0 の 6 ビット・フラグ) をクリアします。fclrf.sf0 命令に対応付けます。

__int64 _m64_dep_mr(__int64 r, __int64 s, const int pos, const int len)

右揃えした 64 ビット値 r を、s の値の中の任意のビット位置にデポジットし、その結果を返します。デポジットしたビット・フィールドは、ビット位置 pos を始点として、len で指定したビット数だけ左に (最上位ビットの方向に) 延長します。

 

__int64 _m64_dep_mi(const int v, __int64 s, const int p, const int len)

符号で拡張した値 v (すべて 1 またはすべて 0) を、s の値の中の任意のビット位置にデポジットし、その結果を返します。デポジットしたビット・フィールドは、ビット位置 p を始点として、len で指定したビット数だけ左に (最上位ビットの方向に) 延長します。

 

__int64 _m64_dep_zr(__int64 s, const int pos, const int len)

右揃えした 64 ビット値 s を、すべて 0 の 64 ビット・フィールド内の任意のビット位置にデポジットし、その結果を返します。デポジットしたビット・フィールドは、ビット位置 pos を始点として、len で指定したビット数だけ左に (最上位ビットの方向に) 延長します。

 

__int64 _m64_dep_zi(const int v, const int pos, const int len)

符号で拡張した値 v (すべて 1 またはすべて 0) を、すべて 0 の 64 ビット・フィールド内の任意のビット位置にデポジットし、その結果を返します。デポジットしたビット・フィールドは、ビット位置 pos を始点として、len で指定したビット数だけ左に (最上位ビットの方向に) 延長します。

 

__int64 _m64_extr(__int64 r, const int pos, const int len)

64 ビット値 r から 1 つのフィールドを抽出し、右揃えにして符号で拡張した値を返します。抽出したフィールドは、pos の位置を始点として、len ビットだけ左に延長します。抽出したフィールドの最上位ビットの符号が使用されます。

 

__int64 _m64_extru(__int64 r, const int pos, const int len)

64 ビット値 r から 1 つのフィールドを抽出し、右揃えにして 0 で拡張した値を返します。抽出したフィールドは、pos の位置を始点として、len ビットだけ左に延長します。

 

__int64 _m64_xmal(__int64 a, __int64 b, __int64 c)

64 ビット値 ab を符号付き整数と見なして乗算し、全 128 ビットの符号付きの結果を求めます。64 ビット値 c を 0 で拡張してこの積に加算し、得られた和の最下位 64 ビットを返します。

 

__int64 _m64_xmalu(__int64 a, __int64 b, __int64 c)

64 ビット値 ab を符号付き整数と見なして乗算し、全 128 ビットの符号なしの結果を求めます。64 ビット値 c を 0 で拡張してこの積に加算し、得られた和の最下位 64 ビットを返します。

 

__int64 _m64_xmah(__int64 a, __int64 b, __int64 c)

64 ビット値 ab を符号付き整数と見なして乗算し、全 128 ビットの符号付きの結果を求めます。64 ビット値 c を 0 で拡張してこの積に加算し、得られた和の最上位 64 ビットを返します。

 

__int64 _m64_xmahu(__int64 a, __int64 b, __int64 c)

64 ビット値 ab を符号なし整数と見なして乗算し、全 128 ビットの符号なしの結果を求めます。64 ビット値 c を 0 で拡張してこの積に加算し、得られた和の最上位 64 ビットを返します。

 

__int64 _m64_popcnt(__int64 a)

64 ビット整数 a の中のビットのうち、値が 1 のビットをカウントし、得られたビット数を返します。

 

__int64 _m64_shladd(__int64 a, const int count, __int64 b)

acount ビットだけ左にシフトして、b に加算します。結果を返します。

 

__int64 _m64_shrp(__int64 a, __int64 b, const int count)

ab を連結して 128 ビット値を作成し、count ビットだけ右にシフトします。結果の最下位 64 ビットを返します。