gpt4 book ai didi

assembly - 在编码 VEX 指令时,NDS、NDD 和 DDS 代表什么?

转载 作者:行者123 更新时间:2023-12-03 02:28:58 28 4
gpt4 key购买 nike

来自Intel's x86 manuals, Vol2 ,第 3.1.1.2 节:指令汇总表中的操作码列(带有 VEX 前缀的指令)

NDS, NDD, DDS: specifies that VEX.vvvv field is valid for the encoding of a register operand:

  • VEX.NDS: VEX.vvvv encodes the first source register in an instruction syntax where the content of source registers will be preserved.
  • VEX.NDD: VEX.vvvv encodes the destination register that cannot be encoded by ModR/M:reg field.
  • VEX.DDS: VEX.vvvv encodes the second source register in a three-operand instruction syntax where the content of first source register will be overwritten by the result.

我认为这与“非破坏性来源”有关,我认为这就是 NDS 的含义。其他代表什么?这如何影响指令的编码?同样,为什么它们很重要 - 因为据我所知,AMD 手册不包含任何对这些术语的引用?

最佳答案

根据英特尔APX docs (高级性能扩展:REX2 和 EVEX 用于传统整数指令,例如 sub,最后是写入完整 32/64 位寄存器的 setcc 编码: Intel APX Architecture Specification - July 2023 Revision 1.0 ) :

  • NDD 代表新数据目的地
  • NDS 代表非破坏性源
  • 该文档中没有提及 DDS

大概 2018 年之前的 SDM 版本使用了相同的缩写词扩展。

<小时/>

我没有看过 AMD 手册,但我假设他们选择了其他方式来指示哪个操作数由 VEX.vvvv 字段编码,以获取使用它的指令。

英特尔使用此表示法来提醒您/明确哪个操作数是 vvvv 字段。它已经是多余的,因为每个指令的“操作数编码”表显示了哪个操作数被编码在哪个字段中。

<小时/>

更新:英特尔可能在 2018 年 11 月的更新中将它们从手册中删除。它们也被从 "future extensions" manual 中删除。 2018 年 10 月的修订版 035,其指令列表与第 2 卷手册的格式相同,并有一个修订表,其中提供了此变更日志:

Removal of NDD/DDS/NDS terms from instructions. Note: Previously, theterms NDS, NDD and DDS were used in instructions with an EVEX (or VEX)prefix. These terms indicated that the vvvv field was valid forencoding, and specified register usage. These terms are no longernecessary and are redundant with the instruction operand encodingtables provided with each instruction. The instruction operandencoding tables give explicit details on all operands, indicatingwhere every operand is stored and if they are read or written. If vvvvis not listed as an operand in the instruction operand encoding table,then EVEX (or VEX) vvvv must be 0b1111.

这告诉我们,这些 NDD/DDS/NDS 标记的目的是指示哪个操作数是哪个操作数,以及它们是读还是写。

<小时/>

非破坏性源是本手册同一卷其他地方使用的短语(见下文),因此我非常有信心这是对 NDS 的正确解释.

我认为 NDD 的明显解释是非破坏性目标(SSE2 版本的转变令人烦恼地具有破坏性)。

尚不清楚 DDS 代表什么。 “Destructive Destination-Source”不适合,因为它是被覆盖的其他源注册表。

<小时/>

Intel manual vol2第 2.3.5 节 VEX 前缀:

The bit fields of the VEX prefix can be summarized by its functional purposes:

  • Non-destructive source register encoding (applicable to three and four operand syntax): This is the first source operand in the instruction syntax. VEX.vvvv.

(反转:xmm0为1111,xmm15为0000。如下所述,反转避免与仅32位LES and LDS(加载远指针)指令的有效编码重叠。32位模式只能使用xmm0-7,因此第一位始终是必需的 1,这使得它不是有效的 LES/LDS。)

所以,是的,“非破坏性来源”是英特尔手册中使用的一个短语。

<小时/>

第 2.3.6 节:指令操作数编码和 VEX.vvvv、ModR/M<​​/h3>

Some VEX-encoded instructions have syntax with less than threeoperands, e.g. VEX-encoded pack shift instructions support one sourceoperand and one destination operand).

The roles of VEX.vvvv, reg field of ModR/M byte (ModR/M.reg), r/m field of ModR/M byte (ModR/M.r/m) withrespect to encoding destination and source operands vary with different type of instruction syntax.

The role of VEX.vvvv can be summarized to three situations:

  • VEX.vvvv encodes the first source register operand, specified in inverted (1’s complement) form and is valid forinstructions with 2 or more source operands. (This is the NDS case)

  • VEX.vvvv encodes the destination register operand, specified in 1’s complement form for certain vector shifts.The instructions where VEX.vvvv is used as a destination are listed in Table 2-9. The notation in the “Opcode”column in Table 2-9 is described in detail in section 3.1.1. (The part quoted in the question)

  • VEX.vvvv 不编码任何操作数(显然没有针对 FMA DDS 情况进行更新)。

所涉及的矢量位移为 VPS{R,L}L{W,D,Q}VPSRA{W,D,Q} >VPS{R,L}LDQ(字节移位),使用 mod/rm/r 字段作为额外的操作码位,如某些操作码位 -操作数整数指令(例如和r/m32、imm8)。例如

  • VEX.NDD.128.66.0F 73/7 ib VPSLLDQ
  • VEX.NDD.128.66.0F 73/3 ib VPSRLDQ

这就是为什么 SSE 版本是就地位/字节移位,经常需要 movdqa 指令。 66 0F xx SSE2 编码空间中有一些免费的操作码,英特尔本可以使用这些操作码,而不是使这些常用指令具有破坏性。不过,我猜他们已经坚持在 0F xx MMX 版本中使用 /r 字段的决定了。我认为,让 new-with-SSE2 字节移位 insn 也具有破坏性是没有必要的。至少他们成功地进行了一次非破坏性的洗牌,pshufd

关于assembly - 在编码 VEX 指令时,NDS、NDD 和 DDS 代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37153248/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com