寄存器状态保存和恢复的制作方法

文档序号:6334533阅读:1264来源:国知局
专利名称:寄存器状态保存和恢复的制作方法
技术领域
本发明涉及数据处理领域。尤其是,本发明涉及将来自寄存器的寄存器值保存到 备份数据存储器,并将该寄存器值从该备份数据存储器恢复到该寄存器。
背景技术
数据处理装置可具有用于存储在处理期间处理器所使用的数据值的寄存器集。寄 存器值表示处理器的当前状态。当该处理装置遇到上下文切换(context switch)时,该寄 存器中所存储的至少一些寄存器值可被存储到备份数据存储器。在情景改变之后,可以在 该寄存器中存储不同的寄存器值。当与该上下文切换有关的处理完成后,原始寄存器值可 被恢复到该寄存器,以完成被该上下文切换中断的处理的执行。在触发将寄存器状态保存到备份数据存储器的事件(例如,异常事件)发生时,当 前正在执行的操作可能还没有完成。该操作可能花费许多的处理周期来执行。如果该操作 向该寄存器之一写入结果值,且该状态保存操作在当前正在执行的操作完成前开始时,那 么写入该备份数据存储器的寄存器状态可以不包括最近计算出的结果值。这意味着在恢复 状态数据后,可能出现处理错误。应当避免在结果值被写到该寄存器之前读取寄存器的值 的数据相关性危险。通常希望,状态保存触发事件的发生和状态保存处理的结束之间的时间是可预测 的。在安全很关键的系统的情况下尤其如此,比如汽车制动系统,其中中断等待时间的恒 定和短暂是非常重要的。如果允许当前正在执行的操作在开始状态保存操作之前完成,那 么数据相关性危险将被避免。然而,因为状态保存触发事件可能在当前正在执行的操作的 执行期间的任一点发生,开始该状态保存处理的延迟将根据触发事件发生时的执行点而变 化,因此难以预测在所有的状态数据被保存到该备份数据存储器之前将花费多长时间。允 许在开始状态保存操作之前完成当前正在执行的操作的执行还会增加中断等待时间。因 此,只在当前正在执行的操作完成后开始状态保存操作在许多系统中是不适当的。另一种避免数据相关性危险的办法是在状态保存触发事件发生时马上在执行过 程中中途抛弃当前正在执行的指令。然而,这个选择有缺点,即在状态恢复后,被抛弃的指 令将需要全部再次执行,因此减缓了处理装置执行程序的向前的进程。而且,被抛弃的指令 可能不是幂等(idempotent)。这些技术每种都有下述缺点之一数据相关性危险、不可预知且缓慢的异常处理 等待时间、以及在恢复寄存器状态后缓慢的处理。本发明力图提供一种更好的状态保存和 恢复机制,该机制避免了数据相关性危险、具有可预测的等待时间,并且在状态被恢复到寄 存器后不会延迟处理。

发明内容
根据一个方面,本发明提供一种数据处理装置,包含用于执行数据处理操作以产生结果值的数据处理电路;
用于存储多个寄存器值的多个寄存器,该多个寄存器中的一个是用于存储在所述 数据处理电路执行所述数据处理操作期间产生的所述结果值的目标寄存器;用于存储所述多个寄存器值的子集的备份拷贝的备份数据存储器(store);以及状态保存控制电路,对当所述结果值仍要被写到所述目标寄存器值时状态保存触 发事件的发生作出响应以(i)检测所述多个寄存器中哪个是所述目标寄存器;(ii)选择限定将寄存器值的所述子集中的每一个保存到所述备份数据存储器的 暂时顺序的状态保存序列,所述状态保存控制电路根据所述多个寄存器中哪个是所述目标 寄存器来选择所述状态保存序列,以为所述目标寄存器提供在所述状态保存序列内对应于 所述结果值已被所述数据处理电路写到所述目标寄存器后的时间的位置;(iii)在选择所述状态保存序列之后,将寄存器值的所述子集中的每一个以所选 的状态保存序列的顺序保存到所述备份数据存储器。当在当前正在执行的数据处理操作仍要被写入目标寄存器的同时状态保存触发 事件发生时,本技术的该状态保存控制电路通过将寄存器值的子集保存到备份数据存储器 而作出响应。本技术意识到,通过选择用于将寄存器值的子集中每一个保存到该备份数据 存储器的适当的暂时顺序,该数据处理操作的执行期间产生的结果值将在该目标寄存器的 值被保存到该备份数据存储器之前,被写到该目标寄存器。因此,数据相关性(dependency) 危险被避免而正确的目标寄存器的值被保存。因为该状态保存操作可在数据处理操作仍在 执行的同时开始,与该状态保存操作有关的等待时间是短的、不变的和可预测的,因为状态 保存的结束不依赖于该状态保存触发事件发生的执行点。当状态保存触发事件发生时,当 前正在执行的数据处理操作的处理不被抛弃,因此在将寄存器值恢复到寄存器时,该数据 处理电路正执行的程序的继续处理将会更快,因为该数据处理操作不需要再次执行而非幂 等指令的问题不会出现。被保存到该备份数据存储器的寄存器值的该子集可以只是存储在该多个寄存器 中的寄存器中的一些,而其它的寄存器在状态保存触发事件发生时不被保存。替代地,寄存 器值的子集可以是存储在该多个寄存器中的全部寄存器值。在进一步特征中,在该备份数据存储器中存储该子集寄存器值的物理顺序可以不 依赖于通过该状态保存序列所限定的用于保存寄存器值的子集的暂时顺序。例如,不管所 选的状态保存序列限定的暂时顺序如何,该寄存器值可以被存储在该备份数据存储器内相 同的物理位置中。因为寄存器值的子集的物理存储顺序不依赖于它们被保存的暂时顺序, 该寄存器值的恢复被简化,因为在恢复时,不需要知道该值被写到该备份数据存储器的暂 时顺序。该状态保存触发事件可以是函数调用。当执行第一序列数据处理操作时,函数调 用可能发生,其表示对第一序列操作的执行应当被中止而第二序列处理操作的执行应当开 始。为了使一旦该第二序列已经完成便让第一序列处理能够继续,函数调用被用作状态保 存触发事件以启动将与该第一序列有关的寄存器值保存到该备份数据存储器。该状态保存触发事件还可以是中断请求。该中断请求表示对当前的处理操作的处 理应当被中止而中断处理例程的处理应当开始。当中断请求发生时,状态保存启动。一旦 该中断处理例程的执行完成,那么可以使用从备份数据存储器恢复的状态数据,被中断的数据处理操作能再继续。该状态保存触发事件还可以是由数据处理电路执行的存储多重操作(multiple operation),至少一个要被存储的值是该目标寄存器的寄存器值。存储多重操作控制寄存 器值的块到备份数据存储器的存储。当两个或更多寄存器值的块中的一个是目标寄存器的 寄存器值时,那么本技术可用于控制将寄存器值写到该备份数据存储器的暂时顺序。通过 适当选择存储该值的暂时顺序,该存储多重操作可以在前面的将结果值写到该目标寄存器 的数据处理操作完成之前执行。向该目标寄存器提供在该存储多个序列中一个位置,使得 它在前面执行的数据处理操作的结果值被写到该目标寄存器之后被保存到该备份数据存 储器。在进一步特征中,除了目标寄存器外的至少一个寄存器可在该状态保存序列具有 比该目标寄存器更早的位置。通过在保存该目标寄存器的值前保存除了目标寄存器之外的 至少一个寄存器的寄存器值,这为当前正在执行的数据处理操作提供了时间,以便在该目 标寄存器的值被保存之前完成。在本技术的进一步特征中,寄存器的子集可包含多个寄存器组,且该状态保存控 制电路可被配置为向不包括目标寄存器的至少一个寄存器组的寄存器,在该状态保存序列 中提供比包括该目标寄存器的寄存器组的寄存器更早的位置。其内容将被保存的寄存器的子集可以在逻辑上被分为多个组(尽管未必物理分 成单独的寄存器块,该组可以是单个寄存器群(register bank)内的不同的寄存器集)。当 选择状态保存序列时,该状态保存控制电路可将该序列布置为不包括该目标寄存器的至少 一个寄存器组的寄存器,在该状态保存序列中比包括该目标寄存器的组的寄存器具有更早 的位置。这有助于向该目标寄存器提供在该状态保存序列内足够后(late)的位置,以确保 在该目标寄存器的值被保存到该备份数据存储器之前,当前正在执行的数据处理操作将该 结果值写到该目标寄存器。该多个寄存器组可包含两个寄存器组。在这种情况下,该状态保存控制电路选择 该状态保存序列,使得不包括目标寄存器的寄存器组的寄存器值,在包括该目标寄存器的 寄存器组的寄存器值之前,被保存到该备份数据存储器。只提供两个组意味着使用相对简 单的处理逻辑可以防止数据相关性危险。用于选择状态保存序列和产生用于在该备份数据 存储器内使用的适当的地址的电路不复杂,因为只有两种可能的状态保存序列。该数据处理电路可执行多个数据处理操作并产生多个要存储到多个目标寄存器 中的多个结果值。在这种情况下,寄存器的子集可包含多个寄存器组,而该状态保存控制电 路可为不包括该多个目标寄存器中的任何一个的至少一个寄存器组的寄存器,在该状态保 存序列内提供比包括该多个目标寄存器中至少一个的所有的寄存器组的寄存器更早的位 置。如果正在使用超过一个目标寄存器的话,那么该序列被选择以便不包括目标寄存 器中任何一个的至少一个寄存器组在该序列中比包括至少一个目标寄存器的寄存器组更 早。这意味着目标寄存器的值可以在该结果值已被写到相应的目标寄存器之后,存储到该 备份数据存储器。在用于选择状态保存序列的上述技术中的任一种中,该状态保存控制电路可以被 配置为将同一个寄存器组中的连续寄存器提供给它的在该状态保存序列中的位置。这简化8了该状态保存序列的选择简单因为可以使用连续的地址用于访问该备份数据存储器中同 一组的寄存器值。另一种技术是选择终止于目标寄存器的寄存器的循环序列作为所选的状态保存 序列。例如,该序列可以在返回到该寄存器集的开头并继续直到该目标寄存器之前,开始于 该目标寄存器之后的寄存器并继续到该多个寄存器的末端。这确保了该目标寄存器是最后 被保存到备份数据存储器的寄存器,同时仍然有几乎全部连续的寄存器序列。通过将目标 寄存器的值最后保存到备份数据存储器,为当前正在执行的数据处理操作提供了更多的时 间,以便在该目标寄存器的值被保存到该备份数据存储器之前完成并将其结果值写入目标 寄存器。同样,通过提供大部分(largely)连续的寄存器序列(唯一的非连续点是该序列 从该多个寄存器的末端绕回该多个寄存器的开头的点),用于选择所选的状态保存序列和 控制该状态保存的逻辑和电路相对简单。也可以使用反过来的循环序列,在该反过来的循 环序列中,循环序列开始于该目标寄存器之前的寄存器、继续到该寄存器的开头、绕回该寄 存器文件的末端、然后返回该目标寄存器。该状态保存控制电路可以是由硬件控制的。通过提供在状态保存触发事件发生时 自动触发状态保存操作的硬件,与如果这个功能由软件控制相比,状态保存更快地开始。由 软件控制的状态保存通常比硬件更慢并需要更多指令。该备份数据存储器可以是存储元件(memory)。尤其是,可以使用堆栈存储元件。该备份数据存储器可以是存储相应多个寄存器的寄存器值的另外多个寄存器。尽管本技术可在任何数据处理操作被状态保存触发事件中断时应用,然而本技术 在该数据处理操作是浮点除法操作和浮点平方根操作之一时尤其有用。这是因为这些操作 花相对长的时间来执行,因此与具有较短的执行时间的操作相比,数据相关性危险对于这 些操作更有可能。本技术可以应用的其它数据处理操作包括整数除法或平方根操作、双精度或扩充 精度浮点操作、整数或浮点乘加操作、三角函数操作和倒数操作。如上所述,当状态保存触发事件发生时,本技术不抛弃对当前正在执行的操作的 执行。在一些情况下,不抛弃正在执行的数据处理操作是重要的,因此本技术在那些情况下 尤其有用。这种情况的一个示例是其中数据处理电路包含至少两个处理流水线,用于彼此 并行地执行数据处理操作,而该数据处理电路被配置为向该至少两个处理流水线按顺序发 布数据处理操作,但是如果处理流水线的一个执行较后发布的数据处理操作,比数据处理 流水线的另一个执行较早发布的处理操作更快的话,则未按顺序完成对所发布的数据处理 操作的执行。在这样的系统中,有可能当状态保存触发事件发生时,较后发布的数据处理操 作已经完成并将其结果值写到寄存器,而较早发布的数据处理操作还没有完成。如果在这 一点启动状态保存的话,那么该备份数据存储器中保存的状态将包括由较后发布的数据处 理操作所产生的结果值,而不是由较早发布的数据处理操作产生的结果值。因此,即使状态 被恢复而较早发布的数据处理操作被重新开始,最终结果可能是不正确的,因为较早发布 的数据处理操作可能错误地使用了较后发布的数据处理操作的结果值而不是在较后发布 的数据处理操作执行以前被存储的较早的寄存器值。对于具有不按顺序完成的处理系统, 本技术是有用的,因为它使得较早发布(但是较后完成)的数据处理操作在目标寄存器值 被保存到备份数据存储器之前完成并将其结果值写到该目标寄存器。
该多个寄存器不需要是唯一的寄存器集。例如,在既有整数处理又有浮点处理性 能的系统中,有用于存储整数寄存器值的整数寄存器集和用于存储浮点寄存器值的浮点寄 存器集。在这样的系统中,不需要对两个寄存器集都应用本技术。例如,该状态保存控制电 路可以对状态保存触发事件作出响应,以按照不依赖于状态保存序列的暂时顺序将整数寄 存器值的子集至少保存到备份数据存储器,而依照状态保存序列存储浮点寄存器值。这是 有用的,因为浮点操作通常比整数操作花更长时间执行,因此本技术对保存浮点寄存器的 值更有用。从另一个方面看,本发明提供了一种数据处理方法,包含以下步骤执行数据处理操作以产生要被存储在目标寄存器中的结果值,所述目标寄存器是 用于存储多个寄存器值的多个寄存器中的一个;以及状态保存触发事件发生同时所述结果值仍要被写到所述目标寄存器时(i)检测所述多个寄存器中哪个是所述目标寄存器;(ii)选择限定用于将所述多个寄存器值的子集中的每一个保存到所述备份数据 存储器的暂时顺序的状态保存序列,所述状态保存序列是根据所述多个寄存器中哪个是所 述目标寄存器来选择的,从而向所述目标寄存器提供在所述状态保存序列内对应于所述结 果值已被写到所述目标寄存器后的时间的位置;以及(iii)在选择该状态保存序列之后,将寄存器值的所述子集中的每一个以所选的 状态保存序列的顺序保存到该备份数据存储器。从又一个方面来看,本发明提供一种数据处理装置,包含用于执行数据处理操作以产生结果值的数据处理电路;用于存储多个寄存器值的多个寄存器,所述多个寄存器中的一个是用于存储由所 述数据处理电路产生的所述结果值的目标寄存器;用于存储所述多个寄存器值的子集的备份拷贝的备份数据存储器;以及状态恢复控制电路,其在所述结果值仍要被写到所述目标寄存器值时响应于状态 恢复触发事件的发生,以(i)检测所述多个寄存器中哪个是所述目标寄存器;(ii)选择限定用于将存储在所述备份数据存储器中的寄存器值的所述子集中的 每一个加载到所述寄存器的暂时顺序的状态恢复序列,所述状态恢复控制电路根据所述多 个寄存器中哪个是所述目标寄存器来选择所述状态恢复序列,以向所述目标寄存器提供在 所述状态恢复序列内对应于所述结果值已被写到所述目标寄存器后的时间的位置;(iii)在选择所述状态恢复序列之后,将寄存器值的所述子集中的每一个以所选 的状态恢复序列的顺序,从所述备份数据存储器加载到所述寄存器。在上面描述的技术中,将寄存器值保存到备份数据存储器的暂时顺序是依据哪个 寄存器是目标寄存器来控制的。当寄存器值已被保存到该备份数据存储器时,可以以相同 方式控制备份的寄存器值的恢复。在当前正在执行的操作仍要将结果值写到目标寄存器 的同时数据被恢复到该寄存器时,则结果值在寄存器值被恢复到目标寄存器之前被写到目 标寄存器是重要的,否则被恢复的寄存器状态将与存储在该备份数据存储器中的状态不相 同。因此,该状态恢复控制电路选择限定用于将寄存器值的子集中的每一个加载到该寄存 器的暂时顺序的状态恢复序列。依照该多个寄存器中哪个是目标寄存器选择状态恢复序列,以便向该目标寄存器提供在该状态恢复序列内与该结果值已被写到该目标寄存器之后 的时间相对应的位置。这意味着,备份后的状态被正确地恢复并且随后不被在状态恢复触 发事件发生时被部分地执行的数据处理操作的结果值所覆盖。该状态恢复触发事件可以是从函数调用的执行的返回。这意味着与函数调用发生 之前正在执行的处理有关的状态被恢复到该寄存器。该状态恢复触发事件可以是从中断处理过程的执行的返回。这意味着与该中断事 件发生之前正在执行的处理有关的寄存器值被恢复到该寄存器。该状态恢复触发事件还可以是加载多重操作的执行,其中至少一个值要被加载到 目标寄存器。如果加载到目标寄存器的值随后被在该加载多重操作开始时已经部分地执行 的数据处理操作覆盖的话,该加载多重操作将不能正确执行。当该加载多重操作将至少两 个值的块加载到该寄存器,而这些值中的至少一个将被加载到目标寄存器时,本技术可被 用于选择将至少两个数据值加载到寄存器的暂时顺序,使得要被加载到该目标寄存器的至 少一个值在当前正在执行的处理操作将结果值写到该目标寄存器之后被加载。该状态恢复序列可以被选择,使得除了目标寄存器外的至少一个寄存器在该序列 中比该目标寄存器具有更早的位置。这为当前正在执行的数据处理操作提供了时间,以在 备份的寄存器值被恢复到目标寄存器之前完成。寄存器的子集可包含多个寄存器组,且该状态恢复电路可被配置为向不包括目标 寄存器的至少一个寄存器组的寄存器,在该状态恢复序列中提供比包括该目标寄存器的寄 存器组的寄存器更早的位置。用这种方式布置该序列简化了恢复序列的选择。通过提供两个寄存器组作为该多个寄存器组可以进一步简化该状态恢复控制电 路。在这种情况下,只有两种可能的状态恢复序列(或者第二组在第一组之后,或第一组在 第二组之后)。因此,选择这两种序列中的一个是简单的。其中该数据处理电路执行多个数据处理操作,以产生要被存储在多个目标寄存器 中的多个结果值,该寄存器可以被以多个组的形式布置而该状态恢复控制电路可被配置为 向不包括任何目标寄存器的至少一个寄存器组的寄存器,在该状态恢复序列中提供比包括 至少一个目标寄存器的所有的寄存器组中的寄存器更早的位置。因此,至少一些非目标寄 存器在该序列中被放置在前面且因此任何目标寄存器被放置在后面,从而有助于避免数据 相关性危险。为了简化该状态恢复序列的选择(以及标识在备份数据存储器内寄存器值自其 被加载的位置的地址的序列的产生),该状态控制电路可被配置为向同一个寄存器组中的 连续寄存器提供在该状态恢复序列内的连续的位置。所选的状态恢复序列可以是终止于目标寄存器的寄存器的循环序列。这在该寄存 器值被恢复到目标寄存器之前提供了更多的时间。该状态恢复控制电路可以是由硬件控制的。这意味着与如果该状态恢复操作由软 件控制的情况相比,对状态恢复触发事件的响应更快。该备份数据存储器可以是存储元件或另外多个寄存器。该数据处理操作可以是浮点除法操作和浮点平方根操作之一。本技术对这些操作 尤其有用,因为它们花相对长的时间执行。在进一步特征中,该数据处理电路包含至少两个处理流水线以彼此并行地执行数据处理操作;以及所述数据处理电路被配置为向所述至少两个处理流水线按顺序发布数据处理操 作,但是如果所述处理流水线中的一个执行较后发布的数据处理操作,比所述处理流水线 中的另一个执行较先发布的数据处理操作更快的话,那么完成所发布的数据处理操作的执 行不按顺序。本技术在具有不按顺序完成的处理器中是有用的,因为在这种处理器中,抛弃对 当前正在执行的指令的执行是不合适的,因为上文有关状态保存技术所阐述的原因。其中有用于存储整数寄存器值和浮点寄存器值的独立的寄存器的情况下,本技术 可以只应用于浮点寄存器,整数寄存器的值以不依赖于该状态恢复序列的暂时顺序被加载。从进一步的方面看,本发明提供了一种数据处理方法,包含以下步骤执行数据处理操作以产生要存储在目标寄存器中的结果值,所述目标寄存器是多 个寄存器中的一个;以及在状态保存恢复事件发生同时所述结果值仍要被写到所述目标寄存器时(i)检测所述多个寄存器中哪个是所述目标寄存器;(ii)选择限定用于将存储在所述备份数据存储器中的所述多个寄存器值的子集 中的每一个加载到所述寄存器的暂时顺序的状态恢复序列,所述状态恢复序列是根据所述 多个寄存器中哪个是所述目标寄存器来选择的,以向所述目标寄存器提供在所述状态恢复 序列内对应于所述结果值已被写到所述目标寄存器后的时间的位置;以及(iii)在选择所述状态恢复序列之后,将寄存器值的所述子集中的每一个以所选 的状态恢复序列的顺序从所述备份数据存储器加载到所述寄存器。根据以下对示意性实施方式的详细描述(结合附图进行阅读),本发明的上述和 其它目标、特征和优点将显而易见。


图1示意性地描绘了一种用于将寄存器值保存到备份数据存储器并将保存在该 备份数据存储器中的寄存器值恢复到寄存器的数据处理装置;图2示意性地描绘了将寄存器值保存到堆栈存储元件;图3示意性地描绘了经由处理装置的浮点和整数操作的按顺序发布和不按顺序 完成的示例;图4显示了一种根据两组寄存器中哪一组包括目标寄存器来选择状态保存或恢 复序列的示例技术;图5显示了状态保存或恢复序列的选择的另一个示例,其中有四组寄存器;图6显示了状态保存或恢复序列的选择的又一个示例,其中有多个目标寄存器;图7显示了循环状态保存或恢复序列的示例;图8描绘了一种用于将寄存器值保存到备份数据存储器的方法;图9显示了一种将寄存器值恢复到该寄存器的方法;以及图10是显示按照其可将寄存器值存储到备份数据存储器或从该备份数据存储器 恢复的示例性时序的时序图。1具体实施例方式图1显示了数据处理装置1,其包含用于处理数据处理操作的处理电路4。提供至 少一寄存器群6,以存储在数据处理操作执行期间处理电路4所使用和产生的数据值。在图 1的示例中,寄存器6包括整数寄存器6-1和浮点寄存器6-2。整数寄存器6-1存储整数数 据值而浮点寄存器6-2存储浮点数据值。其中区分整数寄存器6-1和浮点寄存器6-2并不 重要,将用附图标记6来指示各寄存器。提供备份数据存储器10,以存储来自寄存器6的数据值的备份拷贝。该备份数据 存储器10还可存储要由处理电路4执行的指令(尽管可以提供图1中没有描绘的单独的 指令存储元件)。备份数据存储器10可以响应于存储或加载指令,从而存储来自寄存器6 的数据或将数据加载到寄存器6。在状态保存触发事件发生时,寄存器6的至少一个子集的内容可以被存储到备份 数据存储器10 (寄存器的子集可以包括寄存器6中的全部或仅包括一部分)。类似地,在状 态恢复触发事件发生时,前面存储在备份数据存储器10中的寄存器值可以被加载到寄存 器6的子集中。提供状态保存和恢复控制电路12以控制保存和恢复过程。尽管图1中将状态保 存和恢复控制电路12显示为单个电路,然而将理解到,可以提供单独的电路以执行相应的 保存和恢复操作。状态保存和恢复控制电路12由硬件控制以通过将寄存器6的寄存器值 保存到备份数据存储器10来自动地对状态保存触发事件作出响应,并通过将存储在备份 数据存储器10中的寄存器值加载到寄存器6来对状态恢复触发事件作出响应。因为状 态保存和恢复电路12是硬件控制的,所以它不需要为了响应于状态保存触发事件或状态 恢复触发事件而调用存储在存储元件中的任何程序,并且因此对这些事件的这种硬连线 (hard-wired)响应,比在使用由软件控制的电路的情况下的响应更快。备份数据存储器10可以是在寄存器6之外所提供的第二寄存器集。替代地,该备 份数据存储器可以是存储元件。图2显示了备份数据存储器10是堆栈存储元件的一个示 例。图3显示了处理电路4的操作的一个示例。处理电路4包括浮点流水线16和整 数流水线20。浮点流水线16使用浮点寄存器6-2处理浮点处理操作,而整数流水线20使 用整数寄存器6-1处理整数处理操作。在图3的示例中,处理操作是按顺序发布的,但是可 以不按顺序完成。这可以在图3中看到,其中,例如,整数操作I1和I2、浮点操作F1和另一 个整数操作I3以那个顺序被发布到处理电路4。如能在图3的底部所看出的那样,这些操 作是按顺序(I:、I2、Fi、I3)发布到该处理器的,但是未按顺序(I^ 12、I^F1)完成。这是因 为浮点操作比整数操作花更长的时间来执行。如果状态保存或恢复触发事件在整数操作I3 完成之后,但是在浮点操作F1完成之前发生的话,那么整数寄存器6-1将校正到操作I3的 执行结束,而浮点寄存器6-2还不是最新的,因为浮点操作F1的结果值还没有被写到浮点 寄存器6-2。如果该状态保存或状态恢复立即发生的话,那么有可能操作F1的结果值没有被 保存到备份数据存储器10,或者在恢复F1的结果值时不正确地覆盖从备份数据存储器10 所恢复的值。这意味着错误的状态可能被恢复到该寄存器并因此其可能导致不正确的处理 结果。13
为防止这些问题,状态保存和恢复控制电路12控制寄存器6的寄存器值被保存到 备份数据存储器10或寄存器值被从备份数据存储器10恢复的暂时顺序。如可以从图3中 看出的,与整数寄存器6-1相比,这个问题更有可能对浮点寄存器6-2发生,因为浮点操作 花更长的时间来执行。因此,尽管本技术既可以被应用到整数寄存器6-1又可被应用到浮 点寄存器6-2,然而本技术只被应用到浮点寄存器6-2,并且不控制整数寄存器6-1的暂时 顺序(即,对整数寄存器6-1总是使用相同的顺序)也是可能的。状态保存和恢复控制电路12控制寄存器6的寄存器值被保存到备份数据存储器 10及从备份数据存储器10恢复的暂时序列。尽管有可能状态保存和恢复控制电路12会为 当前正在执行的数据处理操作的每个不同类型选择一个顺序,然而最有可能的是这种技术 对浮点操作有用,尤其是浮点除法操作和浮点平方根操作,这是一些需要最长时间来执行 的指令。因此,状态保存和恢复控制电路12可以例如对于除了浮点除法和平方根操作之外 的所有操作,允许该寄存器以连续顺序被写入,而为浮点除法和平方根操作选择特定的状 态保存/恢复序列(即,当在浮点除法或浮点执行的执行期间,状态保存/恢复触发事件发 生时)。比如浮点操作F1等数据处理操作将结果值写到目标寄存器。状态保存和恢复控 制电路12控制寄存器值被存储到备份数据存储器10或从备份数据存储器10恢复的序列, 使得该目标寄存器在该状态保存或恢复序列中具有位置,该位置对应于在该结果值被写到 该目标寄存器之后的时间。这意味着,在将状态保存到备份数据存储器10时,当前正在执 行的处理操作的结果值将与寄存器6的剩余内容一起被写到备份数据存储器10。在从备份 数据存储器10恢复该数据值时,阻止当前正在执行的数据处理操作覆盖被恢复的值,因为 该状态恢复序列将确保该结果值在该值从备份数据存储器10恢复到寄存器6之前被写到 目标寄存器。注意,如果备份数据存储器10是堆栈存储元件,那么当状态保存/恢复序列被状 态保存和恢复控制电路12修改时,最后被保存到该堆栈的寄存器值可以不必是第一个要 从该堆栈除去的值。因此,堆栈存储元件将不总是准确的后进先出数据结构。虽然如此,寄 存器值在该堆栈上被存储的物理位置仍旧是相同的,无论它们被以何种暂时顺序保存。图4到7描绘了状态保存或恢复控制电路12如何根据该寄存器中哪一个是当前 正在执行的处理操作所使用的目标寄存器,选择状态保存序列或状态恢复序列的若干示 例。在图4中,要被保存到备份数据存储器10的寄存器在逻辑上被分为两个组。状态保存 和恢复控制电路12选择在其中不包括目标寄存器的寄存器组(在此示例中,组幻先于包 括目标寄存器的寄存器组(在此示例中,组1)的序列。因此,寄存器值以图中所示的暂时 顺序被保存到备份数据存储器10。一个组内的寄存器被连续排序以便简化状态保存序列的 选择及在备份数据存储器10中的地址的产生。类似地,在状态恢复时,寄存器值以图4中 所示的暂时顺序被恢复以便确保目标寄存器在结果值被写到该目标寄存器后被恢复。寄存 器值在备份数据存储器10(在此示例中,堆栈存储元件)内存储的物理顺序不依赖于它们 被存储的暂时顺序。例如,不管组2是在组1之前还是之后被保存,组1可以总是被存储在 比组2更低的存储元件地址(参考图4的底部)。无论寄存器值被以哪种暂时顺序存储,将 它们存储在相同的位置简化了备份数据存储器10和状态保存和恢复控制电路12的布置, 因为这些元件都不需要记住这些值以什么顺序存储。在恢复时,使用的地址可只取决于状态恢复顺序,而不是必须根据状态保存序列进行调整。图5显示了另一种选择状态保存或恢复序列的方式。在这种情况下,寄存器被分 组为不止一个组,例如,四个组。在状态保存或恢复序列的暂时顺序中,不包括目标寄存器 的组(在此示例中,组1、2和4)可以比包括目标寄存器的寄存器组(例如,组幻更早被 放入该序列中。通过提供更多的寄存器组,可以确保目标寄存器在该序列中具有最近的 (late)位置,从而这可以增加完成数据处理操作的执行可利用的时间的数量。例如,通过 将图5与图4进行比较,可以看出,如果目标寄存器是9号寄存器的话,那么在图4的示例 中该目标寄存器将会是状态保存/恢复序列的第十个寄存器,而在图5的示例中它将是第 十四个。因此,尽管具有寄存器的四个组,与两个组相比增加了状态保存和恢复控制电路12 的复杂度,但这在数据处理操作有足够长的执行时间的情况下是有用的,因为这有助于确 保该目标寄存器总是在状态保存/恢复序列的最后四分之一中出现。如在图4中所示,寄 存器值被存储到存储元件中的物理顺序是独立于该暂时顺序的,也是同样的与状态保存和 恢复控制电路12所选择的序列无关。图6显示了选择状态保存或恢复序列的第三示例。如果数据处理电路4能够同时 执行多个操作以产生要被写到多个目标寄存器的多个结果值的话(例如,数据处理电路4 可具有超过一个处理流水线16、20以彼此并行地执行两个操作),这种技术能有用。在这种 情况下,具有不止两个寄存器组是有用的。例如,如果两个结果值被分别地写到两个目标寄 存器,那么四个组是有用的,因为它确保了总是有至少两个不包含目标寄存器的寄存器组, 并因此通过将这样的组放在该状态保存或恢复序列的开头,它能确保目标寄存器具有在该 状态保存序列或状态恢复序列的第二半中的位置。通常,提供比存在的目标寄存器更多的 寄存器组是有用的。这确保了至少一个组将没有任何目标寄存器,从而能够被放在该序列 的开头。在状态保存时,到来自这些目标寄存器的值被写到备份数据存储器10的时候,结 果值将已经被写到该目标寄存器,而在恢复状态时,该结果值将被从备份数据存储器10恢 复的值所覆盖。再一次,寄存器值在备份数据存储器10中存储的物理顺序是相同的,无论 选择哪种暂时状态保存或恢复序列。图7显示了循环状态保存或恢复序列的一个示例。该循环序列依次循环经过每个 寄存器,并且当它到达寄存器集的一端时,然后它返回到另一端并继续直到到达起始点。尽 管该循环序列可以开始和结束于任何寄存器,然而该循环序列在该序列结束于目标寄存器 时最有用,因为这为待决的处理操作在目标寄存器在状态保存期间被读取及在状态恢复期 间被写入前完成执行,提供了最大的时间的数量。例如,如果有十六个寄存器而8号寄存器 是目标寄存器,那么开始于寄存器9、连续遍历该寄存器直到到达寄存器15、绕回寄存器0 然后继续直到到达目标寄存器8的序列,可以是有用的。这确保了目标寄存器是最后一个 被保存到(save off to)备份数据存储器10的寄存器,从而这在当前正在执行的数据处理 操作在目标寄存器被保存完(save off)之前完成前,提供了最大的可用时间的数量。类似 地,循环序列可以被设计为其中该序列中的第一寄存器是该目标寄存器之前的寄存器而与 上文所阐述的顺序相比,该序列的顺序被反过来(参看图7中显示的暂时序列的底部的例 子)。图4到7显示了可由状态保存和恢复控制电路12选择的各种序列。可以理解到, 可以设计任意序列,其中可以向任何目标寄存器提供该序列内足够靠后的位置,以确保目15标寄存器可以在结果值已被写到该目标寄存器之后的时间被读取(在保存时)或写入(在 恢复时)。然而,序列变得越复杂,实现该序列需要的电路越多。图4到7中显示的示例(其 主要是连续的序列),对实现并获得防止数据相关性危险、使得数据处理操作的执行能够完 成、以及提供可预测的中断响应等待时间的目标而言更为简单。在分组的序列的情况下,只 在序列从一个组跳跃到另一个组的点处,该序列可能需要要生成的非连续地址,而在循环 序列的情况下,只在该序列在寄存器群的开始和结束之间跳跃的点处,需要非连续的地址。图4到7显示了正被写入备份数据存储器10或者从备份数据存储器10恢复的 十六个寄存器,但是可以有更多或更少的寄存器。这些寄存器可以是寄存器群6的全部,或 者可以只是一个子集。可以有其它寄存器,在状态保存触发事件发生时它们的值不被保存 到备份数据存储器10,并且对于它们在状态恢复触发事件发生时没有值被恢复。各种类型的事件可触发状态保存操作。例如,指示处理电路4处理新函数的函数 调用的发生将导致当前正在执行的处理中断。对应的状态恢复触发事件将是在该函数调用 完成后返回以处理原始操作。因此,在函数调用发生时状态数据被存储到备份数据存储器 10。当函数调用完成时,与该处理有关的状态被恢复以启动被该函数调用中断的处理的继 续执行。类似地,中断请求可触发状态保存操作。状态恢复触发事件然后将是在与那个中 断请求有关的中断处理例程完成后返回到正常的处理。而且,重新排序寄存器被存储到备份数据存储器10和从备份数据存储器10恢复 的暂时顺序的本技术,还可被应用于存储多重操作(multiple operation)和加载多重操 作。存储多重操作将多个数据块存储到备份数据存储器10。因此,存储多重操作的执行可 以被认为是一种状态保存触发事件。当执行该存储多重操作时,则通过为多个数据块存储 到备份数据存储器10选择适当的序列,存储多重操作可以在前个操作(其将结果值写到寄 存器之一,值将从该寄存器存储到备份数据存储器10)仍被执行时开始执行。类似地,加载 多重操作可以被执行以将多个数据块从备份数据存储器10加载到寄存器6。通过将加载多 重操作的执行用作状态恢复触发事件,可以控制数据被加载到该寄存器的顺序,使得被加 载的数据不被该加载多重操作开始时已经被部分执行的操作的结果值所覆盖。图8显示了一种用于将寄存器值保存到备份数据存储器10的方法。在步骤50,处 理电路4开始应用本技术的数据处理操作类型之一的执行(尤其是,浮点除法或平方根操 作,尽管也可以使用其它类型的操作,例如乘加操作、整数除法或平方根操作、双精度或扩 充精度浮点操作、三角函数、或倒数操作)。当所关心的数据处理操作正被执行时,在步骤 52,状态保存和恢复控制电路12检测状态保存触发事件是否发生。状态保存触发事件可以 例如是函数调用或中断请求或存储多重操作的执行。如果没有状态保存触发事件发生,那 么状态保存和恢复控制电路12继续检查这样的事件是否发生。一旦在数据处理操作执行 期间发生了状态保存触发事件,那么该方法进行到步骤M,在该步骤检测结果是否仍将被 写到目标寄存器(即,可能发生“在写入后读取(read-after-write) ”的数据相关性危险)。 如果该结果已经被写到该目标寄存器,那么没有数据相关性危险的风险,所以在步骤56该 寄存器值被以任何顺序保存到备份数据存储器10。因为选择的顺序无关紧要,最简单的是 以连续的顺序存储该寄存器(例如,对于具有十六个寄存器的寄存器群,例如,该序列可以 开始于寄存器0并继续直到寄存器1 。每个寄存器的寄存器值被存储到备份数据存储器10的相应位置。寄存器值的物理存储顺序不依赖于它们被存储的暂时顺序。如果,在状态保存触发事件发生时,在步骤M确定该结果值仍将被写到目标寄存 器,那么在步骤58状态保存和恢复控制电路12检测对于当前正在执行的数据处理操作而 言,哪个寄存器是目标寄存器。然后,在步骤60,状态保存和恢复控制电路12依据哪个寄存 器是目标寄存器来选择状态保存序列。例如,可以选择图4-7中显示的序列之一。状态保 存和恢复控制电路12还可以从多个不同的状态保存序列中选择从而选择在其中目标寄存 器具有最新位置的序列。在选择定义用于将寄存器值保存到备份数据存储器10的暂时顺 序的状态保存序列之后,在步骤62,状态保存和恢复控制电路12然后将该序列中寄存器值 的每一个,按照所选的状态保存序列的顺序保存到该备份数据存储器。该寄存器值被写入 的位置与该寄存器值将在步骤56中被写入的位置相同。由于寄存器值被存储在备份数据 存储器10中,那么可以允许与该状态保存触发事件(例如,中断处理例程或函数调用)有 关的处理开始。图9显示了一种恢复存储在备份数据存储器10中的寄存器状态数据的方法。在 步骤70,数据处理操作开始被执行(该数据处理操作可以是有关图8的步骤50提到的操 作类型中的任一个,或者可以是另一种操作类型)。在步骤72,检测状态恢复触发事件是否 发生。状态恢复触发事件可以是,例如,在中断处理程序执行之后返回到正常处理、从函数 调用的执行返回、或者加载平行工作的执行。如果状态恢复触发事件发生的话,那么在步骤 74确定正在执行的数据处理操作的结果值是否还要被写到目标寄存器(即,“写入在写入 后”数据相关性危险可能发生)。如果结果值已经被写到该目标寄存器,那么状态保存和恢 复控制电路12将存储在备份数据存储器10中的寄存器值以任何顺序加载到寄存器6。寄 存器值被恢复的暂时顺序无关紧要,因为既然该结果值已经被写入该目标寄存器,那么就 不存在写入在写入后数据相关性危险的风险。另一方面,如果在步骤74,确定该结果值仍要被写到目标寄存器,那么在步骤78 检测寄存器6中的哪一个是目标寄存器,且状态保存和恢复控制电路12根据寄存器中的哪 一个是目标寄存器来选择状态恢复序列。所选的状态恢复序列可以例如是在图4到7中描 绘的一种类型的序列,或者是向该目标寄存器提供在该状态恢复序列内对应于结果值已经 被写到该目标寄存器之后的时间的位置的任何其它类型的序列。已经选择了限定用于将寄 存器值中的每一个加载到寄存器6的暂时顺序的状态恢复序列之后,在步骤82该寄存器值 以由所选的状态恢复序列所限定的暂时顺序被加载到该寄存器。因此,确保了在来自备份 数据存储器10的值被恢复到目标寄存器之前,将结果值写到该目标寄存器。图10显示了依照本技术的示例时序图。在此示例中,浮点除法操作开始于点100。 浮点除法操作需要许多个处理周期来完成执行,因此直到点104该浮点除法操作的结果才 能从目标寄存器安全地读取。这意味着,保存或恢复寄存器值的暂时序列应当被控制,使得 该目标寄存器在该序列内具有对应于出现在该结果值已经被写入目标寄存器之后的时间 (在此示例中,点104)的位置。图10显示了一个示例,其中中断信号(在此示例中用作状态保存触发)发生在该 浮点除法操作的第一执行周期中。这是最坏情况的情形,因为如果该中断信号出现在浮点 除法操作期间更晚的点的话,那么该除法操作的执行相对于状态保存/恢复操作将更早完 成。最坏情况的情形是当状态存储/恢复触发事件发生在该操作的执行开始后的一个周期时。考虑最坏情况的情形是有用的,因为,随着本技术能够处理这种情况,那么它也能处理 任何其他情况。图10的部分110显示了在状态保存触发事件(在此示例中是中断)发生时,整数 寄存器6-1 (在图10中标记为pc、psr、及rO到rl4)是如何被保存到备份数据存储器10 的。因为正在执行的是浮点除法操作,那么没有要被写到整数寄存器6-1的未完成的结果, 因此该寄存器6-1可以以任何顺序(为简单起见,以升序)被存储到备份数据存储器10。 在结束整数寄存器6-1的保存后,浮点寄存器6-2被保存到备份数据存储器10。我们可以 看出,在图10的示例中,该第一浮点寄存器(Sn)是如何在时间点114被保存到备份数据存 储器10的,时间点114发生在该除法指令的结果可以从该寄存器被安全读取的点104之 前。通过选择浮点寄存器6-2被保存到备份数据存储器10的序列,确保该浮点除法操作的 目标寄存器在该除法操作的结果已被写到该目标寄存器之后被保存。在图10的示例中,使 用图4中显示的序列,其中该寄存器被分为两个组(Sm到Sm+7,及Sn到Sn+7)。通过根据 寄存器中的哪一个是目标寄存器来将地址Sm和Sn的值设定为适当的值(例如,0和8),然 后可以避免数据相关性危险。例如,其中该目标寄存器是寄存器5,那么地址Sn将被设置为8而地址Sm将被设 置为0从而该寄存器的值将以图4中显示的序列的顺序被保存到数据存储器10。可以使用 类似的技术从备份数据存储器10恢复数据。因此,对于这个示例,目标寄存器在该状态保 存/恢复序列中会在位置Sm+5,因此,如图10中所示,这个值将在时间点118被保存,时间 点118发生在该除法指令的结果能被安全读取的时间点104之后。替代地,如果该目标寄存器是寄存器10,那么Sn可以被设置为0而Sm可以被设置 为8,然后该目标寄存器将在如图10中所示的位置Sm+2,因此再一次,该目标寄存器的值将 在时间点119被保存到备份数据存储器,时间点119发生在结果值已被写到目标寄存器的 点104之后。一旦所有的相关寄存器都已经被备份到存储器10 (或恢复到寄存器6),那么在时 间120,与该触发事件(例如,中断处理程序)有关的该处理的第一指令可以开始执行。图10的部分122显示了一种被称为懒堆栈的替代堆栈方案。在这种技术中,在将 整数寄存器6-1存储到备份数据存储器10之后,状态保存和恢复控制电路12可以等待并 开始执行与该状态保存事件(例如,中断处理程序)有关的处理而不将浮点寄存器6-2保 存到备份数据存储器10。这样做使得在与该状态保存触发事件有关的处理不使用任何浮点 寄存器值的情况下,与该浮点寄存器值的保存有关的时间等待可以被避免,而且该处理可 以在该整数寄存器一被加载就能执行。在该最坏情况的情形中,然后该处理的第一操作使 用浮点值,无论在哪种情况下该浮点值将需要被加载。如果是这种情况的话,那么依照本技 术选择状态保存序列以阻止该结果值在该目标寄存器的值已经被保存之后被写到该目标 寄存器。懒堆栈技术的进一步细节被阐述在本申请的共同未决的具有申请号0910661. 8的 英国专利申请中,该申请的内容通过引用并入本文。尽管已经参考附图详细描述了本发明的示意性实施方式,然而应当理解,本发明 不限于那些精确的实施方式,而本领域的技术人员可以在其中施加各种变化和修改而不脱 离如所附的权利要求所限定的本发明的范围和精神。
权利要求
1.一种数据处理装置,包含用于执行数据处理操作以产生结果值的数据处理电路;用于存储多个寄存器值的多个寄存器,所述多个寄存器中的一个是用于存储在所述数 据处理电路执行所述数据处理操作期间产生的所述结果值的目标寄存器; 用于存储所述多个寄存器值的子集的备份拷贝的备份数据存储器;以及 状态保存控制电路,其响应于在所述结果值仍要被写到所述目标寄存器值时的状态保 存触发事件的发生,以(i)检测所述多个寄存器中哪个是所述目标寄存器;( )选择限定用于将寄存器值的所述子集中的每一个保存到所述备份数据存储器的 暂时顺序的状态保存序列,所述状态保存控制电路根据所述多个寄存器中哪个是所述目标 寄存器来选择所述状态保存序列,以向所述目标寄存器提供在所述状态保存序列内对应于 所述结果值已被所述数据处理电路写到所述目标寄存器后的时间的位置;以及(iii)在选择所述状态保存序列之后,将寄存器值的所述子集中的每一个以所选的状 态保存序列的顺序保存到所述备份数据存储器。
2.根据权利要求1所述的装置,其中用以将寄存器值的所述子集存储在所述备份数据 存储器中的物理顺序不依赖于由所述状态保存序列所限定的用于保存寄存器值的所述子 集的所述暂时顺序。
3.根据权利要求1所述的装置,其中所述状态保存触发事件是函数调用。
4.根据权利要求1所述的装置,其中所述状态保存触发事件是中断请求。
5.根据权利要求1所述的装置,其中所述状态保存触发事件是所述数据处理电路的保 存多重操作的执行,至少一个要存储的值是所述目标寄存器的寄存器值。
6.根据权利要求1所述的装置,其中除了所述目标寄存器之外的至少一个寄存器在所 述状态保存序列中比所述目标寄存器具有更早的位置。
7.根据权利要求1所述的装置,其中寄存器的所述子集包含多个寄存器组;以及 所述状态保存控制电路被配置为向不包括所述目标寄存器的至少一个寄存器组的寄存器,在所述状态保存序列中提供比包括所述目标寄存器的所述寄存器组的寄存器更早的 位置。
8.根据权利要求7所述的装置,其中所述多个寄存器组包含两个寄存器组。
9.根据权利要求1所述的装置,其中所述数据处理电路用于执行多个数据处理操作以 产生多个要存储到多个目标寄存器的多个结果值;寄存器的所述子集包含多个寄存器组;以及所述状态保存控制电路被配置为向不包括所述多个目标寄存器的任一个的至少一个 寄存器组的寄存器,在所述状态保存序列中提供比包括所述多个目标寄存器的至少一个的 所有寄存器组的寄存器更早的位置。
10.根据权利要求7所述的装置,其中所述状态保存控制电路被配置为向同一个所述 寄存器组中的连续寄存器,提供在所述状态保存序列中连续的位置。
11.根据权利要求1所述的装置,其中所述被选择的状态保存序列是结束于所述目标 寄存器的寄存器的循环序列。
12.根据权利要求1所述的装置,其中所述状态保存控制电路是由硬件控制的。
13.根据权利要求1所述的装置,其中所述备份数据存储器是存储元件。
14.根据权利要求1所述的装置,其中所述备份数据存储器是另外的多个寄存器。
15.根据权利要求1所述的装置,其中所述数据处理操作是浮点除法操作和浮点平方 根操作之一。
16.根据权利要求1所述的装置,其中所述数据处理电路包含至少两个处理流水线,用 于彼此并行地执行数据处理操作;以及所述数据处理电路被配置为向所述至少两个处理流水线按顺序发布数据处理操作,但 如果所述处理流水线中的一个执行较后发布的数据处理操作,比所述处理流水线中的另一 个执行较先发布的数据处理操作更快的话,那么未按顺序完成所发布的数据处理操作的执 行。
17.根据权利要求1所述的装置,其中所述多个寄存器用于存储浮点寄存器值; 所述装置进一步包含多个存储整数寄存器值的整数寄存器;以及所述状态保存控制电路对所述状态保存触发事件作出响应,以至少将所述整数寄存器 值的子集以不依赖所述状态保存序列的暂时顺序存储到所述备份数据存储器。
18.一种数据处理方法,包含以下步骤执行数据处理操作以产生要被存储在目标寄存器中的结果值,所述目标寄存器是用于 存储多个寄存器值的多个寄存器中的一个;以及在发生状态保存触发事件同时所述结果值仍要被写到所述目标寄存器时 (i)检测所述多个寄存器中哪个是所述目标寄存器;( )选择限定用于将所述多个寄存器值的子集中的每一个保存到备份数据存储器的 暂时顺序的状态保存序列,所述状态保存序列是根据所述多个寄存器中哪个是所述目标寄 存器来选择的,以向所述目标寄存器提供在所述状态保存序列内对应于所述结果值已被写 到所述目标寄存器后的时间的位置;以及(iii)在选择所述状态保存序列之后,将寄存器值的所述子集中的每一个以所选的状 态保存序列的顺序保存到所述备份数据存储器。
19.一种数据处理装置,包含用于执行数据处理操作以产生结果值的数据处理电路;用于存储多个寄存器值的多个寄存器,所述多个寄存器中的一个是用于存储由所述数 据处理电路产生的所述结果值的目标寄存器;用于存储所述多个寄存器值的子集的备份拷贝的备份数据存储器;以及 状态恢复控制电路,其响应于在所述结果值仍要被写到所述目标寄存器值时的状态恢 复触发事件的发生,以(i)检测所述多个寄存器中哪个是所述目标寄存器;( )选择限定用于将存储在所述备份数据存储器中的寄存器值的所述子集中的每一 个加载到所述寄存器的暂时顺序的状态恢复序列,所述状态恢复控制电路根据所述多个寄 存器中哪个是所述目标寄存器来选择所述状态恢复序列,以向所述目标寄存器提供在所述 状态恢复序列内对应于所述结果值已被写到所述目标寄存器之后的时间的位置;(iii)在选择所述状态恢复序列之后,将寄存器值的所述子集中的每一个以所选的状 态恢复序列的顺序,从所述备份数据存储器加载到所述寄存器。
20.根据权利要求19所述的装置,其中所述状态恢复触发事件是从函数调用的执行的 返回。
21.根据权利要求19所述的装置,其中所述状态恢复触发事件是从中断处理过程的执 行的返回。
22.根据权利要求19所述的装置,其中所述状态恢复触发事件是加载多重操作的执 行,其中至少一个值要被加载到所述目标寄存器。
23.根据权利要求19所述的装置,其中除了所述目标寄存器之外的至少一个寄存器在 所述状态恢复序列中比所述目标寄存器具有更早的位置。
24.根据权利要求19所述的装置,其中寄存器的所述子集包含多个寄存器组;以及所述状态恢复控制电路被配置为向不包括所述目标寄存器的至少一个寄存器组的寄存器,在所述状态恢复序列中,提供比包括所述目标寄存器的寄存器组的寄存器更早的位 置。
25.根据权利要求M所述的装置,其中所述多个寄存器组包含两个寄存器组。
26.根据权利要求19所述的装置,其中所述数据处理电路用于执行多个数据处理操作 以产生多个要存储在多个目标寄存器中的多个结果值;寄存器的所述子集包含多个寄存器组;以及所述状态恢复控制电路被配置为向不包括所述多个目标寄存器中的任一个的至少一 个寄存器组的寄存器,在所述状态恢复序列中提供比包括所述多个目标寄存器的至少一个 的所有寄存器组中的寄存器更早的位置。
27.根据权利要求M所述的装置,其中所述状态恢复控制电路被配置为向同一个所述 寄存器组中的连续寄存器提供在所述状态恢复序列中的连续位置。
28.根据权利要求19所述的装置,其中所述被选择的状态恢复序列是结束于所述目标 寄存器的寄存器的循环序列。
29.根据权利要求19所述的装置,其中所述状态恢复控制电路是由硬件控制的。
30.根据权利要求19所述的装置,其中所述备份数据存储器是存储元件。
31.根据权利要求19所述的装置,其中所述备份数据存储器是另外多个寄存器。
32.根据权利要求19所述的装置,其中所述数据处理操作是浮点除法操作和浮点平方 根操作之一。
33.根据权利要求19所述的装置,其中所述数据处理电路包含至少两个处理流水线以 彼此并行地执行数据处理操作;以及所述数据处理电路被配置为向所述至少两个处理流水线按顺序发布数据处理操作,但 如果所述处理流水线中的一个执行较后发布的数据处理操作,比所述处理流水线中的另一 个执行较先发布的数据处理操作更快的话,则未按顺序完成对所发布的数据处理操作的执 行。
34.根据权利要求19所述的装置,其中所述多个寄存器用于存储浮点寄存器值;所述装置进一步包含多个整数寄存器,用于存储整数寄存器值;以及所述状态恢复控制电路对所述状态恢复触发事件作出响应,以将所述整数寄存器值以 不依赖于所述状态恢复序列的暂时顺序从所述备份数据存储器加载到所述多个整数寄存器。
35. 一种数据处理方法,包含以下步骤执行数据处理操作以产生要存储在目标寄存器中的结果值,所述目标寄存器是多个寄 存器中的一个;以及在发生状态保存恢复事件同时所述结果值仍要被写到所述目标寄存器时 (i)检测所述多个寄存器中哪个是所述目标寄存器;( )选择限定用于将存储在备份数据存储器中的所述多个寄存器值的子集中的每一 个加载到所述寄存器的暂时顺序的状态恢复序列,所述状态恢复序列是根据所述多个寄存 器中哪个是所述目标寄存器而选择的,以向所述目标寄存器提供在所述状态恢复序列内对 应于所述结果值已被写到所述目标寄存器后的时间的位置;以及(iii)在选择所述状态恢复序列之后,将寄存器值的所述子集中的每一个以所选的状 态恢复序列的顺序从所述备份数据存储器加载到所述寄存器。
全文摘要
本发明涉及寄存器状态保存和恢复。在具有寄存器6的数据处理装置1中,当状态保存触发事件发生同时数据处理操作的结果值仍要写到目标寄存器时,则保存和恢复控制电路12选择限定用于将寄存器值保存到备份数据存储器10的暂时顺序的状态保存序列。该序列被选择以向该目标寄存器提供在该序列内对应于该结果值已经被写到该目标寄存器之后的时间的位置。然后该寄存器值以所选的状态保存序列的顺序被保存到备份数据存储器10。当状态恢复触发事件触发将数据值从该备份数据存储器10加载到该寄存器6时,可以使用类似的技术。
文档编号G06F9/30GK102043608SQ20101052179
公开日2011年5月4日 申请日期2010年10月19日 优先权日2009年10月19日
发明者A·J·彭顿, S·阿克斯福德 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1