JP2004280795A - エクストリームパイプライン及び最適化再配列技術 - Google Patents
エクストリームパイプライン及び最適化再配列技術 Download PDFInfo
- Publication number
- JP2004280795A JP2004280795A JP2004044906A JP2004044906A JP2004280795A JP 2004280795 A JP2004280795 A JP 2004280795A JP 2004044906 A JP2004044906 A JP 2004044906A JP 2004044906 A JP2004044906 A JP 2004044906A JP 2004280795 A JP2004280795 A JP 2004280795A
- Authority
- JP
- Japan
- Prior art keywords
- legacy
- instruction
- native
- instructions
- binary
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B01—PHYSICAL OR CHEMICAL PROCESSES OR APPARATUS IN GENERAL
- B01F—MIXING, e.g. DISSOLVING, EMULSIFYING OR DISPERSING
- B01F27/00—Mixers with rotary stirring devices in fixed receptacles; Kneaders
- B01F27/80—Mixers with rotary stirring devices in fixed receptacles; Kneaders with stirrers rotating about a substantially vertical axis
- B01F27/91—Mixers with rotary stirring devices in fixed receptacles; Kneaders with stirrers rotating about a substantially vertical axis with propellers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B01—PHYSICAL OR CHEMICAL PROCESSES OR APPARATUS IN GENERAL
- B01F—MIXING, e.g. DISSOLVING, EMULSIFYING OR DISPERSING
- B01F27/00—Mixers with rotary stirring devices in fixed receptacles; Kneaders
- B01F27/05—Stirrers
- B01F27/09—Stirrers characterised by the mounting of the stirrers with respect to the receptacle
- B01F27/091—Stirrers characterised by the mounting of the stirrers with respect to the receptacle with elements co-operating with receptacle wall or bottom, e.g. for scraping the receptacle wall
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B01—PHYSICAL OR CHEMICAL PROCESSES OR APPARATUS IN GENERAL
- B01F—MIXING, e.g. DISSOLVING, EMULSIFYING OR DISPERSING
- B01F2101/00—Mixing characterised by the nature of the mixed materials or by the application field
- B01F2101/28—Mixing cement, mortar, clay, plaster or concrete ingredients
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B01—PHYSICAL OR CHEMICAL PROCESSES OR APPARATUS IN GENERAL
- B01F—MIXING, e.g. DISSOLVING, EMULSIFYING OR DISPERSING
- B01F2101/00—Mixing characterised by the nature of the mixed materials or by the application field
- B01F2101/30—Mixing paints or paint ingredients, e.g. pigments, dyes, colours, lacquers or enamel
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B01—PHYSICAL OR CHEMICAL PROCESSES OR APPARATUS IN GENERAL
- B01F—MIXING, e.g. DISSOLVING, EMULSIFYING OR DISPERSING
- B01F2101/00—Mixing characterised by the nature of the mixed materials or by the application field
- B01F2101/36—Mixing of ingredients for adhesives or glues; Mixing adhesives and gas
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Chemical & Material Sciences (AREA)
- Chemical Kinetics & Catalysis (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Machine Translation (AREA)
Abstract
【課題】 レガシープロセッサのバイナリコードをネイティブプロセッサに対して実行可能なバイナリコードに直接変換するバイナリ変換プログラムを提供する。
【解決手段】 レガシープロセッサ用に書かれたバイナリ命令をネイティブプロセッサ用の実行可能バイナリ命令に直接変換するためのバイナリ変換プログラム。本バイナリ変換プログラムは、バイナリ変換プログラムを異なるレガシープロセッサ及び/又はオペレーティングシステム、及びネイティブプロセッサと共に使用することを可能にする再設定可能な変換プログラムとして構成される。バイナリ変換プログラムはまた、より効率的なネイティブプロセッサの命令を利用するように最適化され、レガシーバイナリコードの一部分を使用不可にし、及び/又はレガシーバイナリコードを変更することなく新しいネイティブ命令をアプリケーションプログラムに追加することを可能にする。
【選択図】 図2
【解決手段】 レガシープロセッサ用に書かれたバイナリ命令をネイティブプロセッサ用の実行可能バイナリ命令に直接変換するためのバイナリ変換プログラム。本バイナリ変換プログラムは、バイナリ変換プログラムを異なるレガシープロセッサ及び/又はオペレーティングシステム、及びネイティブプロセッサと共に使用することを可能にする再設定可能な変換プログラムとして構成される。バイナリ変換プログラムはまた、より効率的なネイティブプロセッサの命令を利用するように最適化され、レガシーバイナリコードの一部分を使用不可にし、及び/又はレガシーバイナリコードを変更することなく新しいネイティブ命令をアプリケーションプログラムに追加することを可能にする。
【選択図】 図2
Description
本発明は、レガシープロセッサのバイナリコードをネイティブプロセッサに対して実行可能なバイナリコードに直接変換するバイナリ変換プログラムに関し、より詳細には、異なるレガシープロセッサ及び/又はオペレーティングシステムと共に使用するのに適し、また、レガシーコードを静的、動的、又はジャストインタイムに変換することができ、レガシーコードが新しいコードを挿入するか、又はレガシーバイナリコードを変更することなくレガシーコードの一部分を使用不可にすることを可能にする、異なるネイティブプロセッサと共に使用するのに適する再設定可能変換プログラムとして形成されたバイナリ変換プログラムに関する。
マイクロプロセッサは、異なる命令セットアーキテクチャ(ISA)から構成されることが公知である。「ISA」は、特定のマイクロプロセッサの命令セットを判断する。マイクロプロセッサにより実行されるアプリケーションプログラムは、通常、ソースコードとして公知の例えば「C」又は「C++」のような比較的高水準の言語で書かれ、特定マイクロプロセッサの命令セットと互換性のあるマシンインストラクションにコンパイルされる。マシンインストラクションは、バイナリコード、オブジェクトコード、及び実行可能コードとして公知である。
現存する多くのマイクロプロセッサの寿命や旧式化及びそれ相応の低速度のために、本明細書において以後「レガシーマイクロプロセッサ」及び「レガシープロセッサ」と呼ぶ現存する時代遅れのマイクロプロセッサを本明細書において以後「ネイティブマイクロプロセッサ」及び「ネイティブプロセッサ」と呼ぶ新しくより高速のマイクロプロセッサと交換することが必要な場合が多い。残念なことに、アップグレードによっては、多くの場合、ネイティブプロセッサの命令セットは、レガシープロセッサの命令セットと互換性がない。従って、レガシープロセッサ用に書かれたアプリケーションプログラムをより新しいネイティブプロセッサ上で利用することを可能にする様々な技術が開発されてきた。例えば、ソフトウエアエミュレータが公知である。そのようなソフトウエアエミュレータは、アプリケーションプログラムで使用されるレガシープロセッサの様々なマシンコード命令のエミュレーションに基づいている。そのようなエミュレータは、エミュレートされているレガシー命令と同じ機能を達成するために、1つ又はそれ以上のネイティブ命令から形成されたソフトウエアハンドラを含むことが公知である。そのような命令エミュレータシステムの例は、本出願人所有の米国特許第6,041,402号、第6,212,614号、及び第6,272,453号、及び、2003年3月6日出願(ドケット番号第20−0169号)の「直接命令レンダリングエミュレーションコンピュータ技術」という名称の本出願人所有の米国特許出願一連番号第(未定)号に開示されている。
バイナリ変換プログラムが必要なことがある理由はいくつかある。第1に、現代のコンピュータアーキテクチャに対してソフトウエアポートを容易にするのにレガシーソースコードが利用可能ではない場合がある。第2に、従来のエミュレーションシステムに付随するソフトウエアオーバーヘッドは、処理速度を大幅に遅くする。従って、バイナリ変換は、より新しく互換性のないハードウエアプラットフォーム上でのレガシーコードの再使用のための唯一の実現可能な選択肢である。
そのようなバイナリ変換プログラムは、レガシープロセッサのバイナリコードをネイティブプロセッサのバイナリ命令に直接変換する。そのようなバイナリ変換プログラムの例は、米国特許第6,223,339号、第6,314,560号、及び第6,502,237号に開示されている。バイナリ変換プログラムはまた、米国カリフォルニア州サンホセにおいて1997年2月23〜26日に開催された米国電気電子学会(IEEE)のコンピュータ代表者会義97会報37〜42ページに掲載のデジタル・エキップメント・コーポレーションのR・フックウェイ著「Alpha NT上の32ビットx86アプリケーション上で作動するデジタルFX!32」、2001年11月のIEEE会報第89巻11号1710〜1722ページに掲載のアルトマン他著「バイナリ変換及び最適化における進歩と将来の課題」、デジタル技術学会誌1997年第9巻1号1〜12ページに掲載のフックウェイ他著「デジタルFX!32:エミュレーション及びバイナリ変換の結合」、及び、コンピュータマガジン2000年3月第33巻47〜52ページに掲載のチエン他著「IA−64に対するPA−RISC:再コンパイルのない透過性実行」に開示されている。
公知のバイナリ変換プログラムは、レガシーバイナリコードを変更することなくレガシーバイナリコードをネイティブバイナリコードに実質的に変換することが可能であるが、そのような公知のバイナリ変換プログラムに付随する問題が存在する。例えば、大抵の公知のバイナリ変換プログラムは、単一のレガシー/ネイティブプロセッサとオペレーティングシステムとの組合せ用に開発されたものである。従って、異なるレガシープロセッサ及び/又はネイティブプロセッサ上で実行されるアプリケーションプログラムには、別の変換プログラムが必要になることになる。それに加えて、そのような公知の変換プログラムは、本来のソースコードへのアクセスを必要とすると考えられる、レガシーコードの一部分を使用不可にするか又はプログラムを再コンパイルする必要なくそれを強化する目的による現代のプログラム言語で書かれた新しいネイティブコードの追加を考慮しない。すなわち、複数のレガシープロセッサ及びネイティブプロセッサ、及び/又はオペレーティングシステムと共に使用するのに適しており、レガシー及びネイティブの両方の命令レベルでモジュール式に最適化することができ、かつレガシープログラムを再コンパイルする必要なく新しいネイティブコードの追加を考慮した、レガシーバイナリ命令をネイティブ命令に変換するバイナリ変換プログラムの必要性が存在する。
本発明は、レガシープロセッサ用に書かれたバイナリ命令をネイティブプロセッサ用の実行可能バイナリ命令に直接変換するためのバイナリ変換プログラムに関する。本発明の重要な態様によると、このバイナリ変換プログラムは、バイナリ変換プログラムをレガシープロセッサ及び/又はオペレーティングシステムとネイティブプロセッサとの異なる組合せで使用することを可能にする再設定可能な変換プログラムである。バイナリ変換プログラムはまた、より効率的なネイティブプロセッサの命令及び機能をそれらが利用可能な場合は利用するように最適化され、レガシーバイナリコードの一部分を使用不可にし、及び/又はレガシーバイナリコードを変更することなく新しいネイティブ命令をアプリケーションプログラムに追加することを可能にする。
本発明の上記及び他の利点は、以下の詳細と添付図面を参照することにより容易に理解することができるであろう。
本発明の上記及び他の利点は、以下の詳細と添付図面を参照することにより容易に理解することができるであろう。
本発明は、レガシーマイクロプロセッサのバイナリ命令をネイティブプロセッサのバイナリ命令に直接変換することができる再設定可能変換プログラムとして形成されるバイナリ変換プログラムに関する。レガシーマイクロプロセッサのバイナリ命令の直接変換により、一般にエミュレートされたレガシー命令よりも相当に高速で実行されるネイティブのバイナリ命令がもたらされる。それに加えて、本発明の重要な態様によると、システムは、複数のネイティブプロセッサ、複数のレガシープロセッサ、及びオペレーティングシステムと共に使用するために再設定することができる。変換されたネイティブプログラムの柔軟性を更に強化するためにサンク(thunk)オブジェクトが使用され、レガシーバイナリ命令の一部分を使用不可にし、及び/又は、本来のレガシーバイナリコードを変更することなく新しいネイティブ命令が挿入される。以下に更に詳細に説明するように、本発明によるバイナリ変換プログラムは、第1に、連続して実行するコード区分にレガシー命令をグループ分けしてアルゴリズム的最適化を適用し、次に、バイナリ命令を命令毎にネイティブ命令のセットに変換することにより、レガシーバイナリ命令をネイティブバイナリ命令に変換する。命令変換が終了すると、必要に応じてネイティブオプティマイザーを実行することもできる。ネイティブプロセッサに依存して、ネイティブバイナリ命令を再配列、及び/又はグループ分けすることができ、プロセッサリソースの全ての可能な利点を利用することができる。従って、得られるネイティブバイナリは、ネイティブプラットフォーム上で単独で実行することができる。
本発明によるバイナリ変換プログラムは、3つの異なる作動モード、すなわち、変換がオフラインで実行されてネイティブ命令の新しい実行可能バイナリを生成する静的変換モード、レガシーバイナリがネイティブプロセッサのメモリに配置される間に変換が実行される動的変換モード、及び、レガシー命令が最初に実行される時に必要な場合及びその時に限って変換されるジャストイン変換モードで作動する。
本発明によるバイナリ変換プログラムは、再設定可能な変換プログラムとして様々なレガシー及びネイティブプロセッサと共に使用するために形成されるが、本発明の例示的実施形態は、「Tru64 Unix」オペレーティングシステムを備えた「Alpha 21264」マイクロプロセッサ、及び「Linux」オペレーティングシステムを備えた「Intel IA−64」ネイティブプロセッサである。「Alpha 21264」及び「IA−64」マイクロプロセッサは、両方とも64ビットのプラットフォームである。「Alpha 21264」マイクロプロセッサは、縮小命令セットコンピュータ(RISC)である。「RISC」アーキテクチャから成るマイクロプロセッサは、一般にレジスタ内の全ての演算を実行する。読込み及び記憶の命令が使用され、データをレジスタ内に取出し、その結果をメモリに返して記憶する。そういうわけで、「RISC」アーキテクチャは、「読込み/記憶」アーキテクチャとして公知である。「RISC」アーキテクチャはまた、複雑な命令を除去してハードウエアが複雑になることを軽減する。現代のソフトウエアの設計パラダイムは、高次オーダー言語の使用を促進し、コンパイラは、通常は複雑な命令を使用しない。
「Intel IA−64」マイクロプロセッサは、明示的並列命令コンピュータ(EPIC)と呼ばれる比較的新しい設計パラダイムを使用する。「EPIC」アーキテクチャは、最適な機能のためのスケジューリング命令はコンパイラ(すなわち、アセンブリ言語プログラマー)により実行されるべきであり、マイクロプロセッサハードウエアにより実行されるべきではないと命令する。「IA−64」プロセッサは、プロセッサ性能の問題の範囲を除去又は緩和するための機能を使用する。例えば、そのような「IA−64」プロセッサは、比較的大きなレジスタのセット、短い前方分岐を解消する能力、及び並列コードの実行を促進するために比較的多数の実行ユニットを含む。「IA−64」マイクロプロセッサは、成長するマイクロプロセッサ族を含む。以下の説明は、「Itanium 2」として公知のタイプ「IA−64」プロセッサに関する。
アプリケーションソフトウエアモデル
図1を参照すると、現代のソフトウエアアプリケーション用の階層型モデルが示されている。このモデルは、アプリケーションソフトウエア層20、システムライブラリ層22、オペレーティングシステム層24、及びハードウエア層26を含む。現代のソフトウエアアプリケーションプログラム20は、通常、特定マイクロプロセッサのアーキテクチャ及びオペレーティングシステム上で実行されるように書かれている。図示のように、アプリケーションソフトウエア20は、マイクロプロセッサのオペレーティングシステム24、及び一組のシステムライブラリ22のサービスを使用して共通の作業を実行する。特に、アプリケーションソフトウエアは、矢印28で示されるように、オペレーティングシステムコールを直接呼び出すことができるが、より一般的には、矢印30で示されるように、システムライブラリコールを通じてシステムライブラリ層22とインタフェースを取る。次に、矢印32で示されるように、システムライブラリ22は、通常、システムコールをオペレーティングシステム層24に呼び出す。例えば、標準の「C/C++」システムライブラリ層22は、「C」機能を使用してディスクファイルを演算する能力を有する。これらの機能は、次に、システムコールを通じてオペレーティングシステムと対話する。以下に更に詳細に説明するように、本発明によるバイナリ変換プログラムは、根底をなすオペレーティングシステムとインタフェースを取るが、レガシー及びネイティブのオペレーティングシステムが同じであることを必要としない。
図1を参照すると、現代のソフトウエアアプリケーション用の階層型モデルが示されている。このモデルは、アプリケーションソフトウエア層20、システムライブラリ層22、オペレーティングシステム層24、及びハードウエア層26を含む。現代のソフトウエアアプリケーションプログラム20は、通常、特定マイクロプロセッサのアーキテクチャ及びオペレーティングシステム上で実行されるように書かれている。図示のように、アプリケーションソフトウエア20は、マイクロプロセッサのオペレーティングシステム24、及び一組のシステムライブラリ22のサービスを使用して共通の作業を実行する。特に、アプリケーションソフトウエアは、矢印28で示されるように、オペレーティングシステムコールを直接呼び出すことができるが、より一般的には、矢印30で示されるように、システムライブラリコールを通じてシステムライブラリ層22とインタフェースを取る。次に、矢印32で示されるように、システムライブラリ22は、通常、システムコールをオペレーティングシステム層24に呼び出す。例えば、標準の「C/C++」システムライブラリ層22は、「C」機能を使用してディスクファイルを演算する能力を有する。これらの機能は、次に、システムコールを通じてオペレーティングシステムと対話する。以下に更に詳細に説明するように、本発明によるバイナリ変換プログラムは、根底をなすオペレーティングシステムとインタフェースを取るが、レガシー及びネイティブのオペレーティングシステムが同じであることを必要としない。
バイナリ変換プログラムのサブシステム
図3を参照すると、本発明によるバイナリ変換プログラムは、4つのモジュール式の再設定可能サブシステム、すなわち、ローダーサブシステム34、レガシー命令プロセッササブシステム36、命令変換プログラムサブシステム38、及びネイティブ命令プロセッササブシステム40で形成される。それぞれのサブシステム34、36、38、及び40は、例えば「C++」で書かれたモジュラーオブジェクトである。従って、サブシステム34、36、38、及び40のいずれも、特定ネイティブプロセッサのアーキテクチャ、又はレガシープロセッサのアーキテクチャ、又はその両方のいずれかに関して設計することができる。従って、本発明によるバイナリ変換プログラムは、特定のレガシー/ネイティブプロセッサの組合せ用に構成された公知のバイナリ変換プログラムと違って、任意のレガシー又はネイティブプロセッサ用に構成されるように再設定することができる。
図3を参照すると、本発明によるバイナリ変換プログラムは、4つのモジュール式の再設定可能サブシステム、すなわち、ローダーサブシステム34、レガシー命令プロセッササブシステム36、命令変換プログラムサブシステム38、及びネイティブ命令プロセッササブシステム40で形成される。それぞれのサブシステム34、36、38、及び40は、例えば「C++」で書かれたモジュラーオブジェクトである。従って、サブシステム34、36、38、及び40のいずれも、特定ネイティブプロセッサのアーキテクチャ、又はレガシープロセッサのアーキテクチャ、又はその両方のいずれかに関して設計することができる。従って、本発明によるバイナリ変換プログラムは、特定のレガシー/ネイティブプロセッサの組合せ用に構成された公知のバイナリ変換プログラムと違って、任意のレガシー又はネイティブプロセッサ用に構成されるように再設定することができる。
それぞれのサブシステムの詳細は以下に説明される。ただし、一般的に、ローダーサブシステム34は、レガシーコード及びデータ部分をレガシーバイナリファイルから読み込む。レガシー命令プロセッササブシステム36は、レガシー命令を分類してレガシープログラムをレガシー手順に細分する。それに加えて、全ての事前変換された最適化モジュールは、それらが存在してアクティブな場合は呼び出される。命令変換プログラムサブシステム38は、レガシー命令をネイティブ命令に変換する。ネイティブ命令プロセッササブシステム40は、事後変換最適化モジュールがあればそれらを呼び出し、結果的に完全に変換されたプログラムを後で実行するために、ネイティブプロセッサのメモリ又はディスクファイルに書き込む。
本発明によるバイナリ変換プログラムにより、更に、コード最適化モジュールは、サブシステム36又は40のいずれかにプラグ接続され、システムの性能を更に向上させることができる。図9を参照すると、これらのモジュールは、参照番号64及び66で識別されている。事前変換されたレガシーコード、又は事後変換されたネイティブコード、又はその何らかの組合せのいずれかで作動可能な任意数の最適化モジュールが存在してもよい。必要であれば、最適化モジュールは無効にすることができる。
本発明によるバイナリ変換プログラムにより、変換されたレガシーコードストリームに新しいネイティブコードを挿入することもできる。これらの新しいネイティブコードセグメントは、「サンク(thunk)」と呼ばれる。図2にサンク42が示されている。これらのサンク42は、例えば、新しい機能を追加するか又は本来のレガシーコードの一部分を使用不可にするような様々な目的の現存するレガシーバイナリコードを変更することなく、機能を追加するために使用することができる。図2のように、ネイティブ命令グループ44、46、及び48の3つのブロックが示されている。サンクコードは、ネイティブ命令コード44からベクトルを通じてサンクオブジェクト42に挿入される。サンクオブジェクト42内のサンクコードが実行され、サンクコードの実行が終了すると、図2に示すように、システムは、ネイティブ命令グループにベクトルで戻る。
ローダーサブシステム
上述の通り、ローダーサブシステム34は、レガシーバイナリファイルを読み込み、レガシーコード及びデータ部分を抽出する。ローダーサブシステム34は、プラグ接続が可能なシステムであり、多くのファイルフォーマットに適合することができる。上述した例示的レガシープロセッサ及びオペレーティングシステムに対して、例示的ローダーは、「Linux」実行可能なリンク可能フォーマット(ELF)と「Tru64 Unix」共通オブジェクトファイルフォーマット(COFF)とを含む。
上述の通り、ローダーサブシステム34は、レガシーバイナリファイルを読み込み、レガシーコード及びデータ部分を抽出する。ローダーサブシステム34は、プラグ接続が可能なシステムであり、多くのファイルフォーマットに適合することができる。上述した例示的レガシープロセッサ及びオペレーティングシステムに対して、例示的ローダーは、「Linux」実行可能なリンク可能フォーマット(ELF)と「Tru64 Unix」共通オブジェクトファイルフォーマット(COFF)とを含む。
ローダーサブシステム34は、僅かに数個のインタフェースを通じてバイナリ変換プログラムの残りとインタフェースを取る。図4は、「Linux」オペレーティングシステムを装備した「Intel IA−64」マイクロプロセッサへの「Tru64」オペレーティングシステムを装備した「Alpha」レガシーマイクロプロセッサの命令の変換に使用する例示的な統合モデル化言語(UML)のシーケンス図を示す。
レガシー命令プロセッササブシステム
レガシー命令プロセッササブシステム36は、レガシー命令を解析し、それらを一般的な機能に従って入力し、命令をレガシーコードの機能ブロックに細分化する。レガシー命令プロセッササブシステム36は、制御を解除する前に、利用可能でありアクティブにされた任意の目標とするレガシーオプティマイザーを呼び出すことができる。レガシー命令プロセッササブシステム36は、システムが実行されているネイティブプロセッサに左右されない。
レガシー命令プロセッササブシステム36は、レガシー命令を解析し、それらを一般的な機能に従って入力し、命令をレガシーコードの機能ブロックに細分化する。レガシー命令プロセッササブシステム36は、制御を解除する前に、利用可能でありアクティブにされた任意の目標とするレガシーオプティマイザーを呼び出すことができる。レガシー命令プロセッササブシステム36は、システムが実行されているネイティブプロセッサに左右されない。
レガシー命令プロセッササブシステム36は、レガシープログラムを、呼び出されたレガシー手順のセグメントに細分化する。レガシー手順は、分岐命令のようなレガシーフロー制御命令で終了するレガシー命令のセグメントである。各レガシー命令は、「LegacyInstruction」と名付けられたコンテナーオブジェクト内に配置される。「LegacyInstruction」オブジェクトは、「LegacyProcedure」オブジェクトに記憶される。以下に詳細に説明するように、後の段階で「NativeInstructions」が「LegacyProcedure」オブジェクトに追加される。
各レガシー命令オブジェクトは、レガシーバイナリ命令、及び、全体的なタイプとそれをネイティブプロセッサ命令に変換する方法とを含む命令に関する情報を含む。コンテナーオブジェクトは、次に、変換及び最適化のための別のサブシステムに使用することができる。レガシー手順オブジェクトは、全て、レガシープログラムオブジェクト内に包含される。
レガシー命令プロセッサ36は、モジュラーサブシステムであり、別のレガシープロセッサと互換性があるように再設定することができる。これは、「C++」オブジェクト指向の技術により実行することができる。
レガシー命令プロセッサ36は、モジュラーサブシステムであり、別のレガシープロセッサと互換性があるように再設定することができる。これは、「C++」オブジェクト指向の技術により実行することができる。
レガシー命令を分類して入力した後に、レガシープロセッササブシステム36は、現存するいくつかの最適化モジュールが実行のために選択される前に任意の目標とする事前変換最適化モジュールを呼び出す。事前変換最適化モジュールは、レガシー命令と共に機能し、それらを使用不可にし、増強し、又は事後変換オプティマイザーと共に機能してより高性能なコードを生成することができる。
命令変換プログラムのサブシステム
命令変換プログラムサブシステム38は、レガシープロセッサ命令をネイティブプロセッサ命令に変換する。このサブシステム38は、レガシー及びネイティブプロセッサアーキテクチャに左右されない。このサブシステム38は、他のサブシステムから呼び出され、次の2つの主要な機能を実行する命令変換オブジェクトを包含する。
・命令の入力:レガシー命令プロセッサ36は、レガシー命令を入力するための命令入力を使用する。この機構は、それがレガシーフロー制御命令に遭遇した時にレガシー命令プロセッサに対して指示し、事前変換オプティマイザーにより必要とされることがある入力情報を提供する。
・命令の変換:ネイティブ命令プロセッササブシステム36は、このサービスを使用して、レガシー命令により要求される演算を実行するネイティブプロセッサ命令を生成する。
命令変換プログラムサブシステム38は、最終的に全てのレガシー命令をネイティブ命令に変換する役割を担う。
命令変換プログラムサブシステム38は、レガシープロセッサ命令をネイティブプロセッサ命令に変換する。このサブシステム38は、レガシー及びネイティブプロセッサアーキテクチャに左右されない。このサブシステム38は、他のサブシステムから呼び出され、次の2つの主要な機能を実行する命令変換オブジェクトを包含する。
・命令の入力:レガシー命令プロセッサ36は、レガシー命令を入力するための命令入力を使用する。この機構は、それがレガシーフロー制御命令に遭遇した時にレガシー命令プロセッサに対して指示し、事前変換オプティマイザーにより必要とされることがある入力情報を提供する。
・命令の変換:ネイティブ命令プロセッササブシステム36は、このサービスを使用して、レガシー命令により要求される演算を実行するネイティブプロセッサ命令を生成する。
命令変換プログラムサブシステム38は、最終的に全てのレガシー命令をネイティブ命令に変換する役割を担う。
「Alpha」レガシーマイクロプロセッサのバイナリ命令が「Intel IA−64」マイクロプロセッサに対して適切なバイナリ命令に変換される本発明の例示的実施形態において、命令変換プログラムサブシステム38は、必要な「IA−64」ネイティブプロセッサ命令を生成するために各「Alpha」レガシー命令に1つの一連の「C」機能で実行される。これらの「C」機能は、以下においてレガシー命令変換プログラムと呼ばれる。それに加えて、必要な「IA−64」レガシーネイティブプロセッサ命令の各々に1つの一連の「C」機能は、レガシー命令変換プログラム内から使用することができる。これらの「C」機能は、以下においてネイティブ命令生成プログラムと呼ばれる。
ネイティブ命令プロセッサのサブシステム
ネイティブ命令プロセッササブシステム40は、レガシー命令をネイティブ命令に変換することを要求し、任意の目標とするネイティブ命令最適化モジュールを呼び出し、変換バイナリコードをネイティブプロセッサのメモリ又は後で実行されるファイルに書き込む。
ネイティブ命令オブジェクトが使用されて、レガシー手順の挙動を複製するために必要なネイティブ命令を保持する。レガシー手順のために必要なネイティブ命令オブジェクトの数は、レガシー手順の挙動を複製するために必要なネイティブ命令の数が変動するので、レガシー命令オブジェクトの数と一致する場合もあり一致しない場合もある。ネイティブ命令オブジェクトの全ては、集合的に、変換されたバイナリプログラムの命令部分である。
ネイティブ命令プロセッササブシステム40は、完全に再設定可能であり、様々な異なるネイティブプロセッサ上でレガシーバイナリを実行することを可能にする。このサブシステム40は、使用されているレガシープロセッサに左右されない。
ネイティブ命令プロセッササブシステム40は、レガシー命令をネイティブ命令に変換することを要求し、任意の目標とするネイティブ命令最適化モジュールを呼び出し、変換バイナリコードをネイティブプロセッサのメモリ又は後で実行されるファイルに書き込む。
ネイティブ命令オブジェクトが使用されて、レガシー手順の挙動を複製するために必要なネイティブ命令を保持する。レガシー手順のために必要なネイティブ命令オブジェクトの数は、レガシー手順の挙動を複製するために必要なネイティブ命令の数が変動するので、レガシー命令オブジェクトの数と一致する場合もあり一致しない場合もある。ネイティブ命令オブジェクトの全ては、集合的に、変換されたバイナリプログラムの命令部分である。
ネイティブ命令プロセッササブシステム40は、完全に再設定可能であり、様々な異なるネイティブプロセッサ上でレガシーバイナリを実行することを可能にする。このサブシステム40は、使用されているレガシープロセッサに左右されない。
上述の通り、命令変換プログラムサブシステム38を通じた命令変換は、ネイティブ命令プロセッササブシステム40により呼び出される。この処理は、既に作り出されたレガシー手順オブジェクトを、変換されたホストプロセッサ命令を含むある数のネイティブ命令オブジェクトで埋める段階を伴う。事後変換オプティマイザーがネイティブ命令混合を変更する可能性があるので、ネイティブ命令は、この時点ではメモリ又はファイルに記憶されない。
各レガシー命令が1つ又はそれ以上のプロセッサ命令に変換された後に、存在する任意の事後変換オプティマイザーが呼び出される。これらのプラグ接続可能モジュールは、アクティブにするか又は非アクティブにすることができる。
各レガシー命令が1つ又はそれ以上のプロセッサ命令に変換された後に、存在する任意の事後変換オプティマイザーが呼び出される。これらのプラグ接続可能モジュールは、アクティブにするか又は非アクティブにすることができる。
変換処理
上述のように、レガシープログラムは、レガシーフロー制御命令で終了するレガシー手順に細分化される。これにより、より良好な最適化コードのための複数の命令の同時処理が考慮される。例えば、「Intel IA−64」アーキテクチャでは、クロックサイクル当たり最大6つの命令の実行が準備されている。複数の命令を一度に処理すると、データの依存性に基づいて並列に実行するのにどの命令が安全であるかを判断することができる。結果として、レガシー命令のセグメント又は手順のために生成されたネイティブ命令は、レガシープロセッサと正確に同じ順番で演算を実行することができない。しかし、データの依存性が尊重される限りこれは問題にならない。しかし、インテルのタイプ「IA−64」命令を1つずつ実行すると、プロセッサの実行リソースの十分な効果が得られない。
上述のように、レガシープログラムは、レガシーフロー制御命令で終了するレガシー手順に細分化される。これにより、より良好な最適化コードのための複数の命令の同時処理が考慮される。例えば、「Intel IA−64」アーキテクチャでは、クロックサイクル当たり最大6つの命令の実行が準備されている。複数の命令を一度に処理すると、データの依存性に基づいて並列に実行するのにどの命令が安全であるかを判断することができる。結果として、レガシー命令のセグメント又は手順のために生成されたネイティブ命令は、レガシープロセッサと正確に同じ順番で演算を実行することができない。しかし、データの依存性が尊重される限りこれは問題にならない。しかし、インテルのタイプ「IA−64」命令を1つずつ実行すると、プロセッサの実行リソースの十分な効果が得られない。
本発明によるバイナリ変換プログラムは、各レガシー命令のために64ビット値を含むベクトル表又は空間を使用する。64ビット値は、ネイティブ命令ハンドラがその命令のために存在する場所の完全なアドレスである。しかし、レガシープログラムは、レガシーフロー制御命令で終了するレガシーコードのセグメントに細分化されるので、全ての命令が有効なベクトルエントリを含むわけではない。本発明によるバイナリ変換プログラムは、連続して実行されるレガシーコードのブロック又はセグメントと共に機能するので、ベクトルは、各々の対応するレガシーコードセグメント(すなわち、レガシー手順)の始めの間に要求されるだけである。ベクトルは、そのレガシー手順のためのネイティブ命令ハンドラのアドレスである。例えば、図5は、参照番号50及び52、及びそれらのアドレスで特定される2つのグループのレガシー命令を示す。命令の各グループ50及び52は、レガシーコードセグメント(すなわち、レガシー手順)を形成する分岐命令BEQで終了する。各レガシーアドレスは、ベクトル空間内に対応する場所を有する。ベクトル空間の各占有されたエントリは、次に、マイクロコード空間のネイティブ命令ハンドラを指す。本発明の一態様により、バイナリ変換プログラムは、分岐命令を処理する時は2パス変換システムを使用する。より詳細には、多くのレガシー分岐命令に関して、分岐の宛先をレガシーコードから直接判断することが可能である。他の時は、宛先のコードは直接判断することができない。本発明によるバイナリ変換プログラムは、両方の状況を処理することができる。
変換の第1のパスは、ジャンプ又は分岐(すなわち、フロー制御命令)を除く全てのレガシー命令のためのネイティブ命令を生成する。第1のパスが完成した状態で、残りのコードのためのベクトルが生成されているので、関連の分岐変換を実行することができる。第2のパスは、変換時に宛先を判断することができる分岐に対する分岐命令を埋める。
分岐の宛先が変換時に判断されることが可能であって、しかもその分岐が有効ベクトルが存在しない位置を向く場合、「LegacyProcedure」オブジェクトが生成され、その点から前方にレガシーフロー制御命令が発見されるまでレガシー命令で埋められる。例えば、図5を参照すると、分岐が最後に位置1020に行く場合、「LegacyProcedure」オブジェクトが生成されることになり、アドレス1020、1024、及び1028における命令に対して変換される。この処理は、第2のパスの間に発生する。従って、第2のパスは、読込み時に分っている宛先に対する全ての分岐命令を完成させ、有効ベクトルをまだ持っていない宛先に対する新しいハンドラを構築する。
2パス変換は多くの分岐命令を処理することができるが、読込み時に全ての分岐の宛先が分っているわけではない。実行時に予測された宛先アドレスに依存する分岐命令もある。これらの場合、これらの分岐命令は、そのネイティブ命令ハンドラのアドレスをベクトル空間からプルして、その場所にジャンプする。宛先に対する有効ベクトルがない場合は、ネイティブ命令ハンドラが動的に作り出され、そのアドレスがベクトル空間に入力される。この処理は、レガシーコードの実行時変換を実行し、分岐の宛先アドレスで始まりレガシーフロー制御命令が発見されるまで続くダイナミッククラッキングにより実行される。ダイナミッククラッキングオブジェクトは、新しい「LegacyProcedure」オブジェクトを作り出し、次のフロー制御命令を通じて、それをレガシー命令に対する「LegacyInstruction」オブジェクトで埋める。次に、それは、レガシー命令の変換を要求し、得られるネイティブ命令をメモリに記憶する。このシステムは、全ての分岐命令を処理することができるが、最後の手段として使用され、その理由は、分岐宛先の事前計算が、それが可能な場合はより良好な性能を可能にするからである。
オペレーティングシステムの呼び出し
上述の通り、アプリケーションプログラムは、直接的に、又はシステムライブラリ機能を通じて間接的に、オペレーティングシステムの呼び出しをすることが公知である。例えば、「Alpha 21264」マイクロプロセッサアーキテクチャは、システムの呼び出しを特定の命令として形成する。命令の実行により、オペレーティングシステムの割り込みが発生する。システムの呼び出し命令の前に、コンパイラ及び/又はプログラマーは、システム呼び出し番号を、「Alpha 21264」マイクロプロセッサの場合に$v0である既知のレジスタに挿入すべきである。システム呼び出し番号は、$v0から抽出され、次にシステム機能呼び出し慣例により規定されるように、他のレジスタから追加の引数を抽出することができる。バイナリ変換プログラムに対して、システムの呼び出しは単なる別の命令である。しかし、システム呼び出し番号は、オペレーティングシステム毎に異なるはずであり、実際に異なっている。一例として、「OpenVMS」オペレーティングシステムは、「Tru64 Unix」とは異なるシステムの呼び出し番号を使用する。「Alpha」用の「Windows NT」オペレーティングシステムも、同じく「OpenVMS」や「Tru64」とは異なっている。従って、バイナリ変換プログラムシステム呼び出しは、レガシーオペレーティングシステムに特異であるべきである。
上述の通り、アプリケーションプログラムは、直接的に、又はシステムライブラリ機能を通じて間接的に、オペレーティングシステムの呼び出しをすることが公知である。例えば、「Alpha 21264」マイクロプロセッサアーキテクチャは、システムの呼び出しを特定の命令として形成する。命令の実行により、オペレーティングシステムの割り込みが発生する。システムの呼び出し命令の前に、コンパイラ及び/又はプログラマーは、システム呼び出し番号を、「Alpha 21264」マイクロプロセッサの場合に$v0である既知のレジスタに挿入すべきである。システム呼び出し番号は、$v0から抽出され、次にシステム機能呼び出し慣例により規定されるように、他のレジスタから追加の引数を抽出することができる。バイナリ変換プログラムに対して、システムの呼び出しは単なる別の命令である。しかし、システム呼び出し番号は、オペレーティングシステム毎に異なるはずであり、実際に異なっている。一例として、「OpenVMS」オペレーティングシステムは、「Tru64 Unix」とは異なるシステムの呼び出し番号を使用する。「Alpha」用の「Windows NT」オペレーティングシステムも、同じく「OpenVMS」や「Tru64」とは異なっている。従って、バイナリ変換プログラムシステム呼び出しは、レガシーオペレーティングシステムに特異であるべきである。
直接適合システム呼び出し
バイナリ変換プログラムは、各システム呼び出しを、緊密に適合するホストプロセッサシステムの呼び出しか、又は、ネイティブオペレーティングシステムの支援の有無によらずレガシーシステム呼び出しの挙動をエミュレートするコードかにマップすることを可能にする。例えば、ディスクディレクトリ削除(rmdir)「Alpha Tru64 Unix」システム呼び出しを、同等の「Intel IA−64 Linux」システム呼び出しに変換するための「Intel IA−64」マイクロプロセッサアーキテクチャに対する例示的アセンブリ言語プログラムを以下に示す。
バイナリ変換プログラムは、各システム呼び出しを、緊密に適合するホストプロセッサシステムの呼び出しか、又は、ネイティブオペレーティングシステムの支援の有無によらずレガシーシステム呼び出しの挙動をエミュレートするコードかにマップすることを可能にする。例えば、ディスクディレクトリ削除(rmdir)「Alpha Tru64 Unix」システム呼び出しを、同等の「Intel IA−64 Linux」システム呼び出しに変換するための「Intel IA−64」マイクロプロセッサアーキテクチャに対する例示的アセンブリ言語プログラムを以下に示す。
このスタブのアドレスは表に記憶され、「Alpha 21264」システムの呼び出し命令が実行される時に、「Alpha」レジスタ$v0に配置されたシステム呼び出し番号が表に入るインデックスとして使用される。その表位置のアドレスは、このスタブに分岐するために使用される。スタブは、要求されたパラメータ(ディレクトリ名を含むストリングに対するポインタ)だけを「Intel」のタイプ「IA−64」プロセッサ上の正しいレジスタ内に動かし、「IA−64」システム呼び出し番号(「Alpha」マイクロプロセッサ用の137ではなく1056)を「Intel IA−64」マイクロプロセッサ用のレジスタ15に配置する。システム呼び出しは、成功の場合にインジケータ値0を、失敗の場合に−1を返し、その値は、「Alpha」マイクロプロセッサの正しいレジスタに配置される。別の値「errno」(エラー番号)は、失敗の原因を示す。その値は、「Alpha」/Tru64」システム及び「IA−64/Linux」システム間で異なり、従って変換されるべきである。「AdjustResults」マクロが、別のデータ表を通じてこれを行う。変換された状態で、この「errno」値は、正しい「Alpha」レジスタに配置され、スタブは、通常のコード実行へ戻ることができる。引数0x100000を有する「IA−64」中断命令により、システム呼び出しが発生する。
非直接適合システム呼び出し
以上の例は、現存のホストプロセッサのシステム呼び出しに対して正確に適合する状態を示している。しかし、これは常に該当するわけではない。例えば、「Alpha/Tru64 Unix」の「uname」システム呼び出しは、いくつかのテキストストリームの形式でマシンに関する情報を返す。以下の例は、このシステム呼び出しに対するアセンブリ言語スタブの例である。
以上の例は、現存のホストプロセッサのシステム呼び出しに対して正確に適合する状態を示している。しかし、これは常に該当するわけではない。例えば、「Alpha/Tru64 Unix」の「uname」システム呼び出しは、いくつかのテキストストリームの形式でマシンに関する情報を返す。以下の例は、このシステム呼び出しに対するアセンブリ言語スタブの例である。
このシステム呼び出しを直接マップする場合の問題は、レガシープログラムが、本来設計されたプロセッサ上で作動していないということである。従って、このスタブは、「Intel IA−64 Linux」の「uname」システム呼び出しを直接使用するよりも「C」機能を呼び出し、得られるストリングを調節する。
以下の例は、「Linux」の「uname」システム呼び出しの挙動を再定義するために使用される「C」機能を示す。尚、この機能は、上述のスタブの「br.call.sptk.few」命令により呼び出される。
以下の例は、「Linux」の「uname」システム呼び出しの挙動を再定義するために使用される「C」機能を示す。尚、この機能は、上述のスタブの「br.call.sptk.few」命令により呼び出される。
「Linux」の「uname」システム呼び出しが使用されるが、「nodename」要素だけがネイティブ結果に転送されることは注目される。他の全てのフィールドは、プログラムが「Tru64 Unix」オペレーティングシステムの例えば「バージョン5.1、ビルド732」上で実行されていることをプログラムに信じさせるために作られる。
これらと同様の技術を通して、レガシーオペレーティングシステムの全体システム呼び出しセットを再び作成することが可能である。この作業の複雑性は、レガシー及びネイティブのオペレーティングシステムの差に依存する。「Intel IA−64」マイクロプロセッサの「Linux」オペレーティングシステムに対して「Tru64」オペレーティングシステム上で作動する「Alpha」マイクロプロセッサの場合、そこに多くの類似点がある。
これらと同様の技術を通して、レガシーオペレーティングシステムの全体システム呼び出しセットを再び作成することが可能である。この作業の複雑性は、レガシー及びネイティブのオペレーティングシステムの差に依存する。「Intel IA−64」マイクロプロセッサの「Linux」オペレーティングシステムに対して「Tru64」オペレーティングシステム上で作動する「Alpha」マイクロプロセッサの場合、そこに多くの類似点がある。
システムライブラリの交換
上述の通り、システム呼び出しは、ホストオペレーティングシステムにマップすることができる。上述の通り、レガシーアプリケーションプログラムはまた、システムライブラリとインタフェースを取る。レガシーアプリケーション次第で、レガシーライブラリではなくネイティブマイクロプロセッサからのシステムライブラリを使用することが可能であろう。この手法は、ネイティブライブラリがネイティブシステム上で実行するのにより良く最適化されやすいという点で有利である。これが不可能な場合は、1つ形式か別の形式のレガシーシステムライブラリが使用されるべきである。
上述の通り、システム呼び出しは、ホストオペレーティングシステムにマップすることができる。上述の通り、レガシーアプリケーションプログラムはまた、システムライブラリとインタフェースを取る。レガシーアプリケーション次第で、レガシーライブラリではなくネイティブマイクロプロセッサからのシステムライブラリを使用することが可能であろう。この手法は、ネイティブライブラリがネイティブシステム上で実行するのにより良く最適化されやすいという点で有利である。これが不可能な場合は、1つ形式か別の形式のレガシーシステムライブラリが使用されるべきである。
静的リンク対動的リンク
システムライブラリを使用するソフトウエアアプリケーションは、静的にリンクされるか、又は動的にリンクすることができる。静的リンクでは、アプリケーションがライブラリから要求するコードは、得られるアプリケーションバイナリロードモジュールに入れられる。これにより、必要に応じてライブラリコードを読込む、独立型であるが動的リンクよりも大きいロードモジュールが作り出される。動的にリンクされたアプリケーションでは、プログラムが実行されている時に共有ライブラリが利用可能であるべきである。
システムライブラリを使用するソフトウエアアプリケーションは、静的にリンクされるか、又は動的にリンクすることができる。静的リンクでは、アプリケーションがライブラリから要求するコードは、得られるアプリケーションバイナリロードモジュールに入れられる。これにより、必要に応じてライブラリコードを読込む、独立型であるが動的リンクよりも大きいロードモジュールが作り出される。動的にリンクされたアプリケーションでは、プログラムが実行されている時に共有ライブラリが利用可能であるべきである。
静的にリンクされたアプリケーション
レガシーアプリケーションが静的にリンクされる場合、静的にリンクされたレガシーライブラリコードをネイティブライブラリコードと簡単に交換することが恐らくできないであろう。従って、レガシーライブラリコードは、レガシーアプリケーションの残りと共に変換することができる。本発明によるバイナリ変換プログラムは、レガシーライブラリコードの存在を知らないことになる。このアプリケーションでは、完全に変換されたネイティブバイナリを生成するのに追加のレガシーコンポーネントを必要としない。
レガシーアプリケーションが静的にリンクされる場合、静的にリンクされたレガシーライブラリコードをネイティブライブラリコードと簡単に交換することが恐らくできないであろう。従って、レガシーライブラリコードは、レガシーアプリケーションの残りと共に変換することができる。本発明によるバイナリ変換プログラムは、レガシーライブラリコードの存在を知らないことになる。このアプリケーションでは、完全に変換されたネイティブバイナリを生成するのに追加のレガシーコンポーネントを必要としない。
動的にリンクされたアプリケーション
動的ライブラリリンクを使用するアプリケーションでは、ロードモジュールには、どのライブラリが必要であるかという情報が含まれるべきである。何の機能が未解決であるかという情報も存在することになる。この時点で、多くの場合、レガシーライブラリの代わりにネイティブライブラリを使用することができる。これができるかできないかは、ネイティブシステム上に同じ機能が存在するか否かによる。存在する場合は、レガシー及びホストプロセッサ間の機能の呼び出し規定が恐らく異なることになるので、簡単な変換スタブが使用されて引数を正しいレジスタに移動させる。以下に示すコード例は、レガシーライブラリ機能の代わりにネイティブ「atan」(アークタンジェント)ライブラリ機能の使用を考慮する「Intel IA−64」アセンブリ言語スタブの例である。
動的ライブラリリンクを使用するアプリケーションでは、ロードモジュールには、どのライブラリが必要であるかという情報が含まれるべきである。何の機能が未解決であるかという情報も存在することになる。この時点で、多くの場合、レガシーライブラリの代わりにネイティブライブラリを使用することができる。これができるかできないかは、ネイティブシステム上に同じ機能が存在するか否かによる。存在する場合は、レガシー及びホストプロセッサ間の機能の呼び出し規定が恐らく異なることになるので、簡単な変換スタブが使用されて引数を正しいレジスタに移動させる。以下に示すコード例は、レガシーライブラリ機能の代わりにネイティブ「atan」(アークタンジェント)ライブラリ機能の使用を考慮する「Intel IA−64」アセンブリ言語スタブの例である。
示されているように、「Intel IA−64」の「atan」ライブラリ機能を「Alpha」バージョンにマップするのに非常に僅かなコードしか必要とせず、それを実行することにより得られる性能の向上は、比較的十分なものである。しかし、この手法は、レガシーライブラリ機能を認識することができ、それがどの引数を要求するかが分っていることを必要とする。従って、共通に使用されるライブラリ機能用にだけ適しており、未知のレガシーライブラリ用には使用することはできない。
ネイティブ機能へのレガシー機能のマッピングの代替としては、単にレガシーライブラリを変換することである。これには、明らかにレガシーライブラリが変換のために利用可能である必要がある。この処理により静的リンクアプリケーションと同じ性能がもたらされるが、内容の機能が既知又は未知に関係なく任意の利用可能なレガシーライブラリを使用することができるので、ネイティブライブラリの使用よりも更に柔軟性がある。
メモリレイアウト
図6は、本発明によるバイナリ変換プログラムに使用されるメモリ領域のグラフ表示である。参照番号54及び56で特定される最初の2つのメモリ領域は、上述の通り第1のパス及び第2のパスのマイクロコード領域に関連する。これらのメモリ領域は、変換レガシーアプリケーションを構成する変換ネイティブ命令を含む。参照番号58で特定される次の領域は、それぞれのレガシー命令ハンドラのためのマイクロコードアドレスを含むベクトル空間に関する。上述の通り、ベクトル空間の全ての位置が有効なエントリを含むわけではない。ベクトル空間58は、レガシーコード命令の数と同じ数のエントリを含む。最後の領域は、データ空間60である。これらは、レガシーアプリケーションのロードモジュールで規定されたデータ部分である。データ空間60は、静的データ、又はロードモジュール内で明示的に規定されたデータに専用である。レガシープログラムは、必要に応じてヒープ又は自由ストアから追加メモリを割り当てることができる。
図6は、本発明によるバイナリ変換プログラムに使用されるメモリ領域のグラフ表示である。参照番号54及び56で特定される最初の2つのメモリ領域は、上述の通り第1のパス及び第2のパスのマイクロコード領域に関連する。これらのメモリ領域は、変換レガシーアプリケーションを構成する変換ネイティブ命令を含む。参照番号58で特定される次の領域は、それぞれのレガシー命令ハンドラのためのマイクロコードアドレスを含むベクトル空間に関する。上述の通り、ベクトル空間の全ての位置が有効なエントリを含むわけではない。ベクトル空間58は、レガシーコード命令の数と同じ数のエントリを含む。最後の領域は、データ空間60である。これらは、レガシーアプリケーションのロードモジュールで規定されたデータ部分である。データ空間60は、静的データ、又はロードモジュール内で明示的に規定されたデータに専用である。レガシープログラムは、必要に応じてヒープ又は自由ストアから追加メモリを割り当てることができる。
必要に応じて、変換レガシーアプリケーションに他のメモリ領域が提供される。これらは、ネイティブプロセッサのメモリプールから割り当てられたスタックと、ホストプロセッサのヒープ又は自由ストアから動的に要求されたメモリとを含む。
ホストプロセッサのメモリに物理的に配置される場合もあり配置されない場合もある別の可能な領域は、レガシーコードである。変換が完了した状態では、上述の通り、この情報は、ダイナミッククラッキング作動のため以外は必要とされない。このような場合、情報は、メモリを節約するためにディスクファイルから読み込むことができる。
ホストプロセッサのメモリに物理的に配置される場合もあり配置されない場合もある別の可能な領域は、レガシーコードである。変換が完了した状態では、上述の通り、この情報は、ダイナミッククラッキング作動のため以外は必要とされない。このような場合、情報は、メモリを節約するためにディスクファイルから読み込むことができる。
レジスタレイアウト
本発明によるバイナリ変換プログラムの性能における主要な要素は、ネイティブプロセッサレジスタの利用に対する手法である。本発明によるバイナリ変換プログラムがそのレガシーバイナリの実行に関してネイティブプロセッサレジスタをいかに使用するかに関する情報を以下に説明する。この情報は、ネイティブプロセッサ毎に異なる。以下の情報は、「Intel IA−64」ネイティブプロセッサと「Alpha 21264」レガシープロセッサとに関する。
レガシープロセッサのレジスタは、性能上の理由のためにネイティブプロセッサのレジスタにマップされる。現代の多くのマイクロプロセッサのアーキテクチャは、それらの演算のほとんど全てをレジスタ内に限定して実行し、強制的にメモリから値を読み込んで次に再び結果を無用に記憶し、実質的な性能のペナルティをもたらす。
本発明によるバイナリ変換プログラムの性能における主要な要素は、ネイティブプロセッサレジスタの利用に対する手法である。本発明によるバイナリ変換プログラムがそのレガシーバイナリの実行に関してネイティブプロセッサレジスタをいかに使用するかに関する情報を以下に説明する。この情報は、ネイティブプロセッサ毎に異なる。以下の情報は、「Intel IA−64」ネイティブプロセッサと「Alpha 21264」レガシープロセッサとに関する。
レガシープロセッサのレジスタは、性能上の理由のためにネイティブプロセッサのレジスタにマップされる。現代の多くのマイクロプロセッサのアーキテクチャは、それらの演算のほとんど全てをレジスタ内に限定して実行し、強制的にメモリから値を読み込んで次に再び結果を無用に記憶し、実質的な性能のペナルティをもたらす。
「Alpha 21264」プロセッサは、32個の64ビット汎用レジスタと32個の64ビット浮動小数点レジスタとを有する。「Intel IA−64」プロセッサは、128個の64ビット汎用レジスタと128個の80ビット浮動小数点レジスタとを有する。「Alpha/Tru64」レガシーシステムと「IA−64」ネイティブシステムとに対するレジスタ割り当てを以下に示す。
・汎用レジスタ0−30は、「IA−64」汎用レジスタ32−62に記憶される。
・「Alpha」汎用レジスタ31は、常にゼロとして読み取り、書き込むことができるが、その値は常にゼロを読み取る。「IA−64」汎用レジスタ0は、ほとんど同じ特性を有し、従って、「Alpha」レジスタ31は、「IA−64」汎用レジスタ0にマップされる。
・「Alpha」浮動小数点レジスタ0−30は、「Intel IA−64」浮動小数点レジスタ32−62に記憶される。
・「Alpha」浮動小数点レジスタ31は、常にゼロを読み取り、書き込むことができるが、その値は常にゼロを読み取ることになる。「IA−64」浮動小数点レジスタ0は、ほとんど同じ性能を有するので、「Alpha」浮動点レジスタ31は、「IA−64」浮動小数点レジスタ0にマップされる。
・16個の「IA−64」汎用レジスタは、スクラッチパッド又は一時レジスタr63−r78として指定される。
・16個の「IA−64」浮動点レジスタは、スクラッチパッド又は一時レジスタf63−f78として指定される。
・16個の「IA−64」述部レジスタは、スクラッチパッド又は一時レジスタp1−p16として指定される。述部レジスタは、比較演算からの単一ビットの真/偽結果を記憶するために使用される。これらのレジスタは、ほとんど全ての「IA−64」命令の実行に対して使用することができ、「IA−64」の命令を条件付きで実行させることができる。「Alpha 21264」均等物はない。
・2個の「IA−64」分岐レジスタは、スクラッチパッド又は一時レジスタb4−b5として指定される。分岐レジスタは、分岐命令の宛先アドレスを保持するために使用される。「Alpha 21264」は、この機能のために汎用レジスタを使用する。
・汎用レジスタ0−30は、「IA−64」汎用レジスタ32−62に記憶される。
・「Alpha」汎用レジスタ31は、常にゼロとして読み取り、書き込むことができるが、その値は常にゼロを読み取る。「IA−64」汎用レジスタ0は、ほとんど同じ特性を有し、従って、「Alpha」レジスタ31は、「IA−64」汎用レジスタ0にマップされる。
・「Alpha」浮動小数点レジスタ0−30は、「Intel IA−64」浮動小数点レジスタ32−62に記憶される。
・「Alpha」浮動小数点レジスタ31は、常にゼロを読み取り、書き込むことができるが、その値は常にゼロを読み取ることになる。「IA−64」浮動小数点レジスタ0は、ほとんど同じ性能を有するので、「Alpha」浮動点レジスタ31は、「IA−64」浮動小数点レジスタ0にマップされる。
・16個の「IA−64」汎用レジスタは、スクラッチパッド又は一時レジスタr63−r78として指定される。
・16個の「IA−64」浮動点レジスタは、スクラッチパッド又は一時レジスタf63−f78として指定される。
・16個の「IA−64」述部レジスタは、スクラッチパッド又は一時レジスタp1−p16として指定される。述部レジスタは、比較演算からの単一ビットの真/偽結果を記憶するために使用される。これらのレジスタは、ほとんど全ての「IA−64」命令の実行に対して使用することができ、「IA−64」の命令を条件付きで実行させることができる。「Alpha 21264」均等物はない。
・2個の「IA−64」分岐レジスタは、スクラッチパッド又は一時レジスタb4−b5として指定される。分岐レジスタは、分岐命令の宛先アドレスを保持するために使用される。「Alpha 21264」は、この機能のために汎用レジスタを使用する。
バイナリ変換プログラムシステムの分類図
バイナリ変換プログラムのための「UML」分類図を図7及び図8に示す。概略説明と共に主要な機能的要素が含まれている。図7は、バイナリ変換プログラムの機能ユニットに沿って編成されており、主要なシステムが強調されている。全ての部類が示されているわけではない。図からは明白ではないが、一組の「C++」ベースの部類がバイナリ変換プログラムの基礎を形成している。この部類の組は、いかなる特定のレガシー又はホストプロセッサを対象にするものでもない。別の層は、ネイティブプロセッサの特定情報とレガシープロセッサの特定情報とを統合するために使用される。
図8は、階層的に編成されており、全ての部類をトップダウン編成で表示している。バイナリ変換プログラムの部類が全て表示されているわけではない。
バイナリ変換プログラムのための「UML」分類図を図7及び図8に示す。概略説明と共に主要な機能的要素が含まれている。図7は、バイナリ変換プログラムの機能ユニットに沿って編成されており、主要なシステムが強調されている。全ての部類が示されているわけではない。図からは明白ではないが、一組の「C++」ベースの部類がバイナリ変換プログラムの基礎を形成している。この部類の組は、いかなる特定のレガシー又はホストプロセッサを対象にするものでもない。別の層は、ネイティブプロセッサの特定情報とレガシープロセッサの特定情報とを統合するために使用される。
図8は、階層的に編成されており、全ての部類をトップダウン編成で表示している。バイナリ変換プログラムの部類が全て表示されているわけではない。
変換処理ダイアグラム
図9は、変換処理ダイアグラムである。バイナリ変換プログラムセッションのマネージャオブジェクト62は、変換処理のトップレベルにある。それは、次に、レガシープロセッササブシステム36とネイティブプロセッササブシステム40とを呼び出す。6つの全体的段階は、以下のように示す。
1.ローダーサブシステム34は、レガシープログラムを読み込むために使用される。レガシーデータセグメントは、変更されずにメモリに記憶される。レガシー命令は、変換のためにシステムの残りに送られる。
2.次に、レガシー命令が入力され、フロー制御命令で終了するレガシー命令グループに分類される。この段階の出力は、各々が「LegacyInstruction」オブジェクトの総数を含む一連の「LegacyProcedure」オブジェクトである。これらのオブジェクトの集合は、レガシープログラムの命令部分である。
3.事前変換最適化モジュール64は、それが存在してアクティブな場合は呼び出される。これらのモジュールは、段階2で作り出された「LegacyProcedure」及び「LegacyInstruction」オブジェクト上で作動する。
4.「LegacyInstruction」は、ネイティブプロセッサの命令に変換される。この段階の出力は、各「LegacyProcedure」オブジェクトに追加される「NativeInstructions」オブジェクトである。全てのネイティブ命令オブジェクトの集合は、変換されたプログラムの命令部分である。
5.事後変換最適化モジュール66は、それが存在してアクティブな場合は呼び出される。これらのモジュールは、段階4で作り出された「LegacyProcedure」及び/又は「LegacyInstruction」オブジェクトを恐らくは使用して「NativeInstructions」オブジェクト上で作動する。
6.最終段階は、変換されたプログラムを、実行準備のためにネイティブプロセッサメモリか、又は「出力プログラム」と名付けられたブロック68により示されるように後で使用するためにディスクファイルのいずれかに記憶することである。
図9は、変換処理ダイアグラムである。バイナリ変換プログラムセッションのマネージャオブジェクト62は、変換処理のトップレベルにある。それは、次に、レガシープロセッササブシステム36とネイティブプロセッササブシステム40とを呼び出す。6つの全体的段階は、以下のように示す。
1.ローダーサブシステム34は、レガシープログラムを読み込むために使用される。レガシーデータセグメントは、変更されずにメモリに記憶される。レガシー命令は、変換のためにシステムの残りに送られる。
2.次に、レガシー命令が入力され、フロー制御命令で終了するレガシー命令グループに分類される。この段階の出力は、各々が「LegacyInstruction」オブジェクトの総数を含む一連の「LegacyProcedure」オブジェクトである。これらのオブジェクトの集合は、レガシープログラムの命令部分である。
3.事前変換最適化モジュール64は、それが存在してアクティブな場合は呼び出される。これらのモジュールは、段階2で作り出された「LegacyProcedure」及び「LegacyInstruction」オブジェクト上で作動する。
4.「LegacyInstruction」は、ネイティブプロセッサの命令に変換される。この段階の出力は、各「LegacyProcedure」オブジェクトに追加される「NativeInstructions」オブジェクトである。全てのネイティブ命令オブジェクトの集合は、変換されたプログラムの命令部分である。
5.事後変換最適化モジュール66は、それが存在してアクティブな場合は呼び出される。これらのモジュールは、段階4で作り出された「LegacyProcedure」及び/又は「LegacyInstruction」オブジェクトを恐らくは使用して「NativeInstructions」オブジェクト上で作動する。
6.最終段階は、変換されたプログラムを、実行準備のためにネイティブプロセッサメモリか、又は「出力プログラム」と名付けられたブロック68により示されるように後で使用するためにディスクファイルのいずれかに記憶することである。
命令変換の例
いくつかの代表的「Alpha 21264」命令を「IA−64」命令に変換するために使用されるコードの例を以下に示す。「Alpha/IA−64」プロトタイプは、各レガシー「Alpha」命令に対して「レガシー命令変換プログラム」と呼ばれる「C」機能を提供し、各「IA−64」命令に対して「ネイティブ命令生成プログラム」と呼ばれる「C」機能を提供する命令変換機構を使用する。「C」機能は、効率的なアクセスのためにそれらのアドレスを表に記憶することができるという理由で使用される。命令変換プログラムは、レガシー命令を検査し、演算コードを抽出し、その「Alpha」命令に対する「レガシー命令変換プログラム」機能のアドレスをプルする。「レガシー命令変換プログラム」機能は、次に、必要に応じて「ネイティブ命令生成プログラム」を使用して「IA−64」命令を生成する。2つの例示的「Alpha」命令を検討する。
いくつかの代表的「Alpha 21264」命令を「IA−64」命令に変換するために使用されるコードの例を以下に示す。「Alpha/IA−64」プロトタイプは、各レガシー「Alpha」命令に対して「レガシー命令変換プログラム」と呼ばれる「C」機能を提供し、各「IA−64」命令に対して「ネイティブ命令生成プログラム」と呼ばれる「C」機能を提供する命令変換機構を使用する。「C」機能は、効率的なアクセスのためにそれらのアドレスを表に記憶することができるという理由で使用される。命令変換プログラムは、レガシー命令を検査し、演算コードを抽出し、その「Alpha」命令に対する「レガシー命令変換プログラム」機能のアドレスをプルする。「レガシー命令変換プログラム」機能は、次に、必要に応じて「ネイティブ命令生成プログラム」を使用して「IA−64」命令を生成する。2つの例示的「Alpha」命令を検討する。
「Alpha S4ADDQ」、リテラル形式
この命令は、整数追加命令であり、既にレジスタ内にある値にリテラル値を追加するために使用される。以下の第1の例は、この「Alpha」命令に対する「レガシー命令変換プログラム」を示す。この機能は、2つの異なる「IA−64命令生成プログラム」機能である「shladd」及び「adds_i14」を呼び出す。これらの「C」機能は、「Alpha S4ADDQ」命令の挙動を再現するために必要な「IA−64」バイナリ命令を生成する。各「IA−64」命令生成プログラム機能を呼び出した後で、「IA−64」命令は、変換プログラムサブシステムに追加され、ネイティブプロセッサのメモリ及び/又はディスクファイルに記憶される前に更に別の処理を待つ。
この命令は、整数追加命令であり、既にレジスタ内にある値にリテラル値を追加するために使用される。以下の第1の例は、この「Alpha」命令に対する「レガシー命令変換プログラム」を示す。この機能は、2つの異なる「IA−64命令生成プログラム」機能である「shladd」及び「adds_i14」を呼び出す。これらの「C」機能は、「Alpha S4ADDQ」命令の挙動を再現するために必要な「IA−64」バイナリ命令を生成する。各「IA−64」命令生成プログラム機能を呼び出した後で、「IA−64」命令は、変換プログラムサブシステムに追加され、ネイティブプロセッサのメモリ及び/又はディスクファイルに記憶される前に更に別の処理を待つ。
レガシー命令変換プログラム機能は、「Alpha」から「IA−64」への変換プログラムにより使用され、「Alpha 21264」命令を「IA−64」均等物に変換する。この場合、2つの「IA−64」命令が必要である。他のレガシー命令に対しては、それよりも多いか又は少ない数が必要であろう。以下の第2の例は、「IA−64」の「shladd」命令を生成するために必要な「IA−64」命令生成プログラム機能を示す。
レジスタ再マッピング機能が、同様にレガシー命令変換プログラム機能により取り扱われることにも注意すべきである。別の重要な注意点は、「IA−64」上のこの「Alpha」命令の実行に対して単一のスクラッチレジスタが必要であるということである。
「Alpha CMOVEQ」
「Alpha CMOVEQ」命令は、条件付きで「Alpha」汎用レジスタ内に値を移動する。この命令のためのレガシー命令変換プログラムは、以下の例で見出すことができる。この「Alpha」命令は、2つの「IA−64」命令である「cmp.eq」(8ビット即値形式)及び「add」(レジスタ形式)を再度要求する。
「Alpha CMOVEQ」命令は、条件付きで「Alpha」汎用レジスタ内に値を移動する。この命令のためのレガシー命令変換プログラムは、以下の例で見出すことができる。この「Alpha」命令は、2つの「IA−64」命令である「cmp.eq」(8ビット即値形式)及び「add」(レジスタ形式)を再度要求する。
オプティマイザーの例:「IA−64」コードスケジューラーオプティマイザー
以下のオプティマイザーの例は、変換された命令を最大命令並列処理に関して最適にスケジュールに入れるように試みることにより、「IA−64」の「EPIC」アーキテクチャを利用する。「Itanium 2」プロセッサは、クロックサイクル当たり最大6つの命令まで実行することができる。これらの命令は、命令を実行するためにどのプロセッサリソースが必要であるかを指示する5ビット「テンプレート」フィールドと共に、3つの41ビット命令の「命令バンドル」に形成されるべきである。オプティマイザーは、ネイティブ命令を解析し、データの依存性に基づいてどちらが安全に並列で実行することができるかを判断し、次に、それらの「命令グループ」に適合する命令バンドルを選択する。全体の処理が図10に示されている。本発明によるバイナリ変換プログラムは、レガシープログラムをレガシー命令グループ70に細分化する。「IA−64」スケジュールオプティマイザーは、次に、変換されたネイティブ同等命令を「IA−64」命令グループ72、74、及び76に細分化する。「IA−64」命令グループ内の全ての命令は、安全に同時に実行することができ、従って、相互のデータ依存性を含まない。オプティマイザーは、次に、「IA−64」命令グループ72、74、及び76を、各々3つの命令の「IA−64」命令バンドル78、80、82、84、86、及び88に細分化する。
このスケジュールアルゴリズムは、「Itanium 2」だけに適用され、後で「IA−64」プロセッサに適用される。しかし、各ネイティブプロセッサは、そのアーキテクチャに適する調節された命令スケジュールアルゴリズムの恩恵を恐らく受けることになる。
以下のオプティマイザーの例は、変換された命令を最大命令並列処理に関して最適にスケジュールに入れるように試みることにより、「IA−64」の「EPIC」アーキテクチャを利用する。「Itanium 2」プロセッサは、クロックサイクル当たり最大6つの命令まで実行することができる。これらの命令は、命令を実行するためにどのプロセッサリソースが必要であるかを指示する5ビット「テンプレート」フィールドと共に、3つの41ビット命令の「命令バンドル」に形成されるべきである。オプティマイザーは、ネイティブ命令を解析し、データの依存性に基づいてどちらが安全に並列で実行することができるかを判断し、次に、それらの「命令グループ」に適合する命令バンドルを選択する。全体の処理が図10に示されている。本発明によるバイナリ変換プログラムは、レガシープログラムをレガシー命令グループ70に細分化する。「IA−64」スケジュールオプティマイザーは、次に、変換されたネイティブ同等命令を「IA−64」命令グループ72、74、及び76に細分化する。「IA−64」命令グループ内の全ての命令は、安全に同時に実行することができ、従って、相互のデータ依存性を含まない。オプティマイザーは、次に、「IA−64」命令グループ72、74、及び76を、各々3つの命令の「IA−64」命令バンドル78、80、82、84、86、及び88に細分化する。
このスケジュールアルゴリズムは、「Itanium 2」だけに適用され、後で「IA−64」プロセッサに適用される。しかし、各ネイティブプロセッサは、そのアーキテクチャに適する調節された命令スケジュールアルゴリズムの恩恵を恐らく受けることになる。
「IA−64」アーキテクチャは、制限された数のバンドルのタイプを規定する。「IA−64」命令の全ての組合せが同じバンドル内で有効なわけではない。例えば、共通バンドルのタイプは、2つのメモリ命令と1つの整数命令とがそのバンドルに含まれることを示す「MMI」として識別される。バンドルタイプは、バンドルの5ビットテンプレートフィールド内で符号化される。プロセッサの機能停止を避けるために、バンドルタイプを注意深く選択することは大切である。このために、「IA−64」スケジューラーオプティマイザーは、命令グループ内の「IA−64」命令に対するバンドルタイプを選択するために、注意深く設計されたアルゴリズムを使用する。例示的なアルゴリズムを図11に示す。
変換処理の例
以下の例は、「Alpha」レガシープロセッサ及び「IA−64」ネイティブプロセッサのためのものである。4つのレガシー「Alpha」命令のグループが「IA−64」命令に変換されて、このネイティブプロセッサ用に適正に編成される。
図12は、「Alpha」命令とそれらの命令を「IA−64」命令に変換する処理の小さなブロックの図式的表示である。この図は、変換段階だけを示し、最適化を示していない。レガシーコードブロックは、通常はジャンプ又は分岐である「レガシー手順」と呼ばれる(しかし、それらは、本来のソースコードに関して完全なレガシー手順を実際に表すことはできない)何らかの種類のフロー制御命令で「いつも」終了する。「レガシー手順」内の全ての命令は、連続的に実行される。この例は、レガシープログラムが既にレガシー手順に細分化されて、単一手順の変換が発生していると仮定している。
以下の例は、「Alpha」レガシープロセッサ及び「IA−64」ネイティブプロセッサのためのものである。4つのレガシー「Alpha」命令のグループが「IA−64」命令に変換されて、このネイティブプロセッサ用に適正に編成される。
図12は、「Alpha」命令とそれらの命令を「IA−64」命令に変換する処理の小さなブロックの図式的表示である。この図は、変換段階だけを示し、最適化を示していない。レガシーコードブロックは、通常はジャンプ又は分岐である「レガシー手順」と呼ばれる(しかし、それらは、本来のソースコードに関して完全なレガシー手順を実際に表すことはできない)何らかの種類のフロー制御命令で「いつも」終了する。「レガシー手順」内の全ての命令は、連続的に実行される。この例は、レガシープログラムが既にレガシー手順に細分化されて、単一手順の変換が発生していると仮定している。
変換処理は、単一のレガシー命令を取り、それを演算コード(opcode)に基づくルックアップテーブルを使用して復号化し、必要に応じてネイティブプロセッサ命令を次に作成する適正な「レガシー命令変換プログラム」機能を呼び出すことを伴う。この処理は、一般的に以下の段階を伴う。
1.1つ又はそれ以上の一時(スクラッチ)レジスタが必要な場合がある。その場合には、それらは、レジスタマッピングを担う「X−port」オブジェクトから要求される。循環する一時レジスタのセットが使用される。「IA−64」ネイティブプロセッサについては、「IA−64」の128個の汎用レジスタのいくつかは、一時レジスタとして専用に使用される。
2.レガシー命令により使用される全てのレガシーレジスタは、その対応するホストプロセッサレジスタにマップされる。ここでもまた、「X−port」のレジスタマッピング構成要素がこのサービスを実行する。
3.レジスタがマップされて一時レジスタが割り当てられたので、必要に応じて、レガシー変換プログラム機能は、「ネイティブ命令生成プログラム」機能を呼び出し、生のバイナリ形式でホストプロセッサ命令を生成する。この例では、7つの異なる「IA−64」命令が要求され(「sxt4」が3度使用される)、従って、7つの異なるネイティブ命令生成プログラム機能が使用される。
1.1つ又はそれ以上の一時(スクラッチ)レジスタが必要な場合がある。その場合には、それらは、レジスタマッピングを担う「X−port」オブジェクトから要求される。循環する一時レジスタのセットが使用される。「IA−64」ネイティブプロセッサについては、「IA−64」の128個の汎用レジスタのいくつかは、一時レジスタとして専用に使用される。
2.レガシー命令により使用される全てのレガシーレジスタは、その対応するホストプロセッサレジスタにマップされる。ここでもまた、「X−port」のレジスタマッピング構成要素がこのサービスを実行する。
3.レジスタがマップされて一時レジスタが割り当てられたので、必要に応じて、レガシー変換プログラム機能は、「ネイティブ命令生成プログラム」機能を呼び出し、生のバイナリ形式でホストプロセッサ命令を生成する。この例では、7つの異なる「IA−64」命令が要求され(「sxt4」が3度使用される)、従って、7つの異なるネイティブ命令生成プログラム機能が使用される。
この処理の出力は、最終的にレガシー命令と同じ機能を実行する直接的な連続するネイティブプロセッサ命令セットである。図12において、得られる各「IA−64」ホストプロセッサ命令は、更なる参照のために番号が付けられる。図示の「Alpha」命令に関して見られるように、適正なエミュレーションのために9つの「IA−64」命令が必要である。その数は、レガシー命令混合に依存してそれよりも多いか又は少ない可能性がある。
この命令セットは、パッケージ化してそのまま実行することができるが、これは、「IA−64」ホストプロセッサ上で性能の劣化をもたらすであろう。このプロセッサの性能を向上させるために命令パッケージ化を実行すべき方法を以下に簡単に説明する。この情報は「IA−64」に特異であるが、最大の性能を達成するために、他のホストプロセッサは、同様のコード再編成を要求することができ、また要求するであろう。
「IA−64」アーキテクチャは、命令が命令バンドルに分類されることを要求する。命令バンドルのレイアウトは、図13に見ることができる。各バンドルは、それぞれの長さが41ビットの3つの「IA−64」命令から成る。バンドルはまた、この3つの命令のセットにより要求されたプロセッサリソースを説明するために使用される5ビットのテンプレートフィールドを含む。これらのリソースは、プロセッサ実行ユニットである。
図14は、「Itanium 2」プロセッサにおいて利用可能な実行ユニットを示す。これらには、4つのメモリユニット(多くの簡単な整数及び論理命令を実行することもできる)、2つの整数ユニット、2つの浮動小数点ユニット(長い又は拡張命令も実行する)、及び3つの分岐ユニットが含まれる。図はまた、これらのリソースを一組の2つの命令バンドルに対して使用することができる方法を示す。これについて以下に更に説明する。適切なプロセッサリソースが利用可能な場合には、「IA−64」プロセッサが2つの完全な命令バンドル(6つの命令)を一度に実行することができる点に注意すべきである。
バンドルのテンプレートフィールドは、バンドル内の命令により実行ユニットのどの組合せが必要とされるかを指定する。例えば、テンプレートフィールド値16は、メモリユニット、整数ユニット、及び分岐ユニットが必要であることを意味するコード「MIB」を表す。テンプレートフィールドはまた、任意の新しい命令がプロセッサにより受け入れられる前に、現在実行されている全ての命令を完了すべきであることを意味する「停止」条件を指定することができる。停止は、データ依存性違反を防ぐために使用される。テンプレートタイプ17もまた「MIB」タイプであるが、バンドルの終りにおける停止も指定する。それは、表記「MIB_」により示される。
用語「IA−64命令グループ」は、並列実行に対して全て適格である「IA−64」命令のグループを意味する。「IA−64」命令グループは、最終的に、最後に停止を含むべきである1つ又はそれ以上の命令バンドルに編成される。
「IA−64」ホストアーキテクチャに関するこの情報を使用して、変換処理の次の段階を検査することができる。図15は、「IA−64」ホストプロセッサのための次の段階を示す。
図15は、互いのデータ依存性を全く含まない図12からの命令セットを示す。これは、単一の「IA−64」命令グループである。
「IA−64」ホストアーキテクチャに関するこの情報を使用して、変換処理の次の段階を検査することができる。図15は、「IA−64」ホストプロセッサのための次の段階を示す。
図15は、互いのデータ依存性を全く含まない図12からの命令セットを示す。これは、単一の「IA−64」命令グループである。
「IA−64」ホストプロセッサの良好な性能のための要件は、最大の並列処理に対してデータ依存性違反が許されない順番に命令を適切にスケジュールに入れるということである。従って、「X−port」の「IA−64」特異部分は、図12で出された命令ストリームを解析し、どの命令を同時に安全に実行することができるかを判断する。図15において、命令1、2、5、6、及び8には、それらの間にレジスタ依存性がなく、従って並列に安全に実行することができることが分る。しかし、これは、5つの命令のリストである。「IA−64」命令バンドルは、これらの命令を含むように選択されるべきである。得られる命令バンドルは、次に、実行可能「IA−64」コードとしてメモリに記憶される。「IA−64」の「movl」命令は、2つのバンドルスロットを要求することに注意すべきである。
図16は、単に3つの命令(3、7、及び9)を有する第2の「IA−64」命令グループを示す。この「IA−64」命令グループは、タイプ「MIB」の単一バンドルに適合することになる。この例では発生しないが、全ての命令バンドルを満たすことはできない可能性がある。このような場合には、どのバンドルスロットにも演算コードを挿入してバンドルを完成させることはできない。「IA−64」命令バンドルの作成は、処理の終了を表す。この形式になった状態で、「IA−64」命令は、ホストプロセッサにより直接に実行可能である。
事後変換最適化の例
以下は、変換が発生した後に呼び出すことができるオプティマイザーの例である。この例では、「Alpha」レガシープロセッサと「IA−64」ネイティブプロセッサとを仮定する。その目的は、「叙述」と呼ばれる「IA−64」ホストプロセッサの機能を使用して短い前方分岐を除外することである。叙述は、1つ又はそれ以上の命令を条件付きで実行することを考慮する。
以下の例は、「IA−64」叙述機能を使用する理由を示すために、簡単な「C」言語「if−then」構成を示す。(レジスタr5は「a」、r6は「b」、及びr7は「c」と仮定される。)そこから分るように、aがbよりも大きい時は、変数cは値0を取ることになる。それ以外は、cは1に等しく設定されることになる。この種の説明は、図に見られるようなアセンブリ言語で表すことができる。
以下は、変換が発生した後に呼び出すことができるオプティマイザーの例である。この例では、「Alpha」レガシープロセッサと「IA−64」ネイティブプロセッサとを仮定する。その目的は、「叙述」と呼ばれる「IA−64」ホストプロセッサの機能を使用して短い前方分岐を除外することである。叙述は、1つ又はそれ以上の命令を条件付きで実行することを考慮する。
以下の例は、「IA−64」叙述機能を使用する理由を示すために、簡単な「C」言語「if−then」構成を示す。(レジスタr5は「a」、r6は「b」、及びr7は「c」と仮定される。)そこから分るように、aがbよりも大きい時は、変数cは値0を取ることになる。それ以外は、cは1に等しく設定されることになる。この種の説明は、図に見られるようなアセンブリ言語で表すことができる。
最も現代的なマイクロプロセッサアーキテクチャは、cの値を条件付きで設定するために使用される1つ又はそれ以上の分岐を必要とすることになる。しかし、「IA−64」の実行は、叙述によるものではない。「IA−64」の「cmp.gt」命令は、r5とr6を比較し、真又は偽(1又は0)の値を述部レジスタp1及びp2に記憶する。それらのレジスタ内の結果は、次の2つの命令を条件付きで実行するために使用される。第1の「mov」は、p1=1の時にのみ実行される。第2の「mov」は、p2=1の時にのみ実行される。所定の比較命令は、比較の真又は偽の結果をp1に、その結果の補完をp2内に戻すので、「mov」命令の一方だけが有効である。他方は実行されない。
この概念は、短い前方条件付き分岐を解消するために使用することができる。図17は、短い前方条件付き分岐命令(BEQ)を含む「Alpha」コードの小さな断片を示す。分岐がアドレス100Cで行われる場合、1010と1014での命令は実行されないことになる。分岐条件が満足されない場合、分岐は中止され、それらは実行されることになる。
この概念は、短い前方条件付き分岐を解消するために使用することができる。図17は、短い前方条件付き分岐命令(BEQ)を含む「Alpha」コードの小さな断片を示す。分岐がアドレス100Cで行われる場合、1010と1014での命令は実行されないことになる。分岐条件が満足されない場合、分岐は中止され、それらは実行されることになる。
図に示す通り、「BEQ」命令は、結果を「IA−64」述部レジスタに記憶する「IA−64」比較命令で置換することができる。これらの述部レジスタは、次に、「Alpha」の「ORNOT」及び「ADDQ」命令に対する「IA−64」同等コードを条件付きで実行するために使用することができ、不要な条件付き分岐を解消する。これは有益であり、その理由は、現代のマイクロプロセッサがそれらが正しい命令パスであると信じるものに沿って命令を予めフェッチしようとするからである。条件付き分岐が取られるか否かに関してプロセッサが予測を間違えた場合、既にプロセッサのパイプラインに存在する間違って予測された命令はフラッシュされるべきであり、かつ代替パスに沿った命令が実行のためにフェッチされるべきであるから、性能ペナルティが課せられる。これらの理由のために、条件付き分岐をできる限り解消することが通常は望ましい。
このオプティマイザーの例は、レガシープロセッサには存在しないネイティブプロセッサの特徴を利用することができるものである。
最適化モジュールは、変換レガシーコード(得られる「IA−64」コード)を検索して短い前方条件付き分岐を探す。それらを発見すると、それは分岐を解消し、比較のために「IA−64」バイナリコードを生成し、叙述される命令を修正する。この処理は、変換の後であるが、ネイティブ命令が実行のためにメモリに記憶される前に起きる。すなわち、それらの挙動を修正することは依然として可能である。
最適化モジュールは、変換レガシーコード(得られる「IA−64」コード)を検索して短い前方条件付き分岐を探す。それらを発見すると、それは分岐を解消し、比較のために「IA−64」バイナリコードを生成し、叙述される命令を修正する。この処理は、変換の後であるが、ネイティブ命令が実行のためにメモリに記憶される前に起きる。すなわち、それらの挙動を修正することは依然として可能である。
事前変換最適化の例
以下は、事前変換最適化の例である。それは、関数のインライン化の実行を可能にする。インライン化は、関数自体にジャンプするように設定するのではなく、関数の内容を「インライン」で拡張するコンパイラ技術である。インライン化に適する関数は一般に小さく、他の関数を頻繁に呼び出さない。関数インライン化の欠点は、その関数のためのコードが、それが呼び出されるどの場所でも複製されることである。これは、プログラムのメモリ要件を増加させる。しかし、「IA−64」のような現代のネイティブプロセッサは、数ギガバイトのランダムアクセスメモリを含むことができる。そのようなプロセッサに対しては、関数インライン化のメモリペナルティは、目立つほどでもない。
以下の例は、小さな「C」言語コード例を示す。ここでは、「funcX」は、非常に簡単な演算を実行する「funcY」を呼び出す。最適化コンパイラは、プログラマーにより選択された最適化に基づいて、「funcY」をインライン化するように選択することができる。
以下は、事前変換最適化の例である。それは、関数のインライン化の実行を可能にする。インライン化は、関数自体にジャンプするように設定するのではなく、関数の内容を「インライン」で拡張するコンパイラ技術である。インライン化に適する関数は一般に小さく、他の関数を頻繁に呼び出さない。関数インライン化の欠点は、その関数のためのコードが、それが呼び出されるどの場所でも複製されることである。これは、プログラムのメモリ要件を増加させる。しかし、「IA−64」のような現代のネイティブプロセッサは、数ギガバイトのランダムアクセスメモリを含むことができる。そのようなプロセッサに対しては、関数インライン化のメモリペナルティは、目立つほどでもない。
以下の例は、小さな「C」言語コード例を示す。ここでは、「funcX」は、非常に簡単な演算を実行する「funcY」を呼び出す。最適化コンパイラは、プログラマーにより選択された最適化に基づいて、「funcY」をインライン化するように選択することができる。
他方では、本発明によるバイナリ変換プログラムは、インライン化に対して遥かに広い範囲の関数を選択することができてもよく、速度のためにメモリ使用量を犠牲にする。それぞれのインライン化された関数に対して、レガシーコードの以下の部分を省略することができる。
1.設定コード:通常は、関数呼び出しを実行するために必要なある量の設定が存在する。これは、恐らく最大6つのレガシー命令までの領域内であるが、プラットフォーム毎に変動する可能性がある。
2.無条件分岐:「ジャンプ」命令は、呼び出されている関数へコード実行をベクトル処理する。
3.関数プリアンブル:一般に、関数は、通常はいくつかの命令から成るある種のプリアンブルを含む。プリアンブル内で実行される演算は、データ領域に対するグローバルポインタの設定を含む。
4.関数復帰:関数からの復帰は、一般にいくつかのクリーンアップ命令を伴う。
5.無条件分岐:「復帰」命令は、コード実行を呼び出し関数へベクトル処理して戻す。
1.設定コード:通常は、関数呼び出しを実行するために必要なある量の設定が存在する。これは、恐らく最大6つのレガシー命令までの領域内であるが、プラットフォーム毎に変動する可能性がある。
2.無条件分岐:「ジャンプ」命令は、呼び出されている関数へコード実行をベクトル処理する。
3.関数プリアンブル:一般に、関数は、通常はいくつかの命令から成るある種のプリアンブルを含む。プリアンブル内で実行される演算は、データ領域に対するグローバルポインタの設定を含む。
4.関数復帰:関数からの復帰は、一般にいくつかのクリーンアップ命令を伴う。
5.無条件分岐:「復帰」命令は、コード実行を呼び出し関数へベクトル処理して戻す。
関数のインライン化は、多くの場合、解消することができるレガシーコード量のために性能の向上をもたらすことができる。
このオプティマイザーは、レガシーコードが変換される前であって、かつグループ分けされた後にレガシーコードに対して機能する。それは、関数呼び出しを検索し、それがインライン化に対する有効な関数を見つけた時、バイナリ変換システムに対するヒントを挿入する。
このオプティマイザーは、レガシーコードが変換される前であって、かつグループ分けされた後にレガシーコードに対して機能する。それは、関数呼び出しを検索し、それがインライン化に対する有効な関数を見つけた時、バイナリ変換システムに対するヒントを挿入する。
この最適化は、本来のレガシーシステムよりもインライン化をより実現可能にするための豊富なメモリを有すること以外、「IA−64」ホストプロセッサの機能に特異のものではない。
以上の教示に鑑みて、明らかに本発明の多くの修正及び変形が可能である。すなわち、特許請求の範囲内で、本発明は上記で特に説明されたもの以外によって実施できることが理解されるものとする。
「Unix」、「Intel」、「Itanium」、「Linux」及び「Windows」は登録商標である。
以上の教示に鑑みて、明らかに本発明の多くの修正及び変形が可能である。すなわち、特許請求の範囲内で、本発明は上記で特に説明されたもの以外によって実施できることが理解されるものとする。
「Unix」、「Intel」、「Itanium」、「Linux」及び「Windows」は登録商標である。
42 サンクオブジェクト
44、48 ネイティブ命令グループ
46 サンクを有するネイティブ命令グループ
44、48 ネイティブ命令グループ
46 サンクを有するネイティブ命令グループ
Claims (1)
- レガシーバイナリ命令を読み込んでファイルにロードするためのローダーサブシステムと、
前記レガシーバイナリ命令をネイティブバイナリ命令に直接変換するための、異なるレガシー及びネイティブプロセッサと共に使用するように再設定可能な変換プログラムと、
を含むことを特徴とするバイナリ変換プログラム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/388,301 US8423976B2 (en) | 2003-03-13 | 2003-03-13 | Extreme pipeline and optimized reordering technology |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004280795A true JP2004280795A (ja) | 2004-10-07 |
Family
ID=32771633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004044906A Abandoned JP2004280795A (ja) | 2003-03-13 | 2004-02-20 | エクストリームパイプライン及び最適化再配列技術 |
Country Status (9)
Country | Link |
---|---|
US (1) | US8423976B2 (ja) |
EP (2) | EP1457881A1 (ja) |
JP (1) | JP2004280795A (ja) |
KR (1) | KR20040081379A (ja) |
CN (1) | CN1570870A (ja) |
AU (1) | AU2004200608B2 (ja) |
CA (1) | CA2456244A1 (ja) |
RU (1) | RU2004107417A (ja) |
TW (1) | TWI252431B (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008545179A (ja) * | 2005-05-12 | 2008-12-11 | マイクロソフト コーポレーション | 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン |
JP2014182813A (ja) * | 2013-03-16 | 2014-09-29 | Intel Corp | 命令エミュレーションプロセッサ、方法、およびシステム |
US9703562B2 (en) | 2013-03-16 | 2017-07-11 | Intel Corporation | Instruction emulation processors, methods, and systems |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7233998B2 (en) * | 2001-03-22 | 2007-06-19 | Sony Computer Entertainment Inc. | Computer architecture and software cells for broadband networks |
US7305681B2 (en) * | 2003-03-20 | 2007-12-04 | Nokia Corporation | Method and apparatus for providing multi-client support in a sip-enabled terminal |
US7478390B2 (en) * | 2003-09-25 | 2009-01-13 | International Business Machines Corporation | Task queue management of virtual devices using a plurality of processors |
US7496917B2 (en) | 2003-09-25 | 2009-02-24 | International Business Machines Corporation | Virtual devices using a pluarlity of processors |
US7475257B2 (en) * | 2003-09-25 | 2009-01-06 | International Business Machines Corporation | System and method for selecting and using a signal processor in a multiprocessor system to operate as a security for encryption/decryption of data |
US7389508B2 (en) * | 2003-09-25 | 2008-06-17 | International Business Machines Corporation | System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment |
US7415703B2 (en) * | 2003-09-25 | 2008-08-19 | International Business Machines Corporation | Loading software on a plurality of processors |
US7549145B2 (en) | 2003-09-25 | 2009-06-16 | International Business Machines Corporation | Processor dedicated code handling in a multi-processor environment |
US20050071828A1 (en) * | 2003-09-25 | 2005-03-31 | International Business Machines Corporation | System and method for compiling source code for multi-processor environments |
US7516456B2 (en) | 2003-09-25 | 2009-04-07 | International Business Machines Corporation | Asymmetric heterogeneous multi-threaded operating system |
US7444632B2 (en) | 2003-09-25 | 2008-10-28 | International Business Machines Corporation | Balancing computational load across a plurality of processors |
US7523157B2 (en) * | 2003-09-25 | 2009-04-21 | International Business Machines Corporation | Managing a plurality of processors as devices |
US7290253B1 (en) * | 2003-09-30 | 2007-10-30 | Vmware, Inc. | Prediction mechanism for subroutine returns in binary translation sub-systems of computers |
US8091090B2 (en) * | 2004-07-31 | 2012-01-03 | Hewlett-Packard Development Company, L.P. | Method for providing scratch registers for use by a virtual-machine monitor |
US7314491B2 (en) * | 2004-12-29 | 2008-01-01 | Bull Hn Information Systems Inc. | Encapsulation of large native operating system functions as enhancements of the instruction set in an emulated central processor system |
CN100377088C (zh) * | 2005-03-04 | 2008-03-26 | 中国科学院计算技术研究所 | 二进制翻译中局部变量识别和提升的处理方法 |
GB2424727B (en) | 2005-03-30 | 2007-08-01 | Transitive Ltd | Preparing instruction groups for a processor having a multiple issue ports |
WO2006103395A1 (en) | 2005-03-30 | 2006-10-05 | Transitive Limited | Preparing instruction groups in a processor having multiple issue ports |
KR100662846B1 (ko) * | 2005-11-09 | 2007-01-02 | 삼성전자주식회사 | 데이터 처리 시스템 및 데이터 처리방법 |
KR100810268B1 (ko) * | 2006-04-06 | 2008-03-06 | 삼성전자주식회사 | 모바일 디스플레이 장치에서의 색약자를 위한 구현 방법 |
US7712092B2 (en) * | 2007-10-01 | 2010-05-04 | The Board Of Trustees Of The Leland Stanford Junior University | Binary translation using peephole translation rules |
US20090164982A1 (en) * | 2007-12-21 | 2009-06-25 | Sun Microsystems, Inc. | Method and system for transforming binaries to use different instructions |
KR101579589B1 (ko) * | 2009-02-12 | 2015-12-22 | 삼성전자 주식회사 | 파이프라인 프로세서를 위한 정적 분기 예측 방법과 이를 위한 컴파일 방법 |
ES2587397T3 (es) * | 2009-03-20 | 2016-10-24 | Hanmi Science Co., Ltd. | Procedimiento para preparar un conjugado específico de sitio de un polipéptido fisiológicamente activo |
US8510724B2 (en) * | 2010-12-17 | 2013-08-13 | Microsoft Corporation | Reconstructing program control flow |
US9081896B1 (en) * | 2012-03-21 | 2015-07-14 | Amazon Technologies, Inc. | Generating a replacement binary for emulation of an application |
CN104063234B (zh) * | 2013-03-19 | 2017-06-27 | 华为技术有限公司 | 一种兼容方法及装置 |
CN105359090A (zh) * | 2013-04-26 | 2016-02-24 | 纽约市哥伦比亚大学理事会 | 用于移动应用的系统和方法 |
US9658867B2 (en) | 2013-05-30 | 2017-05-23 | Hewlett Packard Enterprise Development Lp | Preserving object code translations of a library for future reuse by an emulator |
WO2014209361A1 (en) * | 2013-06-28 | 2014-12-31 | Abhik Sarkar | Binary translation for multi-processor and multi-core platforms |
US10120663B2 (en) | 2014-03-28 | 2018-11-06 | Intel Corporation | Inter-architecture compatability module to allow code module of one architecture to use library module of another architecture |
US9268561B1 (en) * | 2014-12-10 | 2016-02-23 | Sap Se | Federated services to dynamically switch features in applications |
WO2016094798A1 (en) | 2014-12-12 | 2016-06-16 | Quantex Research Corporation | Process for depolymerizing coal to co-produce pitch and naphthalene |
US11403099B2 (en) | 2015-07-27 | 2022-08-02 | Sony Interactive Entertainment LLC | Backward compatibility by restriction of hardware resources |
US9928062B2 (en) | 2016-03-04 | 2018-03-27 | International Business Machines Corporation | ISA-ported container images |
WO2017153815A1 (en) | 2016-03-11 | 2017-09-14 | Lzlabs Gmbh | Load module compiler |
US10303488B2 (en) * | 2016-03-30 | 2019-05-28 | Sony Interactive Entertainment Inc. | Real-time adjustment of application-specific operating parameters for backwards compatibility |
US10275239B2 (en) | 2016-03-30 | 2019-04-30 | Sony Interactive Entertainment Inc. | Deriving application-specific operating parameters for backwards compatiblity |
US10915333B2 (en) | 2016-03-30 | 2021-02-09 | Sony Interactive Entertainment Inc. | Deriving application-specific operating parameters for backwards compatiblity |
CN110352400B (zh) * | 2017-03-08 | 2021-05-04 | 华为技术有限公司 | 用于处理报文的方法和装置 |
US11422815B2 (en) * | 2018-03-01 | 2022-08-23 | Dell Products L.P. | System and method for field programmable gate array-assisted binary translation |
US10747658B2 (en) | 2018-11-19 | 2020-08-18 | Paypal, Inc. | Systems and methods for testing online use-case scenarios in a staging environment |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US5875318A (en) * | 1996-04-12 | 1999-02-23 | International Business Machines Corporation | Apparatus and method of minimizing performance degradation of an instruction set translator due to self-modifying code |
DE19617842A1 (de) | 1996-05-03 | 1997-11-13 | Siemens Nixdorf Inf Syst | Verfahren zur Codetransformation |
US6026238A (en) * | 1997-08-18 | 2000-02-15 | Microsoft Corporatrion | Interface conversion modules based upon generalized templates for multiple platform computer systems |
US6212614B1 (en) * | 1998-01-05 | 2001-04-03 | Trw Inc. | Legacy MIL-STD-1750A software emulator address translation using power PC memory management hardware |
US6041402A (en) * | 1998-01-05 | 2000-03-21 | Trw Inc. | Direct vectored legacy instruction set emulation |
US6272453B1 (en) * | 1998-01-05 | 2001-08-07 | Trw Inc. | Concurrent legacy and native code execution techniques |
US6247172B1 (en) * | 1998-07-02 | 2001-06-12 | Hewlett-Packard Company | Method for a translation system that aggressively optimizes and preserves full synchronous exception state |
US6223339B1 (en) * | 1998-09-08 | 2001-04-24 | Hewlett-Packard Company | System, method, and product for memory management in a dynamic translator |
US6711672B1 (en) * | 2000-09-22 | 2004-03-23 | Vmware, Inc. | Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers |
-
2003
- 2003-03-13 US US10/388,301 patent/US8423976B2/en not_active Expired - Lifetime
-
2004
- 2004-01-26 CA CA002456244A patent/CA2456244A1/en not_active Abandoned
- 2004-02-03 TW TW093102404A patent/TWI252431B/zh not_active IP Right Cessation
- 2004-02-17 AU AU2004200608A patent/AU2004200608B2/en not_active Ceased
- 2004-02-20 JP JP2004044906A patent/JP2004280795A/ja not_active Abandoned
- 2004-03-01 EP EP04003661A patent/EP1457881A1/en not_active Ceased
- 2004-03-01 CN CNA200410006961XA patent/CN1570870A/zh active Pending
- 2004-03-01 EP EP10005247A patent/EP2290537A3/en not_active Withdrawn
- 2004-03-12 KR KR1020040016863A patent/KR20040081379A/ko not_active Application Discontinuation
- 2004-03-12 RU RU2004107417/09A patent/RU2004107417A/ru not_active Application Discontinuation
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008545179A (ja) * | 2005-05-12 | 2008-12-11 | マイクロソフト コーポレーション | 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン |
JP2014182813A (ja) * | 2013-03-16 | 2014-09-29 | Intel Corp | 命令エミュレーションプロセッサ、方法、およびシステム |
US9703562B2 (en) | 2013-03-16 | 2017-07-11 | Intel Corporation | Instruction emulation processors, methods, and systems |
Also Published As
Publication number | Publication date |
---|---|
CN1570870A (zh) | 2005-01-26 |
EP1457881A1 (en) | 2004-09-15 |
AU2004200608B2 (en) | 2010-06-10 |
KR20040081379A (ko) | 2004-09-21 |
TWI252431B (en) | 2006-04-01 |
AU2004200608A1 (en) | 2004-09-30 |
EP2290537A3 (en) | 2011-11-16 |
US20040181785A1 (en) | 2004-09-16 |
TW200504595A (en) | 2005-02-01 |
US8423976B2 (en) | 2013-04-16 |
EP2290537A2 (en) | 2011-03-02 |
RU2004107417A (ru) | 2005-08-20 |
CA2456244A1 (en) | 2004-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2004280795A (ja) | エクストリームパイプライン及び最適化再配列技術 | |
JP4841118B2 (ja) | ソフトウェア開発インフラストラクチャ | |
US6738967B1 (en) | Compiling for multiple virtual machines targeting different processor architectures | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
Craig | Virtual machines | |
US8079023B2 (en) | Typed intermediate language support for existing compilers | |
EP2523108B1 (en) | Processing method | |
Kelsey et al. | A tractable Scheme implementation | |
US20030167458A1 (en) | Programmatic access to the widest mode floating-point arithmetic supported by a processor | |
EP1283465A2 (en) | Transforming & caching computer programs | |
CN116934330A (zh) | 一种调用智能合约的方法及执行方法、计算机设备及存储介质 | |
Cifuentes et al. | Experience in the design, implementation and use of a retargetable static binary translation framework | |
Tanaka et al. | Safe low-level code generation in Coq using monomorphization and monadification | |
Markstedter | Blue Fox: Arm Assembly Internals and Reverse Engineering | |
Ogel et al. | Supporting efficient dynamic aspects through reflection and dynamic compilation | |
JP2003099254A (ja) | 異種実行環境における計算機システム構成方法、および、異種実行環境で実行させるためのプログラム | |
CN116931948A (zh) | 一种优化wasm字节码的方法及执行方法、计算机设备及存储介质 | |
CN116909652A (zh) | 一种启动WebAssembly程序的方法、计算机设备及存储介质 | |
CN116931947A (zh) | 一种优化wasm字节码的方法及执行方法、计算机设备及存储介质 | |
CN116932085A (zh) | 一种启动WebAssembly程序的方法、计算机设备及存储介质 | |
CN116931949A (zh) | 一种优化wasm字节码的方法及执行方法、计算机设备及存储介质 | |
Seitz Jr et al. | Virtual machine and bytecode for optimization on heterogeneous systems | |
Hunt | The Provision of Non-Strictness, Higher Kinded Types and Higher Ranked Types on an Object Oriented Virtual Machine | |
Seitz | The design and implementation of a bytecode for optimization on heterogeneous systems | |
Reedy | Compiling Scala to LLVM |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070220 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20070308 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070308 |