PINSRB, PINSRD, PINSRQ
Insertar Byte/Dword/Qword
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 3A 20 /r ib | PINSRB xmm1, r32/m8, imm8 | A | Valido | Valido | Insertar un valor entero byte de r32/m8 en xmm1 en el elemento de destino en xmm1 especificado por imm8. |
66 0F 3A 22 /r ib | PINSRD xmm1, r/m3, imm8 | A | Valido | Valido | Insertar 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 ib | PINSRQ xmm1, r/m64, imm8 | A | Valido | n. 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 ib | VPINSRB xmm1, xmm2, r32/m8, imm8 | B | v1 | Valido | Combina 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 ib | VPINSRD xmm1, xmm2, r/m3, imm8 | B | Valido | Valido | Insertar 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 ib | VPINSRQ xmm1, xmm2, r/m64, imm8 | B | Valido | i2 | Insertar 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 ib | VPINSRB xmm1, xmm2, r32/m8, imm8 | C | Valido | Valido | Combina 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 ib | VPINSRD xmm1, xmm2, r32/m32, imm8 | C | Valido | Valido | Insertar 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 ib | VPINSRQ xmm1, xmm2, r64/m64, imm8 | C | Valido | n.e.2 | Insertar 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
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideimm8byte inmediato que sigue a la instruccion
B
modrm.regescriturabyte ModRM, campo reg (bits 5-3)vex.vvvvlecturaprefijo VEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideimm8byte inmediato que sigue a la instruccion
C
modrm.regescriturabyte ModRM, campo reg (bits 5-3)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideimm8byte 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] := 0Intel 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.