使用较小的寄存器有什么好处,例如al vs eax / rax

时间:2014-01-13 20:06:37

标签: assembly compiler-construction

我注意到GHC的代码生成器当前没有输出使用任何较低机器寄存器的程序集,如al。甚至字节大小的操作也是使用64位上的rax和32位机器上的eax实现的。然而,GCC经常使用这些较小的寄存器。

al使用小型寄存器是否有任何实际的性能优势?


到目前为止我听到的一个建议是,inc al的操作码小于inc rax(但不小于inc eax)。是否存在使用小寄存器的其他非性能因素?

2 个答案:

答案 0 :(得分:5)

在x86-64上使用64位寄存器(rxx)需要操作码前缀。因此,指令更长,在内存和指令缓存中占用更多空间。我不知道它是否也会降低解码速度。 如果在不适合L1指令高速缓存的循环中使用较大的代码,则代码大小可能会损害性能。

答案 1 :(得分:4)

如果你只使用al作为8位值,那么第二个就可以免费使用。

加载ax与rax 可能提供内存带宽优势。但是,它也可能导致问题。在那里要小心。