(57)【特許請求の範囲】
【請求項１】
ワード内のバイトの重要度を順序付けするための第１のエンディアン・フォーマットを遵守する第１のタイプのプロセッサを、ワード内のバイトの重要度を順序付けするための第２のエンディアン・フォーマットを遵守する第２のタイプのプロセッサ上でエミュレートするための方法であって、前記第２のエンディアン・フォーマットは前記第１のエンディアン・フォーマットと異なり、
前記方法は、前記第２のタイプのプロセッサ及びメモリを含むシステムが、アドレス空間のワード内のバイトの重要度を順序付けするために対応する第２のエンディアン・フォーマットを使用する前記システムの前記第２のタイプのプロセッサ上で実行するように構成されるコンパイル済み又は変換済みコード内の変形済みアドレス空間リファレンスを使用してコンピュータ・プログラム・コード命令をコンパイルまたは変換するステップを実行することを含み、
（ａ）メモリ・アクセス・アドレスを参照するコード命令のコンパイルまたは変換中に、各ワード内でアクセスされるバイト数の所定量に応じて前記参照されるメモリ・アクセス・アドレス値を変更するために、前記メモリ内の固定サイズのブロックに関して前記参照されるメモリ・アクセス・アドレスを変形すること、ここで、ストリング長Ｌの各メモリ・アクセス・アドレスＢはアドレスＡ−Ｂ−Ｌ＋Ｓに変形され、Ａは１つのプログラムに割り振られる前記メモリ内のバイトの総数であり、Ｓがそのプログラムの開始アドレスであり、
（ｂ）前記システムによって使用されるワード内のバイトを順序付けするためのエンディアン・フォーマットに対処するために出力命令の実行中に余分の動作が不要になるように、このように変更されたアドレス参照をコンパイル済みまたは変換済み出力命令に含めること
を含む、前記方法。
【請求項２】
前記コードがコンピュータ・プログラム・ソース・コードである、請求項１に記載の方法。
【請求項３】
前記変更により、前記メモリ内の固定サイズのブロックが、ワード内のバイトの重要度を順序付けするために前記システムによって使用される前記第２のエンディアン・フォーマットに応じて、その２つの末尾のうちの所定の１つによりアドレス指定される、請求項１に記載の方法。
【請求項４】
前記変更により、リトル・エンディアン・マシンのために、ビッグ・エンディアン・マシン用の前記固定サイズのブロックの内容が反転されてミラー・イメージとされる、請求項１に記載の方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はエンディアン変形の方法およびシステムに関する。
【０００２】
【従来の技術】
異なるコンピュータ・プロセッサ・チップ上で同一ソフトウェアを実行するエミュレーション・システムで一般的に発生する問題は、フォーマットの非互換性である。この非互換性の態様の１つは、データ・ストリング（たとえば、２バイト・ワードまたは４バイト・ワード）が表されるフォーマットにある。多くのコンピュータ・アーキテクチャでは、４バイト・ワードの各バイトがそれ自体の個別メモリ・アドレスを有し、これにより、１つのワード内の全バイトに番号を付ける可能性が２通り発生する。
【０００３】
ビッグ・エンディアン規則では、そのバイトがアドレス指定されるワード（Ｘ、Ｘ＋１、Ｘ＋２、およびＸ＋３）はその最上位バイトがＸとアドレス指定されるのに対し、リトル・エンディアン規則では、アドレスの順序付けがこの逆になり、最下位バイトはＸとアドレス指定され、最上位バイトはＸ＋３とアドレス指定される。ワード内のバイトの重要度に順序付けするために異なる規則を遵守するその他の「エンディアン・フォーマット」も知られているが、ほとんどの市販のシステムでは、ビッグ・エンディアン規則またはリトル・エンディアン規則を遵守している。各バイト内のビットの順序付けは、メモリ・アドレス規則がビッグ・エンディアンであるかリトル・エンディアンであるかにかかわらず同じである。
【０００４】
一方のエンディアン・フォーマットのソフトウェア（オペレーティング・システムまたはアプリケーション・プログラムなど）が反対のエンディアン・フォーマットのハードウェア上で動作できるようにするエミュレーション・システムが入手可能である。一般に、このタイプのシステムは、ワードごとに各ワードをエンディアン表現間で変換する。この変換は、頻繁に必要な場合、所与のタスクを実行するために必要な時間に多大なオーバヘッドを持ち込むことになる。
【０００５】
【解決しようとする課題】
本発明の目的の一つとしては、あるエンディアン・フォーマットのソフトウェアが異なるエンディアン・フォーマットのハードウェア上で動作できるようにするための効率の良い方法およびシステムを提供することにある。
【０００６】
【課題を解決するための手段】
本発明によれば、ワード内のバイトの重要度に順序付けするための第１の規則を遵守する第１のタイプのプロセッサを、ワード内のバイトの重要度に順序付けするための第２の規則を遵守する第２のタイプのプロセッサ上でエミュレートするための方法であって、第１の規則によるバイト順序が遵守される命令の結果として第２のタイプのプロセッサによってアドレス指定されるメモリ内に記憶されたバイトが、そのメモリが前記命令に応答して第１のタイプのプロセッサによってアドレス指定された場合に結果として得られることになるバイトの分散パターンのミラー・イメージであるパターン状に分散されるようにメモリ・アクセス・アドレスが変形される方法が提供される。
【０００７】
本発明は、ワード内のバイトの重要度に順序付けするための第１の規則を遵守する第１のタイプのプロセッサを、ワード内のバイトの重要度に順序付けするための第２の規則を遵守する第２のタイプのプロセッサ上でエミュレートするための方法であって、第２の規則の順序が第１の順序の逆であり、メモリ内に記憶された任意の２つのバイトのアドレス間のオフセットが変形によって変更されず、メモリ内に記憶された任意の２つのバイトのアドレスの相対順序が変形によって逆転されるようにメモリ・アクセス・アドレスが変形される方法も提供する。
【０００８】
本発明はさらに、ワード内のバイトの重要度に順序付けするための第１の規則を遵守する第１のタイプのプロセッサを、ワード内のバイトの重要度に順序付けするための第２の規則を遵守する第２のタイプのプロセッサ上でエミュレートするための方法であって、プロセッサが第１のエンディアン・フォーマットのものであり、メモリ・アクセス・アドレスが変形されなかった場合にバイトが集合することになるのと同じように、第２のエンディアン・フォーマットにより動作するプロセッサによって順に記憶される第１のエンディアン・フォーマットのバイト・ストリングが集合するようにメモリ・アクセス・アドレスが変形される方法を提供する。
【０００９】
本発明はさらに、ワード内のバイトの重要度に順序付けするための第１の規則を遵守する第１のタイプのプロセッサを、ワード内のバイトの重要度に順序付けするための第２の規則を遵守する第２のタイプのプロセッサ上でエミュレートするための方法であって、ストリング長Ｌの各メモリ・アクセス・アドレスＢがアドレスＡ−Ｂ−Ｌ＋Ｓに変形され、Ａが１つのプログラムに割り振られるバイトの総数であり、Ｓがそのプログラムの開始アドレスである方法を提供する。
【００１０】
ビッグ・エンディアン・プロセッサとリトル・エンディアン・プログラムの場合を想定すると、アドレス変形により、プロセッサがリトル・エンディアンであり、アドレス変形が一切行われなかった場合に結果として得られることになるパターンのミラー・イメージであるパターン状にバイトがメモリ内で集合することが保証される。本発明は、リトル・エンディアン・プロセッサとビッグ・エンディアン・プログラムの場合にも同じように機能することになる。変形が各バイト内のビットの順序付けに一切影響しないことに留意することは重要なことである。その結果、各バイト・ストリングを使用するたびにそのバイト・ストリングをエンディアン表現間で変換する既知のエンディアン変換方法に比べ、相当な時間の節約が可能なシステムが得られる。
【００１１】
本発明によれば、第１のエンディアン・フォーマットで表現されたコードのアドレス位置を第２のエンディアン・フォーマットのアドレスに変形するための手段を含み、その変形がアドレスにオフセットを持ち込むことを含み、オフセットのサイズがそのコードのアドレス位置と事前定義アドレス位置との差から決定されるエンディアン変形システムが提供される。
【００１２】
本発明の他の態様によれば、アドレス空間のワード内のバイトの重要度に順序付けするために対応する所定の規則を使用するプログラマブル・マシン上での実行のために特に構成されたコンパイル済みまたは変換済みコード内の変形済みアドレス空間リファレンスを使用してコンピュータ・プログラム・コード命令をコンパイルまたは変換するためのプロセスがさらに提供され、前記プロセスが、
（ａ）メモリ・アドレスを参照するコード命令のコンパイルまたは変換中に、各ワード内でアクセス中の所与のバイト数に関して一定の量だけ参照済みアドレス値を変更するように、所定のプログラマブル・マシン内の固定ブロック・サイズのメモリに対して参照済みメモリ・アドレスを変形することと、
（ｂ）前記所定のプログラマブル・マシンによって使用されるワード内のバイトに順序付けするための規則に対処するために出力命令の実行中に余分の動作が不要になるように、このように変更したアドレスリファレンスをコンパイル済みまたは変換済み出力命令に含めることを含む。
【００１３】
次に、一例としてのみ、本発明の具体的な実施形態について説明する。以下の２つのアセンブリ・コード・ストア命令について検討する。
ｍｏｖ１  ＄０ｘａａｂｂｃｃｄｄ，［０］
ｍｏｖ１  ＄０ｘ１１２２３３４４，［２］
これらの命令は、リトル・エンディアン・アーキテクチャで表１に示す効果を生じることになる。
【００１４】
【表１】
0004965024.tif 000002
【００１５】
第１のストア命令は、第１の４バイト・ワード（ａａｂｂｃｃｄｄ）の最下位バイト（ｄｄ）をアドレス「０」に記憶し、第２の最下位バイトをアドレス「１」に記憶し、以下同様に記憶する。第２のストア命令は、第２の４バイト・ワード（１１２２３３４４）の最下位バイト（４４）をアドレス「２」に記憶し、第２の最下位バイトをアドレス「３」に記憶し、以下同様に記憶する。したがって、第２の４バイト・ワードを記憶することによる効果はアドレス「２」および「３」の前の内容を上書きすることであり、第１の４バイト・ワードの２つの最上位バイト「ａａ」および「ｂｂ」が失われる。
【００１６】
ビッグ・エンディアン・アーキテクチャで同じ２つのストア命令を使用する場合、第１の４バイト・ワードの最上位バイト（ａａ）がアドレス「０」に記憶され、次の最上位バイト（ｂｂ）がアドレス「１」に記憶され、以下同様に記憶される。第２のストア命令は、前と同じように、アドレス「２」および「３」の前の内容を上書きすることになり、第１の４バイト・ワードの２つの最下位バイト「ｄｄ」および「ｃｃ」が失われることになる。したがって、ビッグ・エンディアン・アーキテクチャを使用すると、アセンブリ・コード・ストア命令の結果としてアドレス指定されたメモリの内容は、リトル・エンディアン・アーキテクチャを使用したときの同等のメモリの内容とは異なるものになる。
【００１７】
本発明では、バイトの順序は逆転するが、所与のストア命令の結果、どちらのアーキテクチャでも同じバイトが記憶されるように、ビッグ・エンディアン・ワードとリトル・エンディアン・ワードの両方を記憶することができる。これは、たとえばビッグ・エンディアン・プロセッサによってアドレス指定されたメモリ内に記憶されたバイト・パターンが、リトル・エンディアン・プロセッサによる変形なしにそのメモリがアドレス指定された場合に結果として得られることになるパターンのメモリ・イメージになるように、メモリ・アクセス・アドレスを変形することによって達成される。
【００１８】
上記のアセンブリ・コード・ストア命令の場合、ビッグ・エンディアン・アーキテクチャに対処するために、２つの４バイト・ワードは、表２に示すように使用可能な一番上のアドレスに本発明により記憶される。
【００１９】
【表２】
0004965024.tif 000003
【００２０】
メモリ内に情報を保持するため、２つのストアのうちの第２のストアにより、第１の４バイト・ワードより低いアドレスに第２の４バイト・ワードが置かれ、その結果、リトル・エンディアン・アーキテクチャの場合と同じ２バイト・ワード（０ｘａａｂｂ）の情報が上書きされる。したがって、リトル・エンディアン・アーキテクチャにおいてメモリ内に記憶されたバイトに関するアセンブリ・コード命令の効果は、ビッグ・エンディアン・アーキテクチャで再現されるが、バイトの順序は逆転される。
【００２１】
未整合ストア命令に関する本発明によるシステムの上記の例証により、システムのフレキシビリティが立証される。このシステムは、整合ストア命令にも使用することができる。
【００２２】
ビッグ・エンディアン・アーキテクチャで情報を保持するために上記のように使用するアドレス変形は表３に示す通りである。
【００２３】
【表３】
0004965024.tif 000004
【００２４】
これは、一般化すると以下のようになる。
【００２５】
【表４】
0004965024.tif 000005
【００２６】
したがって、上記の表に示す一般化を使用し、リトル・エンディアン・アーキテクチャにおける以下の動作について検討する。
ｍｏｖｗ  ＄０ｘａａｂｂ，［１］
ｍｏｖ１  ［１］，％ｅａｘ
これらは、ビッグ・エンディアン・アーキテクチャにおける以下の動作と同じ効果を生じることになる。
ｍｏｖｗ  ＄０ｘａａｂｂ，［２２−１］
ｍｏｖ１  ［２０−１］，％ｅａｘ
上記のコマンドの効果を表５に示す。
【００２７】
【表５】
0004965024.tif 000006
【００２８】
本発明では、すべてのロード／ストア命令について、１つ余分な算術演算を取り入れている。しかし、メモリにアクセスする多くの命令では、以下のように一定のオフセットを含むアドレス式を使用する。
ａｄｄ１  ％ｅｄｘ，０ｘ８（ｅｂｐ，ｅａｘ，４）
これは、以下の有効アドレスを表現するものである。
ｅｂｐ＋ｅａｘ＊４＋８
この式は、本発明によるメモリ・アクセス変形が適用された後、以下のようになる。
【００２９】
ｅｎｄｉａｎＡｄｊ＿Ｌ−（ｅｂｐ＋ｅａｘ＊４＋８）
この式の定数の畳込みを使用すると、以下のように示すことができる。
（ｅｎｄｉａｎＡｄｊ＿Ｌ−８）−（ｅｂｐ＋ｅａｘ＊４）
したがって、畳込みにより、変換時に計算される可能性のある項を、レジスタ内に保持され、変換時に未知の項から分離することができる。「ｅｎｄｉａｎＡｄｊ＿Ｌ」という項は変換時に既知であるので、実行時以前にその効果が計算され、メモリ・アクセス変形により実行時にパフォーマンスの損失が発生しなくなる。したがって、一般に、本発明のビッグ・エンディアン変形は、メモリ・アクセスの大部分で余分なオーバヘッドを一切被らない。サブジェクト・マシン・プログラム（またはオペレーティング・システム）は、アドレス０から連続してロードされた場合と同様に扱われるが、内部では、表６に示すようにミラー・イメージとして記憶される。
【００３０】
【表６】
0004965024.tif 000007
【００３１】
前述の例と同じプログラム・サイズを使用し、アセンブリ・コードがメモリ位置３にある４バイト値０ｘ０００００００３へのアクセスを指定する場合、このメモリ・アクセスは、ｅｎｄｉａｎＡｄｊ＿Ｌ−３＝（ｐｒｏｇＳｉｚｅ−４）−３＝（２４−４）−３＝１７になり、これは、必要な値のビッグ・エンディアン・ミラー・イメージでのアドレスである。
【００３２】
上記の例では、それがビッグ・エンディアン・システムで動作するようにリトル・エンディアン・アーキテクチャ用に意図されたコードを変形する際の本発明の使用を示しているが、本発明を使用すると、リトル・エンディアン・システム上で動作するようにビッグ・エンディアン・コードを変形することもできるだろう。実際には、本発明を使用すると、互いにバイトが逆転する２つのエンディアン・システム間で変形することができる。
【００３３】
このエンディアン変形方法は、完全なエミュレーション・システムの一部として使用することができる。  前述の「畳込み」動作によって結びつけられる利点は、上記の特定の変形に限定されない。コンパイル済みまたは変換済みコード内の変形済みアドレス空間リファレンスを使用して出力命令に変更済みアドレスを含める他のコンパイルまたは変換プロセスでも、同様の動作を実行して、出力命令の実行中のオーバヘッドを低減することができる。