_mm_extract_si64, _mm_extracti_si64
Khusus Microsoft
extrq
Menghasilkan instruksi untuk mengekstrak bit yang ditentukan dari 64 bit rendah dari argumen pertamanya.
Sintaks
__m128i _mm_extract_si64(
__m128i Source,
__m128i Descriptor
);
__m128i _mm_extracti_si64(
__m128i Source,
int Length,
int Index
);
Parameter
Sumber
[di] Bidang 128-bit dengan data input dalam 64 bit yang lebih rendah.
Deskripsi
[di] Bidang 128-bit yang menjelaskan bidang bit untuk diekstrak.
Panjang
[di] Bilangan bulat yang menentukan panjang bidang yang akan diekstrak.
Index
[di] Bilangan bulat yang menentukan indeks bidang yang akan diekstrak
Nilai hasil
Bidang 128-bit dengan bidang yang diekstrak dalam bit yang paling tidak signifikan.
Persyaratan
Intrinsik | Sistem |
---|---|
_mm_extract_si64 |
SSE4a |
_mm_extracti_si64 |
SSE4a |
File header<intrin.h>
Keterangan
Intrinsik ini menghasilkan extrq
instruksi untuk mengekstrak bit dari Sumber. Ada dua versi: _mm_extracti_si64
adalah versi langsung, dan _mm_extract_si64
merupakan versi non-langsung. Setiap versi mengekstrak dari bidang Sumber bit yang ditentukan oleh panjangnya dan indeks bit yang paling tidak signifikan. Nilai panjang dan indeks diambil mod 64, sehingga -1 dan 127 ditafsirkan sebagai 63. Jika jumlah indeks (berkurang) dan panjang bidang (berkurang) lebih besar dari 64, hasilnya tidak ditentukan. Nilai nol untuk panjang bidang ditafsirkan sebagai 64. Jika panjang bidang dan indeks bit keduanya nol, bit 63:0 Sumber akan diekstrak. Jika panjang bidang adalah nol tetapi indeks bit bukan nol, hasilnya tidak terdefinisi.
Dalam panggilan ke _mm_extract_si64
, Deskriptor berisi indeks dalam bit 13:8 dan panjang bidang data yang akan diekstrak dalam bit 5:0.
Jika Anda memanggil _mm_extracti_si64
dengan argumen yang tidak dapat ditentukan pengkompilasi sebagai konstanta bilangan bulat, pengkompilasi menghasilkan kode untuk mengemas nilai tersebut ke dalam register XMM (Descriptor) dan untuk memanggil _mm_extract_si64
.
Untuk menentukan dukungan perangkat keras untuk extrq
instruksi, panggil __cpuid
intrinsik dengan InfoType=0x80000001
dan periksa bit 6 dari CPUInfo[2] (ECX)
. Bit ini akan menjadi 1 jika instruksi didukung, dan 0 jika tidak. Jika Anda menjalankan kode yang menggunakan perangkat keras intrinsik ini yang tidak mendukung extrq
instruksi, hasilnya tidak dapat diprediksi.
Contoh
// 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 Khusus Microsoft
Bagian Hak Cipta 2007 oleh Perangkat Mikro Tingkat Lanjut, Inc. Hak cipta dilindungi undang-undang. Direproduksi dengan izin dari Advanced Micro Devices, Inc.