(57)【特許請求の範囲】
【請求項１】
プロセッサ・システムが実行する命令変換方法であって、
ゲスト命令セットとホスト命令セットとの間の変換規則を定義することと、
前記変換規則を第１のメモリに格納することと、
前記第１のメモリに格納された前記変換規則を用いて、複数のゲスト命令を複数の対応するホスト命令に変換することと、
変換から得られた前記複数のホスト命令の各々を１つまたは複数の命令ブロックの命令メモリに格納することであって、命令ブロックは、ブロックアドレスと呼ばれるメモリアドレスの同じ上位ビット部分を有する複数の命令であり、メモリアドレスの下位ビット部分はブロック・オフセットと呼ばれる、ことと、
少なくとも、前記ゲスト命令のブロック・オフセットと対応するホスト命令のブロック・オフセットとの間のマッピング関係を第２のメモリに格納することと、
プロセッサコアによって実行されるゲスト命令のアドレスを生成することと、
実行される前記ゲスト命令のアドレスのブロックアドレスを、前記命令メモリのアドレスの対応するブロックアドレスにマッピングすることと、
前記第２のメモリに格納されたブロック・オフセットのマッピング関係を用いて、実行される前記ゲスト命令のアドレスのブロック・オフセットを、対応するブロック・オフセットにマッピングすることと、
前記命令メモリのアドレスの対応するブロックアドレスと前記命令メモリのアドレスの対応するブロック・オフセットとによって前記命令メモリをアドレス指定し、前記ゲスト命令に対応するホスト命令を提供することと、
前記プロセッサコアによって前記ゲスト命令に対応する前記ホスト命令を実行することと、
を含む、方法。
【請求項２】
変換中にゲスト命令から命令タイプを抽出することと、
前記命令タイプおよび前記変換規則を用いて、前記ゲスト命令から１つまたは複数の命令フィールドを抽出しマッピングすることと、
前記ゲスト命令から抽出されマッピングされた１つまたは複数の命令フィールドを付与して、対応するホスト命令を形成することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記変換規則は複数のセットの変換規則を含み、各セットは前記第１のメモリ内のそれ自身のメモリ空間に格納され、
変換規則の各セットのメモリ空間の開始アドレスを記録することと、
対応する開始アドレスを用いて、前記第１のメモリからの前記複数のセットの変換規則から所望の変換規則のセットを選択することと、
前記選択された所望の変換規則のセットを用いて、前記ゲスト命令を対応するホスト命令に変換することと、
をさらに含む、請求項２に記載の方法。
【請求項４】
スレッドのスレッド番号と前記スレッドの前記ゲスト命令セットとの間の関係を記録することと、
前記スレッド番号に基づいて、前記スレッドの前記ゲスト命令セットのための所望の変換規則のセットを自動的に選択することと、
前記選択された所望の変換規則のセットに基づいて、前記スレッドのゲスト命令をホスト命令に変換することと、
をさらに含む、請求項３に記載の方法。
【請求項５】
同一のプロセッサコアによって複数のゲスト命令セットのゲスト命令を実行することと、
前記同一のプロセッサコア上で複数の仮想マシンを動作させることであって、各仮想マシンは異なるまたは同じ命令セットの命令を実行する、ことと、
をさらに含む、請求項１に記載の方法。
【請求項６】
ゲスト命令ブロックをホスト命令ブロックに変換することと、
前記ホスト命令ブロックのブロックアドレスが変換されるゲスト命令ブロックのブロックアドレスに対応するように、命令変換から前記ホスト命令ブロックを前記命令メモリに格納することと、
ゲスト命令アドレスのブロックアドレスを用いて、ホスト命令ブロックをアドレス指定することと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記命令メモリ内のホスト命令ブロック内の最後のホスト命令の位置を記録することと、
前記プロセッサコアがホスト命令ブロック内の前記最後のホスト命令ではないホスト命令を実行するとき、前記ホスト命令ブロックのブロックアドレスを新しいブロックアドレスとして変更せずに、前記ホスト命令ブロックのブロック・オフセットを、新しい分岐オフセットとしてホスト命令の長さだけ増加させることと、
前記プロセッサコアがホスト命令ブロック内の最後のホスト命令を実行するとき、次のホスト命令ブロックのブロックアドレスを新しいブロックアドレスとして提供し、前記次のホスト命令ブロックの最初のホスト命令のブロック・オフセットを新しいブロック・オフセットとして提供することと、
分岐が行われない場合は、新しいブロックアドレスと新しいブロック・オフセットとを用いて前記命令メモリをアドレス指定することと、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記プロセッサコアが分岐ホスト命令を実行するとき、分岐オフセットと対応する分岐ゲスト命令のアドレスとの合計を用いて分岐ターゲットアドレスを計算することと、
前記分岐ターゲットアドレスのブロックアドレスを用いて、記録されたブロック・オフセットのマッピング関係を選択することと、
前記選択されたブロック・オフセットのマッピング関係を用いて、前記分岐ターゲットアドレスのブロック・オフセットをホストブロック・オフセットにマッピングすることと、
前記分岐ターゲットアドレスのブロックアドレスおよび前記マッピングされたホストブロック・オフセットを用いて、分岐が行われるときに前記命令メモリをアドレス指定することと、
をさらに含む、請求項６に記載の方法。
【請求項９】
所与のゲスト命令と前記ゲスト命令ブロックの終わりとの間のゲスト命令の数をカウントすることと、
前記ホスト命令ブロックの対応する終わりから始まるゲスト命令に対応する単一または複数のホスト命令のうち同数の第１のホスト命令をカウントすることと、
を含み、最後にカウントされた前記第１のホスト命令のブロック・オフセットは、対応するホスト命令のブロック・オフセットである、請求項８に記載の方法。
【請求項１０】
分岐命令アドレスおよびホスト分岐ターゲットアドレスのペアを分岐予測フラグとともに分岐ターゲットバッファ（ＢＴＢ）に格納することであって、前記ホスト分岐ターゲットアドレスは、分岐ターゲットアドレスのブロックアドレスと、前記ブロック・オフセットのマッピング関係を用いてマッピングされたホストブロック・オフセットのフォーマットである、ことと、
前記ＢＴＢがヒットしないとき、または前記分岐予測フラグがとられないとき、前記プロセッサコアが生成したアドレスを用いて前記命令メモリをアドレス指定することと、
前記ＢＴＢがヒットし、前記分岐予測フラグがとられるとき、前記ＢＴＢが提供する前記ホスト分岐ターゲットアドレスを用いて命令メモリをアドレス指定することと、
をさらに含む、請求項８に記載の方法。
【請求項１１】
ゲスト分岐命令に埋め込まれたブロック・オフセットと分岐オフセットとの合計として補償された分岐オフセットを計算することと、
前記ゲスト分岐命令に対応する分岐ホスト命令内に、前記補償された分岐オフセットを埋め込むことと、
前記補償された分岐オフセットと前記分岐ホスト命令のブロックアドレスとの合計を用いて、前記分岐ターゲットアドレスを計算することと、
をさらに含む、請求項８に記載の方法。
【請求項１２】
命令変換中に各分岐ゲスト命令を検出することと、
分岐オフセットと前記分岐ゲスト命令のアドレスとの合計を用いて、分岐ターゲットアドレスを計算することと、
前記分岐ターゲットアドレスのブロックアドレスを用いて、記録されたブロック・オフセットのマッピング関係を選択することと、
前記選択されたブロック・オフセットのマッピング関係を用いて、前記分岐ターゲットアドレスのブロック・オフセットをホストブロック・オフセットにマッピングすることと、
前記分岐ターゲットアドレスのブロックアドレスと前記ホストブロック・オフセットとをトラックテーブルに格納することと、
分岐が行われるとき、前記トラックテーブルに格納された前記分岐ターゲットアドレスのブロックアドレスおよび前記ホストブロック・オフセットを用いて前記命令メモリをアドレス指定することと、
をさらに含む、請求項１に記載の方法。
【請求項１３】
ホスト命令ブロック内の最後のホスト命令に対応して前記トラックテーブルによって２つのアドレスを提供することであって、一方は分岐ターゲットアドレスであり、他方は順次次のホスト命令ブロックの最初のホスト命令のアドレスである、ことと、
ホスト命令ブロック内の前記最後のホスト命令が分岐命令であり、分岐が行われるとき、前記トラックテーブルから前記分岐ターゲットアドレスを提供して前記命令メモリをアドレス指定することと、
ホスト命令ブロック内の前記最後のホスト命令が分岐命令でないとき、またはホスト命令ブロック内の前記最後のホスト命令が分岐命令であるが分岐が行われないとき、順次次のホスト命令の最初のホスト命令のアドレスを提供し、前記命令メモリをアドレス指定することと、
をさらに含む、請求項１２に記載の方法。
【請求項１４】
ゲスト命令ブロックアドレスとホスト命令ブロックアドレスとの間のマッピング関係を抽出することと、
ゲスト命令ブロック・オフセットとホスト命令ブロック・オフセットとの間のマッピング関係を抽出することと、
ゲスト命令アドレスとホスト命令アドレスとの間のマッピング関係を格納することと、
ゲスト命令ブロックアドレスとゲスト命令ブロック・オフセットとの両方の順序で、ホスト命令ブロックアドレスをソートすることと、
をさらに含む、請求項１に記載の方法。
【請求項１５】
未格納のホスト命令に対応するゲスト命令アドレスのブロックアドレスおよびブロック・オフセットに基づいて、ソートされたホスト命令ブロックアドレスに、未格納のホスト命令のブロックアドレスを加算することと、
ゲスト命令ブロック内のゲスト命令のブロック・オフセットとホスト命令ブロック内のホスト命令のブロック・オフセットとの間のマッピング関係を前記第２のメモリに記録することと、
をさらに含む、請求項１４に記載の方法。
【請求項１６】
前記ホスト命令ブロックアドレスが既にデータ構造に記録されている場合、ゲスト命令アドレスのブロックアドレスおよびブロック・オフセットを用いて、ホスト命令のブロックアドレスを読み出すこと
をさらに含む、請求項１５に記載の方法。
【請求項１７】
前記ホスト命令のブロックアドレスを用いて、前記第２のメモリからブロック・オフセットのマッピング関係を選択することと、
前記選択されたブロック・オフセットのマッピング関係を用いて、前記ゲスト命令のブロック・オフセットをホスト命令アドレスの対応するブロック・オフセットにマッピングすることと、
ホスト命令アドレスのブロックアドレスおよびブロック・オフセットを用いて、前記命令メモリをアドレス指定して、前記プロセッサコアに命令を提供することと、
をさらに含む、請求項１６に記載の方法。
【請求項１８】
所与のゲスト命令と、ホスト命令ブロックの開始ホスト命令に対応する開始ゲスト命令との間のゲスト命令の数をカウントすることと、
ゲスト命令に対応する単一または複数のホスト命令のうち同数の第１のホスト命令をカウントすることと、
を含み、最後にカウントされた前記第１のホスト命令のブロック・オフセットは、対応するホスト命令のブロック・オフセットである、請求項１７に記載の方法。
【請求項１９】
レジスタファイル内のレジスタを指すトップ・オブ・スタックポインタを記録することによって、前記プロセッサコア内の前記レジスタファイルをスタックとして機能するように構成することと、
前記スタックが満杯であると判定されるとき、データを前記スタックからデータメモリに移動することと、
前記スタックが空であると判定されるとき、データを前記データメモリから前記スタックに移動することと、
をさらに含む、請求項１に記載の方法。
【請求項２０】
修正されたホスト命令セットの修正されたホスト命令が前記トップ・オブ・スタックポインタの移動を制御するように、ホスト命令の定義を修正することと、
スタックオペレーションゲスト命令セットのゲスト命令を前記修正されたホスト命令セットの前記修正されたホスト命令に変換することと、
スタックプッシュを実行するとき、前記修正されたホスト命令を用いて、前記トップ・オブ・スタックポインタをレジスタファイル内の上位レジスタにポイントすることと、
スタックポップを実行するとき、前記修正されたホスト命令を用いて、前記トップ・オブ・スタックポインタをレジスタファイル内の下位レジスタにポイントすることと、
をさらに含む、請求項１９に記載の方法。
【請求項２１】
命令変換システムであって、
ゲスト命令セットとホスト命令セットとの間の変換規則を定義する手段と、
前記変換規則を第１のメモリに格納する手段と、
前記第１のメモリに格納された前記変換規則を用いて、複数のゲスト命令を複数の対応するホスト命令に変換する手段と、
変換から得られた前記複数のホスト命令の各々を１つまたは複数の命令ブロックの命令メモリに格納する手段であって、命令ブロックは、ブロックアドレスと呼ばれるメモリアドレスの同じ上位ビット部分を有する複数の命令であり、メモリアドレスの下位ビット部分はブロック・オフセットと呼ばれる、手段と、
少なくとも、前記ゲスト命令のブロック・オフセットと対応するホスト命令のブロック・オフセットとの間のマッピング関係を第２のメモリに格納する手段と、
プロセッサコアによって実行されるゲスト命令のアドレスを生成する手段と、
実行される前記ゲスト命令のアドレスのブロックアドレスを、前記命令メモリのアドレスの対応するブロックアドレスにマッピングする手段と、
前記第２のメモリに格納されたブロック・オフセットのマッピング関係を用いて、実行される前記ゲスト命令のアドレスのブロック・オフセットを、対応するブロック・オフセットにマッピングする手段と、
前記命令メモリのアドレスの対応するブロックアドレスと前記命令メモリのアドレスの対応するブロック・オフセットとによって前記命令メモリをアドレス指定し、前記ゲスト命令に対応するホスト命令を提供する手段と、
前記プロセッサコアによって前記ゲスト命令に対応する前記ホスト命令を実行する手段と、
を含む、システム。
【請求項２２】
変換中にゲスト命令から命令タイプを抽出する手段と、
前記命令タイプおよび前記変換規則を用いて、前記ゲスト命令から１つまたは複数の命令フィールドを抽出しマッピングする手段と、
前記ゲスト命令から抽出されマッピングされた１つまたは複数の命令フィールドを付与して、対応するホスト命令を形成する手段と、
をさらに含む、請求項２１に記載のシステム。
【請求項２３】
前記変換規則は複数のセットの変換規則を含み、各セットは前記第１のメモリ内のそれ自身のメモリ空間に格納され、
変換規則の各セットのメモリ空間の開始アドレスを記録する手段と、
対応する開始アドレスを用いて、前記第１のメモリからの前記複数のセットの変換規則から所望の変換規則のセットを選択する手段と、
前記選択された所望の変換規則のセットを用いて、前記ゲスト命令を対応するホスト命令に変換する手段と、
をさらに含む、請求項２２に記載のシステム。
【請求項２４】
スレッドのスレッド番号と前記スレッドの前記ゲスト命令セットとの間の関係を記録する手段と、
前記スレッド番号に基づいて、前記スレッドの前記ゲスト命令セットのための所望の変換規則のセットを自動的に選択する手段と、
前記選択された所望の変換規則のセットに基づいて、前記スレッドのゲスト命令をホスト命令に変換する手段と、
をさらに含む、請求項２３に記載のシステム。
【請求項２５】
同一のプロセッサコアによって複数のゲスト命令セットのゲスト命令を実行する手段と、
前記同一のプロセッサコア上で複数の仮想マシンを動作させる手段であって、各仮想マシンは異なるまたは同じ命令セットの命令を実行する、手段と、
をさらに含む、請求項２１に記載のシステム。
【請求項２６】
ゲスト命令ブロックをホスト命令ブロックに変換する手段と、
前記ホスト命令ブロックのブロックアドレスが変換されるゲスト命令ブロックのブロックアドレスに対応するように、命令変換から前記ホスト命令ブロックを前記命令メモリに格納する手段と、
ゲスト命令アドレスのブロックアドレスを用いて、ホスト命令ブロックをアドレス指定する手段と、
をさらに含む、請求項２１に記載のシステム。
【請求項２７】
前記命令メモリ内のホスト命令ブロック内の最後のホスト命令の位置を記録する手段と、
前記プロセッサコアがホスト命令ブロック内の前記最後のホスト命令ではないホスト命令を実行するとき、前記ホスト命令ブロックのブロックアドレスを新しいブロックアドレスとして変更せずに、前記ホスト命令ブロックのブロック・オフセットを、新しい分岐オフセットとしてホスト命令の長さだけ増加させる手段と、
前記プロセッサコアがホスト命令ブロック内の最後のホスト命令を実行するとき、次のホスト命令ブロックのブロックアドレスを新しいブロックアドレスとして提供し、前記次のホスト命令ブロックの最初のホスト命令のブロック・オフセットを新しいブロック・オフセットとして提供する手段と、
分岐が行われない場合は、新しいブロックアドレスと新しいブロック・オフセットとを用いて前記命令メモリをアドレス指定する手段と、
をさらに含む、請求項２６に記載のシステム。
【請求項２８】
前記プロセッサコアが分岐ホスト命令を実行するとき、分岐オフセットと対応する分岐ゲスト命令のアドレスとの合計を用いて分岐ターゲットアドレスを計算する手段と、
前記分岐ターゲットアドレスのブロックアドレスを用いて、記録されたブロック・オフセットのマッピング関係を選択する手段と、
前記選択されたブロック・オフセットのマッピング関係を用いて、前記分岐ターゲットアドレスのブロック・オフセットをホストブロック・オフセットにマッピングする手段と、
前記分岐ターゲットアドレスのブロックアドレスおよび前記マッピングされたホストブロック・オフセットを用いて、分岐が行われるときに前記命令メモリをアドレス指定する手段と、
をさらに含む、請求項２６に記載のシステム。
【請求項２９】
所与のゲスト命令と前記ゲスト命令ブロックの終わりとの間のゲスト命令の数をカウントする手段と、
前記ホスト命令ブロックの対応する終わりから始まるゲスト命令に対応する単一または複数のホスト命令のうち同数の第１のホスト命令をカウントする手段と、
を含み、最後にカウントされた前記第１のホスト命令のブロック・オフセットは、対応するホスト命令のブロック・オフセットである、請求項２８に記載のシステム。
【請求項３０】
分岐命令アドレスおよびホスト分岐ターゲットアドレスのペアを分岐予測フラグとともに分岐ターゲットバッファ（ＢＴＢ）に格納する手段であって、前記ホスト分岐ターゲットアドレスは、分岐ターゲットアドレスのブロックアドレスと、前記ブロック・オフセットのマッピング関係を用いてマッピングされたホストブロック・オフセットのフォーマットである、手段と、
前記ＢＴＢがヒットしないとき、または前記分岐予測フラグがとられないとき、前記プロセッサコアが生成したアドレスを用いて前記命令メモリをアドレス指定する手段と、
前記ＢＴＢがヒットし、前記分岐予測フラグがとられるとき、前記ＢＴＢが提供する前記ホスト分岐ターゲットアドレスを用いて命令メモリをアドレス指定する手段と、
をさらに含む、請求項２８に記載のシステム。
【請求項３１】
ゲスト分岐命令に埋め込まれたブロック・オフセットと分岐オフセットとの合計として補償された分岐オフセットを計算する手段と、
前記ゲスト分岐命令に対応する分岐ホスト命令内に、前記補償された分岐オフセットを埋め込む手段と、
前記補償された分岐オフセットと前記分岐ホスト命令のブロックアドレスとの合計を用いて、前記分岐ターゲットアドレスを計算する手段と、
をさらに含む、請求項２８に記載のシステム。
【請求項３２】
命令変換中に各分岐ゲスト命令を検出する手段と、
分岐オフセットと前記分岐ゲスト命令のアドレスとの合計を用いて、分岐ターゲットアドレスを計算する手段と、
前記分岐ターゲットアドレスのブロックアドレスを用いて、記録されたブロック・オフセットのマッピング関係を選択する手段と、
前記選択されたブロック・オフセットのマッピング関係を用いて、前記分岐ターゲットアドレスのブロック・オフセットをホストブロック・オフセットにマッピングする手段と、
前記分岐ターゲットアドレスのブロックアドレスと前記ホストブロック・オフセットとをトラックテーブルに格納する手段と、
分岐が行われるとき、前記トラックテーブルに格納された前記分岐ターゲットアドレスのブロックアドレスおよび前記ホストブロック・オフセットを用いて前記命令メモリをアドレス指定する手段と、
をさらに含む、請求項２１に記載のシステム。
【請求項３３】
ホスト命令ブロック内の最後のホスト命令に対応して前記トラックテーブルによって２つのアドレスを提供する手段であって、一方は分岐ターゲットアドレスであり、他方は順次次のホスト命令ブロックの最初のホスト命令のアドレスである、手段と、
ホスト命令ブロック内の前記最後のホスト命令が分岐命令であり、分岐が行われるとき、前記トラックテーブルから前記分岐ターゲットアドレスを提供して前記命令メモリをアドレス指定する手段と、
ホスト命令ブロック内の前記最後のホスト命令が分岐命令でないとき、またはホスト命令ブロック内の前記最後のホスト命令が分岐命令であるが分岐が行われないとき、順次次のホスト命令の最初のホスト命令のアドレスを提供し、前記命令メモリをアドレス指定する手段と、
をさらに含む、請求項３２に記載のシステム。
【請求項３４】
ゲスト命令ブロックアドレスとホスト命令ブロックアドレスとの間のマッピング関係を抽出する手段と、
ゲスト命令ブロック・オフセットとホスト命令ブロック・オフセットとの間のマッピング関係を抽出する手段と、
ゲスト命令アドレスとホスト命令アドレスとの間のマッピング関係を格納する手段と、
ゲスト命令ブロックアドレスとゲスト命令ブロック・オフセットとの両方の順序で、ホスト命令ブロックアドレスをソートする手段と、
をさらに含む、請求項２１に記載のシステム。
【請求項３５】
未格納のホスト命令に対応するゲスト命令アドレスのブロックアドレスおよびブロック・オフセットに基づいて、ソートされたホスト命令ブロックアドレスに、未格納のホスト命令のブロックアドレスを加算する手段と、
ゲスト命令ブロック内のゲスト命令のブロック・オフセットとホスト命令ブロック内のホスト命令のブロック・オフセットとの間のマッピング関係を前記第２のメモリに記録する手段と、
をさらに含む、請求項３４に記載のシステム。
【請求項３６】
前記ホスト命令ブロックアドレスが既にデータ構造に記録されている場合、ゲスト命令アドレスのブロックアドレスおよびブロック・オフセットを用いて、ホスト命令のブロックアドレスを読み出すこと
をさらに含む、請求項３５に記載のシステム。
【請求項３７】
前記ホスト命令のブロックアドレスを用いて、前記第２のメモリからブロック・オフセットのマッピング関係を選択する手段と、
前記選択されたブロック・オフセットのマッピング関係を用いて、前記ゲスト命令のブロック・オフセットをホスト命令アドレスの対応するブロック・オフセットにマッピングする手段と、
ホスト命令アドレスのブロックアドレスおよびブロック・オフセットを用いて、前記命令メモリをアドレス指定して、前記プロセッサコアに命令を提供する手段と、
をさらに含む、請求項３６に記載のシステム。
【請求項３８】
所与のゲスト命令と、ホスト命令ブロックの開始ホスト命令に対応する開始ゲスト命令との間のゲスト命令の数をカウントする手段と、
ゲスト命令に対応する単一または複数のホスト命令のうち同数の第１のホスト命令をカウントする手段と、
を含み、最後にカウントされた前記第１のホスト命令のブロック・オフセットは、対応するホスト命令のブロック・オフセットである、請求項３７に記載のシステム。
【請求項３９】
レジスタファイル内のレジスタを指すトップ・オブ・スタックポインタを記録することによって、前記プロセッサコア内の前記レジスタファイルをスタックとして機能するように構成する手段と、
前記スタックが満杯であると判定されるとき、データを前記スタックからデータメモリに移動する手段と、
前記スタックが空であると判定されるとき、データを前記データメモリから前記スタックに移動する手段と、
をさらに含む、請求項２１に記載のシステム。
【請求項４０】
修正されたホスト命令セットの修正されたホスト命令が前記トップ・オブ・スタックポインタの移動を制御するように、ホスト命令の定義を修正する手段と、
スタックオペレーションゲスト命令セットのゲスト命令を前記修正されたホスト命令セットの前記修正されたホスト命令に変換する手段と、
スタックプッシュを実行するとき、前記修正されたホスト命令を用いて、前記トップ・オブ・スタックポインタをレジスタファイル内の上位レジスタにポイントする手段と、
スタックポップを実行するとき、前記修正されたホスト命令を用いて、前記トップ・オブ・スタックポインタをレジスタファイル内の下位レジスタにポイントする手段と、
をさらに含む、請求項３９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  この発明は一般にコンピューター、コミュニケーション、そして集積回路の技術に関連する。
【背景技術】
【０００２】
[0002]  現在のところ、もし１つのプロッセッサ・コアが異なる命令セットに属するプログラムを実行する場合、もっとも普及している方法はソフトウェアの仮想マシン（もしくは仮想レイヤ）を使うことである。
仮想マシンの役割は、プロセッサ・コアに対応していない命令セット（ゲスト命令セット）によって構成されたプログラムの翻訳もしくは解釈を行い、プロセッサ・コアによって対応されている命令セット（ホスト命令セット）の中の該当する命令を生成することである。
一般的に、処理過程において、解釈手法はゲスト命令内のオペコードとオペランドを含む全てのフィールドを仮想マシンを使ってソフトウェアによる手法で順番にリアルタイムで取得する。
それから、該当する処理が、メモリのスタック構造を用いて、異なるオペコードを元にして、オペランドに対して実行される。
従って、１つのゲスト命令の機能を実現するためには複数のホスト命令が実行される必要があり、効率が低い。
翻訳手法が用いられる場合、ソフトウェアのコンパイルと同様のプロセスがプログラムの実行の前に実現される。
プログラムは完全にホスト命令セットから構成されるフォームへと変換される。
よって、プログラムが実行されるときの効率はより高い。
しかしながら、ソフトウェア・コンパイルに伴うパフォーマンスのオーバーヘッドはまだ残る。
【０００３】
[0003]  第二の方法においては、異なる命令セットに対応する命令デコーダがプロセッサ・コアに追加される。
異なる命令セットの命令が実行される時、該当する命令デコーダが命令をデコードし、そしてデコードされた命令は後続するパイプラインに送られ、対応するオペレーションを実行する。
この方法にはほとんど効率のロスがないが、追加の命令デコーダはハードウェアのコストをあげ、またプロセッサ・チップのコストもあげうる。
加えて、プロセッサ・コアにおいて事前に種々の命令デコーダが実装されるため、スケーラビリティを欠き、新しい命令セットに対応できない。
【０００４】
[0004]  第三の方法においては、プロセッサ・コアの外側に変換モジュールが追加される。
変換モジュールはゲスト命令セットをプロセッサ・コアによる実行のためにホスト命令セットに変換することができる。
変換モジュールはソフトウェアによって実装されうる。
一般的に、この方法では拡張するのは簡単であるが、効率が非常に低い。
変換モジュールはハードウェアによっても実装されうる。
しかし、この場合拡張するのが難しく、またホスト命令を得るためにキャッシュ・メモリの利便を最大限活用することができない。
【０００５】
[0005]  特に、変換モジュールがキャッシュ・メモリとプロセッサ・コアの中間に位置しているとき、キャッシュ・メモリに記憶されている命令はゲスト命令であり、ゲスト命令はプロセッサ・コアによる実行のためにホスト命令に変換されなければならない。
つまり、キャッシュ・ヒットの有無に関わらず、変換オペレーションが行なわれる必要がある。
従って、分岐予測に失敗したとき、同じゲスト命令にたいする変換オペレーションが複数回繰り返されることになり、電力消費を増やし、プロセッサ・コアのパイプラインを深め、さらにハードウェアのコストとパフォーマンスのロスを増やす。
【０００６】
[0006]  変換モジュールがプロセッサ・コアの外側に置かれているとき（すなわち、キャッシュ・メモリが変換モジュールとプロセッサ・コアの中間に位置する）、キャッシュ・メモリに保存された命令は変換されたホスト命令である。
すなわち、ホスト命令アドレスにもとづいて、アドレス指定操作が行なわれる。
プロセッサ・コアによって実行された分岐命令によって取得された分岐ターゲット命令アドレスはゲスト命令アドレスである。
ホスト命令とゲスト命令の間には一対一関係がないため（例えば、ゲスト命令は複数のホスト命令に対応しうる）、ホスト命令アドレスとゲスト命令アドレスとの間の対応関係が記録されていなければならない。
それから、プロセッサ・コアは得られたホスト命令アドレスにもとづいて、キャッシュ・メモリの中から正しいホスト命令を探し出す。
ゲスト命令アドレスとホスト命令アドレスの対応関係を記録するにあたっての難点は、如何に効率良くゲスト命令アドレスを変換し、変換した命令を保管するかというところにある。
でなければ、分岐が取られた時に、ゲスト命令アドレスにもとづいて、ゲスト命令が変換モジュールの外の下位メモリから読み出され、変換モジュールによって変換され、そして変換された命令がプロセッサ・コアによる実行のためにキャッシュに保存されることになり、実行パフォーマンスに大きな影響を与える。
この問題に対する１つの解決策はアドレス・マッチングにもとづいた伝統的なキャッシュの代わりに、プログラム実行トレースにもとづいたトレース・キャッシュを用いることである。
しかしトレース・キャッシュは、同じアドレスを持ちつつしかし異なるトレースに位置する大量の命令を保存しなければならず、メモリ容量においての大量の無駄とトレース・キャッシュの低いパフォーマンスへとつながる。
【発明の概要】
【０００７】
[0007]  ここに開示される手法とシステムは上記に示された問題やその他の問題の１つまたは複数を解決することに向けられている。
なお、このセクションの内容は開示の一部であり、明示的に示されていないかぎり、先行技術と見做されるべきではない。
【０００８】
[0008]  命令セット変換方法が提示される。
方法は以下から構成される：ゲスト命令をホスト命令へ変換し、そしてゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を生成する；ホスト命令をキャッシュ・メモリへ記憶し、それはプロセッサ・コアによって直接アクセスされる；ホスト命令アドレスにもとづいて、プロセッサ・コアによる実行のための該当するホスト命令を直接取り出すためにキャッシュ・アドレス指定操作を実施する；もしくは、マッピング関係にもとづいて、プロセッサ・コアによって出力されたゲスト命令アドレスをホスト命令アドレスへ変換した後、プロセッサ・コアによる実行のための該当するホスト命令を取り出すためにキャッシュ・アドレス指定操作を実施する。
【０００９】
[0009]  必要に応じて、この方法において、プログラム実行フローとプロセッサ・コアからの命令実行フィードバックにもとづいて、後続ホスト命令をプロセッサ・コアに提供し、ここでプロセッサ・コアからの命令実行フィードバックはプロセッサ・コアが分岐命令を実行したとき分岐が取られたかを表す生成された信号である。
【００１０】
[0010]  必要に応じて、この方法はさらに以下を含む：ゲスト命令から命令タイプを含む全ての命令フィールドを抽出する；
ゲスト命令の抽出された命令タイプをもとに、ホスト命令の命令タイプとゲスト命令に対応する命令変換制御情報を見いだす；
命令変換制御情報をもとに、ゲスト命令から抽出された対応する命令フィールドをシフトする；
そしてホスト命令の命令タイプとシフトされた命令フィールドをスプライスし、対応するホスト命令を形成する。
【００１１】
[0011]  必要に応じて、この方法は以下のうち１つを含む:１つのゲスト命令が１つのホスト命令へ変換され、ゲスト命令の命令アドレスはホスト命令の命令アドレスに対応する；
もしくは、１つのゲスト命令が複数のホスト命令へ変換され、ゲスト命令の命令アドレスが複数のホスト命令の最初のホスト命令の命令アドレスに対応する。
【００１２】
[0012]  必要に応じて、この方法において、複数のゲスト命令が１つのホスト命令へ変換され、複数ゲスト命令の最初のゲスト命令の命令アドレスがホスト命令の命令アドレスに対応する。
【００１３】
[0013]  必要に応じて、この方法はさらに、ゲスト命令アドレスとホスト命令アドレスとの間にマッピング関係を形成することを含む。
【００１４】
[0014]  必要に応じて、この方法において、ゲスト命令アドレスとホスト命令アドレスの間にマッピング関係を形成することがさらに以下を含む：ゲスト命令アドレスとホスト命令ブロックアドレスとの間にマッピング関係を形成する；
そしてゲスト命令ブロック・オフセットとホスト命令ブロック・オフセットとの間にマッピング関係を形成する。
【００１５】
[0015]  必要に応じて、この方法において、データ構造を用いて、ゲスト命令アドレスとホスト命令ブロックアドレスの間のマッピング関係を表し、データ構造はホスト命令ブロックアドレスを記憶し、そしてホスト命令ブロックアドレスはゲスト命令ブロックアドレスとゲスト命令ブロック・オフセット・アドレスによってソートされている。
【００１６】
[0016]  必要に応じて、この方法において、ゲスト命令アドレスに対応するホスト命令ブロックアドレスがデータ構造の中に存在するとき、ゲスト命令アドレスに含まれるゲスト命令ブロックアドレスとゲスト命令ブロック・オフセット・アドレスにもとづいて、データ構造の中に該当する場所を見つけ、データ構造に記憶されているホスト命令ブロックアドレスを読み出す。
【００１７】
[0017]  必要に応じて、この方法において、ゲスト命令アドレスに対応するホスト命令ブロックアドレスがデータ構造の中に存在しないとき、ゲスト命令アドレスのゲスト命令ブロックアドレスとゲスト命令ブロック・オフセット・アドレスにもとづいて、データ構造内に該当する挿入位置を見つけ、挿入位置にゲスト命令アドレスに対応するホスト命令ブロックアドレスを記憶する。
【００１８】
[0018]  必要に応じて、この方法において、ゲスト命令ブロックアドレスとホスト命令ブロックアドレスの間のマッピング関係にもとづいて、ゲスト命令ブロックアドレスはホスト命令ブロックアドレスへ変換される。
【００１９】
[0019]  必要に応じて、この方法において、ゲスト命令ブロック・オフセット・アドレスとホスト命令ブロック・オフセット・アドレスの間のマッピング関係にもとづいて、ゲスト命令ブロック・オフセット・アドレスはホスト命令ブロック・オフセット・アドレスに変換される。
【００２０】
[0020]  必要に応じて、この方法において、ゲスト命令アドレスを含むゲスト命令ブロックの開始アドレスとゲスト命令アドレスの間のゲスト命令の総数が、初期値から順方向シフトロジックを経て数えられ、 ここで順方向シフトロジックは、各ゲスト命令を通過する時に、現行値を１ビット前方へシフトしシフト結果を得る；
ゲスト命令ブロックに対応するホスト命令ブロックの開始アドレスから始まるゲスト命令に対応する最初のホスト命令の総数はリバース・シフトロジックによって数えられ、ここでリバース・シフトロジックは、各ゲスト命令を通過する時に、シフト結果が初期値に戻るまで、現行値を１ビット反対方向へシフトする；
そして、ホスト命令に対応するブロック・オフセット・アドレスはこのときゲスト命令に対応するブロック・オフセット・アドレスである。
【００２１】
[0021]  必要に応じて、この方法において、スタック・レジスタ上の操作がアドレス計算によってレジスタ・ファイル上の操作に変換され、プロセッサ・コアのレジスタ・ファイルがスタック・レジスタとして用いられる。
【００２２】
[0022]  必要に応じて、この方法において、１つもしくは複数のゲスト命令セットの複数の命令が１つのホスト命令セットにおける複数の命令に変換される。
【００２３】
[0023]  命令セット変換システムが提示される。
システムは以下から構成される：
ホスト命令を実行するよう設定されたプロセッサ・コア；
ゲスト命令をホスト命令へ変換し、ゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を生成するように設定されたコンバータ；
ゲスト命令アドレスとホスト命令アドレスの間のマッピング関係を記憶し、ゲスト命令アドレスとホスト命令アドレスの間の変換を実施するように設定されたアドレス・マッピング・モジュール；
そして変換によって得られたホスト命令を記憶し、ホスト命令アドレスにもとづいてプロセッサ・コアによる実行のために該当するホスト命令を出力するように設定されたキャッシュ・メモリ。
【００２４】
[0024]  必要に応じて、このシステムにおいて、コンバータはさらに以下を含む：
ゲスト命令タイプとホスト命令タイプの間の対応関係、並びにゲスト命令の命令フィールドと対応するホスト命令の命令フィールドの間の対応関係、を記憶するように設定されたメモリ；
ゲスト命令をシフトとし整列するよう設定されたアライナで、ゲスト命令が命令ブロック境界を越えたとき、アライナはゲスト命令を命令ブロックまでシフトしゲスト命令を整列させる；
ゲスト命令から命令タイプを含む命令フィールドを抽出するよう設定された抽出器で、抽出された命令タイプはメモリ上でアドレス指定操作を実施するために用いられ、ホスト命令の命令タイプとゲスト命令に対応する命令変換制御情報を読み出し、命令変換制御情報をもとに抽出された命令フィールドをシフトする；
ホスト命令の命令タイプとシフトされた命令フィールドをスプライスし対応するホスト命令を形成するように設定された命令スプライサ。
【００２５】
[0025]  必要に応じて、このシステムにおいて、アドレス・マッピング・モジュールはさらに以下を含む：ゲスト命令ブロックアドレスとホスト命令ブロックアドレスの間のマッピング関係を記憶し、ゲスト命令ブロックアドレスをホスト命令ブロックアドレスへ変換するよう設定されたブロックアドレス・マッピング・モジュール；
そしてゲスト命令ブロック・オフセット・アドレスとホスト命令ブロック・オフセット・アドレスの間のマッピング関係を記憶し、ゲスト命令ブロック・オフセット・アドレスをホスト命令ブロック・オフセット・アドレスへ変換するように設定されたオフセット・アドレス・マッピング・モジュール。
【００２６】
[0026]  必要に応じて、このシステムにおいて、トラッカーは、プログラム実行フローとプロセッサ・コアからの命令実行フィードバックにもとづいて、プログラム実行フローに沿ってキャッシュ・メモリの上でアドレス指定操作を実施し、キャッシュメモリから読み出された後続命令をプロセッサ・コアへ実行のために送るように設定され、そしてここでプロセッサ・コアからの命令実行フィードバックはプロセッサ・コアが分岐命令を実行したときに分岐が取られたかを表す一般的な信号である。
【００２７】
[0027]  必要に応じて、このシステムにおいて、アドレス・マッピング・モジュールはさらに順方向シフトロジックとリバースシフトロジックを含む；
順方向シフトロジックはゲスト命令アドレスを含むゲスト命令ブロックの開始アドレスと初期値からのゲスト命令アドレスの間のゲスト命令の総数を数えるように設定され、各ゲスト命令を通過するときに順方向シフトロジックは現行値を１ビット前方にシフトしシフト結果を得る；
そしてリバースシフトロジックは、ゲスト命令ブロックに対応するホスト命令ブロックの開始アドレスから始まるゲスト命令に対応する最初のホスト命令の総数を数えるように設定され、リバースシフトロジックは、各ホスト命令を通過する時に、シフト結果が初期値に変わるまで、現行値を１ビット逆方向にシフトする；
そしてホスト命令に対応するブロック・オフセット・アドレスはこのときゲスト命令に対応するブロック・オフセット・アドレスである。
【００２８】
[0028]  必要に応じて、このシステムにおいて、プロセッサ・コアのレジスタ・ファイルはスタック・レジスタとして用いられる；
スタック先頭ポインタ・レジスタは現行スタック先頭ポインタを記憶するように設定され、ポインタはレジスタ・ファイルのレジスタをポイントする；
加法器はスタック先頭ポインタの値と１を足し合わせるよう設定され、スタック先頭の上のレジスタの位置に対応する；
減算器はスタック先頭ポインタの値から１を引くように設定され、スタック先頭の下のレジスタの位置に対応する；
そしてスタック最下部制御モジュールはスタック・レジスタがほぼ空、もしくはほぼ満杯であるかを検出し、そこで：
スタック・レジスタがほぼ満杯のとき、スタック最下部制御モジュールはスタック最下部の少なくとも１つのレジスタ値をメモリへ送り、スタック最下部ポインタを調節し、スタック・レジスタが溢れないようにする；
もしくはスタック・レジスタがほぼ空のとき、スタック最下部制御モジュールはスタック最下部ポインタを調節し、先にメモリに記憶された少なくとも１つのレジスタ値をスタック最下部に送り、スタック・レジスタがプロセッサ・コアによる実行のためにオペランドを供給し続けるようにする。
【００２９】
[0029]  必要に応じて、この方法において、レベル１キャッシュ・メモリに充填される命令は該当する命令情報を抽出するために検査される；
抽出された命令情報にもとづいて、最初のリード・ポインタが更新される。
【００３０】
[0030]  必要に応じて、この方法において、最初のリード・ポインタが条件付き分岐命令へポイントし、そして条件付き分岐命令の次命令が無条件分岐命令であるとき、最初のリード・ポインタは条件付き分岐命令の実行結果にもとづいて更新される。
分岐が取られるとき、最初のリード・ポインタは条件付き分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
分岐が取られないとき、最初のリード・ポインタは無条件分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
そして、プロセッサ・コアが単一クロック・サイクルにおいて無条件分岐命令を実行する必要がない。
【００３１】
[0031]  必要に応じて、この方法において、プロセッサ・コアが分岐命令を実行するとき、分岐予測にもとづいて、次の実行順番の命令と分岐ターゲット命令のうち１つをプロセッサ・コアによる実行のための後続命令として選び、次の実行順番の命令と分岐ターゲット命令のうちのもう一方のアドレス指定アドレスを記憶する。
分岐の結果が分岐予測と同じとき、次後続命令を実行し続ける。
そして分岐結果が分岐予測と同じでないとき、パイプラインを空にし、記憶されたアドレス指定アドレスに対応する命令の実行を再開する。
【００３２】
[0032]  必要に応じて、このシステムにおいて、命令情報にもとづいて、最初のリード・ポインタが更新される。
【００３３】
[0033]  必要に応じて、このシステムにおいて、最初のリード・ポインタによってポイントされたトラック・ポイントに記憶された命令情報と次トラック・ポイントに記憶された命令情報は同時にトラック・テーブルから読み出される。
【００３４】
[0034]  必要に応じて、このシステムにおいて、最初のリード・ポインタが条件付き分岐命令にポイントし、条件付き分岐命令の次命令が無条件分岐命令であるとき、最初のリード・ポインタは条件付き分岐命令の実行結果にもとづいて更新される。
分岐が取られるとき、最初のリード・ポインタは条件付き分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
分岐が取られないとき、最初のリード・ポインタは無条件分岐命令の分岐ターゲット・アドレス指定アドレスへ更新される。
そしてプロセッサ・コアは単一のクロック・サイクルにおいて無条件分岐命令を実行する必要がない。
【００３５】
[0035]  必要に応じて、このシステムにおいて、トラッカーはさらに次の順次実行命令と分岐ターゲット命令のアドレス指定アドレスを記憶するように設定されるレジスタを含む。
プロセッサ・コアが分岐命令を実行するとき、分岐予測にもとづいて、次順次実行命令と分岐ターゲット命令のうちの１つがプロセッサ・コアによる実行のための後続命令として選ばれ、そして次順次実行命令と分岐ターゲット命令のもう一方のアドレス指定アドレスはトラッカーのレジスタに記憶される。
分岐実行の結果が分岐予測と同じとき、次後続命令が実行される。
そして分岐実行の結果が分岐予測と同じでないとき、パイプラインは空にされ、トラッカーのレジスタに記憶されているアドレス指定アドレスに対応する命令が実行される。
【００３６】
[0036]  必要に応じて、このシステムにおいて、エンディング・トラック・ポイントがトラック・テーブルの各トラックの最後のトラック・ポイントへ追加される。
命令のエンディング・トラック・ポイントが無条件分岐命令であるとき、分岐ターゲット・アドレス指定アドレスはトラック・テーブルの次順次実行トラックの最初のトラック・ポイントに対応するアドレス指定アドレスである。
そして最初のリード・ポインタがエンディング・トラック・ポイントをポイントするとき、レベル１キャッシュ・メモリがNOP命令を出力する。
【００３７】
[0037]  必要に応じて、このシステムにおいて、エンディング・トラック・ポイントがトラック・テーブルの各トラックの最後のトラック・ポイントの後に追加される。
エンディング・トラック・ポイントの命令が無条件分岐命令であるとき、分岐ターゲット・アドレス指定アドレスはトラック・テーブルの次順次実行トラックの最初のトラック・ポイントに対応するアドレス指定アドレスである。
そしてエンディング・トラック・ポイントの前のトラック・ポイントが分岐ポイントでないとき、エンディング・トラック・ポイントの命令タイプと分岐ターゲット・アドレス指定アドレスが、それぞれエンディング・トラック・ポイントの前のトラック・ポイントの命令タイプとアドレス指定アドレスとして用いられる。
【００３８】
[0038]  １つもしくは複数の命令セットを実行するプロセッサ・システムが提示される。
プロセッサ・システムは以下から構成される：
第１命令セットに属する複数のコンピュータ命令を記憶するように設定された第１メモリ；
第１命令セットに属する複数のコンピュータ命令を、第２命令セットに属する複数のホスト命令へ変換するように設定された命令コンバータ；
命令コンバータによって変換された複数のホスト命令を記憶するように設定された第２メモリ；
そして第２メモリから直接複数のホスト命令を取り出し、複数のコンピュータ命令を参照することなくそして命令コンバータを用いること無しに、複数のホスト命令を実行するように設定された第２メモリとカップルされたプロセッサ・コア。
【００３９】
[0039]  必要に応じて、このシステムにおいて、命令コンバータは、設定にもとづいて第１命令セットと第２命令セットの間のマッピング関係を記憶するように設定されたメモリを含む。
そして記憶された第１命令セットと第２命令セットの間のマッピング関係にもとづいて、命令コンバータは第１命令セットに属する複数のコンピュータ命令を第２命令セットに属する複数のホスト命令へ変換する。
【００４０】
[0040]  必要に応じて、このシステムにおいて、命令コンバータとプロセッサ・コアにカップルされたアドレス・コンバータは、第１命令セットに属する複数のコンピュータ命令の複数のターゲット・コンピュータ命令のアドレスを、第２命令セットに属する複数のホスト命令の複数のターゲット命令のホストアドレスへ変換するように設定される。
【００４１】
[0041]  必要に応じて、このシステムにおいて、アドレス・コンバータがアドレスを変換するとき、アドレス・コンバータはさらに以下のように設定される：ターゲット・コンピュータ命令アドレスをホスト命令ブロック・アドレスにマップする；
ターゲット・コンピュータ命令アドレスを、ホスト命令を含む命令ブロックのアドレスに対応する命令ブロックのホスト・ブロック・オフセット・アドレスへマップする；
そしてホスト命令ブロック・アドレスとホスト・ブロック・オフセット・アドレスを組み合わせてホスト命令アドレスを形成する。
【００４２】
[0042]  必要に応じて、このシステムにおいて、コンピュータ命令ブロック・アドレスとホスト命令ブロック・アドレスの間のブロック・アドレス・マッピング関係にもとづいて、ホスト命令ブロック・アドレスが生成される。
【００４３】
[0043]  必要に応じて、このシステムにおいて、アドレス・コンバータがブロック・アドレス・マッピング関係を記憶する。
マッピング関係テーブルにもとづいて、ハードウェア・ロジックがホスト・ブロック・オフセット・アドレスを生成する。
【００４４】
[0044]  必要に応じて、このシステムにおいて、エンディング・フラッグ・メモリはホスト命令ブロックのエンディング命令のホスト命令アドレスを記憶するように設定され、ここでエンディング命令はアドレス順における次ホスト命令ブロックの前の最後のホスト命令である。
【００４５】
[0045]  必要に応じて、このシステムにおいて、次ブロックアドレス・メモリはアドレス順における次ホスト命令ブロックのブロック・アドレスを記憶するように設定される。
分岐ターゲット・バッファは分岐ターゲットのホスト命令アドレスを記憶するように設定される。
【００４６】
[0046]  必要に応じて、このシステムにおいて、第１メモリがさらに第３命令セットに属する複数のコンピュータ命令を記憶するように設定されている。
命令コンバータのメモリがさらに設定にもとづいて第３命令セットと第２命セットの間のマッピング関係を記憶するように設定されている。
そして記憶された第３命令セットと第２命令セットの間のマッピング関係にもとづいて、命令コンバータは第３命令セットに属する複数のコンピュータ命令を第２命令セットに属する複数のホスト命令へ変換する。
【００４７】
[0047]  必要に応じて、このシステムにおいて、システムは第１スレッド命令シーケンスと第２スレッド命令シーケンスを走らせる。
第１スレッド命令シーケンスは第１命令セットの複数のコンピュータ命令から構成される。
命令コンバータは第１命令セットと第２命令セットの間のマッピング関係と第３命令セットと第２命令セットとの間のマッピング関係を設定にもとづいてメモリに記憶する。
そして命令シーケンスのスレッド数にもとづいて、命令コンバータは第１命令セットと第２命令セットの間のマッピング関係と第３命令セットと第２命令セットの間のマッピング関係のうちの１つを選び、スレッドの複数のコンピュータ命令を第２命令セットに属する複数のホスト命令へ変換する。
【００４８】
[0048]  必要に応じて、このシステムにおいて、複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数ホスト命令の各ホスト命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令と複数ホスト命令は一対一対応をしている。
マッピング関係は、各コンピュータ命令の命令タイプと各ホスト命令の命令タイプとの間のマッピング関係と、各コンピュータ命令に含まれる命令タイプ以外の命令フィールドと各ホスト命令に含まれるの命令タイプ以外の命令フィールドの間のマッピング関係とを含む。
【００４９】
[0049]  必要に応じて、このシステムにおいて、複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数ホスト命令の各ホスト命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令の総数が複数ホスト命令の総数と等しくない。
そして複数コンピュータ命令の各コンピュータ命令が、１つもしくはより多くの複数ホスト命令のホスト命令へマップされる。
【００５０】
[0050]  必要に応じて、このシステムにおいて、マッピング関係はシフト・ロジックを含む。
そして複数ホスト命令の１つの少なくとも１つの命令フィールドが、対応するコンピュータ命令の該当する命令フィールドをシフトすることによって生成される。
【００５１】
[0051]  必要に応じて、このシステムにおいて、コンピュータ命令の命令フィールドは少なくとも命令タイプを含む。
そして命令コンバータは命令コンバータのメモリにおいて、少なくとも命令タイプを用いてアドレス指定操作を実施し、該当するマッピング関係を読み出す。
【００５２】
[0052]  プロセッサ・システムによって１つもしくはより多くの命令セットを実行する方法が提示される。
方法は以下を含む：
第１命令セットに属する複数のコンピュータ命令を第１メモリに記憶する；
第１命令セットに属する複数のコンピュータ命令を第２命令セットに属する複数のホスト命令へ命令コンバータによって変換する；
命令コンバータによって変換された複数のホスト命令を第２メモリへ記憶する；
そして第２メモリから複数のホスト命令を直接取り出し、第２メモリとカップルされたプロセッサ・コアによって複数のホスト命令を、複数のコンピュータ命令を参照せず命令コンバータを用いることなく、実行する。
【００５３】
[0053]  必要に応じて、この方法において、命令コンバータは第１命令セットと第２命令セットの間のマッピング関係を命令コンバータ内のメモリに記憶することで設定されている。
そして記憶された第１命令セットと第２命令セットの間のマッピング関係にもとづいて、第１命令セットに属する複数のコンピュータ命令が第２命令セットに属する複数のホスト命令へ変換される。
【００５４】
[0054]  必要に応じて、この方法において、命令コンバータとプロセッサ・コアにカップルされたアドレス・コンバータが、第１命令セットに属する複数コンピュータ命令の複数のターゲット・コンピュータ命令のアドレスを、第２命令セットに属する複数ホスト命令の複数のターゲット命令のホストアドレスへ変換する。
【００５５】
[0055]  必要に応じて、この方法において、アドレス・コンバータがアドレスを変換するとき、さらに以下を含む：
ターゲット・コンピュータ命令アドレスをホスト命令ブロック・アドレスへマップする；
ターゲット・コンピュータ命令アドレスを、ホスト命令を含む命令ブロックのアドレスに対応する命令ブロックのホスト・ブロック・オフセット・アドレスへマップする；
そしてホスト命令ブロック・アドレスをホスト・ブロック・オフセット・アドレスと組み合わせてホスト命令アドレスを形成する。
【００５６】
[0056]  必要に応じて、この方法において、コンピュータ命令ブロック・アドレスとホスト命令ブロック・アドレスの間のブロック・アドレス・マッピング関係にもとづいて、ホスト・ブロック・アドレスが生成される。
【００５７】
[0057]  必要に応じて、この方法において、アドレス・コンバータはブロック・アドレス・マッピング関係を記憶する。
マッピング関係テーブルにもとづいて、ハードウェア・ロジックはホスト・ブロック・オフセット・アドレスを生成する。
【００５８】
[0058]  必要に応じて、この方法において、エンディング・フラッグ・メモリによって、ホスト命令ブロックのエンディング命令のホスト命令アドレスを記憶する。ここでエンディング命令はアドレス順の次のホスト命令ブロックの前の最後のホスト命令である。
【００５９】
[0059]  必要に応じて、この方法において、次ブロック・アドレス・メモリによって、アドレス順の次ホスト命令ブロックのブロック・アドレスを記憶する。
分岐ターゲット・バッファは分岐ターゲットのホスト命令アドレスを記憶する。
【００６０】
[0060]  必要に応じて、この方法において、第３命令セットに属する複数のコンピュータ命令が第１メモリに記憶される。
命令コンバータは第３命令セットと第２命令セットの間のマッピング関係を設定にもとづいてメモリに記憶する。
そして第３命令セットと第２命令セットの間の記憶されたマッピング関係にもとづいて、命令コンバータは第３命令セットに属する複数のコンピュータ命令を第２命令セットに属する複数のホスト命令へ変換する。
【００６１】
[0061]  必要に応じて、この方法において、第１スレッド命令シーケンスと第２スレッド命令シーケンスが走らされる。
第１スレッド命令シーケンスは第１命令セットの複数のコンピュータ命令によって構成されている。
第２スレッド命令シーケンスは第３命令セットの複数のコンピュータ命令によって構成されている。
命令コンバータは第１命令セットと第２命令セットの間のマッピング関係と、第３命令セットと第２命令セットの間のマッピング関係を設定にもとづいてメモリに記憶する。
そして命令シーケンスのスレッド番号にもとづいて、命令コンバータは第１命令セットと第２命令セットの間のマッピング関係と、第３命令セットと第２命令セットの間のマッピング関係のうちの１つを選び、スレッドの複数のコンピュータ命令を第２命令セットに属する複数のホスト命令へ変換する。
【００６２】
[0062]  必要に応じて、この方法において、複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数ホスト命令の各ホスト命令は少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令と複数ホスト命令は一対一対応をしている。
そしてマッピング関係は、各コンピュータ命令の命令タイプと各ホスト命令の命令タイプの間のマッピング関係と、各コンピュータ命令に含まれている命令タイプ以外の命令フィールドと各ホスト命令に含まれている命令タイプ以外の命令フィールドの間のマッピング関係を含む。
【００６３】
[0063]  必要に応じて、この方法において、複数コンピュータ命令の各コンピュータ命令が少なくとも命令タイプを含む命令フィールドを持つ。
複数ホスト命令の各ホスト命令は少なくとも命令タイプを含む命令フィールドを持つ。
複数コンピュータ命令の総数は複数ホスト命令の総数に等しくない。
そして複数コンピュータ命令の各コンピュータ命令は複数ホスト命令の１つもしくはそれ以上のホスト命令へマップされる。
【００６４】
[0064]  必要に応じて、この方法において、複数ホスト命令も少なくとも１つのホスト命令の１つの命令フィールドが対応するコンピュータ命令の該当する命令フィールドをシフトすることによって生成される。
【００６５】
[0065]  必要に応じて、この方法において、コンピュータ命令の命令フィールドが少なくとも１つの命令タイプを含む。
そして命令コンバータが少なくとも命令タイプを用いて命令コンバータ内のメモリにおいてアドレス指定操作を行ない、該当するマッピング関係を読み出す。
【００６６】
[0066]  本開示の他の側面は、この分野に精通する者によって、本開示における説明、クレーム、図などに照らしあわせて、理解されうる。
【発明の効果】
【００６７】
[0067]  本開示で扱われる 処理システムのプロセッサ・コアに最も近いキャッシュ・メモリ・システム（すなわち高位レベルキャッシュ）に保存されている命令セットは、プロセッサ・コアによってサポートされるホスト命令セットである。そして主メモリもしくは低位キャッシュに保存されている命令セットはゲスト命令セットである。
コンバータの設定によって、対応するゲスト命令セットがプロセッサで実行されるためにホスト命令セットに変換されうる。
従って、処理システムがサポートできる命令セットを簡単に拡張することができる。
【００６８】
[0068]  プログラム実行フローとプロセッサ・コアからの命令実行フィードバックにもとづいて、高位レベルキャッシュは直にプロセッサ・コアにホスト命令を供給し、パイプラインの深さを減らしパイプラインの効率を改善する。
特に分岐予測が間違ったとき、パイプライン・サイクルの無駄を削減できる。
【００６９】
[0069]  この分野に精通する者にとって、発明の他の利点と応用は自明である。
【図面の簡単な説明】
【００７０】
【図１】[0070]  図１は開示された実施形態と整合する例示的な命令処理システムの構造概略図を示す；
【図２】[0071]  図２は開示された実施形態と整合する例示的なコンバータの構造概略図を示す；
【図３Ａ】[0072]  図３Aは開示された実施形態と整合する例示的なアライナの構造概略図を示す；
【図３Ｂ】[0073]  図３Bは開示された実施形態と整合する例示的なアライナの作動プロセスの概略図を示す；
【図４Ａ】[0074]  図４Aは開示された実施形態と整合する例示的な抽出器の構造概略図を示す；
【図４Ｂ】[0075]  図４Bは開示された実施形態と整合する例示的な抽出器の作動プロセスの概略図を示す；
【図５Ａ】[0076]  図５Aは開示された実施形態と整合する例示的なマッピング情報の行の概略図を示す；
【図５Ｂ】[0077]  図５Bは開示された実施形態と整合するもう１つの例示的なマッピング情報の複数の行の概略図を示す；
【図５Ｃ】[0078]  図５Cは開示された実施形態と整合する例示的なマッピング情報メモリの作動プロセスの概略図を示す；
【図５Ｄ】[0079]  図５Dは開示された実施形態と整合するもう１つの例示的なマッピング情報メモリの作動プロセスの概略図を示す；
【図５Ｅ】[0080]  図５Eは開示された実施形態と整合するもう１つの例示的なマッピング情報メモリの作動プロセスの概略図を示す；
【図５Ｆ】[0081]  図５Fは開示された実施形態と整合する例示的な命令スプライサの概略図を示す；
【図６】[0082]  図６は開示された実施形態と整合するマルチレベル・キャッシュを含むプロセッサ・システムを示す；
【図７Ａ】[0083]  図７Aは開示された実施形態と整合する例示的なトラック・テーブルにもとづくキャッシュ構造の回路図を示す；
【図７Ｂ】[0084]  図７Bは開示された実施形態と整合する例示的なスキャン・コンバータの回路図を示す；
【図８Ａ】[0085]  図８Aは開示された実施形態と整合する例示的なゲスト命令とホスト命令の対応関係の概略図を示す；
【図８Ｂ】[0086]  図８Bは開示された実施形態と整合する例示的なオフセットアドレス・マッピング関係の保存形態を示す；
【図８Ｃ】[0087]  図８Cは開示された実施形態と整合する例示的なオフセットアドレス・コンバータの回路図を示す；
【図８Ｄ】[0088]  図８Dは開示された実施形態と整合する例示的なブロックアドレス・マッピング・モジュールの回路図を示す；
【図９】[0089]  図９A〜Fは開示された実施形態と整合するマルチレベル・キャッシュを含んだプロセッサ・システムの作動プロセスを示す；
【図１０Ａ】[0090]  図１０Aは開示された実施形態と整合する例示的なオペランド・スタックの回路図を示す；
【図１０Ｂ】[0091]  図１０Bは開示された実施形態と整合する例示的なBOS(Bottom of Stack)を更新するプロセスを示す；
【図１０Ｃ】[0092]  図１０Cは開示された実施形態と整合するもう１つの例示的なBOS(Bottom of Stack)を更新するプロセスを示す；
【図１１Ａ】[0093]  図１１Aは開示された実施形態と整合する例示的なトラック・テーブルにもとづくキャッシュ構造の回路図を示す；
【図１１Ｂ】[0094]  図１１Bは開示された実施形態と整合する例示的な投機的実行をサポートするプロセスを示す；
【図１２】[0095]  図１２は開示された実施形態と整合する例示的な設定可能コンバータを含むプロセッサ・システムの回路図を示す；
【図１３Ａ】[0096]  図１３Aは開示された実施形態と整合する例示的な設定可能コンバータのブロック・ダイアグラムを示す；
【図１３Ｂ】[0097]  図１３Bは開示された実施形態と整合する例示的な設定可能コンバータ内のメモリの回路図を示す；
【図１３Ｃ】[0098]  図１３Cは開示された実施形態と整合するもうひとつの例示的な設定可能コンバータ内のメモリの回路図を示す；
【図１４】[0099]  図１４は開示された実施形態と整合する例示的な設定可能コンバータとアドレス・マッピング・モジュールを含むプロセッサ・システムの回路図を示す；
【図１５】[00100]  図１５は開示された実施形態と整合するもうひとつの例示的な設定可能コンバータとアドレス・マッピング・モジュールを含むプロセッサ・システムの回路図を示す；
【図１６】[00101]  図１６は開示された実施形態と整合する例示的な分岐ターゲットテーブルを含むプロセッサ・システムの回路図を示す；
【図１７】[00102]  図１７は開示された実施形態と整合するもうひとつの例示的な分岐ターゲットテーブルとトラッカーを含むプロセッサ・システムの回路図を示す；
【図１８Ａ】[00103]  図１８Aは開示された実施形態と整合する例示的な次ブロックアドレス・メモリのフォーマットの概略図を示す；
【図１８Ｂ】[00104]  図１８Bは開示された実施形態と整合するもうひとつの例示的な次ブロックアドレス・メモリのフォーマットの概略図を示す；
【図１８Ｃ】[00105]  図１８Cは開示された実施形態と整合するもうひとつの例示的なゲスト命令アドレスのフォーマットの概略図を示す；
【図１９】[00106]  図１９は開示された実施形態と整合する例示的な２階層の命令メモリを含むプロセッサ・システムの回路図を示す；
【図２０】[00107]  図２０は開示された実施形態と整合する例示的な２階層のメモリを含むプロセッサ・システムにおけるブロックアドレス・マッピング・モジュールの回路図を示す；
【図２１】[00108]  図２１は開示された実施形態と整合する例示的な、ゲスト命令とブロック境界が整列しない時にホスト命令を保存する命令メモリの概略図を示す；
【図２２】[00109]  図２２は開示された実施形態と整合するもうひとつの例示的なブロックアドレス・マッピング・モジュールの回路図を示す；
【図２３】[00110]  図２３は開示された実施形態と整合する例示的なトラック・テーブルを含むプロセッサ・システムの回路図を示す；
【図２４】[00111]  図２４は開示された実施形態と整合する例示的なスタック処理機能を実装するレジスタファイルを使うプロセッサ・システムの回路図を示す；
【発明を実施するための形態】
【００７１】
[00112]発明の例示的な実施形態にたいする詳細な言及が、例示的な実施形態に関する付随された図表とともにこれからなされる。
説明とクレームに言及することにより、この発明の特徴と利点がより明白にされる。
なお、全ての付随する図表は簡略化されて不正確な比率を用いており、この開示された実施形態を便利かつ明晰に説明する目的のためのみに用いられる。
【００７２】
[00113]  なお、現行の開示の内容を明晰に説明するために複数の実施形態が、この開示の異なる実装を解釈するために、提示される。そして複数の実施形態は消尽法によってではなく列挙される。
さらに、簡略化のために、先に言及された実施形態は、多くの場合、後述する実施形態においては省略される。
従って、後述された実施形態において言及されなかった内容に関しては、先行する記述が参照される。
【００７３】
[00114]  この開示はいくつもの修正や変更のかたちで拡張されうるが、しかし明細書は幾つかの特定の実施形態を詳しく説明するために列挙する。
発明者の意図は開示をここで扱われる特定の実施形態に限るものではないということが理解されるべきである。
反対に、発明者の意図は、この開示のクレームによって定義された精神と範囲にもとづいた全ての改良、等価な変換や修正を保護することである。
同じ参照番号がすべての図表に通じて、同じもしくは似た部分を示すために用いられる。
【００７４】
[00115]  命令アドレスとは主メモリに保存された命令のメモリ・アドレスのことを指す。
つまり、命令はこのアドレスを用いて主メモリの中から見つけ出される。 
簡便のため、仮想アドレスは物理アドレスに等しいと仮定される。
アドレス・マッピングが必要な状況においても、この発明において説明される方法は適用されうる。
現行命令とはプロセッサ・コアによって現在実行されているもしくは読み込まれている命令のことを指す。
現行命令ブロックとはプロセッサ・コアによって現在実行されている命令を含む命令ブロックのことを指す。
【００７５】
[00116]  簡略のため、”ゲスト命令セット”とはプロセッサ・システムによって実行されるプログラムに対応する命令セットのことを指すことにする。ゲスト命令セットに含まれる全ての命令はゲスト命令である。
”ホスト命令セット”とはプロセッサ・システムのプロセッサ・コアによってサポートされている命令セットのことを指す。
ホスト命令セットに含まれている全ての命令はホスト命令である。
”命令ブロック”とはアドレスにおいて同じ高ビット（もしくは、最重要ビット）を持つ連続した命令のことを指す。
”命令フィールド”とは、第１オペコード(Op-code)・フィールド、第２オペコード・フィールド、第１ソース・レジスタ・フィールド、第２ソース・レジスタ・フィールド、ターゲット・レジスタ・フィールド、即値フィールド、などなどのように、命令語で同じ内容を表現する連続したフィールドのことを指す。
加えて、ホスト命令セットは固定長命令セットであり、つまり各ターゲット命令の語長は固定されている（例えば、３２ビット）。
ゲスト命令セットは固定長命令セットあるいは可変長命令セットでもありうる。
ゲスト命令セットが可変長命令セットである場合、可変長ゲスト命令の全てのバイトの高ビットアドレスは必ずしも同じではない。
つまり、ゲスト命令は二つの命令ブロックにまたがる。
ゲスト命令は前命令ブロックの最後の命令であり、そしてこの命令の１つ後の命令が次の命令ブロックの最初の命令となる。
【００７６】
[00117]  分岐命令もしくは分岐ポイントとはプロセッサ・コアに命令フローの変化をおこさせる（つまり、命令が順番に実行されない）全ての適当な命令のことを指す。
分岐命令アドレスとは分岐命令自身のアドレス、命令ブロックのアドレスと命令オフセットアドレスを含む、のことを指す。
分岐ターゲット命令とは分岐命令によって分岐先になったターゲット命令のことを指す。
分岐ターゲット命令アドレスとは分岐が取られた場合の分岐先のアドレス、すなわち分岐ターゲット命令の命令アドレスのことを指す。
【００７７】
[00118]  はじめに、全てのゲスト命令は１つまたは複数のホスト命令に変換される；もしくは複数のゲスト命令が１つまたは複数のホスト命令に変換される。
それから、１つもしくは複数のホスト命令がプロセッサ・コアによって実行され、プロセッサ・コアが直接ゲスト命令を実行するのと同じ働きを実現する。
図１は開示された実施形態と整合する例示的な命令処理システムの構造概略図を示す。
【００７８】
[00119]  図１に示されるように、メモリ103は実行されるべきプログラムの実行可能コードを記憶する。実行可能コードはゲスト命令セットの中のゲスト命令によって構成される。
各ゲスト命令はコンバータ200へ送られ該当する１つもしくは複数のホスト命令に変換され、ホスト命令はプロセッサ・コア101へ実行されるため送られる。
コンバータ200は、特定のゲスト命令セットをホスト命令セットに変換するのをサポートする固定構造でありうる。
コンバータ200は設定可能でもありうる。つまり、設定に応じて、１つあるいは複数のゲスト命令がホスト命令セットに変換される。
固定構造を持つコンバータ200は設定可能コンバータの特殊例と捉えられるので、設定可能コンバータのみをここで取り扱う。
【００７９】
[00120]  図２は開示された実施形態と整合する例示的なコンバータの構造概略図を示す。
図２に示されるように、コンバータ200はメモリ201、アライナ203、抽出アレイ205、命令スプライサ207、そしてオペレーション・コード（もしくはオペコード・スプライサ）209を含む。
アライナ203はゲスト命令をゲスト命令セットの中でシフトし整列するように設定されている。
そして、ゲスト命令が命令ブロック境界を越えるとき、アライナ203はゲスト命令を命令ブロックにシフトしてゲスト命令を整列させる。
【００８０】
[00121]  図３Aは開示された実施形態と整合する例示的なアライナの構造概略図を示す。
図３Aに示されるようにアライナ203はコントローラ301、バッファ303と305、そしてローテータ307を含む。
ゲスト命令の語調の単位はバイトであると仮定されている。そして命令ブロックは最も長いゲスト命令の全てのバイトを含むと仮定されている。
この開示においては、２つのバッファは２つの連続する命令ブロックをそれぞれ保存するものとする。
従って、処理中のゲスト命令はバッファ303の命令ブロックに完全に収まるか、命令ブロック境界をまたがって置かれる（つまり、命令の最初の部分がバッファ303の命令ブロックの終わり部分に置かれ、命令の残りの部分がバッファ305の命令ブロックの最初の部分に置かれる）。
セレクタ312、314、316、318そして320はそれぞれ左から右へ順番に１バイトに対応する。
デコーダ327の制御によって、セレクタはバッファ303またはバッファ305の中身を選びそして選ばれた内容をローテータ307のインプットに送る。
【００８１】
[00122]  コントローラ301はレジスタ321と加法器323を含む。
コントローラのビット幅はmで、2mはバッファ303とバッファ305のバイト幅に等しい。
レジスタ321は現在変換されているゲスト命令のスタート・オフセット・アドレス(SA)を記憶する。
エンコーダ327によってスタート・アドレスがエンコードされた後、スタート・アドレスは選択シグナルとして用いられ、バッファ303とバッファ305の出力セレクタ312、314、316、318、320を制御する。
セレクタはバッファ303からのオフセット・アドレスがSA以上のバイトを選び、そしてバッファ305からのオフセット・アドレスがSA以下のバイトを選び、選ばれたバイトをローテータ307へ送る。
シフト量はローテータ307へバス313を経て送られる。
【００８２】
[00123]  よって、ローテータ307のインプットの中において、オフセット・アドレスがSA以上の部分がゲスト命令の開始部分353であり、オフセット・アドレスがSA未満の部分がゲスト命令の終結部分355である。
さらに、終結部分355より後ろに次の順番のゲスト命令の一部があるかもしれない。
従って、受け取ったシフト量にもとづいて、ローテータ307は左回転操作を行なう。
すなわち、ゲスト命令の開始部分353が命令ブロックの始めにシフトされ、そしてゲスト命令の終結部分355が同じ命令ブロックの開始部分の右に置かれる。
そして、命令ブロックがローテータ307から出力される。
【００８３】
[00124]  命令ブロックのゲスト命令が削除された後、ゲスト命令の長さがバス325を経てメモリ201から送り出される。
ゲスト命令の長さはコントローラ301の加法器323へバス325を経て送られバス313にてシフト量に加算される。
この結果は次のゲスト命令の開始アドレスであり、レジスタ321に記憶される。
加えて、もし加法器323のキャリー出力が’0’であるなら、それは次のゲスト命令の開始部分がバッファ303にあることを示し、上記方法を用いて整列される。
もし加法器323のキャリー出力が’1’であるなら、それは次のゲスト命令の開始部分がバッファ305にあることを示す。
このとき、キャリー出力の制御によって、バッファ305の中身はバッファ303に充填され、新しい後続命令ブロックがバッファ305に充填される。
従って、次のゲスト命令の開始位置はバッファ303の中にあり上記方法を用いて整列される。
【００８４】
[00125]  図３Bは開示された実施形態と整合する例示的なアライナの作動プロセスの概略図を示す。
ゲスト命令351は命令ブロックの境界を跨ぎこしている。開始部分353は命令ブロック357の中にあり、終結部分355は命令ブロック359の中にある。
命令ブロック357と命令ブロック359はバッファ303とバッファ305の中にそれぞれ記憶されている。
命令ブロック357と命令ブロック359がセレクタによって選択されスプライスされた後、命令ブロック361がローテータ307のインプットとして形成される。
よって、命令ブロック361は三つの部分（左から右へ）から形成される: ゲスト命令351の終結部分355、ゲスト命令351の後続命令の部分363、そしてゲスト命令351の開始部分353。
【００８５】
[00126]  シフタ307は左シフト操作をゲスト命令の開始部分353のオフセット・アドレスをシフト量として使って循環的に実行する。それによってゲスト命令351の開始アドレスが命令ブロックの始めと整列される。
この開示においては、循環シフトによって得られた命令ブロック365はゲスト命令351とゲスト命令351の順番上次の命令の部分363とを含む。
部分363は後続のオペレーションに何も影響がないため省略することができる。
【００８６】
[00127]  図２に戻って、アライナ203によって整列されたゲスト命令は抽出アレイ205に送られる。
命令タイプによって、各命令フィールドが抽出される。
抽出アレイ205は同じ構造を持つ複数の抽出器から構成される。
抽出器の数はゲスト命令セット中の任意の命令における命令フィールドの最大数より以上である。
プロセッサ・システムによって対応されている全てのゲスト命令セットにおいて、もし命令が最大n個の命令フィールドを含んでいるならば、抽出アレイ205はn個の抽出器から構成される。
各抽出器は同じゲスト命令を受け取り、そしてメモリ201によって送られた制御シグナルにもとづいて抽出されるべき情報を出力する。
【００８７】
[00128]  図４Aは開示された実施形態と整合する例示的な抽出器の構造概略図を示す。
図４Aに示されるように、抽出器はローテータ401、マスキングデバイス403から構成される。
受け取ったシフト量に応じて、ローテータ401は入力されたゲスト命令ワードをシフトし、命令中の特定の命令フィールドが該当する位置にシフトされる。
マスキングデバイス403はシフトされた命令とマスクワードのためにBit AND操作を行い、抽出器の特定の命令フィールド以外の、出力の残りの部分が全て’0’になるようにする。
従って、ゲスト命令の命令フィールドはホスト命令の命令フィールドの位置へシフトされる。
【００８８】
[00129]  図４Bは開示された実施形態と整合する例示的な抽出器の作動プロセスの概略図を示す。
ゲスト命令451の命令フィールド453に対するシフトおよびマスク操作が図４Bにおいて示されている。
ローテータ401のシフト量はゲスト命令とホスト命令の中における命令フィールドのオフセット・アドレス差異に等しい。
例えば、命令フィールド453がゲスト命令451の１０番目ビット、１１番目ビットと１２番目ビットに位置し、命令フィールド453が対応するホスト命令の６番目ビット、７番目ビット、８番目ビットに位置するとき、該当するシフト量は左シフト４ビット（つまり、１０マイナス６は４に等しい）である。
従って、ゲスト命令451がローテータ401によってシフトされた後、図４Bに示されるようにシフトされた命令455が得られる。
【００８９】
[00130]  命令フィールドがホスト命令の６番目ビット、７番目ビット、８番目ビットに位置するため、
マスク・ワード457の６番目ビット、７番目ビット、８番目ビットは全て’1’であり、マスクワード457の他のビットは全て’0’である。
従って、シフトされた命令455とマスクワード457はマスクデバイス403においてBit AND操作を施され、結果は抽出器の出力として、つまり図４Bの抽出器出力459として使われる。
【００９０】
[00131]  図２に戻って、抽出アレイ205の幾つかの抽出器はゲスト命令のオペレーション・コード・フィールドを抽出するのに用いられる。そして抽出アレイ205の他の抽出器はゲスト命令の他の命令フィールドを抽出するのに用いられる。
例えば、ゲスト命令セットの中の命令のオペレーション・コード・フィールドの数が最大３であるなら、抽出器アレイ205の中の抽出器211、213、215がオペレーション・コード・フィールドを抽出するのに用いられる（オペレーション・コード抽出器と呼ばれる）。そして抽出器アレイ205の残りの抽出器（つまり抽出器221、223、225そして227)は他の命令フィールドを抽出するのに用いられる（他フィールド抽出器と呼ばれる）。
抽出器211、213、215によって抽出されたオペレーション・コードはそれぞれ別の場所にシフトされ重なることはない。
抽出されたオペレーション・コードはオペレーション・コード・スプライサ209に送られBit OR操作を施され、よって完全なオペレーション・コードが得られる。
完全なオペレーション・コードはメモリ201にアドレス指定アドレスとして送られる。
【００９１】
[00132]  抽出器がオペレーション・コード・フィールドを抽出するのに用いられるとき、抽出器の制御シグナル（例えば、シフト量、マスクワード、などなど）は全て対応するレジスタから来る。
例えば、図２で示されるように、レジスタ212 の制御シグナルがセレクタ222によって選ばれた後、制御シグナルは抽出器211を制御するために用いられる; レジスタ214の制御シグナルがセレクタ224によって選ばれた後、制御シグナルが抽出器213を制御するのに用いられる；そしてレジスタ216の制御シグナルがセレクタ226によって選ばれた後、制御シグナルが抽出器215を制御するのに用いられる。
【００９２】
[00133]  抽出器が他の命令フィールドを抽出するのに用いられるとき、抽出器の制御シグナルの全てはメモリ201から来る。
メモリ201は数列のマッピング情報から構成され、直接アクセス領域と間接アクセス領域に分割されている。
マッピング情報の各行は１つのアドレス指定アドレスに対応している。
全てのアドレス指定アドレスはホスト命令の完全なオペレーション・コードに対応しているから、１つもしくは複数行のマッピング情報がゲスト命令セットにおける１つもしくは複数のゲスト命令に対応し、そしてマッピング情報は該当する抽出情報を記憶する。
抽出情報は、ゲスト命令に対応するホスト命令のオペレーション・コード、全ての命令フィールド（オペレーション・コード・フィールド以外の）の開始位置と幅、そしてゲスト命令の命令フィールドと対応するホスト命令の命令フィールドとの間の位置関係とを含んでいる。
【００９３】
[00134]  この開示において、アドレス指定操作はメモリ201の直接アクセス領域で、ゲスト命令のオペレーション・コードにもとづいてマッピング情報の該当する行を見いだすために直接実行される。
特にオペレーション・コード・スプライサ209によって出力された完全なオペレーション・コードは直接アクセス領域のアドレス指定アドレスとして、該当するマッピング情報の行を読み出すために、用いられる。
メモリ201の間接アクセス領域はマッピング情報の他の行のインデックス値（つまり、行アドレス情報）にもとづいてアクセスされる必要がある。
例えば、ゲスト命令が複数のホスト命令に対応するとき、ゲスト命令の完全なオペレーション・コードは、直接アクセス領域から複数のホスト命令のうちの最初のホスト命令に対応するマッピング情報を読み出すために、アドレス指定アドレスとして用いられる。
このマッピング情報は間接アクセス領域にある第２のホスト命令に対応するマッピング情報のインデックス値を含む。
従って、インデックス値にもとづいて、第２ホスト命令に対応するマッピング情報が間接アクセス領域の中から見い出され、第２ホスト命令が変換される。
このようにして、全ての複数のホスト命令は変換される。
【００９４】
[00135]  図５Aは開示された実施形態と整合する例示的なマッピング情報の行の概略図を示す。
図５Aに示されるマッピング情報の行はゲスト命令に対応している。
つまり、１つのゲスト命令は１つのホスト命令に対応している。
マッピング情報501はホスト命令のオペレーション・コード(OP)503、ゲスト命令の長さ505、複数の抽出器の設定情報(例えば、抽出器507、509、511そして513の設定情報)、そしてエンディング・フラグ515から構成されている。
ホスト命令のオペレーション・コード503はゲスト命令に対応するホスト命令のオペレーション・コードである。
ゲスト命令の長さ505はゲスト命令の命令ワードの長さであり、アライナ203へゲスト命令325の長さの値として送られる。
ゲスト命令325の長さの値は現行命令の開始ポイントに加算され、結果は次の命令の開始ポイントをを計算するのに用いられる。
エンディング・フラグ515は全て’0’と記憶し、この行はゲスト命令に対応するホスト命令の最後の行のマッピング情報であることを示す。
【００９５】
[00136]  マッピング情報501の中の抽出器の設定情報の数は抽出器の数に等しく、そして設定情報と抽出器の間には１対１の対応がある。
設定情報は３つのパートからなる: シフト量(R)、マスク値の中の’1’の開始位置(B)、そしてマスク値の中の’1’の数(W)。
シフト量Rは該当する抽出器に送られローテータ401のシフトを制御するのに用いられる。
開始位置Bと数Wはマスク値の中の’1’の位置を決定するのに用いられる。
つまり、連続するW個のマスク・ビット（位置Bから始まって）の値は’1’であり、他のマスクビットは’0’である。
【００９６】
[00137]  図５Bは開示された実施形態と整合するもう１つの例示的なマッピング情報の複数の行の概略図を示す。
図５Bに示されるように、マッピング情報の複数の行が１つのゲスト命令に対応する。
つまり、ゲスト命令は複数のホスト命令に対応している。
ここにおいては、ゲスト命令は３つのホスト命令に対応し、３つのホスト命令の情報に対応するマッピング情報は、マッピング情報551、マッピング情報561としてマッピング情報571であるとする。
マッピング情報551はメモリ201の直接アクセス領域に置かれ、アドレス領域はゲスト命令から抽出されたオペレーション・コードをデコードすることによって直接アクセスされうる。
マッピング情報561とマッピング情報571は間接アクセス領域に置かれ、直接アクセス領域にあるマッピング情報(例えばマッピング情報551)に記憶されたインデックス値にもとづいて指定されなければならない。
【００９７】
[00138]  図5Aに示されるマッピング情報501と同様に、マッピング情報551もホスト命令のオペレーション・コード503、ゲスト命令の長さ505、複数の抽出器の設定情報(例えば抽出器507、509、511、そして513の設定情報)、そしてエンディング・フラグ515から構成される。
マッピング情報561とマッピング情報571もホスト命令のオペレーション・コード503、複数の抽出器の設定情報（例えば抽出器507、509、511そして513の設定情報）とエンディング・フラグ515を含むが、しかしマッピング情報561とマッピング情報571はゲスト命令の長さ505を含まないかもしれない。
マッピング情報の３行のオペレーション・コード503はゲスト命令に対応する３つのホスト命令のオペレーション・コードにそれぞれ対応する。
【００９８】
[00139]  マッピング情報551の中のゲスト命令の長さ505はゲスト命令の命令ワードの長さである。
ゲスト命令の長さ505はアライナ203へゲスト命令325の長さの値として送られる。
ゲスト命令325の長さの値は次のゲスト命令の開始ポイントを計算するのに用いられる。
マッピング情報551のエンディング・フラグ515とマッピング情報561はマッピング情報のエンドを意味せず、他の行における連続的なマッピング情報を意味する。
他の状況の場合も上記に沿って得られる。
マッピング情報551の命令ワードの長さ505とマッピング情報561は後続するマッピング情報へポイントするインデックスをそれぞれ記憶する。
つまり、マッピング情報551の命令ワードの長さ505はメモリ201においてマッピング情報561のインデクス値を記憶し、そしてマッピング情報561の命令ワードの長さ505はメモリ201においてマッピング情報571のインデクス値を記憶する。
【００９９】
[00140]  マッピング情報571は、１つのゲスト命令に対応する複数のホスト命令の最後のホスト命令の指示情報として用いられる。
マッピング情報571のエンディング・フラグ515は全て’0’を保存する。
つまり、オペレーション・コード（もしくはオペコード）抽出器から抽出されたオぺコード全体にもとづいて、最初の行のマッピング情報が見いだされる。
そして、各行のマッピング情報のエンディング・フラグ515の制御のもと、メモリ201は１つのゲスト命令に対応する１つもしくは複数のホスト命令のマッピング情報を正しく出力し、ゲスト命令セットを正しく変換する。
【０１００】
[00141]  図２に戻って、アライナ203によって出力されたゲスト命令に対して、オペレーション・コード抽出器によって抽出された完全なオペレーション・コードがアドレス指定アドレスとして用いられ、対応するホスト命令503のオペレーション・コードをメモリ201から読み出し、そして対応するゲスト命令の各命令フィールドの抽出情報を読み出す。
ホスト命令のオペレーション・コードは命令スプライサ207へバス230を経て送られる。
対応するゲスト命令の各命令フィールドの抽出情報はそれぞれ他フィールド抽出器へ送られる。
抽出情報に含まれているフィールド開始位置、フィールド幅そしてシフト量にもとづいて、他フィールド抽出器はゲスト命令の該当するフィールドを特定の位置へシフトし、マスク操作を実行し、シフトされた命令フィールド以外の抽出器の出力は全て’0’になる。
【０１０１】
[00142]  従って、オペレーション・コード・フィールド以外の全ゲスト命令フィールドが、フィールド抽出器によってホスト命令に必要とされる命令フィールドまでシフトされた後、命令フィールドは命令スプライサ207へ出力され、Bit OR操作を施され、そしてメモリ201によって出力されたホスト命令のオペレーション・コードとともにスプライスされ、ホスト命令セットのフォーマットに合致したホスト命令を形成する。
ホスト命令はプロセッサ・コアへ実行のために送られ、ゲスト命令の該当する機能が実現される。
【０１０２】
[00143]  図５C、５Dそして５Eは開示された実施形態と整合する例示的なマッピング情報メモリの作動プロセスの概略図を示す。
図５C、５Dそして５Eに示されるように、メモリ201は直接アクセス領域531と間接アクセス領域533を含む。
間接アクセス領域のアドレスは直接アクセス領域のアドレスより高位にある。
例えば、ゲスト命令のオペレーション・コードによって形成されたアドレスがnビットの場合、メモリ201のアドレスはn+1ビットである。
アドレスの最上位ビットが’0’であるとき、直接アドレス領域531がアクセスされる；最上位ビットが’1’のとき、間接アクセス領域533がアクセスされる。
【０１０３】
[00144]  メモリ201内のマッピング情報の各行は２ビットからなるエンディング・フラグ（例えば、エンディング・フラグはYビットとZビットから成る）を含む。
エンディング・フラグはこの行のマッピング情報に対応するゲスト命令とホスト命令の間の変換関係を示すのに用いられる。
つまり、関係は以下のうちの１つである：１つのゲスト命令が１つのホスト命令に対応する、もしくは１つのゲスト命令が複数のホスト命令に対応する、もしくは複数のゲスト命令が１つのホスト命令に対応する；
そしてこれらの中の１つの関係にもとづいて次の命令を処理するコンバータを制御する。
【０１０４】
[00145]  特に、図５Cに示されるエンディング・フラグ535の’00’値はマッピング情報の行が現行のゲスト命令に対応することを示している。
すなわち、１つのゲスト命令が１つのホスト命令に対応している。
図５Dに示されるエンディング・フラグ545の’10’値はマッピング情報の行が現行のゲスト命令と次のゲスト命令に対応していることを示す。
つまり、複数のゲスト命令が１つのホスト命令に対応する。
図５Eに示されるエンディング・フラグ555の’01’値はマッピング情報の行とマッピング情報の行の中のインデックス値によってポイントされたマッピング情報が共に現行のゲスト命令に対応することを示す。
つまり、１つのゲスト情報が複数のホスト命令に対応する。
【０１０５】
[00146]  エンディング・フラグのYビットは次のゲスト命令を変換するかを示すのに用いられる。
特に、もしYビットが’0’ならば、現行ゲスト命令（もしくは現行のゲスト命令を含む複数の連続したゲスト命令）の変換は完了したことを示し、次のサイクルで次のゲスト命令の変換が行なわれる。
もしYビットが’1’ならば、現行ゲスト命令の変換が未完であることを示し、そして該当する変換が次のサイクルで引き続き行なわれる（次の命令の変換は開始されない）。
【０１０６】
[00147]  レジスタ537に記憶された上記エンディング・フラグ、そしてマッピング情報の行のインデクス値は次の命令の変換のためにレジスタ539に記憶される。
レジスタ537に記憶された前のゲスト命令のエンディング・フラグは、現行ゲスト命令が処理される時に、セレクタ541（セレクタ541はエンディング・フラグのYビットによって制御される）とアドレス・スプライス・ロジック543（アドレス・スプライス・ロジック543はエンディング・フラグのZビットによって制御される）を制御するために用いられる。
【０１０７】
[00148]  レジスタのYアウトプットは双方向セレクタを制御する。
Yが’0’のとき、セレクタはゲスト命令のオペレーション・コードをメモリ201のアドレスとして選択する；
Yが’1’のとき、セレクタはレジスタ539に記憶されたメモリ201における前命令のインデクス値を、命令変換中のメモリ201の現行アドレスとして選択する。
Z値はゲスト命令のオペレーション・コードによって形成されたアドレスに、アドレスの最上位ビットとしてスプライスされる。
Zが’0’のとき、メモリ201上のアドレスは直接アクセス領域をポイントする。
Zが’1’のとき、メモリ201上のアドレスは間接アクセス領域をポイントする。
図５C-５Eに示される円はバス・スプライシングを示している。
【０１０８】
[00149]  図５Cに示されるように、前ゲスト命令に対応するエンディング・フラグYZは’00’であり、ホスト命令は前述の方法を使って対応するマッピング情報にもとづいて生成されうる。
従って、現行ゲスト命令は少なくとも１つの新しいホスト命令に対応する。
このとき、アドレス・スプライス・ロジック543の１つのインプットはオペレーション・コード・スプライサ209の現行ゲスト命令の完全なオペレーション・コードから来る。
そしてアドレス・スプライス・ロジック543の他のインプットはレジスタ537のエンディング・フラグのZビット（’0’）である。
つまり、全’0’が完全なオペレーション・コードの前にスプライスされ、アドレス・スプライス・ロジック543の出力は依然として現行ゲスト命令の完全なオペレーション・コードであり、直接アクセス領域531のアドレスに対応する。
セレクタ541は、エンディング・フラグのYビット（’0’）の制御の下、ORロジックの出力をメモリ201のアドレス指定アドレスとして選択する。
従って、現行ゲスト命令に対応するマッピング情報はメモリ201の直接アクセス領域531から読み出され、該当する命令フィールドは前述の方法に従ってシフトされマスクされ命令スプライサ207へ送られる。
さらに、エンディング・フラグのYビットは’0’なので、次ゲスト命令の変換は次のサイクルで開始される。
【０１０９】
[00150]  図５Fは開示された実施形態と整合する例示的な命令スプライサの概略図を示す。
レジスタ563に記憶された内容は変換されたホスト命令もしくは変換が未完了の場合に得られる中途変換結果である。
エンディング・フラグ内のZビットはレジスタ561に記憶され、次のサイクルでANDロジック567に送られる。
Zビットが反転回路にて反転された後、Zビットはレジスタ563内のホスト命令が完全に変換されたか否かを示すシグナルとして出力される。
ANDロジック567の他のインプットはレジスタ563に記憶されている値から来る。
ANDロジック567の出力はORロジック569へ送られる。
ORロジック569の他のインプットは、各抽出器から送られる、シフトとマスキングから得られた結果である。
レジスタ563の出力は命令スプライサ207の出力667である。
【０１１０】
[00151]  図5Fに示される状況にとって、エンディング・フラグのZビットは’0’であるから、もしANDロジック567の出力が次のサイクルで’0’であるなら、ORロジック569の出力は各抽出器のシフトとマスクキングから得られる結果である。
結果はレジスタ563の完全なホスト命令にスプライスされる。
このとき、反転器565の出力は’1’（すなわち、Zビットの反転値）であり、変換が完了したことを示し、レジスタ563に記憶された内容は変換によって得られたホスト命令である。
従って、ゲスト命令をホスト命令に変換するプロセスは完了する。
変換されたホスト命令は次のサイクルで出力され、変換器は次のゲスト命令を変換のために読み始める。
【０１１１】
[00152]  図5Dに示されるように、前ゲスト命令に対応するエンディング・フラグは’01’であり、ゲスト命令が複数のホスト命令に対応することを示し、そして前マッピング情報に対応するホスト命令は変換を完成するのに充分でない。 
従って、前ゲスト命令の変換を完了する前に、現行ゲスト命令は変換され得ない。
このとき、レジスタ539に記憶されている内容は前マッピング情報に含まれていたインデックス値である。
つまり、間接アクセス領域533内の前マッピング情報の次のマッピング情報（これら二つのマッピング情報は前ゲスト命令に対応する）のアドレス指定アドレスである。
セレクタ541は、エンディング・フラグのYビット(’1’)の制御のもと、レジスタ539によって出力されたインデクス値を選択する。
インデクス値に対応するメモリ201のアドレス領域は間接アクセス領域533内にあるから、前ゲスト命令に対応するマッピング情報が間接アクセス領域533から読み出され、そして対応する命令フィールドが前述の方法によってシフトされマスクされ、命令スプライサ207へ送られる。
エンディング・フラグのYビットは’1’であるから、現行命令の変換は次のサイクルで続行し、次ゲスト命令の変換は開始されない。
【０１１２】
[00153]  このとき、命令スプライサ207の中のフラグのZビットは’0’である。
従って、次のサイクルで、ANDロジック567の出力は’0’になり、そしてORロジック569の出力は各抽出器のシフトとマスキングから得られる結果になる。
結果はレジスタ563で完全なホスト命令にスプライスされる。
反転器565の出力は’1’（つまり、Zビットの反転値）であり、変換が完了したことを示し、レジスタ563に記憶された内容は変換によって得られたホスト命令となる。
従って、ゲスト命令から複数のホスト命令に変換するプロセスにおいて、複数のホスト命令の中の１つの命令が生成され、そして生成されたホスト命令は次のサイクルで出力される。
次のサイクルにおいて、上記プロセスは対応するマッピング情報のフラグのYビットが’0’になるまで繰り返される。
それはマッピング情報に対応するホスト命令が複数のホスト命令の中の最後のホスト命令であることを示す。
ホスト命令は次のサイクルで出力され、１つのゲスト命令を複数のゲスト命令に変換するプロセスが完了する。
同時に、コンバータは次のゲスト命令を変換のために読みこむのを開始する。
【０１１３】
[00154]  図５Eに示されるように、前ゲスト命令に対応するエンディング・フラグは’01’であり、そのゲスト命令と次ゲスト命令（つまり、現行ゲスト命令）が同じホスト命令に対応することを示す。
従って、現行ゲスト命令は、複数のゲスト命令に対応するホスト命令が生成されるまで、継続的に変換される。
このとき、アドレス・スプライシング・ロジック543の１つのインプットはオペレーション・コード・スプライサ209からの現行ゲスト命令の完全なオペレーション・コードであり、アドレス・スプライシング・ロジック543の他のインプットはレジスタ537のフラグのZビット(‘1’)である。
すなわち、アドレス・スプライシング・ロジック543の出力が間接アクセス領域に対応するアドレスになるように、追加的なアドレスが完全なオペレーション・コードの前にスプライスされる。
セレクタ541は、エンディング・フラグのYビット(‘0’)の制御のもと、ORロジックの出力をメモリ201のアドレス指定アドレスとして選択する。
従って、該当するマッピング情報（つまり、前ゲスト命令と現行ゲスト命令とに対応するマッピング情報）がメモリ201の間接アクセス領域533から読み出される。
そして、該当する命令フィールドが前述の方法に沿ってシフトされマスクされ、命令スプライサ207へ送られる。
【０１１４】
[00155]  このとき、命令スプライサ207において、エンディング・フラグのZビットは’1’である。
従って、次のサイクルにおいて、ANDロジック567の出力はレジスタ563に記憶された値（すなわち、変換の中間結果）であり、ORロジック569の出力は抽出器のシフトとマスキング操作から得られた結果と中間結果とのコンビネーション（例えば、BitOR操作）である。    
これらの結果はレジスタ563において新しい中間結果を形成する。
反転器565の出力は’0’（すなわち、Zビットの反転値）であり、変換が未完了であることを示す。
フラグのYビットは’0’であるから、コンバータは次のゲスト命令を変換し始める。
Zビットが’0’になるまで（現行ゲスト命令が１つのホスト命令に対応する複数のゲスト命令の中の最後のゲスト命令であることを示す）、上記プロセスは繰り返され、複数の連続したゲスト命令に対応した命令フィールドのシフトとマスク結果はORロジック569によって結合され、複数のゲスト命令が１つのホスト命令に変換される。
このとき、コンバータ565の出力は’1’であり（すなわち、Zビットの反転値）、変換が完了したことを示し、そしてレジスタ563に記憶された内容は変換によって得られたホスト命令である。
【０１１５】
[00156]  なお、メモリ201は書き換え可能なランダム・アクセス・メモリ（RAM）でよい。
サポートされるべき異なるゲスト命令セットに応じて、異なるマッピング情報がRAMに書き込まれる。
メモリ201は読み取り専用メモリ（ROM）でもよい。
つまり、メモリ201は１つもしくは複数のゲスト命令セットをサポートする。
加えて、メモリ201は同じ機能を果たす論理回路でもよい。
つまり、メモリ201は１つもしくは複数のゲスト命令セットをサポートする。
さらに、バッファの一部はメモリ201として割り当てられバッファとして使われない。
【０１１６】
[00157]  加えて、もしゲスト命令が固定長命令であり、抽出器の長さが命令ワードの長さに等しいならば、アライナ203はコンバータ200から省くことが出来る。
コンバータ200は異なる設定に応じて異なるゲスト命令セットをサポートできる。
１つのゲスト命令セットの命令長が抽出器の長さに等しいとき、セレクタ204は直接的に該当するゲスト命令を選び各抽出器へ送ることができる；あるいは、セレクタ204はアライナ203の出力を選び、選ばれた出力を各抽出器へ送る。
他のオペレーションは前述実施形態における記述と同じでありここでは繰り返さない。
【０１１７】
[00158]  ロセッサ・システムの異なるレベルのキャッシュは異なる命令セットを記憶し、それによってプロセッサ・システムの性能を向上させることができる。
例えば、ゲスト命令はプロセッサ・システムのレベル２キャッシュ(L2)に記憶できる；ホスト命令はプロセッサ・システムのレベル１キャッシュ(L1)に記憶できる；そして命令セット変換はゲスト命令がL1キャッシュに充填された時に実行される。
図６は開示された実施形態と整合するマルチレベル・キャッシュを含むプロセッサ・システムを示す。
【０１１８】
[00159]  図６に示されるように、プロセッサ・システムはプロセッサコア601、アクティブリスト604、スキャン・コンバータ608、トラック・テーブル610、置換モジュール611、トラッカー614、ブロック・アドレス・マッピング・モジュール（XMAP)620、オフセット・アドレス・マッピング・モジュール（YMAP)618、オフセット・アドレス・コンバータ622、減算器928、レベル１(L1)キャッシュ602、レベル２(L2)キャッシュ606、そしてセレクタ640,660,680,638,692,694,696を含む。
図６に示された中空円はバスのスプライシングを示す。
プロセッサ・システムはまたコントローラを含みうる（図６には示されていない）。
コントローラはブロック・アドレス・マッピング・モジュール620、アクティブリスト604、トラック・テーブル610そして置換モジュール611から出力されたオペレーションを受け取るように設定され、機能モジュールのオペレーションを制御する。
【０１１９】
[00160]  この開示において、L2キャッシュ606はゲスト命令を記憶し、L1キャッシュ602は対応するホスト命令を記憶する。
1番目のアドレスと２番目のアドレスはL1キャッシュまたはL2キャッシュの中の命令の位置情報を示すことに用いることができる。   
ここにおいては、1番目のアドレスと２番目のアドレスはL1キャッシュまたはL2キャッシュのアドレス指定アドレスであるものとする。
【０１２０】
[00161]  ホスト命令がL1キャッシュ602に記憶されているとき、BN1Xはホスト命令を含む命令ブロックのレベル１ブロック番号を示すことに用いられ（すなわち、L1キャッシュの中の該当するL1命令ブロックをポイントしている）、BN1Yはホスト命令のレベル１ブロック・オフセットを示すことに用いられる（すなわち、L1命令ブロックにおけるホスト命令の相対位置）。
ゲスト命令がL2キャッシュ606に記憶されているとき、BN2Xはゲスト命令を含むレベル２命令ブロックのブロック番号を示すことに用いられ（すなわち、BN2XはL2キャッシュの中の該当するL2命令ブロックをポイントしする）、BN2Yはゲスト命令のレベル２ブロック・オフセットを示すことに用いられる（すなわち、L2命令ブロックにおけるゲスト命令の相対位置）。
説明のために、BN1はBN1XとBN1Yを表現するために用いられ、BN2はBN2XとBN2Yを表現するために用いられるものとする。L1キャッシュの中のホスト命令に対応するゲスト命令は全てL2キャッシュに記憶されているから、L1キャッシュに記憶されているホスト命令はBN1もしくはBN2で表すことができる。
【０１２１】
[00162]  アクティブ・リスト604のエントリとL2キャッシュ606のメモリ・ブロックとの間には一対一の関係がある。
アクティブ・リスト604の各エントリはL2命令ブロック・アドレスとL2ブロック番号BN2Xのマッチするペアを記憶し、L2キャッシュ606のどのメモリ・ブロックが命令ブロック・アドレスに対応するL2命令ブロックを記憶するかを示している。
マッチング操作はアクティブ・リスト604においてL2命令ブロック・アドレスにもとづいて実行され、マッチング操作が成功したときBN2Xが得られる。
また、アドレス指定操作がアクティブ・リスト604においてBN2Xにもとづいて実行され、該当するL2命令ブロック・アドレスが読み出される。
【０１２２】
[00163]  ゲスト命令がL2キャッシュ606からL1キャッシュ602に充填されるとき、スキャン・コンバータ608はゲスト分岐命令の分岐ターゲットアドレスを計算し、そしてゲスト命令はスキャン・コンバータ608の中の命令コンバータ200によってホスト命令に変換される。
取得された分岐ターゲットアドレスはアクティブ・リスト604へ送られ、アクティブ・リスト604の中に記憶された命令ブロックアドレスとマッチングされ、分岐ターゲットがL2キャッシュ606に記憶されているかを決定する。
もしマッチング操作が不成功ならば、それは分岐ターゲット命令を含む命令ブロックがL2キャッシュ606にまだ充填されていないことを示す。
そしてこの命令ブロックが下位レベルキャッシュからL2キャッシュ606へ充填されたとき、該当するL2命令ブロックとL2ブロック番号のペアがアクティブ・リスト604の中に生成される。
【０１２３】
[00164]  スキャン・コンバータ608はL2キャッシュ606からL1キャッシュ602へ充填される命令ブロック（ゲスト命令）を変換し吟味し、ホスト命令に対応するトラック・ポイント情報を抽出し、トラック・テーブル610の該当するエントリに抽出されたトラック・ポイント情報を充填する。それによってL2命令ブロックに対応する少なくとも１つのL1命令ブロックのトラックが生成される。
特に、トラックを生成するとき、置換モジュール611は利用可能なトラックへポイントするBN1Xを生成する。
置換モジュール611は置換アルゴリズム（例えばLRUアルゴリズム、LFUアルゴリズムなど）にもとづいて利用可能トラックを決定する。
【０１２４】
[00165]  特に、スキャン・コンバータ608はL2キャッシュ606からL1キャッシュ602に充填される全てのゲスト命令を吟味し、ある種の情報、例えば命令タイプ、命令ソースアドレスそして分岐命令の分岐オフセットを抽出し、そして抽出された情報を元に分岐ターゲットアドレスを計算する。
直接分岐命令に対しては、分岐ターゲットアドレスは、分岐命令を含む命令ブロックのブロックアドレス、命令ブロック内の分岐命令のオフセット、そして分岐オフセット、を足し合わせることで得ることができる。
命令ブロックアドレスはアクティブ・リスト604から読み出され、スキャン・コンバータ608のアドレスに直接送られる。
現行命令ブロックを記憶するのに用いられるレジスタがスキャン・コンバータ608に加えられうる。
従って、アクティブ・リスト604は命令ブロックアドレスをリアルタイムで送り出す必要はない。
この開示においては、直接分岐命令の分岐ターゲットアドレスはスキャン・コンバータ608によって生成され、間接分岐命令の分岐ターゲットアドレスはプロセッサ・コア601によって生成される。
両方のアドレスはゲスト命令アドレスに対応する。
加えて、スキャン・コンバータ608は全てのゲスト命令を１つもしくは複数の対応するホスト命令へ変換し、分岐命令の分岐オフセットは変換のあいだ変更されない。
つまり、ゲスト分岐命令の分岐オフセットは対応するホスト分岐命令の分岐オフセットに等しく、プロセッサ・コア601によって生成された間接分岐命令の分岐ターゲットアドレスが正しいことを保証する。
【０１２５】
[00166]  ブロックアドレス・マッピング・モジュール620の各L2キャッシュ・ブロックに対応する行は複数のエントリを持つ。
各エントリはL2キャッシュ・ブロックの部分（L2キャッシュ・ブロックのサブブロック）に対応するL1キャッシュ・ブロックのブロック番号(BN1X)とL2キャッシュ・ブロックの中のL2キャッシュ・サブブロックの開始オフセット（BN2Y）を記憶する。
各エントリはそれが含むのBN2Yの昇順に沿って左から右へ配置される。
１つの新しいエントリがブロック・アドレス・マッピング・モジュール620の１つの行に追加されるとき、新しいエントリのBN2Yがこの行の他のエントリのBN2Yとコンパレータ924によって比較される。
新しいエントリのBN2Yよりも大きなBN2Yを持つエントリはシフタ926によって右にシフトされ、新しいエントリを記憶するための場所が空けられる。
【０１２６】
[00167]  ブロック・アドレス・マッピング・モジュール620の行、アクティブ・リスト604の行そしてL2キャッシュ606のメモリ・ブロックとの間には一対一の対応関係があり、同じBN2Xによってポイントされる。
ブロック・アドレス・マッピング・モジュール620は該当するBN2XとBN1Xとの対応関係を記憶するように設定される。
図６に示されるように、XMAPエントリ・フォーマット684はBN1XとBN2Yとを含む。
従って、１つのBN2に対して、ブロック・アドレス・マッピング・モジュール620の１つの行がBN2のBN2Xにもとづいて見つけられる。
そして、BN2のBN2Yは行の各エントリに記憶されている有効なBN2Yと比較される。
比較に成功したエントリの対応するBN1Xが読み出される。
従って、BN2Xは対応するBN1Xに変換されるか、あるいは比較不成功の結果が得られ、それはBN2Yにおいてゲスト命令に対応するホスト命令がまだレベル１メモリ602にないことを示す。
【０１２７】
[00168]  トラック・テーブル610のフォーマットはフォーマット686かフォーマット688である。
フォーマット686は３つの部分から構成される:TYPE、BN2XとBN2Y。
TYPEは、非分岐命令、無条件直接分岐命令、条件付き直接分岐命令、無条件間接分岐命令、そして条件付き間接分岐命令などを含む命令タイプを含む。
ここでは、無条件直接分岐命令、条件付き直接分岐命令、無条件間接分岐命令、そして条件付き間接分岐命令はまとめて分岐命令として知られ、分岐命令に対応するトラック・ポイントは分岐ポイントである。
TYPEはまたアドレス・タイプ、つまり686のL2キャッシュ・アドレス・タイプBN2を含みうる。
フォーマット688も３つの部分から構成される：TYPE、BN1XとBN1Y。
フォーマット688の命令タイプはフォーマット686の命令タイプと同じである。
しかし、フォーマット688のアドレス・タイプはL1キャッシュ・アドレスBN1である。
ブロック・アドレス・マッピング・モジュール620の中のメモリ920のフォーマットは684に示されているように、BN1XとBN2Yとの組み合わせである。
【０１２８】
[00169]  トラック・テーブル610は複数のトラック・ポイントを含む。
トラック・ポイントはトラック・テーブル610の１つのエントリで、少なくとも１つの命令に関する情報、例えば命令タイプに関する情報、分岐ターゲット・アドレスなど、を含む。
ここでは、トラック・ポイント・アドレスはトラック・ポイントによって表された命令の命令アドレスに対応する。
分岐命令のトラック・ポイントは分岐ターゲットのトラック・ポイント・アドレスを含み、トラック・ポイント・アドレスは分岐ターゲット命令アドレスに対応する。
L1キャッシュ602の一連の連続した命令を含む命令ブロックに対応する複数の連続したトラック・ポイントはトラックと呼ばれる。
L1命令ブロックと対応するトラックは同じBN1Xで示される。
トラック・テーブルは少なくとも１つのトラックを含む。
トラックの全トラック・ポイント数はトラック・テーブル610の１つの行の全エントリ数に等しい。
他のコンフィギュレーションもトラック・テーブル610において可能である。
【０１２９】
[00170]  よって、トラック・テーブルとは、トラック・エントリ・アドレスが分岐ソース命令アドレスに対応し、エントリの内容が分岐ターゲット・アドレスに対応している、テーブルである。
加えて、余分のL2ブロック番号エントリがトラック・テーブル610の各行に追加され、行の最初のトラック・ポイントに対応するゲスト命令のBN2を記憶するのに用いることができる。
従って、あるL1命令ブロックが置き換えられたとき、分岐ターゲットとして行を使っているトラック・テーブルの他の行のBN1はBN2へ変換されうる。
よって、その行は他の命令ブロックに対応する行によって、エラーを起すことなく、書き込まれうる。
【０１３０】
[00171]  トラック・テーブル610はプログラムが走る可能なトレースもしくはプログラムの実行フローの可能な方向を記録する。
従って、トラック・テーブル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での実行のために命令を供給する。
【０１３１】
[00172]  ここにおいては、第１アドレスと第２アドレスがトラック・テーブルのトラック・ポイントの位置を表すのに用いられる。
直接分岐ポイントの命令タイプはまた分岐ターゲットのアドレス指定アドレスがBN1（すなわちBN1を分岐ターゲットとする直接分岐命令）もしくはBN2（すなわちBN2を分岐ターゲットとする直接分岐命令）で表されているか、に関する情報を含むことができる。
BN1が分岐ポイントに記憶されているとき、それは分岐ポイントの分岐ターゲットのホスト命令を含むホスト命令ブロックがL1キャッシュ602のBN1Xにポイントされたメモリ・ブロックに記憶されていることを示し、分岐ターゲットのホスト命令はBN1Yに従って見つけ出される。
BN2が分岐ポイントに記憶されているとき、それは分岐ポイントの分岐ターゲットのゲスト命令を含むゲスト命令ブロックがL2キャッシュ606のBN2Xにポイントされたメモリ・ブロックに記憶されていることを示す。分岐ターゲットのゲスト命令はBN2Yにもとづいて見つけ出されるが、しかし分岐ターゲットのゲスト命令に対応するホスト命令がL1キャッシュ602に記憶されているか否かは直接には判断できない。
【０１３２】
[00173]  オフセット・アドレス・マッピング・モジュール618の行とトラック・テーブル610の行、さらにL1キャッシュ602のキャッシュ・ブロックは一対一関係にあり、同じBN1Xによってポイントされている。
オフセット・アドレス・マッピング・モジュール618はL2キャッシュ606のゲスト命令のオフセット・アドレスとL1キャッシュ602のホスト命令のオフセット・アドレスとの間の対応関係を記憶するように設定される。
オフセット・アドレス・マッピング・モジュール618から送られたBN1Xによってポイントされたマッピング情報にもとづいて（つまり、BN2YとBN1Yとの間のマッピング情報）、オフセット・アドレス・コンバータ622は受け取ったBN2Yを対応するBN1Yへ変換する、もしくは受け取ったBN1Yを対応するBN2Yへ変換する。
【０１３３】
[00174]  従って、BN2がBN1に変換される必要があるとき、BN2XとBN2Yにもとづいて、BN1Xがブロック・アドレス・マッピング・モジュール620によって得られる。そして、オフセット・アドレス・マッピング・モジュール618のBN1Xによってポイントされた行のマッピング関係にもとづいて、BN2YはBN1Yに変換され、BN2からBN1への変換が完了する。
【０１３４】
[00175]  BN1がBN2へ変換される必要があるとき、対応するBN2がトラック・テーブル610のBN1Xによってポイントされた行の余分のエントリから読み出される。このとき、BN2XはBN1Xによってポイントされたホスト命令ブロックに対応するゲスト命令ブロックの番号であり、BN2YはBN1Xによってポイントされたホスト命令ブロックに対応するゲスト命令ブロックの中のゲスト命令の開始位置である。
オフセット・アドレス・マッピング・モジュール618のBN1Xによってポイントされた行のマッピング関係と開始位置にもとづいて、BN1YはBN2Yに変換され、BN1からBN2への変換が完了する。
【０１３５】
[00176]  図６においてバスは３グループに分かれている: ゲスト命令アドレス・バス、BN1バスとBN2バスでる。
ゲスト命令アドレス・バスはバス675、バス683とバス675を含む。
BN1バスはバス631とバス693を含む。BN2バスはバス633とバス687を含む。
他にも例えばBN2Xバス639、BN2Yバス637、そしてマッピング関係バス691などのバスがある。
【０１３６】
[00177]  特に、バス675の内容はアクティブ・リスト604のBN2Xによってポイントされた行に記憶されたゲスト命令ブロック・アドレス（例えば、L2キャッシュ・ブロック・アドレス）である。
ゲスト命令ブロック・アドレスはスキャン・コンバータ608に、直接分岐命令の分岐ターゲット・アドレスの計算のために、送り返される。
【０１３７】
[00178]  バス675の内容は、スキャン・コンバータ608が分岐命令を見つけたとき、スキャン・コンバータ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によって出力された内容のうち１つをBN2Xとして選び、BN2Xをバス639へ置く。
BN2Xはブロック・アドレス・マッピング・モジュール620のデータの行を読み出すのに用いられ、BN2からBN1へのマッピング操作が行なわれる。
【０１３８】
[00179]  バス637は３入力セレクタ638の出力である。３入力セレクタ638はバス633、バス653、もしくはバス683のBN2Yを選ぶ。
BN2Yはブロック・アドレス・マッピング・モジュール620へ送られ、対応するBN1Xを得るためにバス639のBN2Xによってポイントされた行とマッチングされる。
【０１３９】
[00180]  バス633の中身はトラック・テーブル610の出力であり、そのフォーマットはBN1もしくはBN2である。
フォーマットがBN2であるとき、バス633の中身はブロック・アドレス・マッピング・モジュール620とオフセット・アドレス・マッピング・モジュール618へ送られBN2XをBN1Xへマップする。
BN2のBN2Yはバス637を経て減算器928へ送られ、ブロック・アドレス・マッピング・モジュール620によって出力された対応するレベル２サブ・ブロックの開始アドレスに対して減算操作を施す。
そして、正しいブロック・オフセット・アドレスが得られ、オフセット・アドレス・コンバータ622によって用いられ、BN2YをBN1Yへ変換する。
BN1XとBN1Yは組み合わされBN1を形成しBN1はトラック・テーブル610へ書き戻される。
バス633のBN2Xはまたアクティブ・リスト604へ送られ、対応するゲスト命令ブロック・アドレスが読み出される。
ゲスト命令ブロック・アドレスはスキャン・コンバータ608へバス675を経て送られる。
スキャン・コンバータ608へバス657を経て直接送られるゲスト命令ブロック・アドレスとBN2Yはゲスト命令アドレスを形成する。
加えて、バス633上のBN2Xはまた、バス673を経てL2キャッシュ606へ送られ、対応するゲスト命令ブロックが読み出される。
【０１４０】
[00181]  バス631はトラッカー614の出力であり、そのフォーマットはBN1である。
出力は、プロセッサ・コア601での実行のための命令を読み出すアドレスとして、L1キャッシュ602へ送られる。
【０１４１】
[00182]  バス693の中身は交換モジュール611の出力であり、そのフォーマットはBN1Xである。
バス693は次の利用可能なレベル１ブロック番号BN1X（もしくはトラック番号）をスキャン・コンバータ608に供給し、変換によって得られたホスト命令を満たす。
バス693のBN1Xとバス657からのBN2Yは一緒にバス665へ置かれ（そしてブロック・アドレス・マッピング・モジュール620のエントリの内容を構成する）そして、ブロック・アドレス・マッピング・モジュール620の中のBN1XとBN2Yをアドレスの順序に従って記憶するために、セレクタ940へ送られる。
従って、バス665のフォーマットはBN1XとBN2Yである。
【０１４２】
[00183]  スキャン・コンバータ608の変換によって得られたホスト命令はバス667を経てL1キャッシュ602へ、バス693のBN1Xとバス669を経たコンバータ608からのBN1Yによってアドレス指定された場所に、充填される。
同時に対応するホスト命令のタイプ（スキャン・コンバータ608からバス687を経て出力される）と分岐ターゲット（分岐ターゲットはバス671のBN2Xとバス657のBN2Yによってバス687へスプライスされる）はバス687を経てトラック・テーブル610へ、バス693とバス669によってアドレス指定された場所において書き込まれる。
【０１４３】
[00184]  バス687はバス671からの命令タイプ、BN2YそしてBN2Xをスプライスして１つのトラック・ポイント全体の中身とし、トラック・ポイントの中身はトラック・テーブル610へ送られ、トラック・テーブル610に記録される。
【０１４４】
[00185]  バス954はブロック・アドレス・マッピング・モジュール620の出力である。
バス954のBN1Xは、オフセット・アドレス・コンバータ622へ送られるべき、対応するオフセット・アドレス・マッピング情報を、オフセット・アドレス・マッピング・モジュール618から読み出すために用いられる。
バス954のBN2Yは減算器928へ送られ、バス637から送られたBN2Yから減算される。
減算結果はオフセット・アドレス・コンバータ622へ送られる。
オフセット・アドレス・コンバータ622はバス954のBN2YをインプットにもとずいてBN1Yアドレスへマップする。
バス954からのBN1Xアドレスとオフセット・アドレス・コンバータ622によって出力されたBN1Yアドレスはスプライスされ完全なBN1となる。
BN1は３つのインプット・セレクタ692の入力ポートへバス685を経て送られる。
【０１４５】
[00186]  セレクタ692はバス685のBN1、バス687のBN2、もしくはバス693のBN1（バス693からのBN1Xと’0’であるBN1Yが完全なBN1にスプライスされる）を選び、トラック・ポイントの中身としてトラック・テーブル610へ送る。
【０１４６】
[00187]  図７Aは開示された実施形態と整合する例示的なトラック・テーブルにもとづくキャッシュ構造の概略図を示す。
例示目的のために、一部の構成部分しか図７Aには示されていない。
前述の実施形態と同様、トラック・テーブル610の行とL1キャッシュ602のメモリブロックは一対一に対応している。
トラック・テーブルの行（つまり、トラック）のエントリ（つまり、トラック・ポイント）の数はL1メモリ・ブロックの中の命令の数より１つ多い。
トラックの最後のトラック・ポイントは、順番に従って次に実行されるべきトラックを示す位置を記憶する。
残りのエントリとL1メモリブロックの命令は一対一関係を持ち、エントリはプログラム実行フローに関する情報（例えば、命令タイプ、分岐ターゲットアドレス、など）を記憶する。
トラックの中のトラック・ポイントに対応するアドレスは左から右への昇順になっている。
【０１４７】
[00188]  トラッカー614によって出力されたリード・ポインタ631はトラック・テーブル610をアドレス指定し、トラック・ポイントに対応する内容をリード・ポートを経て出力し、内容をバス633に置く。
【０１４８】
[00189]  もし中身に含まれている命令タイプが非分岐命令であるとき、セレクタ738はインクリメンタ736の出力を選択し、トラッカーは次のアドレスの右（つまり、大きなアドレス）へ移動する。
【０１４９】
[00190]  もし中身に含まれている命令タイプが無条件分岐命令であるとき、セレクタ738はバス633の分岐ターゲット・アドレスを選択し、リード・ポインタ631はバス633の分岐ターゲット・アドレスに対応するトラック・ポイントの位置へ走る。
【０１５０】
[00191]  もし中身に含まれている命令タイプが条件付き分岐命令であるとき、トラッカー614は更新を休止して、プロセッサ・コア601が分岐がとられるか否かを示すTAKENシグナル635を生成するまで待つ。
もし分岐が取られなかった場合、オペレーションは非分岐命令の場合と同様である。
もし分岐が取られた場合、オペレーションは無条件分岐命令の場合と同様である。
【０１５１】
[00192]  トラック・テーブル610の書き込みポートに対応する書き込みアドレスには２つのソースがある：セレクタ694（BN1X）とセレクタ696（BN1Y）である。
トラックを構成する際、交換モジュール611は行アドレスBN1Xを出力し、スキャン・コンバータ608はコラムアドレスBN1Yを出力する。
BN2がトラッカー614によって読み出されたトラック・ポイントの内容に含まれている時、BN2はブロック・アドレス・マッピング・モジュール620もしくはスキャン・コンバータ608へ送られ、BN1を生成する。
BN1はトラック・ポイントへ書き戻される必要がある（つまり、読み出し、修正し、書き込む）。
トラッカー614によって読み出されたトラック・ポイントの内容に含まれている命令タイプが’間接分岐命令であるとき、プロセッサ・コア601によって生成された間接分岐ターゲットアドレスは、アクティブ・リスト604とブロック・アドレス・マッピング・モジュール620へ送られBN1を生成する。
BN1もまたトラック・ポイントへ書き戻される必要がある。
いずれの場合においても、トラック・テーブル610の書き込みアドレスは前回のリード・アドレスである。
【０１５２】
[00193]  トラック・テーブル610の書き込みポートは３つのソースを持つ：バス685、バス687、そしてバス693である。
バス685、バス687、そしてバス693上の値はセレクタ692によって選ばれた後に書き込み内容として用いられる。
バス685上の値はブロック・アドレス・マッピング・モジュール620とオフセット・アドレス・コンバータ622によって出力されたBN1である。
バス693上の値はトラックの最後のエントリに書き込まれるBN1であり、BN1は順番に実行される次のトラックをポイントしている。
【０１５３】
[00194]  ひとつの実施形態において、ゲスト命令がホスト命令へ変換されるとき、スキャン・コンバータ608は対応情報を検証し抽出する。
トラック・テーブルの内容は３つの部分を含む：もしホスト命令が非分岐命令もしくは間接分岐命令であるとき、セレクタ694は、交換モジュール611によってトラック・テーブル610の書き込みアドレスの最初のアドレスとして生成されたホスト命令に対応するBN1X693を選ぶ；セレクタ696は、トラック・テーブル610の書き込みアドレスの２番目のアドレスとしてスキャン・コンバータ608によって出力された命令ブロックのホスト分岐命令のブロック・オフセット669を選ぶ；そして命令タイプ（つまり、非分岐命令か間接分岐命令）がトラック・ポイントの構成を完成させるための書き込み内容としてトラック・テーブル610へ書き込まれる。
もしホスト命令が直接分岐命令であるなら、スキャン・コンバータ608は分岐ターゲット・アドレスを計算する。
バス657を経た分岐ターゲット・アドレスのブロック・アドレスはアクティブ・リスト604へ送られマッチング操作を施される。
もしマッチングが成功ならば、対応するBN2Xはブロック・アドレス・マッピング・モジュール620へバス671とバス639を経て送られ、そして分岐ターゲット・アドレスのブロック・オフセット（つまり、BN2Y）はブロック・アドレス・マッピング・モジュール620へバス657とバス637を経て送られる。
対応するBN1Xはブロック・アドレス・マッピング・モジュール620の中のBN2Xによってポイントされた行の中で探索される。
もし該当するBN1Xがあるなら、BN1Xによってポイントされた行の中のマッピング情報がオフセット・アドレス・マッピング・モジュール618から読み出され、マッピング情報がオフセット・アドレス・コンバータ622へBN2YをBN1Yへ変換するために送られる。
【０１５４】
[00195]  セレクタ694は交換モジュール611によって生成されたホスト命令に対応するBN1X693を選びトラック・テーブル610の書き込みアドレスの最初のアドレスとする。
セレクタ696はスキャン・コンバータ608によって出力された命令ブロックの中のホスト分岐命令のブロック・オフセット669を選びトラック・テーブル610の書き込みアドレスの２番目のアドレスとする。
上記BN1XとBN1Yは組み合わされてBN1になり、バス685へ置かれる。
BN1がセレクタ693によって選ばれた後、BN1と抽出された命令タイプは一緒にトラック・ポイントの中身としてトラック・テーブル610へ書き込まれ、よってトラック・ポイントの構築が完了する。
この時点で、トラック・ポイントはBN1を含む。
【０１５５】
[00196]  ブロック・アドレス・マッピング・モジュール620がBN2XとBN2Yに対応する有効なBN1Xを含まないとき、セレクタ694は交換モジュール611によって生成されたホスト命令に対応するBN1X693を選びトラック・テーブル610の書き込みアドレスの最初のアドレスとする。
セレクタ696はスキャン・コンバータ608によって出力された命令ブロックの中のホスト分岐命令のブロック・オフセット669を選びトラック・テーブル610の書き込みアドレスの２番目のアドレスとする。
バス671のBN2Xとスキャン・コンバータ608によって出力されたBN2YはBN2にスプライスされ、バス687へ置かれる。
BN2がセレクタ692によって選ばれた後、BN2と抽出された命令タイプは一緒にトラック・ポイントの中身としてトラック・テーブル610へ書き込まれ、よってトラック・ポイントの構築が完了する。
この時点で、トラック・ポイントはBN2を含む。
【０１５６】
[00197]  分岐ターゲット・アドレスのブロック・アドレスがアクティブ・リスト604の中で成功裏にマッチングされなかった場合、それは分岐ターゲット・アドレスに対応するゲスト命令がL2キャッシュ606に記憶されていないことを示す。
交換アルゴリズム（例えばLRUアルゴリズム）はBN2Xを割り当て、分岐ターゲット・アドレスは該当する命令ブロックを取り出すために低レベルメモリへ送られる。
該当する命令ブロックはL2キャッシュ606内のBN2Xによってポイントされたメモリブロックへ記憶される。
セレクタ694は交換モジュール611によって生成されたホスト命令に対応するBN1X693を選び、トラック・テーブル610の書き込みアドレスの最初のアドレスとする。
セレクタ696はスキャン・コンバータ608によって出力された命令ブロックの中の分岐ホスト命令のブロック・オフセット669を選びトラック・テーブル610の書き込みアドレスの２番目のアドレスとする。
BN2Xと分岐ターゲット・アドレスのブロック・オフセット・アドレス（BN2Y）は直接にBN2へと組み合わされる。
BN2はバス687へ置かれる。
BN2がセレクタ692によって選ばれた後、BN2と抽出された命令タイプは一緒にトラック・ポイントの中身としてトラック・テーブル610へ書き込まれ、よってトラック・ポイントの構築が完了する。
この時点で、トラック・ポイントはBN2を含む。
【０１５７】
[00198]  上記のプロセスにおいて、バス745を経たトラック・テーブル610への書き込みアドレスの最初のアドレス（BNX)はまたオフセット・アドレス・マッピング・モジュール618の対応する行へとポイントし、よって各ホスト命令ブロックとゲスト命令との間のマッピング情報が行に記憶される。
加えて、変換され充填されたゲスト命令に対応するホスト命令の数が、１つのL1メモリブロックの中に含まれうるホスト命令の数より多いとき、超過部分は交換モジュール611によって生成されたBN1XによってポイントされたL1メモリブロックの中へ順番に充填されそして対応するトラックが構築される。
上記プロセスは繰り返され、L2キャッシュからL1キャッシュへの変換と命令充填が実現されそして対応するトラックが構築される。
【０１５８】
[00199]  トラッカー614はレジスタ740、インクリメンタ736そしてセレクタ738によって構成される。
リード・ポインタ631（つまり、レジスタ740の出力）はトラック・テーブル110のプロセッサ・コア601によって実行されるべき命令（現行命令）に対応するトラック・ポイントへポイントし、そしてトラック・ポイントの内容を読み出し、内容をバス633を経てセレクタ738へ送る。
同時に、リード・ポインタ631はL1キャッシュ602のためにアドレス操作を行い、現行命令を読み出す。
そして現行命令はプロセッサ・コアへ実行のために送られる。
【０１５９】
[00200]  トラック・ポイントの中身に含まれている命令タイプが、命令が非分岐命令であることを示している場合、セレクタ738はインクリメンタ736からの結果（レジスタ740の値に1を加算したもの）を出力として選ぶ。
出力はレジスタ740へ送り返され、レジスタ740の値は次サイクルにおいて1を加算されたものになる。
つまり、リード・ポインタ631は次のトラック・ポイントをポイントし、L1キャッシュ602から対応するホスト命令をプロセッサ・コア601における実行のために読み出す。
【０１６０】
[00201]  トラック・ポイントの中身に含まれている命令タイプが、命令が分岐ターゲットがBN1である無条件直接分岐命令であることを示している場合、セレクタ738はBN1を出力として選ぶ。
出力はレジスタ740へ送り返され、レジスタ740の値は更新され次サイクルにおいてBN1となる。
つまり、リード・ポインタ631は分岐ターゲット・ホスト命令に対応するトラック・ポイントへポイントし、L1キャッシュ602から分岐ターゲット・ホスト命令をプロセッサ・コア601における実行のために読み出す。
【０１６１】
[00202]  トラック・ポイントの中身に含まれている命令タイプが、命令が分岐ターゲットがBN1である条件付き直接分岐命令であることを示している場合、セレクタ738はプロセッサ・コアが分岐命令を実行したときに生成されるTAKENシグナル635に従って選択操作を実行する。ここでTAKENシグナル635は分岐が取られたか否かを示す。
同時に、レジスタ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における実行のために読み出す。
【０１６２】
[00203]  トラック・ポイントの中身に含まれている命令タイプが、命令が分岐ターゲットがBN2である直接分岐命令（条件付きそして無条件直接分岐命令を含む）であることを示している場合、BN2はブロック・アドレス・マッピング・モジュール620へ送られる。
もしBN2へ対応する有効なBN1Xがブロック・アドレス・マッピング・モジュール620に含まれているなら、BN1Xが出力される。
オフセット・アドレス・コンバータ622はBN2のBN2Yを対応するBN1Yへ変換する。
BN1XとBN1Yは組み合わされBN1となる。
そして、BN1はバス685へ置かれる。
この時点で、セレクタ694はリード・ポインタ631の値（すなわち、分岐命令それ自身に対応する分岐ポイントBN1）の中のBN1Xを書き込みアドレスの最初のアドレスとして選ぶ。
セレクタ696はリード・ポインタ631の値の中のBN1Yを書き込みアドレスの第２アドレスとして選ぶ。
セレクタ692はバス685のBN1を書き込み内容として選び、分岐ポイントに書き戻す。
【０１６３】
[00204]  もしBN2に対応する有効なBN1Xがブロック・アドレス・マッピング・モジュール620に含まれていないなら、有効なBN1Xが交換モジュール611によって生成され、そして利用可能なトラック（そして対応するメモリブロック）がトラック・テーブル610（そしてL1キャッシュ602）において特定される。
同時に、BN2に対応するゲスト命令から始まってL2命令ブロックの終わりまでの間のL2キャッシュの中にあるゲスト命令がスキャン・コンバータ608によって変換され検証される。
ホスト命令に対応するトラック・ポイント情報が抽出され、トラック・テーブル610のBN1Xにポイントされた行に充填される。
BN1XとBN2Xとの間のマッチング関係はオフセット・アドレス・マッピング・モジュール618に記憶される。
変換によって得られたホスト命令はL1キャッシュ602のBN1Xによってポイントされたメモリブロックの中へ充填される。
【０１６４】
[00205]  なお、変換と充填は分岐ターゲット・ゲスト命令から始まるため、分岐ターゲット・ゲスト命令に対応するホスト命令はホスト命令を含むL1メモリブロックの最初の命令である。
つまり、BN1Yの値は’0’である。
このようにして、分岐ポイントの分岐ターゲット命令はL1キャッシュ602に記憶される。
BN2のBN2Xは分岐ターゲット・ホスト命令に対応するBN1X（交換モジュール611によって生成された）に変換される。
BN1XとBN1Y（BN1Yの値は’0’）は組み合わされてBN1を形成する。
BN1はバス693に置かれる。
この時点で、セレクタ694とセレクタ696はリード・ポインタ631の値（すなわち、分岐命令自体に対応する分岐ポイント）を書き込みアドレスとして選ぶ。
セレクタ692はバス693のBN1を書き込み内容として選び、分岐ポイントに書き戻す。
このようにして、トラック・テーブル610によって出力されたトラック・ポイントの内容はBN1を含む。
後続するオペレーションは、分岐ターゲットがBN1である直接分岐命令の場合と同様であり、ここでは繰り返さない。
【０１６５】
[00206]  もしトラック・ポイントに含まれている命令タイプが、命令が間接分岐命令（条件付きそして無条件間接分岐命令を含む）であることを示している場合、プロセッサ・コア601が分岐命令を実行したときに生成される分岐ターゲットアドレスのブロックアドレスがアクティブ・リスト604へ送られ、マッチング操作が実行される。
もしマッチングが成功なら、BN2Xが取得され、分岐ターゲットアドレスのブロック・オフセットはBN2Yとされる。
BN2XとBN2Yはアドレス・マッピング・モジュール620へ送られ、マッチング操作が実行される。
もしヒットがあれば、対応するBN1が得られ、後続するオペレーションは、分岐ターゲットがBN1である直接分岐命令の場合と同様である。
もしミスであれば、後続するオペレーションは、分岐ターゲットがBN2である直接分岐命令の場合と同様である。
【０１６６】
[00207]  もしマッチングが不成功であれば、それは分岐ターゲットアドレスに対応するゲスト命令がまだL2キャッシュ606に記憶されていないことを示す。
レベル２メモリブロック番号BN2Xはアクティブ・リスト604によって交換アルゴリズム（例えばLRUアルゴリズム）に従って割り当てられる。
分岐ターゲットアドレスは下位レベルメモリへ送られ該当する命令ブロックを取り出す。
該当する命令ブロックは、L2キャッシュ606のBN2Xによってポイントされたメモリブロックに記憶される。
ゲスト命令ブロックはそれから変換されL1キャッシュ602へ充填される。
そして対応するトラックが造られマッピング関係が記録される。
BN2はBN1へ変換される。
BN1は分岐ポイントの中へ戻され（生成されたBN2はトラック・テーブル610へ充填されないが、BN1はトラック・テーブル610へ直に充填される）、よってトラック・テーブル610によって出力されたトラック・ポイントの中身はBN1を含むことになる。
後続するオペレーションは、分岐ターゲットがBN1である直接分岐命令の場合と同様であり、ここでは繰り返さない。
【０１６７】
[00208]  トラッカーが次回間接分岐命令を含むエントリを再び読み出すとき、エントリの命令タイプは間接分岐命令であるが、しかしアドレス・タイプはBN1であり、コントローラは間接分岐命令が前回アクセスされたことを判断し、BN1を用いて投機的実行が行なわれうる。
対応するゲスト命令アドレスはBN1アドレスを用いて取得されうる（例えば、トラックに記憶されているBN1Xに対応するBN2Xを用いてアクティブ・リスト604においてアドレス操作を実施しゲスト命令ブロック・アドレスを読み出し、ゲスト命令ブロックのブロック・アドレスはオフセット・アドレス・マッピング・モジュール618から取得され、よって完全なゲスト命令アドレスが取得される）。
プロセッサ・コア601が間接分岐命令を実行し分岐ターゲット・アドレスを生成するとき、分岐ターゲットアドレスはゲスト命令アドレスと比較される。
もし分岐ターゲットアドレスがゲスト命令アドレスと同じなら、実行は続行される。
もし分岐ターゲットアドレスがゲスト命令アドレスと同じでないなら、分岐ポイントの後の命令は掃除され結果は保存されない。
実行はプロセッサ・コア601によって与えられた分岐ターゲット・アドレスから開始され、分岐ターゲット・アドレスはBN1へマップされ、BN1は分岐ポイントへ記憶される。
【０１６８】
[00209]  図６に戻って、スキャン・コンバータ608はゲスト命令をホスト命令へ変換しL1キャッシュへ充填する。
変換中、スキャン・コンバータ608はさらにゲスト命令の分岐ターゲット・アドレスを計算し、命令タイプを抽出しターゲット・アドレスとタイプ情報をトラック・テーブルの該当するエントリへ充填する。
図７Bは開示された実施形態と整合する例示的なスキャン・コンバータの回路図を示す。
【０１６９】
[00210]  ある実施形態のおいては、スキャン・コンバータ608は２つのソースから入力を受ける。
最初のソースは以下に記される。
トラック・テーブル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のためにブロックアドレスを提供する。
【０１７０】
[00211]  ２番目のソースは以下に記される。バス633を経てトラック・テーブルが間接分岐ゲスト命令タイプとを送り出しアドレス・フォーマットがゲスト命令アドレス・フォーマットであるとき、それは間接分岐命令のターゲットはプロセッサ・コア601によって計算される必要があることを示している。
このときコントローラは、プロセッサ・コア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へ送られる。
【０１７１】
[00212]  図７Bに示されたスキャン・コンバータ608の構造に関しては、スキャン・コンバータ608はコンバータ200、直接分岐ターゲット・アドレス計算器792、ブロック・オフセット・マッピング生成器796、コントローラ790、入力セレクタ798と799を含む。
コントローラ790は他のモジュールからステータス信号を受け取り、他のモジュールを制御し恊働する。
【０１７２】
[00213]  セレクタ798はバス675またはバス683からPC高位ビットアドレスを選び、レジスタ756にPC高位ビットアドレスを記憶する。
セレクタ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アドレスに変換されるプロセスは例示目的である。
【０１７３】
[00214]  L2キャッシュ606のアドレスはBN2であり、そのフォーマットは’8XYY’である（ここで’8X’はブロック・アドレスBN2Xでその値は’80’〜’82’である）。
L2キャッシュ606の各L2キャッシュブロック（図７Bの１つの行）は32バイトを持つ。
ブロック・オフセットBN2Yはバイト・アドレス’YY’であり、その値は’0’〜’31’である。
バイトは可変長ゲスト命令を記憶する。
L1キャッシュ602のアドレスはBN1でそのフォーマットは’7XY’である（ここで’7X’はブロック・アドレスBN1Xでその値は’70’〜’75’である）。
L1キャッシュ602の各L1命令ブロックは４つの固定長ホスト命令を含み、そのブロック・オフセットBN1Yはブロック・ワード・アドレス’Y’である。
BN2Yから区別するために、BN1Yの値は文字A〜Dによってタグ付けされる。
ある実装においては、ホスト命令の長さは１ワードである。
ホスト命令は他の長さを持ちうる。
トラック・テーブル610の各行は５つのエントリA〜Eを持つ。ここでエントリA〜EはL1キャッシュ602の４つのホスト命令A〜Dに対応し、エントリEはこの行の後の次のキャッシュブロックのアドレスを記憶するのに用いられる。
【０１７４】
[00215]  直接分岐ターゲット・アドレス計算器792は、直接分岐ターゲット・アドレスを計算するのに用いられる３入力加算器760を含む。
直接分岐ターゲット・アドレス計算器792はまた境界比較器772も含み、その入力はバス679に繋がっている。
境界比較器772はL2キャッシュ・ブロックの最大アドレス（ここで’31’が使われている）を記憶する。
バス679上のBN2Y値がL2キャッシュ・ブロック境界を越えるとき（’31’より大きい）、境界比較器772はL2キャッシュ・アドレス・クロスボーダ信号を生成しコントローラ790に知らせる。
直接分岐ターゲット・アドレス計算器792はまたセレクタ774を含む。
コントローラ790はセレクタを制御してコンバータ200によって出力された分岐オフセットもしくは全’0’を選び、選択結果を加算器760へ送る。
全’0’が選ばれたとき、次のゲスト命令ブロックのアドレスが計算される。
【０１７５】
[00216]  図６に関しては、トラッカー614はトラック・テーブルのエントリにポイントしゲスト命令を読み出すとされる。
ここでゲスト命令のタイプは直接分岐命令であり、分岐ターゲットは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を経て送られる。
図７Bに関しては、コントローラはまたスキャン・コンバータ608のセレクタ798を制御してバス795を選び、そしてコントローラはさらにセレクタ799を制御してバス633を選ぶ。
さらに、コントローラはスキャン・コンバータ608のコントローラ790に命令の変換オペレーションを開始するように知らせる。
【０１７６】
[00217]  コントローラ790はレジスタ756を制御してセレクタ798の出力（’9132’）を記憶し、そしてコントローラ790はまたレジスタ321を制御してセレクタ799の出力（’24’;バイナリでは’1100’）を記憶する。
すなわち、分岐ターゲットのPCアドレスは’913224’で、分岐ターゲットのPCアドレスはL2キャッシュの’80’行に記憶される。
つまりBN2アドレスは’8024’である。
一度に16バイトがL2キャッシュ606から読み出されると仮定すると、レジスタ321の４ビット・ブロック・オフセット・アドレスの最高位ビットだけがL2キャッシュ606へ送られる。
オフセット・アドレスの最高位ビットとバス673からのブロック・アドレスが組み合わされてアドレス’8016’を構成する。
該当するバイトはL2キャッシュ606から読み出され、そしてコンバータ200のアライナ203へバス677を経て送られる。
アライナ203に入力された最低位ビットはバイト’16’である。
コンバータ200はレジスタ321の最低位３ビットバイナリ’100’をオリジナルなオフセットとして用い、’24’番バイトをアライナ203から出力された最低位バイトへシフトし、そして命令変換を開始する。
コンバータ200のメモリ201は各命令へ信号786を供給する。
信号786はブロック・オフセット・マッピング生成器796を制御し対応する命令のブロック・オフセットを記録する。
メモリ201はまたバス788へ値を送り、ブロック・オフセット・マッピング生成器796の中のロジック・ゲート780とロジック・ゲート764を制御し、よってある種のブロック・オフセットを記録するのを差し止める。
従って、複数のホスト命令（もしくはゲスト命令）と１つのゲスト命令（もしくはホスト命令）の間のマッピングが実現される。
【０１７７】
[00218]  レジスタ321のバイナリ値’1100’はバス679を経てデコーダ762へ送られワン・ホット・コード   ‘00000000000000000000000100000000’へデコードされる。
デジタル回路においてワン・ホット・コードとは、値の正規な組み合わせが単一の高ビット（1）と他は全て低ビット（0）からなるものである。
AND ORゲート764を経たワン・ホット・コードはメモリ766に記憶される。
それに応じてカウンター776は、ゲスト命令のセグメントにおいて変換操作が開始されたとき、’0’にセットされる。
出力バス669の値’000’もまたデコーダ778によってワン・ホット・コード’1000’へデコードされ、ロジック・ゲート780を経てワン・ホット・コードはメモリ782に記憶されるために送られる。
ブロック・オフセット・マッピング生成器796もまたシフタ768とレジスタ770を含む。
バス679の値はレジスタ770に記憶され、ゲスト命令のセグメントにおいて変換操作が開始されたとき、シフタ768のシフト操作を制御する。
ここの例では、’1100’がレジスタ770に記憶され、シフタ768を制御して２４ビットの左シフトを行い、レジスタ766のバイト’24’に対応する情報がバイト’0’の位置へシフトされ、そしてバス691へ置かれる。
【０１７８】
[00219]  交換モジュール611はL1キャッシュ602のキャッシュ・ブロック’72’番を交換アルゴリズムに従って生成されたホスト命令へ割り当てる。
コントローラはセレクタ692を制御してバス693上のBN1Xアドレス’72’を選ぶ。
BN1XアドレスはBN1YアドレスA（’00’）と一緒にトラック・テーブル610へ書き込まれる。
このとき、セレクタ694とセレクタ696はバス631のアドレスを選ぶ。
従って、BN1アドレス’72A’はBN2アドレス’8026’を取り替えるためにエントリに書き込まれるが、しかし命令タイプは変わらない。
もしトラッカー614が、命令タイプおよびまたはプロセッサ・コア601の制御信号にもとづいて、このエントリにおいて分岐を決定するならば、’72A’はバス631へ置かれトラック・テーブル610の’72’行の最初のエントリにポイントし、そこから実行を続行する。
【０１７９】
[00220]  交換モジュール611はバス693を経てBN1Xアドレス’72’を送り出し、L1キャッシュ602の’72’番L1キャッシュ・ブロックを選び、そしてオフセット・アドレス・マッピング・モジュール618とトラック・テーブル610の’72’行を選び、ホスト命令と該当するプログラム・フロー、そしてスキャン・コンバータ608によって生成されるブロック・オフセット情報よって満たす。
スキャン・コンバータ608はバス669の第１レベルのブロック・オフセット・アドレスBN1Y値を、L1キャッシュ・ブロックとその対応するトラックの充填を制御する、L1キャッシュ602とトラック・テーブル610へ駆動する。
L2キャッシュ606のBN2アドレス’8024’から始まる分岐命令はコンバータ200によって非分岐ホスト命令へ変換される。
非分岐ホスト命令はL1キャッシュ602へバス667を経て送られ、’72’番L1キャッシュ・ブロックのAエントリ（ブロック・オフセットは’00’）へ充填される。
対応する命令タイプ（例えば、非分岐命令）もまたメモリ201から出力され、バス687を経てトラック・テーブル610へ送られ、’72A’エントリの命令タイプを記憶する。
【０１８０】
[00221]  またコントローラはバス633のBN2Y値’24’がセレクタ698によって選ばれるように制御する。
そして、バス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に示された実施形態を参照する。
【０１８１】
[00222]  変換の最中、コンバータ201はゲスト非分岐命令の長さが２バイトであることを検知する。
バス325の制御の下、アライナ203はバス677を経て入力されたゲスト命令を2バイト左シフトして次の命令変換を開始する。
命令のバイト長もレジスタ321の中身へ加算されるために加算器323へ送られる。
合計’26’がレジスタ321へ再び記憶される。
レジスタ321の出力はワン・ホット・コード’0000000000000000000000000100000’へデコーダ762によって再びデコードされる。
ワン・ホット・コードとレジスタ766の内容はAND ORゲート764を経てビット単位OR操作にかけられる。
結果の’0000000000000000000000010100000’はレジスタ766へ再び記憶される。
それは’80’番L2キャッシュ・ブロックの中の’24’バイトと’26’バイトがそれぞれ１つのゲスト命令の開始バイトであることを示している。
【０１８２】
[00223]  コンバータ200は’26’バイトから始まるゲスト命令を変換する。
変換の最中、コンバータ200は命令が4バイトを持つ直接分岐命令であることを検知する。
コンバータ200は分岐オフセットに何の変化ももたらさない。
分岐オフセットと変換によって得られたホスト命令の他の部分はバス667へ直接置かれる。
分岐命令のタイプはバス687を経て出力される。
バス786の制御の下、カウンター776は’1’を加算し、バス669の値は’001’である。
命令は分岐命令であるから、コントローラ790は加算器760を制御して、メモリ756のPC高ビットアドレス、レジスタ321のブロック・オフセットそしてバス667の分岐オフセット部分798（このとき値は’24’であると仮定する）を合算する。
合計は分岐ターゲットのPCアドレス’913316’であり、合計はバス657へ置かれる。
合計の中の低ビットBN2Y（L2キャッシュ・ブロックのバイトの数より大きくない部分）はバス687と出力へスプライスされる。
【０１８３】
[00224]  バス657のPCアドレスの高ビットはセレクタ680によって選ばれバス681を経てアクティブ・リスト604へ送られマッチング操作にかけられる。
もし結果がミスであれば、アクティブ・リスト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’へ書き込まれる。
【０１８４】
[00225]  バス669の値’001’もまたワン・ホット・コード’0100’へデコーダ778によってデコードされる。
ワン・ホット・コード’0100’とレジスタ782の値はOR操作にかけられ値’1100’を得る。
値’1100’はレジスタ782へ書き戻され、ホスト命令ブロックの最初のホスト命令と第２のホスト命令がそれぞれ１つのゲスト命令に対応することを表す。
もし１つのホスト命令が１つのゲスト命令の開始バイトに対応しないならば（つまり、ホスト命令が、１つゲスト命令に対応する複数のホスト命令のうちの最初のホスト命令でないひとつ）、メモリ201の中身がバス788を経た信号を通してAND ORゲート780を制御し（図5Dの終了値YZが’10’である状況と同様）、レジスタ782の信号と全’0’に対してOR操作が実施され、レジスタ782の該当する命令のビットが’0’と記録され、ホスト命令がゲスト命令に対応せずホスト命令が分岐ターゲットでないことを示す。
【０１８５】
[00226]  一方で、複数のゲスト命令が１つのホスト命令に合成されるとき、メモリ201の内容はAND ORゲート764をバス788によって送られた信号によって制御する（図5Dの終了値YZが’01’である状況と同様）。
AND ORゲート764は、複数のゲスト命令の中の最初の命令の後の他の命令の対応するレコードを消去し、ゲスト命令の数がホスト命令の数と同じになる。
ゲスト命令のセグメントが対応するホスト命令へ変換されるとき、レジスタ782の’1’の数はレジスタ766の’1’の数に、位置は異なるものの、等しい。
レジスタ766の’1’の位置はゲスト命令の開始バイトのアドレスを表す。
レジスタ782の’1’の位置はホスト命令の始まりの命令のアドレスを表す。
【０１８６】
[00227]  変換中、メモリ201は、’26’バイトから始まるゲスト命令の長さが4バイトであることを検出する。
バス325を通して201はアライナ203を制御して、バス677によって入力されたゲスト命令を４バイト左シフトして、命令変換を開始する。
ゲスト命令の長さはまた加法器323へ送られ、レジスタ321の内容に加算される。
合計’30’はレジスタ321に再び記憶される。
レジスタ321の出力はデコーダ762によって再び ワン・ホット・コードへデコードされる。
ワン・ホット・コードとレジスタ766に記憶された内容に対してビット単位OR操作が実施され、結果’0000000000000000000000010100010’を得る。
結果はレジスタ766へ再び記憶される。
カウンタ776は前と同様’1’を加算し、よってバス669はCエントリにポイントする。
【０１８７】
[00228]  変換中、コンバータ200は、’30’バイトから始まるゲスト命令の長さ（つまり4バイト）をメモリ201からバス325を経て読み出す。
ゲスト命令の長さは加法器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’へ更新される。
【０１８８】
[00229]  命令が変換されるときL2キャッシュ・ブロックの境界が越えられるため、コントローラ790はコンバータ200を制御して命令変換を止め、コントローラ776を制御して1を追加し、バス669のアドレスが’72D’をポイントするようにする。
コントローラはバス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’エントリは充填されない。
【０１８９】
[00230]  この時点で、コントローラ790はまたシフタ768を制御してレジスタ766の内容を24ビット左シフトし、シフトされた内容はバス691へ置かれ、シフトされた内容の値は’10100010’で、フォーマットは図８Bの行751のデータフォーマットと同様である。
コントローラ790はまたレジスタ782の内容’1110’をバス691へ置くよう制御する。
レジスタ782のフォーマットは図８Bの行771のデータフォーマットと同じである。
バス691の内容は、ゲスト命令のブロック・オフセットとホスト命令のブロック・オフセットへ後でマッピングするために、オフセット・アドレス・マッピング・モジュール618のL1キャッシュ交換モジュール611によってインデックスされる’72’番行へ送られ書き込まれる。
【０１９０】
[00231]  この時点で、スキャン・コンバータ608は他のモジュールと恊働してゲスト命令のセグメントの変換を完了させ、プログラム・フロー情報をセグメントから抽出し、プログラム・フロー情報と変換によって得られたホスト命令を、トラック・テーブル610とL1キャッシュ602の対応するエントリに記憶し、よってトラッカー614はトラック・テーブル610においてプログラム・フローを読み追跡する。
よって、対応するホスト命令がプロセッサ・コアにおける実行のために供給される。
トラック・テーブル610とブロック・アドレス・マッピング・モジュール620のこの時の値は図９Aを参照。
【０１９１】
[00232]  ゲスト命令のセグメントの変換中、L1キャッシュ・ブロックはL2命令セグメント変換が完了されるより前に充填されうる。
カウンタ776はまた境界コンパレータ772と同様のコンパレータを持つ。
L1キャッシュの境界が越えられたとき、コンパレータはコントローラ790に知らせる。
この場合、コントローラ790は、L1キャッシュ・ブロック交換モジュール611から新しいL1キャッシュ・ブロックを要求し、新しいキャッシュ・ブロックのBN1XアドレスとBN1Yアドレス（’0’）を制御し、トラック・テーブルの一杯に充填された行の最後のエントリにバス693とセレクタ692を通して書き込まれるようにする。
トラック・テーブルの各行は対応するL1キャッシュ・ブロックより１つ多いエントリを持ち、L1キャッシュ・ブロックが一杯に書き込まれたとき、プログラム・フローが次の新しいトラックへ伸びることができる。 
新しいL1キャッシュ・ブロックは最初のエントリから充填されるため、そのBN1Yアドレスは常に’00’である。
そして、カウンタ776がリセットされる。
交換モジュール611は新しいL1キャッシュ・ブロックとトラック・テーブルの対応する行にバス693を経てポイントする。
さらに、変換されたホスト命令と対応するプログラム・フロー情報は、バス963によって示されたトラック・テーブルの行とキャッシュ・ブロックのエントリAから始まって充填される。
【０１９２】
[00233]  図8Aは開示された実施形態と整合する例示的な、ゲスト命令ブロックとホスト命令ブロックの対応関係の回路図である。
ゲスト命令セットは固定長命令セットもしくは可変長命令セットでありうる。
可変長命令セットが例として用いられる。
固定長命令セットは可変長命令セットの特殊例である。
【０１９３】
[00234]  ある１つの実施形態において、ゲスト命令ブロックの長さは16バイト（バイト0からバイト15）そして各ホスト命令の長さは4バイトと仮定される。
図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の残りの部分は次のゲスト命令ブロックにある。
【０１９４】
[00235]  ある１つの実施形態において、ゲスト命令705は2つのホスト命令（つまりホスト命令725とホスト命令727）へ変換されると仮定される；ゲスト命令703、707、709、711そして713はそれぞれ１つのホスト命令（つまりホスト命令723、729、731、733、735）へ変換される。
従って、スキャンコンバータ608によって実施された変換操作を通して得られたホスト命令ブロック721は7つのホスト命令を含む（ホスト命令0からホスト命令7まで）。
加えて、命令ブロックがスキャン・コンバータ608によって変換されるとき、ゲスト命令のブロック・オフセットBN2Yとホスト命令のブロック・オフセットBN1Yとの間の対応関係もまた生成される。
対応関係はオフセット・アドレス・マッピング・モジュール618に記憶される。
【０１９５】
[00236]  なお、１つのゲスト命令が１つもしくは複数のホスト命令へ変換されうる。
複数のホスト命令に対応する１つのゲスト命令が例として用いられ、１つのホスト命令に対応する１つのゲスト命令は特殊例となる。
つまり、１つのゲスト命令が１つのホスト命令に対応しているとき、ゲスト命令に対応する最初のホスト命令と最後のホスト命令は、ゲスト命令に対応するホスト命令である。
【０１９６】
[00237]  図８Bは開示された実施形態と整合するオフセット・マッピング関係のストレージ形式を示す。
図８Bに示されるように、行751と行771はマッピング関係のグループを構成し、マッピング関係のグループはそれぞれ、図８Aに示されたゲスト命令とホスト命令間のオフセット・アドレス・マッピング関係を記憶するため、ゲスト命令ブロックとホスト命令ブロックに対応する。
行751は16のエントリを含み、各エントリは１ビットデータ（つまり、’0’か’1’）のみを記憶し、’0’はエントリに対応するゲスト命令のオフセット・アドレスがゲスト命令の開始地点でないことを示す；そして’1’はエントリに対応するゲスト命令のオフセット・アドレスがゲスト命令の開始地点であることを示す。
【０１９７】
[00238]  マッピング関係の各グループの第２行（つまり、行771）の全てのエントリはホスト命令のオフセット・アドレスに対応する。
つまりエントリ数は、ホスト命令ブロックに含まれうるホスト命令の最大数と同じである。
各エントリは１ビットデータ（つまり、’0’か’1’）のみを記憶し、’0’はエントリに対応するホスト命令が対応するゲスト命令の最初のホスト命令でないことを示す；そして’1’はエントリに対応するホスト命令が対応するゲスト命令の最初のホスト命令であることを示す。
【０１９８】
[00239]  よって、行751と行771の’1’のために対応する操作をすることにより、ゲスト命令のオフセット・アドレスがホスト命令のオフセット・アドレスに変換される。
図８Cは開示された実施形態と整合する例示的なオフセット・アドレス・コンバータ622の回路図を示す。
図８Cに示されるように、ゲスト命令のオフセット・アドレスをホスト命令のオフセット・アドレスへ変換するプロセスが例として取り上げられる。
オフセット・アドレス・マッピング・モジュール618から送られるマッピング関係の形式は図８Bに示される実施形態を参照されたい。
【０１９９】
[00240]  セレクタ・アレイ801のコラム数はゲスト命令ブロックに含まれるオフセット・アドレスの数と同じであり、セレクタ・アレイ801の行数はコラム数プラス１に等しい（つまり17行と16コラム）。
例示目的のため、4行と3コラムのみが図８Cに示される（つまり、下から上へ最初の４行と左から右への最初の3コラム）。
一番下の行番号は0であり、行番号は下から上への昇順である。
一番左のコラムのコラム番号は0であり、コラム番号は左から右への昇順である。
各コラムはゲスト命令のオフセット・アドレスに対応する。
行0のセレクタのインプットAが’1’である以外、コラム0の各セレクタのインプットAとBは全て’0’である。
行0のセレクタの全てのセレクタのインプットBは’0’である。
他のコラムのセレクタのインプットAは、同じコラム同じ行のセレクタの出力値から来て、インプットBは前のコラムと直下の行のセレクタの出力値から来る。
【０２００】
[00241]  セレクタ・アレイ803の構造はセレクタ・アレイ801の構造と同様である。
セレクタ803の行数はセレクタ・アレイ801の行数に等しい。
違いはセレクタ803のコラム数がホスト命令ブロックに含まれるホスト命令数に等しい点である。
同様に、例示目的のため、4行と5コラムのみが図８Cに示される。つまり下から上へ最初の4行と左から右へ最初の5コラム。
行番号とコラム番号の付け方はセレクタ・アレイ801と同等である。
加えて、セレクタ・アレイ803の行0の全てのセレクタのインプットBは全て’0’である。
一番上の行（行16）の全てのセレクタのインプットAは全て’0’であり、行0の全てのセレクタの出力はエンコーダ809へ送られ出力コラムの位置に応じてエンコーディング操作を行なう。
他のセレクタのインプットAは前のコラムと直上の行のセレクタの出力値から来る；そしてインプットBは前のコラムと同じ行のセレクタの出力値から来る。
行0のインプットAはセレクタ・アレイ801の直上の行のセレクタの出力値から来る；インプットBはセレクタ・アレイ801の同じ行のセレクタの出力値から来る。
【０２０１】
[00242]  デコーダ805はゲスト命令のオフセット・アドレスをデコードし、得られたマスク値はマスク・ユニット807へ送られる。
１つのゲスト命令ブロックは16のオフセット・アドレスを含むから、マスク値の幅は16ビットであり、ゲスト命令のオフセット・アドレスに対応するマスクビット値と、プログラム順におけるその前のゲスト命令のマスクビット値は全て’1’であり、ゲスト命令のオフセット・アドレスに対応するマスクビットの後のマスクビット値は全て’0’である。
そして、マスク値とオフセット・アドレス・マッピング・モジュール618から送られるマッピング関係の行751はビット単位AND操作にかけられ、行751のゲスト・オフセット・アドレスに対応するビットもしくはそれより前のビットの値は保存され、行751の他の値は’0’にクリアされる。
結果として得られた16ビット制御ワードはセレクタ・アレイ801へ送られる。
【０２０２】
[00243]  制御ワードの全てのビットはセレクタ・アレイ801のセレクタの１コラムを制御する。
ビット値が’1’のとき、対応するコラムのセレクタはインプットBを選ぶ。
ビット値が’0’のとき、対応するコラムのセレクタはインプットAを選ぶ。
つまり、セレクタ・アレイ801のセレクタの全てのコラムに対して、もし対応ビットが’1’ならば、前コラムと直下の行からの出力はインプットとして選ばれ、前コラムの出力は１行シフトアップされ、一番下の行はこのコラムの出力として’0’で満たされる；もし対応ビットが’0’ならば、前コラムと同行からの出力はインプットとして選ばれ、前コラムの出力はこのコラムの出力として保存される。
従って、セレクタ・アレイ801の最初のコラムのインプットがシフトアップされる行数は制御ワードの’1’の数に等しい。
つまり、セレクタ・アレイ801のインプットの’1’のみが対応する行数だけシフトアップされる。
セレクタ・アレイ801の行とコラムの数はゲスト命令ブロックに含まれるオフセット・アドレスの数に等しいから、セレクタ・アレイ801の出力は１つの’1’だけを含み、’1’を含む行の位置は制御ワードの’1’の数によって決定される。
【０２０３】
[00244]  その間、オフセット・アドレス・マッピング・モジュール618から送られた行771は直接に制御ワードとしてセレクタ・アレイ803へ送られる。
セレクタ・アレイ801と同じように、制御ワードの全てのビットはセレクタ・アレイ803のセレクタの１コラムを制御する。
ビットの値が’1’のとき、対応するコラムのセレクタはインプットAを選ぶ。
ビット値が’0’のとき、対応するコラムのセレクタはインプットBを選ぶ。
つまり、セレクタ・アレイ803のセレクタの全てのコラムにとって、もし対応する制御ビットは’1’ならば、前コラムと直上の行からの出力はインプットとして選ばれ、前コラムの出力は１行シフトダウンされて、一番上の行はこのコラムの出力として’0’で満たされる；もし対応するビットが’0’ならば、同コラムと同行からの出力がインプットとして選ばれ、前コラムの出力がこのコラムの出力として保存される。
よって、１つの’1’をパスする度に、セレクタ803のインプットは１行シフトダウンされる。
つまり、セレクタ・アレイ803のインプットの’1’だけが１行だけシフトダウンされる。
従って、エンコーダ809がセレクタ・アレイ803の一番下の行から送られた’1’を受け取ったとき、対応するホスト命令オフセット・アドレスが’1’を含むコラムの位置にもとづいて生成される。
【０２０４】
[00245]  図８Bに示されたマッピング関係が例として取り上げられる。
もしゲスト命令オフセット・アドレスが’9’であるなら（対応するゲスト命令ブロックの10番目バイト、つまり３番目の命令）、マスク・ユニット807によって出力されたマスク値は’1111111111000000’である。
値’1111111111000000’ と行751の値’0100100001011001’はビット単位AND操作にかけられ、値’0100100001000000’を得る。
つまり、制御ワードに３つの’1’がある。
よって、セレクタ・アレイ801のインプットの’1’は3行シフトアップされる。
つまり、出力の’1’は３番目の行にある。
従って、セレクタ・アレイ803の中の値が’1’である３つの制御ビットに対応するセレクタのコラムを通過した後、’1’はエンコーダ809に到達する。
行771の値は’1101111’であるから、セレクタ・アレイ803はインプット’1’を第０、第３、第５コラムにおいてそれぞれ１行シフトダウンする。
第３コラムにおけるエンコーダ809への出力は’1’であり、出力はホスト命令の第４命令に対応する（オフセット・アドレスは’3’）。
エンコーダ809はこのコードにもとづいて’3’を得て、それによってゲスト命令オフセット・アドレス’4’をホスト命令オフセット’3’へ変換する。
【０２０５】
[00246]  ブロック・アドレス・マッピング・モジュール620の全てのエントリに記憶されているBN2Yと、記憶されるべきBN2Yを比較することによって、現在書き込まれているBN1XとBN2Yは正しい位置に記憶される。
図８Dは開示された実施形態と整合する例示的なブロック・アドレス・マッピング・モジュールの回路図を示す。
[00247]  図８Dに示されるように、ブロック・アドレス・マッピング・モジュール620はブロック・アドレス・メモリ・モジュール920、比較モジュール924、シフタ926、マルチプレクサ940、マルチプレクサ942そして幾つかのセレクタ制御ロジックを含む。
各モジュールは複数のコラム（例えばR、S、T）に分割される。
各コラムはそれ自身のブロック・アドレス・モジュール920、比較モジュール924、シフタ926、マルチプレクサ940、マルチプレクサ942を持つ。
ブロック・アドレス・メモリ・モジュール920は複数の行と複数のコラムに組織された複数のエントリを含むメモリ配列である（例えば、図８Dに示されるメモリ・ブロック970、971、972）。 
各エントリは２つの部分からなる：L1キャッシュ・ブロック番号 （BN1X）とL2キャッシュ・ブロック・オフセット（BN2Y）。
メモリ配列の１つの行はアドレス・バス639によって選ばれ、バス950を経て出力される；同様に、メモリ配列の他の行がバス639によって選ばれ、バス952のデータがバス639によって選ばれた行に書き込まれる。
ブロック・アドレス・メモリ・モジュール920のコラムはソートされる。
機能モジュールの全コラムは、ブロック・オフセットBN2Yを比較するための、それ自身の対応する比較モジュール924を持つ。
【０２０６】
[00248]  比較モジュール924を除いて、全ての機能モジュールとバスのビット幅はブロック・アドレス・メモリ・モジュール920のエントリ幅に等しい。
比較モジュール924はビット幅がBN2Yのコンパレータよりも大きい。
コラムのバス950のBN2Yがバス635から送られたBN2Yより大きいとき、コンパレータの出力はコラムにおいて’1’である。
バス950のBN2Yがバス635から送られたBN2Yより小さいか等しいとき、コンパレータの出力は’0’である。 
コンパレータの出力が’0’であるとき、セレクタ940はこのコラムのバス950のエントリの内容を選び、内容をバス952へ置く。
コンパレータの出力が’1’であるとき、右のコラムのセレクタがコンパレータを含むコラムのバス950のデータを選ぶ。
データがシフタ926によってシフトされた後、データはバス952に置かれる。
つまり、コンパレータの出力が’1’であるとき、コントローラはこのコラムのバス950のデータを右へ１コラムシフトする。
【０２０７】
[00249]  あるコラムのコンパレータの出力が’1’で左のコラムのコンパレータの出力が’0’あるとき、コラムはバス665のデータを選び、選ばれたデータはバス952へ置かれる。
バス952はセレクタ940の出力を同じコラムのブロック・アドレス・メモリ・モジュール920へ送る。
例えば、セレクタ976の出力はメモリ・モジュール970へのみ送られ、セレクタ977の出力はメモリ・モジュール971へのみ送られる。
あるコラムのコンパレータの出力が’0’で、右のコラムのコンパレータの出力が’1’であるとき、制御ロジックはこのコラムのバス950のデータを選び、選ばれたデータはバス954へ置かれ、トラック・テーブル610とオフセット・アドレス・マッピング・モジュール618へ送られる。
【０２０８】
[00250]  L2命令ブロックの全ての行の最大オフセット・アドレスが’31’（つまり、オフセット・アドレスの範囲は’0’〜’31’）であると仮定し、L2命令ブロックがL2キャッシュ606へ書き込まれるとき、ブロック・オフセット（BN2Y）982は全て’32’にセットされる（それはこの行の最大オフセット・アドレスに’1’を足したもの）。
さてバス639の高位ビット（BN2X）は’81’であると仮定する。
ブロック・アドレス・マッピング・モジュール620の１つの行が選ばれ、この行においてメモリ・モジュール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のエントリに以前記憶されていたデータを記憶する。
【０２０９】
[00251]  右のコラムの対応するコンパレータのBN2Y入力は（図８Dに示されていない）全て’32’であり、よって全ての比較結果は’1’で、対応するコラムのデータを右にシフトするのを制御する。
つまり、新しいデータのBN2Yよりも大きいBN2Yを持つコラムは右にシフトされ、よって新しいデータを含むエントリはBN2Y値に沿って昇順に配列される。   
コントローラは比較モジュール924の最左コンパレータの出力973を検出し、インプットBN2Yが対応するL1キャッシュ・ブロックを持つかを判断する。
もしコンパレータの出力973が’1’であるなら、それはインプットBN2Yが対応するL1キャッシュ・ブロックを持たないことを示す。
もしコンパレータの出力973が’0’であるなら、それはインプットBN2Yが対応するL1キャッシュ・ブロックを持つことを示す。
【０２１０】
[00252]  上記行はバス639の’81’アドレスによって読み出されると仮定すると、メモリ・モジュール970、メモリ・モジュール971、メモリ・モジュール972のエントリの対応するBN2Y値は’18’、’32’、’32’である。
これらの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アドレスをマッピングすることによって得られる。
【０２１１】
[00253]  さて新しいBN2アドレス’8123’がバス637とバス639から受け取られると仮定する。 
このとき、’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である）。
【０２１２】
[00254]  メモリ・モジュール970のエントリの内容はバス954へ置かれ、ブロック・オフセット・マッピング・ロジック（ブロック・オフセット・マッピング・モジュール618、オフセット・アドレス変換器622そして減算器928を含む）へ送られる。
内容のL1キャッシュ・ブロック番号BN1Xは、L1キャッシュ・ブロックに対応する行のマッピング関係をオフセット・マッピング・モジュール618から読み出すために使われる。
マッピング関係はオフセット・アドレス変換器622へ送られる。
【０２１３】
[00255]  バス637のBN2Y（L2キャッシュ・ブロックのブロック・オフセット）は、バス954のBN2Y（つまり、L2キャッシュ・ブロックにおける、L1キャッシュに対応するレベル２サブ・キャッシュ・ブロックの開始アドレス）を減算器928によって減算する。
減算結果（23-18=5）はレベル２サブ・キャッシュ・ブロックにおけるバス637のBN2Yの純アドレス・オフセットである。 
アドレス・オフセットとマッピング関係にもとづいて、オフセット・アドレス変換器622は対応するL1キャッシュ・ブロックのブロック・オフセットBN1Yを得る。
バス954のBN1XとこのBN1Yはスプライスされ、L2キャッシュ・アドレス’8123’に対応するL1キャッシュ・アドレスBN1を得る。
BN1はトラック・テーブル610のエントリに、トラッカーによる参照のために置かれる。
【０２１４】
[00256]  以下の記述は図６、図８D、図９A〜９Fを参照する。
図９A〜９Fは図６に示された実施形態の稼働プロセスを表す。
【０２１５】
[00257]  図９A〜９Fはプログラムが動いている時の、ブロック・アドレス・メモリ・モジュール920、L2キャッシュ606、オフセット・アドレス・マッピング・モジュール618、トラック・テーブル610、L1キャッシュ602の対応する内容を表す。   
ブロック・アドレス・メモリ・モジュール920の全ての行はL2キャッシュ606のL2キャッシュ・ブロックに対応し、そしてブロック・アドレス・メモリ・モジュール920の全ての行はまたアクティブ・リスト604のゲスト命令ブロック・アドレスに対応する。
オフセット・アドレス・マッピング・モジュール618の１つの行とトラック・テーブル610の１つの行はL1キャッシュ602のL1キャッシュ・ブロックへ対応する。
図６のアクティブ・リスト604はまたL2キャッシュ606のL2キャッシュ・ブロックを先に取ってこられたゲスト命令ブロックのために交換ポリシーに応じて割り当てる。
交換モジュール611はL1キャッシュ602のL1キャッシュ・ブロックをホスト命令のために交換ポリシーに応じて割り当てるように設定されている。
図９A〜９Fの影の部分は充填されたホスト命令を表す。
【０２１６】
[00258]  L2キャッシュ606のアドレス指定アドレスはBN2で、そのフォーマットは’8XYY’であり、’8X’はブロック・アドレスBN2Xである。
例示目的のために、L2キャッシュ606はセットアソシアティブ・キャッシュとする。   
インデックス・アドレスはL2キャッシュ606のブロック・アドレス（値は’80’〜’82’）で、対応するタグ（つまり、ブロック・アドレス）はアクティブ・リストの同じインデックス・アドレスを持つ行に記憶される。
L2キャッシュ606の全てのL2キャッシュ・ブロックは32バイトを持ち、ブロック・オフセットBN2Yはブロック・バイト・アドレス’YY’で、その値は’0’〜’31’である。
L2キャッシュ606は可変長ゲスト命令を記憶する。
図９A〜９Fに示される全ての分離線は異なる長さを持つゲスト命令を表す。
ある実施形態におけるゲスト命令の長さは2バイトから8バイトである。
【０２１７】
[00259]  L1キャッシュ602はトラック・テーブル610とブロック・アドレス・メモリ・モジュール920の制御の下にあるフル・アソシアティブ・キャッシュである。    
L1キャッシュ602のアドレスはBN1で、そのフォーマットは’7XY’、’7X’はブロック・アドレスBN1Xでその値は’70’〜’75’である。
L1キャッシュ602の全てのL1命令ブロックは４つの固定長ホスト命令を持つ。
ブロック・オフセットBN1Yはブロック・ワード・アドレス’Y’である。
BN2Yからより簡単に判別可能で区別できるようにするために、値BN1YはA〜Dを使ってタグ付けされる。
ある実施形態においては、１つのホスト命令の長さはワードである。
ホスト命令は他の長さを持つこともある。
トラック・テーブル610の全ての行もまた４つのエントリA〜Dを持ちL1キャッシュ602の４つのホスト命令A〜Dに対応している。
トラック・テーブル610の全ての行もまたエントリEを持ち、次命令ブロックのアドレスを記憶する。
トラック・テーブル610の全てのエントリは命令タイプを記憶する。
トラッカーは命令タイプにもとづいて次ステップのアドレスを決定する。
エントリはまたエントリによって表された命令のターゲット・アドレスをポイントするポインターをも記憶する。
ターゲット・アドレスのフォーマットはBN2もしくはBN1である。
オフセット・アドレス・マッピング・モジュール618の全ての行は、１つのL1キャッシュ・ブロックと、対応するトラック・テーブルの１つの行に対応する。
【０２１８】
[00260]  ブロック・アドレス・メモリ・モジュール920の全ての行はL2キャッシュ606の１つのキャッシュ・ブロックに対応する。
920の全ての行は複数のエントリ（例えばR、S、T、U、V）を含む。
全てのエントリはL1キャッシュのL1キャッシュ・ブロックに対応する。
ブロック・アドレス・メモリ・モジュール920の全てのエントリの内容は、対応するL1キャッシュ・ブロックのブロック・アドレスBN1Xと、L1キャッシュ・ブロックの最初のホスト命令に対応するL2キャッシュ・ブロックのゲスト命令のBN2Yアドレス、を含む。
L2キャッシュ・ブロックが書き込まれるとき、 ブロック・アドレス・メモリ・モジュール920の対応する行のBN2Yアドレスは全て’32’にリセットされ、次のL2キャッシュ・ブロック最初のバイトを表す。
【０２１９】
[00261]  図９Aは開始状態を表す。
このとき、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’から始まる４バイトはゲスト命令で、その対応するホスト命令はL1キャッシュ・ブロック’72’のエントリCへ充填される。
【０２２０】
[00262]  変換中、スキャン・コンバータ608はL2キャッシュ・ブロック’80’の’26’バイトから始まるゲスト命令が分岐命令であることを見いだし、スキャン・コンバータ608はアクティブ・リスト604に記憶されたキャッシュ・ブロック・アドレス、ブロック・オフセット’26’そして分岐オフセットを一緒に追加して分岐ターゲットを計算する。    
分岐ターゲットの最上位ビットはアクティブ・リスト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’の第２ワード）を得る。
従って、スキャン・コンバータ608のアドレス・バス669は’72’行のエントリとトラック・テーブル610のBコラムにポイントする。
エントリはバス687を経て送られる内容に書き込まれる。
従って、トラック・テーブルの’72B’エントリの内容はBN2アドレス’8118’である。
【０２２１】
[00263]  バス657の分岐ターゲットの低位ビット（BN2Y値は’18’）セレクタ638によって選ばれ、比較モジュール924の１つのインプット637へ置かれ、行’81’（アクティブ・リスト604によって割り当てられたBN2X’81’はセレクタ640によって選ばれバス639を経て送られる）からのエントリの内容と比較される。
比較結果は値’18’が全てのエントリの内容より小さいことを示す（つまり’18’ < ’32’）。
従って、BN1X値’72’とBN2Y値’18’（アドレスがバイト’18’である分岐ターゲット・ゲスト命令がL1キャッシュ・ブロック’72’の最初のメモリ・ブロックへ書き込まれる）はブロック・アドレス・メモリ・モジュール920の行’81’のエントリRへ書き込まれる。
このとき、値Rは’7218’である。
【０２２２】
[00264]  スキャン・コンバータ608は、L2キャッシュ・ブロック’80’のバイト’30’がL2キャッシュ606において到達されるまで、変換を再開する。     
スキャン・コンバータ608は命令の長さが４バイト（ブロックの後ろ２バイト）であることを見いだす。
従って、現行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’になる。
ある１つの実施形態において、１つの命令ブロックの最後の命令から次の命令への命令フローを処理する方法は、無条件分岐命令とみなされる。
つまり、バス687のBN2アドレスはターゲット・アドレスとみなされ、トラック・テーブルの命令ブロックの最後の命令（アドレス’72C’）の後のエントリの中に置かれ、命令タイプは無条件分岐とセットされる。
従って、スキャン・コンバータ608はバス661を経て値が’72D’であるアドレスを送り出し、BN2アドレス’8102’がトラック・テーブルの行’72’のエントリDの中に書き込まれるのを制御する。
【０２２３】
[00265]  トラッカー614はテーブルの’72’行のエントリAから始まるトラック・テーブルの内容を読む。
行’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へ変換のために供給される。
【０２２４】
[00266]  スキャン・コンバータ608はまた交換可能なL1命令ブロック番号を交換モジュール611に要求する。
交換モジュール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キャッシュ・ブロックへ、図９Bに示されるように、記憶される。
【０２２５】
[00267]  スキャン・コンバータ608はL1キャッシュ・ブロック’70’のエントリDが充填されていること、そしてL2キャッシュ・ブロック’81’のアドレスが’8118’〜’8131’である命令の変換が完了していない（アドレスが’8126’である命令の前のゲスト命令は変換されている）ことを見いだす。
従って、スキャン・コンバータ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’の中へ、図７Bに示されたフォーマットを用いて、記憶する。
【０２２６】
[00268]  バス657から送られたBN2Y値’27’は比較モジュール924へ送られ行’81’のエントリと比較される。
比較結果はBN2Y値がRエントリのBN2Y値’18’より大きい、しかしSエントリと他のエントリのBN2Y値（例えば,’32’）よりも小さいことを示す。
値’7127’はブロック・アドレス・メモリ・モジュール920の行’81’のSエントリへ充填される。
Rエントリの値’7018’はそのままにしておかれる。
エントリT、U、Vは右へ１エントリ、シフトされれる。
【０２２７】
[00269]  スキャン・コンバータ608はアドレスが’8118’〜’8131’であるゲスト命令の中の分岐命令を見いださないから、トラック・テーブル610の行’70’のエントリA、B、C、Dは分岐ターゲットのレコードを含まない。
スキャン・コンバータ608は行’81’のバイト’26’から始まるゲスト命令がバイト’31’で終わる（ゲスト命令が次の命令ブロックまで越えない）こと、そしてゲスト命令に対応するホスト命令がキャッシュ・ブロック’71’のBエントリで終わることを見いだす。
従って、計算、マッチングそして割り当てによって得られた次ゲスト命令のアドレス’8200’はトラック・テーブル610の行’71’のCエントリに記憶される。
トラック・テーブル604はL2キャッシュ・ブロック’82’の対応するゲスト命令ブロックを、下位レベルメモリから読み出し、L2キャッシュ・ブロック’82’に充填する。
詳細は図９Cの実施形態を参照されたい。
【０２２８】
[00270]  プロセッサ・コアはトラック・テーブルのエントリ’72B’に対応する分岐命令を実行する。
信号 635を経た分岐決定結果はトラッカー614へ送られる。
この時点で、結果は分岐が取られないことを示す。
トラッカー614はトラック・テーブルの同じ行の次のトラック・ポイント’72C’へ動き、内容を読み出し、命令が非分岐命令であることを見いだす。
そして、トラッカーは次エントリ’72D’へ動き、内容を読み出し、それがターゲットが’8102’である無条件分岐アドレスであることを見いだす。
コントローラはアドレスがBN2アドレスであることを判断し、BN2アドレスはバス633を経て送り出される。
バス633の高位ビットはブロック・アドレス・マッピング・モジュール920へ送られ、ブロック・アドレス・マッピング・モジュール920の行’81’のエントリの内容を読み出す。
920の内容は比較モジュール924のインプット・ポートの１つのセットへ送られる。
バス633の低位ビット（値は’02’）はセレクタ638によって選ばれ、比較モジュール924のインプット・ポート637の他のセットへ送られ、比較操作を実施する。
比較結果はインプット・ポート637のBN2Y値が全てのエントリの値より小さいことを表す。
比較結果にもとづいて、制御ロジックはBN2アドレスが’8102’であるゲスト命令に対応するホスト命令がL1命令ブロックに記憶されていないことを判断する。
制御ロジックはL2キャッシュ606を制御して、バス633から送られたBN2Xアドレス’81’そしてバス679から送られたアドレス’00’から始まるゲスト命令をスキャン・コンバータ608へ送り、ゲスト命令をホスト命令へ変換する。
【０２２９】
[00271]  スキャン・コンバータ608はL1キャッシュ・ブロック’73’を要求し獲得して、変換によって得られたホスト命令を充填する。 
同時に、バス637のBN2Yアドレス’02’が行’81’の全てのエントリの内容より小さいから、前の実施形態と同様に、値’7302’（BN2Yが’02’であるゲスト命令に対応するホスト命令がL1命令ブロック’73’に置かれることを表す）は行’81’のエントリRに置かれ、前行’81’の全てのエントリは右に１行シフトされる。
新しい値が書き込まれたエントリ（この場合Rエントリ）のBN2Y値’18’はスキャン・コンバータ608へ送られ、変換が’18’バイトの前バイトで終わる（つまり、’17’バイト）ことを、スキャン・コンバータへ知らせる。
【０２３０】
[00272]  変換によって得られたホスト命令がL1キャッシュ・ブロック’73’に充填されるとき、交換モジュール611によって生成されたBNX値’73A’とコントローラによって生成された無条件分岐命令タイプはトラック・テーブル610のエントリ’72D’へ書き込まれ、BN2値’8102’はBN1値’73A’に取って代わられる。
このとき、トラッカー614のリード・ポインタ631はまだエントリ’72D’にポイントし、よって’73A’値はバス633から読み出される。
コントロール・ロジックは値がBN1値であることを決定する。
従って、コントロール・ロジックはL1キャッシュを制御しアドレス’73A’を使って対応するホスト命令をプロセッサ・コア601による実行のために読み出す。
【０２３１】
[00273]  スキャン・コンバータ608が行’81’のバイト’9’において終わるゲスト命令を変換し、L1命令ブロック’73’がエントリDへ充満されることを見いだしたとき、スキャン・コンバータ608はL1命令ブロック’74’を要求し獲得して変換を再開し、バイト’10’から始まるゲスト命令を充填する。 
前の実施形態と同様に、交換モジュール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の値は右へ１エントリ、シフトされる。
【０２３２】
[00274]  スキャン・コンバータ608はゲスト命令を変換し続け、ゲスト命令をL2キャッシュ602へ充填する。
バイト’17’で終わるゲスト命令はL1キャッシュ・ブロック’74’のBエントリへ充填される。
この時点で、スキャン・コンバータ608は前に比較モジュール924によって送られた制限値’18’を見いだし、マッチング操作がブロック・アドレス・メモリ・モジュール920の行’81’において制限値’18’を用いて実施され、’70’を得る。
つまり、無条件分岐命令タイプ’70A’がトラック・テーブル610の行’74’のエントリCに記憶される。
他の方法は、トラッカーがアドレス’8118’を読み出すとき、トラック・テーブル610の行’74’のエントリCへBN2アドレス’8118’を対応するマッチング操作のために保存することである。
詳細は図９Dを参照されたい。
【０２３３】
[00275]  命令が変換されL1キャッシュ602へ充填されるとき、トラッカー614は’73’番トラックに沿って前へ移動する。
トラック・テーブルの’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による実行のために読み出される。
【０２３４】
[00276]  図９Eを参照して、トラッカー614は行’75’に沿って前方へ移動し、’75B’において条件付き分岐命令を見いだす。
ターゲットは’8116’である。
値が’8116’であるBN2は、ブロック・アドレス・メモリ・モジュール920へ送られ、マッチング操作を実施する。
結果はBN2Y値’16’がエントリSのBN2Y値’10’よりも大きいこと、しかしエントリTのBN2Y値’18’より小さいことを示す。
【０２３５】
[00277]  比較モジュール924による比較のあと、出力973と出力974は全て’0’であり、出力975は’1’である。
このとき、セレクタ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キャッシュに対応するレベル２サブキャッシュ・ブロックの開始アドレス）を、減算器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’は次キャッシュ・ブロックとして割り当てられる。
詳細は図９Fを参照されたい。
【０２３６】
[00278]  ラッカーによって必要とされる分岐命令アドレスがトラック・テーブルにてBN2からBN1へ変換され、トラッカー614が同等の値を読み出した後、トラッカーはL1命令キャッシュを直接に制御してプロセッサ・コア601へ命令を継続的に供給することができる。
【０２３７】
[00279]  加えて、プロセッサ・システムはプロセッサ・プラットフォームに対応する異なるゲスト命令セットだけでなく、仮想マシンに対応するバイトコード命令セット（バイナリコード命令セット）、例えばJAVA TMインタプリタを使うバイトコード命令、をもサポートする。
この時点で、バイトコード命令は１つもしくは複数のホスト命令に、上記方法を用いて、プロセッサ・コアによる実行のために変換されうる。
バイトコード命令の特殊性のために、ある種の変更が性能を向上させるために、変換の途中で行なわれうる。
例えば、定数を必要とするバイトコード命令のために、定数はメモリの定数プールに記憶されるから、命令は１つのデータ読み取り命令と、前手法に沿った対応する操作命令へと変換されうる。
しかし、スキャン・コンバータが、バイトコード命令が定数を読む命令であることを検証し見いだしたとき、定数はメモリからデータバッファへ前もって充填される。
よって、プロセッサ・コアがバイトコード命令に対応する最初のホスト命令（つまり、データロード命令）を実行するとき、キャッシュ・ミスは起こらない。
【０２３８】
[00280]  さらに、定数がメモリから前もって読み出されるとき、定数は対応するホスト命令（つまり、操作命令）へ即時命令フォーマットとして埋め込まれ、よってデータロード命令を省く。
よって、プロセッサ・コアがバイトコード命令（つまり、定数が埋め込まれた操作命令）に対応するホスト命令を実行するとき、オペレーションは直接実行され、プロセッサ・システムの性能をさらに向上させる。 
【０２３９】
[00281]  さらに、バイトコード命令のスタック操作命令も同じ手法を用いて、プロセッサ・コアによる実行のために、対応するホスト命令へ変換され、従ってバイトコード命令をマシンコード命令へ翻訳するステップを省くことができる。
ここにおいて、１つのスタック操作は１つのホスト命令へ変換される。
ホスト命令のオペランドはレジスタファイルのレジスタ値ではないが、しかしホスト命令のオペランドはオペランド・スタックの一番上のレジスタ値である。
この時点で、制御ロジックがプロセッサ・コアの既存のレジスタファイルのために追加され、レジスタファイルがスタック・レジスタとして用いられる。
【０２４０】
[00282]  図１０Aは開示された実施形態と整合する例示的なオペランド・スタックの回路図である。
ある実施形態においては、スタック操作は最大２つのオペランドを必要とし、１つの操作結果が得られる。
他の全ての場合においても、同様の方法が用いられうる。
【０２４１】
[00283]  図１０Aに示されるように、レジスタ・ファイル（RF）1001は２つの読み取り操作と１つの書き込み操作を同時にサポートする。
デコーダ1003とデコーダ1005はそれぞれ２つのレジスタ番号をデコードし、そしてデコード結果を第１読み取りポートと第２読み取りポートへ送り、対応するレジスタ値をバス1013とバス1015から読み出す。
デコーダ1007は書き込まれるレジスタのレジスタ番号をデコードし、デコード結果を書き込みポートへ送り、バス1017の値が対応するレジスタに書き込まれることになる。
レジスタ1011はトップ・オブ・スタック（TOS）ポインタの値、すなわちレジスタ・ファイルがオペランド・スタックとして用いられたときにTOSによってポイントされるレジスタのレジスタ番号、を記憶する。
レジスタ1011の値はバス1045を経てセレクタ1053、セレクタ1055、セレクタ1057、デクリメンタ1031、インクリメンタ1041そしてコントローラ1019へ送られる。
デクリメンタ1031とインクリメンタ1041は、バス1045から送られたTOS値にそれぞれ、１を引きまたは１つのオペレーションを追加する。     
対応する結果はセレクタ1053、セレクタ1055そしてセレクタ1057へバス1043とバス1047を経て送られる。
レジスタ・ファイル1001の容量は限られているから、レジスタ・ファイルがオペランド・スタックとして用いられるとき（つまりTOSポインタとボトム・オブ・スタック(BOS)ポインタの距離があるレベルに達する）、もしレジスタ・ファイルが満杯もしくは満杯に近いなら、オペランドの一部は順番に外部メモリ（もしくはキャッシュ）に記憶されなければならず、そしてBOSポインタは移動されて、レジスタのこの部分は直前にスタックへプッシュされたオペランドを記憶することができ、従って循環バッファに似た構造を形成する。
同様に、もしオペランド・スタックが空もしくは空に近いなら（すなわち、TOSポインタとBOSポインタの距離があるレベルに達する）、以前に外部メモリ（もしくはキャッシュ）に記憶されたオペランドは逆の順番でオペランド・スタックへ戻される必要があり、BOSポインタは同時に移動して、オペランド・スタックがオペランドを供給し続けられるようにする。
あるひとつの実施形態において、コントローラ1019は新しいBOSポインタをTOSポインタの値にもとづいて生成する。
新BOSポインタ値がデコーダ1009によってデコードされた後、新BOSポインタ値はレジスタ・ファイル1001を制御して前BOSポインタ値と新BOSポインタ値の間のレジスタ値を外部メモリに記憶する、もしくは、外部メモリからの対応するオペランドを、レジスタ・ファイル1001の前BOSポインタと新BOSポインタの間のレジスタへ充填する。
【０２４２】
[00284]  それゆえに、ホスト命令内に、ホスト命令がレジスタ操作命令かスタック操作命令かを表す命令フィールドがある。
命令フィールドの値はセレクタ1033、セレクタ1034、セレクタ1035、セレクタ1037へ制御ライン1021を経て送られる。
ホスト命令がスタック操作命令であるとき、セレクタ1033、セレクタ1035、セレクタ1037は全てインプットAを選び、インプットAをデコーダ1003、デコーダ1005、デコーダ1007へそれぞれ送る。
命令がレジスタ操作命令であるとき、セレクタ1033、セレクタ1035、セレクタ1037は全てインプットBを選び、インプットBをデコーダ1003、デコーダ1005、デコーダ1007へそれぞれ送る。
【０２４３】
[00285]  このようにして、もしホスト命令がレジスタ操作命令なら、２つのソースレジスタ番号と１つのターゲット・レジスタ番号がそれぞれセレクタ1033、セレクタ1035、セレクタ1037へバス1023、バス1025、バス1027を経てそれぞれ送られる。   
２つのソースレジスタ番号と１つのターゲット・レジスタ番号がセレクタ1033、セレクタ1035、セレクタ1037によって選ばれ、デコーダ1003、デコーダ1005、デコーダ1007によってデコードされた後、アドレス指定操作がレジスタ・ファイルのために実施される。
従って、値がレジスタ・ファイルのエントリから読み出され、そしてレジスタ・ファイルのエントリへ書き込まれうる。
オペレーションは既存のテクニックと同様であり、ここでは繰り返さない。
【０２４４】
[00286]  もしホスト命令がスタック操作命令なら、レジスタ番号を記憶するための３つの命令フィールドがTOS移動情報を記憶するために用いられる。
例えば、スタックのトップから２つのオペランドを取って操作し、結果をスタックのトップから１引いたところに記憶するスタック操作命令に対して、オペランドの１つに対応するレジスタ番号はレジスタ1011に記憶されたTOSポインタの値である；もう１つのオペランドに対応するレジスタ番号はTOSポインタの値から１引いたものである。
つまり、スタックのトップの２つのオペランドがポップされ、操作結果がスタックのトップへプッシュし戻される。 
このとき、セレクタ1053はバス1023の命令フィールドの制御の下、インプットD（つまり、現在のTOS値）を選びレジスタ・ファイルから最初のオペランドを読み出す。
セレクタ1055は、バス1025の命令フィールドの制御の下、インプットH（つまり、現在のTOS値マイナス１）を選びレジスタ・ファイルから第２オペランドを読み出す。
セレクタ1057は、バス1027の命令フィールドの制御の下、インプットK（つまり、現在のTOS値マイナス１）を選ぶ。
インプットKがデコードされた後、書き戻されたレジスタが選ばれる。
同時に、セレクタ1051はバス1029の命令フィールドの制御の下、インプットN（つまり、現在のTOS値マイナス１）を選ぶ。
インプットNはレジスタ1011へ新TOS値として書き戻され、従ってTOSポインタの更新を完了する。
【０２４５】
[00287]  もう１つの例として、オペランドをオペランド・スタックへプッシュする命令に対して、セレクタ1057は、バス1027の命令フィールドの制御の下、インプットI（つまり、現在のTOS値マイナス１）を選ぶ。    
インプットIがデコードされた後、オペランドが書き戻された対応するレジスタが選ばれ、従ってプッシュ操作が実現される。
同時に、セレクタ1051は、バス1029の命令フィールドの制御の下、インプットI（つまり、現在のTOS値マイナス１）を選ぶ。 
選ばれたインプットIはレジスタ1011へ新TOSポインタ値として書き戻され、従ってTOSポインタの更新を完了する。
【０２４６】
[00288]  もう１つの例として、オペランド・スタックからオペランドをポップする操作のために、セレクタ1053はバス1023の命令フィールドの制御の下、インプットD（つまり、現在のTOS値）を選ぶ。 
インプットDがデコードされた後、対応するレジスタがオペランドを読み出すために選ばれ、従ってポップ操作を実現する。
同時に、セレクタ1051はバス1029の命令フィールドの制御の下、インプットN（つまり、現在のTOS値マイナス１）を選ぶ。
選ばれたインプットNはレジスタ1011 へ新TOSポインタ値として書き戻され、従ってTOSポインタの更新を完了する。
【０２４７】
[00289]  加えて、コントローラ1019は現在のBOSポインタ値を記憶し、レジスタ1011から送られた現在のTOSポインタ値を判断する。
もしBOSポインタ値がある程度TOSポインタ値に近いならば、それはオペランド・スタックがほとんど空であることを表す。
もしオペランドが前に外部メモリ（もしくはキャッシュ）へ記憶されているならば、幾つかのオペランドは外部メモリ（もしくはキャッシュ）から取り出されてスタックのボトム 以外のレジスタ・ファイルへ充填される必要があり、そしてBOSポインタ値が更新される。
それゆえに、もしBOSポインタ値がTOSポインタ値よりある程度以上離れているなら、それはオペランド・スタックがほぼ満杯であることを表す。
スタックのボトム の幾つかのオペランドは取り出され外部メモリ（もしくはキャッシュ）へ記憶される必要があり、そしてBOSポインタ値が更新される。
【０２４８】
[00290]  図１０Bは開示された実施形態と整合するBOSの更新のプロセスを表す。
図１０Bに示されるように、BOSポインタ値とTOSポインタ値の差異が’3’のとき、それはオペランド・スタックがほぼ空であることを示すと仮定され、そして１つのオペランドが毎回充填される。
ある時点で、BOSポインタはレジスタ1073へポイントし、そしてTOSポインタはレジスタ1079へポイントする。
ポップ操作が実施されるとき、TOSポインタはレジスタ1077をポイントする。
このとき、BOSポインタ値とTOSポインタ値の差異は’3’である。
コントローラ1019は信号を送り、前に外部メモリ（もしくはキャッシュ）に記憶されていた最後のオペランドを取り出す。
それからオペランドは、位置がBOSポインタ値マイナス１のレジスタへ 充填される。
同時に、BOSポインタ値から１が引かれ、BOSポインタはレジスタ1071にポイントし、そしてオペランド・スタックの中のオペランド数は’3’より大きい。
【０２４９】
[00291]  図１０Cは開示された実施形態と整合するBOS更新のもう１つのプロセスを示す。
ある実施形態において、BOSポインタ値とTOSポインタ値の差異が’7’であるとき、それはオペランド・スタックがほぼ満杯であることを表すと仮定され、そしてオペランドは毎回外部メモリ（もしくはキャッシュ）へ記憶される。
ある時点で、BOSポインタ値はレジスタ1081をポイントし、そしてTOSポインタはレジスタ1091をポイントする。
プッシュ操作が実施されるとき、TOSポインタはレジスタ1093をポイントする。
このとき、BOSポインタ値とTOSポインタ値の差異は’7’である。
コントローラ1019は信号を送り、外部メモリ（もしくはキャッシュ）のBOSポインタによってポイントされたオペランドを記憶する。
BOSポインタ値は１を追加し、よってBOSポインタはレジスタ1083にポイントし、オペランド・スタックのオペランド数を’7’より小さく保つ。
【０２５０】
[00292]  複数のオペランドを毎回充填し記憶する方法は図１０Bと図１０Cに描かれている方法と同様で、ここでは繰り返されない。
加えて、BOSポインタ値とTOSポインタとの差異を判断することを通して、オペランド・スタックがほぼ空かもしくはほぼ満杯かが決定される。
しかし、オペランド・スタックがほぼ空かもしくはほぼ満杯かはTOSポインタ値の変化を判断することによっても決定されうる。
例えば、BOSポインタ値は最後に調整されるから、もしTOSポインタ値の累積した増加もしくは累積した減少があるレベルに達したなら、対応する操作が実施されうる。
【０２５１】
[00293]  図７Aに示された実施形態において、エンディング・トラック・ポイントは無条件分岐ポイントと考えられうる。
従って、トラッカーのリードポインタ631がエンディング・トラック・ポイントの前のトラック・ポイント（つまり、命令ブロックの最後の命令）をポイントし、そしてトラック・ポイントが分岐ポイントでない、もしくは分岐が取られない分岐ポイントであるとき、トラッカーのリードポインタ631は更新を続けエンディング・トラック・ポイントへ移動する。
BN1が出力され、L1キャッシュ602へ送られる。
エンディング・トラック・ポイントは真の命令に対応せず、そしてトラッカーのリードポインタ631は次サイクルの次トラックの最初のトラック・ポイントへ更新されるから、このクロック・サイクルにおいて、L1キャッシュ602はまた空の命令（プロセッサ・コアの内部状態を変化させない命令、例えばNOP）をプロセッサ・コア601における実行のために出力する必要がある。
【０２５２】
[00294]  本開示において、L1キャッシュ602に送られるアドレス指定アドレスは判断されうる。
アドレス指定アドレス がエンディング・トラック・ポイントに対応することを見いだしたとき、L1キャッシュ602にアクセスする必要はなく、そして空命令が直接プロセッサ・コアにおける実行のために出力される。
しかし、プロセッサ・コアは空命令を実行するためにもう一回クロック・サイクルを取る必要がある。
従って、図７Aに示された構造は修正され、トラッカーのリード・ポインタ631がエンディング・トラック・ポイントの前のトラック・ポイントにポイントするとき、トラック・ポイントの命令タイプとプロセッサ・コア601によって実行された命令から生成されたフィードバックにもとづいて、リード・ポインタ631は直接に分岐ターゲット・トラック・ポイントもしくは次クロック・サイクルの次トラックの最初のトラック・ポイントへポイントする。
【０２５３】
[00295]   図１１Aは開示された実施形態と整合する、トラック・テーブルにもとづいたもう１つの例示的なキャッシュ構造の回路図である。
ある実施形態において、プロセッサ・コア601、L1キャッシュ602、スキャン・コンバータ608、L2キャッシュ606、交換モジュール611、オフセット・マッピング・モジュール618、セレクタ692、セレクタ696、セレクタ694は図７Aの対応する部分と同じである。
違いは以下に記される。
トラック・テーブル610は各回２つのトラック・ポイントの内容（トラッカーのリードポインタ631によってポイントされたトラック・ポイントの内容1182と次トラック・ポイントの内容1183）を出力し、タイプ・デコーダ1152、コントローラ1154、セレクタ1116がトラッカーに追加される。 
コントローラ1154は図７Aに示されていない、コントローラの機能と同様の機能を実施する。
例示目的のために、コントローラ1154が図１１Aに示される。
【０２５４】
[00296]  ある実施形態において、トラック・テーブル610のリードポートは、トラッカーによって出力されたリードポインタ631のアドレス指定操作の下、２つの隣り合ったトラック・ポイントの内容を出力する。
２つの隣り合ったトラック・ポイントの内容はバス1117とバス1121に置かれる。
コントローラ1154はバス1117の命令のタイプを検出する。
タイプデコーダ1152はバス1121の命令のタイプを検出する。
どの時点でも、２つのエントリ、つまり現エントリ1182と次（右）エントリ1183 がトラック・テーブル610から読み出される。
現エントリ1182の内容はバス1117を経て読み出され、セレクタ738の１つのインプットとコントローラ1154へ送られる。
次エントリ1183はデコードのためにバス1121を経てタイプ・デコーダ1152へ送られる。
デコード結果はセレクタ1116を制御する。
セレクタ1116の１つのインプットはバス1121からで、他のインプットはリード・ポインタ631のBN1Xとインクリメンタ736からのBN1Yに１を加えたもの（つまりリード・ポインタ631のBN1Yプラス１）である。
タイプ・デコーダ1152は無条件分岐命令タイプのみをデコードする。
もしバス1121の命令が無条件分岐命令であるなら、セレクタ1116はバス1121へ内容を出力するように制御される。
もしバス1121の命令が他のタイプであるなら、バス631からのBN1Xとインクリメンタ736から出力されたBN1Yに１を加えたものが選ばれる。
【０２５５】
[00297]  バス1121の命令 （つまり次の順番のエントリ）が無条件分岐命令でないとき、セレクタ1116はインクリメンタ736からの出力を選び、インクリメンタ736からの出力をセレクタ738の１つのインプットへ送る。
【０２５６】
[00298]  もしコントローラ1154がバス1117の命令（つまり現エントリ1182の内容）が非分岐命令であることをデコードするなら、コントローラ1154はセレクタ738を制御し、セレクタ1116によって選ばれたインクリメンタ736の出力をレジスタ740のインプットとして選ぶ。
プロセッサ・コア601からの制御信号1111はインプットをレジスタ740へ記憶されるよう制御し、トラッカーが次アドレス（つまり、より大きな値のアドレスに対して、BN1Xは変化せず、BN1Y+’1’）へ移動するようにする。   
ある実施形態においては、制御信号1111はプロセッサ・コア601がトラッカーへ提供するフィードバック信号である。
制御信号1111はプロセッサ・コアが正常な稼働状態のとき’1’であり、トラッカーのレジスタ740は毎クロック・サイクルにおいて更新され、リード・ポインタ631はトラック・テーブルの新しいエントリと、プロセッサ・コア601による実行のためのL1キャッシュ602の新しい命令へポイントする。 
プロセッサ・コア601が非正常な稼働状態にあり、プログラム・フローが中断される必要があるか、新しい命令が実行されえないとき、制御信号1111は ‘0’であり、レジスタ740は更新を中断し、トラッカーとリード・ポインタ631は変化しない状態に留まる。
よって、L1キャッシュ602はプロセッサ・コア601のための新しい命令を提供するのを中断する。
【０２５７】
[00299]  もしバス1117の内容に含まれる命令タイプが無条件分岐であるならば、コントローラ1154はセレクタ738を制御しバス1117の分岐ターゲットアドレスを選び、リード・ポインタ631はバス1117の分岐ターゲットアドレスに対応するトラック・ポイントへジャンプする。
【０２５８】
[00300]  もしバス1117の命令タイプが直接条件分岐であるなら、コントローラ1154はトラッカーを制御し更新を中断し、プロセッサ・コア601が分岐がとられたかを表すTAKEN信号635を生成するまで待機する。    
この時点で、レジスタ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による実行のための命令を読み出す。
【０２５９】
[00301]  もしバス1117の命令タイプがBN2分岐タイプならば、コントローラ1154はトラッカーのレジスタ740を制御し更新を中断し待機する。
BN2アドレスはBN1アドレスへ変換されて、BN1アドレスはトラック・テーブルの前の間接分岐エントリの中へ書き戻される。
エントリはバス1117を経て読み出され、後続するオペレーションは前の実施形態のオペレーションと同様である。
トラッカーはBN1に沿って移動し、L1キャッシュ602を制御して、プロセッサ・コア601に送り返された実行結果にもとづいて、プロセッサ・コア601へ実行のために命令を供給する。
【０２６０】
[00302]  もし分岐が取られないならば、オペレーションは非分岐命令のオペレーションと同様である。
もし分岐が取られるならば、オペレーションは無条件分岐命令のオペレーションと同様である。
【０２６１】
[00303]  もし内容に含まれる命令タイプが間接命令ならば、コントローラ1154はトラッカーのレジスタ740を制御して更新を中断し、プロセッサ・コア601が分岐ターゲットアドレスをバス683を経て送り出すまで待機する。
前実施形態と同様に、分岐ターゲットアドレスはアクティブ・リスト604とブロック・アドレス・マッピング・モジュール620へ送られ、マッチング操作を実施する。
後続オペレーションは前実施形態と同様である。
【０２６２】
[00304]  もしエントリ1183に含まれる命令が無条件分岐命令であるなら、分岐タイプデコーダ1121はバス1152の命令タイプをデコードし、セレクタ1116はバス1121の分岐ターゲットを選ぶが、しかしインクリメンタ736によって供給されたBN1（つまり、BN1X、BN1Y+’1’）は選ばない。
従って、プロセッサ・コア601がエントリ1182に対応する命令を実行した後、プロセッサ・コア601はエントリ1183に対応する命令を実行しない（エントリ1183に対応するトラック・ポイントはエンディング・トラック・ポイントであるかもしれないから、L1キャッシュ602に対応する命令が無い）。
そのかわり、プロセッサ・コア601は直接にエントリ1183に含まれる分岐ターゲット・アドレスに対応する命令を実行する。
【０２６３】
[00305]  もしエントリ1182に含まれる命令が非分岐命令であるなら、非分岐命令を実行した後、実行されるべき次命令はエントリ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に含まれる無条件分岐ターゲットアドレスによってポイントされる命令である。
【０２６４】
[00306]  エンディング・トラック・ポイントに含まれる無条件分岐ターゲットのアドレスはBN2アドレスである。
タイプデコーダ1152がバス1121から読み出されたエントリタイプをデコードし、アドレスがBN2アドレスであることを見いだすとき、バス1121から出力されるBN2はバス1117へ置かれBN1アドレスへ変換される。
BN1アドレスはエントリへ記憶され戻される。
例示目的のため、このトレースは図１１Aに示されていない。
【０２６５】
[00307]  図１１Aにおいて、条件付き分岐命令を判断する４つの方法がある。
第１の方法：ただ１つのタイプの無条件分岐タイプがあり、つまり、本来の無条件分岐命令がプログラムに存在し、本実施形態に加えられたエンディング・トラック・ポイントにおける無条件ジャンプ操作は区別されない。
この方法を用いることによって、プログラムの本来の条件付き分岐命令はスキップされ、プロセッサ・コア601によって実行されない。
しかし、プログラム・フローは、トラック・テーブル610とトラッカーの制御の下、分岐命令のターゲット命令と後続命令を正しく実行することができる。
従って、無条件分岐命令を実行するクロック・サイクルは節約される。
しかし、プロセッサ・コア601は本来の条件付き分岐命令を実行しないから、プログラム・カウンタ（PC）値はエラーを持ちうる。
もし正確なPC値が維持される必要があるなら、補強が必要である。
【０２６６】
[00308]  PC値が必要でなければ、本開示のキャッシュ・システムは正しく命令をプロセッサ・コア601における実行のために供給できる。
従って、プロセッサ・コア601は命令を実行し続けることができる。
もしある時点でのPC値（例えば、プログラムをデバッグするとき）が取得される必要がある場合、トラック・テーブルの全ての行は、L1命令ブロックに対応するL2キャッシュ・ブロック・アドレスBN2XとL2キャッシュ・サブブロック・アドレスを記録する。
よって、BN2Xはアクティブ・リスト604から対応するタグを読み出すことができる。
タグはL2キャッシュ・ブロック・アドレス、サブブロック・アドレスそしてリード・ポインタ631のBNYとスプライスされる。
スプライス結果は実行される命令のPC値である。
【０２６７】
[00309]  第２の方法：２つのタイプの無条件分岐がある。１つのタイプは、毎トラックのエンディング・トラック・ポイントに対応するエンディング・トラック・ポイント無条件分岐である。
エンディング・トラック・ポイント無条件分岐に対して、タイプ・デコーダ1152はエンディング・トラック・ポイントは命令に対応しないことを考慮し、セレクタ1116を制御してバス1121の分岐ターゲットを選ぶ。
バス1117の命令が実行されたなら、プログラム・フローはバス1121の分岐ターゲット・アドレスに直接ジャンプする。
もう１つのタイプはプログラムの無条件分岐タイプである。
タイプ・デコーダ1152がこのタイプを取得するとき、それは分岐として処理されない。
セレクタ1116はインクリメンタ736からの出力を選ぶように制御される。
バス1117のエントリの対応する命令が実行された後、実行されるべき次の命令は順番上次の命令で、つまりプログラムの前の無条件分岐命令である。
このようにして、プロセッサ・コアのPC値は常に正確に保たれる。
【０２６８】
[00310]  第３番目の方法は、図１１Aに示された構造の改良である。
スキャン・コンバータ608が命令ブロックを検証するとき、もしスキャン・コンバータ608がL1命令ブロックの最後から２番目の命令が条件付き分岐命令でない、そして最後の命令は非分岐命令である、ことを見いだすなら、スキャン・コンバータ608はエンディング・トラック・ポイントを最後の命令に対応するトラック・ポイントへ併合する。
つまり、最後の命令の命令タイプは無条件分岐命令としてマークされ、次命令ブロックの最初の命令に対応するBN1もしくはBN2（もしBN2ならば、トラッカーはBN2をBN1へ変換する）は最後の命令に対応するトラック・ポイントの中にトラック・ポイントの内容として記憶される。
従って、トラッカーのリード・ポインタ631が命令に対応するトラック・ポイントにポイントするとき、命令がプロセッサ・コアによる実行のためにL1キャッシュ602から読み出される以外は、コントローラ1154はバス1117の命令タイプをデコードし、命令が無条件分岐命令であることを見いだす。
よって、セレクタ738はバス1117を選ぶように制御される。
次のクロック・サイクルにおいて、リード・ポインタ631は無条件分岐の分岐ターゲットBN1（つまり、次命令ブロックの最初の命令に対応するBN1）として更新される。
この時点で、プロセッサ・コア601は空命令を実行するためにクロック・サイクルを無駄にする必要がない。
【０２６９】
[00311]  スキャン・コンバータ608が命令ブロックを検証するとき、もしスキャン・コンバータ608がL1命令ブロックの最後の命令（トラックの最後のトラック・ポイントに対応する）が分岐命令であることを見いだすなら、スキャン・コンバータ608はエンディング・トラック・ポイントを最後の命令に対応するトラック・ポイントに併合しない。
一方で、スキャン・コンバータ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に応じてプロセッサ・コアによる実行のために命令を供給する。
【０２７０】
[00312]  上記３つの方法は固定長命令と可変長命令の両方に適用できる。
エンディング・トラック・ポイントはトラックの固定された場所にある必要はない。
加えて、もしエンディング・トラック・ポイントがトラックの固定された場所にあるなら、最後の命令に辿り着いたかの判断はリード・ポインタ631のBN1Y値にもとづいて決定されうる。
第４の方法：トラック・テーブルにただ１つの種類の無条件分岐があるが、しかしトラッカーがトラック・テーブルの無条件分岐のタイプの位置にもとづいて、２つのタイプに分割する。 
この方法によって、リード・ポインタ631のBN1Yはタイプ・デコーダ1152へ送られる；一方でバス1121の命令タイプはデコードされる必要がない。
BN1Yがトラックの最後のエントリへポイントするとき、タイプ・デコーダ1152はセレクタ1116を制御しバス1121の分岐ターゲットを選ぶ。
バス1117の命令が実行された後で、プログラム・フローは直接にバス1121の分岐ターゲット・アドレスへジャンプする。
BN1Yがトラックの最後のエントリ以外のエントリへポイントするとき、タイプ・デコーダ1152はセレクタ1116を制御しインクリメンタ1736の出力を選ぶ。
バス1117のエントリの対応する命令が実行された後で、次に実行されるべき命令は、順番上次の命令である。
このようにして、プロセッサ・コアのPC値は常に正確な値を維持する。
この方法は固定長命令に対しても適用できる。
【０２７１】
[00313]  加えて、バス1117から読み出されたトラック・テーブル610のエントリが制御モジュール1154によってデコードされ、そして命令が条件付き分岐命令であることが判断されたとき、プロセッサ・コア601は分岐の１つに沿って投機的実行を実施し、従ってプロセッサ・コアの性能を向上させる。
図１１Bは開示された実施形態に整合する、投機的実行をサポートするプロセスを示す。
図１１Aに示されたトラッカーと比較して、セレクタ1162とレジスタ1164が図１１Bに示されるトラッカーに追加される。
セレクタ1162とレジスタ1164は投機的実行によって選ばれない他の分岐を選び一時的に記憶するように設定され、そして投機が誤りであった時に他の分岐が用いられる。
投機的実行の方向は既存の静的／動的分岐予測テクニックによって決定されうる。
投機的実行の方向はまたトラック・テーブルの分岐命令に対応するエントリの予測フィールドによっても決定されうる。
【０２７２】
[00314]  この例において、分岐予測は分岐が取られないことを示す。
バス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は供給された命令の実行を続ける。
【０２７３】
[00315]  他の例において、分岐予測は分岐が取られることを示す。
バス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は供給された命令を実行し続ける。
【０２７４】
[00316]  既存の命令セット変換技術は通常、固定された命令変換モジュール（時にデコーダと呼ばれる）を用いてプロセッサ・コアによる実行のためにゲスト命令セットをホスト命令セット（時にマイクロ・オプと呼ばれる）へ変換する。    
一般的に、変換モジュールはゲスト命令を記憶するキャッシュとプロセッサ・コアの間に在る。
プロセッサ・コアによって供給されたゲスト命令アドレスは、ゲスト命令を呼び出すためのキャッシュへのアドレス指定操作を実施するのに用いられる。
ゲスト命令は変換モジュールによってホスト命令へ変換され、ホスト命令がプロセッサ・コアによる実行のために供給される。
ゲスト命令の度重なる変換は電力消費を増やす。
加えて、長い遅延を伴った命令変換器はより深い命令バッファを命令実行のクリティカル・トレースにおいて必要とするかもしれない。
従って、プロセッサ・コアのパイプラインは画然と深くなり、よって分岐予測が失敗した時に、ハードウェア・コストとパフォーマンス・ロスを増やす。
【０２７５】
[00317]  変換モジュールがキャッシュの前に位置するとき、キャッシュに記憶された命令はプロセッサ・コアによって直接実行されうるホスト命令である。
しかし、一般的に、ホスト命令（通常、固定長命令）とゲスト命令（通常、可変長命令）は一対一の対応関係を持たず、よって分岐ターゲット命令のゲスト命令アドレスからホスト命令アドレスへの変換をする、そして正しいホスト命令を得るためのキャッシュでのアドレス指定操作を行なう、ための信頼性のある方法とシステムの欠如が問題となる。    
よって、既存のプロセッサ・コアは同じ命令を繰り返し変換することに起因する、電力消費と性能のロスとコストを負うことになる。
これが命令変換モジュールがキャッシュとプロセッサ・コアの間に置かれ、ゲスト命令がL1命令キャッシュに記憶される理由である。
リアル・タイム・アドレス変換は、プログラム実行トレース上にヒットがあるもしくは循環コードが実行されるとき、トレース・キャッシュと命令循環バッファを用いることで回避できるものの、トレース・キャッシュは同じ命令を同時に異なるトレースにて記憶するかもしれず、 トレース・キャッシュの大いなる容量の無駄と低性能を結果する。
幾つかの特定の状況において、アドレス指定操作は特定の命令アドレスを用いてこれらのメモリ・デバイスのために実行されうる。
しかし、プロセッサ・コアはアドレス指定操作を任意の状況において実施することができない。
同じゲスト命令に対する変換プロセスは繰り返し実施され、もしくはゲスト命令はホスト命令へソフトウェア手法を用いて翻訳される。
加えて、既存の命令変換は１つもしくは幾つかのタイプの特定のゲスト命令セットを１つのホスト命令セットへプロセッサ・コアによる実行のために変換できるだけである。
【０２７６】
[00318]  この開示に示された命令セット変換のシステムと方法を用いて、変換によって得られたホスト命令はキャッシュに記憶されうる。
アドレス・マッピング・モジュールはプロセッサ・コアによって生成されたゲスト命令アドレスのホスト命令アドレスへの変換を完了し、プロセッサ・コアは直接にキャッシュに記憶されたホスト命令のためのアドレス指定操作を実施できる。
プロセッサ・コアは繰り返して、ゲスト命令を読み出すためにゲスト命令を記憶しているキャッシュに対してアドレス指定操作を実施し、ゲスト命令をプロセッサ・コアによる実行のためにホスト命令に変換する、必要がない、
従って、L1キャッシュの同じゲスト命令に対して繰り返して変換を実施することが避けられる。
電力消費、クリティカル・トレースにおける長い遅延、そして追加のハードウェア・コストも避けることができる。
本開示に示された設定可能な命令変換モジュールは任意の不特定のゲスト命令セットを設定に応じてホスト命令セットへ変換することができる。
【０２７７】
[00319]  命令変換のシステムは主にコンバータとアドレス・マッピング・モジュールを含む。
コンバータは固定されたコンバータもしくは設定可能なコンバータである。
プロセッサ・コアによって実行されうる命令セットに含まれる命令（つまり、ホスト命令セット）が実行されるべき任意の命令セット（つまり、ゲスト命令セット）に含まれる命令と一対一対応関係を持つとき、設定可能コンバータとプロセッサ・コアは恊働してゲスト命令をホスト命令へプロセッサ・コアによる実行のために変換する。
この時点で、ゲスト命令の分岐命令に対応する分岐ターゲット・アドレスが分岐命令に対応するホスト命令の分岐ターゲット・アドレスと同じである。
図１２は開示された実施形態と整合する設定可能コンバータを含む例示的なプロセッサ・システムの回路図を示す。
図１２に示されるように、ゲスト命令1205は設定可能コンバータによって変換され、プロセッサ・コアによる直接実行のためにメモリ1203に記憶される。
この時点で、命令メモリ1203に記憶される命令はホスト命令である。
設定可能コンバータ1202の機能と構造は図２に示されるコンバータ200の機能と構造と同じである。
ゲスト命令とホスト命令が一対一の対応関係を持つから、ゲスト命令アドレスはホスト命令アドレスと同じである。
プロセッサ・コア1201が分岐命令を実行するとき、もし分岐がとられないならば、分岐命令アドレスと’1’の合計が次命令のアドレスとして用いられる。
次命令のアドレスは命令メモリ1203へ送られ、プロセッサ・コアによる実行のためにホスト命令を読み出す。
もし分岐が取られるなら、ゲスト命令の分岐オフセットを分岐命令アドレスに加えることで生成されたゲスト命令の分岐ターゲット・アドレスがホスト命令の分岐ターゲット・アドレスと同じであるから、ゲスト命令の分岐ターゲット・アドレスは直接に用いられて、命令メモリ1203のためのアドレス指定操作を実施する。
それから、分岐ターゲット・ホスト命令は命令メモリ1203から読み出される。
ゲスト命令アドレスをホスト命令アドレスに変換する必要はない。
非分岐命令が実行されるとき、次命令のアドレスを生成する方法は、分岐が取られない場合の方法と同じである。
【０２７８】
[00320]  設定可能コンバータを含むプロセッサ・システムは必要に応じて設定され、よって異なるゲスト命令セットを実行する。
図１３Aは開示された実施形態と整合する、例示的な設定可能コンバータのブロック・ダイアグラムを示す。
図１３Aに示されるように、メモリ201はホスト命令セットとゲスト命令セットの変換ルールを記憶する。
抽出器1302（つまり、図３に示されるオペレーション・コード抽出器211、213、215）はバスを経て送られたゲスト命令1205からオペレーション・コードをアドレス指定アドレスとして抽出する。
アドレス指定アドレスはバス1307を経てメモリ201へ送られ、アドレス指定操作を実施し、ゲスト命令に対応する変換ルールを読み出す。
変換ルールの中のマスクとシフト制御信号はバス1308を経てシフトモジュール1303（つまり、図２に示される抽出器221、223、225、227）を制御する。
シフトモジュール1303はゲスト命令の命令フィールドを抽出し、マスクし、ホスト命令フォーマットによって特定された位置へシフトすることができる。
ホスト命令のオペレーション・コードはバス1309を経て送り出され、ホスト命令フォーマットによって特定された位置へシフトされる。
シフトされマスクされた命令はマージ・モジュール1304（図２に示される命令スプライサと同様）のホスト命令へ融合され、バス1306を経てホスト命令を出力する。
従って、設定可能コンバータはゲスト命令をホスト命令へ変換する操作を完了する。
メモリ1301の変換ルールを変更することによって、命令コンバータとホスト命令を実行するプロセッサ・コアの組み合わせは異なるゲスト命令セットを実行することができる。
【０２７９】
[00321]  加えて、レジスタが設定可能コンバータへ追加されうる。
追加されたレジスタは、ゲスト命令が固定長か可変長かについての情報を記憶するように設定される。
レジスタが固定長（レジスタは’0’に設定される）として設定されるとき、それはゲスト命令ブロックのゲスト命令の境界が揃うことを示す。
従って、変換プロセスはゲスト命令ブロックの開始アドレスから開始されうる。
レジスタが可変長（レジスタは’1’に設定される）として設定されるとき、それはゲスト命令ブロックのゲスト命令の境界が必ずしも揃わないことを示す。
このとき、ターゲット命令から始まってゲスト命令ブロックの最後の変換されていない命令までのみが変換される。
【０２８０】
[00322]  さらに、メモリ1301は複数のゲスト命令セットの変換ルールを記憶でき、全てのゲスト命令セットが各自のアドレス・スペースを持ち、異なるプログラム・スレッドは変換ルールの異なるアドレス・スペースを選ぶ。
ゲスト命令のオペレーション・コードの実行を制御するレジスタ212、レジスタ214、レジスタ216（図２に示される）の他に、追加のレジスタが、スレッドに対応する命令セットの変換ルールを記憶するメモリ201の基底アドレスを記憶するために加えられる。
上記レジスタは複数のレジスタ・グループとして追加されうる。
各レジスタ・グループは１つの種類のゲスト命令セットに対応し、セレクタによって選ばれる。
ストレージ・フィールドはプロセッサのメモリ・マネージメント・ユニット（MMU）のスレッド番号メモリ（通常TLB）の全てのスレッドに対応して追加され、ストレージ・フィールドは複数のレジスタ選択信号を記憶し選ぶために用いられる。
図１３Bは開示された実施形態と整合する、設定可能コンバータの例示的なメモリの回路図を示す。
図１３Bに示されるように、レジスタ・セット1311はP命令セットのオペレーション・コードの抽出位置と、メモリ201の対応する命令変換ルールの基底アドレス’m’を記憶する。
レジスタ・セット1313はQ命令セットのオペレーション・コードの抽出位置と、メモリ201の対応する命令変換ルールの基底アドレス’n’を記憶する。
【０２８１】
[00323]  スレッドJのゲスト命令が命令コンバータによって変換されるとき、MMUのJスレッドの選択信号316はセレクタ315を制御しレジスタ・セット1311の出力を選ぶ。
このとき、オペレーション・コード抽出器1302（つまり、図３に示される抽出器211、213、215）は、レジスタ・セット1311の制御の下、変換されるゲスト命令のオペレーション・コードを抽出する。
抽出されたオペレーション・コードとレジスタ・セット1311からの基底アドレス’m’は加法器1318によって一緒に加算され結果を得る。
結果は、変換ルール・メモリ201のためのアドレス指定操作を実施するアドレスとして用いられ、命令コンバータのオペレーションを制御し、P命令セットの命令をホスト命令へ変換し、図１２に示される命令メモリ1203にホスト命令を記憶する。
スレッドKのゲスト命令が命令コンバータによって変換されるとき、MMUのKスレッドのメモリの制御信号316はセレクタ315を制御しレジスタ・セット1313の出力を選ぶ。
このとき、オペレーション・コード抽出器1302は、レジスタ・セット1313の制御の下、変換されるゲスト命令のオペレーション・コードを抽出する。
抽出されたオペレーション・コードとレジスタ・セット1313からの基底アドレス’n’は加法器1318によって一緒に加算され、結果を得る。
結果は、変換ルール・メモリ202のためのアドレス指定操作を実施するアドレスとして用いられ、命令コンバータのオペレーションを制御し、Q命令セットの命令をホスト命令へ変換し、図１２に示される命令メモリ1203に記憶する。
プロセッサ・コアが現行スレッドをJスレッドからKスレッドへスイッチするとき、それは実際にはP命令セットの命令の実行からQ命令セットの命令の実行へのスイッチである。
このようにして、ゲスト命令セットの複数のゲスト命令を含むプログラムは仮想マシンにて実行されうる。
もちろん、同じ機能は複数の命令コンバータを用いて実現されることが可能で、各命令コンバータは１つのゲスト命令セットを変換するように設定される。
【０２８２】
[00324]  あるコンピュータ命令セットの命令の複数のフィールドは直行する。
つまり、これらのフィールドは独立である。
例えば、いくつかの命令セットにおいて、オペレーション・コード・フィールドに加えて、命令のいくつかのフィールドは特定のメモリもしくはレジスタのためのアドレス指定操作を実施するのに用いられる。
これらのフィールドもまた、ホスト命令の要求を満たすために、ゲスト命令の中のアドレスをシフトする以外にも、変換ルールによってマップされる必要がある。  
複数の変換ルール・メモリと複数の直行する命令フィールドに対応するロジックを用いて、変換ルール・メモリのエントリの総数（行数）は手頃な数に制御されうる。
【０２８３】
[00325]  図１３C開示された実施形態と整合する、例示的な設定可能コンバータのメモリの回路図である。
図１３Aと比べて、変換ルール・メモリ1321とその特定の抽出器1322（機能は抽出器1302と同様）そしてシフト・ロジック1323（機能はシフト・モジュール1303と同様）が図１３Cに追加される。
図１３Bに示されたレジスタ・セット1311とレジスタ・セット1313に類似したレジスタ・セット（図１３Cには示されていない）もまたメモリ1321と対応するロジックを制御するために追加される。
メモリ1321とシフトとマスク・ロジック1323の出力はマージ・モジュール1304へ送られ、メモリ201とシフト・モジュール1303の出力と一緒にされる。
２セットのメモリと対応するロジックは一緒に１つのコンピュータの命令セットを処理する；そして各セットはゲスト命令の幾つかのフィールドの変換を担い、出力はマージ・モジュール1304にてホスト命令へ組み合わされる。
２セットのメモリと対応するロジックは独立に命令セットを処理でき、各セットは独立にゲスト命令をホスト命令へ変換し、図１３Bに示された同様の機能を実現する。
従って、書き込み可能レジスタが追加されうる。
新レジスタのステータスにもとづいて、命令コンバータが協調モードか独立モードかが決定される。
【０２８４】
[00326]  加えて、図１３Aに示されるマージ・モジュール1304はまた、ブロック・アドレス・オフセット・マッパーYMAPに書き込むために、ホスト命令の変換順にもとづいてゲスト命令のマッピング関係を生成する必要がある（図８Aまたは図８Bに示される実施形態のように）。
マージ・モジュール1304はまたホスト命令の命令メモリ1203への書き込みを制御するための書き込みアドレスを生成する。
もしホスト命令が固定長なら、１つの命令は命令メモリ1203の各ペアに書き込まれ、固定長（例えば、４バイト）がL1キャッシュの書き込みアドレスに追加される。
もしホスト命令が可変長ならば、メモリ1301の命令に対応する変換ルールは命令の長さを記録し、１つの命令が命令メモリ1203の各ペアに書き込まれ、そしてメモリ1301によって出力された命令の長さが、L1キャッシュの書き込みアドレスへ追加され、次命令の開始アドレスを取得する。
さらに、１つの命令ブロックの複数のホスト命令はバッファーに異なる機会に記憶され、ホスト命令ブロック全体が命令メモリ1203へ書き込まれる。
さらに、他のモジュールも、図７Aと図７Bに示されるスキャン・コンバータのスキャン機能を担う部分のように、上記マッピング関係を生成する。
【０２８５】
[00327]  設定可能コンバータのプロセッサ・システムは、ゲスト命令セットの命令とホスト命令セットの命令とが１対１対応がある状況において稼働することができる。
しかし、双方の命令セットの命令が一対一対応を持たないとき、１つのゲスト命令は複数のホスト命令へ、もしくは複数のゲスト命令が１つのホスト命令へ変換されうる；もしくはゲスト命令とホスト命令の少なくとも１つが可変長命令であれば、ゲスト命令の分岐ターゲット・アドレスとホスト命令の分岐ターゲット・アドレスは１対１対応しないかもしれない。
このとき、命令コンバータと組み合わせたアドレス・マッピング・モジュールが命令セットの変換と命令アドレスのマッピングを実現できる。
【０２８６】
[00328]  図１４は開示された実施形態と整合する、例示的な命令コンバータとアドレス・マッピング・モジュールを含むプロセッサ・システムの回路図である。
図１４に示されるように、ゲスト命令はコンバータ1202によって変換され、プロセッサ・コア1201での実行のために命令メモリ1203へ記憶される。
つまり、メモリ1203に記憶された命令はホスト命令で、メモリ1203はホスト命令アドレスにもとづいたアドレス指定操作を実施しホスト命令を出力する。
変換プロセス中、コンバータ1202はまたゲスト命令と対応するホスト命令の間の対応関係を生成し、生成された対応関係はアドレス・マッピング・モジュール1404へ記憶される。
プロセッサ・コア1201が命令メモリ1203のホスト命令を命令の順番に沿って実行するとき、プログラム・カウンタ（PC）は’1’を毎回追加し、対応するホスト命令アドレスは’1’を追加され、命令1203のためにアドレス指定操作を実施し次のホスト命令を読み出す。
【０２８７】
[00329]  プロセッサ・コア1201が分岐命令を実行し分岐ターゲット・アドレスを生成するとき、分岐ターゲット・アドレスはゲスト命令アドレスのフォーマットによって表現されるから、分岐ターゲット・アドレスはアドレス・マッピング・モジュール1404へ送られ、対応するホスト命令アドレスに変換される。
それから、ホスト命令アドレスは命令メモリ1203へ送られ、アドレス指定操作を実施し、対応するホスト命令（つまり、分岐ターゲット・アドレス）を読み出す。 
【０２８８】
[00330]  特に、もしアドレス・マッピング・モジュール1404がゲスト命令アドレスに対応するマッピング関係を記憶するなら、それはゲスト命令に対応するホスト命令が命令メモリ1203に記憶され、ゲスト命令アドレスは直接にホスト命令アドレスに変換され、ホスト命令アドレスを出力することを示す。
もしアドレス・マッピング・モジュール1404がゲスト命令アドレスに対応するマッピング関係を記憶しないならば、それはゲスト命令がホスト命令へ変換されていないことを示す。
このとき、コンバータ1202は少なくとも１つのゲスト命令をホスト命令へ変換し、ホスト命令を命令メモリ1203へ記憶する。
対応するマッピング関係はアドレス・マッピング・モジュール1404に記憶され、ゲスト命令アドレスはホスト命令アドレスへ変換され、ホスト命令アドレスが出力される。
なお、コンバータ1202は特定のゲスト命令をホスト命令へ変換する固定コンバータでありうる。
コンバータはまた図２、図３、図４、図５、図１３Aそして図１３Bに示された設定可能命令コンバータでもありうる。
【０２８９】
[00331]  アドレス・マッピング・モジュール1404はマッピング・テーブルによって構成される。
マッピング・テーブルはゲスト命令アドレスによってアドレス指定され、そのエントリは対応するホスト命令のアドレスを記憶する。
これにもとづいて、マッピング・テーブルは以下のように実装される。
【０２９０】
[00332]  方法１： マッピング・テーブルの各エントリはゲスト命令アドレスの最小ユニット（例えばバイト）を用いてアドレス指定される。
各エントリは、エントリに対応するゲスト命令に対応するホスト命令を含むホスト命令ブロックのブロック・アドレス（つまり、命令メモリ1203のホスト命令のブロック番号）と、ホスト命令ブロック内のホスト命令のブロック・オフセット・アドレスを記憶する。
よって、ゲスト命令アドレスが変換されるとき、アドレス指定操作が、ゲスト命令アドレスにもとづいて、マッピング・テーブルのエントリのために実施され、ホスト命令アドレスと対応するエントリのブロック・オフセット・アドレスを読み出し、アドレス変換を完了する。
【０２９１】
[00333]  方法２：ゲスト命令が可変長命令であるとき、方法１で示されたマッピング・テーブルは空エントリを省くために圧縮されうる。
例えば、ゲスト命令がバイトによってアドレス指定されるとき、ゲスト命令は可変長であるから、各ゲスト命令の開始アドレスにおけるバイトのみが、ゲスト命令のブロック・オフセットと対応するホスト命令のブロック・オフセット・アドレスを記憶するためにエントリを占める；一方、ゲスト命令の非開始アドレスにおける他のバイトはエントリを占めない。
マッピング・テーブルの各行はゲスト命令ブロックに対応し、ゲスト命令ブロックのアドレスを用いてアドレス指定される。
従って、ゲスト命令アドレスが変換されるとき、アドレス指定操作はゲスト命令のブロック・アドレスにもとづいてマッピング・テーブルの行に対して実施され、行全体の内容を読み出す。
それから、ゲスト命令のブロック・オフセット・アドレスは行の全てのエントリのゲスト命令のブロック・オフセット・アドレスとマッチングされる。
照合一致したエントリに記憶されるホスト命令は選ばれて出力され、アドレス変換が完了する。
【０２９２】
[00334]  方法３：マッピング・テーブルの各行は２つの部分から構成される：第１の部分に含まれるデータビットは１つのゲスト命令に含まれる最小アドレス・ユニットの数と同じである（例えば、データビットはゲスト命令ブロックに含まれるバイト数と同じ）；第２の部分に含まれるデータビットは１つのホスト命令ブロックに含まれうるホスト命令の最大数と同じである。
第１の部分のゲスト命令の開始アドレス（つまり、開始バイト）に対応するデータは’1’にセットされ、他は’0’にセットされる。
特定のフォーマットは図８Bを参照されたい。
ゲスト命令が変換されるとき、アドレス指定操作がゲスト命令のブロック・オフセット・アドレスにもとづいてマッピング・テーブルの行に対して実施され、行全体（２つの部分を含む）の内容を読み出す。
それから、ゲスト命令のブロック・オフセット・アドレスにもとづいて、第１の部分からブロック・オフセット・アドレスのバイトに対応するデータまでの’1’の数が数えられる（つまり、各’1’毎に総数が1増える）。
さらに、第２部分の’1’の数にもとづいて、第２部分の各’1’毎に1が総数から、総数がゼロになるまで、減じられる。
このとき、第２部分のカウント位置はホスト命令のブロック・オフセット・アドレスに対応し、アドレス変換を完了する。
図８Cの構成要素は上記マッピング操作を効率良く完了できる。
【０２９３】
[00335]  さらに、ゲスト命令ブロックとホスト命令ブロックは対応関係を持つ。
例えば、ゲスト命令を記憶する１つのL2キャッシュ・ブロックは２つのL2キャッシュ・サブ・ブロックへ分割され、各サブ・ブロックはホスト命令を持つ１つのL1キャッシュ・ブロックに対応する。
ゆえにゲスト命令とホスト命令のマッピング操作はブロック・アドレスのマッピング操作と（対応関係があるから、マッピング操作を実現するのは簡単である）、ブロック・オフセット・アドレスのマッピング操作へ分解され、マッピング操作を簡潔にする。
従って、L1キャッシュ・ブロックの全てのエントリが有効なホスト命令を含むわけではない。
L1命令ブロックのL1命令は、最小ブロック・オフセット・アドレス（最小ブロック・オフセット・アドレスは一般的に’0’である）から始まって昇順に配置される。 
従って、対応するエントリ命令ブロックはまた最大オフセット・アドレスを持つ命令のオフセット・アドレスを記憶する必要があり、システムに後続の次命令のL1キャッシュ・ブロック・アドレスが次のサイクルで供給される必要があることを知らせる。
加えて、ブロック・オフセット・マッパーが、L2キャッシュ・サブ・ブロックと対応するL1キャッシュ・ブロックの間のマッピング関係にもとづいて、分岐ターゲットのブロック・オフセット・マッピングを供給するために必要とされる。
【０２９４】
[00336]  図１５は開示された実施形態と整合する、設定可能コンバータとアドレス・マッピング・モジュールを含む、もう１つの例示的なプロセッサ・システムの回路図である。    
図１５に示されるように、コンバータ1202、命令メモリ1203そしてプロセッサ・コア1201は図１２、図１４に示される対応する構成要素と同等である。
また、アドレス・マッピング・モジュールの特定の実装方法も提供されている。
ある１つの実施形態において、もし命令メモリ1203にミスがある場合、対応するゲスト命令は外部メモリへ送られ、対応するゲスト命令ブロックを得る。
得られたゲスト命令ブロックは命令コンバータ1202によって変換され、変換された命令ブロックは命令メモリ1203へ充填される。
以下の説明においては、命令メモリにおいて常にヒットがあるものと仮定する。
【０２９５】
[00337]  アドレス・マッピング・モジュールはタグ・メモリ1505（図６のアクティブ・リスト604と等価）、ブロック・オフセット・マッパー（YMAP）1504（簡便のため、ブロック・オフセット・マッパー1504は図６のオフセット・アドレス・マッピング・モジュール618とオフセット・アドレス・コンバータ622の機能を含む）、エンディング・フラグ・メモリ1506によって構成される。 
タグメモリ1505の行、ブロック・オフセット・マッパー1504、エンディング・フラグ・メモリ1506は命令メモリ1203のホスト命令ブロックに対応する。
エンディング・フラグ・メモリ1506の各行は、命令メモリ1203のホスト命令ブロックに対応する最後のホスト命令のブロック・オフセット・アドレスを記憶する。
プロセッサ・コア1201がホスト命令を読むとき、エンディング・フラグ・メモリ1506はホスト命令がホスト命令ブロックの最後の命令であるかをチェックする。
もしホスト命令が現行ホスト命令ブロックの最後の命令でない場合、次ホスト命令のブロック・オフセット・アドレスはホスト命令のオフセット・アドレスに1足したものである；そうでなければ、次ホスト命令は次ホスト命令ブロックの最初のホスト命令である。
【０２９６】
[00338]  タグメモリ1505の各行はゲスト命令ブロック・アドレス（つまり、タグ）を記憶する。
従って、タグ・マッチングを通して、ゲスト命令ブロックに対応する命令メモリ1203にホスト命令ブロックが占める位置、ブロック・オフセット・マッパー1504の同じ行における該当するマッピング関係、そしてエンディング・フラグ・メモリ1506の命令ブロックの最後のホスト命令の位置情報が見いだされる。
キャッシュ構造と同様に、メモリの異なる形式に対して、タグメモリ1505と命令メモリ1203は異なる構造を持つ。
【０２９７】
[00339]  特に、直接マッピング・ストレージ構造を例にとると、ゲスト命令のブロック・アドレスはさらにタグとインデックス番号へ分割される。
インデックス番号にもとづいて、アドレス指定操作がタグメモリ1505の行に対して実施され、対応する行の内容を読み出す。
行の内容はブロック・アドレスのタグと比較される。
もし結果が等しければ、それはマッチングが成功したことを示す；そうでなければ、マッチングは不成功である。
マッチングが不成功のとき、ゲスト命令アドレスは下位命令メモリから命令コンバータ1202を経て対応するゲスト命令ブロックを得るために用いられ、対応するゲスト命令ブロックはホスト命令ブロックへ変換される。
ホスト命令ブロックはキャッシュ交換ポリシーを用いて命令メモリ1203へ書き込まれる。
ゲスト命令のタグはタグメモリ1505の同じ行へ書き込まれる。
命令コンバータ1202によって生成されたブロック・オフセット・マッピング関係はブロック・オフセット・マッパー1504へ記憶され、命令コンバータ1202によって生成された命令ブロックの最後の命令のブロック・オフセットはエンディング・フラグ・メモリ1506のメモリの同じ行に記憶される。
【０２９８】
[00340]  もちろん、タグメモリ1505と命令メモリ1203は他の適切な組織構造を持ちうる（例えば、セット・アソシアティブ構造もしくはフル・アソシアティブ構造）。
特定のマッチング方法は適切な組織構造におけるマッチング方法と同じであり、ここでは繰り返さない。
なお、記述の簡便のため、直接マッピング構造が例示目的のために用いられ、タグ・マッチングは成功と仮定される。
【０２９９】
[00341]  プロセッサ・コア1201はバス1508を経て、分岐もしくはジャンプが必要かの情報にもとづいて、異なる命令アドレスを供給する。     
命令アドレスがバス1508を経て出力され、命令メモリ1203を制御し、プロセッサ・コア1201での実行のために命令を読み出すとき、バス1508のブロック・アドレスもまたエンディング・フラグ・メモリ1506へ送られ、アドレス指定操作を実施し、行のエンディング・アドレスを読み出す。
エンディング・アドレスはバス1508のホスト命令のブロック・オフセット・アドレスとマッチングされ、ホスト命令がホスト命令ブロックの最後の命令であるかを検査する。
【０３００】
[00342]  もしホスト命令がホスト命令ブロックの最後の命令でなければ、エンディング・フラグ・メモリによって出力された信号1507は、プロセッサ・コア1201の命令ブロック・アドレスが次クロック・サイクルで変わらないよう制御し、そしてブロック・オフセットは’1’追加されバス1508に置かれる。 
もしホスト命令がホスト命令ブロックの最後の命令であるなら、エンディング・フラグ・メモリによって出力された信号1507はプロセッサ・コア1201を制御し、次クロック・サイクルの次命令ブロックのゲスト命令ブロック・アドレス（現行命令ブロック・アドレスに’1’を加えて得られる）を出力し、そして’0’がホスト命令のブロック・オフセット・アドレスとされる。
命令アドレスの組み合わせはバス1508に置かれる。
このとき、信号1507はまたバス1508の命令ブロック・アドレスをタグメモリ1505へ送り、マッチング操作を実施するよう制御する。
もしマッチングが成功であれば、バス1508のアドレスは次命令の正しいアドレスである。
実行された命令が非分岐命令であるとき、分岐決定信号1509はセレクタ1510を制御し、バス1508のブロック・オフセット・アドレスを選び、命令メモリ1203のためにアドレス指定操作を実施し、プロセッサ・コア1201における実行のために次サイクルのホスト命令を読み出す。
命令メモリ1203のために用いられるブロック・アドレスは常にバス1508からである。
【０３０１】
[00343]  プロセッサ・コア1201が命令メモリ1203からの命令をデコードし、命令が分岐命令であることを見いだしたとき、分岐決定は命令に沿って実施される。
もし分岐決定の結果が’分岐が取られない’であれば、次サイクルで生成されたアドレスは上記と同じである。
分岐決定信号1509はセレクタ1510を制御しバス1508のアドレスを選ぶ。
もし分岐決定の結果が’分岐が取られる’であれば、分岐命令のゲスト命令アドレスと分岐命令に含まれる分岐オフセットは一緒に加算され、分岐ターゲットのゲスト命令アドレスを得る。
得られた分岐ターゲットのゲスト命令アドレスはバス1508を経て次サイクルにおいて送り出される。
記憶されるアドレス数を減らすために、実際には、プロセッサ・コアは分岐命令（もしくは他の命令）のホスト命令アドレスを記録するのみである。
図８Cに示されるマッピング構成要素は、図８Bに示されるマッピング関係を用いた逆演算を実施するために用いられる。
つまり、ホスト命令アドレスがデコーダ805へ送られ、ホスト命令マッピング関係がマスク・ユニット807へインプットとして送られ、ゲスト命令のマッピングがアレイ803を制御するのに用いられ、よってデバイスの出力はゲスト命令アドレスである。
命令が変換されるとき、ゲスト分岐命令のブロック・オフセットと分岐命令の分岐オフセットは一緒に加算され合計を得る。
合計はホスト分岐命令に分岐オフセットとして記録される。
従って、プロセッサ・コア1201が分岐命令を実行するとき、正しいゲスト分岐ターゲット・アドレスが、分岐命令のホスト命令ブロック・オフセットがゲスト命令ブロック・オフセットへマップされる操作を経ずに、命令ブロック・アドレス（ブロック・オフセットは’0’）と分岐命令に記録された正しい分岐オフセットを加算することによって得られる。
【０３０２】
[00344]  ゲスト命令の分岐ターゲット・アドレスのブロック・アドレスはタグメモリ1505へバス1508を経て送られ、マッチング操作を実施し、ブロック・アドレスはまたブロック・オフセット・マッパー1504へ送られ、行のマッピング関係を読み出す。
それから、バス1508のゲスト命令ブロック・オフセットはホスト命令ブロック・オフセット1512へ、行のマッピング関係にもとづいて、マップされる。 
分岐決定信号1509はセレクタ1510を制御しホスト命令ブロック・オフセット1512をブロック・オフセットとして選ぶ。
ホスト命令ブロック・オフセット1512は命令メモリ1203へ送られる。
バス1508のブロック・アドレスはまた命令メモリ1203へ送られる。
もしタグメモリ1505のマッチングが成功であれば、分岐ターゲット命令はプロセッサ・コアでの実行のためにアドレスにもとづいて取得される。
【０３０３】
[00345]  ある実施形態において、バス1508の次命令のブロック・アドレス（ブロック・アドレスは命令アドレスのタグとインデックスを含む）は常にゲスト命令アドレスである。
ブロック・アドレスのインデックス部分は全てのメモリ、例えばタグメモリ1505と命令メモリ1203、による行アドレス指定に用いられる。
バス1508の次命令のブロック・オフセット・アドレスは命令タイプにもとづいてゲスト命令アドレスもしくはホスト命令アドレスである。
もし現行命令のタイプが非分岐命令もしくは分岐を取らない分岐命令であるなら、そして命令がホスト命令ブロックの最後の命令でないならば、次命令のブロック・オフセット・アドレスはホスト命令フォーマット（現行命令アドレスは’1’追加され、現行ホスト命令の次ホスト命令へポイントしている）である。
もし現行命令のタイプが非分岐命令もしくは分岐を取らない分岐命令であり、そして命令がホスト命令ブロックの最後の命令であるなら、次命令のブロック・オフセット・アドレス’0’はゲスト命令フォーマットもしくはホスト命令フォーマットである。
[00346]  もし現行命令のタイプが分岐を取る分岐命令であれば、次命令の分岐オフセット・アドレスがゲスト命令フォーマットであり、そしてブロック・オフセット・アドレスはホスト命令のブロック・オフセット・アドレスへブロック・オフセット・マッパー1504によってマップされる必要がある。
それから、得られたホスト命令のブロック・オフセット・アドレスは命令メモリ1203から命令を読み出すのに用いられる。
もしゲスト命令のインデックス部分がホスト命令アドレスのブロック・アドレスとして用いられるならば、アドレス指定操作がホスト命令アドレスを用いて命令メモリ1203にていつでも実施される。
【０３０４】
[00347]  命令メモリ1203の構造と命令アドレス・マッピング・モジュールは多方向構造を持ち、同様のホスト命令のブロック・アドレスはウェイ数とゲスト命令のインデクス部分によって構成される。 
つまり、仮想マシンのアドレス・マッピング・モジュールは、ゲスト命令コンパイラによって生成されたゲスト命令アドレスをホスト命令アドレスへ直接マップし、プロセッサ・コアによる実行のためのホスト命令を記憶する命令メモリへアクセスする。
もしくは、ホスト命令アドレスのブロック・アドレスはゲスト命令アドレス（タグ部分とインデックス部分を含む）に等しいブロック・アドレスとして用いられる。
【０３０５】
[00348]  仮想マシンは、既存のソフトウェア仮想マシンを使ってゲスト命令アドレスをホスト命令アドレスへマップするときの低効率と、膨大なアドレス・マッピング・テーブルを記憶するためのストレージ消費を避けることができる。
それはまた同じ命令を繰り返し変換することによる電力消費を避けることができる（既存のハードウェア仮想マシンは、ゲスト命令を記憶する命令メモリのためのアドレス指定操作を実施するためにゲスト命令アドレスを使う必要があり、それからゲスト命令は読み出されて、プロセッサ・コアによる実行のために、コンバータによってホスト命令へ変換される）。   
なお、仮想マシンの技術的特徴は、ゲスト命令が最初にコンバータによって変換され、それから命令キャッシュに記憶されるという点である。
従って、命令キャッシュに記憶された命令はホスト命令であり、ホスト命令は直接に命令変換無しに実行される。
【０３０６】
[00349]  分岐ターゲット・テーブルが追加され、分岐ターゲット・テーブルが分岐ターゲット命令のホスト命令アドレスを記録するのに用いられうる、そして同じ分岐命令を繰り返し実行し分岐が取られるとき、分岐ターゲット命令のゲスト命令アドレスをホスト命令アドレスに変換する必要がない。
図１６は開示された実施形態と整合する例示的な、分岐ターゲット・テーブルを含むプロセッサ・システムの回路図を示す。
図１６に示されるように、設定可能コンバータ1202、命令メモリ1203、プロセッサ・コア1201、タグメモリ1505、ブロック・オフセット・マッパー1504、エンディング・フラグ・メモリ1506は図１５に示される該当する構成要素と同様である。
違いは分岐ターゲット・バッファ（BTB）1607が追加され、そしてセレクタ1608の接続は図１５に示されたセレクタ1510の接続と異なる点である。
なお、分岐ターゲット・バッファ1607はホスト命令アドレスの形式を用いて記録された分岐ターゲット履歴情報を記憶する。
つまり、分岐ターゲット・テーブルは分岐命令のホスト命令アドレス、分岐ターゲットのホスト命令アドレス、そして前に分岐命令を実行したときに分岐が取られたかに関する予測情報を記憶する。
分岐ターゲット・バッファ1607の行は他のメモリの行に対応しないかもしれない。
分岐ターゲット・バッファ1607は分岐予測信号1511を出力し、セレクタ1608を制御し、バス1508もしくは分岐ターゲット・バッファ1607からの命令アドレスを選ぶ。
【０３０７】
[00350]  このとき、プロセッサ・コア1201がバス1508を経てホスト命令アドレスを命令メモリ1203へ出力しアドレス指定操作を行なうとき、プロセッサ・コアはまたホスト命令アドレスを分岐ターゲット・バッファ1607へ送り、分岐ターゲット・バッファ1607に記憶された全ての分岐命令のホスト命令とマッチングを行なう。
分岐ターゲットのホスト命令アドレスと、マッチングが成功したホスト命令に含まれる予測情報が出力される。
現行命令が非分岐命令である、もしくは現行命令が分岐を取らない分岐命令であるとき、次のサイクルにおいて、分岐予測信号1511はセレクタ1608を制御し、バス1508の命令アドレスを選び、命令メモリ1203へアクセスする。
オペレーションは図１５に示されたオペレーションと同様で、ここでは繰り返されない。
現行命令が分岐命令で分岐予測が分岐が取られることを表しているとき、分岐予測選択信号1511はセレクタ1608を制御し、分岐ターゲット・バッファ1607によって出力されたホスト命令分岐ターゲット・アドレスを選び、命令メモリ1203へアクセスする。
【０３０８】
[00351]  現行命令が分岐命令であり、しかし現行命令が分岐ターゲット・バッファ1607にてマッチングされないとき、分岐ターゲット・バッファ1607に変換規則に沿ってエントリが割り当てられ、分岐命令のホスト命令アドレスを記憶する。
もし分岐予測が’分岐が取られる’ことを表すなら（図１５に示された実施形態と同様）、プロセッサ・コア1201はゲスト命令アドレスを生成し、生成されたゲスト命令アドレスをバス1508を経て送り出す。
ゲスト命令アドレスをマッチングすることによって得られたタグメモリ1505の命令ブロック・アドレスとブロック・オフセット・マッパー1504のマッチング操作によって得られたホスト命令のブロック・オフセット1512は共に、ホスト命令分岐ターゲット・アドレスとして用いられ、分岐予測値が分岐ターゲット・バッファ1607の直近に割り当てられたエントリの該当するフィールドに記憶される。
ホスト命令分岐ターゲット・アドレスは分岐ターゲット・バッファ1607によってバイパスされ、セレクタ1608を経て命令メモリ1203にアクセスする。
【０３０９】
[00352]  もし分岐予測が’分岐が取られない’ことを表すなら、分岐ターゲット・バッファ1607の新しく加えられたエントリは無効としてセットされ、分岐予測選択信号1511はセレクタ1608を制御し、バス1508の命令アドレスを選び（例えば、分岐命令の次の後続ホスト命令アドレス）、命令メモリ1203にアクセスする。
このとき、バス1508の命令アドレスは、図１５に示された実施形態において同じ状況下で生成された命令アドレスと同じであり、ここでは繰り返されない。
分岐命令が実行され、分岐予測が誤りであることが決定したとき、プロセッサ・コア1201は誤った予測に沿って実行された命令の中間結果を削除する。
それから、プロセッサ・コア1201は正しい分岐を実行し、分岐ターゲット・バッファ1607に記憶された分岐予測を更新する。
【０３１０】
[00353]  図１７は開示された実施形態と整合するもう１つの例示的な分岐ターゲット・テーブルとトラッカーを持つプロセッサ・システムの回路図を示す。
図１７に示されるように。コンバータ1202、命令メモリ1203、プロセッサ・コア1721、タグメモリ1505、ブロック・オフセット・マッパー1504、エンディング・フラッグ・メモリ1506、分岐ターゲット・バッファ1607は図１６の対応する構成部分と同等である。
違いは図１７に示されたプロセッサ・システムはまた次ブロック・アドレス・メモリ1709、セレクタ1711、ORロジック1707とトラッカーを持つ点である。
ホスト命令アドレスはトラッカーを経て生成され、プロセッサ・コア1701はゲスト命令アドレスを出力する必要があるだけである。
【０３１１】
[00354]  次ブロック・アドレス・メモリ1709の行、タグメモリ1505、ブロック・オフセット・マッパー1504、そしてエンディング・フラッグ・メモリ1506は一対一対応を持つ。
図１８Aに示されるように、次ブロック・アドレス・メモリ1709の各行は２つの部分を含む：最初の部分1801は行に対応するホスト命令ブロックの前のホスト命令ブロックのXアドレスを記憶する；第２部分1802は行に対応するホスト命令ブロックの次ホスト命令ブロックのXアドレスを記憶する。
よって、現行ホスト命令ブロックのブロック・アドレス（例えば、トラッカーによって出力されたXアドレス）を用いることによって、次ブロック・アドレス・メモリ1709のアドレス指定操作を実施し、前ホスト命令ブロックの該当するXアドレスと次ホスト命令ブロックの該当するXアドレスが読み出される。
セレクタ1711は、次ブロック・アドレス・メモリ1709によって出力された次ホスト命令ブロックのXアドレスとYアドレス’0’によって構成された次ホスト命令ブロックの最初のホスト命令のアドレスと、分岐が取られたかを示すTAKEN信号1713にもとづいて分岐ターゲット・バッファ1607によって出力された分岐ターゲット・ホスト命令アドレスを選び、選ばれたアドレスをセレクタ1705へ送る。
現行ホスト命令がホスト命令ブロックの最後の命令であるとき、もしくは分岐が取られるとき、ORロジック1707はセレクタ1705を制御しセレクタ1711からインプットを選ぶ。
【０３１２】
[00355]  トラッカーはレジスタ1701、インクリメンタ1703、セレクタ1705から構成される。
レジスタ1701は、ブロック・アドレス（Xアドレス）とホスト命令のブロック・オフセット（Yアドレス）によって構成された現行ホスト命令アドレス1723を記憶し出力する。
現行ホスト命令アドレス1723は命令メモリ1203のアドレス指定操作を実施するために用いられ、命令メモリ1203の１つの行のホスト命令を読み出す。
ホスト命令はそれからプロセッサ・コア1721へデコードのために送られる。
同時に、次ブロック・アドレス・メモリ1709とエンディング・フラッグ・メモリ1506の該当する行はアクセスされ、分岐ターゲット・バッファ（BTB）1607へ送られ、マッチング操作を実施する。
現行ホスト命令アドレス1723のXアドレスはエンディング・フラッグ・メモリ1506におけるアドレス指定操作を実施するのに用いられ、該当する行の内容を読み出す。
内容は現行ホスト命令アドレス1723のYアドレスとマッチングされ、命令がホスト命令ブロックの最後の命令か否かを検証する。
もし命令がホスト命令ブロックの最後の命令でなく、プロセッサ・コア1721のデコード結果は命令が分岐命令でないことを表すなら、ORロジック1707はセレクタ1705を制御し、レジスタ1701によって出力されたXアドレスとインクリメンタ1703によって出力された’1’を追加されたYアドレスを選ぶ。
Xアドレスと’1’追加されたYアドレスはレジスタ1701に次クロック・サイクルにおける現行ホスト命令アドレスとして記憶される。
【０３１３】
[00356]  もし命令が最後のホスト命令もしくは分岐命令であるならば、セレクタ1705は、ORロジック1707の制御の下、セレクタ1711の出力を選び、出力を次クロック・サイクルの現行ホスト命令アドレスとしてレジスタ1701へ記憶する。
特に、もしTAKEN信号1713が分岐が取られないことを示すなら、セレクタ1711は次ブロック・アドレス・メモリ1709の次ホスト命令ブロックの最初のホスト命令のアドレス（現行ホスト命令アドレス1723のアドレス指定において提供される）を選ぶ；そして最初のホスト命令のアドレスはセレクタ1705によって選ばれ、レジスタ1701へ記憶される。
もしTAKEN信号1713が分岐が取られることを示すなら、セレクタ1711は、分岐ターゲット・バッファ1607の現行ホスト命令アドレス1723のマッチング操作によって得られた分岐ターゲット・ホスト命令アドレスを選ぶ；そして分岐ターゲット
ホスト命令アドレスはそれからセレクタ1705によって選ばれ、レジスタ1701へ記憶される。
プロセッサ・コア1721によって生成されたTAKEN信号1713は、分岐ターゲット・バッファ1607に記憶された分岐予測値と交換され、セレクタ1711とセレクタ1705を制御する。
この方法は、分岐予測が正しいか否かを検証し、そして予測が誤っているとき分岐予測を修正する、メカニズムを必要とする。
【０３１４】
[00357]  ある実施形態において、命令メモリ1203を制御するホスト命令アドレスはトラッカーによって提供される。
プロセッサ・コア1721は、分岐決定が取られ現行ホスト命令アドレス1723が分岐ターゲット・バッファ1607の内容とマッチしないとき、もしくはエンディング命令が決定され、次ブロック・アドレス・メモリ1709をアドレス指定するとき無効エントリが見つかった時に限って、ゲスト命令アドレス1708を次サイクルのアドレスとして供給する必要がある。
【０３１５】
[00358]  特に、現行ホスト命令アドレスが分岐ターゲット・バッファ1607の内容にマッチングしないとき、プロセッサ・コア1721はゲスト命令の分岐ターゲット・アドレス1708を図１６に示された方法で計算する。
ゲスト命令の分岐ターゲット・アドレス1708はタグメモリ1505へ送られ、マッチング操作を行い、ゲスト命令の分岐ターゲット・アドレス1708もまたブロック・オフセット・マッパー1504へ送られ、マッピング操作を実施する。
マッチングとマッピング操作によって得られたホスト命令の分岐ターゲット・アドレスは、図１６に示された方法を用いて分岐ターゲット・バッファ1607のエントリへ記憶され、そしてホスト命令の分岐ターゲット・アドレスは現行ホスト命令アドレス1723と同様にレジスタ1701に記憶される。
次ブロック・アドレス・メモリ1709のアドレス指定操作を実施するときにもし無効エントリが見いだされた場合、プロセッサ・コア1721は図１６に示された方法を用いてゲスト命令の次ブロック・アドレス1708を計算する。
ゲスト命令の次ブロック・アドレス1708はタグメモリ1505へ送られ、マッチング操作を実施する。
マッチング操作によって得られたホスト命令の次ブロック・アドレスは無効エントリのフィールド1802へ記憶される。
現行命令ブロックのブロック・アドレスは、次ブロック・アドレス・メモリ1709の中のマッチングによって得られたホスト命令の次ブロック・アドレスによってポイントされている行に対応する行のフィールド1801に記憶される。
【０３１６】
[00359]  様々な連続したホスト命令ブロックが次ブロック・アドレス・メモリ1709に記憶されている情報を通してリンクされるから、アドレス指定操作が現行ホスト命令ブロックのXアドレスにもとづいて次ブロック・アドレス・メモリ1709のために実施され、次ホスト命令ブロックのフィールド1802のXアドレスを読み出す。
もしホスト命令ブロックが命令メモリ1203にて交換されるなら、アドレス指定操作がホスト命令ブロックのXアドレスにもとづいて次ブロック・アドレス・メモリ1709のために実施され、次ブロック・アドレス・メモリ1709に記憶された前ホスト命令ブロックのフィールド1801のXアドレスを読み出す。
それから、アドレス指定操作がフィールド1801のXアドレスにもとづいて次ブロック・アドレス・メモリ1709のために実施され、対応する行を見いだす。
行に記憶された次ホスト命令ブロック（交換されたホスト命令ブロック）のフィールド1802のXアドレスは無効にセットされ、よって交換後のアドレス関係を表す。
もし命令メモリが連想モードを用いて組織されているなら、１つの命令ブロックの次命令ブロックの行アドレスは現行命令ブロックの行アドレスに’1’を加えたものである。
フィールド1801とフィールド1802はウェイ数を記録しこの機能を実現できる。
【０３１７】
[00360]   加えて、上記方法は複数レベルの命令メモリを含むプロセッサ・システムに対しても応用できる。
図１９は開示された実施形態と整合する、２レベルの命令メモリを含むプロセッサ・システムの回路図を示す。
図１９に示されるように、コンバータ1202、命令メモリ1203、プロセッサ・コア1201、ブロック・オフセット・マッパー1504、エンディング・フラッグ・メモリ1506、分岐ターゲット・バッファ1607、次ブロック・アドレス・メモリ、セレクタ1711、ORロジック1707、トラッカーは図１６の対応する構成部分と同じである。
違いは、命令メモリ1203、ブロック・オフセット・マッパー1504、次ブロック・アドレス・メモリ1709、エンディング・フラッグ・メモリ1506、分岐ターゲット・バッファ1607が一緒にL1命令メモリを構成し、一方、命令メモリ1903、タグメモリ1905、そしてブロック・アドレス・マッピング・モジュール（XMAP）1904が一緒にL2命令メモリを構成する点である。
なお、命令メモリ1203（L1命令キャッシュ1203とも呼ばれ、命令メモリ1903から区別される）はホスト命令を記憶し、一方、命令メモリ1903（L2命令キャッシュ1903とも呼ばれる）はゲスト命令を記憶する。
命令メモリ1903に記憶されているゲスト命令がプロセッサ・コアによって実行される前に、ゲスト命令は対応するホスト命令へコンバータ1202によって変換され、それから変換されたホスト命令はL1命令キャッシュにプロセッサ・コア1201による実行のために記憶される。
【０３１８】
[00361]  ある１つの実施形態において、１つのゲスト命令ブロックは複数のホスト命令ブロックに対応する。
命令メモリ1903は、L1命令キャッシュに記憶される全てのホスト命令に対応するゲスト命令を含むから、ただ１つのタグメモリ1905がメモリの２つのレベルに対して用いられる。
【０３１９】
[00362]  タグメモリ1905の行と命令メモリ1903のゲスト命令ブロックは一対一の対応関係がある。
タグメモリ1905の各行は対応するゲスト命令ブロックのタグアドレスを記憶する。
さらに、ブロック・アドレス・マッピング・モジュール1904の行とタグメモリ1905の行もまた一対一の対応関係を持つ。
タグメモリ1905の各行は、L1命令キャッシュ1203のゲスト命令ブロックに対応する１つのホスト命令ブロックもしくは複数のホスト命令ブロックの1Xアドレスと有効信号（ゲスト命令ブロックに対応する１つのホスト命令ブロックがL1命令キャッシュ1203に記憶されていないとき、対応する1Xアドレスの有効信号は無効である）を記憶する。
【０３２０】
[00363]  図１８Cは命令メモリの２つのレベルを含む仮想マシンのゲスト命令アドレスの例示的なフォーマットの回路図を示す。
ゲスト命令アドレスはブロック・アドレス、サブブロック番号1813、ブロック・オフセット・アドレス1814から構成され、命令メモリ1903のゲスト命令ブロックに対応するブロック・アドレスがさらにタグ1811とインデックス番号1812に分割される。
タグメモリ1905の行に記憶されたタグ情報は、インデックス番号1812にもとづいてタグメモリ1905の行に対してアドレス指定操作を実施することで読み出される。
それから、タグ情報はブロック・アドレスのタグ1811と比較され、ゲスト命令ブロック・アドレスのマッチングが成功したかを決定する。
インデックス番号1812は、ブロック・アドレス・マッピング・モジュール1904のメモリに対するアドレス指定操作を実施するために用いられ、メモリの１つの行を選び、そしてサブブロック番号1813はメモリの１つのコラムを選ぶ。
【０３２１】
[00364]  図２０は開示された実施形態と整合する、例示的なブロック・アドレス・マッピング・モジュールの回路図を示す。
図２０に示されるように、ブロック・アドレス・マッピング・モジュール1904は書き込みモジュール2001、出力セレクタ2007そしてメモリを含む。
各ゲスト命令ブロックは２つのサブブロックに分割される。
各サブブロックのゲスト命令は命令コンバータ1202によってホスト命令へ変換され、変換されたホスト命令はL1命令キャッシュのL1命令ブロックに記憶される。
従って、ブロック・アドレス・マッピング・モジュール1904のメモリの各行はL2メモリキャッシュ1903の１つのL2ゲスト命令ブロックに対応する。
メモリは２つのコラム2003と2005に分割され、各ゲスト命令ブロックの２つのサブブロックに対応し、サブブロック番号1813によって選ばれる。
メモリの各エントリは１つのサブブロックに対応し、エントリはゲスト命令サブブロックに対応するホスト命令ブロックのL1命令ブロック・アドレス（1Xアドレス）を記憶する。
従って、ブロック・アドレス・マッピング・モジュール1904はゲスト命令ブロック・アドレスを対応するホスト命令ブロック・アドレスにマップし、ゲスト命令サブブロックを対応するホスト命令ブロックへ関連付ける。
加えて、１つのゲスト命令サブブロックの対応するホスト命令ブロックはL1命令キャッシュの任意の１つのL1キャッシュ・ブロックに置かれうる。
従って、L1命令キャッシュはフルアソシアティブ・キャッシュであり得る。
【０３２２】
[00365]  特に、ブロック・アドレス・マッピング・モジュール1904のメモリが書き込まれるとき、ゲスト命令アドレスのサブブロック番号1813は書き込みモジュール2001を制御してメモリのコラム2003もしくはコラム2005を選び、そしてインデックス番号1812はメモリの１行を、対応するホスト命令の1Xアドレス（つまり、図２０に示された1Xアドレス）を書き込むために、選ぶ。
ブロック・アドレス・マッピング・モジュール1904のメモリの情報が読み出されるとき、インデックス番号1812はメモリの１行を選び内容を読み出し、ゲスト命令アドレスのサブブロック1813はセレクタ2007を制御しメモリのコラム2003もしくは2005のデータを選び内容を出力する。
【０３２３】
[00366]  図１９に戻って、L1命令メモリのための動作原理と手順は図１７に示された実施形態と同様である。
唯一の違いは、現行ホスト命令アドレス1723がターゲットメモリ1607の内容とマッチングされヒットしない、もしくは次ブロック・アドレス・メモリ1709で実施されるアドレス指定操作が無効エントリを見つけ、そして分岐決定とエンディング命令決定が上記ミスもしくは無効命令アドレスを選ぶとき、その際にシステムが異なるプロセスを実装する点だけである。
図１７に示される実施形態同様に、プロセッサ・コア1721によって提供されたゲスト命令アドレス1708は次サイクルにおいてアドレスとして用いられる。
違いは、ゲスト命令アドレスが直接に同レベルのタグメモリ1505によって変換されない点である。
ゲスト命令アドレスのインデックス番号1812を使ってエントリがタグメモリ1905から読み出される一方で、エントリはゲスト命令アドレスにおいてタグ1811とマッチングされる。
それから、ゲスト命令アドレスのインデックス番号1812とサブブロック番号1813はブロック・アドレス・マッピング・モジュール1904のためにアドレス指定操作を実施するために用いられる。
【０３２４】
[00367]  もしタグ・マッチングがヒットし、ブロック・アドレス・マッピング・モジュール1904から読み出された1Xアドレスが有効なら、それは必要とされるホスト命令がL1命令キャッシュ1203に記憶されていることを示す。
このとき、バス1906を経た1XアドレスはL1命令メモリへ送り返され次ブロックメモリ1709の無効エントリを充填する；もしくは1Xアドレスを用いてブロック・オフセット・マッパー1504のためにアドレス指定操作が実施され、バス1708のゲスト命令のブロック・オフセット・アドレスがホスト命令のブロック・オフセット・アドレスへマップされる。  
1Xアドレスとホスト命令のブロック・オフセット・アドレスは共にホスト命令の分岐ターゲット・アドレス（1Yアドレス）を構成し、そして1Yアドレスは分岐ターゲット・バッファ1607のエントリ（つまり、マッチング操作においてミスがある時のエントリ）に記憶される。
後続のオペレーションは図１７に示されたオペレーションと同じである。
【０３２５】
[00368]  もしタグマッチングがヒットし、ブロック・アドレス・マッピング・モジュール1904から読み出された1Xアドレスが無効なら、それは必要とされるホスト命令がL1命令キャッシュ1203に記憶されていないことを示す。
このとき、バス1708のゲスト命令アドレスを用いてアドレス指定操作がL2命令キャッシュ1903に対して実施される。
該当するゲスト命令サブブロックが命令コンバータ1202へ送られ、該当するゲスト命令サブブロックがホスト命令ブロックへ変換される。
ホスト命令ブロックはL1命令キャッシュ1203のキャッシュ交換ロジックによって特定されたL1キャッシュ・ブロックへ記憶される。
L1キャッシュ・ブロックの1Xアドレスはブロック・アドレス・マッピング・モジュール1904のゲスト命令によってポイントされたエントリ（読み出された以前無効だったエントリ）に記憶され、そして1Xアドレスは有効にセットされる。
命令変換プロセスにおいて生成されたブロック・オフセット・マッピング関係とエンディング・フラグもまたブロック・オフセット・マッパー1504とエンディング・フラグ・メモリ1506の1Xアドレスによってポイントされた行に書き込まれる。
バス1906を経た1XアドレスはL1命令メモリへ送り返され、1Xアドレスは次ブロック・アドレス・メモリ1709の無効エントリに記憶される；もしくは1Xアドレスとマッチングによって生成されたホスト命令のブロック・オフセット・アドレスは共に分岐ターゲット・バッファ1607のエントリ（つまり、マッチング操作においてミスがあるときのエントリ）に記憶される。
後続のオペレーションは図１７に示されたオペレーションと同じである。
【０３２６】
[00369]  もしタグマッチングにおいてミスがあるなら、それは必要とされる命令がL2命令キャッシュ1903に記憶されていないことを示す。
このとき、バス1708のゲスト命令アドレスは下位メモリへ送られ、ゲスト命令ブロックが下位メモリから取り出され、L2命令キャッシュ1903のキャッシュ交換ロジックによって特定されたL2キャッシュ・ブロックに充填される。
同時に、バス1708のゲスト命令のタグ1811はタグメモリ1905のL2キャッシュ・ブロックに対応するエントリに記憶され、そしてブロック・アドレス・マッピング・モジュール1904のL2キャッシュ・ブロックに対応する２つのエントリは無効にセットされる。
それから、後続のオペレーションは、タグ・マッチングがヒットし、アドレス指定操作によって得られたブロック・アドレス・マッピング・モジュールの1Xアドレスが無効である場合のオペレーションと同様である。
【０３２７】
[00370]  ゲスト命令が固定長命令であるとき、ゲスト命令ブロックもしくはサブブロックの境界とゲスト命令の開始点は重なる。
従って、ゲスト命令ブロック（もしくはサブブロック）が順次実行もしくは分岐挙動に入るかによって、完全なゲスト命令ブロック（もしくはサブブロック）がゲスト命令ブロック（もしくはサブブロック）の境界から始まる対応するホスト命令ブロックへ変換されうる。
それから、変換されたホスト命令ブロックはホスト命令メモリに記憶される。
もしゲスト命令セットが可変長命令セットなら、１つのゲスト命令ブロック（もしくはサブブロック）の最初のゲスト命令の開始アドレスはゲスト命令ブロック（もしくはサブブロック）の境界と重ならない。
この場合、分岐がゲスト命令ブロックに入るとき、ゲスト命令ブロックの分岐ターゲット命令から始まってゲスト命令ブロックの終わりまでの部分だけが変換され、プロセッサ・コアにおける実行のためにホスト命令キャッシュ・ブロックに記憶される。
一方、次回ゲスト命令ブロックが順次実行もしくは分岐挙動にはいるとき開始点がこれらの命令の上に降りるとき、分岐ターゲット命令の前の命令が変換を待つ必要がある。
それから、変換されたホスト命令はホスト命令ブロックに追加される。
L1命令キャッシュ1203のホスト命令のストレージ・フォーマットはこの状況に適応するように修正され、全てのゲスト命令がゲスト命令の開始アドレスを含むゲスト命令ブロックに属するように定義される。
【０３２８】
[00371]  図21はゲスト命令とブロック境界が整列しないときの、ホスト命令を記憶する例示的な命令メモリを表す。
図２１に示されるように、ゲスト命令ブロック2101は命令メモリ1903のゲスト命令ブロック（もしくはサブブロック）の行であり、そしてホスト命令ブロック2102はL1命令キャッシュ1203においてゲスト命令ブロック2101に対応するホスト命令ブロックの行である。 
最初の分岐のターゲット命令がゲスト命令2105であると仮定して、変換はターゲット命令2105から始まり、ゲスト命令ブロックの変換が完了するまで続く。
変換されたホスト命令はホスト命令キャッシュ・ブロックに記憶される。
従って、ホスト命令はまだアドレス昇順に記憶されるが、しかし変換によって得られたホスト命令の最上アドレスとホスト命令ブロック2102のアドレスの最上ビット（MBS）（つまり、図２１のホスト命令ブロック2102の最右）は整列される。
従って、ゲスト命令2105に対応するホスト命令2106は図２１に示された位置に記憶される。
ゲスト命令ブロック2101のゲスト命令2105から始まる全てのゲスト命令に対応するホスト命令は、全て命令アドレスに沿って図２１に示されたホスト命令ブロック2102の影の部分に記憶される。
【０３２９】
[00372]  さらに１つのポインタが命令メモリ1903と命令メモリ1203の各行に追加される。  
ポインタは、ゲスト命令ブロックにおいて変換される最初のゲスト命令（例えばポインタ2103は図２１のホスト命令2105へポイントする）、そしてホスト命令ブロックに記憶される最初のホスト命令（例えばポインタ2104は図２１のホスト命令2106へポイントする）へポイントするのに用いられる。
従って、ゲスト命令ブロックへ順次実行もしくは分岐挙動において再び入るとき、ターゲット命令が変換されるか否かはゲスト命令のブロック・オフセット・アドレスとポインタ2103を比べることによって決定される。
さらに、もし新しいターゲット命令が変換されないと決定された場合、新しいターゲット命令から始まってゲスト命令ブロックのポインタ2103によってポイントされたゲスト命令までの、全てのゲスト命令が変換される。
それから、変換によって得られた全てのホスト命令の最高位アドレスが、ホスト命令ブロック2102のポインタ2104によってポイントされたアドレスの前アドレスと整列される。
ホスト命令はアドレスの昇順に沿って記憶される。
同時にポインタ2103とポインタ2104の値は更新され、ポインタ2103とポインタ2104はそれぞれ、新ターゲット命令がゲスト命令ブロック2101に占める位置と、新ターゲット命令に対応するホスト命令がホスト命令ブロック2102に占める位置とにポイントする。
ブロック・オフセット・マッパー1504のホスト命令マッピング関係はまた最上位ビット・アラインメント手法に沿って記憶され、それはホスト命令キャッシュ・ブロックのストレージ手法と同じである。
【０３３０】
[00373]  図２１の実施形態において示された記憶方法を用いるとき、各ホスト命令ブロックの最初の命令はホスト命令ブロックの開始アドレスにない（つまり、Yアドレスは’0’）かもしれない。
従って、処理システムの次ブロック・アドレス・メモリは変更される必要がある。
図１８Bは次ブロック・アドレス・メモリのもう１つの例示的なフォーマットの回路図を示す。
図１８Bに示されるように、第１パート1801と第２パート1802の他に、次ブロック・アドレス・メモリの各行はまた、その行に対応するホスト命令ブロックの次ホスト命令ブロックの最初のホスト命令の1Yアドレスを記憶するための第３パート1803を含む。  
よって、第２パート1802と第３パート1803は共に次ホスト命令ブロックの最初のホスト命令のアドレスを形成する。
従って、ゲスト命令の境界が整列していないためにホスト命令がホスト命令ブロックの最下位ビット（LSB）から始まる位置に記憶されないとき、次ホスト命令ブロックの最初のホスト命令は、現行ホスト命令ブロックのブロック・アドレス（つまり、1Xアドレス）にもとづいた次ブロック・アドレス・メモリのためのアドレス指定操作を実施することで見いだされ、該当するアドレスを読み出す。
図２１と図１８Bに示されたフォーマットはまた、ゲスト命令の開始アドレスがゲスト命令ブロックの境界と整列しないときに、図１５、図１６、図１７に示された実施形態において用いられる。
【０３３１】
[00374]  図２２は開示された実施形態と整合するもう１つの例示的なブロック・アドレス・マッピング・モジュールの回路図である。
ゲスト命令ブロックとホスト命令ブロック間の弾性マッピング関係の実装方法は図２２に示され、その方法は図１９に示される実施形態にも応用できる。
ある実施形態において、  ゲスト命令ブロックのゲスト命令から変換されたホスト命令は最大３つのホスト命令ブロックに割り当てられる。
なお、割り当てられるホスト命令ブロックの数は幾つでもよい。
従って、ブロック・アドレス・マッピング・モジュールの主要な部分はメモリ2201、メモリ2202、メモリ2203へ分割される。
メモリ2201、メモリ2202、メモリ2203の各行は１つのゲスト命令ブロックへ対応する。
各行は２つのストレージ・フィールドから構成され、それぞれゲスト命令ブロックの開始ゲスト命令のブロック・オフセット・アドレス（2Y）とL1命令キャッシュ1203のサブブロックに対応するホスト命令ブロックのブロック・アドレス（1X）を記憶する。
加えて、メモリ2201、メモリ2202、メモリ2203の該当する行は経路2205と経路2206を持つ。
メモリ2201の任意の行の内容は、メモリ2202の対応する行へ右シフトされ、メモリ2202の任意の行の内容はメモリ2203の対応する行へ右シフトされる。
【０３３２】
[00375]  ゲスト命令ブロックが分岐ターゲットとして最初にアクセスされるとき、分岐ターゲットのゲスト命令のブロック・オフセット・アドレス（2Y）から始まって、ゲスト命令ブロックの全ての完全な命令はホスト命令へ変換され、そして全ての変換されたホスト命令は順番にホスト命令ブロックに記憶される。
2Yとホスト命令ブロックのブロック・アドレス（1X）は、図２０に示されるメモリ2201のゲスト命令ブロックのアドレス（2X）によってポイントされた行に記憶される。
よって、行の内容（例えば2Yと1X）は、ブロック・オフセット・アドレスが、ホスト命令ブロック（ブロック・アドレスは1X）の最初のホスト命令に対応するゲスト命令ブロック（2X)において2Yの、ゲスト命令を記録する。
【０３３３】
[00376]  もしホスト命令ブロックが満杯で記憶されるべきホスト命令がもっとある場合、もう１つのホスト命令ブロックが割り当てられ、残りのホスト命令を記憶する。
残りのホスト命令の最初のホスト命令に対応するゲスト命令のブロック・オフセット・アドレス（2Y）と新しく割り当てられたホスト命令ブロックのブロック・アドレス（1X）はメモリ2202の2Xによってポイントされた行に記憶される。
ゲスト命令とホスト命令のブロック・オフセット・マッピング関係もまた、図１９に示されるブロック・オフセット・マッパー1504の1Xによってアドレス指定される行に記憶される。
【０３３４】
[00377]  さらに、分岐ターゲットのゲスト命令のブロック・オフセット・アドレス（2Y）はホスト命令のブロック・オフセット・アドレス（1Y）へ、ブロック・オフセット・マッパー1504の該当するホスト命令ブロック・アドレス（1X）によってポイントされたマッピング関係によって、マップされる。
このとき、分岐ターゲット命令から始めるゲスト命令ブロックはコンバータ1202によってホスト命令へ変換される；ゲスト命令ブロック・アドレス2Xもまたブロック・アドレス・マッピング・モジュール1904によってホスト命令ブロック・アドレス（1X）へマップされる；そしてゲスト命令のブロック・オフセット・アフドレス（2Y）もまたブロック・オフセット・マッパー1504によってホスト命令のブロック・オフセット・アドレス（1Y）へマップされる。
さらに、1Xと1Yはトラッカー選択のために分岐予測モジュール1607に記憶される。
【０３３５】
[00378]  図２０に戻って、ゲスト命令ブロックが次にアクセスされるとき、アドレス指定操作がメモリ2201、メモリ2202、メモリ2203のためにアクセス・アドレスのゲスト命令ブロック・アドレス2Xを用いて実施され、同じ行を読み出し、読み出された内容はコンパレータ2204へ送られる。
アクセス・アドレスのゲスト命令のブロック・オフセット・アドレス2Yはコンパレータ2204の各メモリから読み出された各2Yと比較される。
第１メモリに記憶されたアクセス・アドレスの2Yより小さい2Yを持つ1Xがブロック・アドレス・マッピング・モジュール1904の出力1906として選ばれる。
後続するオペレーションは上記述と同じである。
もしメモリ2201の2Y（2Yの値はブロック・アドレス・マッピング・モジュール1904の全てのメモリの最小値である） がまだアクセス・アドレスのBN2Yよりも大きければ、アクセスされたターゲット命令はまだホスト命令へ変換されていない。
このとき、システムはコンバータ1202を制御し、アクセス・ターゲットから始まってメモリ2201に記憶されている2Yの前のゲスト命令までの全てのゲスト命令をホスト命令へ変換し、変換されたホスト命令は交換ロジックによって特定されたL1キャッシュ・ブロックに記憶される。
メモリ2202のアクセス・アドレスのゲスト命令アドレス2Xによってポイントされた行は、メモリ2203の該当する行へ右シフトされ、そしてメモリ2201の2Xによってポイントされた行はメモリ2202の該当する行へ右シフトされる。
アクセス・ターゲットの2Yと新しい1Xはメモリ2201へ記憶される。
従って、ゲスト命令ブロックは複数アクセスの開始地点から始まる複数のホスト命令ブロックへ変換される。
マッピング関係はまた図２２のブロック・アドレス・マッピング・モジュール1904に記憶される。
ブロック・アドレス・マッピング・モジュール1904のオペレーションは図８Aー８Dに示された実施形態に参照される。
ホスト命令に対応するホスト命令の1Xアドレスが得られたとき、後続のオペレーションは同じであり、ここでは繰り返されない。
【０３３６】
[00379]  トラック・テーブルが処理システムに組み込まれうる。
図２３は開示された実施形態と整合する例示的な、トラック・テーブルを含むプロセッサ・システムの回路図を示す。
トラック・テーブルは分岐ターゲットアドレス情報、次命令ブロック・アドレス情報とエンディング・トラック・ポイント情報を含むから、トラック・テーブル2301は次ブロック・アドレス・メモリ1709、エンディング・フラグ・メモリ1506と分岐ターゲット・バッファ1607を交換するのに用いられる。
さらに、タグメモリ1905、ブロック・アドレス・マッピング・モジュール1904、コンバータ1202、L1命令キャッシュ1203、プロセッサ・コア1201、ブロック・オフセット・マッパー1504、セレクタ1711、ORロジック1707そしてトラッカーは図１９の対応する構成部分と同じである。
ある実施形態においては、スキャナが追加される。
スキャナは変換されたゲスト命令を検証するよう設定され、分岐命令のために分岐ターゲットのゲスト命令アドレスBN2を計算し、BN2を対応するホスト命令アドレスBN1へ変換する。
ホスト命令アドレスBN1はL1命令キャッシュ1203のアドレスであるから、L1命令キャッシュ1203のホスト命令とトラック・テーブル2301のトラック・ポイントは１対１関係を持ち、分岐命令に対応するトラック・ポイントは分岐ターゲットのホスト命令アドレスを含み、トラッカーはトラック・テーブル2301のためにアドレス指定操作を実施しトラック・ポイントの内容を読み出し、’1’を追加された現行トラックアドレスもしくはトラック・ポイントの分岐ターゲット・アドレス指定アドレスを、分岐命令実行にもとづいて次ホスト命令のアドレス指定アドレスとして選ぶ。
【０３３７】
[00380]  加えて、トラック・テーブル2301のトラック・ポイントの内容にもとづいて、命令がホスト命令ブロックの最後の命令か否かが決定される。
例えば、トラック・ポイントのフラグ・ビットはトラック・ポイントが最後の命令に対応するか否かを示すために用いられる。
トラッカーのリード・ポインタがこのトラック・ポイントにポイントするとき、バス2313から読み出されたフラグ・ビットの値にもとづいて、命令が最後の命令か否かが決定される。
【０３３８】
[00381]トラック・テーブル2301はバス2311を経てトラッカーのリード・ポインタ1723によってポイントされたトラック・ポイントの内容と、バス2309を経てトラック・ポイントを含むトラックのエンディング・トラック・ポイントの内容（次ホスト命令ブロックの開始ポイントのアドレスを記憶する）を同時に出力でき、よって同時に分岐ターゲット・アドレス指定アドレスBN1とセレクタ1711のための次ホスト命令ブロックのBN1アドレスを提供する。 
【０３３９】
[00382]  ある実施形態において、もうひとつの違いはセレクタ2315が図１９において追加されている点である。
セレクタ2315はBN1ホスト命令アドレス（またL1命令キャッシュ・アドレス）とスキャナ2302によって出力されるBN2L2キャッシュ・アドレスを選び、選ばれた結果をトラック・テーブル2301に記憶するように設定され、そしてBN1はブロック・アドレス・マッピング・モジュール1904によってバス1906を経て送られたBN1Xとブロック・オフセット・マッパー1504から送られたBN1Yを組み合わせて形成される。 
【０３４０】
[00383]  特に、スキャナ2302が、L2命令キャッシュ1903からL1命令キャッシュ1203へ送られるゲスト命令を検査するとき、ゲスト命令の中の分岐命令のために、スキャナは分岐ターゲットのゲスト命令アドレスを、ゲスト命令アドレスをゲスト命令の分岐オフセットへ追加することによって計算する。
アドレス指定操作はタグメモリのためにゲスト命令アドレスのインデックス部分を使って実行される。
それから、読み出された内容はゲスト命令のタグ部分とマッチングされる。
【０３４１】
[00384]  もしミスがあれば、ゲスト命令ブロックが下位レベルメモリから読み出され、下位レベルメモリから読み出されたゲスト命令ブロックをL2命令キャッシュ1903のキャッシュ・ブロック交換ロジックによってポイントされたL2キャッシュ・ブロックへ記憶する。
もしヒットがあれば、ゲスト命令のインデックス番号1812がL2キャッシュ・ブロック・アドレスBN2Xとして用いられる；サブブロック番号1813とブロック・オフセット・アドレス1814は共にBN2Yとして用いられる；そしてBN2XとBN2Yは共にL2キャッシュ・アドレスBN2を形成する。
BN2はトラック・テーブル2301のゲスト分岐命令に対応するホスト分岐命令のエントリに記憶される。
このようにして、ゲスト分岐命令がホスト分岐命令に変換されL1命令キャッシュ1203へ記憶されるとき、ホスト分岐命令の分岐ターゲットは少なくともゲスト命令フォーマットを用いてL2命令キャッシュ1903へ記憶され、そしてホスト分岐命令の該当するトラック・テーブルのエントリは分岐ターゲットのL2キャッシュ・アドレスBN2を記憶する。
【０３４２】
[00385]  トラック・アドレスL1命令キャッシュ1203のリード・ポインタ1723（L1キャッシュ・アドレスBN1）がプロセッサ・コア1723での実行のためにホスト分岐命令を読み出すとき、トラッカーのリード・ポインタ1723はトラック・テーブル2301のためにアドレス指定操作を実施し、同時にホスト分岐命令に対応するトラック・エントリを読み出す。
トラック・テーブル2301の出力2311がBN2フォーマットであり分岐予測が’分岐が取られる’であるとき、セレクタ1711はBN2をバス2304へ置き、ブロック・アドレス・マッピング・モジュール1904のためにBN2を使ってアドレス指定操作を実施する。
もしマッピングの出力が無効であれば、それは分岐ターゲット命令を含む命令ブロックがL1命令キャッシュ1203に記憶されるべくホスト命令ブロックに変換されていないことを示す。
このとき、プロセッサ・システムはL2命令キャッシュ1903のためにBN2を用いてアドレス指定操作を実施し、ゲスト命令ブロックを読み出す。
ゲスト命令ブロックはスキャナ2302へ送られゲスト命令ブロックの分岐命令の分岐ターゲットを計算する。
ゲスト命令ブロックはまたコンバータ1202へ送られ、ホスト命令ブロックへ変換される。
ホスト命令ブロックは、L1命令キャッシュのキャッシュ交換ロジックによって特定されたBN1XアドレスによってポイントされたL1命令キャッシュ・ブロックへ記憶される。
【０３４３】
[00386]  システムはブロック・アドレス・マッピング・モジュール1904の’無効’エントリにBN1Xアドレスを記憶し、そしてまた命令コンバータ1202によって生成されたオフセット・アドレス・マッピング関係をブロック・オフセット・マッパー1504のBN1Xによってポイントされた行に記憶する。
さらに仮想マシンシステムは、ゲスト命令オフセット・アドレス1814をホスト命令BN1Yへ、ブロック・オフセット・マッパー1504のBN1Xによってポイントされたマッピング関係にもとづいてマップする。
BN1XとBN1Yによって形成された分岐ターゲット・ホスト命令のL1キャッシュ・アドレスBN1は該当する分岐命令のトラック・テーブルのエントリにBN2を交換するために書き込まれる。
よって、分岐ターゲット・ゲスト命令と後続するゲスト命令ブロックはホスト命令ブロックへ変換され、変換されたホスト命令ブロックをL1キャッシュ1721へ記憶する。
同時に、ホスト分岐ターゲット命令のL1キャッシュ・アドレスはホスト分岐ターゲット命令に対応するトラック・テーブルのエントリに記憶される。
【０３４４】
[00387]  L1キャッシュ・アドレス1723（BN1）が、プロセッサ・コア1721での実行のための分岐命令を読み出すためにトラッカー・アドレスL1命令キャッシュ1203によって出力されるとき、BN1はまたトラック・テーブル2301をアドレス指定し命令に対応するトラック・テーブルのエントリを読み出す。
トラック・テーブルの出力2311がBN1フォーマットであるとき、BN1はセレクタ1711とセレクタ1705をTAKEN信号1713を通して制御する。
例えば、TAKEN信号1713が”分岐でない”とき、トラッカーのリード・ポインタとインクリメンタ1703によって’1’を追加されたL1キャッシュ・アドレス1723は次サイクルにおいてL1キャッシュ・アドレス1723として用いられる。
もしTAKEN信号1713が’分岐がとられた’であれば、トラック・テーブルによって出力されたBN1はトラッカーのリード・ポインタと次サイクルのL1キャッシュ・アドレス1723として用いられる。
L1キャッシュ・アドレス1723はL1命令キャッシュ1203において直接アドレス指定し、プロセッサ・コア実行のためにホスト命令を読み出す。
【０３４５】
[00388]  トラック・テーブルのエンディング・トラック・ポイントのための操作は同じ手法を使う。
つまり、ゲスト命令がホスト命令へ変換され、ホスト命令がL1キャッシュ・ブロックへ記憶されるとき、スキャナ2302はまた次ゲスト命令ブロックのアドレス（例えば、現行ゲスト命令ブロックのアドレス足す１）を計算し、そして次ゲスト命令ブロックのアドレスはマッチング操作を実施するためにタグメモリ1905へ送られる。
もし照合一致がなければ、ゲスト命令ブロックは下位メモリから取り出され、L2キャッシュ1903のBN2Xアドレスを用いてキャッシュ・ブロック交換ロジックによって特定されたL2キャッシュ・ブロックへ記憶される。
タグメモリ1905とブロック・アドレス・マッピング・モジュール1904の該当する行もまた更新される。
よって、得られたBN2Xもしくはマッチング操作によって得られたBN2Xは、トラック・テーブル2301のL1キャッシュ・ブロックに対応する行のエンディング・トラック・ポイントへ記憶される。
【０３４６】
[00389]  キャッシュ・メモリのリード・ポインタ1723が行にポイントするとき、BN2がバス2309を経てエンディング・トラック・ポイントから読み出される。
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は直接トラック・テーブルに記憶される。
【０３４７】
[00390]  図２４は開示された実施形態と整合する、レジスタ・ファイルを使ってスタック操作機能を実装する例示的なプロセッサ・システムを示す。
例示目的のために、モジュールとデバイスの一部だけが図２４に示される。
図２４に示されるように、プロセッサ・コアのレジスタ・ファイル2402はスタックとして設定される。
命令のデコード結果と現行レジスタ・ファイル2402のストレージ状況にもとづいて、スタック・コントローラ2404は、それぞれ出力アドレス2405と出力アドレス2406をスタック先頭（TOS）ポインタ値とスタック最下部（BOS）ポインタ値として調整し、ポインタ値はレジスタ・ファイル2402へ送られる。
【０３４８】
[00391]  スタック・コントローラ2404はコントローラ1019、レジスタ1011、デクリメンタ1031、インクリメンタ1041、そして図１０Aに示されたセレクタから構成される。
レジスタ1011（スタック先頭ポインタ・レジスタとも呼ばれる）は 現行のスタック先頭ポインタの値を記憶するように設定され、ポインタはレジスタ・ファイルの１つのレジスタをポイントする。
基本的なスタック操作はPOPとPUSHを含む。
デクリメンタ1031は現行のスタック先頭ポインタ値を’1’減らす。
インクリメンタ1041は現行のスタック先頭ポインタ値を’1’増やす。
つまり、POP操作はデクリメンタ1031によって実装され（スタック先頭ポインタ値から’1’を引く）、そしてPUSH操作はインクリメンタ1041によって実装される（スタック先頭ポインタ値に’1’を足す）。
よって、命令のデコード結果に沿って、メモリ2403からロードされたオペランドは順番にレジスタ・ファイル2402へプッシュされ（スタック先頭ポインタ値に順番に’1’を足す）、スタックにもとづいてデータをロードする。
もしくは、順番にレジスタ・ファイル2402からポップされたオペランド（スタック先頭ポインタ値から順番に’1’を引く）が実行ユニット2401へ送られ該当する算術ロジック操作を実施したあと、結果は再びレジスタ・ファイル2402へプッシュされ（スタック先頭ポインタ値に’1’を足す）、スタック操作を実装する。
さらに、レジスタ・ファイル2402からポップされたオペランドはメモリ2403へ記憶され（スタック先頭ポインタ値から’1’を引く）、スタックにもとづいてデータを記憶する。
特に、レジスタ・ファイルのプロセッサ命令セットのアドレス・フィールドの３ビットが、読み取りポートまたは書き込みポートにおけるスタック先頭ポインタ値の操作（’1’追加する、変化しない、’1’減らす）を制御する。
【０３４９】
[00392]  オペレーションプロセスにおいて、スタック先頭ポインタはスタック最下部ポインタ値と比較され、スタックが満杯（もしくはほぼ満杯）、そして空（もしくはほぼ空）であるかを判別する。
レジスタ・ファイル2402によって構成されたスタックが満杯（もしくはほぼ満杯）になったとき、スタック・コントローラ2404の制御の下、スタック最下部の近くの幾つかのデータはメモリ2403へ一時的に記憶され、スタック最下部ポインタは新しいスタック最下部をポイントするように調整され、レジスタ・ファイル2402によって構成されたスタックは後続のスタック操作によって使われうるストレージ・スペースの一部を空にする。
メモリ2403のストレージ・スペースはスタック形式に整理され、一時的に記憶されるべきデータはスタック操作（POPとPUSH）によって記憶され、データの元の順序を維持する。
よって、レジスタ・ファイル2402によって構成されたスタックが空（もしくはほぼ空）になったとき、スタック・コントローラ2404の制御の下、一時的に記憶されたデータはスタック順序に沿ってメモリ2403のスタックから読み出され、レジスタ・ファイル2402の該当するレジスタへ書き戻され、スタック最下部ポインタは新しいスタック最下部をポイントするように調整され（つまり、一時的に記憶されたデータが、データがメモリ2403に一時的に記憶される前の状況に回復される）、よってレジスタ・ファイル2402によって構成されたスタックはまだデータの一部を、後続スタック操作における使用のために、記憶する。
従って、スタック操作機能がレジスタ・ファイルによって実装される。
【０３５０】
[00393]  様々なハードウェア・プラットフォームにおいてこの方法を応用するために、幾つかのコンピュータ・プログラム言語はスタック命令を含む中間コードを生成できる。
中間コードが実行されるとき、ソフトウェア・インタプリタは中間コードを実時間で幾つかのマシン命令へ翻訳でき、そしてマシン命令はハードウェア・プラットフォームによって実行される。
従って、中間コードの実行効率は低い。
なお、プロセッサ・システムはスタック操作命令を直接に実行でき（つまり、各スタック操作命令は該当するホスト命令へ変換される）、よってプロセッサ・システムの実行効率を大幅に改善する。
加えて、ソフトウェア仮想マシン技術と比較して、複数の命令セットを含むプロセッサ・システムはハードウェア・モードによって仮想マシンを実装できる。
【０３５１】
[00394]  図２３に記された構造を例として、幾つかの実用的な応用がここで示される。
該当する手法とプロセスは本開示によって提出された他のどの構造（例えば図１５、１６、１７、１９の構造）に対しても応用できる。
加えて、例示目的のために、以下の記述において、可変長命令セット、固定長命令セット、スタック命令セットのみがゲスト命令セットの例として用いられるが、しかし他のどんな適切なコンピュータ命令セットもゲスト命令セットとして用いられうる。
【０３５２】
[00395]  第一に、仮想マシンシステムは可変長命令によって構成されたプログラムを実行するのに用いられる。
つまり、ゲスト命令は可変長命令である。
可変長命令セットとホスト命令セットの命令マッピング変換ルールはコンバータ1202のメモリ1301へ取り込まれ、コンバータ1202のレジスタ212を制御するための値が書き込まれる。
変換開始ポイントのレジスタは、変換を開始するために介入アドレスの値（分岐ターゲットもしくは順序上次のアドレス）を持つ。
よって、可変長命令が実行されるとき、もしプロセッサ・コア1201によって必要とされる可変長命令が命令メモリ1903に記憶されるならば、命令メモリ1903のためのアドレス指定操作が実施され、可変長命令を含む命令ブロックが読み出され、そして命令ブロックはスキャナ2302とコンバータ1202へ送られる。
可変長命令から始まって命令ブロックの中の変換されていない最後の可変長命令までの可変長命令全ては、分岐命令の分岐ターゲット・アドレスを計算するために、スキャンされ変換される。
分岐命令の分岐ターゲット・アドレスは対応するホスト命令アドレスへ変換される。
同時に、キャッシュ交換アルゴリズムにもとづいて、これらの可変長命令から変換されたホスト命令ブロックは順番にL1命令キャッシュ1203の対応する行に記憶され、対応するトラックがトラック・テーブル2301の対応する行に構成される。
【０３５３】
[00396]  特に、可変長命令がスキャン／変換されるとき、もしL1命令キャッシュ1203が分岐ターゲットに対応するホスト命令を記憶するなら、分岐ターゲットの可変長命令アドレスは変換されて、アドレス変換を経て（アドレス変換はタグメモリ1905、ブロック・アドレス・マッピング・モジュール1904、ブロック・オフセット・マッパー1504によって実装される）対応するホスト命令アドレスBN1をトラック・テーブルに記憶されているトラック・ポイントの内容として得る。 
もしL1命令キャッシュ1203が分岐ターゲットに対応するホスト命令を記憶しない、しかし命令メモリ1903が分岐ターゲットを記憶する場合、分岐ターゲットの可変長命令アドレスBN2がトラック・ポイント内容としてトラック・テーブルに記憶される。
もし命令メモリ1903が分岐ターゲットを記憶しないならば、分岐ターゲットは下位メモリから命令メモリ1903の交換アルゴリズム（例えばLRU）によって決定された行へ充填され、分岐ターゲットの可変長命令アドレスBN2がトラック・ポイント内容としてトラック・テーブルに記憶される。
よってトラック・テーブル2301は可変長分岐命令の分岐ターゲットのアドレス情報を含む。
トラック・テーブル2301から読み出された内容とプロセッサ・コア1201によって実行された分岐ホスト命令の実行結果にもとづいて、トラッカーはL1命令キャッシュ1203を制御しプロセッサ・コア1201における実行のために対応するホスト命令を出力する。
該当するホスト命令がホスト命令アドレス順に実行されるとき、トラック・アドレス（つまりホスト命令アドレス）にインクリメンタ1703によって1が追加される、もしくはバス2309を経てトラック・テーブル2301によって出力された次ホスト命令ブロック・アドレスが選ばれ、L1命令キャッシュ1203から該当するホスト命令を直接に見いだす。
【０３５４】
[00397]  分岐が取られたとき、トラック・テーブル2301によって出力された分岐ターゲットのホスト命令アドレスBN1に沿って、対応するホスト命令がプロセッサ・コア1201における実行のために直接にL1命令キャッシュ1203から見いだされる。
トラック・テーブル2301から出力されたアドレスが分岐ターゲットの可変長命令アドレスBN2であるとき、もし可変長命令に対応するホスト命令が前オペレーションの命令キャッシュ1203に記憶されているなら、可変長命令アドレスはホスト命令アドレスBN1へ変換され、そして対応するホスト命令がプロセッサ・コア1201における実行のためにL1命令キャッシュ1203からホスト命令アドレスBN1にもとづいて見いだされる。    
或は、可変長命令アドレスにもとづいて、対応する可変長命令は命令メモリ1903から見いだされ、それからその可変長命令から始まって命令ブロックの中の変換されていない最後の可変長命令までの命令がスキャン／変換される。
対応するホスト命令ブロックはL1命令キャッシュ1203に記憶され、該当するトラックがトラック・テーブル2301へ構成される。
同時に、可変長命令から変換されたホスト命令がプロセッサ・コア1201における実行のために提供される。
プロセッサ・コア1201はホスト命令を実行し対応する結果を生成する。
例えば、分岐ホスト命令が実行されたとき、分岐が取られたかを示すTAKEN信号が生成されトラッカーへ送られる。
TAKEN信号と、バス2313を経てトラック・テーブル2301から送られる命令ブロックの最後の命令に到達したかを表す信号にもとづいて、トラッカーは複数のアドレスソースを選びプログラム・フローの実行を制御する。
【０３５５】
[00398]  可変長命令によって構成されたプログラムがプロセッサ・システムによって実行された後、固定長命令によって構成されたプログラムがプロセッサ・システムによって実行される。
この場合、最後の可変長命令が完全に実行されたとき、プロセッサ・コアによって実行された操作が止まる。
プロセッサ・コアの状態と各メモリが無効としてリセットされ、固定長命令セットとホスト命令セットの間の命令変換ルールおよびレジスタの設定が、コンバータ1202のメモリとレジスタへ取り込まれ、以前に記憶された可変長変換ルールを置き換える。
命令変換開始アドレスを制御するためのレジスタ値はゲスト命令ブロックもしくはサブブロックの最下位アドレスである。
固定長命令がプロセッサ・システムによって実行されるとき、もしプロセッサ・コア1201によって必要とされる固定長命令が命令メモリ1903に記憶されているならば、命令メモリ1903の上でアドレス指定操作を実施することによって得られた固定長命令を含む命令ブロックがスキャナ2302とコンバータ1202へ送られる。
スキャナ2302とコンバータ1202は固定長命令ブロック全体をスキャン／変換し、分岐命令の分岐ターゲット・アドレスを計算する。
分岐命令の分岐ターゲット・アドレスは対応するホスト命令アドレスへ変換される。
同時に、得られたホスト命令ブロックは交換アルゴリズムに沿ってL1命令キャッシュ1203の該当する行へ記憶され、該当する行に対応するトラックがトラック・テーブル2301に構成される。
プロセスは前に記された可変長命令のための操作と同様である。
違う点は、固定長ゲスト命令ブロック全体がスキャンされ変換される点である。
トラック・テーブル2301から読み出される内容とプロセッサ・コア1201による分岐ホスト命令の実行結果にもとづいて、トラッカーはL1命令キャッシュ1203を制御し、プロセッサ・コア1201による実行のために該当する命令を出力する。
詳細は前実施形態を参照のこと、ここでは繰り返されない。
【０３５６】
[00399]  そして、プロセッサ・システムは可変長命令セットと固定長命令セットを含むプログラムを実行すると仮定すると、コンバータ1202は命令セットがスイッチされたとき、実時間で異なるゲスト命令セットにスイッチするように設定し直すことが可能である。  
特に、プロセスは上記の１つの命令セットを他の命令セットにスイッチするプロセスと同様である。
しかし、プロセスはトラック・テーブル2301、命令キャッシュ1203、命令メモリ1903、そして全ての他のメモリをゼロにリセットする必要がない。 
トラック・テーブル2301の異なるスレッド・トラックは互いに干渉せず、しかし他のメモリ・デバイスはトラック・テーブル2301に関連付けされ、様々なスレッドが互いに独立であり、そしてそれぞれが自身の独立したトラックを持つ。
命令セットもしくはスレッドがスイッチされたとき、スレッドのトラッカー1723のリード・ポインタとプロセッサ・コアのレジスタ状態が記憶される限り、スレッドが実行再開のために呼ばれるとき、データは対応する構成部分（例えばレジスタ）へ書き戻される。
よって、このスレッドはスレッドがスイッチアウトされた地点から実行を再開できる。
トラッカーの１つのメモリは各スレッドに対応するリード・ポインタを記憶し、よってスレッド（もしくは仮想マシン）がスイッチされたとき、対応するリード・ポインタが簡単に回復される。
同様に、各スレッドに対応する１つのメモリがプロセッサ・コア1701の各ステータス・レジスタのために生成される。
従って、異なるスレッドがスイッチされたとき、時間間隔はリード・ポインタ、ステータス・レジスタ、リード・ポインタ・メモリ、ステータス・メモリの間のデータ交換のために必要とされる時間だけである。
【０３５７】
[00400]  プロセッサ・システムはまた図１３Bに記述された方法を組み合わせて、異なるスレッド番号にもとづいて、コンバータ1202は該当する命令セットのマッピング関係を使ってゲスト命令を変換し、よって異なるスレッドに対応する命令セットが異なるとき、プロセッサ・システムはコンバータを再設定するためにプロセッサ・コアを停止する必要がなく、命令を中断なく実行する。 
【０３５８】
[00401]  特に、プログラムが実行される前に、図１３Bに記された方法に沿って、ゲスト命令セットの使用される可能性のある全ての対応関係が、コンバータ1202のメモリのスレッド番号によってアドレス指定されるメモリ空間の中へ取り込まれる。
ゲスト命令が変換されるとき、最初に、コンバータ1202のメモリのスレッド番号によってアドレス指定されるメモリ空間が見いだされる。
それから、メモリ空間の該当する関係に沿って、ゲスト命令はホスト命令へ変換される。
この場合、他のオペレーションは前実施形態のオペレーションと同じであり、ここでは繰り返されない。
各仮想マシンは異なるスレッドを含むから、複数の異なる仮想マシンが同時に同じプロセッサ・システムに走るための機能がこの例で記された方法で実装される。
先に述べたように、トラック・テーブル2301のトラックの異なるスレッドは互いに干渉しないから、複数の仮想マシンもまた、L2キャッシュ1903の中に共存する異なるスレッドの同じコンピュータ命令セットもしくは異なるコンピュータ命令セットのゲスト命令のために、互いに干渉することはない。
トラッカーのリード・ポインタとプロセッサ・コアのレジスタ状態を記憶する方法は上記実施形態を参照されたい。
よって、同じ命令セットを実行できる複数の異なる仮想マシンが同時に同じプロセッサ・システムにおいて走る時、ただ１つのゲスト命令セットのための１つの変換ルールがコンバータ1202に記憶され、全てのスレッドは同じ変換ルールにポイントする。
異なるスレッド（異なる仮想マシン）は独立で、トラッカーのリード・ポインタのデータとプロセッサ・コアの状態レジスタはスレッド（仮想マシン）がスイッチされるときに交換される。
【０３５９】
[00402]  開示されたプロセッサ・システムは２つの異なる命令セット間のシームレスなスイッチを実現できる。
スタック操作命令を直に実行するプロセッサ・コアはまた、レジスタ操作を実施する命令セットとスタック操作を実施する命令セット間のシームレスなスイッチも、異なる命令セットの命令を実行するために中断することなく、実現できる。    
特に、プログラムが実行される前に、図１３Bに記された方法に沿って、使用される可能性のあるレジスタ操作とスタック操作のための全ての命令は、コンバータ1202のメモリのスレッド番号によってアドレス指定されたメモリ空間の中へ取り込まれる。
レジスタ操作もしくはスタック操作のための命令が変換されるとき、最初に、コンバータ1202のメモリのスレッド番号によってアドレス指定されるメモリ空間が見つけ出される。
それから、メモリ空間の対応関係に沿って、レジスタ操作もしくはスタック操作のための命令がホスト命令へ変換される。
【０３６０】
[00403]  ホスト命令を定義するとき、１つの追加ビットがレジスタ操作命令、つまり図１０Aの制御信号1021、を制御するために用いられる命令フィールドに追加される。     
レジスタ操作命令セットの１つの命令がホスト命令に変換されるとき、ビットは’0’にセットされ、そして信号1021はセレクタ1033、1035、1037を制御し、直接にホスト命令のレジスタ・ファイル・アドレス・フィールドを選び、該当する読み取りそして書き込み操作を制御するために直接にレジスタ・ファイル1001においてアドレス指定操作を実施する。
スタック操作命令セットの１つの命令がホスト命令へ変換されるとき、ビットは’1’にセットされ、信号1021はセレクタ1033、1035、1037を制御して、、ホスト命令の命令フィールド（例えば、レジスタ操作が実行されるときレジスタ・アドレス・フィールド）を直接選び、それはスタック・ポインタの先頭の増加もしくは減少を制御してセレクタ1053、1055、1057を制御し、スタック先頭ポインタ1045を選んで該当する読み取りそして書き込み操作を制御するためにレジスタ・ファイル1001上でアドレス指定操作を実施する。
よって、プロセッサ・コアがプログラムを実行するとき、プロセッサ・コアはレジスタ操作を実施する命令セットとスタック操作を実施する命令セット間でシームレスなスイッチを実現できる。
命令コンバータ1202を制御して正しい変換ルールを用いてゲスト命令をホスト命令へ変換する、ある種の条件（例えば、スレッド番号）がある限り、スタック操作命令はレジスタ操作命令セットを含むプログラムの中にシームレスに埋め込まれうる。
プロセッサ・コアは、レジスタ操作を実施する命令セットとスタック操作を実施する命令セットの間のシームレスなスイッチを実現することができる。
この場合、他のオペレーションは前実施形態のオペレーションと同様であり、ここでは繰り返されない。
【０３６１】
[00404]  本発明の精神と範囲から離れることなく、開示された実施形態に対する他の修正、等価な置き換え、あるいは改善はこの分野に精通した者には自明であり、ここの開示の範囲に含まれることが意図されている。  
【産業上の利用可能性】
【０３６２】
[00405]  本開示において提示されたシステムと方法は、命令セット変換に関連する様々な応用に適用され、プロセッサ・システムの効率を向上させることができる。
本開示において提示されたシステムと方法はまた、仮想マシンに関連する様々な応用に適用され、仮想マシンがハードウェアを用いて実現され、仮想マシンの効率を向上させる。
【図１】
0006591978.tif 000002
【図２】
0006591978.tif 000003
【図３Ａ】
0006591978.tif 000004
【図３Ｂ】
0006591978.tif 000005
【図４Ａ】
0006591978.tif 000006
【図４Ｂ】
0006591978.tif 000007
【図５Ａ】
0006591978.tif 000008
【図５Ｂ】
0006591978.tif 000009
【図５Ｃ】
0006591978.tif 000010
【図５Ｄ】
0006591978.tif 000011
【図５Ｅ】
0006591978.tif 000012
【図５Ｆ】
0006591978.tif 000013
【図６】
0006591978.tif 000014
【図７Ａ】
0006591978.tif 000015
【図７Ｂ】
0006591978.tif 000016
【図８Ａ】
0006591978.tif 000017
【図８Ｂ】
0006591978.tif 000018
【図８Ｃ】
0006591978.tif 000019
【図８Ｄ】
0006591978.tif 000020
【図９Ａ】
0006591978.tif 000021
【図９Ｂ】
0006591978.tif 000022
【図９Ｃ】
0006591978.tif 000023
【図９Ｄ】
0006591978.tif 000024
【図９Ｅ】
0006591978.tif 000025
【図９Ｆ】
0006591978.tif 000026
【図１０Ａ】
0006591978.tif 000027
【図１０Ｂ】
0006591978.tif 000028
【図１０Ｃ】
0006591978.tif 000029
【図１１Ａ】
0006591978.tif 000030
【図１１Ｂ】
0006591978.tif 000031
【図１２】
0006591978.tif 000032
【図１３Ａ】
0006591978.tif 000033
【図１３Ｂ】
0006591978.tif 000034
【図１３Ｃ】
0006591978.tif 000035
【図１４】
0006591978.tif 000036
【図１５】
0006591978.tif 000037
【図１６】
0006591978.tif 000038
【図１７】
0006591978.tif 000039
【図１８Ａ】
0006591978.tif 000040
【図１８Ｂ】
0006591978.tif 000041
【図１８Ｃ】
0006591978.tif 000042
【図１９】
0006591978.tif 000043
【図２０】
0006591978.tif 000044
【図２１】
0006591978.tif 000045
【図２２】
0006591978.tif 000046
【図２３】
0006591978.tif 000047
【図２４】
0006591978.tif 000048