__m64_mux2
[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 Blank topics are included as placeholders.]
Microsoft 固有の仕様 →
命令は mux22 番目のパラメーターで指定される特定のパターンのバイトを配置するために使用される mux 命令のバイトのフォームを生成します。
__m64 __m64_mux2(
__m64 source,
const int permutation
);
パラメーター
[入力] source
置換操作のソース データ。[入力] permutation
結果のソース バイトの置換を指定します。
必要条件
組み込み |
アーキテクチャ |
---|---|
__m64_mux2 |
IPF |
ヘッダー ファイル <intrin.h>
解説
2 番目のパラメーターは8 ビットです。 ビットの最初の要素 (または空になった最上位ビット最下位ビットに左から右に移動します) ソースの 4 個の 16 ビットのセクションのかを permutation のパラメーターのビット 2 番目3 番目4 番目のペアの結果の上位 16 ビットのセクションではを選択します。 たとえば0x1b (00011011) はソースと同じ場所に0xe4 (11100100 ビット) がビットを反転させます。 元のビットが複数回選択されることがあります。; たとえば0x0 (00000000) は結果と 0xFF (11111111)16 ビットのスロットに結果の各 16 ビットのスロットに最初の 16bit をブロードキャスト最後の 16bit をブロードキャストされます。
使用例
// mux2.cpp
// processor: IPF
#include <stdio.h>
#include <intrin.h>
#include <memory.h>
#pragma intrinsic(__m64_mux2)
void m64tochararray(__m64 m64, char* c)
{
for (int j = 0; j < 8; j++)
c[j] = m64.m64_i8[j];
}
void chararraytom64(const char* c, __m64* pm64)
{
for (int j = 0; j < 8; j++)
pm64->m64_i8[j] = c[j];
}
int main()
{
char s1[9] = "00112233";
char s2[9];
__m64 m, result;
printf_s("Source string: %s\n", s1);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux2(m, 0x1b); // reverse: 00011011
m64tochararray(result, s2);
printf_s("mux2 (0x1b) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux2(m, 0xe4); // identity: 11100100
m64tochararray(result, s2);
printf_s("mux2 (0xe4) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux2(m, 0); // broadcast the first 16-bits
m64tochararray(result, s2);
printf_s("mux2 (0x00) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux2(m, 0xff); // broadcast the last 16-bits
m64tochararray(result, s2);
printf_s("mux2 (0xff) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux2(m, 0x8d); // shuffle: 10001101
m64tochararray(result, s2);
printf_s("mux2 (0x8d) form: %s\n", s2);
}