【问题标题】:Can the AMD64 ISA work without licensing the x86 ISA? [closed]AMD64 ISA 可以在没有 x86 ISA 许可的情况下工作吗? [关闭]
【发布时间】:2021-01-29 20:29:58
【问题描述】:

我知道 AMD64 又名。 x86-64 是 AMD 自己的专有技术,可以由第三方授权,例如 Intel、VIA 等。

我也知道 AMD64 ISA 的“大事”在于它扩展了 x86 ISA,因此与 Intel 的 IA-64 相比,兼容性是一个根本优势。

但是(我的问题现在来了;))由于 AMD64 依赖于基本的 x86 指令集,这是否意味着如果 AMD 不会从英特尔获得许可,AMD64 将只是 x86 的扩展而没有x86 指令集本身,还是 AMD64 “重新实现/重新定义”整个 x86 ISA 使得 x86 许可证在这方面变得不必要?(我猜 AMD 授权 x86 不仅仅是与 AMD64 拥有完整的 ISA,所以这个问题只是一个“假设”的问题,让我更好地理解 AMD64 如何依赖或摆脱 x86。)

如果制造商想制造一个纯粹使用 AMD64 ISA 的 CPU,是否可以制造一个在其上运行的操作系统?会不会涉及x86指令集?或者 AMD64 不能在没有 x86 的情况下定义,所以有一堆基本指令不属于 AMD64,因此没有它们,CPU 根本就无法工作?

【问题讨论】:

  • 首先,许可的内容:专利。 see box on the right ;专利在 20 年后到期。 486 级 x86 已经开放,amd64 的第一个版本是 2003 年出来的,所以很快就会跟进。
  • 制作长模式操作系统的主要困难可能在于想出一种启动它的方法......

标签: x86-64 intel cpu-architecture amd instruction-set


【解决方案1】:

与 AArch64 与 ARM 32 位不同,它甚至不是一种单独的机器代码格式。我认为您很难将 x86-64 与 x86 分开,即使您遗漏了“传统模式”(即能够像仅 32 位 CPU 一样工作,直到/除非您启用 64位模式)。

x86-64 的 64 位模式使用相同的操作码和指令格式(大多只是一个新前缀 REX)。 https://wiki.osdev.org/X86-64_Instruction_Encoding。我怀疑有人会争辩说它与 x86 或任何所需的专利标准有很大不同。 (虽然这方面的专利可能早就过期了,如果是 8086 的话)。

特别是考虑到长模式包括 32/16 位“兼容”子模式 (https://en.wikipedia.org/wiki/X86-64#Operating_modes),并使用英特尔现有的 PAE 页表格式。

但请注意,英特尔和 AMD 之间的许多专利共享内容是用于实现技术,例如处理 push/pop/call/ret 的修改堆栈指针部分的“堆栈引擎”,让它解码为 1 uop 并通过 RSP 避免延迟链。或 IT-TAGE 分支预测(Intel Haswell、AMD Zen 2)。或者也许是解码到微指令的整个概念,英特尔在 1995 年首次使用 P6 (Pentium Pro) 实现了这一点。

大概还有一些关于 ISA 扩展的专利,例如 SSE4.1 和 AVX,对于大多数用途而言,如果没有这些扩展,CPU 就没有吸引力了。 (SSE2 是 x86-64 的基线,因此您需要它。同样,指令和机器代码格式与 32 位模式相同。)


顺便说一句,您必须发明一种启动方式,以需要启用分页的长模式启动。那么也许可以通过某些地址范围的直接映射来启动?或者发明一种新的长模式子模式,允许禁用分页,直接使用物理地址。

固件可以处理这个问题并通过 64 位 UEFI 启动,这可能允许 64 位操作系统在不修改的情况下运行,只要它们永远不会退出长模式。


请注意,AMD 在设计 AMD64 时,有意保持 x86 的可变长度难以解码的机器码格式尽可能不变,并尽可能少做其他更改。

这意味着 CPU 硬件不需要单独的解码器或在执行单元中单独处理即可在 64 位模式下运行。 AMD 不确定 AMD64 是否会流行起来,并且大概不想在几乎没有人利用它的情况下陷入需要大量额外晶体管来实现 64 位模式的困境。

(即使在他们的第一代 K8 芯片的实践中也是如此;在 64 位 Windows 普及之前几年,运行仍在不断发展的 amd64 端口的发行版的 GNU/Linux 用户仅占市场的一小部分早在 2003 年。)

不幸的是,这意味着与 AArch64 不同,AMD64 错过了清理 x86 的一些小缺陷的机会(比如提供 setcc r/m32 而不是不方便的 setcc r/m8 是我最喜欢的例子,我会为64 位模式与 16 和 32 的操作码。)

我明白为什么他们不想完全重新设计机器码格式并需要一种全新的解码方法;以及成本高昂的硅片,这将迫使工具链软件(组装器/反汇编器)进行更多更改,而不是对现有工具进行大部分细微更改。这将略微提高采用 x86 扩展的障碍,这对他们击败 IA-64 至关重要。

(IA-64 在当时是 Intel 的 64 位 ISA,其语义与 x86 大不相同,因此甚至无法共享大部分后端。在大多数情况下重新设计机器代码是可能的虽然与 x86 的指令语义相同。有关这一点的更多信息,请参阅Could a processor be made that supports multiple ISAs? (ex: ARM + x86):如果 ISA 基本相同,则单独的前端为共同的后端提供服务完全可以工作,就像大多数情况下不同的机器代码格式一样语义相同。)

【讨论】:

  • 感谢您非常详尽的回答。
猜你喜欢
  • 2016-10-11
  • 1970-01-01
  • 2019-01-14
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多