_mm_perm_epi8
更新 : 2011 年 3 月
Visual Studio 2010 SP1 が必要です。
Microsoft 固有の仕様 →
XOP 命令 vpperm を生成して、1 つ目と 2 つ目のソースからバイトを選択し、任意でそれらを変換します。
__m128i _mm_perm_epi8 (
__m128i src1,
__m128i src2,
__m128i selector
);
パラメーター
[入力] src1
16 個のバイトを含む 128 ビットのパラメーター。[入力] src2
16 個のバイトを含む 128 ビットのパラメーター。[入力] selector
src1 および src2 からバイトを選択し、選択したバイトに適用する変換を任意で選択する 128 ビットのパラメーター。
戻り値
src1 および src2 から選択されたバイトを含み、任意で変換される 128 ビットの結果 r。
必要条件
組み込み |
アーキテクチャ |
---|---|
_mm_perm_epi8 |
XOP |
ヘッダー ファイル <intrin.h>
解説
selector のバイトごとに、下位ビットによって src1 または src2 からバイトが選択されます。 値 0 から 15 では src1 のバイト 0 から 15 が選択され、値 16 から 31 では src2 のバイト 0 から 15 が選択されます。 selector の各バイトの上位ビットによって、選択されたバイトに適用する変換が決まります (変換する場合)。
selector の上位 3 ビットの値 |
選択される変換 |
---|---|
000b |
変換なし |
001b |
ソース バイトを反転する (1 の補数) |
010b |
ソース バイトをビット リバースする |
011b |
反転したソース バイトをビット リバースする |
100b |
結果のバイトを 0x00 に設定する |
101b |
結果のバイトを 0xFF に設定する |
110b |
ソース バイトの最上位ビットを複製する |
111b |
ソース バイトの反転した最上位ビットを複製する |
vpperm 命令は、XOP ファミリの命令の一部です。 この組み込みを使用する前に、プロセッサでこの命令がサポートされていることを確認してください。 この命令に対するハードウェア サポートを確認するには、InfoType を 0x80000001 にして __cpuid 組み込みを呼び出し、CPUInfo[2] (ECX) のビット 11 をチェックします。 このビットは、命令がサポートされている場合は 1 になり、サポートされていない場合は 0 になります。
使用例
#include <stdio.h>
#include <intrin.h>
int main()
{
__m128i a, b, selector, d;
int i;
for (i = 15; i >= 0; i--) {
a.m128i_u8[i] = i; // 0x0f0e0d0c...
b.m128i_u8[i] = (i << 4) | i; // 0xffeeddcc...
}
selector.m128i_u64[1] = 0xfedcba9876543210ll;
selector.m128i_u64[0] = 0x0011223344556677ll;
d = _mm_perm_epi8(a, b, selector);
printf_s("%016I64x %016I64x\n", d.m128i_u64[1], d.m128i_u64[0]);
}
参照
参照
その他の技術情報
Visual Studio 2010 SP1 用に追加された XOP 組み込み
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2011 年 3 月 |
このコンテンツを追加。 |
SP1 機能変更 |