INSERTPS
Insertar valores en coma flotante de precisión simple escalares
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 3A 21 /r ib | INSERTPS xmm1, xmm2/m32, imm8 | A | Valido | Valido | Inserte un valor en coma flotante de precisión simple seleccionado por imm8 desde xmm2/m32 en xmm1 en el elemento de destino especificado por imm8 y cero elementos de destino en xmm1 como se indica en imm8. |
VEX.128.66.0F3A.WIG 21 /r ib | VINSERTPS xmm1, xmm2, xmm3/m32, imm8 | B | Valido | Valido | Inserte un valor en coma flotante de precisión simple seleccionado por imm8 de xmm3/m32 y fusione con valores en xmm2 en el elemento de destino especificado por imm8 y escriba el resultado y cero elementos de destino en xmm1 como se indica en imm8. |
EVEX.128.66.0F3A.W0 21 /r ib | VINSERTPS xmm1, xmm2, xmm3/m32, imm8 | C | Valido | Valido | Inserte un valor en coma flotante de precisión simple seleccionado OR AVX10.1 por imm8 de xmm3/m32 y combinar con valores en xmm2 en el elemento de destino especificado por imm8 y escriba el resultado y cero elementos de destino en xmm1 como se indica 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.reglectura y escriturabyte 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
(forma de fuente registrada)
Copie un solo elemento escalar coma flotante de precisión en un registro vectorial de 128 bits. El operando inmediato tiene tres campos, donde los bits ZMask especifican qué elementos del destino se establecerán a cero, los bits Count D especifican qué elemento del destino será sobrescrito con el valor escalar, y para fuentes de registro de vectores los bits Count S especifican qué elemento de la fuente será copiado. Cuando la fuente escalar es un operando de memoria se ignoran los bits Count S.
(forma de fuente de memoria)
Cargue el elemento una coma flotante de una ubicación de memoria de 32 bits y operando de destino en la primera fuente en la ubicación indicada por los bits condes D del operando inmediato. Almacene en el destino y cero elementos de destino basados en los bits ZMask del operando inmediato.
128-bit Legacy SSE versión: El primer registro de origen es un registro XMM. El segundo operando de origen es un registro XMM o una ubicación de memoria de 32 bits. El destino no es distinto del registro XMM de primera fuente y los bits superiores (MAXVL-1:128) del destino de registro correspondiente son sin modificar.
VEX.128 y EVEX versión codificada: El registro de destino y primera fuente es un registro XMM. El segundo operando de origen es un registro XMM o una ubicación de memoria de 32 bits. Los bits superiores (MAXVL-1:128) del destino de registro correspondiente se ponen a cero.
Si VINSERTPS está codificado con VEX.L= 1, un intento de ejecutar la instrucción codificada con VEX.L= 1 causará una excepción #UD.
Operación
VINSERTPS (VEX.128 and EVEX Encoded Version)
IF (SRC = REG) THEN COUNT_S := imm8[7:6]
ELSE COUNT_S := 0
COUNT_D := imm8[5:4]
ZMASK := imm8[3:0]
CASE (COUNT_S) OF
0: TMP := SRC2[31:0]
1: TMP := SRC2[63:32]
2: TMP := SRC2[95:64]
3: TMP := SRC2[127:96]
ESAC;
CASE (COUNT_D) OF
0: TMP2[31:0] := TMP
TMP2[127:32] := SRC1[127:32]
1: TMP2[63:32] := TMP
TMP2[31:0] := SRC1[31:0]
TMP2[127:64] := SRC1[127:64]
2: TMP2[95:64] := TMP
TMP2[63:0] := SRC1[63:0]
TMP2[127:96] := SRC1[127:96]
3: TMP2[127:96] := TMP
TMP2[95:0] := SRC1[95:0]
ESAC;
IF (ZMASK[0] = 1) THEN DEST[31:0] := 00000000H
ELSE DEST[31:0] := TMP2[31:0]
IF (ZMASK[1] = 1) THEN DEST[63:32] := 00000000H
ELSE DEST[63:32] := TMP2[63:32]
IF (ZMASK[2] = 1) THEN DEST[95:64] := 00000000H
ELSE DEST[95:64] := TMP2[95:64]
IF (ZMASK[3] = 1) THEN DEST[127:96] := 00000000H
ELSE DEST[127:96] := TMP2[127:96]
DEST[MAXVL-1:128] := 0
INSERTPS (128-bit Legacy SSE Version)
IF (SRC = REG) THEN COUNT_S :=imm8[7:6]
ELSE COUNT_S :=0
COUNT_D := imm8[5:4]
ZMASK := imm8[3:0]
CASE (COUNT_S) OF
0: TMP := SRC[31:0]
1: TMP := SRC[63:32]
2: TMP := SRC[95:64]
3: TMP := SRC[127:96]
ESAC;
CASE (COUNT_D) OF
0: TMP2[31:0] := TMP
TMP2[127:32] := DEST[127:32]
1: TMP2[63:32] := TMP
TMP2[31:0] := DEST[31:0]
TMP2[127:64] := DEST[127:64]
2: TMP2[95:64] := TMP
TMP2[63:0] := DEST[63:0]
TMP2[127:96] := DEST[127:96]
3: TMP2[127:96] := TMP
TMP2[95:0] := DEST[95:0]
ESAC;
IF (ZMASK[0] = 1) THEN DEST[31:0] := 00000000H
ELSE DEST[31:0] := TMP2[31:0]
IF (ZMASK[1] = 1) THEN DEST[63:32] := 00000000H
ELSE DEST[63:32] := TMP2[63:32]
IF (ZMASK[2] = 1) THEN DEST[95:64] := 00000000H
ELSE DEST[95:64] := TMP2[95:64]
IF (ZMASK[3] = 1) THEN DEST[127:96] := 00000000H
ELSE DEST[127:96] := TMP2[127:96]
DEST[MAXVL-1:128] (Unmodified)Intel C/C++ compilador intrínseco
VINSERTPS __m128 _mm_insert_ps(__m128 dst, __m128 src, const int nidx);
INSETRTPS __m128 _mm_insert_ps(__m128 dst, __m128 src, const int nidx);SIMD coma flotante Excepciones
None.
Otras excepciones
Instrucciones no codificadas en EVEX, ver Tabla 2-22, "Tipo 5 Condiciones de Excepción," adicionalmente:
#UD If VEX.L = 0.Instrucciones codificadas por EVEX, ver Tabla 2-59, "Tipo E9NF Clase Condiciones de Excepción."