Freigeben über


_mm_roti_epi8

Visual Studio 2010 SP1 wird benötigt.

Microsoft-spezifisch

Generiert die XOP-Anweisung vprotb, um jedes Byte der ersten Quelle um den in der zweiten Quelle angegebenen Wert zu rotieren.

__m128i _mm_roti_epi8 (
   __m128i src,
   int count
);

Parameter

  • [in] src
    Ein 128-Bit-Parameter, der sechzehn 8-Bit-Ganzzahlen ohne Vorzeichen enthält.

  • [in] count
    Eine Ganzzahl für die Drehung, vorzugsweise eine Konstante.

Rückgabewert

Ein 128-Bit-Ergebnis r, der sechzehn 8-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_epi8

XOP

Headerdatei <intrin.h>

Hinweise

Jeder 8-Bit-Ganzzahlwert ohne Vorzeichen in src wird um die in count angegebene Anzahl Bits gedreht, und das 8-Bit-Ganzzahlergebnis ohne Vorzeichen wird im zugehörigen 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 vprotb-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 vprotb einzurichten und zu verwenden. Die konstante Version von vprotb ist schneller.

Die vprotb-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, d;
    int i;
    for (i = 0; i < 16; i++) {
        a.m128i_u8[i] = (i << 4) | (15 - i);
    }
    d = _mm_roti_epi8(a, -3);
    printf_s("data:               ");
    for (i = 0; i < 16; i++) printf_s(" %02x", a.m128i_u8[i]);
    printf_s("\nrotated by -3 gives ");
    for (i = 0; i < 16; i++) printf_s(" %02x", d.m128i_u8[i]);
    printf_s("\n");
}
  

Siehe auch

Referenz

__cpuid, __cpuidex

Weitere Ressourcen

_mm_roti_epi16

_mm_roti_epi32

_mm_roti_epi64

_mm_rot_epi8

_mm_shl_epi8

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

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

März 2011

Diesen Inhalt hinzugefügt.

SP1-Funktionsänderung.