Freigeben über


_mm256_permute2_pd

Visual Studio 2010 SP1 wird benötigt.

Microsoft-spezifisch

Generiert die XOP YMM-Anweisung vpermil2pd, um Gleitkommawerte aus den ersten zwei Quellen auszuwählen und die Werte optional auf 0 (null) zu setzen.

__m256 _mm_permute2_pd (
   __m256d src1,
   __m256d src2,
   __m256i selector,
   int control
); 

Parameter

  • [in] src1
    Ein 256-Bit-Parameter, der vier 64-Bit-Gleitkommawerte enthält.

  • [in] src2
    Ein 256-Bit-Parameter, der vier 64-Bit-Gleitkommawerte enthält.

  • [in] selector
    Ein 256-Bit-Parameter, der vier 64-Bit-Gleitkommawerte enthält.

  • [in] control
    Ein 32-Bit-Ganzzahl-Parameter, der die Methode steuert, nach der Werte im Ergebnis auf 0 (null) gesetzt werden.

Rückgabewert

Ein 256-Bit-Ergebnis r, das vier 64-Bit-Gleitkommawerte enthält.

Jeder Wert in den oberen 128 Bit des Ergebnisses ist entweder 0 (null) oder ein Wert, der aus den zwei 64-Bit-Gleitkommawerten in den oberen 128 Bit von src1 und src2 ausgewählt wurde. Jeder Wert in den unteren 128 Bit des Ergebnisses ist entweder 0 (null) oder ein Wert, der aus den zwei 64-Bit-Gleitkommawerten in den unteren 128 Bit von src1 und src2 ausgewählt wurde.

Anforderungen

Intrinsisch

Architektur

_mm256_permute2_pd

XOP

Headerdatei <intrin.h>

Hinweise

Jedes der zwei Vierfachwörter in den oberen 128 Bit von selector wählt den Wert des zugehörigen Vierfachwortes für das Ergebnis aus einem der vier 64-Bit-Gleitkommawerte in den oberen 128 Bit von src1 und src2 aus. Dieser Wert wird ggf. durch 0 (null) ersetzt, bevor er in das Ergebnis geschrieben wird. Dies ist abhängig vom Wert von control und dem Wert von Bit 3 des selector-Quadworts. Auf ähnliche Weise wählt jedes der zwei Quadwörter in den unteren 128 Bits von selector einen Wert aus einem der vier 64-Bit-Gleitkommawerte in den unteren 128 Bits von src1 und src2 aus, und dieser Wert kann auch durch 0 (null) ersetzt werden.

Für jedes Vierfachwort in den oberen 128 Bit von selector wählen das zweite und dritte niederwertige Bit einen der Gleitkommawerte in src1 oder src2 aus, wobei die Werte 0 bis 1 die Quellen src1[2] bis src1[3] und die Werte 2 bis 3 die Quellen src2[2] bis src2[3] angeben. Für jedes Vierfachwort in den unteren 128 Bit von selector wählen das zweite und dritte niederwertige Bit einen der Gleitkommawerte in src1 oder src2 aus, wobei die Werte 0 bis 1 die Quellen src1[0] bis src1[1] und die Werte 2 bis 3 die Quellen src2[0] bis src2[1] angeben.

Auf das nächste Bit jedes Quadworts in selector wird im Folgenden als "Übereinstimmungsbit" verwiesen. Das niedrigstwertige Bit und die höherwertigen 60 Bits jedes Vierfachworts in selector werden ignoriert.

Die vierte Quelle control bestimmt die Bedingungen, nach denen Ergebniswerte auf 0 (null) festgelegt werden. Der Wert von control muss 0, 1, 2, oder 3 sein. Wenn control 0 (null) oder 1 ist, wird der ausgewählte Gleitkommawert in das Ziel geschrieben. Wenn control 2 ist, dann wird der ausgewählte Gleitkommawert in das Ziel geschrieben, wenn das entsprechende Übereinstimmungsbit in selector 0 ist, aber 0 (null) wird geschrieben, wenn das Übereinstimmungsbit 1 ist. Wenn control 3 ist, dann wird der ausgewählte Gleitkommawert in das Ziel geschrieben, wenn das entsprechende Übereinstimmungsbit 1 ist, es wird aber 0 (null) geschrieben, wenn das Übereinstimmungsbit 0 ist.

Die vpermil2pd-Anweisung ist Teil der XOP-Anweisungsfamilie. Bevor Sie diese systeminterne Funktion verwenden, müssen Sie sicherstellen, dass der Prozessor diese Anweisung unterstützt. Um die Hardwareunterstützung für diese Anweisung zu bestimmen, rufen Sie die systeminterne Funktion __cpuid mit InfoType = 0x80000001 auf, und prüfen Sie Bit 11 von CPUInfo[2] (ECX). Dieses Bit ist 1, wenn die Anweisung unterstützt wird, und andernfalls 0.

Beispiel

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m256d a, b, d;
    __m256i select;
    int i;
    for (i = 0; i < 4; i++) {
        a.m256d_f64[i] = i;
        b.m256d_f64[i] = i + 4;
    }
    select.m256i_i64[0] = 2 << 1;
    select.m256i_i64[1] = (1 << 1) + 8; // turn on match bit
    select.m256i_i64[2] = 0 << 1;
    select.m256i_i64[3] = (3 << 1) + 8; // turn on match bit

    
    d = _mm256_permute2_pd(a, b, select, 0); // just select, don't zero
    printf_s("%.3lf %.3lf %.3lf %.3lf\n", d.m256d_f64[0],
             d.m256d_f64[1], d.m256d_f64[2], d.m256d_f64[3]);
    d = _mm256_permute2_pd(a, b, select, 2); // zero if match is 1
    printf_s("%.3lf %.3lf %.3lf %.3lf\n", d.m256d_f64[0],
             d.m256d_f64[1], d.m256d_f64[2], d.m256d_f64[3]);
    d = _mm256_permute2_pd(a, b, select, 3); // zero if match is 0
    printf_s("%.3lf %.3lf %.3lf %.3lf\n", d.m256d_f64[0],
             d.m256d_f64[1], d.m256d_f64[2], d.m256d_f64[3]);
}
  

Siehe auch

Referenz

__cpuid, __cpuidex

Weitere Ressourcen

_mm256_permute2_ps

_mm_permute2_pd

In Visual Studio 2010 SP1 hinzugefügte systeminterne XOP-Funktionen

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

März 2011

Diesen Inhalt hinzugefügt.

SP1-Funktionsänderung.