_mm_com_epi16

업데이트: 2011년 3월

Visual Studio 2010 SP1이 필요합니다.

Microsoft 전용

XOP 명령 vpcomw를 생성하여 세 번째 소스에서 제공한 조건을 사용하여 처음 두 소스의 워드 단위 부호 있는 비교에서 생성된 비트 마스크를 반환합니다.

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

매개 변수

  • [in] src1
    8개의 16비트 부호 있는 정수의 128비트 배열을 패킹합니다.

  • [in] src2
    8개의 16비트 부호 있는 정수의 128비트 배열을 패킹합니다.

  • [in] condition
    비교에 사용할 32비트 정수 조건입니다. 합법적인 값은 0부터 7까지입니다.

반환 값

각각 0x0000 또는 0xFFFF인 8개의 16비트 부호 없는 정수의 압축된 128비트 배열 r입니다. cond가 condition의 값에 의해 암시된 논리 연산자인 경우

r[i] := src1[i] cond src2[i] ? 0xFFFF : 0x0000;

요구 사항

내장

아키텍처

_mm_com_epi16

XOP

헤더 파일 <intrin.h>

설명

이 명령은 condition에서 설명하는 비교 연산자를 사용하여 src1의 각 바이트를 src2의 해당 바이트와 비교합니다. (바이트의 각 쌍은 동일한 비교 연산자를 사용합니다.) 합법적인 값 condition은 0~7입니다. <intrin.h>를 포함시키면 condition에 대한 숫자 값 대신 다음 이름을 사용할 수 있습니다.

정수 값

기호화된 이름

의미

0

_MM_PCOMCTRL_LT

r[i] = (src1[i] < src2[i]) ? 0xFFFF : 0x0000

1

_MM_PCOMCTRL_LE

r[i] = (src1[i] <= src2[i]) ? 0xFFFF : 0x0000

2

_MM_PCOMCTRL_GT

r[i] = (src1[i] > src2[i]) ? 0xFFFF : 0x0000

3

_MM_PCOMCTRL_GE

r[i] = (src1[i] >= src2[i]) ? 0xFFFF : 0x0000

4

_MM_PCOMCTRL_EQ

r[i] = (src1[i] == src2[i]) ? 0xFFFF : 0x0000

5

_MM_PCOMCTRL_NEQ

r[i] = (src1[i] != src2[i]) ? 0xFFFF : 0x0000

6

_MM_PCOMCTRL_FALSE

r[i] = 0x0000 (모두 0으로 마스크)

7

_MM_PCOMCTRL_TRUE

r[i] = 0xFFFF (모두 1로 마스크)

원하는 경우 <intrin.h>가 포함되어 있을 때 정의되는 다음 매크로를 사용할 수 있습니다.

매크로

의미

_mm_comlt_epi16(src1, src2)

_mm_com_epi16(src1, src2, 0)

_mm_comle_epi16(src1, src2)

_mm_com_epi16(src1, src2, 1)

_mm_comgt_epi16(src1, src2)

_mm_com_epi16(src1, src2, 2)

_mm_comge_epi16(src1, src2)

_mm_com_epi16(src1, src2, 3)

_mm_comeq_epi16(src1, src2)

_mm_com_epi16(src1, src2, 4)

_mm_comneq_epi16(src1, src2)

_mm_com_epi16(src1, src2, 5)

_mm_comfalse_epi16(src1, src2)

_mm_com_epi16(src1, src2, 6)

_mm_comtrue_epi16(src1, src2)

_mm_com_epi16(src1, src2, 7)

vpcomb 명령은 XOP 명령군의 일부입니다. 이 intrinsic을 사용하기 전에 프로세서가 이 명령을 지원하는지 확인해야 합니다. 이 명령에 대한 하드웨어 지원을 확인하려면 InfoType = 0x80000001을 사용하여 __cpuid intrinsic을 호출하고 CPUInfo[2] (ECX)의 비트 11을 확인합니다. 명령이 지원되는 경우 비트는 1이고, 그렇지 않으면 0입니다.

예제

#include <stdio.h>
#include <intrin.h>
main()
{
    __m128i a, b, d;
    int i;
    for (i = 0; i < 8; i++) {
        a.m128i_i16[i] = ((20011*i) % 65535) - 32768;
        b.m128i_i16[i] = ((32767*i) % 65535) - 32768;
    }
    printf("src1:   ");
    for (i = 0; i < 8; i++) printf_s(" %6d", a.m128i_i16[i]);
    printf_s("\nsrc2:   ");
    for (i = 0; i < 8; i++) printf_s(" %6d", b.m128i_i16[i]);
    printf_s("\n<  mask:");
    d = _mm_com_epi16(a, b, _MM_PCOMCTRL_LT);
    for (i = 0; i < 8; i++) printf_s("   %04x", d.m128i_u16[i]);
    printf_s("\n== mask:");
    d = _mm_com_epi16(a, b, _MM_PCOMCTRL_EQ);
    for (i = 0; i < 8; i++) printf_s("   %04x", d.m128i_u16[i]);
    printf("\n");
}
  src1:    -32768 -12757   7254  27265 -18259   1752  21763 -23761
src2:    -32768     -1  32766     -2  32765     -3  32764     -4
<  마스크:   0000   ffff   ffff   0000   ffff   0000   ffff   ffff
== 마스크:   ffff   0000   0000   0000   0000   0000   0000   0000

참고 항목

기타 리소스

_mm_com_epi8

_mm_com_epi32

_mm_com_epi64

_mm_com_epu16

Visual Studio 2010 SP1용으로 추가된 XOP 내장 함수

변경 기록

날짜

변경 내용

이유

2011년 3월

이 내용이 추가되었습니다.

SP1 기능 변경