(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
結果値を生成するためのデータ処理演算を実行するためのデータ処理回路と、
複数のレジスタ値を格納するための複数のレジスタであって、前記複数のレジスタのうちの１つは、前記データ処理回路による前記データ処理演算の実行中に生成された、前記結果値を格納するための格納先レジスタである、複数のレジスタと、
前記複数のレジスタ値のうちの一部のバックアップコピーを格納するためのバックアップデータストアと、
（ｉ）前記複数のレジスタのうちのどれが前記格納先レジスタであるかを検出し、
（ｉｉ）前記一部のレジスタ値の各々を前記バックアップデータストアに保存するための時間的順序を定義する、状態保存シーケンスを選択し、前記状態保存の制御回路が、前記データ処理回路により前記結果値が前記格納先レジスタに書き込まれた後の時間に対応する、前記状態保存シーケンス内の位置を前記格納先レジスタに提供するように、前記複数のレジスタのうちのどれが前記格納先レジスタであるかに依存して、前記状態保存シーケンスを選択し、
（ｉｉｉ）前記状態保存シーケンスを選択後、選択された状態保存シーケンスの順序で、前記一部のレジスタ値の各々を前記バックアップデータストアに保存するように、前記結果値が前記格納先レジスタに書き込まれようとする間に、状態保存トリガイベントの発生に応答する、状態保存制御回路と、を備える、
データ処理装置。
【請求項２】
前記一部のレジスタ値が前記バックアップデータストアに格納される物理的順序は、前記状態保存シーケンスにより定義された前記一部のレジスタ値を保存するための前記時間的順序と無関係である、請求項１に記載の装置。
【請求項３】
前記状態保存トリガイベントは、関数呼び出しである、請求項１に記載の装置。
【請求項４】
前記状態保存トリガイベントは、中断要求である、請求項１に記載の装置。
【請求項５】
前記状態保存トリガイベントは、前記データ処理回路による複数を格納する演算の実行であり、格納される少なくとも１つの値は、前記格納先レジスタのレジスタ値である、請求項１に記載の装置。
【請求項６】
前記格納先レジスタ以外の少なくとも１つのレジスタは、前記格納先レジスタよりも、前記状態保存シーケンスの早い位置を有する、請求項１に記載の装置。
【請求項７】
前記一部のレジスタは、複数のレジスタ群を備え、
前記状態保存制御回路は、前記格納先レジスタを含まない少なくとも１つのレジスタ群のうちのレジスタに、前記格納先レジスタを含むレジスタ群のうちのレジスタよりも、前記状態保存シーケンスの早い位置を提供するように構成される、請求項１に記載の装置。
【請求項８】
前記複数のレジスタ群は、２つのレジスタ群を含む、請求項７に記載の装置。
【請求項９】
前記データ処理回路は、複数の格納先レジスタに格納される複数の結果値を生成するための複数のデータ処理演算を実行するためのものであり、
前記一部のレジスタは、複数のレジスタ群を備え、
前記状態保存制御回路は、前記複数の格納先レジスタのいずれをも含まない少なくとも１つのレジスタ群のうちのレジスタに、前記複数の格納先レジスタのうちの少なくとも１つを含む全レジスタ群のうちのレジスタよりも、前記状態保存シーケンスの早い位置を提供するように構成される、請求項１に記載の装置。
【請求項１０】
前記状態保存制御回路は、前記レジスタ群のうちの同一の連続的レジスタに、前記状態保存シーケンスの連続的位置を提供するように構成される、請求項７に記載の装置。
【請求項１１】
前記選択された状態保存シーケンスは、前記格納先レジスタで終了するレジスタのサイクリックなシーケンスである、請求項１に記載の装置。
【請求項１２】
前記状態保存制御回路は、ハードウェア制御である、請求項１に記載の装置。
【請求項１３】
前記バックアップデータストアは、記憶装置である、請求項１に記載の装置。
【請求項１４】
前記バックアップデータストアは、さらなる複数のレジスタである、請求項１に記載の装置。
【請求項１５】
前記データ処理演算は、浮動小数点除算演算および浮動小数点平方根演算のうちの１つである、請求項１に記載の装置。
【請求項１６】
前記データ処理回路は、相互に並列してデータ処理演算を実行するための少なくとも２つの処理パイプラインを備え、
前記データ処理回路は、前記少なくとも２つの処理パイプラインに、データ処理演算を順に発行するが、前記処理パイプラインのうちの１つが、前記処理パイプラインのうちのもう１つが先に発行されたデータ処理演算を実行するより迅速に、後から発行されたデータ処理演算を実行する場合、前記発行されたデータ処理演算の実行を順序に関係なく完了するように構成される、請求項１に記載の装置。
【請求項１７】
前記複数のレジスタは、浮動小数点レジスタ値を格納するためのものであり、
前記装置は、整数レジスタ値を格納するための複数の整数レジスタをさらに備え、
前記状態保存制御回路は、前記状態保存トリガイベントに応答して、前記整数レジスタ値のうちの少なくとも一部を、前記状態保存シーケンスに無関係な時間的順序で、前記バックアップデータストアに保存する、請求項１に記載の装置。
【請求項１８】
データ処理方法であって、
格納先レジスタに格納される結果値を生成するためのデータ処理演算を実行するステップであって、前記格納先レジスタは、複数のレジスタ値を格納するための複数のレジスタのうちの１つである、ステップと、
状態保存トリガイベントの発生時、前記結果値が前記格納先レジスタに書き込まれようとする間、
（ｉ）前記複数のレジスタのうちのどれが前記格納先レジスタであるかを検出するステップと、
（ｉｉ）前記複数のレジスタ値のうちの一部の各々を、前記バックアップデータストアに保存するための時間的順序を定義する状態保存シーケンスを選択するステップであって、前記状態保存シーケンスは、前記結果値が前記格納先レジスタに書き込まれた後の時間に対応する、前記状態保存シーケンス内の位置を前記格納先レジスタに提供するように、前記複数のレジスタのうちのどれが前記格納先レジスタであるかに依存して選択される、ステップと、
（ｉｉｉ）前記状態保存シーケンスを選択後、選択された状態保存シーケンスの順序で、前記一部のレジスタ値の各々を前記バックアップデータストアに保存するステップと、を含む、
データ処理方法。
【請求項１９】
データ処理装置であって、
結果値を生成するためのデータ処理演算を実行するためのデータ処理回路と、
複数のレジスタ値を格納するための複数のレジスタであって、前記複数のレジスタのうちの１つは、前記データ処理回路により生成された前記結果値を格納するための格納先レジスタである、複数のレジスタと、
前記複数のレジスタ値のうちの一部のバックアップコピーを格納するためのバックアップデータストアと、
（ｉ）前記複数のレジスタのうちのどれが前記格納先レジスタであるかを検出し、
（ｉｉ）前記バックアップデータストアに保存された前記一部のレジスタ値の各々を、前記レジスタにロードするための時間的順序を定義する、状態復元シーケンスを選択し、前記状態復元の制御回路が、前記結果値が前記格納先レジスタに書き込まれた後の時間に対応する、前記状態復元シーケンス内の位置を前記格納先レジスタに提供するように、前記複数のレジスタのうちのどれが前記格納先レジスタであるかに依存して、前記状態復元シーケンスを選択し、
（ｉｉｉ）前記状態復元シーケンスを選択後、前記選択された状態復元シーケンスの順序で、前記バックアップデータストアからの前記一部のレジスタ値の各々を前記レジスタにロードするように、前記結果値が前記格納先レジスタに書き込まれようとする間に、状態復元トリガイベントの発生に応答する、状態復元制御回路と、を備える、
データ処理装置。
【請求項２０】
前記状態復元トリガイベントは、関数呼び出しの実行からのリターンである、請求項１９に記載の装置。
【請求項２１】
前記状態復元トリガイベントは、中断ハンドリングプロセスの実行からのリターンである、請求項１９に記載の装置。
【請求項２２】
前記状態復元トリガイベントは、少なくとも１つの値が前記格納先レジスタにロードされる、複数をロードする演算の実行である、請求項１９に記載の装置。
【請求項２３】
前記格納先レジスタ以外の少なくとも１つのレジスタは、前記格納先レジスタよりも、前記状態復元シーケンスの早い位置を有する、請求項１９に記載の装置。
【請求項２４】
前記一部のレジスタは、複数のレジスタ群を備え、
前記状態復元制御回路は、前記格納先レジスタを含まない少なくとも１つのレジスタ群のうちのレジスタに、前記格納先レジスタを含むレジスタ群のうちのレジスタよりも、前記状態復元シーケンスの早い位置を提供するように構成される、請求項１９に記載の装置。
【請求項２５】
前記複数のレジスタ群は、２つのレジスタ群を含む、請求項２４に記載の装置。
【請求項２６】
前記データ処理回路は、複数の格納先レジスタに格納される複数の結果値を生成するための複数のデータ処理演算を実行するためのものであり、
前記一部のレジスタは、複数のレジスタ群を備え、
前記状態復元制御回路は、前記複数の格納先レジスタのいずれをも含まない少なくとも１つのレジスタ群のうちのレジスタに、前記複数の格納先レジスタのうちの少なくとも１つを含む全レジスタ群のうちのレジスタよりも、前記状態復元シーケンスの早い位置を提供するように構成される、請求項１９に記載の装置。
【請求項２７】
前記状態復元制御回路は、前記レジスタ群の同一の連続的レジスタに、前記状態復元シーケンスの連続的位置を提供するように構成される、請求項２４に記載の装置。
【請求項２８】
前記選択された状態復元シーケンスは、前記格納先レジスタで終了するレジスタのサイクリックなシーケンスである、請求項１９に記載の装置。
【請求項２９】
前記状態復元制御回路は、ハードウェア制御である、請求項１９に記載の装置。
【請求項３０】
前記バックアップデータストアは、記憶装置である、請求項１９に記載の装置。
【請求項３１】
前記バックアップデータストアは、さらなる複数のレジスタである、請求項１９に記載の装置。
【請求項３２】
前記データ処理演算は、浮動小数点除算演算および浮動小数点平方根演算のうちの１つである、請求項１９に記載の装置。
【請求項３３】
前記データ処理回路は、相互に並列してデータ処理演算を実行するための少なくとも２つの処理パイプラインを備え、
前記データ処理回路は、前記少なくとも２つの処理パイプラインに、データ処理演算を順に発行するが、前記処理パイプラインのうちの１つが、前記処理パイプラインのうちのもう１つが先に発行されたデータ処理演算を実行するよりも迅速に、後から発行されたデータ処理演算を実行する場合、発行されたデータ処理演算の実行を順序に関係なく完了するように構成される、請求項１９に記載の装置。
【請求項３４】
前記複数のレジスタは、浮動小数点レジスタ値を格納するためのものであり、
前記装置は、整数レジスタ値を格納するための複数の整数レジスタをさらに備え、
前記状態復元制御回路は、前記状態復元トリガイベントに応答して、前記状態復元シーケンスに無関係な時間的順序で、前記バックアップデータストアからの前記整数レジスタ値を、前記複数の整数レジスタにロードする、請求項１９に記載の装置。
【請求項３５】
データ処理方法であって、
格納先レジスタに格納される結果値を生成するためのデータ処理演算を実行するステップであって、前記格納先レジスタは、複数のレジスタのうちの１つである、ステップと、
状態復元トリガイベントの発生時、前記結果値が前記格納先レジスタに書き込まれようとする間、
（ｉ）前記複数のレジスタのうちのどれが前記格納先レジスタであるかを検出するステップと、
（ｉｉ）バックアップデータストアに格納された前記複数のレジスタ値のうちの一部の各々を、前記レジスタにロードするための時間的順序を定義する状態復元シーケンスを選択するステップであって、前記状態復元シーケンスは、前記結果値が前記格納先レジスタに書き込まれた後の時間に対応する、前記状態復元シーケンス内の位置を、前記格納先レジスタに提供するように、前記複数のレジスタのうちのどれが前記格納先レジスタであるかに依存して選択される、ステップと、
（ｉｉｉ）前記状態復元シーケンスを選択後、前記選択された状態復元シーケンスの順序で、前記バックアップデータストアからの前記一部のレジスタ値の各々を、前記レジスタにロードするステップと、を含む、
データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関する。具体的には、本発明は、レジスタからのレジスタ値をバックアップデータストアに保存すること、およびバックアップデータストアからのレジスタ値をレジスタに復元することに関する。
【背景技術】
【０００２】
データ処理装置は、処理中にプロセッサにより使用されたデータ値を格納するためのレジスタセットを有することができる。レジスタ値は、プロセッサの現在の状態を表す。処理装置がコンテキストスイッチにあたると、レジスタに格納されたレジスタ値のうちの少なくともいくつかは、バックアップデータストアに格納され得る。コンテキストの変更を受けて、異なるレジスタ値がレジスタに格納され得る。コンテキストスイッチに関連したプロセスが終了すると、コンテキストスイッチにより中断されたプロセスの実行を完了するために、本来のレジスタ値がレジスタに復元され得る。
【０００３】
レジスタ状態のバックアップデータストアへの保存をトリガするイベント（例えば、例外イベント）の発生時、現在実行中の演算はまだ完了していない可能性がある。演算には、実行すべき多数の処理サイクルを要し得る。演算が、結果値をレジスタのうちの１つに書き込み、かつ現在実行中の演算が完了し終える前に状態保存演算が開始される場合、バックアップデータストアに書き込まれたレジスタ状態は、最新の計算結果値を含むことができない。つまり、状態データの復元後、処理エラーが発生し得る。結果値がレジスタに書き込まれる前にレジスタの値が読み取られるという、データ依存の危険は、回避されなければならない。
【０００４】
概して、状態保存トリガイベントの発生と、状態保存プロセスの終了との間の時間は予測可能であることが望ましい。これは、特に、車両制動システム等の安全が重要なシステムにおいて、割り込み待ち時間が一定かつ短時間であることが重要な場合にそうである。現在実行中の演算が、状態保存演算を開始する前に完了することが可能であった場合、データ依存の危険が回避されることになる。しかしながら、状態保存トリガイベントは、現在実行中の演算の実行中の任意の時点で発生していた可能性があるため、状態保存プロセスの開始の遅れは、トリガイベントが発生した実行時点に応じて異なり、したがって、状態データの全てがバックアップデータストアに保存されるまでにかかる時間を予測することは困難である。状態保存演算を開始する前に、現在実行中の演算の実行が完了することを可能にすると、割り込み待ち時間を増加させることにもなる。したがって、多数のシステムにおいて、現在実行中の演算が完了された後にのみ状態保存演算を開始することは、適切ではない。
【０００５】
データ依存の危険を回避する別の方式は、状態保存トリガイベントの発生時に、現在実行中の命令をその実行途中で中止することである。しかしながら、この方式には、状態が復元された後、中止された命令はその全体を再度実行されることが必要になるという欠点があり、このため、これは、処理装置によるプログラム実行の進行を遅くする。その上、中止された命令は、べき等元ではあり得ない。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
これらの技法にはそれぞれ、データ依存の危険、例外ハンドリング待ち時間が予測不可能で遅い、およびレジスタ状態の復元後の処理が遅い、のうちの１つの欠点がある。本発明は、データ依存の危険を回避し、予測可能な待ち時間を有し、および状態がレジスタに復元された後処理を遅くしない、改善された状態の保存および復元機構を提供することを模索する。
【０００７】
一態様にしたがい、本発明は、
結果値を生成するためのデータ処理演算を実行するためのデータ処理回路と、
複数のレジスタ値を格納するための複数のレジスタであって、該複数のレジスタのうちの１つは、該データ処理回路による該データ処理演算の実行中に生成された、該結果値を格納するための格納先レジスタである、複数のレジスタと、
該複数のレジスタ値のうちの一部のバックアップコピーを格納するためのバックアップデータストアと、
（ｉ）該複数のレジスタのうちのどれが該格納先レジスタであるかを検出し、
（ｉｉ）該一部のレジスタ値の各々を該バックアップデータストアに保存するための時間的順序を定義する、状態保存シーケンスを選択し、該状態保存制御回路が、該データ処理回路により該結果値が該格納先レジスタに書き込まれた後の時間に対応する、該状態保存シーケンス内の位置を該格納先レジスタに提供するように、該複数のレジスタのうちのどれが該格納先レジスタであるかに依存して、該状態保存シーケンスを選択し、
（ｉｉｉ）該状態保存シーケンスの選択後、選択された状態保存シーケンスの順序で、該一部のレジスタ値の各々を該バックアップデータストアに保存するように、該結果値が、該格納先レジスタに書き込まれようとする間、状態保存トリガイベントの発生に応答する状態保存制御回路と、を備える、データ処理装置を提供する。
【０００８】
現在実行中のデータ処理演算の結果値が格納先レジスタに書き込まれようとする間に状態保存トリガイベントが発生する時、本発明の技法の状態保存制御回路は、一部のレジスタ値をバックアップデータストアに保存することにより応答する。本発明の技法は、一部のレジスタ値の各々をバックアップデータストアに保存するための適切な時間的順序を選択することにより、格納先レジスタの値がバックアップデータストアに保存される前に、データ処理演算の実行中に生成された結果値が、格納先レジスタに書き込まれる。このため、データ依存の危険が回避され、格納先レジスタの正しい値が保存される。状態保存演算は、データ処理演算がまだ実行されている間に開始し得るので、状態保存の終了は、状態保存トリガイベントが発生した実行時点に無関係であるため、状態保存演算に関連する待ち時間は、短く、一定で予測可能である。現在実行中のデータ処理演算の処理は、状態保存トリガイベントが発生する時に中止されず、このため、データ処理演算が再度実行される必要がなく、非べき等命令の問題が発生しないため、レジスタ値をレジスタに復元時、データ処理回路により実行されているプログラムの継続処理はより迅速となる。
【０００９】
バックアップデータストアに保存されたレジスタ値の一部は、複数のレジスタに格納されたレジスタのうちのいくつかだけであり得、他のレジスタは、状態保存トリガイベントの発生時に保存されない。代替として、一部のレジスタ値は、複数のレジスタに格納されたレジスタ値の全てであり得る。
【００１０】
さらなる特長において、一部のレジスタ値がバックアップデータストアに格納される物理的順序は、状態保存シーケンスにより定義された、一部のレジスタ値を保存するための時間的順序に無関係であり得る。例えば、レジスタ値は、選択された状態保存シーケンスにより定義された時間的順序に関係なく、バックアップデータストア内の同じ物理的場所に格納され得る。一部のレジスタ値の物理的格納順序は、これらが保存された時間的順序に無関係であるので、そこに復元時には値がバックアップデータストアに書き込まれた時間的順序を知る必要がないため、レジスタ値の復元は簡素化される。
【００１１】
状態保存トリガイベントは関数呼び出しであり得る。データ処理演算の第１のシーケンスの実行時、演算の第１のシーケンスの実行が一時停止されるべきで、処理演算の第２のシーケンスの実行が開始するべきであることを示す、関数呼び出しが発生し得る。第２のシーケンスが終了すると、第１のシーケンスの処理が継続することを可能にするように、関数呼び出しは、状態保存トリガイベントとして使用されて、第１のシーケンスに関連したレジスタ値のバックアップデータストアへの保存を起動する。
【００１２】
状態保存トリガイベントはまた中断要求でもあり得る。中断要求は、現在処理中の演算の処理が一時停止されるべきで、中断ハンドリングルーチンの処理が開始するべきであることを示す。中断要求が発生する時、状態保存が起動される。中断ハンドリングルーチンの実行が完了すると、中断されたデータ処理演算が、バックアップデータストアから復元された状態データを使用して再開できる。
【００１３】
状態保存トリガイベントは、データ処理回路による複数を格納する演算の実行でもあってもよく、格納される少なくとも１つの値は、格納先レジスタのレジスタ値である。複数を格納する演算は、レジスタブロックの値のバックアップデータストアへの格納を制御する。レジスタブロックの２つ以上の値のうちの１つが、格納先レジスタのレジスタ値である場合、本発明の技法は、レジスタ値がバックアップデータストアに書き込まれる時間的順序を制御するように、使用され得る。値を格納するための時間的順序を適切に選択することにより、結果値を格納先レジスタに書き込む、その前のデータ処理演算が完了する前に、複数を格納する演算が実行を開始し得る。格納先レジスタには、複数格納シーケンス内の位置が提供されるので、その前に実行中のデータ処理演算の結果値が格納先レジスタに書き込まれた後に、バックアップデータストアに保存される。
【００１４】
さらなる特長において、格納先レジスタ以外の少なくとも１つのレジスタは、格納先レジスタよりも、状態保存シーケンスの早い位置を有し得る。格納先レジスタの値を保存する前に、格納先レジスタ以外の少なくとも１つのレジスタのレジスタ値を保存することにより、格納先レジスタの値が保存される前に、現在実行中のデータ処理演算の実行が完了する時間を提供する。
【００１５】
本発明の技法のさらなる特長において、一部のレジスタは、複数のレジスタ群を備えることができ、さらに、状態保存制御回路は、格納先レジスタを含まない少なくとも１つのレジスタ群のうちのレジスタに、格納先レジスタを含むレジスタ群のうちのレジスタよりも、状態保存シーケンスの早い位置を提供するように構成され得る。
【００１６】
コンテンツが保存されるレジスタの一部は、複数の群に論理的に分割され得る（別個のレジスタブロックに物理的に分割される必要はなく、群は単一のレジスタバンク内の異なるレジスタセットであり得る）。状態保存シーケンスの選択時、状態保存制御回路は、格納先レジスタを含まない少なくとも１群のうちのレジスタが、格納先レジスタを含む群のうちのレジスタよりも、状態保存シーケンスの早い位置を有するように、シーケンスを配置することができる。これは、格納先レジスタの値がバックアップデータストアに保存される前に、現在実行中のデータ処理演算が、結果値を格納先レジスタに書き込むことを確保するのに十分遅い、状態保存シーケンス内の位置を提供することを助ける。
【００１７】
複数のレジスタ群は、２つのレジスタ群を備えることができる。この場合、状態保存制御回路は、格納先レジスタを含まないレジスタ群のレジスタ値が、格納先レジスタを含むレジスタ群のレジスタ値の前に、バックアップデータストアに保存されるように、状態保存シーケンスを選択する。２つの群だけを提供することは、比較的簡単な処理ロジックを使用して、データ依存の危険が防止され得ることを意味する。状態保存シーケンスを選択し、かつバックアップデータストア内で使用する適切なアドレスを生成するための回路は、可能な状態保存シーケンスが２つしか存在しないので、複雑ではない。
【００１８】
データ処理回路は、複数のデータ処理演算を実行して、複数の格納先レジスタに格納される複数の結果値を生成し得る。この場合、一部のレジスタは、複数のレジスタ群を備えることができ、状態保存制御回路は、複数の格納先レジスタのいずれをも含まない少なくとも１つのレジスタ群のうちのレジスタに、複数の格納先レジスタのうちの少なくとも１つを含む全てのレジスタ群のうちのレジスタよりも、状態保存シーケンス内の早い位置を提供することができる。
【００１９】
２つ以上の格納先レジスタが使用されている場合、シーケンスは、格納先レジスタのいずれをも含まない少なくとも１つのレジスタ群が、少なくとも１つの格納先レジスタを含むレジスタ群よりもシーケンス内で先にあるように、選択される。つまり、格納先レジスタの値は、結果値がそれぞれの格納先レジスタに書き込まれた後、バックアップデータストアに格納され得る。
【００２０】
状態保存シーケンスを選択するための上記技法のうちのいずれにおいても、状態保存制御回路は、状態保存シーケンスの位置に対してレジスタ群のうちの同一の連続的なレジスタを提供するように構成され得る。これにより、連続的アドレスが、バックアップデータストアの同一群のレジスタ値にアクセスするために使用され得るので、状態保存シーケンスの選択を簡素化する。
【００２１】
別の技法は、選択された状態保存シーケンスとして、格納先レジスタで終了するレジスタのサイクリックなシーケンスを選択することである。例えば、シーケンスは、格納先レジスタの後のレジスタから開始し、複数のレジスタの最後まで進んでから、その後、レジスタセットの先頭に戻って格納先レジスタまで連続することが可能である。これは、格納先レジスタが、ほとんど連続的なシーケンスのレジスタを有する一方で、バックアップデータストアに保存される最後のレジスタであることを確保する。格納先レジスタの値をバックアップデータストアに最後に保存することにより、格納先レジスタの値がバックアップデータストアに保存される前に、現在実行中のデータ処理演算が完了し、さらにその結果値を格納先レジスタに書き込む時間をもっと提供する。また、大部分が連続的なシーケンスのレジスタを提供することにより（唯一の不連続点は、シーケンスが複数のレジスタの最後から複数のレジスタの先頭へ戻る点である）、選択された状態保存シーケンスを選択し、かつ状態保存を制御するための論理および回路は、比較的単純である。サイクリックなシーケンスが格納先レジスタの前のレジスタで開始し、レジスタの先頭まで連続し、レジスタファイルの最後に戻ってから、格納先レジスタに戻る、逆サイクリックなシーケンスも使用され得る。
【００２２】
状態保存制御回路は、ハードウェア制御であり得る。状態保存トリガイベントが発生する時に状態保存演算を自動的にトリガするハードウェアを提供することにより、状態保存は、この機能がソフトウェア制御であった場合よりも迅速に開始される。ソフトウェア制御の状態保存は、典型的に、ハードウェアよりも遅く、かつより多くの命令を必要とする。
【００２３】
バックアップデータストアは、記憶装置であり得る。具体的には、スタックメモリが使用され得る。バックアップデータストアは、対応する複数のレジスタのレジスタ値を格納する、さらなる複数のレジスタであり得る。
【００２４】
本発明の技法は、任意のデータ処理演算が状態保存トリガイベントにより中断される時に適用され得るが、本発明の技法は、データ処理演算が、浮動小数点の除算演算および浮動小数点の平方根演算のうちの１つである時に特に有用である。これは、これらの演算の実行には比較的長い時間がかかるため、したがって、これらの演算のデータ依存の危険が、演算時間がより短い演算に比べて、高くなりやすいからである。
【００２５】
本発明の技法が適用され得る他のデータ処理演算は、整数の除算または平方根の演算、倍精度または拡張精度の浮動小数点演算、整数または浮動小数点の乗加算演算、三角関数演算および逆数演算を含み得る。
【課題を解決するための手段】
【００２６】
上記のように、本発明の技法は、状態保存トリガイベントが発生する時、現在実行中の演算の実行を中止しない。一部の状況においては、実行中のデータ処理演算が中止されないことが重要であり得るので、本発明の技法はこれらの状況で特に有用である。これの一実施例は、データ処理回路が、相互に並列にデータ処理演算を実行するための少なくとも２つの処理パイプラインを備える場合で、データ処理回路は、少なくとも２つの処理パイプラインにデータ処理演算を順に発行するが、処理パイプラインのうちの１つが、先に発行された処理演算を実行するデータ処理パイプラインのうちの別の１つよりも迅速に後から発行されたデータ処理演算を実行する場合、発行されたデータ処理演算の実行を順序に関係なく完了するように、構成される。このようなシステムにおいては、状態保存トリガイベントが発生する時、後から発行されたデータ処理演算が既に完了し、その結果値をレジスタに書き込みを終えている一方で、先に発行されたデータ処理演算はまだ完了していない可能性がある。この時点で、状態保存が起動されると、バックアップデータストアに保存された状態は、後から発行されたデータ処理演算により生成された結果値を含むが、先に発行されたデータ処理演算により生成された結果値は含まない。したがって、状態が復元され、先に発行されたデータ処理演算が再起動される場合であっても、先に発行されたデータ処理演算は、後から発行されたデータ処理演算が実行された前に格納されたその前のレジスタ値ではなく、後から発行されたデータ処理演算の結果値を誤って使用し得るので、最終結果が正しくない可能性がある。順序に関係なく完了する処理システムの場合、本発明の技法は、格納先レジスタ値がバックアップデータストアに保存される前に、先に発行された（しかし後から完了された）データ処理演算を完了し、その結果値を格納先レジスタに書き込むことを可能にするため、有用である。
【００２７】
複数のレジスタが唯一のレジスタセットである必要はない。例えば、整数処理および浮動小数点処理の両方の機能を有するシステムでは、整数レジスタ値を格納するための整数レジスタセットと、浮動小数点レジスタ値を格納するための浮動小数点レジスタセットとが存在し得る。このようなシステムにおいては、本発明の技法が両方のレジスタセットに適用される必要はない。例えば、状態保存制御回路は、状態保存トリガイベントに応答して、整数レジスタ値の少なくとも一部を、状態保存シーケンスに無関係な時間的順序でバックアップデータストアに保存し得るが、一方で、浮動小数点レジスタ値は状態保存シーケンスにしたがって格納される。これは、浮動小数点演算は、概して、整数演算よりも実行にかかる時間が長いため有用であり、このため、本発明の技法は、浮動小数点レジスタの値を保存するためにより有用である。
【００２８】
別の態様から見ると、本発明は、
格納先レジスタに格納される結果値を生成するためのデータ処理演算を実行するステップであって、該格納先レジスタは、複数のレジスタ値を格納するための複数のレジスタのうちの１つである、ステップと、
状態保存トリガイベントの発生時、該結果値が該格納先レジスタに書き込まれようとする間に、
（ｉ）該複数のレジスタのうちのどれが該格納先レジスタであるかを検出するステップと、
（ｉｉ）該複数のレジスタ値のうちの一部の各々をバックアップデータストアに保存するための時間的順序を定義する状態保存シーケンスを選択するステップであって、該状態保存シーケンスは、該結果値が該格納先レジスタに書き込まれた後の時間に対応する、該状態保存シーケンス内の位置を該格納先レジスタに提供するように、該複数のレジスタのうちのどれが該格納先レジスタであるかに依存して選択される、ステップと、
（ｉｉｉ）該状態保存シーケンスを選択後、選択された状態保存シーケンスの順序で、該一部のレジスタ値の各々を該バックアップデータストアに保存するステップと、を含む、データ処理方法を提供する。
【００２９】
また別の態様から見ると、本発明は、
結果値を生成するためのデータ処理演算を実行するためのデータ処理回路と、
複数のレジスタ値を格納するための複数のレジスタであって、該複数のレジスタのうちの１つは、該データ処理回路により生成された該結果値を格納するための格納先レジスタである、複数のレジスタと、
該複数のレジスタ値のうちの一部のバックアップコピーを格納するためのバックアップデータストアと、
（ｉ）該複数のレジスタのうちのどれが該格納先レジスタであるかを検出し、
（ｉｉ）該バックアップデータストアに格納された該一部のレジスタ値の各々を該レジスタにロードするための時間的順序を定義する、状態復元シーケンスを選択し、該結果値が該格納先レジスタに書き込まれた後の時間に対応する該状態復元シーケンス内の位置を該格納先レジスタに提供するように、該複数のレジスタのうちのどれが該格納先レジスタであるかに依存して、該状態復元制御回路が該状態復元シーケンスを選択し、
（ｉｉｉ）該状態復元シーケンスを選択後、選択された状態復元シーケンスの順序で、該バックアップデータストアから該一部のレジスタ値の各々を該レジスタにロードするように、該結果値が該格納先レジスタに書き込まれようとする間、状態復元トリガイベントの発生に応答する状態復元制御回路と、を備える、データ処理装置を提供する。
【００３０】
上記の技法においては、レジスタ値がバックアップデータストアに保存される時間的順序は、レジスタのうちのどれが格納先レジスタであるかに基づいて制御される。レジスタ値がバックアップデータストアに保存されていた時、バックアップされたレジスタ値の復元は、同様な方式で制御され得る。現在実行中の演算が結果値を格納先レジスタに書き込もうとする間にデータがレジスタに復元される時、レジスタ値が格納先レジスタに復元される前に、結果値が格納先レジスタに書き込まれることが重要であり、そうでなければ、復元されたレジスタの状態は、バックアップデータストアに格納された状態とは同一でなくなる。したがって、状態復元制御回路は、一部のレジスタ値の各々をレジスタにロードするための時間的順序を定義する状態復元シーケンスを選択する。状態復元シーケンスは、結果値が格納先レジスタに書き込まれた後の時間に対応する、状態復元シーケンス内の位置を格納先レジスタに提供するように、複数のレジスタのうちのどれが格納先レジスタであるかに依存して選択される。つまり、バックアップされた状態が正しく復元され、状態復元トリガイベントが発生した時に部分的に実行されたデータ処理演算の結果値により後で上書きされない。
【００３１】
状態復元トリガイベントは、関数呼び出しの実行からのリターンであり得る。つまり、発生した関数呼び出しの前に実行されたプロセスに関連した状態が、レジスタに復元される。
【００３２】
状態復元トリガイベントは、中断ハンドリングプロセスの実行からのリターンであり得る。つまり、中断されたイベントの発生前に実行されたプロセスに関連したレジスタ値が、レジスタに復元される。
【００３３】
状態復元トリガイベントはまた、少なくとも１つの値が格納先レジスタにロードされる、複数をロードする演算の実行でもあり得る。複数をロードする演算は、格納先レジスタにロードされた値が、複数をロードする演算が開始された時に部分的に実行されていたデータ処理演算により後で上書きされる場合、正しく実行されない。複数をロードする演算は、少なくとも２つの値のブロックをレジスタにロードし、値のうちの少なくとも１つは、格納先レジスタにロードされる時、本発明の技法は、格納先レジスタにロードされる少なくとも１つの値は、現在実行中の処理演算が、結果値を格納先レジスタに書き込んだ後、ロードされるように、少なくとも２つのデータ値がレジスタにロードされる時間的順序を選択するように使用され得る。
【００３４】
状態復元シーケンスは、格納先レジスタ以外の少なくとも１つのレジスタが、格納先レジスタよりも、シーケンスの早い位置を有するように、選択され得る。これは、バックアップされたレジスタ値が格納先レジスタに復元される前に、現在実行中のデータ処理演算が完了する時間を提供する。
【００３５】
一部のレジスタは、複数のレジスタ群を備えることができ、状態復元制御回路は、格納先レジスタを含まない少なくとも１つのレジスタ群のうちのレジスタに、格納先レジスタを含むレジスタ群のうちのレジスタよりも、状態復元シーケンスの早い位置を提供するように構成され得る。この方式でシーケンスを配列すると、復元シーケンスの選択を簡素化する。
【００３６】
状態復元制御回路は、複数のレジスタ群として、２つのレジスタ群を提供することにより、さらに簡素化され得る。この場合、可能な状態復元シーケンスは２つだけ存在する（次に第２の群が続く第１の群、または次に第１の群が続く第２の群のどちらか）。したがって、２つのシーケンスのうちの１つを選択することが簡単である。
【００３７】
データ処理回路が、複数の格納先レジスタに格納される複数の結果値を生成するための複数のデータ処理演算を実行する場合、レジスタは複数の群に配列されてもよく、状態復元制御回路は、格納先レジスタのうちのいずれをも含まない少なくとも１つのレジスタ群に、格納先レジスタのうちの少なくとも１つを含む全てのレジスタ群のレジスタよりも、状態復元シーケンスの早い位置を提供するように、構成され得る。このように、少なくともいくつかの非格納先レジスタは、シーケンスで早く位置されるので、したがって、あらゆる格納先レジスタは、より後ろに位置され、このため、データ依存の危険を回避することを助ける。
【００３８】
状態復元シーケンスの選択（およびレジスタ値がロードされる、バックアップデータストア内の場所を特定するアドレスのシーケンスの生成）を簡素化するために、状態制御回路は、レジスタ群の同一の連続的レジスタに、状態復元シーケンス内の連続的位置を提供するように構成され得る。
【００３９】
選択された状態復元シーケンスは、格納先レジスタで終了するレジスタのサイクリックなシーケンスであり得る。これは、レジスタ値が格納先レジスタに復元されるまでの時間をより多く提供する。
【００４０】
状態復元制御回路は、ハードウェア制御であり得る。つまり、状態復元トリガイベントへの応答は、状態復元演算がソフトウェア制御であった場合よりも迅速であり得る。バックアップデータストアは、記憶装置またはさらなる複数のレジスタであり得る。
【００４１】
データ処理演算は、浮動小数点除算演算および浮動小数点平方根演算のうちの１つであり得る。本発明の技法は、実行に比較的長い時間がかかるため、これらの演算で特に有用である。
【００４２】
さらなる特長において、データ処理回路は、相互に並列してデータ処理演算を実行するための少なくとも２つの処理パイプラインを備え、
該データ処理回路は、該少なくとも２つの処理パイプラインに、データ処理演算を順に発行するが、該処理パイプラインのうちの１つが、該処理パイプラインのうちの別の１つが先に発行されたデータ処理演算を実行するよりも迅速に後から発行されたデータ処理演算を実行する場合、発行されたデータ処理演算の実行を順序に関係なく実行を完了するように構成される。
【００４３】
本発明の技法は、順序に関係なく完了するプロセッサにおいては、状態保存技法に関して上記で説明した理由のために、現在実行中の命令の実行を中止することが適切ではない可能性があるため、このようなプロセッサにおいて有用である。
【００４４】
整数レジスタ値と浮動小数点レジスタ値とを格納するために別個のレジスタが使用される場合、本発明の技法は、浮動小数点レジスタにのみ適用されてもよく、整数レジスタ値は、状態復元シーケンスには無関係な時間的順序でロードされる。
【００４５】
さらなる態様から見ると、本発明は、
格納先レジスタに格納される結果値を生成するためのデータ処理演算を実行するステップであって、該格納先レジスタは、複数のレジスタのうちの１つである、ステップと、
状態復元トリガイベントの発生時、該結果値が該格納先レジスタに書き込まれようとする間、
（ｉ）該複数のレジスタのうちのどれが該格納先レジスタであるかを検出するステップと、
（ｉｉ）バックアップデータストアに格納された該複数のレジスタ値のうちの一部の各々を該レジスタにロードするための時間的順序を定義する状態復元シーケンスを選択するステップであって、該状態復元シーケンスは、該結果値が該格納先レジスタに書き込まれた後の時間に対応する該状態復元シーケンス内の位置を該格納先レジスタに提供するように、該複数のレジスタのうちのどれが該格納先レジスタであるかに依存して選択される、ステップと、
（ｉｉｉ）該状態復元シーケンスを選択後、選択された状態復元シーケンスの順序で、該バックアップデータストアから該一部のレジスタ値の各々を、該レジスタにロードするステップと、を含む、データ処理方法を提供する。
【００４６】
本発明の上記および他の目的、特長、および利点は、添付の図面を参照しながら読まれる以下の発明を実施するための形態の実例的な実施形態から明らかになるであろう。
【図面の簡単な説明】
【００４７】
【図１】レジスタ値をバックアップデータストアに保存するため、およびバックアップデータストアに保存されたレジスタ値をレジスタに復元するためのデータ処理装置の模式図である。
【図２】スタックメモリへのレジスタ値の保存を模式的に示す図である。
【図３】処理装置による浮動小数点および整数演算の順序発行、および順序に関係のない完了の実施例を模式的に示す図である。
【図４】２つのレジスタ群のうちのどれが格納先レジスタを含むかに依存して、状態保存または復元シーケンスを選択するための例示的な技法を示す図である。
【図５】４つのレジスタ群が存在する、状態保存または復元シーケンスの選択の別の実施例を示す図である。
【図６】複数の格納先レジスタが存在する、状態保存または復元シーケンスの選択のまた別の実施例を示す図である。
【図７】サイクリックな状態保存または復元シーケンスの実施例を示す図である。
【図８】レジスタ値をバックアップデータストアに保存するための方法を示す図である。
【図９】レジスタ値をレジスタに復元するための方法を示す図である。
【図１０Ａ】バックアップデータストアに格納され得る、またはバックアップデータストアから復元され得るレジスタ値の例示的なタイミングを示すタイミング模式図である。
【図１０Ｂ】バックアップデータストアに格納され得る、またはバックアップデータストアから復元され得るレジスタ値の例示的なタイミングを示すタイミング模式図である。
【発明を実施するための形態】
【００４８】
図１は、データ処理演算を処理するための処理回路４を備えるデータ処理装置１を示す。少なくとも１つのレジスタバンク６が、データ処理演算の実行中、処理回路４により使用および生成されたデータ値を格納するように提供される。図１の実施例において、レジスタ６は、整数レジスタ６−１および浮動小数点レジスタ６−２を含む。整数レジスタ６−１は、整数データ値を格納し、浮動小数点レジスタ６−２は、浮動小数点データ値を格納する。整数レジスタ６−１と浮動小数点レジスタ６−２とを区別することが重要ではない場合、レジスタを示すために参照番号６が使用される。
【００４９】
バックアップデータストア１０は、レジスタ６からのデータ値のバックアップコピーを格納するように提供される。バックアップデータストア１０は、処理回路４により実行される命令も格納し得る（図１に示されていない別個の命令記憶装置が提供される可能性もある）。バックアップデータストア１０は、格納またはロード命令に反応してもよく、レジスタ６からデータを格納、またはレジスタ６にデータをロードする。
【００５０】
状態保存トリガイベントの発生時、レジスタ６の少なくとも一部のコンテンツは、バックアップデータストア１０に格納され得る（一部のレジスタは、レジスタ６の全て、または一部だけを含むことができる）。同様に、状態復元トリガイベントの発生時、バックアップデータストア１０にその前に格納されたレジスタ値は、レジスタ６の一部にロードされ得る。
【００５１】
状態保存および復元制御回路１２は、保存および復元処理を制御するように提供される。図１において、状態保存および復元制御回路１２は、単一回路として示されるが、保存および復元演算をそれぞれ実行するように、別個の回路が提供され得ることが理解されるであろう。状態保存および復元制御回路１２は、レジスタ６のレジスタ値をバックアップデータストア１０に保存することにより、状態保存トリガイベントに自動的に応答するように、かつ、バックアップデータストア１０に格納されたレジスタ値をレジスタ６にロードすることにより、状態復元トリガイベントに応答するように、ハードウェア制御される。状態保存および復元回路１２は、ハードウェア制御であるので、状態保存トリガイベントまたは状態復元トリガイベントに応答するために、記憶装置に格納されたプログラムを全く起動する必要がなく、したがって、これらのイベントへのハードウェアにより実現される応答は、ソフトウェア制御の回路が使用された場合よりも迅速である。
【００５２】
バックアップデータストア１０は、レジスタ６に加えて提供された第２のレジスタセットであり得る。代替として、バックアップデータストアは記憶装置であり得る。図２は、バックアップデータストア１０がスタックメモリである実施例を示す。
【００５３】
図３は、処理回路４の演算の実施例を示す。処理回路４は、浮動小数点パイプライン１６と整数パイプライン２０とを含む。浮動小数点パイプライン１６は、浮動小数点レジスタ６−２を使用して浮動小数点処理演算を処理し、一方、整数パイプライン２０は、整数レジスタ６−１を使用して整数処理演算を処理する。図３の実施例において、処理演算は順に発行されるが、順序に関係なく完了され得る。これは、図３に示されるように、例えば、整数演算Ｉ１およびＩ２、浮動小数点演算Ｆ１、および別の整数演算Ｉ３が、この順で処理回路４に発行される。図３の一番下に見られるように、これらの演算は、順（Ｉ１、Ｉ２、Ｆ１、Ｉ３）にプロセッサに発行されるが、順序に関係なく（Ｉ１、Ｉ２、Ｉ３、Ｆ１）完了される。これは、整数演算よりも浮動小数点演算のほうが実行に長い時間がかかるためである。状態保存または復元トリガイベントが、整数演算Ｉ３の完了後であるが、浮動小数点演算Ｆ１の完了前に発生する場合、整数レジスタ６−１は、演算Ｉ３の実行の終了まで正しく、一方で、浮動小数点演算Ｆ１の結果値は、浮動小数点レジスタ６−２にまだ書き込まれていないため、浮動小数点レジスタ６−２は、まだ更新されていない。状態保存または状態復元が直後に発生する場合、演算Ｆ１の結果値はバックアップデータストア１０に保存されていないか、または、Ｆ１の結果値の復元時、バックアップデータストア１０から復元された値を不正に上書きする可能性がある。つまり、不正な状態がレジスタに復元される可能性があり、したがって、これは、不正な処理結果を招く可能性がある。
【００５４】
これらの問題を防止するために、状態保存および復元制御回路１２は、レジスタ６のレジスタ値がバックアップデータストア１０に保存される、またはレジスタ値がバックアップデータストア１０から復元される時間的順序を制御する。図３からわかるように、この問題は、浮動小数点演算は実行により長い時間がかかるため、整数レジスタ６−１よりも浮動小数点レジスタ６−２で発生しやすい。したがって、本発明の技法は、整数レジスタ６−２および浮動小数点レジスタ６−１の両方に適用され得るが、本発明の技法が浮動小数点レジスタ６−２だけに適用され、整数レジスタ６−１の時間的順序は制御されない（つまり、整数レジスタ６−１には同じ順序が必ず使用される）ことも可能性である。
【００５５】
状態保存および復元制御回路１２は、レジスタ６のどのレジスタ値が、バックアップデータストア１０に保存されるか、およびバックアップデータストア１０から復元されるかで、時間的シーケンスを制御する。状態保存および復元制御回路１２が、各々異なるタイプの現在実行中のデータ処理演算に対して順序を選択できる可能性があるが、この技法が有効であるのは、浮動小数点演算、具体的には、実行に最も長い時間が必要である命令の一部である、浮動小数点の除算演算および浮動小数点の平方根演算である可能性が最も高い。したがって、状態保存および復元制御回路１２は、例えば、浮動小数点の除算および平方根の演算に対して特定の状態保存／復元シーケンスを選択する間（つまり、状態保存／復元トリガイベントが、浮動小数点の除算の実行中または浮動小数点の実行演算中に発生する時）、浮動小数点の除算および平方根の演算以外の全ての演算に対しては、レジスタが連続的順序で書き込まれることを可能にし得る。
【００５６】
浮動小数点演算Ｆ１等のデータ処理演算は、結果値を格納先レジスタに書き込む。状態保存および復元制御回路１２は、どのレジスタ値がバックアップデータストア１０に格納されるか、またはバックアップデータストア１０から復元されるかで、シーケンスを制御するので、格納先レジスタは、結果値が格納先レジスタに書き込まれた後の時間に対応する、状態保存または復元シーケンス内の位置を有する。つまり、バックアップデータスト１０への状態保存時、現在実行中の処理演算の結果値は、レジスタ６の残りのコンテンツとともに、バックアップデータストア１０へ書き込まれる。バックアップデータストア１０からデータ値を復元時、状態復元シーケンスは、値がバックアップデータストア１０からレジスタ６に復元される前に、結果値が格納先レジスタに書き込まれることを確保するので、現在実行中のデータ処理演算が、復元された値を上書きすることを防止する。
【００５７】
バックアップデータストア１０がスタックメモリの場合、状態保存／復元シーケンスが、状態保存および復元制御回路１２により変更される時、スタックに保存される最後のレジスタ値は、必ずしも、スタックから削除される最初の値でなくてもよいことに注意されたい。このように、スタックメモリは、必ずしも正確な後入れ先出しのデータ構造ではない。どちらにせよ、レジスタ値がスタックに格納される物理的場所は、保存された時間的順序に関係なく、同じままである。
【００５８】
図４から図７は、状態保存または復元制御回路１２が、レジスタのうちどれが現在実行中の処理演算により使用された格納先レジスタであるかに依存して、状態保存シーケンスまたは状態復元シーケンスをどのように選択することができるかの実施例をいくつか示す。図４において、バックアップデータストア１０に保存されるレジスタは、論理的に２つの群に分割される。状態保存および復元制御回路１２は、格納先レジスタを含まないレジスタ群（この実施例においては第２群）が、格納先レジスタを含むレジスタ群（この実施例においては第１群）よりも優先されるシーケンスを選択する。このように、レジスタ値は、示された時間的順序でバックアップデータストア１０に保存される。群内のレジスタは、状態保存シーケンスの選択およびバックアップデータストア１０のアドレスの生成を簡素化するように、連続的な順序である。同様に、状態復元時、レジスタ値は、結果値が格納先レジスタに書き込まれた後で格納先レジスタが復元されることを確保するように、図４に示された時間的順序で復元される。レジスタ値がバックアップデータストア１０内に格納される物理的順序（この実施例においてはスタックメモリ）は、これらが格納される時間的順序と無関係である。例えば、第２群が第１群の前または後に保存されるかどうかに関係なく、第１群は、必ず、第２群よりも小さいメモリアドレスに格納され得る（図４の下部分を参照）。格納された時間的順序に関係なく、レジスタ値を同じ場所に格納することによって、バックアップデータストア１０ならびに状態保存および復元制御回路１２の配列は、これらのコンポーネントのどちらも値が格納された順序を記憶する必要がないため、簡素化される。復元時、使用されたアドレスは、状態保存シーケンスに依存して調整される必要がなく、状態復元順序だけに依存し得る。
【００５９】
図５は、状態保存または復元シーケンスが選択され得る別の方式を示す。この場合、レジスタは、例えば、４つの群等、２つ以上の群に分けられる。状態保存または復元シーケンスの時間的順序により、格納先レジスタを含まない群（この実施例においては、第１、２および４群）は、格納先レジスタを含むレジスタ群（例えば、第３群）よりも、シーケンスの早い位置であり得る。より多くのレジスタ群を提供することにより、格納先レジスタがシーケンスの遅い位置を有することが確保され得るので、これは、データ処理演算の実行の完了に使用可能な時間量を増加させ得る。例えば、図５を図４と比較すると、格納先レジスタがレジスタ番号９である場合、図４の実施例において、格納先レジスタは、状態保存／復元シーケンスの１０番目のレジスタになるが、図５の実施例では１４番目になる。このように、４つのレジスタ群を有することは、２つの群に比較して、状態保存および復元制御回路１２の複雑性を増加させるが、格納先レジスタが必ず状態保存／復元シーケンスの最後の四分の一で発生することを確保するに十分長い実行時間をデータ処理演算が有する場合には有用であり得る。図４のように、レジスタ値が記憶装置に格納される物理的順序は、時間的順序には無関係であり、状態保存および復元制御回路１２によりどのシーケンスが選択されるかには関係なく同一である。
【００６０】
図６は、状態保存または復元シーケンスを選択する第３の実施例である。この技法は、データ処理回路４が、複数の格納先レジスタに書き込まれる複数の結果値を生成するように、同時に複数の演算を実行する機能がある場合（例えば、データ処理回路４は、相互に並列で演算を実行するための２つ以上の処理パイプライン１６、２０を有することができる）に有用であり得る。この場合、レジスタ群を３つ以上有することは有用である。例えば、２つの結果値が２つの格納先レジスタにそれぞれ書き込まれる場合、格納先レジスタを含まない少なくとも２つのレジスタ群が必ず存在することを確保するので、４つの群が有用であり、したがって、状態保存または復元シーケンスの開始にこのような群を配置することにより、格納先レジスタが、状態保存シーケンスまたは状態復元シーケンスの後半の位置を有することが確保され得る。概して、格納先レジスタよりも多いレジスタ群を提供することが有用である。これにより、少なくとも１つの群は格納先レジスタを全く有さないことが確保され、シーケンスの先頭に配置され得る。状態保存時、結果値は、これらの格納先レジスタからの値がバックアップデータストア１０に書き込まれる時間までに、格納先レジスタに書き込まれていたことになり、状態復元時、結果値は、バックアップデータストア１０から復元された値で上書きされる。ここでも、レジスタ値がバックアップデータスト１０に格納される物理的順序は、どの時間的状態保存または復元順序が選択されるかに関係なく同一である。
【００６１】
図７は、サイクリックな状態保存または復元シーケンスの実施例を示す。サイクリックなシーケンスは、各レジスタを次々にサイクルし、レジスタセットの一方の終端に到達すると、他の終端に戻り、先頭地点まで継続する。サイクリックなシーケンスは、どのレジスタでも開始および終了できるが、格納先レジスタが、状態保存中に読み取られる、または状態復元中に書き込まれる前に、中断している処理演算が実行を完了するまでに最も大きい時間量を提供するため、サイクリックなシーケンスは、シーケンスが格納先レジスタで終了する場合に最も有用である。例えば、１６のレジスタがあり、レジスタ番号８が格納先レジスタである場合、レジスタ９で開始し、レジスタ１５までレジスタを連続的に進み、レジスタ０に戻り、格納先レジスタ８まで継続する、シーケンスが有用であり得る。これによって、格納先レジスタが、バックアップデータストア１０に保存される最後のレジスタであることを確保するので、格納先レジスタが保存される前に、現在実行中のデータ処理演算が完了するまでに最大の利用可能な時間量を提供する。同様に、シーケンスの第１のレジスタが、格納先レジスタの前のレジスタであり、シーケンスの順序が、上記のシーケンスに比較して逆であるサイクリックなシーケンスが考案され得る（図７に示された時間的シーケンスの一番下の実施例を参照）。
【００６２】
図４から図７は、状態保存および復元制御回路１２により選択され得る多様なシーケンスを示す。いずれかの格納先レジスタが、結果値が格納先レジスタに書き込まれた後の時間に、格納先レジスタが読み取られる（保存時）または書き込まれる（復元時）ことを確保するのに十分に遅いシーケンス内の位置とともに提供される、いずれかの任意のシーケンスが考案可能であることが理解されるであろう。しかしながら、シーケンスがより複雑になると、シーケンスを実装する回路がより多く必要になることが要求される。図４から７に示された実施例は、大部分が連続的なシーケンスであるが、実装ははるかに簡単で、データ依存の危険を防止する目的を実現し、データ処理演算の実行を完了することを可能にし、かつ、予測可能な割り込み応答待ち時間を提供する。グループ化されたシーケンスの場合、シーケンスがある群から別の群にジャンプする時点だけでシーケンスは非連続的アドレスが生成されることを必要とし得る一方、サイクリックなシーケンスの場合、レジスタバンクの最初と最後の間でシーケンスがジャンプする時点だけで非連続的アドレスが必要とされる。
【００６３】
図４から図７は、バックアップデータストア１０に書き込まれている、または、バックアップデータストア１０から復元されている、１６のレジスタを示すが、これより多い、またはこれより少ないレジスタが存在し得る。これらのレジスタは、レジスタバンク６の全体であり得るか、または一部だけであり得る。状態保存トリガイベントの発生時、バックアップデータストア１０に保存されない値を持ち、かつ、状態復元トリガイベントの発生時、値が復元されない、他のレジスタが存在し得る。
【００６４】
様々な種類のイベントが、状態保存演算をトリガし得る。例えば、処理回路４に、新しい関数を処理するように命令する関数の呼び出しの発生によって、現在実行されたプロセスが中断する。対応する状態復元トリガイベントは、関数呼び出しの完了に続く、もとの演算の処理へのリターンである。このように、状態データは、関数呼び出しの発生時にバックアップデータストア１０に格納される。関数呼び出しが完了する時、そのプロセスに関連した状態が復元されて、関数呼び出しにより中断されたプロセスの継続実行を可能にする。
【００６５】
同様に、中断要求は、状態保存演算をトリガし得る。状態復元トリガイベントは、次に、その中断要求に関連した中断ハンドリングルーチンの完了に続く、通常の処理へのリターンである。
【００６６】
また、レジスタ値がバックアップデータストア１０に格納される、およびこれから復元される、時間的順序を並び替える本発明の技法は、複数を格納する演算および複数をロードする演算にも適用され得る。複数を格納する演算は、複数のデータの部分をバックアップデータストア１０に格納する。したがって、複数を格納する演算の実行は、状態保存トリガイベントとして見なされ得る。複数を格納する演算が実行される時、複数のデータの部分をバックアップデータストア１０に格納するための適切なシーケンスを選択することにより、ここから値がバックアップデータストア１０に格納される、レジスタのうちの１つに結果値を書き込む、その前の演算が、まだ実行されている間に、複数を格納する演算が実行を開始し得る。同様に、複数をロードする演算は、バックアップデータストア１０からレジスタ６に複数のデータの部分をロードするように実行され得る。複数をロードする演算の実行を状態復元トリガイベントとして使用することにより、データがレジスタにロードされる順序は、ロードされたデータが、複数をロードする演算の開始時に既に部分的に実行された演算の結果値により上書きされないように、制御され得る。
【００６７】
図８は、レジスタ値をバックアップデータストア１０に保存するための方法を示す。ステップ５０で、処理回路４は、本発明の技法が適用されるデータ処理演算のタイプのうちの１つ（例えば、乗加算演算、整数除算または平方根演算、倍精度または拡張精度浮動小数点演算、三角関数、または逆数演算など、他のタイプの演算も使用され得るが、特に、浮動小数点除算または平方根演算）の実行を開始する。対象のデータ処理演算が実行されている間、ステップ５２で、状態保存および復元制御回路１２は、状態保存トリガイベントが発生したかどうかを検出する。状態保存トリガイベントは、例えば、関数呼び出しまたは中断要求または複数を格納する演算の実行であり得る。状態保存トリガイベントが発生していなかった場合、状態保存および復元制御回路１２は、このようなイベントが発生したかどうかの確認を続ける。データ処理演算の実行中に状態保存トリガイベントが発生すると、本方法は、ステップ５４に進み、結果が格納先レジスタに書き込まれようとしているかどうかが検出される（つまり、書き込み後読み取るというデータ依存の危険が発生する可能性がある）。結果が格納先レジスタに既に書き込まれていた場合、データ依存の危険のリスクはないので、ステップ５６で、レジスタ値はバックアップデータストア１０に任意の順序で保存される。選択された順序は問題ではないため、連続的な順序でレジスタを格納することが最も簡単である（１６のレジスタを有するレジスタバンクの場合、例えば、シーケンスはレジスタ０から開始し、レジスタ１５まで続く）。各レジスタのレジスタ値は、バックアップデータストア１０の対応する場所へ格納される。レジスタ値の物理的な格納順序は、格納される時間的順序とは無関係である。
【００６８】
状態保存トリガイベントの発生時、ステップ５４で、結果値が格納先レジスタに書き込まれようとしていると判断された場合、ステップ５８で、状態保存および復元制御回路１２は、現在実行中のデータ処理演算に対して、レジスタのうちのどれが格納先レジスタであるかを検出する。次に、ステップ６０で、状態保存および復元制御回路１２は、レジスタのうちのどれが格納先レジスタであるかに基づいて、状態保存シーケンスを選択する。例えば、図４から７に示されたシーケンスのうちの１つが選択され得る。また、状態保存および復元制御回路１２は、格納先レジスタが最後の位置を有するシーケンスを選択するように、複数の様々な状態保存シーケンスのうちの１つから選択することもできる。レジスタ値をバックアップデータストア１０に保存するための時間的順序を定義する状態保存シーケンスを選択後、ステップ６２で、状態保存および復元制御回路１２は、次に、選択された状態保存シーケンスの順序で、バックアップデータストアにシーケンスのレジスタ値の各々を保存する。レジスタ値が書き込まれる場所は、ステップ５６でレジスタ値が書き込まれたであろう場所と同一である。これで、レジスタ値がバックアップデータストア１０に格納され、次に、状態保存トリガイベント（例えば、中断ハンドリングルーチン、または関数の呼び出し）に関連したプロセスを実行することが可能であり得る。
【００６９】
図９は、バックアップデータストア１０に格納されたレジスタ状態データを復元する方法を示す。ステップ７０で、データ処理演算は、実行を開始する（データ処理演算は、図８のステップ５０に関して記載した演算のタイプのいずれかであり得るか、または別のタイプの演算であり得る）。ステップ７２で、状態復元トリガイベントが発生したかどうかが検出される。状態復元トリガイベントは、例えば、中断ハンドラの実行に続く通常処理へのリターン、関数呼び出しの実行からのリターン、または複数をロードする演算の実行であり得る。状態復元トリガイベントが発生した場合、ステップ７４で、実行中のデータ処理演算の結果値が格納先レジスタに書き込まれようとしているかどうか（つまり、書き込み後書き込みのデータ依存の危険が発生する可能性）が判断される。結果値が既に格納先レジスタに書き込まれていた場合、状態保存および復元制御回路１２は、バックアップデータストア１０に格納されたレジスタ値をレジスタ６に任意の順序でロードする。結果値は既に格納先レジスタに書き込まれて、書き込み後書き込みのデータ依存の危険が存在しないため、レジスタ値が復元される時間的順序は問題とはならない。
【００７０】
一方、ステップ７４で、結果値が格納先レジスタに書き込まれようとしていると判断された場合、ステップ７８で、レジスタ６のうちのどれが格納先レジスタであるかが検出され、状態保存および復元制御回路１２は、レジスタのうちのどれが格納先レジスタであるかに依存して、状態復元シーケンスを選択する。選択された状態復元シーケンスは、例えば、図４から図７に示されたシーケンスのタイプ、または、結果値が格納先レジスタに書き込まれた後の時間に対応する状態復元シーケンス内の位置を格納先レジスタに提供するその他の任意のタイプのシーケンスであり得る。レジスタ値の各々をレジスタ６にロードするための時間的順序を定義する状態復元シーケンスを選択したことにより、ステップ８２で、レジスタ値は、選択した状態復元シーケンスにより定義された時間的順序で、レジスタにロードされる。したがって、バックアップデータストア１０からの値が格納先レジスタに復元される前に、結果値が格納先レジスタに書き込まれることが確保される。
【００７１】
図１０Ａと図Ｂは、本発明の技法に従う例示的なタイミング模式図を示す。図１０Ｂは図１０Ａの続きである。この実施例において、浮動小数点除算演算は、１００の時点で開始される。浮動小数点除算演算は、実行の完了にいくつかの処理サイクルが必要であるので、１０４の時点までは、浮動小数点除算演算の結果は、格納先レジスタから安全に読み取られ得ない。つまり、レジスタ値を保存または復元するための時間的シーケンスが制御される必要があり、したがって、格納先レジスタは、結果値が格納先レジスタに書き込まれた後発生する時間（この実施例においては１０４の時点）に対応するシーケンス内の位置を有する。
【００７２】
図１０Ａと図１０Ｂは、中断信号（この実施例においては、状態保存トリガとして使用される）が、浮動小数点除算演算の実行の最初のサイクルで発生する実施例を示す。これは、中断信号が浮動小数点除算演算の実行中のもう少し後の時点で発生した場合、除算演算の実行は、状態保存／復元演算よりも早く終了することになるので、最悪の事例である。最悪の事例は、状態保存／復元トリガイベントが、演算の実行開始後１サイクルで発生する時である。本発明の技法はこの状況に対応できるので、最悪の事例を検討することは、他のどのような状況にも対処することができることから、有用である。
【００７３】
図１０Ａの１１０部分は、状態保存トリガイベント（この実施例においては中断）の発生時、整数レジスタ６−１（図１０Ａにおいてｐｃ、ｐｓｒ、およびｒ０からｒ１４で示される）が、バックアップデータストア１０にどのように保存されるかを示す。その時実行されているのは浮動小数点除算演算であるため、整数レジスタ６−１に書き込まれる予定でまだ書き込まれていない結果はないので、整数レジスタ６−１は、任意の順序（簡素化のために、昇順）でバックアップデータストア１０に格納され得る。整数レジスタ６−１の保存終了後、浮動小数点レジスタ６−２がバックアップデータストア１０に保存される。図１０Ａの実施例において、除算命令の結果がレジスタから安全に読み取られ得る１０４の時点前に発生する１１４の時点で、第１の浮動小数点レジスタ（Ｓｎ）が、どのようにバックアップデータストア１０に保存されるかが確認できる。浮動小数点レジスタ６−２がバックアップデータストア１０に保存されるシーケンスを選択することにより、浮動小数点除算演算の格納先レジスタは、除算演算の結果が格納先レジスタに書き込まれた後に保存されることが確保される。図１０Ａと図１０Ｂの実施例において、図４に示されたシーケンスが使用され、レジスタは、２つの群に分割される（ＳｍからＳｍ＋７、およびＳｎからＳｎ＋７）。アドレスＳｍおよびＳｎの値をレジスタのうちのどれが格納先レジスタであるかに依存して適切な値（例えば、０と８）に設定することにより、データ依存の危険が回避され得る。
【００７４】
例えば、格納先レジスタがレジスタ５である場合、レジスタの値が図４に示されたシーケンスの順序でデータストア１０に保存されるように、アドレスＳｎは８に設定され、アドレスＳｍは０に設定される。同様な技法は、バックアップデータストア１０からデータを復元するために使用され得る。このように、この実施例の場合、格納先レジスタは、状態保存／復元シーケンスのＳｍ＋５の位置となり、したがって、図１０Ｂに示されるように、この値は、除算命令の結果が安全に読み取られ得る１０４の時点後に発生する、１１８の時点で保存されることになる。
【００７５】
代替として、格納先レジスタがレジスタ１０である場合、Ｓｎは０に設定されてもよく、かつＳｍは８に設定されてもよく、格納先レジスタの位置は、図１０Ｂに示されるようにＳｍ＋２の位置になり、したがって、ここでも、格納先レジスタの値は、結果値が格納先レジスタに書き込まれた１０４の時点後に発生する１１９の時点で、バックアップデータストアに保存されることになる。
【００７６】
関連するレジスタ全てがストア１０にバックアップされる（または、レジスタ６に復元される）と、１２０の時点で、トリガイベント（例えば、中断ハンドラ）に関連するプロセスの第１の命令が実行を開始することができる。
【００７７】
図１０Ａの１２２の部分は、レイジースタックとして既知の代替スタックスキームを示す。この技法において、整数レジスタ６−１をバックアップデータストア１０に格納後、状態保存および復元制御回路１２は、浮動小数点レジスタ６−２をバックアップデータストア１０に保存せずに、状態保存イベント（例えば、中断ハンドラ）に関連するプロセスの実行を待機および開始できる。これは、状態保存トリガイベントに関連したプロセスが全く浮動小数点レジスタ値を使用しない場合、浮動小数点レジスタ値の保存に関連した待ち時間を回避することができ、プロセスは整数レジスタがロードされた後速やかに実行できるように、実行される。最悪の事例において、プロセスの第１の演算は、浮動小数点を使用し、この場合、いずれにしても浮動小数点値はロードされることが必要である。このような場合、状態保存シーケンスは、本発明の技法に応じて選択されて、格納先レジスタの値が保存された後に結果値が格納先レジスタに書き込まれることを防止する。レイジースタック技法のさらなる詳細は、本出願の英国同時係属特許出願である、出願第０９１０６６１．８号に説明され、参照によりその内容をここに組み入れる。
【００７８】
本明細書において、添付の図面を参照しながら本発明の例示的な実施形態を詳細に説明したが、本発明はこれらの詳細な実施形態に限定されず、添付の請求項により定義される本発明の範囲および精神から逸脱することなく、当業者により多様な変更および変形がこれらにもたらされ得ることを理解されたい。
【符号の説明】
【００７９】
１  データ処理装置
４  処理回路
６  レジスタバンク
６−１、ｐｃ、ｐｓｒ、ｒ０〜ｒ１４  整数レジスタ
６−２、浮動小数点レジスタ
１０  バックアップデータストア
１２  状態保存/復元制御回路
１６  浮動小数点パイプライン
２０  整数パイプライン
Ｆ、Ｆ１  浮動小数点演算
Ｉ、Ｉ１、Ｉ２、Ｉ３  整数演算
Ｓｍ〜Ｓｍ＋７、Ｓｎ〜Ｓｎ＋７  アドレス
【図１】
0005450336.tif 000002
【図２】
0005450336.tif 000003
【図３】
0005450336.tif 000004
【図４】
0005450336.tif 000005
【図５】
0005450336.tif 000006
【図６】
0005450336.tif 000007
【図７】
0005450336.tif 000008
【図８】
0005450336.tif 000009
【図９】
0005450336.tif 000010
【図１０Ａ】
0005450336.tif 000011
【図１０Ｂ】
0005450336.tif 000012