(57)【要約】内部命令を実行するようになっている実行コアと、  １つ以上の内部命令のうちの複数の内部命令ブロックを記憶するようになっている変換バッファとを備え、前記内部命令ブロックが１つ以上の外部命令のうちのそれぞれの外部命令ブロックのダイナミックな変換であり、  対応する内部命令ブロックからの１つ以上の内部命令を前記実行コアに供給できるよう、前記変換バッファ内に記憶された前記対応する内部命令ブロックを識別するための前記外部命令ブロックのうちの１つのうちにある、外部命令のための実行リクエストに応答自在なリマッパーを備えた、データを処理するための装置が提供される。
2005539321.tif 000002
【特許請求の範囲】
【請求項１】
内部命令を実行するようになっている実行コアと、
１つ以上の内部命令のうちの複数の内部命令ブロックを記憶するようになっている変換バッファとを備え、前記内部命令ブロックが１つ以上の外部命令のうちのそれぞれの外部命令ブロックのダイナミックな変換であり、
対応する内部命令ブロックからの１つ以上の内部命令を前記実行コアに供給できるよう、前記変換バッファ内に記憶された前記対応する内部命令ブロックを識別するための前記外部命令ブロックのうちの１つのうちにある、外部命令のための実行リクエストに応答するリマッパーを備えた、データを処理するための装置。
【請求項２】
前記実行リクエストが外部命令ブロック内の第１外部命令に対するものであり、前記対応する内部命令ブロックからの第１内部命令によってスタートする前記実行コアに前記対応する内部命令ブロックからの内部命令が供給される、請求項１記載の装置。
【請求項３】
内部命令ブロックがそれぞれの対応する外部命令ブロックに機能的に等価的である、請求項１および２のいずれかに記載の装置。
【請求項４】
前記外部命令ブロックが可変長である、請求項１、２および３のいずれかに記載の装置。
【請求項５】
前記内部命令ブロックが可変長である、前の請求項のいずれかに記載の装置。
【請求項６】
前記内部命令が外部からアクセスできる命令セットの一部である、前の請求項のいずれかに記載の装置。
【請求項７】
外部命令ブロックがブランチ外部命令によって終了される、前の請求項のいずれかに記載の装置。
【請求項８】
内部命令ブロックがブランチ内部命令によって終了される、前の請求項のいずれかに記載の装置。
【請求項９】
前記リマッパーが前記変換バッファ内の外部命令ブロックのアドレスと対応する内部命令ブロックのアドレスとの間のマッピングを識別するマッピングデータを記憶する、前の請求項のいずれかに記載の装置。
【請求項１０】
前記リマッパー内のリマッパーメモリ内に前記マッピングデータが記憶される、請求項９記載の装置。
【請求項１１】
前記リマッパーメモリが複数のリマッパーメモリ部分に分割されており、各リマッパーメモリ部分が前記変換バッファ内のそれぞれの変換バッファ部分に関連しており、前記関連する変換バッファ部分が新しく発生したマッピングデータを取り込むための自由スペースを有しなくなるまで、前記リマッパーメモリ部分の１つが新しく発生されたマッピングデータを受けるように働き、前記関連した変換バッファが新しく発生されたマッピングデータを取り込むための自由スペースを有しなくなると、前記リマッパーメモリ部分の別の部分が選択され、クリアされ、その内部に記憶された新しく発生されたマッピングデータが記憶されると共に新しく発生された内部命令ブロックが関連する変換バッファ部分に記憶されるよう前記リマッパーが作動できる、請求項１０記載の装置。
【請求項１２】
前記リマッパーメモリ部分の前記別の部分がラウンドロビンアルゴリズムを使って選択される、請求項１１記載の装置。
【請求項１３】
前記内部命令が外部命令間の境界に対応するかどうかを特定する内部命令ブロック内の各内部命令に対する外部命令境界制御データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１４】
前記内部命令ブロック内の先行する命令に依存することなく前記内部命令を実行してよいかどうか、を特定する内部命令ブロック内の各内部命令に対する命令非依存制御データ（ｉｎｓｔｒｕｃｔｉｏｎ  ｉｎｄｅｐｅｎｄｅｎｃｅ  ｃｏｎｔｒｏｌ  ｄａｔａ）も前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１５】
システムステートを破壊することなく、完了前に前記内部命令を終了してよいかどうかを指定する内部命令ブロック内の各内部命令に対する早期終了制御データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１６】
前記内部命令ブロックの実行完了時に取り込むべき、予測されたブランチターゲットを指定する各内部命令ブロックに対するブランチ予測データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１７】
実行すべき予測された次の内部命令ブロックの前記変換バッファ内でのロケーションを指定する、各内部命令ブロックに対する次のブロックデータも、前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１８】
前記内部命令ブロックの実行に関する統計を指定する各内部命令ブロックに対するコードプロフィル化データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１９】
検出された実行行動に応答して記憶された内部命令ブロックに関する前記変換バッファ内に記憶されたデータを更新するようになっている更新器を含む、請求項１６、１７および１８のいずれかに記載の装置。
【請求項２０】
外部命令ブロックを内部命令ブロックに変換するようになっている命令変換器を含む、前の請求項のいずれかに記載の装置。
【請求項２１】
前記命令変換器が、
ハードウェアに基づく命令変換器および
ソフトウェアに基づく命令変換器のうちの１つである、請求項２０記載の装置。
【請求項２２】
ロックダウン記憶装置内に内部命令ブロックを配置できるロックダウン領域を前記変換バッファが含む、前の請求項のいずれかに記載の装置。
【請求項２３】
前記変換バッファ内に予め記憶された内部命令ブロックが少なくとも一時的に記憶されるレスキューメモリであって、前記変換バッファ内の前記内部命令ブロックを求めているときに不一致が生じた場合、前記内部命令ブロックをアクセスのために利用できる前記レスキューメモリを含む、前の請求項のいずれかに記載の装置。
【請求項２４】
少なくともいくつかの内部命令または内部命令ブロックがプログラム実行フロー内のそれらの位置に先んじてスペキュレーティブに実行される、前の請求項のいずれかに記載の装置。
【請求項２５】
外部命令ブロックを内部命令ブロックに変換するときの、前記外部命令ブロックに関して利用できる実行時間命令に前記命令変換器が応答する、請求項２０および２１のいずれかに記載の装置。
【請求項２６】
前記命令変換器が、
メモリアドレスを決定すること、
インライン例外ハンドラーを決定すること、
モード変化を除くこと、および
実行時間において一定またはほぼ一定の情報に依存する計算を簡略化することのうちの１つ以上を行うように作動できる、請求項２５記載の装置。
【請求項２７】
内部命令ブロックのうちの内部命令の実行中に例外が発生した時、例外取り扱い命令の実行と例外が生じたポイントにおける前記内部命令ブロックの実行の再開を可能とするための例外リターンポインタの記憶とをトリガーするように作動できる例外ハンドラーを含む、前の請求項のいずれかに記載の装置。
【請求項２８】
内部命令ブロックのうちの内部命令の実行中にインターラプトが発生した時、インターラプト取り扱い命令の実行と前記例外が生じたポイントにおける前記内部命令ブロックの実行の再開を可能とするためのインターラプトリターンポインタの記憶とをトリガーするように作動できるインターラプトハンドラーを含む、前の請求項のいずれかに記載の装置。
【請求項２９】
前記リマッパーおよび変換バッファが外部命令ブロックの異なるタイプに対応する内部命令ブロックを記憶するように割り当てられた複数の部分を有する、前の請求項のいずれかに記載の装置。
【請求項３０】
前記リマッパーメモリが外部命令ブロックの異なるタイプに対応するマッピングデータを記憶するように割り当てられた複数の部分を有する、請求項１０記載の装置。
【請求項３１】
ロックダウン記憶装置内に配置された内部命令ブロックが前記リマッパーにおけるルックアップを低減するようにあらかじめ処理される、請求項２２記載の装置。
【請求項３２】
前記変換バッファがプログラム制御によりアクセスできる物理メモリのエリアにアドレスマッピングされる、前の請求項のいずれかに記載の装置。
【請求項３３】
リマッパーバイパスブランチ内部命令が前記リマッパーの動作をバイパスするブランチ動作を実行するようになっている、前の請求項のいずれかに記載の装置。
【請求項３４】
１つ以上のリマッパー管理内部メモリが前記リマッパーでの管理動作を実行するようになっている、前の請求項のいずれかに記載の装置。
【請求項３５】
１つ以上の内部命令の複数の内部命令ブロックを変換バッファ内に記憶する工程を備え、前記内部命令ブロックが１つ以上の外部命令のそれぞれの外部命令ブロックのダイナミック変換であり、
更に前記外部命令ブロックのうちの１つの外部にある外部命令に対する実行リクエストに応答し、前記変換バッファ内に記憶された対応する内部命令ブロックを識別する工程と、
前記対応する内部命令ブロックから内部命令を実行するようになっている実行コアへ１つ以上の内部命令を供給する工程とを備えた、データを処理する方法。
【請求項３６】
前記実行リクエストが外部命令ブロック内の第１外部命令に対するものであり、前記対応する内部命令ブロックからの第１内部命令によってスタートする前記実行コアに前記対応する内部命令ブロックからの内部命令が供給される、請求項３５記載の方法。
【請求項３７】
内部命令ブロックがそれぞれの対応する外部命令ブロックに機能的に等価的である、請求項３５および３６のいずれかに記載の方法。
【請求項３８】
前記外部命令ブロックが可変長である、請求項３５、３６および３７のいずれかに記載の方法。
【請求項３９】
前記内部命令ブロックが可変長である、請求項３５〜３８のいずれかに記載の方法。
【請求項４０】
前記内部命令が外部からアクセスできる命令セットの一部である、請求項３５〜３９のいずれかに記載の方法。
【請求項４１】
外部命令ブロックがブランチ外部命令によって終了される、請求項３５〜４０のいずれかに記載の方法。
【請求項４２】
内部命令ブロックがブランチ内部命令によって終了される、請求項３５〜４１のいずれかに記載の方法。
【請求項４３】
前記変換バッファ内の外部命令ブロックのアドレスと対応する内部命令ブロックのアドレスとの間のマッピングを識別するマッピングデータを記憶する工程を備えた、請求項３５〜４２のいずれかに記載の方法。
【請求項４４】
リマッパーメモリ内に前記マッピングデータが記憶される、請求項４３記載の方法。
【請求項４５】
前記リマッパーメモリが複数のリマッパーメモリ部分に分割されており、各リマッパーメモリ部分が前記変換バッファ内のそれぞれの変換バッファ部分に関連しており、前記関連する変換バッファ部分が新しく発生したマッピングデータを取り込むための自由スペースを有しなくなるまで、前記リマッパーメモリ部分の１つが新しく発生されたマッピングデータを受けるように働き、前記関連した変換バッファが新しく発生されたマッピングデータを取り込むための自由スペースを有しなくなると、前記リマッパーメモリ部分の別の部分が選択され、クリアされ、その内部に新しく発生されたマッピングデータが記憶されると共に新しく発生された内部命令ブロックが関連する変換バッファ部分に記憶される、請求項４４記載の方法。
【請求項４６】
前記リマッパーメモリ部分の前記別の部分がラウンドロビンアルゴリズムを使って選択される、請求項４５記載の方法。
【請求項４７】
前記内部命令が外部命令間の境界に対応するかどうかを特定する内部命令ブロック内の各内部命令に対する外部命令境界制御データも前記変換バッファが記憶する、請求項３５〜４６のいずれかに記載の方法。
【請求項４８】
前記内部命令ブロック内の先行する命令に依存することなく前記内部命令を実行してよいかどうかを特定する内部命令ブロック内の各内部命令に対する命令非依存制御データも前記変換バッファが記憶する、請求項３５〜４７のいずれかに記載の方法。
【請求項４９】
システムステートを破壊することなく、完了前に前記内部命令を終了してよいかどうかを指定する内部命令ブロック内の各内部命令に対する早期終了制御データも前記変換バッファが記憶する、請求項３５〜４８のいずれかに記載の方法。
【請求項５０】
前記内部命令ブロックの実行完了時に取り込むべき、予測されたブランチターゲットを指定する各内部命令ブロックに対するブランチ予測データも前記変換バッファが記憶する、請求項３５〜４９のいずれかに記載の方法。
【請求項５１】
実行すべき予測された次の内部命令ブロックの前記変換バッファ内でのロケーションを指定する、各内部命令ブロックに対する次のブロックデータも、前記変換バッファが記憶する、請求項３５〜５０のいずれかに記載の方法。
【請求項５２】
前記内部命令ブロックの実行に関する統計を指定する各内部命令ブロックに対するコードプロフィル化データも前記変換バッファが記憶する、請求項３５〜５１のいずれかに記載の方法。
【請求項５３】
検出された実行行動に応答して、記憶された内部命令ブロックに関する前記変換バッファ内に記憶されたデータを更新することを含む、請求項５０、５１および５２のいずれかに記載の方法。
【請求項５４】
外部命令ブロックを内部命令ブロックに変換することを含む、請求項３５〜５３のいずれかに記載の方法。
【請求項５５】
前記変換が、
ハードウェアに基づく命令変換器および
ソフトウェアに基づく命令変換器のうちの１つによって実行される、請求項５４記載の方法。
【請求項５６】
ロックダウン記憶装置内に内部命令ブロックを配置できるロックダウン領域を前記変換バッファが含む、請求項３５〜５５のいずれかに記載の方法。
【請求項５７】
前記変換バッファ内に予め記憶された内部命令ブロックが少なくとも一時的にレスキューメモリに記憶され、前記変換バッファ内の前記内部命令ブロックを求めているときに不一致が生じた場合、前記レスキューメモリがアクセスのために利用できる、請求項３５〜５６のいずれかに記載の方法。
【請求項５８】
少なくともいくつかの内部命令または内部命令ブロックがプログラム実行フローと異なる順序でスペキュレーティブにスケジューリングされる、請求項３５〜５７のいずれかに記載の方法。
【請求項５９】
外部命令ブロックを内部命令ブロックに変換するときの、前記外部命令ブロックに関して利用できる実行時間情報に前記変換が応答する、請求項３５〜５８のいずれかに記載の方法。
【請求項６０】
前記変換が、
メモリアドレスを決定すること、
インライン例外ハンドラーを決定すること、
モード変化を除くこと、および
実行時間において利用できる情報に依存する計算を簡略化することのうちの１つ以上を行うようになっている、請求項５９記載の方法。
【請求項６１】
内部命令ブロックの内部命令を実行する間に例外が発生したときに、例外取り扱い命令の実行をトリガーし、前記例外が生じたポイントで前記内部命令ブロックの実行を再開できるように例外リターンポインタを記憶する、請求項３５〜６０のいずれかに記載の方法。
【請求項６２】
内部命令ブロックの内部命令を実行中にインターラプトが発生したときに、インターラプト取り扱い命令の実行をトリガーし、前記インターラプトが生じたポイントで前記内部命令ブロックの実行を再開できるようにインターラプトリターンポインタを記憶する、請求項３５〜６１のいずれかに記載の方法。
【請求項６３】
前記変換バッファが外部命令ブロックの異なるタイプに対応する内部命令ブロックを記憶するように割り当てられた複数の部分を有する、請求項３５〜６２のいずれかに記載の方法。
【請求項６４】
前記リマッパーメモリが外部命令ブロックの異なるタイプに対応するマッピングデータを記憶するように割り当てられた複数の部分を有する、請求項４４記載の方法。。
【請求項６５】
ロックダウン記憶装置内に配置された内部命令ブロックが前記リマッパーにおけるルックアップを低減するようにあらかじめ処理される、請求項５６記載の方法。
【請求項６６】
前記変換バッファがプログラム制御によりアクセスできる物理メモリのエリアにアドレスマッピングされる、請求項３５〜６５のいずれかに記載の方法。
【請求項６７】
リマッパーバイパスブランチ内部命令が前記リマッパーの動作をバイパスするブランチ動作を実行するようになっている、請求項３５〜６６のいずれかに記載の方法。
【請求項６８】
１つ以上のリマッパー管理内部命令が前記リマッパーでの管理動作を実行するようになっている、請求項３５〜６７のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は外部命令セットおよび内部命令セットを有するデータ処理システムに関し、例えば内部で実施される命令セットから、プロセッサの外部からみることができる命令セットの結合を外すよう、ソフトウェア変換器またはハードウェア変換器と組み合わされた特にメモリ構造を使用する、命令キャッシュメモリを有するかかるシステムに関する。
【背景技術】
【０００２】
命令変換ハードウェアにより外部Ｊａｖａ（登録商標）バイトコードを内部ネーティブプロセッサメモリに変換するシステムを提供することは、米国特許第6,332,215号から公知である。
【０００３】
深くパイプライン化されたシステム内での処理速度を増す手段として、基本構成ブロックを別々にフェッチしなくてもスペキュレーティブトレースを容易にフェッチできるよう、コンピュータコードの基本ブロックのうちの１つのセットを通して前の実行パスを表示するデータを記憶することは、インテル社が製造するペンティアム（登録商標）ＩＶプロセッサのトレースキャッシュ機構から公知である。スペキュレーティブトレース構造を特定するためにタグ内のポインタと共に固定サイズのラインを使用する従来のキャッシュ内にトレース情報が記憶される。後に理解できるように、本発明は従来のキャッシュ構造の上部に構築されるものではなく、本発明は標準的なＲＡＭ構造の頂部において可変サイズのブロックからなる一次キャッシュを実施するものであり、これによってスペース効率を高くし、より高速の作動を促進できる。
【０００４】
トランスメタ社が製造するマイクロプロセッサでは非ネーティブ命令セットからネイティブ命令セットに変換し、プロセッサで実行するためにこの変換を管理するためのソフトウェアを使用するシステムを提供することは公知となっている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
多数の外部命令セットをサポートするマイクロプロセッサを提供することも公知である。これらのマイクロプロセッサの一例として、現在３つの外部命令セット、すなわちＡＲＭ、ＴｈｕｍｂおよびＪａｖａ（登録商標）命令セットをサポートするＡＲＭアーキテクチャマイクロプロセッサがある。特定のマイクロプロセッサによってサポートされる異なる命令セットの数を多くできることが望ましいが、命令セットの数が多数になることによってデコーダが更に複雑となり、次にこのことによってプロセッサの性能および電力消費量に悪影響が及び得る。
【課題を解決するための手段】
【０００６】
１つの側面から見れば、本発明は、
内部命令を実行するようになっている実行コアと、
１つ以上の内部命令のうちの複数の内部命令ブロックを記憶するようになっている変換バッファとを備え、前記内部命令ブロックが１つ以上の外部命令のうちのそれぞれの外部命令ブロックのダイナミックな変換であり、
対応する内部命令ブロックからの１つ以上の内部命令を前記実行コアに供給できるよう、前記変換バッファ内に記憶された前記対応する内部命令ブロックを識別するよう、外部命令ブロックのための実行リクエストに応答するリマッパー（ｒｅｍａｐｐｅｒ）を備えた、データを処理するための装置を提供するものである。
【０００７】
リマッパーは前に遭遇した外部ブロックスタートアドレスの変換バッファ内の対応する内部アドレスへの正確なマッピングを含む。基本ブロックとして一般に知られるものに１つのブロックが関係するが、この知られたものに限定されるものではない。通常、１つ以上のブランチ命令のターゲットである命令でブロックがスタートし、このブロックはブランチ命令またはブロックサイズ上のあらかじめ指定された限界により終了される。しかしながら、後に判るように、あるケースではブロックは可能な場合に多数の基本ブロックからの命令を含む命令の一組を続行できるが、必ずしも元のプログラム順序で続行しなくてもよい。
【０００８】
本発明はある命令セットから別の命令セットへ変換することに関与するプロセッサの性能および電力消費量に対する悪影響を、変換バッファを使用することによって効果的に低減できると認識したものであり、この変換バッファでは当該コンピュータプログラムの同じ部分を実行すべきときに、更なる変換を必要とすることなく、外部メモリの対応するブロックのダイナミックに形成された変換である内部命令のブロックを直接再使用できるように記憶している。実際のコンピュータプログラムの多くはコンピュータコードの小さい同じ部分を繰り返し実行するので、このコンピュータコードを一旦変換した場合、別の変換に関連する性能のオーバーヘッドおよび電力消費量のオーバーヘッドを生じることなく、その変換を再使用できる。
【０００９】
外部命令に対する実行リクエストは外部命令ブロック内の最初の命令を除く他の命令にも可能であるが、メモリを節約するにはできるだけ少ないオーバーラップした変換を記憶することが大いに好ましいので、実行リクエストは内部命令ブロックからの最初の内部命令と共にスタートした実行コアへ供給された対応する内部命令ブロックからの内部命令と共に、外部命令ブロック内の最初の外部命令に対して行うべきである。
【００１０】
そのように作動しない実施例を製造することも可能であるが、内部命令ブロックは外部命令ブロックが指定した少なくとも機能を提供するという点で、内部命令ブロックはそれぞれ対応する外部命令ブロックに機能的に均等であることが大いに好ましい。
【００１１】
外部命令ブロックおよび／または内部命令ブロックが可変長であるときには、メモリ記憶リソースのフレキシビリティおよび効率的な使用を改善できる。
【００１２】
本発明は外部命令および内部命令の双方が外部のアクセス可能な命令セットの一部となっているシステムに特に適す。
【００１３】
外部命令ブロックを区切る好ましい方法は、外部命令ブロックをブランチ外部命令で終了させるようにすることである。このタイプの区切り方法は実際のプログラムの実行内のプログラムフローのジャンプに良好に適合する。
【００１４】
１つの外部命令ブロックを多数の内部命令フレームに変換する場合、好ましくは外部命令ブロックをブランチ外部命令で区切るときに、内部命令ブロックのすべてではない一部をブランチ命令により終了させることができるが、対応する内部命令ブロックをブランチ内部命令で終了させることも好ましい。内部命令ブロックは内部命令ブロックのすべてではない一部が１つのブランチで終了するような結果を生じさせる最大サイズを有することができる。
【００１５】
外部命令ブロックを内部命令ブロックに高速マッピングすることを容易にするために、リマッパー（ｒｅｍａｐｐｅｒ）は変換バッファ内の対応する内部命令ブロックのアドレスへの必要なマッピングおよびポインティングを識別するマッピングデータを記憶することが好ましい。
【００１６】
変換バッファを異なる部分に分割し、現在の部分内で自由スペースが利用できなくなるまで、新しく発生されたマッピングデータおよび変換された内部命令を書き込む、現在アクティブな部分としてのかかる１つの部分を使用することによって、変換専用のメモリリソースの管理を達成することが好ましく、自由スペースが利用できなくなったときに前に満たされた部分および関連するリマッパー部分をクリアし、新しく発生されたデータをその新しくクリアした部分に向ける。
【００１７】
使用すべきメモリリソースの異なる部分を選択するための好ましい技術は、ラウンドロビンアルゴリズムである。
【００１８】
変換バッファは、内部命令ブロックに関する別の情報、特にインターラプトおよび例外取り扱いなどを容易にするように特定の内部命令が外部命令の間の境界に対応するかどうかを特定する外部命令境界制御データを記憶できることが好ましい。パラレル実行、インターラプトを取り扱う際に有効な早期終了制御データ、処理をスピードアップするのに有効なブランチ予測データ、使用すべき予測される特定の次の内部命令ブロックをポイントする次のブロックデータ、および実行中のコードの統計分析をするために有効なコードプロフィル化データを制御するのに、命令相互依存制御データ（ｉｎｓｔｒｕｃｔｉｏｎ  ｉｎｔｅｒ  ｄｅｐｅｎｄｅｎｃｅ  ｃｏｎｔｒｏｌ  ｄａｔａ）を使用できる。内部命令ブロック内に外部命令アドレスを記憶できるが、このことは本質的なことではなく、これとは異なり、内部命令ブロック内において外部命令境界ビットが見られたときはいつも、カウンターをインクリメントすることによって実行時に外部ＰＣ値を再構成できる。
【００１９】
本発明の好ましい実施例では、検出された実行行動（ｅｘｅｃｕｔｉｏｎ  ｂｅｈａｖｉｏｕｒ）に応答して変換バッファ内に記憶されたデータを更新するようになっている更新機構を設けることによってシステム全体の性能を改善できる。従って、一旦変換をダイナミックに形成した後で観察された挙動に応じてブランチ予測などの情報を更新するフィードバック機構により変換を微調節できる。
【００２０】
変換バッファ内に記憶される命令変換は種々の方法で達成できる。例えば比較的簡単で妥当に密に近似した命令セットのコンテクストにおけるハードウェア変換器、または複雑であるが、あまり密に近似していない命令セットのためのソフトウェア制御により達成できる。
【００２１】
命令変換器は分解された内部命令、例えば分解されたメモリアドレス、インライン例外ハンドラー、モードトランジション、簡略化された計算（すなわちインライン値、ＰＣのように内部命令内の中間オペランド）を発生するために、実行時間情報に応答可能であることが好ましい。
【００２２】
システム全体の性能、特にインターラプトなどを取り扱う能力は内部命令ブロックを配置でき、必要となった場合に高速使用できるように永久的に利用可能なようにロックダウン（ｌｏｃｋｄｏｗｎ）できるロックダウンエリア（ｌｏｃｋｄｏｗｎ  ａｒｅａ)を変換バッファ内に設けることによって改善できる。このロックダウン領域は可変長とすることができる。
【００２３】
変換が一旦なされた場合、この変換が変換バッファから追い出されると、この変換を少なくとも一時的にレスキューメモリ（ｒｅｓｃｕｅ  ｍｅｍｏｒｙ）にホールドすることによって使用できるようにしておくことが好ましいことも、本発明の好ましい実施例は認識している。レスキューメモリは変換バッファより低速でよいが、それにもかかわらず最初から変換を再実行しなければならない場合よりも高速かつ効率的である。更に、すぐに追い出され、かつ将来有効となると判断されたレスキューメモリ内にデータを適切な時期に移動することも可能である。
【００２４】
実行中のプログラムを内部命令ブロックに分割することによって、好ましいことにスペキュレーティブな実行（ｓｐｅｃｕｌａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）が容易となり、よってプログラムフローが実際に結果に達する場合に結果を短時間で利用できるようにあらかじめプログラムフロー内に識別された命令ブロックをスペキュレーティブに実行できる。
【００２５】
一例として１つ以上の外部命令ブロックをスペキュレーティブに取り出し、これをスペキュレーティブなスケジュールのための良好な候補として識別できる。その理由は、例えば実行中に多数のパイプラインの停止があり、前の実行中に例外条件が観察されなかった場合があるからである。次に（変換器／デコーダまたはその他のハードウェアもしくはソフトウェアを使って）これらブロックをスペキュレーティブな内部ブロックのセットに変換できる。スペキュレーティブなブロックを実行中に誤ったスペキュレーションが検出された場合、このスペキュレーティブなステートを非スペキュレーティブなステートに一致するよう、恐らくは非スペキュレーティブな順序で命令を再実行しなければならなくなるまで固定する。内部命令ブロックのスペキュレーティブな実行は外部ＰＣ値を当初知る事なく、ある状況で実行できることが好ましい。
【００２６】
好ましい実施例では、例外（ｅｘｃｅｐｔｉｏｎｓ）に対する特別な工夫をすることができる。例外はプログラム内で統計的にコード化されていないブランチと見なすことができる。例外を取り扱う１つの方法は、例外ハンドラーの変換を行い（既に変換されているかも知れない）、これを実行し、次に例外を生じさせた命令から次のブランチ命令へ新しいブロックを再変換し、実行を再開することである。このことは、変換バッファ内で余分なダブリ（ｄｕｐｌｉｃａｔｉｏｎ：デュプリケーション）を生じさせやすい。再変換を防止するために、好ましい実施例は例外を取り込んだ内部ＰＣを特定するリターンアドレススタックにあるビットを追加し、次にマイクロアーキテクチャが内部ブロックの中間で実行を再開できるようにしている。内部および外部ＰＣのマイクロアーキテクチャ上の詳細は、必ずしもアーキテクチャに暴露されないことが重要である。リターンポインタが必ずしもリターンアドレススタックの拡張ではない。
【００２７】
上記検討事項はインターラプト（ｉｎｔｅｒｒｕｐｔｓ：割り込み）にも適用できる。内部ブロックの中間において、インターラプトを取り扱うために、システムはインターラプトが生じたブロックの再変換を防止するために上記のことを行うことができる。
【００２８】
好ましい別の事項は、あるエクストラ基準に基づいてリマッパー（および関連する変換バッファ部分）内の異なる部分にブロックを挿入できることである。例えばある特定のレンジ、別のコードに対するノックダウンコードに対するエントリーポイント、別の変換などにおける必要とされる可能性が低い変換（例えばインターラプトおよび例外再エントリーブロック）にカーネルコードを挿入してもよい。
【００２９】
ロックダウンに対し、リマッパーにおける不要なルックアップを解消するためにリンカー／ローダーにより類似するソフトウェアの一部を使用することによって別の予備処理工程をロックダウンすべきコードが通過できる。この技術は、コード全体のイメージが変換バッファ内に挿入される前にコードイメージ全体にアクセスし、次に変換バッファメモリのスペース内に直接プログラムをリロケートできる能力を有することによって働くことができる。ターゲットはノックダウンされたコード内にあるブランチを特別な内部ブランチ命令に向けることができ、このブランチ命令はリマッパー内のルックアップを通過することなく、変換バッファ内のあるロケーションに直接分岐する。このように、リマッパー内のノックダウンされた領域に対する外部エントリーポイントを記憶させるだけでよい（すなわち外部アドレスから内部アドレスへのインターラプトベクトルのマッピングをするだけでよい）。これによってノックダウンがよりフレキシブルかつより決定的となる。このことは、インターラプトを高速で取り扱いできるようにする上で重要である。
【００３０】
好ましい別の特徴は所定のモードにおいてコアがシステム内の他のメモリと同じようにコアが物理メモリをアドレス指定できるよう、変換バッファを物理メモリの領域にマッピングできるということである。このことは、例えばリマッパーを通過することなくインターラプトハンドラーを直接アドレス指定できる上記状況で有効である。更にデータを変換バッファにいれる方法を必要とするソフトウェア変換器にとってもこのことは有効である。
【００３１】
別の好ましい特徴により、キャッシュ固有の変換動作（リマッパーのテスト、入力の管理など）を行うリマッパーおよびその他をバイパスする特殊な内部ブランチ命令が提供される。これら命令はシステムの特権モードでしか使用できない。
【００３２】
別の側面から見れば、本発明は、
１つ以上の内部命令の複数の内部命令ブロックを変換バッファ内に記憶する工程を備え、前記内部命令ブロックが１つ以上の外部命令のそれぞれの外部命令ブロックのダイナミック変換であり、
更に前記外部命令ブロックのうちの１つの外部にある外部命令に対する実行リクエストに応答し、前記変換バッファ内に記憶された対応する内部命令ブロックを識別する工程と、
前記対応する内部命令ブロックから内部命令を実行するようになっている実行コアへ１つ以上の内部命令を供給する工程とを備えた、データを処理する方法を提供するものである。
【００３３】
命令のプリフェッチに応答して変換を適当に時期に実行できる。
【００３４】
次に添付図面を参照して単なる例により本発明の実施例について説明する。
【実施例】
【００３５】
ＡＲＭアーキテクチャは現在３つの外部命令セット、すなわちＡＲＭ、ＴｈｕｍｂおよびＪａｖａ（登録商標）をサポートしている。しかしながら、命令セットが多数となることによってデコーダが更に複雑となり、これによってプロセッサの性能および電力消費量に悪影響が及び得る。この問題に対処する１つの方法は、変換キャッシュを使ってデコードコストを低減することである。
【００３６】
変換キャッシュはその名称が意味するように必ずしもオリジナルの命令ではない変換をキャッシングする。キャッシュの不一致（ｃａｃｈｅ  ｍｉｓｓ）があると、外部命令の１つの基本ブロックがメモリシステムからフェッチされ、それらの命令がコアの内部（ネイティブ）命令セットに変換される。外部から見える基本ブロックにおける命令の数は内部の表示と同じである必要がなく、これによってハードウェア内で直接どの命令がサポートされているかを判断するのにマイクロアーキテクチャの実現例にフレキシビリティが与えられている。更に、内部命令のレイアウトはパイプライン内で容易にデコードできるようになっており、実現を助けるための追加情報も含むことができる。例えば変換器は２つの隣接する命令は独立しているか否かを理解し、変換キャッシュ内に独立しているか否かをこれら命令にマークすることができる。これら命令が発生されると、コアは候補命令のレジスタ比較を行う代わりに、この命令に対する独立ビットを見るだけでよい。この変換と共に別の情報、例えば外部命令境界、早期終了の許容性なども記憶できる。
【００３７】
図１は変換キャッシュの抽象的なアーキテクチャを示す。そのアーキテクチャの５つのメイン構成部は、変換器、変換バッファ、リマッパー、フェッチユニットおよび更新器である。変換器が外部命令を内部表示に変換し、変換バッファに記憶のフレームを割り当てる。この変換器は基本ブロックのアドレスとその変換のスタートアドレスとの間のマッピングをリマッパーに入力することも行う。変換器のための演算のユニットは基本ブロックであり、この基本ブロックは内部命令の１つ以上の可変サイズのフレームに変換する。変換されたコードの他に、特に１つのフレームはブランチ予測および統計情報（この情報は実行時にダイナミックに更新できる）を含むことができる。本実施例における変換バッファは変換されたフレームを記憶するオンチップの大きいメモリアレイとなっている。この変換バッファは実現に応じて外部メモリのより大きい部分をキャッシングするキャッシュとして実現できる。しかしながら、現在好ましい実現例は独立したオンチップメモリである。フェッチバッファは変換機構と実行コアとの間の「接着剤」である。実行中、フェッチバッファはコアにシーケンシャルな命令をストレートフォワードに供給できるよう、現在実行中のフレームのコピーを維持する。ブランチ命令に遭遇すると、フェッチユニットはそのアドレスをリマッパーに転送する。ターゲットアドレスのマッピングがある場合、変換バッファから直接新しいフレームをロードできるが、そうでない場合、新しいフレームを発生するのにまず変換器を呼び出さなければならない。フェッチユニットの複雑さに応じ、フェッチユニットは変換コストを低減し、ブランチのペナルティを削減するために種々のブランチプリディクタおよびプリフェッチ機能も含むことができる。実行パイプラインの終端には更新器が設けられ、この更新器の主要なタスクは実行を終了した最終フレームに関連する情報（例えばブランチ予測情報）を更新することである。次の章では変換キャッシュの構造に関する設計上の妥協について探る。
【００３８】
変換バッファに関して２つのキーとなる問題がある。１つは変換を見つける方法であり、１つは新しい変換に対してどれだけスペースを再使用するかということである。これら双方の問題はリマッパーを使用し、組織化することによって解決できる。外部アドレスに基づいて次のフレームの（変換バッファ内の）インデックスを探すために、各フレームの実行終了時にリマッパーにアクセスする。図２は２つの元の基本ブロック（ＢＢ１とＢＢ２）との間、およびそれらの対応する変換されたフレーム（ＸＢＢ１とＸＢＢ２）との間の制御のフローを示す。一般的なケースでは、変換器はブランチの宛て先アドレスがマップするのはどのフレームであるかをスタティックに判断できないので、リマッパー内で変換アドレスをルックアップしなければならない。このことは次のことを意味する。
【００３９】
・リマッパーのサイズおよび関連性（ａｓｓｏｃｉａｔｉｖｉｔｙ）は、変換バッファ内で存在できる（すなわちアクセスできる）フレームの数に対する上限を定めること。
・リマッパー内での競合する不一致（ｃｏｎｆｌｉｃｔ  ｍｉｓｓｅｓ）に起因し、有効な変換がアクセスできない状態となり得ること。
・フレームを無効にするにはリマッパー内の対応するエントリーを除かなければならない。概念的には、これを行うには変換インデックスからブロックの外部アドレスへの逆マッピングを行わなければならない。
【００４０】
別の関連する問題は、ブランチ命令の存在により命令ストリーム内に基本ブロックの端部を明瞭にマークするが、基本ブロックの入力ポイントは明示的ではないということである。ブランチはＩＳＡ内には明示的にマークされない連続する命令のセットの終端に１つのターゲットを有し得る。このことは、外部命令ストリームを内部命令ストリームに変換した場合、既に一部が変換済みの新しいブロックに遭遇したときにある種のダブリが生じることを意味する。ダブリを低減する次のような２つの基本的な方法がある。
【００４１】
変換プロセス中、各命令に対し、その命令が既にリマッパーにマッピングされたかどうかをチェックし、一致がある場合、フレームを終了する。この技術は変換器によってまずより大きいブロックのうちのより小さいサブセットに遭遇した場合、ダブリを回避できるが、最初により大きいブロックを実行した場合、ダブリを防止できない。
・変換バッファにおいて、外部基本ブロックのエンドアドレスからそのインデックスへのマッピングを維持すること。この構造はリマッパーに類似するが、開始点ではなく、基本ブロックの終了点によってインデクシングされる。変換バッファ内に新しいフレームを入れる前に、同じ終了ポイントを有する変換があるかどうかを見るように、この構造をチェックする。変換が存在する場合、新しい変換と旧い変換のオーバーラップを適切に調和させ、対応する構造内で更新しなければならない。
【００４２】
ダブリを低減する複数の方法が存在するが、解決を必要とする問題は明らかでない。ブロック内の命令を多くすることは性能にとって有利である。その理由は、命令を多くすることによりブランチ間でのシーケンシャルな命令の数が増加するからである。更に、ダブリを検出するコストは潜在的なスペースの節約よりも大きくなり得る。
【００４３】
バッファを再使用するための簡単なポリシーは、バッファ内にそれ以上のスペースが残されていない場合、リマッパーをクリアにし、すべての変換を除くことである。変換バッファ内に挿入できるフレームの数、それらの平均サイズおよび変換バッファをアドレス指定するのに必要なビット数を検討することにより、リマッパーのサイズを選択する。一例として、変換が外部プログラムと同じ数の命令を含み、基本ブロック内に平均して約４つの命令があり、１６ビット未満で変換バッファをアドレス指定できると仮定できる。このことは３２Ｋの変換バッファに対しては４Ｋのリマッパーサイズに変換される２０４８個のインデックスエントリーが必要となることを意味する。
【００４４】
リマッパーを通してアクセスできない割り当てスペースの一部が変換バッファ内に存在することになる。このような状況はリマッパー内の競合不一致（ｃｏｎｆｌｉｃｔ  ｍｉｓｓ）の結果として生じる。この問題を取り扱う基本的な方法は、関連性を増すことである。リマッパーは少なくとも４方向に関連している必要があるが、もっと関連性を高めれば確実に報われる。
【００４５】
１つのブロックに多数の入力ポイントがある結果、バイトの一部は何回も変換されることになる。変換バッファにおける多数の変換はスペースをむだにするが、ダブリを低減するのに必要な機構も（メモリおよび制御の複雑さの双方の点で）コストがかかる。例えば、上記のように関連するフレーム変換バッフサイズに対するブロック終了アドレスのマッピングを維持することにより、ダブリを検出できる。ダブリは約５％にしか占めないので、この解決方法はスペース的に有効ではない。有効なバッファ利用が重要であるケースではダブリを低減するのにリマッパーによりアドレスがマッピングされない命令を変えるだけの、より簡単な技術を使用できる。しかしながら、変換の複雑性が増すだけでなく、リマッパーのアクセスがより頻繁となることによって、変換時間に悪影響が及び得る。
【００４６】
変換バッファが満杯になった後で変換バッファ全体をクリアする簡単な技術を使用できる。この技術は準最適な方法であるが、比較的小さい作業負荷および変換バッファサイズに対して良好に働き、変換バッファ内のデータとリマッパー内の対応するエントリーの同期化を簡略にできる。この技術を改良するための主な問題は、変換バッファからあるレンジのフレームを追い出するときはいつも、リマッパーから対応するエントリーを除去しなければならないということである。これを達成するストレートフォワードな方法は、追い出しの前にフレームのすべてをザッと読み（ｗａｌｋｉｎｇ  ｔｈｒｏｕｇｈ）、これらをリマッパー内でルックアップし、次にそのエントリーを無効にすることである。更に変換バッファ内に新しいフレームを割り当てできるようにするには、現在のスペースを逆フラグメント化（ｄｅｆｒａｇｍｅｎｔｅｄ）しなければならない。この方法はシーケンシャルな、比較的低速のプロセスであり、よって不一致のペナルティ（ｍｉｓｓ  ｐｅｎａｌｔｙ）を大幅に増加し得る。
【００４７】
図３は、より高速でより簡単なスペースの再使用を容易にするセグメント化されたリマッパーを示す。この変換バッファはセグメントに分割されており、割り当てられ、自由にされた対応するセグメントはリマッパーに存在する。フレームインデックスが所定のウォーターマークより低くなっている限り、割り当てインデックスと称されるリマッパーセグメントにフレームが挿入される。フレームのインデックスがスレッショルドを越えた場合、割り当ては新しいリマッパーセグメントに移動する。このセグメントが既に有効なマッピングを含んでいる場合、まずそのセグメントはクリアにされる。リマッパーセグメント内のすべてのラインを同時に無効化することによってクリアリングが迅速に達成され、ウォーターマークは変換バッファ内の次のバッファレンジの終了点にセットされる。再使用するためにアクティブなリマッパーアドレスの最小の作業セット（ｓｍａｌｌｅｒｔ  ｗｏｒｋｉｎｇ  ｓｅｔ  ｏｆ  ａｃｔｉｖｅ  ｒｅｍａｐｐｅｒ  ａｄｄｒｅｓｓｅｓ）を有するリマッパーセグメントを選択することが好ましい。しかしながら、実際にはラウンドロビン再使用ポリシーが極めて良好に働き、このポリシーは簡単な実現の追加利益を有する。一度に１つのセグメントに複数の新しいマッピングが割り当てられる間、すべてのセグメントにおいてパラレルにアドレスがルックアップされる。しかしながら、割り当てポリシーに起因し、データを含むのにせいぜい１つのセグメントが保証される。
【００４８】
セグメント化されたリマッパーはバッファの再利用を簡略にするが、これに関連した別のコストも生じる。単一の大きいキャッシュから多数の小さいキャッシュを作成することにより、タグ記憶のサイズが大きくなり、個々のセグメント内の競合の不一致も増加し得る。実験によれば、小さいベンチマークでも有効な廃棄される変換の数が少なくなる結果生じる小さいメモリトラヒックにおいて、セグメント化の利点が明らかとなることが証明された。他方、個々のセグメント内での別の競合の結果、メモリトラヒックが増加し得る。この問題はリマッパーにおける関連性、すなわちセグメントの数を多くすることによって軽減できる。より多数のセグメントを用いた場合、同じ数のエントリーはバッファ内のより小さいレンジのためのマッピングを維持する責任があるので、このように働く。セグメントの数を増やすことは各セグメント内の関連性の度合いを増すことの別の方法として有効である。
【００４９】
変換キャッシュの別の利点はデコードのコストを低減し得ることである。しかしながら、キャッシュ内で変換をルックアップするオーバーヘッドがかなり長くされた場合、この利点は相殺される。オーバーヘッドの基本要素はブランチに遭遇する度にリマッパーを通して余分なアクセスをすることである。概念的には各ブランチに対して次のステップをとる必要がある。
【００５０】
・ブランチターゲットアドレスを計算すること。
・ブランチターゲットの仮想−物理アドレスマッピングをすること（ＴＬＢルックアップ）。
・キャッシュ内の変換されたフレームを探すためにリマッパーをルックアップすること。
・変換キャッシュのアクセスをすること。
・フレームアライメントをすること。
【００５１】
保守的なデザインによってこれらステップに対するサイクルを２〜３サイクルにすることができるが、各ブランチ命令においてこのオーバーヘッドを負うことはプロセッサの性能を深刻に限定することになる。この問題を取り扱う基本的な方法は、フレームをスペキュレーティブにプリフェッチし、リマップされたフレームインデックスをキャッシングすることにより、フレームルックアップのコストを削減することである。
【００５２】
コアはプログラムの元のロケーションではない変換バッファと別のロケーションからの命令を実行するので、プログラムカウンター（ＰＣ）の役割を明瞭にしなければならない。概念的には元のプログラムをシーケンス通過するＰＣの他に、変換された命令をシーケンス通過する、必ずしもアーキテクチャ上見ることができない内部ＰＣを設ける必要性がある。例外およびブランチセマンティックが正しく作動するために、これら２つのプログラムカウンターの同期状態を維持しなければならない。これを達成する１つの方法は、内部命令が外部命令の境界であるか否かを指定する内部命令によって１ビットの情報を維持することである。外部命令境界ビットがセットされた内部命令を実行するときはいつも、外部ＰＣをインクリメントする。
【００５３】
図４はフェッチユニットおよびプロセッサの他の部分との相互作用の一例を示すより詳細な図である。小さいバッファ内に現在実行中のフレームが維持され、この小さいバッファから命令シーケンサが実行コアに個々の命令（または命令のグループ）を送る。実行と平行してブランチ予測器はスペキュレーティブにフレームをプリフェッチバッファへプリフェッチし、これらフレームを必要に応じて現在実行中のスロットへプロモートする。
【００５４】
変換キャッシュの重要な側面は、各基本ブロックに情報をユニークに関連付けできることである。プリフェッチユニットがこの記憶装置を活用できる１つの方法は、フレームヘッダー（ブランチターゲット）内にブランチ予測情報（２ビットカウンターおよび／または履歴情報）および次の基本インデックスを維持し、よって予測に使用されるデータ間のエリアシングを除くことである。前者の技術は予測の間のエリアシングを低減できるが、後者の方法はリマッパーにアクセスしなければならない回数を低減できる。ブランチ予測のために１または２ビットのステートを使用する簡単なブランチ予測方法を、予測された次のフレームのキャッシュされたインデックスだけでなく、最後の誤って予測されたフレームのインデックスと共に使用できる。このフレームでは２つのフレームのうちのどちらを次に実行するかを１ビットのステートが選択し、２つのフレーム間で予測をいつ切り換えなければならないかを管理するのに第２のビットが使用される。この方法によって使用されるステート量はヘッダー内に予測されたフレームインデックスだけを維持し、リマッパーのルックアップにより誤った予測のレイテンシーを増すことによって縮小できる。１つのフレームが一旦フェッチされると、即座に次のフレームへのプリフェッチを開始できる。その理由は、フレームが実行をスタートした直後に次のフレームの予測が分かっているからである。テストにおいて、デュアル発行プロセッサにおいても各フレームにおける平均命令数はパイプラインを停止することなくプリフェッチを完了させるのに２〜３サイクルの回数でも可能であるように選択される。
【００５５】
内部のＩＳＡと外部から見えるＩＳＡとは異なっていることがあるので、例外が生じたときはいつも一貫したマシンステートを露出するように注意を払わなければならない。このことは、単一の外部命令を多数の内部命令にマッピングした場合、外部命令の境界でしか例外を取り扱わなければならないことを意味する。この問題に対する１つの解決案は外部命令境界をマークする命令ごとに変換キャッシュ内に追加ビットを維持することである。必要とされる追加ビットはフレームヘッダー内に記憶してもよいし、または変換バッファの各ワード上のタグとして記憶してもよい。
【００５６】
例外とインターラプトとの重要な差は、例外は内部で発生するが、インターラプトは外部ソースによって発生されるということである。例外を取り扱うために実行を最後の外部命令境界までロールバックしなければならないが、他方、現在の命令が実行を終了した後にインターラプトを取り扱ってもよい。良好なインターラプトレイテンシーを保存するためには、このことは外部命令と内部命令との変換を１：１に近いものにしなければならないことを意味する。あるクラスの長いレイテンシーでかつ再スタート可能な命令を、大きい命令を容易にするように定義できる。しかしながら、第２のケースでも前方への進行を保証できることが重要である。
【００５７】
変換キャッシュに対する別の問題は、インターラプトまたは例外ハンドラーの後で実行をどのように再開するかということである。この問題はすべての例外に対して条件を課すことができないフレーム境界でしか通常制御フローが変化しないということである。例外のリターンを取り扱う簡単な方法は、新しいエントリーポイントを作成し、そのアドレスでスタートする新しいフレームを発生させることである。しかしながら、この方法は変換バッファにおけるむだとなるスペース量を大幅に増加させ得る。その理由は、新しいエントリーポイントに再びアクセスされることはありそうにないことであるからである（インターラプトはＰＣに関して外部からの基本的にランダムな事象であるからである）。良好な方法はフレーム内の任意の命令において実行を再開できる追加情報により、ブランチ予測器のリターンアドレススタックを強化することである。プロセッサはリターンアドレススタックに不一致が生じた場合に、フル変換を使用できる。
【００５８】
変換キャッシュの主要な使用モードは外部基本ブロックの連続命令を変換されたフレーム内の連続命令の対応するセットにリマップすることである。正確な例外セマンティックを保存し、単一ステップのデバッギングを容易にするために、命令の内部順序と外部順序とは同一でなければならない。変換器の基本的なタスクは命令をリマップし、かつデコードを簡略にすることである（ダイナミックなスケジュールを実行するための提案が下記に述べられている）。変換器のための重要な条件の１つは、変換された命令の間の中間値を保持するために数個の追加スクラッチレジスタを利用できることである。外部命令が多数の内部命令にマッピングされるとき、変換される命令間の通信が部分的な結果によりアーキテクチャステートを汚染してはならない。例外に遭遇した場合に、一環したステートにロールバックするための方法が存在しなければならない。
【００５９】
変換キャッシュはデコードされた命令キャッシュとしても働き得る。このことによってクリティカルパス上のデコーダのタスクを簡略化するように、追加ビット情報を維持できる。例えばビットフィールドの順序およびそれらの意味を内部で変えてもよいし、または実行パイプライン内でレジスタの比較が生じなくてもよいように、連続する命令間の独立性を明示的にマークできる。
【００６０】
変換およびデコード演算のほとんどはハードウェアで実現される変換ユニットによって処理されるが、ソフトウェアでも複雑なデコードを行うことができる。複雑な命令に遭遇した際に変換ユニットはコア上で変換−例外ハンドラーの呼び出しを生じさせる例外を生じさせることができる。スペキュレーティブに変換がフェッチされない場合、または例外パイプラインが不調である場合、変換器と同時にコアパイプライン内で実行されるものは何もないはずである。Ｊａｖａ（登録商標）変換はソフトウェアで取り扱うための主な候補である。
【００６１】
変換キャッシュの性能は外部命令セットと内部命令セットとがセマンティックにどれだけ近似しているかに大きく依存している。しかしながら、内部命令は外部から利用できるものよりもより大きいレジスタスペースをアドレス指定できなければならず、作動モードの変化を解消する防止する必要がある。
【００６２】
ほとんどの基本ブロックに対し、わずかな簡単な変更をもって外部命令と内部命令との間に１：１の対応性があるが、順序内のコアは順序外の実行の利点を活用できる。このアイデアは次のとおりである。
【００６３】
・マイクロアーキテクチャが実行をモニタし、関連したパイプラインストールの重要な部分を有するフレームをマークする。
・問題のフレームが確率の高い特定の別のフレームの実行をフォローし、実行中に例外が生じる可能性が低い場合、トレーススケジューリングのためにマークされたフレームのセットを選択する。
・実行と同時に変換ユニット内でリスケジューリングを行う。
・一旦スペキュレーティブなフレームが発生されると、先行するフレームの予測されたターゲットアドレスとして新しいフレームのアドレスを挿入する。
・ミススペキュレーションを例外のように取り扱う：スペキュレーティブなステートをブローして除去し、最後の既知の良好な非スペキュレーティブステートから実行を再スタートする。
【００６４】
スペキュレーティブなレジスタの書き込みは別個のレジスタレンジ内で取り扱われるので、ミススペキュレーション後、アーキテクトされたレジスタステートをリカバーすることは容易である。しかしながら、スペキュレーティブなメモリアクセスのための別個のメモリエリアはないので、スペキュレーティブなメモリの書き込みが物理メモリに達しないように注意を払わなければならない。このことは非スペキュレーティブモードでメインメモリにデータを書き込むだけの負荷記憶キューを使用することによって達成できる。
【００６５】
高速で、かつ一貫した実行が必要とされるコード、例えばＯＳカーネル、インターラプト／例外ハンドラーなどのために、変換のロックダウンエリアを使用することもできる。
【００６６】
再び必要とされる可能性が高いと判断された変換（すなわちこれら変換は頻繁に実行される）を主変換バッファから追い出す前に転送し得る先のレスキューメモリを設けることができる。
【００６７】
変換器はメモリアドレスを分割し、例外ハンドラーをインライン（ｉｎｌｉｎｅ）化し、モードトランジションを除き、それ以外の方法で実行時間情報に基づいて計算を簡略化するように変換をあらかじめ処理するようにもできる。
【００６８】
変換システム管理に対して特権モード命令、例えばリマッパーバイパスブランチ命令およびリマッパー管理命令を設けてもよい。
【図面の簡単な説明】
【００６９】
【図１】変換キャッシュアーキテクチャの高レベルの図を略図で示す。
【図２】プログラム実行内での制御フローに影響を与えるリマッパーの役割を略図で示す。
【図３】リマッパー内のセグメント化された記憶装置を略図で示す。
【図４】上記図を参照して説明した変換キャシュを使用するプロセッサ内のフェッチユニットを略図で示す。
【図１】
2005539321.tif 000003
【図２】
2005539321.tif 000004
【図３】
2005539321.tif 000005
【図４】
2005539321.tif 000006
【手続補正書】
【提出日】平成16年11月19日(2004.11.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
内部命令を実行するようになっている実行コアと、
１つ以上の内部命令のうちの複数の内部命令ブロックを記憶するようになっている変換バッファとを備え、前記内部命令ブロックが１つ以上の外部命令のうちのそれぞれの外部命令ブロックのダイナミックな変換であり、
対応する内部命令ブロックからの１つ以上の内部命令を前記実行コアに供給できるよう、前記変換バッファ内に記憶された前記対応する内部命令ブロックを識別するための前記外部命令ブロックのうちの１つのうちにある、外部命令のための実行リクエストに応答するリマッパーを備え、
前記リマッパーメモリが複数のリマッパーメモリ部分に分割されており、各リマッパーメモリ部分が前記変換バッファ内のそれぞれの変換バッファ部分に関連しており、前記関連する変換バッファ部分が新しく発生したマッピングデータを取り込むための自由スペースを有しなくなるまで、前記リマッパーメモリ部分の１つが新しく発生されたマッピングデータを受けるように働き、前記関連した変換バッファが新しく発生されたマッピングデータを取り込むための自由スペースを有しなくなると、前記リマッパーメモリ部分の別の部分が選択され、クリアされ、その内部に記憶された新しく発生されたマッピングデータが記憶されると共に新しく発生された内部命令ブロックが関連する変換バッファ部分に記憶されるよう前記リマッパーが作動できる、データを処理するための装置。
【請求項２】
前記実行リクエストが外部命令ブロック内の第１外部命令に対するものであり、前記対応する内部命令ブロックからの第１内部命令によってスタートする前記実行コアに前記対応する内部命令ブロックからの内部命令が供給される、請求項１記載の装置。
【請求項３】
内部命令ブロックがそれぞれの対応する外部命令ブロックに機能的に等価的である、請求項１および２のいずれかに記載の装置。
【請求項４】
前記外部命令ブロックが可変長である、請求項１、２および３のいずれかに記載の装置。
【請求項５】
前記内部命令ブロックが可変長である、前の請求項のいずれかに記載の装置。
【請求項６】
前記内部命令が外部からアクセスできる命令セットの一部である、前の請求項のいずれかに記載の装置。
【請求項７】
外部命令ブロックがブランチ外部命令によって終了される、前の請求項のいずれかに記載の装置。
【請求項８】
内部命令ブロックがブランチ内部命令によって終了される、前の請求項のいずれかに記載の装置。
【請求項９】
前記リマッパーが前記変換バッファ内の外部命令ブロックのアドレスと対応する内部命令ブロックのアドレスとの間のマッピングを識別するマッピングデータを記憶する、前の請求項のいずれかに記載の装置。
【請求項１０】
前記リマッパー内のリマッパーメモリ内に前記マッピングデータが記憶される、請求項９記載の装置。
【請求項１１】
前記リマッパーメモリ部分の前記別の部分がラウンドロビンアルゴリズムを使って選択される、請求項１０記載の装置。
【請求項１２】
前記内部命令が外部命令間の境界に対応するかどうかを特定する内部命令ブロック内の各内部命令に対する外部命令境界制御データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１３】
前記内部命令ブロック内の先行する命令に依存することなく前記内部命令を実行してよいかどうかを特定する内部命令ブロック内の各内部命令に対する命令非依存制御データ（ｉｎｓｔｒｕｃｔｉｏｎ  ｉｎｄｅｐｅｎｄｅｎｃｅ  ｃｏｎｔｒｏｌ  ｄａｔａ）も前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１４】
システムステートを破壊することなく、完了前に前記内部命令を終了してよいかどうかを指定する内部命令ブロック内の各内部命令に対する早期終了制御データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１５】
前記内部命令ブロックの実行完了時に取り込むべき、予測されたブランチターゲットを指定する各内部命令ブロックに対するブランチ予測データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１６】
実行すべき予測された次の内部命令ブロックの前記変換バッファ内でのロケーションを指定する、各内部命令ブロックに対する次のブロックデータも、前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１７】
前記内部命令ブロックの実行に関する統計を指定する各内部命令ブロックに対するコードプロフィル化データも前記変換バッファが記憶する、前の請求項のいずれかに記載の装置。
【請求項１８】
検出された実行行動に応答して記憶された内部命令ブロックに関する前記変換バッファ内に記憶されたデータを更新するようになっている更新器を含む、請求項１５、１６および１７のいずれかに記載の装置。
【請求項１９】
外部命令ブロックを内部命令ブロックに変換するようになっている命令変換器を含む、前の請求項のいずれかに記載の装置。
【請求項２０】
前記命令変換器が、
ハードウェアに基づく命令変換器および
ソフトウェアに基づく命令変換器のうちの１つである、請求項１９記載の装置。
【請求項２１】
ロックダウン記憶装置内に内部命令ブロックを配置できるロックダウン領域を前記変換バッファが含む、前の請求項のいずれかに記載の装置。
【請求項２２】
前記変換バッファ内に予め記憶された内部命令ブロックが少なくとも一時的に記憶されるレスキューメモリであって、前記変換バッファ内の前記内部命令ブロックを求めているときに不一致が生じた場合、前記内部命令ブロックをアクセスのために利用できる前記レスキューメモリを含む、前の請求項のいずれかに記載の装置。
【請求項２３】
少なくともいくつかの内部命令または内部命令ブロックがプログラム実行フロー内のそれらの位置に先んじてスペキュレーティブに実行される、前の請求項のいずれかに記載の装置。
【請求項２４】
外部命令ブロックを内部命令ブロックに変換するときの、前記外部命令ブロックに関して利用できる実行時間命令に前記命令変換器が応答する、請求項１９および２０のいずれかに記載の装置。
【請求項２５】
前記命令変換器が、
メモリアドレスを決定すること、
インライン例外ハンドラーを決定すること、
モード変化を除くこと、および
実行時間において一定またはほぼ一定の情報に依存する計算を簡略化することのうちの１つ以上を行うように作動できる、請求項２４記載の装置。
【請求項２６】
内部命令ブロックのうちの内部命令の実行中に例外が発生した時、例外取り扱い命令の実行と例外が生じたポイントにおける前記内部命令ブロックの実行の再開を可能とするための例外リターンポインタの記憶とをトリガーするように作動できる例外ハンドラーを含む、前の請求項のいずれかに記載の装置。
【請求項２７】
内部命令ブロックのうちの内部命令の実行中にインターラプトが発生した時、インターラプト取り扱い命令の実行と前記例外が生じたポイントにおける前記内部命令ブロックの実行の再開を可能とするためのインターラプトリターンポインタの記憶とをトリガーするように作動できるインターラプトハンドラーを含む、前の請求項のいずれかに記載の装置。
【請求項２８】
前記リマッパーおよび変換バッファが外部命令ブロックの異なるタイプに対応する内部命令ブロックを記憶するように割り当てられた複数の部分を有する、前の請求項のいずれかに記載の装置。
【請求項２９】
前記リマッパーメモリが外部命令ブロックの異なるタイプに対応するマッピングデータを記憶するように割り当てられた複数の部分を有する、請求項１０記載の装置。
【請求項３０】
ロックダウン記憶装置内に配置された内部命令ブロックが前記リマッパーにおけるルックアップを低減するようにあらかじめ処理される、請求項２１記載の装置。
【請求項３１】
前記変換バッファがプログラム制御によりアクセスできる物理メモリのエリアにアドレスマッピングされる、前の請求項のいずれかに記載の装置。
【請求項３２】
リマッパーバイパスブランチ内部命令が前記リマッパーの動作をバイパスするブランチ動作を実行するようになっている、前の請求項のいずれかに記載の装置。
【請求項３３】
１つ以上のリマッパー管理内部メモリが前記リマッパーでの管理動作を実行するようになっている、前の請求項のいずれかに記載の装置。
【請求項３４】
１つ以上の内部命令の複数の内部命令ブロックを変換バッファ内に記憶する工程を備え、前記内部命令ブロックが１つ以上の外部命令のそれぞれの外部命令ブロックのダイナミック変換であり、
更に前記外部命令ブロックのうちの１つの外部にある外部命令に対する実行リクエストに応答し、前記変換バッファ内に記憶された対応する内部命令ブロックを識別する工程と、
前記対応する内部命令ブロックから内部命令を実行するようになっている実行コアへ１つ以上の内部命令を供給する工程とを備え、
前記リマッパーメモリが複数のリマッパーメモリ部分に分割されており、各リマッパーメモリ部分が前記変換バッファ内のそれぞれの変換バッファ部分に関連しており、前記関連する変換バッファ部分が新しく発生したマッピングデータを取り込むための自由スペースを有しなくなるまで、前記リマッパーメモリ部分の１つが新しく発生されたマッピングデータを受けるように働き、前記関連した変換バッファが新しく発生されたマッピングデータを取り込むための自由スペースを有しなくなると、前記リマッパーメモリ部分の別の部分が選択され、クリアされ、その内部に新しく発生されたマッピングデータが記憶されると共に新しく発生された内部命令ブロックが関連する変換バッファ部分に記憶される、データを処理する方法。
【請求項３５】
前記実行リクエストが外部命令ブロック内の第１外部命令に対するものであり、前記対応する内部命令ブロックからの第１内部命令によってスタートする前記実行コアに前記対応する内部命令ブロックからの内部命令が供給される、請求項３４記載の方法。
【請求項３６】
内部命令ブロックがそれぞれの対応する外部命令ブロックに機能的に等価的である、請求項３４および３５のいずれかに記載の方法。
【請求項３７】
前記外部命令ブロックが可変長である、請求項３４、３５および３６のいずれかに記載の方法。
【請求項３８】
前記内部命令ブロックが可変長である、請求項３４〜３７のいずれかに記載の方法。
【請求項３９】
前記内部命令が外部からアクセスできる命令セットの一部である、請求項３４〜３７のいずれかに記載の方法。
【請求項４０】
外部命令ブロックがブランチ外部命令によって終了される、請求項３４〜３９のいずれかに記載の方法。
【請求項４１】
内部命令ブロックがブランチ内外部命令によって終了される、請求項３４〜４０のいずれかに記載の方法。
【請求項４２】
前記変換バッファ内の外部命令ブロックのアドレスと対応する内部命令ブロックのアドレスとの間のマッピングを識別するマッピングデータを記憶する工程を備えた、請求項３４〜４１のいずれかに記載の方法。
【請求項４３】
リマッパーメモリ内に前記マッピングデータが記憶される、請求項４２記載の方法。
【請求項４４】
前記リマッパーメモリ部分の前記別の部分がラウンドロビンアルゴリズムを使って選択される、請求項３４〜４３のいずれかに記載の方法。
【請求項４５】
前記内部命令が外部命令間の境界に対応するかどうかを特定する内部命令ブロック内の各内部命令に対する外部命令境界制御データも前記変換バッファが記憶する、請求項３４〜４４のいずれかに記載の方法。
【請求項４６】
前記内部命令ブロック内の先行する命令に依存することなく前記内部命令を実行してよいかどうか、を特定する内部命令ブロック内の各内部命令に対する命令非依存制御データも前記変換バッファが記憶する、請求項３４〜４５のいずれかに記載の方法。
【請求項４７】
システムステートを破壊することなく、完了前に前記内部命令を終了してよいかどうかを指定する内部命令ブロック内の各内部命令に対する早期終了制御データも前記変換バッファが記憶する、請求項３４〜４６のいずれかに記載の方法。
【請求項４８】
前記内部命令ブロックの実行完了時に取り込むべき、予測されたブランチターゲットを指定する各内部命令ブロックに対するブランチ予測データも前記変換バッファが記憶する、請求項３４〜４７のいずれかに記載の方法。
【請求項４９】
実行すべき予測された次の内部命令ブロックの前記変換バッファ内でのロケーションを指定する、各内部命令ブロックに対する次のブロックデータも、前記変換バッファが記憶する、請求項３４〜４８のいずれかに記載の方法。
【請求項５０】
前記内部命令ブロックの実行に関する統計を指定する各内部命令ブロックに対するコードプロフィル化データも前記変換バッファが記憶する、請求項３４〜４９のいずれかに記載の方法。
【請求項５１】
検出された実行行動に応答して、記憶された内部命令ブロックに関する前記変換バッファ内に記憶されたデータを更新することを含む、請求項４８、４９および５０のいずれかに記載の方法。
【請求項５２】
外部命令ブロックを内部命令ブロックに変換することを含む、請求項３４〜５１のいずれかに記載の方法。
【請求項５３】
前記変換が、
ハードウェアに基づく命令変換器および
ソフトウェアに基づく命令変換器のうちの１つによって実行される、請求項５２記載の方法。
【請求項５４】
ロックダウン記憶装置内に内部命令ブロックを配置できるロックダウン領域を前記変換バッファが含む、請求項３４〜５３のいずれかに記載の方法。
【請求項５５】
前記変換バッファ内に予め記憶された内部命令ブロックが少なくとも一時的にレスキューメモリに記憶され、前記変換バッファ内の前記内部命令ブロックを求めているときに不一致が生じた場合、前記レスキューメモリがアクセスのために利用できる、請求項３４〜５４のいずれかに記載の方法。
【請求項５６】
少なくともいくつかの内部命令または内部命令ブロックがプログラム実行フローと異なる順序でスペキュレーティブにスケジューリングされる、請求項３４〜５５のいずれかに記載の方法。
【請求項５７】
外部命令ブロックを内部命令ブロックに変換するときの、前記外部命令ブロックに関して利用できる実行時間情報に前記変換が応答する、請求項３４〜５６のいずれかに記載の方法。
【請求項５８】
前記変換が、
メモリアドレスを決定すること、
インライン例外ハンドラーを決定すること、
モード変化を除くこと、および
実行時間において利用できる情報に依存する計算を簡略化することのうちの１つ以上を行うようになっている、請求項５７記載の方法。
【請求項５９】
内部命令ブロックの内部命令を実行する間に例外が発生したときに、例外取り扱い命令の実行をトリガーし、前記例外が生じたポイントで前記内部命令ブロックの実行を再開できるように例外リターンポインタを記憶する、請求項３４〜５８のいずれかに記載の方法。
【請求項６０】
内部命令ブロックの内部命令を実行中にインターラプトが発生したときに、インターラプト取り扱い命令の実行をトリガーし、前記インターラプトが生じたポインタで前記内部命令ブロックの実行を再開できるようにインターラプトリターンポインタを記憶する、請求項３４〜５９のいずれかに記載の方法。
【請求項６１】
前記変換バッファが外部命令ブロックの異なるタイプに対応する内部命令ブロックを記憶するように割り当てられた複数の部分を有する、請求項３４〜６０のいずれかに記載の方法。
【請求項６２】
前記リマッパーメモリが外部命令ブロックの異なるタイプに対応するマッピングデータを記憶するように割り当てられた複数の部分を有する、請求項４３記載の方法。。
【請求項６３】
ロックダウン記憶装置内に配置された内部命令ブロックが前記リマッパーにおけるルックアップを低減するようにあらかじめ処理される、請求項５４記載の方法。
【請求項６４】
前記変換バッファがプログラム制御によりアクセスできる物理メモリのエリアにアドレスマッピングされる、請求項３４〜６３のいずれかに記載の方法。
【請求項６５】
リマッパーバイパスブランチ内部命令が前記リマッパーの動作をバイパスするブランチ動作を実行するようになっている、請求項３４〜６４のいずれかに記載の方法。
【請求項６６】
１つ以上のリマッパー管理内部命令が前記リマッパーに対する管理動作を実行するようになっている、請求項３４〜６５のいずれかに記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
本発明の１つの側面から見れば、本発明は、
内部命令を実行するようになっている実行コアと、
１つ以上の内部命令のうちの複数の内部命令ブロックを記憶するようになっている変換バッファとを備え、前記内部命令ブロックが１つ以上の外部命令のうちのそれぞれの外部命令ブロックのダイナミックな変換であり、
対応する内部命令ブロックからの１つ以上の内部命令を前記実行コアに供給できるよう、前記変換バッファ内に記憶された前記対応する内部命令ブロックを識別するための前記外部命令ブロックのうちの１つのうちにある、外部命令のための実行リクエストに応答するリマッパー（ｒｅｍａｐｐｅｒ）を備え、
前記リマッパーメモリが複数のリマッパーメモリ部分に分割されており、各リマッパーメモリ部分が前記変換バッファ内のそれぞれの変換バッファ部分に関連しており、前記関連する変換バッファ部分が新しく発生したマッピングデータを取り込むための自由スペースを有しなくなるまで、前記リマッパーメモリ部分の１つが新しく発生されたマッピングデータを受けるように働き、前記関連した変換バッファが新しく発生されたマッピングデータを取り込むための自由スペースを有しなくなると、前記リマッパーメモリ部分の別の部分が選択され、クリアされ、その内部に記憶された新しく発生されたマッピングデータが記憶されると共に新しく発生された内部命令ブロックが関連する変換バッファ部分に記憶されるよう前記リマッパーが作動できる、データを処理するための装置を提供するものである。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
別の側面から見れば、本発明は、
１つ以上の内部命令の複数の内部命令ブロックを変換バッファ内に記憶する工程を備え、前記内部命令ブロックが１つ以上の外部命令のそれぞれの外部命令ブロックのダイナミック変換であり、
更に前記外部命令ブロックのうちの１つの外部にある外部命令に対する実行リクエストに応答し、前記変換バッファ内に記憶された対応する内部命令ブロックを識別する工程と、
前記対応する内部命令ブロックから内部命令を実行するようになっている実行コアへ１つ以上の内部命令を供給する工程とを備え、
前記リマッパーメモリが複数のリマッパーメモリ部分に分割されており、各リマッパーメモリ部分が前記変換バッファ内のそれぞれの変換バッファ部分に関連しており、前記関連する変換バッファ部分が新しく発生したマッピングデータを取り込むための自由スペースを有しなくなるまで、前記リマッパーメモリ部分の１つが新しく発生されたマッピングデータを受けるように働き、前記関連した変換バッファが新しく発生されたマッピングデータを取り込むための自由スペースを有しなくなると、前記リマッパーメモリ部分の別の部分が選択され、クリアされ、その内部に記憶された新しく発生されたマッピングデータが記憶されると共に新しく発生された内部命令ブロックが関連する変換バッファ部分に記憶される、データを処理する方法を提供するものである。


【国際調査報告】
2005539321.tif 000007
2005539321.tif 000008