CVTSI2SD
Convertir Integer firmado en valores en coma flotante de precisión doble escalares
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F2 0F 2A /r | CVTSI2SD xmm1, r32/m32 | A | Valido | Valido | Convertir un entero de doble palabra firmado de r32/m32 a un valor en coma flotante de precisión doble en xmm1. |
F2 REX.W 0F 2A /r | CVTSI2SD xmm1, r/m64 | A | Valido | No codificable | Convertir un entero de cuádpago firmado de r/m64 a un valor en coma flotante de precisión doble en xmm1. |
VEX.LIG.F2.0F.W0 2A /r | VCVTSI2SD xmm1, xmm2, r/m32 | B | Valido | Valido | Convertir un entero de doble palabra firmado de r/m32 a un valor en coma flotante de precisión doble en xmm1. |
VEX.LIG.F2.0F.W1 2A /r | VCVTSI2SD xmm1, xmm2, r/m64 | B | Valido | n.e.1 | Convertir un entero de cuádpago firmado de r/m64 a un valor en coma flotante de precisión doble en xmm1. |
EVEX.LLIG.F2.0F.W0 2A /r | VCVTSI2SD xmm1, xmm2, r/m32 | C | Valido | Valido | Convertir un entero de doble palabra firmado de OR AVX10.1 r/m32 a un valor en coma flotante de precisión doble en xmm1. |
EVEX.LLIG.F2.0F.W1 2A /r | VCVTSI2SD xmm1, xmm2, r/m64{er} | C | Valido | n.e.1 | Convertir un entero de cuádpago firmado de r/m64 OR AVX10.1 a un valor en coma flotante de precisión doble en xmm1. |
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 pide
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 pide
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 pide
Tupla: Tuple1 Scalar
Coste medido
Cargando las mediciones de arch-data...
Descripción
Convierte un integer de palabra doble firmado o cuadword en el "convertir-de" operando de origen a un valor en coma flotante de precisión doble en el operando de destino. El resultado se almacena en el bajo cuádpago del operando de destino, y el alto cuádpago dejado sin cambios. Cuando la conversión es inexacta, el valor devuelto se redondea según los bits de control de redondeo en el registro MXCSR.
El segundo operando de origen puede ser un registro de proposito general o una ubicación de memoria de 32/64 bits. La primera fuente y operandos de destino son registros XMM.
128-bit Legacy SSE versión: El uso del prefijo REX.W promueve la instrucción a operandos de 64 bits. El "converso de" operando de origen (el segundo operando) es un registro de proposito general o ubicación de memoria. El destino es un registro XMM Bits (MAXVL-1:64) del registro de destino correspondiente no se modifican.
VEX.128 y EVEX versiones codificadas: El "converso de" operando de origen (el tercer operando) puede ser un registro de uso general o una ubicación de memoria. La primera fuente y operandos de destino son registros XMM. Los bits (127:64) del destino de registro XMM se copian de los bits correspondientes en el primer operando de origen. Bits (MAXVL- 1:128) del registro de destino se ponen a cero.
Versión EVEX.W0: se ignora el intento de codificar esta instrucción con redondeo integrado EVEX.
VEX.W1 y EVEX.W1 versiones: promueve la instrucción para utilizar el valor de entrada de 64 bits en modo de 64 bits.
El software debe asegurar que VCVTSI2SD esté codificado con VEX.L=0. Codificar VCVTSI2SD con VEX.L=1 puede encontrar un comportamiento impredecible en diferentes generaciones de procesadores.
Operación
VCVTSI2SD (EVEX Encoded Version)
IF (SRC2 *is register*) AND (EVEX.b = 1)
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
IF 64-Bit Mode And OperandSize = 64
THEN
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC2[63:0]);
ELSE
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC2[31:0]);
FI;
DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
VCVTSI2SD (VEX.128 Encoded Version)
IF 64-Bit Mode And OperandSize = 64
THEN
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC2[63:0]);
ELSE
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC2[31:0]);
FI;
DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
CVTSI2SD
IF 64-Bit Mode And OperandSize = 64
THEN
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[63:0]);
ELSE
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0]);
FI;
DEST[MAXVL-1:64] (Unmodified)Intel C/C++ compilador intrínseco
VCVTSI2SD __m128d _mm_cvti32_sd(__m128d s, int a);
VCVTSI2SD __m128d _mm_cvti64_sd(__m128d s, __int64 a);
VCVTSI2SD __m128d _mm_cvt_roundi64_sd(__m128d s, __int64 a, int r);
CVTSI2SD __m128d _mm_cvtsi64_sd(__m128d s, __int64 a);
CVTSI2SD __m128d_mm_cvtsi32_sd(__m128d a, int b);SIMD coma flotante Excepciones
Precision.
Otras excepciones
Instrucciones codificadas por VEX, ver Tabla 2-20, "Tipo 3 Condiciones de Excepción", si W1; más ver Tabla 2-22, "Tipo 5 Condiciones de Excepción de Clase".
Instrucciones codificadas por EVEX, ver Tabla 2-50, "Tipo E3NF Clase Condiciones de Excepción", si W1; más ver Tabla 2-61, "Tipo E10NF Clase Condiciones de Excepción."