MOVNTDQA

装入双四字形非时态对齐提示

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
66 0F 38 2A /rMOVNTDQA xmm1, m128A有效有效如果WC内存类型,则使用非时间提示将双四字从m128移动到xmm1.
VEX.128.66.0F38.WIG 2A /rVMOVNTDQA xmm1, m128A有效有效如果WC内存类型,则使用非时间提示将双四字从m128移动到xmm1.
VEX.256.66.0F38.WIG 2A /rVMOVNTDQA ymm1, m256A有效有效如果WC内存类型,则使用非时间提示将256位数据从m256移动到ymm1.
EVEX.128.66.0F38.W0 2A /rVMOVNTDQA xmm1, m128B有效有效使用非AVX512F将128位数据从m128移动到xmm1) OR AVX10.1 如果WC内存类型的话,时间提示.
EVEX.256.66.0F38.W0 2A /rVMOVNTDQA ymm1, m256B有效有效使用非 AVX512F) OR AVX10.1 如果WC内存类型,将256位数据从m256移动到ymm1.
EVEX.512.66.0F38.W0 2A /rVMOVNTDQA zmm1, m512 Op/En Tuple Type A N/A B Full MemB有效有效使用非指令性 Opera OR AVX10.1 nd Encoding1 如果WC内存类型,将512位数据从m512移动到zmm1. 操作数 1 Operan d 2 操作数 3 操作数 4 ModRM:reg (w) ModRM:r/m (r) N/A ModRM:reg (w) ModRM:r/m (r) N/A N/A N/A

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

A

  1. modrm.reg escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

B

  1. modrm.reg escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

Tupla: Full Mem

实测开销

正在从 arch-data 加载实测数据...

说明

MOVNTDQA从源操作数(第二个操作数)到目标操作数(第一个操作数)加载一个双四字,如果内存来源是WC(写入组合)内存类型,则使用非时空提示. 对于WC内存类型,非时空提示可能通过在缓存中不填充此数据而加载相当于对齐缓存行的临时内部缓冲器来实现. 缓存中的任何内存型别名行都将被监视和冲洗. 之后的MOVNTDQA读取到WC缓存线的未读部分,如果有数据,将会收到临时内部缓冲器的数据. 临时内部缓冲器可能出于任何理由随时被处理器冲走,例如:

buffer.

和各种错误条件。

非时空提示是通过在从内存读取数据时使用结合(WC)内存类型协议的写法来实现的. 使用此协议,处理器不会将数据读入缓存层级,也不会将相应的缓存行从内存中提取到缓存层级. 如果为非时读所指定的内存地址不是WC内存区域,被读区域的内存类型可以凌驾于非时读提示. 非时空读写信息可见于"Caching of Temperal vs. 在英特尔(R)64和IA-32架构软件开发者手册第3A卷第10章中的非时空数据".

由于WC协议使用一个弱排序的内存一致性模型,如果多个处理器可能为引用的内存位置使用不同的内存类型,或者将处理器的读取与书写者同步,那么使用MFENCE指令的栅栏操作应当与MOVNTDQA指令结合使用.

  1. ModRM.MOD != 011B

系统中的其他特工 一个处理器对流载提示的实现并不凌驾于有效的内存类型,但提示的实现取决于处理器. 例如,一个处理器执行可能选择忽略提示,将指令作为任何内存类型的普通MOVDQA处理. 或者,另一个执行可能会优化由 MOVNTDQA 在WB内存类型上生成的缓存读取,以减少缓存驱逐.

128位(V)MOVNTDQA地址必须是16字节对齐,否则指令会导致#GP.

256位的VMOVNTDQA地址必须是32字节对齐,否则指令将导致#GP.

512位VMOVNTDQA地址必须是64字节对齐,否则指令会导致#GP.

行动

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++ 内在编译器

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 浮点 例外

None.

其他例外

Non-EVEX-encoded discription,参见表2-18"第1类例外条件".

EVEX-encoded discription,参见表2-47,"Type E1NF 类例外条件".

Additionally:

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

来源