次の方法で共有


_mm_com_epi32

更新 : 2011 年 3 月

Visual Studio 2010 SP1 が必要です。

Microsoft 固有の仕様 →

XOP 命令 vpcomd を生成して、3 つ目のソースで指定された条件に基づいて 1 つ目と 2 つ目のソースのダブルワード間の符号付き比較を実行することによって生成されるビットマスクを返します。

__m128i _mm_com_epi32 (
   __m128i src1,
   __m128i src2,
   int condition
);

パラメーター

  • [入力] src1
    4 個の 32 ビット符号付き整数で構成される、パックされた 128 ビット配列。

  • [入力] src2
    4 個の 32 ビット符号付き整数で構成される、パックされた 128 ビット配列。

  • [入力] condition
    比較で使用される 32 ビット整数の条件。 有効な値は 0 から 7 です。

戻り値

4 個の 32 ビット符号なし整数 (それぞれ 0x00000000 または 0xFFFFFFFF) で構成される、パックされた 128 ビット配列 r。 cond が condition の値で暗示された論理演算子である場合は、次のようになります。

r[i] := src1[i] cond src2[i] ? 0xFFFFFFFF : 0x00000000;

必要条件

組み込み

アーキテクチャ

_mm_com_epi32

XOP

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

解説

この命令では、condition で記述された比較演算子を使用して、src1 の各ダブルワードと src2 の対応するダブルワードを比較します (ダブルワードの各ペアでは、同じ比較演算子が使用されます)。 condition の有効な値は 0 から 7 です。 <intrin.h> を含めることによって、condition に数値ではなく次の名前を使用できるようになります。

整数値

シンボル名

説明

0

_MM_PCOMCTRL_LT

r[i] = (src1[i] < src2[i]) ? 0xFFFFFFFF : 0x00000000

1

_MM_PCOMCTRL_LE

r[i] = (src1[i] <= src2[i]) ? 0xFFFFFFFF : 0x00000000

2

_MM_PCOMCTRL_GT

r[i] = (src1[i] > src2[i]) ? 0xFFFFFFFF : 0x00000000

3

_MM_PCOMCTRL_GE

r[i] = (src1[i] >= src2[i]) ? 0xFFFFFFFF : 0x00000000

4

_MM_PCOMCTRL_EQ

r[i] = (src1[i] == src2[i]) ? 0xFFFFFFFF : 0x00000000

5

_MM_PCOMCTRL_NEQ

r[i] = (src1[i] != src2[i]) ? 0xFFFFFFFF : 0x00000000

6

_MM_PCOMCTRL_FALSE

r[i] = 0x00000000 (すべてゼロのマスク)

7

_MM_PCOMCTRL_TRUE

r[i] = 0xFFFFFFFF (すべて 1 のマスク)

必要に応じて、次のマクロを使用できます。このマクロは、<intrin.h> を含めるときに定義するものです。

マクロ

説明

_mm_comlt_epi32(src1, src2)

_mm_com_epi32(src1, src2, 0)

_mm_comle_epi32(src1, src2)

_mm_com_epi32(src1, src2, 1)

_mm_comgt_epi32(src1, src2)

_mm_com_epi32(src1, src2, 2)

_mm_comge_epi32(src1, src2)

_mm_com_epi32(src1, src2, 3)

_mm_comeq_epi32(src1, src2)

_mm_com_epi32(src1, src2, 4)

_mm_comneq_epi32(src1, src2)

_mm_com_epi32(src1, src2, 5)

_mm_comfalse_epi32(src1, src2)

_mm_com_epi32(src1, src2, 6)

_mm_comtrue_epi32(src1, src2)

_mm_com_epi32(src1, src2, 7)

vpcomd 命令は、XOP ファミリの命令の一部です。 この組み込みを使用する前に、プロセッサでこの命令がサポートされていることを確認してください。 この命令に対するハードウェア サポートを確認するには、InfoType を 0x80000001 にして __cpuid 組み込みを呼び出し、CPUInfo[2] (ECX) のビット 11 をチェックします。 このビットは、命令がサポートされている場合は 1 になり、サポートされていない場合は 0 になります。

使用例

#include <stdio.h>
#include <intrin.h>
main()
{
    __m128i a, b, d;
    int i;
    for (i = 0; i < 4; i++) {
        a.m128i_i32[i] = 1000*i - 1500;
        b.m128i_i32[i] = 2000*i - 2500;
    }
    printf("src1:      ");
    for (i = 0; i < 4; i++) printf_s("   %8d", a.m128i_i32[i]);
    printf_s("\nsrc2:      ");
    for (i = 0; i < 4; i++) printf_s("   %8d", b.m128i_i32[i]);
    printf_s("\n!= mask:   ");
    d = _mm_com_epi32(a, b, _MM_PCOMCTRL_NEQ);
    for (i = 0; i < 4; i++) printf_s("   %08x", d.m128i_u32[i]);
    printf_s("\ntrue mask: ");
    d = _mm_com_epi32(a, b, _MM_PCOMCTRL_TRUE);
    for (i = 0; i < 4; i++) printf_s("   %08x", d.m128i_u32[i]);
    printf("\n");
}
  

参照

その他の技術情報

_mm_com_epi8

_mm_com_epi16

_mm_com_epi64

_mm_com_epu32

Visual Studio 2010 SP1 用に追加された XOP 組み込み

履歴の変更

日付

履歴

理由

2011 年 3 月

このコンテンツを追加。

SP1 機能変更