(57)【要約】溢れ／充填エンジンは、レジスタウィンドウ溢れトラップ又はレジスタウィンドウ充填トラップが差し迫っている時を検出する。溢れ／充填エンジンは、ソフトウェアトラップハンドラによるこのトラップ処理の際に不要なオーバーヘッドを被らないように、このトラップを回避する措置を取る。溢れ／充填エンジンはハードウェアで実装できる。これらトラップは、適切な命令を命令ストリームに入力して実行することで回避できる。
2005506591.tif 000002
【特許請求の範囲】
【請求項１】
マイクロプロセッサであって、
値を保持するためのレジスタであって、レジスタウィンドウに論理的に区分されたレジスタと、
前記レジスタウィンドウの前記レジスタ内に保持された値を格納するための記憶装置と、
レジスタウィンドウオーバーフロー条件及びレジスタウィンドウアンダーフロー条件の何れかが差し迫っていることを検出するための検出器と、
前記検出器に応答する命令発生器であって、差し迫っていることが検出された前記条件に応答したトラップを回避するために、前記記憶装置を操作する少なくとも１つの命令を生成する命令発生器とを含む、マイクロプロセッサ。
【請求項２】
前記検出器及び前記命令発生器がハードウェアで実装されている、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記マイクロプロセッサが、実行段階へ導入するための命令をキャッシュ格納するキャッシュを更に含み、前記検出器が、前記キャッシュ内の前記命令を検査して、前記取り込んだ命令の何れかの実行がレジスタウィンドウオーバーフロー条件に至るかどうかを判断することにより、レジスタウィンドウオーバーフロー条件が差し迫っているかを判断する、請求項１に記載のマイクロプロセッサ。
【請求項４】
レジスタに内容を格納するスペースがない場合に、レジスタウィンドウの前記内容を前記レジスタに格納する命令を、前記検出器が前記キャッシュ内で探す、請求項３に記載のマイクロプロセッサ。
【請求項５】
前記検出器が、どれだけの記憶空間が前記レジスタ内で利用可能かを検査する、請求項３に記載のマイクロプロセッサ。
【請求項６】
前記マイクロプロセッサが、実行段階へ導入するための命令をキャッシュ格納するキャッシュを更に含み、前記検出器が、前記キャッシュ内の前記命令を検査して、前記命令の実行がレジスタウィンドウアンダーフロー条件に至るかどうかを判断することにより、レジスタウィンドウアンダーフロー条件が差し迫っているかどうかを判断する、請求項１に記載のマイクロプロセッサ。
【請求項７】
レジスタウィンドウの内容が前記レジスタ内部でなくスタックに格納されている場合に、前記レジスタウィンドウを復元する命令を、前記検出器が前記キャッシュ内で探す、請求項６に記載のマイクロプロセッサ。
【請求項８】
前記検出器が、レジスタウィンドウアンダーフロー条件が差し迫っているかどうかのみを検出する、請求項１に記載のマイクロプロセッサ。
【請求項９】
前記検出器が、レジスタウィンドウオーバーフロー条件が差し迫っているかどうかのみを検出する、請求項１に記載のマイクロプロセッサ。
【請求項１０】
前記検出器が、レジスタウィンドウオーバーフロー条件が差し迫っているかどうかと、レジスタウィンドウアンダーフロー条件が差し迫っているかどうかの両方を検出する、請求項１に記載のマイクロプロセッサ。
【請求項１１】
前記マイクロプロセッサが、前記命令発生器により生成された前記命令を実行するための実行回路を更に含む、請求項１に記載のマイクロプロセッサ。
【請求項１２】
前記マイクロプロセッサが、命令のアウトオブオーダー実行を行う、請求項１に記載のマイクロプロセッサ。
【請求項１３】
前記命令発生器が、前記命令発生器により生成された前記少なくとも１つの命令を保持するための第２段階を含む、請求項１に記載のマイクロプロセッサ。
【請求項１４】
記憶装置とレジスタとを備えたマイクロプロセッサ内のエンジンであって、
レジスタウィンドウ情報を管理するための前記記憶装置へのアクセスを必要とするトラップが差し迫っていることを検出するための検出器と、
前記検出器に応答して、前記トラップを回避するための少なくとも１つの命令を生成するための命令発生器とを含む、エンジン。
【請求項１５】
前記エンジンがハードウェアで実装されている、請求項１４に記載のエンジン。
【請求項１６】
レジスタウィンドウに論理的に区分された複数レジスタと、レジスタウィンドウの内容を格納するための記憶装置とを備えたマイクロプロセッサにおける方法であって、
レジスタウィンドウ溢れ及びレジスタウィンドウ充填の何れかが差し迫っていることを判断する段階と、
前記レジスタウィンドウ溢れが差し迫っているという判断に応答して、差し迫っていると判断された前記溢れ又は充填に応答したトラップを回避するために前記記憶装置を操作する段階とを含む、方法。
【請求項１７】
レジスタウィンドウ溢れが差し迫っていることが判断された時は、前記記憶装置を操作する前記段階が、前記選択されたレジスタウィンドウの前記内容を前記記憶装置に格納させる、前記マイクロプロセッサにより実行される少なくとも１つの命令を提供する段階を含む、請求項１６に記載の方法。
【請求項１８】
レジスタウィンドウ充填が差し迫っていることが判断された時は、前記記憶装置を操作する前記段階が、前記記憶装置内のデータを前記レジスタに格納させる、前記マイクロプロセッサにより実行される少なくとも１つの命令を提供する段階を含む、請求項１６に記載の方法。
【請求項１９】
前記マイクロプロセッサが、実行が予定されている命令ストリームを備え、前記選択されたレジスタウィンドウ内の前記内容を前記記憶装置に格納させる前記命令が、前記命令ストリームに挿入される、請求項１６に記載の方法。
【発明の詳細な説明】
【関連出願】
【０００１】
本願は、２０００年１２月２１日付けで出願された「レジスタウィンドウのためのハードウェア溢れ／充填エンジン」と題する特許出願第０９／７４７，５８３号の優先権を主張する。この特許出願の発明者及び譲受人は、本願と同一であり、この特許出願は引用してここに援用する。
【技術分野】
【０００２】
本発明は、一般にマイクロプロセッサに関し、より詳細にはレジスタウィンドウのためのハードウェア溢れ／充填エンジンに関する。
【発明の背景】
【０００３】
従来のマイクロプロセッサは、典型的には汎用レジスタを含んでいる。汎用レジスタは、レジスタウィンドウに論理的に区分できる。例えば、コンピュータプログラムの各ルーチンは、そのルーチン内の命令がアクセス可能な汎用レジスタの部分集合を表す別々の関連付けられたレジスタウィンドウを備えることができる。
【０００４】
プログラミングの観点からは、許可されるレジスタウィンドウの数に固定した上限を設けない方が望ましい。そうしないと、ルーチンのネスティング深さが制限されてしまう。これは、マイクロプロセッサ上で利用可能な物理レジスタの数が制限されるという事態を引き起こす。従って、従来のマイクロプロセッサは、無制限の数のレジスタウィンドウを事実上サポートする機構を提供している。具体的には、レジスタウィンドウを追加する場合で、全てのレジスタが現在使用されている時は、トラップが発生する。このトラップは、ソフトウェアに実装されているトラップハンドラにより処理される。トラップハンドラは、何れかのレジスタウィンドウの内容を記憶装置にシフトして、新たなレジスタウィンドウに空間を作る。こうした状況は、オーバーフロー例外に応答して発生する「レジスタウィンドウ溢れ」と呼ばれる。
【０００５】
アンダーフロー条件が起こった時にも、トラップが発生する。アンダーフロー条件が発生するのは、レジスタが任意のレジスタウィンドウの内容を保持しておらず、このレジスタウィンドウの内容を、記憶装置からこれらレジスタに転送しなければならない場合である。こうした条件は、「レジスタウィンドウ充填」と呼ばれる。このトラップは、ソフトウェアに実装されているトラップハンドラにより処理される。
【０００６】
上述のトラップは特に不経済である。トラップハンドラを呼び出し、完全に実行するには長時間を要する。マイクロプロセッサのスピードがますます高速化する中、こうしたトラップはパフォーマンスに有意な影響を与えかねない。
【発明の概要】
【０００７】
本発明は、溢れ／充填エンジンをハードウェアに実装することで、従来のマイクロプロセッサの上述した制約に対処するものである。このハードウェア溢れ／充填エンジンは、従来のマイクロプロセッサにおけるレジスタウィンドウ溢れ及びレジスタウィンドウ充填を実行するトラップに関連付けられた大きなオーバーヘッドを回避する。このハードウェア溢れ／充填エンジンは、レジスタウィンドウ充填或いはレジスタウィンドウ溢れが差し迫っていることを検出して、これに関連付けられたアンダーフロー又はオーバーフロー条件を回避するための適切な命令を生成する。これらの命令は、他の命令と共に処理するため、命令パイプラインに直接的に挿入可能である。
【０００８】
本発明の一局面によれば、マイクロプロセッサは、値を保持するためのレジスタを含む。これらのレジスタは、レジスタウィンドウに論理的に区分される。更に、上述のマイクロプロセッサは、レジスタウィンドウのレジスタ内に保持された値を格納するための記憶装置を含む。レジスタウィンドウのオーバーフロー条件又はレジスタウィンドウのアンダーフロー条件が差し迫っていることを検出するための検出器が設けられている。命令発生器が、この検出器により差し迫っていることが検出された条件に応答して、トラップを回避するための少なくとも１つの命令を生成する。これら検出器及び命令発生器はハードウェアに実装できる。
【０００９】
本発明の別の局面によれば、エンジンが、レジスタを備えたマイクロプロセッサに設けられている。このエンジンは、検出器及び命令発生器を含む。この検出器は、レジスタウィンドウ情報を管理するための記憶装置へのアクセスを必要とするトラップが差し迫っていることを検出する。命令発生器は検出器に応答して、トラップを回避するための少なくとも１つの命令を生成する。
【００１０】
本発明の例示的な実施形態は、コストが大きいトラップを回避するためのレジスタウィンドウ溢れ／充填エンジンを提供する。具体的には、この例示的な実施形態の溢れ／充填エンジンは、レジスタウィンドウ溢れ又はレジスタウィンドウ充填が差し迫っている時を検出する。結果的に、コストが大きいトラップが回避される。この溢れ／充填エンジンはハードウェアに実装される。
【００１１】
溢れ／充填エンジンは、溢れトラップ又は充填トラップを避けるための、命令ストリームに挿入される命令を生成する。これら命令は、読出し専用記憶素子（ＲＯＭ）などのメモリから、選択した条件に応答して取り出せばよい。溢れ／充填エンジンは、命令キャッシュ内にある、実行パイプラインへの導入が予定されている命令を調べる。オーバーフロー条件又はアンダーフロー条件の原因となる命令が見つかると、溢れ／充填エンジンは、こうしたオーバーフロー条件又はアンダーフロー条件を回避するための命令を生成する。
【００１２】
図１は、本発明の例示的な実施形態のレジスタウィンドウ１０を含むレジスタを示す。このレジスタウィンドウは、３組のレジスタ１２、１４、及び１６を含む。大域レジスタ１８も提供されているが、レジスタウィンドウの構成部分ではない。各組のレジスタ１２、１４、１６、及び１８は、８つのレジスタを含む。図１では、これらレジスタは、各組のレジスタ１２、１４、１６、及び１８において０乃至７の番号が付けられている。各レジスタウィンドウは、あるルーチンに関連付けることができ、又、関連付けられたルーチンの値を保持可能である。
【００１３】
レジスタウィンドウ１０は、図１において「ＩＮＳ」を記号付けした入力レジスタを含む。入力レジスタ１２は、関連付けられたルーチンの入力値を保持する。後に詳述するように、これら入力値を隣接するウィンドウと共有してもよい。レジスタウィンドウ１０は、このレジスタウィンドウに関連付けられたルーチンに局部的な値を保持する局部レジスタも含む。出力レジスタ１６は、隣接したレジスタウィンドウと共有可能な値を保持する。最後に、レジスタウィンドウ１０の外部には、全てのルーチンに共通な大域値を保持する大域レジスタ１８がある。
【００１４】
上述のレジスタは、マイクロプロセッサ内に設けられている。この例示的な実施形態のマイクロプロセッサは、現在アクティブなレジスタウィンドウを識別する現行ウィンドウポインタ（ＣＷＰ）を維持する。図２は、レジスタ組の論理図を示し、ＣＷＰがどのようにレジスタウィンドウを識別するかを示す。図２に示した例では、入力レジスタ１２は、論理的に３次元ブロックとして見ることができ、ＣＷＰがそのブロック内の現行レジスタウィンドウを識別している。このＣＷＰはインクリメント又はディクリメントして、ブロック１２’内の異なる入力レジスタの組を選択できる。同様に、ＣＷＰは、局部レジスタ１４’のブロック内で現行レジスタウィンドウの局部レジスタ組を識別し、又、出力レジスタ１６’のブロック内で現行レジスタウィンドウの出力レジスタ組を識別する。大域レジスタは共有されているから、大域レジスタ組１８は、３次元ブロックとしては表されておらず、単一のレジスタ組となっている。
【００１５】
上述したように、レジスタウィンドウは重複してよい。第１レジスタウィンドウの出力レジスタ組に保持されているレジスタ値は、隣接する第２レジスタウィンドウの入力レジスタに保持されている値となっている。図３は、３つのレジスタウィンドウの例と、これらのウィンドウがどのように重複しているかを示す。レジスタr[0]乃至r[7]は、大域レジスタの組３６を構成する。３つのウィンドウ３０、３２、及び３４は、それぞれＣＷＰ−１、ＣＷＰ、及びＣＷＰ＋１により識別できる。ＣＰＷ−１により識別されるレジスタウィンドウ３０は、レジスタr[8]乃至ｒ［１５］を含む出力レジスタ組４２を含み、局部レジスタ組４０は、レジスタr[１６]乃至ｒ［２３］を含み、入力レジスタ組３８は、レジスタr[２４]乃至ｒ［３１］を含む。
【００１６】
レジスタウィンドウ３２はウィンドウ３０と重複しており、出力レジスタ４２に保持されている値は、ウィンドウ３２の入力レジスタ４４に保持される値になる。ウィンドウ３２は、局部レジスタ４６及び出力レジスタ４８も含む。ウィンドウ３４は、図３に示すようにウィンドウ３２と重複している。ウィンドウ３４は、入力レジスタ５０、局部レジスタ５２、及び出力レジスタ５４を含む。
【００１７】
図４は、この例示的な実施形態に設けられた汎用レジスタの一例を示す。これらレジスタ６０は、ｒ［０］からｒ［６３］までの索引を付けた６４個のレジスタを含む。レジスタ６０は、レジスタ８個からなる複数組７０、７２、７４、７６、７８、８０、８２、及び８４に区分できる。通常の技能を備えた当業者であれば、本発明は、６４個のレジスタを用いた例に限定されないのは理解するはずである。更に、通常の技能を備えた当業者であれば、本発明は、各レジスタ組が８個のレジスタを含む例に限定されないのは理解するはずである。
【００１８】
これらレジスタは、ＣＡＮＳＡＶＥレジスタ８６のようなレジスタウィンドウ状態レジスタも含む。ＣＡＮＳＡＶＥレジスタ８６は、ＣＷＰの後の未使用のレジスタウィンドウの数であって、従って、レジスタウィンドウ溢れを起こすことなく割り当て可能なレジスタウィンドウの数を識別する数値を保持する。ＣＡＮＲＥＳＴＯＲＥレジスタ８８は、現行プログラムにより使用されているＣＰＷの前のレジスタウィンドウであって、レジスタウィンドウ溢れ例外を発生することなく復元可能なものの数を保持する。ＣＷＰ９０は、現行レジスタウィンドウを識別する。
【００１９】
図５は、本発明の例示的な実施形態を実施するのに適したマイクロプロセッサ１００の概略的なブロック図を示す。後の説明の目的で、マイクロプロセッサ１００は、ＳＰＡＲＣインターナショナル社のＳＰＡＲＣアーキテクチャ委員会が規定した、ＳＰＡＲＣバージョン９アーキテクチャ標準と互換性があるものとする。マイクロプロセッサ１００は、ハードウェアに実装した溢れ／充填エンジン１０６を含む。更に、マイクロプロセッサ１００は、図４に示したような、図４のレジスタを含む少なくとも１つのレジスタファイル１０２を含む。マイクロプロセッサ１００は、後に詳述するように、文脈情報を格納するための記憶装置１０４を含む。マイクロプロセッサ１００は、命令キャッシュ１０８から命令を受け取る実行パイプライン１１０を含む。
【００２０】
通常の技能を備えた当業者であれば、本発明は、図５に示したものとは異なったマイクロプロセッサのアーキテクチャでも実施できることは理解するはずである。図５に示したものは、単に例示目的であって、本発明を限定するものではない。
【００２１】
図６は、本発明の例示的な実施形態において、レジスタウィンドウ溢れ例外が差し迫っている時を検出するために実行される諸ステップを示したフローチャートである。まず、溢れ／充填エンジン１０６は、ＣＡＮＳＡＶＥレジスタ８６が保持している値が０かどうか検査する（図６のステップ１２０）。上述のように、ＣＡＮＳＡＶＥレジスタ８６は、ＣＷＰの後の未使用のレジスタウィンドウの数であって、割り当てに利用可能なレジスタウィンドウの数を識別する値を保持する。ＣＡＮＳＡＶＥレジスタ８６の保持している値が０であれば、割り当てに利用できるレジスタウィンドウが無いことを示している。次に、溢れ／充填エンジンは、実行パイプライン１１０に次に挿入する予定の、命令キャッシュ１０８内にキャッシュ格納された命令を検査する。命令キャッシュ１０８は、実行パイプライン１１０に並列に挿入される８つの命令からなる幾つかの組を保持している。これら命令は、次に実行が開始される予定の命令である。溢れ／充填エンジン１０６は、これらの命令を調べて、内部にＳＡＶＥ命令があるかどうかを判断する（図６のステップ１２４）。ＳＡＶＥ命令は、新たなレジスタウィンドウをルーチンに提供する。こうした新たなレジスタウィンドウは、利用可能なレジスタスペースをレジスタ６０の中に必要とする。ＣＡＮＳＡＶＥレジスタ８６の保持する値が０の場合は、ＳＡＶＥ命令があると、レジスタウィンドウ溢れトラップが発生する。こうしたトラップは、従来のマイクロプロセッサ内ではソフトウェアトラップハンドラにより処理されるはずである。トラップハンドラを呼び出すオーバーヘッドを避けるため、溢れ／充填エンジン１０６は、ウィンドウレジスタ溢れトラップを避けるためのステップを実行する（図６のステップ１２６）。これらのステップを下記に詳述する。
【００２２】
図７は、３つのサブルーチンＡ、Ｂ、及びCが順番に呼び出されている例を示す。レジスタ組７２、７４、及び７６は、サブルーチンＡ１３０のレジスタウィンドウに割り当てられている。レジスタ組７６、７８、及び８０は、サブルーチンＢ１３２のレジスタウィンドウに割り当てられている。最後に、レジスタ組８０、８２、及び８４は、サブルーチンＣ１３４のレジスタウィンドウに割り当てられている。記憶装置１０４は、何れのレジスタウィンドウの内容も現在保持していない。
【００２３】
図８は、レジスタウィンドウ溢れ例外を回避するために、溢れ／充填エンジン１０６によりこの例示的な実施形態で実行される諸ステップを示す。具体的には、レジスタ６０内の最も古いレジスタウィンドウのレジスタ内容が、レジスタ６０から記憶装置１０４にコピーされる（図８のステップ１３６）。次に、ＣＡＮＳＡＶＥレジスタ８６をインクリメントして、割り当てに利用可能なレジスタウィンドウがあることを示す（図８のステップ１３８）。図９は、第４サブルーチンＤが呼び出される予定であり、それがレジスタウィンドウを必要とする場合の、図７に示した例の結果を表す。サブルーチンＡ１３０のレジスタウィンドウの内容は、記憶装置１０４に格納され、サブルーチンＤ１４０のレジスタウィンドウの内容は、レジスタ６０に格納されている。
【００２４】
図８の上述のステップは、溢れ／充填エンジン１０６により実行される。図１０に示したように、溢れ／充填エンジンは、命令キャッシュ１０８に含まれる命令内でＳＡＶＥ命令を検出するための検出器１５０を含む。更に、溢れ／充填エンジン１０６は、図８のステップ１３６及び１３８を実行するための命令を生成する命令発生器１５２を含む。
【００２５】
図１１は、レジスタウィンドウ溢れトラップを避けるための命令を生成する役割を担った、命令発生器１５２の部分を更に詳細に示す。図１１に示すように、比較器１６０は、ＣＡＮＳＡＶＥレジスタ８６の現在値を値０と比較して、ＣＡＮＳＡＶＥレジスタが値０を現在保持しているかを判定する。ＣＡＮＳＡＶＥレジスタの保持している値が０であれば、比較器１６０の出力は論理値１となり、それ以外では、比較器１６０の出力は論理値０となる。第２比較器１６２は、現行命令をＳＡＶＥ命令と比較して、現行命令がＳＡＶＥ命令かどうかを判定する。現行命令がＳＡＶＥ命令であれば、比較器１６２の出力は論理値１となり、それ以外では、比較器１６２の出力は論理値０となる。比較器１６２は、命令キャッシュ１０８から実行パイプライン１１０へ導入する、現在の組内の各命令を検査する。
【００２６】
比較器１６０及び１６２の出力は、論理ＡＮＤゲート１６４に入力される。ＣＡＮＳＡＶＥレジスタ８６の保持する値が０で、現行命令がＳＡＶＥ命令であれば、ＡＮＤゲート１６４の出力は論理値１であり、この値は、読出し専用記憶素子（ＲＯＭ）１６４の読込み入力線１６６に入力されて、溢れ／充填エンジン１０６に、ＲＯＭ内部に格納された溢れ命令１６８を出力させ、且つ実行パイプライン１１０に挿入させることとなる。溢れ命令１６８が出力されるのは、ＣＡＮＳＡＶＥが保持する値が０で、且つ現行命令がＳＡＶＥ命令の場合（レジスタウィンドウ溢れ例外が差し迫っていることを示す）だけである。溢れ命令１６８は、実行パイプライン１１０に一回のサイクルで実行される必要はなく、ＳＡＶＥ命令実行前に、溢れ命令１６８を実行パイプラインに挿入する空間が確保されるように、マイクロプロセッサ１００はバックプレッシャーをかける機構を含んでいる。従って、溢れ命令１６８は、複数のサイクルにわたって実行してよい。
【００２７】
適切な溢れ命令の一例は次の通りである。
1. H_SRL %sp, 0, %sp
2. H_STW %l0, [%sp + BIAS32 + 0]
3. H_STW %l1, [%sp + BIAS32 + 4]
4. H_STW %l2, [%sp + BIAS32 + 8]
5. H_STW %l3, [%sp + BIAS32 + 12]
6. H_STW %l4, [%sp + BIAS32 + 16]
7. H_STW %l5, [%sp + BIAS32 + 20]
8. H_STW %l6, [%sp + BIAS32 + 24]
9. H_STW %l7, [%sp + BIAS32 + 28]
10. H_STW %i0, [%sp + BIAS32 + 32]
11. H_STW %i1, [%sp + BIAS32 + 36]
12. H_STW %i2, [%sp + BIAS32 + 40]
13. H_STW %i3, [%sp + BIAS32 + 44]
14. H_STW %i4, [%sp + BIAS32 + 48]
15. H_STW %i5, [%sp + BIAS32 + 52]
16. H_STW %i6, [%sp + BIAS32 + 56]
17. H_STW %i7, [%sp + BIAS32 + 60]
18. H_SAVED
【００２８】
このＳＲＬ命令は、３２ビット右へ論理的にシフトさせ、レジスタの上位３２ビットにゼロがセットされるようにする。例示的な実施形態では、レジスタの長さは６４ビットであると仮定している。上述の命令は、レジスタの３２ビットのみが使用されている場合のものである。ＳＴＷ命令は、値をそれぞれのレジスタからカギ括弧内で指定されているアドレスに書き込む。２乃至９の番号が付いた命令は、局部レジスタ０（すなわち１０）から局部レジスタ７（すなわち１７）にわたる局部レジスタからの値を、記憶装置内の対応するアドレスに書き込む。１０乃至１７の番号が付いた命令は、入力レジスタを記憶装置に書き込む。大域レジスタの値及び出力レジスタの値はこれらレジスタ内に維持しなければならないが、それはこれらの値が、他のレジスタウィンドウと共有してよいからである。ＳＡＶＥ命令は、ＣＡＮＳＡＶＥレジスタ８６を値１インクリメントする。
【００２９】
通常の技能を備えた当業者であれば、上述の命令は単に例示目的であって、本発明を限定するものでないことは理解するはずである。他の種類の命令を用いて、レジスタウィンドウ溢れトラップを回避してもよい。更に、通常の技能を備えた当業者であれば、溢れ／充填エンジンは、命令自体は生成しないが、レジスタウィンドウ溢れトラップを避けるための代替機構を用いる例でも本発明は実施可能であることを理解するはずである。更には、命令発生器に含まれたロジックは、図１１に示したような構成要素を用いて実装する必要はない。通常の技能を備えた当業者であれば、代替的な実装方法が使用できることは理解するはずである。
【００３０】
上述のように、溢れ／充填エンジン１０６は、レジスタウィンドウ充填のトラップも回避できる。図１２は、こうしたレジスタウィンドウ充填トラップを回避するために実行される諸ステップを図示したフローチャートである。まず、溢れ／充填エンジン１０６は、ＣＡＮＳＴＯＲＥレジスタ８８が保持している値が０かどうかを検査する（図１２のステップ１２０）。ＣＡＮＳＴＯＲＥレジスタが保持している値が０であれば、レジスタには復元のために利用可能なレジスタウィンドウ（すなわちＣＷＰがポイントすべきもの）が存在していないことを示す。次に、溢れ／充填エンジンは、命令キャッシュ１０８内の次に実行が予定されている命令の組を検査する（図１２のステップ１７２）。溢れ／充填エンジン１０６は、検査した命令組内にＲＥＳＴＯＲＥ命令が存在するかどうか検査する（図１２のステップ１７４）。仮にＲＥＳＴＯＲＥ命令がある場合は、復元可能なレジスタウィンドウが無いので、レジスタウィンドウ充填例外が差し迫っていることになる。従って、溢れ／充填エンジン１０６は、ウィンドウレジスタ充填トラップを避けるためのステップを実行する（図１２のステップ１７６）。
【００３１】
図１３は、レジスタウィンドウ充填例外が差し迫っている例を示す。レジスタ６０には、レジスタウィンドウに現在格納されている値が無い。サブルーチンＡは実行を開始する寸前であり、サブルーチンＡ１３０のレジスタウィンドウの内容は記憶装置１０４に格納されている。
【００３２】
レジスタウィンドウ充填例外を回避するため、この例示的な実施形態は、レジスタウィンドウから復元されるべき値を記憶装置１０４からレジスタ６０へコピーする（図１４のステップ１８０）。これが完了すると、ＣＡＮＳＴＯＲＥレジスタ８８がインクリメントされる（図１４のステップ１８２）。
【００３３】
図１５は、レジスタウィンドウ充填例外を回避するために、図１４の諸ステップを実行を完了した時点の図１３の例を示す。サブルーチンＡ１３０のレジスタウィンドウへの内容は、記憶装置１０４からレジスタ６０に転送されている。
【００３４】
図１６は、充填命令２００を生成するために設けられた、命令発生器１５２の部分を更に詳細に示す。比較器１９０は、ＣＡＮＲＥＳＴＯＲＥレジスタ８８内の値を、値０と比較する。比較器１９２は、現行命令をＲＥＳＴＯＲＥ命令と比較して、現行命令がＲＥＳＴＯＲＥ命令かどうかを判定する。比較器１９０及び１９２の出力は、論理ＡＮＤゲート１９４に入力される。ＣＡＮＲＥＳＴＯＲＥレジスタ８８が保持する値が０であり、且つ現行命令がＲＥＳＴＯＲＥ命令である場合は、読出し専用記憶素子（ＲＯＭ）１９６の読込み線１９８を起動して、充填命令２００を実行パイプライン１１０に挿入させる。溢れ命令１６８と同様に、バックプレッシャーを実行パイプライン１１０に掛けることにより、充填命令２００を複数サイクルにわたって挿入してもよい。
【００３５】
適切な充填命令の一例は次の通りである。
1. H_SRL %sp, 0, %sp
2. H_LDUW [%sp + BIAS32 + 0], %l0
3. H_LDUW [%sp + BIAS32 + 4], %l1
4. H_LDUW [%sp + BIAS32 + 8], %l2
5. H_LDUW [%sp + BIAS32 + 12], %l3
6. H_LDUW [%sp + BIAS32 + 16], %l4
7. H_LDUW [%sp + BIAS32 + 20], %l5
8. H_LDUW [%sp + BIAS32 + 24], %l6
9. H_LDUW [%sp + BIAS32 + 28], %l7
10. H_LDUW [%sp + BIAS32 + 32], %i0
11. H_LDUW [%sp + BIAS32 + 36], %i1
12. H_LDUW [%sp + BIAS32 + 40], %i2
13. H_LDUW [%sp + BIAS32 + 44], %i3
14. H_LDUW [%sp + BIAS32 + 48], %i4
15. H_LDUW [%sp + BIAS32 + 52], %i5
16. H_LDUW [%sp + BIAS32 + 56], %i6
17. H_LDUW [%sp + BIAS32 + 60], %i7
18. H_RESTORED
【００３６】
ＬＤＵＷ命令は、値を、第１パラメータが指定するアドレスから第２パラメータが指定するレジスタにロードする。上に示した命令は、内容をスタックから局部レジスタと入力レジスタとにコピーする。ＲＥＳＴＯＲＥＤ命令は、ＣＡＮＲＥＳＴＯＲＥレジスタ値をインクリメントして、現行レジスタウィンドウとして復元可能なレジスタウィンドウが存在することを示す。
【００３７】
例示的な実施形態を参照して本発明を説明してきたが、通常の技能を備えた当業者であれば、形式及び細部は、添付の特許請求の範囲に画定した本発明の意図した範囲から逸脱することなく様々に変更できることは理解するはずである。
【図面の簡単な説明】
【００３８】
本発明の例示的な実施形態は、次の図面に関連して下記に説明する。
【図１】レジスタウィンドウの一例を示す。
【図２】現行ウィンドウポインタをどのように用いてレジスタウィンドウを識別するかを示す。
【図３】隣接するレジスタウィンドウ間の重複を示す。
【図４】本発明の例示的な実施形態で用いられる汎用レジスタ及び選択したレジスタウィンドウ状態レジスタを示す。
【図５】例示的な実施形態を実施するのに適したマイクロプロセッサの概略的なブロック図である。
【図６】レジスタウィンドウ溢れが差し迫っている場合に実行される諸ステップを示したフローチャートである。
【図７】差し迫ったレジスタウィンドウ溢れが起こる直前の、レジスタ状態の一例を示す。
【図８】レジスタウィンドウ溢れを回避するために実行される諸ステップを示したフローチャートである。
【図９】レジスタウィンドウ溢れトラップが回避された場合の、レジスタの状態を示す。
【図１０】溢れ／充填エンジンを更に詳細に示したブロック図である。
【図１１】レジスタウィンドウ溢れを回避するための命令発生器の部分を示す。
【図１２】例示的な実施形態における、レジスタウィンドウ充填を回避するために実行される諸ステップを示したフローチャートである。
【図１３】差し迫ったレジスタウィンドウ充填トラップが起こる直前の、レジスタ状態の一例を示す。
【図１４】例示的な実施形態における、レジスタウィンドウ充填トラップを回避するために実行される諸ステップを示したフローチャートである。
【図１５】レジスタウィンドウ充填トラップが回避された後の、レジスタ状態の例を示す。
【図１６】充填命令を生成するための命令発生器の部分をより詳細に示す。
【図１】
2005506591.tif 000003
【図２】
2005506591.tif 000004
【図３】
2005506591.tif 000005
【図４】
2005506591.tif 000006
【図５】
2005506591.tif 000007
【図６】
2005506591.tif 000008
【図７】
2005506591.tif 000009
【図８】
2005506591.tif 000010
【図９】
2005506591.tif 000011
【図１０】
2005506591.tif 000012
【図１１】
2005506591.tif 000013
【図１２】
2005506591.tif 000014
【図１３】
2005506591.tif 000015
【図１４】
2005506591.tif 000016
【図１５】
2005506591.tif 000017
【図１６】
2005506591.tif 000018
【国際公開パンフレット】
2005506591.tif 000019
2005506591.tif 000020
2005506591.tif 000021
2005506591.tif 000022
2005506591.tif 000023
2005506591.tif 000024
2005506591.tif 000025
2005506591.tif 000026
2005506591.tif 000027
2005506591.tif 000028
2005506591.tif 000029
2005506591.tif 000030
2005506591.tif 000031
2005506591.tif 000032
2005506591.tif 000033
2005506591.tif 000034
2005506591.tif 000035
2005506591.tif 000036
2005506591.tif 000037
2005506591.tif 000038
2005506591.tif 000039
2005506591.tif 000040
2005506591.tif 000041
2005506591.tif 000042
2005506591.tif 000043
2005506591.tif 000044
2005506591.tif 000045
2005506591.tif 000046
2005506591.tif 000047
2005506591.tif 000048
【国際公開パンフレット（コレクトバージョン）】
2005506591.tif 000049
【国際調査報告】
2005506591.tif 000050
2005506591.tif 000051
2005506591.tif 000052