다음을 통해 공유


_mm_extract_si64, _mm_extracti_si64

Microsoft 전용

첫 번째 인수의 extrq 하위 64비트에서 지정된 비트를 추출하는 명령을 생성합니다.

구문

__m128i _mm_extract_si64(
   __m128i Source,
   __m128i Descriptor
);
__m128i _mm_extracti_si64(
   __m128i Source,
   int Length,
   int Index
);

매개 변수

Source
[in] 하위 64비트에서 입력 데이터가 있는 128비트 필드입니다.

설명자
[in] 추출할 비트 필드를 설명하는 128비트 필드입니다.

길이
[in] 추출할 필드의 길이를 지정하는 정수입니다.

Index
[in] 추출할 필드의 인덱스를 지정하는 정수입니다.

반환 값

추출된 필드가 가장 중요한 비트인 128비트 필드입니다.

요구 사항

Intrinsic 아키텍처
_mm_extract_si64 SSE4a
_mm_extracti_si64 SSE4a

헤더 파일<intrin.h>

설명

이러한 내장 함수는 원본에서 비트를 추출하는 명령을 생성 extrq 합니다. 두 가지 버전 _mm_extracti_si64 이 있습니다. 바로 실행 버전이며 _mm_extract_si64 직접 실행되지 않는 버전입니다. 각 버전은 원본에서 해당 길이 및 가장 중요한 비트의 인덱스로 정의된 비트 필드를 추출합니다. 길이 및 인덱스의 값은 모드 64로 설정되므로 -1과 127은 모두 63으로 해석됩니다. (축소된) 인덱스 및 (축소된) 필드 길이의 합계가 64보다 크면 결과가 정의되지 않습니다. 필드 길이에 대해 0의 값은 64로 해석됩니다. 필드 길이와 비트 인덱스가 모두 0이면 원본비트 63:0이 추출됩니다. 필드 길이가 0이지만 비트 인덱스가 0이 아니면 결과가 정의되지 않습니다.

호출_mm_extract_si64에서 설명자는 비트 13:8의 인덱스와 비트 5:0에서 추출할 데이터의 필드 길이를 포함합니다.

컴파일러에서 정수 상수로 확인할 수 없는 인수를 사용하여 호출 _mm_extracti_si64 하는 경우 컴파일러는 해당 값을 XMM 레지스터(설명자)로 압축하고 호출 _mm_extract_si64하는 코드를 생성합니다.

명령에 대한 extrq 하드웨어 지원을 확인하려면 내장 InfoType=0x80000001 함수를 __cpuid 호출하고 6의 CPUInfo[2] (ECX)비트 6을 확인합니다. 명령이 지원되는 경우 이 비트는 1이고, 그렇지 않으면 0이 됩니다. 명령을 지원하지 extrq 않는 이 내장 하드웨어를 사용하는 코드를 실행하면 결과를 예측할 수 없습니다.

예시

// Compile this sample with: /EHsc
#include <iostream>
#include <intrin.h>
using namespace std;

union {
    __m128i m;
    unsigned __int64 ui64[2];
} source, descriptor, result1, result2, result3;

int
main()
{
    source.ui64[0] =     0xfedcba9876543210ll;
    descriptor.ui64[0] = 0x0000000000000b1bll;

    result1.m = _mm_extract_si64 (source.m, descriptor.m);
    result2.m = _mm_extracti_si64(source.m, 27, 11);
    result3.ui64[0] = (source.ui64[0] >> 11) & 0x7ffffff;

    cout << hex << "result1 = 0x" << result1.ui64[0] << endl;
    cout << "result2 = 0x" << result2.ui64[0] << endl;
    cout << "result3 = 0x" << result3.ui64[0] << endl;
}
result1 = 0x30eca86
result2 = 0x30eca86
result3 = 0x30eca86

Microsoft 전용 종료

부분 저작권 2007 고급 마이크로 디바이스, Inc. 모든 권한이 예약되어 있습니다. 고급 마이크로 디바이스, Inc.의 권한으로 재현

참고 항목

_mm_insert_si64, _mm_inserti_si64
컴파일러 내장 함수