无需许可x86 ISA,AMD64 ISA可以工作吗?

问题描述

我知道AMD64又名。 x86-64是AMD自己的专有技术,可以得到第三方的许可,而第三方可以这样做,例如Intel,VIA等。

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

但是(我的问题现在就来了;))由于AMD64依赖于基本的x86指令集,这是否意味着如果AMD无法获得Intel的许可,那么AMD64只是x86的扩展而没有是x86指令集本身,还是AMD64“重新实现/重新定义”了整个x86 ISA,从而在这方面不需要x86许可证?(我想AMD授予x86许可不只是与AMD64拥有完整的ISA,因此,这个问题只是一种“假设条件”,以便让我更好地了解AMD64如何依赖或摆脱x86。)

如果制造商只想使用AMD64 ISA来制造CPU,是否可以制造在其上运行的OS?它会涉及x86指令集吗?还是没有x86就无法定义AMD64,所以有一堆不属于AMD64的基本指令,因此没有它们,CPU根本无法工作?

解决方法

与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位“ compat”子模式(https://en.wikipedia.org/wiki/X86-64#Operating_modes),并使用Intel现有的PAE页表格式。

但是请注意,英特尔和AMD之间的许多专利共享内容都是用于实现技术的,例如处理“推/弹出/调用/返回”的“修改堆栈指针”部分的“堆栈引擎”,使其解码为1 uop,并避免通过RSP产生延迟链。或IT-TAGE分支预测(英特尔Haswell,AMD Zen 2)。也许是整个解码到uops的概念,这是Intel在1995年首次使用P6(Pentium Pro)进行的。

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


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

固件可以处理此问题并通过64位UEFI引导,只要它们从未退出长模式,就可能允许64位OS未经修改地运行。


请注意,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的基本相同,例如不同的机器代码格式,单独的前端可以为通用后端提供服务对于大多数相同的语义。)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...