为什么 1 的补码仍然用于编码向量指令?

Why is 1's complement still used for encoding vector instructions?

在回答中,jww 指出 1 的补码仍然用于在英特尔架构上编码向量指令,Ruslan 澄清说随着自动向量化变得普遍,这些指令的使用越来越多。

是否有 1 的补码的优势导致它继续在这些指令中使用,或者只是出于历史原因而被使用?

引用 jww:

来自 Intel® 64 and IA-32 Architectures Software Developer’s Manual 2A,第 3-8 页:

3.1.1.8 Description Section

Each instruction is then described by number of information sections. The “Description” section describes the purpose of the instructions and required operands in more detail.

Summary of terms that may be used in the description section:
* Legacy SSE: Refers to SSE, SSE2, SSE3, SSSE3, SSE4, AESNI, PCLMULQDQ and any future instruction sets referencing XMM registers and encoded without a VEX prefix.
* VEX.vvvv. The VEX bitfield specifying a source or destination register (in 1’s complement form).
* rm_field: shorthand for the ModR/M r/m field and any REX.B
* reg_field: shorthand for the ModR/M reg field and any REX.R

那篇文章不是在谈论 1 的补码用于整数存储。即使是 VEX 编码的整数指令也会作用于 2 的补码整数。

所有 1 的赞美都在说 VEX 指令中的编码寄存器 ID 需要翻转用于 ID 寄存器的正常位。该问题中的一些人推测这是为了防止与现有说明发生冲突,这对我来说很有意义。