记忆存储"弄脏"寄存器分配中的清除值

时间:2015-08-12 04:00:29

标签: register-allocation

我有几个关于寄存器分配的问题,特别是脏/清洁/可重新索引的值。据我所知:在使用前必须将脏值溢出并恢复;干净的值来自内存负载,只需从内存中恢复;并且可重新实现的值来自恒定负载,只需通过加载常量来恢复。我的问题是:

1)很容易确定某个值是否干净,但我们如何确定它已加载的内存位置?我们知道哪个寄存器保存了内存位置,但该寄存器中的值可能会发生变化。我们只计算从一个恒定位置或可重新定位的位置加载的干净东西吗?

2)商店肯定会弄脏一个干净的价值。如果r0是从内存位置1024加载的,而我们只有一个存储到1024,那么r0现在很脏。更糟糕的是,那些寄存器我们没有溢出,因为它们具有清洁价值,现在被覆盖了?类似于以下序列。

  1. 将内存1024中的值加载到r0。
  2. 耗尽物理寄存器,决定溢出r0。由于它很干净,我们不需要插入溢出代码。
  3. 将值从r1存储到内存
  4. 尝试恢复r0,但现在内存中的值已更改。

0 个答案:

没有答案