インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

_mm512_swizzle_epi64/_mm512_mask_swizzle_epi64

64 ビット整数ベクトルにスウィズル操作(要素の並べ替え)を行います。対応する命令はありません。この組込み関数は、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。

構文

マスクなし

extern __m512i __cdecl _mm512_swizzle_epi64(__m512i v, _MM_SWIZZLE_ENUM s);

マスク付き

extern __m512i __cdecl _mm512_mask_swizzle_epi64(__m512i v1_old, __mmask8 k1, __m512i v, _MM_SWIZZLE_ENUM s);

引数

v

スウィズル操作を行うソースベクトル。

s

スウィズル引数。次のいずれかの値を指定します。

  • _MM_SWIZ_REG_NONE - hgfe dcba - 操作なし
  • _MM_SWIZ_REG_DCBA - hgfe dcba - 操作なし
  • _MM_SWIZ_REG_CDAB - ghef cdab - 要素をペアでスワップ
  • _MM_SWIZ_REG_BADC - fehg badc - 離れた要素をスワップ
  • _MM_SWIZ_REG_AAAA - eeee aaaa - a 要素をブロードキャスト
  • _MM_SWIZ_REG_BBBB - ffff bbbb - b 要素をブロードキャスト
  • _MM_SWIZ_REG_CCCC - gggg cccc - c 要素をブロードキャスト
  • _MM_SWIZ_REG_DDDD - hhhh dddd - d 要素をブロードキャスト
  • _MM_SWIZ_REG_DACB - hegf dacb - クロス積

v1_old

デスティネーション・ベクトルの古い値を保持するソースベクトル。マスクビットが 0 にセットされている場合は、v1_old の対応する要素が結果ベクトルにコピーされます。

k1

書き込みマスク。k1 マスクの対応するビットが '1' にセットされているソースベクトルの要素のみ計算され、結果に格納されます。

説明

スウィズル操作(要素の並べ替え)を実行します。スウィズル引数 s に応じて 64 ビット・ベクトルのレーン (各 4 要素) の要素を並べ替えます。スウィズル引数は、各レーンの要素の順序を指定します。 スウィズル引数 DCBA は並べ替えを行わないように指定します。例えば、ソースベクトルの要素が hgfe dcba (v[0]=a, v[1]=b, v[2]=c, …, v[7]=f) の場合、y=_mm512_swizzle_epi64(v, _MM_SWIZ_REG_BADC) を行うとすべての要素が並べ替えられ、nmpo jilk fehg badc(y[0]=c, y[1]=d, y[2]=a, …, y[7]=f) になります。

スウィズル引数が _MM_SWIZ_REG_BBBB の場合、前の例の入力ベクトルの結果ベクトルは ffff bbbb です。

マスク付きには 2 つの追加の引数 (v1_oldk1) があります。ベクトルマスク k1 が対応するビットがセットされているソースベクトル v の要素のみ計算に使用されます。ベクトルマスク k1 の対応するビットがセットされていないベクトル v の要素は計算に使用されません。代わりに、v1_old から結果ベクトルに対応する要素がコピーされます。

使用例

_mm512_add_epi64(v2, _mm512_swizzle_epi64(v3, _MM_SWIZ_REG_DACB));

戻り値

int64 ベクトルにスウィズル操作を行った結果。