这是关于现代CPU架构的一个非常低级的问题。 我了解到我可以在64位模式下使用更多额外的寄存器。 例如ARM架构有r15-r31通用寄存器,用于Intel / AMD r8-r15通用寄存器。 SIMD寄存器也会像xmm8-xmm15(或ymm8-ymm15)那样加倍
有人知道在64位模式下怎么可能?
我不希望像“他们刚建了更多的寄存器”之类的简单回答 因为在32位模式下,我不能使用那个额外的寄存器。 即使是那些额外的寄存器也不是现代编译器所使用的。
答案 0 :(得分:0)
(我不熟悉arm64,所以我以X86-64为例。) 寄存器选择以二进制指令编码。 32位指令只能使用80386中的寄存器,并且不能使用超出这些寄存器的寄存器。此外,IA-32(x86-32)使用3位表示寄存器,但x86-64需要4位来表示所有寄存器,需要另一位来访问其他寄存器,而这个位在64位指令中的REX字节。这意味着,为了使用额外的寄存器,需要REX字节,REX是64位指令的一部分; 32位指令中没有REX字节,因此不能在32位中使用额外的寄存器。
在SIMD指令中,还需要扩展位来访问更多寄存器。
对于ARM64,我知道一点:它的寄存器文件和指令集是全新的,不是32位ARM的扩展(X86-64是X86-32的扩展)。 ARM64处理器可以运行32位ARM遗留指令以实现兼容性,但这是处理器的工作,而不是架构(ISA)的工作。早期的ARM64 处理器可以运行两个指令集架构来支持旧软件,但是将来可能会丢弃32位架构支持,只留下64位(ARM64)。