tlbiel 指令是什么,它有什么作用?

What is the instruction tlbiel and what does it do?

我最近遇到了一条名为 tlbiel 的指令,我很好奇它的含义和用途。在进行了一些深入的 Google 搜索之后,我看到了一份 IBM 文档,使我相信它与管理程序相关。我面临的当前指令是 tlbiel r3, 1,在研究了操作码 (0x7C201A24) 之后,我得出的结论是它大致转换为 mtspr 3, 1;唯一的区别是 mtspr 的操作码中 21 - 30 处的 467 的预期值已更改为 274。但是,在执行 tlbiel 之前,指令 li r3, 0x3FF & sldi r3, r3, 32 被直接引入,导致 r3 包含0x00003FF000000000.

据我所知,没有值为 3 的 SPR,也根本没有关于 tlbiel 的真实文档(我能找到)。这条指令完成了什么?

tlbiel 是 "TLB Invalidate Entry Local":它使 TLB [Translation Look-aside Buffer] 中的条目无效。正如对问题的评论所推测的那样,它与常规的 TLB 无效有关,但它是 "local" 因为它只使执行 tlbiel 的线程上的 TLB 条目无效 说明。

有关更多详细信息,通常的来源是 Power ISA。它非常详细地解释了该指令,包括它对您指定的寄存器的作用。

ISA 有几个版本。最容易找到的两个是:

您需要注册一个 IBM ID 才能下载这些文件,但它们是免费的。如果您在 PowerPC 芯片上进行汇编程序级开发,它们绝对是无价的资源。

最后几件事:

  • 您提到过您 运行 在 Xbox 360 上。它支持稍微不同的指令集。如果您能找到与该特定处理器相对应的 ISA,那就更好了:虽然大部分内容保持不变,但某些细节确实发生了变化。 (我没有任何比 Power8 更早的经验 - 很抱歉我不能在这里更具体!)
  • Linux 内核是迄今为止关于如何在 Power 处理器上执行低级操作的最佳开源文档。那里有处理 TLB 失效的代码,特别是当 tlbiel 足够并且需要非本地版本时。