JP2016539423A - 命令セット変換システム及び方法 - Google Patents
命令セット変換システム及び方法 Download PDFInfo
- Publication number
- JP2016539423A JP2016539423A JP2016534248A JP2016534248A JP2016539423A JP 2016539423 A JP2016539423 A JP 2016539423A JP 2016534248 A JP2016534248 A JP 2016534248A JP 2016534248 A JP2016534248 A JP 2016534248A JP 2016539423 A JP2016539423 A JP 2016539423A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- address
- host
- guest
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 178
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 141
- 230000015654 memory Effects 0.000 claims description 500
- 238000013507 mapping Methods 0.000 claims description 386
- 239000000872 buffer Substances 0.000 claims description 59
- 239000000284 extract Substances 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 claims description 5
- 238000003780 insertion Methods 0.000 claims description 3
- 230000037431 insertion Effects 0.000 claims description 3
- 238000013519 translation Methods 0.000 abstract description 19
- 238000010586 diagram Methods 0.000 description 65
- 230000008569 process Effects 0.000 description 43
- 230000006870 function Effects 0.000 description 17
- 238000000605 extraction Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 230000001174 ascending effect Effects 0.000 description 8
- 230000000873 masking effect Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 239000002699 waste material Substances 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004922 lacquer Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
Description
仮想マシンの役割は、プロセッサ・コアに対応していない命令セット(ゲスト命令セット)によって構成されたプログラムの翻訳もしくは解釈を行い、プロセッサ・コアによって対応されている命令セット(ホスト命令セット)の中の該当する命令を生成することである。
一般的に、処理過程において、解釈手法はゲスト命令内のオペコードとオペランドを含む全てのフィールドを仮想マシンを使ってソフトウェアによる手法で順番にリアルタイムで取得する。
それから、該当する処理が、メモリのスタック構造を用いて、異なるオペコードを元にして、オペランドに対して実行される。
従って、1つのゲスト命令の機能を実現するためには複数のホスト命令が実行される必要があり、効率が低い。
翻訳手法が用いられる場合、ソフトウェアのコンパイルと同様のプロセスがプログラムの実行の前に実現される。
プログラムは完全にホスト命令セットから構成されるフォームへと変換される。
よって、プログラムが実行されるときの効率はより高い。
しかしながら、ソフトウェア・コンパイルに伴うパフォーマンスのオーバーヘッドはまだ残る。
異なる命令セットの命令が実行される時、該当する命令デコーダが命令をデコードし、そしてデコードされた命令は後続するパイプラインに送られ、対応するオペレーションを実行する。
この方法にはほとんど効率のロスがないが、追加の命令デコーダはハードウェアのコストをあげ、またプロセッサ・チップのコストもあげうる。
加えて、プロセッサ・コアにおいて事前に種々の命令デコーダが実装されるため、スケーラビリティを欠き、新しい命令セットに対応できない。
変換モジュールはゲスト命令セットをプロセッサ・コアによる実行のためにホスト命令セットに変換することができる。
変換モジュールはソフトウェアによって実装されうる。
一般的に、この方法では拡張するのは簡単であるが、効率が非常に低い。
変換モジュールはハードウェアによっても実装されうる。
しかし、この場合拡張するのが難しく、またホスト命令を得るためにキャッシュ・メモリの利便を最大限活用することができない。
つまり、キャッシュ・ヒットの有無に関わらず、変換オペレーションが行なわれる必要がある。
従って、分岐予測に失敗したとき、同じゲスト命令にたいする変換オペレーションが複数回繰り返されることになり、電力消費を増やし、プロセッサ・コアのパイプラインを深め、さらにハードウェアのコストとパフォーマンスのロスを増やす。
すなわち、ホスト命令アドレスにもとづいて、アドレス指定操作が行なわれる。
プロセッサ・コアによって実行された分岐命令によって取得された分岐ターゲット命令アドレスはゲスト命令アドレスである。
ホスト命令とゲスト命令の間には一対一関係がないため(例えば、ゲスト命令は複数のホスト命令に対応しうる)、ホスト命令アドレスとゲスト命令アドレスとの間の対応関係が記録されていなければならない。
それから、プロセッサ・コアは得られたホスト命令アドレスにもとづいて、キャッシュ・メモリの中から正しいホスト命令を探し出す。
ゲスト命令アドレスとホスト命令アドレスの対応関係を記録するにあたっての難点は、如何に効率良くゲスト命令アドレスを変換し、変換した命令を保管するかというところにある。
でなければ、分岐が取られた時に、ゲスト命令アドレスにもとづいて、ゲスト命令が変換モジュールの外の下位メモリから読み出され、変換モジュールによって変換され、そして変換された命令がプロセッサ・コアによる実行のためにキャッシュに保存されることになり、実行パフォーマンスに大きな影響を与える。
この問題に対する1つの解決策はアドレス・マッチングにもとづいた伝統的なキャッシュの代わりに、プログラム実行トレースにもとづいたトレース・キャッシュを用いることである。
しかしトレース・キャッシュは、同じアドレスを持ちつつしかし異なるトレースに位置する大量の命令を保存しなければならず、メモリ容量においての大量の無駄とトレース・キャッシュの低いパフォーマンスへとつながる。
なお、このセクションの内容は開示の一部であり、明示的に示されていないかぎり、先行技術と見做されるべきではない。
方法は以下から構成される:ゲスト命令をホスト命令へ変換し、そしてゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を生成する;ホスト命令をキャッシュ・メモリへ記憶し、それはプロセッサ・コアによって直接アクセスされる;ホスト命令アドレスにもとづいて、プロセッサ・コアによる実行のための該当するホスト命令を直接取り出すためにキャッシュ・アドレス指定操作を実施する;もしくは、マッピング関係にもとづいて、プロセッサ・コアによって出力されたゲスト命令アドレスをホスト命令アドレスへ変換した後、プロセッサ・コアによる実行のための該当するホスト命令を取り出すためにキャッシュ・アドレス指定操作を実施する。
ゲスト命令の抽出された命令タイプをもとに、ホスト命令の命令タイプとゲスト命令に対応する命令変換制御情報を見いだす;
命令変換制御情報をもとに、ゲスト命令から抽出された対応する命令フィールドをシフトする;
そしてホスト命令の命令タイプとシフトされた命令フィールドをスプライスし、対応するホスト命令を形成する。
もしくは、1つのゲスト命令が複数のホスト命令へ変換され、ゲスト命令の命令アドレスが複数のホスト命令の最初のホスト命令の命令アドレスに対応する。
そしてゲスト命令ブロック・オフセットとホスト命令ブロック・オフセットとの間にマッピング関係を形成する。
ゲスト命令ブロックに対応するホスト命令ブロックの開始アドレスから始まるゲスト命令に対応する最初のホスト命令の総数はリバース・シフトロジックによって数えられ、ここでリバース・シフトロジックは、各ゲスト命令を通過する時に、シフト結果が初期値に戻るまで、現行値を1ビット反対方向へシフトする;
そして、ホスト命令に対応するブロック・オフセット・アドレスはこのときゲスト命令に対応するブロック・オフセット・アドレスである。
システムは以下から構成される:
ホスト命令を実行するよう設定されたプロセッサ・コア;
ゲスト命令をホスト命令へ変換し、ゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を生成するように設定されたコンバータ;
ゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を記憶し、ゲスト命令アドレスとホスト命令アドレスの間の変換を実施するように設定されたアドレス・マッピング・モジュール;
そして変換によって得られたホスト命令を記憶し、ホスト命令アドレスにもとづいてプロセッサ・コアによる実行のために該当するホスト命令を出力するように設定されたキャッシュ・メモリ。
ゲスト命令タイプとホスト命令タイプの間の対応関係、並びにゲスト命令の命令フィールドと対応するホスト命令の命令フィールドの間の対応関係、を記憶するように設定されたメモリ;
ゲスト命令をシフトとし整列するよう設定されたアライナで、ゲスト命令が命令ブロック境界を越えたとき、アライナはゲスト命令を命令ブロックまでシフトしゲスト命令を整列させる;
ゲスト命令から命令タイプを含む命令フィールドを抽出するよう設定された抽出器で、抽出された命令タイプはメモリ上でアドレス指定操作を実施するために用いられ、ホスト命令の命令タイプとゲスト命令に対応する命令変換制御情報を読み出し、命令変換制御情報をもとに抽出された命令フィールドをシフトする;
ホスト命令の命令タイプとシフトされた命令フィールドをスプライスし対応するホスト命令を形成するように設定された命令スプライサ。
そしてゲスト命令ブロック・オフセット・アドレスとホスト命令ブロック・オフセット・アドレスの間のマッピング関係を記憶し、ゲスト命令ブロック・オフセット・アドレスをホスト命令ブロック・オフセット・アドレスへ変換するように設定されたオフセット・アドレス・マッピング・モジュール。
順方向シフトロジックはゲスト命令アドレスを含むゲスト命令ブロックの開始アドレスと初期値からのゲスト命令アドレスの間のゲスト命令の総数を数えるように設定され、各ゲスト命令を通過するときに順方向シフトロジックは現行値を1ビット前方にシフトしシフト結果を得る;
そしてリバースシフトロジックは、ゲスト命令ブロックに対応するホスト命令ブロックの開始アドレスから始まるゲスト命令に対応する最初のホスト命令の総数を数えるように設定され、リバースシフトロジックは、各ホスト命令を通過する時に、シフト結果が初期値に変わるまで、現行値を1ビット逆方向にシフトする;
そしてホスト命令に対応するブロック・オフセット・アドレスはこのときゲスト命令に対応するブロック・オフセット・アドレスである。
スタック先頭ポインタ・レジスタは現行スタック先頭ポインタを記憶するように設定され、ポインタはレジスタ・ファイルのレジスタをポイントする;
加法器はスタック先頭ポインタの値と1を足し合わせるよう設定され、スタック先頭の上のレジスタの位置に対応する;
減算器はスタック先頭ポインタの値から1を引くように設定され、スタック先頭の下のレジスタの位置に対応する;
そしてスタック最下部制御モジュールはスタック・レジスタがほぼ空、もしくはほぼ満杯であるかを検出し、そこで:
スタック・レジスタがほぼ満杯のとき、スタック最下部制御モジュールはスタック最下部の少なくとも1つのレジスタ値をメモリへ送り、スタック最下部ポインタを調節し、スタック・レジスタが溢れないようにする;
もしくはスタック・レジスタがほぼ空のとき、スタック最下部制御モジュールはスタック最下部ポインタを調節し、先にメモリに記憶された少なくとも1つのレジスタ値をスタック最下部に送り、スタック・レジスタがプロセッサ・コアによる実行のためにオペランドを供給し続けるようにする。
抽出された命令情報にもとづいて、最初のリード・ポインタが更新される。
分岐が取られるとき、最初のリード・ポインタは条件付き分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
分岐が取られないとき、最初のリード・ポインタは無条件分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
そして、プロセッサ・コアが単一クロック・サイクルにおいて無条件分岐命令を実行する必要がない。
分岐の結果が分岐予測と同じとき、次後続命令を実行し続ける。
そして分岐結果が分岐予測と同じでないとき、パイプラインを空にし、記憶されたアドレス指定アドレスに対応する命令の実行を再開する。
分岐が取られるとき、最初のリード・ポインタは条件付き分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
分岐が取られないとき、最初のリード・ポインタは無条件分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
そしてプロセッサ・コアは単一のクロック・サイクルにおいて無条件分岐命令を実行する必要がない。
プロセッサ・コアが分岐命令を実行するとき、分岐予測にもとづいて、次順次実行命令と分岐ターゲット命令のうちの1つがプロセッサ・コアによる実行のための後続命令として選ばれ、そして次順次実行命令と分岐ターゲット命令のもう一方のアドレス指定アドレスはトラッカーのレジスタに記憶される。
分岐実行の結果が分岐予測と同じとき、次後続命令が実行される。
そして分岐実行の結果が分岐予測と同じでないとき、パイプラインは空にされ、トラッカーのレジスタに記憶されているアドレス指定アドレスに対応する命令が実行される。
命令のエンディング・トラック・ポイントが無条件分岐命令であるとき、分岐ターゲット・アドレス指定アドレスはトラック・テーブルの次順次実行トラックの最初のトラック・ポイントに対応するアドレス指定アドレスである。
そして最初のリード・ポインタがエンディング・トラック・ポイントをポイントするとき、レベル1キャッシュ・メモリがNOP命令を出力する。
エンディング・トラック・ポイントの命令が無条件分岐命令であるとき、分岐ターゲット・アドレス指定アドレスはトラック・テーブルの次順次実行トラックの最初のトラック・ポイントに対応するアドレス指定アドレスである。
そしてエンディング・トラック・ポイントの前のトラック・ポイントが分岐ポイントでないとき、エンディング・トラック・ポイントの命令タイプと分岐ターゲット・アドレス指定アドレスが、それぞれエンディング・トラック・ポイントの前のトラック・ポイントの命令タイプとアドレス指定アドレスとして用いられる。
プロセッサ・システムは以下から構成される:
第1命令セットに属する複数のコンピュータ命令を記憶するように設定された第1メモリ;
第1命令セットに属する複数のコンピュータ命令を、第2命令セットに属する複数のホスト命令へ変換するように設定された命令コンバータ;
命令コンバータによって変換された複数のホスト命令を記憶するように設定された第2メモリ;
そして第2メモリから直接複数のホスト命令を取り出し、複数のコンピュータ命令を参照することなくそして命令コンバータを用いること無しに、複数のホスト命令を実行するように設定された第2メモリとカップルされたプロセッサ・コア。
そして記憶された第1命令セットと第2命令セットの間のマッピング関係にもとづいて、命令コンバータは第1命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する。
ターゲット・コンピュータ命令アドレスを、ホスト命令を含む命令ブロックのアドレスに対応する命令ブロックのホスト・ブロック・オフセット・アドレスへマップする;
そしてホスト命令ブロック・アドレスとホスト・ブロック・オフセット・アドレスを組み合わせてホスト命令アドレスを形成する。
マッピング関係テーブルにもとづいて、ハードウェア・ロジックがホスト・ブロック・オフセット・アドレスを生成する。
分岐ターゲット・バッファは分岐ターゲットのホスト命令アドレスを記憶するように設定される。
命令コンバータのメモリがさらに設定にもとづいて第3命令セットと第2命セットの間のマッピング関係を記憶するように設定されている。
そして記憶された第3命令セットと第2命令セットの間のマッピング関係にもとづいて、命令コンバータは第3命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する。
第1スレッド命令シーケンスは第1命令セットの複数のコンピュータ命令から構成される。
命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と第3命令セットと第2命令セットとの間のマッピング関係を設定にもとづいてメモリに記憶する。
そして命令シーケンスのスレッド数にもとづいて、命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と第3命令セットと第2命令セットの間のマッピング関係のうちの1つを選び、スレッドの複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する。
複数ホスト命令の各ホスト命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令と複数ホスト命令は一対一対応をしている。
マッピング関係は、各コンピュータ命令の命令タイプと各ホスト命令の命令タイプとの間のマッピング関係と、各コンピュータ命令に含まれる命令タイプ以外の命令フィールドと各ホスト命令に含まれるの命令タイプ以外の命令フィールドの間のマッピング関係とを含む。
複数ホスト命令の各ホスト命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令の総数が複数ホスト命令の総数と等しくない。
そして複数コンピュータ命令の各コンピュータ命令が、1つもしくはより多くの複数ホスト命令のホスト命令へマップされる。
そして複数ホスト命令の1つの少なくとも1つの命令フィールドが、対応するコンピュータ命令の該当する命令フィールドをシフトすることによって生成される。
そして命令コンバータは命令コンバータのメモリにおいて、少なくとも命令タイプを用いてアドレス指定操作を実施し、該当するマッピング関係を読み出す。
方法は以下を含む:
第1命令セットに属する複数のコンピュータ命令を第1メモリに記憶する;
第1命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ命令コンバータによって変換する;
命令コンバータによって変換された複数のホスト命令を第2メモリへ記憶する;
そして第2メモリから複数のホスト命令を直接取り出し、第2メモリとカップルされたプロセッサ・コアによって複数のホスト命令を、複数のコンピュータ命令を参照せず命令コンバータを用いることなく、実行する。
そして記憶された第1命令セットと第2命令セットの間のマッピング関係にもとづいて、第1命令セットに属する複数のコンピュータ命令が第2命令セットに属する複数のホスト命令へ変換される。
ターゲット・コンピュータ命令アドレスをホスト命令ブロック・アドレスへマップする;
ターゲット・コンピュータ命令アドレスを、ホスト命令を含む命令ブロックのアドレスに対応する命令ブロックのホスト・ブロック・オフセット・アドレスへマップする;
そしてホスト命令ブロック・アドレスをホスト・ブロック・オフセット・アドレスと組み合わせてホスト命令アドレスを形成する。
マッピング関係テーブルにもとづいて、ハードウェア・ロジックはホスト・ブロック・オフセット・アドレスを生成する。
分岐ターゲット・バッファは分岐ターゲットのホスト命令アドレスを記憶する。
命令コンバータは第3命令セットと第2命令セットの間のマッピング関係を設定にもとづいてメモリに記憶する。
そして第3命令セットと第2命令セットの間の記憶されたマッピング関係にもとづいて、命令コンバータは第3命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する。
第1スレッド命令シーケンスは第1命令セットの複数のコンピュータ命令によって構成されている。
第2スレッド命令シーケンスは第3命令セットの複数のコンピュータ命令によって構成されている。
命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と、第3命令セットと第2命令セットの間のマッピング関係を設定にもとづいてメモリに記憶する。
そして命令シーケンスのスレッド番号にもとづいて、命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と、第3命令セットと第2命令セットの間のマッピング関係のうちの1つを選び、スレッドの複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する。
複数ホスト命令の各ホスト命令は少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令と複数ホスト命令は一対一対応をしている。
そしてマッピング関係は、各コンピュータ命令の命令タイプと各ホスト命令の命令タイプの間のマッピング関係と、各コンピュータ命令に含まれている命令タイプ以外の命令フィールドと各ホスト命令に含まれている命令タイプ以外の命令フィールドの間のマッピング関係を含む。
複数ホスト命令の各ホスト命令は少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令の総数は複数ホスト命令の総数に等しくない。
そして複数コンピュータ命令の各コンピュータ命令は複数ホスト命令の1つもしくはそれ以上のホスト命令へマップされる。
そして命令コンバータが少なくとも命令タイプを用いて命令コンバータ内のメモリにおいてアドレス指定操作を行ない、該当するマッピング関係を読み出す。
コンバータの設定によって、対応するゲスト命令セットがプロセッサで実行されるためにホスト命令セットに変換されうる。
従って、処理システムがサポートできる命令セットを簡単に拡張することができる。
特に分岐予測が間違ったとき、パイプライン・サイクルの無駄を削減できる。
説明とクレームに言及することにより、この発明の特徴と利点がより明白にされる。
なお、全ての付随する図表は簡略化されて不正確な比率を用いており、この開示された実施形態を便利かつ明晰に説明する目的のためのみに用いられる。
さらに、簡略化のために、先に言及された実施形態は、多くの場合、後述する実施形態においては省略される。
従って、後述された実施形態において言及されなかった内容に関しては、先行する記述が参照される。
発明者の意図は開示をここで扱われる特定の実施形態に限るものではないということが理解されるべきである。
反対に、発明者の意図は、この開示のクレームによって定義された精神と範囲にもとづいた全ての改良、等価な変換や修正を保護することである。
同じ参照番号がすべての図表に通じて、同じもしくは似た部分を示すために用いられる。
つまり、命令はこのアドレスを用いて主メモリの中から見つけ出される。
簡便のため、仮想アドレスは物理アドレスに等しいと仮定される。
アドレス・マッピングが必要な状況においても、この発明において説明される方法は適用されうる。
現行命令とはプロセッサ・コアによって現在実行されているもしくは読み込まれている命令のことを指す。
現行命令ブロックとはプロセッサ・コアによって現在実行されている命令を含む命令ブロックのことを指す。
”ホスト命令セット”とはプロセッサ・システムのプロセッサ・コアによってサポートされている命令セットのことを指す。
ホスト命令セットに含まれている全ての命令はホスト命令である。
”命令ブロック”とはアドレスにおいて同じ高ビット(もしくは、最重要ビット)を持つ連続した命令のことを指す。
”命令フィールド”とは、第1オペコード(Op-code)・フィールド、第2オペコード・フィールド、第1ソース・レジスタ・フィールド、第2ソース・レジスタ・フィールド、ターゲット・レジスタ・フィールド、即値フィールド、などなどのように、命令語で同じ内容を表現する連続したフィールドのことを指す。
加えて、ホスト命令セットは固定長命令セットであり、つまり各ターゲット命令の語長は固定されている(例えば、32ビット)。
ゲスト命令セットは固定長命令セットあるいは可変長命令セットでもありうる。
ゲスト命令セットが可変長命令セットである場合、可変長ゲスト命令の全てのバイトの高ビットアドレスは必ずしも同じではない。
つまり、ゲスト命令は二つの命令ブロックにまたがる。
ゲスト命令は前命令ブロックの最後の命令であり、そしてこの命令の1つ後の命令が次の命令ブロックの最初の命令となる。
分岐命令アドレスとは分岐命令自身のアドレス、命令ブロックのアドレスと命令オフセットアドレスを含む、のことを指す。
分岐ターゲット命令とは分岐命令によって分岐先になったターゲット命令のことを指す。
分岐ターゲット命令アドレスとは分岐が取られた場合の分岐先のアドレス、すなわち分岐ターゲット命令の命令アドレスのことを指す。
それから、1つもしくは複数のホスト命令がプロセッサ・コアによって実行され、プロセッサ・コアが直接ゲスト命令を実行するのと同じ働きを実現する。
図1は開示された実施形態と整合する例示的な命令処理システムの構造概略図を示す。
各ゲスト命令はコンバータ200へ送られ該当する1つもしくは複数のホスト命令に変換され、ホスト命令はプロセッサ・コア101へ実行されるため送られる。
コンバータ200は、特定のゲスト命令セットをホスト命令セットに変換するのをサポートする固定構造でありうる。
コンバータ200は設定可能でもありうる。つまり、設定に応じて、1つあるいは複数のゲスト命令がホスト命令セットに変換される。
固定構造を持つコンバータ200は設定可能コンバータの特殊例と捉えられるので、設定可能コンバータのみをここで取り扱う。
図2に示されるように、コンバータ200はメモリ201、アライナ203、抽出アレイ205、命令スプライサ207、そしてオペレーション・コード(もしくはオペコード・スプライサ)209を含む。
アライナ203はゲスト命令をゲスト命令セットの中でシフトし整列するように設定されている。
そして、ゲスト命令が命令ブロック境界を越えるとき、アライナ203はゲスト命令を命令ブロックにシフトしてゲスト命令を整列させる。
図3Aに示されるようにアライナ203はコントローラ301、バッファ303と305、そしてローテータ307を含む。
ゲスト命令の語調の単位はバイトであると仮定されている。そして命令ブロックは最も長いゲスト命令の全てのバイトを含むと仮定されている。
この開示においては、2つのバッファは2つの連続する命令ブロックをそれぞれ保存するものとする。
従って、処理中のゲスト命令はバッファ303の命令ブロックに完全に収まるか、命令ブロック境界をまたがって置かれる(つまり、命令の最初の部分がバッファ303の命令ブロックの終わり部分に置かれ、命令の残りの部分がバッファ305の命令ブロックの最初の部分に置かれる)。
セレクタ312、314、316、318そして320はそれぞれ左から右へ順番に1バイトに対応する。
デコーダ327の制御によって、セレクタはバッファ303またはバッファ305の中身を選びそして選ばれた内容をローテータ307のインプットに送る。
コントローラのビット幅はmで、2mはバッファ303とバッファ305のバイト幅に等しい。
レジスタ321は現在変換されているゲスト命令のスタート・オフセット・アドレス(SA)を記憶する。
エンコーダ327によってスタート・アドレスがエンコードされた後、スタート・アドレスは選択シグナルとして用いられ、バッファ303とバッファ305の出力セレクタ312、314、316、318、320を制御する。
セレクタはバッファ303からのオフセット・アドレスがSA以上のバイトを選び、そしてバッファ305からのオフセット・アドレスがSA以下のバイトを選び、選ばれたバイトをローテータ307へ送る。
シフト量はローテータ307へバス313を経て送られる。
さらに、終結部分355より後ろに次の順番のゲスト命令の一部があるかもしれない。
従って、受け取ったシフト量にもとづいて、ローテータ307は左回転操作を行なう。
すなわち、ゲスト命令の開始部分353が命令ブロックの始めにシフトされ、そしてゲスト命令の終結部分355が同じ命令ブロックの開始部分の右に置かれる。
そして、命令ブロックがローテータ307から出力される。
ゲスト命令の長さはコントローラ301の加法器323へバス325を経て送られバス313にてシフト量に加算される。
この結果は次のゲスト命令の開始アドレスであり、レジスタ321に記憶される。
加えて、もし加法器323のキャリー出力が’0’であるなら、それは次のゲスト命令の開始部分がバッファ303にあることを示し、上記方法を用いて整列される。
もし加法器323のキャリー出力が’1’であるなら、それは次のゲスト命令の開始部分がバッファ305にあることを示す。
このとき、キャリー出力の制御によって、バッファ305の中身はバッファ303に充填され、新しい後続命令ブロックがバッファ305に充填される。
従って、次のゲスト命令の開始位置はバッファ303の中にあり上記方法を用いて整列される。
ゲスト命令351は命令ブロックの境界を跨ぎこしている。開始部分353は命令ブロック357の中にあり、終結部分355は命令ブロック359の中にある。
命令ブロック357と命令ブロック359はバッファ303とバッファ305の中にそれぞれ記憶されている。
命令ブロック357と命令ブロック359がセレクタによって選択されスプライスされた後、命令ブロック361がローテータ307のインプットとして形成される。
よって、命令ブロック361は三つの部分(左から右へ)から形成される: ゲスト命令351の終結部分355、ゲスト命令351の後続命令の部分363、そしてゲスト命令351の開始部分353。
この開示においては、循環シフトによって得られた命令ブロック365はゲスト命令351とゲスト命令351の順番上次の命令の部分363とを含む。
部分363は後続のオペレーションに何も影響がないため省略することができる。
命令タイプによって、各命令フィールドが抽出される。
抽出アレイ205は同じ構造を持つ複数の抽出器から構成される。
抽出器の数はゲスト命令セット中の任意の命令における命令フィールドの最大数より以上である。
プロセッサ・システムによって対応されている全てのゲスト命令セットにおいて、もし命令が最大n個の命令フィールドを含んでいるならば、抽出アレイ205はn個の抽出器から構成される。
各抽出器は同じゲスト命令を受け取り、そしてメモリ201によって送られた制御シグナルにもとづいて抽出されるべき情報を出力する。
図4Aに示されるように、抽出器はローテータ401、マスキングデバイス403から構成される。
受け取ったシフト量に応じて、ローテータ401は入力されたゲスト命令ワードをシフトし、命令中の特定の命令フィールドが該当する位置にシフトされる。
マスキングデバイス403はシフトされた命令とマスクワードのためにBit AND操作を行い、抽出器の特定の命令フィールド以外の、出力の残りの部分が全て’0’になるようにする。
従って、ゲスト命令の命令フィールドはホスト命令の命令フィールドの位置へシフトされる。
ゲスト命令451の命令フィールド453に対するシフトおよびマスク操作が図4Bにおいて示されている。
ローテータ401のシフト量はゲスト命令とホスト命令の中における命令フィールドのオフセット・アドレス差異に等しい。
例えば、命令フィールド453がゲスト命令451の10番目ビット、11番目ビットと12番目ビットに位置し、命令フィールド453が対応するホスト命令の6番目ビット、7番目ビット、8番目ビットに位置するとき、該当するシフト量は左シフト4ビット(つまり、10マイナス6は4に等しい)である。
従って、ゲスト命令451がローテータ401によってシフトされた後、図4Bに示されるようにシフトされた命令455が得られる。
マスク・ワード457の6番目ビット、7番目ビット、8番目ビットは全て’1’であり、マスクワード457の他のビットは全て’0’である。
従って、シフトされた命令455とマスクワード457はマスクデバイス403においてBit AND操作を施され、結果は抽出器の出力として、つまり図4Bの抽出器出力459として使われる。
例えば、ゲスト命令セットの中の命令のオペレーション・コード・フィールドの数が最大3であるなら、抽出器アレイ205の中の抽出器211、213、215がオペレーション・コード・フィールドを抽出するのに用いられる(オペレーション・コード抽出器と呼ばれる)。そして抽出器アレイ205の残りの抽出器(つまり抽出器221、223、225そして227)は他の命令フィールドを抽出するのに用いられる(他フィールド抽出器と呼ばれる)。
抽出器211、213、215によって抽出されたオペレーション・コードはそれぞれ別の場所にシフトされ重なることはない。
抽出されたオペレーション・コードはオペレーション・コード・スプライサ209に送られBit OR操作を施され、よって完全なオペレーション・コードが得られる。
完全なオペレーション・コードはメモリ201にアドレス指定アドレスとして送られる。
例えば、図2で示されるように、レジスタ212 の制御シグナルがセレクタ222によって選ばれた後、制御シグナルは抽出器211を制御するために用いられる; レジスタ214の制御シグナルがセレクタ224によって選ばれた後、制御シグナルが抽出器213を制御するのに用いられる;そしてレジスタ216の制御シグナルがセレクタ226によって選ばれた後、制御シグナルが抽出器215を制御するのに用いられる。
メモリ201は数列のマッピング情報から構成され、直接アクセス領域と間接アクセス領域に分割されている。
マッピング情報の各行は1つのアドレス指定アドレスに対応している。
全てのアドレス指定アドレスはホスト命令の完全なオペレーション・コードに対応しているから、1つもしくは複数行のマッピング情報がゲスト命令セットにおける1つもしくは複数のゲスト命令に対応し、そしてマッピング情報は該当する抽出情報を記憶する。
抽出情報は、ゲスト命令に対応するホスト命令のオペレーション・コード、全ての命令フィールド(オペレーション・コード・フィールド以外の)の開始位置と幅、そしてゲスト命令の命令フィールドと対応するホスト命令の命令フィールドとの間の位置関係とを含んでいる。
特にオペレーション・コード・スプライサ209によって出力された完全なオペレーション・コードは直接アクセス領域のアドレス指定アドレスとして、該当するマッピング情報の行を読み出すために、用いられる。
メモリ201の間接アクセス領域はマッピング情報の他の行のインデックス値(つまり、行アドレス情報)にもとづいてアクセスされる必要がある。
例えば、ゲスト命令が複数のホスト命令に対応するとき、ゲスト命令の完全なオペレーション・コードは、直接アクセス領域から複数のホスト命令のうちの最初のホスト命令に対応するマッピング情報を読み出すために、アドレス指定アドレスとして用いられる。
このマッピング情報は間接アクセス領域にある第2のホスト命令に対応するマッピング情報のインデックス値を含む。
従って、インデックス値にもとづいて、第2ホスト命令に対応するマッピング情報が間接アクセス領域の中から見い出され、第2ホスト命令が変換される。
このようにして、全ての複数のホスト命令は変換される。
図5Aに示されるマッピング情報の行はゲスト命令に対応している。
つまり、1つのゲスト命令は1つのホスト命令に対応している。
マッピング情報501はホスト命令のオペレーション・コード(OP)503、ゲスト命令の長さ505、複数の抽出器の設定情報(例えば、抽出器507、509、511そして513の設定情報)、そしてエンディング・フラグ515から構成されている。
ホスト命令のオペレーション・コード503はゲスト命令に対応するホスト命令のオペレーション・コードである。
ゲスト命令の長さ505はゲスト命令の命令ワードの長さであり、アライナ203へゲスト命令325の長さの値として送られる。
ゲスト命令325の長さの値は現行命令の開始ポイントに加算され、結果は次の命令の開始ポイントをを計算するのに用いられる。
エンディング・フラグ515は全て’0’と記憶し、この行はゲスト命令に対応するホスト命令の最後の行のマッピング情報であることを示す。
設定情報は3つのパートからなる: シフト量(R)、マスク値の中の’1’の開始位置(B)、そしてマスク値の中の’1’の数(W)。
シフト量Rは該当する抽出器に送られローテータ401のシフトを制御するのに用いられる。
開始位置Bと数Wはマスク値の中の’1’の位置を決定するのに用いられる。
つまり、連続するW個のマスク・ビット(位置Bから始まって)の値は’1’であり、他のマスクビットは’0’である。
図5Bに示されるように、マッピング情報の複数の行が1つのゲスト命令に対応する。
つまり、ゲスト命令は複数のホスト命令に対応している。
ここにおいては、ゲスト命令は3つのホスト命令に対応し、3つのホスト命令の情報に対応するマッピング情報は、マッピング情報551、マッピング情報561としてマッピング情報571であるとする。
マッピング情報551はメモリ201の直接アクセス領域に置かれ、アドレス領域はゲスト命令から抽出されたオペレーション・コードをデコードすることによって直接アクセスされうる。
マッピング情報561とマッピング情報571は間接アクセス領域に置かれ、直接アクセス領域にあるマッピング情報(例えばマッピング情報551)に記憶されたインデックス値にもとづいて指定されなければならない。
マッピング情報561とマッピング情報571もホスト命令のオペレーション・コード503、複数の抽出器の設定情報(例えば抽出器507、509、511そして513の設定情報)とエンディング・フラグ515を含むが、しかしマッピング情報561とマッピング情報571はゲスト命令の長さ505を含まないかもしれない。
マッピング情報の3行のオペレーション・コード503はゲスト命令に対応する3つのホスト命令のオペレーション・コードにそれぞれ対応する。
ゲスト命令の長さ505はアライナ203へゲスト命令325の長さの値として送られる。
ゲスト命令325の長さの値は次のゲスト命令の開始ポイントを計算するのに用いられる。
マッピング情報551のエンディング・フラグ515とマッピング情報561はマッピング情報のエンドを意味せず、他の行における連続的なマッピング情報を意味する。
他の状況の場合も上記に沿って得られる。
マッピング情報551の命令ワードの長さ505とマッピング情報561は後続するマッピング情報へポイントするインデックスをそれぞれ記憶する。
つまり、マッピング情報551の命令ワードの長さ505はメモリ201においてマッピング情報561のインデクス値を記憶し、そしてマッピング情報561の命令ワードの長さ505はメモリ201においてマッピング情報571のインデクス値を記憶する。
マッピング情報571のエンディング・フラグ515は全て’0’を保存する。
つまり、オペレーション・コード(もしくはオペコード)抽出器から抽出されたオぺコード全体にもとづいて、最初の行のマッピング情報が見いだされる。
そして、各行のマッピング情報のエンディング・フラグ515の制御のもと、メモリ201は1つのゲスト命令に対応する1つもしくは複数のホスト命令のマッピング情報を正しく出力し、ゲスト命令セットを正しく変換する。
ホスト命令のオペレーション・コードは命令スプライサ207へバス230を経て送られる。
対応するゲスト命令の各命令フィールドの抽出情報はそれぞれ他フィールド抽出器へ送られる。
抽出情報に含まれているフィールド開始位置、フィールド幅そしてシフト量にもとづいて、他フィールド抽出器はゲスト命令の該当するフィールドを特定の位置へシフトし、マスク操作を実行し、シフトされた命令フィールド以外の抽出器の出力は全て’0’になる。
ホスト命令はプロセッサ・コアへ実行のために送られ、ゲスト命令の該当する機能が実現される。
図5C、5Dそして5Eに示されるように、メモリ201は直接アクセス領域531と間接アクセス領域533を含む。
間接アクセス領域のアドレスは直接アクセス領域のアドレスより高位にある。
例えば、ゲスト命令のオペレーション・コードによって形成されたアドレスがnビットの場合、メモリ201のアドレスはn+1ビットである。
アドレスの最上位ビットが’0’であるとき、直接アドレス領域531がアクセスされる;最上位ビットが’1’のとき、間接アクセス領域533がアクセスされる。
エンディング・フラグはこの行のマッピング情報に対応するゲスト命令とホスト命令の間の変換関係を示すのに用いられる。
つまり、関係は以下のうちの1つである:1つのゲスト命令が1つのホスト命令に対応する、もしくは1つのゲスト命令が複数のホスト命令に対応する、もしくは複数のゲスト命令が1つのホスト命令に対応する;
そしてこれらの中の1つの関係にもとづいて次の命令を処理するコンバータを制御する。
すなわち、1つのゲスト命令が1つのホスト命令に対応している。
図5Dに示されるエンディング・フラグ545の’10’値はマッピング情報の行が現行のゲスト命令と次のゲスト命令に対応していることを示す。
つまり、複数のゲスト命令が1つのホスト命令に対応する。
図5Eに示されるエンディング・フラグ555の’01’値はマッピング情報の行とマッピング情報の行の中のインデックス値によってポイントされたマッピング情報が共に現行のゲスト命令に対応することを示す。
つまり、1つのゲスト情報が複数のホスト命令に対応する。
特に、もしYビットが’0’ならば、現行ゲスト命令(もしくは現行のゲスト命令を含む複数の連続したゲスト命令)の変換は完了したことを示し、次のサイクルで次のゲスト命令の変換が行なわれる。
もしYビットが’1’ならば、現行ゲスト命令の変換が未完であることを示し、そして該当する変換が次のサイクルで引き続き行なわれる(次の命令の変換は開始されない)。
レジスタ537に記憶された前のゲスト命令のエンディング・フラグは、現行ゲスト命令が処理される時に、セレクタ541(セレクタ541はエンディング・フラグのYビットによって制御される)とアドレス・スプライス・ロジック543(アドレス・スプライス・ロジック543はエンディング・フラグのZビットによって制御される)を制御するために用いられる。
Yが’0’のとき、セレクタはゲスト命令のオペレーション・コードをメモリ201のアドレスとして選択する;
Yが’1’のとき、セレクタはレジスタ539に記憶されたメモリ201における前命令のインデクス値を、命令変換中のメモリ201の現行アドレスとして選択する。
Z値はゲスト命令のオペレーション・コードによって形成されたアドレスに、アドレスの最上位ビットとしてスプライスされる。
Zが’0’のとき、メモリ201上のアドレスは直接アクセス領域をポイントする。
Zが’1’のとき、メモリ201上のアドレスは間接アクセス領域をポイントする。
図5C-5Eに示される円はバス・スプライシングを示している。
従って、現行ゲスト命令は少なくとも1つの新しいホスト命令に対応する。
このとき、アドレス・スプライス・ロジック543の1つのインプットはオペレーション・コード・スプライサ209の現行ゲスト命令の完全なオペレーション・コードから来る。
そしてアドレス・スプライス・ロジック543の他のインプットはレジスタ537のエンディング・フラグのZビット(’0’)である。
つまり、全’0’が完全なオペレーション・コードの前にスプライスされ、アドレス・スプライス・ロジック543の出力は依然として現行ゲスト命令の完全なオペレーション・コードであり、直接アクセス領域531のアドレスに対応する。
セレクタ541は、エンディング・フラグのYビット(’0’)の制御の下、ORロジックの出力をメモリ201のアドレス指定アドレスとして選択する。
従って、現行ゲスト命令に対応するマッピング情報はメモリ201の直接アクセス領域531から読み出され、該当する命令フィールドは前述の方法に従ってシフトされマスクされ命令スプライサ207へ送られる。
さらに、エンディング・フラグのYビットは’0’なので、次ゲスト命令の変換は次のサイクルで開始される。
レジスタ563に記憶された内容は変換されたホスト命令もしくは変換が未完了の場合に得られる中途変換結果である。
エンディング・フラグ内のZビットはレジスタ561に記憶され、次のサイクルでANDロジック567に送られる。
Zビットが反転回路にて反転された後、Zビットはレジスタ563内のホスト命令が完全に変換されたか否かを示すシグナルとして出力される。
ANDロジック567の他のインプットはレジスタ563に記憶されている値から来る。
ANDロジック567の出力はORロジック569へ送られる。
ORロジック569の他のインプットは、各抽出器から送られる、シフトとマスキングから得られた結果である。
レジスタ563の出力は命令スプライサ207の出力667である。
結果はレジスタ563の完全なホスト命令にスプライスされる。
このとき、反転器565の出力は’1’(すなわち、Zビットの反転値)であり、変換が完了したことを示し、レジスタ563に記憶された内容は変換によって得られたホスト命令である。
従って、ゲスト命令をホスト命令に変換するプロセスは完了する。
変換されたホスト命令は次のサイクルで出力され、変換器は次のゲスト命令を変換のために読み始める。
従って、前ゲスト命令の変換を完了する前に、現行ゲスト命令は変換され得ない。
このとき、レジスタ539に記憶されている内容は前マッピング情報に含まれていたインデックス値である。
つまり、間接アクセス領域533内の前マッピング情報の次のマッピング情報(これら二つのマッピング情報は前ゲスト命令に対応する)のアドレス指定アドレスである。
セレクタ541は、エンディング・フラグのYビット(’1’)の制御のもと、レジスタ539によって出力されたインデクス値を選択する。
インデクス値に対応するメモリ201のアドレス領域は間接アクセス領域533内にあるから、前ゲスト命令に対応するマッピング情報が間接アクセス領域533から読み出され、そして対応する命令フィールドが前述の方法によってシフトされマスクされ、命令スプライサ207へ送られる。
エンディング・フラグのYビットは’1’であるから、現行命令の変換は次のサイクルで続行し、次ゲスト命令の変換は開始されない。
従って、次のサイクルで、ANDロジック567の出力は’0’になり、そしてORロジック569の出力は各抽出器のシフトとマスキングから得られる結果になる。
結果はレジスタ563で完全なホスト命令にスプライスされる。
反転器565の出力は’1’(つまり、Zビットの反転値)であり、変換が完了したことを示し、レジスタ563に記憶された内容は変換によって得られたホスト命令となる。
従って、ゲスト命令から複数のホスト命令に変換するプロセスにおいて、複数のホスト命令の中の1つの命令が生成され、そして生成されたホスト命令は次のサイクルで出力される。
次のサイクルにおいて、上記プロセスは対応するマッピング情報のフラグのYビットが’0’になるまで繰り返される。
それはマッピング情報に対応するホスト命令が複数のホスト命令の中の最後のホスト命令であることを示す。
ホスト命令は次のサイクルで出力され、1つのゲスト命令を複数のゲスト命令に変換するプロセスが完了する。
同時に、コンバータは次のゲスト命令を変換のために読みこむのを開始する。
従って、現行ゲスト命令は、複数のゲスト命令に対応するホスト命令が生成されるまで、継続的に変換される。
このとき、アドレス・スプライシング・ロジック543の1つのインプットはオペレーション・コード・スプライサ209からの現行ゲスト命令の完全なオペレーション・コードであり、アドレス・スプライシング・ロジック543の他のインプットはレジスタ537のフラグのZビット(‘1’)である。
すなわち、アドレス・スプライシング・ロジック543の出力が間接アクセス領域に対応するアドレスになるように、追加的なアドレスが完全なオペレーション・コードの前にスプライスされる。
セレクタ541は、エンディング・フラグのYビット(‘0’)の制御のもと、ORロジックの出力をメモリ201のアドレス指定アドレスとして選択する。
従って、該当するマッピング情報(つまり、前ゲスト命令と現行ゲスト命令とに対応するマッピング情報)がメモリ201の間接アクセス領域533から読み出される。
そして、該当する命令フィールドが前述の方法に沿ってシフトされマスクされ、命令スプライサ207へ送られる。
従って、次のサイクルにおいて、ANDロジック567の出力はレジスタ563に記憶された値(すなわち、変換の中間結果)であり、ORロジック569の出力は抽出器のシフトとマスキング操作から得られた結果と中間結果とのコンビネーション(例えば、BitOR操作)である。
これらの結果はレジスタ563において新しい中間結果を形成する。
反転器565の出力は’0’(すなわち、Zビットの反転値)であり、変換が未完了であることを示す。
フラグのYビットは’0’であるから、コンバータは次のゲスト命令を変換し始める。
Zビットが’0’になるまで(現行ゲスト命令が1つのホスト命令に対応する複数のゲスト命令の中の最後のゲスト命令であることを示す)、上記プロセスは繰り返され、複数の連続したゲスト命令に対応した命令フィールドのシフトとマスク結果はORロジック569によって結合され、複数のゲスト命令が1つのホスト命令に変換される。
このとき、コンバータ565の出力は’1’であり(すなわち、Zビットの反転値)、変換が完了したことを示し、そしてレジスタ563に記憶された内容は変換によって得られたホスト命令である。
サポートされるべき異なるゲスト命令セットに応じて、異なるマッピング情報がRAMに書き込まれる。
メモリ201は読み取り専用メモリ(ROM)でもよい。
つまり、メモリ201は1つもしくは複数のゲスト命令セットをサポートする。
加えて、メモリ201は同じ機能を果たす論理回路でもよい。
つまり、メモリ201は1つもしくは複数のゲスト命令セットをサポートする。
さらに、バッファの一部はメモリ201として割り当てられバッファとして使われない。
コンバータ200は異なる設定に応じて異なるゲスト命令セットをサポートできる。
1つのゲスト命令セットの命令長が抽出器の長さに等しいとき、セレクタ204は直接的に該当するゲスト命令を選び各抽出器へ送ることができる;あるいは、セレクタ204はアライナ203の出力を選び、選ばれた出力を各抽出器へ送る。
他のオペレーションは前述実施形態における記述と同じでありここでは繰り返さない。
例えば、ゲスト命令はプロセッサ・システムのレベル2キャッシュ(L2)に記憶できる;ホスト命令はプロセッサ・システムのレベル1キャッシュ(L1)に記憶できる;そして命令セット変換はゲスト命令がL1キャッシュに充填された時に実行される。
図6は開示された実施形態と整合するマルチレベル・キャッシュを含むプロセッサ・システムを示す。
図6に示された中空円はバスのスプライシングを示す。
プロセッサ・システムはまたコントローラを含みうる(図6には示されていない)。
コントローラはブロック・アドレス・マッピング・モジュール620、アクティブリスト604、トラック・テーブル610そして置換モジュール611から出力されたオペレーションを受け取るように設定され、機能モジュールのオペレーションを制御する。
1番目のアドレスと2番目のアドレスはL1キャッシュまたはL2キャッシュの中の命令の位置情報を示すことに用いることができる。
ここにおいては、1番目のアドレスと2番目のアドレスはL1キャッシュまたはL2キャッシュのアドレス指定アドレスであるものとする。
ゲスト命令がL2キャッシュ606に記憶されているとき、BN2Xはゲスト命令を含むレベル2命令ブロックのブロック番号を示すことに用いられ(すなわち、BN2XはL2キャッシュの中の該当するL2命令ブロックをポイントしする)、BN2Yはゲスト命令のレベル2ブロック・オフセットを示すことに用いられる(すなわち、L2命令ブロックにおけるゲスト命令の相対位置)。
説明のために、BN1はBN1XとBN1Yを表現するために用いられ、BN2はBN2XとBN2Yを表現するために用いられるものとする。L1キャッシュの中のホスト命令に対応するゲスト命令は全てL2キャッシュに記憶されているから、L1キャッシュに記憶されているホスト命令はBN1もしくはBN2で表すことができる。
アクティブ・リスト604の各エントリはL2命令ブロック・アドレスとL2ブロック番号BN2Xのマッチするペアを記憶し、L2キャッシュ606のどのメモリ・ブロックが命令ブロック・アドレスに対応するL2命令ブロックを記憶するかを示している。
マッチング操作はアクティブ・リスト604においてL2命令ブロック・アドレスにもとづいて実行され、マッチング操作が成功したときBN2Xが得られる。
また、アドレス指定操作がアクティブ・リスト604においてBN2Xにもとづいて実行され、該当するL2命令ブロック・アドレスが読み出される。
取得された分岐ターゲットアドレスはアクティブ・リスト604へ送られ、アクティブ・リスト604の中に記憶された命令ブロックアドレスとマッチングされ、分岐ターゲットがL2キャッシュ606に記憶されているかを決定する。
もしマッチング操作が不成功ならば、それは分岐ターゲット命令を含む命令ブロックがL2キャッシュ606にまだ充填されていないことを示す。
そしてこの命令ブロックが下位レベルキャッシュからL2キャッシュ606へ充填されたとき、該当するL2命令ブロックとL2ブロック番号のペアがアクティブ・リスト604の中に生成される。
特に、トラックを生成するとき、置換モジュール611は利用可能なトラックへポイントするBN1Xを生成する。
置換モジュール611は置換アルゴリズム(例えばLRUアルゴリズム、LFUアルゴリズムなど)にもとづいて利用可能トラックを決定する。
直接分岐命令に対しては、分岐ターゲットアドレスは、分岐命令を含む命令ブロックのブロックアドレス、命令ブロック内の分岐命令のオフセット、そして分岐オフセット、を足し合わせることで得ることができる。
命令ブロックアドレスはアクティブ・リスト604から読み出され、スキャン・コンバータ608のアドレスに直接送られる。
現行命令ブロックを記憶するのに用いられるレジスタがスキャン・コンバータ608に加えられうる。
従って、アクティブ・リスト604は命令ブロックアドレスをリアルタイムで送り出す必要はない。
この開示においては、直接分岐命令の分岐ターゲットアドレスはスキャン・コンバータ608によって生成され、間接分岐命令の分岐ターゲットアドレスはプロセッサ・コア601によって生成される。
両方のアドレスはゲスト命令アドレスに対応する。
加えて、スキャン・コンバータ608は全てのゲスト命令を1つもしくは複数の対応するホスト命令へ変換し、分岐命令の分岐オフセットは変換のあいだ変更されない。
つまり、ゲスト分岐命令の分岐オフセットは対応するホスト分岐命令の分岐オフセットに等しく、プロセッサ・コア601によって生成された間接分岐命令の分岐ターゲットアドレスが正しいことを保証する。
各エントリはL2キャッシュ・ブロックの部分(L2キャッシュ・ブロックのサブブロック)に対応するL1キャッシュ・ブロックのブロック番号(BN1X)とL2キャッシュ・ブロックの中のL2キャッシュ・サブブロックの開始オフセット(BN2Y)を記憶する。
各エントリはそれが含むのBN2Yの昇順に沿って左から右へ配置される。
1つの新しいエントリがブロック・アドレス・マッピング・モジュール620の1つの行に追加されるとき、新しいエントリのBN2Yがこの行の他のエントリのBN2Yとコンパレータ924によって比較される。
新しいエントリのBN2Yよりも大きなBN2Yを持つエントリはシフタ926によって右にシフトされ、新しいエントリを記憶するための場所が空けられる。
ブロック・アドレス・マッピング・モジュール620は該当するBN2XとBN1Xとの対応関係を記憶するように設定される。
図6に示されるように、XMAPエントリ・フォーマット684はBN1XとBN2Yとを含む。
従って、1つのBN2に対して、ブロック・アドレス・マッピング・モジュール620の1つの行がBN2のBN2Xにもとづいて見つけられる。
そして、BN2のBN2Yは行の各エントリに記憶されている有効なBN2Yと比較される。
比較に成功したエントリの対応するBN1Xが読み出される。
従って、BN2Xは対応するBN1Xに変換されるか、あるいは比較不成功の結果が得られ、それはBN2Yにおいてゲスト命令に対応するホスト命令がまだレベル1メモリ602にないことを示す。
フォーマット686は3つの部分から構成される:TYPE、BN2XとBN2Y。
TYPEは、非分岐命令、無条件直接分岐命令、条件付き直接分岐命令、無条件間接分岐命令、そして条件付き間接分岐命令などを含む命令タイプを含む。
ここでは、無条件直接分岐命令、条件付き直接分岐命令、無条件間接分岐命令、そして条件付き間接分岐命令はまとめて分岐命令として知られ、分岐命令に対応するトラック・ポイントは分岐ポイントである。
TYPEはまたアドレス・タイプ、つまり686のL2キャッシュ・アドレス・タイプBN2を含みうる。
フォーマット688も3つの部分から構成される:TYPE、BN1XとBN1Y。
フォーマット688の命令タイプはフォーマット686の命令タイプと同じである。
しかし、フォーマット688のアドレス・タイプはL1キャッシュ・アドレスBN1である。
ブロック・アドレス・マッピング・モジュール620の中のメモリ920のフォーマットは684に示されているように、BN1XとBN2Yとの組み合わせである。
トラック・ポイントはトラック・テーブル610の1つのエントリで、少なくとも1つの命令に関する情報、例えば命令タイプに関する情報、分岐ターゲット・アドレスなど、を含む。
ここでは、トラック・ポイント・アドレスはトラック・ポイントによって表された命令の命令アドレスに対応する。
分岐命令のトラック・ポイントは分岐ターゲットのトラック・ポイント・アドレスを含み、トラック・ポイント・アドレスは分岐ターゲット命令アドレスに対応する。
L1キャッシュ602の一連の連続した命令を含む命令ブロックに対応する複数の連続したトラック・ポイントはトラックと呼ばれる。
L1命令ブロックと対応するトラックは同じBN1Xで示される。
トラック・テーブルは少なくとも1つのトラックを含む。
トラックの全トラック・ポイント数はトラック・テーブル610の1つの行の全エントリ数に等しい。
他のコンフィギュレーションもトラック・テーブル610において可能である。
加えて、余分のL2ブロック番号エントリがトラック・テーブル610の各行に追加され、行の最初のトラック・ポイントに対応するゲスト命令のBN2を記憶するのに用いることができる。
従って、あるL1命令ブロックが置き換えられたとき、分岐ターゲットとして行を使っているトラック・テーブルの他の行のBN1はBN2へ変換されうる。
よって、その行は他の命令ブロックに対応する行によって、エラーを起すことなく、書き込まれうる。
従って、トラック・テーブル610のプログラム・フローとプロセッサ・コア601のフィードバックにもとづいて、トラッカー614はプログラム・フローに沿ってトラッキング操作を実行することができる。
L1キャッシュ602はトラック・テーブルのエントリに対応するホスト命令を記憶するから、 トラッカー614はトラック・テーブルの制御フローを追跡し、L1キャッシュ602をバス631を通してアドレス指定し、L1キャッシュ602はバス695を経てプロセッサ・コア601での実行のために命令を送る。
トラック・テーブル610のいくつかの分岐ターゲットはL2キャッシュ・アドレスBN2に記録される。
よって、必要なゲスト命令だけがホスト命令に変換され、ホスト命令はL1キャッシュに記憶され、よってL1キャッシュはL2キャッシュに比べて容量が小さくスピードがより速いものでよい。
トラッカー614によって読み出されたエントリの分岐がL2キャッシュ・アドレスBN2を用いて記録されるとき、BN2はマッチング操作のためにブロック・アドレス・マッピング・モジュール620へ送られるか、あるいはBN1アドレスを得るためにスキャン・コンバータ608へ送られる。
そして、変換された命令はL1キャッシュ602のBN1アドレスによって指定されたブロックに充填され、そしてBN1アドレスはまたトラック・テーブルのエントリに充填される。
BN1とプロセッサ・コア601から送られてくる命令の実行結果(例えば分岐命令の実行結果)にもとづいて、トラッカー614はL1キャッシュ602を制御し、プロセッサ・コア601での実行のために命令を供給する。
直接分岐ポイントの命令タイプはまた分岐ターゲットのアドレス指定アドレスがBN1(すなわちBN1を分岐ターゲットとする直接分岐命令)もしくはBN2(すなわちBN2を分岐ターゲットとする直接分岐命令)で表されているか、に関する情報を含むことができる。
BN1が分岐ポイントに記憶されているとき、それは分岐ポイントの分岐ターゲットのホスト命令を含むホスト命令ブロックがL1キャッシュ602のBN1Xにポイントされたメモリ・ブロックに記憶されていることを示し、分岐ターゲットのホスト命令はBN1Yに従って見つけ出される。
BN2が分岐ポイントに記憶されているとき、それは分岐ポイントの分岐ターゲットのゲスト命令を含むゲスト命令ブロックがL2キャッシュ606のBN2Xにポイントされたメモリ・ブロックに記憶されていることを示す。分岐ターゲットのゲスト命令はBN2Yにもとづいて見つけ出されるが、しかし分岐ターゲットのゲスト命令に対応するホスト命令がL1キャッシュ602に記憶されているか否かは直接には判断できない。
オフセット・アドレス・マッピング・モジュール618はL2キャッシュ606のゲスト命令のオフセット・アドレスとL1キャッシュ602のホスト命令のオフセット・アドレスとの間の対応関係を記憶するように設定される。
オフセット・アドレス・マッピング・モジュール618から送られたBN1Xによってポイントされたマッピング情報にもとづいて(つまり、BN2YとBN1Yとの間のマッピング情報)、オフセット・アドレス・コンバータ622は受け取ったBN2Yを対応するBN1Yへ変換する、もしくは受け取ったBN1Yを対応するBN2Yへ変換する。
オフセット・アドレス・マッピング・モジュール618のBN1Xによってポイントされた行のマッピング関係と開始位置にもとづいて、BN1YはBN2Yに変換され、BN1からBN2への変換が完了する。
ゲスト命令アドレス・バスはバス675、バス683とバス675を含む。
BN1バスはバス631とバス693を含む。BN2バスはバス633とバス687を含む。
他にも例えばBN2Xバス639、BN2Yバス637、そしてマッピング関係バス691などのバスがある。
ゲスト命令ブロック・アドレスはスキャン・コンバータ608に、直接分岐命令の分岐ターゲット・アドレスの計算のために、送り返される。
バス683の内容は間接分岐命令が実行されたときにプロセッサ・コア601によって出力された分岐ターゲット命令アドレスである。
バス657とバス683のフォーマットはゲスト命令アドレスのフォーマットと同じである。
ブロック・アドレス部分(高位ビット部分)がセレクタ680によって選ばれた後、ブロック・アドレス部分はアクティブ・リスト604へバス681を経て送られ、トラック・テーブルに記憶されているゲスト命令ブロック・アドレスとマッチングされ、L2ブロック番号BN2Xを得てL2キャッシュ606からバス671を経てゲスト命令を読み出す。
バス671のフォーマットはBN2Xである。
BN2Xとバス657のゲスト命令アドレス・オフセット部分(低位ビット)のBN2YとはスプライスされBN2アドレスを完成させる。
BN2アドレスはトラック・テーブル622へソートのために送られる。
バス671のBN2Xもまたセレクタ640へ送られる。
セレクタ640は、バス671によって出力された内容とバス633を経てトラック・テーブル610によって出力された内容のうち1つをBN2Xとして選び、BN2Xをバス639へ置く。
BN2Xはブロック・アドレス・マッピング・モジュール620のデータの行を読み出すのに用いられ、BN2からBN1へのマッピング操作が行なわれる。
BN2Yはブロック・アドレス・マッピング・モジュール620へ送られ、対応するBN1Xを得るためにバス639のBN2Xによってポイントされた行とマッチングされる。
フォーマットがBN2であるとき、バス633の中身はブロック・アドレス・マッピング・モジュール620とオフセット・アドレス・マッピング・モジュール618へ送られBN2XをBN1Xへマップする。
BN2のBN2Yはバス637を経て減算器928へ送られ、ブロック・アドレス・マッピング・モジュール620によって出力された対応するレベル2サブ・ブロックの開始アドレスに対して減算操作を施す。
そして、正しいブロック・オフセット・アドレスが得られ、オフセット・アドレス・コンバータ622によって用いられ、BN2YをBN1Yへ変換する。
BN1XとBN1Yは組み合わされBN1を形成しBN1はトラック・テーブル610へ書き戻される。
バス633のBN2Xはまたアクティブ・リスト604へ送られ、対応するゲスト命令ブロック・アドレスが読み出される。
ゲスト命令ブロック・アドレスはスキャン・コンバータ608へバス675を経て送られる。
スキャン・コンバータ608へバス657を経て直接送られるゲスト命令ブロック・アドレスとBN2Yはゲスト命令アドレスを形成する。
加えて、バス633上のBN2Xはまた、バス673を経てL2キャッシュ606へ送られ、対応するゲスト命令ブロックが読み出される。
出力は、プロセッサ・コア601での実行のための命令を読み出すアドレスとして、L1キャッシュ602へ送られる。
バス693は次の利用可能なレベル1ブロック番号BN1X(もしくはトラック番号)をスキャン・コンバータ608に供給し、変換によって得られたホスト命令を満たす。
バス693のBN1Xとバス657からのBN2Yは一緒にバス665へ置かれ(そしてブロック・アドレス・マッピング・モジュール620のエントリの内容を構成する)そして、ブロック・アドレス・マッピング・モジュール620の中のBN1XとBN2Yをアドレスの順序に従って記憶するために、セレクタ940へ送られる。
従って、バス665のフォーマットはBN1XとBN2Yである。
同時に対応するホスト命令のタイプ(スキャン・コンバータ608からバス687を経て出力される)と分岐ターゲット(分岐ターゲットはバス671のBN2Xとバス657のBN2Yによってバス687へスプライスされる)はバス687を経てトラック・テーブル610へ、バス693とバス669によってアドレス指定された場所において書き込まれる。
バス954のBN1Xは、オフセット・アドレス・コンバータ622へ送られるべき、対応するオフセット・アドレス・マッピング情報を、オフセット・アドレス・マッピング・モジュール618から読み出すために用いられる。
バス954のBN2Yは減算器928へ送られ、バス637から送られたBN2Yから減算される。
減算結果はオフセット・アドレス・コンバータ622へ送られる。
オフセット・アドレス・コンバータ622はバス954のBN2YをインプットにもとずいてBN1Yアドレスへマップする。
バス954からのBN1Xアドレスとオフセット・アドレス・コンバータ622によって出力されたBN1Yアドレスはスプライスされ完全なBN1となる。
BN1は3つのインプット・セレクタ692の入力ポートへバス685を経て送られる。
例示目的のために、一部の構成部分しか図7Aには示されていない。
前述の実施形態と同様、トラック・テーブル610の行とL1キャッシュ602のメモリブロックは一対一に対応している。
トラック・テーブルの行(つまり、トラック)のエントリ(つまり、トラック・ポイント)の数はL1メモリ・ブロックの中の命令の数より1つ多い。
トラックの最後のトラック・ポイントは、順番に従って次に実行されるべきトラックを示す位置を記憶する。
残りのエントリとL1メモリブロックの命令は一対一関係を持ち、エントリはプログラム実行フローに関する情報(例えば、命令タイプ、分岐ターゲットアドレス、など)を記憶する。
トラックの中のトラック・ポイントに対応するアドレスは左から右への昇順になっている。
もし分岐が取られなかった場合、オペレーションは非分岐命令の場合と同様である。
もし分岐が取られた場合、オペレーションは無条件分岐命令の場合と同様である。
トラックを構成する際、交換モジュール611は行アドレスBN1Xを出力し、スキャン・コンバータ608はコラムアドレスBN1Yを出力する。
BN2がトラッカー614によって読み出されたトラック・ポイントの内容に含まれている時、BN2はブロック・アドレス・マッピング・モジュール620もしくはスキャン・コンバータ608へ送られ、BN1を生成する。
BN1はトラック・ポイントへ書き戻される必要がある(つまり、読み出し、修正し、書き込む)。
トラッカー614によって読み出されたトラック・ポイントの内容に含まれている命令タイプが’間接分岐命令であるとき、プロセッサ・コア601によって生成された間接分岐ターゲットアドレスは、アクティブ・リスト604とブロック・アドレス・マッピング・モジュール620へ送られBN1を生成する。
BN1もまたトラック・ポイントへ書き戻される必要がある。
いずれの場合においても、トラック・テーブル610の書き込みアドレスは前回のリード・アドレスである。
バス685、バス687、そしてバス693上の値はセレクタ692によって選ばれた後に書き込み内容として用いられる。
バス685上の値はブロック・アドレス・マッピング・モジュール620とオフセット・アドレス・コンバータ622によって出力されたBN1である。
バス693上の値はトラックの最後のエントリに書き込まれるBN1であり、BN1は順番に実行される次のトラックをポイントしている。
トラック・テーブルの内容は3つの部分を含む:もしホスト命令が非分岐命令もしくは間接分岐命令であるとき、セレクタ694は、交換モジュール611によってトラック・テーブル610の書き込みアドレスの最初のアドレスとして生成されたホスト命令に対応するBN1X693を選ぶ;セレクタ696は、トラック・テーブル610の書き込みアドレスの2番目のアドレスとしてスキャン・コンバータ608によって出力された命令ブロックのホスト分岐命令のブロック・オフセット669を選ぶ;そして命令タイプ(つまり、非分岐命令か間接分岐命令)がトラック・ポイントの構成を完成させるための書き込み内容としてトラック・テーブル610へ書き込まれる。
もしホスト命令が直接分岐命令であるなら、スキャン・コンバータ608は分岐ターゲット・アドレスを計算する。
バス657を経た分岐ターゲット・アドレスのブロック・アドレスはアクティブ・リスト604へ送られマッチング操作を施される。
もしマッチングが成功ならば、対応するBN2Xはブロック・アドレス・マッピング・モジュール620へバス671とバス639を経て送られ、そして分岐ターゲット・アドレスのブロック・オフセット(つまり、BN2Y)はブロック・アドレス・マッピング・モジュール620へバス657とバス637を経て送られる。
対応するBN1Xはブロック・アドレス・マッピング・モジュール620の中のBN2Xによってポイントされた行の中で探索される。
もし該当するBN1Xがあるなら、BN1Xによってポイントされた行の中のマッピング情報がオフセット・アドレス・マッピング・モジュール618から読み出され、マッピング情報がオフセット・アドレス・コンバータ622へBN2YをBN1Yへ変換するために送られる。
セレクタ696はスキャン・コンバータ608によって出力された命令ブロックの中のホスト分岐命令のブロック・オフセット669を選びトラック・テーブル610の書き込みアドレスの2番目のアドレスとする。
上記BN1XとBN1Yは組み合わされてBN1になり、バス685へ置かれる。
BN1がセレクタ693によって選ばれた後、BN1と抽出された命令タイプは一緒にトラック・ポイントの中身としてトラック・テーブル610へ書き込まれ、よってトラック・ポイントの構築が完了する。
この時点で、トラック・ポイントはBN1を含む。
セレクタ696はスキャン・コンバータ608によって出力された命令ブロックの中のホスト分岐命令のブロック・オフセット669を選びトラック・テーブル610の書き込みアドレスの2番目のアドレスとする。
バス671のBN2Xとスキャン・コンバータ608によって出力されたBN2YはBN2にスプライスされ、バス687へ置かれる。
BN2がセレクタ692によって選ばれた後、BN2と抽出された命令タイプは一緒にトラック・ポイントの中身としてトラック・テーブル610へ書き込まれ、よってトラック・ポイントの構築が完了する。
この時点で、トラック・ポイントはBN2を含む。
交換アルゴリズム(例えばLRUアルゴリズム)はBN2Xを割り当て、分岐ターゲット・アドレスは該当する命令ブロックを取り出すために低レベルメモリへ送られる。
該当する命令ブロックはL2キャッシュ606内のBN2Xによってポイントされたメモリブロックへ記憶される。
セレクタ694は交換モジュール611によって生成されたホスト命令に対応するBN1X693を選び、トラック・テーブル610の書き込みアドレスの最初のアドレスとする。
セレクタ696はスキャン・コンバータ608によって出力された命令ブロックの中の分岐ホスト命令のブロック・オフセット669を選びトラック・テーブル610の書き込みアドレスの2番目のアドレスとする。
BN2Xと分岐ターゲット・アドレスのブロック・オフセット・アドレス(BN2Y)は直接にBN2へと組み合わされる。
BN2はバス687へ置かれる。
BN2がセレクタ692によって選ばれた後、BN2と抽出された命令タイプは一緒にトラック・ポイントの中身としてトラック・テーブル610へ書き込まれ、よってトラック・ポイントの構築が完了する。
この時点で、トラック・ポイントはBN2を含む。
加えて、変換され充填されたゲスト命令に対応するホスト命令の数が、1つのL1メモリブロックの中に含まれうるホスト命令の数より多いとき、超過部分は交換モジュール611によって生成されたBN1XによってポイントされたL1メモリブロックの中へ順番に充填されそして対応するトラックが構築される。
上記プロセスは繰り返され、L2キャッシュからL1キャッシュへの変換と命令充填が実現されそして対応するトラックが構築される。
リード・ポインタ631(つまり、レジスタ740の出力)はトラック・テーブル110のプロセッサ・コア601によって実行されるべき命令(現行命令)に対応するトラック・ポイントへポイントし、そしてトラック・ポイントの内容を読み出し、内容をバス633を経てセレクタ738へ送る。
同時に、リード・ポインタ631はL1キャッシュ602のためにアドレス操作を行い、現行命令を読み出す。
そして現行命令はプロセッサ・コアへ実行のために送られる。
出力はレジスタ740へ送り返され、レジスタ740の値は次サイクルにおいて1を加算されたものになる。
つまり、リード・ポインタ631は次のトラック・ポイントをポイントし、L1キャッシュ602から対応するホスト命令をプロセッサ・コア601における実行のために読み出す。
出力はレジスタ740へ送り返され、レジスタ740の値は更新され次サイクルにおいてBN1となる。
つまり、リード・ポインタ631は分岐ターゲット・ホスト命令に対応するトラック・ポイントへポイントし、L1キャッシュ602から分岐ターゲット・ホスト命令をプロセッサ・コア601における実行のために読み出す。
同時に、レジスタ740の更新は有効なTAKENシグナル635がプロセッサ・コア601から送られてくるまで休止する。
このとき、もしTAKENシグナル635の値が’1’なら、それは分岐が取られたことを示し、トラック・テーブルから出力されたBN1は出力として選ばれレジスタ740へ送り返され、レジスタ740の値は更新され次サイクルにおいてBN1となる。
つまり、リード・ポインタ631は分岐ターゲット・ホスト命令に対応するトラック・ポイントへポイントし、L1キャッシュ602から分岐ターゲット・ホスト命令をプロセッサ・コア601における実行のために読み出す。
もしTAKENシグナル635の値が’0’なら、それは分岐が取られなかったことを示し、レジスタ740の値にインクリメンタ736によって1が加算された結果が出力として選ばれレジスタ740へ送り返され、レジスタ740の値は更新され次サイクルにおいて’1’となる。
つまり、リード・ポインタ631はトラック・ポイントへポイントし、L1キャッシュ602からバス695を経て対応するホスト命令をプロセッサ・コア601における実行のために読み出す。
もしBN2へ対応する有効なBN1Xがブロック・アドレス・マッピング・モジュール620に含まれているなら、BN1Xが出力される。
オフセット・アドレス・コンバータ622はBN2のBN2Yを対応するBN1Yへ変換する。
BN1XとBN1Yは組み合わされBN1となる。
そして、BN1はバス685へ置かれる。
この時点で、セレクタ694はリード・ポインタ631の値(すなわち、分岐命令それ自身に対応する分岐ポイントBN1)の中のBN1Xを書き込みアドレスの最初のアドレスとして選ぶ。
セレクタ696はリード・ポインタ631の値の中のBN1Yを書き込みアドレスの第2アドレスとして選ぶ。
セレクタ692はバス685のBN1を書き込み内容として選び、分岐ポイントに書き戻す。
同時に、BN2に対応するゲスト命令から始まってL2命令ブロックの終わりまでの間のL2キャッシュの中にあるゲスト命令がスキャン・コンバータ608によって変換され検証される。
ホスト命令に対応するトラック・ポイント情報が抽出され、トラック・テーブル610のBN1Xにポイントされた行に充填される。
BN1XとBN2Xとの間のマッチング関係はオフセット・アドレス・マッピング・モジュール618に記憶される。
変換によって得られたホスト命令はL1キャッシュ602のBN1Xによってポイントされたメモリブロックの中へ充填される。
つまり、BN1Yの値は’0’である。
このようにして、分岐ポイントの分岐ターゲット命令はL1キャッシュ602に記憶される。
BN2のBN2Xは分岐ターゲット・ホスト命令に対応するBN1X(交換モジュール611によって生成された)に変換される。
BN1XとBN1Y(BN1Yの値は’0’)は組み合わされてBN1を形成する。
BN1はバス693に置かれる。
この時点で、セレクタ694とセレクタ696はリード・ポインタ631の値(すなわち、分岐命令自体に対応する分岐ポイント)を書き込みアドレスとして選ぶ。
セレクタ692はバス693のBN1を書き込み内容として選び、分岐ポイントに書き戻す。
このようにして、トラック・テーブル610によって出力されたトラック・ポイントの内容はBN1を含む。
後続するオペレーションは、分岐ターゲットがBN1である直接分岐命令の場合と同様であり、ここでは繰り返さない。
もしマッチングが成功なら、BN2Xが取得され、分岐ターゲットアドレスのブロック・オフセットはBN2Yとされる。
BN2XとBN2Yはアドレス・マッピング・モジュール620へ送られ、マッチング操作が実行される。
もしヒットがあれば、対応するBN1が得られ、後続するオペレーションは、分岐ターゲットがBN1である直接分岐命令の場合と同様である。
もしミスであれば、後続するオペレーションは、分岐ターゲットがBN2である直接分岐命令の場合と同様である。
レベル2メモリブロック番号BN2Xはアクティブ・リスト604によって交換アルゴリズム(例えばLRUアルゴリズム)に従って割り当てられる。
分岐ターゲットアドレスは下位レベルメモリへ送られ該当する命令ブロックを取り出す。
該当する命令ブロックは、L2キャッシュ606のBN2Xによってポイントされたメモリブロックに記憶される。
ゲスト命令ブロックはそれから変換されL1キャッシュ602へ充填される。
そして対応するトラックが造られマッピング関係が記録される。
BN2はBN1へ変換される。
BN1は分岐ポイントの中へ戻され(生成されたBN2はトラック・テーブル610へ充填されないが、BN1はトラック・テーブル610へ直に充填される)、よってトラック・テーブル610によって出力されたトラック・ポイントの中身はBN1を含むことになる。
後続するオペレーションは、分岐ターゲットがBN1である直接分岐命令の場合と同様であり、ここでは繰り返さない。
対応するゲスト命令アドレスはBN1アドレスを用いて取得されうる(例えば、トラックに記憶されているBN1Xに対応するBN2Xを用いてアクティブ・リスト604においてアドレス操作を実施しゲスト命令ブロック・アドレスを読み出し、ゲスト命令ブロックのブロック・アドレスはオフセット・アドレス・マッピング・モジュール618から取得され、よって完全なゲスト命令アドレスが取得される)。
プロセッサ・コア601が間接分岐命令を実行し分岐ターゲット・アドレスを生成するとき、分岐ターゲットアドレスはゲスト命令アドレスと比較される。
もし分岐ターゲットアドレスがゲスト命令アドレスと同じなら、実行は続行される。
もし分岐ターゲットアドレスがゲスト命令アドレスと同じでないなら、分岐ポイントの後の命令は掃除され結果は保存されない。
実行はプロセッサ・コア601によって与えられた分岐ターゲット・アドレスから開始され、分岐ターゲット・アドレスはBN1へマップされ、BN1は分岐ポイントへ記憶される。
変換中、スキャン・コンバータ608はさらにゲスト命令の分岐ターゲット・アドレスを計算し、命令タイプを抽出しターゲット・アドレスとタイプ情報をトラック・テーブルの該当するエントリへ充填する。
図7Bは開示された実施形態と整合する例示的なスキャン・コンバータの回路図を示す。
最初のソースは以下に記される。
トラック・テーブル610はバス633を経て直接分岐ゲスト命令アドレスBN2を送り出す。
BN2はブロック・アドレス・マッピング・モジュール602においてマッチされない。
このとき、必要なゲスト命令ブロックはL2キャッシュ606に記憶され、アクティブ・リスト604は該当するゲスト命令のプログラム・カウンター(PC)高位ビット・アドレスを持つ。
しかしゲスト命令はホスト命令に変換されL1キャッシュ602に記憶されることはない。
バス633のBN2Xアドレスはアクティブ・リスト604へ送られ対応する高位ビットを読み出す。
高位ビットはバス675を経てスキャン・コンバータ608へ送られる。
バス633のブロック・オフセットBN2Yもまたスキャン・コンバータ608へ送られる。
この時点で、セレクタ660はバス633のBN2Xを選び、BN2Xをバス673へ置き、従ってL2キャッシュ606のためにブロックアドレスを提供する。
このときコントローラは、プロセッサ・コア601が該当する間接条件付き分岐命令を実行した時に得られるゲスト分岐ターゲットアドレスを、バス683を経てアクティブ・リスト604、セレクタ680、そしてバス681へマッチング操作のために送る。
もしマッチングが不成功なら、それはゲスト命令ブロックがL2キャッシュ606にないことを示す。
アクティブ・リスト604はバス681のゲスト命令アドレスを下位レベルメモリへ送り、該当する命令ブロックを読み出す。
該当する命令ブロックはL2キャッシュ606のL2メモリブロックへ充填される。
ここでL2メモリブロックはアクティブ・リスト604によって割り当てられ、L2メモリブロックはセレクタ660とバス673によってポイントされる。
その間、ゲスト命令の高位ビットはアクティブ・リスト604の対応するタグフィールドに記憶される。
もしマッチングが成功ならば、アクティブ・リスト604はセレクタ660とバス673を経て、L2キャッシュ606のマッチするタグに対応するL2メモリブロックにポイントする。
その間、バス683のプログラム・カウンター(PC)アドレスはスキャン・コンバータ608へ送られる。
コントローラ790は他のモジュールからステータス信号を受け取り、他のモジュールを制御し恊働する。
セレクタ799はPC低位ビットアドレス(BN2Y)をバス633またはバス683から選び、レジスタ321にPC低位ビットアドレスを記憶する。
バス675とバス633からのアドレスはトラック・テーブルにてBN2をBN1アドレスに変換するのに用いられる。
変換中、該当するゲスト命令はホスト命令へ変換され、変換されたホスト命令はL1キャッシュ602へ記憶される。
バス683からのアドレスは、間接分岐ターゲットに対応するゲスト命令をホスト命令へ変換しそしてホスト命令をL1キャッシュ602に記憶するのに用いられる。
L1キャッシュ602のブロック番号BN1Xとブロック・オフセットBN1Yは一緒にトラック・テーブル610の間接分岐命令に対応するエントリに記憶される。
ソースが何であれ、セレクタ798とセレクタ799による選択の後は、後続するオペレーションは同様である。
以下に示されるBN2がBN1アドレスに変換されるプロセスは例示目的である。
L2キャッシュ606の各L2キャッシュブロック(図7Bの1つの行)は32バイトを持つ。
ブロック・オフセットBN2Yはバイト・アドレス’YY’であり、その値は’0’〜’31’である。
バイトは可変長ゲスト命令を記憶する。
L1キャッシュ602のアドレスはBN1でそのフォーマットは’7XY’である(ここで’7X’はブロック・アドレスBN1Xでその値は’70’〜’75’である)。
L1キャッシュ602の各L1命令ブロックは4つの固定長ホスト命令を含み、そのブロック・オフセットBN1Yはブロック・ワード・アドレス’Y’である。
BN2Yから区別するために、BN1Yの値は文字A〜Dによってタグ付けされる。
ある実装においては、ホスト命令の長さは1ワードである。
ホスト命令は他の長さを持ちうる。
トラック・テーブル610の各行は5つのエントリA〜Eを持つ。ここでエントリA〜EはL1キャッシュ602の4つのホスト命令A〜Dに対応し、エントリEはこの行の後の次のキャッシュブロックのアドレスを記憶するのに用いられる。
直接分岐ターゲット・アドレス計算器792はまた境界比較器772も含み、その入力はバス679に繋がっている。
境界比較器772はL2キャッシュ・ブロックの最大アドレス(ここで’31’が使われている)を記憶する。
バス679上のBN2Y値がL2キャッシュ・ブロック境界を越えるとき(’31’より大きい)、境界比較器772はL2キャッシュ・アドレス・クロスボーダ信号を生成しコントローラ790に知らせる。
直接分岐ターゲット・アドレス計算器792はまたセレクタ774を含む。
コントローラ790はセレクタを制御してコンバータ200によって出力された分岐オフセットもしくは全’0’を選び、選択結果を加算器760へ送る。
全’0’が選ばれたとき、次のゲスト命令ブロックのアドレスが計算される。
ここでゲスト命令のタイプは直接分岐命令であり、分岐ターゲットはBN2アドレス’8024’である(それはブロック・オフセットがL2キャッシュ606のL2キャッシュ・ブロック番号’80’の中の’24’であるようなゲスト命令を示している)。
BN2アドレスはバス633を経てブロック・アドレス・マッピング・モジュール620へ送られ、マッチング操作が実行される。
BN2Xはセレクタ640によって選ばれバス639へ置かれ、ブロック・アドレス・マッピング・モジュール620の中のメモリ・モジュール920のアドレスが選ばれ、行’80’に記憶されたBN2Y値が出力される。
得られたBN2Yはセレクタ638によって選ばれたBN2Yと比較され、バス637を経て送られる。
もし比較結果がミスであれば、それは分岐命令がL2キャッシュに記憶されているゲスト命令であることを示し、分岐命令はL1キャッシュに記憶されるホスト命令に変換されないことを示す。
コントローラがミス信号を受け取った後、コントローラはバス633上のBN2Xを使ってタグ(’9132’と仮定する)をアクティブ・リスト604の’80’行から読み出し、タグはスキャン・コンバータ608へバス675を経て送られる。
図7Bに関しては、コントローラはまたスキャン・コンバータ608のセレクタ798を制御してバス795を選び、そしてコントローラはさらにセレクタ799を制御してバス633を選ぶ。
さらに、コントローラはスキャン・コンバータ608のコントローラ790に命令の変換オペレーションを開始するように知らせる。
すなわち、分岐ターゲットのPCアドレスは’913224’で、分岐ターゲットのPCアドレスはL2キャッシュの’80’行に記憶される。
つまりBN2アドレスは’8024’である。
一度に16バイトがL2キャッシュ606から読み出されると仮定すると、レジスタ321の4ビット・ブロック・オフセット・アドレスの最高位ビットだけがL2キャッシュ606へ送られる。
オフセット・アドレスの最高位ビットとバス673からのブロック・アドレスが組み合わされてアドレス’8016’を構成する。
該当するバイトはL2キャッシュ606から読み出され、そしてコンバータ200のアライナ203へバス677を経て送られる。
アライナ203に入力された最低位ビットはバイト’16’である。
コンバータ200はレジスタ321の最低位3ビットバイナリ’100’をオリジナルなオフセットとして用い、’24’番バイトをアライナ203から出力された最低位バイトへシフトし、そして命令変換を開始する。
コンバータ200のメモリ201は各命令へ信号786を供給する。
信号786はブロック・オフセット・マッピング生成器796を制御し対応する命令のブロック・オフセットを記録する。
メモリ201はまたバス788へ値を送り、ブロック・オフセット・マッピング生成器796の中のロジック・ゲート780とロジック・ゲート764を制御し、よってある種のブロック・オフセットを記録するのを差し止める。
従って、複数のホスト命令(もしくはゲスト命令)と1つのゲスト命令(もしくはホスト命令)の間のマッピングが実現される。
デジタル回路においてワン・ホット・コードとは、値の正規な組み合わせが単一の高ビット(1)と他は全て低ビット(0)からなるものである。
AND ORゲート764を経たワン・ホット・コードはメモリ766に記憶される。
それに応じてカウンター776は、ゲスト命令のセグメントにおいて変換操作が開始されたとき、’0’にセットされる。
出力バス669の値’000’もまたデコーダ778によってワン・ホット・コード’1000’へデコードされ、ロジック・ゲート780を経てワン・ホット・コードはメモリ782に記憶されるために送られる。
ブロック・オフセット・マッピング生成器796もまたシフタ768とレジスタ770を含む。
バス679の値はレジスタ770に記憶され、ゲスト命令のセグメントにおいて変換操作が開始されたとき、シフタ768のシフト操作を制御する。
ここの例では、’1100’がレジスタ770に記憶され、シフタ768を制御して24ビットの左シフトを行い、レジスタ766のバイト’24’に対応する情報がバイト’0’の位置へシフトされ、そしてバス691へ置かれる。
コントローラはセレクタ692を制御してバス693上のBN1Xアドレス’72’を選ぶ。
BN1XアドレスはBN1YアドレスA(’00’)と一緒にトラック・テーブル610へ書き込まれる。
このとき、セレクタ694とセレクタ696はバス631のアドレスを選ぶ。
従って、BN1アドレス’72A’はBN2アドレス’8026’を取り替えるためにエントリに書き込まれるが、しかし命令タイプは変わらない。
もしトラッカー614が、命令タイプおよびまたはプロセッサ・コア601の制御信号にもとづいて、このエントリにおいて分岐を決定するならば、’72A’はバス631へ置かれトラック・テーブル610の’72’行の最初のエントリにポイントし、そこから実行を続行する。
スキャン・コンバータ608はバス669の第1レベルのブロック・オフセット・アドレスBN1Y値を、L1キャッシュ・ブロックとその対応するトラックの充填を制御する、L1キャッシュ602とトラック・テーブル610へ駆動する。
L2キャッシュ606のBN2アドレス’8024’から始まる分岐命令はコンバータ200によって非分岐ホスト命令へ変換される。
非分岐ホスト命令はL1キャッシュ602へバス667を経て送られ、’72’番L1キャッシュ・ブロックのAエントリ(ブロック・オフセットは’00’)へ充填される。
対応する命令タイプ(例えば、非分岐命令)もまたメモリ201から出力され、バス687を経てトラック・テーブル610へ送られ、’72A’エントリの命令タイプを記憶する。
そして、バス693上のBN1Xアドレス’72’とBN2Y値’24’とはBN1XBN2Yフォーマット’7224’へスプライスされ、ブロック・アドレス・マッピング・モジュール620のブロック・アドレス・メモリ・モジュール920の’80’番行の最も左のエントリの中へバス665を経て書き込まれる。
ここでエントリは、セレクタ640によって選ばれたバス633のBN2Xを用いてアドレス指定され、バス639を経て620へ送られる。
バス633上のBN2Y’24’はセレクタ638によって選ばれ、BN2Y’24’はバス637を経てブロック・アドレス・マッピング・モジュール620へ送られ、エントリを決定するために行の各エントリのBN2Y値’32’と比較される。
値と位置は、L2キャッシュの’80’番L2キャッシュ・ブロックの’24’番バイトから始まるゲスト命令のセグメントが’72’番L1キャッシュ・ブロックに記憶されていることを示し、しかしバイトアドレスがL2キャッシュの’80’番行の’24’以下であるゲスト命令はまだホスト命令へ変換されない。
構成とオペレーションは図8A-8Dに示された実施形態を参照する。
バス325の制御の下、アライナ203はバス677を経て入力されたゲスト命令を2バイト左シフトして次の命令変換を開始する。
命令のバイト長もレジスタ321の中身へ加算されるために加算器323へ送られる。
合計’26’がレジスタ321へ再び記憶される。
レジスタ321の出力はワン・ホット・コード’0000000000000000000000000100000’へデコーダ762によって再びデコードされる。
ワン・ホット・コードとレジスタ766の内容はAND ORゲート764を経てビット単位OR操作にかけられる。
結果の’0000000000000000000000010100000’はレジスタ766へ再び記憶される。
それは’80’番L2キャッシュ・ブロックの中の’24’バイトと’26’バイトがそれぞれ1つのゲスト命令の開始バイトであることを示している。
変換の最中、コンバータ200は命令が4バイトを持つ直接分岐命令であることを検知する。
コンバータ200は分岐オフセットに何の変化ももたらさない。
分岐オフセットと変換によって得られたホスト命令の他の部分はバス667へ直接置かれる。
分岐命令のタイプはバス687を経て出力される。
バス786の制御の下、カウンター776は’1’を加算し、バス669の値は’001’である。
命令は分岐命令であるから、コントローラ790は加算器760を制御して、メモリ756のPC高ビットアドレス、レジスタ321のブロック・オフセットそしてバス667の分岐オフセット部分798(このとき値は’24’であると仮定する)を合算する。
合計は分岐ターゲットのPCアドレス’913316’であり、合計はバス657へ置かれる。
合計の中の低ビットBN2Y(L2キャッシュ・ブロックのバイトの数より大きくない部分)はバス687と出力へスプライスされる。
もし結果がミスであれば、アクティブ・リスト604はPCアドレスの高ビットアドレス’9133’をバス681を経て下位レベル・メモリへ送り、該当するゲスト命令ブロックを読み出す。
アクティブ・リスト604はまたL2キャッシュの’81’番L2キャッシュ・ブロックをゲスト命令ブロックを記憶するために割り当てる。
L2キャッシュ・ブロック番号BN2X(’81’)はバス671を経て送り出される。
BN2Xとバス687上の下位ビットBN2Y(’18’)はスプライスされ完全なBN2になる。
BN2とバス687の直接分岐命令タイプは、セレクタ692を経てトラック・テーブル610へ送られ、バス693を経て交換モジュール611によってポイントされた’72’番行の中のバス669によってポイントされたBエントリ(アドレス’001’)へ書き込まれる。
同時に、バス667を経て変換によって得られたホスト分岐命令はL1キャッシュ602の’72B’へ書き込まれる。
ワン・ホット・コード’0100’とレジスタ782の値はOR操作にかけられ値’1100’を得る。
値’1100’はレジスタ782へ書き戻され、ホスト命令ブロックの最初のホスト命令と第2のホスト命令がそれぞれ1つのゲスト命令に対応することを表す。
もし1つのホスト命令が1つのゲスト命令の開始バイトに対応しないならば(つまり、ホスト命令が、1つゲスト命令に対応する複数のホスト命令のうちの最初のホスト命令でないひとつ)、メモリ201の中身がバス788を経た信号を通してAND ORゲート780を制御し(図5Dの終了値YZが’10’である状況と同様)、レジスタ782の信号と全’0’に対してOR操作が実施され、レジスタ782の該当する命令のビットが’0’と記録され、ホスト命令がゲスト命令に対応せずホスト命令が分岐ターゲットでないことを示す。
AND ORゲート764は、複数のゲスト命令の中の最初の命令の後の他の命令の対応するレコードを消去し、ゲスト命令の数がホスト命令の数と同じになる。
ゲスト命令のセグメントが対応するホスト命令へ変換されるとき、レジスタ782の’1’の数はレジスタ766の’1’の数に、位置は異なるものの、等しい。
レジスタ766の’1’の位置はゲスト命令の開始バイトのアドレスを表す。
レジスタ782の’1’の位置はホスト命令の始まりの命令のアドレスを表す。
バス325を通して201はアライナ203を制御して、バス677によって入力されたゲスト命令を4バイト左シフトして、命令変換を開始する。
ゲスト命令の長さはまた加法器323へ送られ、レジスタ321の内容に加算される。
合計’30’はレジスタ321に再び記憶される。
レジスタ321の出力はデコーダ762によって再び ワン・ホット・コードへデコードされる。
ワン・ホット・コードとレジスタ766に記憶された内容に対してビット単位OR操作が実施され、結果’0000000000000000000000010100010’を得る。
結果はレジスタ766へ再び記憶される。
カウンタ776は前と同様’1’を加算し、よってバス669はCエントリにポイントする。
ゲスト命令の長さは加法器323へ送られレジスタ321の内容に加算される。
合計’34’は再びレジスタ321へ記憶される。
レジスタ321の出力679はコンパレータ772に記憶されているL2キャッシュ・ブロックのバイト’31’と比較される。
比較結果はコントローラ790に、それがL2キャッシュ・ブロックの境界を越えたことを知らせる。
それにもとづいて、コントローラ790はセレクタ774を制御し、全’0’を選び、そしてコントローラ790はまた加法器760を制御して、メモリ756のPC高ビットアドレス、レジスタ321のブロック・オフセットそしてセレクタ774から送られた全’0’を加算し次ゲスト命令ブロックのブロック・アドレスを得る。
結果(つまり、PCアドレス’913302’)はバス657を経て送り出され、PCアドレスの高位ビット’9133’はアクティブ・リスト604へマッチング操作を実施するために送られ、BN2X値’81’を得る。
BN2X値はL2キャッシュ606の’82’番L2キャッシュ・ブロックをセレクタ660とバス673を経て選択する。
前実施形態によると、コンバータ200は82’番L2キャッシュ・ブロックの’0’〜’15’バイトを読み、’0’〜’1’バイトを抽出する。
コンバータ200において、’0’〜’1’バイトはシフトされ、82’番L2キャッシュ・ブロックの’30’〜’31’の後にスプライスされ、ゲスト命令の変換が完了する。
変換によって得られたホスト命令はL1キャッシュ602の’72C’エントリへバス667を経て送られ記憶される。
レジスタ782の内容は’1110’へ更新される。
コントローラはバス671のBN2X値’81’を制御して、ブロック・アドレス・マッピング・モジュール620のブロック・アドレス・メモリ・モジュール920へ、セレクタ640とバス639を経て送られるようにし、そして’81’番行の内容を読み出し、ブロック・アドレス・マッピング・モジュール620へバス657、セレクタ638、バス637を経て送られるBN2Yアドレス’02’とマッチングする。
もしマッチングがヒットならば、マッチング操作から得られたBN1と、コントローラによって生成された無条件分岐命令タイプが、トラック・テーブル610の’72D’エントリにバス685とセレクタ692を経て記憶される。
もしマッチングがミスであれば、それは対応するゲスト命令ブロックがL2キャッシュにあるが、しかしホスト命令に変換されていないことを意味する。
この時点で、コントローラ790は直接分岐命令タイプを生成し、それをバス687へ置く。
直接分岐命令タイプと加法器760からの低位ビットBN2Y(ブロック・オフセット・バイトに対応する)’02’はバス687を経て一緒に出力される。
コントローラはバス671のBN2Xとバス687のBN2YをスプライスしBN2アドレス’8102’とする。
BN2アドレス’8102’は無条件分岐命令タイプと共にトラック・テーブルの’72D’エントリにセレクタ692を通して書き込まれる。
この時点で、トラック・テーブルの’72D’エントリには対応するホスト命令は無く、よってL1キャッシュ602の’72D’エントリは充填されない。
コントローラ790はまたレジスタ782の内容’1110’をバス691へ置くよう制御する。
レジスタ782のフォーマットは図8Bの行771のデータフォーマットと同じである。
バス691の内容は、ゲスト命令のブロック・オフセットとホスト命令のブロック・オフセットへ後でマッピングするために、オフセット・アドレス・マッピング・モジュール618のL1キャッシュ交換モジュール611によってインデックスされる’72’番行へ送られ書き込まれる。
よって、対応するホスト命令がプロセッサ・コアにおける実行のために供給される。
トラック・テーブル610とブロック・アドレス・マッピング・モジュール620のこの時の値は図9Aを参照。
カウンタ776はまた境界コンパレータ772と同様のコンパレータを持つ。
L1キャッシュの境界が越えられたとき、コンパレータはコントローラ790に知らせる。
この場合、コントローラ790は、L1キャッシュ・ブロック交換モジュール611から新しいL1キャッシュ・ブロックを要求し、新しいキャッシュ・ブロックのBN1XアドレスとBN1Yアドレス(’0’)を制御し、トラック・テーブルの一杯に充填された行の最後のエントリにバス693とセレクタ692を通して書き込まれるようにする。
トラック・テーブルの各行は対応するL1キャッシュ・ブロックより1つ多いエントリを持ち、L1キャッシュ・ブロックが一杯に書き込まれたとき、プログラム・フローが次の新しいトラックへ伸びることができる。
新しいL1キャッシュ・ブロックは最初のエントリから充填されるため、そのBN1Yアドレスは常に’00’である。
そして、カウンタ776がリセットされる。
交換モジュール611は新しいL1キャッシュ・ブロックとトラック・テーブルの対応する行にバス693を経てポイントする。
さらに、変換されたホスト命令と対応するプログラム・フロー情報は、バス963によって示されたトラック・テーブルの行とキャッシュ・ブロックのエントリAから始まって充填される。
ゲスト命令セットは固定長命令セットもしくは可変長命令セットでありうる。
可変長命令セットが例として用いられる。
固定長命令セットは可変長命令セットの特殊例である。
図8Aに示されるように、ゲスト命令ブロック701は6つの可変長ゲスト命令を含む。
前回記されたように、ゲスト命令ブロックのバイト0は前命令の最後のバイトである。
従って、バイト0は前ゲスト命令ブロックへ属する。
つまり、現行ゲスト命令ブロックのゲスト命令はゲスト命令ブロックのバイト1から始まる。
ゲスト命令703は3バイトを占める(バイト1、バイト2、バイト3);ゲスト命令705は5バイトを占める(バイト4、バイト5、 バイト6、バイト7、バイト8);ゲスト命令707は2バイトを占める(バイト9、バイト10);ゲスト命令709は1バイトを占める(バイト11);ゲスト命令711は3バイトを占める(バイト12、バイト13、バイト14);ゲスト命令713はこのゲスト命令ブロックにおいて1バイトを占める;ゲスト命令713の残りの部分は次のゲスト命令ブロックにある。
従って、スキャンコンバータ608によって実施された変換操作を通して得られたホスト命令ブロック721は7つのホスト命令を含む(ホスト命令0からホスト命令7まで)。
加えて、命令ブロックがスキャン・コンバータ608によって変換されるとき、ゲスト命令のブロック・オフセットBN2Yとホスト命令のブロック・オフセットBN1Yとの間の対応関係もまた生成される。
対応関係はオフセット・アドレス・マッピング・モジュール618に記憶される。
複数のホスト命令に対応する1つのゲスト命令が例として用いられ、1つのホスト命令に対応する1つのゲスト命令は特殊例となる。
つまり、1つのゲスト命令が1つのホスト命令に対応しているとき、ゲスト命令に対応する最初のホスト命令と最後のホスト命令は、ゲスト命令に対応するホスト命令である。
図8Bに示されるように、行751と行771はマッピング関係のグループを構成し、マッピング関係のグループはそれぞれ、図8Aに示されたゲスト命令とホスト命令間のオフセット・アドレス・マッピング関係を記憶するため、ゲスト命令ブロックとホスト命令ブロックに対応する。
行751は16のエントリを含み、各エントリは1ビットデータ(つまり、’0’か’1’)のみを記憶し、’0’はエントリに対応するゲスト命令のオフセット・アドレスがゲスト命令の開始地点でないことを示す;そして’1’はエントリに対応するゲスト命令のオフセット・アドレスがゲスト命令の開始地点であることを示す。
つまりエントリ数は、ホスト命令ブロックに含まれうるホスト命令の最大数と同じである。
各エントリは1ビットデータ(つまり、’0’か’1’)のみを記憶し、’0’はエントリに対応するホスト命令が対応するゲスト命令の最初のホスト命令でないことを示す;そして’1’はエントリに対応するホスト命令が対応するゲスト命令の最初のホスト命令であることを示す。
図8Cは開示された実施形態と整合する例示的なオフセット・アドレス・コンバータ622の回路図を示す。
図8Cに示されるように、ゲスト命令のオフセット・アドレスをホスト命令のオフセット・アドレスへ変換するプロセスが例として取り上げられる。
オフセット・アドレス・マッピング・モジュール618から送られるマッピング関係の形式は図8Bに示される実施形態を参照されたい。
例示目的のため、4行と3コラムのみが図8Cに示される(つまり、下から上へ最初の4行と左から右への最初の3コラム)。
一番下の行番号は0であり、行番号は下から上への昇順である。
一番左のコラムのコラム番号は0であり、コラム番号は左から右への昇順である。
各コラムはゲスト命令のオフセット・アドレスに対応する。
行0のセレクタのインプットAが’1’である以外、コラム0の各セレクタのインプットAとBは全て’0’である。
行0のセレクタの全てのセレクタのインプットBは’0’である。
他のコラムのセレクタのインプットAは、同じコラム同じ行のセレクタの出力値から来て、インプットBは前のコラムと直下の行のセレクタの出力値から来る。
セレクタ803の行数はセレクタ・アレイ801の行数に等しい。
違いはセレクタ803のコラム数がホスト命令ブロックに含まれるホスト命令数に等しい点である。
同様に、例示目的のため、4行と5コラムのみが図8Cに示される。つまり下から上へ最初の4行と左から右へ最初の5コラム。
行番号とコラム番号の付け方はセレクタ・アレイ801と同等である。
加えて、セレクタ・アレイ803の行0の全てのセレクタのインプットBは全て’0’である。
一番上の行(行16)の全てのセレクタのインプットAは全て’0’であり、行0の全てのセレクタの出力はエンコーダ809へ送られ出力コラムの位置に応じてエンコーディング操作を行なう。
他のセレクタのインプットAは前のコラムと直上の行のセレクタの出力値から来る;そしてインプットBは前のコラムと同じ行のセレクタの出力値から来る。
行0のインプットAはセレクタ・アレイ801の直上の行のセレクタの出力値から来る;インプットBはセレクタ・アレイ801の同じ行のセレクタの出力値から来る。
1つのゲスト命令ブロックは16のオフセット・アドレスを含むから、マスク値の幅は16ビットであり、ゲスト命令のオフセット・アドレスに対応するマスクビット値と、プログラム順におけるその前のゲスト命令のマスクビット値は全て’1’であり、ゲスト命令のオフセット・アドレスに対応するマスクビットの後のマスクビット値は全て’0’である。
そして、マスク値とオフセット・アドレス・マッピング・モジュール618から送られるマッピング関係の行751はビット単位AND操作にかけられ、行751のゲスト・オフセット・アドレスに対応するビットもしくはそれより前のビットの値は保存され、行751の他の値は’0’にクリアされる。
結果として得られた16ビット制御ワードはセレクタ・アレイ801へ送られる。
ビット値が’1’のとき、対応するコラムのセレクタはインプットBを選ぶ。
ビット値が’0’のとき、対応するコラムのセレクタはインプットAを選ぶ。
つまり、セレクタ・アレイ801のセレクタの全てのコラムに対して、もし対応ビットが’1’ならば、前コラムと直下の行からの出力はインプットとして選ばれ、前コラムの出力は1行シフトアップされ、一番下の行はこのコラムの出力として’0’で満たされる;もし対応ビットが’0’ならば、前コラムと同行からの出力はインプットとして選ばれ、前コラムの出力はこのコラムの出力として保存される。
従って、セレクタ・アレイ801の最初のコラムのインプットがシフトアップされる行数は制御ワードの’1’の数に等しい。
つまり、セレクタ・アレイ801のインプットの’1’のみが対応する行数だけシフトアップされる。
セレクタ・アレイ801の行とコラムの数はゲスト命令ブロックに含まれるオフセット・アドレスの数に等しいから、セレクタ・アレイ801の出力は1つの’1’だけを含み、’1’を含む行の位置は制御ワードの’1’の数によって決定される。
セレクタ・アレイ801と同じように、制御ワードの全てのビットはセレクタ・アレイ803のセレクタの1コラムを制御する。
ビットの値が’1’のとき、対応するコラムのセレクタはインプットAを選ぶ。
ビット値が’0’のとき、対応するコラムのセレクタはインプットBを選ぶ。
つまり、セレクタ・アレイ803のセレクタの全てのコラムにとって、もし対応する制御ビットは’1’ならば、前コラムと直上の行からの出力はインプットとして選ばれ、前コラムの出力は1行シフトダウンされて、一番上の行はこのコラムの出力として’0’で満たされる;もし対応するビットが’0’ならば、同コラムと同行からの出力がインプットとして選ばれ、前コラムの出力がこのコラムの出力として保存される。
よって、1つの’1’をパスする度に、セレクタ803のインプットは1行シフトダウンされる。
つまり、セレクタ・アレイ803のインプットの’1’だけが1行だけシフトダウンされる。
従って、エンコーダ809がセレクタ・アレイ803の一番下の行から送られた’1’を受け取ったとき、対応するホスト命令オフセット・アドレスが’1’を含むコラムの位置にもとづいて生成される。
もしゲスト命令オフセット・アドレスが’9’であるなら(対応するゲスト命令ブロックの10番目バイト、つまり3番目の命令)、マスク・ユニット807によって出力されたマスク値は’1111111111000000’である。
値’1111111111000000’ と行751の値’0100100001011001’はビット単位AND操作にかけられ、値’0100100001000000’を得る。
つまり、制御ワードに3つの’1’がある。
よって、セレクタ・アレイ801のインプットの’1’は3行シフトアップされる。
つまり、出力の’1’は3番目の行にある。
従って、セレクタ・アレイ803の中の値が’1’である3つの制御ビットに対応するセレクタのコラムを通過した後、’1’はエンコーダ809に到達する。
行771の値は’1101111’であるから、セレクタ・アレイ803はインプット’1’を第0、第3、第5コラムにおいてそれぞれ1行シフトダウンする。
第3コラムにおけるエンコーダ809への出力は’1’であり、出力はホスト命令の第4命令に対応する(オフセット・アドレスは’3’)。
エンコーダ809はこのコードにもとづいて’3’を得て、それによってゲスト命令オフセット・アドレス’4’をホスト命令オフセット’3’へ変換する。
図8Dは開示された実施形態と整合する例示的なブロック・アドレス・マッピング・モジュールの回路図を示す。
[00247] 図8Dに示されるように、ブロック・アドレス・マッピング・モジュール620はブロック・アドレス・メモリ・モジュール920、比較モジュール924、シフタ926、マルチプレクサ940、マルチプレクサ942そして幾つかのセレクタ制御ロジックを含む。
各モジュールは複数のコラム(例えばR、S、T)に分割される。
各コラムはそれ自身のブロック・アドレス・モジュール920、比較モジュール924、シフタ926、マルチプレクサ940、マルチプレクサ942を持つ。
ブロック・アドレス・メモリ・モジュール920は複数の行と複数のコラムに組織された複数のエントリを含むメモリ配列である(例えば、図8Dに示されるメモリ・ブロック970、971、972)。
各エントリは2つの部分からなる:L1キャッシュ・ブロック番号 (BN1X)とL2キャッシュ・ブロック・オフセット(BN2Y)。
メモリ配列の1つの行はアドレス・バス639によって選ばれ、バス950を経て出力される;同様に、メモリ配列の他の行がバス639によって選ばれ、バス952のデータがバス639によって選ばれた行に書き込まれる。
ブロック・アドレス・メモリ・モジュール920のコラムはソートされる。
機能モジュールの全コラムは、ブロック・オフセットBN2Yを比較するための、それ自身の対応する比較モジュール924を持つ。
比較モジュール924はビット幅がBN2Yのコンパレータよりも大きい。
コラムのバス950のBN2Yがバス635から送られたBN2Yより大きいとき、コンパレータの出力はコラムにおいて’1’である。
バス950のBN2Yがバス635から送られたBN2Yより小さいか等しいとき、コンパレータの出力は’0’である。
コンパレータの出力が’0’であるとき、セレクタ940はこのコラムのバス950のエントリの内容を選び、内容をバス952へ置く。
コンパレータの出力が’1’であるとき、右のコラムのセレクタがコンパレータを含むコラムのバス950のデータを選ぶ。
データがシフタ926によってシフトされた後、データはバス952に置かれる。
つまり、コンパレータの出力が’1’であるとき、コントローラはこのコラムのバス950のデータを右へ1コラムシフトする。
バス952はセレクタ940の出力を同じコラムのブロック・アドレス・メモリ・モジュール920へ送る。
例えば、セレクタ976の出力はメモリ・モジュール970へのみ送られ、セレクタ977の出力はメモリ・モジュール971へのみ送られる。
あるコラムのコンパレータの出力が’0’で、右のコラムのコンパレータの出力が’1’であるとき、制御ロジックはこのコラムのバス950のデータを選び、選ばれたデータはバス954へ置かれ、トラック・テーブル610とオフセット・アドレス・マッピング・モジュール618へ送られる。
さてバス639の高位ビット(BN2X)は’81’であると仮定する。
ブロック・アドレス・マッピング・モジュール620の1つの行が選ばれ、この行においてメモリ・モジュール970、971、972のエントリの中のBN2Yは’32’である。
バス637を経て送られたBN2Yは’18’である(BN2アドレス’8118’はマッチングとソートに用いられることを示す)。
比較モジュール924の比較結果は、出力973、974、975が全て’1’(出力973は’1’であるとき、それはブロック・アドレス・メモリ・モジュール920の中にバス637のBN2Yに対応する有効なエントリが無いことを示す)であり、マルチプレクサ940のセレクタ977とセレクタ978を制御してインプットCを選び、それはシフタ926の出力へ繋がりバス952を駆動する。
セレクタ976はバス665のデータを選び、バス952を駆動する。
バス952のデータはブロック・アドレス・メモリ・モジュール920の中に読み出された行の中に書き込まれる。
結果として、メモリ・モジュール970のエントリがバス665から送られたデータを記憶し、そしてメモリ・モジュール971のエントリはメモリ・モジュール970のエントリに以前に記憶されていたデータを記憶する。
メモリ・モジュール972のエントリはメモリ・モジュール971のエントリに以前記憶されていたデータを記憶する。
つまり、新しいデータのBN2Yよりも大きいBN2Yを持つコラムは右にシフトされ、よって新しいデータを含むエントリはBN2Y値に沿って昇順に配列される。
コントローラは比較モジュール924の最左コンパレータの出力973を検出し、インプットBN2Yが対応するL1キャッシュ・ブロックを持つかを判断する。
もしコンパレータの出力973が’1’であるなら、それはインプットBN2Yが対応するL1キャッシュ・ブロックを持たないことを示す。
もしコンパレータの出力973が’0’であるなら、それはインプットBN2Yが対応するL1キャッシュ・ブロックを持つことを示す。
これらのBN2Y値とバス637によって送られたBN2Y値は比較モジュール924の対応するコンパレータによって比較される。
結果はコンパレータ出力973は’0’であり、コンパレータ出力974とコンパレータ出力975は’1’であることを示す。
コンパレータ出力973はセレクタ976がインプットAを選んでこのコラムのバス950のデータをバス952に置くようにする;コンパレータ出力974はセレクタ978がインプットC、つまりシフタ926の出力、を選ぶようにする;コンパレータ出力975は右のコラムのセレクタがインプットC、つまりシフタの出力、を選ぶようにする。
出力973’0’と出力974’1’はセレクタ977がインプットB、つまりバス665のデータ、を選ぶようにする。
選ばれた結果がブロック・アドレス・メモリ・モジュール920に書き戻された後、メモリ・モジュール970のエントリのBN2Y値は’18’である;メモリ・モジュール971のエントリのBN2Y値は’27’である;メモリ・モジュール972のエントリのBN2Y値は’32’である;そして右の他のエントリのBN2Yは全て’32’である。
従って、エントリのデータはBN2Y値に沿ってソートされ、対応するL1キャッシュ・ブロック番号もまたL2キャッシュ・ブロックのブロック・オフセットに沿ってソートされ、対応するホスト命令のBN1アドレスはゲスト命令のBN2アドレスをマッピングすることによって得られる。
このとき、’81’番行が読み出され、メモリ・モジュール970、メモリ・モジュール971、メモリ・モジュール972のエントリのBN2Y値はそれぞれ’18’、’27’、’32’である。
バス637のBN2Y値は’23’である。
比較操作を実施した後、コンパレータ924の出力973は’0’であり、コンパレータ924の出力974とコンパレータ924の出力975は’1’である。
このとき、セレクタ954の制御信号979のみが’1’である(信号979は出力973と出力974のXORである)。
内容のL1キャッシュ・ブロック番号BN1Xは、L1キャッシュ・ブロックに対応する行のマッピング関係をオフセット・マッピング・モジュール618から読み出すために使われる。
マッピング関係はオフセット・アドレス変換器622へ送られる。
減算結果(23-18=5)はレベル2サブ・キャッシュ・ブロックにおけるバス637のBN2Yの純アドレス・オフセットである。
アドレス・オフセットとマッピング関係にもとづいて、オフセット・アドレス変換器622は対応するL1キャッシュ・ブロックのブロック・オフセットBN1Yを得る。
バス954のBN1XとこのBN1Yはスプライスされ、L2キャッシュ・アドレス’8123’に対応するL1キャッシュ・アドレスBN1を得る。
BN1はトラック・テーブル610のエントリに、トラッカーによる参照のために置かれる。
図9A〜9Fは図6に示された実施形態の稼働プロセスを表す。
ブロック・アドレス・メモリ・モジュール920の全ての行はL2キャッシュ606のL2キャッシュ・ブロックに対応し、そしてブロック・アドレス・メモリ・モジュール920の全ての行はまたアクティブ・リスト604のゲスト命令ブロック・アドレスに対応する。
オフセット・アドレス・マッピング・モジュール618の1つの行とトラック・テーブル610の1つの行はL1キャッシュ602のL1キャッシュ・ブロックへ対応する。
図6のアクティブ・リスト604はまたL2キャッシュ606のL2キャッシュ・ブロックを先に取ってこられたゲスト命令ブロックのために交換ポリシーに応じて割り当てる。
交換モジュール611はL1キャッシュ602のL1キャッシュ・ブロックをホスト命令のために交換ポリシーに応じて割り当てるように設定されている。
図9A〜9Fの影の部分は充填されたホスト命令を表す。
例示目的のために、L2キャッシュ606はセットアソシアティブ・キャッシュとする。
インデックス・アドレスはL2キャッシュ606のブロック・アドレス(値は’80’〜’82’)で、対応するタグ(つまり、ブロック・アドレス)はアクティブ・リストの同じインデックス・アドレスを持つ行に記憶される。
L2キャッシュ606の全てのL2キャッシュ・ブロックは32バイトを持ち、ブロック・オフセットBN2Yはブロック・バイト・アドレス’YY’で、その値は’0’〜’31’である。
L2キャッシュ606は可変長ゲスト命令を記憶する。
図9A〜9Fに示される全ての分離線は異なる長さを持つゲスト命令を表す。
ある実施形態におけるゲスト命令の長さは2バイトから8バイトである。
L1キャッシュ602のアドレスはBN1で、そのフォーマットは’7XY’、’7X’はブロック・アドレスBN1Xでその値は’70’〜’75’である。
L1キャッシュ602の全てのL1命令ブロックは4つの固定長ホスト命令を持つ。
ブロック・オフセットBN1Yはブロック・ワード・アドレス’Y’である。
BN2Yからより簡単に判別可能で区別できるようにするために、値BN1YはA〜Dを使ってタグ付けされる。
ある実施形態においては、1つのホスト命令の長さはワードである。
ホスト命令は他の長さを持つこともある。
トラック・テーブル610の全ての行もまた4つのエントリA〜Dを持ちL1キャッシュ602の4つのホスト命令A〜Dに対応している。
トラック・テーブル610の全ての行もまたエントリEを持ち、次命令ブロックのアドレスを記憶する。
トラック・テーブル610の全てのエントリは命令タイプを記憶する。
トラッカーは命令タイプにもとづいて次ステップのアドレスを決定する。
エントリはまたエントリによって表された命令のターゲット・アドレスをポイントするポインターをも記憶する。
ターゲット・アドレスのフォーマットはBN2もしくはBN1である。
オフセット・アドレス・マッピング・モジュール618の全ての行は、1つのL1キャッシュ・ブロックと、対応するトラック・テーブルの1つの行に対応する。
920の全ての行は複数のエントリ(例えばR、S、T、U、V)を含む。
全てのエントリはL1キャッシュのL1キャッシュ・ブロックに対応する。
ブロック・アドレス・メモリ・モジュール920の全てのエントリの内容は、対応するL1キャッシュ・ブロックのブロック・アドレスBN1Xと、L1キャッシュ・ブロックの最初のホスト命令に対応するL2キャッシュ・ブロックのゲスト命令のBN2Yアドレス、を含む。
L2キャッシュ・ブロックが書き込まれるとき、 ブロック・アドレス・メモリ・モジュール920の対応する行のBN2Yアドレスは全て’32’にリセットされ、次のL2キャッシュ・ブロック最初のバイトを表す。
このとき、L2キャッシュ606のL2キャッシュ・ブロック’80’は充填され、L2キャッシュ・ブロック’81’と’82’はまだ充填されない。
L2キャッシュ・ブロック’80’の’24’番バイトから始まるゲスト命令は、スキャン・コンバータ608によってホスト命令フォーマットへ変換され、バス667を経てL1キャッシュ602のL1キャッシュ・ブロック’72’へ順番に充填される。
L2キャッシュ・ブロック’80’のバイト’24’〜’25’はゲスト命令で、その対応するホスト命令はL1キャッシュ・ブロック’72’のエントリAへ充填される。
L2キャッシュ・ブロック’80’のバイト’26’〜’29’はゲスト命令で、その対応するホスト命令はL1キャッシュ・ブロック’72’のエントリBへ充填される。
L2キャッシュ・ブロック’80’のバイト’30’から始まる4バイトはゲスト命令で、その対応するホスト命令はL1キャッシュ・ブロック’72’のエントリCへ充填される。
分岐ターゲットの最上位ビットはアクティブ・リスト604へバス657を経て送られマッチング操作を実施する。
もしマッチングにミスがあれば、アクティブ・リスト604は新しいL2キャッシュ・ブロックを割り当てる(キャッシュ・ブロック’81’、つまり、BN2Xは’81’);アクティブ・リスト604はまた分岐ターゲットの最上位ビットを低レベルメモリへ送り、対応するゲスト命令ブロックを読み出し、対応するゲスト命令ブロックはL2キャッシュ・ブロック’81’へ記憶される。
スキャン・コンバータ608の’81’行のBN2Yは全て’32’へリセットされる。
アクティブ・リスト604は先に割り当てられたL2キャッシュ・ブロック番号’81’をバス671を経て送り出す。
キャッシュ・ブロック番号’81’と、スキャン・コンバータ608によって出力されたバス657上の分岐ターゲットの低位ビットはバス687のBN2アドレスへスプライスされる。
スキャン・コンバータ608はまたゲスト命令’8026’(つまり、L2キャッシュ・ブロック’80’のバイト’26’)へ対応するホスト命令のアドレス’72B’(つまり、L1キャッシュ・ブロック’72’の第2ワード)を得る。
従って、スキャン・コンバータ608のアドレス・バス669は’72’行のエントリとトラック・テーブル610のBコラムにポイントする。
エントリはバス687を経て送られる内容に書き込まれる。
従って、トラック・テーブルの’72B’エントリの内容はBN2アドレス’8118’である。
比較結果は値’18’が全てのエントリの内容より小さいことを示す(つまり’18’ < ’32’)。
従って、BN1X値’72’とBN2Y値’18’(アドレスがバイト’18’である分岐ターゲット・ゲスト命令がL1キャッシュ・ブロック’72’の最初のメモリ・ブロックへ書き込まれる)はブロック・アドレス・メモリ・モジュール920の行’81’のエントリRへ書き込まれる。
このとき、値Rは’7218’である。
スキャン・コンバータ608は命令の長さが4バイト(ブロックの後ろ2バイト)であることを見いだす。
従って、現行L2キャッシュ・ブロックのアドレス’30’(ブロック・オフセット)は’4’(命令バイト)を追加して、次のゲスト命令ブロックのアドレスを生成する。
次のゲスト命令ブロックのアドレスはアクティブ・リスト604へバス657を経て送られ、マッチング操作を行なう。
もしゲスト命令ブロックがL2キャッシュ・ブロック’81’にあることが見いだされたなら(もしくはL2キャッシュ・ブロック’81’へ低位メモリからロードされたなら)、スキャン・コンバータ608はL2キャッシュ・ブロック’81’からデータを読み出し、L2キャッシュ・ブロック’80’のバイト’30’から始まるゲスト命令の変換を完了する。
変換によって得られたホスト命令はL1キャッシュ・ブロック’72’のエントリCへ順番に充填される。
それはL2キャッシュ・ブロック’80’の最後のゲスト命令であるから、スキャン・コンバータ608はトラック・テーブル610のために次の命令のアドレスを供給する必要がある。
この時点で、マッチング操作によって得られたBN2Xアドレスはトラック・テーブル604によってバス671を経て送り出される。
バス657のBN2XとBN2Yの下位ビット(30+4=34、32バイトより大きい部分を無視し値’2’を得る)は組み合わされてバス687のBN2アドレス’8102’になる。
ある1つの実施形態において、1つの命令ブロックの最後の命令から次の命令への命令フローを処理する方法は、無条件分岐命令とみなされる。
つまり、バス687のBN2アドレスはターゲット・アドレスとみなされ、トラック・テーブルの命令ブロックの最後の命令(アドレス’72C’)の後のエントリの中に置かれ、命令タイプは無条件分岐とセットされる。
従って、スキャン・コンバータ608はバス661を経て値が’72D’であるアドレスを送り出し、BN2アドレス’8102’がトラック・テーブルの行’72’のエントリDの中に書き込まれるのを制御する。
行’72’のエントリAは分岐命令でないから、トラッカー614は内容を右まで読み続ける。
トラッカー614が行’72’のエントリBからアドレス’8118’を読み、それがBN2アドレスであることを判断するとき、BN2アドレスはバス631を通してブロック・アドレス・メモリ・モジュール920とL2キャッシュ606へ送られる。
BN2アドレスはブロック・アドレス・メモリ・モジュール920の行’81’のエントリの内容を読み出す。
制御ロジックはブロック・アドレス・メモリ・モジュール920の行’81’の全てのL1キャッシュ・ブロック番号が無効であることを見いだす。
従って、制御ロジックはBN2アドレスに対応するゲスト命令がホスト命令にまだ変換されないことを決定する。
制御ロジックはL2キャッシュ606を制御し、L2キャッシュ・ブロック’81’のゲスト命令をアドレス’8118’から始まってアドレス’8131’(’81’ブロックの最後のバイト)まで順番に読み出す。
ゲスト命令はスキャン・コンバータ608へ変換のために供給される。
交換モジュール611はある交換ポリシーに従い、例えばLRU交換アルゴリズム、交換可能L1メモリブロックを決定し、それらは順番に’70’、’71’、’73’、’74’そして’75’である。
従って、’70’番L1メモリ・ブロックが充填のために供給される。
従って、スキャン・コンバータ608はL2キャッシュ606のアドレス’8118’から始まるゲスト命令をホスト命令へ変換する。
ホスト命令は順番にL1キャッシュ602のメモリ・ブロック’70’のエントリA、B、C、Dへ充填される。
BN1アドレス’70A’はトラック・テーブル610の’72B’エントリへ書き込まれ、前のBN2アドレス’8118’を交換する。
L2キャッシュのアドレス’8118’から始まるゲスト命令に対応するホスト命令は’70A’から始まるL1キャッシュ・ブロックへ、図9Bに示されるように、記憶される。
従って、スキャン・コンバータ608は交換可能L1命令ブロック番号を交換モジュール611から要求する。
交換モジュール611は’71’番L1メモリ・ブロックを供給する。
コントローラは交換モジュール611によって生成されたBNX値’73A’と、コントローラによって生成された無条件分岐命令タイプ’71A’(L1キャッシュ・ブロック’71’の最初の命令のアドレス)をトラック・テーブル610の行’70’のエントリEへ書き込み、トラッカー614がこのエントリを読み出すとき、キャッシュ・ブロック’71’の最初の命令へジャンプする。
スキャン・コンバータ608はゲスト命令の変換を続け、変換された命令を順番にL1キャッシュ・ブロック’71’へ充填する。
スキャン・コンバータ608はアドレスが’8118’〜’8126’であるゲスト命令の最初のバイトのブロック・オフセット・アドレスBN2Yと、ホスト命令に対応するブロック・オフセット・アドレスBN1Yを、ブロック・オフセット・マッピング・モジュール618のトラッカーのリード・ポインタ631によってポイントされる行’70’の中へ、図7Bに示されたフォーマットを用いて、記憶する。
比較結果はBN2Y値がRエントリのBN2Y値’18’より大きい、しかしSエントリと他のエントリのBN2Y値(例えば,’32’)よりも小さいことを示す。
値’7127’はブロック・アドレス・メモリ・モジュール920の行’81’のSエントリへ充填される。
Rエントリの値’7018’はそのままにしておかれる。
エントリT、U、Vは右へ1エントリ、シフトされれる。
スキャン・コンバータ608は行’81’のバイト’26’から始まるゲスト命令がバイト’31’で終わる(ゲスト命令が次の命令ブロックまで越えない)こと、そしてゲスト命令に対応するホスト命令がキャッシュ・ブロック’71’のBエントリで終わることを見いだす。
従って、計算、マッチングそして割り当てによって得られた次ゲスト命令のアドレス’8200’はトラック・テーブル610の行’71’のCエントリに記憶される。
トラック・テーブル604はL2キャッシュ・ブロック’82’の対応するゲスト命令ブロックを、下位レベルメモリから読み出し、L2キャッシュ・ブロック’82’に充填する。
詳細は図9Cの実施形態を参照されたい。
信号 635を経た分岐決定結果はトラッカー614へ送られる。
この時点で、結果は分岐が取られないことを示す。
トラッカー614はトラック・テーブルの同じ行の次のトラック・ポイント’72C’へ動き、内容を読み出し、命令が非分岐命令であることを見いだす。
そして、トラッカーは次エントリ’72D’へ動き、内容を読み出し、それがターゲットが’8102’である無条件分岐アドレスであることを見いだす。
コントローラはアドレスがBN2アドレスであることを判断し、BN2アドレスはバス633を経て送り出される。
バス633の高位ビットはブロック・アドレス・マッピング・モジュール920へ送られ、ブロック・アドレス・マッピング・モジュール920の行’81’のエントリの内容を読み出す。
920の内容は比較モジュール924のインプット・ポートの1つのセットへ送られる。
バス633の低位ビット(値は’02’)はセレクタ638によって選ばれ、比較モジュール924のインプット・ポート637の他のセットへ送られ、比較操作を実施する。
比較結果はインプット・ポート637のBN2Y値が全てのエントリの値より小さいことを表す。
比較結果にもとづいて、制御ロジックはBN2アドレスが’8102’であるゲスト命令に対応するホスト命令がL1命令ブロックに記憶されていないことを判断する。
制御ロジックはL2キャッシュ606を制御して、バス633から送られたBN2Xアドレス’81’そしてバス679から送られたアドレス’00’から始まるゲスト命令をスキャン・コンバータ608へ送り、ゲスト命令をホスト命令へ変換する。
同時に、バス637のBN2Yアドレス’02’が行’81’の全てのエントリの内容より小さいから、前の実施形態と同様に、値’7302’(BN2Yが’02’であるゲスト命令に対応するホスト命令がL1命令ブロック’73’に置かれることを表す)は行’81’のエントリRに置かれ、前行’81’の全てのエントリは右に1行シフトされる。
新しい値が書き込まれたエントリ(この場合Rエントリ)のBN2Y値’18’はスキャン・コンバータ608へ送られ、変換が’18’バイトの前バイトで終わる(つまり、’17’バイト)ことを、スキャン・コンバータへ知らせる。
このとき、トラッカー614のリード・ポインタ631はまだエントリ’72D’にポイントし、よって’73A’値はバス633から読み出される。
コントロール・ロジックは値がBN1値であることを決定する。
従って、コントロール・ロジックはL1キャッシュを制御しアドレス’73A’を使って対応するホスト命令をプロセッサ・コア601による実行のために読み出す。
前の実施形態と同様に、交換モジュール611によって生成されたBNX値’74A’とコントローラによって生成された無条件分岐命令タイプはトラック・テーブル610の行’73’のエントリEへ充填される。
バス657から送られたBN2Y値’10’は比較モジュール924へ送られ、行’81’のエントリと比較される。
比較結果はBN2Y値がエントリRのBN2Y値’02’よりも大きいこと、しかしSエントリのBN2Y値’18’および他のエントリのBN2Yよりも小さいことを示す。
前の実施形態に沿って、値’7410’はブロック・アドレス・メモリ・モジュール920の行’81’のエントリSへ充填される。
Rのエントリは変化しない。
エントリT、U、Vの値は右へ1エントリ、シフトされる。
バイト’17’で終わるゲスト命令はL1キャッシュ・ブロック’74’のBエントリへ充填される。
この時点で、スキャン・コンバータ608は前に比較モジュール924によって送られた制限値’18’を見いだし、マッチング操作がブロック・アドレス・メモリ・モジュール920の行’81’において制限値’18’を用いて実施され、’70’を得る。
つまり、無条件分岐命令タイプ’70A’がトラック・テーブル610の行’74’のエントリCに記憶される。
他の方法は、トラッカーがアドレス’8118’を読み出すとき、トラック・テーブル610の行’74’のエントリCへBN2アドレス’8118’を対応するマッチング操作のために保存することである。
詳細は図9Dを参照されたい。
トラック・テーブルの’73B’、’73C’、’73D’エントリは非分岐命令であるから、トラッカー614はこれらのエントリで止まらない。
トラッカー614はエントリ’73E’から無条件分岐命令ターゲット’74A’を読み出す。
つまり、トラッカー614は行’74’へジャンプしエントリAから前へ移動する。
トラッカー614はエントリ’74C’から無条件分岐命令ターゲット’70A’を読み出す。
つまり、トラッカー614は行’70’へジャンプし、エントリ’70E’から無条件分岐命令を読み出し、そしてそのターゲットは’71A’である。
トラッカー614は行’71’へジャンプし前へ移動し、エントリ’71C’の内容を読み出し、内容は無条件分岐命令でターゲットは’8200’である。
コントローラはターゲットがL2キャッシュ・ブロックのアドレスであることを決定する。
それから、バス631を経たアドレスはブロック・アドレス・メモリ・モジュール920へ送られ、マッチング操作を実施する。
L2キャッシュ・ブロック’82’は有効なL1キャッシュ・ブロックを持たないことが見いだされる。
マッチング結果にもとづいて、スキャン・コンバータ608はキャッシュ・ブロック’82’の全てのゲスト命令のホスト命令への変換を開始し、そしてホスト命令をL1キャッシュ602の交換モジュール611によって供給されたL1キャッシュ・ブロック’75’から始まるL1キャッシュ・ブロックへ充填する。
同時に、スキャン・コンバータ608はまた変換中に抽出された命令タイプと計算によって得られた分岐ターゲットをトラック・テーブル610の対応するエントリへ充填する。
コントローラは、交換モジュール911によって生成されたBN1アドレス’75A’と、トラック・テーブル610のトラッカー614によってポイントされた無条件分岐命令タイプエントリ’71C’を書き込むのを制御する。
エントリの新しい内容はトラック・テーブルから読み出されて、バス631を経てL1キャッシュ602へ送られる。
それから、ホスト命令はプロセッサ・コア601による実行のために読み出される。
ターゲットは’8116’である。
値が’8116’であるBN2は、ブロック・アドレス・メモリ・モジュール920へ送られ、マッチング操作を実施する。
結果はBN2Y値’16’がエントリSのBN2Y値’10’よりも大きいこと、しかしエントリTのBN2Y値’18’より小さいことを示す。
このとき、セレクタ954の制御信号のため、信号981だけが’1’である(信号981は出力974と出力975のXORである)。
メモリ・モジュール971のエントリの内容’7410’はバス954へ置かれ、ブロック・オフセット・マッピング・ロジック(おオフセット・マッピング・モジュール618、オフセット・アドレス・コンバータ622と減算器928を含む)へ送られる。
エントリの内容のL1キャッシュ・ブロック番号BN1Xは、オフセット・マッピング・モジュール618の行74からマッピング関係を読み出すためのアドレスとして用いられる。
マッピング関係はオフセット・アドレス・コンバータ622へ送られる。
バス637のBN2Y(L2キャッシュのブロック・オフセット)は、バス954のBN2Y(L2キャッシュ・ブロックのL1キャッシュに対応するレベル2サブキャッシュ・ブロックの開始アドレス)を、減算器928によって差し引く。
減算結果(16-10=6)はL2サブキャッシュ・ブロックのバス633上のBN2Yの純アドレス・オフセットである。
純アドレス・オフセットとマッピング関係にもとづいて、オフセット・アドレス・コンバータ622は対応するL1キャッシュ・ブロックのブロック・オフセットBN1Yを得ることができる。
バス954のBN1XとBN1Yはスプライスされ、L2キャッシュ・アドレス’8116’に対応するL1キャッシュ・アドレスBN1値’74B’を得る。
BN1値はトラック・テーブルのエントリ’75B’へ置かれ、元の値’8116’を交換し、トラッカー614はL1キャッシュ602を制御してこのBN1とプロセッサ・コア601のフィードバックにもとづいて命令を読み出す。
スキャン・コンバータ608はL2キャッシュ606の行’82’のゲスト命令の変換を続ける。
L1キャッシュ・ブロック’75’が充填された後、キャッシュ・ブロック’77’は次キャッシュ・ブロックとして割り当てられる。
詳細は図9Fを参照されたい。
この時点で、バイトコード命令は1つもしくは複数のホスト命令に、上記方法を用いて、プロセッサ・コアによる実行のために変換されうる。
バイトコード命令の特殊性のために、ある種の変更が性能を向上させるために、変換の途中で行なわれうる。
例えば、定数を必要とするバイトコード命令のために、定数はメモリの定数プールに記憶されるから、命令は1つのデータ読み取り命令と、前手法に沿った対応する操作命令へと変換されうる。
しかし、スキャン・コンバータが、バイトコード命令が定数を読む命令であることを検証し見いだしたとき、定数はメモリからデータバッファへ前もって充填される。
よって、プロセッサ・コアがバイトコード命令に対応する最初のホスト命令(つまり、データロード命令)を実行するとき、キャッシュ・ミスは起こらない。
よって、プロセッサ・コアがバイトコード命令(つまり、定数が埋め込まれた操作命令)に対応するホスト命令を実行するとき、オペレーションは直接実行され、プロセッサ・システムの性能をさらに向上させる。
ここにおいて、1つのスタック操作は1つのホスト命令へ変換される。
ホスト命令のオペランドはレジスタファイルのレジスタ値ではないが、しかしホスト命令のオペランドはオペランド・スタックの一番上のレジスタ値である。
この時点で、制御ロジックがプロセッサ・コアの既存のレジスタファイルのために追加され、レジスタファイルがスタック・レジスタとして用いられる。
ある実施形態においては、スタック操作は最大2つのオペランドを必要とし、1つの操作結果が得られる。
他の全ての場合においても、同様の方法が用いられうる。
デコーダ1003とデコーダ1005はそれぞれ2つのレジスタ番号をデコードし、そしてデコード結果を第1読み取りポートと第2読み取りポートへ送り、対応するレジスタ値をバス1013とバス1015から読み出す。
デコーダ1007は書き込まれるレジスタのレジスタ番号をデコードし、デコード結果を書き込みポートへ送り、バス1017の値が対応するレジスタに書き込まれることになる。
レジスタ1011はトップ・オブ・スタック(TOS)ポインタの値、すなわちレジスタ・ファイルがオペランド・スタックとして用いられたときにTOSによってポイントされるレジスタのレジスタ番号、を記憶する。
レジスタ1011の値はバス1045を経てセレクタ1053、セレクタ1055、セレクタ1057、デクリメンタ1031、インクリメンタ1041そしてコントローラ1019へ送られる。
デクリメンタ1031とインクリメンタ1041は、バス1045から送られたTOS値にそれぞれ、1を引きまたは1つのオペレーションを追加する。
対応する結果はセレクタ1053、セレクタ1055そしてセレクタ1057へバス1043とバス1047を経て送られる。
レジスタ・ファイル1001の容量は限られているから、レジスタ・ファイルがオペランド・スタックとして用いられるとき(つまりTOSポインタとボトム・オブ・スタック(BOS)ポインタの距離があるレベルに達する)、もしレジスタ・ファイルが満杯もしくは満杯に近いなら、オペランドの一部は順番に外部メモリ(もしくはキャッシュ)に記憶されなければならず、そしてBOSポインタは移動されて、レジスタのこの部分は直前にスタックへプッシュされたオペランドを記憶することができ、従って循環バッファに似た構造を形成する。
同様に、もしオペランド・スタックが空もしくは空に近いなら(すなわち、TOSポインタとBOSポインタの距離があるレベルに達する)、以前に外部メモリ(もしくはキャッシュ)に記憶されたオペランドは逆の順番でオペランド・スタックへ戻される必要があり、BOSポインタは同時に移動して、オペランド・スタックがオペランドを供給し続けられるようにする。
あるひとつの実施形態において、コントローラ1019は新しいBOSポインタをTOSポインタの値にもとづいて生成する。
新BOSポインタ値がデコーダ1009によってデコードされた後、新BOSポインタ値はレジスタ・ファイル1001を制御して前BOSポインタ値と新BOSポインタ値の間のレジスタ値を外部メモリに記憶する、もしくは、外部メモリからの対応するオペランドを、レジスタ・ファイル1001の前BOSポインタと新BOSポインタの間のレジスタへ充填する。
命令フィールドの値はセレクタ1033、セレクタ1034、セレクタ1035、セレクタ1037へ制御ライン1021を経て送られる。
ホスト命令がスタック操作命令であるとき、セレクタ1033、セレクタ1035、セレクタ1037は全てインプットAを選び、インプットAをデコーダ1003、デコーダ1005、デコーダ1007へそれぞれ送る。
命令がレジスタ操作命令であるとき、セレクタ1033、セレクタ1035、セレクタ1037は全てインプットBを選び、インプットBをデコーダ1003、デコーダ1005、デコーダ1007へそれぞれ送る。
2つのソースレジスタ番号と1つのターゲット・レジスタ番号がセレクタ1033、セレクタ1035、セレクタ1037によって選ばれ、デコーダ1003、デコーダ1005、デコーダ1007によってデコードされた後、アドレス指定操作がレジスタ・ファイルのために実施される。
従って、値がレジスタ・ファイルのエントリから読み出され、そしてレジスタ・ファイルのエントリへ書き込まれうる。
オペレーションは既存のテクニックと同様であり、ここでは繰り返さない。
例えば、スタックのトップから2つのオペランドを取って操作し、結果をスタックのトップから1引いたところに記憶するスタック操作命令に対して、オペランドの1つに対応するレジスタ番号はレジスタ1011に記憶されたTOSポインタの値である;もう1つのオペランドに対応するレジスタ番号はTOSポインタの値から1引いたものである。
つまり、スタックのトップの2つのオペランドがポップされ、操作結果がスタックのトップへプッシュし戻される。
このとき、セレクタ1053はバス1023の命令フィールドの制御の下、インプットD(つまり、現在のTOS値)を選びレジスタ・ファイルから最初のオペランドを読み出す。
セレクタ1055は、バス1025の命令フィールドの制御の下、インプットH(つまり、現在のTOS値マイナス1)を選びレジスタ・ファイルから第2オペランドを読み出す。
セレクタ1057は、バス1027の命令フィールドの制御の下、インプットK(つまり、現在のTOS値マイナス1)を選ぶ。
インプットKがデコードされた後、書き戻されたレジスタが選ばれる。
同時に、セレクタ1051はバス1029の命令フィールドの制御の下、インプットN(つまり、現在のTOS値マイナス1)を選ぶ。
インプットNはレジスタ1011へ新TOS値として書き戻され、従ってTOSポインタの更新を完了する。
インプットIがデコードされた後、オペランドが書き戻された対応するレジスタが選ばれ、従ってプッシュ操作が実現される。
同時に、セレクタ1051は、バス1029の命令フィールドの制御の下、インプットI(つまり、現在のTOS値マイナス1)を選ぶ。
選ばれたインプットIはレジスタ1011へ新TOSポインタ値として書き戻され、従ってTOSポインタの更新を完了する。
インプットDがデコードされた後、対応するレジスタがオペランドを読み出すために選ばれ、従ってポップ操作を実現する。
同時に、セレクタ1051はバス1029の命令フィールドの制御の下、インプットN(つまり、現在のTOS値マイナス1)を選ぶ。
選ばれたインプットNはレジスタ1011 へ新TOSポインタ値として書き戻され、従ってTOSポインタの更新を完了する。
もしBOSポインタ値がある程度TOSポインタ値に近いならば、それはオペランド・スタックがほとんど空であることを表す。
もしオペランドが前に外部メモリ(もしくはキャッシュ)へ記憶されているならば、幾つかのオペランドは外部メモリ(もしくはキャッシュ)から取り出されてスタックのボトム 以外のレジスタ・ファイルへ充填される必要があり、そしてBOSポインタ値が更新される。
それゆえに、もしBOSポインタ値がTOSポインタ値よりある程度以上離れているなら、それはオペランド・スタックがほぼ満杯であることを表す。
スタックのボトム の幾つかのオペランドは取り出され外部メモリ(もしくはキャッシュ)へ記憶される必要があり、そしてBOSポインタ値が更新される。
図10Bに示されるように、BOSポインタ値とTOSポインタ値の差異が’3’のとき、それはオペランド・スタックがほぼ空であることを示すと仮定され、そして1つのオペランドが毎回充填される。
ある時点で、BOSポインタはレジスタ1073へポイントし、そしてTOSポインタはレジスタ1079へポイントする。
ポップ操作が実施されるとき、TOSポインタはレジスタ1077をポイントする。
このとき、BOSポインタ値とTOSポインタ値の差異は’3’である。
コントローラ1019は信号を送り、前に外部メモリ(もしくはキャッシュ)に記憶されていた最後のオペランドを取り出す。
それからオペランドは、位置がBOSポインタ値マイナス1のレジスタへ 充填される。
同時に、BOSポインタ値から1が引かれ、BOSポインタはレジスタ1071にポイントし、そしてオペランド・スタックの中のオペランド数は’3’より大きい。
ある実施形態において、BOSポインタ値とTOSポインタ値の差異が’7’であるとき、それはオペランド・スタックがほぼ満杯であることを表すと仮定され、そしてオペランドは毎回外部メモリ(もしくはキャッシュ)へ記憶される。
ある時点で、BOSポインタ値はレジスタ1081をポイントし、そしてTOSポインタはレジスタ1091をポイントする。
プッシュ操作が実施されるとき、TOSポインタはレジスタ1093をポイントする。
このとき、BOSポインタ値とTOSポインタ値の差異は’7’である。
コントローラ1019は信号を送り、外部メモリ(もしくはキャッシュ)のBOSポインタによってポイントされたオペランドを記憶する。
BOSポインタ値は1を追加し、よってBOSポインタはレジスタ1083にポイントし、オペランド・スタックのオペランド数を’7’より小さく保つ。
加えて、BOSポインタ値とTOSポインタとの差異を判断することを通して、オペランド・スタックがほぼ空かもしくはほぼ満杯かが決定される。
しかし、オペランド・スタックがほぼ空かもしくはほぼ満杯かはTOSポインタ値の変化を判断することによっても決定されうる。
例えば、BOSポインタ値は最後に調整されるから、もしTOSポインタ値の累積した増加もしくは累積した減少があるレベルに達したなら、対応する操作が実施されうる。
従って、トラッカーのリードポインタ631がエンディング・トラック・ポイントの前のトラック・ポイント(つまり、命令ブロックの最後の命令)をポイントし、そしてトラック・ポイントが分岐ポイントでない、もしくは分岐が取られない分岐ポイントであるとき、トラッカーのリードポインタ631は更新を続けエンディング・トラック・ポイントへ移動する。
BN1が出力され、L1キャッシュ602へ送られる。
エンディング・トラック・ポイントは真の命令に対応せず、そしてトラッカーのリードポインタ631は次サイクルの次トラックの最初のトラック・ポイントへ更新されるから、このクロック・サイクルにおいて、L1キャッシュ602はまた空の命令(プロセッサ・コアの内部状態を変化させない命令、例えばNOP)をプロセッサ・コア601における実行のために出力する必要がある。
アドレス指定アドレス がエンディング・トラック・ポイントに対応することを見いだしたとき、L1キャッシュ602にアクセスする必要はなく、そして空命令が直接プロセッサ・コアにおける実行のために出力される。
しかし、プロセッサ・コアは空命令を実行するためにもう一回クロック・サイクルを取る必要がある。
従って、図7Aに示された構造は修正され、トラッカーのリード・ポインタ631がエンディング・トラック・ポイントの前のトラック・ポイントにポイントするとき、トラック・ポイントの命令タイプとプロセッサ・コア601によって実行された命令から生成されたフィードバックにもとづいて、リード・ポインタ631は直接に分岐ターゲット・トラック・ポイントもしくは次クロック・サイクルの次トラックの最初のトラック・ポイントへポイントする。
ある実施形態において、プロセッサ・コア601、L1キャッシュ602、スキャン・コンバータ608、L2キャッシュ606、交換モジュール611、オフセット・マッピング・モジュール618、セレクタ692、セレクタ696、セレクタ694は図7Aの対応する部分と同じである。
違いは以下に記される。
トラック・テーブル610は各回2つのトラック・ポイントの内容(トラッカーのリードポインタ631によってポイントされたトラック・ポイントの内容1182と次トラック・ポイントの内容1183)を出力し、タイプ・デコーダ1152、コントローラ1154、セレクタ1116がトラッカーに追加される。
コントローラ1154は図7Aに示されていない、コントローラの機能と同様の機能を実施する。
例示目的のために、コントローラ1154が図11Aに示される。
2つの隣り合ったトラック・ポイントの内容はバス1117とバス1121に置かれる。
コントローラ1154はバス1117の命令のタイプを検出する。
タイプデコーダ1152はバス1121の命令のタイプを検出する。
どの時点でも、2つのエントリ、つまり現エントリ1182と次(右)エントリ1183 がトラック・テーブル610から読み出される。
現エントリ1182の内容はバス1117を経て読み出され、セレクタ738の1つのインプットとコントローラ1154へ送られる。
次エントリ1183はデコードのためにバス1121を経てタイプ・デコーダ1152へ送られる。
デコード結果はセレクタ1116を制御する。
セレクタ1116の1つのインプットはバス1121からで、他のインプットはリード・ポインタ631のBN1Xとインクリメンタ736からのBN1Yに1を加えたもの(つまりリード・ポインタ631のBN1Yプラス1)である。
タイプ・デコーダ1152は無条件分岐命令タイプのみをデコードする。
もしバス1121の命令が無条件分岐命令であるなら、セレクタ1116はバス1121へ内容を出力するように制御される。
もしバス1121の命令が他のタイプであるなら、バス631からのBN1Xとインクリメンタ736から出力されたBN1Yに1を加えたものが選ばれる。
プロセッサ・コア601からの制御信号1111はインプットをレジスタ740へ記憶されるよう制御し、トラッカーが次アドレス(つまり、より大きな値のアドレスに対して、BN1Xは変化せず、BN1Y+’1’)へ移動するようにする。
ある実施形態においては、制御信号1111はプロセッサ・コア601がトラッカーへ提供するフィードバック信号である。
制御信号1111はプロセッサ・コアが正常な稼働状態のとき’1’であり、トラッカーのレジスタ740は毎クロック・サイクルにおいて更新され、リード・ポインタ631はトラック・テーブルの新しいエントリと、プロセッサ・コア601による実行のためのL1キャッシュ602の新しい命令へポイントする。
プロセッサ・コア601が非正常な稼働状態にあり、プログラム・フローが中断される必要があるか、新しい命令が実行されえないとき、制御信号1111は ‘0’であり、レジスタ740は更新を中断し、トラッカーとリード・ポインタ631は変化しない状態に留まる。
よって、L1キャッシュ602はプロセッサ・コア601のための新しい命令を提供するのを中断する。
この時点で、レジスタ740は制御信号1111だけでなくプロセッサ・コア601から生成された信号1161、信号1161はTAKEN信号635が有効な信号であるか否かを表す、によっても制御される。
信号1161がTAKEN信号635が有効で、信号1111もまた有効であることを表すとき、レジスタ740が更新される。
もし分岐が取られない場合(TAKEN信号635は’0’)、セレクタ738はセレクタ1116の出力を選び、そしてオペレーションは非分岐命令を実行するためのオペレーションと同様である。
もし分岐が取られる場合(TAKEN信号635は’1’)、セレクタ738はバス1117を選び、分岐ターゲットアドレスをレジスタ740へ記憶する;リード・ポインタ631はトラック・テーブルの分岐ターゲットの対応するエントリとL1キャッシュ602の分岐ターゲット命令へポイントし、プロセッサ・コア601による実行のための命令を読み出す。
BN2アドレスはBN1アドレスへ変換されて、BN1アドレスはトラック・テーブルの前の間接分岐エントリの中へ書き戻される。
エントリはバス1117を経て読み出され、後続するオペレーションは前の実施形態のオペレーションと同様である。
トラッカーはBN1に沿って移動し、L1キャッシュ602を制御して、プロセッサ・コア601に送り返された実行結果にもとづいて、プロセッサ・コア601へ実行のために命令を供給する。
もし分岐が取られるならば、オペレーションは無条件分岐命令のオペレーションと同様である。
前実施形態と同様に、分岐ターゲットアドレスはアクティブ・リスト604とブロック・アドレス・マッピング・モジュール620へ送られ、マッチング操作を実施する。
後続オペレーションは前実施形態と同様である。
従って、プロセッサ・コア601がエントリ1182に対応する命令を実行した後、プロセッサ・コア601はエントリ1183に対応する命令を実行しない(エントリ1183に対応するトラック・ポイントはエンディング・トラック・ポイントであるかもしれないから、L1キャッシュ602に対応する命令が無い)。
そのかわり、プロセッサ・コア601は直接にエントリ1183に含まれる分岐ターゲット・アドレスに対応する命令を実行する。
もしエントリ1182に含まれる命令が無条件分岐命令であるならば、無条件分岐命令を実行した後、実行されるべき次命令はエントリ1182に含まれる分岐ターゲットによってポイントされる命令である。
エントリ1183は上記プロセスに影響を与えない。
もしエントリ1182に含まれる命令が条件付き分岐命令であるなら、条件付き分岐命令を実行した後、実行されるべき次命令はプロセッサ・コア601によって生成されるTAKEN信号635にもとづいて決定される。
もし分岐が取られた(TAKEN信号635が’1’)と判断された場合、セレクタ738はバス1117の分岐ターゲットを選ぶ。
TAKEN信号635が有効であることを示す信号1161は分岐ターゲットをレジスタ740へ記憶する操作を制御し、リード・ポインタ631は分岐ターゲットをポイントし、実行されるべき次命令はエントリ1182に含まれる分岐ターゲットアドレスによってポイントされる命令である。
もし分岐が取られなかった(TAKEN信号635が’0’)と判断された場合、セレクタ738はセレクタ1116によって出力されたバス1121の分岐ターゲットを選ぶ。
TAKEN信号635が有効であることを示す信号1161と制御信号1111は、エントリ1183からの無条件分岐ターゲットをレジスタ740へ記憶する操作を制御し、リード・ポインタ631は分岐ターゲットをポイントし、実行されるべき次命令はエントリ1183に含まれる無条件分岐ターゲットアドレスによってポイントされる命令である。
タイプデコーダ1152がバス1121から読み出されたエントリタイプをデコードし、アドレスがBN2アドレスであることを見いだすとき、バス1121から出力されるBN2はバス1117へ置かれBN1アドレスへ変換される。
BN1アドレスはエントリへ記憶され戻される。
例示目的のため、このトレースは図11Aに示されていない。
第1の方法:ただ1つのタイプの無条件分岐タイプがあり、つまり、本来の無条件分岐命令がプログラムに存在し、本実施形態に加えられたエンディング・トラック・ポイントにおける無条件ジャンプ操作は区別されない。
この方法を用いることによって、プログラムの本来の条件付き分岐命令はスキップされ、プロセッサ・コア601によって実行されない。
しかし、プログラム・フローは、トラック・テーブル610とトラッカーの制御の下、分岐命令のターゲット命令と後続命令を正しく実行することができる。
従って、無条件分岐命令を実行するクロック・サイクルは節約される。
しかし、プロセッサ・コア601は本来の条件付き分岐命令を実行しないから、プログラム・カウンタ(PC)値はエラーを持ちうる。
もし正確なPC値が維持される必要があるなら、補強が必要である。
従って、プロセッサ・コア601は命令を実行し続けることができる。
もしある時点でのPC値(例えば、プログラムをデバッグするとき)が取得される必要がある場合、トラック・テーブルの全ての行は、L1命令ブロックに対応するL2キャッシュ・ブロック・アドレスBN2XとL2キャッシュ・サブブロック・アドレスを記録する。
よって、BN2Xはアクティブ・リスト604から対応するタグを読み出すことができる。
タグはL2キャッシュ・ブロック・アドレス、サブブロック・アドレスそしてリード・ポインタ631のBNYとスプライスされる。
スプライス結果は実行される命令のPC値である。
エンディング・トラック・ポイント無条件分岐に対して、タイプ・デコーダ1152はエンディング・トラック・ポイントは命令に対応しないことを考慮し、セレクタ1116を制御してバス1121の分岐ターゲットを選ぶ。
バス1117の命令が実行されたなら、プログラム・フローはバス1121の分岐ターゲット・アドレスに直接ジャンプする。
もう1つのタイプはプログラムの無条件分岐タイプである。
タイプ・デコーダ1152がこのタイプを取得するとき、それは分岐として処理されない。
セレクタ1116はインクリメンタ736からの出力を選ぶように制御される。
バス1117のエントリの対応する命令が実行された後、実行されるべき次の命令は順番上次の命令で、つまりプログラムの前の無条件分岐命令である。
このようにして、プロセッサ・コアのPC値は常に正確に保たれる。
スキャン・コンバータ608が命令ブロックを検証するとき、もしスキャン・コンバータ608がL1命令ブロックの最後から2番目の命令が条件付き分岐命令でない、そして最後の命令は非分岐命令である、ことを見いだすなら、スキャン・コンバータ608はエンディング・トラック・ポイントを最後の命令に対応するトラック・ポイントへ併合する。
つまり、最後の命令の命令タイプは無条件分岐命令としてマークされ、次命令ブロックの最初の命令に対応するBN1もしくはBN2(もしBN2ならば、トラッカーはBN2をBN1へ変換する)は最後の命令に対応するトラック・ポイントの中にトラック・ポイントの内容として記憶される。
従って、トラッカーのリード・ポインタ631が命令に対応するトラック・ポイントにポイントするとき、命令がプロセッサ・コアによる実行のためにL1キャッシュ602から読み出される以外は、コントローラ1154はバス1117の命令タイプをデコードし、命令が無条件分岐命令であることを見いだす。
よって、セレクタ738はバス1117を選ぶように制御される。
次のクロック・サイクルにおいて、リード・ポインタ631は無条件分岐の分岐ターゲットBN1(つまり、次命令ブロックの最初の命令に対応するBN1)として更新される。
この時点で、プロセッサ・コア601は空命令を実行するためにクロック・サイクルを無駄にする必要がない。
一方で、スキャン・コンバータ608はエンディング・トラック・ポイントの内容を、最後の命令に対応するトラック・ポイントの後のトラック・ポイント(例えば最後の命令に対応するトラック・ポイントの右のトラック・ポイント)へ置く。
最後の命令が無条件分岐命令であるとき、コントローラ1154はセレクタ738を制御しバス1117の分岐ターゲットを選び、リード・ポインタ631を無条件分岐タイプに応じて置き、リード・ポインタ631がバス1117の分岐ターゲット・アドレスによって特定されたトラック・ポイントへ分岐するようにする。
それから、プログラムは分岐ターゲットへジャンプし、エンディング・トラック・ポイントは実行されない。
最後の命令が条件付き分岐命令であるとき、コントローラ1154はトラッカーを制御してバス1117の条件付き分岐タイプに応じて中断し、プロセッサ・コア601によって生成されるTAKEN信号635を待つ。
この時点で、タイプ・デコーダ1152はバス1121の命令タイプをデコードし、命令が無条件分岐命令でありセレクタ1116を制御してバス1121を選ぶことを決定する。
TAKEN信号635が分岐が取られることを示すとき、コントローラ1154はセレクタ738を制御しバス1117の条件付き分岐ターゲットを選び、条件付き分岐ターゲットをリード・ポインタ631へ置く。
TAKEN信号635が分岐が取られないことを示すとき、コントローラ1154はセレクタ738を選びセレクタ1116の出力を選び、バス1121の無条件分岐ターゲットをリード・ポインタ631へ置く。
L1キャッシュ602はリード・ポインタ631に応じてプロセッサ・コアによる実行のために命令を供給する。
エンディング・トラック・ポイントはトラックの固定された場所にある必要はない。
加えて、もしエンディング・トラック・ポイントがトラックの固定された場所にあるなら、最後の命令に辿り着いたかの判断はリード・ポインタ631のBN1Y値にもとづいて決定されうる。
第4の方法:トラック・テーブルにただ1つの種類の無条件分岐があるが、しかしトラッカーがトラック・テーブルの無条件分岐のタイプの位置にもとづいて、2つのタイプに分割する。
この方法によって、リード・ポインタ631のBN1Yはタイプ・デコーダ1152へ送られる;一方でバス1121の命令タイプはデコードされる必要がない。
BN1Yがトラックの最後のエントリへポイントするとき、タイプ・デコーダ1152はセレクタ1116を制御しバス1121の分岐ターゲットを選ぶ。
バス1117の命令が実行された後で、プログラム・フローは直接にバス1121の分岐ターゲット・アドレスへジャンプする。
BN1Yがトラックの最後のエントリ以外のエントリへポイントするとき、タイプ・デコーダ1152はセレクタ1116を制御しインクリメンタ1736の出力を選ぶ。
バス1117のエントリの対応する命令が実行された後で、次に実行されるべき命令は、順番上次の命令である。
このようにして、プロセッサ・コアのPC値は常に正確な値を維持する。
この方法は固定長命令に対しても適用できる。
図11Bは開示された実施形態に整合する、投機的実行をサポートするプロセスを示す。
図11Aに示されたトラッカーと比較して、セレクタ1162とレジスタ1164が図11Bに示されるトラッカーに追加される。
セレクタ1162とレジスタ1164は投機的実行によって選ばれない他の分岐を選び一時的に記憶するように設定され、そして投機が誤りであった時に他の分岐が用いられる。
投機的実行の方向は既存の静的/動的分岐予測テクニックによって決定されうる。
投機的実行の方向はまたトラック・テーブルの分岐命令に対応するエントリの予測フィールドによっても決定されうる。
バス1117の条件付き分岐タイプをデコードし、分岐が取られないことを示す予測値を得た後、コントローラ1154はセレクタ1162とレジスタ1164を制御しバス1117の分岐ターゲット・アドレスを選び、レジスタ1164に分岐ターゲット・アドレスを記憶する。
同時に、コントローラ1154はセレクタ738を制御しセレクタ1116の出力(分岐命令の後の順番上の次の命令)を選ぶ。
セレクタ1116の出力はそれからレジスタ740に記憶される。
従って、リード・ポインタ631はL1キャッシュ602を制御しプロセッサ・コア601の実行のために分岐命令の次命令を供給し、この命令をプロセッサ・コアへの投機的実行としてマークする。
リード・ポインタ631はトラック・テーブル610の分岐命令の後の最初のエントリへポイントし、よって分岐命令の後の最初のエントリはバス1117へ置かれる。
それから、コントローラ1154はトラッカーの後続の方向をバス1117の命令タイプにもとづいて決定し、プロセッサ・コアによる実行のために命令を供給し続ける。
これらの命令の全ては投機的実行としてマークされる。
バス1161がTAKEN信号635が有効であることを知らせるとき、コントローラ1154は予測された分岐方向とTAKEN信号635の分岐方向とを比較する。
もし比較結果が予測された分岐方向とTAKEN信号635の分岐方向が同じであることを表す場合、実行方向は元来の投機方向に従う。
もし比較結果が予測された分岐方向とTAKEN信号635の分岐方向が異なることを表す場合、コントローラ1154は’投機誤り’信号をプロセッサ・コア601へ送り、プロセッサ・コア601は投機的実行タグを持った全ての命令と、投機的実行タグを持った全ての命令の中間実行結果を全てのをクリアする。
同時に、コントローラ1154はセレクタ738を制御しレジスタ1164の出力を選び、よって投機的実行を伴わない分岐のアドレスがL1キャッシュ602を制御してプロセッサ・コア601へ命令を供給するのに用いられ、そしてプロセッサ・コア601は供給された命令の実行を続ける。
バス1117の条件付き分岐タイプをデコードし、分岐が取られることを示す予測値を得た後、コントローラ1154はセレクタ1162とレジスタ1164を制御して、セレクタ1116の出力(分岐命令の次の命令)を選び、セレクタ1116の出力をレジスタ1164へ記憶する。
同時に、コントローラ1154はセレクタ738を制御しバス1117の分岐ターゲットを選ぶ。
分岐ターゲット・アドレスはレジスタ740に記憶される。
従って、リード・ポインタ631はL1キャッシュ602を制御しプロセッサ・コア601の実行のために分岐命令の分岐ターゲット命令を供給し、この命令を投機的実行としてプロセッサ・コアへマークする。
リード・ポインタ631はまたトラック・テーブル610のバス1117の分岐ターゲット・アドレスによってポイントされたエントリへポイントし、エントリはバス1117に置かれる。
それから、コントローラ1154はトラッカーの後続の方向をバス1117の命令タイプにもとづいて決定し、プロセッサ・コア601による実行のために命令を供給し続ける。
これらの命令の全ては投機的実行としてマークされる。
バス1161がTAKEN信号635が有効であることを知らせるとき、コントローラ1154は予測された分岐方向とTAKEN信号635の分岐方向とを比較する。
もし比較結果が予測された分岐方向とTAKEN信号635の分岐方向が同じであることを示す場合、実行方向は元来の投機方向に従う。
もし比較結果が予測された分岐方向とTAKEN信号635の分岐方向が異なることを示す場合、コントローラ1154は’投機誤り’信号をプロセッサ・コア601へ送り、そしてプロセッサ・コアは投機的実行タグを持った全ての命令と、投機的実行タグを持った全ての命令の中間実行結果をクリアする。
同時に、コントローラ1154はセレクタ738を制御しレジスタ1164の出力を選び、投機的実行を伴わない分岐のアドレスがL1キャッシュ602を制御してプロセッサ・コア601へ命令を供給するために用いられ、そしてそれからプロセッサ・コア601は供給された命令を実行し続ける。
一般的に、変換モジュールはゲスト命令を記憶するキャッシュとプロセッサ・コアの間に在る。
プロセッサ・コアによって供給されたゲスト命令アドレスは、ゲスト命令を呼び出すためのキャッシュへのアドレス指定操作を実施するのに用いられる。
ゲスト命令は変換モジュールによってホスト命令へ変換され、ホスト命令がプロセッサ・コアによる実行のために供給される。
ゲスト命令の度重なる変換は電力消費を増やす。
加えて、長い遅延を伴った命令変換器はより深い命令バッファを命令実行のクリティカル・トレースにおいて必要とするかもしれない。
従って、プロセッサ・コアのパイプラインは画然と深くなり、よって分岐予測が失敗した時に、ハードウェア・コストとパフォーマンス・ロスを増やす。
しかし、一般的に、ホスト命令(通常、固定長命令)とゲスト命令(通常、可変長命令)は一対一の対応関係を持たず、よって分岐ターゲット命令のゲスト命令アドレスからホスト命令アドレスへの変換をする、そして正しいホスト命令を得るためのキャッシュでのアドレス指定操作を行なう、ための信頼性のある方法とシステムの欠如が問題となる。
よって、既存のプロセッサ・コアは同じ命令を繰り返し変換することに起因する、電力消費と性能のロスとコストを負うことになる。
これが命令変換モジュールがキャッシュとプロセッサ・コアの間に置かれ、ゲスト命令がL1命令キャッシュに記憶される理由である。
リアル・タイム・アドレス変換は、プログラム実行トレース上にヒットがあるもしくは循環コードが実行されるとき、トレース・キャッシュと命令循環バッファを用いることで回避できるものの、トレース・キャッシュは同じ命令を同時に異なるトレースにて記憶するかもしれず、 トレース・キャッシュの大いなる容量の無駄と低性能を結果する。
幾つかの特定の状況において、アドレス指定操作は特定の命令アドレスを用いてこれらのメモリ・デバイスのために実行されうる。
しかし、プロセッサ・コアはアドレス指定操作を任意の状況において実施することができない。
同じゲスト命令に対する変換プロセスは繰り返し実施され、もしくはゲスト命令はホスト命令へソフトウェア手法を用いて翻訳される。
加えて、既存の命令変換は1つもしくは幾つかのタイプの特定のゲスト命令セットを1つのホスト命令セットへプロセッサ・コアによる実行のために変換できるだけである。
アドレス・マッピング・モジュールはプロセッサ・コアによって生成されたゲスト命令アドレスのホスト命令アドレスへの変換を完了し、プロセッサ・コアは直接にキャッシュに記憶されたホスト命令のためのアドレス指定操作を実施できる。
プロセッサ・コアは繰り返して、ゲスト命令を読み出すためにゲスト命令を記憶しているキャッシュに対してアドレス指定操作を実施し、ゲスト命令をプロセッサ・コアによる実行のためにホスト命令に変換する、必要がない、
従って、L1キャッシュの同じゲスト命令に対して繰り返して変換を実施することが避けられる。
電力消費、クリティカル・トレースにおける長い遅延、そして追加のハードウェア・コストも避けることができる。
本開示に示された設定可能な命令変換モジュールは任意の不特定のゲスト命令セットを設定に応じてホスト命令セットへ変換することができる。
コンバータは固定されたコンバータもしくは設定可能なコンバータである。
プロセッサ・コアによって実行されうる命令セットに含まれる命令(つまり、ホスト命令セット)が実行されるべき任意の命令セット(つまり、ゲスト命令セット)に含まれる命令と一対一対応関係を持つとき、設定可能コンバータとプロセッサ・コアは恊働してゲスト命令をホスト命令へプロセッサ・コアによる実行のために変換する。
この時点で、ゲスト命令の分岐命令に対応する分岐ターゲット・アドレスが分岐命令に対応するホスト命令の分岐ターゲット・アドレスと同じである。
図12は開示された実施形態と整合する設定可能コンバータを含む例示的なプロセッサ・システムの回路図を示す。
図12に示されるように、ゲスト命令1205は設定可能コンバータによって変換され、プロセッサ・コアによる直接実行のためにメモリ1203に記憶される。
この時点で、命令メモリ1203に記憶される命令はホスト命令である。
設定可能コンバータ1202の機能と構造は図2に示されるコンバータ200の機能と構造と同じである。
ゲスト命令とホスト命令が一対一の対応関係を持つから、ゲスト命令アドレスはホスト命令アドレスと同じである。
プロセッサ・コア1201が分岐命令を実行するとき、もし分岐がとられないならば、分岐命令アドレスと’1’の合計が次命令のアドレスとして用いられる。
次命令のアドレスは命令メモリ1203へ送られ、プロセッサ・コアによる実行のためにホスト命令を読み出す。
もし分岐が取られるなら、ゲスト命令の分岐オフセットを分岐命令アドレスに加えることで生成されたゲスト命令の分岐ターゲット・アドレスがホスト命令の分岐ターゲット・アドレスと同じであるから、ゲスト命令の分岐ターゲット・アドレスは直接に用いられて、命令メモリ1203のためのアドレス指定操作を実施する。
それから、分岐ターゲット・ホスト命令は命令メモリ1203から読み出される。
ゲスト命令アドレスをホスト命令アドレスに変換する必要はない。
非分岐命令が実行されるとき、次命令のアドレスを生成する方法は、分岐が取られない場合の方法と同じである。
図13Aは開示された実施形態と整合する、例示的な設定可能コンバータのブロック・ダイアグラムを示す。
図13Aに示されるように、メモリ201はホスト命令セットとゲスト命令セットの変換ルールを記憶する。
抽出器1302(つまり、図3に示されるオペレーション・コード抽出器211、213、215)はバスを経て送られたゲスト命令1205からオペレーション・コードをアドレス指定アドレスとして抽出する。
アドレス指定アドレスはバス1307を経てメモリ201へ送られ、アドレス指定操作を実施し、ゲスト命令に対応する変換ルールを読み出す。
変換ルールの中のマスクとシフト制御信号はバス1308を経てシフトモジュール1303(つまり、図2に示される抽出器221、223、225、227)を制御する。
シフトモジュール1303はゲスト命令の命令フィールドを抽出し、マスクし、ホスト命令フォーマットによって特定された位置へシフトすることができる。
ホスト命令のオペレーション・コードはバス1309を経て送り出され、ホスト命令フォーマットによって特定された位置へシフトされる。
シフトされマスクされた命令はマージ・モジュール1304(図2に示される命令スプライサと同様)のホスト命令へ融合され、バス1306を経てホスト命令を出力する。
従って、設定可能コンバータはゲスト命令をホスト命令へ変換する操作を完了する。
メモリ1301の変換ルールを変更することによって、命令コンバータとホスト命令を実行するプロセッサ・コアの組み合わせは異なるゲスト命令セットを実行することができる。
追加されたレジスタは、ゲスト命令が固定長か可変長かについての情報を記憶するように設定される。
レジスタが固定長(レジスタは’0’に設定される)として設定されるとき、それはゲスト命令ブロックのゲスト命令の境界が揃うことを示す。
従って、変換プロセスはゲスト命令ブロックの開始アドレスから開始されうる。
レジスタが可変長(レジスタは’1’に設定される)として設定されるとき、それはゲスト命令ブロックのゲスト命令の境界が必ずしも揃わないことを示す。
このとき、ターゲット命令から始まってゲスト命令ブロックの最後の変換されていない命令までのみが変換される。
ゲスト命令のオペレーション・コードの実行を制御するレジスタ212、レジスタ214、レジスタ216(図2に示される)の他に、追加のレジスタが、スレッドに対応する命令セットの変換ルールを記憶するメモリ201の基底アドレスを記憶するために加えられる。
上記レジスタは複数のレジスタ・グループとして追加されうる。
各レジスタ・グループは1つの種類のゲスト命令セットに対応し、セレクタによって選ばれる。
ストレージ・フィールドはプロセッサのメモリ・マネージメント・ユニット(MMU)のスレッド番号メモリ(通常TLB)の全てのスレッドに対応して追加され、ストレージ・フィールドは複数のレジスタ選択信号を記憶し選ぶために用いられる。
図13Bは開示された実施形態と整合する、設定可能コンバータの例示的なメモリの回路図を示す。
図13Bに示されるように、レジスタ・セット1311はP命令セットのオペレーション・コードの抽出位置と、メモリ201の対応する命令変換ルールの基底アドレス’m’を記憶する。
レジスタ・セット1313はQ命令セットのオペレーション・コードの抽出位置と、メモリ201の対応する命令変換ルールの基底アドレス’n’を記憶する。
このとき、オペレーション・コード抽出器1302(つまり、図3に示される抽出器211、213、215)は、レジスタ・セット1311の制御の下、変換されるゲスト命令のオペレーション・コードを抽出する。
抽出されたオペレーション・コードとレジスタ・セット1311からの基底アドレス’m’は加法器1318によって一緒に加算され結果を得る。
結果は、変換ルール・メモリ201のためのアドレス指定操作を実施するアドレスとして用いられ、命令コンバータのオペレーションを制御し、P命令セットの命令をホスト命令へ変換し、図12に示される命令メモリ1203にホスト命令を記憶する。
スレッドKのゲスト命令が命令コンバータによって変換されるとき、MMUのKスレッドのメモリの制御信号316はセレクタ315を制御しレジスタ・セット1313の出力を選ぶ。
このとき、オペレーション・コード抽出器1302は、レジスタ・セット1313の制御の下、変換されるゲスト命令のオペレーション・コードを抽出する。
抽出されたオペレーション・コードとレジスタ・セット1313からの基底アドレス’n’は加法器1318によって一緒に加算され、結果を得る。
結果は、変換ルール・メモリ202のためのアドレス指定操作を実施するアドレスとして用いられ、命令コンバータのオペレーションを制御し、Q命令セットの命令をホスト命令へ変換し、図12に示される命令メモリ1203に記憶する。
プロセッサ・コアが現行スレッドをJスレッドからKスレッドへスイッチするとき、それは実際にはP命令セットの命令の実行からQ命令セットの命令の実行へのスイッチである。
このようにして、ゲスト命令セットの複数のゲスト命令を含むプログラムは仮想マシンにて実行されうる。
もちろん、同じ機能は複数の命令コンバータを用いて実現されることが可能で、各命令コンバータは1つのゲスト命令セットを変換するように設定される。
つまり、これらのフィールドは独立である。
例えば、いくつかの命令セットにおいて、オペレーション・コード・フィールドに加えて、命令のいくつかのフィールドは特定のメモリもしくはレジスタのためのアドレス指定操作を実施するのに用いられる。
これらのフィールドもまた、ホスト命令の要求を満たすために、ゲスト命令の中のアドレスをシフトする以外にも、変換ルールによってマップされる必要がある。
複数の変換ルール・メモリと複数の直行する命令フィールドに対応するロジックを用いて、変換ルール・メモリのエントリの総数(行数)は手頃な数に制御されうる。
図13Aと比べて、変換ルール・メモリ1321とその特定の抽出器1322(機能は抽出器1302と同様)そしてシフト・ロジック1323(機能はシフト・モジュール1303と同様)が図13Cに追加される。
図13Bに示されたレジスタ・セット1311とレジスタ・セット1313に類似したレジスタ・セット(図13Cには示されていない)もまたメモリ1321と対応するロジックを制御するために追加される。
メモリ1321とシフトとマスク・ロジック1323の出力はマージ・モジュール1304へ送られ、メモリ201とシフト・モジュール1303の出力と一緒にされる。
2セットのメモリと対応するロジックは一緒に1つのコンピュータの命令セットを処理する;そして各セットはゲスト命令の幾つかのフィールドの変換を担い、出力はマージ・モジュール1304にてホスト命令へ組み合わされる。
2セットのメモリと対応するロジックは独立に命令セットを処理でき、各セットは独立にゲスト命令をホスト命令へ変換し、図13Bに示された同様の機能を実現する。
従って、書き込み可能レジスタが追加されうる。
新レジスタのステータスにもとづいて、命令コンバータが協調モードか独立モードかが決定される。
マージ・モジュール1304はまたホスト命令の命令メモリ1203への書き込みを制御するための書き込みアドレスを生成する。
もしホスト命令が固定長なら、1つの命令は命令メモリ1203の各ペアに書き込まれ、固定長(例えば、4バイト)がL1キャッシュの書き込みアドレスに追加される。
もしホスト命令が可変長ならば、メモリ1301の命令に対応する変換ルールは命令の長さを記録し、1つの命令が命令メモリ1203の各ペアに書き込まれ、そしてメモリ1301によって出力された命令の長さが、L1キャッシュの書き込みアドレスへ追加され、次命令の開始アドレスを取得する。
さらに、1つの命令ブロックの複数のホスト命令はバッファーに異なる機会に記憶され、ホスト命令ブロック全体が命令メモリ1203へ書き込まれる。
さらに、他のモジュールも、図7Aと図7Bに示されるスキャン・コンバータのスキャン機能を担う部分のように、上記マッピング関係を生成する。
しかし、双方の命令セットの命令が一対一対応を持たないとき、1つのゲスト命令は複数のホスト命令へ、もしくは複数のゲスト命令が1つのホスト命令へ変換されうる;もしくはゲスト命令とホスト命令の少なくとも1つが可変長命令であれば、ゲスト命令の分岐ターゲット・アドレスとホスト命令の分岐ターゲット・アドレスは1対1対応しないかもしれない。
このとき、命令コンバータと組み合わせたアドレス・マッピング・モジュールが命令セットの変換と命令アドレスのマッピングを実現できる。
図14に示されるように、ゲスト命令はコンバータ1202によって変換され、プロセッサ・コア1201での実行のために命令メモリ1203へ記憶される。
つまり、メモリ1203に記憶された命令はホスト命令で、メモリ1203はホスト命令アドレスにもとづいたアドレス指定操作を実施しホスト命令を出力する。
変換プロセス中、コンバータ1202はまたゲスト命令と対応するホスト命令の間の対応関係を生成し、生成された対応関係はアドレス・マッピング・モジュール1404へ記憶される。
プロセッサ・コア1201が命令メモリ1203のホスト命令を命令の順番に沿って実行するとき、プログラム・カウンタ(PC)は’1’を毎回追加し、対応するホスト命令アドレスは’1’を追加され、命令1203のためにアドレス指定操作を実施し次のホスト命令を読み出す。
それから、ホスト命令アドレスは命令メモリ1203へ送られ、アドレス指定操作を実施し、対応するホスト命令(つまり、分岐ターゲット・アドレス)を読み出す。
もしアドレス・マッピング・モジュール1404がゲスト命令アドレスに対応するマッピング関係を記憶しないならば、それはゲスト命令がホスト命令へ変換されていないことを示す。
このとき、コンバータ1202は少なくとも1つのゲスト命令をホスト命令へ変換し、ホスト命令を命令メモリ1203へ記憶する。
対応するマッピング関係はアドレス・マッピング・モジュール1404に記憶され、ゲスト命令アドレスはホスト命令アドレスへ変換され、ホスト命令アドレスが出力される。
なお、コンバータ1202は特定のゲスト命令をホスト命令へ変換する固定コンバータでありうる。
コンバータはまた図2、図3、図4、図5、図13Aそして図13Bに示された設定可能命令コンバータでもありうる。
マッピング・テーブルはゲスト命令アドレスによってアドレス指定され、そのエントリは対応するホスト命令のアドレスを記憶する。
これにもとづいて、マッピング・テーブルは以下のように実装される。
各エントリは、エントリに対応するゲスト命令に対応するホスト命令を含むホスト命令ブロックのブロック・アドレス(つまり、命令メモリ1203のホスト命令のブロック番号)と、ホスト命令ブロック内のホスト命令のブロック・オフセット・アドレスを記憶する。
よって、ゲスト命令アドレスが変換されるとき、アドレス指定操作が、ゲスト命令アドレスにもとづいて、マッピング・テーブルのエントリのために実施され、ホスト命令アドレスと対応するエントリのブロック・オフセット・アドレスを読み出し、アドレス変換を完了する。
例えば、ゲスト命令がバイトによってアドレス指定されるとき、ゲスト命令は可変長であるから、各ゲスト命令の開始アドレスにおけるバイトのみが、ゲスト命令のブロック・オフセットと対応するホスト命令のブロック・オフセット・アドレスを記憶するためにエントリを占める;一方、ゲスト命令の非開始アドレスにおける他のバイトはエントリを占めない。
マッピング・テーブルの各行はゲスト命令ブロックに対応し、ゲスト命令ブロックのアドレスを用いてアドレス指定される。
従って、ゲスト命令アドレスが変換されるとき、アドレス指定操作はゲスト命令のブロック・アドレスにもとづいてマッピング・テーブルの行に対して実施され、行全体の内容を読み出す。
それから、ゲスト命令のブロック・オフセット・アドレスは行の全てのエントリのゲスト命令のブロック・オフセット・アドレスとマッチングされる。
照合一致したエントリに記憶されるホスト命令は選ばれて出力され、アドレス変換が完了する。
第1の部分のゲスト命令の開始アドレス(つまり、開始バイト)に対応するデータは’1’にセットされ、他は’0’にセットされる。
特定のフォーマットは図8Bを参照されたい。
ゲスト命令が変換されるとき、アドレス指定操作がゲスト命令のブロック・オフセット・アドレスにもとづいてマッピング・テーブルの行に対して実施され、行全体(2つの部分を含む)の内容を読み出す。
それから、ゲスト命令のブロック・オフセット・アドレスにもとづいて、第1の部分からブロック・オフセット・アドレスのバイトに対応するデータまでの’1’の数が数えられる(つまり、各’1’毎に総数が1増える)。
さらに、第2部分の’1’の数にもとづいて、第2部分の各’1’毎に1が総数から、総数がゼロになるまで、減じられる。
このとき、第2部分のカウント位置はホスト命令のブロック・オフセット・アドレスに対応し、アドレス変換を完了する。
図8Cの構成要素は上記マッピング操作を効率良く完了できる。
例えば、ゲスト命令を記憶する1つのL2キャッシュ・ブロックは2つのL2キャッシュ・サブ・ブロックへ分割され、各サブ・ブロックはホスト命令を持つ1つのL1キャッシュ・ブロックに対応する。
ゆえにゲスト命令とホスト命令のマッピング操作はブロック・アドレスのマッピング操作と(対応関係があるから、マッピング操作を実現するのは簡単である)、ブロック・オフセット・アドレスのマッピング操作へ分解され、マッピング操作を簡潔にする。
従って、L1キャッシュ・ブロックの全てのエントリが有効なホスト命令を含むわけではない。
L1命令ブロックのL1命令は、最小ブロック・オフセット・アドレス(最小ブロック・オフセット・アドレスは一般的に’0’である)から始まって昇順に配置される。
従って、対応するエントリ命令ブロックはまた最大オフセット・アドレスを持つ命令のオフセット・アドレスを記憶する必要があり、システムに後続の次命令のL1キャッシュ・ブロック・アドレスが次のサイクルで供給される必要があることを知らせる。
加えて、ブロック・オフセット・マッパーが、L2キャッシュ・サブ・ブロックと対応するL1キャッシュ・ブロックの間のマッピング関係にもとづいて、分岐ターゲットのブロック・オフセット・マッピングを供給するために必要とされる。
図15に示されるように、コンバータ1202、命令メモリ1203そしてプロセッサ・コア1201は図12、図14に示される対応する構成要素と同等である。
また、アドレス・マッピング・モジュールの特定の実装方法も提供されている。
ある1つの実施形態において、もし命令メモリ1203にミスがある場合、対応するゲスト命令は外部メモリへ送られ、対応するゲスト命令ブロックを得る。
得られたゲスト命令ブロックは命令コンバータ1202によって変換され、変換された命令ブロックは命令メモリ1203へ充填される。
以下の説明においては、命令メモリにおいて常にヒットがあるものと仮定する。
タグメモリ1505の行、ブロック・オフセット・マッパー1504、エンディング・フラグ・メモリ1506は命令メモリ1203のホスト命令ブロックに対応する。
エンディング・フラグ・メモリ1506の各行は、命令メモリ1203のホスト命令ブロックに対応する最後のホスト命令のブロック・オフセット・アドレスを記憶する。
プロセッサ・コア1201がホスト命令を読むとき、エンディング・フラグ・メモリ1506はホスト命令がホスト命令ブロックの最後の命令であるかをチェックする。
もしホスト命令が現行ホスト命令ブロックの最後の命令でない場合、次ホスト命令のブロック・オフセット・アドレスはホスト命令のオフセット・アドレスに1足したものである;そうでなければ、次ホスト命令は次ホスト命令ブロックの最初のホスト命令である。
従って、タグ・マッチングを通して、ゲスト命令ブロックに対応する命令メモリ1203にホスト命令ブロックが占める位置、ブロック・オフセット・マッパー1504の同じ行における該当するマッピング関係、そしてエンディング・フラグ・メモリ1506の命令ブロックの最後のホスト命令の位置情報が見いだされる。
キャッシュ構造と同様に、メモリの異なる形式に対して、タグメモリ1505と命令メモリ1203は異なる構造を持つ。
インデックス番号にもとづいて、アドレス指定操作がタグメモリ1505の行に対して実施され、対応する行の内容を読み出す。
行の内容はブロック・アドレスのタグと比較される。
もし結果が等しければ、それはマッチングが成功したことを示す;そうでなければ、マッチングは不成功である。
マッチングが不成功のとき、ゲスト命令アドレスは下位命令メモリから命令コンバータ1202を経て対応するゲスト命令ブロックを得るために用いられ、対応するゲスト命令ブロックはホスト命令ブロックへ変換される。
ホスト命令ブロックはキャッシュ交換ポリシーを用いて命令メモリ1203へ書き込まれる。
ゲスト命令のタグはタグメモリ1505の同じ行へ書き込まれる。
命令コンバータ1202によって生成されたブロック・オフセット・マッピング関係はブロック・オフセット・マッパー1504へ記憶され、命令コンバータ1202によって生成された命令ブロックの最後の命令のブロック・オフセットはエンディング・フラグ・メモリ1506のメモリの同じ行に記憶される。
特定のマッチング方法は適切な組織構造におけるマッチング方法と同じであり、ここでは繰り返さない。
なお、記述の簡便のため、直接マッピング構造が例示目的のために用いられ、タグ・マッチングは成功と仮定される。
命令アドレスがバス1508を経て出力され、命令メモリ1203を制御し、プロセッサ・コア1201での実行のために命令を読み出すとき、バス1508のブロック・アドレスもまたエンディング・フラグ・メモリ1506へ送られ、アドレス指定操作を実施し、行のエンディング・アドレスを読み出す。
エンディング・アドレスはバス1508のホスト命令のブロック・オフセット・アドレスとマッチングされ、ホスト命令がホスト命令ブロックの最後の命令であるかを検査する。
もしホスト命令がホスト命令ブロックの最後の命令であるなら、エンディング・フラグ・メモリによって出力された信号1507はプロセッサ・コア1201を制御し、次クロック・サイクルの次命令ブロックのゲスト命令ブロック・アドレス(現行命令ブロック・アドレスに’1’を加えて得られる)を出力し、そして’0’がホスト命令のブロック・オフセット・アドレスとされる。
命令アドレスの組み合わせはバス1508に置かれる。
このとき、信号1507はまたバス1508の命令ブロック・アドレスをタグメモリ1505へ送り、マッチング操作を実施するよう制御する。
もしマッチングが成功であれば、バス1508のアドレスは次命令の正しいアドレスである。
実行された命令が非分岐命令であるとき、分岐決定信号1509はセレクタ1510を制御し、バス1508のブロック・オフセット・アドレスを選び、命令メモリ1203のためにアドレス指定操作を実施し、プロセッサ・コア1201における実行のために次サイクルのホスト命令を読み出す。
命令メモリ1203のために用いられるブロック・アドレスは常にバス1508からである。
もし分岐決定の結果が’分岐が取られない’であれば、次サイクルで生成されたアドレスは上記と同じである。
分岐決定信号1509はセレクタ1510を制御しバス1508のアドレスを選ぶ。
もし分岐決定の結果が’分岐が取られる’であれば、分岐命令のゲスト命令アドレスと分岐命令に含まれる分岐オフセットは一緒に加算され、分岐ターゲットのゲスト命令アドレスを得る。
得られた分岐ターゲットのゲスト命令アドレスはバス1508を経て次サイクルにおいて送り出される。
記憶されるアドレス数を減らすために、実際には、プロセッサ・コアは分岐命令(もしくは他の命令)のホスト命令アドレスを記録するのみである。
図8Cに示されるマッピング構成要素は、図8Bに示されるマッピング関係を用いた逆演算を実施するために用いられる。
つまり、ホスト命令アドレスがデコーダ805へ送られ、ホスト命令マッピング関係がマスク・ユニット807へインプットとして送られ、ゲスト命令のマッピングがアレイ803を制御するのに用いられ、よってデバイスの出力はゲスト命令アドレスである。
命令が変換されるとき、ゲスト分岐命令のブロック・オフセットと分岐命令の分岐オフセットは一緒に加算され合計を得る。
合計はホスト分岐命令に分岐オフセットとして記録される。
従って、プロセッサ・コア1201が分岐命令を実行するとき、正しいゲスト分岐ターゲット・アドレスが、分岐命令のホスト命令ブロック・オフセットがゲスト命令ブロック・オフセットへマップされる操作を経ずに、命令ブロック・アドレス(ブロック・オフセットは’0’)と分岐命令に記録された正しい分岐オフセットを加算することによって得られる。
それから、バス1508のゲスト命令ブロック・オフセットはホスト命令ブロック・オフセット1512へ、行のマッピング関係にもとづいて、マップされる。
分岐決定信号1509はセレクタ1510を制御しホスト命令ブロック・オフセット1512をブロック・オフセットとして選ぶ。
ホスト命令ブロック・オフセット1512は命令メモリ1203へ送られる。
バス1508のブロック・アドレスはまた命令メモリ1203へ送られる。
もしタグメモリ1505のマッチングが成功であれば、分岐ターゲット命令はプロセッサ・コアでの実行のためにアドレスにもとづいて取得される。
ブロック・アドレスのインデックス部分は全てのメモリ、例えばタグメモリ1505と命令メモリ1203、による行アドレス指定に用いられる。
バス1508の次命令のブロック・オフセット・アドレスは命令タイプにもとづいてゲスト命令アドレスもしくはホスト命令アドレスである。
もし現行命令のタイプが非分岐命令もしくは分岐を取らない分岐命令であるなら、そして命令がホスト命令ブロックの最後の命令でないならば、次命令のブロック・オフセット・アドレスはホスト命令フォーマット(現行命令アドレスは’1’追加され、現行ホスト命令の次ホスト命令へポイントしている)である。
もし現行命令のタイプが非分岐命令もしくは分岐を取らない分岐命令であり、そして命令がホスト命令ブロックの最後の命令であるなら、次命令のブロック・オフセット・アドレス’0’はゲスト命令フォーマットもしくはホスト命令フォーマットである。
[00346] もし現行命令のタイプが分岐を取る分岐命令であれば、次命令の分岐オフセット・アドレスがゲスト命令フォーマットであり、そしてブロック・オフセット・アドレスはホスト命令のブロック・オフセット・アドレスへブロック・オフセット・マッパー1504によってマップされる必要がある。
それから、得られたホスト命令のブロック・オフセット・アドレスは命令メモリ1203から命令を読み出すのに用いられる。
もしゲスト命令のインデックス部分がホスト命令アドレスのブロック・アドレスとして用いられるならば、アドレス指定操作がホスト命令アドレスを用いて命令メモリ1203にていつでも実施される。
つまり、仮想マシンのアドレス・マッピング・モジュールは、ゲスト命令コンパイラによって生成されたゲスト命令アドレスをホスト命令アドレスへ直接マップし、プロセッサ・コアによる実行のためのホスト命令を記憶する命令メモリへアクセスする。
もしくは、ホスト命令アドレスのブロック・アドレスはゲスト命令アドレス(タグ部分とインデックス部分を含む)に等しいブロック・アドレスとして用いられる。
それはまた同じ命令を繰り返し変換することによる電力消費を避けることができる(既存のハードウェア仮想マシンは、ゲスト命令を記憶する命令メモリのためのアドレス指定操作を実施するためにゲスト命令アドレスを使う必要があり、それからゲスト命令は読み出されて、プロセッサ・コアによる実行のために、コンバータによってホスト命令へ変換される)。
なお、仮想マシンの技術的特徴は、ゲスト命令が最初にコンバータによって変換され、それから命令キャッシュに記憶されるという点である。
従って、命令キャッシュに記憶された命令はホスト命令であり、ホスト命令は直接に命令変換無しに実行される。
図16は開示された実施形態と整合する例示的な、分岐ターゲット・テーブルを含むプロセッサ・システムの回路図を示す。
図16に示されるように、設定可能コンバータ1202、命令メモリ1203、プロセッサ・コア1201、タグメモリ1505、ブロック・オフセット・マッパー1504、エンディング・フラグ・メモリ1506は図15に示される該当する構成要素と同様である。
違いは分岐ターゲット・バッファ(BTB)1607が追加され、そしてセレクタ1608の接続は図15に示されたセレクタ1510の接続と異なる点である。
なお、分岐ターゲット・バッファ1607はホスト命令アドレスの形式を用いて記録された分岐ターゲット履歴情報を記憶する。
つまり、分岐ターゲット・テーブルは分岐命令のホスト命令アドレス、分岐ターゲットのホスト命令アドレス、そして前に分岐命令を実行したときに分岐が取られたかに関する予測情報を記憶する。
分岐ターゲット・バッファ1607の行は他のメモリの行に対応しないかもしれない。
分岐ターゲット・バッファ1607は分岐予測信号1511を出力し、セレクタ1608を制御し、バス1508もしくは分岐ターゲット・バッファ1607からの命令アドレスを選ぶ。
分岐ターゲットのホスト命令アドレスと、マッチングが成功したホスト命令に含まれる予測情報が出力される。
現行命令が非分岐命令である、もしくは現行命令が分岐を取らない分岐命令であるとき、次のサイクルにおいて、分岐予測信号1511はセレクタ1608を制御し、バス1508の命令アドレスを選び、命令メモリ1203へアクセスする。
オペレーションは図15に示されたオペレーションと同様で、ここでは繰り返されない。
現行命令が分岐命令で分岐予測が分岐が取られることを表しているとき、分岐予測選択信号1511はセレクタ1608を制御し、分岐ターゲット・バッファ1607によって出力されたホスト命令分岐ターゲット・アドレスを選び、命令メモリ1203へアクセスする。
もし分岐予測が’分岐が取られる’ことを表すなら(図15に示された実施形態と同様)、プロセッサ・コア1201はゲスト命令アドレスを生成し、生成されたゲスト命令アドレスをバス1508を経て送り出す。
ゲスト命令アドレスをマッチングすることによって得られたタグメモリ1505の命令ブロック・アドレスとブロック・オフセット・マッパー1504のマッチング操作によって得られたホスト命令のブロック・オフセット1512は共に、ホスト命令分岐ターゲット・アドレスとして用いられ、分岐予測値が分岐ターゲット・バッファ1607の直近に割り当てられたエントリの該当するフィールドに記憶される。
ホスト命令分岐ターゲット・アドレスは分岐ターゲット・バッファ1607によってバイパスされ、セレクタ1608を経て命令メモリ1203にアクセスする。
このとき、バス1508の命令アドレスは、図15に示された実施形態において同じ状況下で生成された命令アドレスと同じであり、ここでは繰り返されない。
分岐命令が実行され、分岐予測が誤りであることが決定したとき、プロセッサ・コア1201は誤った予測に沿って実行された命令の中間結果を削除する。
それから、プロセッサ・コア1201は正しい分岐を実行し、分岐ターゲット・バッファ1607に記憶された分岐予測を更新する。
図17に示されるように。コンバータ1202、命令メモリ1203、プロセッサ・コア1721、タグメモリ1505、ブロック・オフセット・マッパー1504、エンディング・フラッグ・メモリ1506、分岐ターゲット・バッファ1607は図16の対応する構成部分と同等である。
違いは図17に示されたプロセッサ・システムはまた次ブロック・アドレス・メモリ1709、セレクタ1711、ORロジック1707とトラッカーを持つ点である。
ホスト命令アドレスはトラッカーを経て生成され、プロセッサ・コア1701はゲスト命令アドレスを出力する必要があるだけである。
図18Aに示されるように、次ブロック・アドレス・メモリ1709の各行は2つの部分を含む:最初の部分1801は行に対応するホスト命令ブロックの前のホスト命令ブロックのXアドレスを記憶する;第2部分1802は行に対応するホスト命令ブロックの次ホスト命令ブロックのXアドレスを記憶する。
よって、現行ホスト命令ブロックのブロック・アドレス(例えば、トラッカーによって出力されたXアドレス)を用いることによって、次ブロック・アドレス・メモリ1709のアドレス指定操作を実施し、前ホスト命令ブロックの該当するXアドレスと次ホスト命令ブロックの該当するXアドレスが読み出される。
セレクタ1711は、次ブロック・アドレス・メモリ1709によって出力された次ホスト命令ブロックのXアドレスとYアドレス’0’によって構成された次ホスト命令ブロックの最初のホスト命令のアドレスと、分岐が取られたかを示すTAKEN信号1713にもとづいて分岐ターゲット・バッファ1607によって出力された分岐ターゲット・ホスト命令アドレスを選び、選ばれたアドレスをセレクタ1705へ送る。
現行ホスト命令がホスト命令ブロックの最後の命令であるとき、もしくは分岐が取られるとき、ORロジック1707はセレクタ1705を制御しセレクタ1711からインプットを選ぶ。
レジスタ1701は、ブロック・アドレス(Xアドレス)とホスト命令のブロック・オフセット(Yアドレス)によって構成された現行ホスト命令アドレス1723を記憶し出力する。
現行ホスト命令アドレス1723は命令メモリ1203のアドレス指定操作を実施するために用いられ、命令メモリ1203の1つの行のホスト命令を読み出す。
ホスト命令はそれからプロセッサ・コア1721へデコードのために送られる。
同時に、次ブロック・アドレス・メモリ1709とエンディング・フラッグ・メモリ1506の該当する行はアクセスされ、分岐ターゲット・バッファ(BTB)1607へ送られ、マッチング操作を実施する。
現行ホスト命令アドレス1723のXアドレスはエンディング・フラッグ・メモリ1506におけるアドレス指定操作を実施するのに用いられ、該当する行の内容を読み出す。
内容は現行ホスト命令アドレス1723のYアドレスとマッチングされ、命令がホスト命令ブロックの最後の命令か否かを検証する。
もし命令がホスト命令ブロックの最後の命令でなく、プロセッサ・コア1721のデコード結果は命令が分岐命令でないことを表すなら、ORロジック1707はセレクタ1705を制御し、レジスタ1701によって出力されたXアドレスとインクリメンタ1703によって出力された’1’を追加されたYアドレスを選ぶ。
Xアドレスと’1’追加されたYアドレスはレジスタ1701に次クロック・サイクルにおける現行ホスト命令アドレスとして記憶される。
特に、もしTAKEN信号1713が分岐が取られないことを示すなら、セレクタ1711は次ブロック・アドレス・メモリ1709の次ホスト命令ブロックの最初のホスト命令のアドレス(現行ホスト命令アドレス1723のアドレス指定において提供される)を選ぶ;そして最初のホスト命令のアドレスはセレクタ1705によって選ばれ、レジスタ1701へ記憶される。
もしTAKEN信号1713が分岐が取られることを示すなら、セレクタ1711は、分岐ターゲット・バッファ1607の現行ホスト命令アドレス1723のマッチング操作によって得られた分岐ターゲット・ホスト命令アドレスを選ぶ;そして分岐ターゲット
ホスト命令アドレスはそれからセレクタ1705によって選ばれ、レジスタ1701へ記憶される。
プロセッサ・コア1721によって生成されたTAKEN信号1713は、分岐ターゲット・バッファ1607に記憶された分岐予測値と交換され、セレクタ1711とセレクタ1705を制御する。
この方法は、分岐予測が正しいか否かを検証し、そして予測が誤っているとき分岐予測を修正する、メカニズムを必要とする。
プロセッサ・コア1721は、分岐決定が取られ現行ホスト命令アドレス1723が分岐ターゲット・バッファ1607の内容とマッチしないとき、もしくはエンディング命令が決定され、次ブロック・アドレス・メモリ1709をアドレス指定するとき無効エントリが見つかった時に限って、ゲスト命令アドレス1708を次サイクルのアドレスとして供給する必要がある。
ゲスト命令の分岐ターゲット・アドレス1708はタグメモリ1505へ送られ、マッチング操作を行い、ゲスト命令の分岐ターゲット・アドレス1708もまたブロック・オフセット・マッパー1504へ送られ、マッピング操作を実施する。
マッチングとマッピング操作によって得られたホスト命令の分岐ターゲット・アドレスは、図16に示された方法を用いて分岐ターゲット・バッファ1607のエントリへ記憶され、そしてホスト命令の分岐ターゲット・アドレスは現行ホスト命令アドレス1723と同様にレジスタ1701に記憶される。
次ブロック・アドレス・メモリ1709のアドレス指定操作を実施するときにもし無効エントリが見いだされた場合、プロセッサ・コア1721は図16に示された方法を用いてゲスト命令の次ブロック・アドレス1708を計算する。
ゲスト命令の次ブロック・アドレス1708はタグメモリ1505へ送られ、マッチング操作を実施する。
マッチング操作によって得られたホスト命令の次ブロック・アドレスは無効エントリのフィールド1802へ記憶される。
現行命令ブロックのブロック・アドレスは、次ブロック・アドレス・メモリ1709の中のマッチングによって得られたホスト命令の次ブロック・アドレスによってポイントされている行に対応する行のフィールド1801に記憶される。
もしホスト命令ブロックが命令メモリ1203にて交換されるなら、アドレス指定操作がホスト命令ブロックのXアドレスにもとづいて次ブロック・アドレス・メモリ1709のために実施され、次ブロック・アドレス・メモリ1709に記憶された前ホスト命令ブロックのフィールド1801のXアドレスを読み出す。
それから、アドレス指定操作がフィールド1801のXアドレスにもとづいて次ブロック・アドレス・メモリ1709のために実施され、対応する行を見いだす。
行に記憶された次ホスト命令ブロック(交換されたホスト命令ブロック)のフィールド1802のXアドレスは無効にセットされ、よって交換後のアドレス関係を表す。
もし命令メモリが連想モードを用いて組織されているなら、1つの命令ブロックの次命令ブロックの行アドレスは現行命令ブロックの行アドレスに’1’を加えたものである。
フィールド1801とフィールド1802はウェイ数を記録しこの機能を実現できる。
図19は開示された実施形態と整合する、2レベルの命令メモリを含むプロセッサ・システムの回路図を示す。
図19に示されるように、コンバータ1202、命令メモリ1203、プロセッサ・コア1201、ブロック・オフセット・マッパー1504、エンディング・フラッグ・メモリ1506、分岐ターゲット・バッファ1607、次ブロック・アドレス・メモリ、セレクタ1711、ORロジック1707、トラッカーは図16の対応する構成部分と同じである。
違いは、命令メモリ1203、ブロック・オフセット・マッパー1504、次ブロック・アドレス・メモリ1709、エンディング・フラッグ・メモリ1506、分岐ターゲット・バッファ1607が一緒にL1命令メモリを構成し、一方、命令メモリ1903、タグメモリ1905、そしてブロック・アドレス・マッピング・モジュール(XMAP)1904が一緒にL2命令メモリを構成する点である。
なお、命令メモリ1203(L1命令キャッシュ1203とも呼ばれ、命令メモリ1903から区別される)はホスト命令を記憶し、一方、命令メモリ1903(L2命令キャッシュ1903とも呼ばれる)はゲスト命令を記憶する。
命令メモリ1903に記憶されているゲスト命令がプロセッサ・コアによって実行される前に、ゲスト命令は対応するホスト命令へコンバータ1202によって変換され、それから変換されたホスト命令はL1命令キャッシュにプロセッサ・コア1201による実行のために記憶される。
命令メモリ1903は、L1命令キャッシュに記憶される全てのホスト命令に対応するゲスト命令を含むから、ただ1つのタグメモリ1905がメモリの2つのレベルに対して用いられる。
タグメモリ1905の各行は対応するゲスト命令ブロックのタグアドレスを記憶する。
さらに、ブロック・アドレス・マッピング・モジュール1904の行とタグメモリ1905の行もまた一対一の対応関係を持つ。
タグメモリ1905の各行は、L1命令キャッシュ1203のゲスト命令ブロックに対応する1つのホスト命令ブロックもしくは複数のホスト命令ブロックの1Xアドレスと有効信号(ゲスト命令ブロックに対応する1つのホスト命令ブロックがL1命令キャッシュ1203に記憶されていないとき、対応する1Xアドレスの有効信号は無効である)を記憶する。
ゲスト命令アドレスはブロック・アドレス、サブブロック番号1813、ブロック・オフセット・アドレス1814から構成され、命令メモリ1903のゲスト命令ブロックに対応するブロック・アドレスがさらにタグ1811とインデックス番号1812に分割される。
タグメモリ1905の行に記憶されたタグ情報は、インデックス番号1812にもとづいてタグメモリ1905の行に対してアドレス指定操作を実施することで読み出される。
それから、タグ情報はブロック・アドレスのタグ1811と比較され、ゲスト命令ブロック・アドレスのマッチングが成功したかを決定する。
インデックス番号1812は、ブロック・アドレス・マッピング・モジュール1904のメモリに対するアドレス指定操作を実施するために用いられ、メモリの1つの行を選び、そしてサブブロック番号1813はメモリの1つのコラムを選ぶ。
図20に示されるように、ブロック・アドレス・マッピング・モジュール1904は書き込みモジュール2001、出力セレクタ2007そしてメモリを含む。
各ゲスト命令ブロックは2つのサブブロックに分割される。
各サブブロックのゲスト命令は命令コンバータ1202によってホスト命令へ変換され、変換されたホスト命令はL1命令キャッシュのL1命令ブロックに記憶される。
従って、ブロック・アドレス・マッピング・モジュール1904のメモリの各行はL2メモリキャッシュ1903の1つのL2ゲスト命令ブロックに対応する。
メモリは2つのコラム2003と2005に分割され、各ゲスト命令ブロックの2つのサブブロックに対応し、サブブロック番号1813によって選ばれる。
メモリの各エントリは1つのサブブロックに対応し、エントリはゲスト命令サブブロックに対応するホスト命令ブロックのL1命令ブロック・アドレス(1Xアドレス)を記憶する。
従って、ブロック・アドレス・マッピング・モジュール1904はゲスト命令ブロック・アドレスを対応するホスト命令ブロック・アドレスにマップし、ゲスト命令サブブロックを対応するホスト命令ブロックへ関連付ける。
加えて、1つのゲスト命令サブブロックの対応するホスト命令ブロックはL1命令キャッシュの任意の1つのL1キャッシュ・ブロックに置かれうる。
従って、L1命令キャッシュはフルアソシアティブ・キャッシュであり得る。
ブロック・アドレス・マッピング・モジュール1904のメモリの情報が読み出されるとき、インデックス番号1812はメモリの1行を選び内容を読み出し、ゲスト命令アドレスのサブブロック1813はセレクタ2007を制御しメモリのコラム2003もしくは2005のデータを選び内容を出力する。
唯一の違いは、現行ホスト命令アドレス1723がターゲットメモリ1607の内容とマッチングされヒットしない、もしくは次ブロック・アドレス・メモリ1709で実施されるアドレス指定操作が無効エントリを見つけ、そして分岐決定とエンディング命令決定が上記ミスもしくは無効命令アドレスを選ぶとき、その際にシステムが異なるプロセスを実装する点だけである。
図17に示される実施形態同様に、プロセッサ・コア1721によって提供されたゲスト命令アドレス1708は次サイクルにおいてアドレスとして用いられる。
違いは、ゲスト命令アドレスが直接に同レベルのタグメモリ1505によって変換されない点である。
ゲスト命令アドレスのインデックス番号1812を使ってエントリがタグメモリ1905から読み出される一方で、エントリはゲスト命令アドレスにおいてタグ1811とマッチングされる。
それから、ゲスト命令アドレスのインデックス番号1812とサブブロック番号1813はブロック・アドレス・マッピング・モジュール1904のためにアドレス指定操作を実施するために用いられる。
このとき、バス1906を経た1XアドレスはL1命令メモリへ送り返され次ブロックメモリ1709の無効エントリを充填する;もしくは1Xアドレスを用いてブロック・オフセット・マッパー1504のためにアドレス指定操作が実施され、バス1708のゲスト命令のブロック・オフセット・アドレスがホスト命令のブロック・オフセット・アドレスへマップされる。
1Xアドレスとホスト命令のブロック・オフセット・アドレスは共にホスト命令の分岐ターゲット・アドレス(1Yアドレス)を構成し、そして1Yアドレスは分岐ターゲット・バッファ1607のエントリ(つまり、マッチング操作においてミスがある時のエントリ)に記憶される。
後続のオペレーションは図17に示されたオペレーションと同じである。
このとき、バス1708のゲスト命令アドレスを用いてアドレス指定操作がL2命令キャッシュ1903に対して実施される。
該当するゲスト命令サブブロックが命令コンバータ1202へ送られ、該当するゲスト命令サブブロックがホスト命令ブロックへ変換される。
ホスト命令ブロックはL1命令キャッシュ1203のキャッシュ交換ロジックによって特定されたL1キャッシュ・ブロックへ記憶される。
L1キャッシュ・ブロックの1Xアドレスはブロック・アドレス・マッピング・モジュール1904のゲスト命令によってポイントされたエントリ(読み出された以前無効だったエントリ)に記憶され、そして1Xアドレスは有効にセットされる。
命令変換プロセスにおいて生成されたブロック・オフセット・マッピング関係とエンディング・フラグもまたブロック・オフセット・マッパー1504とエンディング・フラグ・メモリ1506の1Xアドレスによってポイントされた行に書き込まれる。
バス1906を経た1XアドレスはL1命令メモリへ送り返され、1Xアドレスは次ブロック・アドレス・メモリ1709の無効エントリに記憶される;もしくは1Xアドレスとマッチングによって生成されたホスト命令のブロック・オフセット・アドレスは共に分岐ターゲット・バッファ1607のエントリ(つまり、マッチング操作においてミスがあるときのエントリ)に記憶される。
後続のオペレーションは図17に示されたオペレーションと同じである。
このとき、バス1708のゲスト命令アドレスは下位メモリへ送られ、ゲスト命令ブロックが下位メモリから取り出され、L2命令キャッシュ1903のキャッシュ交換ロジックによって特定されたL2キャッシュ・ブロックに充填される。
同時に、バス1708のゲスト命令のタグ1811はタグメモリ1905のL2キャッシュ・ブロックに対応するエントリに記憶され、そしてブロック・アドレス・マッピング・モジュール1904のL2キャッシュ・ブロックに対応する2つのエントリは無効にセットされる。
それから、後続のオペレーションは、タグ・マッチングがヒットし、アドレス指定操作によって得られたブロック・アドレス・マッピング・モジュールの1Xアドレスが無効である場合のオペレーションと同様である。
従って、ゲスト命令ブロック(もしくはサブブロック)が順次実行もしくは分岐挙動に入るかによって、完全なゲスト命令ブロック(もしくはサブブロック)がゲスト命令ブロック(もしくはサブブロック)の境界から始まる対応するホスト命令ブロックへ変換されうる。
それから、変換されたホスト命令ブロックはホスト命令メモリに記憶される。
もしゲスト命令セットが可変長命令セットなら、1つのゲスト命令ブロック(もしくはサブブロック)の最初のゲスト命令の開始アドレスはゲスト命令ブロック(もしくはサブブロック)の境界と重ならない。
この場合、分岐がゲスト命令ブロックに入るとき、ゲスト命令ブロックの分岐ターゲット命令から始まってゲスト命令ブロックの終わりまでの部分だけが変換され、プロセッサ・コアにおける実行のためにホスト命令キャッシュ・ブロックに記憶される。
一方、次回ゲスト命令ブロックが順次実行もしくは分岐挙動にはいるとき開始点がこれらの命令の上に降りるとき、分岐ターゲット命令の前の命令が変換を待つ必要がある。
それから、変換されたホスト命令はホスト命令ブロックに追加される。
L1命令キャッシュ1203のホスト命令のストレージ・フォーマットはこの状況に適応するように修正され、全てのゲスト命令がゲスト命令の開始アドレスを含むゲスト命令ブロックに属するように定義される。
図21に示されるように、ゲスト命令ブロック2101は命令メモリ1903のゲスト命令ブロック(もしくはサブブロック)の行であり、そしてホスト命令ブロック2102はL1命令キャッシュ1203においてゲスト命令ブロック2101に対応するホスト命令ブロックの行である。
最初の分岐のターゲット命令がゲスト命令2105であると仮定して、変換はターゲット命令2105から始まり、ゲスト命令ブロックの変換が完了するまで続く。
変換されたホスト命令はホスト命令キャッシュ・ブロックに記憶される。
従って、ホスト命令はまだアドレス昇順に記憶されるが、しかし変換によって得られたホスト命令の最上アドレスとホスト命令ブロック2102のアドレスの最上ビット(MBS)(つまり、図21のホスト命令ブロック2102の最右)は整列される。
従って、ゲスト命令2105に対応するホスト命令2106は図21に示された位置に記憶される。
ゲスト命令ブロック2101のゲスト命令2105から始まる全てのゲスト命令に対応するホスト命令は、全て命令アドレスに沿って図21に示されたホスト命令ブロック2102の影の部分に記憶される。
ポインタは、ゲスト命令ブロックにおいて変換される最初のゲスト命令(例えばポインタ2103は図21のホスト命令2105へポイントする)、そしてホスト命令ブロックに記憶される最初のホスト命令(例えばポインタ2104は図21のホスト命令2106へポイントする)へポイントするのに用いられる。
従って、ゲスト命令ブロックへ順次実行もしくは分岐挙動において再び入るとき、ターゲット命令が変換されるか否かはゲスト命令のブロック・オフセット・アドレスとポインタ2103を比べることによって決定される。
さらに、もし新しいターゲット命令が変換されないと決定された場合、新しいターゲット命令から始まってゲスト命令ブロックのポインタ2103によってポイントされたゲスト命令までの、全てのゲスト命令が変換される。
それから、変換によって得られた全てのホスト命令の最高位アドレスが、ホスト命令ブロック2102のポインタ2104によってポイントされたアドレスの前アドレスと整列される。
ホスト命令はアドレスの昇順に沿って記憶される。
同時にポインタ2103とポインタ2104の値は更新され、ポインタ2103とポインタ2104はそれぞれ、新ターゲット命令がゲスト命令ブロック2101に占める位置と、新ターゲット命令に対応するホスト命令がホスト命令ブロック2102に占める位置とにポイントする。
ブロック・オフセット・マッパー1504のホスト命令マッピング関係はまた最上位ビット・アラインメント手法に沿って記憶され、それはホスト命令キャッシュ・ブロックのストレージ手法と同じである。
従って、処理システムの次ブロック・アドレス・メモリは変更される必要がある。
図18Bは次ブロック・アドレス・メモリのもう1つの例示的なフォーマットの回路図を示す。
図18Bに示されるように、第1パート1801と第2パート1802の他に、次ブロック・アドレス・メモリの各行はまた、その行に対応するホスト命令ブロックの次ホスト命令ブロックの最初のホスト命令の1Yアドレスを記憶するための第3パート1803を含む。
よって、第2パート1802と第3パート1803は共に次ホスト命令ブロックの最初のホスト命令のアドレスを形成する。
従って、ゲスト命令の境界が整列していないためにホスト命令がホスト命令ブロックの最下位ビット(LSB)から始まる位置に記憶されないとき、次ホスト命令ブロックの最初のホスト命令は、現行ホスト命令ブロックのブロック・アドレス(つまり、1Xアドレス)にもとづいた次ブロック・アドレス・メモリのためのアドレス指定操作を実施することで見いだされ、該当するアドレスを読み出す。
図21と図18Bに示されたフォーマットはまた、ゲスト命令の開始アドレスがゲスト命令ブロックの境界と整列しないときに、図15、図16、図17に示された実施形態において用いられる。
ゲスト命令ブロックとホスト命令ブロック間の弾性マッピング関係の実装方法は図22に示され、その方法は図19に示される実施形態にも応用できる。
ある実施形態において、 ゲスト命令ブロックのゲスト命令から変換されたホスト命令は最大3つのホスト命令ブロックに割り当てられる。
なお、割り当てられるホスト命令ブロックの数は幾つでもよい。
従って、ブロック・アドレス・マッピング・モジュールの主要な部分はメモリ2201、メモリ2202、メモリ2203へ分割される。
メモリ2201、メモリ2202、メモリ2203の各行は1つのゲスト命令ブロックへ対応する。
各行は2つのストレージ・フィールドから構成され、それぞれゲスト命令ブロックの開始ゲスト命令のブロック・オフセット・アドレス(2Y)とL1命令キャッシュ1203のサブブロックに対応するホスト命令ブロックのブロック・アドレス(1X)を記憶する。
加えて、メモリ2201、メモリ2202、メモリ2203の該当する行は経路2205と経路2206を持つ。
メモリ2201の任意の行の内容は、メモリ2202の対応する行へ右シフトされ、メモリ2202の任意の行の内容はメモリ2203の対応する行へ右シフトされる。
2Yとホスト命令ブロックのブロック・アドレス(1X)は、図20に示されるメモリ2201のゲスト命令ブロックのアドレス(2X)によってポイントされた行に記憶される。
よって、行の内容(例えば2Yと1X)は、ブロック・オフセット・アドレスが、ホスト命令ブロック(ブロック・アドレスは1X)の最初のホスト命令に対応するゲスト命令ブロック(2X)において2Yの、ゲスト命令を記録する。
残りのホスト命令の最初のホスト命令に対応するゲスト命令のブロック・オフセット・アドレス(2Y)と新しく割り当てられたホスト命令ブロックのブロック・アドレス(1X)はメモリ2202の2Xによってポイントされた行に記憶される。
ゲスト命令とホスト命令のブロック・オフセット・マッピング関係もまた、図19に示されるブロック・オフセット・マッパー1504の1Xによってアドレス指定される行に記憶される。
このとき、分岐ターゲット命令から始めるゲスト命令ブロックはコンバータ1202によってホスト命令へ変換される;ゲスト命令ブロック・アドレス2Xもまたブロック・アドレス・マッピング・モジュール1904によってホスト命令ブロック・アドレス(1X)へマップされる;そしてゲスト命令のブロック・オフセット・アフドレス(2Y)もまたブロック・オフセット・マッパー1504によってホスト命令のブロック・オフセット・アドレス(1Y)へマップされる。
さらに、1Xと1Yはトラッカー選択のために分岐予測モジュール1607に記憶される。
アクセス・アドレスのゲスト命令のブロック・オフセット・アドレス2Yはコンパレータ2204の各メモリから読み出された各2Yと比較される。
第1メモリに記憶されたアクセス・アドレスの2Yより小さい2Yを持つ1Xがブロック・アドレス・マッピング・モジュール1904の出力1906として選ばれる。
後続するオペレーションは上記述と同じである。
もしメモリ2201の2Y(2Yの値はブロック・アドレス・マッピング・モジュール1904の全てのメモリの最小値である) がまだアクセス・アドレスのBN2Yよりも大きければ、アクセスされたターゲット命令はまだホスト命令へ変換されていない。
このとき、システムはコンバータ1202を制御し、アクセス・ターゲットから始まってメモリ2201に記憶されている2Yの前のゲスト命令までの全てのゲスト命令をホスト命令へ変換し、変換されたホスト命令は交換ロジックによって特定されたL1キャッシュ・ブロックに記憶される。
メモリ2202のアクセス・アドレスのゲスト命令アドレス2Xによってポイントされた行は、メモリ2203の該当する行へ右シフトされ、そしてメモリ2201の2Xによってポイントされた行はメモリ2202の該当する行へ右シフトされる。
アクセス・ターゲットの2Yと新しい1Xはメモリ2201へ記憶される。
従って、ゲスト命令ブロックは複数アクセスの開始地点から始まる複数のホスト命令ブロックへ変換される。
マッピング関係はまた図22のブロック・アドレス・マッピング・モジュール1904に記憶される。
ブロック・アドレス・マッピング・モジュール1904のオペレーションは図8Aー8Dに示された実施形態に参照される。
ホスト命令に対応するホスト命令の1Xアドレスが得られたとき、後続のオペレーションは同じであり、ここでは繰り返されない。
図23は開示された実施形態と整合する例示的な、トラック・テーブルを含むプロセッサ・システムの回路図を示す。
トラック・テーブルは分岐ターゲットアドレス情報、次命令ブロック・アドレス情報とエンディング・トラック・ポイント情報を含むから、トラック・テーブル2301は次ブロック・アドレス・メモリ1709、エンディング・フラグ・メモリ1506と分岐ターゲット・バッファ1607を交換するのに用いられる。
さらに、タグメモリ1905、ブロック・アドレス・マッピング・モジュール1904、コンバータ1202、L1命令キャッシュ1203、プロセッサ・コア1201、ブロック・オフセット・マッパー1504、セレクタ1711、ORロジック1707そしてトラッカーは図19の対応する構成部分と同じである。
ある実施形態においては、スキャナが追加される。
スキャナは変換されたゲスト命令を検証するよう設定され、分岐命令のために分岐ターゲットのゲスト命令アドレスBN2を計算し、BN2を対応するホスト命令アドレスBN1へ変換する。
ホスト命令アドレスBN1はL1命令キャッシュ1203のアドレスであるから、L1命令キャッシュ1203のホスト命令とトラック・テーブル2301のトラック・ポイントは1対1関係を持ち、分岐命令に対応するトラック・ポイントは分岐ターゲットのホスト命令アドレスを含み、トラッカーはトラック・テーブル2301のためにアドレス指定操作を実施しトラック・ポイントの内容を読み出し、’1’を追加された現行トラックアドレスもしくはトラック・ポイントの分岐ターゲット・アドレス指定アドレスを、分岐命令実行にもとづいて次ホスト命令のアドレス指定アドレスとして選ぶ。
例えば、トラック・ポイントのフラグ・ビットはトラック・ポイントが最後の命令に対応するか否かを示すために用いられる。
トラッカーのリード・ポインタがこのトラック・ポイントにポイントするとき、バス2313から読み出されたフラグ・ビットの値にもとづいて、命令が最後の命令か否かが決定される。
セレクタ2315はBN1ホスト命令アドレス(またL1命令キャッシュ・アドレス)とスキャナ2302によって出力されるBN2L2キャッシュ・アドレスを選び、選ばれた結果をトラック・テーブル2301に記憶するように設定され、そしてBN1はブロック・アドレス・マッピング・モジュール1904によってバス1906を経て送られたBN1Xとブロック・オフセット・マッパー1504から送られたBN1Yを組み合わせて形成される。
アドレス指定操作はタグメモリのためにゲスト命令アドレスのインデックス部分を使って実行される。
それから、読み出された内容はゲスト命令のタグ部分とマッチングされる。
もしヒットがあれば、ゲスト命令のインデックス番号1812がL2キャッシュ・ブロック・アドレスBN2Xとして用いられる;サブブロック番号1813とブロック・オフセット・アドレス1814は共にBN2Yとして用いられる;そしてBN2XとBN2Yは共にL2キャッシュ・アドレスBN2を形成する。
BN2はトラック・テーブル2301のゲスト分岐命令に対応するホスト分岐命令のエントリに記憶される。
このようにして、ゲスト分岐命令がホスト分岐命令に変換されL1命令キャッシュ1203へ記憶されるとき、ホスト分岐命令の分岐ターゲットは少なくともゲスト命令フォーマットを用いてL2命令キャッシュ1903へ記憶され、そしてホスト分岐命令の該当するトラック・テーブルのエントリは分岐ターゲットのL2キャッシュ・アドレスBN2を記憶する。
トラック・テーブル2301の出力2311がBN2フォーマットであり分岐予測が’分岐が取られる’であるとき、セレクタ1711はBN2をバス2304へ置き、ブロック・アドレス・マッピング・モジュール1904のためにBN2を使ってアドレス指定操作を実施する。
もしマッピングの出力が無効であれば、それは分岐ターゲット命令を含む命令ブロックがL1命令キャッシュ1203に記憶されるべくホスト命令ブロックに変換されていないことを示す。
このとき、プロセッサ・システムはL2命令キャッシュ1903のためにBN2を用いてアドレス指定操作を実施し、ゲスト命令ブロックを読み出す。
ゲスト命令ブロックはスキャナ2302へ送られゲスト命令ブロックの分岐命令の分岐ターゲットを計算する。
ゲスト命令ブロックはまたコンバータ1202へ送られ、ホスト命令ブロックへ変換される。
ホスト命令ブロックは、L1命令キャッシュのキャッシュ交換ロジックによって特定されたBN1XアドレスによってポイントされたL1命令キャッシュ・ブロックへ記憶される。
さらに仮想マシンシステムは、ゲスト命令オフセット・アドレス1814をホスト命令BN1Yへ、ブロック・オフセット・マッパー1504のBN1Xによってポイントされたマッピング関係にもとづいてマップする。
BN1XとBN1Yによって形成された分岐ターゲット・ホスト命令のL1キャッシュ・アドレスBN1は該当する分岐命令のトラック・テーブルのエントリにBN2を交換するために書き込まれる。
よって、分岐ターゲット・ゲスト命令と後続するゲスト命令ブロックはホスト命令ブロックへ変換され、変換されたホスト命令ブロックをL1キャッシュ1721へ記憶する。
同時に、ホスト分岐ターゲット命令のL1キャッシュ・アドレスはホスト分岐ターゲット命令に対応するトラック・テーブルのエントリに記憶される。
トラック・テーブルの出力2311がBN1フォーマットであるとき、BN1はセレクタ1711とセレクタ1705をTAKEN信号1713を通して制御する。
例えば、TAKEN信号1713が”分岐でない”とき、トラッカーのリード・ポインタとインクリメンタ1703によって’1’を追加されたL1キャッシュ・アドレス1723は次サイクルにおいてL1キャッシュ・アドレス1723として用いられる。
もしTAKEN信号1713が’分岐がとられた’であれば、トラック・テーブルによって出力されたBN1はトラッカーのリード・ポインタと次サイクルのL1キャッシュ・アドレス1723として用いられる。
L1キャッシュ・アドレス1723はL1命令キャッシュ1203において直接アドレス指定し、プロセッサ・コア実行のためにホスト命令を読み出す。
つまり、ゲスト命令がホスト命令へ変換され、ホスト命令がL1キャッシュ・ブロックへ記憶されるとき、スキャナ2302はまた次ゲスト命令ブロックのアドレス(例えば、現行ゲスト命令ブロックのアドレス足す1)を計算し、そして次ゲスト命令ブロックのアドレスはマッチング操作を実施するためにタグメモリ1905へ送られる。
もし照合一致がなければ、ゲスト命令ブロックは下位メモリから取り出され、L2キャッシュ1903のBN2Xアドレスを用いてキャッシュ・ブロック交換ロジックによって特定されたL2キャッシュ・ブロックへ記憶される。
タグメモリ1905とブロック・アドレス・マッピング・モジュール1904の該当する行もまた更新される。
よって、得られたBN2Xもしくはマッチング操作によって得られたBN2Xは、トラック・テーブル2301のL1キャッシュ・ブロックに対応する行のエンディング・トラック・ポイントへ記憶される。
BN2Xがバス2311から読み出されるとき(BN2Xのためのオペレーションは分岐ターゲット命令アドレスBN2のためのオペレーションと同様)、BN2Xはバス2304を経てブロック・アドレス・マッピング・モジュール1904へ送られ、BN1Xへマップされる(BN1Xが無効のときは、ゲスト命令はホスト命令へ変換され、L1命令キャッシュ1203のBN1Xアドレスを使ってキャッシュ・ブロック交換ロジックによって特定されたL1キャッシュ・ブロックへ記憶される;そしてタグメモリ1905の該当する行とブロック・アドレス・マッピング・モジュール1904も更新される)。
バス2304のBN1XとBN2YはBN1Yへブロック・オフセット・マッパー1504を経てマップされる。
BN1XとBN1YはBN1アドレスを構成し、BN1アドレスはセレクタ2315を経てトラック・テーブル2301へ記憶され、前のBN2を交換する。
上の分岐ターゲットアドレスもしくは次ブロックアドレスに対して、ブロック・アドレス・マッピング・モジュール1904の該当するエントリが有効であるかは、最初にタグをマッチングすることによって検出される。
ブロック・アドレス・マッピング・モジュール1904の該当するエントリの内容が有効であるとき、それは分岐ターゲット命令もしくは次命令がホスト命令へ変換され、ホスト命令がL1命令キャッシュ1203へ記憶されていることを示す。
このとき、BN2Yは上記プロセスに沿ってブロック・アドレス・マッピング・モジュール1904の対応するエントリ内容におけるBN1Xを使ってBN1Yへマップされ、そしてBN1は直接トラック・テーブルに記憶される。
例示目的のために、モジュールとデバイスの一部だけが図24に示される。
図24に示されるように、プロセッサ・コアのレジスタ・ファイル2402はスタックとして設定される。
命令のデコード結果と現行レジスタ・ファイル2402のストレージ状況にもとづいて、スタック・コントローラ2404は、それぞれ出力アドレス2405と出力アドレス2406をスタック先頭(TOS)ポインタ値とスタック最下部(BOS)ポインタ値として調整し、ポインタ値はレジスタ・ファイル2402へ送られる。
レジスタ1011(スタック先頭ポインタ・レジスタとも呼ばれる)は 現行のスタック先頭ポインタの値を記憶するように設定され、ポインタはレジスタ・ファイルの1つのレジスタをポイントする。
基本的なスタック操作はPOPとPUSHを含む。
デクリメンタ1031は現行のスタック先頭ポインタ値を’1’減らす。
インクリメンタ1041は現行のスタック先頭ポインタ値を’1’増やす。
つまり、POP操作はデクリメンタ1031によって実装され(スタック先頭ポインタ値から’1’を引く)、そしてPUSH操作はインクリメンタ1041によって実装される(スタック先頭ポインタ値に’1’を足す)。
よって、命令のデコード結果に沿って、メモリ2403からロードされたオペランドは順番にレジスタ・ファイル2402へプッシュされ(スタック先頭ポインタ値に順番に’1’を足す)、スタックにもとづいてデータをロードする。
もしくは、順番にレジスタ・ファイル2402からポップされたオペランド(スタック先頭ポインタ値から順番に’1’を引く)が実行ユニット2401へ送られ該当する算術ロジック操作を実施したあと、結果は再びレジスタ・ファイル2402へプッシュされ(スタック先頭ポインタ値に’1’を足す)、スタック操作を実装する。
さらに、レジスタ・ファイル2402からポップされたオペランドはメモリ2403へ記憶され(スタック先頭ポインタ値から’1’を引く)、スタックにもとづいてデータを記憶する。
特に、レジスタ・ファイルのプロセッサ命令セットのアドレス・フィールドの3ビットが、読み取りポートまたは書き込みポートにおけるスタック先頭ポインタ値の操作(’1’追加する、変化しない、’1’減らす)を制御する。
レジスタ・ファイル2402によって構成されたスタックが満杯(もしくはほぼ満杯)になったとき、スタック・コントローラ2404の制御の下、スタック最下部の近くの幾つかのデータはメモリ2403へ一時的に記憶され、スタック最下部ポインタは新しいスタック最下部をポイントするように調整され、レジスタ・ファイル2402によって構成されたスタックは後続のスタック操作によって使われうるストレージ・スペースの一部を空にする。
メモリ2403のストレージ・スペースはスタック形式に整理され、一時的に記憶されるべきデータはスタック操作(POPとPUSH)によって記憶され、データの元の順序を維持する。
よって、レジスタ・ファイル2402によって構成されたスタックが空(もしくはほぼ空)になったとき、スタック・コントローラ2404の制御の下、一時的に記憶されたデータはスタック順序に沿ってメモリ2403のスタックから読み出され、レジスタ・ファイル2402の該当するレジスタへ書き戻され、スタック最下部ポインタは新しいスタック最下部をポイントするように調整され(つまり、一時的に記憶されたデータが、データがメモリ2403に一時的に記憶される前の状況に回復される)、よってレジスタ・ファイル2402によって構成されたスタックはまだデータの一部を、後続スタック操作における使用のために、記憶する。
従って、スタック操作機能がレジスタ・ファイルによって実装される。
中間コードが実行されるとき、ソフトウェア・インタプリタは中間コードを実時間で幾つかのマシン命令へ翻訳でき、そしてマシン命令はハードウェア・プラットフォームによって実行される。
従って、中間コードの実行効率は低い。
なお、プロセッサ・システムはスタック操作命令を直接に実行でき(つまり、各スタック操作命令は該当するホスト命令へ変換される)、よってプロセッサ・システムの実行効率を大幅に改善する。
加えて、ソフトウェア仮想マシン技術と比較して、複数の命令セットを含むプロセッサ・システムはハードウェア・モードによって仮想マシンを実装できる。
該当する手法とプロセスは本開示によって提出された他のどの構造(例えば図15、16、17、19の構造)に対しても応用できる。
加えて、例示目的のために、以下の記述において、可変長命令セット、固定長命令セット、スタック命令セットのみがゲスト命令セットの例として用いられるが、しかし他のどんな適切なコンピュータ命令セットもゲスト命令セットとして用いられうる。
つまり、ゲスト命令は可変長命令である。
可変長命令セットとホスト命令セットの命令マッピング変換ルールはコンバータ1202のメモリ1301へ取り込まれ、コンバータ1202のレジスタ212を制御するための値が書き込まれる。
変換開始ポイントのレジスタは、変換を開始するために介入アドレスの値(分岐ターゲットもしくは順序上次のアドレス)を持つ。
よって、可変長命令が実行されるとき、もしプロセッサ・コア1201によって必要とされる可変長命令が命令メモリ1903に記憶されるならば、命令メモリ1903のためのアドレス指定操作が実施され、可変長命令を含む命令ブロックが読み出され、そして命令ブロックはスキャナ2302とコンバータ1202へ送られる。
可変長命令から始まって命令ブロックの中の変換されていない最後の可変長命令までの可変長命令全ては、分岐命令の分岐ターゲット・アドレスを計算するために、スキャンされ変換される。
分岐命令の分岐ターゲット・アドレスは対応するホスト命令アドレスへ変換される。
同時に、キャッシュ交換アルゴリズムにもとづいて、これらの可変長命令から変換されたホスト命令ブロックは順番にL1命令キャッシュ1203の対応する行に記憶され、対応するトラックがトラック・テーブル2301の対応する行に構成される。
もしL1命令キャッシュ1203が分岐ターゲットに対応するホスト命令を記憶しない、しかし命令メモリ1903が分岐ターゲットを記憶する場合、分岐ターゲットの可変長命令アドレスBN2がトラック・ポイント内容としてトラック・テーブルに記憶される。
もし命令メモリ1903が分岐ターゲットを記憶しないならば、分岐ターゲットは下位メモリから命令メモリ1903の交換アルゴリズム(例えばLRU)によって決定された行へ充填され、分岐ターゲットの可変長命令アドレスBN2がトラック・ポイント内容としてトラック・テーブルに記憶される。
よってトラック・テーブル2301は可変長分岐命令の分岐ターゲットのアドレス情報を含む。
トラック・テーブル2301から読み出された内容とプロセッサ・コア1201によって実行された分岐ホスト命令の実行結果にもとづいて、トラッカーはL1命令キャッシュ1203を制御しプロセッサ・コア1201における実行のために対応するホスト命令を出力する。
該当するホスト命令がホスト命令アドレス順に実行されるとき、トラック・アドレス(つまりホスト命令アドレス)にインクリメンタ1703によって1が追加される、もしくはバス2309を経てトラック・テーブル2301によって出力された次ホスト命令ブロック・アドレスが選ばれ、L1命令キャッシュ1203から該当するホスト命令を直接に見いだす。
トラック・テーブル2301から出力されたアドレスが分岐ターゲットの可変長命令アドレスBN2であるとき、もし可変長命令に対応するホスト命令が前オペレーションの命令キャッシュ1203に記憶されているなら、可変長命令アドレスはホスト命令アドレスBN1へ変換され、そして対応するホスト命令がプロセッサ・コア1201における実行のためにL1命令キャッシュ1203からホスト命令アドレスBN1にもとづいて見いだされる。
或は、可変長命令アドレスにもとづいて、対応する可変長命令は命令メモリ1903から見いだされ、それからその可変長命令から始まって命令ブロックの中の変換されていない最後の可変長命令までの命令がスキャン/変換される。
対応するホスト命令ブロックはL1命令キャッシュ1203に記憶され、該当するトラックがトラック・テーブル2301へ構成される。
同時に、可変長命令から変換されたホスト命令がプロセッサ・コア1201における実行のために提供される。
プロセッサ・コア1201はホスト命令を実行し対応する結果を生成する。
例えば、分岐ホスト命令が実行されたとき、分岐が取られたかを示すTAKEN信号が生成されトラッカーへ送られる。
TAKEN信号と、バス2313を経てトラック・テーブル2301から送られる命令ブロックの最後の命令に到達したかを表す信号にもとづいて、トラッカーは複数のアドレスソースを選びプログラム・フローの実行を制御する。
この場合、最後の可変長命令が完全に実行されたとき、プロセッサ・コアによって実行された操作が止まる。
プロセッサ・コアの状態と各メモリが無効としてリセットされ、固定長命令セットとホスト命令セットの間の命令変換ルールおよびレジスタの設定が、コンバータ1202のメモリとレジスタへ取り込まれ、以前に記憶された可変長変換ルールを置き換える。
命令変換開始アドレスを制御するためのレジスタ値はゲスト命令ブロックもしくはサブブロックの最下位アドレスである。
固定長命令がプロセッサ・システムによって実行されるとき、もしプロセッサ・コア1201によって必要とされる固定長命令が命令メモリ1903に記憶されているならば、命令メモリ1903の上でアドレス指定操作を実施することによって得られた固定長命令を含む命令ブロックがスキャナ2302とコンバータ1202へ送られる。
スキャナ2302とコンバータ1202は固定長命令ブロック全体をスキャン/変換し、分岐命令の分岐ターゲット・アドレスを計算する。
分岐命令の分岐ターゲット・アドレスは対応するホスト命令アドレスへ変換される。
同時に、得られたホスト命令ブロックは交換アルゴリズムに沿ってL1命令キャッシュ1203の該当する行へ記憶され、該当する行に対応するトラックがトラック・テーブル2301に構成される。
プロセスは前に記された可変長命令のための操作と同様である。
違う点は、固定長ゲスト命令ブロック全体がスキャンされ変換される点である。
トラック・テーブル2301から読み出される内容とプロセッサ・コア1201による分岐ホスト命令の実行結果にもとづいて、トラッカーはL1命令キャッシュ1203を制御し、プロセッサ・コア1201による実行のために該当する命令を出力する。
詳細は前実施形態を参照のこと、ここでは繰り返されない。
特に、プロセスは上記の1つの命令セットを他の命令セットにスイッチするプロセスと同様である。
しかし、プロセスはトラック・テーブル2301、命令キャッシュ1203、命令メモリ1903、そして全ての他のメモリをゼロにリセットする必要がない。
トラック・テーブル2301の異なるスレッド・トラックは互いに干渉せず、しかし他のメモリ・デバイスはトラック・テーブル2301に関連付けされ、様々なスレッドが互いに独立であり、そしてそれぞれが自身の独立したトラックを持つ。
命令セットもしくはスレッドがスイッチされたとき、スレッドのトラッカー1723のリード・ポインタとプロセッサ・コアのレジスタ状態が記憶される限り、スレッドが実行再開のために呼ばれるとき、データは対応する構成部分(例えばレジスタ)へ書き戻される。
よって、このスレッドはスレッドがスイッチアウトされた地点から実行を再開できる。
トラッカーの1つのメモリは各スレッドに対応するリード・ポインタを記憶し、よってスレッド(もしくは仮想マシン)がスイッチされたとき、対応するリード・ポインタが簡単に回復される。
同様に、各スレッドに対応する1つのメモリがプロセッサ・コア1701の各ステータス・レジスタのために生成される。
従って、異なるスレッドがスイッチされたとき、時間間隔はリード・ポインタ、ステータス・レジスタ、リード・ポインタ・メモリ、ステータス・メモリの間のデータ交換のために必要とされる時間だけである。
ゲスト命令が変換されるとき、最初に、コンバータ1202のメモリのスレッド番号によってアドレス指定されるメモリ空間が見いだされる。
それから、メモリ空間の該当する関係に沿って、ゲスト命令はホスト命令へ変換される。
この場合、他のオペレーションは前実施形態のオペレーションと同じであり、ここでは繰り返されない。
各仮想マシンは異なるスレッドを含むから、複数の異なる仮想マシンが同時に同じプロセッサ・システムに走るための機能がこの例で記された方法で実装される。
先に述べたように、トラック・テーブル2301のトラックの異なるスレッドは互いに干渉しないから、複数の仮想マシンもまた、L2キャッシュ1903の中に共存する異なるスレッドの同じコンピュータ命令セットもしくは異なるコンピュータ命令セットのゲスト命令のために、互いに干渉することはない。
トラッカーのリード・ポインタとプロセッサ・コアのレジスタ状態を記憶する方法は上記実施形態を参照されたい。
よって、同じ命令セットを実行できる複数の異なる仮想マシンが同時に同じプロセッサ・システムにおいて走る時、ただ1つのゲスト命令セットのための1つの変換ルールがコンバータ1202に記憶され、全てのスレッドは同じ変換ルールにポイントする。
異なるスレッド(異なる仮想マシン)は独立で、トラッカーのリード・ポインタのデータとプロセッサ・コアの状態レジスタはスレッド(仮想マシン)がスイッチされるときに交換される。
スタック操作命令を直に実行するプロセッサ・コアはまた、レジスタ操作を実施する命令セットとスタック操作を実施する命令セット間のシームレスなスイッチも、異なる命令セットの命令を実行するために中断することなく、実現できる。
特に、プログラムが実行される前に、図13Bに記された方法に沿って、使用される可能性のあるレジスタ操作とスタック操作のための全ての命令は、コンバータ1202のメモリのスレッド番号によってアドレス指定されたメモリ空間の中へ取り込まれる。
レジスタ操作もしくはスタック操作のための命令が変換されるとき、最初に、コンバータ1202のメモリのスレッド番号によってアドレス指定されるメモリ空間が見つけ出される。
それから、メモリ空間の対応関係に沿って、レジスタ操作もしくはスタック操作のための命令がホスト命令へ変換される。
レジスタ操作命令セットの1つの命令がホスト命令に変換されるとき、ビットは’0’にセットされ、そして信号1021はセレクタ1033、1035、1037を制御し、直接にホスト命令のレジスタ・ファイル・アドレス・フィールドを選び、該当する読み取りそして書き込み操作を制御するために直接にレジスタ・ファイル1001においてアドレス指定操作を実施する。
スタック操作命令セットの1つの命令がホスト命令へ変換されるとき、ビットは’1’にセットされ、信号1021はセレクタ1033、1035、1037を制御して、、ホスト命令の命令フィールド(例えば、レジスタ操作が実行されるときレジスタ・アドレス・フィールド)を直接選び、それはスタック・ポインタの先頭の増加もしくは減少を制御してセレクタ1053、1055、1057を制御し、スタック先頭ポインタ1045を選んで該当する読み取りそして書き込み操作を制御するためにレジスタ・ファイル1001上でアドレス指定操作を実施する。
よって、プロセッサ・コアがプログラムを実行するとき、プロセッサ・コアはレジスタ操作を実施する命令セットとスタック操作を実施する命令セット間でシームレスなスイッチを実現できる。
命令コンバータ1202を制御して正しい変換ルールを用いてゲスト命令をホスト命令へ変換する、ある種の条件(例えば、スレッド番号)がある限り、スタック操作命令はレジスタ操作命令セットを含むプログラムの中にシームレスに埋め込まれうる。
プロセッサ・コアは、レジスタ操作を実施する命令セットとスタック操作を実施する命令セットの間のシームレスなスイッチを実現することができる。
この場合、他のオペレーションは前実施形態のオペレーションと同様であり、ここでは繰り返されない。
本開示において提示されたシステムと方法はまた、仮想マシンに関連する様々な応用に適用され、仮想マシンがハードウェアを用いて実現され、仮想マシンの効率を向上させる。
Claims (62)
- 命令セット変換方法で、以下から構成される:ゲスト命令をホスト命令へ変換し、そしてゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を生成する;ホスト命令をキャッシュ・メモリへ記憶し、それはプロセッサ・コアによって直接アクセスされる;ホスト命令アドレスにもとづいて、プロセッサ・コアによる実行のための該当するホスト命令を直接取り出すためにキャッシュ・アドレス指定操作を実施する;もしくは、マッピング関係にもとづいて、プロセッサ・コアによって出力されたゲスト命令アドレスをホスト命令アドレスへ変換した後、プロセッサ・コアによる実行のための該当するホスト命令を取り出すためにキャッシュ・アドレス指定操作を実施する。
- さらに以下を含む:プログラム実行フローとプロセッサ・コアからの命令実行フィードバックにもとづいて、後続ホスト命令をプロセッサ・コアに提供し、ここでプロセッサ・コアからの命令実行フィードバックはプロセッサ・コアが分岐命令を実行したとき分岐が取られたかを表す生成された信号である
、ことを特徴とする請求項1に記載の方法。 - さらに以下を含む:ゲスト命令から命令タイプを含む全ての命令フィールドを抽出する;
ゲスト命令の抽出された命令タイプをもとに、ホスト命令の命令タイプとゲスト命令に対応する命令変換制御情報を見いだす;
命令変換制御情報をもとに、ゲスト命令から抽出された対応する命令フィールドをシフトする;
そしてホスト命令の命令タイプとシフトされた命令フィールドをスプライスし、対応するホスト命令を形成する
、ことを特徴とする請求項1に記載の方法。 - 以下のうち1つを含む: 1つのゲスト命令が1つのホスト命令へ変換され、ゲスト命令の命令アドレスはホスト命令の命令アドレスに対応する;
もしくは、1つのゲスト命令が複数のホスト命令へ変換され、ゲスト命令の命令アドレスが複数のホスト命令の最初のホスト命令の命令アドレスに対応する
、ことを特徴とする請求項3に記載の方法。 - 複数のゲスト命令が1つのホスト命令へ変換され、複数ゲスト命令の最初のゲスト命令の命令アドレスがホスト命令の命令アドレスに対応する
、ことを特徴とする請求項4に記載の方法。 - さらに以下を含む:ゲスト命令アドレスとホスト命令アドレスとの間にマッピング関係を形成する
、ことを特徴とする請求項3に記載の方法。 - ゲスト命令アドレスとホスト命令アドレスの間にマッピング関係を形成することがさらに以下を含む:ゲスト命令アドレスとホスト命令ブロックアドレスとの間にマッピング関係を形成する;
そしてゲスト命令ブロック・オフセットとホスト命令ブロック・オフセットとの間にマッピング関係を形成する
、ことを特徴とする請求項6に記載の方法。 - さらに以下を含む:データ構造を用いて、ゲスト命令アドレスとホスト命令ブロックアドレスの間のマッピング関係を表し、データ構造はホスト命令ブロックアドレスを記憶し、そしてホスト命令ブロックアドレスはゲスト命令ブロックアドレスとゲスト命令ブロック・オフセット・アドレスによってソートされている
、ことを特徴とする請求項7に記載の方法。 - さらに以下を含む:ゲスト命令アドレスに対応するホスト命令ブロックアドレスがデータ構造の中に存在するとき、ゲスト命令アドレスに含まれるゲスト命令ブロックアドレスとゲスト命令ブロック・オフセット・アドレスにもとづいて、データ構造の中に該当する場所を見つけ、データ構造に記憶されているホスト命令ブロックアドレスを読み出す
、ことを特徴とする請求項8に記載の方法。 - さらに以下を含む:ゲスト命令アドレスに対応するホスト命令ブロックアドレスがデータ構造の中に存在しないとき、ゲスト命令アドレスのゲスト命令ブロックアドレスとゲスト命令ブロック・オフセット・アドレスにもとづいて、データ構造内に該当する挿入位置を見つけ、挿入位置にゲスト命令アドレスに対応するホスト命令ブロックアドレスを記憶する
、ことを特徴とする請求項8に記載の方法。 - ゲスト命令ブロックアドレスとホスト命令ブロックアドレスの間のマッピング関係にもとづいて、ゲスト命令ブロックアドレスはホスト命令ブロックアドレスへ変換される
、ことを特徴とする請求項7に記載の方法。 - ゲスト命令ブロック・オフセット・アドレスとホスト命令ブロック・オフセット・アドレスの間のマッピング関係にもとづいて、ゲスト命令ブロック・オフセット・アドレスはホスト命令ブロック・オフセット・アドレスに変換される
、ことを特徴とする請求項11に記載の方法。 - ゲスト命令アドレスを含むゲスト命令ブロックの開始アドレスとゲスト命令アドレスの間のゲスト命令の総数が、初期値から順方向シフトロジックを経て数えられ、 ここで順方向シフトロジックは、各ゲスト命令を通過する時に、現行値を1ビット前方へシフトしシフト結果を得る;
ゲスト命令ブロックに対応するホスト命令ブロックの開始アドレスから始まるゲスト命令に対応する最初のホスト命令の総数はリバース・シフトロジックによって数えられ、ここでリバース・シフトロジックは、各ゲスト命令を通過する時に、シフト結果が初期値に戻るまで、現行値を1ビット反対方向へシフトする;
そして、ホスト命令に対応するブロック・オフセット・アドレスはこのときゲスト命令に対応するブロック・オフセット・アドレスである
、ことを特徴とする請求項6に記載の方法。 - スタック・レジスタ上の操作がアドレス計算によってレジスタ・ファイル上の操作に変換され、プロセッサ・コアのレジスタ・ファイルがスタック・レジスタとして用いられる
、ことを特徴とする請求項6に記載の方法。 - 1つもしくは複数のゲスト命令セットの複数の命令が1つのホスト命令セットにおける複数の命令に変換される
、ことを特徴とする請求項6に記載の方法。 - 命令セット変換システムで、以下から構成される:
ホスト命令を実行するよう設定されたプロセッサ・コア;
ゲスト命令をホスト命令へ変換し、ゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を生成するように設定されたコンバータ;
ゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を記憶し、ゲスト命令アドレスとホスト命令アドレスの間の変換を実施するように設定されたアドレス・マッピング・モジュール;
そして変換によって得られたホスト命令を記憶し、ホスト命令アドレスにもとづいてプロセッサ・コアによる実行のために該当するホスト命令を出力するように設定されたキャッシュ・メモリ。 - コンバータはさらに以下を含む:
ゲスト命令タイプとホスト命令タイプの間の対応関係、並びにゲスト命令の命令フィールドと対応するホスト命令の命令フィールドの間の対応関係、を記憶するように設定されたメモリ;
ゲスト命令をシフトとし整列するよう設定されたアライナで、ゲスト命令が命令ブロック境界を越えたとき、アライナはゲスト命令を命令ブロックまでシフトしゲスト命令を整列させる;
ゲスト命令から命令タイプを含む命令フィールドを抽出するよう設定された抽出器で、抽出された命令タイプはメモリ上でアドレス指定操作を実施するために用いられ、ホスト命令の命令タイプとゲスト命令に対応する命令変換制御情報を読み出し、命令変換制御情報をもとに抽出された命令フィールドをシフトする;
ホスト命令の命令タイプとシフトされた命令フィールドをスプライスし対応するホスト命令を形成するように設定された命令スプライサ
、ことを特徴とする請求項16に記載のシステム。 - アドレス・マッピング・モジュールはさらに以下を含む:ゲスト命令ブロックアドレスとホスト命令ブロックアドレスの間のマッピング関係を記憶し、ゲスト命令ブロックアドレスをホスト命令ブロックアドレスへ変換するよう設定されたブロックアドレス・マッピング・モジュール;
そしてゲスト命令ブロック・オフセット・アドレスとホスト命令ブロック・オフセット・アドレスの間のマッピング関係を記憶し、ゲスト命令ブロック・オフセット・アドレスをホスト命令ブロック・オフセット・アドレスへ変換するように設定されたオフセット・アドレス・マッピング・モジュール
、ことを特徴とする請求項17に記載のシステム。 - さらに以下を含む:プログラム実行フローとプロセッサ・コアからの命令実行フィードバックにもとづいて、プログラム実行フローに沿ってキャッシュ・メモリの上でアドレス指定操作を実施し、キャッシュメモリから読み出された後続命令をプロセッサ・コアへ実行のために送るように設定されたトラッカーで、そしてここでプロセッサ・コアからの命令実行フィードバックはプロセッサ・コアが分岐命令を実行したときに分岐が取られたかを表す一般的な信号である
、ことを特徴とする請求項18に記載のシステム。 - アドレス・マッピング・モジュールはさらに順方向シフトロジックとリバースシフトロジックを含む;
順方向シフトロジックはゲスト命令アドレスを含むゲスト命令ブロックの開始アドレスと初期値からのゲスト命令アドレスの間のゲスト命令の総数を数えるように設定され、各ゲスト命令を通過するときに順方向シフトロジックは現行値を1ビット前方にシフトしシフト結果を得る;
そしてリバースシフトロジックは、ゲスト命令ブロックに対応するホスト命令ブロックの開始アドレスから始まるゲスト命令に対応する最初のホスト命令の総数を数えるように設定され、リバースシフトロジックは、各ホスト命令を通過する時に、シフト結果が初期値に変わるまで、現行値を1ビット逆方向にシフトする;
そしてホスト命令に対応するブロック・オフセット・アドレスはこのときゲスト命令に対応するブロック・オフセット・アドレスである
、ことを特徴とする請求項19に記載のシステム。 - プロセッサ・コアのレジスタ・ファイルはスタック・レジスタとして用いられる;
スタック先頭ポインタ・レジスタは現行スタック先頭ポインタを記憶するように設定され、ポインタはレジスタ・ファイルのレジスタをポイントする;
加法器はスタック先頭ポインタの値と1を足し合わせるよう設定され、スタック先頭の上のレジスタの位置に対応する;
減算器はスタック先頭ポインタの値から1を引くように設定され、スタック先頭の下のレジスタの位置に対応する;
そしてスタック最下部制御モジュールはスタック・レジスタがほぼ空、もしくはほぼ満杯であるかを検出し、そこで:
スタック・レジスタがほぼ満杯のとき、スタック最下部制御モジュールはスタック最下部の少なくとも1つのレジスタ値をメモリへ送り、スタック最下部ポインタを調節し、スタック・レジスタが溢れないようにする;
もしくはスタック・レジスタがほぼ空のとき、スタック最下部制御モジュールはスタック最下部ポインタを調節し、先にメモリに記憶された少なくとも1つのレジスタ値をスタック最下部に送り、スタック・レジスタがプロセッサ・コアによる実行のためにオペランドを供給し続けるようにする
、ことを特徴とする請求項20に記載のシステム。 - レベル1キャッシュ・メモリに充填される命令は該当する命令情報を抽出するために検査される;
抽出された命令情報にもとづいて、最初のリード・ポインタが更新される
、ことを特徴とする請求項1に記載の方法。 - 最初のリード・ポインタが条件付き分岐命令へポイントし、そして条件付き分岐命令の次命令が無条件分岐命令であるとき、最初のリード・ポインタは条件付き分岐命令の実行結果にもとづいて更新される;
分岐が取られるとき、最初のリード・ポインタは条件付き分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される;
分岐が取られないとき、最初のリード・ポインタは無条件分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される;
そして、プロセッサ・コアが単一クロック・サイクルにおいて無条件分岐命令を実行する必要がない
、ことを特徴とする請求項1に記載の方法。 - さらに以下を含む:プロセッサ・コアが分岐命令を実行するとき、分岐予測にもとづいて、次の順次実行命令と分岐ターゲット命令のうち1つをプロセッサ・コアによる実行のための後続命令として選び、次の順次実行命令と分岐ターゲット命令のうちのもう一方のアドレス指定アドレスを記憶する;
分岐の結果が分岐予測と同じとき、次後続命令を実行し続ける;
そして分岐結果が分岐予測と同じでないとき、パイプラインを空にし、記憶されたアドレス指定アドレスに対応する命令の実行を再開する
、ことを特徴とする請求項1に記載の方法。 - 命令情報にもとづいて、最初のリード・ポインタが更新される
、ことを特徴とする請求項19に記載のシステム。 - 最初のリード・ポインタによってポイントされたトラック・ポイントに記憶された命令情報と次トラック・ポイントに記憶された命令情報は同時にトラック・テーブルから読み出される
、ことを特徴とする請求項19に記載のシステム。 - 最初のリード・ポインタが条件付き分岐命令にポイントし、条件付き分岐命令の次命令が無条件分岐命令であるとき、最初のリード・ポインタは条件付き分岐命令の実行結果にもとづいて更新される;
分岐が取られるとき、最初のリード・ポインタは条件付き分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される;
分岐が取られないとき、最初のリード・ポインタは無条件分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される;
そしてプロセッサ・コアは単一のクロック・サイクルにおいて無条件分岐命令を実行する必要がない
、ことを特徴とする請求項26に記載のシステム。 - トラッカーはさらに次の順次実行命令と分岐ターゲット命令のアドレス指定アドレスを記憶するように設定されるレジスタを含む;
プロセッサ・コアが分岐命令を実行するとき、分岐予測にもとづいて、次順次実行命令と分岐ターゲット命令のうちの1つがプロセッサ・コアによる実行のための後続命令として選ばれ、そして次順次実行命令と分岐ターゲット命令のもう一方のアドレス指定アドレスはトラッカーのレジスタに記憶される;
分岐実行の結果が分岐予測と同じとき、次後続命令が実行される;
そして分岐実行の結果が分岐予測と同じでないとき、パイプラインは空にされ、トラッカーのレジスタに記憶されているアドレス指定アドレスに対応する命令が実行される
、ことを特徴とする請求項19に記載のシステム。 - エンディング・トラック・ポイントがトラック・テーブルの各トラックの最後のトラック・ポイントへ追加される;
命令のエンディング・トラック・ポイントが無条件分岐命令であるとき、分岐ターゲット・アドレス指定アドレスはトラック・テーブルの次順次実行トラックの最初のトラック・ポイントに対応するアドレス指定アドレスである;
そして最初のリード・ポインタがエンディング・トラック・ポイントをポイントするとき、レベル1キャッシュ・メモリがNOP命令を出力する
、ことを特徴とする請求項19に記載のシステム。 - エンディング・トラック・ポイントがトラック・テーブルの各トラックの最後のトラック・ポイントの後に追加される;
エンディング・トラック・ポイントの命令が無条件分岐命令であるとき、分岐ターゲット・アドレス指定アドレスはトラック・テーブルの次順次実行トラックの最初のトラック・ポイントに対応するアドレス指定アドレスである;
そしてエンディング・トラック・ポイントの前のトラック・ポイントが分岐ポイントでないとき、エンディング・トラック・ポイントの命令タイプと分岐ターゲット・アドレス指定アドレスが、それぞれエンディング・トラック・ポイントの前のトラック・ポイントの命令タイプとアドレス指定アドレスとして用いられる
、ことを特徴とする請求項29に記載のシステム。 - 1つもしくは複数の命令セットを実行するプロセッサ・システムで、以下から構成される:
第1命令セットに属する複数のコンピュータ命令を記憶するように設定された第1メモリ;
第1命令セットに属する複数のコンピュータ命令を、第2命令セットに属する複数のホスト命令へ変換するように設定された命令コンバータ;
命令コンバータによって変換された複数のホスト命令を記憶するように設定された第2メモリ;
そして第2メモリから直接複数のホスト命令を取り出し、複数のコンピュータ命令を参照することなくそして命令コンバータを用いること無しに、複数のホスト命令を実行するように設定された第2メモリとカップルされたプロセッサ・コア。 - 命令コンバータは、設定にもとづいて第1命令セットと第2命令セットの間のマッピング関係を記憶するように設定されたメモリを含む;
そして記憶された第1命令セットと第2命令セットの間のマッピング関係にもとづいて、命令コンバータは第1命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する
、ことを特徴とする請求項31に記載のシステム。 - さらに以下を含む:命令コンバータとプロセッサ・コアにカップルされたアドレス・コンバータで、第1命令セットに属する複数のコンピュータ命令の複数のターゲット・コンピュータ命令のアドレスを、第2命令セットに属する複数のホスト命令の複数のターゲット命令のホストアドレスへ変換するように設定される
、ことを特徴とする請求項31、32に記載のシステム。 - アドレス・コンバータがアドレスを変換するとき、アドレス・コンバータはさらに以下のように設定される: ターゲット・コンピュータ命令アドレスをホスト命令ブロック・アドレスにマップする;
ターゲット・コンピュータ命令アドレスを、ホスト命令を含む命令ブロックのアドレスに対応する命令ブロックのホスト・ブロック・オフセット・アドレスへマップする;
そしてホスト命令ブロック・アドレスとホスト・ブロック・オフセット・アドレスを組み合わせてホスト命令アドレスを形成する
、ことを特徴とする請求項33に記載のシステム。 - コンピュータ命令ブロック・アドレスとホスト命令ブロック・アドレスの間のブロック・アドレス・マッピング関係にもとづいて、ホスト命令ブロック・アドレスが生成される
、ことを特徴とする請求項34に記載のシステム。 - アドレス・コンバータがブロック・アドレス・マッピング関係を記憶する
、ことを特徴とする請求項35に記載のシステム。 - マッピング関係テーブルにもとづいて、ハードウェア・ロジックがホスト・ブロック・オフセット・アドレスを生成する
、ことを特徴とする請求項35に記載のシステム。 - さらに以下を含む:ホスト命令ブロックのエンディング命令のホスト命令アドレスを記憶するように設定されたエンディング・フラッグ・メモリ、ここでエンディング命令はアドレス順における次ホスト命令ブロックの前の最後のホスト命令である
、ことを特徴とする請求項34に記載のシステム。 - さらに以下を含む:アドレス順における次ホスト命令ブロックのブロック・アドレスを記憶するように設定された次ブロックアドレス・メモリ
、ことを特徴とする請求項34に記載のシステム。 - さらに以下を含む:分岐ターゲットのホスト命令アドレスを記憶するように設定された分岐ターゲット・バッファ
、ことを特徴とする請求項34に記載のシステム。 - 第1メモリがさらに第3命令セットに属する複数のコンピュータ命令を記憶するように設定されている;
命令コンバータのメモリがさらに設定にもとづいて第3命令セットと第2命セットの間のマッピング関係を記憶するように設定されている;
そして記憶された第3命令セットと第2命令セットの間のマッピング関係にもとづいて、命令コンバータは第3命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する
、ことを特徴とする請求項32に記載のシステム。 - システムは第1スレッド命令シーケンスと第2スレッド命令シーケンスを走らせる;
第1スレッド命令シーケンスは第1命令セットの複数のコンピュータ命令から構成される;
命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と第3命令セットと第2命令セットとの間のマッピング関係を設定にもとづいてメモリに記憶する;
そして命令シーケンスのスレッド数にもとづいて、命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と第3命令セットと第2命令セットの間のマッピング関係のうちの1つを選び、スレッドの複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する
、ことを特徴とする請求項41に記載のシステム。 - 複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ;
複数ホスト命令の各ホスト命令が少なくとも命令タイプを含む命令フィールドを持つ;
複数コンピュータ命令と複数ホスト命令は一対一対応をしている;
マッピング関係は、各コンピュータ命令の命令タイプと各ホスト命令の命令タイプとの間のマッピング関係と、各コンピュータ命令に含まれる命令タイプ以外の命令フィールドと各ホスト命令に含まれるの命令タイプ以外の命令フィールドの間のマッピング関係とを含む
、ことを特徴とする請求項32に記載のシステム。 - 複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ;
複数ホスト命令の各ホスト命令が少なくとも命令タイプを含む命令フィールドを持つ;
複数コンピュータ命令の総数が複数ホスト命令の総数と等しくない;
そして複数コンピュータ命令の各コンピュータ命令が、1つもしくはより多くの複数ホスト命令のホスト命令へマップされる;
、ことを特徴とする請求項32に記載のシステム。 - コンピュータ命令の命令フィールドは少なくとも命令タイプを含む;
そして命令コンバータは命令コンバータのメモリにおいて、少なくとも命令タイプを用いてアドレス指定操作を実施し、該当するマッピング関係を読み出す
、ことを特徴とする請求項43、44に記載のシステム。 - マッピング関係はシフト・ロジックを含む;
そして複数ホスト命令の1つの少なくとも1つの命令フィールドが、対応するコンピュータ命令の該当する命令フィールドをシフトすることによって生成される
、ことを特徴とする請求項45に記載のシステム。 - プロセッサ・システムによって1つもしくはより多くの命令セットを実行する方法で、以下を含む:
第1命令セットに属する複数のコンピュータ命令を第1メモリに記憶する;
第1命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ命令コンバータによって変換する;
命令コンバータによって変換された複数のホスト命令を第2メモリへ記憶する;
そして第2メモリから複数のホスト命令を直接取り出し、第2メモリとカップルされたプロセッサ・コアによって複数のホスト命令を、複数のコンピュータ命令を参照せず命令コンバータを用いることなく、実行する。 - 命令コンバータは第1命令セットと第2命令セットの間のマッピング関係を命令コンバータ内のメモリに記憶することで設定されている;
そして記憶された第1命令セットと第2命令セットの間のマッピング関係にもとづいて、第1命令セットに属する複数のコンピュータ命令が第2命令セットに属する複数のホスト命令へ変換される
、ことを特徴とする請求項47に記載の方法。 - 命令コンバータとプロセッサ・コアにカップルされたアドレス・コンバータが、第1命令セットに属する複数コンピュータ命令の複数のターゲット・コンピュータ命令のアドレスを、第2命令セットに属する複数ホスト命令の複数のターゲット命令のホストアドレスへ変換する
、ことを特徴とする請求項47、48に記載の方法。 - アドレス・コンバータがアドレスを変換するとき、さらに以下を含む:
ターゲット・コンピュータ命令アドレスをホスト命令ブロック・アドレスへマップする;
ターゲット・コンピュータ命令アドレスを、ホスト命令を含む命令ブロックのアドレスに対応する命令ブロックのホスト・ブロック・オフセット・アドレスへマップする;
そしてホスト命令ブロック・アドレスをホスト・ブロック・オフセット・アドレスと組み合わせてホスト命令アドレスを形成する
、ことを特徴とする請求項49に記載の方法。 - コンピュータ命令ブロック・アドレスとホスト命令ブロック・アドレスの間のブロック・アドレス・マッピング関係にもとづいて、ホスト・ブロック・アドレスが生成される
、ことを特徴とする請求項50に記載の方法。 - アドレス・コンバータはブロック・アドレス・マッピング関係を記憶する
、ことを特徴とする請求項51に記載の方法。 - マッピング関係テーブルにもとづいて、ハードウェア・ロジックはホスト・ブロック・オフセット・アドレスを生成する
、ことを特徴とする請求項51に記載の方法。 - さらに以下を含む:エンディング・フラッグ・メモリによって、ホスト命令ブロックのエンディング命令のホスト命令アドレスを記憶し、ここでエンディング命令はアドレス順の次のホスト命令ブロックの前の最後のホスト命令である
、ことを特徴とする請求項50に記載の方法。 - さらに以下を含む:次ブロック・アドレス・メモリによって、アドレス順の次ホスト命令ブロックのブロック・アドレスを記憶する
、ことを特徴とする請求項50に記載の方法。 - さらに以下を含む:分岐ターゲットバッファによって、分岐ターゲットのホスト命令アドレスを記憶する
、ことを特徴とする請求項50に記載の方法。 - 第3命令セットに属する複数のコンピュータ命令が第1メモリに記憶される;
命令コンバータは第3命令セットと第2命令セットの間のマッピング関係を設定にもとづいてメモリに記憶する;
そして第3命令セットと第2命令セットの間の記憶されたマッピング関係にもとづいて、命令コンバータは第3命令セットに属する複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する
、ことを特徴とする請求項48に記載の方法。 - さらに以下を含む: 第1スレッド命令シーケンスと第2スレッド命令シーケンスが走り、ここで:
第1スレッド命令シーケンスは第1命令セットの複数のコンピュータ命令によって構成されている;
第2スレッド命令シーケンスは第3命令セットの複数のコンピュータ命令によって構成されている;
命令コンバータは第1命令セットと第2命令セットの間のマッピング関係と、第3命令セットと第2命令セットの間のマッピング関係を設定にもとづいてメモリに記憶する;
そして命令シーケンスのスレッド番号にもとづいて、命令コンバータは、第1命令セットと第2命令セットの間のマッピング関係と、第3命令セットと第2命令セットの間のマッピング関係のうちの1つを選び、スレッドの複数のコンピュータ命令を第2命令セットに属する複数のホスト命令へ変換する
、ことを特徴とする請求項57に記載の方法。 - 複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ;
複数ホスト命令の各ホスト命令は少なくとも命令タイプを含む命令フィールドを持つ;
複数コンピュータ命令と複数ホスト命令は一対一対応をしている;
そしてマッピング関係は、各コンピュータ命令の命令タイプと各ホスト命令の命令タイプの間のマッピング関係と、各コンピュータ命令に含まれている命令タイプ以外の命令フィールドと各ホスト命令に含まれている命令タイプ以外の命令フィールドの間のマッピング関係を含む
、ことを特徴とする請求項48に記載の方法。 - 複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ;
複数ホスト命令の各ホスト命令は少なくとも命令タイプを含む命令フィールドを持つ;
複数コンピュータ命令の総数は複数ホスト命令の総数に等しくない;
そして複数コンピュータ命令の各コンピュータ命令は複数ホスト命令の1つもしくはそれ以上のホスト命令へマップされる
、ことを特徴とする請求項48に記載の方法。 - コンピュータ命令の命令フィールドが少なくとも1つの命令タイプを含む;
そして命令コンバータが少なくとも命令タイプを用いて命令コンバータ内のメモリにおいてアドレス指定操作を行ない、該当するマッピング関係を読み出す
、ことを特徴とする請求項59もしくは60に記載の方法。 - さらに以下を含む:複数ホスト命令も少なくとも1つのホスト命令の1つの命令フィールドを対応するコンピュータ命令の該当する命令フィールドをシフトすることによって生成する
、ことを特徴とする請求項61に記載の方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310625156 | 2013-11-27 | ||
CN201310625156.4 | 2013-11-27 | ||
CN201310737869.XA CN104679480A (zh) | 2013-11-27 | 2013-12-24 | 一种指令集转换系统和方法 |
CN201310737869.X | 2013-12-24 | ||
PCT/CN2014/092313 WO2015078380A1 (zh) | 2013-11-27 | 2014-11-26 | 一种指令集转换系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2016539423A true JP2016539423A (ja) | 2016-12-15 |
JP6591978B2 JP6591978B2 (ja) | 2019-10-16 |
Family
ID=53198376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016534248A Active JP6591978B2 (ja) | 2013-11-27 | 2014-11-26 | 命令セット変換システム及び方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10387157B2 (ja) |
EP (1) | EP3076288A4 (ja) |
JP (1) | JP6591978B2 (ja) |
KR (1) | KR20160130741A (ja) |
CN (1) | CN104679480A (ja) |
WO (1) | WO2015078380A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022046413A (ja) * | 2020-09-10 | 2022-03-23 | ウェスタン デジタル テクノロジーズ インコーポレーテッド | 記憶デバイスのための改良された先読み能力 |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2014151652A1 (en) * | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
CN109358948B (zh) | 2013-03-15 | 2022-03-25 | 英特尔公司 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
EP3001313A1 (de) * | 2014-09-23 | 2016-03-30 | dSPACE digital signal processing and control engineering GmbH | Verfahren zur Simulation eines Anwendungsprogramms eines elektronischen Steuergeräts auf einem Computer |
TWI601059B (zh) * | 2015-11-19 | 2017-10-01 | 慧榮科技股份有限公司 | 資料儲存裝置與資料儲存方法 |
EP3173935B1 (en) * | 2015-11-24 | 2018-06-06 | Stichting IMEC Nederland | Memory access unit |
US10318356B2 (en) * | 2016-03-31 | 2019-06-11 | International Business Machines Corporation | Operation of a multi-slice processor implementing a hardware level transfer of an execution thread |
CN106775587B (zh) * | 2016-11-30 | 2020-04-14 | 上海兆芯集成电路有限公司 | 计算机指令的执行方法以及使用此方法的装置 |
US10713750B2 (en) * | 2017-04-01 | 2020-07-14 | Intel Corporation | Cache replacement mechanism |
US10325341B2 (en) | 2017-04-21 | 2019-06-18 | Intel Corporation | Handling pipeline submissions across many compute units |
CN107220103A (zh) * | 2017-05-27 | 2017-09-29 | 郑州云海信息技术有限公司 | 一种宿主物理机的cpu加速方法及装置 |
CN109101275B (zh) * | 2018-06-26 | 2021-07-23 | 飞腾技术(长沙)有限公司 | 一种基于移位的指令提取与缓冲方法及超标量微处理器 |
CN109388429B (zh) * | 2018-09-29 | 2024-01-02 | 古进 | Mhp异构多流水线处理器的任务分发方法 |
CN111984323A (zh) * | 2019-05-21 | 2020-11-24 | 三星电子株式会社 | 将微操作分配到微操作高速缓存器的处理设备及其操作方法 |
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
CN110704213B (zh) * | 2019-10-10 | 2020-07-10 | 北京航空航天大学 | 一种数字孪生数据虚实高效实时交互方法和系统 |
CN110989408A (zh) * | 2019-12-09 | 2020-04-10 | 深圳市康冠商用科技有限公司 | 一种设备控制方法、装置、设备及可读存储介质 |
CN111414199B (zh) * | 2020-04-03 | 2022-11-08 | 中国人民解放军国防科技大学 | 一种指令融合的实现方法及装置 |
CN113535231B (zh) * | 2020-04-17 | 2024-09-20 | 中科寒武纪科技股份有限公司 | 减少指令跳转的方法及装置 |
CN111913745B (zh) * | 2020-08-28 | 2022-06-28 | 中国人民解放军国防科技大学 | 一种嵌入式多指令集处理器设计方法 |
US11366774B2 (en) * | 2020-09-24 | 2022-06-21 | Adesto Technologies Corporation | Memory latency reduction in XIP mode |
CN112564686B (zh) * | 2020-11-12 | 2023-08-15 | 东南大学 | 基于动态电路的大扇入独热码数据选择器电路 |
CN112559039B (zh) * | 2020-12-03 | 2022-11-25 | 类人思维(山东)智慧科技有限公司 | 一种计算机编程用指令集生成方法及系统 |
US20220318015A1 (en) * | 2021-03-31 | 2022-10-06 | Advanced Micro Devices, Inc. | Enforcing data placement requirements via address bit swapping |
CN115827063B (zh) * | 2023-02-16 | 2023-06-13 | 沐曦集成电路(南京)有限公司 | 一种基于Fill Constant指令的写存储系统及方法 |
CN118426840A (zh) * | 2024-01-23 | 2024-08-02 | 合芯科技(苏州)有限公司 | 指令集处理系统、方法及电子设备 |
CN118069224B (zh) * | 2024-04-19 | 2024-08-16 | 芯来智融半导体科技(上海)有限公司 | 地址生成方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0683615A (ja) * | 1992-09-02 | 1994-03-25 | Fujitsu Ltd | 命令セットエミュレーションを行う計算機 |
JP2002063031A (ja) * | 2000-08-18 | 2002-02-28 | Fainaaku Kk | アーキテクチャ切替え・再構成対応プロセッサ |
JP2005539321A (ja) * | 2002-09-20 | 2005-12-22 | エイアールエム リミテッド | データ処理システムの外部および内部命令セット |
JP2008536240A (ja) * | 2005-04-15 | 2008-09-04 | アトメル・コーポレイション | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス |
US20110238917A1 (en) * | 2009-12-25 | 2011-09-29 | Shanghai Xin Hao Micro Electronics Co. Ltd. | High-performance cache system and method |
WO2012103367A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2367915B (en) * | 2000-10-09 | 2002-11-13 | Siroyan Ltd | Instruction sets for processors |
US7251811B2 (en) * | 2002-01-02 | 2007-07-31 | Intel Corporation | Controlling compatibility levels of binary translations between instruction set architectures |
US7966474B2 (en) * | 2008-02-25 | 2011-06-21 | International Business Machines Corporation | System, method and computer program product for translating storage elements |
US8479196B2 (en) * | 2009-09-22 | 2013-07-02 | International Business Machines Corporation | Nested virtualization performance in a computer system |
US9141388B2 (en) * | 2009-12-25 | 2015-09-22 | Shanghai Xin Hao Micro Electronics Co., Ltd. | High-performance cache system and method |
US9280398B2 (en) * | 2012-01-31 | 2016-03-08 | International Business Machines Corporation | Major branch instructions |
CN103235724A (zh) * | 2013-05-10 | 2013-08-07 | 中国人民解放军信息工程大学 | 基于原子操作语义描述的多源二进制代码一体化翻译方法 |
US10474465B2 (en) * | 2014-05-01 | 2019-11-12 | Netronome Systems, Inc. | Pop stack absolute instruction |
US9946538B2 (en) * | 2014-05-12 | 2018-04-17 | Intel Corporation | Method and apparatus for providing hardware support for self-modifying code |
-
2013
- 2013-12-24 CN CN201310737869.XA patent/CN104679480A/zh active Pending
-
2014
- 2014-11-26 JP JP2016534248A patent/JP6591978B2/ja active Active
- 2014-11-26 US US15/100,250 patent/US10387157B2/en active Active
- 2014-11-26 KR KR1020167017252A patent/KR20160130741A/ko not_active Application Discontinuation
- 2014-11-26 EP EP14865998.0A patent/EP3076288A4/en not_active Withdrawn
- 2014-11-26 WO PCT/CN2014/092313 patent/WO2015078380A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0683615A (ja) * | 1992-09-02 | 1994-03-25 | Fujitsu Ltd | 命令セットエミュレーションを行う計算機 |
JP2002063031A (ja) * | 2000-08-18 | 2002-02-28 | Fainaaku Kk | アーキテクチャ切替え・再構成対応プロセッサ |
JP2005539321A (ja) * | 2002-09-20 | 2005-12-22 | エイアールエム リミテッド | データ処理システムの外部および内部命令セット |
JP2008536240A (ja) * | 2005-04-15 | 2008-09-04 | アトメル・コーポレイション | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス |
US20110238917A1 (en) * | 2009-12-25 | 2011-09-29 | Shanghai Xin Hao Micro Electronics Co. Ltd. | High-performance cache system and method |
WO2012103367A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022046413A (ja) * | 2020-09-10 | 2022-03-23 | ウェスタン デジタル テクノロジーズ インコーポレーテッド | 記憶デバイスのための改良された先読み能力 |
JP7170093B2 (ja) | 2020-09-10 | 2022-11-11 | ウェスタン デジタル テクノロジーズ インコーポレーテッド | 記憶デバイスのための改良された先読み能力 |
Also Published As
Publication number | Publication date |
---|---|
WO2015078380A1 (zh) | 2015-06-04 |
KR20160130741A (ko) | 2016-11-14 |
EP3076288A4 (en) | 2018-03-07 |
US10387157B2 (en) | 2019-08-20 |
CN104679480A (zh) | 2015-06-03 |
US20170003967A1 (en) | 2017-01-05 |
EP3076288A1 (en) | 2016-10-05 |
JP6591978B2 (ja) | 2019-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6591978B2 (ja) | 命令セット変換システム及び方法 | |
CN104679481B (zh) | 一种指令集转换系统和方法 | |
US10042643B2 (en) | Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor | |
US11467839B2 (en) | Unified register file for supporting speculative architectural states | |
US9921842B2 (en) | Guest instruction block with near branching and far branching sequence construction to native instruction block | |
KR100431168B1 (ko) | 단일 클럭 사이클 내에 불연속 명령을 페치하기 위한 방법 및 시스템 | |
US6339822B1 (en) | Using padded instructions in a block-oriented cache | |
US6185675B1 (en) | Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks | |
KR101503554B1 (ko) | 에일리어스 어드레싱을 이용한 가변 길이 인스트럭션 인코딩의 구현 | |
JP3794917B2 (ja) | 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ | |
US20150186293A1 (en) | High-performance cache system and method | |
US9207960B2 (en) | Multilevel conversion table cache for translating guest instructions to native instructions | |
TWI512465B (zh) | 客戶至本機區塊位址映射與本機碼儲存之管理 | |
KR102546238B1 (ko) | 다중 테이블 분기 타겟 버퍼 | |
US20180129607A1 (en) | Variable caching structure for managing physical storage | |
JP6467605B2 (ja) | 命令処理システムと方法 | |
US9753855B2 (en) | High-performance instruction cache system and method | |
US20190065205A1 (en) | Variable length instruction processor system and method | |
KR100603067B1 (ko) | 분기 예측의 타입을 분류하기 위해 복귀 선택 비트들을 이용하는 분기 예측 | |
US5881258A (en) | Hardware compatibility circuit for a new processor architecture | |
KR20110074323A (ko) | 동적 암시 어드레싱 모드를 지원하는 파이프라인 방식의 프로세서 | |
EP0912928A1 (en) | A data address prediction structure utilizing a stride prediction method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20171127 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20181031 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20181204 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20190301 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20190822 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20190919 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6591978 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |