PINSRB, PINSRD, PINSRQ

Insertar Byte/Dword/Qword

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 3A 20 /r ibPINSRB xmm1, r32/m8, imm8AValidoValidoInsertar un valor entero byte de r32/m8 en xmm1 en el elemento de destino en xmm1 especificado por imm8.
66 0F 3A 22 /r ibPINSRD xmm1, r/m3, imm8AValidoValidoInsertar un valor entero dword de r/m3 en el xmm1 en el elemento de destino especificado por imm8.
66 REX.W 0F 3A 22 /r ibPINSRQ xmm1, r/m64, imm8AValidon. e.Insertar un valor entero de qword de r/m64 en el xmm1 en el elemento de destino especificado por imm8.
VEX.128.66.0F3A.W0 20 /r ibVPINSRB xmm1, xmm2, r32/m8, imm8Bv1ValidoCombina un valor entero de byte de r32/m8 y descansa de xmm2 a xmm1 en el offset de byte en imm8.
VEX.128.66.0F3A.W0 22 /r ibVPINSRD xmm1, xmm2, r/m3, imm8BValidoValidoInsertar un valor entero dword de r32/m32 y descansar de xmm2 a xmm1 en el dword offset en imm8.
VEX.128.66.0F3A.W1 22 /r ibVPINSRQ xmm1, xmm2, r/m64, imm8BValidoi2Insertar un valor entero de qword de r64/m64 y descansar de xmm2 a xmm1 en el qword offset en imm8.
EVEX.128.66.0F3A.WIG 20 /r ibVPINSRB xmm1, xmm2, r32/m8, imm8CValidoValidoCombina un valor entero de byte de r32/m8 y OR AVX10.1 descansan de xmm2 a xmm1 en el offset de byte en imm8.
EVEX.128.66.0F3A.W0 22 /r ibVPINSRD xmm1, xmm2, r32/m32, imm8CValidoValidoInsertar un valor entero dword de r32/m32 OR AVX10.1 y descansar de xmm2 en xmm1 en el dword offset en imm8.
EVEX.128.66.0F3A.W1 22 /r ibVPINSRQ xmm1, xmm2, r64/m64, imm8CValidon.e.2Insertar un valor entero de qword de r64/m64 OR AVX10.1 y descansar de xmm2 en xmm1 en el offset de qword en imm8.

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

B

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

C

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

Tupla: Tuple1 Scalar

Coste medido

Cargando las mediciones de arch-data...

Descripción

Copia un byte/dword/qword del operando de origen (segundo operando) e inserta en el operando de destino (primer operando) en la ubicación especificada con el conteo operando (tercer operando). (Los otros elementos del registro de destino se quedan sin tocar.) el operando de origen puede ser un registro de proposito general o una ubicación de memoria. (Cuando el operando de origen es un registro de proposito general, PINSRB copia el byte bajo del registro.) el operando de destino es un registro XMM. El conteo operando es un inmediato de 8 bits. Al especificar una ubicación qword[dword, byte] en un registro XMM, el [2, 4] bit(s) menos significativo del conteo operando especificar la ubicación.

En modo de 64 bits y no codificado con VEX/EVEX, utilizando un prefijo REX en forma de REX.R permite esta instrucción para acceder a registros adicionales (XMM8-XMM15, R8-15). El uso de REX.W permite el uso de 64 bits de registro de propósito general.

128-bit Legacy SSE versión: Bits (MAXVL-1:128) del correspondiente registro de destino YMM no se modifican.

VEX.128 versión codificada: Bits (MAXVL-1:128) del registro de destino se ponen a cero. VEX.L debe ser 0, de lo contrario la instrucción será #UD. El intento de ejecutar VPINSRQ en modo no-64-bit causará #UD.

EVEX.128 versión codificada: Bits (MAXVL-1:128) del registro de destino se ponen a cero. EVEX.L'L debe ser 0, de lo contrario la instrucción será #UD.

Operación

CASE OF

    PINSRB: SEL := COUNT[3:0];
                MASK := (0FFH << (SEL * 8));
                TEMP := (((SRC[7:0] << (SEL *8)) AND MASK);

    PINSRD: SEL := COUNT[1:0];
                MASK := (0FFFFFFFFH << (SEL * 32));
                TEMP := (((SRC << (SEL *32)) AND MASK) ;

    PINSRQ: SEL := COUNT[0]
                MASK := (0FFFFFFFFFFFFFFFFH << (SEL * 64));
                TEMP := (((SRC << (SEL *64)) AND MASK) ;

ESAC;
          DEST := ((DEST AND NOT MASK) OR TEMP);

VPINSRB (VEX/EVEX Encoded Version)
SEL := imm8[3:0]
DEST[127:0] := write_b_element(SEL, SRC2, SRC1)
DEST[MAXVL-1:128] := 0

VPINSRD (VEX/EVEX Encoded Version)
SEL := imm8[1:0]
DEST[127:0] := write_d_element(SEL, SRC2, SRC1)
DEST[MAXVL-1:128] := 0

VPINSRQ (VEX/EVEX Encoded Version)
SEL := imm8[0]
DEST[127:0] := write_q_element(SEL, SRC2, SRC1)
DEST[MAXVL-1:128] := 0

Intel C/C++ compilador intrínseco

PINSRB __m128i _mm_insert_epi8 (__m128i s1, int s2, const int ndx);
PINSRD __m128i _mm_insert_epi32 (__m128i s2, int s, const int ndx);
PINSRQ __m128i _mm_insert_epi64(__m128i s2, __int64 s, const int ndx);

Banderas afectadas

None.

SIMD coma flotante Excepciones

None.

Otras excepciones

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

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.

Fuentes