MOVNTDQA

Carga Doble Quadword Países No Temporales Hint

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 38 2A /rMOVNTDQA xmm1, m128AValidoValidoMueva la palabra cuádruple doble de m128 a xmm1 usando la indirecta no temporal si el tipo de memoria WC.
VEX.128.66.0F38.WIG 2A /rVMOVNTDQA xmm1, m128AValidoValidoMueva la palabra cuádruple doble de m128 a xmm1 usando la indirecta no temporal si el tipo de memoria WC.
VEX.256.66.0F38.WIG 2A /rVMOVNTDQA ymm1, m256AValidoValidoMueva los datos de 256 bits de m256 a ymm1 usando un indicio no temporal si el tipo de memoria WC.
EVEX.128.66.0F38.W0 2A /rVMOVNTDQA xmm1, m128BValidoValidoMover datos de 128 bits de m128 a xmm1 usando no AVX512F) OR AVX10.1 insinuación temporal si el tipo de memoria WC.
EVEX.256.66.0F38.W0 2A /rVMOVNTDQA ymm1, m256BValidoValidoMover datos de 256 bits de m256 a ymm1 usando no AVX512F) OR AVX10.1 insinuación temporal si el tipo de memoria WC.
EVEX.512.66.0F38.W0 2A /rVMOVNTDQA zmm1, m512 Op/En Tuple Type A N/A B Full MemBValidoValidoMover datos de 512 bits de m512 a zmm1 usando no Instrucción Opera OR AVX10.1 nd Encoding1 insinuación temporal si tipo de memoria WC. operando 1 Operan d 2 operando 3 operando 4 ModRM:reg (w) ModRM:r/m (r) N/A ModRM/

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 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

B

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

Tupla: Full Mem

Coste medido

Cargando las mediciones de arch-data...

Descripción

MOVNTDQA carga un cuadword doble desde el operando de origen (segundo operando) al operando de destino (primer operando) utilizando un indicio no temporal si la fuente de memoria es WC (escribir combinando) tipo de memoria. Para el tipo de memoria WC, el indicio no temporal puede ser implementado cargando un búfer interno temporal con el equivalente de una línea de caché alineada sin llenar estos datos al caché. Cualquier tipo de memoria de las líneas aliadas en el caché se snooped y flushed. Posteriormente MOVNTDQA lee porciones sin leer de la línea de caché WC recibirá datos del búfer interno temporal si los datos están disponibles. El búfer interno temporal puede ser derribado por el procesador en cualquier momento por cualquier motivo, por ejemplo:

buffer.

y varias condiciones de falla.

El indicio no temporal se implementa utilizando un protocolo de tipo de memoria de combinación de escritura (WC) al leer los datos de memoria. Utilizando este protocolo, el procesador no lee los datos en la jerarquía de caché, ni recoge la línea correspondiente de caché de la memoria en la jerarquía de caché. El tipo de memoria de la región que se lee puede anular el indicio no temporal, si la dirección de memoria especificada para la lectura no temporal no es una región de memoria WC. La información sobre lecturas y escritos no temporales se puede encontrar en "Caching of Temporal vs. Datos no temporales" en el capítulo 10 en el Intel(R) 64 y el Manual del Desarrollador de Software de Arquitectura IA-32, Volumen 3A.

Debido a que el protocolo WC utiliza un modelo de consistencia de memoria de orden débil, una operación de esgrima implementada con una instrucción MFENCE debe usarse junto con instrucciones MOVNTDQA si varios procesadores pueden usar diferentes tipos de memoria para los lugares de memoria referencia o sincronizar lecturas de un procesador con escritos por

  1. ModRM.MOD != 011B

otros agentes del sistema. La implementación de un procesador de la indirecta de carga de streaming no anula el tipo de memoria eficaz, pero la implementación de la indirecta es dependiente del procesador. Por ejemplo, una implementación del procesador puede optar por ignorar la pista y procesar la instrucción como un MOVDQA normal para cualquier tipo de memoria. Otra implementación puede optimizar las lecturas de caché generadas por MOVNTDQA en el tipo de memoria WB para reducir los desalojos de caché.

Las direcciones 128-bit (V)MOVNTDQA deben ser alineadas de 16 bytes o la instrucción causará un #GP.

Las direcciones VMOVNTDQA de 256 bits deben estar alineadas de 32 bytes o la instrucción causará un #GP.

Las direcciones 512-bit VMOVNTDQA deben estar alineadas de 64 bytes o la instrucción causará un #GP.

Operación

MOVNTDQA (128bit- Legacy SSE Form)
DEST := SRC
DEST[MAXVL-1:128] (Unmodified)

VMOVNTDQA (VEX.128 and EVEX.128 Encoded Form)
DEST := SRC
DEST[MAXVL-1:128] := 0

VMOVNTDQA (VEX.256 and EVEX.256 Encoded Forms)
DEST[255:0] := SRC[255:0]
DEST[MAXVL-1:256] := 0

VMOVNTDQA (EVEX.512 Encoded Form)
DEST[511:0] := SRC[511:0]
DEST[MAXVL-1:512] := 0

Intel C/C++ compilador intrínseco

VMOVNTDQA __m512i _mm512_stream_load_si512(__m512i const* p);
MOVNTDQA __m128i _mm_stream_load_si128 (const __m128i *p);
VMOVNTDQA __m256i _mm256_stream_load_si256 (__m256i const* p);

SIMD coma flotante Excepciones

None.

Otras excepciones

Instrucciones no-EVEX-encoded, ver Tabla 2-18, "Tipo 1 Clase Condiciones de Excepción."

Instrucciones codificadas por EVEX, ver Tabla 2-47, "Tipo E1NF Clase Condiciones de Excepción."

Additionally:

#UD               If VEX.vvvv != 1111B or EVEX.vvvv != 1111B.

Fuentes