(57)【要約】【課題】動的バイナリ変換の課題はオーバーヘッドであり、効率的なレジスタマッピングを用いて、レジスタのエミュレーションオーバーヘッドを減らすことを目的とする。【解決手段】本開示書は、より多くのレジスタを備えるシステムからより少ないレジスタを備えるシステムへとレジスタをマッピングするためのシステム及び方法を提供する。リージョンは、一つ以上の相対的に頻度の高いレジスタアクセスを行うコードブロックを含むように構成される。前記最も頻繁にアクセスされるソースレジスタは、ターゲットレジスタへマッピングされる。リージョン内の各ブロックは、プロローグ及び少なくとも一つのエピローグによって境界される。プロローグは、レジスタマッピングを実装するよう構成され、エピローグは、リージョン内のブロックからリージョン内又はリージョン内でない別のブロックへのプログラムフローを管理するよう構成される。【選択図】  図５
2012003761.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムによる実行のための複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階であって、
前記コンピュータシステムは、メモリ及びＮｔ個のターゲットレジスタを有する処理ユニットを有し、前記ソースバイナリアプリケーションはＮｓ個のソースレジスタを有する環境において実行されるよう構成され、ＮｔはＮｓより小さい、段階；
前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階；
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの近隣ソースバイナリコードブロックを含むリージョンを定義する段階であって、
前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの近隣ソースバイナリコードブロックは少なくとも一のソースレジスタにアクセスするための命令を共に有する、段階；
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を決定する段階；及び
前記リージョン内で最も頻繁にアクセスされるＮ個のソースレジスタの各々を、Ｎｔ個の前記ターゲットレジスタの各々へそれぞれマッピングする段階であって、ＮはＮｔより小さい又は等しい、段階；
を有する、方法。
【請求項２】
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
各最適化済ターゲットバイナリコードブロックは、
メモリから対応するターゲットレジスタへそれぞれマッピング済ソースレジスタと関連するデータを読み込むよう構成されるプロローグ、
前記ソースバイナリコードブロックに対応する変換済ソースバイナリコードブロック及び条件ジャンプを有する本体、及び
少なくとも一つのエピローグ
を有し、
前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
をさらに有する、請求項１に記載の方法。
【請求項３】
前記複数のエピローグは、第一エピローグ及び第二エピローグを有し、
前記第一エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内の第二最適化済ターゲットバイナリコードであるとき、実行されるよう構成され、
前記第一エピローグは、前記第二最適化済ターゲットバイナリコードブロックの本体へジャンプするための第一命令を有し、かつ、
前記第二エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内にないとき、実行されるよう構成され、
前記第二エピローグは、それぞれマッピング済ソースレジスタに対応する各ターゲットレジスタをメモリへ保存するための第二命令及び前記第二ターゲットバイナリコードブロックの先頭へジャンプするための第三命令を有する、
請求項２に記載の方法。
【請求項４】
前記リージョンにおける各ソースバイナリコードブロックのｌｉｖｅ−ｉｎレジスタ及びｌｉｖｅ−ｏｕｔレジスタを特定する段階を含む、前記リージョンのｌｉｖｅ−ｉｎレジスタ及びｌｉｖｅ−ｏｕｔレジスタを特定する段階
をさらに有する、請求項１に記載の方法。
【請求項５】
前記レジスタマッピングに少なくとも部分的に基づいて、前記リージョン内の各ソースバイナリコードブロックに対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
各最適化済ターゲットバイナリコードブロックは、
メモリから対応するターゲットレジスタへ、マッピング済ｌｉｖｅ−ｉｎソースレジスタそれぞれと関連するデータを読み込むよう構成されるプロローグ、
前記ソースバイナリコードブロックに対応する変換済ソースバイナリコード及び条件ジャンプを有する本体、及び
少なくとも一つのエピローグ
を有し、
前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
をさらに有する、請求項４に記載の方法。
【請求項６】
前記リージョン内の第一最適化済ターゲットバイナリコードブロックのプロローグを実行する段階であって、該段階は、前記リージョンの前記Ｎ個のマッピング済ソースレジスタの一つにそれぞれ対応するデータを含むＮ個のそれぞれのターゲットレジスタを読み込む段階を有する、段階；
前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリブロックへジャンプするよう構成される、段階；
前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうか決定する段階；及び
前記第二ターゲットコードブロックが前記リージョン内であるとき、前記第二ターゲットバイナリコードブロックに対応する第二最適化済ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするための第二エピローグを実行する段階；
をさらに有する、請求項２に記載の方法。
【請求項７】
前記リージョン内の第一最適化済ターゲットバイナリコードブロックのプロローグを実行する段階であって、該段階は、前記リージョン内の各マッピング済ｌｉｖｅ−ｉｎソースレジスタのために、前記マッピング済ｌｉｖｅ−ｉｎソースレジスタに対応するメモリからデータを含む一つのターゲットレジスタを読み込む段階を有する、段階；
前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリコードブロックへジャンプするよう構成される、段階；
前記第二ターゲットバイナリコードブロックが前記リージョン内であるかどうか決定する段階；及び
前記第二ターゲットコードブロックが前記リージョン内にあるとき、前記第二ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、メモリ内に前記リージョンの前記マッピング済ｌｉｖｅ−ｏｕｔレジスタを保存するために、及び、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするために、第二エピローグを実行する段階；
をさらに有する、請求項５に記載の方法。
【請求項８】
類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当する、
請求項１に記載の方法。
【請求項９】
前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、それぞれ分岐命令によって境界される、
請求項１に記載の方法。
【請求項１０】
プロセッサによって実行される以下の処理をもたらす命令を保存する具体的なストレージ媒体を有する物品であって、前記処理は、
実行のために複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階であって、前記プロセッサはＮｔ個のターゲットレジスタを有し、前記ソースバイナリアプリケーションはＮｓ個のソースレジスタを有する環境において実行されるよう構成され、ＮｔはＮｓより小さい、段階；
前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階；
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの隣接ソースバイナリコードブロックを有するリージョンを定義する段階であって、類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当し、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、少なくとも一つのソースレジスタにアクセスするための命令を共に有し、かつ、分岐命令によってそれぞれ境界される、段階；
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する段階；及び
前記リージョン内で最も頻繁にアクセスされるＮ個のソースレジスタの各々を、前記のＮｔ個のターゲットレジスタの各々へそれぞれマッピングする段階であって、ＮはＮｔより小さい又は等しい、段階；
を有する、前記処理をもたらす命令を保存する具体的なストレージ媒体を有する物品。
【請求項１１】
前記命令は、さらに
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
各最適化済ターゲットバイナリコードブロックは、
メモリから対応するターゲットレジスタへそれぞれマッピングされたソースレジスタに関連するデータをロードするよう構成されるプロローグ、
前記ソースバイナリコードブロックに対応する変換済ソースバイナリコード及び条件ジャンプを有する本体、及び
少なくとも一つのエピローグ
を有し、
前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
を有する、請求項１０に記載の物品。
【請求項１２】
前記複数のエピローグは、第一エピローグ及び第二エピローグを有し、
前記第一エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内の第二最適化済ターゲットバイナリコードであるとき、実行されるよう構成され、
前記第一エピローグは、前記第二最適化済ターゲットバイナリコードブロックの本体へジャンプするための第一命令を有し、かつ、
前記第二エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内にないとき、実行されるよう構成され、
前記第二エピローグは、各マッピング済ソースレジスタに対応する各ターゲットレジスタをメモリへ保存するための第二命令及び前記第二ターゲットバイナリコードブロックの先頭へジャンプするための第三命令を有する、
請求項１１に記載の物品。
【請求項１３】
前記命令は、さらに
リージョン内の各ソースバイナリコードブロックのｌｉｖｅ−ｉｎレジスタ及びｌｉｖｅ−ｏｕｔレジスタを特定することを有する、前記リージョンのｌｉｖｅ−ｉｎレジスタ及びｌｉｖｅ−ｏｕｔレジスタを特定する段階
を有する、請求項１０に記載の物品。
【請求項１４】
前記命令は、さらに
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
各最適化済ターゲットバイナリコードブロックは、メモリから対応するターゲットレジスタへそれぞれマッピング済のｌｉｖｅ−ｉｎソースレジスタに関連するデータをロードするよう構成されるプロローグ、
前記ソースバイナリコードブロックに対応する変換済ソースバイナリコード及び条件ジャンプを有する本体、及び
少なくとも一つのエピローグ
を有し、
前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
を有する、請求項１３に記載の物品。
【請求項１５】
前記命令は、さらに
前記リージョン内の第一最適化済ターゲットバイナリブロックのプロローグを実行するプロローグ実行段階であって、該段階は、前記リージョンの前記Ｎ個のマッピング済ソースレジスタの一つにそれぞれ対応するデータを含むＮ個のそれぞれのターゲットレジスタを読み込む段階を有する、段階；
前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリブロックへジャンプするよう構成される、段階；
前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうか決定する段階；及び
前記第二ターゲットコードブロックが前記リージョン内であるとき、前記第二ターゲットバイナリコードブロックに対応する第二最適化済ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするための第二エピローグを実行する段階；
を有する、請求項１１に記載の物品。
【請求項１６】
前記命令は、さらに
前記リージョン内の第一最適化済ターゲットバイナリコードブロックのプロローグを実行する段階であって、該段階は、前記リージョン内の各マッピング済ｌｉｖｅ−ｉｎソースレジスタのために、前記マッピング済ｌｉｖｅ−ｉｎソースレジスタに対応するメモリからデータを有する一つのターゲットレジスタを読み込む段階を有する、段階；
前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリコードブロックへジャンプするよう構成される、段階；
前記第二ターゲットバイナリコードブロックが前記リージョン内であるかどうか決定する段階；及び
前記第二ターゲットコードブロックが前記リージョン内にあるとき、前記第二ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、メモリ内に前記リージョンの前記マッピング済ｌｉｖｅ−ｏｕｔレジスタを保存するために、及び、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするために、第二エピローグを実行する段階；
を含む、請求項１４に記載の物品。
【請求項１７】
Ｎｔ個のターゲットレジスタを有するプロセッサ；並びに
動的バイナリ変換ソフトウェア、レジスタマッピングモジュールソフトウェア及びＮｓ個のソースレジスタを有する環境において実行されるよう構成されるソースバイナリアプリケーションを保存するよう構成されるメモリ
を有するシステムであって：
ここでＮｔはＮｓより小さく、前記プロセッサにおいて実行されるための複数のソースバイナリコードブロックを有する前記ソースバイナリアプリケーションであり、前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアが前記プロセッサ上で実行されるとき、前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアのうち少なくとも一つが前記プロセッサに：
前記ソースバイナリアプリケーションの実行中に、前記ソースバイナリアプリケーション内の頻繁に実行されるソースバイナリコードブロックを特定する処理；
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの近隣ソースバイナリコードブロックを有するリージョンを定義する処理であって、前記頻繁に実行されるソースバイナリコードブロック及び少なくとも一つの近隣ソースバイナリコードブロックは、少なくとも一つのソースレジスタにアクセスする命令を共に有する、処理；
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する処理；及び
前記リージョン内で最も頻繁にアクセスされるＮ個のソースレジスタの各々を、前記のＮｔ個のターゲットレジスタの各々へそれぞれマッピングする処理であって、ＮはＮｔより小さい又は等しい、処理；
を実行させる、システム。
【請求項１８】
前記レジスタマッピングモジュールソフトウェアは、前記プロセッサに、
前記レジスタマッピングに少なくとも部分的に基づいて、前記リージョン内の各ソースバイナリコードブロックに対応する最適化済ターゲットバイナリコードブロックを生成する処理であって、
各最適化済ターゲットバイナリコードブロックは、
メモリから対応するターゲットレジスタへそれぞれマッピングされたソースレジスタと関連するデータを読み込むよう構成されるプロローグ、
前記ソースバイナリコードブロックに対応する変換済ソースバイナリコードブロック及び条件ジャンプを有する本体、及び
少なくとも一つのエピローグ
を有し、
前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、処理
をさらに実行させる、請求項１７に記載のシステム。
【請求項１９】
前記複数のエピローグは、第一エピローグ及び第二エピローグを有し、
前記第一エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内の第二最適化済ターゲットバイナリコードであるとき、実行されるよう構成され、
前記第一エピローグは、前記第二最適化済ターゲットバイナリコードブロックの本体へジャンプするための第一命令を有し、かつ、
前記第二エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内にないとき、実行されるよう構成され、
前記第二エピローグは、各マッピング済ソースレジスタに対応する各ターゲットレジスタをメモリへ保存するための第二命令及び前記第二ターゲットバイナリコードブロックの先頭へジャンプするための第三命令を有する、
請求項１８に記載のシステム。
【請求項２０】
前記レジスタマッピングモジュールソフトウェアは、前記プロセッサに、リージョン内の各ソースバイナリコードブロックのｌｉｖｅ−ｉｎレジスタ及びｌｉｖｅ−ｏｕｔレジスタを特定する処理を有する、前記リージョンのｌｉｖｅ−ｉｎレジスタ及びｌｉｖｅ−ｏｕｔレジスタを特定する処理をさらに実行させる、
請求項１７に記載のシステム。
【請求項２１】
類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当する、
請求項１０に記載の物品。
【請求項２２】
前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、それぞれ分岐命令によって境界される、
請求項１０に記載の物品。
【請求項２３】
類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当する、
請求項１７に記載のシステム。
【請求項２４】
前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、それぞれ分岐命令によって境界される、
請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示書は、効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステムに関し、特に、多くのレジスタを備える命令セットアーキテクチャ（ＩＳＡ）からより少ないレジスタを備えるＩＳＡへ動的バイナリ変換を実行するための効率の良い技術を用いた方法、物品及びシステムに関する。
【背景技術】
【０００２】
動的バイナリ変換（ＤＢＴ）は、一つの命令セットアーキテクチャ（ＩＳＡ）向けに作られたアプリケーションを異なるＩＳＡの上で実行するための手段として広く用いられている。ｘ８６ＩＳＡに基づいたＰＣ向けにレガシーなソフトウェアが多く開発されたことにより、ｘ８６から他のＩＳＡへと変換することについて注目が得られている。小さなウルトラモバイルＰＣ及びさらにパワフルな組込デバイス及びモバイルインターネットデバイス（例えば、スマートフォン）双方の業界における最近の傾向は、それらの異なる市場の間の境界を曖昧なものにしている。結果として、この市場の集中は、現在の組込デバイス市場及びモバイルインターネットデバイス市場を支配するＩＳＡ（例えば、ＡＲＭ（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）、ＭＩＰＳ（ＭＩＳＰ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）及びＰｏｗｅｒＰＣ（Ａｐｐｌｅ−ＩＢＭ−Ｍｏｔｏｒｏｌａアライアンス））からｘ８６へのＤＢＴに大きな関心を作り出している。
【０００３】
バイナリ変換（ＢＴ）は、あるソース（“ゲスト”）ＩＳＡ向けにビルドされたバイナリを、別のターゲット（“ホスト”）ＩＳＡへ変換するための一般的な技術である。ＢＴを用いると、上位レベルのソースコードのリコンパイル又はアセンブリコードの再作成の必要なく、一つのプロセッサＩＳＡ向けにビルドされたアプリケーションのバイナリを、異なるアーキテクチャのプロセッサ上で実行することができる。ほとんどのレガシーなコンピュータ向けアプリケーションはバイナリ形式でのみ利用可能であるため、ＢＴは、ビルドされておらず、それらのコンピュータに利用不可能なアプリケーションを、あるプロセッサに実行可能にする将来性により、とても魅力的である。いくつかの成功したＢＴプロジェクトは、過去数十年にわたって、その技術水準を高めている。前記ＢＴプロジェクトには、Ｄｉｇｉｔａｌ  Ｅｑｕｉｐｍｅｎｔ  Ｃｏｐｏｒａｔｉｏｎ（“ＤＥＣ”）のＦＸ！３２、ＩｎｔｅｌのＩＡ−３２  ＥＬ、ＴｒａｎｓｍｅｔａのＣＭＳ（“Ｃｏｄｅ  Ｍｏｒｐｈｉｎｇ  Ｓｏｆｔｗａｒｅ”）、Ｇｏｄｓｏｎ−３（ＭＩＰＳアーキテクチャ）及びＩＢＭのＤＡＩＳＹ（“Ｄｙｎａｍｉｃａｌｌｙ  Ａｒｃｈｉｔｅｃｔｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  ｆｒｏｍ  Ｙｏｒｋｔｏｗｎ”）が含まれる。これらのツールのほとんどは、例えばＡｌｐｈａ（ＤＥＣ）、Ｉｔａｎｉｕｍ（Ｉｎｔｅｌ）、Ｃｒｕｓｏｅ（Ｔｒａｎｓｍｅｔａ）及びＭＩＰＳ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）などのプロセッサでレガシーなｘ８６アプリケーションを実行することを目的とする。
【０００４】
上で言及したツールのほとんどは、アプリケーションが実行されるときオンザフライで変換を実行する、言い換えればランタイムに変換を実行することを意味する、動的ＢＴ（ＤＢＴ）を用いる。もう一つの方法として、ＢＴはオフラインで実行されることもできる。すなわち、静的ＢＴ（ＳＢＴ）である。動的な使用モデルが、通常好ましい。なぜならば、動的な使用モデルは、より一般的（例えば、自己書き換えコードを処理できる）であり、かつ、ネイティブでないバイナリ向けにＤＢＴを自動的に起動するよう切り替わり、単一のＯＳを使用するユーザに意識させることなく動作するためである。ＳＢＴと比べたＤＢＴの主な欠点は、オーバーヘッドである。アプリケーションの変換と最適化に費やされたサイクルは、実際に前記アプリケーションコードを実行するために別の方法で用いることができたサイクルである。したがって、ＤＢＴツールは、変換／最適化に費やされる時間と、変換されたコードの実行時間に順に反映される出力結果のコードの質との間のトレードオフに直面する。
【０００５】
ＤＢＴによって直面する課題は、ソースとターゲットのＩＳＡに大きく依存する。近年は、ｘ８６ＩＳＡの使用をウルトラモバイル市場及び組込市場セグメント（例えば、ＩｎｔｅｌのＡｔｏｍプロセッサ）へと拡張することに大きな興味がもたれている。ユーザの視点から、このことはとても便利なことである。なぜならば、レガシーＰＣ向けソフトウェアが組込及びウルトラモバイルプラットフォーム上で効率よく動作することを可能にするためである。しかしながら、それらの新しいドメインに採用されるであろうｘ８６のため、ｘ８６が、これらのセグメントにおいても利用可能な、主にＡＲＭ（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）、ＭＩＰＳ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）及びＰｏｗｅｒＰＣ（Ａｐｐｌｅ−ＩＢＭ−Ｍｏｔｏｒｏｌａアライアンス）ＩＳＡに基づく巨大なソフトウェアベースを実行できるようにすることもまた必要である。例えば、将来のｘ８６ベースの、加えてＰＣアプリケーションを実行可能なスマートフォンにおいて、例えばＡｐｐｌｅのｉＰｈｏｎｅ  Ａｐｐストアから、ＡＲＭベースのアプリケーションをダウンロードしてシームレスに実行できることは有益であろう。このシナリオを可能にする課題は、ＤＢＴのパフォーマンス及び電力のオーバーヘッドを低く保つことを含む。
【０００６】
様々なＤＢＴシステムが提案されているが、それらの多くは同様の基本的な実行フローに従っている。最初に、ソース（ゲスト）アーキテクチャ向けに作成されたバイナリファイルは、メモリに読み込まれる。このソースバイナリのセクションは、次にターゲット（ホスト）バイナリコードへ変換される。この変換は、典型的には“オンデマンド”にて実施される。言い換えると、制御のフローがそれらに到達したとき、ソースコードの命令は変換される。一般的に、単一の入口と可能性として複数の出口を備える命令のシーケンスである基本ブロックの粒度で変換は実行される。一度基本ブロックが変換されると、その変換結果は、将来的な再使用のためメモリ内の変換キャッシュ（ｔｒａｎｓｌａｔｉｏｎ  ｃａｃｈｅ）（コードキャッシュとも呼ばれる）に保存される。最も積極的なＤＢＴシステムは、異なるレベルの最適化を実行する。ＴｒａｎｓｍｅｔａのＣＭＳ及び他のＤＢＴシステムは、これらの最適化レベルは“ｇｅａｒｓ”と呼ばれている。最初に、とても高速な変換（Ｇｅａｒ−１）が使用される。このｇｅａｒは、変換されたコードの質を犠牲にして、とても高速であることを目指している。このトレードオフは、例えばＯＳの起動コードのようにめったに実行されないコードに望ましい傾向がある。Ｇｅａｒ−１において、ＤＢＴは、“ホットな”（例えば、頻繁に実行される）基本ブロックを検出するために、プローブ（カウンター）もまた実装する。あるブロックが一度ホットになると、ブロックとそのブロックに相互に関連のある周囲のブロックは、リージョン（ｒｅｇｉｏｎ）へとマージされる。このリージョンは、次に、コードに追加の最適化を適用する、より高いｇｅａｒにより再変換される。この同様の戦略は、ｇｅａｒの任意の回数繰り返されることができる。実際には、ｇｅａｒベースのシステムは、より多くのリージョンのコードが総合実行時間に寄与すればするほど、より多くの時間が高速なコードを生成するためにそのコードを最適化するために費やされることを確実にする。
【０００７】
セット、回数及び適用される最適化の積極性は、ＤＢＴによって大きく異なる。典型的な最適化は、命令スケジューリング、デッドコード削除及び冗長性除去を含む。実際には、静的コンパイラ最適化と同様、ほとんどの関係する最適化のセットは、ターゲットのアーキテクチャに依存する。コンパイラ最適化と対照的に、ＤＢＴにおいては、これらの最適化は、高品質なコードを得るために用いられることのできる、正確な実行時の情報を有している。静的コンパイラと比べてＤＢＴの主たるデメリットは、最適化時間の割り当てが非常に厳しいことである。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
動的バイナリ変換（ＤＢＴ）が直面する課題は、ＤＢＴが招くオーバーヘッドである。このオーバーヘッドは、ホスト（“ターゲット”）ＩＳＡへ簡単にマッピングされないゲスト（“ソース”）ＩＳＡにおいて、比較的頻繁に用いられる機能に主として由来する。例えば、ソースＩＳＡがターゲットＩＳＡより大きなレジスタセットを有しているとき、ソースレジスタからターゲットレジスタへの効率的なレジスタマッピングを用いることは、例えばメモリアクセスのようなレジスタのエミュレーションオーバーヘッドを減らすために重要である。このことは、他のＩＳＡに比べて比較的少ない数の汎用／整数レジスタ（例えば、８及び１６）を有するｘ８６及びｘ８６−６４のようなターゲットＩＳＡにとって特に重要である。例えば、ＰｏｗｅｒＰＣ、ＡＲＭ及びＭＩＰＳ他のＩＳＡは３２個のレジスタを有し、Ｉｔａｎｉｕｍは１２８個のレジスタを有する。
【０００９】
レジスタマッピングの問題は、最適なマッピング（すなわち、最小のオーバーヘッドとなるマッピング）がソースバイナリコードシーケンスに高く依存する事実によってさらに悪化する。それゆえ、最適なマッピングは、コードの部分によって異なる。理想的には、それぞれのコードのリージョンは、コードのリージョンに最適であるレジスタマッピングを用いるべきである。
【課題を解決するための手段】
【００１０】
本開示書は、リージョンレベルのレジスタマッピングを提供するよう構成されるシステム及び方法を提供する。前記方法は、一つのリージョンにおけるそれぞれのバイナリコードブロックのため、前記リージョンにおいて最も頻繁にアクセスされるソースのプロセッサのレジスタのうち少なくともいくつかを、ターゲットのプロセッサのレジスタへマッピングすることを含む。最も頻繁にアクセスされるソースのプロセッサのレジスタは、ソースバイナリコードのブロックに対応するターゲットバイナリコードのブロックとともに実装される、カウンタを含むプローブから決定されることができる。最適化済ターゲットバイナリコードのブロックは、最適化のために選択されたリージョンのソースバイナリコードの各ブロックのために生成されることができる。最適化済ターゲットバイナリコードのブロックは、プロローグ、変換されたソースバイナリコードを含む本体、条件ジャンプ及び少なくとも一つのエピローグを含むことができる。プロローグは、リージョンのマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｉｎレジスタを読み込むよう構成される。条件ジャンプは、ソースバイナリコードのブロックの境界における分岐が、リージョン内の次のバイナリブロックであるか、リージョン内でない次のバイナリブロックであるかに基づいてフローを制御するよう構成される。エピローグは、次のバイナリブロックがリージョン内にあるときブロック本体へとジャンプし、次のバイナリブロックがリージョン内にないとき次のバイナリブロックの先頭へとジャンプするよう構成される。先頭は、別のリージョンの最適化済ターゲットバイナリコードブロックのプロローグ又は最適化されていないターゲットバイナリコードブロックに一致することができる。もし次のバイナリブロックがリージョン内にないとき、リージョンのｌｉｖｅ−ｏｕｔレジスタはメモリ内に保存されることができる。ターゲットバイナリコードの最適化済ブロックが実行されるたび、というよりむしろ、リージョン境界をまたぐとき、リージョンのマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｉｎレジスタを読み込むことにより、有利にメモリアクセスは減らされることができる。
【００１１】
本開示書に従う方法及び／又はシステムは、リージョンレベルのレジスタマッピングを提供するよう構成される。前記リージョンは、比較的複雑であり得る。当業者には明らかなように、例えば、任意のループのネスト、すなわちループの任意の組み合わせ、例えば親ループの内側の複数の兄弟を含むことができる。別の例では、リージョンは、例えばループへ入る複数の可能性のように、削減できないフローグラフに対応するターゲットバイナリコードブロックを含むことができる。リージョンは、隣接する及び／又は隣接しないターゲットバイナリコードブロックの形状を成すことができる。
【００１２】
クレームされる主題の特徴及び利点は、一致する実施態様の詳細な説明により明らかであるだろう。前記説明は、次に添付される図面への言及によって考慮されるべきである。
【図面の簡単な説明】
【００１３】
【図１】本開示書に従うメモリシステムを表す。
【図２Ａ】本開示書に従う動的バイナリ変換の例示的な処理のフローチャートを表す。
【図２Ｂ】本開示書に従うコード最適化のための例示的な処理のフローチャートを表す。
【図３】頻繁に実行されるコードブロックのリージョンを含む例示的な制御フローグラフを表す
【図４】本開示書に従うプロローグ、本体、条件ジャンプ及び少なくとも一つのエピローグを含む、例示的な最適化済ターゲットバイナリコードブロックを表す。
【図５】本開示書に従う最適化を含むターゲットバイナリコードを実行するための例示的な処理のフローチャートを表す。
【図６】図３の制御フローグラフに一致する例示的な最適化済の制御フローグラフを表す。
【図７】本開示書に従うブロックレベルレジスタマッピング及びリージョンレベルレジスタマッピングを含む動的バイナリ変換のパフォーマンスベンチマークの比較を示すグラフである。
【発明を実施するための形態】
【００１４】
図１は、本開示書に従うシステム１００を表す。システム１００は、システムメモリ１０４に接続されたプロセッサ（“ＣＰＵ”）１０２を有する。システム１００は、キャッシュメモリ１０５（システムメモリ１０４に含まれ得る）及び／又はキャッシュメモリと同類であるがソフトウェアによって管理されるスクラッチパッドメモリ１０７を有することができる。ＣＰＵ１０２は、複数のプロセッサレジスタ１０６−１、１０６−２、・・・、１０６−ｍ（合わせてプロセッサレジスタ１０６）を有することができる。ＣＰＵ１０２は、複数のコア処理ユニット（以下、“コア”又は単数で“コア”とする）を含むことができ、各コアは、複数のスレッドを実行するよう構成されることができる。システムメモリ１０４は、ソースバイナリアプリケーション１１０、動的バイナリ変換システム１１５及びホストオペレーティングシステム（“ＯＳ”）１２０を提供することができる。動的バイナリ変換システム１１５は、ターゲットバイナリコードブロック１１２、レジスタマッピングモジュール１１６を有する動的変換システムコード１１４及び／又はソースレジスタストレージ１１８を有することができる。ソースバイナリアプリケーション１１０は、ソースＩＳＡに対応する複数のソースバイナリコードブロックを含むことができる。ターゲットバイナリコードブロックは、ターゲットＩＳＡに対応する。ソースバイナリコードブロックは、例えばｅｎｄ  ｗｉｔｈのような分岐命令を含む一つ以上の命令のシーケンスである。ターゲットバイナリコードブロックは、対応するソースバイナリコードブロックの機能を有するよう構成される。最適化済ターゲットバイナリコードブロックは、最適化済ターゲットバイナリコードブロックの本体に、ソースバイナリコードブロックに対応する機能を含むことができる。最適化済ターゲットバイナリコードブロックは、ここで説明されるように追加の機能を含むことができる。
【００１５】
ターゲットバイナリコードブロック１１２は、“コードキャッシュ”１１１に指定されているシステムメモリ領域に保管されることができる。コードキャッシュ１１１は、例えば一つ以上の対応するソースバイナリコードブロックから変換されている一つ以上のターゲットバイナリコードブロックのような、ターゲットバイナリコードブロック１１２のストレージとして理解されることができる。システムメモリ１０４は、プロセッサレジスタ１０６へ／から、データを読み込む／保管するよう構成されるソースレジスタストレージ１１８を提供することができる。いくつかの実施形態において、キャッシュメモリ１０５及び／又はスクラッチパッドメモリ１０７は、プロセッサレジスタ１０６へ／からデータを読み込む／保管するよう構成されている。
【００１６】
動的バイナリ変換コード１１４及びレジスタマッピングモジュール１１６は、ソースバイナリアプリケーション１１０上でソースバイナリアプリケーション１１０のブロックをターゲットバイナリコードブロック１１２へと変換するために、一つ以上のコアによって実行されることができる。ソースバイナリコードブロックは、動的にターゲットバイナリコードブロックへと変換されることができる。言い換えると、ソースバイナリコードブロックは、静的にというよりはバイナリブロックを実行するための呼び出しに応じて、すなわち実行時に先立って、ターゲットバイナリコードブロックへと変換されることができる。ターゲットバイナリコードブロックは、次に、システムメモリ１０４の中のコードキャッシュ１１１の中に保管され、実行のためにＣＰＵ１０２へ提供されることができる。ソースバイナリコード１１０のブロックをターゲットバイナリコードブロック１１２へと変換することは、リージョンのレジスタアクセスの頻度に少なくとも部分的に基づいて、一つ以上のソースレジスタを一つ以上のターゲットレジスタ、例えばプロセッサレジスタ１０６へとマッピングすることを含むことができる。例えば、ソースＩＳＡは、Ｎｓ個のソースレジスタを有することができ、ターゲットＩＳＡはＮｔ個のターゲットレジスタ、例えばレジスタ１０６を有することができる。ここで、ＮｔはＮｓより小さい。
【００１７】
図２Ａは、動的バイナリ変換のフローチャート２００を表す。フローチャート２００の処理は、動的バイナリ変換コード１１４によって実行されることができる。プログラムフローは、バイナリコードブロックを実行するための呼び出し２０２を受けて開始することができる。バイナリコードブロックを実行するための呼び出し２０２に先立って、ソースバイナリアプリケーション１１０はシステムメモリ１０４に読み込まれていることは明らかである。処理２０４において、一つ以上のターゲットバイナリコードブロックがコードキャッシュ、例えばコードキャッシュ１１１内にあるかどうかが決定されることができる。各ターゲットバイナリコードブロックは、ソースバイナリアプリケーション１１０のソースバイナリコードブロックに対応する。ターゲットバイナリコードブロックがコードキャッシュ内にないとき、処理２０６は、ソースバイナリコードブロックをターゲットバイナリブロックへと変換し、プローブを実装し、ターゲットバイナリブロック及びプローブをコードキャッシュ内に保存することを含むことができる。この変換は、相対的に高速であるよう構成されることができる。例えば、プローブは、バイナリブロックが実行される回数のカウントを保持するよう構成されるカウンタを含むことができる。ソースプロセッサレジスタは、レジスタストレージ、例えばシステムメモリ１０４、キャッシュメモリ１０５及び／又はスクラッチパッドメモリ１０７内のソースレジスタストレージ１１８へとマッピングされることができる。プログラムフローは、次に、処理２１１へと進む。処理２１１において、変換されたコードブロックが実行されることができる。もし処理２０４において、ターゲットバイナリコードブロックがコードキャッシュ内にあるとき、プログラムフローは、処理２０８へと進むことができる。
【００１８】
処理２０８において、閾値に達しているかどうかが決定されることができる。閾値に達しているかどうかは、コードブロックを実行するための先の呼び出しに応じ、処理２０６で実装されたプローブに少なくとも部分的に基づいて決定されることができる。例えば、バイナリブロックが実行されるたびにカウントがインクリメントされることができる。カウントが所定の閾値に達したら、プローブは、プログラムフロー（すなわち、分岐）をさらなる処理のため動的バイナリ変換ソフトウェアに戻すよう構成されることができる。所定の閾値は、最適化により利益を得る、相対的に頻繁に実行されるバイナリブロックを示すよう構成されることができる。閾値に達していないとき、プログラムフローは、処理２１１へと進み、変換されたコードブロックを実行する。閾値に達しているとき、プログラムフローは処理２１０へと進むことができ、コードを最適化することができる。コードの最適化２１０は、ここで述べられたように、リージョン構成及びレジスタマッピングを含むよう構成される。プログラムフローは、次に、処理２１１へと進むことができ、変換されたコードブロックを実行することができる。
【００１９】
図２Ｂは、本開示書に従ったコード最適化のフローチャート２１０を表す。プログラムフローは、開始２１２から開始することができる。フローチャート２１０の処理は、レジスタマッピングモジュール１１６を有する動的バイナリ変換コード１１４によって実行されることができる。処理２１４において、類似閾値に一致する及び／又は超える、近隣バイナリブロックの探索が実行されることができる。近隣バイナリブロックは、コード最適化が引き起こされるバイナリブロックに関連することができる。例えば、近隣バイナリブロックは、コード最適化が引き起こされるバイナリブロックの直前又は直後に実行されるよう構成されることができる。近隣バイナリブロックは、コード最適化を引き起こしているバイナリブロックに隣接し、かつ／又は分岐もしくはジャンプによってコード最適化を引き起こしているバイナリブロックに関係することができる。バイナリブロック間又はバイナリブロック内の類似とは、バイナリブロックの実行可能性の相互関係として理解されることができる。例えば、前記相互関係は、一つのバイナリブロックから別のバイナリブロックへの分岐に起因することができる。処理２１６において、類似閾値に一致し、かつ／又は、超える近隣ブロックを含む、リージョンが次に構成されることができる。
【００２０】
処理２１８において、リージョン内でアクセスされた各ソースレジスタのために、アクセス回数が決定されることができる。リージョンにおける命令は、ソースレジスタを用いる、すなわちソースレジスタから読みこむことができ、かつ／又は、ソースレジスタを定義する、すなわちソースレジスタに書きこむことができる。レジスタアクセス、すなわちレジスタの使用とは、レジスタの使用及び／又は定義を含む。レジスタマッピングは、リージョンにおける各ソースレジスタの総アクセス回数に基づくことができる。
【００２１】
例えば、処理２１６において構成されたリージョンは、一つ以上のバイナリコードブロックを含むことができる。バイナリブロックの実行回数のカウントを含むプローブは、各バイナリコードブロックと関連付けられることができる。各バイナリブロックのために、レジスタアクセス回数は、バイナリブロックの実行回数、バイナリブロックの命令及び各命令によってアクセスされるレジスタのカウントに基づいて決定されることができる。リージョンにおいてアクセスされる各レジスタの総アクセス回数は、次に、リージョンにおける各バイナリブロックにおける各レジスタへのアクセス回数の和によって決定されることができる。
【００２２】
図３は、例示的なコードのリージョン３０５を有する例示的な制御フローグラフ３００を表す。制御フローグラフは、ブロックＡ３１０、ブロックＢ３２０、ブロックＣ３３０、ブロックＤ３４０及びブロックＥ３５０の５つのコードのブロックを有する。各ブロックは、例えば処理２０６（図２Ａ）において実装されたプローブに基づいて決定された、ブロックの実行回数に対応する、関連したカウント３１２、３２２、３３２、３４２及び３５２を有する。例えば、ブロックＡ、ブロックＣ及びブロックＥはそれぞれ、１０の関連したカウントを有し、ブロックＢは１０００の関連したカウントを有し、ブロックＤは９９０の関連したカウントを有する。この例において、ブロックＢは、図２Ａの処理２０８について説明された所定の閾値を満たしていることができる。すなわち、ブロックＢは、頻繁に実行されるソースバイナリコードブロックである。ブロックＡ、ブロックＣ及びブロックＤは、ブロックＢに関して近隣ブロックであることができる。類似閾値と一致／超える近隣ブロックを探索する、図２Ｂの処理２１４は、ブロックＤを得ることができる。ブロックＤは、ブロックＢに関して類似閾値と一致又は超える近隣ソースバイナリコードブロックである。
【００２３】
類似とは、頻繁に実行されるソースバイナリコードブロック及び近隣ソースバイナリコードブロックの実行可能性の相互関係に対応する。言い換えれば、ブロックＢは、相対的に高い実行（ｃｏｕｎｔ＝１０００）可能性を有する。ブロックＤもまた、相対的に高い実行（ｃｏｕｎｔ＝９９０）可能性を有する。カウント情報が過去に使われたものであり、かつ、将来の実行頻度は変わる可能性があるため、“実行可能性”の語が用いられている。ブロックＤの実行可能性は、例えばブロックＢとブロックＤとの間の分岐に基づいて、ブロックＢの実行可能性に関係している。言い換えると、ブロックＤの実行可能性は、ブロックＢの実行可能性と相互に関係している。
【００２４】
５つのコードのブロックを有するこの例では、それぞれ１０００及び９９０の相対的に高い実行頻度（すなわちカウント）であり、かつ、類似閾値と一致又は超えるブロックＢ及びブロックＤが、リージョン３０５に含まれている。ブロックＢの命令は、レジスタｒ１、ｒ２、ｒ３、ｒ４及びｒ５にアクセスする。レジスタｒ１及びｒ４は定義され（書き込まれ）、レジスタｒ１、ｒ２、ｒ３、ｒ４及びｒ５が使用され（読み込まれ）る。言い換えると、ブロックＢの各実行のため、ｒ１及びｒ４は二度アクセスされ、残るレジスタはそれぞれ一度アクセスされる。したがって、１０００の実行頻度であるブロックＢにおいて、ｒ１及びｒ４は、それぞれ２０００回アクセスされ、残るレジスタはそれぞれ１０００回アクセスされる。ブロックＤは、レジスタｒ２に二度アクセス（一回の読み込みと一回の書き込み）し、かつ、レジスタｒ５に一度アクセス（読み込み）する命令を一つ有する。したがって、９９０の実行頻度であるブロックＤにおいて、ｒ２は１９８０回アクセスされ、ｒ５は９９０回アクセスされる。それゆえ、ブロックＢ及びブロックＤを含むリージョン３０５のために、ｒ１は合計２０００回、ｒ２は合計２９８０回、ｒ３は合計１０００回、ｒ４は合計２０００回、ｒ５は合成１９９０回アクセスされる。レジスタアクセス回数によって、最も頻繁にアクセスされるものから最も少なくアクセスされるものへとレジスタをソートすると、ｒ２、ｒ１とｒ４、ｒ５、ｒ３となる。
【００２５】
図２Ｂを再び参照し、処理２２０において、ソースレジスタはターゲットレジスタにマッピングされることができる。リージョンのもっとも高いアクセス回数、すなわち最も頻繁にアクセスされるものに対応するソースレジスタは、ターゲットレジスタにマッピングされることができる。例えば、ターゲットＩＳＡはＮｔ個のターゲットプロセッサレジスタを有することができ、ソースＩＳＡはＮｓ個のソースプロセッサレジスタを有することができる。ここで、ＮｔはＮｓより小さい。Ｎｔ個のターゲットプロセッサレジスタのうち、Ｎ個はマッピングに使用可能である。ここでＮはＮｔより小さいか、Ｎｔと等しい。図３において説明される例によって続けると、Ｎが３であるとき、その結果レジスタｒ１、ｒ２及びｒ４がリージョンのターゲットプロセッサレジスタへとマッピングされることができる。レジスタｒ３及びｒ５は、ターゲットプロセッサレジスタへマッピングされることができず、それゆえ、必要に応じてメモリから検索される。
【００２６】
いくつかの実施形態において、マッピングに利用可能なターゲットプロセッサレジスタの数であるＮは、ターゲットＩＳＡのプロセッサレジスタの数Ｎｔより小さい可能性がある。言い換えると、一つ以上のターゲットプロセッサレジスタは、例えばマッピングされないソースレジスタを使用又は定義する命令のために予約されることができる。例えば、１又は２つのターゲットプロセッサレジスタは、そのような命令のために予約されることができる。
【００２７】
表１は、リージョンにおける各ソースレジスタのレジスタアクセスの総数を決定し、Ｎ個のソースレジスタをＮ個のターゲットレジスタにマッピングするための一つの例に対応する擬似コードを有する。
【００２８】
【表１】
2012003761.tif 000003
したがって、処理２２０の完了時において、Ｎ個のソースレジスタは、Ｎ個のターゲットレジスタにマッピングされることができる。ターゲットレジスタにマッピングされないソースレジスタは、システムメモリ内１０４、キャッシュメモリ１０５及び／又はスクラッチパッドメモリ１０７のソースレジスタストレージ１１８にマッピングされることができる。
【００２９】
処理２２２において、ｌｉｖｅ−ｉｎ及び／又はｌｉｖｅ−ｏｕｔレジスタは、リージョンの各バイナリブロックのために特定されることができる。ｌｉｖｅ−ｉｎは、バイナリブロックにおいて初めて定義（すなわち、書き込む）されることなく、バイナリブロックにおいて使用される（すなわち、読み込む）レジスタに相当する。例えば、図３において示されるリージョン３０５において、レジスタｒ２、ｒ３及びｒ５は、ブロックＢにおいて初めて定義されることなく使用され、レジスタｒ２はブロックＤにおいて定義される前に使用されている。したがって、レジスタｒ２、ｒ３及びｒ５は、リージョン３０５のｌｉｖｅ−ｉｎである。ｌｉｖｅ−ｏｕｔは、レジスタの値がバイナリブロック内の命令によって変更されている可能性があるレジスタに相当する。例えば、リージョン３０５において、レジスタｒ１及びｒ４の値は、ブロックＢの命令によって変更される可能性があり、ｒ２の値はブロックＤの命令によって変更される可能性がある。したがって、ｒ１、ｒ２及びｒ４がリージョン３０５のｌｉｖｅ−ｏｕｔである。いくつかの実施形態において、処理２２２表す点線の四角の外形によって示される、処理２２２が実行されなくても良い。
【００３０】
処理２２４において、例えばリージョン３０５の、リージョンにおける各バイナリブロックのため、最適化済ターゲットバイナリコードブロックが生成されることができる。例えば、それぞれの最適化済ターゲットバイナリコードブロックは、プロローグ、対応するソースバイナリコードブロックの変換されたソースコード及び条件ジャンプを含むブロック本体及び少なくとも一つのエピローグを含むことができる。図４は、プロローグ４１０、ブロック本体４２０及び２つのエピローグ４３０、４４０を有するターゲットコードブロック４００の例を表す。条件ジャンプは、ブロック本体４２０に含まれる。
【００３１】
プロローグは、例えばソースレジスタストレージ１１８から、マッピング済ソースレジスタ又はマッピング済ｌｉｖｅ−ｉｎソースレジスタに対応するデータとともに、ターゲットレジスタを読み込むよう構成される。マッピング済ソースレジスタ又はマッピング済ｌｉｖｅ−ｉｎソースレジスタが読み込まれるかどうかは、オーバーヘッド、すなわちリージョンに入るときに全てのマッピング済ソースレジスタを読み込むことに関連するオーバーヘッドに対する、リージョンにおけるそれぞれのソースバイナリコードブロックのｌｉｖｅ−ｉｎソースレジスタを特定することに関連するオーバーヘッドに依存することができる。例えば、リージョン３０５において、図３に示されるように、レジスタｒ１、ｒ２及びｒ４はリージョン３０５のためにターゲットレジスタへとマッピングされている。したがって、この例において、ブロックＢ及びブロックＤに関連する各プロローグは、それぞれ、ソースレジスタｒ１、ｒ２及びｒ４をメモリからターゲットレジスタへと読み込むよう構成されることができる。別の例では、レジスタｒ２は、リージョン３０５のマッピング済であり、かつ、ｌｉｖｅ−ｉｎである。したがって、ブロックＢ及びブロックＤに関連する各プロローグは、それぞれ、レジスタｒ２を読み込むよう構成され、結果としてマッピング済ソースレジスタの全て（すなわち、ｒ１、ｒ２及びｒ４）を読み込むことに比べてより少ないメモリアクセスとなる。
【００３２】
少なくとも一つのエピローグは、第一のエピローグ及び第二のエピローグを有することができる。条件ジャンプは、ソースバイナリコードブロックを終了させる分岐が、リージョン内ターゲットバイナリコードブロックか、リージョン内でないターゲットバイナリコードブロックかに基づき、フローが第一のエピローグに進むか第二のエピローグに進むか制御するよう構成される。リージョン内ターゲットバイナリコードブロックは、ここで説明されるように、最適化済ターゲットバイナリコードブロックである。リージョン内でないターゲットバイナリコードは、最適化されていないターゲットバイナリコードブロック又は別のリージョンに関連する最適化済ターゲットバイナリコードブロックである。
【００３３】
第一のエピローグは、リージョン内ターゲットバイナリコードブロックへのジャンプを有する。例えば、図３を再度参照して、ブロックＢからブロックＤへのジャンプは、リージョン内ターゲットバイナリコードブロックに相当する。第二のエピローグは、例えばリージョン３０５内でない、リージョンの外部にあるターゲットバイナリコードブロックへのジャンプを有する。第二のエピローグは、次のターゲットバイナリコードブロックへジャンプする前にｌｉｖｅ−ｏｕｔレジスタを保存するようさらに構成される。ここで説明されるように、ｌｉｖｅ−ｉｎレジスタを読み込むのと同様に、第二のエピローグは次のターゲットバイナリコードブロックへジャンプする前にマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｏｕｔレジスタを保存するよう構成されることができる。
【００３４】
再度図３を参照して、ブロックＢからブロックＣへのジャンプは、リージョン外のターゲットバイナリコードブロックへのジャンプに相当する。リージョン内ターゲットバイナリコードへのジャンプは、リージョン内バイナリコードブロックに関連するプロローグをバイパスし、リージョン内バイナリコードブロックの本体へジャンプするよう構成される。リージョン外ターゲットバイナリコードブロックへのジャンプは、リージョン外ターゲットバイナリコードブロックの先頭へジャンプするよう構成される。リージョン外ターゲットバイナリコードブロックが別のリージョンに関連する最適化済ターゲットバイナリコードブロックであるとき、前記ジャンプは前記最適化済ターゲットバイナリコードブロックのプロローグへなされる。
【００３５】
当然のことながら、実行時のシステム、すなわちホストオペレーティングシステム１２０は、例えば割り込み処理のようなターゲットコードにより直接処理されない可能性のある機能を実行するよう構成される。これらの機能を適切に処理するため、ゲストの状態は一致した時点、すなわち、メモリ内の適切なデータ構造において一致するゲストの状態にあることが重要である。ゲストの状態は、ブロックの実行中に一致するのではなく、ブロックの境界において一致すればよい。したがって、動的バイナリ変換は、例えばオープンソースＱＥＭＵのように、コードブロックの最後まで割り込み処理を延期するよう構成される。ブロックの最後において一致したゲストの状態を保つため、リージョン内のブロックへジャンプした後、実行時システムへ戻る前に、ｌｉｖｅ−ｏｕｔレジスタ（例えばソースレジスタストレージ１１８内）は、保存される。リージョン内でないブロックへのジャンプのため、ｌｉｖｅ−ｏｕｔレジスタは、リージョン内でないブロックへのジャンプの前に保存されることができる。リージョン内でないブロックへのジャンプの後、制御は実行時システムへと戻ることができる。
【００３６】
図５は、少なくとも一つの最適化済ターゲットバイナリコードブロックを有する少なくとも一つの最適化されたコードリージョンを有するソースバイナリアプリケーションに対応するターゲットバイナリコードブロックを実行するための例示的な処理のフローチャート５００を表す。プログラムフローは、開始５０２において開始されることができる。開始５０２は、少なくとも一つの最適化済ターゲットコードブロックを有する最適化済ターゲットバイナリコードの第一のリージョンへの入り口に相当する。処理５０４において、第一のリージョンにおける第一の最適化済ターゲットバイナリコードブロックのプロローグが実行されることができる。プロローグは、マッピング済レジスタ又はマッピング済ｌｉｖｅ−ｉｎレジスタを、ここに説明されるように、メモリから読み込むよう構成される。
【００３７】
第一の最適化済ターゲットバイナリコードブロックの本体は、次に、処理５０６において実行されることができる。第一の最適化済ターゲットバイナリコードブロックに対応するソースバイナリコードブロックの境界において、分岐が、第一のリージョンにおけるターゲットバイナリコードブロックへなされるかどうか処理５０８において決定されることができる。もし分岐が第一のリージョンでないターゲットバイナリコードブロックへなされるとき、処理５１０において、マッピング済レジスタ又はマッピング済ｌｉｖｅ−ｏｕｔレジスタは、例えばソースレジスタストレージ１１８のようなメモリに保存されることができる。第一のリージョンでない、次のターゲットバイナリコードブロックの先頭へのジャンプが、処理５１２において実行されることができる。次のターゲットバイナリコードブロックは、最適化されている可能性もあり、また、されていない可能性もある。次のターゲットバイナリコードブロックが最適化されていないとき、次のソースバイナリコードブロックに対応する次のターゲットバイナリコードブロックが、処理５１４において実行されることができる。例えば第二のリージョンにおける次のターゲットバイナリコードブロックが最適化されているとき、（第二のリージョンにおける次のターゲットバイナリコードブロックの）プロローグが処理５０４において実行されることができ、続いて処理５０６において次のターゲットバイナリコードブロックの本体の実行がなされる。
【００３８】
処理５０８において、分岐が第一のリージョンにおけるターゲットバイナリコードブロックになされることが決定されると、次のターゲットバイナリコードブロックの本体へのジャンプが処理５１６において実行されることができる。いくつかの実施形態において、レジスタは、例えば実行時システムによって割り込み処理を容易にするため、メモリ内に保存されてもよい。これらの実施形態において、実行時システムへ戻る必要があるかどうかは、処理５１７において決定されることができる。実行時システムへ戻る必要がないとき、プログラムフローは、処理５０６へ進むことができ、次に、（次のターゲットバイナリコードブロックの）本体が処理５０６において実行されることができる。実行時システムへ戻る必要があるとき、処理５１８においてレジスタはメモリ内に保存されることができ、プログラムフローは、処理５２０において実行時システムへ進むことができる。実行時システムから戻るとき、プログラムフローは、処理５０４へ進むことができ、プロローグを実行することができる。このとき、レジスタはメモリから読み込まれることができる。
【００３９】
図４及び図５を参照すると、処理５０８において、分岐がリージョン内の次のたーゲッバイナリコードになされるかどうか決定することは、最適化済ターゲットバイナリコードブロックの本体４２０の条件ジャンプ（ｊＣＣ  Ｔ）に相当する。処理５１６は、第一のエピローグ４３０に相当し、リージョン内の本体へジャンプする。処理５１０及び５１２は、第二のエピローグ４４０に相当する。
【００４０】
図６は、図３において表される制御フローグラフ３００の例に対応する、最適化済の制御フローグラフ６００を表す。最適化済の制御フローグラフ６００において、ターゲットブロックＢ６２０は、図３の制御フローグラフのブロックＢ３２０に対応し、ターゲットブロックＤ６４０は、制御フローグラフ３００のブロックＤに対応する。ターゲットブロックＢ及びターゲットブロックＤは、図４のターゲットコードブロックに従って構成される。最適化済の制御フローグラフ６００におけるターゲットバイナリコードブロック間の制御フローは、フローが、一つのリージョンにおけるターゲットバイナリコードブロック間であるか、前記リージョンにおけるターゲットバイナリコードブロックと前記リージョンでないターゲットバイナリコードブロックとの間であるかに依存する。前記リージョンでないターゲットバイナリコードブロックとは、別のリージョンに関連する最適化済ターゲットバイナリコードブロックである可能性があり、あるいは、最適化されていないターゲットバイナリコードブロックである可能性がある。例えば、ターゲットブロックＢからリージョン６０５の外であるブロックＣへの制御フローは、ターゲットブロックＢの（マッピング済又はマッピング済ｌｉｖｅ−ｏｕｔを保存する）エピローグ２からブロックＣへ（すなわち、ブロックＣの先頭へ）となり、ブロックＣからターゲットブロックＤへの制御フローは、ブロックＣからターゲットブロックＤのプロローグ（マッピング済又はマッピング済ｌｉｖｅ−ｉｎを読み込む）へとなる。共にリージョン６０５内のターゲットブロックＢとターゲットブロックＤ間の制御フローは、それぞれ、パス６２４及びパス６４２によって示されるように、ブロックＢ又はブロックＤのエピローグ１からブロックＤ又はブロックＢの本体へとなる。
【００４１】
したがって、最適化済の制御フローグラフ６００に示されるように、プロローグはリージョンへの入り口においてのみ実行される。リージョン内のターゲットバイナリコードブロック間のジャンプは、プロローグとマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｉｎレジスタに関連するメモリアクセスをバイパスし、ターゲットバイナリコードブロックの本体へとジャンプするよう構成される。有利に、このことはパフォーマンスの改善、例えば相対的に頻繁に実行されるコードのリージョンのための速度の向上をもたらすことができる。最適化済ターゲットバイナリコードブロックの複数のリージョンは、ソースアプリケーションのために生成されることができる。有利に、レジスタマッピングは、それぞれのリージョンのために、他のリージョンのために最適化されたレジスタマッピングとは独立して、最適化されることができる。このように、最適化はリージョン特有である。いくつかの実施形態において、マッピング済レジスタ又はマッピング済ｌｉｖｅ−ｏｕｔレジスタを保存することは、さらなるパフォーマンス向上のため、リージョンを抜けるときのみ実行されても良い。
【００４２】
図７は、ブロックレベルでのレジスタマッピングを実装した動的バイナリ変換７１０、７２０、７３０、７４０、７５０と、本開示書に従うリージョンレベルでのレジスタマッピング７１５、７２５、７３５、７４５、７５５とのパフォーマンスベンチマークの比較を示すグラフである。パフォーマンスは、オープンソースのＱＥＭＵ動的バイナリ変換（レジスタをメモリにマップする）と相対的に示される。ブロックレベルレジスタマッピングにおいて、マッピング済ｌｉｖｅ−ｉｎレジスタは、各ターゲットコードブロックに入るときに読み込まれ、マッピング済ｌｉｖｅ−ｏｕｔレジスタは、各ターゲットコードブロックを出るときに保存される。本開示書に従って示されたリージョンレベルレジスタマッピングに係る実施形態は、リージョンに入るときマッピング済ｌｉｖｅ−ｉｎレジスタを（メモリから）読み込み、リージョンを出るときｌｉｖｅ−ｏｕｔレジスタを（メモリに）保存する。全てのベンチマーク結果で、本開示書に従うリージョンレベルレジスタマッピングは、基準としたＱＥＭＵ及びブロックレベルレジスタマッピングに比べてパフォーマンスを改善した。平均では、ベンチマークのパフォーマンス改善は、ブロックレベルレジスタマッピングと比較して１７％程度の、ＱＥＭＵ基準と比較して３１％程度であった。
【００４３】
したがって、ターゲットプロセッサレジスタがソースプロセッサレジスタより少ないとき、本開示書に従う方法及びシステムは、動的バイナリ変換においてソースプロセッサレジスタをターゲットプロセッサレジスタにマッピングすることを含む。“ホット”であると決定された、すなわち相対的に頻繁に実行されるコードのリージョンについて、各ソースレジスタへのアクセス回数が決定されることができる。最も頻繁にアクセスされるソースレジスタは、次に、利用可能なターゲットレジスタへとマッピングされることができる。リージョン内のソースバイナリコードの各ブロックについて、最適化済ターゲットバイナリコードの対応するブロックは、プロローグ、変換されたソースコード及び条件ジャンプを含む本体、及び少なくとも一つのエピローグを含むよう生成されることができる。条件ジャンプ及び少なくとも一つのエピローグは、第一のターゲットバイナリコードブロックから、リージョン内の次のターゲットバイナリブロックへ分岐するか、リージョン内でない次のターゲットバイナリブロックへ分岐するかに基づいて、フローを制御するよう構成される。次のターゲットバイナリコードブロックがリージョン内であるとき、次に、ジャンプはプロローグをバイパスし、次のターゲットバイナリコードブロックの本体へ向けられる。次のバイナリコードブロックがリージョン内でないとき、次に、ジャンプは次のターゲットバイナリコードブロックの先頭へ向けられる。プロローグは、メモリから、リージョンのマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｉｎレジスタを読み込むよう構成される。次のターゲットバイナリコードブロックがリージョン内にないとき、次に、一つのエピローグは、次のターゲットバイナリコードブロックの先頭へジャンプする前に、マッピング済レジスタ又はマッピング済ｌｉｖｅ−ｏｕｔレジスタを保存するよう構成される。このように、リージョンに入るとき、メモリからマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｉｎレジスタがメモリから読み込まれ、リージョンを出るときマッピング済レジスタ又はマッピング済ｌｉｖｅ−ｏｕｔレジスタがメモリに保存される。その結果、ブロックレベルレジスタの読み込み／保存に比べてメモリアクセスが減少する。
【００４４】
ここで説明するように、最適化は、ターゲットバイナリコードブロックと共に挿入される、カウンタを含むプローブに依存する。したがって、カウンタに基づいて決定される実行頻度は、有限時間を示す。コードのリージョンの実行頻度が時間と共に変化するとき、最適化によって得られた初期のパフォーマンス改善は低下する、すなわち最適でなくなる可能性がある。最適化が繰り返され得るが、ここで述べられた手順を繰り返すかどうかは、前に最適化済ターゲットバイナリコードブロックを実行するための時間に対する最適化を実行するための時間の考慮に依存し得る。
【００４５】
もちろん、図２Ａ、２Ｂ及び５は、いくつかの実施形態による例示的な処理を表すが、他の実施形態において、図２Ａ、図２Ｂ及び／又は図５に表される処理の全ては必要でない可能性があることを理解される。実際に、本開示書の他の実施形態は、図２Ａ、図２Ｂ及び／又は図５に表された処理及び／又は追加の処理のサブコンビネーションを含むことができることが完全に予定されている。したがって、一つの図面に厳密に表されない機能及び／又は処理を対称にするクレームは、本開示書の範囲及び内容に含まれるとみなされる。
メモリ１０４、キャッシュメモリ１０５及び／又はスクラッチパッドメモリ１０７は、一つ以上の次のメモリの種類を含むことができる：半導体ファームウェアメモリ、プログラマブルメモリ、不揮発性メモリ、リードオンリーメモリ、電気的にプログラム可能なメモリ、ランダムアクセスメモリ、フラッシュメモリ、磁気ディスクメモリ及び／又は光学ディスクメモリ。追加的にか、あるいは代替的に、メモリ１０４、キャッシュメモリ１０５及び／又はスクラッチパッドメモリ１０７は、他の及び／又は後発のコンピュータ読み取り可能なメモリの種類を有することができる。
【００４６】
ここで述べられた方法の実施形態は、プロセッサ及び／又は他のプログラム可能なデバイスを用いて実装されることができる。そのために、ここで述べられた方法は、前記方法を実行する一つ以上のプロセッサによって実行されるとき、命令を保管する具体的なコンピュータ読み取り可能な媒体に実装されることができる。ストレージ媒体は、いかなる種類の具体的な媒体を含むことができる。例えば、フロッピー（登録商標）ディスク、光学ディスク、ＣＤ−ＲＯＭ（ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）、ＣＤ−ＲＷ（ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅｗｒｉｔａｂｌｅｓ）及び光磁気ディスクを含むいかなる種類のディスク、
ＲＯＭ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）のような半導体デバイス、ダイナミックＲＡＭ及びスタティックＲＡＭのようなＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｉｅｓ）、ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）、ＥＥＰＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｂａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）、フラッシュメモリ、磁気若しくは光学カード、又は電子的な命令を保存するために適切ないかなる種類の媒体を含む。
【００４７】
明確に他で規定される場合を除き、先立つ議論から明らかなように、明細書の議論を通して、“動作”“処理”“演算”“計算”“決定”又はそれと同様のような用語の使用は、コンピューティングシステムのレジスタ及び／若しくはメモリ内の電子のような物理的な数値として表現されたデータを、同様にコンピューティングシステムのメモリ、レジスタ若しくは他の情報ストレージ、送信デバイス若しくはディスプレイデバイス内の物理的な数値として同様に表現された他のデータへ操作する並びに／又は変換することに言及する。
【００４８】
いかなる本実施形態においても使用される“回路”とは、配線で接続された回路、プログラム可能な回路、ステートマシン回路及び／又はプログラム可能な回路により実行される命令を保存するファームウェアの、例えば一つずつ又は任意の組み合わせを含むことができる。
【００４９】
一つの態様に従って、一つの方法が開示される。前記方法は、コンピュータシステムの実行のための複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階を含むことができる。前記コンピュータシステムは、メモリとＮｔ個のターゲットレジスタを有する処理ユニットを有することができ、ここで、Ｎｔは、対応するソース命令セットアーキテクチャにおけるソースレジスタの数であるＮｓより小さい。前記方法は、前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階；並びに
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの近隣ソースバイナリコードブロックを含むリージョンを定義する段階であって、
前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの近隣ソースバイナリコードブロックは少なくとも一のソースレジスタアクセスを有し、かつ、それぞれ分岐命令によって境界される、段階；をさらに含むことができる。前記方法は、前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を決定する段階；
前記リージョン内で最も頻繁にアクセスされるＮ個のソースレジスタの各々を、前記のＮｔ個のターゲットレジスタの各々へそれぞれマッピングする段階であって、ＮはＮｔより小さい又は等しい、段階；及び
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階；をさらに含むことができる。
【００５０】
別の態様に従って、プロセッサによって実行されるとき、次の処理をもたらす命令を保存する具体的なストレージ媒体を有する物品が開示される。前記処理とは、実行のために複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階であって、前記プロセッサはＮｔ個のターゲットレジスタを有し、ここでＮｔは、ソース命令セットアーキテクチャに対応するソースレジスタの数であるＮｓ個より小さい、段階；
前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階；
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの隣接ソースバイナリコードブロックを含むリージョンを定義する段階であって、前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの隣接ソースバイナリコードブロックは少なくとも一のソースレジスタアクセスを有し、かつ、分岐命令によってそれぞれ境界される、段階；
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する段階；
前記リージョン内で最も頻繁にアクセスされるＮ個のソースレジスタの各々を、前記のＮｔ個のターゲットレジスタの各々へそれぞれマッピングする段階であって、ＮはＮｔより小さい又は等しい、段階；並びに
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階；である。
【００５１】
さらに別の態様により、システムが開示される。前記システムは、Ｎｔ個のターゲットレジスタを有するプロセッサであって、ここでＮｔは、対応するソース命令セットアーキテクチャにおけるソースレジスタの数であるＮｓより小さい、プロセッサ；並びに
動的バイナリ変換ソフトウェア、レジスタマッピングモジュールソフトウェア及び前記プロセッサ上で実行されるべき複数のソースバイナリコードブロックを含むソースバイナリアプリケーションを含むメモリであって、前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアが前記プロセッサ上で実行されるとき、少なくとも前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアのうち一つがプロセッサに：
前記ソースバイナリアプリケーションの実行中に、前記ソースバイナリアプリケーション内の頻繁に実行されるソースバイナリコードブロックを特定する処理；
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの隣接ソースバイナリコードブロックを有するリージョンを定義する処理であって、前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの隣接ソースバイナリコードブロックは少なくとも一のソースレジスタアクセスを有し、かつ、分岐命令によってそれぞれ境界される、処理；
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する処理；
前記リージョン内で最も頻繁にアクセスされるＮ個のソースレジスタの各々を、前記のＮｔ個のターゲットレジスタの各々へそれぞれマップする処理であって、ＮはＮｔより小さい又は等しい、処理；並びに
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する処理を行わせることができる。
【００５２】
ここで採用されている用語及び表現は、説明の用語として用いられ、制限としては用いられない。そのような用語及び表現の使用に際し、図示されかつ説明される（又はそれに関する一部分）機能のいかなる均等物を除外する意図はない。様々な変更がクレームの範囲内で可能であることが認識される。したがって、クレームはそのような均等物すべてをカバーするよう意図されている。
【符号の説明】
【００５３】
１０４  システムメモリ
１０５  キャッシュメモリ
１０６  レジスタ
１０７  スクラッチパッドメモリ
１１０  ソースバイナリアプリケーション
１１１  コードキャッシュ
１１２  ターゲットバイナリコードブロック
１１４  ＤＢＴコード
１１６  レジスタマッピング
１１８  ソースレジスタストレージ
１２０  ＯＳ
【図１】
2012003761.tif 000004
【図２Ａ】
2012003761.tif 000005
【図２Ｂ】
2012003761.tif 000006
【図３】
2012003761.tif 000007
【図４】
2012003761.tif 000008
【図５】
2012003761.tif 000009
【図６】
2012003761.tif 000010
【図７】
2012003761.tif 000011