PEXTRB, PEXTRD, PEXTRQ

Extracto Byte/Dword/Qword

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 3A 14 /r ibPEXTRB reg/m8, xmm2, imm8AValidoValidoExtraiga un valor entero de byte de xmm2 en el byte de origen especificado por imm8 en reg o m8. Los bits superiores de r3 o r64 se ponen a cero.
66 0F 3A 16 /r ibPEXTRD r/m3, xmm2, imm8AValidoValidoExtraiga un valor entero de dwords de xmm2 en el dword fuente offset especificado por imm8 en r/m32.
66 REX.W 0F 3A 16 /r ibPEXTRQ r/m64, xmm2, imm8AValidoNo codificableExtraiga un valor entero de qword de xmm2 en la fuente qword offset especificado por imm8 en r/m64.
VEX.128.66.0F3A.W0 14 /r ibVPEXTRB reg/m8, xmm2, imm8Av1ValidoExtraiga un valor entero de byte de xmm2 en el byte de origen especificado por imm8 en reg o m8. Los bits superiores de r64/r32 se llenan con ceros.
VEX.128.66.0F3A.W0 16 /r ibVPEXTRD r32/m32, xmm2, imm8AValidoValidoExtraiga un valor entero de dwords de xmm2 en el dword fuente offset especificado por imm8 en r32/m32.
VEX.128.66.0F3A.W1 16 /r ibVPEXTRQ r64/m64, xmm2, imm8AValidoi2Extraiga un valor entero de qword de xmm2 en el dword de origen offset especificado por imm8 en r64/m64.
EVEX.128.66.0F3A.WIG 14 /r ibVPEXTRB reg/m8, xmm2, imm8BValidoValidoExtraiga un valor entero de byte de xmm2 en la fuente OR AVX10.1 offset especificado por imm8 en reg o m8. Los bits superiores de r64/r32 se llenan con ceros.
EVEX.128.66.0F3A.W0 16 /r ibVPEXTRD r32/m32, xmm2, imm8BValidoValidoExtraiga un valor entero de dword de xmm2 en la fuente de OR AVX10.1 offset especificado por imm8 en r32/m32.
EVEX.128.66.0F3A.W1 16 /r ibVPEXTRQ r64/m64, xmm2, imm8BValidon.e.2Extraiga un valor entero de qword de xmm2 en la fuente OR AVX10.1 offset especificado por imm8 en r64/m64.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

A

  1. modrm.rm escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)
  3. imm8byte inmediato que sigue a la instruccion

B

  1. modrm.rm escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)
  3. imm8byte inmediato que sigue a la instruccion

Tupla: Tuple1 Scalar

Coste medido

Cargando las mediciones de arch-data...

Descripción

Extraiga un valor entero byte/dword/qword de la fuente XMM registro en un offset byte/dword/qword determinado de imm8[3:0]. El destino puede ser un registro o byte/dword/qword ubicación de memoria. Si el destino es un registro, los bits superiores del registro son cero extendidos.

En el legado no-VEX versión codificada y si el operando de destino es un registro, el tamaño de operando predeterminado en modo de 64 bits para PEXTRB/PEXTRD es de 64 bits, los bits por encima de los datos de byte/dword menos significativo están llenos de ceros. PEXTRQ no es encodable en modos no-64-bit y requiere REX.W en modo de 64-bit.

Nota: En VEX.128 versiones codificadas, VEX.vvvv está reservado y debe ser 1111b, VEX.L debe ser 0, de lo contrario la instrucción será #UD. En EVEX.128 versiones codificadas, EVEX.vvvv está reservado y debe ser 1111b, EVEX.L"L debe ser 0, de lo contrario la instrucción será #UD. Si el operando de destino es un registro, el tamaño de operando predeterminado en modo de 64 bits para VPEXTRB/VPEXTRD es de 64 bits, los bits por encima de los datos menos significativo byte/word/dword se llenan con ceros.

Operación

CASE of
    PEXTRB: SEL := COUNT[3:0];
                TEMP := (Src >> SEL*8) AND FFH;
                IF (DEST = Mem8)
                       THEN
                       Mem8 := TEMP[7:0];
                ELSE IF (64-Bit Mode and 64-bit register selected)
                       THEN
                             R64[7:0] := TEMP[7:0];
                             r64[63:8] := ZERO_FILL; };
                ELSE
                             R32[7:0] := TEMP[7:0];
                             r32[31:8] := ZERO_FILL; };
                FI;
    PEXTRD:SEL := COUNT[1:0];
                TEMP := (Src >> SEL*32) AND FFFF_FFFFH;
                DEST := TEMP;
    PEXTRQ: SEL := COUNT[0];
                TEMP := (Src >> SEL*64);
                DEST := TEMP;

EASC:

VPEXTRTD/VPEXTRQ
IF (64-Bit Mode and 64-bit dest operand)
THEN

    Src_Offset := imm8[0]
    r64/m64 := (Src >> Src_Offset * 64)
ELSE
    Src_Offset := imm8[1:0]
    r32/m32 := ((Src >> Src_Offset *32) AND 0FFFFFFFFh);
FI

VPEXTRB ( dest=m8)
SRC_Offset := imm8[3:0]
Mem8 := (Src >> Src_Offset*8)

VPEXTRB ( dest=reg)
IF (64-Bit Mode )
THEN

    SRC_Offset := imm8[3:0]
    DEST[7:0] := ((Src >> Src_Offset*8) AND 0FFh)
    DEST[63:8] := ZERO_FILL;
ELSE
    SRC_Offset := imm8[3:0];
    DEST[7:0] := ((Src >> Src_Offset*8) AND 0FFh);
    DEST[31:8] := ZERO_FILL;
FI

Intel C/C++ compilador intrínseco

PEXTRB int _mm_extract_epi8 (__m128i src, const int ndx);
PEXTRD int _mm_extract_epi32 (__m128i src, const int ndx);
PEXTRQ __int64 _mm_extract_epi64 (__m128i src, const int ndx);

Banderas afectadas

None.

SIMD coma flotante Excepciones

None.

Otras excepciones

Instrucciones no codificadas en EVEX, ver Tabla 2-22, "Tipo 5 Condiciones de Excepción de Clase".

Instrucciones codificadas por EVEX, ver Tabla 2-59, "Tipo E9NF Clase Condiciones de Excepción."

Additionally:

#UD               If VEX.L = 1 or EVEX.L'L > 0.

If VEX.vvvv != 1111B or EVEX.vvvv != 1111B.

Fuentes