(57)【特許請求の範囲】
【請求項１】
データを処理するための処理回路と、
プログラム命令のシーケンスに含まれるプログラム命令に応答して、前記データ処理を行う前記処理回路を制御するための制御信号を生成する命令デコーダと、
を備え、前記プログラム命令のシーケンスは、ある命令サイズを有するアドレス計算命令を含み、前記命令デコーダは、情報エンティティのメモリ場所を指定するフルアドレスが、少なくとも１つの補助プログラム命令を使用して、部分的アドレス結果から計算可能であるように、前記アドレス計算命令に応答して、前記処理回路を制御するための制御信号を生成し、前記アドレス計算命令に応答して生成された制御信号に応答して、前記処理回路は、前記部分的アドレス結果を非固定基準アドレスおよび部分的オフセット値から計算するためのアドレス計算演算を行い、前記部分的オフセット値は、前記命令サイズ以上のビット幅を有し、前記アドレス計算命令の少なくとも１つの部分的オフセットフィールド内でエンコードされ、
前記プログラム命令のシーケンスは、前記フルアドレスが、前記アドレス計算命令および前記少なくとも１つの補助プログラム命令を備える、少なくとも２つのプログラム命令を備えるセットの実行によって得られるように、前記少なくとも１つの補助プログラム命令を含み、
前記フルアドレスは、フルオフセット値および前記非固定基準アドレスによって指定され、前記少なくとも１つの補助プログラム命令は、前記部分的オフセット値および補助オフセット値の両方に基づいて、前記フルオフセット値を指定するように、前記補助オフセット値を提供する、データ処理装置。
【請求項２】
前記補助オフセット値は、前記少なくとも１つの補助プログラム命令の少なくとも１つの補助オフセットフィールド内でエンコードされる、請求項１に記載のデータ処理装置。
【請求項３】
前記部分的オフセット値は、前記フルオフセット値の第１の部分を形成し、前記補助オフセット値は、前記フルオフセット値のさらなる部分を形成する、請求項１に記載のデータ処理装置。
【請求項４】
前記フルオフセット値のビット幅は、前記命令サイズ以上である、請求項１に記載のデータ処理装置。
【請求項５】
前記フルオフセット値は、３３ビット符号付きオフセットであって、前記命令サイズは、３２ビットである、請求項２に記載のデータ処理装置。
【請求項６】
前記データ処理装置は、所定のフレームサイズの複数のメモリフレームを有する仮想アドレス空間へのアクセスを有し、前記部分的オフセット値は、前記非固定基準アドレスに対して、前記情報エンティティを含有するフレームのためのフレームベースアドレスを指定するフレームオフセット値である、請求項１から５のいずれか１項に記載のデータ処理装置。
【請求項７】
前記部分的オフセット値は、前記少なくとも１つの部分的オフセットフィールドにおけるエンコーディングから得られ、前記少なくとも１つの部分的オフセットフィールドの組み合わせられたビット幅を上回るビット幅を有する、請求項６に記載のデータ処理装置。
【請求項８】
前記部分的オフセット値は、前記少なくとも１つの部分的オフセットフィールドにおける前記エンコーディングに基づくビット列と、所定のビット幅を有するゼロの値の列からなるビット列の両方により示される値である、請求項７に記載のデータ処理装置。
【請求項９】
前記所定のフレームサイズは、２Ｆである、バイトの数に対応し、Ｆは、フレーム内オフセットビットの数である、請求項６から８のいずれか１項に記載のデータ処理装置。
【請求項１０】
前記アドレス計算演算は、
（ｉ）前記フレームオフセット値を、前記部分的オフセット値をエンコードする前記アドレス計算命令の少なくとも１つの部分的オフセットフィールドから導出することと、
（ｉｉ）前記フレームベースアドレスを備える前記部分的アドレス結果を生成することと、
を含む、請求項９に記載のデータ処理装置。
【請求項１１】
前記少なくとも１つの補助プログラム命令は、フレーム内オフセット値を指定する少なくとも１つのフレーム内オフセットフィールドを備え、前記フレーム内オフセット値は、前記フレームベースアドレスに対して、前記メモリのフレーム内の前記情報エンティティの場所を指定し、前記少なくとも１つの補助プログラム命令の実行に応じて、前記フレーム内オフセット値は、前記フレームベースアドレス結果と組み合わせられ、前記フルアドレスを生成する、請求項１０に記載のデータ処理装置。
【請求項１２】
前記少なくとも１つの補助プログラム命令は、加算命令およびメモリアクセス命令のうちの１つを備える、請求項１から１１のいずれか１項に記載のデータ処理装置。
【請求項１３】
前記データ処理装置は、前記アドレス計算命令および前記少なくとも１つの補助プログラム命令を備える、プログラム命令のシーケンスを実行するように構成され、前記少なくとも１つの補助プログラム命令は、前記アドレス計算命令の実行に続いてであるが、１つ以上の介入プログラム命令の実行後、実行される、請求項１２に記載のデータ処理装置。
【請求項１４】
前記データ処理装置は、前記アドレス計算命令の複数のインスタンスを備える、プログラム命令のシーケンスを実行するように構成され、前記複数のインスタンスのいずれが実行された場合においても、前記情報エンティティの前記部分的アドレス結果が提供される、請求項１１に記載のデータ処理装置。
【請求項１５】
前記アドレス計算命令は、ある命令ビット幅を有し、前記フルアドレスは、前記命令ビット幅と異なるフルアドレスビット幅を有する、請求項１から１４のいずれか１項に記載のデータ処理装置。
【請求項１６】
前記アドレス計算命令は、ある命令ビット幅を有し、前記フルアドレスは、前記命令ビット幅と異なるフルアドレスビット幅を有し、
前記少なくとも１つの部分的オフセットフィールドである少なくとも１つのフレームオフセットフィールドは、第１のビット幅を有し、
前記フレームオフセット値は、前記第１のビット幅を上回る第２のビット幅を有する、請求項６から９のいずれか１項に記載のデータ処理装置。
【請求項１７】
前記フレームオフセット値は、前記少なくとも１つのフレームオフセットフィールドのコンテンツを組み合わせ、前記所定のフレームサイズに応じて、スケーリング演算を行うことによって生成される、請求項１６に記載のデータ処理装置。
【請求項１８】
前記フルアドレスビット幅は、前記フレームオフセット値と関連付けられた前記第２のビット幅と異なる、請求項１７に記載のデータ処理装置。
【請求項１９】
前記第１のビット幅の総数は、２１ビットであって、前記フルアドレスのビット幅である第３のビット幅は、６４ビットである、請求項１６に記載のデータ処理装置。
【請求項２０】
前記部分的アドレス結果の計算は、前記少なくとも１つのフレームオフセットフィールドを前記フレームサイズで乗算することによって、前記第１のビット幅を前記フレームオフセット値に対応する前記第２のビット幅に拡張することと、符号拡張を行うことによって、前記第２のビット幅を前記フルアドレスに対応する第３のビット幅に拡張することとを含む、請求項１６に記載のデータ処理装置。
【請求項２１】
符号拡張され、下位１２ビットがゼロとされたフレームオフセット値と、前記非固定基準アドレスとを加算して生成された値が、前記少なくとも１つの補助プログラム命令の実行に応じて、前記フレーム内オフセット値に加算されることにより、前記フルアドレスが生成される、請求項１１に記載のデータ処理装置。
【請求項２２】
ビット位置が前記フルアドレスの前記フレーム内オフセットビットに対応する前記部分的アドレス結果のビット部分は、ゼロの数値を有するマルチビット値である、請求項９、１０、１１及び１４のいずれか１項に記載のデータ処理装置。
【請求項２３】
前記非固定基準アドレスは、プログラムカウンタに依存する、請求項１から２２のいずれか１項に記載のデータ処理装置。
【請求項２４】
前記非固定基準アドレスは、プログラムカウンタに依存するものであり、
前記非固定基準アドレスは、前記プログラムカウンタによってアドレスされるメモリのフレームのベースアドレスを指定する、請求項９に記載のデータ処理装置。
【請求項２５】
前記非固定基準アドレスは、前記プログラムカウンタ内の所定の数の最小有効ビットをゼロに設定することによって得られ、前記所定の数は、前記所定のフレームサイズに依存する、請求項２４に記載のデータ処理装置。
【請求項２６】
前記メモリのフレームのサイズは、前記アドレス計算命令を備える一式のプログラムコードおよび関連付けられた情報エンティティが、前記データ処理装置上で起動するオペレーティングシステムによって再配置されることができる、最小粒度以下に設定される、請求項６から１１、１４、１６から２２、２４および２５のいずれか１項に記載のデータ処理装置。
【請求項２７】
前記データ処理装置は、メモリ管理ユニットを使用して、仮想アドレスを物理的アドレスに変換するように構成され、
前記メモリ管理ユニットによるアドレス変換の管理単位であるブロックは、所定のメモリページサイズを有する、請求項２６に記載のデータ処理装置。
【請求項２８】
前記メモリページサイズは、前記フレームサイズの整数の倍数に設定される、請求項２７に記載のデータ処理装置。
【請求項２９】
ホストハードウェア上で実行するコンピュータプログラムによって提供される、仮想機械であって、請求項１から２８のいずれか１項に記載のデータ処理装置に従って、命令実行環境を提供する、仮想機械。
【請求項３０】
データ処理装置上でデータ処理を行うためのデータ処理方法であって、
プログラム命令のシーケンスに含まれるプログラム命令に応答して、前記データ処理を行う処理回路を制御するための制御信号を生成することと、
ある命令サイズを有するアドレス計算命令に応答して、情報エンティティのメモリ場所を指定するフルアドレスが、少なくとも１つの補助プログラム命令を使用して、部分的アドレス結果から計算可能であるように、前記部分的アドレス結果を非固定基準アドレスおよび部分的オフセット値から計算するためのアドレス計算演算を行うことであって、前記部分的オフセット値は、前記命令サイズ以上のビット幅を有し、前記アドレス計算命令の少なくとも１つの部分的オフセットフィールド内でエンコードされることと、
を含み、
前記プログラム命令のシーケンスは、前記フルアドレスが、前記アドレス計算命令および前記少なくとも１つの補助プログラム命令を備える、少なくとも２つのプログラム命令を備えるセットの実行によって得られるように、前記少なくとも１つの補助プログラム命令を含み、
前記フルアドレスは、フルオフセット値および前記非固定基準アドレスによって指定され、前記少なくとも１つの補助プログラム命令は、前記部分的オフセット値および補助オフセット値の両方に基づいて、前記フルオフセット値を指定するように、前記補助オフセット値を提供する、方法。
【請求項３１】
プログラム命令のシーケンスを備え、データプロセッサに、請求項３０に記載の方法を実行させるためのものである、コンピュータプログラム。
【請求項３２】
前記少なくとも１つの補助プログラム命令は、フレーム内オフセット値を指定するフィールドを有し、前記コンピュータプログラムは、データプロセッサに、前記補助プログラム命令に応答して、前記部分的アドレス結果および前記フレーム内オフセット値を使用して、前記フルアドレスを計算することを行わせるためのものである、請求項３１に記載のコンピュータプログラム。
【請求項３３】
前記補助プログラム命令は、加算命令およびメモリアクセス命令のうちの１つを備える、請求項３２に記載のコンピュータプログラム。
【請求項３４】
前記プログラム命令のシーケンスは、前記アドレス計算命令および前記補助プログラム命令を備え、前記補助プログラム命令は、前記アドレス計算命令の実行に続いてであるが、１つ以上の介入プログラム命令の実行後に実行される、請求項３２または請求項３３に記載のコンピュータプログラム。
【請求項３５】
前記プログラム命令のシーケンスは、前記アドレス計算命令の複数のインスタンスを備え、前記複数のインスタンスのいずれを実行しても、所定の情報エンティティに対しては、同一の前記部分的アドレス結果が得られるものである、請求項３１から３４のいずれか１項に記載のコンピュータプログラム。
【請求項３６】
前記アドレス計算命令の複数のインスタンスのうちのどれが、前記補助プログラム命令にとっての先行命令としてもっとも近いかに関わらず、前記補助プログラム命令を実行すると、前記所定の情報エンティティのための前記フルアドレスとして同一の値が得られるものである、請求項３５に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理に関する。特に、本発明は、データ処理装置内におけるアドレス生成に関する。
【背景技術】
【０００２】
アドレス指定モードは、ほとんどのデータプロセッサ設計における命令セットアーキテクチャの態様である。本願では、アドレス指定モードは、命令セット内のプログラム命令が、レジスタ内に保持される情報およびプログラム命令内でエンコードされたパラメータを使用して、メモリ内のオペランドのアドレスを計算する機構を指す。異なる命令セットアーキテクチャは、それらがサポートするアドレス指定モードの数が異なる。公知のアドレス指定モードの実施例は、アドレスが、アドレスパラメータ自体である、絶対アドレス指定と、アドレスが、指定されたベースレジスタのコンテンツに加算されたオフセットパラメータによって与えられる、「ベースプラスオフセット」アドレス指定と、アドレスが、プログラムカウンタの現在の値に加算されたオフセットパラメータによって与えられる、プログラムカウンタ（ＰＣ）相対アドレス指定である。ＰＣ相対アドレス指定は、プログラムコード内に記憶された任意のアドレスパラメータを修正することを必要とせずに、プロセッサによってサポートされる利用可能なアドレス空間内の任意の仮想アドレスにロードされ得るように、プログラムコードを位置独立的にすることを可能にするという利点を有する。位置独立コードは、動的にロードされる共有ライブラリのための現代のソフトウェアシステムにおいて、かつアプリケーションプログラムのためのセキュリティ手段として、ますます重要となりつつある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、データプロセッサのメモリ容量およびプログラムアプリケーションのメモリ要件が増加するにつれ、メモリアドレスを指定するために必要とされるビットの数は経時的に増加する傾向にある。したがって、制限された命令サイズを有する命令セットアーキテクチャでは、最大プログラム命令サイズに対して、多数のビットによって、どのようにメモリアドレスまたはオフセットパラメータを指定するかが問題である。相対アドレス指定では、ベースアドレスからのオフセットを提供する、オフセットパラメータと関連付けられたビットの数は、直接、そのアドレス指定モードを使用してアドレス可能なメモリの最大量を制限する。したがって、例えば、ＡＲＭプロセッサ等のＲＩＳＣプロセッサでは、例えば、プログラム命令が、３２ビットの最大サイズを有する、３３ビット符号付きオフセットを指定するための要件は、問題を呈する。典型的には、複数の別個のプログラム命令が、命令セットアーキテクチャのプログラム命令のサイズと比較して大きいオフセットを構成するために要求されるであろう。以下の説明では、命令は、ある長さを有する一方、データは、ある幅を有すると見なされるものとする。さらに、所与の命令サイズに対して、より大きなオフセットを実装する以前に公知の方法の１つは、典型的には、メモリ場所内により大きなオフセットを記憶し、次いで、より小さいオフセット範囲を伴う相対アドレス指定モードを使用して、そのメモリ場所からそれをロードし、その後、第２の異なるプログラム命令内のそのより大きなオフセットを使用して、標的メモリアドレスを算出することを伴うであろう。これは、２つの異なる命令間の依存につながり、特に、初期ロード動作がデータキャッシュにミスを伴う場合、処理における非効率性を生じさせ、パイプラインの失速、したがって、処理遅延をもたらし得る。故に、付加的データメモリアクセスおよび記憶の必要性を伴わずに、プログラム命令内のパラメータを使用して、インラインに効率的に実装され得るように、オフセットが命令サイズと比較して大きいという、拡張されたオフセット範囲を有する位置独立アドレス指定機構を提供することが求められている。
【課題を解決するための手段】
【０００４】
本願では、フレームは、仮想アドレス空間の単位を指し、フレームサイズは、２Ｆバイトであって、Ｆは、所定の数のフレーム内オフセットビットである。フレームベースアドレスは、フレーム内の所定のオフセットにおけるアドレスである。プロセッサの仮想アドレス空間は、したがって、等サイズの非重複フレームの連続シーケンスに分割され、それぞれ、一意のフレームベースアドレスを有する。
【０００５】
本発明は、
データを処理するための処理回路と、
プログラム命令に応答して、前記データ処理を行う前記処理回路を制御するための制御信号を生成する命令デコーダと、
を備え、前記プログラム命令は、ある命令サイズを有するアドレス計算命令を備え、前記命令デコーダは、情報エンティティのメモリ場所を指定するフルアドレスが、少なくとも１つの補助プログラム命令を使用して、部分的アドレス結果から計算可能であるように、前記アドレス計算命令に応答して、前記部分的アドレス結果を非固定基準アドレスおよび部分的オフセット値から計算するためのアドレス計算演算を行い、前記部分的オフセット値は、前記命令サイズ以上のビット幅を有し、前記アドレス計算命令の少なくとも１つの部分的オフセットフィールド内でエンコードされる、データ処理装置を提供する。
【０００６】
本発明は、メモリアドレスが、情報エンティティの絶対メモリ場所を指定する、フルアドレスが、少なくとも１つの補助プログラム命令を使用して、部分的アドレス結果から計算可能であるように、アドレス計算命令を実行し、非固定基準アドレス（例えば、プログラムカウンタ）からの部分的アドレス結果および部分的オフセット値（例えば、非固定基準アドレスに対するメモリアドレス）を生成する第１の段階を伴うプロセスにおいて、効率的に計算されることができると認識する。部分的オフセット値は、命令サイズ以上のビット幅を有し、アドレス計算命令の少なくとも１つの部分的オフセットフィールド内でエンコードされる。
【０００７】
本技法による、アドレス計算命令自体内の部分的オフセット値のエンコーディングは、オペレーティングシステムによってロードされるプログラムイメージの一部を形成するように、プログラム作成時間において、オフセットを算出することによって、メモリに対して大きなオフセットを記憶する必要性を回避する。部分的オフセット値を計算するために使用される基準アドレスは、アドレス計算命令からデコードされる部分的オフセット値が、絶対（部分的）メモリアドレスではなく、相対オフセットを提供するように、非固定または可変基準アドレス（例えば、ゼロの固定基準アドレスとは対照的）である。
【０００８】
命令自体内でそれをインラインでエンコードすることによって、部分的オフセット値を指定するためのアドレス計算命令の使用と、情報エンティティの絶対メモリ場所を取得するための少なくとも１つの補助プログラム命令のアドレス計算命令との併用は、絶対メモリアドレスを指定する際、より柔軟性を提供し、効率を改善する。特に、少なくとも２つの命令（アドレス計算命令および少なくとも１つの補助プログラム命令）の指定された組み合わせにおいて、命令サイズに対して大きなオフセットをインラインで容易に指定可能にし、比較的大きなオフセットのメモリへの記憶およびそこからの読み出しを回避する。
【０００９】
部分的アドレス結果を計算するために使用されるフレームオフセット値は、アドレス計算命令自体の少なくとも１つのフレームオフセットフィールドから導出されるため、部分的アドレス結果が、既に、メモリ内に情報エンティティの場所情報の一部を備える。メモリ内の情報エンティティのための場所情報の残りの部分は、次いで、（ｉ）メインメモリ内にオフセット値またはその一部を記憶するか、または（ｉｉ）フルオフセット自体を固定命令サイズを有するアドレス計算命令内に組み込むかのいずれかを必要とせずに、少なくとも１つのさらなるプログラム命令を介して、容易に指定される。したがって、本技法によると、拡張されたオフセット範囲を有する相対アドレスを指定するより効率的方法が、メインメモリの参照を介するのではなく、メモリアドレスをプログラム命令内のパラメータからインラインで構成されることを可能にするため、提供される。また、最適化コンパイラが、相対アドレス算出を上位部分および下位部分に分割し、これらの２つの部分をより独立して処理し、再利用することを可能にする。
【００１０】
いくつかの実施形態では、プログラム命令は、フルアドレスが、アドレス計算命令および少なくとも１つの補助プログラム命令を備える、少なくとも２つのプログラム命令を備えるセットの実行によって得られるように、少なくとも１つの補助プログラム命令を備える。
【００１１】
いくつかの実施形態では、フルアドレスは、フルオフセット値および非固定基準アドレスによって指定され、少なくとも１つの補助命令は、部分的オフセット値および補助オフセット値がともに、フルオフセット値を指定するように、補助オフセット値を提供する。
【００１２】
いくつかの実施形態では、補助オフセット値は、少なくとも１つのさらなる命令の少なくとも１つの補助オフセットフィールド内でエンコードされる。
【００１３】
いくつかの実施形態では、部分的オフセット値は、フルオフセット値の第１の部分を形成し、補助オフセット値は、フルオフセット値のさらなる部分を形成する。
【００１４】
いくつかの実施形態では、フルオフセット値のビット幅は、命令サイズ以上である。
【００１５】
いくつかの実施形態では、フルオフセット値は、３３ビット符号付きオフセットであって、命令サイズは、３２ビットである。
【００１６】
いくつかの実施形態では、データ処理装置は、所定のフレームサイズの複数のメモリフレームを有する仮想アドレス空間へのアクセスを有し、部分的オフセット値は、非固定基準アドレスに対して、情報エンティティを含有するフレームのためのフレームベースアドレスを指定するフレームオフセット値である。
【００１７】
いくつかの実施形態では、部分的オフセット値は、少なくとも１つの部分的オフセットフィールド内のエンコーディングから得られ、少なくとも１つの部分的オフセットフィールドの組み合わせられたビット幅を上回るビット幅を有する。
【００１８】
いくつかの実施形態では、部分的オフセット値は、少なくとも１つの部分的オフセットフィールドにおけるエンコーディングおよびゼロの所定のビット幅を備える。
【００１９】
いくつかの実施形態では、所定のフレームサイズは、２Ｆである、バイトの数に対応し、Ｆは、フレーム内オフセットビットの数であって、フレームベースアドレスは、フレーム内の所定のオフセットである。
【００２０】
いくつかの実施形態では、アドレス計算演算は、
（ｉ）フレームオフセット値を、部分的オフセット値をエンコードするアドレス計算命令の少なくとも１つのフィールドから導出することと、
（ｉｉ）フレームベースアドレスを備える部分的アドレス結果を生成することと、
を含む。
【００２１】
いくつかの実施形態では、少なくとも１つの補助プログラム命令は、フレーム内オフセット値を指定する少なくとも１つのフレーム内オフセットフィールドを備え、フレーム内オフセット値は、フレームベースアドレスに対して、メモリのフレーム内の情報エンティティの場所を指定し、少なくとも１つの補助命令の実行に応じて、フレーム内オフセット値は、フレームベースアドレス結果と組み合わせられ、フルアドレスを生成する。
【００２２】
補助命令は、フレーム内オフセット値を部分的アドレス結果と組み合わせ、フルアドレスを生成する効果を有する、任意の命令であり得ることを理解されるであろう。しかしながら、いくつかの実施形態では、補助命令は、加算命令およびメモリアクセス命令、例えば、「ベースプラスオフセット」アドレス指定モードを使用する、ロードまたは記憶命令のうちの１つを備える。これらの命令は、一般に、他のデータ処理およびメモリアクセス目的のために提供され、このようなフルアドレス生成のためのこれらの命令の展開は、位置独立アドレス指定に特有の特殊目的補助命令を要求せずに、既存の命令の効率的再利用を提供する。
【００２３】
フルアドレスの計算は、初めのアドレス計算命令の実行直後、フルアドレスを算出するために使用される少なくとも１つのさらなるプログラム命令の実行を含み得ることを理解されるであろう。しかしながら、いくつかの実施形態では、データ処理装置は、アドレス計算命令および補助命令を備える、プログラム命令のシーケンスを実行するように構成され、補助命令が、アドレス計算命令の実行に続いてであるが、１つ以上の介入プログラム命令の実行後、実行される。これは、プログラム命令のシーケンス内のアドレス計算命令および補助命令を分離するための柔軟性を提供し、したがって、フルアドレスの計算の精度を落とすことなく、よりプログラミングの自由性をもたらす。
【００２４】
データ処理装置は、アドレス計算命令の単一インスタンスおよび関連付けられた補助命令の単一インスタンスを備える、プログラム命令のシーケンスを実行するように構成され得ることを理解されるであろう。しかしながら、いくつかの実施形態では、データ処理装置は、アドレス計算命令の複数のインスタンスを備えるプログラム命令のシーケンスを実行するように構成され、複数のインスタンスはそれぞれ、所定の情報エンティティの部分的アドレスを指定する、すなわち、複数のインスタンスは、同一の部分的アドレスを指定する。したがって、実行時、例えば、プログラムカウンタの異なる値を有する、複数の異なるアドレス計算命令を使用することができるが、アドレス計算命令の複数のインスタンスはすべて、少なくとも１つのさらなるプログラム命令の実行時、同一のフル標的アドレスを指定するように使用されることができる。これは、メモリアドレス計算内に付加的柔軟性を提供し、プログラムシーケンス内のいくつかの異なる点から容易に正確に計算することを可能にする。
【００２５】
代替として、アドレス計算命令の単一インスタンスを使用して、次いで、複数の少なくとも１つのさらなる補助プログラム命令によって使用されることができる、部分的アドレスを生成することができる。
【００２６】
アドレス計算命令ビット幅およびフルアドレスビット幅は、同一であり得ることを理解されるであろう。しかしながら、いくつかの実施形態では、アドレス計算命令は、ある命令ビット幅を有し、フルアドレスは、前記命令ビット幅と異なるフルアドレスビット幅を有する。
【００２７】
アドレス計算命令内の少なくとも１つのフレームオフセットフィールドの総幅およびフレームオフセット値は、同じビット幅を有し得ることを理解されるであろう。しかしながら、いくつかの実施形態では、少なくとも１つのフレームオフセットフィールドは、第１のビット総幅を有し、フレームオフセット値は、第１のビット幅を上回る第２のビット幅を有する。
【００２８】
アドレス計算命令内でエンコードされたフレームオフセット値およびフルアドレスは、同じビット幅を有し得ることを理解されるであろう。しかしながら、いくつかの実施形態では、フレームオフセット値は、第２のビット幅を有し、フルアドレスは、第２のビット幅と異なる第３のビット幅を有する。
【００２９】
部分的アドレス結果は、任意の所望のビット幅を有し得るが、いくつかの実施形態では、部分的アドレス結果は、フルアドレスと関連付けられた第３のビット幅と等しいビット幅を有するように計算されることを理解されるであろう。これは、部分的アドレス結果が、既に、フルアドレスに対応する所望のビット幅であるため、フルアドレスに到達するために行われる必要がある補助計算を簡略化する。
【００３０】
アドレス計算命令内の少なくとも１つのフレームオフセットフィールドの総幅に対応する第１のビット幅と、フルアドレス（および、可能性として、また、部分的アドレス結果）に対応する第３のビット幅は、広範囲の異なる可能性として考えられるビット幅から選択され得る。しかしながら、いくつかの実施形態では、第１のビット総幅は、２１ビットであって、第３のビット幅は、６４ビットである。これは、いくつかの公知のＲＩＳＣ命令セットアーキテクチャ命令が、３２ビットの最大ビット幅を有し、６４ビットのアドレスビット幅が、最大２６４バイトのサイズの仮想アドレス空間内の任意のアドレスを指定するために十分であるため、便宜的である。
【００３１】
部分的アドレス結果の計算は、幅広い種々の異なる処理機能のうちの任意の１つを備え得ることを理解されるであろう。しかしながら、いくつかの実施形態では、部分的アドレス結果の計算は、少なくとも１つのフレームオフセットフィールドをフレームサイズで乗算することによって、第１のビット幅をフレームオフセット値に対応する第２のビット幅に拡張することと、次いで、符号拡張を行うことによって、第２のビット幅をフルアドレスに対応する第３のビット幅に拡張することとを含む。このようなフレームオフセット値の拡張は、部分的アドレス結果が、基準アドレスを下回る場合、オフセット値が負となるであろうため、重要である。故に、フレームオフセット値は、それを基準アドレスに加算する前に、符号拡張される。
【００３２】
フルアドレスは、少なくとも１つのさらなる命令によって指定されたフレーム内オフセット値とともに、アドレス計算命令自体内の少なくとも１つのフィールドを介して指定されたフレームオフセット値を使用して、いくつかの異なる方法のうちの任意の１つにおいてこれらの情報片を組み合わせることによって、生成され得ることを理解されるであろう。しかしながら、一実施形態では、フレームオフセット値は、フレーム内オフセット値に加算され、フルアドレスに対応する組み合わせられたオフセット値を生成し、組み合わせられたオフセット値は、非固定基準アドレスに対する情報エンティティの場所を指定する。このようなフレームオフセット値とフレーム内オフセット値の加算は、フルアドレスの生成の簡単な方法であって、容易に実装され得る。
【００３３】
組み合わせられたオフセット値は、アドレス計算命令のビット幅未満のビット幅等、異なるビット幅の範囲のうちの任意の１つを有し得ることを理解されるであろう。しかしながら、いくつかの実施形態では、組み合わせられたオフセット値は、アドレス計算命令のビット幅を上回るビット幅を有する。これは、アドレス計算命令自体のビット幅に対して大きいオフセット値の使用を要求する。そのような比較的に大きいビット幅は、そうでなければ、メインメモリ内に大きなオフセットの記憶を要求し、それによって、プログラムサイズを増加させ、典型的には、メインメモリからのオフセット値のロードから生じるであろう、処理の非効率性を被る場合がある。
【００３４】
位置がフルアドレスのフレーム内オフセットビットに対応する部分的アドレス結果の一部は、フルアドレスの対応するフィールドが、少なくとも１つのさらなるプログラム命令の実行に応じて、算出された値を保持するように意図されるため、任意の所定の値を含有し得ることを理解されるであろう。したがって、例えば、少なくとも１つのさらなるプログラム命令が、加算命令である場合、フレーム内オフセット値は、部分的アドレス結果に加算され、フルアドレスを生成する。しかしながら、いくつかの実施形態では、フレームベースアドレス以外であるが、フルアドレスのフレーム内オフセットビットに対応する部分的アドレス結果の一部は、ゼロの数値を有するマルチビット値である。部分的アドレスの本部分が、ゼロと等しくなるように設定される場合、少なくとも１つのさらなるプログラム命令の実行に応じて、フレーム内オフセット値は、少なくとも１つのさらなるプログラム命令から、フルアドレスのフレーム内オフセットビット内に効率的にコピーされる。本ゼロ値は、実装が簡単であって、アドレス計算命令が実行されるプログラム命令のシーケンスの点にかかわらず、一貫した値が、位置が前記フルアドレスのフレーム内オフセットビットに対応する部分的アドレス結果の部分内に記憶されることを保証する。これは、プログラム命令のシーケンス内のアドレス計算命令の異なるインスタンスをすべて使用し、所定の変数の同一の部分的アドレスを確実に計算することができることを保証するのに役立つ。
【００３５】
フレームオフセット値が指定される基準アドレスは、任意の選択された基準アドレスに対応し得ることを理解されるであろう。しかしながら、いくつかの実施形態では、基準アドレスは、プログラムカウンタに依存する。これは、基準アドレスが暗示的であることを意味し、基準アドレスをアドレス計算命令自体内に保持するレジスタを明示的に指定する必要はない。したがって、命令は、より大きいフレームオフセットフィールドを含有することができる。さらに、多くのデータ処理装置は、プログラムカウンタ内のアドレスにしたがって、プログラム命令のシーケンスを実行するため、これは、フレームオフセット値を参照するために対比される便宜的ベースを提供し、位置独立アドレス指定を可能にする。
【００３６】
基準アドレスは、種々の異なる方法において、プログラムカウンタに依存し得るが、いくつかの実施形態では、非固定基準アドレスは、プログラムカウンタによってアドレスされるメモリのフレームのフレームベースアドレスを指定することを理解されるであろう。
【００３７】
非固定基準アドレスが、プログラムカウンタに依存する、いくつかの実施形態では、非固定基準アドレスは、前記プログラムカウンタ内の所定の数の最小有効ビットをゼロに設定することによって得られ、前記所定の数は、前記所定のフレームサイズに依存する。これは、部分的アドレスの計算において使用されるプログラムカウンタのビットが、また、プログラムカウンタ内のアドレスに依存するフレーム内のオフセットを提供するのではなく、プログラムカウンタによってアドレスされるメモリのフレームの下位アドレスのみ指定することを保証する。これは、フレームオフセットフィールドの総ビット幅が、フレームオフセット値のビット幅未満であって、プログラムコードのシーケンスにおける異なる点で生じる、異なるアドレス計算命令が、それらの異なるアドレス計算命令にポイントするプログラムカウンタが、その都度、異なる値を有するという事実にかかわらず、同一の部分的アドレスを計算するために一貫して使用されることができることを保証する。
【００３８】
所定の数のフレームオフセットビット、ひいては、メモリのフレームのサイズが、いくつかの異なる値のうちの任意の１つに設定され得ることを理解されるであろう。しかしながら、いくつかの実施形態では、メモリのフレームのサイズは、アドレス計算命令を備える一式のプログラムコードおよび関連付けられた情報エンティティが、データ処理装置上で起動するオペレーティングシステムによって再配置され得る、最小粒度以下に設定される。アドレス計算命令およびそれらが参照する情報エンティティが、同一の量だけ再配置され、その量が、フレームサイズの倍数である場合、フレームオフセット値およびフレーム内オフセット値は両方とも、不変のまま使用されてもよく、したがって、プログラムコードは、再配置プロセスの一部として修正される必要はない。
【００３９】
本技法による、メモリのフレームのサイズは、メモリ管理の目的のために使用されるメモリページサイズ、例えば、データ処理装置のメモリ管理ユニットによって使用されるメモリページサイズに等しく設定され得ることを理解されるであろう。しかしながら、いくつかの実施形態では、メモリページサイズは、フレームサイズの整数倍数に設定されてもよい。
【００４０】
第２の態様によると、本発明は、データ処理装置上でデータ処理を行うためのデータ処理方法であって、
プログラム命令に応答して、前記データ処理を行う処理回路を制御するための制御信号を生成することと、
ある命令サイズを有するアドレス計算命令に応答して、情報エンティティのメモリ場所を指定するフルアドレスが、少なくとも１つの補助プログラム命令を使用して、部分的アドレス結果から計算可能であるように、前記部分的アドレス結果を非固定基準アドレスおよび部分的オフセット値から計算するためのアドレス計算演算を行うことであって、前記部分的オフセット値は、前記命令サイズ以上のビット幅を有し、前記アドレス計算命令の少なくとも１つの部分的オフセットフィールド内でエンコードされることと、
を含む、方法を提供する。
【００４１】
第３の態様によると、本発明は、
データを処理するための処理回路と、
プログラム命令に応答して、前記データ処理を行う前記処理回路を制御するための制御信号を生成する命令デコーダと、
を備え、前記プログラム命令は、ある命令サイズを有する補助プログラム命令を備え、前記命令デコーダは、前記補助プログラム命令に応答して、情報エンティティのメモリ場所を指定するフルアドレス結果を計算するためのアドレス計算演算を行い、前記補助プログラム命令は、部分的オフセット値および非固定基準アドレスから計算された部分的アドレス結果に対応する入力オペランドを有し、前記補助プログラム命令は、補助オフセット値をエンコードする少なくとも１つの補助オフセットフィールドを備え、前記部分的オフセット値および前記補助オフセット値はともに、フルオフセット値を指定する、データ処理装置を提供する。
【００４２】
補助プログラム命令は、部分的オフセットおよび補助オフセットからのフルオフセットの生成の目的に特有でなくてもよく、例えば、汎用加算命令等の既存のデータ処理および／またはメモリアクセス命令であってもよい。しかしながら、既存のデータ処理命令は、本技法に従って、部分的オフセットおよび非ゼロ基準値から生成される部分的アドレス結果を前提として、フルオフセットを生成するように特別に構成される。
【００４３】
第４の態様によると、本発明は、データ処理装置上でデータ処理を行うためのデータ処理方法であって、
プログラム命令に応答して、前記データ処理を行う処理回路を制御するための制御信号を生成することと、
ある命令サイズを有する補助プログラム命令に応答して、情報エンティティのメモリ場所を指定するフルアドレス結果を計算するためのアドレス計算演算を行うことであって、前記補助プログラム命令は、部分的オフセット値および非固定基準アドレスから計算された部分的アドレス結果に対応する入力オペランドを有し、前記補助プログラム命令は、補助オフセット値をエンコードする少なくとも１つの補助オフセットフィールドを備え、前記部分的オフセット値および前記補助オフセット値はともに、フルオフセット値を指定することと、
を含む、方法を提供する。
【００４４】
第５の態様によると、本発明は、
データを処理するための処理回路と、
プログラム命令に応答して、前記データ処理を行う前記処理回路を制御するための制御信号を生成する命令デコーダと、
を備え、前記プログラム命令は、ある命令サイズを有するアドレス計算命令および少なくとも１つの補助プログラム命令を備える、命令対を備え、前記命令デコーダは、前記命令対に応答して、非固定基準アドレスに対して、情報エンティティのメモリ場所を指定するフルアドレス結果を計算するためのアドレス計算演算を行い、前記アドレス計算命令は、前記アドレス計算命令の少なくとも１つの部分的オフセットフィールド内で部分的オフセット値をエンコードし、前記少なくとも１つの補助命令は、補助オフセット値をエンコードする少なくとも１つの補助オフセットフィールドを備え、前記部分的オフセット値および前記補助オフセット値がともに、前記非固定基準アドレスに加算されると、前記フルアドレス結果を指定し、前記部分的オフセット値および前記補助オフセット値の組み合わせられたビット幅は、前記命令サイズ以上である、データ処理装置を提供する。
【００４５】
第６の態様によると、本発明は、データ処理装置上でデータ処理を行うためのデータ処理方法であって、
プログラム命令に応答して、前記データ処理を行う処理回路を制御するための制御信号を生成することと、
ある命令サイズを有するアドレス計算命令および少なくとも１つの補助プログラム命令を備える命令対に応答して、非固定基準アドレスに対して、情報エンティティのメモリ場所を指定するフルアドレス結果を計算するためのアドレス計算演算を行うことであって、前記アドレス計算命令は、前記アドレス計算命令の少なくとも１つの部分的オフセットフィールド内で部分的オフセット値をエンコードし、前記少なくとも１つの補助命令は、補助オフセット値をエンコードする少なくとも１つの補助オフセットフィールドを備え、前記部分的オフセット値および前記補助オフセット値がともに、前記非固定基準アドレスに加算されると、前記フルアドレス結果を指定し、前記部分的オフセット値および前記補助オフセット値の組み合わせられたビット幅は、前記命令サイズ以上であることと、
を含む、方法を提供する。
【００４６】
本発明の他の態様および特徴は、添付の請求項に記載される。
【００４７】
次に、本発明の好ましい実施形態が、付随の図面を参照して、単なる一例として説明される。
【図面の簡単な説明】
【００４８】
【図１】本発明のある実施形態による、データ処理装置を図式的に図示する。
【図２】符号付き３３ビットＰＣ相対オフセットが、２つの異なるプログラム命令の組み合わせを実行することによって、どのように２つの部分内で指定されるかを図式的に図示する。
【図３】本技法に従って、アドレス計算命令の実行に対応する、部分的アドレス結果を計算するために使用される、アドレス計算演算を図式的に図示する。
【図４】図３によって図示されるアドレス計算命令実行の結果に基づく、フルアドレス値の計算を図式的に図示する。
【図５】本技法による、アドレス計算命令のアセンブラ文法表現と、また、本技法による、少なくとも１つのさらなる命令のアセンブラ文法表現を図式的に図示する。
【図６】アドレス計算命令および補助命令が、本技法に従って、どのように可分性および再利用の特徴を有するかを図式的に図示する。
【図７】プログラムカウンタ相対アドレス指定命令の完全詳細を図式的に図示する。
【図８Ａ】本技法に対応する少なくとも１つのさらなる命令のための第１のオプションである、命令の加減算クラスの詳細を図式的に図示する。
【図８Ｂ】本技法に対応する少なくとも１つのさらなる命令のための第１のオプションである、命令の加減算クラスの詳細を図式的に図示する。
【図９Ａ】は、ロード／記憶レジスタ命令に対応する、本技法による、代替のさらなる命令の詳細を図示する。
【図９Ｂ】は、ロード／記憶レジスタ命令に対応する、本技法による、代替のさらなる命令の詳細を図示する。
【図１０】本発明の仮想機械実装を図式的に図示する。
【発明を実施するための形態】
【００４９】
図１は、本発明のある実施形態による、データ処理装置を図式的に図示する。データ処理装置は、「システムオンチップ」を形成するいくつかの処理構成要素を含む、集積回路１００を備える。特に、集積回路１００は、実行パイプライン１１０、命令キャッシュ１２０、データキャッシュ１３０、一式の汎用レジスタ１４０、およびプログラムカウンタ１５０を備える。システムオンチップ１００は、オフチップメモリ１６０へのアクセスを有する。
【００５０】
本実施形態のデータ処理装置１００は、ロード−記憶アーキテクチャである、ＲＩＳＣ（縮小命令セットコンピューティング）アーキテクチャを有し、データを処理する命令は、レジスタ上でのみ動作し、データ処理命令は、メモリにアクセスする命令と別個である。パイプライン１１０は、フェッチ回路１１２、デコード回路１１４、実行回路１１６、およびライトバック回路１１８を備える。一式の汎用レジスタ１４０は、オペランドおよび実行パイプライン１１０によって実行される命令の結果を記憶するために使用される。データ処理装置１００は、複数の異なる命令タイプを実行するように構成される。特に、３２ビット命令形態と称される、３２ビット幅データ上で動作する命令と、６４ビット命令形態と称される、６４ビット幅データ上で動作する命令の両方を実行することができる。
【００５１】
フェッチ回路１１２は、命令キャッシュ１２０から命令がフィードされる。実行回路１１６は、データキャッシュ１３０から読み取り、レジスタファイルを読み取ることができる一方、ライトバック回路１１８は、データキャッシュ１３０への書き込みおよびそこからの読み取りの両方を行うことができる。情報は、実行段階において、レジスタ１４０から読み取られ、結果は、典型的には、ライトバック段階において、レジスタ１４０に書き込まれる。データ処理装置１００はまた、オフチップメモリ１６０へのアクセスを有し、命令キャッシュ１２０またはデータキャッシュ１３０内に存在しない場合、命令および／またはデータをオフチップメモリ１６０から読み出すことを要求されてもよい。
【００５２】
プログラムカウンタ１５０は、実行されるべきプログラム命令に対応するメモリアドレスを含有する、特殊目的レジスタである。プログラムカウンタ１５０は、６４ビット値を図１の配列内に記憶する。
【００５３】
３２ビットおよび６４ビット命令形態の両方の実行をサポートするために、汎用レジスタ１４０は、データ処理回路１００が、３２ビット命令形態を実行しているとき、高次３２ビットが、読み取りに関して無視され、書き込みに関して所定の値に設定されるよう、レジスタ１４０が、一式の３２ビットレジスタとして、データ処理装置によって見なされるように構成される、可変幅レジスタである。一方、データ処理装置が、６４ビット命令形態を実行しているとき、データ処理装置１００は、レジスタ１４０が、６４ビットレジスタとして見なされ、そのフル６４ビット幅が、利用されるように構成される。
【００５４】
データ処理装置１００は、アーキテクチャの機械言語命令がどのように各メモリアクセス命令のメモリオペランドのアドレスを識別するかを定義する、種々のアドレス指定モードを備える、少なくとも１つの関連付けられた命令セットアーキテクチャを有する。所与のアドレス指定モードは、汎用レジスタ１４０および／またはプログラムカウンタ１５０内に保持される情報ならびに／あるいは機械命令自体またはその他の場所内に含有される定数を使用することによって、オペランドのメモリアドレスをどのように計算すべきかを指定する。異なるコンピュータアーキテクチャは、典型的には、それらがハードウェア内に提供するアドレス指定モードの数に関して、大きく異なる。アドレス指定モードの一実施例は、前述のように、ＰＣ相対命令のためのアドレスが、プログラムカウンタ内に保持されるアドレスに加算されるオフセットパラメータによって指定される、ＰＣ相対アドレス指定である。オフセットは、通常、符号付き値であって、現在の命令より低いまたは高いアドレスにおいて、コードまたはデータへの参照を可能にする。
【００５５】
データのための単純アドレス指定モードの実施例は、「ベースプラスオフセット」アドレス指定モードであって、アドレスは、指定されたベースレジスタのコンテンツに加算されたオフセットの観点から定義される。オフセットは、典型的には、符号付きまたは非符号付き値であって、ベースレジスタが、ベースプラスオフセットアドレス指定のために、ゼロの値に設定される場合、これは、絶対アドレス指定に相当する。絶対または直接アドレス指定は、非常に大きなオフセットのために、命令における空間を要求する。これは、問題かつ制約となり、オフセット値が、典型的には、１６ビット以下に制限され得るため、命令幅が、例えば、３２ビット幅命令に制限され得る。ＰＣ相対アドレス指定は、データまたはプログラムコードのために使用されることができ、データの場合、ＰＣ相対アドレス指定モードは、現在の命令から短距離だけ離れたプログラムメモリ内に記憶された「定数」からレジスタをロードするために使用されることができる。ＰＣ相対アドレス指定は、ベースプラスオフセットアドレス指定の特殊例であって、プログラムカウンタは、ベースレジスタとして選択される。
【００５６】
図１のＲＩＳＣパイプライン化されたアーキテクチャ等のアーキテクチャは、典型的には、制限されたオフセット値によって、ＰＣ相対アドレス指定モードをサポートする。本アドレス指定モードが使用されるとき、コンパイラは、典型的には、命令として、それらの定数を偶発的に実行しないように防止するためにそれらを使用するサブルーチン直前または直後にリテラルプール内に定数を配置する。ＰＣ相対アドレス指定モードを使用するロード命令は、定数値をリテラルプールから読み取り、値を汎用レジスタ１４０のうちの１つ内に記憶し、次いで、次の命令を実行する。本ＰＣ相対データアドレス指定は、任意のデータレジスタを修正せず、代わりに、ＰＣを分岐命令からの所与のオフセットにおける他の命令のアドレスに設定する、ＰＣ相対分岐とは異なることに留意されたい。ＰＣ相対アドレス指定またはベースプラスオフセットアドレス指定は、要求されるアドレスを得るために、データキャッシュ１３０またはオフチップメモリ１６０等のメモリへの恐らくいくつかの参照を行う必要なく、プログラム命令内でアドレスをインラインで構成するための能力を提供する利点を有する。
【００５７】
しかしながら、ＰＣ相対アドレス指定およびベースプラスオフセットアドレス指定は、アクセスされ得るアドレスの範囲が、オフセットを指定するために使用され得る命令エンコーディング内のビットの数によって判定されるという点において、制限を有する。例えば、１２ビットオフセットは、わずか４０９６個の異なるアドレスのみ、ベースアドレスに対してアクセス可能にし、これは、大きなプログラムアプリケーションのサイズ（典型的には、数メガバイト）と比較して小さい。しかしながら、参照の局所性の原理が、該当し、短い時間にわたって、プログラムが、典型的には、アクセスするであろう、データアイテムの多くが、メモリ内において、相互に非常に近い傾向にあるであろう。それでもなお、メモリを間接的に参照するのではなく、プログラム命令内でインラインで指定される、オフセットを介して、より大きなアドレス範囲にアクセス可能であることが望ましい。アドレスまたはオフセットあるいはその一部をリテラルプールに記憶することによる、データのアドレス指定は、プログラムサイズを増加させ、オフセットのロードが、データキャッシュ１３０内にミスをもたらす場合、非効率性およびパイプライン失速につながり、それによって、オフチップメモリ１６０への時間のかかるアクセスを必要とし得る。さらに、メモリ場所からのデータのロードを伴う連続ロード命令間の依存性もまた、パイプラインバブルを引き起こし、処理の効率を低減させ得る。
【００５８】
本技法によると、例えば、符号付き３３ビットオフセットを伴う、ＰＣ相対アドレスは、２つの異なる３２ビット幅プログラム命令のみ使用して、指定されることができる。故に、少数の命令を使用して、大きなＰＣ相対オフセット範囲を指定する。符号付き３３ビットオフセットは、プログラムカウンタの現在の値より最大４ギガバイト高いまたは低い範囲内でアドレスを指定する能力を提供する。ｎビットアドレス計算命令および対応する補助命令を使用して、ｍビットオフセットを指定する本アドレス指定モード（ｍは、ｎより大きい）は、図１のデータ処理装置内に実装される。
【００５９】
図２は、フル３３ビットオフセットが、２つの異なるプログラム命令の組み合わせを実行することによって、どのように２つの部分内で指定されるかを図式的に図示する。特に、「ＡＤＲＰ」命令と称されるアドレス計算命令は、符号付き３３ビットオフセットの上位２１ビットを得るために使用され、これは、プログラムカウンタの調節された値に加算され、結果は、図１の汎用レジスタ１４０のうちの１つに記憶される一方、複数の異なる形態、例えば、ＡＤＤ、ＬＤＲ、またはＳＴＲのうちの１つをとり得る、補助（すなわち、少なくとも１つのさらなる）命令は、３３ビットオフセットの下位１２ビットを指定するために使用される。図２は、仮想メモリアドレスの３つの個別のフレームを示しており、各フレームは、本実施例では、４キロバイトの倍数である、フレームベースアドレスを伴う、４キロバイト単位のメモリを備える。図２に図示されるメモリのフレームは、物理的アドレス変換およびページテーブルルックアップの仮想目的のために、メモリをカテゴリ化するために使用される、仮想メモリのページと異なり、例えば、フレームサイズは、ページサイズと異なってもよいことに留意されたい。
【００６０】
第１のメモリフレーム２１０（プログラムカウンタのための「フレームＰ」と表される）は、メモリアドレス計算命令ＡＤＲＰ２１２の１つのインスタンスを備え、現在、図１のプログラムカウンタレジスタ内に記憶されるプログラムカウンタ１５０は、現在、ＡＤＲＰ命令２１２にポイントしている。メモリ２２０の第２の４キロバイトフレーム（データのための「フレームＤ」と表される）は、そのアドレスが指定されるべき変数「Ｘ」の値を含有する陰影領域２２２を備える。言い換えると、変数Ｘは、標的データアドレスに対応する。第３の４キロバイトフレーム２３０もまた、図２に示されるが、本実施例では、本フレームは、特定の関心命令または変数を含有しない。
【００６１】
連続フレームのベース間の仮想メモリにおける分離は、実質的に、一定であるように配列される。プログラムが、フレームベースアドレスＰ＆Ｄとともに作成される場合、次いで、これらのフレームが、オペレーティングシステムによって、アドレスＰ’およびＤ’に再配置される場合、Ｄ−Ｐは、Ｄ’−Ｐ’と等しくなければならないことが要求される。本例示的配列では、フレームサイズは、４ｋｂであるが、フレームサイズは、複数の異なる値から選択されることができることを理解されるであろう。しかしながら、プログラムコードおよび関連付けられたデータが、オペレーションシステムによって再配置され得る粒度は、フレームサイズの整数倍数であるべきという制約が存在する。これは、プログラムコードが、実際に、再配置されるかどうかにかかわらず、本技法による、相対アドレス指定が、有効であり続けることを保証するためである。フレームオフセットビットの数、ひいては、フレームサイズは、命令エンコーディング、すなわち、図８Ａ、８Ｂ、９Ａ、および９ＢのＡＤＤ、ＬＤＲ、およびＳＴＲ命令のオフセットまたは即値フィールド内のビットの最小数によって判定される。例えば、図４の１２ビットオフセットは、４キロバイトのフレームサイズをもたらす。
【００６２】
図２に示されるように、変数「Ｘ」に対する部分的アドレス結果は、仮想メモリの「フレームＤ」２２０のベースに対応し、「ｈｉ２１」で表されるフレームオフセットによって指定され、ＡＤＲＰ命令のエンコーディング内に含有される。本フレームオフセット値は、ＡＤＲＰ命令２１２を含有するフレームのベースアドレスに対応するプログラムカウンタの調節された値に対して、変数「Ｘ」に対するアドレスが位置するメモリのフレームのベースアドレスを識別する。したがって、ＡＤＲＰ命令の実行は、フレームＰのベースアドレスに対して、フレームＤのベースアドレスに対応する部分的アドレス結果を算出する。例えば、ＡＤＤ、ＬＤＲ、またはＳＴＲ命令のさらなる補助プログラム命令は、そのエンコーディング内に、標的変数「Ｘ」のフレーム２２０内の場所を指定する、図２において「ｌｏ１２」で表されるフレーム内オフセットフィールドを提供する。したがって、フレームオフセット値ｈｉ２１およびフレーム内オフセット値ｌｏ１２の組み合わせによって得られる完全３３ビットオフセットは、２つの異なる命令を実行することによって指定される。本配列では、ＡＤＲＰ命令およびさらなる命令、例えば、加算命令の両方とも、３２ビットの幅を伴う命令である。
【００６３】
図３は、本技法に従って、部分的アドレス結果を計算するために使用され、ＡＤＲＰ命令の実行に対応する、アドレス計算演算を図式的に図示する。ＡＤＲＰ命令のエンコーディングは、図３の要素３１０に示される。示されるように、ＡＤＲＰ命令は、３２ビット幅命令であって、下位５ビット、すなわち、ＡＤＲＰ［４：０］は、ＡＤＲＰ命令の実行の結果が書き込まれるべき宛先レジスタを指定する。ＡＤＲＰエンコーディングのビット［２３：５］は、第１のフレームオフセットフィールドである、「ｉｍｍｈｉ」とラベルされる１９ビット値である。第２のフレームオフセットフィールド「ｉｍｍｌｏ」は、ＡＤＲＰエンコーディングのビット［３０：２９］うちに指定される。第１および第２のフレームオフセットフィールドは、組み合わせられ（この場合、連結され）、３３ビットフレームオフセット値３２２に対応する２１ビット部分を形成する。図３に示されるように、フレームオフセット値３２２の残りの１２ビットはすべて、ゼロビットである。１２個のゼロビットは、フレームＤのベース（図２参照）が、ＡＤＲＰ命令の実行結果（すなわち、部分的アドレス結果）によって指定されることを保証する。また、図３では、２つ以上のオフセットフィールド（フィールド「ｉｍｍｈｉ」およびフィールド「ｉｍｍｌｏ」）が、ＡＤＲＰ命令エンコーディング内に存在するが、いったんデコードされると、１つのみのオフセット値が存在することに留意されたい。したがって、アドレス計算命令の代替実装では、エンコーディング内の命令に、１つ、２つ、またはそれ以上のオフセットフィールドが存在し得るが、いったんデコードされると、単一オフセット値となる。ＡＤＲＰ命令のビット３１は、命令によって指定される演算のタイプをエンコードし、この場合、プログラムカウンタに対して、４キロバイトメモリフレームのベースのアドレスを計算するためのＰＣ相対アドレス指定命令である。
【００６４】
図３のデータ要素３２０は、図１のデコーディング回路１４０による、ＡＤＲＰ命令３１０のデコーディングの結果を示す。本６４ビットデータ要素は、３３ビットフレームオフセット値３２２および３１ビット符号拡張を備える。デコーディングプロセスの間、ＡＤＲＰエンコーディング３１０のｉｍｍｈｉフィールドおよびｉｍｍｌｏフィールドは、連結され、６４ビット値３２０のビット［３２：１２］を形成し、効果的に、連結されたオフセットフィールドを４キロバイトのフレームサイズで乗算する。６４ビット値３２０の上位３１ビット［６３：３３］は、次いで、ビット３２のコピーに設定され、オフセット値の符号拡張をもたらす。６４ビット値３２０の下位１２ビット［１１：０］は、基準値に設定され、この場合、１２個のゼロビットのストリングである。フレームオフセット値３２２は、部分的オフセット値と見なされることができ、さらなるプログラム命令の実行に応じて、補助オフセット値と組み合わせられ、フルオフセットを形成し、情報エンティティのメモリ場所を指定するフルアドレスをもたらすであろう。図３の実施形態では、フレームオフセット値３２２は、符号拡張され、符号付きフレームオフセット値を生成する。フレームオフセット値３２２は、部分的アドレス結果と見なされることができる。代替として、符号拡張されたフレームオフセット値３２２は、部分的アドレス結果と見なされることができる。
【００６５】
ＡＤＲＰ命令の実行はまた、図３で３５０として表される６４ビットプログラムカウンタレジスタ内に記憶される値をとり、その６４ビット値の下位１２ビットをゼロ化することを含む。下位１２ビットのゼロ化は、事実上、６４ビットプログラムカウンタの上位５２ビット内の情報のみ、留保されることを意味する。プログラムカウンタのこれらの上位５２ビットは、プログラムカウンタによってアドレスされるメモリのフレームのベースを指定する（図２参照）。ゼロ化されるか、または他の基準値に設定される、下位１２ビットは、ＡＤＲＰ命令に対応するプログラムカウンタのメモリフレーム内のフレーム内オフセットに対応する。したがって、プログラムカウンタ３５０内の値の下位１２ビットのゼロ化の中間結果３６０は、仮想メモリの「フレームＰ」２２０のフレームベースアドレスを指定する（図２参照）。
【００６６】
図３の要素３７０は、ＡＤＲＰ命令３１０の実行に応じて行われる、加算演算を行うための回路を示す。加算の結果は、宛先レジスタＲｄに書き込まれ、ＡＤＲＰエンコーディング３１０のスケーリングされ、符号拡張されたフレームオフセットフィールドをプログラムカウンタに対応する６４ビット値３６０（下位１２ビットがゼロ化されている）に加算することによって得られる。本加算の結果は、図２に示されるように、標的変数「Ｘ」を含有するメモリフレームのベースを指定する、部分的アドレス結果４１０である。
【００６７】
図４は、図３に図示されるＡＤＲＰ実行３７０の結果に基づいて、図２の変数「Ｘ」のフルアドレス値の計算を図式的に図示する。３２ビット加算エンコーディング４２０は、１２ビットフレーム内オフセットフィールド４２２を備える。図４に示されるように、図３の実施例において宛先レジスタＲｄに書き込まれたＡＤＲＰ実行の６４ビット結果４１０は、回路４３０によって、１２ビットフレーム内オフセットフィールドによって指定された、１２ビットフレーム内オフセット値、すなわち、加算エンコーディングのビット［２１：１０］を含有する、３２ビット幅加算命令４２０から構成される６４ビット値に加算される。本特定の実施形態（図４）では、フレーム内オフセット値は、フレーム内オフセットフィールドに等しいことに留意されたい。対照的に、図３から、フレームオフセット値は、ＡＤＲＰ命令の２つの連結されたフレーム−オフセットフィールド（すなわち、「ｉｍｍｈｉ」および「ｉｍｍｌｏ」）をスケーリングおよび符号拡張することによって、構成されることが分かる。図３のアドレス生成命令のフレームオフセットフィールド３２２は、符号拡張され、符号付きフレームオフセット値を生成するはずであるが、図４のフレーム内オフセットフィールド４２２は、符号拡張またはゼロ拡張のいずれかが行われ得る。図４の実装では、ゼロ拡張される。一般に、フレーム内オフセット値４２２（すなわち、デコードされたフレーム内オフセットフィールド４２２）は、必ずしも、フレーム内オフセットフィールドと等しくなく、また、少量だけスケーリングされ得る。例えば、本技法による、ある命令セットアーキテクチャでは、フレーム内オフセット値を生成するために、フレーム内オフセットフィールドは、アクセスのサイズだけスケーリングされ、すなわち、１２ビットオフセットフィールドは、ハーフワード（２バイト）アクセスに対して、１３ビットオフセット値を生成するために、２で乗算され、ワード（４バイト）アクセスに対して、４で乗算される等となるが、余剰高次ビットは、本アドレス指定モードに対して（すなわち、補助命令として、ＡＤＲＰと併用されるとき）利用されない。加算命令４２０を実行する結果は、図２の変数「Ｘ」に対応するフルアドレスを含有する６４ビット結果値４４０をもたらす。
【００６８】
したがって、図２に戻って参照すると、加算演算４３０の結果４４０は、仮想メモリの「フレームＤ」２２０内の変数「Ｘ」の正確な場所２２２を指定する。図４の例示的実施形態では、６４ビットオフセットの下位１２ビットを提供するために、加算命令が、さらなる（または、補助）命令として使用されたが、代替命令が、本目的のために使用され得ることに留意されたい。例えば、ベースプラスオフセットアドレス指定モードを利用する、記憶命令ＳＴＲまたはロード命令ＬＤＲは、代替として、単一命令によって、フルアドレスを計算し、そのメモリ場所にアクセスするために使用され得る。加算命令等の以前に公知の命令は、補助命令として使用され、加算命令のソースレジスタフィールド内でエンコードされた値をＡＤＲＰ命令（アドレス計算命令）の実行の結果を記憶する、宛先レジスタに設定することによって、部分的オフセットからフルオフセットを計算することができる。故に、以前に公知の加算命令は、本技法に従って、加算命令（補助命令）の実行に応じて、フルオフセットおよびフルアドレスを生成するために、入力オペランドとして、部分的アドレス結果（すなわち、図３のＡＤＲＰ命令を実行する結果）を指定するように構成されることができる。以前に公知の命令は、本技法に従って、補助プログラム命令として構成されることができるが、代替実施形態では、新しい目的特有の補助命令が、本技法に従って、アドレス計算命令の実行によって生成される部分的アドレス結果を前提として、フルオフセットの計算のために展開され得る。
【００６９】
図５は、本技法のアドレス計算命令に対応するＡＤＲＰ命令と、また、この場合、ＬＤＲ命令として示される、補助命令のアセンブラ文法表現を図式的に図示する。示されるように、ＡＤＲＰ命令は、宛先６４ビットレジスタを指定し、部分的アドレス結果は、ＡＤＲＰ命令の実行後、記憶され、さらなる引数として、「ラベル」、すなわち、その４キロバイトフレームベースアドレスが計算されるべき変数の名称をとる。補助ＬＤＲ命令は、第１の引数として、転送されるべき「Ｘｔ」によって表される６４ビット宛先レジスタをとり、第２の引数として、６４ビットベースレジスタおよびフルアドレスの下位１２ビットに対応する１２ビット非符号付き即値（すなわち、オフセット）の両方が、指定される。
【００７０】
また、図５に示されるのは、ＬＤＲエンコーディングのビット［２１：１０］が、１２ビットフレーム内オフセットフィールドを含有するという事実である。図５における命令シーケンス５３０は、（ｉ）そのベースレジスタとしてのＡＤＲＰ命令の宛先レジスタＸｄ、（ｉｉ）フレーム内オフセット値に対応する下位１２ビットを指定する、ＡＤＲＰ命令後のＬＤＲ命令の実行が、どのように組み合わせて、フルアドレスを計算し、同時に、そのアドレスからのデータをレジスタＸｔ中にロードするために使用され得るかを示す。効果的に、レジスタＸｄは、基準アドレスに加えて、３３ビットフレームオフセットの上位２１ビットを含有する一方、ＬＤＲ命令のフィールド「ｌｏ１２」は、３３ビットオフセットの下位１２ビットを提供する。
【００７１】
対照的に、命令シーケンス５４０は、フル標的メモリアドレスを指定する以前に公知の代替方法を図示する、旧来の３２ビットＡＲＭコードに対応する。これは、最初に、第１のＰＣ相対ＬＤＲ命令を使用して、メモリ内のリテラルプールからオフセットをロードし、次いで、メモリから読み出された値をプログラムカウンタに加算し、第２のＬＤＲ命令を介して、フルアドレスを生成することを伴う。シーケンス５４０の第１のＬＤＲ命令の実行の間、オフセットにアクセスする試みが、データキャッシュミスをもたらす場合、データ処理装置は、オフチップメモリにアクセスすることが要求され、パイプライン失速をもたらす可能性が高い。対照的に、本技法に対応する命令５３０のシーケンスは、２つのプログラム命令ＡＤＲＰおよびＬＤＲの組み合わせのプログラム命令エンコーディング内のパラメータとして、オフセットを完全にインラインで指定する。これは、５４０のシーケンスの２つのロード動作間の依存性を回避し、より効率的に実行される可能性が高く、さらに、定数オフセットを記憶するための余剰メモリを要求しない。
【００７２】
図６は、本技法による、アドレス計算命令および補助命令が、どのように可分性および再利用性の特徴を有するか、すなわち、フルアドレス計算の精度を留保するために、即時連続して、アドレス計算命令および補助命令を実行する必要はないことを図式的に図示する。図６の実施例１は、プログラムコードの単一シーケンスにおけるＡＤＲＰ命令のいくつかの異なる発生が、どのように許容されるかを示す。図６の左側には、ＡＤＲＰ命令の２つの個別のバージョンが、１つは、「ｏｆｆ１」のフレーム内オフセットを伴う第１のプログラムカウンタ「ＰＣ１」を有するフレーム６１０内に、１つは、「ｏｆｆ２」のフレーム内オフセットを伴う第２の異なるプログラムカウンタ「ＰＣ２」を有するフレーム６２０内に示される。
【００７３】
図３に示されるように、３３ビットフレームオフセット値３２２の６４ビット符号拡張バージョン３２０の下位１２ビットと、部分的アドレスの下位１２ビットは、値ゼロを有するという事実のため、第１のＡＤＲＰ命令ＡＤＲＰ１および第２のＡＤＲＰ命令ＡＤＲＰ２両方のそれぞれの実行は、標的変数「ｖａｒＸ」を含有するフレーム６３０のベースアドレスに対応する結果をもたらす。これは、図６における値「ｏｆｆ１」に対応する第１のプログラムカウンタＰＣ１のフレーム内オフセットが、ＡＤＲＰ２命令のフレーム内オフセット値、すなわち、図６における「ｏｆｆ２」と異なるという事実にもかかわらずである。変数「ｖａｒＸ」のフルアドレスが、次いで、ＬＤＲ命令の実行によって、フルアドレスの下位１２ビットを提供することを介して、正確に導出され、それらの１２ビットを命令ＡＤＲＰ１およびＡＤＲＰ２によって書き込まれた宛先レジスタ内に記憶されたフレームベースアドレスと組み合わせる。
【００７４】
図６はまた、「実施例２」と表される第２の実施例を示しており、命令シーケンスは、同一の標的変数ｖａｒＸのアドレスを計算するために使用され得る単一ＡＤＲＰ命令と２つの異なるさらなる命令とを備えるように図示される。ＡＤＲＰ命令の実行後、宛先レジスタＸｄ内に記憶される値は、標的変数を含有するフレーム６３０のベースに対応するであろう。故に、ＬＤＲ命令が実行されると、「：ｌｏ１２：ｖａｒＸ」として書かれる１２ビットフレーム内オフセット値は、レジスタＸｄ内に含有されるフレームベースアドレスに加算され、変数ｖａｒＸのフルアドレスをもたらすであろう。
【００７５】
いくつかの介入命令、すなわち、ＩＮＳＴＲＮ  Ｐ、ＩＮＳＴＲＮ  Ｑ、およびＩＮＳＴＲＮ  Ｒが、実施例２における６つの命令の最後である、ＳＴＲ命令の実行に先立って、本第２の例示的コードシーケンスにおいて実行される。本ＳＴＲ命令はまた、第１のＡＤＲＰ命令の実行の間、宛先レジスタＸｄ内に記憶された結果を使用し、再び、その中で指定されたフレームベースアドレスをＳＴＲ命令自体内で指定された１２ビットフレーム内オフセットと組み合わせる。実施例２のＬＤＲ命令およびＳＴＲ命令は両方とも、図３のフレーム６３０内の変数ｖａｒＸのための正確なフルアドレスをもたらす。したがって、図６は、本技法による、アドレス計算命令および少なくとも１つのさらなる命令が、分離可能であることを図示し、また、変数のアドレス計算の精度を落とさずに、プログラムコードの同一のシーケンス内に（すなわち、プログラムコード内の異なる場所において）、アドレス計算命令および補助命令のいくつかの発生が存在し得ることを図示する。ともにプログラム命令自体内にフルアドレスをインラインで指定する、本別個のアドレス計算命令および補助命令（ＬＤＲまたはＳＴＲ）の提供は、コンパイラが、相対アドレス指定に対して、オフセット値の上位部分および下位部分に分割し、オフセットの２つの構成要素を独立して処理し、プログラムコード内の別個の点において、２つの異なる命令の実行をもたらすことを可能にする。
【００７６】
例示的実施形態では、３３ビットオフセットが指定されるが、本技法は、任意の選択されたサイズのオフセットを指定するために使用され得、オフセットサイズは、フルアドレスを構成するために使用されるアドレス計算命令および１つ以上のさらなる命令内に配分されるビットの数によってのみ制限されることを理解されるであろう。同様に、単一補助（さらなる）命令が、オフセットの下位ビットを提供するように図示されたが、本技法に従って、複数のさらなる命令を使用して、アドレス計算命令によって提供される部分的アドレスと組み合わせて、オフセットの異なる部分を提供し得ることを理解されるであろう。
【００７７】
図７は、本技法による、ＰＣ相対アドレス指定命令、すなわち、アドレス計算命令の完全詳細を図式的に図示する。要素７１０は、命令エンコーディングを示し、また、示されるのは、本命令のデコーディングおよび実行の間に行われる演算である。これらの演算はまた、前述の図３によって図式的に図示される。
【００７８】
図８Ａは、本技法による、少なくとも１つのさらなる命令として使用するためのオプションの１つである、加減算命令の詳細を図式的に図示する。加算命令のエンコーディング８１０は、適切なアセンブラ文法およびオペランドとともに示される。
【００７９】
図８Ｂは、図８Ａの加減算命令の実行をデコードするための擬似コードを図式的に図示する。
【００８０】
図９Ａは、本技法による、少なくとも１つのさらなる命令のための図８ＡおよびＢのものと異なるオプションに対応する、ロード−記憶レジスタ命令の詳細を図式的に図示する。要素９１０は、ＬＤＲまたはＳＴＲ命令のための命令エンコーディングとともに、ベースプラスオフセットアドレス指定モードを図式的に図示する。
【００８１】
図９Ｂは、図９ＡのＬＤＲまたはＳＴＲ命令に対応するアセンブラ文法とともに、これらのロード−記憶レジスタ命令のデコードのための擬似コードを示す。
【００８２】
図１０は、使用され得る仮想機械実装を図示する。前述の実施形態は、関係技法をサポートする具体的処理ハードウェアを動作させるための装置および方法の観点から、本発明を実装するが、また、ハードウェアデバイスのいわゆる仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム１０１０をサポートするホストオペレーティングシステム１０２０を典型的に起動する、ホストプロセッサ１０３０上で起動される。典型的には、大型の強力なプロセッサが、合理的速度で実行する、仮想機械実装を提供するために要求されるが、そのようなアプローチは、互換性または再利用の理由から、別のプロセッサにネイティブなコードを起動することを所望するとき等、ある状況においては、正当化され得る。仮想機械プログラム１０１０は、そのような実際のハードウェアデバイスによるプログラムの実行によってもたらされるであろう、同一の結果をもたらすために、アプリケーションプログラム（または、オペレーティングシステム）１０００を実行可能である。したがって、前述のメモリアクセスの制御を含む、プログラム命令は、仮想機械プログラム１０１０を使用して、アプリケーションプログラム１０００内から実行され、仮想機械ハードウェアとのその相互作用をモデル化してもよい。
【図１】
0005938053.tif 000002
【図２】
0005938053.tif 000003
【図３】
0005938053.tif 000004
【図４】
0005938053.tif 000005
【図５】
0005938053.tif 000006
【図６】
0005938053.tif 000007
【図７】
0005938053.tif 000008
【図８Ａ】
0005938053.tif 000009
【図８Ｂ】
0005938053.tif 000010
【図９Ａ−１】
0005938053.tif 000011
【図９Ａ−２】
0005938053.tif 000012
【図９Ｂ−１】
0005938053.tif 000013
【図９Ｂ−２】
0005938053.tif 000014
【図１０】
0005938053.tif 000015