vzeroall的文档似乎存在不一致性。散文描述如下:
该指令将所有XMM或YMM寄存器内容都清零。
然而,在此之下的伪代码表明,只有在64位模式下,寄存器ymm0
到ymm15
会受到影响:
IF (64-bit mode)
limit ←15
ELSE
limit ← 7
FOR i in 0 .. limit:
simd_reg_file[i][MAXVL-1:0] ← 0
在支持 AVX-512 的机器上,清除直到 ymm15
的内容并不等同于清除所有内容,因为存在 ymm16
到 ymm31
。这段文字描述了在使用 AVX-512 技术的机器上进行数据清除的情况,同时提醒读者在清除数据时需要注意所有相关的数据寄存器。最后一个问题询问原文中的表述是否准确。
vzeroupper
指令的影响可能会更加严重,这是因为合并uops和隐式扩展的影响(这就是Peter链接中提到的东西)。 - BeeOnRope