__m64_mux1
[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 Blank topics are included as placeholders.]
Microsoft 固有の仕様 →
命令はmux1 の 2 番目のパラメーターで指定される特定のパターンのバイトを配置するために使用される mux 命令のバイトのフォームを生成します。
__m64 __m64_mux1(
__m64 source,
const int permutation
);
パラメーター
[入力] source
置換操作のソース データ。[入力] permutation
結果のソース バイトの置換を指定します。
必要条件
組み込み |
アーキテクチャ |
---|---|
__m64_mux1 |
IPF |
ヘッダー ファイル <intrin.h>
解説
使用可能なパターンを次の表に指定されます。
置換 |
演算 |
Description |
---|---|---|
0x0 |
@brcst |
最下位バイトに結果のすべてのバイト数をコピーします。 |
0x8 |
@mix |
ソースの 2 個の半分ミックスの操作を実行します。 |
0x9 |
@shuf |
ソースの 2 個の半分を簡単に操作を実行します。 |
0xA |
@alt |
ソースの 2 個の半分の変更操作を実行します。 |
0xB |
@rev |
バイトの順序を反転させる。 |
使用例
// mux1.cpp
// processor: IPF
#include <stdio.h>
#include <intrin.h>
#include <memory.h>
#pragma intrinsic(__m64_mux1)
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] = "01234567";
char s2[9];
__m64 m, result;
printf_s("Source string: %s\n", s1);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux1(m, 0); // @brcst form
m64tochararray(result, s2);
printf_s("mux1 @brcst (0x0) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux1(m, 8); // @mix form
m64tochararray(result, s2);
printf_s("mux1 @mix (0x8) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux1(m, 9); // @shuf form
m64tochararray(result, s2);
printf_s("mux1 @shuf (0x9) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux1(m, 0xA); // @alt form
m64tochararray(result, s2);
printf_s("mux1 @alt (0xA) form: %s\n", s2);
memset(s2, 0, 9);
chararraytom64(s1, &m);
result = __m64_mux1(m, 0xB); // @rev form
m64tochararray(result, s2);
printf_s("mux1 @rev (0xB) form: %s\n", s2);
}