Itanium® 命令のネイティブ組込み関数

Itanium® アーキテクチャ用の組込み関数のプロトタイプは、ヘッダファイルia64intrin.h内にあります。

整数演算

組込み関数 対応する命令
__int64 _m64_dep_mr(__int64 r, __int64 s, const int pos, const int len) dep (Deposit)
__int64 _m64_dep_mi(const int v, __int64 s, const int p, const int len) dep (Deposit)
__int64 _m64_dep_zr(__int64 s, const int pos, const int len) dep.z (Deposit)
__int64 _m64_dep_zi(const int v, const int pos, const int len) dep.z (Deposit)
__int64 _m64_extr(__int64 r, const int pos, const int len) extr (Extract)
__int64 _m64_extru(__int64 r, const int pos, const int len) extr.u (Extract)
__int64 _m64_xmal(__int64 a, __int64 b, __int64 c) xma.l (Fixed-point multiply add。128ビットの下位64ビットを使用します。結果は符号付きです。)
__int64 _m64_xmalu(__int64 a, __int64 b, __int64 c) xma..lu (Fixed-point multiply add。128ビットの下位64ビットを使用します。結果は符号なしです。)
__int64 _m64_xmah(__int64 a, __int64 b, __int64 c) xma.hl (Fixed-point multiply add。128ビットの上位64ビットを使用します。結果は符号付きです。)
__int64 _m64_xmahu(__int64 a, __int64 b, __int64 c) xma.hu (Fixed-point multiply add。128ビットの上位64ビットを使用します。結果は符号なしです。)
__int64 _m64_popcnt(__int64 a) popcnt (Population count)
__int64 _m64_shladd(__int64 a, const int count, __int64 b) shladd (Shift left and add)
__int64 _m64_shrp(__int64 a, __int64 b, const int count) shrp (Shift right pair)

FSR演算

組込み関数 説明
void _fsetc(int amask, 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ビットを返します。