MOVSHDUP
Replicar valores en coma flotante de precisión simple
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 0F 16 /r | MOVSHDUP xmm1, xmm2/m128 | A | Valido | Valido | Mueva el índice extraño valores en coma flotante de precisión simple de xmm2/mem y duplica cada elemento en xmm1. |
VEX.128.F3.0F.WIG 16 /r | VMOVSHDUP xmm1, xmm2/m128 | A | Valido | Valido | Mueva el índice extraño valores en coma flotante de precisión simple de xmm2/mem y duplica cada elemento en xmm1. |
VEX.256.F3.0F.WIG 16 /r | VMOVSHDUP ymm1, ymm2/m256 | A | Valido | Valido | Mueva el índice extraño valores en coma flotante de precisión simple de ymm2/mem y duplica cada elemento en ymm1. |
EVEX.128.F3.0F.W0 16 /r | VMOVSHDUP xmm1 {k1}{z}, xmm2/m128 | B | Valido | Valido | Mover el índice extraño valores en coma flotante de precisión simple AVX512F) O de xmm2/m128 y duplicar cada elemento en AVX10.1 xmm1 bajo máscara de escritura. |
EVEX.256.F3.0F.W0 16 /r | VMOVSHDUP ymm1 {k1}{z}, ymm2/m256 | B | Valido | Valido | Mover el índice extraño valores en coma flotante de precisión simple AVX512F) O de ymm2/m256 y duplicar cada elemento en AVX10.1 ymm1 bajo máscara de escritura. |
EVEX.512.F3.0F.W0 16 /r | VMOVSHDUP zmm1 {k1}{z}, zmm2/m512 | B | Valido | Valido | Mover el índice extraño valores en coma flotante de precisión simple OR AVX10.1 de zmm2/m512 y duplicar cada elemento en zmm1 bajo máscara de escritura. |
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: Full Mem
Coste medido
Cargando las mediciones de arch-data...
Descripción
Duplica valores en coma flotante de precisión simple del operando de origen (el segundo operando) al par de elementos adyacentes en el operando de destino (el primer operando). Véase la Figura 4-3. El operando de origen es un registro XMM, YMM o ZMM o 128, 256 o 512-bit ubicación de memoria y el operando de destino es un registro XMM, YMM o ZMM.
128-bit Legacy SSE versión: Bits (MAXVL-1:128) del registro de destino correspondiente no se modifican.
VEX.128 versión codificada: Bits (MAXVL-1:128) del registro de destino se ponen a cero.
VEX.256 versión codificada: Bits (MAXVL-1:256) del registro de destino se ponen a cero.
EVEX versión codificada: El operando de destino se actualiza en granularidad de 32 bits según la máscara de escritura.
Nota: VEX.vvvv y EVEX.vvvv están reservados y deben ser 1111b instrucciones de lo contrario #UD.
SRC X7 X6 X5 X4 X3 X2 X1 X0 DEST X7 X7 X5 X5 X3 X3 X1 X1Figura 4-3. Operación MOVSHDUP
Operación
VMOVSHDUP (EVEX Encoded Versions)
(KL, VL) = (4, 128), (8, 256), (16, 512)
TMP_SRC[31:0] := SRC[63:32]
TMP_SRC[63:32] := SRC[63:32]
TMP_SRC[95:64] := SRC[127:96]
TMP_SRC[127:96] := SRC[127:96]
IF VL >= 256
TMP_SRC[159:128] := SRC[191:160]
TMP_SRC[191:160] := SRC[191:160]
TMP_SRC[223:192] := SRC[255:224]
TMP_SRC[255:224] := SRC[255:224]
FI;
IF VL >= 512
TMP_SRC[287:256] := SRC[319:288]
TMP_SRC[319:288] := SRC[319:288]
TMP_SRC[351:320] := SRC[383:352]
TMP_SRC[383:352] := SRC[383:352]
TMP_SRC[415:384] := SRC[447:416]
TMP_SRC[447:416] := SRC[447:416]
TMP_SRC[479:448] := SRC[511:480]
TMP_SRC[511:480] := SRC[511:480]
FI;
FOR j := 0 TO KL-1
i := j * 32
IF k1[j] OR *no writemask*
THEN DEST[i+31:i] := TMP_SRC[i+31:i]
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+31:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+31:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VMOVSHDUP (VEX.256 Encoded Version)
DEST[31:0] := SRC[63:32]
DEST[63:32] := SRC[63:32]
DEST[95:64] := SRC[127:96]
DEST[127:96] := SRC[127:96]
DEST[159:128] := SRC[191:160]
DEST[191:160] := SRC[191:160]
DEST[223:192] := SRC[255:224]
DEST[255:224] := SRC[255:224]
DEST[MAXVL-1:256] := 0
VMOVSHDUP (VEX.128 Encoded Version)
DEST[31:0] := SRC[63:32]
DEST[63:32] := SRC[63:32]
DEST[95:64] := SRC[127:96]
DEST[127:96] := SRC[127:96]
DEST[MAXVL-1:128] := 0
MOVSHDUP (128-bit Legacy SSE Version)
DEST[31:0] := SRC[63:32]
DEST[63:32] := SRC[63:32]
DEST[95:64] := SRC[127:96]
DEST[127:96] := SRC[127:96]
DEST[MAXVL-1:128] (Unmodified)Intel C/C++ compilador intrínseco
VMOVSHDUP __m512 _mm512_movehdup_ps( __m512 a);
VMOVSHDUP __m512 _mm512_mask_movehdup_ps(__m512 s, __mmask16 k, __m512 a);
VMOVSHDUP __m512 _mm512_maskz_movehdup_ps( __mmask16 k, __m512 a);
VMOVSHDUP __m256 _mm256_mask_movehdup_ps(__m256 s, __mmask8 k, __m256 a);
VMOVSHDUP __m256 _mm256_maskz_movehdup_ps( __mmask8 k, __m256 a);
VMOVSHDUP __m128 _mm_mask_movehdup_ps(__m128 s, __mmask8 k, __m128 a);
VMOVSHDUP __m128 _mm_maskz_movehdup_ps( __mmask8 k, __m128 a);
VMOVSHDUP __m256 _mm256_movehdup_ps (__m256 a);
VMOVSHDUP __m128 _mm_movehdup_ps (__m128 a);SIMD coma flotante Excepciones
None.
Otras excepciones
Instrucciones no codificadas por EVEX, ver Tabla 2-21, "Tipo 4 Condiciones de Excepción de Clase".
EVEX-encoded instruction, ver Excepciones Tipo E4NF.nb en la tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción."
Additionally:
#UD If EVEX.vvvv != 1111B or VEX.vvvv != 1111B.