循环指令的文档中是否有typo/bug?

Is there a typo/bug in the documentation of the loop instruction?

在英特尔 loop 指令的以下伪代码描述中,当操作数大小为 16 时,此描述似乎省略了在采用的情况下对 DEST 分支目标操作数的使用:

IF BranchCond = 1
    THEN
        IF OperandSize = 32
            THEN EIP ← EIP + SignExtend(DEST);
            ELSE IF OperandSize = 64
                THEN RIP ← RIP + SignExtend(DEST);
                FI;
            ELSE IF OperandSize = 16
   ?--->        THEN EIP ← EIP AND 0000FFFFH;
                FI;
        FI;
        IF OperandSize = (32 or 64)
            THEN IF (R/E)IP < CS.Base or (R/E)IP > CS.Limit
                #GP; FI;
                FI;
        FI;
    ELSE
        Terminate loop and continue program execution at (R/E)IP;
FI;

通过我添加的箭头 (?--->),在我看来 DEST 在 16 位 OperandSize 的情况下未被使用——它防止换行但没有添加任何内容。


来自英特尔的报道:

https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
第 2A 卷 3-543 页。

FelixCloutier 与 intel 的代码相同:

https://www.felixcloutier.com/x86/loop:loopcc


如果这是英特尔规范中的 typo/bug 在哪里报告它?

是的,看起来像错误。 loop 指令确实跳转,而不仅仅是截断 EIP,在 16 位模式下就像在其他模式下一样。

(R/E)IP < CS.Base 看起来也像一个错误;线性地址由CS.Base加上EIP构成。即有效的 EIP 值是从 0CS.Limit,无符号​​,不管 non-zero CS base.

我认为英特尔的论坛是报告手册/指南中的错误的一种方式,但在哪个部分报告并不明显。

https://community.intel.com/t5/Intel-ISA-Extensions/bd-p/isa-extensions 有一些帖子包含内在函数指南的错误报告,这引起了英特尔人员的注意,他们可以对此做些什么。

也有可能https://community.intel.com/t5/Software-Development-Topics/ct-p/software-dev-topics or some other sub-forum of the "software developer" forums。 “cpu”论坛似乎是关于使用 CPU 的人,例如主板/RAM 兼容性和其他东西。