_mm_roti_epi8

업데이트: 2011년 3월

Visual Studio 2010 SP1이 필요합니다.

Microsoft 전용

XOP 명령 vprotb를 생성하여 첫 번째 소스의 각 바이트를 두 번째 소스에 지정된 양만큼 회전합니다.

__m128i _mm_roti_epi8 (
   __m128i src,
   int count
);

매개 변수

  • [in] src
    16개의 8비트 부호 없는 정수를 포함하는 128비트 매개 변수입니다.

  • [in] count
    정수 회전 수, 가능하면 상수입니다.

반환 값

16개의 8비트 부호 없는 정수를 포함하는 128비트 결과 r입니다.

r[i] := (count > 0) ? rotate_left(src[i], count) : 
                      rotate_right(src[i], -count);

요구 사항

내장

아키텍처

_mm_roti_epi8

XOP

헤더 파일 <intrin.h>

설명

src의 각 8비트 부호 없는 정수 값은 count에 지정된 비트 수만큼 회전되며 8비트 부호 없는 정수 결과는 대상에 해당 값으로 저장됩니다. count의 값이 양수인 경우에는 왼쪽(최상위 비트쪽)으로 회전하고, 그렇지 않으면 오른쪽으로 회전합니다.

vprotb 명령은 상수 인수와 비상수 인수에 대해 각각 다른 양식이 있습니다. count의 값을 컴파일 시간에 상수로 확인할 수 없는 경우 컴파일러는 vprotb의 비상수 버전을 설치하고 사용하는 추가 코드를 생성합니다. vprotb의 상수 버전이 빠릅니다.

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

예제

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128i a, d;
    int i;
    for (i = 0; i < 16; i++) {
        a.m128i_u8[i] = (i << 4) | (15 - i);
    }
    d = _mm_roti_epi8(a, -3);
    printf_s("data:               ");
    for (i = 0; i < 16; i++) printf_s(" %02x", a.m128i_u8[i]);
    printf_s("\nrotated by -3 gives ");
    for (i = 0; i < 16; i++) printf_s(" %02x", d.m128i_u8[i]);
    printf_s("\n");
}
  데이터:                0f 1e 2d 3c 4b 5a 69 78 87 96 a5 b4 c3 d2 e1 f0
-3만큼 회전하여 e1 c3 a5 87 69 4b 2d 0f f0 d2 b4 96 78 5a 3c 1e 제공

참고 항목

참조

__cpuid, __cpuidex

기타 리소스

_mm_roti_epi16

_mm_roti_epi32

_mm_roti_epi64

_mm_rot_epi8

_mm_shl_epi8

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

변경 기록

날짜

변경 내용

이유

2011년 3월

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

SP1 기능 변경