Aracılığıyla paylaş


_mm_insert_si64, _mm_inserti_si64

Microsoft'a Özgü

insertq İkinci işleneninden ilk işlenenine bit ekleme yönergesini oluşturur.

Sözdizimi

__m128i _mm_insert_si64(
   __m128i Source1,
   __m128i Source2
);
__m128i _mm_inserti_si64(
   __m128i Source1,
   __m128i Source2
   int Length,
   int Index
);

Parametreler

Kaynak1
[in] Alt 64 bitlerinde giriş verilerinin bulunduğu ve içine bir alanın eklendiği 128 bitlik bir alan.

Kaynak2
[in] Alt bitlerine eklenecek verilerin yer aldığı 128 bitlik bir alan. için _mm_insert_si64, yüksek bitlerinde bir alan tanımlayıcısı da içerir.

Uzunluk
[in] Eklenecek alanın uzunluğunu belirten bir tamsayı sabiti.

Dizin
[in] Verilerin eklendiği alanın en az önemli bitinin dizinini belirten bir tamsayı sabiti.

Dönüş değeri

Alt 64 biti özgün düşük 64 bit Source1 içeren, belirtilen bit alanı Source2'nin düşük bitleriyle değiştirilen 128 bitlik bir alan. Dönüş değerinin üst 64 biti tanımlanmamıştır.

Gereksinimler

Içsel Mimari
_mm_insert_si64 SSE4a
_mm_inserti_si64 SSE4a

intrin.h üst bilgi dosyası<>

Açıklamalar

Bu iç kodlar, Source2'den Source1'e bit ekleme yönergesini oluştururinsertq. İki sürüm vardır: _mm_inserti_si64, anlık sürümdür ve _mm_insert_si64 hemen olmayan sürümdür. Her sürüm, Source2'den belirli bir uzunlukta bit alanını ayıklar ve Source1'e ekler. Ayıklanan bitler Source2'nin en az önemli bitleridir. Bu bitlerin eklendiği Source1 alanı, en az önemli bitinin uzunluğuna ve dizinine göre tanımlanır. Uzunluk ve dizin değerleri mod 64 alınır, bu nedenle hem -1 hem de 127 63 olarak yorumlanır. (Azaltılmış) bit dizininin 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 dizini sıfırsa, Source2'nin 63:0 bitleri Source1'e eklenir. Alan uzunluğu sıfırsa ancak bit dizini sıfır değilse, sonuçlar tanımlanmamış olur.

_mm_insert_si64 çağrısında, alan uzunluğu Source2'nin bit 77:72'sinde ve dizin 69:64 bitlerinde yer alır.

Derleyicinin tamsayı sabitleri olduğunu belirleyemeyen bağımsız değişkenlerle çağırırsanız _mm_inserti_si64 , derleyici bu değerleri bir XMM yazmacına paketlemek ve çağırmak _mm_insert_si64için kod oluşturur.

Yönergeye insertq 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 insertq donanımda iç kodunu kullanan bir kod ç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];
} source1, source2, source3, result1, result2, result3;

int
main()
{

    __int64 mask;

    source1.ui64[0] = 0xffffffffffffffffll;
    source2.ui64[0] = 0xfedcba9876543210ll;
    source2.ui64[1] = 0xc10;
    source3.ui64[0] = source2.ui64[0];

    result1.m = _mm_insert_si64 (source1.m, source2.m);
    result2.m = _mm_inserti_si64(source1.m, source3.m, 16, 12);
    mask = 0xffff << 12;
    mask = ~mask;
    result3.ui64[0] = (source1.ui64[0] & mask) |
                      ((source2.ui64[0] & 0xffff) << 12);

    cout << hex << "result1 = 0x" << result1.ui64[0] << endl;
    cout << "result2 = 0x" << result2.ui64[0] << endl;
    cout << "result3 = 0x" << result3.ui64[0] << endl;

}
result1 = 0xfffffffff3210fff
result2 = 0xfffffffff3210fff
result3 = 0xfffffffff3210fff

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_extract_si64, _mm_extracti_si64
Derleyici iç bilgileri