寄存器不能随便改名字,否则原来的数据依赖关系被打乱,会导致错误的执行结果,那么怎样才能既保留原先的数据依赖关系,又能将没有数据依赖性的指令的寄存器改名字呢?
这里介绍一种在处理器中经常实现的策略:
1. 将每条指令的目的寄存器映射到新的物理寄存器;
2. 指令的源寄存器映射为ISA寄存器最近映射到的那个物理寄存器;
3. 当本条指令完成后,该目的寄存器映射的更早的物理寄存器就可以释放了;
文字还是太抽象,看图有真相:
寄存器重名示例
在这个例子中,指令的第一个寄存器是目的寄