_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");
}
참고 항목
기타 리소스
Visual Studio 2010 SP1용으로 추가된 XOP 내장 함수
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2011년 3월 |
이 내용이 추가되었습니다. |
SP1 기능 변경 |