首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么没有处理器有非对称寄存器?

为什么没有处理器有非对称寄存器?
EN

Stack Overflow用户
提问于 2017-05-09 11:36:43
回答 1查看 161关注 0票数 5

我遇到的所有CPU体系结构都有对称寄存器--也就是说,您读取的值就是您编写的值。

是否有理由,寄存器限制的16位指令,有非对称寄存器?

例如:

  • 寄存器0-6是函数调用的“本地”。在此函数调用中写入的值是将被读取的值。每个级别的函数调用都有自己的寄存器硬件,因此本地寄存器被隐式保存。
  • 寄存器7-9是“全局”的,可能是SMP CPU上的“线程本地”。
  • 写入“调用”寄存器10-13的值不会影响在此函数调用上下文中从它们读取的内容。
  • 从“调用”寄存器10-13读取的值是在调用函数中写入的值,即函数的寄存器参数是不可变的。
  • 写入“返回”寄存器14-15的值不影响在此函数调用上下文中从它们读取的磨擦。
  • 从“返回”寄存器中读取的值14-15是在最近返回到当前函数的函数中写入的值。

每个功能级的寄存器都有自己的硬件,只有当调用深度超过硬件时才会溢出到堆栈中。

代码语言:javascript
复制
               (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个寄存器,隐藏旧输入寄存器和旧本地寄存器,并使旧的输出寄存器成为新的输入寄存器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 13:10:49

SPARC的注册窗口就是这样工作的。虽然孤立地看上去是个好主意,但与系统其他部分的交互降低了系统的整体性能。

来自http://ieng9.ucsd.edu/~cs30x/sparcstack.html

不管怎么说,这是个主意。缺点是,在与系统交互时,需要将寄存器刷新到堆栈,这就需要对数据的内存进行长时间的写入,而这些数据通常都是垃圾。注册窗口是一个糟糕的想法,这是因为仿真研究只考虑孤立的程序,而不是多任务工作负载,以及考虑编译器的优化能力差。它还在实现高端Sparc处理器(如SuperSparc )方面造成了相当大的问题,尽管最近的实现已经有效地解决了这些障碍。注册窗口现在是兼容性遗产的一部分,不容易从体系结构中删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43868770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档