(57)【要約】      （修正有）【課題】元のプロセッサ及び目標プロセッサの異なるサイズのアドレス空間を正しく考慮し、できる限り、少ない命令によりベースレジスタ相対命令を変換する方法を規定し、効果的なエミュレーションを提供する。【解決手段】元のプロセッサがアドレス指定のためにｎビットの長さを有するアドレスを使用し、目標プロセッサはｍビットの長さを有するアドレスを使用し、ｍはｎよりも大きい。目標プロセッサ上の投影されたアドレスは、ベースレジスタ相対命令の第１のオフセット（Ｄ１）以上であり、差（ｍａｘ−ｍｉｎ）未満のオフセット（Ｄ）及びベースレジスタ（Ｒ）の内容の和を形成し、ｎビットの長さを有するアドレスで巡回アドレス空間に和を投影する。ベースレジスタ相対命令を変換するためのアドレスは、算出された投影アドレス及び命令のそれぞれの距離値（Ｄ１．Ｄ２）からオフセットＤを引いた値によって求められる。【選択図】図１
2011192282.tif 000002
【特許請求の範囲】
【請求項１】
元のプロセッサ用に作成されたプログラム・コードのエミュレーションにおいてベース・レジスタ相対アドレス指定を有する少なくとも２つの命令を目標プロセッサのプログラム・コードに変換する方法であって、
前記元のプロセッサは、巡回アドレス空間においてｎビット長のアドレスを使用し、
前記目標プロセッサは、ｍビット長のアドレスを使用し、ｍはｎよりも大きく、
前記目標プロセッサは、より低い値（ｍｉｎ）と、より高い値（ｍａｘ）との間に位置する距離値でのベース・レジスタ相対アドレス指定を可能にし、
以下の工程に記載したアドレス・オペランドの変換が前記目標プロセッサ上の意味論的に同等な挙動につながり、
ベース・レジスタ（Ｒ）に対する第１のオフセット（Ｄ１）で生じるアドレス・オペランドで前記元のプロセッサの第１の命令を変換する工程と、
前記第１のオフセット（Ｄ１）以上であり、差（ｍａｘ−ｍｉｎ）未満であるオフセット（Ｄ）及び前記ベース・レジスタ（Ｒ）の内容の和を形成することにより、前記目標プロセッサ上の投影アドレスを判定する工程と、
ｎビットの長さを有するアドレスを有する巡回アドレス空間に和を投影する工程と、
前記投影アドレス及び前記第１のオフセット（Ｄ１）の和からオフセット（Ｄ）を引いたものとして前記目標プロセッサ上の第１のアドレスを求める工程と、
前記第１のアドレスを前記アドレス・オペランドとして、前記目標プロセッサ上で、変換された第１の命令を実行する工程と、
ベース・レジスタ（Ｒ）に対する第２のオフセット（Ｄ２）で生じるアドレス・オペランドで前記元のプロセッサの第２の命令を変換する工程と、
前記投影アドレス及び前記第２のオフセット（Ｄ２）の和から前記オフセット（Ｄ）を引いたものとして前記目標プロセッサ上の第２のアドレスを求める工程と、
前記第２のアドレスを前記アドレス・オペランドとして、前記目標プロセッサ上で、変換された第２の命令を実行する工程と
を含む方法。
【請求項２】
請求項１記載の方法であって、前記投影されたアドレスが前記目標プロセッサのレジスタ（ｒｐ）に確保され、前記目標プロセッサ上のベース・レジスタ相対アドレス指定を有する前記変換された命令のうちの少なくとも１つが、前記ベース・レジスタとして前記レジスタ（ｒｐ）に対するベース・レジスタ相対アドレス指定を有する命令である方法。
【請求項３】
請求項１又は２に記載の方法であって、前記元のプロセッサの並列のアドレス空間が前記目標プロセッサのアドレス空間における別個のアドレス空間にマッピングされる方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、元のプロセッサ用に作成されたプログラムの目標プロセッサ上のエミュレーションにおけるベース・レジスタ相対アドレス指定を有する少なくとも２つの命令を変換する方法に関し、元のプロセッサは、巡回アドレス空間におけるアドレス指定のためにｎビットの第１の長さのアドレスを使用し、目標プロセッサは、アドレス指定のためにｍビットの長さのアドレスを使用し、ここで、ｍはｎよりも大きい。
【背景技術】
【０００２】
より新しいプロセッサ及びアーキテクチャが導入されると、より旧いプロセッサ・システム用に開発されたプログラムを使用し続けることができることが望ましい。この目的で、エミュレータが使用される。エミュレータは、より新しいプロセッサ・システム上で、より旧いプロセッサ・システムを模倣し、目標プロセッサとも呼ばれる、より新しいプロセッサ上で、元のプロセッサとも呼ばれる、より旧いプロセッサ用に作成されたプログラム・コードを実行することを可能にする。エミュレータは通常、それ自体が、目標プロセッサ上で実行され、目標プロセッサ上で直接、効率的に実行するために元のプロセッサの命令シーケンスを目標プロセッサの命令シーケンスに動的に変換するプログラムである。
【０００３】
命令の変換の一部として、命令（例えば、ロード命令、ジャンプ命令）のアドレス演算子を正しく変換しなければならない。多くのプロセッサ・アーキテクチャで提供され、頻繁に使用されるアドレス指定方法では、アドレスは、ベース・レジスタ及びオフセットの指定によって規定される。アドレスは、特定されたベース・レジスタ及びオフセットの内容の和として実行時に算出される。前述のアドレス指定手法を使用する命令は、ベース・レジスタ相対アドレス指定を有する命令とも呼ばれる。簡潔に、「ベース・レジスタ相対命令」という語も一般的である。
【０００４】
前述のべース・レジスタ相対命令によって到達可能なアドレス空間は、レジスタのビット幅に基づいた最大アドレス指定可能なアドレス空間よりも小さいことが多い。例えば、ＩＢＭ社によるＳ／３９０プロセッサは、３２ビットの利用可能なビット幅を有する。２４ビット長又は３１ビット長のアドレスを有するアドレス空間を選択することが可能であるので、考えられるアドレス空間は、０乃至２２４−１又は０乃至２３１−１の範囲を含む。アドレス空間は、更に、アドレス空間のエッジを越える算出されたアドレスが、アドレス空間にラップアラウンドされるように巡回的に構成される。これは、例えば、アドレス・レジスタの内容にオフセットを加えたものによって生じるアドレスをアドレス空間の容量で除算し、前述の除算によって生じる剰余（これは、その場合、有効アドレスとして、アドレス空間に存在する）を使用することによって行うことが可能である。前述の算出は、モデュロ演算又はラップアラウンド算出として表す。
【０００５】
より新しいプロセッサ・アーキテクチャのアドレス指定幅が一般的により大きいことにより、より新しいプロセッサは、より旧いプロセッサ・システムのより小さなアドレス空間を必ずしもサポートしない。別々のサイズのアドレス空間は、しかし、プログラム・コードのエミュレーションの場合、問題があることがあり得る。例えば、元のプロセッサのアドレス空間の外にあるが、目標プロセッサのより大きなアドレス空間において表すことが可能なロード又はジャンプ命令の算出されたアドレスは、元のプロセッサ上のラップアラウンドを考慮に入れて求められる実効アドレスとは、エミュレートされたプログラムにおいて異なる。しかしながら、エミュレーションにおいて正確にアドレスを算出するために、更なる命令を、変換されたプログラム・コードに挿入することが必要であり、それにより、元のプロセッサにおけるアドレス空間のより小さなサイズが考慮に入れられる。これは例えば、まず、ベース・レジスタの内容並びに第１の命令及び第２の命令におけるオフセットの和として一時レジスタにおいてアドレスを判定し、モデュロ２ｎ型の演算を使用することにより、ラップアラウンドを、より小さいアドレス空間にエミュレートすることによって行うことが可能である。次いで、ジャンプ又はデータ・アクセスは一時レジスタにおけるアドレスを介して実行すること可能である。ベース・レジスタ相対命令は、実際に、このようにして、意味論的に正しくエミュレートされるが、エミュレーションは、命令毎に更なる２つのプログラム命令を必要とし、それにより、減速する。
【０００６】
リング・バッファをアクセスするためにモデュロ・アドレスを生成する方法及び装置が知られている（米国特許第５９１８２５２号明細書）。入力として、方法及び装置は、リング・バッファの長さ、リング・バッファの現在のアドレス、及び、現在のアドレスと、生成される対象の次のアドレスとの間の距離を得る。動作中、現在のアドレスは、ベース・アドレス、及びベース・アクセスに対する距離に分解される。
【０００７】
いくつかの入力により、混合モデュロ・アドレスを生成する装置が知られている（米国特許第５７９０４４３号明細書）。装置は事実上、他の入力が、低減モデュロ入力の部分和にフル・モジュロにおいて同時に加えられる一方で、前述の入力の部分集合を低減モデュロに加える。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の課題は、元のプロセッサ及び目標プロセッサの異なるサイズのアドレス空間が正しく考慮に入れられ、できる限り、少ない更なる命令により、効果的なエミュレーションを同時に可能にするエミュレーションにおいてベース・レジスタ相対命令を変換する方法を規定することである。
【課題を解決するための手段】
【０００９】
前述の課題は、本出願の独立請求項の特徴を備えたエミュレータ及び方法によって解決される。効果的な構成及び精緻化は、それぞれの独立請求項に記載している。
【図面の簡単な説明】
【００１０】
【図１】ベース・レジスタ相対アドレス指定により、２つの命令を変換する方法を示すフローチャートである。
【図２】図１に示す方法を示す擬似コード表現である。
【図３】擬似コード表現におけるベース・レジスタ相対命令を変換する方法の更なる実施例の具体例を示す図である。
【図４】擬似コード表現におけるベース・レジスタ相対命令を変換する方法の更なる実施例の具体例を示す図である。
【図５】擬似コード表現におけるベース・レジスタ相対命令を変換する方法の更なる実施例の具体例を示す図である。
【図６】擬似コード表現におけるベース・レジスタ相対命令を変換する方法の更なる実施例の具体例を示す図である。
【図７】擬似コード表現におけるベース・レジスタ相対命令を変換する方法の更なる実施例の具体例を示す図である。
【図８】擬似コード表現におけるベース・レジスタ相対命令を変換する方法の更なる実施例の具体例を示す図である。
【発明を実施するための形態】
【００１１】
本発明による方法は、実施例の具体例及び図を参照して以下に詳細に説明する。
【００１２】
図の以下の説明では、元のプロセッサのベース・レジスタは、参照符号としてＲでマーキングされ、目標プロセッサのレジスタはｒでマーキングされる。別々のレジスタrｉを区別するためにインデクスを使用することが可能である。単純にするために、参照シンボルＲ及びｒは、それぞれのレジスタを表し、式又は算出では、それぞれのレジスタ内容を表す。元のプロセッサ又は目標プロセッサの距離値は、参照符号としてＤ又はｄを呈する。別々の距離値は、インデクス（例えば、Ｄ１、Ｄ２）を規定することによって区別される。
【００１３】
括弧内の表現は、上記表現によって指定されたアドレスの実効アドレスの、当該プロセッサによって自動的に実行される判定を表す。実効アドレスが算出される当該アドレス空間におけるアドレスの長さは、前述の場合、括弧において示すことが可能である。よって、［２１６＋５］ｎ＝１６という表現は、１６ビット幅の巡回アドレス空間において、アドレス値２１６＋５が実効アドレスに変換されることを意味する。したがって、ラップアラウンドは、上述の例の場合に行われるので、特定された表現は、５という実効アドレスにつながる。
【実施例】
【００１４】
図１は、ベース・レジスタ相対アドレス指定により、命令を変換する方法の第１の実施例の具体例のフロー図を示す。図示した方法は、元のプロセッサのために作成されたプログラム・コードの目標プロセッサ上のエミュレーションの一部として実行される。エミュレーションは、元のプログラム・コードにおける命令を個々に連続して、目標プロセッサのプログラム・コードに変換し、それを直接、実行（解釈）することが可能である。エミュレーションを加速化させるために、特に、プログラム構成部分の複数の実行が期待される場合、例えば、ループ構造の場合、プログラム・コードの少なくとも一部の動的変換であり得る。この場合、元のプログラムの頻繁に実行される部分は、動的に（すなわち、エミュレーション中に）変換され、目標プロセッサの作業メモリに記憶され、必要な場合、複数回、エミュレータの制御下で目標プロセッサ上で最終的に直接実行される。
【００１５】
元のプロセッサ及び目標プロセッサは、異なったサイズのアドレス空間を有する。アドレス空間のサイズの単純化された表示の場合、幅又はビット幅という語は、以下においてレジスタのみに使用されるのみならず、アドレス空間にも使用される。ｎビットの幅を有するアドレス空間は、長さｎのアドレスをそのアドレス空間におけるアドレス指定に使用することが可能である。以下の実施例の具体例の全てでは、元のプロセッサはｎビットの幅のアドレス空間を有し、目標プロセッサはｍビットの幅を有するアドレス空間を有する。ここで、ｍはｎよりも大きい。更に、元のプロセッサのアドレス空間は巡回的であり、目標プロセッサのアドレス空間は巡回的であり得るが、そうでなくてもよい。第２のアドレス空間が同様に巡回的なより一般的なケースは、以下で仮定する。
【００１６】
第１の工程Ｓ１では、ベース・レジスタＲ及びオフセットＤ１を有する、元のプログラム・コードにおける第１のベース・レジスタ相対命令が読み込まれる。目標プロセッサ上での実行のためにこの命令を変換するために、べース・レジスタＲの内容を有するレジスタｒが第２の工程Ｓ２において作成される。このレジスタｒはよって、ベース・レジスタＲをトラッキングする。ベース・レジスタＲは一般に、プログラムの内部では変更されない。工程Ｓ２はしたがって、通常、第１のベース・レジスタ相対命令に関して、プログラムのエミュレーション中に一度のみ必要である。
【００１７】
その後の工程Ｓ３では、工程Ｓ１で読み出された命令のオフセットＤ１及びレジスタｒの内容の和が形成され、目標プロセッサのレジスタｒ１に割り当てられる。フロー図に示す単純な総和ｒ＋Ｄ１の代わりに、レジスタｒ１の内容は、目標プロセッサのｍビット幅のアドレス空間における実効アドレスとして（すなわち、［ｒ＋Ｄ１］ｍとして）算出することも可能である。特に、第２のアドレス空間がやはり巡回的に構成された場合、実効アドレス値でレジスタをロードするために利用可能な特殊プロセッサ命令が通常、存在している。
【００１８】
後続する工程Ｓ４では、レジスタｒ１の内容が、アドレス長ｎを有するアドレス空間（すなわち、元のプロセッサのサイズを有するアドレス空間）に投影される。この投影は、値２ｎでの除算の剰余を得ることによって行われ、これは、一般に、モデュロ演算として表される。
【００１９】
後続工程Ｓ５では、工程Ｓ３及びＳ４において求められた投影アドレスを有するエミュレートされた第１の命令は、レジスタｒ１を介した間接アドレス指定による命令として目標プロセッサ上で実行される。
【００２０】
エミュレーションの更なる過程では、元のプロセッサのプログラム・コードからの第２のベース・レジスタ相対命令が工程Ｓ６で読み込まれる。この第２の命令はやはり、ベース・レジスタＲに対して相対的であり、更に、この内容は工程Ｓ１から変わっておらず、オフセットＤ２を有するものとする。
【００２１】
後続工程Ｓ７では、第２の命令は、第２のオフセットＤ２から第１のオフセットＤ１を引いた差、及び、レジスタｒ１になお記憶された投影アドレスの和として構成される。よって算出された第２のアドレスはレジスタｒ２に記憶される。工程Ｓ３におけるように、第２のレジスタｒ２の内容は、目標プロセッサのｍビット幅のアドレス空間における実効アドレスとして得ることが可能である。
【００２２】
最後に、後続工程Ｓ８では、レジスタｒ２に記憶された、エミュレートされた第２のアドレスを有するエミュレートされた第２の命令は、間接アドレス指定による命令として実行される。
【００２３】
図１の説明では、変換された命令シーケンスは、解釈モードにおいて直ちに実行されるものとする。あるいは、既に示したように、再変換又は解釈（動的変換）なしで一回又は好ましくは複数回、後に実行することができるために、変換を実行し、当初、獲得されたプログラム・コードを記憶することも同様に考えられる。
【００２４】
元のプロセッサのアドレス空間の（より小さな）ビット幅を、ベース・レジスタ相対命令毎のモデュロ演算の使用及び加算により、考慮に入れなければならない既知の手法と比較して、これは、第１の命令の変換においてここで提示する手法においてのみ行わなければならない（工程Ｓ３及びＳ４）。第２の命令の実効アドレスは、単純な加算によってのみ求められる（工程Ｓ７）。エミュレーションの実行時間は、モデュロ演算のセーブによって削減される。このことは、ループのために第２の命令を複数回実行する場合、又は、第２の命令の実効アドレスと同様に実効アドレスを求めることが可能な元のプログラム・コードにおいて更なる命令が続く場合に特にあてはまる。
【００２５】
元のプロセッサにおけるベース・レジスタ相対アドレス指定を有する命令における距離値Ｄの場合、通常、利用可能な限定的な値の範囲が存在しており、このサイズは、アドレス空間のサイズに比べて、かなり小さい場合が大きい。許容される値の範囲の境界がｍｉｎ及びｍａｘで表される場合、結果は、ｍｉｎ≦Ｄ≦ｍａｘである。例えば、ＩＢＭによるモデルＳ／３９０プロセッサの場合、値範囲は０≦Ｄ≦４０９５（１２ビット）である。
【００２６】
工程Ｓ８における第２の命令は特に、ベースとしてのレジスタｒ１及びオフセットとしての工程Ｓ７からの差ｄ＝（Ｄ２−Ｄ１）を有するベース・レジスタ相対命令として目標プロセッサ上で事実上実現することが可能である。このようにして差を得ることにより、オフセットｄの負の値も存在し得る。よって、目標プロセッサが、特にｍｉｎ−ｍａｘ≦ｄ≦ｍａｘ−ｍｉｎの範囲内で、ベース・レジスタ相対ジャンプについて負の値を可能にする図示した方法が前提条件となる。この状態は、制限なしで２３１≦ｄ≦２３１−の範囲での距離値を可能にする、インテル社によるｘ８６シリーズのプロセッサなどの大半の現代のプロセッサにおいて満たされる。
【００２７】
０乃至２ｎ−１のアドレスを有する元のプロセッサの実際のアドレス空間のうち、０乃至２ｎ−１−（ｍａｘ−ｍｉｎ）の範囲内のアドレスのみをエミュレート・プログラムによって使用することを更に必要とする。前述の制約は、アプリケーション・プログラムによって使用されるアドレス空間が相応に制限される規則によって達成することが可能である。別の可能性には、前述の制約が規定されるか、又は監視されるシステム・プログラムの使用がある。
【００２８】
前述の制約なしで、ラップアラウンドが既に元のプロセッサにおいて行われるが、目標プロセッサにおいては行われないので、除外された範囲におけるアドレスの誤った算出が存在する。しかし、差（ｍａｘ−ｍｉｎ）は通常、アドレス空間のサイズよりもずっと小さいので、これは、実際には不利な制約でない。例において上述したＩＢＭシステムＳ／３９０では、（ｍａｘ−ｍｉｎ）は、２１２バイト＝４ｋＢ（キロバイト）である。対照的に、サポートされたアドレス空間のサイズは、２２４バイト＝１６ＭＢ（メガバイト）又は２３１バイト＝２ＧＢ（ギガバイト）である。元々利用可能であった前述の程度の大きさのアドレス空間のうち、アプリケーション・プログラムにもうアクセス可能でないのは、４ＫＢの範囲のみである。アドレス空間の前述の上位メモリ領域は通常、オペレーティング・システム用に予約されており、いずれの場合にもアプリケーション・プログラムによって使用されることが可能でない。本発明はこの点を利用する。
【００２９】
制限されたアドレス空間の前提状況下では、工程Ｓ３において算出される実効アドレスは、メモリ・アクセスを首尾良く行うために、０≦ｒ１≦（２ｎ−１−（ｍａｘ−ｍｉｎ）の範囲になければならない。実効アドレスが工程Ｓ７で算出される（すなわち、ｒ２＝［Ｄ２−Ｄ１＋ｒ１］＝Ｄ２−Ｄ１＋ｒ１モデュロ２ｍ）ものとする。アドレス・オペランドの変換が、元のプロセッサの意味論を正しくエミュレートするということを検証するために、以下のケースが区別される。
【００３０】
ａ）０≦Ｄ２−Ｄ１＋ｒ１≦２ｎ−１−（ｍａｘ−ｍｉｎ）
元のプロセッサは、実効アドレス・モジュロ２ｎ及び目標プロセッサ・モジュロ２ｍを算出する。Ｄ２−Ｄ１＋ｒ１＜２ｎ＜２ｍであるので、何れのプロセッサも同じ実効アドレス（Ｄ２−Ｄ１＋ｒ１）を算出する。
【００３１】
ｂ）Ｄ２−Ｄ１＋ｒ１＜０
元のプロセッサは実効アドレスを２ｎ＋Ｄ２−Ｄ１＋ｒ１≧２ｎ＋ｍａｘ−ｍｉｎとして算出する。これは、制限されたアドレス空間の外にあり、よって、元のプロセッサは、アドレス指定エラーにより、実効を中断する。目標プロセッサは実効アドレスを２ｍ＋Ｄ２−Ｄ１＋ｒ１≧２ｎ＋ｍａｘ−ｍｉｎとして算出する。これは、同様に、制限されたアドレス空間の外にあり、よって、元のプロセッサは更に、アドレス指定エラーにより、実効を中断する。よって、何れのプロセッサも、アドレス指定エラーによる中断により、同様に反応する。元のプロセッサが、中断処理のための特殊レジスタにおけるアドレス指定エラーをもたらした実効アドレスを提供した場合、目標プロセッサ上のエミュレーションは、中断処理を読み出す前のモデュロ２ｎによるエラーにつながった前述の実効アドレスｆを補正しなければならない。
【００３２】
ｃ）Ｄ２−Ｄ１＋ｒ１＞２ｎ−１−（ｍａｘ−ｍｉｎ）
ｒ１、Ｄ１、及びＤ２に対する制約により、２ｎ＞Ｄ２−Ｄ１＋ｒ１であるので、よって、何れのプロセッサも同じ実効アドレス（すなわち、Ｄ２−Ｄ１＋ｒ１）を算出する。これは、制限されたアドレス空間の外にあるが、何れのプロセッサも、アドレス指定エラーによるプログラム実行を中断する。
【００３３】
よって、このケースにおけるアドレス・オペランドの変換は、目標プロセッサ上の元のプロセッサの意味論を厳密にエミュレートするということが示された。
【００３４】
図１による方法は、例としてベース・レジスタ相対アドレス指定を使用したロード命令を含む擬似表現で図２に再現している。以下の図では全て、変換する対象の元のプロセッサのプログラム・コードにおける命令は左側に列挙する。以下にプログラム・ブロックとしても表す元のプロセッサのプログラム・コード部分は、「Ｕ」で始まる参照符号を備える。目標プロセッサについて変換される当該プログラム・コードは右側に示す。「Ｚ」で始まる参照符号は、目標プロセッサのプログラム・ブロックをラベリングするために使用される。元のプロセッサ及び目標プロセッサの対応する部分は、同じ桁配列を備えた参照符号を有する。示したケースでは全て、目標プロセッサのレジスタｒへの元のプロセッサ内のレジスタＲの内容の転送は既に行われているものとする。
【００３５】
プログラム・コード部分Ｚ２１は、元のプログラム・コードにおける第１のベース・レジスタ相対ロード命令Ｕ２１を目標プロセッサが変換するために生成される。ロード命令Ｕ２１（ｌｄ−ｌｏａｄ）は、オフセットＤ１及びベース・レジスタＲの内容によって規定されるアドレスにおけるメモリ内容に関する。括弧で示すように、アドレスは実効アドレスとして算出され、巡回アドレス空間の幅はｎビットである。
【００３６】
目標プロセッサのプログラム・コード部分Ｚ２１では、目標プロセッサ内のレジスタｒｐには、まず、値［Ｄ１＋ｒ］（ｌｅａ−ロード実効アドレス）がロードされる。この特殊なロード命令により、ｒの内容及びＤ１の和が、実効アドレスとして（すなわち、目標プロセッサにおける幅ｍの巡回アドレス空間におけるアドレスとして）求められる。
【００３７】
後続する命令（及び論理ＡＮＤ演算）では、図１の工程Ｓ４からのモデュロ２ｎ演算は、レジスタ内のｎ番目のビットよりも高次のビット全てをゼロに設定することにより、ビット単位の論理ＡＮＤによって実現される。
【００３８】
プログラム・コード部分Ｚ２１の最終命令では、レジスタｒ１には、レジスタｒｐに記憶されたアドレスにおけるメモリの内容でロードされる。
【００３９】
元のコードでは、後に、第２のべース・レジスタ相対ロード命令Ｕ２２が存在している。目標プロセッサの対応するプログラム・コード部分Ｚ２２では、ベース・レジスタ相対ロード命令が図１の工程Ｓ７及びＳ８と同様に、べース・レジスタｒｐに対し、かつオフセットＤ２−Ｄ１で生成される。ロード命令内で直ちに差の算出を目標プロセッサがプログラム・コードにおいて実行する可能性がない場合、オペランドとしてロード命令に、後に転送するために、差Ｄ２−Ｄ１をまず、中間的に記憶する第２のレジスタを使用することが可能である。プログラム・コード部分Ｚ２１における第１のロード命令の変換と比較すれば、モデュロ２ｎ演算の命令が、全ての場合において、部分Ｚ２２に保存される。
【００４０】
図３は、ロード命令の代わりにベース・レジスタ相対ジャンプ命令を有する同様な例を示す。
【００４１】
プログラム・コード部分Ｚ３１及びＺ３２が、元のプログラム・コードにおける２つのベース・レジスタ相対ジャンプ命令Ｕ３１及びＵ３２を目標プロセッサが変換するために生成される。Ｕ３１及びＵ３２におけるジャンプ命令（ｊｍｐ−ジャンプ）は、ベース・レジスタＲ、並びに、距離値Ｄ１及びＤ２に関係する。
【００４２】
目標プロセッサのプログラム・コード部分Ｚ３１では、目標プロセッサのアドレス空間における第１のジャンプ命令のジャンプ・アドレスがまず、レジスタｒｐにおいて、意味論的に正しく求められ（すなわち、元のプロセッサのアドレス空間に投影され）、次いで、このアドレスに対する第１のジャンプが実行される。第２のジャンプは、Ｄ２−Ｄ１というオフセット及びベース・レジスタ値として第１のジャンプ・アドレスを使用して実行することが可能であり、それにより、直接意味論的に正しい変換に必要なモデュロ演算は再び、第２の命令のために保存することが可能である。
【００４３】
先行して提示された実施例の具体例は、線形プログラム・シーケンスに関する。例えば、図２及び図３のプログラム部分Ｕ２２及びＵ３２にはそれぞれ、必然的に、プログラム部分Ｕ２１が先行する。相応に、プログラム部分Ｚ２１及びＺ３１は、対応するプログラム部分Ｚ２２及びＺ３２の前に確かに実行され、それにより、レジスタｒｐが正しい値（すなわち、第１のロード又はジャンプ命令に関するアドレス）に設定される。後続する実施例の具体例は、これがもう必ずしもあたらない、プログラム分岐を有する場合に関する。
【００４４】
図４の擬似コードに示すベース・レジスタ相対ロード・コマンドを変換する方法では、代替的に実行される２つのプログラム・ブロックＵ４１及びＵ４２が、元のプロセッサのプログラム・コードにおいて設けられ、そのそれぞれから、ジャンプ標的Ｍへのロード命令後のジャンプが存在しており、そこで、第３のプログラム・ブロックＵ４３が実行される。第３のロード・コマンドは第３のプログラム・ブロックＵ４３において実行される。第３のロード・コマンドは、ちょうどジャンプ目標Ｍのアドレスにおけるプログラム・コードに必ずしもなくてよく、別のプログラム分岐後でないが、プログラム・ブロックＵ４３において、後に、位置付けることが可能である。
【００４５】
ロード命令は全て、ベース・レジスタとしてのレジスタＲに関係する。プログラム・ブロックＵ４１における第１のロード命令はオフセットＤ１を有し、プログラム・ブロックＵ４２における第２のロード命令はオフセットＤ２を有し、プログラム・ブロックＵ４３における第３のロード命令はオフセットＤ３を有する。
【００４６】
プログラム・ブロックＺ４１への第１のプログラム・ブロックＵ４１の変換の場合、プログラム・ブロックＵ２１の、プログラム・ブロックＺ２１への変換と同様に、元のプロセッサにおけるアドレスのサイズを考慮に入れ、意味論的に正しく算出され、レジスタｒｐに記憶される。ベース・レジスタＲ及びＤ３のオフセットにも関係する、プログラム・ブロックＵ４３における第３のロード・コマンドの変換は、相応に、図２のプロックＺ２２へのプログラム・ブロックＵ２２の変換と同様に実行する。
【００４７】
プログラム・ブロックＺ４２における第２のロード命令を変換するために、変換されたプログラム・ブロックＵ４３における前提が、プログラム・ブロックＵ４１からの第１のロード命令のオフセットＤ１がレジスタｒｐに既に入力されているという点であるということが考慮に入れられる。ジャンプ目標Ｍへのジャンプの前に、レジスタｒｐは、プログラム・ブロックＺ４１からのジャンプの場合に設定されるように設定されなければならない。プログラム・ブロックＺ４３における第３のロード命令は、プログラム・ブロックＺ４３にプログラムが達した場所（Ｚ４１又はＺ４２）と無関係に、全ての場合に正しく算出される。第２のロード命令のロード・アドレスがまず、レジスタｒｐにおいて意味論的に正確に求められ、対応するロード命令がレジスタｒ１に実行されるということにより、達成される。その後、ジャンプ目標Ｍへのジャンプが実行される前に、レジスタｒｐが、加算命令により、Ｄ１−Ｄ２の差で補正される。
【００４８】
よって、プログラム・ブロックＺ４３における第３のロード命令のアドレスは、ｒｐ＋Ｄ３−Ｄ１として算出される。ここで、ここで、ｒｐ＝（ｒ＋Ｄ２）＋（Ｄ１−Ｄ２）であり、最初の括弧内の値が、プログラム・ブロックＺ４２の第１のロード命令（ｌｅａ．．．）に従い、第２の括弧の値が、第４の命令（ａｄｄ．．．）から得られる。これが挿入された場合、結果はジャンプ・アドレスになる。ｒｐ＋Ｄ３−Ｄ１＝（ｒ＋Ｄ２）＋（Ｄ１−Ｄ２）＋Ｄ３−Ｄ１＝ｒ＋Ｄ３であり、これは、ちょうど、第３のジャンプの目標アドレスである。
【００４９】
レジスタｒｐにおけるアドレスを適合させ、補正することにより、更なる２つの命令がプログラム・ブロックＺ４２において必要であるが、それに対して、第３のプログラム・ブロックＵ４３におけるロード命令の単純化された変換が、可能になり、時間集約的命令が避けられる。例えば、プログラム・ループにおけるように、Ｕ４３におけるロード命令が複数回実行された場合に特にあてはまる。
【００５０】
図５は、図４と同様なプログラム分岐に対する状況を示す。第３のプログラム・ブロックＵ５３における共通のジャンプ目標Ｍへの２つのプログラム・ブロックＵ５１及びＵ５２それぞれからのジャンプが存在している。図４の実施例と違って、ベース・レジスタ相対ロード命令は、プログラム・ブロックＵ５１及びＵ５３にのみ存在する一方、プログラム・ブロックＵ５２には存在しない。
【００５１】
両方のケースにおいて（すなわち、プログラム・ブロックＺ５１及びＺ５２から）ジャンプ目標Ｍへのジャンプが存在しているので、ベース・レジスタｒに対する距離Ｄ３はレジスタｒｐに既に存在している。目標コード部分Ｚ５３において実行される対象のロード命令の目標アドレスが、よって、事前に求められ、第３のロード命令が、所定の絶対アドレスｒｐを有するロード命令として実行される。
【００５２】
このことを保証するために、レジスタｒｐにおける第１のロード・アドレスの意味論的に正しい変換がプログラム・ブロックＺ５１において実行され、第１のレジスタをロードするための対応するロード命令が実行される。ジャンプ目標Ｍへのジャンプの前に、レジスタｒｐの内容が、加算命令により、ジャンプ長の差（すなわち、Ｄ３−Ｄ１）で補正される。よって、図４のプログラム・ブロックＺ４３によるロード命令のアドレスの算出が、ある意味で、予期される。
【００５３】
更に、プログラム・ブロックＵ５３からのロード命令のオフセットＤ３のロード・アドレスは、ジャンプ目標Ｍへのジャンプが実行される前にプログラム・ブロックＺ５２において意味論的に正しく求められ、レジスタｒｐに記憶される。
【００５４】
プログラム・ブロックＵ５１及びＵ５３からのロード命令の従来の意味論的に正しい直接変換と比較するに、本明細書で示した変換におけるＺ５２乃至Ｚ５３の過程でセーブされないが、Ｚ５１からＺ５３への過程でセーブされる。セーブは、図４の実施例の具体例におけるＺ４２からＺ４３への経路上のものと同様である。
【００５５】
図６は、やはり擬似コードで、ジャンプ目標Ｍに達した後に更なるプログラム分岐が行われるプログラム・シーケンスにおけるベース・レジスタ相対ロード命令の変換を示す。
【００５６】
図５の実施例の具体例と同様に、第３のプログラム・ブロックＵ６３において、代替的に実行可能な２つのプログラム・ブロックＵ６１及びＵ６２から、共通のジャンプ目標Ｍへのジャンプ（又はプログラムの続き）が存在しており、ここで、オフセットＤ１を有するベース・レジスタ相対ロード命令は、プログラム・ブロックＵ６１において、一プログラム経路においてのみ実行される。
【００５７】
プログラム分岐が、第３のプログラム・ブロックＵ６３において、第４のプログラム・ブロックＵ６４に、又は第５のプログラム・ブロックＵ６５に備えられる。前述のブロックはそれぞれ、それぞれの距離値Ｄ４及びＤ５を有するベース・レジスタ相対ロード命令を有する。
【００５８】
変換は、基本的に、図５の実施例の具体例における変換と同じパターンに応じて行われる。目標Ｍへのジャンプに既に入っており、更なるロード命令のうちの１つのオフセット、本具体例におけるオフセットＤ４を有するプログラム部分Ｕ６４におけるロード命令のオフセットをレジスタｒｐにおいて考慮に入れる。目標コード部分Ｚ６１、Ｚ６２、及びＺ６４への変換はよって、図５の実施例の具体例のブロックＺ５１、Ｚ５２及びＺ５３における目標コード部分とちょうど一致している。相応に、プログラム・ブロックＺ６１から始まる経路上のみの従来の変換と比較してこの変換には利点が存在している。目標コード部分Ｚ６５におけるロード・アドレスは同様に、一般に、意味論的に正しい変換を介して変換される。この理由で、プログラム・コード部分Ｚ６５に至る経路上では、利点は全く存在しない。よって、一経路のみ（すなわち、プログラム・ブロックＺ６１からプログラム・ブロックＺ６４）が、この実施例の具体例において恩恵を受ける。
【００５９】
しかし、複雑なプログラムのエミュレーションでは、別々の経路がプログラムの実行時に採られる相対的な頻度を判定又は推定するためにプログラム・フロー解析を行うことがよく知られており、慣習的である。確実にされた相対周波数をエミュレータに提供することが可能であるので、厳密に、最も一般的に採られる経路が、上述の方法によって最適にされる。したがって、図６の具体例では、厳密には、２つのプログラム・ブロックＺ６４又はＺ６５のうち、より頻繁に実行されるプログラム・ブロックが、ロ―ド命令の変換が（ブロックＺ６４と同様に）単一の命令によって実行することが可能であるように最適にされる。
【００６０】
基本的に、本発明の実現形態のためのプログラム・フローにおける種々の状況を区別することができるように既知のプログラム・フロー解析も使用することが可能である。
【００６１】
図７は、図６の具体例と同様に、元のプログラム・コードに対して、同じ開始状況の方法の別の実施例を示す。
【００６２】
図６の実施例の具体例と違って、目標Ｍへのジャンプについて、レジスタｒｐにおいて考慮されるのは、更なるロード命令のうちの１つのオフセットでなく、その代わりに、最大オフセットＤＭＡＸ＝ｍａｘ−ｍｉｎであり、ここで、ｍｉｎ及びｍａｘは、元のプロセッサにおける距離値の許容された値範囲の限度を表す。プログラム・ブロックＺ７１及びＺ７２はよって、ブロックＺ６１及びＺ６２にちょうど対応し、オフセットＤ４のみが最大オフセットＤＭＡＸによって置き換えられる。
【００６３】
プログラム・ブロックＺ７４及びＺ７５では、その場合、ｒｐをベース・レジスタとして、それぞれの距離値Ｄ４及びＤ５について、何れの場合にも、ロード・アドレスの判定があり得る。
【００６４】
変換中にベース・レジスタの特定の内容のラップアラウンドを行い得る場合、最大オフセットＤＭＡＸを呈する場合に、確かに行われる。プログラムＺ７２におけるこのケースの予期により、後続プログラムＺ７４及びＺ７５における正しいアドレス判定が確実になる。図６の具体例では、これは、ブロックＺ６２において処理された後続ブロックＺ６４についてのみ提供されている。これが、ブロックＺ６５において完全に意味論的に正しいアドレス判定が存在しなければならなかった理由である。図６の具体例と比較するに、経路Ｚ７１乃至Ｚ７４上のみならず、経路Ｚ７１乃至Ｚ７５上でもセーブが達成される。
【００６５】
最大オフセットＤＭＡＸが、確保されたレジスタｒｐにおける投影アドレスを求めるために基本的に使用される、この例と同様な手順では、図６乃至図７に示すプログラム・シーケンスに限定されない一方、考えられる全てのプログラム・シーケンス（特に、図２乃至図５に示す実施例の具体例に関して）実現することが可能である。
【００６６】
本発明の別の構成は、いくつかのアドレス空間を同時に使用するプログラムに関する。例えば、既に述べたＩＢＭ社のＳ／３９０プロセッサにより、いくつかのアドレス空間の前述の使用が可能である。このケースにおけるベース・レジスタＲそれぞれの場合、アドレス空間選択レジスタ（アクセス・レジスタ）Ａが存在しており、その内容は、選択する対象のアドレス空間の識別子を含む。図８の左側では、ベース・レジスタＲ、オフセットＤ１及びアクセス・レジスタＡを有するベース・レジスタ相対ロード命令を、元のプロセッサのプログラム・ブロックＵ８１において示す。
【００６７】
並列に使用されるアドレス空間が目標プロセッサ上で知られていない場合が、その代わりに、十分に大容量の単一のアドレス空間（例えば、６４ビット長のアドレスを伴う場合。すなわち、ｍ＝６４の場合）、ロード命令は、プログラム・ブロックＺ８１に示すように目標プロセッサ用に変換することが可能である。
【００６８】
目標プロセッサのプログラム・コード・ブロックＺ８１における最初の２つの命令は、例えば図２のプログラム・コード・ブロックＺ２１と同様にレジスタｒｐにおける投影アドレスを求めるために使用される。前述の２つに続く余分に挿入された命令は、エミュレーションのためにアクセス・レジスタＡがトラッキングされるレジスタａの内容がレジスタｒｘにロードされる。後続例（ｓｈｌ  ｒｘ，ｎ＋１−左シフト）は、レジスタｒｘの（二進の）内容を（ｎ＋１）ビットだけ左にシフトさせる。これは、アドレス空間を考慮しない、原始的な実効アドレスに対する（ａ＊２ｎ＋１）の加算に対応する。ベース・レジスタ相対ロード命令は次いで、オフセットとしてのｒｘ及びベース・レジスタとしてのｒｐに変換される。更なるプロセッサの個々の系列アドレス空間がよって、目標プロセッサのアドレス空間の別個の範囲にマッピングされる。目標プロセッサ上のアドレスにおいては、別々の順序で隣同士の位置（ビット）を占める。
【００６９】
前述のアドレス空間それぞれがそれ自身で制限されるので、ａ＊２ｎ＋１…ａ＊２ｎ＋１＋２ｎ−１−（ｍａｘ−ｍｉｎ）の範囲においてのみアドレスがそれぞれ許容可能な場合であり、かつ、（任意的には、ａにコンパクトに符号化された）アドレス識別子が制限されるので、０＜ａ＊２ｎ＋１＜２ｍ−（ｍａｘ−ｍｉｎ）である場合、先行する考慮点は全て、Ａの内容によって区別されるアドレス空間にも適用する。第１のベース・レジスタ相対ジャンプに続く第２のベース・レジスタ相対ジャンプの変換における適用による方法によってセーブすることが可能である命令は更に、ｌｄ命令及びｓｈｌ命令を含むので、合計４個の命令をセーブすることが可能である。
【図１】
2011192282.tif 000003
【図２】
2011192282.tif 000004
【図３】
2011192282.tif 000005
【図４】
2011192282.tif 000006
【図５】
2011192282.tif 000007
【図６】
2011192282.tif 000008
【図７】
2011192282.tif 000009
【図８】
2011192282.tif 000010