Share via


_mm_perm_epi8

업데이트: 2011년 3월

Visual Studio 2010 SP1이 필요합니다.

Microsoft 전용

XOP 명령 vpperm를 생성하여 처음 두 소스에서 바이트를 선택하고 이를 선택적으로 변환합니다.

__m128i _mm_perm_epi8 (
   __m128i src1,
   __m128i src2,
   __m128i selector
);

매개 변수

  • [in] src1
    16개 바이트를 포함하는 128비트 매개 변수입니다.

  • [in] src2
    16개 바이트를 포함하는 128비트 매개 변수입니다.

  • [in] selector
    src1 및 src2에서 바이트를 선택하고 필요에 따라 선택한 바이트에 적용할 변환을 선택하는 128비트 매개 변수입니다.

반환 값

src1 및 src2에서 선택한 바이트를 포함하는 128비트 결과 r이며 선택적으로 변환됩니다.

요구 사항

내장

아키텍처

_mm_perm_epi8

XOP

헤더 파일 <intrin.h>

설명

selector의 각 바이트에 대해 하위 비트는 src1 또는 src2에서 바이트를 선택합니다. 값 0~15는 src1의 바이트 0~15를 선택하는 반면, 값 16~31은 src2의 바이트 0~15를 선택합니다. selector에서 각 바이트의 하위 비트는 선택한 바이트에 적용할 변환을 결정합니다.

선택기의 상위 3 비트 값

선택한 변환

000b

변환하지 않습니다.

001b

원본 바이트 반전(한 구성 요소)

010b

비트 역방향 소스 바이트

011b

비트 역방향 반전 소스 바이트

100b

결과 바이트를 0x00으로 설정

101b

결과 바이트를 0xFF로 설정

110b

원본 바이트의 최상위 비트 복제

111b

원본 바이트의 반전된 최상위 비트 복제

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

예제

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128i a, b, selector, d;
    int i;
    for (i = 15; i >= 0; i--) {
        a.m128i_u8[i] = i;               // 0x0f0e0d0c...
        b.m128i_u8[i] = (i << 4) | i;    // 0xffeeddcc...
    }
    selector.m128i_u64[1] = 0xfedcba9876543210ll;
    selector.m128i_u64[0] = 0x0011223344556677ll;
    d = _mm_perm_epi8(a, b, selector);
    printf_s("%016I64x %016I64x\n", d.m128i_u64[1], d.m128i_u64[0]);
}
  

참고 항목

참조

__cpuid, __cpuidex

기타 리소스

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

변경 기록

날짜

변경 내용

이유

2011년 3월

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

SP1 기능 변경