_mm_shl_epi8
Visual Studio 2010 SP1 wird benötigt.
Microsoft-spezifisch
Generiert die XOP-Anweisung vpshlb, um jedes Byte der ersten Quelle logisch um einen in der zweiten Quelle angegebenen Wert zu verschieben.
__m128i _mm_shl_epi8 (
__m128i src,
__m128i counts
);
Parameter
[in] src
Ein 128-Bit-Parameter, der sechzehn 8-Bit-Ganzzahlen ohne Vorzeichen enthält.[in] counts
Ein 128-Bit-Parameter, der sechzehn 8-Bit-Ganzzahlen mit Vorzeichen enthält.
Rückgabewert
Ein 128-Bit-Ergebnis r, der sechzehn 8-Bit-Ganzzahlen ohne Vorzeichen enthält.
r[i] := (counts[i] >= 0) ? src[i] << counts[i]) :
src[i] >> -counts[i]);
Anforderungen
Intrinsisch |
Architektur |
---|---|
_mm_shl_epi8 |
XOP |
Headerdatei <intrin.h>
Hinweise
Jeder 8-Bit-Ganzzahlwert ohne Vorzeichen in src wird um die im zugehörigen Wert in counts angegebene Anzahl Bits verschoben, und das 8-Bit-Ganzzahlergebnis ohne Vorzeichen wird im zugehörigen Wert im Ziel gespeichert. Wenn der Wert in counts positiv ist, erfolgt eine Verschiebung nach links (zum höchstwertigen Bit), und die niederwertigen Bits werden mit Nullen aufgefüllt. Andernfalls erfolgt die Verschiebung nach rechts, und am linken Ende werden Nullen aufgefüllt. Wenn ein Verschiebungswert größer als 7 oder kleiner als -7 ist, beträgt der zugehörige Ergebniswert 0.
Die vpshlb-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;
for (i = 0; i < 16; i++) {
a.m128i_u8[i] = (i << 4) | (15 - i);
b.m128i_i8[i] = i - 8;
}
printf_s("data: ");
for (i = 0; i < 16; i++) printf_s(" %02x", a.m128i_u8[i]);
printf_s("\nshifted by ");
for (i = 0; i < 16; i++) printf_s(" %2d", b.m128i_i8[i]);
d = _mm_shl_epi8(a, b);
printf_s("\ngives ");
for (i = 0; i < 16; i++) printf_s(" %02x", d.m128i_u8[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. |