Aracılığıyla paylaş


_mm_extract_si64, _mm_extracti_si64

Microsoft'a Özgü

İlk bağımsız değişkeninin extrq düşük 64 bitinden belirtilen bitleri ayıklama yönergesini oluşturur.

Sözdizimi

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

Parametreler

Kaynak
[in] Giriş verilerinin daha düşük 64 bit olduğu 128 bitlik bir alan.

Tanımlayıcısı
[in] Ayıklanması gereken bit alanını açıklayan 128 bit alan.

Uzunluk
[in] Ayıklanan alanın uzunluğunu belirten bir tamsayı.

Dizin
[in] Ayıklanan alanın dizinini belirten bir tamsayı

Dönüş değeri

Ayıklanan alanın en az önemli bitleri olan 128 bitlik bir alan.

Gereksinimler

Içsel Mimari
_mm_extract_si64 SSE4a
_mm_extracti_si64 SSE4a

intrin.h üst bilgi dosyası<>

Açıklamalar

Bu iç kodlar, Kaynaktan bit ayıklama yönergesi oluştururextrq. İki sürüm vardır: _mm_extracti_si64 anlık sürümdür ve _mm_extract_si64 hemen olmayan sürümdür. Her sürüm Source'tan uzunluğuna ve en az önemli bit dizinine göre tanımlanan bir bit alanı ayıklar. Uzunluk ve dizin değerleri mod 64 alınır, bu nedenle hem -1 hem de 127 63 olarak yorumlanır. (Azaltılmış) dizinin ve (azaltılmış) alan uzunluğunun toplamı 64'ten büyükse, sonuçlar tanımlanmamış olur. Alan uzunluğu için sıfır değeri 64 olarak yorumlanır. Alan uzunluğu ve bit dizininin ikisi de sıfırsa, Kaynak'ın 63:0 bitleri ayıklanır. Alan uzunluğu sıfır ancak bit dizini sıfır değilse, sonuçlar tanımlanmamış olur.

çağrısında _mm_extract_si64Tanımlayıcı, bit 13:8'deki dizini ve bit 5:0'da ayıklanacak verilerin alan uzunluğunu içerir.

Derleyicinin tamsayı sabitleri olduğunu belirleyemediğini bağımsız değişkenlerle çağırırsanız_mm_extracti_si64, derleyici bu değerleri bir XMM yazmacına (Tanımlayıcı) paketlemek ve çağırmak_mm_extract_si64 için kod oluşturur.

Yönergeye extrq yönelik donanım desteğini belirlemek için ile iç InfoType=0x80000001 öğesini çağırın __cpuid ve bit 6'sını CPUInfo[2] (ECX)denetleyin. Yönerge destekleniyorsa bu bit 1, aksi takdirde 0 olur. Yönergeyi desteklemeyen extrq bu iç donanımı kullanan kodu çalıştırırsanız, sonuçlar tahmin edilemez.

Örnek

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

END Microsoft'a Özgü

Advanced Micro Devices, Inc. Tarafından Telif Hakkı 2007 Bölümleri Tüm hakları saklıdır. Reproduced with permission from Advanced Micro Devices, Inc.

Ayrıca bkz.

_mm_insert_si64, _mm_inserti_si64
Derleyici iç bilgileri