_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_si64
Tanı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.