_mm_permute2_ps
Visual Studio 2010 SP1 wird benötigt.
Microsoft-spezifisch
Generiert die XOP XMM-Anweisung vpermil2ps, um Gleitkommawerte aus den ersten zwei Quellen auszuwählen und die Werte optional auf 0 (null) zu setzen.
__m128 _mm_permute2_ps (
__m128 src1,
__m128 src2,
__m128i selector,
int control
);
Parameter
[in] src1
Ein 128-Bit-Parameter, der vier 32-Bit-Gleitkommawerte enthält.[in] src2
Ein 128-Bit-Parameter, der vier 32-Bit-Gleitkommawerte enthält.[in] selector
Ein 128-Bit-Parameter, der vier 32-Bit-Ganzzahl-Selektorwerte 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 128-Bit-Ergebnis r, das vier 32-Bit-Gleitkommawerte enthält.
Jeder Wert im Ergebnis ist entweder 0 (null) oder ein Wert, der aus den acht 32-Bit-Gleitkommawerten in src1 und src2 ausgewählt wurde.
Anforderungen
Intrinsisch |
Architektur |
---|---|
_mm_permute2_ps |
XOP |
Headerdatei <intrin.h>
Hinweise
Jedes der vier Doppelwörter in selector wählt den Wert seines zugehörigen Doppelwortes für das Ergebnis aus einem der acht 32-Bit-Gleitkommawerte in 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-Doppelworts.
Für jedes Doppelwort in selector wählen die drei niederwertigen Bits einen der Gleitkommawerte in src1 oder src2 aus, wobei die Werte 0 bis 3 die Quellen src1[0] bis src1[3] und die Werte 4 bis 7 die Quellen src2[0] bis src2[3] angeben.
Auf das nächste Bit jedes Doppelworts in selector wird im Folgenden als "Übereinstimmungsbit" verwiesen. Die höherwertigen 28 Bits jedes Doppelworts 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 vpermil2ps-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()
{
__m128 a, b, d;
__m128i select;
int i;
for (i = 0; i < 4; i++) {
a.m128_f32[i] = i;
b.m128_f32[i] = i+4;
}
select.m128i_i32[0] = 5;
select.m128i_i32[1] = 1 + 8; // turn on match bit
select.m128i_i32[2] = 2;
select.m128i_i32[3] = 6 + 8; // turn on match bit
d = _mm_permute2_ps(a, b, select, 0); // just select, don't zero
for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
printf_s("\n");
d = _mm_permute2_ps(a, b, select, 2); // zero if match is 1
for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
printf_s("\n");
d = _mm_permute2_ps(a, b, select, 3); // zero if match is 0
for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
printf_s("\n");
}
Siehe auch
Referenz
Weitere Ressourcen
In Visual Studio 2010 SP1 hinzugefügte systeminterne XOP-Funktionen
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
März 2011 |
Diesen Inhalt hinzugefügt. |
SP1-Funktionsänderung. |