Freigeben über


_mm_extract_si64, _mm_extracti_si64

Microsoft-spezifisch

Generiert die extrq Anweisung, um angegebene Bits aus den niedrigen 64 Bits des ersten Arguments zu extrahieren.

Syntax

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

Parameter

Quelle
[in] Ein 128-Bit-Feld mit Eingabedaten in den unteren 64 Bits.

Deskriptor
[in] Ein 128-Bit-Feld, das das zu extrahierende Bitfeld beschreibt.

Länge
[in] Eine ganze Zahl, die die Länge des zu extrahierenden Felds angibt.

Index
[in] Eine ganze Zahl, die den Index des zu extrahierenden Felds angibt.

Rückgabewert

Ein 128-Bit-Feld mit dem extrahierten Feld in seinen am wenigsten signifikanten Bits.

Anforderungen

Intrinsic Aufbau
_mm_extract_si64 SSE4a
_mm_extracti_si64 SSE4a

Headerdatei<intrin.h>

Hinweise

Diese systeminternen Elemente generieren die extrq Anweisung zum Extrahieren von Bits aus Der Quelle. Es gibt zwei Versionen: _mm_extracti_si64 die direkte Version und _mm_extract_si64 ist die nicht sofortige Version. Jede Version extrahiert ein Bitfeld aus "Source ", das durch die Länge und den Index des am wenigsten signifikanten Bits definiert ist. Die Werte der Länge und des Indexes werden mod 64 verwendet, daher werden sowohl -1 als auch 127 als 63 interpretiert. Wenn die Summe des (reduzierten) Indexes und der (reduzierten) Feldlänge größer als 64 ist, sind die Ergebnisse nicht definiert. Ein Wert von Null für die Feldlänge wird als 64 interpretiert. Wenn die Feldlänge und der Bitindex null sind, werden Bits 63:0 der Quelle extrahiert. Wenn die Feldlänge null ist, der Bitindex jedoch ungleich Null ist, sind die Ergebnisse nicht definiert.

In einem Aufruf enthält _mm_extract_si64der Deskriptor den Index in Bits 13:8 und die Feldlänge der Daten, die in Bits 5:0 extrahiert werden sollen.

Wenn Sie mit Argumenten aufrufen _mm_extracti_si64 , die der Compiler nicht als ganzzahlige Konstanten ermitteln kann, generiert der Compiler Code, um diese Werte in ein XMM-Register (Descriptor) zu packen und aufzurufen _mm_extract_si64.

Um die Hardwareunterstützung für die extrq Anweisung zu ermitteln, rufen Sie die __cpuid systeminterne Verbindung auf InfoType=0x80000001 , und überprüfen Sie Bit 6 von CPUInfo[2] (ECX). Dieses Bit ist 1, wenn die Anweisung unterstützt wird, und andernfalls 0. Wenn Sie Code ausführen, der diese systeminterne Hardware verwendet, die die extrq Anweisung nicht unterstützt, sind die Ergebnisse unvorhersehbar.

Beispiel

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

Ende Microsoft-spezifisch

Portions Copyright 2007 by Advanced Micro Devices, Inc. Alle Rechte vorbehalten. Vervielfältigt mit Erlaubnis von Advanced Micro Devices, Inc.

Siehe auch

_mm_insert_si64, _mm_inserti_si64
Systeminterne Compiler