Condividi tramite


_mm_perm_epi8

È necessario Visual Studio 2010 SP1.

Specifici di Microsoft

Genera l'istruzione XOP vpperm per selezionare byte dalle prime due origini e trasformarli facoltativamente.

__m128i _mm_perm_epi8 (
   __m128i src1,
   __m128i src2,
   __m128i selector
);

Parametri

  • [in] src1
    Parametro a 128 bit che contiene sedici byte.

  • [in] src2
    Parametro a 128 bit che contiene sedici byte.

  • [in] selector
    Un parametro a 128 bit che seleziona byte da src1 e src2 ed eventualmente sceglie una trasformazione da applicare al byte selezionato.

Valore restituito

Risultato a 128 bit r che contiene byte selezionati da src1 e src2 e viene trasformato facoltativamente.

Requisiti

Intrinseco

Architettura

_mm_perm_epi8

XOP

File di intestazione <intrin.h>

Note

Per ogni byte in selector, i bit meno significativi selezionano un byte da src1 o src2. I valori da 0 a 15 selezionano byte da 0 a 15 di src1, mentre i valori da 16 a 31 selezionano byte da 0 a 15 di src2. I bit più significativi di ogni byte in selector determinano quale trasformazione, se presente, applicare al byte selezionato.

Valore dei 3 bit più significativi di selettore

Trasformazione scelta

000b

Nessuna trasformazione

001b

Invertire (complemento a uno) il byte di origine

010b

Byte di origine del bit inverso

011b

Il bit inverso ha invertito il byte di origine

100b

Impostare il byte del risultato su 0x00

101b

Impostare il byte del risultato su 0xFF

110b

Replicare il bit più significativo del byte di origine

111b

Replicare il bit più significativo invertito del byte di origine

L'istruzione vpperm è parte della famiglia XOP di istruzioni. Prima di utilizzare questo intrinseco, è necessario assicurarsi che il processore supporti questa istruzione. Per determinare il supporto hardware per questa istruzione, chiamare l'intrinseco __cpuid con InfoType = 0x80000001 e il bit di controllo 11 di CPUInfo[2] (ECX). Questo bit è 1 quando l'istruzione è supportata, e 0 in caso contrario.

Esempio

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128i a, b, selector, d;
    int i;
    for (i = 15; i >= 0; i--) {
        a.m128i_u8[i] = i;               // 0x0f0e0d0c...
        b.m128i_u8[i] = (i << 4) | i;    // 0xffeeddcc...
    }
    selector.m128i_u64[1] = 0xfedcba9876543210ll;
    selector.m128i_u64[0] = 0x0011223344556677ll;
    d = _mm_perm_epi8(a, b, selector);
    printf_s("%016I64x %016I64x\n", d.m128i_u64[1], d.m128i_u64[0]);
}
  

Vedere anche

Riferimenti

__cpuid, __cpuidex

Altre risorse

Oggetti intrinseci XOP aggiunti per Visual Studio 2010 SP1

Cronologia delle modifiche

Data

Cronologia

Motivo

Marzo 2011

È stato aggiunto questo contenuto.

Modifica di funzionalità in SP1.