__m64_mix1l、__m64_mix1r、__m64_mix2l、__m64_mix2r、__m64_mix4l、__m64_mix4r

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 Blank topics are included as placeholders.]

Microsoft 固有の仕様 →

2 番目のオペランドのバイトのミックスに基づいて結果を生成するさまざまな形式のはミックス mix() 命令を生成します。

__m64 __m64_mix1l( 
   __m64 a, 
   __m64 b 
);
__m64 __m64_mix1r( 
   __m64 a, 
   __m64 b 
);
__m64 __m64_mix2l( 
   __m64 a,
   __m64 b
);
__m64 __m64_mix2r( 
   __m64 a, 
   __m64 b 
);
__m64 __m64_mix4l( 
   __m64 a,
   __m64 b 
);
__m64 __m64_mix4r( 
   __m64 a, 
   __m64 b 
);

パラメーター

  • [入力] a
    最初の元の値。

  • [入力] b
    2 番目の元の値。

必要条件

組み込み

アーキテクチャ

__m64_mix1l

IPF

__m64_mix1r

IPF

__m64_mix2l

IPF

__m64_mix2r

IPF

__m64_mix4l

IPF

__m64_mix4r

IPF

ヘッダー ファイル <intrin.h>

解説

さまざまな形式の命令は結果を構成するバイトの配置方法を指定します。 命令はブロックでコピーしたかおよびブロックの各ペアの左右のブロックは結果用に選択されたバイト数によって異なります。

ソースのパラメーターはサイズ ブロックに 1 ビット2 ビットまたは組み込みの名前によって示されるように4 バイトであると見なされます。 隣接するソース ブロックは各ペア) の左側。つまり右側に (下位) メンバーのペアにグループ化されます。

これらの組み込み左回り (l) バージョンでは結果は次のように左から右に構築されます : 結果のブロックの後続の各ペアが a のペアの左側にあるブロックを選択することによってペアに左から右に選択する b に対応する左側のペアのブロックが作成されます。

これらの組み込みの右 (r) バージョンでは結果は次のように左から右に構築されます : 結果のブロックの後続の各ペアに右から a ペアのブロックを選択することによってペアに左から右に選択する b から一致するペアの右ブロックが作成されます。

使用例

// mix.cpp
// processor: IPF
#include <stdio.h>
#include <intrin.h>

#pragma intrinsic(__m64_mix1l, __m64_mix1r, __m64_mix2l)
#pragma intrinsic(__m64_mix2r, __m64_mix4l, __m64_mix4r)

void f(__m64 a, __m64 b)
{
    __m64 t;
    t = __m64_mix1l(a, b);
    printf_s("mix1l(0x%I64x, 0x%I64x) returns 0x%I64x\n",
             a.m64_u64, b.m64_u64, t.m64_u64);
    t = __m64_mix1r(a, b);
    printf_s("mix1r(0x%I64x, 0x%I64x) returns 0x%I64x\n",
             a.m64_u64, b.m64_u64, t.m64_u64);
    t = __m64_mix2l(a, b);
    printf_s("mix2l(0x%I64x, 0x%I64x) returns 0x%I64x\n",
             a.m64_u64, b.m64_u64, t.m64_u64);
    t = __m64_mix2r(a, b);
    printf_s("mix2r(0x%I64x, 0x%I64x) returns 0x%I64x\n",
             a.m64_u64, b.m64_u64, t.m64_u64);
    t = __m64_mix4l(a, b);
    printf_s("mix4l(0x%I64x, 0x%I64x) returns 0x%I64x\n",
             a.m64_u64, b.m64_u64, t.m64_u64);
    t = __m64_mix4r(a, b);
    printf_s("mix4r(0x%I64x, 0x%I64x) returns 0x%I64x\n",
             a.m64_u64, b.m64_u64, t.m64_u64);
}

int main()
{
    __m64 m, n;
    m.m64_u64 = -1;
    n.m64_u64 = 0;
   
    f(m, n);

    m.m64_u64 = 0x7766554433221100;
    n.m64_u64 = 0xFFEEDDCCBBAA9988;
   
    f(m, n);
}
          
        

参照

Reference

__m64

コンパイラ組み込み関数。