_mm_com_epi8

업데이트: 2011년 3월

Visual Studio 2010 SP1이 필요합니다.

Microsoft 전용

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

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

매개 변수

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

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

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

반환 값

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

r[i] := src1[i] cond src2[i] ? 0xFF : 0x00;

요구 사항

내장

아키텍처

_mm_com_epi8

XOP

헤더 파일 <intrin.h>

설명

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

정수 값

기호화된 이름

의미

0

_MM_PCOMCTRL_LT

r[i] = (src1[i] < src2[i]) ? 0xFF : 0x00

1

_MM_PCOMCTRL_LE

r[i] = (src1[i] <= src2[i]) ? 0xFF : 0x00

2

_MM_PCOMCTRL_GT

r[i] = (src1[i] > src2[i]) ? 0xFF : 0x00

3

_MM_PCOMCTRL_GE

r[i] = (src1[i] >= src2[i]) ? 0xFF : 0x00

4

_MM_PCOMCTRL_EQ

r[i] = (src1[i] == src2[i]) ? 0xFF : 0x00

5

_MM_PCOMCTRL_NEQ

r[i] = (src1[i] != src2[i]) ? 0xFF : 0x00

6

_MM_PCOMCTRL_FALSE

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

7

_MM_PCOMCTRL_TRUE

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

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

매크로

의미

_mm_comlt_epi8(src1, src2)

_mm_com_epi8(src1, src2, 0)

_mm_comle_epi8(src1, src2)

_mm_com_epi8(src1, src2, 1)

_mm_comgt_epi8(src1, src2)

_mm_com_epi8(src1, src2, 2)

_mm_comge_epi8(src1, src2)

_mm_com_epi8(src1, src2, 3)

_mm_comeq_epi8(src1, src2)

_mm_com_epi8(src1, src2, 4)

_mm_comneq_epi8(src1, src2)

_mm_com_epi8(src1, src2, 5)

_mm_comfalse_epi8(src1, src2)

_mm_com_epi8(src1, src2, 6)

_mm_comtrue_epi8(src1, src2)

_mm_com_epi8(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 < 16; i++) {
        a.m128i_i8[i] = ((11*i) % 31) - 16;
        b.m128i_i8[i] = ((13*i) % 31) - 16;
    }
    printf("src1:   ");
    for (i = 0; i < 16; i++) printf_s(" %3d", a.m128i_i8[i]);
    printf_s("\nsrc2:   ");
    for (i = 0; i < 16; i++) printf_s(" %3d", b.m128i_i8[i]);
    printf_s("\n<=mask: ");
    d = _mm_com_epi8(a, b, _MM_PCOMCTRL_LE);
    for (i = 0; i < 16; i++) printf_s("  %02x", d.m128i_u8[i]);
    printf_s("\n> mask: ");
    d = _mm_com_epi8(a, b, _MM_PCOMCTRL_GT);
    for (i = 0; i < 16; i++) printf_s("  %02x", d.m128i_u8[i]);
    printf("\n");
}
  

참고 항목

기타 리소스

_mm_com_epi16

_mm_com_epi32

_mm_com_epi64

_mm_com_epu8

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

변경 기록

날짜

변경 내용

이유

2011년 3월

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

SP1 기능 변경