【发布时间】:2014-01-13 20:06:36
【问题描述】:
我注意到 GHC 的代码生成器当前不输出使用任何低位机器寄存器(如 al)的程序集。甚至字节大小的操作都是在 64 位机器上使用 rax 和在 32 位机器上使用 eax 实现的。然而,GCC 经常使用这些较小的寄存器。
使用像al这样的小型寄存器有什么真正的性能优势?
到目前为止我听到的一个建议是inc al 的操作码小于inc rax(但不小于inc eax)。为什么要使用小型寄存器,是否还有其他非性能方面的考虑?
【问题讨论】:
-
一些移位指令只需要
cl。在这种情况下,您需要使用一个小寄存器。 -
除了更小的编码之外,一些指令使用 8 位比 32 位更快。
-
我认为每个人都在暗示的答案在于编码。我不一定会使用 GCC 输出作为参考。英特尔文档可以/将显示各种指令的编码,例如,如果要添加两个小数字,则不一定需要 64 位的立即数,而可能需要 16 位。同样,每条指令可以使用一个字节的操作码,而不是两个或更多。除了二进制获取不动产带宽、指令数量和每个指令的大小之外,它还变成了对我们隐藏的微码问题。
标签: assembly compiler-construction