(57)【特許請求の範囲】
【請求項１】
第１ビット・アーキテクチャの命令と第２ビット・アーキテクチャの命令との両方を処理することが可能なコンピュータ・システムにおいて実行される、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャの命令に変換する方法であって、
命令コードおよび少なくとも１つのオペランドを有する前記第１ビット・アーキテクチャの命令にコードを変換するステップと、
前記第１ビット・アーキテクチャの複数の命令を前記第２ビット・アーキテクチャに変換するための情報を含み、前記第１ビット・アーキテクチャの前記命令コードを含む命令を変換するか否かを指示する複数の命令コードの各々に対する各情報を示し、少なくとも１つの命令が前記第１ビット・アーキテクチャから前記第２ビット・アークテクチャに変換されるべきでないことを示す変換表にアクセスするステップと、
前記変換表が前記第１ビット・アーキテクチャの命令を変更するよう指示する情報を含む場合に、前記第１ビット・アーキテクチャの命令を対応する前記第２ビット・アーキテクチャの命令に変換するステップとを含み、前記変換が前記第１ビット・アーキテクチャの命令を変更して前記第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われる方法。
【請求項２】
前記変換表が、各命令コードごとに１つのエントリを含み、変換を実行すべき場合には、各命令コードのエントリがオペランド表を指すポインタを含むことができ、前記命令コードのエントリが１つのオペランド表を指すポインタを含まない場合には、変換が実行されない、請求項１に記載の方法。
【請求項３】
前記オペランド表が、オペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、前記オペランド表の各エントリが少なくとも１つの変換操作を示し、命令を変換するステップが、
前記第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有する前記オペランド表の１つのエントリを決定するステップと、
前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するために前記少なくとも１つの変換操作を実行するステップとを含む、請求項２に記載の方法。
【請求項４】
前記第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプを決定するステップが、前記第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書を処理するステップを含む、請求項３に記載の方法。
【請求項５】
前記少なくとも１つの変換操作を実行するステップが、前記命令コードが前記第２ビット・アーキテクチャであることを示すように前記命令コードの名前を変更するステップを含む、請求項３に記載の方法。
【請求項６】
前記少なくとも１つの変換操作を実行するステップが、前記変換を受ける前記命令中の１つのオペランドを含むレジスタが前記第２ビット・アーキテクチャにあることを示すようにオペランドを含む各レジスタ上の情報を含むレジスタ状況表を更新するステップを含む、請求項３に記載の方法。
【請求項７】
前記変換を受ける前記命令中のオペランドが前記第１ビット・アーキテクチャにあり、前記変換を受ける前記命令中の他のオペランドが前記第２ビット・アーキテクチャにあるとき、前記変換を受ける前記命令中の１つのオペランドを含む前記レジスタが前記第２ビット・アーキテクチャにあることを示すように前記レジスタ状況表が更新される、請求項６に記載の方法。
【請求項８】
前記オペランド表の各エントリが、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、請求項３に記載の方法。
【請求項９】
前記第１ビット・アーキテクチャの命令が、前記第１ビット・アーキテクチャと前記第２ビット・アーキテクチャの両方のオペランドを有することができる、請求項１に記載の方法。
【請求項１０】
前記第１ビット・アーキテクチャが３２ビット・アーキテクチャであり、前記第２ビット・アーキテクチャが６４ビット・アーキテクチャである、請求項１に記載の方法。
【請求項１１】
第１ビット・アーキテクチャの命令と第２ビット・アーキテクチャの命令との両方を処理することが可能な、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャの命令に変換するためのシステムであって、
命令コードおよび少なくとも１つのオペランドを有する前記第１ビット・アーキテクチャの命令にコードを変換する手段と、
第１ビット・アーキテクチャの複数の命令を前記第２ビット・アーキテクチャに変換するための情報を含み、前記第１ビット・アーキテクチャの前記命令コードを含む命令を変換するか否かを指示する複数の命令コードの各々に対する各情報を示し、少なくとも１つの命令が前記第１ビット・アーキテクチャから前記第２ビット・アークテクチャに変換されるべきでないことを示す変換表にアクセスする手段と、
前記変換表が前記第１ビット・アーキテクチャの命令を変更するよう指示する情報を含む場合に、前記第１ビット・アーキテクチャの命令を対応する前記第２ビット・アーキテクチャの命令に変換する手段とを含み、前記変換が、前記第１ビット・アーキテクチャの命令を変更して前記第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われるシステム。
【請求項１２】
前記変換表が各命令コードごとに１エントリを含み、変換を実行すべき場合には、各命令コードのエントリがオペランド表を指すポインタを含むことができ、前記命令コードに対するエントリが１つのオペランド表を指すポインタを含まない場合は変換が実行されない、請求項１１に記載のシステム。
【請求項１３】
前記オペランド表がオペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、前記オペランド表の各エントリが少なくとも１つの変換操作を示し、命令を変換する手段が、
前記第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有する前記オペランド表の１つのエントリを決定する手段と、
前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するために前記少なくとも１つの変換操作を実行する手段とを含む、請求項１２に記載のシステム。
【請求項１４】
前記第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプを決定する手段が、前記第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書を処理する手段を含む、請求項１３に記載のシステム。
【請求項１５】
前記少なくとも１つの変換操作を実行する手段が、前記命令コードが前記第２ビット・アーキテクチャにあることを示すように前記命令コードの名前を変更する手段を含む、請求項１３に記載のシステム。
【請求項１６】
前記少なくとも１つの変換操作を実行する手段が、前記変換を受ける前記命令中の１つのオペランドを含むレジスタが前記第２ビット・アーキテクチャにあることを示すようにオペランドを含む各レジスタに関する情報を含むレジスタ状況表を更新する手段を含む、請求項１３に記載のシステム。
【請求項１７】
前記変換を受ける前記命令中のオペランドが前記第１ビット・アーキテクチャにあり、前記変換を受ける前記命令中の他のオペランドが前記第２ビット・アーキテクチャにあるとき、前記変換を受ける前記命令中の１つのオペランドを含む前記レジスタが前記第２ビット・アーキテクチャにあることを示すように前記レジスタ状況表が更新される、請求項１６に記載のシステム。
【請求項１８】
前記オペランド表の各エントリが、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、請求項１３に記載のシステム。
【請求項１９】
前記第１ビット・アーキテクチャの命令が、前記第１ビット・アーキテクチャと前記第２ビット・アーキテクチャの両方のオペランドを有することができる、請求項１３に記載のシステム。
【請求項２０】
前記第１ビット・アーキテクチャが３２ビット・アーキテクチャであり、前記第２ビット・アーキテクチャが６４ビット・アーキテクチャである、請求項１３に記載のシステム。
【請求項２１】
第１ビット・アーキテクチャの命令と第２ビット・アーキテクチャの命令との両方を処理することが可能なコンピュータ・システムにおいて実行される、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャの命令に変換するプログラムが記録された記録媒体であって、
命令コードおよび少なくとも１つのオペランドを有する前記第１ビット・アーキテクチャの命令にコードを変換するステップと、
第１ビット・アーキテクチャの複数の命令を前記第２ビット・アーキテクチャに変換するための情報を含み、前記第１ビット・アーキテクチャの前記命令コードを含む命令を変換するか否かを指示する複数の命令コードの各々に対する各情報を示し、少なくとも１つの命令が前記第１ビット・アーキテクチャから前記第２ビット・アークテクチャに変換されるべきでないことを示す変換表にアクセスするステップと、
前記変換表が、前記第１ビット・アーキテクチャの命令を変更するように指示する情報を含む場合に、前記第１ビット・アーキテクチャの命令を対応する前記第２ビット・アーキテクチャの命令に変換するステップとを前記コンピュータ・システムに実行させ、前記変換が、前記第１ビット・アーキテクチャの命令を変更して前記第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われることを特徴とする記録媒体。
【請求項２２】
前記変換表が各命令コードごとに１つのエントリを含み、変換を実行すべき場合に、各命令コードのエントリがオペランド表を指すポインタを含むことができ、前記命令コードのエントリが１つのオペランド表を指すポインタを含まない場合には変換が実行されない、請求項２１に記載の記録媒体。
【請求項２３】
前記オペランド表がオペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、前記オペランド表の各エントリが少なくとも１つの変換操作を示し、命令を変換するステップが、
前記第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有するオペランド表の１つのエントリを決定するステップと、
前記第１ビット・アーキテクチャから前記第２ビット・アーキテクチャに命令を変換するために前記少なくとも１つの変換操作を実行するステップとを含む、請求項２２に記載の記録媒体。
【請求項２４】
前記第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプを決定するステップが、前記第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書を処理するステップとを含む、請求項２３に記載の記録媒体。
【請求項２５】
前記少なくとも１つの変換操作を実行するステップが、前記命令コードが前記第２ビット・アーキテクチャにあることを示すように前記命令コードの名前を変更するステップを含む、請求項２３に記載の記録媒体。
【請求項２６】
前記少なくとも１つの変換操作を実行するステップが、前記変換を受ける前記命令中の１つのオペランドを含むレジスタが前記第２ビット・アーキテクチャにあることを示すようにオペランドを含む各レジスタに関する情報を含むレジスタ状況表を更新するステップを含む、請求項２３に記載の記録媒体。
【請求項２７】
前記変換を受ける前記命令中の１つのオペランドが前記第１ビット・アーキテクチャにあり、前記変換を受ける前記命令中の他のオペランドが前記第２ビット・アーキテクチャにあるときに、前記変換を受ける前記命令中の前記１つのオペランドを含むレジスタが前記第２ビット・アーキテクチャにあることを示すように前記レジスタ状況表が更新される、請求項２６に記載の記録媒体。
【請求項２８】
前記オペランド表の各エントリが、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、請求項２３に記載の記録媒体。
【請求項２９】
前記第１ビット・アーキテクチャの命令が、前記第１ビット・アーキテクチャと前記第２ビット・アーキテクチャの両方のオペランドを有することができる、請求項２１に記載の記録媒体。
【請求項３０】
前記第１ビット・アーキテクチャが３２ビット・アーキテクチャであり、前記第２ビット・アーキテクチャが６４ビット・アーキテクチャである、請求項２１に記載の記録媒体。
【請求項３１】
第１ビット・アーキテクチャの命令と第２ビット・アーキテクチャの命令との両方を処理することが可能なコンピュータ・システムにおいて実行される、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャの命令に変換するのに使用するための少なくとも１つのデータ構造を含むコンピュータ可読な記録媒体であって、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含み、前記第１ビット・アーキテクチャの命令コードを含む命令を変換するか否かを指示する複数の命令コードの各々に対する各情報を示し、少なくとも１つの命令が前記第１ビット・アーキテクチャから前記第２ビット・アークテクチャに変換されるべきでないことを示す少なくとも１つの変換表であって、前記変換表が、前記第１ビット・アーキテクチャの命令を変更するように指示する情報を含む場合に、前記第１ビット・アーキテクチャの命令が対応する前記第２ビット・アーキテクチャの命令に変換される前記変換表と、
前記第１ビット・アーキテクチャの命令を変更して前記第２ビット・アーキテクチャの命令を生成するための操作を実行するよう指示する変換操作とを含むコンピュータ可読な記録媒体。
【請求項３２】
少なくとも１つのオペランド表をさらに含み、前記変換表が各命令コードごとに１つのエントリを含み、変換を実行すべき場合には各命令コードのエントリが１つのオペランド表を指すポインタを含むことができ、前記命令コードの前記エントリがオペランド表を指すポインタを含まない場合には変換が実行されない、請求項３１に記載の記録媒体。
【請求項３３】
前記オペランド表がオペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、前記オペランド表の各エントリが少なくとも１つの変換操作を指示し、前記オペランド表が、前記第１ビット・アーキテクチャの命令の各オペランドの前記ビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有する１つのエントリを含み、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するために前記少なくとも１つの変換操作が実行される、請求項３２に記載の記録媒体。
【請求項３４】
前記第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書をさらに含み、前記第１ビット・アーキテクチャの命令中の各オペランドの前記アーキテクチャ・タイプを決定するステップが、各命令の特性を決定するために前記辞書を処理するステップを含む、請求項３３に記載の記録媒体。
【請求項３５】
さらに、前記変換を受ける前記命令中の１つのオペランドを含むレジスタが前記第２ビット・アーキテクチャにあることを示すオペランドを含む各レジスタに関する情報を含むレジスタ状況表を含み、前記少なくとも１つの変換操作を実行するときに前記レジスタ状況表が更新される、請求項３３に記載の記録媒体。
【請求項３６】
前記オペランド表の各エントリが、前記第１ビット・アーキテクチャの命令を前記第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、請求項３３に記載の記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ用の第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造に関し、特にコンパイラに関する。
【０００２】
【従来の技術】
３２ビット・アーキテクチャを使用したコンピュータ用に多くの適用業務プログラムが書かれている。しかし、大規模な処理システムは、６４ビット・アーキテクチャを利用し始めている。６４ビットのコンピューティング・アーキテクチャでは、使用可能なアドレス空間、レジスタ・サイズ、およびデータ構造サイズが大幅に増大する。さらに、６４ビット・コンピューティングは、３２ビット・コンピューティングよりはるかに速い処理およびデータ転送を提供する。たとえば、１つの６４ビット命令は、３２ビットであればいくつもの命令を必要とする操作に加えて「終結処理」コードを処理することができる。６４ビット・システムは、複合した指標付けまたはレジスタ・アドレス方式を使用せずにより多くのメモリを直接アドレス指定することができる。現行の６４ビット・コンピュータには、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ（サン・マイクロシステムズ）社のＳｏｌａｒｉｓ  ７操作環境（ＳｏｌａｒｉｓはＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓの商標）、Ｃｏｍｐａｑ  Ｃｏｍｐｕｔｅｒ（コンパック・コンピュータ）社のＡｌｐｈａＳｔａｔｉｏｎ  ２００、ならびにＤｉｇｉｔａｌ  Ｅｑｕｉｐｍｅｎｔ（デジタル・エクイップメント）社の開発したＡｌｐｈａ６４ビット・プロセッサを使用する他のＣｏｍｐａｑ製品、およびＩｎｔｅｌが推進する６４ビット・アーキテクチャであるＩＡ−６４アーキテクチャに基づくＩｎｔｅｌ（インテル）社のＭｅｒｃｅｄプロセッサおよびＩｔａｎｉｕｍプロセッサ（ＩｔａｎｉｕｍはＩｎｔｅｌ社の商標、ＭｅｒｃｅｄおよびＩＡ−６４は、Ｉｎｔｅｌ社のコード名）が含まれる。
【０００３】
【発明が解決しようとする課題】
６４ビット・コンピューティングに利点があるにもかかわらず、多くのプログラムがいまだに３２ビット命令を使って書かれている。したがって、コンパイラ開発者は、業界が６４ビット・アーキテクチャのコンピュータに移行しても３２ビットのプログラムをサポートし続けなければならない。既存のアーキテクチャおよびコンパイラとの互換性を維持するには（つまり、プログラマに複雑さを意識させないためには）、コンパイラ開発者は、いつ、どこで６４ビットの機能を使用するかについて有効な情報を組み込む必要がある。すなわち、当技術分野では、３２ビット・アーキテクチャと６４ビット・アーキテクチャとの間の移行をサポートするために３２ビットおよび６４ビットのコンピューティングを扱うことのできるコンパイラの開発が必要とされている。
【０００４】
【課題を解決するための手段】
従来技術における上記の制限を克服するために、好ましい実施形態は、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換するための方法、システム、プログラム、およびデータ構造を開示する。命令コードと少なくとも１つのオペランドを有する第１ビット・アーキテクチャの命令からコードを変換する。第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含む変換表にアクセスする。変換表に第１ビット・アーキテクチャの命令を変更するよう指示する情報が含まれている場合、第１ビット・アーキテクチャの命令を対応する第２ビット・アーキテクチャの命令に変換する。この変換は、第１ビット・アーキテクチャの命令を変更して第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われる。
【０００５】
第１ビット・アーキテクチャは３２ビットのアーキテクチャとし、第２ビット・アーキテクチャは６４ビットのアーキテクチャとすることができる。
【０００６】
さらなる実施形態では、変換表は、命令コードごとに１エントリを含む。変換を実行すべき場合は、各命令コードのエントリはオペランド表を指すポインタを含むことができる。命令コードのエントリが１つのオペランド表を指すポインタを含まない場合、変換は実行されない。
【０００７】
オペランド表は、オペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含む。オペランド表の各エントリは、少なくとも１つの変換操作を示す。このような場合、命令を変換するには、第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有するオペランド表の１つのエントリを決定する必要がある。次いで、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するため、少なくとも１つの変換操作が実行される。
【０００８】
好ましい実施形態は、あるアーキテクチャから別のアーキテクチャに、たとえば３２ビットから６４ビットに命令を変換するための技法を提供する。好ましい実施形態の技法を使用すると、たとえば中間コードのようなコードを３２ビット命令に変換するコンパイラを変更する必要はない。その代わりに、結果として得られる３２ビット命令を、各命令コード・タイプに対する変換操作を提供する様々な表を使用して処理する。好ましい実施形態は、３２ビット命令とデータを使用して原始プログラムを書き、それでもマシン上でそのプログラムが動作できるように３２ビットと６４ビット・アーキテクチャの両方をサポートしようとするマシンには、特に有用である。
【０００９】
【発明の実施の形態】
以下の説明では、本明細書の一部であり、本発明のいくつかの実施形態を図示する添付の図面を参照する。本発明の範囲から逸脱することなく、他の実施形態も使用でき、構造上および操作上の変更が行えることを理解されたい。
【００１０】
図１は、コンパイラ２の一般的構成要素を示す。コンパイラ２は、高水準原始言語で書かれた原始プログラム４を入力として受け取る。フロント・エンド処理６は、原始プログラム４を走査し、構文解析し、中間コード８に現われる名前の値が、目的マシンが直接処理することができる数量、たとえばビット、整数、実数、ポインタによって表せる、詳細な中間表示８に翻訳することによって、原始プログラム４を中間コード８に変換する。コード生成器１０は、中間コード８を入力として受け取り、絶対機械言語、再配置可能機械言語、またはアセンブラ言語を含むことのできる目的プログラム１２を出力として生成する。
【００１１】
目的プログラム１２は、目的コンピュータ１４上で稼働するためのものである。好ましい実施形態では、目的コンピュータ１４は３２ビットおよび６４ビットの両方の命令を処理することができる。たとえば、目的コンピュータは、３２ビットおよび６４ビット命令セットの両方をサポートするＩｎｔｅｌ  ＩＡ−６４アーキテクチャを実装することができる。Ｉｎｔｅｌ  ＩＡ−６４プロセッサは、３２ビットの適用業務を、３２ビットの適用業務の実行をサポートする６４ビットのオペレーティング・システム上で実行することができる。Ｉｎｔｅｌ  ＩＡ−６４アーキテクチャは、さらに３２ビットと６４ビットの混合コードを実行することもできる。Ｉｎｔｅｌ  ＩＡ−６４アーキテクチャの詳細は、参照により本明細書に組み込む、Ｉｎｔｅｌ社発行の、「ＩＡ−６４  Ａｐｐｌｉｃａｔｉｏｎ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｇｕｉｄｅ」注文番号２４５１８８−０１１（Ｉｎｔｅｌ社１９９９年５月刊）に説明がある。
【００１２】
図２は、好ましい実施形態による３２ビット命令を６４ビット命令に変換するコード生成器１０の構成要素を示す。ステートメント処理モジュール２０は、中間コード８を入力として受け取り、３２ビット命令２２を生成する。３２ビット命令を変換器２４に入力し、次いで、コンパイラ辞書２８、命令変換表３０、変換オペランド表３２、および置換表３４を使用して、３２ビット命令を６４ビット命令２６に変換する。これらの表２８、３０、３２、３４は、変換器２４が３２ビットから６４ビットへの変換を実行するために必要とする情報を提供する。コンパイラ辞書２８は、３２ビット命令からアセンブルされ、命令のオペランド特性とデータ・フィールドを含むその命令に関する情報を含む。たとえば、代表的な命令は下記の形式であり、
ｏｐ      オペランド１、オペランド２
ここで「ｏｐ」は操作のタイプを示す命令コードであり、オペランド１およびオペランド２はその操作（ｏｐ）を受けるデータである。たとえば、オペランド１は操作を受ける原始データとすることができ、オペランド２は操作の結果を含む宛先とすることができる。オペランド１および２は両方とも、メモリのレジスタなどアドレス指定可能な記憶場所である。コンパイラ辞書２８は、特定のレジスタにあるデータ（オペランド）が３２ビットか６４ビットか、データ・フィールドのサイズなどを含め、原始プログラム４で定義され使用されるすべてのデータの特性に関する情報を含む。
【００１３】
命令変換表３０は、各操作のタイプ、つまり各命令コードに対するエントリを含む。命令変換表３０のエントリに特定の命令コードをマップするためのインデックスを設けることができる。好ましい実施形態では、命令変換表３０は、ゼロまたは１つのアドレスを含むポインタの配列を含む。命令が変換すべきでない場合は、命令変換表３０の対応するエントリはゼロにセットされる。反対に、命令を変換すべき場合は、命令変換表３０のエントリは１つの変換オペランド表３２に対するアドレスを含む。好ましい実施形態では、非ゼロ値を有する命令変換表３０の各エントリごとに、つまり変換を受ける各操作ごとに１つの変換オペランド表３２がある。
【００１４】
変換オペランド表３２は、命令タイプに対するオペランド値の可能な各組合せに対するエントリを含む。たとえば、レジスタからメモリにデータを転送するＳＴＯＲＥ命令用の変換オペランド表３２は、オペランド１および２の各オペランドを３２ビットまたは６４ビットにすることができる。このような場合、ＳＴＯＲＥ命令用の変換オペランド表３２は、下記オペランドのアーキテクチャ・タイプの可能な各組合せごとに４つのエントリを有することになる。
0003606561.tif 000002
【００１５】
１つの変換オペランド表３２の各エントリごとに、つまりオペランド値の可能な組合せごとに、その特定のオペランド・アーキテクチャの組合せに対する変換を実施する方法に関する情報を提供する置換表３４がある。たとえば、上記ＳＴＯＲＥ命令に対するオペランド・アーキテクチャ・タイプの４つの可能な組合せごとに様々な変換を実行することができる。各置換表３４は、変換の実施方法、つまり変換操作について変換器２４に命令するフィールドを含むことになる。好ましい実施形態では、置換表３４は、新しい変換ｏｐコードまたは変換される命令コードの代わりに使用する命令を指示するフィールドと、レジスタが３２ビットと６４ビットのデータのどちらを有するかを示すようにレジスタ状態表を更新するか、またはレジスタ状態を不変に保つかを指示するフラグを含む。このレジスタ状態表は、コンパイラ制御構造の一部とすることも、またコンパイラ辞書２８に保持することもできる。入力３２ビット命令２２の３２ビットから６４ビットへの変換を完了するために引き続き実行される変換段階を指示する他のフラグも提供することができる。
【００１６】
変換の一部として、ｏｐコードの名前の変更を含めることができる。たとえば、３２ビット命令は、格納（ｓｔｏｒｅ）にＳＴ、ロード（ｌｏａｄ）にＬなどニーモニック形式を有することができ、６４ビット命令では少々異なり、格納（ｓｔｏｒｅ）にＳＴＧ、ロード（ｌｏａｄ）にＬＧとなる。「Ｇ」ニーモニックは、命令が少なくとも１つの６４ビット・オペランドを含むことを示す。代替実施形態では、３２ビット命令と６４ビット命令を区別するために他のニーモニックを使用することができる。
【００１７】
図３は、コード生成器１０の変換器２４構成要素内で実装される、表２８、３０、３２、３４を使用して３２ビット命令を６４ビット命令に変換するための論理を示す。ブロック１００で制御が開始し、変換器２４がステートメント処理モジュール２０から生成された３２ビット命令を受け取る。変換器２４は、（ブロック１０２で）受け取った命令のｏｐコードについて命令変換表３０のエントリをルックアップする。先に論じたようにこのルックアップ操作は、インデックスを使って特定のｏｐコードに対応するエントリの位置を突き止めることを必要とすることがある。ルックアップしたエントリの値が（ブロック１０４で）ゼロの場合、ゼロは特定のｏｐコードに対して変換処理が実行されないことを示すので、変換処理は（ブロック１０６で）終了する。そうでない場合は、そのエントリの値は変換オペランド表３２を指すポインタである。変換器２４は、（ブロック１０８で）エントリのポインタによってアドレスされる変換オペランド表３２にアクセスする。変換器２４はまた、各オペランドが３２ビット・データか６４ビット・データかなど、コンパイラ辞書２８から受け取った命令のオペランドに対する特性を（ブロック１１０で）決定する。
【００１８】
変換器２４は、次いで（ブロック１１２で）変換オペランド表３２のエントリをループして、受け取った命令のオペランドの特性に一致するオペランド特性を有するエントリの位置を突き止める。たとえば、受け取った命令のオペランドがそれぞれ３２ビットおよび６４ビットの場合、それらのオペランド・ビット・アーキテクチャ値に対する指定された変換オペランド表３２のエントリが選択される。上記ＳＴＯＲＥ命令に対するエントリの例では、このエントリは上記にリストされる第３のエントリを含むことによる。変換器２４は、次いで（ブロック１１４で）変換オペランド表３２で位置を突き止めたエントリにリストされた置換表３４にアクセスする。変換器２４は、次いで（ブロック１１６で）受け取った命令のｏｐコードを、置換表３４にリストされる１つまたは複数の置換ｏｐコードで置換し、それによって３２ビット命令を６４ビット命令２６に変換する。ブロック１１８で、変換器２４は、置換表３４で指示される変換の結果として新しい３２ビットまたは６４ビット状態を指示するようにレジスタ状態表を更新する。たとえば、変換済みの受け取った３２ビット命令のどのオペランドも、変換後は６４ビット値を有することになる。このような場合、以前には３２ビットであったオペランドのレジスタ状況が、現在は６４ビットのオペランドであることを反映するように更新される。
【００１９】
図４は、ＳＴＯＲＥ命令に対して置換が行われる方法を示す。表１５０の各エントリは、ＳＴＯＲＥ命令に対する変換オペランド表３２のエントリを形成する。３２ビット命令２２のオペランド値に一致するオペランド１および２に対するオペランド値を有するエントリを発見すると、表１５０は、新しい単数または複数の命令およびレジスタ状態表が更新されるかどうかを含めて変換操作をリストする。したがって、表１５０は、可能なオペランド値の各組合せに対する置換表と変換オペランド表のエントリを結合する。表１５０の第３および第４のエントリは、変換前にはオペランド１が３２ビットであったので、レジスタ１状況フラグが更新されたことを示す。新しい命令の「Ｇ」ニーモニックは、その命令が６４ビット命令であることを示す。さらに、表１５０では、３２ビットのオペランド１を有する３２ビットのＳＴＯＲＥ命令は、２つの６４ビット命令に変換される。
【００２０】
同様に、３２ビット命令２つごとに変換オペランド表および置換エントリまたは置換表がある。好ましい実施形態では、ＡＤＤ、ＳＵＢＴＲＡＣＴ、ＭＵＬＴＩＰＬＹ、ＤＩＶＩＤＥ、ＣＯＭＰＡＲＥ、ＡＮＤ、ＯＲ、およびＥＸＣＬＵＳＩＶＥ  ＯＲなど多くの命令について、１つのオペランドが６４ビットであるときは必ず、置換表３４は、変換器２４に他のオペランドを６４ビットに変換するよう命令するための変換操作を含む。ただし、ユーザによりレジスタが３２ビットとして宣言されている場合、変換器２４は、そのようなレジスタを６４ビットに変換するよう命令されることはない。３２ビット命令を６４ビット命令に変換する方法に関する変換器２４へのさらなる命令は、置換表３４に符号化されることになる。
【００２１】
好ましい実施形態は、３２ビット命令を６４ビットに変換するための方法、システム、およびプログラムを提供する。好ましい実施形態の技法の利点の１つは、中間コードから３２ビット命令を生成する実際のステートメント処理モジュール２０を、変換を実現するために変更する必要がないことである。その代わりに、３２ビット命令を６４ビット命令に変換する追加段階を実行するために、個別の表２８、３０、３２、３４ならびに変換器２４の構成要素が追加される。このようにして、ステートメント処理モジュール２０に対するコンパイラ・コードを変更する必要がなく、現行のコンパイラを使用して初期３２ビット命令が生成される。コンパイラ開発者は、最終変換を実行するために、中間コードを３２ビット命令に変換するコード生成部分を変更または撹乱する必要はなく、表および変換器２４論理を追加するだけでよい。したがって、好ましい実施形態は、６４ビット命令でのみ動作する目的コンピュータ、または３２ビットと６４ビットの両方の命令を処理することのできるＩｎｔｅｌ  ＩＡ−６４のアーキテクチャを使用したシステムなどのコンピュータ用の、３２ビット命令を６４ビットに変換する技法を提供する。
【００２２】
代替実施形態および結論
これで、本発明の好ましい実施形態の説明を締めくくることにする。下記に、本発明を実施するためのいくつかの代替実施形態を説明する。
【００２３】
好ましい実施形態は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを生成するため、標準のプログラミングまたはエンジニアリングあるいはその両方の技法を使用して、方法、装置、または製造品として実装することができる。本明細書で使用する「製造品」（または「コンピュータ・プログラム製品」）という言葉は、１つまたは複数のコンピュータ可読装置、キャリア、または磁気記憶媒体、「フロッピィ・ディスク」、ＣＤ−ＲＯＭ、光ディスク、ホログラフィック・ユニット、揮発性または非揮発性電子メモリ、ネットワーク伝送回線を介してプログラムへのアクセスを提供するファイル・サーバ、無線伝送媒体、空間を伝播する信号などの媒体からアクセス可能な、１つまたは複数のコンピュータ・プログラムまたはデータ・ファイルあるいはその両方を含む。もちろん、当分野の技術者は、本発明の範囲から逸脱することなく、この構成に多くの変更が行えることを理解されよう。
【００２４】
好ましい実施形態を、３２ビット命令から６４ビット命令への変換に関して説明してきた。しかし、好ましい実施形態の表および変換方法は、８から１６、１６から３２など３２ビットおよび６４ビット以外のどの命令フォーマットおよびビット・アーキテクチャにも、またはまだ開発されていないアーキテクチャの変換にも適用することができる。これが可能なのは、好ましい実施形態の技法が、現行のコンパイル技法を使用して初期命令を第１ビット形式アーキテクチャにコンパイルし、次いで表と変換器を使用して第１ビット・アーキテクチャの命令を第２ビット形式のアーキテクチャに変換するからである。さらに、たとえば６４ビットなどより大きなビット・アーキテクチャからたとえば３２ビットなどより小さなビット・アーキテクチャへの変換を行うことができる。
【００２５】
好ましい実施形態では、コンパイラ辞書、命令変換表、変換オペランド表、および置換表を別々の表として記述する。しかし、代替実施形態では、記述された別々の表にあるデータを、１つまたは複数の表に合体させることもできる。
【００２６】
要約すると、本発明は、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換するための方法、システム、プログラム、およびデータ構造を提供する。命令コードおよび少なくとも１つのオペランドを有する第１ビット・アーキテクチャの命令からコードが変換される。第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含む変換表がアクセスされる。変換表が第１ビット・アーキテクチャの命令を変更するよう指示する情報を含む場合、第１ビット・アーキテクチャの命令は、第２ビット・アーキテクチャの対応する命令に変換される。この変換は、第１ビット・アーキテクチャの命令を変更して第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われる。
【００２７】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００２８】
（１）第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換する方法であって、
命令コードおよび少なくとも１つのオペランドを有する第１ビット・アーキテクチャの命令にコードを変換するステップと、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含む変換表にアクセスするステップと、
変換表が第１ビット・アーキテクチャの命令を変更するよう指示する情報を含む場合に、第１ビット・アーキテクチャの命令を対応する第２ビット・アーキテクチャの命令に変換するステップとを含み、前記変換が第１ビット・アーキテクチャの命令を変更して第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われる方法。
（２）変換表が、各命令コードごとに１つのエントリを含み、変換を実行すべき場合には、各命令コードのエントリがオペランド表を指すポインタを含むことができ、命令コードのエントリが１つのオペランド表を指すポインタを含まない場合には、変換が実行されない、上記（１）に記載の方法。
（３）オペランド表が、オペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、オペランド表の各エントリが少なくとも１つの変換操作を示し、命令を変換するステップが、
第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有するオペランド表の１つのエントリを決定するステップと、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するために少なくとも１つの変換操作を実行するステップとを含む、上記（２）に記載の方法。
（４）第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプを決定するステップが、第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書を処理するステップを含む、上記（３）に記載の方法。
（５）少なくとも１つの変換操作を実行するステップが、命令コードが第２ビット・アーキテクチャであることを示すように命令コードの名前を変更するステップを含む、上記（３）に記載の方法。
（６）少なくとも１つの変換操作を実行するステップが、変換を受ける命令中の１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すようにオペランドを含む各レジスタ上の情報を含むレジスタ状況表を更新するステップを含む、上記（３）に記載の方法。
（７）変換を受ける命令中のオペランドが第１ビット・アーキテクチャにあり、変換を受ける命令中の他のオペランドが第２ビット・アーキテクチャにあるとき、変換を受ける命令中の１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すようにレジスタ状況表が更新される、上記（６）に記載の方法。
（８）オペランド表の各エントリが、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、上記（３）に記載の方法。
（９）第１ビット・アーキテクチャの命令が、第１ビット・アーキテクチャと第２ビット・アーキテクチャの両方のオペランドを有することができる、上記（１）に記載の方法。
（１０）第１ビット・アーキテクチャが３２ビット・アーキテクチャであり、第２ビット・アーキテクチャが６４ビット・アーキテクチャである、上記（１）に記載の方法。
（１１）第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換するためのシステムであって、
命令コードおよび少なくとも１つのオペランドを有する第１ビット・アーキテクチャの命令にコードを変換する手段と、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含む変換表にアクセスする手段と、
変換表が第１ビット・アーキテクチャの命令を変更するよう指示する情報を含む場合に、第１ビット・アーキテクチャの命令を対応する第２ビット・アーキテクチャの命令に変換する手段とを含み、前記変換が、第１ビット・アーキテクチャの命令を変更して第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われるシステム。
（１２）変換表が各命令コードごとに１エントリを含み、変換を実行すべき場合には、各命令コードのエントリがオペランド表を指すポインタを含むことができ、命令コードに対するエントリが１つのオペランド表を指すポインタを含まない場合は変換が実行されない、上記（１１）に記載のシステム。
（１３）オペランド表がオペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、オペランド表の各エントリが少なくとも１つの変換操作を示し、命令を変換する手段が、
第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有するオペランド表の１つのエントリを決定する手段と、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するために少なくとも１つの変換操作を実行する手段とを含む、上記（１２）に記載のシステム。
（１４）第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプを決定する手段が、第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書を処理する手段を含む、上記（１３）に記載のシステム。
（１５）少なくとも１つの変換操作を実行する手段が、命令コードが第２ビット・アーキテクチャにあることを示すように命令コードの名前を変更する手段を含む、上記（１３）に記載のシステム。
（１６）少なくとも１つの変換操作を実行する手段が、変換を受ける命令中の１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すようにオペランドを含む各レジスタに関する情報を含むレジスタ状況表を更新する手段を含む、上記（１３）に記載のシステム。
（１７）変換を受ける命令中のオペランドが第１ビット・アーキテクチャにあり、変換を受ける命令中の他のオペランドが第２ビット・アーキテクチャにあるとき、変換を受ける命令中の１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すようにレジスタ状況表が更新される、上記（１６）に記載のシステム。
（１８）オペランド表の各エントリが、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、上記（１３）に記載のシステム。
（１９）第１ビット・アーキテクチャの命令が、第１ビット・アーキテクチャと第２ビット・アーキテクチャの両方のオペランドを有することができる、上記（１３）に記載のシステム。
（２０）第１ビット・アーキテクチャが３２ビット・アーキテクチャであり、第２ビット・アーキテクチャが６４ビット・アーキテクチャである、上記（１３）に記載のシステム。
（２１）第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換するのに使用するための製造品であって、
命令コードおよび少なくとも１つのオペランドを有する第１ビット・アーキテクチャの命令にコードを変換すること、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含む変換表にアクセスすること、および
変換表が、第１ビット・アーキテクチャの命令を変更するように指示する情報を含む場合に、第１ビット・アーキテクチャの命令を対応する第２ビット・アーキテクチャの命令に変換することをコンピュータに実行させることのできる少なくとも１つの埋め込まれたコンピュータ・プログラムを含むコンピュータで使用可能な媒体を含み、前記変換が、第１ビット・アーキテクチャの命令を変更して第２ビット・アーキテクチャの命令を生成する変換操作に基づいて行われる製造品。
（２２）変換表が各命令コードごとに１つのエントリを含み、変換を実行すべき場合に、各命令コードのエントリがオペランド表を指すポインタを含むことができ、命令コードのエントリが１つのオペランド表を指すポインタを含まない場合には変換が実行されない、上記（２１）に記載の製造品。
（２３）オペランド表がオペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、オペランド表の各エントリが少なくとも１つの変換操作を示し、命令を変換するステップが、
第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有するオペランド表の１つのエントリを決定するステップと、
第１ビット・アーキテクチャから第２ビット・アーキテクチャに命令を変換するために少なくとも１つの変換操作を実行するステップとを含む、上記（２２）に記載の製造品。
（２４）第１ビット・アーキテクチャの命令中の各オペランドのビット・アーキテクチャ・タイプを決定するステップが、第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書を処理するステップとを含む、上記（２３）に記載の製造品。
（２５）少なくとも１つの変換操作を実行するステップが、命令コードが第２ビット・アーキテクチャにあることを示すように命令コードの名前を変更するステップを含む、上記（２３）に記載の製造品。
（２６）少なくとも１つの変換操作を実行するステップが、変換を受ける命令中の１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すようにオペランドを含む各レジスタに関する情報を含むレジスタ状況表を更新するステップを含む、上記（２３）に記載の製造品。
（２７）変換を受ける命令中の１つのオペランドが第１ビット・アーキテクチャにあり、変換を受ける命令中の他のオペランドが第２ビット・アーキテクチャにあるときに、変換を受ける命令中の前記１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すようにレジスタ状況表が更新される、上記（２６）に記載の製造品。
（２８）オペランド表の各エントリが、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための少なくとも１つの変換操作を含む置換表を指すポインタを含む、上記（２３）に記載の製造品。
（２９）第１ビット・アーキテクチャの命令が、第１ビット・アーキテクチャと第２ビット・アーキテクチャの両方のオペランドを有することができる、上記（２１）に記載の製造品。
（３０）第１ビット・アーキテクチャが３２ビット・アーキテクチャであり、第２ビット・アーキテクチャが６４ビット・アーキテクチャである、上記（２１）に記載の製造品。
（３１）第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャの命令に変換するのに使用するための少なくとも１つのデータ構造を含むコンピュータ可読データ伝送媒体であって、
第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための情報を含む少なくとも１つの変換表であって、変換表が、第１ビット・アーキテクチャの命令を変更するように指示する情報を含む場合に、第１ビット・アーキテクチャの命令が対応する第２ビット・アーキテクチャの命令に変換される変換表と、
第１ビット・アーキテクチャの命令を変更して第２ビット・アーキテクチャの命令を生成するための操作を実行するよう指示する変換操作とを含むコンピュータ可読データ伝送媒体。
（３２）少なくとも１つのオペランド表をさらに含み、変換表が各命令コードごとに１つのエントリを含み、変換を実行すべき場合には各命令コードのエントリが１つのオペランド表を指すポインタを含むことができ、命令コードのエントリがオペランド表を指すポインタを含まない場合には変換が実行されない、上記（３１）に記載のコンピュータ可読データ伝送媒体。
（３３）オペランド表がオペランド・ビット・アーキテクチャ・タイプの可能な各組合せのエントリを含み、オペランド表の各エントリが少なくとも１つの変換操作を指示し、オペランド表が、第１ビット・アーキテクチャの命令の各オペランドのビット・アーキテクチャ・タイプに一致するオペランド・ビット・アーキテクチャ・タイプを有する１つのエントリを含み、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するために少なくとも１つの変換操作が実行される、上記（３２）に記載のコンピュータ可読データ伝送媒体。
（３４）第１ビット・アーキテクチャの各命令の特性に関する情報を含む辞書をさらに含み、第１ビット・アーキテクチャの命令中の各オペランドのアーキテクチャ・タイプを決定するステップが、各命令の特性を決定するために辞書を処理するステップを含む、上記（３３）に記載のコンピュータ可読データ伝送媒体。
（３５）さらに、変換を受ける命令中の１つのオペランドを含むレジスタが第２ビット・アーキテクチャにあることを示すオペランドを含む各レジスタに関する情報を含むレジスタ状況表を含み、前記少なくとも１つの変換操作を実行するときにレジスタ状況表が更新される、上記（３３）に記載のコンピュータ可読データ伝送媒体。
（３６）オペランド表の各エントリが、第１ビット・アーキテクチャの命令を第２ビット・アーキテクチャに変換するための前記少なくとも１つの変換操作を含む置換表を指すポインタを含む、上記（３３）に記載のコンピュータ可読データ伝送媒体。
【図面の簡単な説明】
【図１】コンパイラの構成要素を示す図である。
【図２】本発明の好ましい実施形態によるコンパイラのコード生成部分の構成要素を示す図である。
【図３】本発明の好ましい実施形態による、コード生成器内で実施される、３２ビット命令を６４ビット命令に変換するための論理を示す図である。
【図４】本発明の好ましい実施形態による、ＳＴＯＲＥコマンドを３２ビット形式から６４ビットの形式に変換するために使用されるエントリの例を示す図である。
【符号の説明】
２  コンパイラ
４  原始プログラム
６  フロント・エンド処理
８  中間コード
１０  コード生成器
１２  目的プログラム
１４  目的コンピュータ
２０  ステートメント処理モジュール
２２  ３２ビット命令
２４  変換器
２６  ６４ビット命令
２８  コンパイラ辞書
３０  命令変換表
３２  変換オペランド表
３４  置換表
【図１】
0003606561.tif 000003
【図２】
0003606561.tif 000004
【図３】
0003606561.tif 000005
【図４】
0003606561.tif 000006