CVTSS2SI
Convertir valores en coma flotante de precisión simple escalares en Signed Integer
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 0F 2D /r | CVTSS2SI r3, xmm1/m32 | A | Valido | Valido | Convertir un valor en coma flotante de precisión simple de xmm1/m32 a un entero de doble palabra firmado en r32. |
F3 REX.W 0F 2D /r | CVTSS2SI r64, xmm1/m32 | A | Valido | No codificable | Convertir un valor en coma flotante de precisión simple de xmm1/m32 a un entero de cuádpago firmado en r64. |
VEX.LIG.F3.0F.W0 2D /r 1 | VCVTSS2SI r3, xmm1/m32 | A | Valido | Valido | Convertir un valor en coma flotante de precisión simple de xmm1/m32 a un entero de doble palabra firmado en r32. |
VEX.LIG.F3.0F.W1 2D /r 1 | VCVTSS2SI r64, xmm1/m32 | A | Valido | n.e.2 | Convertir un valor en coma flotante de precisión simple de xmm1/m32 a un entero de cuádpago firmado en r64. |
EVEX.LLIG.F3.0F.W0 2D /r | VCVTSS2SI r3, xmm1/m32{er} | B | Valido | Valido | Convertir un valor en coma flotante de precisión simple de OR AVX10.1 xmm1/m32 a un entero de doble palabra firmado en r32. |
EVEX.LLIG.F3.0F.W1 2D /r | VCVTSS2SI r64, xmm1/m32{er} | B | Valido | n.e.2 | Convertir un valor en coma flotante de precisión simple de OR AVX10.1 xmm1/m32 a un entero de cuádpago firmado en r64. |
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)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Tupla: Tuple1 Fixed
Coste medido
Cargando las mediciones de arch-data...
Descripción
Convierte un valor en coma flotante de precisión simple en el operando de origen (el segundo operando) a un entero firmado en el operando de destino (el primer operando). El operando de origen puede ser un registro XMM o una ubicación de memoria. El operando de destino es un registro de proposito general. Cuando el operando de origen es un registro XMM, el valor en coma flotante de precisión simple está contenido en la palabra doble baja del registro.
Cuando una conversión es inexacta, el valor devuelto se redondea según los bits de control de redondeo en el registro MXCSR o los bits de control de redondeo incrustados.
Si un resultado convertido supera los límites de rango de integer de doble palabra firmado (en modos no-64-bit o modo 64-bit con REX.W/VEX.W/EVEX.W=0), la coma flotante excepción de operación no válida se genera, y si esta excepción está enmascarada, el valor entero indefinido 80000000H es devuelto.
Si un resultado convertido supera los límites de rango de integer de cuadword firmado (en modo de 64 bits y REX.W/VEX.W/EVEX.W = 1), la coma flotante excepción de operación no válida se genera, y si esta excepción está enmascarada, se devuelve el valor entero integer indefinido 80000 00000H.
Legacy SSE instrucciones: En modo de 64 bits, el uso del prefijo REX.W promueve la instrucción para producir datos de 64 bits. Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.
VEX.W1 y EVEX.W1 versiones: promueve la instrucción para producir datos de 64 bits en modo de 64 bits.
Nota: VEX.vvvv y EVEX.vvvv están reservados y deben ser 1111b, de lo contrario las instrucciones #UD.
El software debe asegurar que VCVTSS2SI esté codificado con VEX.L=0. Codificar VCVTSS2SI con VEX.L=1 puede encontrar un comportamiento impredecible en diferentes generaciones de procesadores.
Operación
VCVTSS2SI (EVEX Encoded Version)
IF (SRC *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_Single_Precision_Floating_Point_To_Integer(SRC[31:0]);
ELSE
DEST[31:0] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[31:0]);
FI;
(V)CVTSS2SI (Legacy and VEX.128 Encoded Version)
IF 64-bit Mode and OperandSize = 64
THEN
DEST[63:0] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[31:0]);
ELSE
DEST[31:0] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[31:0]);
FI;Intel C/C++ compilador intrínseco
VCVTSS2SI int _mm_cvtss_i32( __m128 a);
VCVTSS2SI int _mm_cvt_roundss_i32( __m128 a, int r);
VCVTSS2SI __int64 _mm_cvtss_i64( __m128 a);
VCVTSS2SI __int64 _mm_cvt_roundss_i64( __m128 a, int r);SIMD coma flotante Excepciones
Invalid, Precision.
Otras excepciones
Instrucciones codificadas por VEX, ver Tabla 2-20, "Tipo 3 Condiciones de Excepción," adicionalmente:
#UD If VEX.vvvv != 1111B.Instrucciones codificadas por EVEX, ver Tabla 2-50, "Tipo E3NF Clase Condiciones de Excepción."