Bagikan melalui


_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 Arsitektur
_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.

Baca juga

_mm_insert_si64, _mm_inserti_si64
Intrinsik pengkompilasi