编译器是否管理CPU寄存器?

时间:2014-03-14 03:53:46

标签: compiler-construction cpu cpu-registers

如果没有,你能解释图像中编译器的含义吗?

https://docs.google.com/document/d/1q3ZrTdat0VFgg3sSsTxZRuQXS3ODUDKMzG5tSAt9bIM/edit

3 个答案:

答案 0 :(得分:4)

编译器allocates architectural registers,但受platform ABI约束,register renaming指定用于参数传递的寄存器,可以自由使用,必须在进入/离开函数之前保存,等等

然而,这不是完整的故事,因为大多数现代CPU的架构寄存器(您在汇编语言中使用,如RAXXMM0等)本身就是一个一种抽象。大多数CPU中的物理寄存器对于任何类型的软件都是完全无法访问的,远远超过可见的架构寄存器。 CPU本身决定如何将这些“秘密”内部寄存器分配给程序员和编译器处理的架构寄存器。 CPU可以检测指令序列中的某些类型的数据依赖性,并执行instruction-level parallelism之类的操作来解析其中的一些,例如支持{{3}}。

答案 1 :(得分:1)

是。有一个称为“寄存器分配”的阶段'在编译为本机代码的大多数编译器中,编译器决定哪些变量可以在哪些寄存器中进行,以及如何最好地管理寄存器集以获得最佳性能。这就是图片中的列所指的内容。

我不知道为什么你认为你需要进一步确认,但现在就是。

答案 2 :(得分:0)

您提出问题的方式表明您确实不相信,编译器不管理CPU寄存器。

据我所知,编译器通过生成MOV R1,R2等指令,将CPU寄存器用于详细级别。这里甚至使用哪些寄存器由生成的指令指定。