我注意到GHC的代码生成器当前没有输出使用任何较低机器寄存器的程序集,如al
。甚至字节大小的操作也是使用64位上的rax
和32位机器上的eax
实现的。然而,GCC经常使用这些较小的寄存器。
al
使用小型寄存器是否有任何实际的性能优势?
到目前为止我听到的一个建议是,inc al
的操作码小于inc rax
(但不小于inc eax
)。是否存在使用小寄存器的其他非性能因素?
答案 0 :(得分:5)
在x86-64上使用64位寄存器(rxx)需要操作码前缀。因此,指令更长,在内存和指令缓存中占用更多空间。我不知道它是否也会降低解码速度。 如果在不适合L1指令高速缓存的循环中使用较大的代码,则代码大小可能会损害性能。
答案 1 :(得分:4)
如果你只使用al作为8位值,那么第二个就可以免费使用。
加载ax与rax 可能提供内存带宽优势。但是,它也可能导致问题。在那里要小心。