INSERTPS

Insertar valores en coma flotante de precisión simple escalares

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 3A 21 /r ibINSERTPS xmm1, xmm2/m32, imm8AValidoValidoInserte 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 ibVINSERTPS xmm1, xmm2, xmm3/m32, imm8BValidoValidoInserte 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 ibVINSERTPS xmm1, xmm2, xmm3/m32, imm8CValidoValidoInserte 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

  1. modrm.reg lectura y 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

(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."

Fuentes