(57)【要約】  コードコンパイル方法は、データにエンディアンタイプを割り当てるステップを有する。エンディアンフリップ処理が、データのエンディアンタイプとターゲットシステムとに基づき実行される。他の実施例が記載及び請求される。
2008523514.tif 000002
【特許請求の範囲】
【請求項１】
コードをコンパイルする方法であって、
エンディアンタイプをデータに割り当てるステップと、
前記データのエンディアンタイプとターゲットシステムとに基づき、エンディアンフリップ処理を実行するステップと、
を有する方法。
【請求項２】
前記コードのデータの宣言から前記データのエンディアンタイプを決定するステップをさらに有する、請求項１記載の方法。
【請求項３】
非明示的宣言基準に基づき、前記データのエンディアンタイプを決定するステップをさらに有する、請求項１記載の方法。
【請求項４】
前記非明示的宣言基準は、前記コードの位置を有する、請求項３記載の方法。
【請求項５】
前記非明示的宣言基準は、前記コードを有するディレクトリ内のファイルの特性を有する、請求項３記載の方法。
【請求項６】
前記エンディアンフリップ処理は、前記データに対応するバイトを交換することを有する、請求項１記載の方法。
【請求項７】
前記データに対応するバイトの交換は、メモリへのデータの書き込み前であって、前記メモリからのデータの読み出し後に実行される、請求項６記載の方法。
【請求項８】
前記バイトの交換は、マシーンコードに１以上のマシーン命令を挿入することを有する、請求項６記載の方法。
【請求項９】
前記１以上のマシーン命令は、ＢＳＷＡＰ命令を有する、請求項８記載の方法。
【請求項１０】
共通部分表現が存在すると判断すると、エンディアンフリップ処理を削除するステップをさらに有する、請求項１記載の方法。
【請求項１１】
前記エンディアンフリップ処理を命令ストリームの先の部分に移動するステップをさらに有する、請求項１記載の方法。
【請求項１２】
命令を含む命令シーケンスを有するマシーンアクセス可能媒体を有する製造物であって、
当該命令は、実行時に、
エンディアンタイプをデータに割り当てるステップと、
前記データのエンディアンタイプとターゲットシステムとに基づき、エンディアンフリップ処理を実行するステップと、
前記マシーンに実行させる物。
【請求項１３】
実行時に、コードの前記データの宣言から前記データのエンディアンタイプを決定するステップを前記マシーンにさらに実行させる命令を有する、請求項１２記載の物。
【請求項１４】
実行時に、非明示的宣言基準に基づき、前記データのエンディアンタイプを決定するステップを前記マシーンにさらに実行させる命令を有する、請求項１２記載の物。
【請求項１５】
前記エンディアンフリップ処理の実行は、前記データに対応するバイトを交換することを有する、請求項１２記載の物。
【請求項１６】
前記データに対応するバイトの交換は、メモリへの前記データの書き込み前であって、前記メモリからのデータの読み出し後に実行される、請求項１５記載の物。
【請求項１７】
前記バイトの交換は、１以上のマシーン命令をマシーンコードに挿入することを有する、請求項１５記載の方法。
【請求項１８】
前記１以上のマシーン命令は、ＢＳＷＡＰ命令を含む、請求項１７記載の方法。
【請求項１９】
エンディアンタイプをデータに割り当てるフロントエンドユニットと、
前記データのエンディアンタイプとターゲットシステムのエンディアンタイプとに基づき、エンディアンフリップ処理を実行すべきときを決定する中間言語ユニットと、
を有するコンパイラ。
【請求項２０】
前記フロントエンドユニットは、コードの前記データの宣言から前記データのエンディアンタイプを決定する、請求項１９記載のコンパイラ。
【請求項２１】
前記フロントエンドユニットは、非明示的宣言基準に基づき、前記データのエンディアンタイプを決定する、請求項１９記載のコンパイラ。
【請求項２２】
共通部分表現が存在すると判断すると、エンディアンフリップ処理を除去する最適化ユニットをさらに有する、請求項１９記載のコンパイラ。
【請求項２３】
エンディアンフリップ処理を命令ストリームの先の部分に移動する最適化ユニットをさらに有する、請求項１９記載のコンパイラ。
【請求項２４】
前記エンディアンフリップ処理を可能にするため、１以上のマシーン命令を挿入するコード生成ユニットをさらに有する、請求項１９記載のコンパイラ。
【請求項２５】
メモリと、
エンディアンタイプをデータに割り当てるフロントエンドユニットと、前記データのエンディアンタイプとターゲットシステムのエンディアンタイプとに基づき、エンディアンフリップ処理を実行すべきときを決定する中間言語ユニットとを有するコンパイラを実現するプロセッサと、
を有するコンピュータシステム。
【請求項２６】
前記フロントエンドユニットは、コードの前記データの宣言から前記データのエンディアンタイプを決定する、請求項２５記載のコンピュータシステム。
【請求項２７】
前記フロントエンドユニットは、非明示的宣言基準に基づき、前記データのエンディアンタイプを決定する、請求項２５記載のコンピュータシステム。
【請求項２８】
前記コンパイラはさらに、前記エンディアンフリップ処理を可能にするため、１以上のマシーン命令を挿入するコード生成ユニットをさらに有する、請求項２５記載のコンピュータシステム。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
［技術分野］
本発明の実施例は、コンパイラに関する。より詳細には、本発明の実施例は、バイエンディアン対応コンパイラを実現する方法及び装置に関する。
【０００２】
［背景］
バイトエンディアンは、データ格納及びデータ抽出が複数のアクセスサイズをサポートする場合におけるデータ格納及び抽出の属性である。より細かい粒度のアクセスは、プログラマがより大きなアクセスがバイトをメモリに格納する順序を確認することを可能にする。ビッグエンディアンデータは、リトルエンディアンデータと反対のバイト順序によりメモリに格納される。リトルエンディアンデータは、それの最下位バイトと共に最下位のメモリバイトアドレスに格納される（左から右に格納される）。ビッグエンディアンデータは、それの最上位バイトと共に最下位のメモリバイトアドレスに格納される（右から左に格納される）。同一の値を有するビッグ及びリトルエンディアン変数は、ＣＰＵレジスタでは同一であるが、メモリでは異なる順序を有している。
【０００３】
１バイトエンディアン方法を用いて記述されたソースコードは、データの一部がメモリにどのように格納されているかの異なる順序を認識することなく、他のバイトエンディアンの従来方法を有するプラットフォーム又はターゲットシステム上で実行することはできない。例えば、正しいソフトウェア動作を保持するため、データ内のエンディアンバイト順序付けは、ユニオン又はポインタアクセスがこのような順序をプログラマに可視化するとき保持されている必要がある。プログラムの範囲外で読み書きされたデータのバイト順序もまた、保持される必要がある。
【０００４】
従来、一部のプラットフォームは、１バイトエンディアン方法又は他の方法により記述されたソースコードの実行をサポートするよう設定可能なモードビットにより構成されていた。しかしながら、このアプローチは、プラットフォーム上で実行されるすべてのコードに対するサポートを適用したものでなく、このため、リトルエンディアンオペレーティングシステム上でビッグエンディアンプログラムを実行する問題を解決するものではない。
【０００５】
従って、異なるエンディアン方法を有するコンピュータシステム上で１エンディアン方法により記述されたコードを実行するための効率的かつ効果的な方法及び装置が必要とされる。
【０００６】
［詳細な説明］
以下の記載では、説明のため、具体的な用語が本発明の実施例の完全な理解を提供するため与えられる。しかしながら、本記載の具体的詳細は本発明の実施例を実現するのに必要ではないかもしれないということは、当業者に明らかである。他の例では、本発明の実施例を不必要に不明りょうにすることを回避するため、周知のコンポーネント、プログラム及び手続はブロック図により示される。
【０００７】
図１は、本発明の実施例による一例となるコンピュータシステム１００のブロック図である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０１と、メモリ１１３とを有する。コンピュータシステム１００は、ビッグエンディアン又はリトルエンディアンを有し、プロセッサ１０１は、最下位アドレスに数の下位バイトを、最上位アドレスに数の上位バイトを格納し（リトルエンディアン方法）、又は最下位アドレスに数の上位バイトを、最上位アドレスに下位バイトを格納する（ビッグエンディアン）。
【０００８】
プロセッサ１０１は、ＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）マイクロプロセッサ、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ）マイクロプロセッサ、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ又は他のプロセッサデバイスであってもよい。図１は、単一のプロセッサを有するコンピュータシステム１００を示す。しかしながら、コンピュータシステム１００が複数のプロセッサにより動作可能であるということは理解されるであろう。さらに、１以上のプロセッサのそれぞれは、１以上のハードウェアスレッドをサポートしてもよい。プロセッサ１０１は、コンピュータシステム１００の他のコンポーネントとプロセッサ１０１との間でデータ信号を伝送するＣＰＵバス１１０に接続される。
【０００９】
メモリ１１３は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）デバイス、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）デバイス、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）及び／又は他のメモリデバイスであってもよい。メモリ１１３は、プロセッサ１０１により実行可能なデータ信号により表される命令及びコードを格納する。コンピュータシステム１００の実施例によると、ビッグエンディアン対応コンパイラがメモリ１１３に格納され、ソフトウェアをコンパイルする際に、バイエンディアンサポートを提供するためコンピュータシステムのプロセッサ１０１により実現される。通常はリトルエンディアン順序によりメモリ１１３に格納されるデータが、当該格納前にエンディアンフリップ（バイトスワップ）処理を実行することによって、ビッグエンディアン順序により格納され、またその反対に格納されてもよい。この値は、メモリ１１３からの抽出後にエンディアンフリップ処理を実行することによって抽出されてもよい。エンディアンフリップ処理は、アラインされた（ａｌｉｇｎｅｄ）及びアラインされていない（ｕｎａｌｉｇｎｅｄ）リファレンスについて、データ書き込み前（ｐｒｅ−ｗｒｉｔｅ）であって、データ読み出し後（ｐｏｓｔ−ｒｅａｄ）に実行されてもよいということは理解されるべきである。
【００１０】
キャッシュメモリ１０２は、メモリ１１３に格納されているデータ信号を格納するプロセッサ１０１の内部に配置される。キャッシュ１０２は、それのアクセス局所性を利用することによって、プロセッサ１０１によるメモリへのアクセスをスピードアップする。コンピュータシステム１００の他の実施例では、キャッシュ１０２は、プロセッサ１０１の外部に配置される。ブリッジメモリコントローラ１１１が、ＣＰＵバス１１０とメモリ１１３に接続される。ブリッジメモリコントローラ１１１は、プロセッサ１０１、メモリ１１３及びコンピュータシステム１００の他のコンポーネントの間のデータ信号を誘導し、ＣＰＵバス１１０、メモリ１１３及び第１ＩＯバス１２０の間のデータ信号をブリッジする。
【００１１】
第１ＩＯバス１２０は、単一のバス又は複数のバスの組み合わせであってもよい。第１ＩＯバス１２０は、コンピュータシステム１００の各コンポーネントの間の通信リンクを提供する。ネットワークコントローラ１２１は、第１ＩＯバス１２０に接続される。ネットワークコントローラ１２１は、コンピュータシステム１００とコンピュータのネットワーク（図示せず）とをリンクさせ、これらマシーンの間の通信をサポートする。表示装置コントローラ１２２が、第１ＩＯバス１２０に接続される。表示装置コントローラ１２２は、表示装置（図示せず）とコンピュータシステム１００との接続を可能にし、表示装置とコンピュータシステム１００との間のインタフェースとして機能する。
【００１２】
第２ＩＯバス１３０は、単一のバス又は複数のバスの組み合わせであってもよい。第２ＩＯバス１３０は、コンピュータシステム１００の各コンポーネントの間の通信リンクを提供する。データ格納装置１３１が第２ＩＯバス１３０に接続される。データ格納装置１３１は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス又は他の大容量記憶装置であってもよい。入力インタフェース１３２が第２ＩＯバス１３０に接続される。入力インタフェース１３２は、例えば、キーボード及び／又はマウスコントローラ又は他の入力インタフェースであってもよい。入力インタフェース１３２は、専用の装置であってもよく、又はバスコントローラや他のコントローラなどの他の装置に配置することも可能である。入力インタフェース１３２は、入力デバイスとコンピュータシステム１００との接続を可能にし、入力デバイスからコンピュータシステム１００にデータ信号を送信する。オーディオコントローラ１３３が第２ＩＯバス１３０に接続される。オーディオコントローラ１３３は、音声の記録及び再生を調整するよう動作し、またＩＯバス１３０に接続される。バスブリッジ１２３は、第１ＩＯバス１２０と第２ＩＯバス１３０とを接続する。バスブリッジ１２３は、第１ＩＯバス１２０と第２ＩＯバス１３０との間のデータ信号をバッファ及びブリッジするよう動作する。
【００１３】
図２は、本発明の実施例によるバイエンディアン対応コンパイラ２００を示すブロック図である。バイエンディアン対応コンパイラ２００は、コンパイラマネージャ２１０を有する。コンパイラマネージャ２１０は、コンパイルするソースコードを受け付ける。コンパイラマネージャ２１０は、バイエンディアン対応コンパイラ２００の他のコンポーネントとのインタフェースをとり、また各コンポーネント間で情報を送信する。
【００１４】
バイエンディアン対応コンパイラ２００は、フロントエンドユニット２２０を有する。バイエンディアン対応コンパイラ２００の実施例によると、フロントエンドユニット２２０は、ソースコードを構文解析し、それを抽象的なシンタックスツリーに変換するよう動作する。フロントエンドユニット２２０はまた、エンディアンタイプをソースコードのデータに割り当てる。フロントエンドユニット２２０の第１実施例によると、ソースコードの供給元のファイルの特性が、関連するエンディアンタイプを有する非明示的な宣言基準と比較される。この非明示的な宣言基準は、例えば、パス名やディレクトリなどのソースコードの供給元のファイルの位置を含むものであってもよい。非明示的な宣言基準はまた、ディレクトリにおけるファイルの特性又は他の情報を含むものであってもよい。本実施例では、フロントエンドユニット２２０は、非明示的な宣言基準に係るエンディアンに基づき、ソースコードのデータをエンディアンタイプに割り当てる。フロントエンドユニット２２０の第２実施例によると、ソースコードのデータは、宣言においてエンディアンタイプに関連付けされてもよい。本実施例では、フロントエンドユニット１２０は、宣言におけるそれの関連するエンディアンタイプに基づき、エンディアンタイプをデータに割り当てる。フロントエンドユニット２２０は、データに対するエンディアンタイプの明示的宣言が非明示的な宣言基準に係るエンディアンに優先する２つの実施例を実現するかもしれない。ソースコードのデータは、ベースデータタイプを含むだけでなく、データ構造やユニオンなどを統合するかもしれない。
【００１５】
バイエンディアン対応コンパイラ２００は、中間言語ユニット２３０を含む。中間言語ユニット２３０は、抽象的なシンタックスツリーを中間表現などの共通の中間形式に変換する。バイエンディアン対応コンパイラ２３０は、中間表現の何れにおいてエンディアンフリップ処理を実行すべきか判断し、当該位置にエンディアンフリップ演算子を配置する。バイエンディアン対応コンパイラ２００の実施例によると、あるエンディアンタイプのデータがターゲット又はプラットフォームシステムのエンディアンタイプと異なるとき、メモリへのデータの書き込み前であって、ターゲット又はプラットフォームシステムのメモリからのデータの読み出し後に、エンディアンフリップが実行される。中間言語ユニット２３０は、抽象的なシンタックスツリーを１以上の共通の中間形式に変換してもよいということが理解されるべきである。
【００１６】
バイエンディアン対応コンパイラ２００は、最適化ユニット２４０を有する。最適化ユニット２４０は、共通部分表現削除又はＣＳＥ（Ｃｏｍｍｏｎ  Ｓｕｂ−Ｅｘｐｒｅｓｓｉｏｎ  Ｅｌｉｍｉｎａｔｉｏｎ）ユニット２４１を有する。ＣＳＥユニット２４１は、データ値が変更されなかったと判断すると、余計なエンディアンフリップ処理を削除し、中間表現を簡単化する。最適化ユニット２４０は、コード動きユニット２４２を有する。コード動きユニット２４２は、それがパフォーマンスの観点からエンディアンフリップ処理を実行するのにより効率的であるとき、エンディアンフリップ処理を命令のより先の部分に移動する。最適化ユニット２４０は、定数伝搬解析から、データ値が変更されず、このため、メモリからの読み出しが不要であると判断すると、定数に対するエンディアンフリップ処理を削除する。
【００１７】
バイエンディアンコンパイラ２００は、コード生成装置２５０を有する。コード生成装置２５０は、中間表現をマシーンコードに変換する。バイエンディアンコンパイラ２００の実施例によると、コード生成装置２５０は、エンディアンフリップ処理を実現するため、マシーン命令を挿入する。一実施例では、１以上のＢＳＷＡＰ及び／又はシフト命令がエンディアンフリップ処理を実現するのに使用される。
【００１８】
バイエンディアンコンパイラ２００の実施例によると、ビッグエンディアンデータに対する処理は、以下に示されるように分解可能である。
【００１９】
【表１】
2008523514.tif 000003
【００２０】
バイエンディアンコンパイラ２００は、レジスタ割当装置２６０を有する。レジスタ割当装置２６０は、メモリでなくプロセッサのレジスタに格納可能な中間表現のデータを特定する。レジスタ割当装置２６０は、コンピュータシステムのエンディアンタイプを有するデータにレジスタを割り当てる。
【００２１】
図３は、本発明の実施例によるコードのコンパイル時にバイエンディアンサポートを実現する方法のフローチャートである。３０１において、エンディアンタイプがデータに割り当てられる。エンディアンタイプは、非明示的宣言、明示的宣言又は非明示的宣言と明示的宣言との組み合わせを介しデータに割り当てられてもよい。
【００２２】
３０２において、データが１つのエンディアンタイプから他のタイプに変換されるべきか否か判断される。本発明の実施例によると、１つのエンディアンタイプのデータがターゲット又はプラットフォームシステムのエンディアンタイプと異なるとき、ターゲット又はプラットフォームシステムのメモリへのデータの書き込み前であって、メモリからのデータの読み出し後に、エンディアンフリップが実行される。エンディアンフリップ演算子は、エンディアンフリップ処理が実行されるべきと判断される中間言語の位置に配置されてもよい。
【００２３】
本発明の実施例によると、エンディアンフリップは、ビッグエンディアン表現とリトルエンディアン表現との間に可能なセマティックな相違があるデータについてのみ挿入される。これは、例えば、コンパイラによって決定される。一実施例では、外部的でない、揮発性のものでない、若しくはユニオンの一部であって、コードによって明示的に参照されるアドレスを有しないデータ変数が、プログラムに対するセマティックな効果なしに何れかの表現に格納される。さらなる解析が、エンディアンフリップを必要とする変数のクラスをさらに減少させるため実行されてもよい。エンディアンフリップはまた、ソースとデスティネーションが同一のエンディアンタイプであって、当該処理がエンディアン表現が重要でないビット単位ブール演算（ＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴ）などであるとき、削除されてもよい。
【００２４】
３０３において、エンディアンフリップの最適化が実行される。最適化は、コードの実行時にプロセッササイクルを低減するため、エンディアンフリップ処理を移動又は削除することに関するものであってもよい。本発明の実施例によると、最適化は、データ値が変更されていないと判断されると、余計なエンディアンフリップ処理を削除し、パフォーマンスの観点からそれがより効率的なものであるとき、エンディアンフリップ処理を命令ストリームのより先の又はより後の部分に移動し、又は他の手続を実行することに関する。
【００２５】
３０４において、マシーン命令がエンディアンフリップ処理を実現するためマシーンコードに挿入される。エンディアンフリップ処理がビッグエンディアンデータとリトルエンディアンデータとの間の変換をサポートするようバイトをフリップする本発明の実施例によると、１以上のＢＳＷＡＰ及び／又はシフト命令が利用可能である。
【００２６】
３０５において、レジスタ割当が実行される。本発明の実施例によると、中間表現によるデータが、メモリでなくプロセッサのレジスタに格納するのに特定される。
【００２７】
図４は、本発明の実施例による非明示的宣言を利用してエンディアンタイプをデータに割り当てる方法のフローチャートである。図４に示される方法は、図３に示される３０１において実現されてもよい。４０１において、コンパイルされるコードのファイルの特性が、非明示的宣言基準と比較される。非明示的宣言基準は、例えば、それのパス又はディレクトリ名などのファイルの位置、ディレクトリにおける他のファイルの特性、又は他の基準などを含むかもしれない。非明示的宣言基準は、それに係るエンディアンタイプを有してもよい。
【００２８】
４０２において、コードのすべてのデータのグローバルフラグが、４０１における比較に基づき設定される。本発明の実施例によると、グローバルフラグは、コードのすべてのデータについて関連付けされるエンディアンタイプを示す指標であるかもしれない。
【００２９】
４０３において、コードのデータが構文解析され、グローバルフラグがコードのデータに割り当てられる。
【００３０】
図４に示されるような非明示的宣言は、第１エンディアンタイプを使用する第１ターゲット又はプラットフォームに書き込みされたソフトウェアが、ソースコードを変更することなく第２エンディアンタイプを使用する第２ターゲット又はプラットフォームシステム上でコンパイル、リンク又はデバッグされることを可能にする。図４に示される実施例は、バイエンディアン対応コンパイラがベースデータバイトについてビッグとリトルの両方のエンディアンタイプ順序付けをサポートすることを可能にする。例えば、非明示的宣言基準がエンディアンタイプに係るパス名である場合、当該パス名を有するディレクトリ内のすべてのソースファイルが関連するエンディアンタイプによりコンパイルされる。他の非明示的宣言基準が実現されてもよい。例えば、コンパイルされるべきファイルとして同一のディレクトリを共有するファイルの名前が、エンディアンタイプを関連付けするのに使用されてもよい。本発明の実施例によると、非明示的宣言基準とエンディアンタイプの関連付けは、呼び出しによりコンパイラにコマンドを用いて実行される。本発明の他の実施例によると、前にエンディアンタイプを設定し、ソースファイル又はヘッダファイルの包含後にエンディアンモードをリセットするファイルが、関連付けに自動的に含まれるようにしてもよい。関連付けのための他の手順がまた利用されてもよいということが理解されるべきである。
【００３１】
図５は、本発明の実施例による明示的宣言を利用してエンディアンタイプをデータに割り当てる方法のフローチャートである。図５に示される方法は、図３に示される３０１において実現されてもよい。５０１において、コンパイルされるコードのデータが構文解析される。
【００３２】
５０２において、エンディアンタイプが当該データに関連付けされるか判断される。本発明の実施例によると、データの宣言は、タイプ指定子、属性限定子又はデータに関連付けされるエンディアンを示す他のラベルについてチェックされる。エンディアンタイプがデータに関連付けされていないと判断された場合、制御は５０３に移行する。エンディアンタイプがデータに関連付けされていると判断された場合、制御は５０４に移行する。
【００３３】
５０３において、デフォルトエンディアンタイプを示すため、フラグがデータに割り当てられる。本発明の実施例によると、コードの供給元のプラットフォームシステムに対応するエンディアンタイプ、コードが実行されるべきプラットフォームシステムに対応するエンディアンタイプ、又は他のエンディアンタイプを示すため、フラグがデータに割り当てられる。
【００３４】
５０４において、宣言のデータに係るエンディアンタイプを示すため、フラグがデータに割り当てられる。
【００３５】
図５に示されるような明示的宣言は、コンパイラがソースコードを明示的に変更することによって、ビッグ及びリトルエンディアンタイプを同時にサポート及び処理することを可能にする。バイエンディアンのサポートは、リトルエンディアンソフトウェアとビッグエンディアンソフトウェアとの統合を可能にする。整数、ポインタ、浮動小数及びビットフィールドなどのベースデータタイプの具体例が、タイプ指定子、属性限定子又は他のラベリング技術によって、それらのエンディアンに関して明示的に限定されてもよい。明示的宣言がない場合、ベースデータタイプのエンディアンは、コンパイラ又は他のコンポーネントのデフォルトとされてもよい。明示的宣言の具体例が、以下に示される。
【００３６】
【表２】
2008523514.tif 000004
【００３７】
図６は、本発明の実施例による非明示的及び明示的宣言を利用してエンディアンタイプをデータに割り当てる方法のフローチャートである。図６に示される方法は、図３に示される３０１において実現されてもよい。６０１において、コンパイルされるコードのファイルの特性が、非明示的宣言基準と比較される。非明示的宣言基準は、例えば、それのパス又はディレクトリ名などのファイルの位置、又はディレクトリにおける他のファイルの特性などを含むかもしれない。非明示的宣言基準は、それに係るエンディアンタイプを有するものであってもよい。
【００３８】
６０２において、グローバルフラグが、４０１において説明されたような比較に基づき設定される。本発明の実施例によると、グローバルフラグは、コードのすべてのデータについて関連付けされたエンディアンタイプを示す指標であってもよい。
【００３９】
６０３において、コードのデータが構文解析される。
【００４０】
６０４において、エンディアンタイプが当該データに関連付けされているか判断される。本発明の実施例によると、データの宣言が、タイプ指定子、属性限定子及び当該データに係るエンディアンを示す他のラベルについてチェックされる。エンディアンタイプがデータに関連付けされていないと判断されると、制御は６０５に移行する。エンディアンタイプがデータに関連付けされていると判断されると、制御は６０６に移行する。
【００４１】
６０５において、グローバルフラグがコードにおいて当該データに割り当てられる。
【００４２】
６０６において、宣言においてデータに係るエンディアンタイプを示すため、フラグがデータに割り当てられる。第２フラグがまた、エンディアンタイプが明示的に決定されることを示すため、データに割り当てられてもよい。
【００４３】
図３〜６は、本発明の実施例による方法を示すフローチャートである。これらの図面に示される技術及び手続の一部は、シーケンシャルに、パラレルに、又は説明された以外の順序により実行されてもよい。記載される技術及び手続のすべてが必ずしも実行される必要はなく、さらなる技術及び手続が追加されてもよく、また図示された技術及び手続の一部は他の技術及び手続と置換可能であるということが理解されるべきである。
【００４４】
図７は、本発明の実施例による非明示的宣言を利用してエンディアンタイプをデータに関連付けることの一例を示す。本例では、非明示的宣言基準は、コンパイルされるコードの位置である。位置７１０は、ビッグエンディアンであるファイルに関連付けされる。位置７２０は、リトルエンディアンであるファイルに関連付けされる。位置７１０は、データ構造ｔ１ｂｅ及びｔ２ｂｅを規定する．ｈファイル７１１を含む。これらのデータ構造の双方が、ビッグエンディアン関連付けを有する位置にある．ｈファイルにおいて規定されているため、両方のデータ構造ｔ１ｂｅとｔ２ｂｅは、ビッグエンディアンのエンディアンタイプに割り当てられる。位置７２０は、データ構造ｔ１ｌｅ及びｔ２ｌｅを規定する．ｈファイル７２１を含む。これらのデータ構造の両方が、リトルエンディアンタイプ関連付けを有する位置にある．ｈファイルに規定されるため、両方のデータ構造ｔ１ｌｅ及びｔ２ｌｅがビッグエンディアンのエンディアンタイプに割り当てられる。
【００４５】
位置７１０は、存在する場合には、変数とそれらの対応するデータ構造を宣言する．ｃファイル７１２を含む。変数ｖ１及びｖ３はビッグエンディアンである。変数ｖ２及びｖ４はリトルエンディアンである。位置７２０は、存在する場合には、変数とそれらの対応するデータ構造を宣言する．ｃファイル７２２を含む。変数ｖ５及びｖ８はリトルエンディアンである。変数ｖ６及びｖ８は、ビッグエンディアンである。
【００４６】
．ｃファイル７１２を参照すると、ビッグエンディアンである変数ｖ１がリトルエンディアンであるｖ２に設定されると、変数ｖ２はリトルエンディアンからビッグエンディアンに変換されることに留意されたい。ビッグエンディアンである変数ｖ３がリトルエンディアンであるｖ４に設定されるとき、変数ｖ４はまた、リトルエンディアンからビッグエンディアンに変換される。
【００４７】
．ｃファイル７２２を参照すると、リトルエンディアンである変数ｖ５がビッグエンディアンであるｖ６に設定されると、変数ｖ６は、ビッグエンディアンからリトルエンディアンに変換される。リトルエンディアンである変数ｖ７がビッグエンディアンであるｖ８に設定されると、変数ｖ８はまた、ビッグエンディアンからリトルエンディアンに変換される。
【００４８】
本発明の実施例は、命令を格納したマシーン可読媒体を含むコンピュータプログラムプロダクト又はソフトウェアとして提供されるかもしれない。マシーン可読媒体は、コンピュータシステム又は他の電子装置をプログラムするのに利用されるかもしれない。マシーン可読媒体は、以下に限定されるものではないが、フロッピー（登録商標）ディスケット、光ディスク、ＣＤ−ＲＯＭ、光磁気ディスク又は電子命令を格納するのに適した他のタイプの媒体／マシーン可読媒体を含むかもしれない。ここに記載された技術は、特定のソフトウェアコンフィギュレーションに限定されるものではない。それらは、任意の計算又は処理環境において適用可能性を見つけることができる。ここで使用される“マシーン可読媒体”という用語は、マシーンにより実行のため命令シーケンスを格納又は符号化可能であって、ここに記載される方法の何れか１つをマシーンに実行させる任意の媒体を含む。さらに、当該分野において、アクションを実行し、又は結果を生じさせるものとして、１つの形式又は他の形式（プログラム、手続、プロセス、アプリケーション、モジュール、ユニット、ロジックなど）によりソフトウェアと言うことは一般的である。このような表現は、処理システムのソフトウェアの実行がプロセッサに結果を生成するためのアクションを実行させることを記載する単なる簡略化された方法である。
【００４９】
上記記載では、本発明の実施例がそれの特定の実施例を参照して説明された。しかしながら、本発明の実施例のより広範な趣旨及び範囲から逸脱することなく、各種改良及び変更が可能であるということは明らかであろう。本明細書及び図面は、限定的な意味でなく例示的なものとしてみなされるべきである。
【図面の簡単な説明】
【００５０】
【図１】図１は、本発明の実施例が実現可能な一例となるコンピュータシステムのブロック図である。
【図２】図２は、本発明の実施例によるバイエンディアン対応コンパイラを示すブロック図である。
【図３】図３は、本発明の実施例によるコードコンパイル時のバイエンディアンサポートを実現する方法のフローチャートである。
【図４】図４は、本発明の実施例による非明示的宣言を使用してデータにエンディアンタイプを割り当てる方法のフローチャートである。
【図５】図５は、本発明の実施例による明示的宣言を使用してデータにエンディアンタイプを割り当てる方法のフローチャートである。
【図６】図６は、本発明の実施例による非明示的及び明示的宣言を使用してデータにエンディアンタイプを割り当てる方法のフローチャートである。
【図７】図７は、本発明の実施例による非明示的宣言を使用してデータにエンディアンタイプを関連付ける具体例を示す。
【図１】
2008523514.tif 000005
【図２】
2008523514.tif 000006
【図３】
2008523514.tif 000007
【図４】
2008523514.tif 000008
【図５】
2008523514.tif 000009
【図６】
2008523514.tif 000010
【図７】
2008523514.tif 000011
【国際調査報告】
2008523514.tif 000012
2008523514.tif 000013