我遇到的所有CPU体系结构都有对称寄存器--也就是说,您读取的值就是您编写的值。
是否有理由,寄存器限制的16位指令,有非对称寄存器?
例如:
每个功能级的寄存器都有自己的硬件,只有当调用深度超过硬件时才会溢出到堆栈中。
(local) (global) ( call ) (ret)
global regset 07 .. 09
.
.
.
. | | ^ ^
. v v | |
regsetN-1 00 .. 06 10 .. 13 14 15
|^ |^ | | ^ ^
v| v| v v | |
fnN-1 RW RW RW RW RW RW
| | ^ ^
v v | |
regsetN 00 .. 06 10 .. 13 14 15
|^ |^ | | ^ ^
v| v| v v | |
fnN RW RW RW RW RW RW
| | ^ ^
v v | |
regsetN+1 00 .. 06 10 .. 13 14 15
|^ |^ | | ^ ^
v| v| v v | |这样的方案是否会将每个函数调用中的寄存器压力降低两个或多个寄存器?
我不认为这是一个新的想法,但我感兴趣的是它是否已经完成,如果没有,为什么不呢?如果这不是一个疯狂的想法,或者已经做了,我可以在FPGA CPU上实现这一点。
这是否太复杂,以致不值得节省登记费用?
困难是这件事没有完成的主要原因吗?
我知道超级标量处理器已经比这个复杂得多,包括寄存器重命名方案等等。我只是在思考微控制器类的体系结构。
更新:看起来SPARC架构做到了这一点。为什么后来的ISA设计师认为它没有用呢?
当调用过程时,寄存器窗口移动16个寄存器,隐藏旧输入寄存器和旧本地寄存器,并使旧的输出寄存器成为新的输入寄存器。
发布于 2017-05-09 13:10:49
SPARC的注册窗口就是这样工作的。虽然孤立地看上去是个好主意,但与系统其他部分的交互降低了系统的整体性能。
来自http://ieng9.ucsd.edu/~cs30x/sparcstack.html
不管怎么说,这是个主意。缺点是,在与系统交互时,需要将寄存器刷新到堆栈,这就需要对数据的内存进行长时间的写入,而这些数据通常都是垃圾。注册窗口是一个糟糕的想法,这是因为仿真研究只考虑孤立的程序,而不是多任务工作负载,以及考虑编译器的优化能力差。它还在实现高端Sparc处理器(如SuperSparc )方面造成了相当大的问题,尽管最近的实现已经有效地解决了这些障碍。注册窗口现在是兼容性遗产的一部分,不容易从体系结构中删除。
https://stackoverflow.com/questions/43868770
复制相似问题