(57)【特許請求の範囲】
【請求項１】
データを記憶する主記憶装置に接続される演算処理装置において、
データを保持するキャッシュメモリと、
使用状態を表す使用状態情報をそれぞれ保持する、定義された複数の論理レジスタの数以上の複数の物理レジスタと、
前記複数の論理レジスタのいずれかと前記複数の物理レジスタのいずれかを対応付けるとともに、対応付けられた論理レジスタと物理レジスタとの対応関係を表すレジスタ間対応情報を生成する生成部と、
前記複数の論理レジスタのいずれかを使用するレジスタ使用命令が実行される場合、前記レジスタ間対応情報に基づき、前記レジスタ使用命令が使用する論理レジスタに対応した物理レジスタを使用し、指定された論理レジスタに格納するレジスタ値を前記キャッシュメモリ又は前記主記憶装置に待避する待避命令が実行される場合、前記レジスタ間対応情報に基づき、指定された前記論理レジスタに対応する物理レジスタに格納されたレジスタ値を読み出した後、前記複数の物理レジスタがそれぞれ保持する使用状態情報に基づき、読み出した前記レジスタ値をいずれの論理レジスタとも対応付けられていない物理レジスタに格納する制御部と、
レジスタ使用命令が実行された結果、論理レジスタと物理レジスタとの対応関係が変更された場合、前記レジスタ間対応情報を更新するとともに、前記待避命令が実行された後、前記待避命令に対して指定された前記キャッシュメモリ又は前記主記憶装置のアドレスと前記制御部が読み出した前記レジスタ値が格納された物理レジスタとの対応関係をレジスタメモリ間対応情報に追加する更新部を有することを特徴とする演算処理装置。
【請求項２】
前記制御部は、
前記待避命令を実行することにより前記複数の物理レジスタのいずれかに待避したレジスタ値を、指定された論理レジスタに格納する復元命令を実行する場合、前記レジスタ間対応情報に基づき、前記待避命令によっていずれの論理レジスタとも対応付けられていなかった物理レジスタに格納したレジスタ値を読み出し、指定された前記論理レジスタに対応する物理レジスタに格納し、
前記更新部は、
前記復元命令の実行後、前記キャッシュメモリ又は前記主記憶装置のアドレスと前記制御部が読み出した前記レジスタ値が格納されていた物理レジスタとの対応関係を、前記レジスタメモリ間対応情報から削除することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置は、
前記複数の物理レジスタがそれぞれ保持する使用状態情報として、未使用、前記待避命令により待避したレジスタ値が格納されている使用状態、又は、対応付けられた論理レジスタのレジスタ値が格納されている使用状態のいずれかを有し、
前記生成部は、
前記複数の物理レジスタがそれぞれ保持する使用状態情報に基づき、未使用の物理レジスタが無く、かつ、前記待避命令により待避したレジスタ値が格納されている物理レジスタが有る場合、前記制御部が、前記待避命令により待避したレジスタ値が格納されている物理レジスタに格納されたレジスタ値を、前記待避命令に対して指定された前記キャッシュメモリ又は前記主記憶装置のアドレスに格納した後、指定された前記論理レジスタと前記対応する物理レジスタとを対応させ、
前記更新部は、
指定された前記論理レジスタと前記対応する物理レジスタとを対応させた後、前記キャッシュメモリ又は前記主記憶装置のアドレスと前記待避命令により待避したレジスタ値が格納されていた物理レジスタとの対応関係を前記レジスタメモリ間対応情報から削除することを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
データを記憶する主記憶装置に接続され、データを保持するキャッシュメモリと、使用状態を表す使用状態情報をそれぞれ保持する、定義された複数の論理レジスタの数以上の複数の物理レジスタとを有する演算処理装置の制御方法において、
前記演算処理装置が有する生成部が、前記複数の論理レジスタのいずれかと前記複数の物理レジスタのいずれかを対応付けるとともに、対応付けられた論理レジスタと物理レジスタとの対応関係を表すレジスタ間対応情報を生成し、
前記演算処理装置が有する制御部が、前記複数の論理レジスタのいずれかを使用するレジスタ使用命令が実行される場合、前記レジスタ間対応情報に基づき、前記レジスタ使用命令が使用する論理レジスタに対応した物理レジスタを使用し、指定された論理レジスタに格納するレジスタ値を前記キャッシュメモリ又は前記主記憶装置に待避する待避命令が実行される場合、前記レジスタ間対応情報に基づき、指定された前記論理レジスタに対応する物理レジスタに格納されたレジスタ値を読み出した後、前記複数の物理レジスタがそれぞれ保持する使用状態情報に基づき、読み出した前記レジスタ値をいずれの論理レジスタとも対応付けられていない物理レジスタに格納し、
レジスタ使用命令が実行された結果、論理レジスタと物理レジスタとの対応関係が変更された場合、前記演算処理装置が有する更新部が、前記レジスタ間対応情報を更新するとともに、前記待避命令が実行された後、前記待避命令に対して指定された前記キャッシュメモリ又は前記主記憶装置のアドレスと前記制御部が読み出した前記レジスタ値が格納された物理レジスタとの対応関係をレジスタメモリ間対応情報に追加する更新部を有することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、命令セットアーキテクチャに規定された論理レジスタ数以上の物理レジスタを備えた演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
従来より、プロセッサには、処理速度を向上させるための機構としてレジスタが備えられている。プロセッサによって命令が実行されると、命令の記述に応じて記憶媒体へのアクセスがおこなわれる。プロセッサでは、これら記憶媒体のうち、キャッシュや主記憶メモリと比較して、レジスタには高速にアクセスできる。この特性から、利用頻度の高い値や、再利用される値を優先的にレジスタに格納させるようなプログラムを生成する技術が（レジスタプロモーション）広く適用されている。適切なレジスタプロモーションを用いてプログラムが生成された場合、キャッシュや主記憶メモリへのアクセス回数を減少させ、高速なレジスタへのアクセス頻度を増すことによってプログラムの実行時間を短縮することができる。
【０００３】
さらに近年のプロセッサでは、プロセッサの命令セットアーキテクチャ（ＩＳＡ）に規定されている論理レジスタ数よりも多くの物理レジスタを搭載し、レジスタリネーミング機構を用いてこの物理レジスタを活用することによりプログラム実行を高速化する手法が良く用いられている。レジスタリネーミング機構では、論理レジスタ番号から物理レジスタ番号への変換が行われるが、論理レジスタ番号と物理レジスタ番号の対応は固定されておらず、その対応付けはプログラム実行時に動的におこなわれる。
【０００４】
たとえば、命令Ａ→命令Ｂの順序で同じ論理レジスタＡにアクセスする命令が実行されるとする。通常のプログラムには、命令Ａでは、論理レジスタＡに格納されているＡ値を読み出し、続いて、命令Ｂでは、論理レジスタＡにあらたにＢ値を格納するなど、同一の論理レジスタを時間軸で分割して共有させる処理が多々含まれる。
【０００５】
レジスタリネーミング機構を備えた場合、上述のようにプログラム記述では共有された論理レジスタにそれぞれ異なる物理レジスタを対応させる。すなわち、命令ＡにおいてＡ値を読み出す論理レジスタＡと、命令ＢにおいてＢ値を格納する論理レジスタＡとにそれぞれ異なる物理レジスタを割り当てる。命令ごとに異なる物理レジスタが設定されたことによって、命令Ｂは命令Ａの終了を待たずにＢ値の格納処理をおこなうことができ、プログラムの並列性を高めることができる（たとえば、下記特許文献１参照。）。
【０００６】
【特許文献１】特開２００１−２２９０２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来のようにレジスタプロモーションをおこなったとしても、レジスタ数は限度があるため、必要なすべての値をレジスタに格納することはできない。したがって、再利用される予定のある値であっても、レジスタ数の不足によりキャッシュや主記憶メモリに格納しなければならず、プログラムの実行速度が低下してしまうという問題があった。
【０００８】
レジスタが不足した場合、一般的にはレジスタスピルと呼ばれる処理がおこなわれる。レジスタスピルは、レジスタに記録されていた値をキャッシュや主記憶メモリのスタック領域に待避（ストア）し、また、同じ値が必要になったときには、待避させたスタック領域から元のレジスタに復元（ロード）する処理である。したがって、レジスタスピルが発生するとキャッシュや主記憶へのアクセス（ストア／ロード）が必要となり、結果としてプログラム実行時間は長くなってしまうという問題があった。
【０００９】
レジスタスピルを削減するには、レジスタ数を増加させる方法が有効である。しかしながら、プロセッサの命令セットアーキテクチャは、特定のレジスタ数に基づいて構築されているため、レジスタ数を増加した場合には、命令セットアーキテクチャを大幅に変更する必要がある。このような命令セットアーキテクチャの大幅な変更は、現実的には困難である。
【００１０】
また、上記特許文献１の場合、レジスタリネーミングによってプログラムの実行速度は向上するが、命令に記述されたレジスタ値がすべてリネーミング対象となるため、論理レジスタ数よりも物理レジスタ数が多いにもかかわらず物理レジスタが枯渇しやすいという問題があった。
【００１１】
この発明は、上述した従来技術による問題点を解消するため、レジスタスピルが発生してもプログラムの実行速度の低下を防ぐことのできる演算処理装置および演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、このプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムは、命令セットアーキテクチャに規定された論理レジスタ数以上の物理レジスタを備え、前記論理レジスタを前記物理レジスタに変換するレジスタリネーミング機構を備え、前記論理レジスタと前記物理レジスタとの対応付けをあらわす対応情報を管理し、前記論理レジスタと前記物理レジスタとの対応が変更された場合には前記対応情報を更新する機能を備えることを要件とする。さらに、指定された論理レジスタに格納された値をキャッシュ・主記憶などの記憶媒体に待避させる待避命令が実行された場合に、前記対応情報を参照して前記指定された論理レジスタに対応した物理レジスタに格納された値を読み出し、当該読み出した値を、その時に使用されていない空いている物理レジスタに格納し、前記格納の際には、前記待避命令実行後に前記他の記憶媒体のアドレスと、あらたに値が格納された物理レジスタとの対応を前記対応情報に追加する。
【００１３】
このプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムによれば、レジスタスピルに相当する待避命令が実行された場合に、実際には待避命令で指定されているアドレス、すなわちキャッシュ・主記憶などの記憶媒体に値を格納することなく、物理レジスタの中の空いている物理レジスタに値を格納する。そして、あらたに値が格納された物理レジスタと、待避命令で指定されているアドレスとの対応を対応情報に追加するため、命令セットアーキテクチャを大幅に変更することなく利用できる。
【００１４】
また、上記のプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムは、前記待避命令によって待避させた値をあらたに指定された論理レジスタに格納させる待避値復元命令が実行された場合、前記対応情報を参照して前記待避命令によって前記物理レジスタに格納された値を読み出し、当該読み出した値を前記あらたに指定された論理レジスタに対応した物理レジスタに格納し、前記更新の際には、前記待避値復元命令の実行後、前記アクセス制御手段によって、前記格納された値が読み出された物理レジスタと、前記他の記憶媒体のアドレスとの対応を前記対応情報から削除してもよい。
【００１５】
このプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムによれば、事前に実行されたレジスタ値を待避する待避命令によって物理レジスタに格納されていた値を読み出し、待避値復元命令によって指定された論理レジスタに対応する物理レジスタに格納する。ここで実行される待避値復元命令には、レジスタ値が待避されている場所として主記憶等のアドレスが記述されているが、対応情報を参照することによって待避値が格納された物理レジスタから値を復元することができる。
【００１６】
また、上記のプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムは、前記待避命令が実行された場合、その時点で使用されていない空いている物理レジスタがなければ、前記指定された論理レジスタに対応する物理レジスタに格納された値を前記他の記憶媒体に格納してもよい。
【００１７】
このプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムによれば、待避命令が実行された場合であっても、空いている物理レジスタがなければ、待避命令の記述通り、他の記憶媒体に値を格納する。
【００１８】
また、上記のプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムは、各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出し、さらに使用の場合は、前記レジスタリネーミングによって論理レジスタに対応させた値が格納されている、もしくは、前記待避命令によって待避させられた値が格納されているかを検出する処理を備え、レジスタリネーミングの際に未使用であると検出された物理レジスタがない場合には、前記物理レジスタに格納されていた値を前記待避命令に記述されていた前記他の記憶媒体に格納させた後、前記物理レジスタと、前記論理レジスタとを対応させ、前記レジスタリネーミング実行後、前記他の記憶媒体のアドレスと、前記物理レジスタとの対応を前記対応情報から削除してもよい。
【００１９】
このプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムによれば、レジスタリネーミングの際に空いている物理レジスタがなければ、待避値が格納されていた物理レジスタを優先的にレジスタリネーミングに利用する。このとき、物理レジスタに格納されていた待避値は、待避命令に記述されていた他の記憶媒体に格納される。
【００２０】
また、上記のプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムは、前記待避値復元命令が実行されたにもかかわらず、前記待避命令によって前記物理レジスタに格納された値がなければ、前記待避値復元命令に記述されている他の記憶媒体のアドレスに格納されている値を読み出してもよい。
【００２１】
このプロセッサ、レジスタアクセス方法およびレジスタアクセスプログラムによれば、
前記待避値復元命令が実行されたにもかかわらず、前記待避命令によって前記物理レジスタに格納された値がなければ、待避値は他の記憶媒体に格納されているため、この記憶媒体から待避値を読み出す。
【発明の効果】
【００２２】
この演算処理装置および演算処理装置の制御方法によれば、レジスタスピルが発生してもプログラムの実行速度の低下を防ぐことができるという効果を奏する。
【発明を実施するための最良の形態】
【００２３】
以下に添付図面を参照して、この演算処理装置および演算処理装置の制御方法の好適な実施の形態を詳細に説明する。
【００２４】
（レジスタアクセス処理の概要）
まず、本実施の形態にかかるレジスタアクセス処理の概要を説明する。図１は、本実施の形態にかかるレジスタアクセス処理の概要を示す説明図である。図１のようにプロセッサ内部では、実行プログラム１０１に記述された命令が順次実行される。実行プログラム１０１のうち、レジスタにアクセスする命令の場合、アクセス先のレジスタ名が記述されており、これらの仮想的なレジスタを論理レジスタ１１０とよぶ。なお、ここでは論理レジスタ数を１６とする。
【００２５】
また、本実施の形態では、プロセッサには、論理レジスタ１１０数よりも多い物理レジスタ１２０が実装されている。この物理レジスタ１２０にはレジスタリネーミングによって論理レジスタ１１０との対応付けがなされている。ここでは物理レジスタ数を６４とする。また、レジスタリネーミングの説明の際に例示したように、論理レジスタと物理レジスタとの対応付けは動的におこなわれ、時間経過にともなって対応付けは変更される。レジスタリネーミングによる論理レジスタと物理レジスタとの対応情報は対応表１４０としてプロセッサに保持されている。
【００２６】
ここで、実行プログラム１０１において、レジスタ値を待避する待避命令が実行されたとする。待避命令には論理レジスタ１１０のＬレジスタ０に格納されている値をキャッシュ・主記憶メモリ（レジスタ以外の他の記憶領域）１３０のアドレスＸに格納するように記述されている。なお、論理レジスタ１１０のＬレジスタ０に格納されている値とは、実際にはレジスタリネーミングによってＬレジスタ０に対応付けられた物理レジスタ：Ｐレジスタ００に格納されている値である。従来は、待避命令の記述通りにＬレジスタ０（Ｐレジスタ００）に格納されている値をキャッシュ・主記憶メモリ１３０に格納していた。
【００２７】
しかしながら、本実施の形態の場合、物理レジスタ１２０のうち、レジスタリネーミングによって論理レジスタ１１０との対応付けがされていない物理レジスタに、Ｌレジスタ０に格納されている値を格納する。図１の場合、物理レジスタ１２０のうち、ＰレジスタＸＸは、論理レジスタとの対応付けがされておらず、“空いた”状態であった。したがって、通常ならＬレジスタ０からアドレスＸに待避される値（待避値）は、ＰレジスタＸＸに格納され、待避命令の処理が完了する。また、このとき待避命令に記述されていたアドレスＸとＰレジスタＸＸとが対応付けられたことを対応表１４０に反映させる。
【００２８】
このようにして、本実施の形態の場合、本来であればキャッシュ・主記憶メモリ１３０のアドレスＸにアクセスしなければならなかった処理が、物理レジスタ１２０にアクセスすることによって完了する。したがって、待避命令の実行に伴うアクセス時間増を防ぐことができる。以下、上述したレジスタアクセス処理を実現するための具体的な構成や処理内容について説明する。
【００２９】
（プロセッサの構成）
まず、本実施の形態にかかるレジスタアクセス処理をおこなうためのプロセッサの構成について説明する。なお、プロセッサの構成のうち、レジスタアクセス処理に関連する部分を抽出して説明する。また、プロセッサ内部の他の構成は周知であるためここでは説明を省略する。
【００３０】
図２は、プロセッサの構成の概要を示すブロック図である。図２のように、プロセッサ２００は、本実施の形態にかかるレジスタアクセス処理を実行するための構成として命令キャッシュ２０１と、デコード部２０２と、リネーム部２０３と、スケジュール部２０４と、実行部２０５とを備えている。
【００３１】
命令キャッシュ２０１には、プロセッサ２００によって実行される命令が格納されており、プロセッサ２００が実行指示を受け付けると、命令をデコード部２０２に入力する。デコード部２０２では、入力された命令をデコードし、デコードした命令をリネーム部２０３に入力する。
【００３２】
リネーム部２０３は、本実施の形態にかかるレジスタアクセス処理を実現するための機能である。図３は、リネーム部の構成を示すブロック図である。図３のように、リネーム部２０３は、リネーム制御部３０１と、論理レジスタ−物理レジスタ対応表３０２と、アドレス−物理レジスタ対応表３０３と、物理レジスタ状態表３０４とから構成されている。
【００３３】
リネーム制御部３０１には、基本機能として、論理レジスタ１１０番号を物理レジスタ１２０番号に変換するリネーム処理機能と、必要に応じて論理レジスタ１１０と物理レジスタ１２０との対応付けを更新する更新処理機能とを備えている。リネーム制御部３０１によって対応付けられた論理レジスタ１１０と物理レジスタ１２０との対応情報は、論理レジスタ−物理レジスタ対応表３０２として保存されている。
【００３４】
また、リネーム制御部３０１は、上述した基本処理に加え、本実施の形態の特徴である待避命令の実行時には、待避命令に記述されたキャッシュ・主記憶メモリ１３０のアドレスと、値を格納する物理レジスタ１２０との対応付けがおこなわれる。リネーム制御部３０１によって対応付けられたキャッシュ・主記憶メモリ１３０のアドレスと物理レジスタ１２０との対応情報は、アドレス−物理レジスタ対応表３０３として保存されている。
【００３５】
さらに、リネーム制御部３０１は、物理レジスタ１２０の使用状態を管理する機能を備えており、物理レジスタ１２０の使用状態は、物理レジスタ状態表３０４として保存されている。なお、物理レジスタ状態表３０４の用途については詳しく後述する。
【００３６】
以上説明したようにリネーム部２０３によって変換された命令は、スケジュール部２０４によって実行タイミングが調整されたのち、実行部２０５に入力される。実行部２０５は、入力された命令を実行する。
【００３７】
（コンパイラによる待避命令の生成）
つぎに、プロセッサ２００によって実行される実行プログラム１０１を生成するコンパイラについて説明する。上述したように、プロセッサ２００の命令キャッシュ２０１から読み出される命令には待避命令が含まれている。この待避命令とは、具体的には、物理レジスタ１２０に格納されていた値をキャッシュ・主記憶メモリ１３０に待避させる命令と、この待避命令によってキャッシュ・主記憶メモリ１３０に待避された値を再び物理レジスタ１２０に復元させる命令との双方をさす。ここでは、専用のコンパイラを用いて待避命令を含む実行プログラム１０１を生成する手法について説明する。
【００３８】
図４は、コンパイラによる待避命令の生成手順を示す説明図である。図４のように、コンパイラ４１０には、ソースファイル４０１が入力される。通常のコンパイラと同様にコンパイラ４１０では、各種ルーチンを用いて入力されたソースファイル４０１をコンパイルして実行プログラム１０１を生成する。コンパイラ４１０にはこれら各種ルーチンの中にレジスタ値待避・復元命令生成ルーチンが含まれている。
【００３９】
このレジスタ値待避・復元命令生成ルーチンは、対応表４１１に記載されているように、レジスタ値をスタックへ待避する命令として従来ならｓｔｏｒｅ命令を生成する代わりにｓｐｉｌｌ−ｓｔｏｒｅ命令を生成し、レジスタ値をスタックから復元する命令として従来ならｌｏａｄ命令を生成する代わりにｓｐｉｌｌ−ｌｏａｄ命令を生成する。このようにレジスタ値待避・復元命令生成ルーチンによって待避命令が生成されることによって待避命令を含んだ実行プログラム１０１が生成される。このようにコンパイラ４１０を利用することにより、レジスタ値待避・復元命令生成ルーチンの設定変更よって待避命令の生成条件をユーザが容易に調整することができるという利点がある。
【００４０】
（待避命令を含んだレジスタアクセス処理：基本処理）
つぎに、上述した構成のプロセッサ２００によって実行される待避命令を含んだレジスタアクセス処理について説明する。図５は、待避命令を含むレジスタアクセス処理の一例を示す説明図である。
【００４１】
図５では、まず、命令ｓｐｉｌｌ−ｓｔｏｒｅ  ｒｅｇ−Ａ  ［ａｄｄｒ−Ｘ］が実行される。図４にて説明したように、ｓｐｉｌｌ−ｓｔｏｒｅ命令はレジスタ値を待避させる命令である。通常、レジスタ値を待避させるとキャッシュ・主記憶メモリ１３０にレジスタ値を格納することになる。しかしながら、ｓｐｉｌｌ−ｓｔｏｒｅ命令ではキャッシュ・主記憶メモリ１３０の替わりに物理レジスタ１２０のなかのレジスタリネーミングに利用されていない物理レジスタにレジスタ値を格納する。図５の、命令ｓｐｉｌｌ−ｓｔｏｒｅ  ｒｅｇ−Ａ  ［ａｄｄｒ−Ｘ］の実行では、ｒｅｇ−Ａの値は物理レジスタ１７に格納される。この待避処理は命令実行後、即座にアドレス−物理レジスタ対応表３０３に反映される。
【００４２】
図５では、その後、命令ｓｐｉｌｌ−ｌｏａｄ  ［ａｄｄｒ−Ｘ］  ｒｅｇ−Ｂが実行される。図４にて説明したように、ｓｐｉｌｌ−ｌｏａｄ命令はｓｐｉｌｌ−ｓｔｏｒｅ命令で待避したレジスタ値を復元する命令である。ここでは、アドレス−物理レジスタ対応表３０３に示すようにｓｐｉｌｌ−ｓｔｏｒｅがａｄｄｒ−Ｘに待避した値は物理レジスタ１７に格納されているので、ｒｅｇ−Ｂを物理レジスタ１７に対応付ける。もしくは、物理レジスタ１７に格納されている値を読み出してｒｅｇ−Ｂに対応付けられた物理レジスタに格納する。
【００４３】
以上説明した処理が、待避命令を含んだレジスタアクセス処理のなかでも基本処理となる。このように、命令列にはキャッシュ・主記憶メモリ１３０のアドレスが記述されているにもかかわらず、キャッシュ・主記憶メモリ１３０にアクセスすることなく処理を終了することができる。
【００４４】
（待避命令を含んだレジスタアクセス処理：例外処理）
つぎに、実行プログラム１０１の実行に伴い、上述した基本処理以外の例外的な事象が発生した場合の処理について説明する。
【００４５】
１）待避命令実行時の物理レジスタが不足した場合
まず、例外処理として、待避命令実行時に物理レジスタが不足した場合の処理がある。たとえば、命令ｓｐｉｌｌ−ｓｔｏｒｅ  ｒｅｇ−Ａ  ［ａｄｄｒ−Ｘ］が実行されたとする。この場合、キャッシュ・主記憶メモリ１３０に替わる物理レジスタ１２０の割り当てはおこなわない。そして、ｒｅｇ−Ａに格納された値をそのままキャッシュ・主記憶メモリ１３０のａｄｄｒ−Ｘに格納する。このときアドレス−物理レジスタ対応表３０３を更新する必要はない。
【００４６】
２）レジスタリネーミング実行時の物理レジスタが不足した場合
つぎの例外処理として、レジスタリネーミング実行時に物理レジスタが不足した場合の処理がある。この場合、待避命令によってキャッシュ・主記憶メモリ１３０に替わって待避値が格納された物理レジスタ１２０を解放する。
【００４７】
図６は、物理レジスタ不足時の待避値の格納処理を示す説明図である。図６のアドレス−物理レジスタ対応表３０３に示されているように、通常ならキャッシュ・主記憶メモリ１３０のａｄｄｒ−Ｘに格納される値が、物理レジスタ１７に格納されている。物理レジスタ１７を解放する場合には、物理レジスタ１７に格納されていた値は、通常の格納先であるキャッシュ・主記憶メモリ１３０のａｄｄｒ−Ｘに格納される。物理レジスタ１７の解放後、アドレス−物理レジスタ対応表３０３のなかのａｄｄｒ−Ｘと物理レジスタ１７との対応情報はクリアされる。
【００４８】
３）待避値が物理レジスタに格納されていない
つぎの例外処理として、待避値復元命令に対応した待避値が物理レジスタ１２０に格納されていない場合の処理がある。たとえば、命令ｓｐｉｌｌ−ｌｏａｄ  ［ａｄｄｒ−Ｘ］  ｒｅｇ−Ｂが実行されたとする。この場合、待避値は、物理レジスタ１２０には格納されていないと判断される。したがって、通常のｌｏａｄ命令と同様にキャッシュ・主記憶メモリ１３０のａｄｄｒ−Ｘに格納されている値を読み出す。このときもアドレス−物理レジスタ対応表３０３を更新する必要はない。
【００４９】
（物理レジスタの使用状態フラグ）
上述したように、基本処理の場合には、複数のレジスタから構成される物理レジスタ１２０の中から空いているレジスタを見つけ出し、待避用のレジスタとして割り当てなければならない。また、例外処理２）が発生した場合もまた、物理レジスタ１２０の中から待避値が格納されているレジスタを見つけ出し、レジスタリネーミング用に解放しなければならない。
【００５０】
本実施の形態では、物理レジスタ１２０の中から使用状態に応じて必要なレジスタを見つけ出すための手法として、物理レジスタの使用状態フラグを利用する。図７は、物理レジスタの状態フラグの設定を示す説明図である。図７のように、物理レジスタ１２０を構成する各レジスタにはそれぞれ、２値の状態フラグが付与されている。状態フラグは「００，０１，１０」との３種があり、００＝未使用、０１＝レジスタリネーミングによる使用、１０＝待避命令による使用をあらわしている。
【００５１】
たとえば、レジスタリネーミングが実行された場合には、まず状態フラグ００のレジスタを探す。図７の場合であれば、状態フラグ００のＰレジスタ１３が見つけ出され、レジスタリネーミングに利用される。また、上述の例外処理２）のように状態フラグ００のレジスタがなかった場合には、状態フラグ１０のレジスタが見つけ出され、レジスタリネーミングに利用される。
【００５２】
また、待避命令が実行された場合も、まず状態フラグ００のレジスタを探す。図８は、物理レジスタへの格納例を示す説明図である。図８のように、物理レジスタ１２０に状態フラグ００のレジスタがあれば（ここでは、Ｐレジスタ１２、１３）、これらのレジスタのうちいずれかのレジスタに待避値が格納される。図８では、Ｐレジスタ１２に待避値が格納されたため、Ｐレジスタ１２の状態フラグは１０に更新される。また、待避値復元命令が実行された場合、論理レジスタ１１０と対応付けされた物理レジスタ１２０に値が格納されるため、状態フラグは０１に更新される。
【００５３】
この状態フラグは、図３にて説明した物理レジスタ状態表３０４に一括して格納される。したがって、実行させる処理（レジスタリネーミング、待避命令など）に応じて所望する状態の物理レジスタ１２０を見つけ出したい場合には、物理レジスタ状態表３０４を参照すればよい。また、状態フラグを物理レジスタ状態表３０４に格納することによって、物理レジスタ１２０の記録可能ビット数を減少させることなく、状態フラグを利用することができる。
【００５４】
以上説明したように、本実施の形態によれば、プロセッサ２００によって命令実行時に、物理レジスタよりもアクセス速度の劣るキャッシュや主記憶メモリへのアクセスを最小限に抑えるため、可能な限り物理レジスタ１２０を利用させるレジスタアクセス処理がおこなわれる。したがって、レジスタスピルが発生してもプログラムの実行速度の低下を防ぐことができる。
【００５５】
なお、本実施の形態で説明したレジスタアクセス方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記憶媒体に記録され、コンピュータによって記憶媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【００５６】
また、本実施の形態で説明したプロセッサ２００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述したプロセッサ２００の機能（機能ブロックの各符号を入れる）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、プロセッサ２００を製造することができる。
【００５７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００５８】
（付記１）命令セットアーキテクチャに規定された論理レジスタ数以上の物理レジスタと、
前記論理レジスタと前記物理レジスタとを対応付けるレジスタリネーミングをおこない、前記論理レジスタと前記物理レジスタとの対応付けをあらわす対応情報を生成するリネーミング制御手段と、
前記命令セットアーキテクチャの中の命令が実行され、前記論理レジスタと、前記物理レジスタとの対応が変更された場合に、前記対応情報を更新する更新手段と、
前記命令セットアーキテクチャの中の命令のうち、いずれかの論理レジスタへのアクセスに関する命令を実行する際に、前記更新手段によって更新された対応情報を参照して前記論理レジスタに対応した物理レジスタへアクセスするアクセス制御手段と、を備え、
前記アクセス制御手段は、指定された論理レジスタに格納された値を当該論理レジスタから前記物理レジスタよりもアクセス速度の劣る他の記憶媒体に待避させる待避命令が実行された場合に、前記対応情報を参照して前記指定された論理レジスタに対応した物理レジスタに格納された値を読み出し、当該読み出した値を、いずれの論理レジスタとも対応付けのされていない物理レジスタに格納し、
前記更新手段は、前記待避命令実行後に前記他の記憶媒体のアドレスと、前記アクセス制御手段によって前記読み出した値が格納された物理レジスタとの対応を前記対応情報に追加することを特徴とするプロセッサ。
【００５９】
（付記２）前記アクセス制御手段は、前記命令セットアーキテクチャのうち、前記待避命令によって待避させた値をあらたに指定された論理レジスタに格納させる待避値復元命令が実行された場合に、前記対応情報を参照して前記待避命令によって前記物理レジスタに格納された値を読み出し、当該読み出した値を前記あらたに指定された論理レジスタに対応した物理レジスタに格納し、
前記更新手段は、前記待避値復元命令の実行後、前記アクセス制御手段によって、前記格納された値が読み出された物理レジスタと、前記他の記憶媒体のアドレスとの対応を前記対応情報から削除することを特徴とする付記１に記載のプロセッサ。
【００６０】
（付記３）前記アクセス制御手段は、前記待避命令が実行された場合に、いずれの論理レジスタとも対応付けのされていない物理レジスタがなければ、前記指定の論理レジスタに格納された値を前記他の記憶媒体に格納することを特徴とする付記１または２に記載のプロセッサ。
【００６１】
（付記４）各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出する検出手段を備え、
前記リネーミング制御手段は、前記命令に記述された論理レジスタと、前記検出手段によって未使用であると検出された物理レジスタとを対応させることを特徴とする付記１〜３のいずれか一つに記載のプロセッサ。
【００６２】
（付記５）前記アクセス制御手段は、前記待避値復元命令が実行されたにもかかわらず、前記待避命令によって前記物理レジスタに格納された値がなければ、前記待避値復元命令に記述されている他の記憶媒体のアドレスに格納されている値を読み出すことを特徴とする付記２〜４のいずれか一つに記載のプロセッサ。
【００６３】
（付記６）各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出し、さらに使用の場合は、前記レジスタリネーミングによって論理レジスタに対応させた値が格納されている、もしくは、前記待避命令によって待避させられた値が格納されているかを検出する検出手段を備え、
前記リネーミング制御手段は、前記検出手段によって未使用であると検出された物理レジスタがない場合、前記アクセス制御手段によって、前記物理レジスタに格納されていた値を前記待避命令に記述されていた前記他の記憶媒体に格納させた後、前記物理レジスタと、前記論理レジスタとを対応させ、
前記更新手段は、前記レジスタリネーミング実行後、前記他の記憶媒体のアドレスと、前記物理レジスタとの対応を前記対応情報から削除することを特徴とする付記１〜５のいずれか一つに記載のプロセッサ。
【００６４】
（付記７）命令セットアーキテクチャに規定された論理レジスタ数以上の物理レジスタを備えたプロセッサにおけるレジスタアクセス方法であって、
前記論理レジスタと前記物理レジスタとを対応付けるレジスタリネーミングをおこない、前記論理レジスタと前記物理レジスタとの対応付けをあらわす対応情報を生成するリネーミング工程と、
前記命令セットアーキテクチャに記述された命令を順次実行する実行工程と、
前記実行工程によって、指定された論理レジスタに格納された値を当該論理レジスタから前記物理レジスタよりもアクセス速度の劣る他の記憶媒体に待避させる待避命令が実行された場合に、前記対応情報を参照して前記指定された論理レジスタに対応した物理レジスタに格納された値を読み出し、当該読み出した値を、いずれの論理レジスタとも対応付けのされていない物理レジスタに格納する待避値格納工程と、
前記待避値格納工程によって読み出した値が格納された物理レジスタと、前記他の記憶媒体のアドレスとの対応を含んだ情報を前記対応情報に追加する追加工程と、
を含むことを特徴とするレジスタアクセス方法。
【００６５】
（付記８）前記待避値格納工程によって前記読み出した値が格納された後、前記実行工程によって前記待避させた値をあらたに指定された論理レジスタに格納させる待避値復元命令が実行された場合、
前記追加工程によって対応が追加された対応情報を参照して、前記待避値格納工程によって前記物理レジスタに格納された値を読み出し、当該読み出した値を前記あらたに指定された論理レジスタに対応した物理レジスタに格納する待避値復元工程と、
前記待避値復元工程によって、前記格納された値が読み出された物理レジスタと、前記他の記憶媒体のアドレスとの対応を前記対応情報から削除する削除工程とを、
含むことを特徴とする付記７に記載のレジスタアクセス方法。
【００６６】
（付記９）前記待避値格納工程は、いずれの論理レジスタとも対応付けのされていない物理レジスタがない場合、前記指定された論理レジスタに格納された値を前記他の記憶媒体に格納することを特徴とする付記７または８に記載のレジスタアクセス方法。
【００６７】
（付記１０）前記リネーミング工程の前段に、各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出する検出工程を含み、
前記リネーミング工程は、前記命令セットアーキテクチャに記述された論理レジスタと、前記検出工程によって未使用であると検出された物理レジスタとを対応させることを特徴とする付記７〜９のいずれか一つに記載のレジスタアクセス方法。
【００６８】
（付記１１）前記待避値復元工程は、前記実行工程によって前記待避値復元命令が実行されたにもかかわらず、前記待避命令によって前記物理レジスタに格納された値がなければ、前記待避値復元命令に記述されている他の記憶媒体のアドレスに格納されている値を読み出すことを特徴とする付記８〜１０のいずれか一つに記載のレジスタアクセス方法。
【００６９】
（付記１２）前記リネーミング工程の前段に、各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出し、さらに使用の場合は、前記レジスタリネーミングによって論理レジスタに対応させた値が格納されている、もしくは、前記待避命令によって待避させられた値が格納されているかを検出する検出工程を含み、
各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出し、さらに使用の場合は、前記レジスタリネーミングによって論理レジスタに対応させた値が格納されている、もしくは、前記待避命令によって待避させられた値が格納されているかを検出する検出工程を備え、
前記リネーミング工程では、前記検出工程によって未使用であると検出された物理レジスタがない場合、前記物理レジスタに格納されていた値を前記待避命令に記述されていた前記他の記憶媒体に格納させた後、前記物理レジスタと、前記論理レジスタとを対応させ、
さらに、前記リネーミング工程によるレジスタリネーミング実行後、前記他の記憶媒体のアドレスと、前記物理レジスタとの対応を前記対応情報から削除する削除工程を含むことを特徴とする付記７〜１１のいずれか一つに記載のレジスタアクセス方法。
【００７０】
（付記１３）命令セットアーキテクチャに規定された論理レジスタ数以上の物理レジスタを備えたプロセッサおける前記物理レジスタへのアクセスをコンピュータに制御させるレジスタアクセスプログラムであって、
前記コンピュータを、
前記論理レジスタと前記物理レジスタとを対応付けるレジスタリネーミングをおこない、前記論理レジスタと前記物理レジスタとの対応付けをあらわす対応情報を生成するリネーミング制御手段、
前記命令セットアーキテクチャの中の命令が実行され、前記論理レジスタと、前記物理レジスタとの対応が変更された場合に、前記命令実行後に前記対応情報を更新する更新手段、
前記命令セットアーキテクチャの中の命令のうち、いずれかの論理レジスタへのアクセスに関する命令を実行する際に、前記更新手段によって更新された対応情報を参照して前記論理レジスタに対応した物理レジスタへアクセスするアクセス制御手段、として機能させ、
さらに、前記アクセス制御手段は、指定された論理レジスタに格納された値を当該論理レジスタから前記物理レジスタよりもアクセス速度の劣る他の記憶媒体に待避させる待避命令が実行された場合に、前記対応情報を参照して前記指定された論理レジスタに対応した物理レジスタに格納された値を読み出し、当該読み出した値を、いずれの論理レジスタとも対応付けのされていない物理レジスタに格納し、
前記更新手段は、前記待避命令実行後に前記他の記憶媒体のアドレスと、前記アクセス制御手段によって前記読み出した値が格納された物理レジスタとの対応を前記対応情報に追加することを特徴とするレジスタアクセスプログラム。
【００７１】
（付記１４）前記アクセス制御手段は、前記命令セットアーキテクチャのうち、前記待避命令によって待避させた値をあらたに指定された論理レジスタに格納させる待避値復元命令が実行された場合に、前記対応情報を参照して前記待避命令によって前記物理レジスタに格納された値を読み出し、当該読み出した値を前記あらたに指定された論理レジスタに対応した物理レジスタに格納し、
前記更新手段は、前記待避値復元命令の実行後、前記アクセス制御手段によって、前記格納された値が読み出された物理レジスタと、前記他の記憶媒体のアドレスとの対応を前記対応情報から削除することを特徴とする付記１３に記載のレジスタアクセスプログラム。
【００７２】
（付記１５）前記アクセス制御手段は、前記待避命令が実行された場合に、いずれの論理レジスタとも対応付けのされていない物理レジスタがなければ、前記指定の論理レジスタに格納された値を前記他の記憶媒体に格納することを特徴とする付記１３または１４に記載のレジスタアクセスプログラム。
【００７３】
（付記１６）前記コンピュータを、
さらに、各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出する検出手段として機能させ、
前記リネーミング制御手段は、前記命令セットアーキテクチャに記述された論理レジスタと、前記検出手段によって未使用であると検出された物理レジスタとを対応させることを特徴とする付記１３〜１５のいずれか一つに記載のレジスタアクセスプログラム。
【００７４】
（付記１７）前記アクセス制御手段は、前記待避値復元命令が実行されたにもかかわらず、前記待避命令によって前記物理レジスタに格納された値がなければ、前記待避値復元命令に記述されている他の記憶媒体のアドレスに格納されている値を読み出すことを特徴とする付記１４〜１６のいずれか一つに記載のレジスタアクセスプログラム。
【００７５】
（付記１８）前記コンピュータを、
さらに、各物理レジスタの使用状態が、未使用または使用のいずれであるかを検出し、さらに使用の場合は、前記レジスタリネーミングによって論理レジスタに対応させた値が格納されている、もしくは、前記待避命令によって待避させられた値が格納されているかを検出する検出手段として機能させ、
前記リネーミング制御手段は、前記検出手段によって未使用であると検出された物理レジスタがない場合、前記アクセス制御手段によって、前記物理レジスタに格納されていた値を前記待避命令に記述されていた前記他の記憶媒体に格納させた後、前記物理レジスタと、前記論理レジスタとを対応させ、
前記更新手段は、前記レジスタリネーミング実行後、前記他の記憶媒体のアドレスと、前記物理レジスタとの対応を前記対応情報から削除することを特徴とする付記１３〜１７のいずれか一つに記載のレジスタアクセスプログラム。
【図面の簡単な説明】
【００７６】
【図１】本実施の形態にかかるレジスタアクセス処理の概要を示す説明図である。
【図２】プロセッサの構成の概要を示すブロック図である。
【図３】リネーム部の構成を示すブロック図である。
【図４】コンパイラによる待避命令の生成手順を示す説明図である。
【図５】待避命令を含むレジスタアクセス処理の一例を示す説明図である。
【図６】物理レジスタ不足時の待避値の格納処理を示す説明図である。
【図７】物理レジスタの状態フラグの設定を示す説明図である。
【図８】物理レジスタへの格納例を示す説明図である。
【符号の説明】
【００７７】
１１０  論理レジスタ
１２０  物理レジスタ
２００  プロセッサ
２０１  命令キャッシュ
２０２  デコード部
２０３  リネーム部
２０４  スケジュール部
２０５  実行部
３０１  リネーム制御部
３０２  論理レジスタ−物理レジスタ対応表
３０３  アドレス−物理レジスタ対応表
３０４  物理レジスタ状態表
【図１】
0005303943.tif 000002
【図２】
0005303943.tif 000003
【図３】
0005303943.tif 000004
【図４】
0005303943.tif 000005
【図５】
0005303943.tif 000006
【図６】
0005303943.tif 000007
【図７】
0005303943.tif 000008
【図８】
0005303943.tif 000009