JP2008523514A - バイエンディアン対応コンパイラを実現する方法及び装置 - Google Patents

バイエンディアン対応コンパイラを実現する方法及び装置 Download PDF

Info

Publication number
JP2008523514A
JP2008523514A JP2007545690A JP2007545690A JP2008523514A JP 2008523514 A JP2008523514 A JP 2008523514A JP 2007545690 A JP2007545690 A JP 2007545690A JP 2007545690 A JP2007545690 A JP 2007545690A JP 2008523514 A JP2008523514 A JP 2008523514A
Authority
JP
Japan
Prior art keywords
endian
data
type
code
compiler
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.)
Pending
Application number
JP2007545690A
Other languages
English (en)
Inventor
ウィルキンソン,ヒュー
アディレッタ,マシュー
クシュリス,ロバート
Original Assignee
インテル コーポレイション
ウィルキンソン,ヒュー
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by インテル コーポレイション, ウィルキンソン,ヒュー filed Critical インテル コーポレイション
Publication of JP2008523514A publication Critical patent/JP2008523514A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

コードコンパイル方法は、データにエンディアンタイプを割り当てるステップを有する。エンディアンフリップ処理が、データのエンディアンタイプとターゲットシステムとに基づき実行される。他の実施例が記載及び請求される。

Description

発明の詳細な説明
[技術分野]
本発明の実施例は、コンパイラに関する。より詳細には、本発明の実施例は、バイエンディアン対応コンパイラを実現する方法及び装置に関する。
[背景]
バイトエンディアンは、データ格納及びデータ抽出が複数のアクセスサイズをサポートする場合におけるデータ格納及び抽出の属性である。より細かい粒度のアクセスは、プログラマがより大きなアクセスがバイトをメモリに格納する順序を確認することを可能にする。ビッグエンディアンデータは、リトルエンディアンデータと反対のバイト順序によりメモリに格納される。リトルエンディアンデータは、それの最下位バイトと共に最下位のメモリバイトアドレスに格納される(左から右に格納される)。ビッグエンディアンデータは、それの最上位バイトと共に最下位のメモリバイトアドレスに格納される(右から左に格納される)。同一の値を有するビッグ及びリトルエンディアン変数は、CPUレジスタでは同一であるが、メモリでは異なる順序を有している。
1バイトエンディアン方法を用いて記述されたソースコードは、データの一部がメモリにどのように格納されているかの異なる順序を認識することなく、他のバイトエンディアンの従来方法を有するプラットフォーム又はターゲットシステム上で実行することはできない。例えば、正しいソフトウェア動作を保持するため、データ内のエンディアンバイト順序付けは、ユニオン又はポインタアクセスがこのような順序をプログラマに可視化するとき保持されている必要がある。プログラムの範囲外で読み書きされたデータのバイト順序もまた、保持される必要がある。
従来、一部のプラットフォームは、1バイトエンディアン方法又は他の方法により記述されたソースコードの実行をサポートするよう設定可能なモードビットにより構成されていた。しかしながら、このアプローチは、プラットフォーム上で実行されるすべてのコードに対するサポートを適用したものでなく、このため、リトルエンディアンオペレーティングシステム上でビッグエンディアンプログラムを実行する問題を解決するものではない。
従って、異なるエンディアン方法を有するコンピュータシステム上で1エンディアン方法により記述されたコードを実行するための効率的かつ効果的な方法及び装置が必要とされる。
[詳細な説明]
以下の記載では、説明のため、具体的な用語が本発明の実施例の完全な理解を提供するため与えられる。しかしながら、本記載の具体的詳細は本発明の実施例を実現するのに必要ではないかもしれないということは、当業者に明らかである。他の例では、本発明の実施例を不必要に不明りょうにすることを回避するため、周知のコンポーネント、プログラム及び手続はブロック図により示される。
図1は、本発明の実施例による一例となるコンピュータシステム100のブロック図である。コンピュータシステム100は、データ信号を処理するプロセッサ101と、メモリ113とを有する。コンピュータシステム100は、ビッグエンディアン又はリトルエンディアンを有し、プロセッサ101は、最下位アドレスに数の下位バイトを、最上位アドレスに数の上位バイトを格納し(リトルエンディアン方法)、又は最下位アドレスに数の上位バイトを、最上位アドレスに下位バイトを格納する(ビッグエンディアン)。
プロセッサ101は、CISC(Complex Instruction Set Computer)マイクロプロセッサ、RISC(Reduced Instruction Set Computing)マイクロプロセッサ、VLIW(Very Long Instruction Word)マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ又は他のプロセッサデバイスであってもよい。図1は、単一のプロセッサを有するコンピュータシステム100を示す。しかしながら、コンピュータシステム100が複数のプロセッサにより動作可能であるということは理解されるであろう。さらに、1以上のプロセッサのそれぞれは、1以上のハードウェアスレッドをサポートしてもよい。プロセッサ101は、コンピュータシステム100の他のコンポーネントとプロセッサ101との間でデータ信号を伝送するCPUバス110に接続される。
メモリ113は、DRAM(Dynamic Random Access Memory)デバイス、SRAM(Static Random Access Memory)デバイス、ROM(Read−Only Memory)及び/又は他のメモリデバイスであってもよい。メモリ113は、プロセッサ101により実行可能なデータ信号により表される命令及びコードを格納する。コンピュータシステム100の実施例によると、ビッグエンディアン対応コンパイラがメモリ113に格納され、ソフトウェアをコンパイルする際に、バイエンディアンサポートを提供するためコンピュータシステムのプロセッサ101により実現される。通常はリトルエンディアン順序によりメモリ113に格納されるデータが、当該格納前にエンディアンフリップ(バイトスワップ)処理を実行することによって、ビッグエンディアン順序により格納され、またその反対に格納されてもよい。この値は、メモリ113からの抽出後にエンディアンフリップ処理を実行することによって抽出されてもよい。エンディアンフリップ処理は、アラインされた(aligned)及びアラインされていない(unaligned)リファレンスについて、データ書き込み前(pre−write)であって、データ読み出し後(post−read)に実行されてもよいということは理解されるべきである。
キャッシュメモリ102は、メモリ113に格納されているデータ信号を格納するプロセッサ101の内部に配置される。キャッシュ102は、それのアクセス局所性を利用することによって、プロセッサ101によるメモリへのアクセスをスピードアップする。コンピュータシステム100の他の実施例では、キャッシュ102は、プロセッサ101の外部に配置される。ブリッジメモリコントローラ111が、CPUバス110とメモリ113に接続される。ブリッジメモリコントローラ111は、プロセッサ101、メモリ113及びコンピュータシステム100の他のコンポーネントの間のデータ信号を誘導し、CPUバス110、メモリ113及び第1IOバス120の間のデータ信号をブリッジする。
第1IOバス120は、単一のバス又は複数のバスの組み合わせであってもよい。第1IOバス120は、コンピュータシステム100の各コンポーネントの間の通信リンクを提供する。ネットワークコントローラ121は、第1IOバス120に接続される。ネットワークコントローラ121は、コンピュータシステム100とコンピュータのネットワーク(図示せず)とをリンクさせ、これらマシーンの間の通信をサポートする。表示装置コントローラ122が、第1IOバス120に接続される。表示装置コントローラ122は、表示装置(図示せず)とコンピュータシステム100との接続を可能にし、表示装置とコンピュータシステム100との間のインタフェースとして機能する。
第2IOバス130は、単一のバス又は複数のバスの組み合わせであってもよい。第2IOバス130は、コンピュータシステム100の各コンポーネントの間の通信リンクを提供する。データ格納装置131が第2IOバス130に接続される。データ格納装置131は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス又は他の大容量記憶装置であってもよい。入力インタフェース132が第2IOバス130に接続される。入力インタフェース132は、例えば、キーボード及び/又はマウスコントローラ又は他の入力インタフェースであってもよい。入力インタフェース132は、専用の装置であってもよく、又はバスコントローラや他のコントローラなどの他の装置に配置することも可能である。入力インタフェース132は、入力デバイスとコンピュータシステム100との接続を可能にし、入力デバイスからコンピュータシステム100にデータ信号を送信する。オーディオコントローラ133が第2IOバス130に接続される。オーディオコントローラ133は、音声の記録及び再生を調整するよう動作し、またIOバス130に接続される。バスブリッジ123は、第1IOバス120と第2IOバス130とを接続する。バスブリッジ123は、第1IOバス120と第2IOバス130との間のデータ信号をバッファ及びブリッジするよう動作する。
図2は、本発明の実施例によるバイエンディアン対応コンパイラ200を示すブロック図である。バイエンディアン対応コンパイラ200は、コンパイラマネージャ210を有する。コンパイラマネージャ210は、コンパイルするソースコードを受け付ける。コンパイラマネージャ210は、バイエンディアン対応コンパイラ200の他のコンポーネントとのインタフェースをとり、また各コンポーネント間で情報を送信する。
バイエンディアン対応コンパイラ200は、フロントエンドユニット220を有する。バイエンディアン対応コンパイラ200の実施例によると、フロントエンドユニット220は、ソースコードを構文解析し、それを抽象的なシンタックスツリーに変換するよう動作する。フロントエンドユニット220はまた、エンディアンタイプをソースコードのデータに割り当てる。フロントエンドユニット220の第1実施例によると、ソースコードの供給元のファイルの特性が、関連するエンディアンタイプを有する非明示的な宣言基準と比較される。この非明示的な宣言基準は、例えば、パス名やディレクトリなどのソースコードの供給元のファイルの位置を含むものであってもよい。非明示的な宣言基準はまた、ディレクトリにおけるファイルの特性又は他の情報を含むものであってもよい。本実施例では、フロントエンドユニット220は、非明示的な宣言基準に係るエンディアンに基づき、ソースコードのデータをエンディアンタイプに割り当てる。フロントエンドユニット220の第2実施例によると、ソースコードのデータは、宣言においてエンディアンタイプに関連付けされてもよい。本実施例では、フロントエンドユニット120は、宣言におけるそれの関連するエンディアンタイプに基づき、エンディアンタイプをデータに割り当てる。フロントエンドユニット220は、データに対するエンディアンタイプの明示的宣言が非明示的な宣言基準に係るエンディアンに優先する2つの実施例を実現するかもしれない。ソースコードのデータは、ベースデータタイプを含むだけでなく、データ構造やユニオンなどを統合するかもしれない。
バイエンディアン対応コンパイラ200は、中間言語ユニット230を含む。中間言語ユニット230は、抽象的なシンタックスツリーを中間表現などの共通の中間形式に変換する。バイエンディアン対応コンパイラ230は、中間表現の何れにおいてエンディアンフリップ処理を実行すべきか判断し、当該位置にエンディアンフリップ演算子を配置する。バイエンディアン対応コンパイラ200の実施例によると、あるエンディアンタイプのデータがターゲット又はプラットフォームシステムのエンディアンタイプと異なるとき、メモリへのデータの書き込み前であって、ターゲット又はプラットフォームシステムのメモリからのデータの読み出し後に、エンディアンフリップが実行される。中間言語ユニット230は、抽象的なシンタックスツリーを1以上の共通の中間形式に変換してもよいということが理解されるべきである。
バイエンディアン対応コンパイラ200は、最適化ユニット240を有する。最適化ユニット240は、共通部分表現削除又はCSE(Common Sub−Expression Elimination)ユニット241を有する。CSEユニット241は、データ値が変更されなかったと判断すると、余計なエンディアンフリップ処理を削除し、中間表現を簡単化する。最適化ユニット240は、コード動きユニット242を有する。コード動きユニット242は、それがパフォーマンスの観点からエンディアンフリップ処理を実行するのにより効率的であるとき、エンディアンフリップ処理を命令のより先の部分に移動する。最適化ユニット240は、定数伝搬解析から、データ値が変更されず、このため、メモリからの読み出しが不要であると判断すると、定数に対するエンディアンフリップ処理を削除する。
バイエンディアンコンパイラ200は、コード生成装置250を有する。コード生成装置250は、中間表現をマシーンコードに変換する。バイエンディアンコンパイラ200の実施例によると、コード生成装置250は、エンディアンフリップ処理を実現するため、マシーン命令を挿入する。一実施例では、1以上のBSWAP及び/又はシフト命令がエンディアンフリップ処理を実現するのに使用される。
バイエンディアンコンパイラ200の実施例によると、ビッグエンディアンデータに対する処理は、以下に示されるように分解可能である。
Figure 2008523514
バイエンディアンコンパイラ200は、レジスタ割当装置260を有する。レジスタ割当装置260は、メモリでなくプロセッサのレジスタに格納可能な中間表現のデータを特定する。レジスタ割当装置260は、コンピュータシステムのエンディアンタイプを有するデータにレジスタを割り当てる。
図3は、本発明の実施例によるコードのコンパイル時にバイエンディアンサポートを実現する方法のフローチャートである。301において、エンディアンタイプがデータに割り当てられる。エンディアンタイプは、非明示的宣言、明示的宣言又は非明示的宣言と明示的宣言との組み合わせを介しデータに割り当てられてもよい。
302において、データが1つのエンディアンタイプから他のタイプに変換されるべきか否か判断される。本発明の実施例によると、1つのエンディアンタイプのデータがターゲット又はプラットフォームシステムのエンディアンタイプと異なるとき、ターゲット又はプラットフォームシステムのメモリへのデータの書き込み前であって、メモリからのデータの読み出し後に、エンディアンフリップが実行される。エンディアンフリップ演算子は、エンディアンフリップ処理が実行されるべきと判断される中間言語の位置に配置されてもよい。
本発明の実施例によると、エンディアンフリップは、ビッグエンディアン表現とリトルエンディアン表現との間に可能なセマティックな相違があるデータについてのみ挿入される。これは、例えば、コンパイラによって決定される。一実施例では、外部的でない、揮発性のものでない、若しくはユニオンの一部であって、コードによって明示的に参照されるアドレスを有しないデータ変数が、プログラムに対するセマティックな効果なしに何れかの表現に格納される。さらなる解析が、エンディアンフリップを必要とする変数のクラスをさらに減少させるため実行されてもよい。エンディアンフリップはまた、ソースとデスティネーションが同一のエンディアンタイプであって、当該処理がエンディアン表現が重要でないビット単位ブール演算(AND、OR、XOR、NOT)などであるとき、削除されてもよい。
303において、エンディアンフリップの最適化が実行される。最適化は、コードの実行時にプロセッササイクルを低減するため、エンディアンフリップ処理を移動又は削除することに関するものであってもよい。本発明の実施例によると、最適化は、データ値が変更されていないと判断されると、余計なエンディアンフリップ処理を削除し、パフォーマンスの観点からそれがより効率的なものであるとき、エンディアンフリップ処理を命令ストリームのより先の又はより後の部分に移動し、又は他の手続を実行することに関する。
304において、マシーン命令がエンディアンフリップ処理を実現するためマシーンコードに挿入される。エンディアンフリップ処理がビッグエンディアンデータとリトルエンディアンデータとの間の変換をサポートするようバイトをフリップする本発明の実施例によると、1以上のBSWAP及び/又はシフト命令が利用可能である。
305において、レジスタ割当が実行される。本発明の実施例によると、中間表現によるデータが、メモリでなくプロセッサのレジスタに格納するのに特定される。
図4は、本発明の実施例による非明示的宣言を利用してエンディアンタイプをデータに割り当てる方法のフローチャートである。図4に示される方法は、図3に示される301において実現されてもよい。401において、コンパイルされるコードのファイルの特性が、非明示的宣言基準と比較される。非明示的宣言基準は、例えば、それのパス又はディレクトリ名などのファイルの位置、ディレクトリにおける他のファイルの特性、又は他の基準などを含むかもしれない。非明示的宣言基準は、それに係るエンディアンタイプを有してもよい。
402において、コードのすべてのデータのグローバルフラグが、401における比較に基づき設定される。本発明の実施例によると、グローバルフラグは、コードのすべてのデータについて関連付けされるエンディアンタイプを示す指標であるかもしれない。
403において、コードのデータが構文解析され、グローバルフラグがコードのデータに割り当てられる。
図4に示されるような非明示的宣言は、第1エンディアンタイプを使用する第1ターゲット又はプラットフォームに書き込みされたソフトウェアが、ソースコードを変更することなく第2エンディアンタイプを使用する第2ターゲット又はプラットフォームシステム上でコンパイル、リンク又はデバッグされることを可能にする。図4に示される実施例は、バイエンディアン対応コンパイラがベースデータバイトについてビッグとリトルの両方のエンディアンタイプ順序付けをサポートすることを可能にする。例えば、非明示的宣言基準がエンディアンタイプに係るパス名である場合、当該パス名を有するディレクトリ内のすべてのソースファイルが関連するエンディアンタイプによりコンパイルされる。他の非明示的宣言基準が実現されてもよい。例えば、コンパイルされるべきファイルとして同一のディレクトリを共有するファイルの名前が、エンディアンタイプを関連付けするのに使用されてもよい。本発明の実施例によると、非明示的宣言基準とエンディアンタイプの関連付けは、呼び出しによりコンパイラにコマンドを用いて実行される。本発明の他の実施例によると、前にエンディアンタイプを設定し、ソースファイル又はヘッダファイルの包含後にエンディアンモードをリセットするファイルが、関連付けに自動的に含まれるようにしてもよい。関連付けのための他の手順がまた利用されてもよいということが理解されるべきである。
図5は、本発明の実施例による明示的宣言を利用してエンディアンタイプをデータに割り当てる方法のフローチャートである。図5に示される方法は、図3に示される301において実現されてもよい。501において、コンパイルされるコードのデータが構文解析される。
502において、エンディアンタイプが当該データに関連付けされるか判断される。本発明の実施例によると、データの宣言は、タイプ指定子、属性限定子又はデータに関連付けされるエンディアンを示す他のラベルについてチェックされる。エンディアンタイプがデータに関連付けされていないと判断された場合、制御は503に移行する。エンディアンタイプがデータに関連付けされていると判断された場合、制御は504に移行する。
503において、デフォルトエンディアンタイプを示すため、フラグがデータに割り当てられる。本発明の実施例によると、コードの供給元のプラットフォームシステムに対応するエンディアンタイプ、コードが実行されるべきプラットフォームシステムに対応するエンディアンタイプ、又は他のエンディアンタイプを示すため、フラグがデータに割り当てられる。
504において、宣言のデータに係るエンディアンタイプを示すため、フラグがデータに割り当てられる。
図5に示されるような明示的宣言は、コンパイラがソースコードを明示的に変更することによって、ビッグ及びリトルエンディアンタイプを同時にサポート及び処理することを可能にする。バイエンディアンのサポートは、リトルエンディアンソフトウェアとビッグエンディアンソフトウェアとの統合を可能にする。整数、ポインタ、浮動小数及びビットフィールドなどのベースデータタイプの具体例が、タイプ指定子、属性限定子又は他のラベリング技術によって、それらのエンディアンに関して明示的に限定されてもよい。明示的宣言がない場合、ベースデータタイプのエンディアンは、コンパイラ又は他のコンポーネントのデフォルトとされてもよい。明示的宣言の具体例が、以下に示される。
Figure 2008523514
図6は、本発明の実施例による非明示的及び明示的宣言を利用してエンディアンタイプをデータに割り当てる方法のフローチャートである。図6に示される方法は、図3に示される301において実現されてもよい。601において、コンパイルされるコードのファイルの特性が、非明示的宣言基準と比較される。非明示的宣言基準は、例えば、それのパス又はディレクトリ名などのファイルの位置、又はディレクトリにおける他のファイルの特性などを含むかもしれない。非明示的宣言基準は、それに係るエンディアンタイプを有するものであってもよい。
602において、グローバルフラグが、401において説明されたような比較に基づき設定される。本発明の実施例によると、グローバルフラグは、コードのすべてのデータについて関連付けされたエンディアンタイプを示す指標であってもよい。
603において、コードのデータが構文解析される。
604において、エンディアンタイプが当該データに関連付けされているか判断される。本発明の実施例によると、データの宣言が、タイプ指定子、属性限定子及び当該データに係るエンディアンを示す他のラベルについてチェックされる。エンディアンタイプがデータに関連付けされていないと判断されると、制御は605に移行する。エンディアンタイプがデータに関連付けされていると判断されると、制御は606に移行する。
605において、グローバルフラグがコードにおいて当該データに割り当てられる。
606において、宣言においてデータに係るエンディアンタイプを示すため、フラグがデータに割り当てられる。第2フラグがまた、エンディアンタイプが明示的に決定されることを示すため、データに割り当てられてもよい。
図3〜6は、本発明の実施例による方法を示すフローチャートである。これらの図面に示される技術及び手続の一部は、シーケンシャルに、パラレルに、又は説明された以外の順序により実行されてもよい。記載される技術及び手続のすべてが必ずしも実行される必要はなく、さらなる技術及び手続が追加されてもよく、また図示された技術及び手続の一部は他の技術及び手続と置換可能であるということが理解されるべきである。
図7は、本発明の実施例による非明示的宣言を利用してエンディアンタイプをデータに関連付けることの一例を示す。本例では、非明示的宣言基準は、コンパイルされるコードの位置である。位置710は、ビッグエンディアンであるファイルに関連付けされる。位置720は、リトルエンディアンであるファイルに関連付けされる。位置710は、データ構造t1be及びt2beを規定する.hファイル711を含む。これらのデータ構造の双方が、ビッグエンディアン関連付けを有する位置にある.hファイルにおいて規定されているため、両方のデータ構造t1beとt2beは、ビッグエンディアンのエンディアンタイプに割り当てられる。位置720は、データ構造t1le及びt2leを規定する.hファイル721を含む。これらのデータ構造の両方が、リトルエンディアンタイプ関連付けを有する位置にある.hファイルに規定されるため、両方のデータ構造t1le及びt2leがビッグエンディアンのエンディアンタイプに割り当てられる。
位置710は、存在する場合には、変数とそれらの対応するデータ構造を宣言する.cファイル712を含む。変数v1及びv3はビッグエンディアンである。変数v2及びv4はリトルエンディアンである。位置720は、存在する場合には、変数とそれらの対応するデータ構造を宣言する.cファイル722を含む。変数v5及びv8はリトルエンディアンである。変数v6及びv8は、ビッグエンディアンである。
.cファイル712を参照すると、ビッグエンディアンである変数v1がリトルエンディアンであるv2に設定されると、変数v2はリトルエンディアンからビッグエンディアンに変換されることに留意されたい。ビッグエンディアンである変数v3がリトルエンディアンであるv4に設定されるとき、変数v4はまた、リトルエンディアンからビッグエンディアンに変換される。
.cファイル722を参照すると、リトルエンディアンである変数v5がビッグエンディアンであるv6に設定されると、変数v6は、ビッグエンディアンからリトルエンディアンに変換される。リトルエンディアンである変数v7がビッグエンディアンであるv8に設定されると、変数v8はまた、ビッグエンディアンからリトルエンディアンに変換される。
本発明の実施例は、命令を格納したマシーン可読媒体を含むコンピュータプログラムプロダクト又はソフトウェアとして提供されるかもしれない。マシーン可読媒体は、コンピュータシステム又は他の電子装置をプログラムするのに利用されるかもしれない。マシーン可読媒体は、以下に限定されるものではないが、フロッピー(登録商標)ディスケット、光ディスク、CD−ROM、光磁気ディスク又は電子命令を格納するのに適した他のタイプの媒体/マシーン可読媒体を含むかもしれない。ここに記載された技術は、特定のソフトウェアコンフィギュレーションに限定されるものではない。それらは、任意の計算又は処理環境において適用可能性を見つけることができる。ここで使用される“マシーン可読媒体”という用語は、マシーンにより実行のため命令シーケンスを格納又は符号化可能であって、ここに記載される方法の何れか1つをマシーンに実行させる任意の媒体を含む。さらに、当該分野において、アクションを実行し、又は結果を生じさせるものとして、1つの形式又は他の形式(プログラム、手続、プロセス、アプリケーション、モジュール、ユニット、ロジックなど)によりソフトウェアと言うことは一般的である。このような表現は、処理システムのソフトウェアの実行がプロセッサに結果を生成するためのアクションを実行させることを記載する単なる簡略化された方法である。
上記記載では、本発明の実施例がそれの特定の実施例を参照して説明された。しかしながら、本発明の実施例のより広範な趣旨及び範囲から逸脱することなく、各種改良及び変更が可能であるということは明らかであろう。本明細書及び図面は、限定的な意味でなく例示的なものとしてみなされるべきである。
図1は、本発明の実施例が実現可能な一例となるコンピュータシステムのブロック図である。 図2は、本発明の実施例によるバイエンディアン対応コンパイラを示すブロック図である。 図3は、本発明の実施例によるコードコンパイル時のバイエンディアンサポートを実現する方法のフローチャートである。 図4は、本発明の実施例による非明示的宣言を使用してデータにエンディアンタイプを割り当てる方法のフローチャートである。 図5は、本発明の実施例による明示的宣言を使用してデータにエンディアンタイプを割り当てる方法のフローチャートである。 図6は、本発明の実施例による非明示的及び明示的宣言を使用してデータにエンディアンタイプを割り当てる方法のフローチャートである。 図7は、本発明の実施例による非明示的宣言を使用してデータにエンディアンタイプを関連付ける具体例を示す。

Claims (28)

  1. コードをコンパイルする方法であって、
    エンディアンタイプをデータに割り当てるステップと、
    前記データのエンディアンタイプとターゲットシステムとに基づき、エンディアンフリップ処理を実行するステップと、
    を有する方法。
  2. 前記コードのデータの宣言から前記データのエンディアンタイプを決定するステップをさらに有する、請求項1記載の方法。
  3. 非明示的宣言基準に基づき、前記データのエンディアンタイプを決定するステップをさらに有する、請求項1記載の方法。
  4. 前記非明示的宣言基準は、前記コードの位置を有する、請求項3記載の方法。
  5. 前記非明示的宣言基準は、前記コードを有するディレクトリ内のファイルの特性を有する、請求項3記載の方法。
  6. 前記エンディアンフリップ処理は、前記データに対応するバイトを交換することを有する、請求項1記載の方法。
  7. 前記データに対応するバイトの交換は、メモリへのデータの書き込み前であって、前記メモリからのデータの読み出し後に実行される、請求項6記載の方法。
  8. 前記バイトの交換は、マシーンコードに1以上のマシーン命令を挿入することを有する、請求項6記載の方法。
  9. 前記1以上のマシーン命令は、BSWAP命令を有する、請求項8記載の方法。
  10. 共通部分表現が存在すると判断すると、エンディアンフリップ処理を削除するステップをさらに有する、請求項1記載の方法。
  11. 前記エンディアンフリップ処理を命令ストリームの先の部分に移動するステップをさらに有する、請求項1記載の方法。
  12. 命令を含む命令シーケンスを有するマシーンアクセス可能媒体を有する製造物であって、
    当該命令は、実行時に、
    エンディアンタイプをデータに割り当てるステップと、
    前記データのエンディアンタイプとターゲットシステムとに基づき、エンディアンフリップ処理を実行するステップと、
    前記マシーンに実行させる物。
  13. 実行時に、コードの前記データの宣言から前記データのエンディアンタイプを決定するステップを前記マシーンにさらに実行させる命令を有する、請求項12記載の物。
  14. 実行時に、非明示的宣言基準に基づき、前記データのエンディアンタイプを決定するステップを前記マシーンにさらに実行させる命令を有する、請求項12記載の物。
  15. 前記エンディアンフリップ処理の実行は、前記データに対応するバイトを交換することを有する、請求項12記載の物。
  16. 前記データに対応するバイトの交換は、メモリへの前記データの書き込み前であって、前記メモリからのデータの読み出し後に実行される、請求項15記載の物。
  17. 前記バイトの交換は、1以上のマシーン命令をマシーンコードに挿入することを有する、請求項15記載の方法。
  18. 前記1以上のマシーン命令は、BSWAP命令を含む、請求項17記載の方法。
  19. エンディアンタイプをデータに割り当てるフロントエンドユニットと、
    前記データのエンディアンタイプとターゲットシステムのエンディアンタイプとに基づき、エンディアンフリップ処理を実行すべきときを決定する中間言語ユニットと、
    を有するコンパイラ。
  20. 前記フロントエンドユニットは、コードの前記データの宣言から前記データのエンディアンタイプを決定する、請求項19記載のコンパイラ。
  21. 前記フロントエンドユニットは、非明示的宣言基準に基づき、前記データのエンディアンタイプを決定する、請求項19記載のコンパイラ。
  22. 共通部分表現が存在すると判断すると、エンディアンフリップ処理を除去する最適化ユニットをさらに有する、請求項19記載のコンパイラ。
  23. エンディアンフリップ処理を命令ストリームの先の部分に移動する最適化ユニットをさらに有する、請求項19記載のコンパイラ。
  24. 前記エンディアンフリップ処理を可能にするため、1以上のマシーン命令を挿入するコード生成ユニットをさらに有する、請求項19記載のコンパイラ。
  25. メモリと、
    エンディアンタイプをデータに割り当てるフロントエンドユニットと、前記データのエンディアンタイプとターゲットシステムのエンディアンタイプとに基づき、エンディアンフリップ処理を実行すべきときを決定する中間言語ユニットとを有するコンパイラを実現するプロセッサと、
    を有するコンピュータシステム。
  26. 前記フロントエンドユニットは、コードの前記データの宣言から前記データのエンディアンタイプを決定する、請求項25記載のコンピュータシステム。
  27. 前記フロントエンドユニットは、非明示的宣言基準に基づき、前記データのエンディアンタイプを決定する、請求項25記載のコンピュータシステム。
  28. 前記コンパイラはさらに、前記エンディアンフリップ処理を可能にするため、1以上のマシーン命令を挿入するコード生成ユニットをさらに有する、請求項25記載のコンピュータシステム。
JP2007545690A 2004-12-13 2005-12-09 バイエンディアン対応コンパイラを実現する方法及び装置 Pending JP2008523514A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/010,490 US7552427B2 (en) 2004-12-13 2004-12-13 Method and apparatus for implementing a bi-endian capable compiler
PCT/US2005/044772 WO2006065689A1 (en) 2004-12-13 2005-12-09 Method and apparatus for implementing a bi-endian capable compiler

Publications (1)

Publication Number Publication Date
JP2008523514A true JP2008523514A (ja) 2008-07-03

Family

ID=36111788

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007545690A Pending JP2008523514A (ja) 2004-12-13 2005-12-09 バイエンディアン対応コンパイラを実現する方法及び装置

Country Status (6)

Country Link
US (2) US7552427B2 (ja)
EP (1) EP1846819A1 (ja)
JP (1) JP2008523514A (ja)
KR (2) KR100962746B1 (ja)
CN (1) CN101160564B (ja)
WO (1) WO2006065689A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011129132A (ja) * 2009-12-21 2011-06-30 Intel Corp エンディアン変換ツール
US8266596B2 (en) 2009-08-26 2012-09-11 Kabushiki Kaisha Toshiba Source code analyzing system and source code analyzing method
JP2012529698A (ja) * 2009-06-25 2012-11-22 インテル・コーポレーション バイ・エンディアンコンパイラを用いたコードの最適化

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7552427B2 (en) * 2004-12-13 2009-06-23 Intel Corporation Method and apparatus for implementing a bi-endian capable compiler
EP2177987A1 (en) * 2008-10-17 2010-04-21 Alcatel Lucent A method for handling different types of data, corresponding device, storage means, and software program therefore
IL196635A0 (en) * 2009-01-21 2009-11-18 Solomon Edlin High current capacity inner leads for semiconductor device
US8661421B2 (en) * 2009-12-21 2014-02-25 Intel Corporation Methods and apparatuses for endian conversion
CN101916235B (zh) * 2010-08-02 2013-09-11 凌阳科技股份有限公司 一种中央处理单元及其存取数据的方法
US20140100841A1 (en) * 2012-10-09 2014-04-10 Apple Inc. Testing a Hardware Emulation Model of a Circuit with Software Checker Routines Designed for an RTL Model of the Circuit
US9898386B2 (en) 2013-10-15 2018-02-20 Nxp Usa, Inc. Detecting byte ordering type errors in software code
US9507595B2 (en) 2014-02-28 2016-11-29 International Business Machines Corporation Execution of multi-byte memory access instruction specifying endian mode that overrides current global endian mode
US20150248345A1 (en) * 2014-03-02 2015-09-03 Ralink Technology Corp. Swap method and Electronic System thereof
CN104049949B (zh) * 2014-05-30 2016-10-05 南阳理工学院 一种面向bswap指令的窥孔优化方法
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9588746B2 (en) 2014-12-19 2017-03-07 International Business Machines Corporation Compiler method for generating instructions for vector operations on a multi-endian processor
US9569190B1 (en) * 2015-08-04 2017-02-14 International Business Machines Corporation Compiling source code to reduce run-time execution of vector element reverse operations
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US9594668B1 (en) 2015-09-04 2017-03-14 International Business Machines Corporation Debugger display of vector register contents after compiler optimizations for vector instructions
CN112835842B (zh) * 2021-03-05 2024-04-30 深圳市汇顶科技股份有限公司 端序处理方法、电路、芯片以及电子终端

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04362738A (ja) * 1991-06-10 1992-12-15 Oki Electric Ind Co Ltd 変数管理方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0776917B2 (ja) * 1984-12-29 1995-08-16 ソニー株式会社 マイクロコンピユ−タ
GB2229832B (en) * 1989-03-30 1993-04-07 Intel Corp Byte swap instruction for memory format conversion within a microprocessor
EP0605882B1 (en) * 1993-01-08 1996-12-11 Nec Corporation Method and apparatus for wet treatment of solid surfaces
US5524256A (en) * 1993-05-07 1996-06-04 Apple Computer, Inc. Method and system for reordering bytes in a data stream
US5687337A (en) * 1995-02-24 1997-11-11 International Business Machines Corporation Mixed-endian computer system
US5928349A (en) * 1995-02-24 1999-07-27 International Business Machines Corporation Mixed-endian computing environment for a conventional bi-endian computer system
US5781763A (en) * 1995-04-07 1998-07-14 International Business Machines Corporation Independent control of DMA and I/O resources for mixed-endian computing systems
US5778406A (en) * 1995-06-30 1998-07-07 Thomson Consumer Electronics, Inc. Apparatus for delivering CPU independent data for little and big endian machines
US5907865A (en) * 1995-08-28 1999-05-25 Motorola, Inc. Method and data processing system for dynamically accessing both big-endian and little-endian storage schemes
DE19535306A1 (de) * 1995-09-22 1997-03-27 Siemens Ag Verfahren zum Konvertieren sich unterscheidender Datenformate
US5828884A (en) * 1996-05-23 1998-10-27 Advanced Micro Devices, Inc. Method for compiling a software program and executing on a system which converts data between different endian formats
WO1997044739A1 (en) * 1996-05-23 1997-11-27 Advanced Micro Devices, Inc. Apparatus for converting data between different endian formats and system and method employing same
US6021275A (en) * 1996-08-05 2000-02-01 General Magic, Inc. Object code structure and method for translation of architecture independent program implementations
US6411395B1 (en) * 1997-07-23 2002-06-25 International Business Machines Corporation Apparatus and method for conversion of data between different formats
US6578193B1 (en) 1998-03-24 2003-06-10 Novell, Inc. Endian-neutral loader for interpretive environment
EP1119805B8 (en) * 1998-10-10 2006-05-03 Transitive Limited Endian transformation
US6351750B1 (en) * 1998-10-16 2002-02-26 Softbook Press, Inc. Dynamic conversion of byte ordering for use on different processor platforms
US6691307B2 (en) 1999-08-03 2004-02-10 Sun Microsystems, Inc. Interpreter optimization for native endianness
US6687262B1 (en) * 2000-02-21 2004-02-03 Hewlett-Packard Development Company, L.P. Distributed MUX scheme for bi-endian rotator circuit
EP1182558A1 (en) * 2000-08-21 2002-02-27 Texas Instruments Incorporated MME descriptor having big/little endian bit to control the transfer data between devices
GB0026363D0 (en) * 2000-10-27 2000-12-13 Sgs Thomson Microelectronics Bi-endian libraries
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7389315B1 (en) * 2002-02-28 2008-06-17 Network Appliance, Inc. System and method for byte swapping file access data structures
US7047383B2 (en) * 2002-07-11 2006-05-16 Intel Corporation Byte swap operation for a 64 bit operand
US6895489B2 (en) * 2002-08-07 2005-05-17 Hewlett-Packard Development Company, L.P. System and method for operating in endian independent mode
US20040045007A1 (en) * 2002-08-30 2004-03-04 Bae Systems Information Electronic Systems Integration, Inc. Object oriented component and framework architecture for signal processing
US20040221274A1 (en) 2003-05-02 2004-11-04 Bross Kevin W. Source-transparent endian translation
US20050066146A1 (en) * 2003-09-19 2005-03-24 Intel Corporation Endian conversion
US20050097127A1 (en) * 2003-10-30 2005-05-05 Microsoft Corporation Reordering data between a first predefined order and a second predefined order with secondary hardware
US7552427B2 (en) 2004-12-13 2009-06-23 Intel Corporation Method and apparatus for implementing a bi-endian capable compiler
KR20060078433A (ko) * 2004-12-31 2006-07-05 엘지전자 주식회사 컴파일러의 메모리 접근코드 생성 방법
US7721077B2 (en) * 2006-12-11 2010-05-18 Intel Corporation Performing endian conversion

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04362738A (ja) * 1991-06-10 1992-12-15 Oki Electric Ind Co Ltd 変数管理方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012529698A (ja) * 2009-06-25 2012-11-22 インテル・コーポレーション バイ・エンディアンコンパイラを用いたコードの最適化
US8910114B2 (en) 2009-06-25 2014-12-09 Intel Corporation Optimizing code using a bi-endian compiler
US8266596B2 (en) 2009-08-26 2012-09-11 Kabushiki Kaisha Toshiba Source code analyzing system and source code analyzing method
JP2011129132A (ja) * 2009-12-21 2011-06-30 Intel Corp エンディアン変換ツール

Also Published As

Publication number Publication date
US7552427B2 (en) 2009-06-23
KR20100007978A (ko) 2010-01-22
KR20070086161A (ko) 2007-08-27
US20090222800A1 (en) 2009-09-03
US8863103B2 (en) 2014-10-14
EP1846819A1 (en) 2007-10-24
US20060125663A1 (en) 2006-06-15
WO2006065689A1 (en) 2006-06-22
CN101160564A (zh) 2008-04-09
CN101160564B (zh) 2013-01-02
KR100947137B1 (ko) 2010-03-12
KR100962746B1 (ko) 2010-06-09

Similar Documents

Publication Publication Date Title
JP2008523514A (ja) バイエンディアン対応コンパイラを実現する方法及び装置
US8037461B2 (en) Program code conversion
KR101150003B1 (ko) 소프트웨어 개발 툴 생성 방법
US8868848B2 (en) Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform
TWI317504B (en) Method, apparatus and computer-readable storage medium having computer-readable code executable for performing lazy byteswapping optimizations during program code conversion
US7568189B2 (en) Code translation and pipeline optimization
US7536682B2 (en) Method and apparatus for performing interpreter optimizations during program code conversion
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US20080052693A1 (en) Method of simd-ization through data reshaping, padding, and alignment
US20120198427A1 (en) Ensuring Register Availability for Dynamic Binary Optimization
JPH0782441B2 (ja) シミユレーシヨン方法
US7240334B1 (en) Methods, systems, and computer program products for deferred computer program tracing
JP2008020449A (ja) ナビゲーションデータベースのためのフォーマット記述
CN112631657A (zh) 用于字符串处理的字节比较方法以及指令处理装置
US6467037B1 (en) Utilizing a program counter with one or more data counters for executing instructions
EP2336881A2 (en) Methods and apparatuses for endian conversion
US7165245B2 (en) Pruning local graphs in an inter-procedural analysis solver
US20030217356A1 (en) Register allocation for program execution analysis
Friedman Decompilation and the transfer of mini-computer operating systems.
CN116841657A (zh) 接口函数调用方法和装置
Chung HSA Runtime
Mong Retargetable Binary Tools for Embedded Software

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100803

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20101015

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101022

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110203

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110301

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110630

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20110630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110630

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110722

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20110819