为什么编译器不生成微指令而不是汇编代码?

时间:2011-10-15 01:55:44

标签: optimization architecture compiler-construction assembly low-level

我想知道为什么在现实世界中,编译器会生成汇编代码,而不是微指令

如果您已经绑定了一个架构,那么为什么不进一步让处理器免于在运行时将汇编代码转换为微指令? / p>

我想也许某处有实施瓶颈,但我在谷歌上找不到任何东西。

通过微指令

编辑我的意思是:如果汇编指令是ADD(R1,R2),那么微指令就是。将R1加载到ALU,将R2加载到ALU,执行操作,将结果加载回R1。另一种看待这种情况的方法是将一个微指令等同于一个时钟周期。

我认为微指令是'官方'名称。显然这里有一些里程变化。

FA

3 个答案:

答案 0 :(得分:16)

编译器不生成微指令,因为处理器不执行微指令。它们是芯片的实现细节,而不是芯片外部暴露的东西。没有办法向芯片提供微指令。

答案 1 :(得分:8)

因为x86 CPU不执行微操作,所以它执行操作码。您无法创建包含微操作的二进制映像,因为无法以CPU理解的方式对它们进行编码。

您的建议基本上是用于x86 CPU的新RISC样式指令集。没有发生的原因是因为它会破坏与为x86指令集编写的大量应用程序和操作系统的兼容性。

答案 2 :(得分:0)

答案很简单。

(某些)编译器确实生成了代码序列,例如load r1,load r2,将r2添加到r1。但这恰恰是机器代码指令(你称之为微代码)。这些指令是外部世界和处理器内部之间唯一的接口。

(其他编译器只生成C并让像Ccc这样的C后端关心脏细节。)