_mm_roti_epi32
Visual Studio 2010 SP1 wird benötigt.
Microsoft-spezifisch
Generiert die XOP-Anweisung vprotd, um jedes Doppelwort der ersten Quelle um den in der zweiten Quelle angegebenen Wert zu rotieren.
__m128i _mm_roti_epi32 (
__m128i src,
int count
);
Parameter
[in] src
Ein 128-Bit-Parameter, der vier 32-Bit-Ganzzahlen ohne Vorzeichen enthält.[in] count
Eine Ganzzahl für die Drehung, vorzugsweise eine Konstante.
Rückgabewert
Ein 128-Bit-Ergebnis r, das vier 32-Bit-Ganzzahlen ohne Vorzeichen enthält.
r[i] := (count > 0) ? rotate_left(src[i], count) :
rotate_right(src[i], -count);
Anforderungen
Intrinsisch |
Architektur |
---|---|
_mm_roti_epi32 |
XOP |
Headerdatei <intrin.h>
Hinweise
Jeder 32-Bit-Ganzzahlwert ohne Vorzeichen in src wird um die in count angegebene Anzahl Bits gedreht, und das 32-Bit-Ganzzahlergebnis ohne Vorzeichen wird als zugehöriger Wert im Ziel gespeichert. Wenn der Wert in count positiv ist, ist die Drehungsrichtung nach links (zum höchstwertigen Byte); andernfalls ist sie nach rechts.
Die vprotd-Anweisung unterstützt eine Form für konstante Argumente und eine Form für nicht konstante Argumente. Wenn der Wert von count nicht als zur Kompilierzeit konstant ermittelt werden kann, generiert der Compiler zusätzlichen Code, um die nicht konstante Version von vprotd einzurichten und zu verwenden. Die konstante Version von vprotd ist schneller.
Die vprotd-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()
{
__m128i a, b, d;
int i, j;
unsigned int temp;
for (i = 0; i < 4; i++) {
temp = 0;
for (j = 0; j < 8; j++) {
temp = temp << 4 | (8*i + j + 7) % 16;
}
a.m128i_u32[i] = temp;
b.m128i_i8[4*i] = 11*i - 21;
}
d = _mm_roti_epi32(a, -21);
printf_s("data: ");
for (i = 0; i < 4; i++) printf_s(" %08x", a.m128i_u32[i]);
printf_s("\nrotated by -21 gives");
for (i = 0; i < 4; i++) printf_s(" %08x", d.m128i_u32[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. |