Udostępnij za pośrednictwem


_mm_extract_si64, _mm_extracti_si64

Programu Microsoft

Generuje extrq instrukcję, aby wyodrębnić określonej usługi bits z niskim 64 bity pierwszego argumentu.

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

Parametry

  • [w]Source
    128-Bitowe pole z danych wejściowych w jego dolnej 64 bitów.

  • [w]Descriptor
    128-Bitowe pole opisuje pole bitowe wyodrębnić.

  • [w]Length
    Liczba całkowita, która określa długość pola do wyodrębnienia.

  • [w]Index
    Liczba całkowita, która określa indeks pola, aby wyodrębnić

Wartość zwracana

128-Bitowego pola wyodrębnione w jego najmniej znaczące bity.

Wymagania

Wewnętrzne

Architektura

_mm_extract_si64

SSSE3

_mm_extracti_si64

SSSE3

Plik nagłówkowy <intrin.h>

Uwagi

Generuje tym wewnętrzne extrq instrukcji, aby wyodrębnić bity od Source.Wewnętrzne są dwie wersje to: _mm_extracti_si64 jest wersją natychmiastowego i _mm_extract_si64 jest natychmiastowe.Każda wersja wyciągów z Source określonych przez jej długości i indeks jego najmniej znaczący bit pola bit.Wartości długości i indeksu są pobierane mod 64, więc zarówno -1 i 127 są interpretowane jako 63.Jeśli suma indeksu (obniżone) i długość pola (obniżone) jest większy niż 64, wyniki są niezdefiniowane.Wartość zero w polu Długość jest interpretowany jako 64.Jeśli pole długości i bit indeksu są zarówno zero, bity 63:0 z Source są ekstrahowane.Jeśli długość pola wynosi zero, ale indeks bit jest niezerowa, wyniki są niezdefiniowane.

W wywołaniu _mm_extract_si64 Descriptor zawiera indeks w 13: 8 bitach i długość pola danych, które ma być wyodrębniony bity 5: 0.

Jeśli zadzwonisz _mm_extracti_si64 z argumentami, kompilator nie może określić, za stałe całkowitą kompilator generuje kod do tych wartości w rejestrze XMM (Descriptor) oraz wywołanie _mm_extract_si64.

Aby określić obsługę sprzętu extrq instrukcji, wywołanie __cpuid wewnętrzne z InfoType=0x80000001 i sprawdź bit 6 CPUInfo[2] (ECX).Ten bit będzie 1 Jeśli instrukcja jest obsługiwana i 0 w przeciwnym wypadku.Jeśli możesz uruchomić kod, który używa tej wewnętrzne sprzętu, który nie obsługuje extrq instrukcji, wyniki są nieprzewidywalne.

Przykład

// 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;
}
  

KONIEC Microsoft szczególne

Copyright 2007 Advanced Micro urządzeń, Inc. wszelkie prawa zastrzeżone.Odtworzone z uprawnieniem z Advanced Micro urządzeń, Inc.

Zobacz też

Informacje

_mm_insert_si64, _mm_inserti_si64

Funkcje wewnętrzne kompilatora