AMD64 ISA 可以在没有许可 x86 ISA 的情况下工作吗?
Can the AMD64 ISA work without licensing the x86 ISA?
我知道 AMD64 又名。 x86-64 是 AMD 自己的专有技术,可以由第三方授权,像 Intel、VIA 等。
我也知道 AMD64 ISA 的“大事”是它 扩展 x86 ISA,因此兼容性是优于 Intel IA-64 的根本优势。
但是(我的问题现在来了 ;))由于 AMD64 依赖于基本的 x86 指令集,这是否意味着如果 AMD 不从英特尔那里获得许可,AMD64 将只是一个扩展到没有 x86 指令集本身的 x86,或者 AMD64“reimplement/redefine”整个 x86 ISA 使得 x86 许可证在这方面变得不必要?(我猜 AMD 许可 x86 不仅仅是拥有带有 AMD64 的完整 ISA,所以这个问题只是一个“假设”问题 - 让我更好地理解 AMD64 如何依赖于 x86 或如何从 x86 中解脱出来。)
如果制造商想制作一个纯粹使用 AMD64 ISA 的 CPU,是否可以制作一个在其上运行的 OS?会涉及x86指令集吗?或者没有 x86 就无法定义 AMD64,所以有一堆不属于 AMD64 的基本指令,因此没有它们,CPU 根本无法工作?
与 AArch64 与 ARM 32 位不同,它甚至不是单独的 machine-code 格式。我认为你很难证明 x86-64 与 x86 是分开的,即使你遗漏了“传统模式”(即完全像 32-bit-only CPU 一样工作的能力, until/unless 您启用 64 位模式)。
x86-64 的 64 位模式使用相同的操作码和指令格式(主要只是一个新的前缀 REX)。 https://wiki.osdev.org/X86-64_Instruction_Encoding。我怀疑有人会争辩说它与 x86 或专利所需的任何标准有很大不同。 (虽然如果是 8086 的专利可能早就过期了)。
特别考虑到长模式包括 32/16 位“兼容”sub-modes (https://en.wikipedia.org/wiki/X86-64#Operating_modes),并使用英特尔现有的 PAE page-table 格式。
但请注意,英特尔和 AMD 之间的许多 patent-sharing 内容都是针对实现技术的,例如处理 push/pop/call/ret 的 modification-to-stack-pointer 部分的“堆栈引擎”,让它解码为 1 uop 并通过 RSP 避免延迟链。或者 IT-TAGE 分支预测(Intel Haswell,AMD Zen 2)。或者也许是英特尔在 ~1995 年首次使用 P6 (Pentium Pro) 解码为 uops 的整个概念。
大概也有像 SSE4.1 和 AVX 这样的 ISA 扩展的专利,对于大多数用途来说,如果没有这些专利,销售 CPU 就没有吸引力了。 (SSE2 是 x86-64 的基线,因此您需要它。同样,指令和 machine-code 格式与 32 位模式相同。)
顺便说一句,您必须发明一种启动方式,以需要启用分页的长模式启动。那么也许可以使用某个地址范围的 direct-mapping 启动?或者发明一种新的sub-mode长模式,允许禁用分页,直接使用物理地址。
固件可以处理这个问题并通过 64 位 UEFI 启动,可能允许 64 位操作系统运行保持不变,只要它们永远不会退出长模式。
注意AMD在设计AMD64时,有意保留x86的variable-lengthhard-to-decodemachine-code格式尽可能不变,其他的改动也尽量少.
这意味着 CPU 硬件在 64 位模式下 运行 不需要单独的解码器或执行单元中的单独处理。 AMD 不确定 AMD64 是否会流行起来,大概不想在几乎没有人会利用它的情况下需要大量额外的晶体管来实现 64 位模式。
(即使在他们的第一代 K8 芯片的实践中也是如此;64 位 Windows 普及已有多年,GNU/Linux 用户 运行ning still-evolving amd64 端口的发行版在 2003 年只占市场的一小部分。)
不幸的是,这意味着与 AArch64 不同,AMD64 错过了清理 x86 的一些小缺点的机会(比如提供 setcc r/m32
而不是不方便的 setcc r/m8
是我最喜欢的例子与 16 和 32 相比,64 位模式下操作码的语义发生了变化。)
我明白为什么他们不想完全重新设计 machine-code 格式并需要一种全新的解码方法;除了硅成本,这将迫使工具链软件(汇编程序/反汇编程序)进行更多更改,而不是对现有工具进行主要的微小更改。这会略微提高采用 x86 扩展的障碍,这对于他们击败 IA-64 至关重要。
(IA-64 当时是 Intel 的 64 位 ISA,其语义与 x86 有很大不同,因此甚至不能共享很多 back-end。重新设计 machine-code 与 x86 的指令语义基本相同。有关这一点的更多信息,请参阅 :如果 ISA 基本上是相同,就像大多数相同语义的不同 machine-code 格式。)
我知道 AMD64 又名。 x86-64 是 AMD 自己的专有技术,可以由第三方授权,像 Intel、VIA 等。
我也知道 AMD64 ISA 的“大事”是它 扩展 x86 ISA,因此兼容性是优于 Intel IA-64 的根本优势。
但是(我的问题现在来了 ;))由于 AMD64 依赖于基本的 x86 指令集,这是否意味着如果 AMD 不从英特尔那里获得许可,AMD64 将只是一个扩展到没有 x86 指令集本身的 x86,或者 AMD64“reimplement/redefine”整个 x86 ISA 使得 x86 许可证在这方面变得不必要?(我猜 AMD 许可 x86 不仅仅是拥有带有 AMD64 的完整 ISA,所以这个问题只是一个“假设”问题 - 让我更好地理解 AMD64 如何依赖于 x86 或如何从 x86 中解脱出来。)
如果制造商想制作一个纯粹使用 AMD64 ISA 的 CPU,是否可以制作一个在其上运行的 OS?会涉及x86指令集吗?或者没有 x86 就无法定义 AMD64,所以有一堆不属于 AMD64 的基本指令,因此没有它们,CPU 根本无法工作?
与 AArch64 与 ARM 32 位不同,它甚至不是单独的 machine-code 格式。我认为你很难证明 x86-64 与 x86 是分开的,即使你遗漏了“传统模式”(即完全像 32-bit-only CPU 一样工作的能力, until/unless 您启用 64 位模式)。
x86-64 的 64 位模式使用相同的操作码和指令格式(主要只是一个新的前缀 REX)。 https://wiki.osdev.org/X86-64_Instruction_Encoding。我怀疑有人会争辩说它与 x86 或专利所需的任何标准有很大不同。 (虽然如果是 8086 的专利可能早就过期了)。
特别考虑到长模式包括 32/16 位“兼容”sub-modes (https://en.wikipedia.org/wiki/X86-64#Operating_modes),并使用英特尔现有的 PAE page-table 格式。
但请注意,英特尔和 AMD 之间的许多 patent-sharing 内容都是针对实现技术的,例如处理 push/pop/call/ret 的 modification-to-stack-pointer 部分的“堆栈引擎”,让它解码为 1 uop 并通过 RSP 避免延迟链。或者 IT-TAGE 分支预测(Intel Haswell,AMD Zen 2)。或者也许是英特尔在 ~1995 年首次使用 P6 (Pentium Pro) 解码为 uops 的整个概念。
大概也有像 SSE4.1 和 AVX 这样的 ISA 扩展的专利,对于大多数用途来说,如果没有这些专利,销售 CPU 就没有吸引力了。 (SSE2 是 x86-64 的基线,因此您需要它。同样,指令和 machine-code 格式与 32 位模式相同。)
顺便说一句,您必须发明一种启动方式,以需要启用分页的长模式启动。那么也许可以使用某个地址范围的 direct-mapping 启动?或者发明一种新的sub-mode长模式,允许禁用分页,直接使用物理地址。
固件可以处理这个问题并通过 64 位 UEFI 启动,可能允许 64 位操作系统运行保持不变,只要它们永远不会退出长模式。
注意AMD在设计AMD64时,有意保留x86的variable-lengthhard-to-decodemachine-code格式尽可能不变,其他的改动也尽量少.
这意味着 CPU 硬件在 64 位模式下 运行 不需要单独的解码器或执行单元中的单独处理。 AMD 不确定 AMD64 是否会流行起来,大概不想在几乎没有人会利用它的情况下需要大量额外的晶体管来实现 64 位模式。
(即使在他们的第一代 K8 芯片的实践中也是如此;64 位 Windows 普及已有多年,GNU/Linux 用户 运行ning still-evolving amd64 端口的发行版在 2003 年只占市场的一小部分。)
不幸的是,这意味着与 AArch64 不同,AMD64 错过了清理 x86 的一些小缺点的机会(比如提供 setcc r/m32
而不是不方便的 setcc r/m8
是我最喜欢的例子与 16 和 32 相比,64 位模式下操作码的语义发生了变化。)
我明白为什么他们不想完全重新设计 machine-code 格式并需要一种全新的解码方法;除了硅成本,这将迫使工具链软件(汇编程序/反汇编程序)进行更多更改,而不是对现有工具进行主要的微小更改。这会略微提高采用 x86 扩展的障碍,这对于他们击败 IA-64 至关重要。
(IA-64 当时是 Intel 的 64 位 ISA,其语义与 x86 有很大不同,因此甚至不能共享很多 back-end。重新设计 machine-code 与 x86 的指令语义基本相同。有关这一点的更多信息,请参阅