(57)【要約】  システム内の処理性能に影響を与えずにエンディアン変換し、かつ複雑なデータ構造を有するエンディアン変換を実行する。ＣＰＵ（１０１）が、バイトオーダーの異なるＧＰＵ（１０２）に対してデータ転送を行う場合を想定する。ＣＰＵ（１０１）が、ロードモジュール（１１１）をロードし、プログラムが実行されることを検出する。検出後、ＣＰＵ（１０１）は、エンディアン変換設定（１１２）を取得し、エンディアン変換機構（１０５）に通知する。ＣＰＵ（１０１）からバス（１０４）へのアクセスを検出したエンディアン変換機構（１０５）は、エンディアン変換設定（１１２）に基づいてエンディアン変換を行う。
2012127590.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵが、
エンディアン変換設定を含むプログラムを実行し、
前記エンディアン変換設定に含まれるメインメモリのアドレスにアクセスするときに、前記メインメモリのアドレスによって指定されるデータをエンディアン変換すること
を特徴とするエンディアン変換方法。
【請求項２】
前記エンディアン変換設定は、前記プログラムのソースコードをコンパイルするときに生成されること
を特徴とする請求項１に記載のエンディアン変換方法。
【請求項３】
前記プログラムは、前記アドレスへのアクセス終了時に前記エンディアン変換設定を削除するためのエンディアン変換削除通知を含むこと
を特徴とする請求項１または請求項２に記載のエンディアン変換方法。
【請求項４】
前記エンディアン変換設定に含まれるアドレスと前記メインメモリのアドレスの中でマスクによって指定されるアドレス部分とを比較し、比較結果に基づいて前記メインメモリのアドレスによって指定されるデータをエンディアン変換すること
を特徴とする請求項１乃至請求項３の何れか一に記載のエンディアン変換方法。
【請求項５】
プログラムを実行するＣＰＵとアクセス可能なエンディアン変換機構が、
アクセスするメインメモリのアドレスがエンディアン変換領域に含まれるか否か、および、前記メインメモリのアドレスにエンディアン変換設定が存在しているか否かを判定し、
前記判定結果に基づいて前記アドレスによって指定されるデータをエンディアン変換すること
を特徴とするエンディアン変換方法。
【請求項６】
前記エンディアン変換機構は、キャッシュメモリにおいて前記アドレスがエンディアン変換領域に含まれるとともに前記アドレスに前記エンディアン変換設定が存在しないことが示されるとき、前記メインメモリにおいて前記アドレスに前記エンディアン変換設定が存在しているか否かを判定すること
を特徴とする請求項５に記載のエンディアン変換方法。
【請求項７】
前記アドレスがエンディアン変換領域に含まれるか否かについての情報は、前記プログラムのソースコードをコンパイルするときに生成されること
を特徴とする請求項５または請求項６に記載のエンディアン変換方法。
【請求項８】
前記アドレスに対応するデータが処理されるとき、前記アドレスに対してエンディアン変換設定が取得されること
を特徴とする請求項５乃至請求項７の何れか一に記載のエンディアン変換方法。
【請求項９】
プログラムを実行するＣＰＵと、
メインメモリと、
前記メインメモリのアドレスがアクセスされるときに、前記メインメモリのアドレスがエンディアン変換されるデータのアドレスに対応する場合、スワップ指示を生成する生成回路と、
前記スワップ指示に基づいて前記データをエンディアン変換するエンディアン変換回路と
を含むことを特徴とするシステム。
【請求項１０】
前記生成回路は、前記プログラムに含まれるエンディアン変換設定によって指定されるメインメモリのアドレスに基づいて前記スワップ指示を生成すること
を特徴とする請求項９に記載のシステム。
【請求項１１】
前記生成回路は、前記メインメモリのアドレスがエンディアン変換領域に含まれており、前記メインメモリのアドレスにエンディアン変換設定が存在している場合に前記スワップ指示を生成すること
を特徴とする請求項９に記載のシステム。
【請求項１２】
前記スワップ指示に基づいて前記データを所定単位で並び替えるスワップ回路を含むこと
を特徴とする請求項９乃至請求項１１の何れか一に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エンディアンを変換するエンディアン変換方法、およびシステムに関する。
【背景技術】
【０００２】
従来から、プロセッサが複数バイトを扱う場合に、プロセッサやデータフォーマットの仕様として、データのバイト単位の並べ方であるバイトオーダーが規定されている。バイトオーダーは、大別して、リトルエンディアンとビッグエンディアンが存在する。リトルエンディアンは、最下位のバイトから順番に格納する並べ方である。ビッグエンディアンは、最上位のバイトから順番に格納する並べ方である。【０００３】
ここで、プロセッサのバイトオーダーの仕様と、データフォーマットの仕様とが異なる場合、プロセッサは、該当データの処理にあたって、データのバイト単位での並び替えを行うことになる。前述のバイト単位での並び替えをエンディアン変換と称する。【０００４】
たとえば、自装置と異なるバイトオーダーとなる装置に対してデータを送受信する場合、ソフトウェアがデータをスワップした後に送信する、または、受信してきたデータに対してスワップしてからデータを読み込むといった技術が開示されている（以下、従来技術１と称する）。【０００５】
また、たとえば、エンディアン変換を行う技術として、プロセッサ内部にてエンディアン変換を行う技術が開示されている（たとえば、下記特許文献１、２を参照。）。また、他のハードウェアでエンディアン変換を行う技術として、バスにてスワップ回路を有し、エンディアン変換を行う技術が開示されている（たとえば、下記特許文献３を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−２７８９１８号公報
【特許文献２】特開２００７−３４６８０号公報
【特許文献３】特開２０００−３０５８９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術において、従来技術１にかかる技術では、ソフトウェアによる変換であるため、処理性能が低下するという問題があった。また、特許文献１、２にかかる技術では、ハードウェアで行えるため、高速に処理可能ではあるが、プロセッサは高速で動作しており、さらにエンディアン変換機構を追加する場合、プロセッサの処理性能を維持するのが困難であるという問題があった。また、特許文献３にかかる技術では、バス幅全体のエンディアン変換を行うことはできるが、バス幅内の一部のアドレス範囲についてエンディアン変換を行うといった、複雑なデータ構造を有するエンディアン変換を実行することが困難であった。【０００８】
本発明は、上述した従来技術による問題点を解消するため、システム内の処理性能に影響を与えずにエンディアン変換し、かつ複雑なデータ構造を有するエンディアン変換を実行できるエンディアン変換方法、およびシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、ＣＰＵが、エンディアン変換設定を含むプログラムを実行し、エンディアン変換設定に含まれるメインメモリのアドレスにアクセスするときに、メインメモリのアドレスによって指定されるデータをエンディアン変換するエンディアン変換方法、およびシステムが提案される。
【発明の効果】
【００１０】
本発明の一側面によれば、システム内の処理性能に影響を与えずにエンディアン変換し、かつ複雑なデータ構造を有するエンディアン変換を実行できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態１にかかるシステム１００のエンディアン変換動作を示す説明図である。
【図２】図２は、実施の形態１にかかるシステム１００のハードウェアを示すブロック図である。
【図３】図３は、システム１００の機能を示すブロック図である。
【図４】図４は、エンディアン変換機構１０５の内部を示す説明図である。
【図５】図５は、実施の形態１にかかるエンディアン変換設定レジスタ４０１の記憶内容の一例とスワップ指示の生成例を示す。
【図６】図６は、エンディアン変換設定情報の生成例を示す説明図である。
【図７】図７は、エンディアン変換例を示す説明図である。
【図８】図８は、プログラムビルド処理を示すフローチャートである。
【図９】図９は、プログラム実行処理を示すフローチャートである。
【図１０】図１０は、実施の形態１にかかるバスアクセス時処理を示すフローチャート（その１）である。
【図１１】図１１は、実施の形態１にかかるバスアクセス時処理を示すフローチャート（その２）である。
【図１２】図１２は、実施の形態２にかかるエンディアン変換機構１２０１の内部を示す説明図である。
【図１３】図１３は、実施の形態２にかかるバスアクセス時処理を示すフローチャート（その１）である。
【図１４】図１４は、実施の形態３にかかるシステム１００のエンディアン変換動作を示す説明図である。
【図１５】図１５は、エンディアン変換設定の登録対象が構造体の場合におけるＡＰＩの追加例を示す説明図である。
【図１６】図１６は、エンディアン変換設定情報登録処理を示すフローチャートである。
【図１７】図１７は、エンディアン変換設定情報削除処理を示すフローチャートである。
【図１８】図１８は、実施の形態４にかかるシステム１００のエンディアン変換動作を示す説明図である。
【図１９】図１９は、実施の形態４にかかるエンディアン変換設定レジスタ１９０１の記憶内容の一例を示す説明図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、開示のエンディアン変換方法、およびシステムの実施の形態を詳細に説明する。
【００１３】
（実施の形態１の説明）
図１は、実施の形態１にかかるシステム１００のエンディアン変換動作を示す説明図である。システム１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を含む。各部は、バス１０４で接続されている。また、ＣＰＵ１０１とバス１０４は、エンディアン変換機構１０５によって接続されている。また、ＣＰＵ１０１のエンディアンはビッグエンディアンであり、ＧＰＵ１０２のエンディアンがリトルエンディアンであることを想定する。なお、ＣＰＵ１０１と、ＲＡＭ１０３については、図２で詳細に説明する。
【００１４】
続けて、ＣＰＵ１０１が、ＣＰＵ１０１で実行可能なロードモジュール１１１をロードする場合を想定する。なお、ロードモジュール１１１が実行されることで生成されるアプリケーションソフトウェア（以下、「アプリ」と称する）は、画像編集アプリであることを想定している。また、ロードモジュール１１１は、エンディアン変換設定１１２に対応づけられている。また、ＲＡＭ１０３内のメモリ領域１１３は、アドレス０ｘ００１０００００以降のメモリ内容を示している。
【００１５】
エンディアン変換設定１１２は、アドレス、サイズという２つのフィールドを含む。図１で示すエンディアン変換設定１１２は、アドレス０ｘ００１０００００から始まる４［バイト］をエンディアン変換し、さらに、アドレス０ｘ００１００００４から始まる２［バイト］をエンディアン変換するという指示が記載されている。
【００１６】
ＣＰＵ１０１は、ロードモジュールによってアプリを起動すると、エンディアン変換設定１１２をエンディアン変換機構１０５に通知する。次に、アプリがＧＰＵ１０２に対して画像処理を実行する場合を想定する。ＣＰＵ１０１とＧＰＵ１０２はエンディアンが異なるため、エンディアン変換処理が発生する。また、画像処理の引数となるデータは、０ｘ００１０００００から始める８［バイト］に格納されていると想定する。
【００１７】
ＣＰＵ１０１は、アプリによってアドレス０ｘ００１０００００に対してライトアクセスを行う。書き込まれるデータは、０ｘＦＥＤＣＢＡ９８７６５４３２１０である。エンディアン変換機構１０５は、ライトアクセスを検出し、エンディアン変換設定１１２に従ってデータ配置を変換する。
【００１８】
具体的には、エンディアン変換機構１０５は、０ｘ００１０００００の０バイト目から３バイト目のデータをスワップする。これにより、０ｘ００１０００００の０バイト目から３バイト目のデータは、０ｘＦＥＤＣＢＡ９８から、０ｘ９８ＢＡＤＣＦＥに変換される。また、エンディアン変換機構１０５は、０ｘ００１０００００の４バイト目から５バイト目のデータをスワップする。これにより、０ｘ００１０００００の４バイト目から５バイト目のデータは、０ｘ７６５４から、０ｘ５４７６に変換される。
【００１９】
以上の変換により、エンディアン変換機構１０５は、ライトアクセスのデータを０ｘ９８ＢＡＤＣＦＥ５４７６３２１０に変換して出力する。以後、ＧＰＵ１０２は、メモリ領域１１３から画像処理の引数となるデータを読み出す。
【００２０】
このように、システム１００は、プログラム起動時にエンディアン変換する範囲をＣＰＵ１０１の外部のエンディアン変換機構１０５に通知し、エンディアン変換機構１０５が指定された範囲についてエンディアン変換を行う。これにより、システム１００は、システム１００内の性能に悪影響を与えにくい箇所でエンディアン変換でき、また、バス１０４幅内の一部のアドレス範囲についてエンディアン変換を行うといった、複雑な変換も行える。
【００２１】
（システム１００のハードウェア）
図２は、実施の形態１にかかるシステム１００のハードウェアを示すブロック図である。図２において、システム１００は、ＣＰＵ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ１０３と、を含む。また、システム１００は、フラッシュＲＯＭ２０３と、フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、を含む。また、システム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０６と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０７と、キーボード２０８と、を含む。また、各部はバス１０４によってそれぞれ接続されている。なお、システム１００は、図１で示したＧＰＵ１０２を含んでなくてもよく、ＧＰＵ１０２の代わりに、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を含んでいてもよい。
【００２２】
ここで、ＣＰＵ１０１は、システム１００の全体の制御を司る。また、ＣＰＵ１０１は、少なくとも２つ以上のＣＰＵを含むマルチコアプロセッサシステムであってもよい。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。また、ＣＰＵ１０１は、専用のキャッシュメモリ２０１を含む。
【００２３】
また、ＣＰＵ１０１とバス１０４は、エンディアン変換機構１０５で接続されている。なお、システム１００が複数のＣＰＵを含む場合、各ＣＰＵが、それぞれのエンディアン変換機構１０５でバス１０４と接続されている。また、図２で示すシステム１００は、ＣＰＵ１０１とバス１０４の間にエンディアン変換機構１０５を配置しているが、たとえばＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）外部とのバスインターフェース等の位置にエンディアン変換機構１０５を配置してもよい。
【００２４】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。フラッシュＲＯＭ２０３は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０３は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、システム１００は、Ｉ／Ｆ２０７によって新しいＯＳを受信し、フラッシュＲＯＭ２０３に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２５】
フラッシュＲＯＭコントローラ２０４は、ＣＰＵ１０１の制御に従ってフラッシュＲＯＭ２０５に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、システム１００を使用するユーザがＩ／Ｆ２０７を通して取得した画像データ、映像データなどや、また本実施の形態にかかるエンディアン変換方法を実行するプログラムなどを記憶してもよい。フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２６】
ディスプレイ２０６は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ２０６は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２７】
Ｉ／Ｆ２０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２０９に接続され、ネットワーク２０９を介して他の装置に接続される。そして、Ｉ／Ｆ２０７は、ネットワーク２０９と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０７には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２８】
キーボード２０８は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２９】
（システム１００の機能）
次に、システム１００の機能について説明する。図３は、システム１００の機能を示すブロック図である。システム１００は、検出部３１１と、取得部３１２と、通知部３１３と、変換部３１４と、を含む。この制御部となる機能（検出部３１１〜通知部３１３）は、記憶装置に記憶されたプログラムをＣＰＵ１０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ１０３、フラッシュＲＯＭ２０３、フラッシュＲＯＭ２０５などである。また、システム１００は、メインメモリ３０１にアクセス可能である。
【００３０】
また、システム１００は、エンディアン変換設定３０３を含んだプログラム３０２を実行可能である。また、変換部３１４は、エンディアン変換機構１０５が実行することにより、その機能を実現する。なお、エンディアン変換設定３０３には、エンディアン変換対象のアドレス範囲が記載されている。アドレス範囲の指定方法としては、開始アドレスと終了アドレスの組み合わせであってもよいし、開始アドレスとサイズの組み合わせであってもよい。
【００３１】
メインメモリ３０１は、ＣＰＵ１０１からアクセス可能な主記憶装置である。たとえば、メインメモリ３０１は、ＲＡＭ１０３全体であったり、ＲＡＭ１０３の一部であったりしてもよい。
【００３２】
検出部３１１は、エンディアン変換設定を含むプログラムが実行されることを検出する機能を有する。たとえば、検出部３１１は、エンディアン変換設定３０３を含むプログラム３０２が実行することを検出する。なお、検出されたことを示す情報は、ＣＰＵ１０１のレジスタ、キャッシュメモリ、メインメモリ３０１などの記憶領域に記憶される。
【００３３】
取得部３１２は、検出部３１１によってプログラムが実行されることを検出した場合、プログラムのエンディアン変換設定を取得する機能を有する。たとえば、取得部３１２は、エンディアン変換設定３０３を取得する。なお、取得したエンディアン変換設定３０３は、ＣＰＵ１０１のレジスタ、キャッシュメモリ、メインメモリ３０１などの記憶領域に記憶される。
【００３４】
通知部３１３は、取得されたエンディアン変換設定を、変換部３１４に通知する機能を有する。たとえば、通知部３１３は、エンディアン変換設定３０３を、変換部３１４に通知する。なお、通知を行ったことを示す情報は、ＣＰＵ１０１のレジスタ、キャッシュメモリ、メインメモリ３０１などの記憶領域に記憶される。
【００３５】
変換部３１４は、通知されたエンディアン変換設定に基づいて、メインメモリ３０１のアドレスにアクセスするときに、メインメモリ３０１のアドレスによって指定されるデータをエンディアン変換する機能を有する。たとえば、エンディアン変換設定３０３に、アドレス０ｘ００１００００４から２バイト分エンディアン変換するような命令が記載されていた場合を想定する。このとき、変換部３１４は、０ｘ００１０００００〜０ｘ００１００００Ｆのアドレスにアクセスするときに、０ｘ００１００００４と０ｘ００１００００５のデータをスワップすることでエンディアン変換を行う。
【００３６】
このように、システム１００は、ＣＰＵ１０１とバス１０４間において、ＣＰＵ１０１によるアクセスで指定されたアドレス範囲内のバイト列の順序を変換する変換部３１４を含み、プログラムがＣＰＵ１０１によって実行されることを検出する。続けて、システム１００は、プログラムが検出された場合、プログラムに対応するバイト列の順序を変換するアドレス範囲をＣＰＵ１０１によって取得し、アドレス範囲をＣＰＵ１０１によって変換部３１４に通知する。
【００３７】
図４は、エンディアン変換機構１０５の内部を示す説明図である。エンディアン変換機構１０５は、エンディアン変換設定レジスタ４０１と、スワップ指示生成回路４０２と、ライト用スワップ回路４０３と、リード用スワップ回路４０４と、を含む。また、エンディアン変換機構１０５は、ＣＰＵ１０１とのインターフェースとなるバスインターフェース（マスタ側）４０５と、バス１０４とのインターフェースとなるバスインターフェース（スレーブ側）４０６と、を含む。
【００３８】
エンディアン変換設定レジスタ４０１は、エンディアン変換の指示領域と、指示領域内における個別の変換設定内容を含むエンディアン変換設定テーブル４０８を記憶するレジスタである。エンディアン変換設定レジスタ４０１の詳細は、図５にて後述する。また、エンディアン変換設定テーブル４０８の元となるエンディアン変換設定情報の生成例は、図６にて後述する。
【００３９】
スワップ指示生成回路４０２は、バスアクセス発生時に、バスアクセスのアドレスとバスアクセスのサイズを元に、所定単位でのスワップ指示を生成する回路である。所定単位は、たとえばバイト単位である。具体的に、スワップ指示生成回路４０２は、エンディアン変換設定テーブル４０８を引いて得られる、バスアクセスサイズ数分の個別エンディアン変換設定に基づいて、スワップ指示を生成する。なお、スワップ指示生成回路４０２が生成するスワップ指示例は、図５にて後述する。
【００４０】
ライト用スワップ回路４０３は、スワップ指示生成回路４０２のスワップ指示情報に基づいて、バス１０４へのライトアクセス時のバスインターフェース（マスタ側）４０５から送信されたデータに対して、所定単位での並び替えを行う回路である。同様に、リード用スワップ回路４０４は、スワップ指示生成回路４０２のスワップ指示情報に基づいて、バス１０４へのリードアクセス時のバスインターフェース（スレーブ側）４０６から送信されたデータに対して、所定単位での並び替えを行う回路である。
【００４１】
また、バスインターフェース（マスタ側）４０５とバスインターフェース（スレーブ側）４０６は、データフォーマット４０７に従ってデータを送受信する。データフォーマット４０７は、アクセス種類、サイズ、アドレス、という３つのフィールドを含む。さらに、データフォーマットは、アクセス種類が取る値によって、ライトデータフィールド、またはリードデータフィールド、のいずれかのフィールドを含む。
【００４２】
アクセス種類フィールドには、送受信されるデータがリードアクセスによるデータか、またはライトアクセスによるデータかを示す識別子が格納される。たとえば、アクセス種類フィールドが“リード”であればリードアクセスによるデータを示し、アクセス種類フィールドが“ライト”であればライトアクセスによるデータを示す。サイズフィールドには、送受信されるデータのデータサイズが格納される。アドレスフィールドには、送受信されるデータの先頭アドレスが格納される。ライトデータフィールドには、ライトアクセス時に送信されるデータが格納される。リードデータフィールドには、リードアクセス時に受信するデータが格納される。
【００４３】
たとえば、図４の例では、ＣＰＵ１０１が、アドレス０ｘ００１０００００から始める１６バイトに対するリードアクセスを発行した場合を想定している。この時、バスインターフェース（スレーブ側）４０６は、アクセス種類フィールドに“リード”、サイズフィールドに１６［バイト］、アドレスフィールドに“０ｘ００１００００”、リードデータフィールドに読み込まれたデータが格納されたデータを送信する。
【００４４】
また、スワップ指示生成回路４０２は、データフォーマット４０７のサイズフィールドとアドレスフィールドを参照して、個別エンディアン変換設定を取得し、スワップ指示を生成する。また、ライト用スワップ回路４０３は、スワップ指示が存在する場合に、ライトデータフィールドに対してスワップを実行する。同様に、リード用スワップ回路４０４は、スワップ指示が存在する場合に、リードデータフィールドに対してスワップを実行する。
【００４５】
なお、エンディアン変換機構１０５は、バスインターフェース（マスタ側）４０５、バスインターフェース（スレーブ側）４０６のバス幅と同一のサイズで転送を行ってもよいし、バス幅以下のサイズで転送を行ってもよい。たとえば、エンディアン変換機構１０５は、サイズフィールドが８［バイト］となるデータであってもよい。
【００４６】
図５は、実施の形態１にかかるエンディアン変換設定レジスタ４０１の記憶内容の一例とスワップ指示の生成例を示す。エンディアン変換設定レジスタ４０１は、エンディアン変換設定テーブル４０８を記憶する。エンディアン変換設定テーブル４０８は、エンディアン変換領域テーブル５０１と、個別エンディアン変換設定テーブル５０２と、を含む。
【００４７】
エンディアン変換領域テーブル５０１は、有効フラグ、開始アドレス、終了アドレスという３つのフィールドを含む。有効フラグフィールドには、該当のレコードが有効であるか否かを示す値が格納される。たとえば、有効フラグフィールドが“１”であれば、該当のレコードが有効であることを示す。また、有効フラグフィールドが“０”であれば、該当のレコードが無効であることを示す。開始アドレスフィールドには、エンディアン変換の対象となる先頭アドレスが格納される。終了アドレスフィールドには、エンディアン変換の対象となる終了アドレスが格納される。
【００４８】
たとえば、図５に示すエンディアン変換領域テーブル５０１は、レコード５０１−１が有効であり、エンディアン変換の対象領域が、０ｘ００１０００００〜０ｘ００１ＦＦＦＦＦであることを示している。なお、エンディアン変換領域テーブル５０１には、レコード５０１−１が登録されているが、複数のレコードが登録されていてもよい。
【００４９】
個別エンディアン変換設定テーブル５０２は、有効フラグ、アドレス、サイズという３つのフィールドを含む。有効フラグフィールドには、該当のレコードが有効であるか否かを示す値が格納される。アドレスフィールドには、スワップを開始する先頭アドレスが格納される。サイズフィールドには、スワップを行うバイト数が格納される。なお、個別エンディアン変換設定テーブル５０２のレコード１つ分を、１エントリと称する。
【００５０】
たとえば、図５に示す個別エンディアン変換設定テーブル５０２には、有効なレコード群として、エントリ５０２−１〜エントリ５０２−１４が登録されている。エントリ５０２−１〜エントリ５０２−４は、アドレス０ｘ００１０００００〜アドレス０ｘ００１００００３から始まる１バイトの個別エンディアン変換設定を示す。また、エントリ５０２−５は、アドレス０ｘ００１００００４から始まる２バイトの個別エンディアン変換設定を示す。さらに、エントリ５０２−６、エントリ５０２−７は、アドレス０ｘ００１００００８、アドレス０ｘ００１００００Ｃから始まる４バイトの個別エンディアン変換設定を示す。
【００５１】
同様に、エントリ５０２−８〜エントリ５０２−１１は、アドレス０ｘ００１０００４０〜アドレス０ｘ００１０００４３から始まる１バイトの個別エンディアン変換設定を示す。また、エントリ５０２−１２は、アドレス０ｘ００１０００４４から始まる２バイトの個別エンディアン変換設定を示す。さらに、エントリ５０２−１３、エントリ５０２−１４は、アドレス０ｘ００１０００４８、アドレス０ｘ００１０００４Ｃから始まる４バイトの個別エンディアン変換設定を示す。
【００５２】
また、スワップ指示生成回路４０２は、０ｘ００１０００００から始まる１６［バイト］のアクセスを検出する。以下の説明では、０ｘ００１０００００を対象アドレスに設定する。スワップ指示生成回路４０２は、対象アドレスがエンディアン変換領域テーブル５０１の開始アドレスと終了アドレスからなるアドレス範囲内かを判断する。図５の例では範囲内であるため、続けて、スワップ指示生成回路４０２は、個別エンディアン変換設定テーブル５０２のレコード群から、開始アドレスからの１６［バイト］分の個別エンディアン変換設定となるオフセット値とスワップサイズを取得する。なお、オフセット値は、１６進数で表現されたオフセット値である。
【００５３】
取得された対象オフセットとスワップサイズは、対象アドレスに対応する個別エンディアン変換設定５０３にて図示する値となる。具体的には、オフセット値０〜オフセット値３でのスワップサイズが１となり、オフセット値４でのスワップサイズが２となり、オフセット値８、オフセット値Ｃでのスワップサイズが４となる。取得後、スワップ指示生成回路４０２は、バイト単位でのスワップ指示情報５０４を生成する。スワップ指示生成回路４０２は、生成されたスワップ指示情報５０４を、ライト用スワップ回路４０３、リード用スワップ回路４０４に通知する。
【００５４】
具体的に、スワップ指示情報５０４の指示内容は、オフセット値４のデータをオフセット値５のデータ位置に設定し、オフセット値５のデータを、オフセット値４のデータ位置に設定する。同様に、スワップ指示情報５０４の指示内容は、オフセット値８のデータを、オフセット値Ｂのデータ位置に設定し、オフセット値９のデータを、オフセット値Ａのデータ位置に設定する。さらに、スワップ指示情報５０４の指示内容は、オフセット値Ａのデータを、オフセット値９のデータ位置に設定し、オフセット値Ｂのデータを、オフセット値８のデータ位置に設定する。同様に、スワップ指示情報５０４の指示内容は、オフセット値Ｃ〜オフセット値Ｆを、オフセット値Ｆ〜オフセット値Ｃのデータ位置に設定する。
【００５５】
図６は、エンディアン変換設定情報の生成例を示す説明図である。エンディアン変換設定情報は、ロードモジュール生成時にコンパイラとリンカによって生成される。リンカは、ロードモジュール生成時に、プログラム内に存在するグローバル変数をメモリ空間に割り当てる。たとえば、矩形６０１内で示すメモリ空間上へのデータの配置情報として、リンカは、型がｈｅａｄｅｒ構造体であり、グローバル変数であるＨ１、Ｈ２を、それぞれ０ｘ００１０００００、０ｘ００１０００４０をベースアドレスにして割り当てる。リンカは、割り当てられたベースアドレスを、データ配置情報６０２として生成する。
【００５６】
また、コンパイラは、オブジェクトファイル生成時に、矩形６０３で示すｈｅａｄｅｒ構造体の変換対象データ形式に基づいて、構造体の各メンバのベースアドレスからのオフセット値とサイズを解析し、データ形式解析結果６０４を生成する。具体的には、コンパイラは、ｈｅａｄｅｒ構造体の符号なし１バイトデータの配列であるメンバ変数ａｔｔｒ［４］について、ａｔｔｒ［０］がオフセット値０ｘ００００、サイズ１であると解析する。同様に、コンパイラは、ａｔｔｒ［１］がオフセット値０ｘ０００１、サイズ１であると解析し、ａｔｔｒ［２］がオフセット値０ｘ０００２、サイズ１であると解析し、ａｔｔｒ［３］がオフセット値０ｘ０００３、サイズ１であると解析する。
【００５７】
同様に、コンパイラは、符号なし２バイトデータであるメンバ変数ｔｙｐｅがオフセット値０ｘ０００４、サイズ２であると解析する。また、コンパイラは、４バイトデータであるメンバ変数ｓｉｚｅがオフセット値０ｘ０００４、サイズ２であると解析し、４バイトデータであるメンバ変数ｏｐｔがオフセット値０ｘ０００４、サイズ２であると解析する。
【００５８】
リンカは、データ配置情報６０２とデータ形式解析結果６０４とに基づいて、エンディアン変換設定情報６０５を生成する。エンディアン変換設定情報６０５は、エンディアン変換領域情報６０６と、個別エンディアン変換設定情報６０７を含む。なお、エンディアン変換領域情報６０６と、個別エンディアン変換設定情報６０７は、エンディアン変換設定テーブル４０８内のエンディアン変換領域テーブル５０１と個別エンディアン変換設定テーブル５０２から、有効フラグフィールドを取り除いた情報である。したがって、エンディアン変換領域情報６０６と、個別エンディアン変換設定情報６０７の各フィールドの説明は省略する。
【００５９】
リンカは、エンディアン変換領域テーブル５０１の開始アドレスと終了アドレスを、データ配置情報６０２のベースアドレス群が全て含まれるように設定する。図６では、リンカは、開始アドレスと終了アドレスを連続した領域として、０ｘ００１０００００〜０ｘ００１ＦＦＦＦＦを設定しているが、複数の領域を２レコード以上に分割して設定してもよい。次に、リンカは、個別エンディアン変換設定テーブル５０２のアドレスを、データ配置情報６０２のベースアドレスとデータ形式解析結果６０４のオフセット値とを加算した値に設定する。
【００６０】
このように、エンディアン変換設定情報６０５は、コンパイラまたはリンカによって生成される。また、エンディアン変換設定情報６０５は、アプリの設計者等により生成されてもよい。
【００６１】
図７は、エンディアン変換例を示す説明図である。図７では、リード用スワップ回路４０４によるエンディアン変換例を示す。ＣＰＵ１０１は、バス１０４に対して、アドレスサイズ１６［バイト］、アクセス先アドレス０ｘ００１０００００であるリードアクセスを含んだバスアクセス情報７０１を送信する。バス１０４は、アクセス先アドレスのデータをメインメモリ３０１等から取得し、エンディアン変換機構１０５に通知する。エンディアン変換機構１０５は、バスインターフェース（スレーブ側）４０６から送信されたデータ７０２を、スワップ指示情報５０４に基づいて、バスインターフェース（マスタ側）４０５に送信されたデータ７０３に変換する。
【００６２】
具体的には、エンディアン変換機構１０５は、矩形６０３で示すｈｅａｄｅｒ構造体の変換対象データ形式に基づいた変換を行う。メンバ変数ａｔｔｒ［４］が格納されたオフセット値０〜オフセット値３のデータについては、１バイトのデータであるため、エンディアン変換機構１０５は変換を行わない。
【００６３】
メンバ変数ｔｙｐｅが格納されたオフセット値４、オフセット値５のデータについては、２バイトのデータであり、エンディアン変換機構１０５は、エンディアン変換する。同様に、メンバ変数ｓｉｚｅが格納されたオフセット値８〜オフセット値Ｂのデータと、メンバ変数ｏｐｔが格納されたオフセット値Ｃ〜オフセット値Ｆのデータについては、４バイトのデータであり、エンディアン変換機構１０５は、エンディアン変換する。なお、指示がないオフセット値６、オフセット値７については、１バイトのデータと同様に扱ってもよい。
【００６４】
以上より、システム１００は、既に生成されているエンディアン変換設定と、エンディアン変換機構１０５により、プログラム実行中にエンディアン変換を行う。図８にて、プログラムビルド時の処理を示し、図９にて、ビルドされたプログラムの実行処理を示す。また、図１０、図１１にて、実行中のプログラムにてバスアクセスが発生した際の処理を示す。
【００６５】
図８は、プログラムビルド処理を示すフローチャートである。なお、プログラムビルド処理を実行する装置は、システム１００であってもよいし、クロスコンパイラを有した他の装置であってもよい。図８の説明では、システム１００内のＣＰＵ１０１がプログラムビルド処理を実行する場合を想定する。
【００６６】
ＣＰＵ１０１は、コンパイラによりソースコードのコンパイルを実行する（ステップＳ８０１）。実行により、ＣＰＵ１０１は、オブジェクトファイル８５１とデータ形式解析結果６０４を生成する。次に、ＣＰＵ１０１は、生成されたオブジェクトファイル８５１と、他のソースコードのコンパイルによって生成されたオブジェクトファイル群８５２とを元にして、リンカによってリンクする（ステップＳ８０２）。実行により、ＣＰＵ１０１は、ロードモジュール８５４とデータ配置情報６０２を生成する。
【００６７】
また、ＣＰＵ１０１は、生成されたデータ形式解析結果６０４と設計者等によって生成されたデータ形式解析結果８５３とを元にして、エンディアン変換設定情報６０５を生成する（ステップＳ８０３）。
【００６８】
図９は、プログラム実行処理を示すフローチャートである。ＣＰＵ１０１は、実行するロードモジュール８５４にエンディアン変換設定情報６０５が存在するか否かを判断する（ステップＳ９０１）。エンディアン変換設定情報が存在する場合（ステップＳ９０１：Ｙｅｓ）、ＣＰＵ１０１は、エンディアン変換設定情報６０５をエンディアン変換機構１０５内のエンディアン変換設定レジスタ４０１に格納する（ステップＳ９０２）。格納後、またはエンディアン変換設定情報が存在しない場合（ステップＳ９０１：Ｎｏ）、ＣＰＵ１０１は、ロードモジュール８５４をメインメモリ３０１にロードする（ステップＳ９０３）。ロード後、ＣＰＵ１０１は、ロードしたプログラムを実行開始する（ステップＳ９０４）。
【００６９】
プログラムを実行開始後、ＣＰＵ１０１は、プログラムが終了するか否かを判断する（ステップＳ９０５）。プログラムが終了する場合（ステップＳ９０５：Ｙｅｓ）、ＣＰＵ１０１は、プログラムを終了する。プログラムが続行される場合（ステップＳ９０５：Ｎｏ）、ＣＰＵ１０１は、プログラム実行の中で、バス１０４へアクセス要求を行う（ステップＳ９０６）。ＣＰＵ１０１は、バス１０４からのアクセス要求に対応する応答を受けるまで待機する。
【００７０】
エンディアン変換機構１０５は、バスへのアクセス要求を検出すると、バスアクセス時処理を実行する（ステップＳ９０７）。バスアクセス時処理の詳細については、図１０、図１１にて後述する。エンディアン変換機構１０５によるバスアクセス時処理の実行により、アクセス要求に対応する応答がＣＰＵ１０１に出力される。ＣＰＵ１０１は、バス１０４からアクセス応答を受け付け（ステップＳ９０８）、ステップＳ９０５の処理に移行する。
【００７１】
図１０は、実施の形態１にかかるバスアクセス時処理を示すフローチャート（その１）である。エンディアン変換機構１０５は、バスアクセスの対象アドレスがエンディアン変換領域テーブル５０１のアドレス範囲内か否かを判断する（ステップＳ１００１）。アドレス範囲内である場合（ステップＳ１００１：Ｙｅｓ）、エンディアン変換機構１０５は、個別エンディアン変換設定テーブル５０２から対象アドレスに対応する個別エンディアン変換設定を取得する（ステップＳ１００２）。
【００７２】
続けて、エンディアン変換機構１０５は、対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する（ステップＳ１００３）。対象アドレスに対応する個別エンディアン変換設定が存在する場合（ステップＳ１００３：Ｙｅｓ）、エンディアン変換機構１０５は、取得した個別エンディアン変換設定に基づいてデータのスワップ指示情報を生成する（ステップＳ１００４）。生成後、エンディアン変換機構１０５は、図１１に示すステップＳ１１０１に移行する。
【００７３】
アドレス範囲外である場合（ステップＳ１００１：Ｎｏ）、または対象アドレスに対応する個別エンディアン変換設定が存在しない場合（ステップＳ１００３：Ｎｏ）、エンディアン変換機構１０５は、通常通りバスアクセスを実行する（ステップＳ１００５）。実行後、エンディアン変換機構１０５は、バスアクセス時処理を終了する。
【００７４】
図１１は、実施の形態１にかかるバスアクセス時処理を示すフローチャート（その２）である。エンディアン変換機構１０５は、バスアクセスのアクセス種類を判断する（ステップＳ１１０１）。アクセス種類がリードである場合（ステップＳ１１０１：リード）、エンディアン変換機構１０５は、リードアクセスを実行する（ステップＳ１１０２）。実行後、エンディアン変換機構１０５は、バスインターフェース（スレーブ側）４０６からデータが到着したか否かを判断する（ステップＳ１１０３）。
【００７５】
データが到着した場合（ステップＳ１１０３：Ｙｅｓ）、エンディアン変換機構１０５は、データスワップを実行する（ステップＳ１１０４）。実行後、エンディアン変換機構１０５は、スワップしたデータをバスインターフェース（マスタ側）４０５に送信し（ステップＳ１１０５）、続けて、到着したデータが最終データか否かを判断する（ステップＳ１１０６）。
【００７６】
到着したデータが最終データである場合（ステップＳ１１０６：Ｙｅｓ）、エンディアン変換機構１０５は、バスアクセス時処理を終了する。データが到着していない場合（ステップＳ１１０３：Ｎｏ）、または到着したデータが最終データでない場合（ステップＳ１１０６：Ｎｏ）、エンディアン変換機構１０５は、ステップＳ１１０３の処理に移行する。
【００７７】
アクセス種類がライトである場合（ステップＳ１１０１：ライト）、エンディアン変換機構１０５は、バスインターフェース（マスタ側）４０５からデータが到着したか否かを判断する（ステップＳ１１０７）。
【００７８】
データが到着した場合（ステップＳ１１０７：Ｙｅｓ）、エンディアン変換機構１０５は、データスワップを実行する（ステップＳ１１０８）。実行後、エンディアン変換機構１０５は、スワップしたデータをバスインターフェース（スレーブ側）４０６に送信し（ステップＳ１１０９）、続けて、到着したデータが最終データか否かを判断する（ステップＳ１１１０）。
【００７９】
到着したデータが最終データである場合（ステップＳ１１１０：Ｙｅｓ）、エンディアン変換機構１０５は、ライトアクセスを実行し（ステップＳ１１１１）、バスアクセス時処理を終了する。データが到着していない場合（ステップＳ１１０７：Ｎｏ）、または到着したデータが最終データでない場合（ステップＳ１１１０：Ｎｏ）、エンディアン変換機構１０５は、ステップＳ１１０７の処理に移行する。
【００８０】
以上説明したように、実施の形態１にかかるエンディアン変換方法、およびシステムによれば、プログラム起動時にエンディアン変換するアドレス範囲をバスに通知し、バスで指定された範囲についてエンディアン変換を行う。これにより、システムは、システム内の性能に影響を与えにくい箇所でエンディアン変換でき、バス幅内の一部のアドレス範囲についてエンディアン変換を行うといった、複雑な変換も行える。
【００８１】
また、実施の形態１にかかるシステムは、バスアクセスのレイテンシが、エンディアン変換機構が追加される分だけ伸びるが、以下の２点の理由により、システムの処理性能に与える影響が小さくなる。１点目の理由としては、バスアクセスの頻度は、ＣＰＵがキャッシュにアクセスする回数よりも少ないことが挙げられる。たとえば、キャッシュミスが１０［％］であっても、キャッシュアクセス１０回中１回だけバスアクセスが発生することになる。したがって、ＣＰＵ内部でエンディアン変換を行うよりも、バスでエンディアン変換を行うことで、システムの処理性能に与える影響が小さくなる。また、２点目の理由としては、バスアクセスは通常バーストアクセスであるため、エンディアン変換にかかる時間を他の処理とオーバーラップして隠ぺいできることが挙げられる。
【００８２】
また、実施の形態１にかかるシステムは、エンディアン変換するアドレス範囲が格納されたエンディアン変換設定を、プログラムのソースコードをコンパイルするときに生成してもよい。これにより、システムは、エンディアン変換設定抜け等が発生せず、エンディアン変換を行う全てのアドレス範囲を網羅することができる。
【００８３】
また、実施の形態１にかかるエンディアン変換機構は、エンディアン変換の対象アドレスが、エンディアン変換領域に含まれ、かつ、個別エンディアン変換設定が存在する場合に、エンディアン変換を行ってもよい。これにより、エンディアン変換機構は、対象アドレスがエンディアン変換領域に含まれない場合、個別エンディアン変換設定が存在するか否かという分岐処理を行わなくてよい。
【００８４】
（実施の形態２の説明）
実施の形態１にかかるエンディアン変換機構１０５では、個別エンディアン変換設定全てが個別エンディアン変換設定テーブル５０２に登録されていた。実施の形態２にかかるシステム１００は、個別エンディアン変換設定の一部を実施の形態２にかかるエンディアン変換機構１２０１内に登録し、他の個別エンディアン変換設定については、メインメモリ３０１に記憶する形態を取る。
【００８５】
図１２は、実施の形態２にかかるエンディアン変換機構１２０１の内部を示す説明図である。エンディアン変換機構１２０１は、実施の形態１にかかるエンディアン変換機構１０５に含まれていたエンディアン変換設定レジスタ４０１の代わりに、エンディアン変換設定キャッシュ１２０２を含む。また、エンディアン変換機構１２０１は、個別エンディアン変換設定入れ替え制御回路１２０３、アクセス調停回路１２０４を含む。なお、エンディアン変換機構１２０１に含まれる他のハードウェアは、実施の形態１にかかるエンディアン変換機構１０５と同様の機能を有するため、説明を省略する。
【００８６】
また、実施の形態２にかかるメインメモリ３０１には、エンディアン変換設定テーブル１２１１が格納されている。また、エンディアン変換設定テーブル１２１１が格納される領域は、アドレス０ｘ０００Ｆ００００から始まる領域であることを想定している。メインメモリ３０１上に記憶されているエンディアン変換設定テーブル１２１１は、図６で示した、エンディアン変換領域情報６０６、個別エンディアン変換設定情報６０７が含まれる。
【００８７】
エンディアン変換設定キャッシュ１２０２は、エンディアン変換設定テーブルの一部を記憶するキャッシュメモリである。また、エンディアン変換設定キャッシュ１２０２は、エンディアン変換領域テーブル１２０５と個別エンディアン変換設定テーブル１２０６とを含む。
【００８８】
エンディアン変換領域テーブル１２０５は、エンディアン変換領域テーブル５０１に、さらに、エンディアン変換設定テーブル先頭アドレスフィールドを含んでいる。エンディアン変換設定テーブル先頭アドレスフィールドは、エンディアン変換設定キャッシュ１２０２に設定されているエンディアン変換設定テーブルがメインメモリ３０１での格納先となる先頭アドレスの値を格納している。たとえば、図１２に示すエンディアン変換機構１２０１には、エンディアン変換設定テーブル１２１１が設定されているため、エンディアン変換設定情報先頭アドレスフィールドには、０ｘ０００Ｆ０００が格納される。
【００８９】
個別エンディアン変換設定テーブル１２０６は、個別エンディアン変換設定テーブル５０２と同一のフィールドを有する。そのため、個別エンディアン変換設定テーブル１２０６の各フィールドの説明を省略する。また、個別エンディアン変換設定テーブル１２０６は、エントリが１２まで登録可能であることを想定しており、エントリ５０２−１〜エントリ５０２−１２が登録されている。エントリ５０２−１３、エントリ５０２−１４については、個別エンディアン変換設定テーブル１２０６に登録されておらず、エンディアン変換設定テーブル１２１１内に記憶されている。
【００９０】
個別エンディアン変換設定入れ替え制御回路１２０３は、個別エンディアン変換設定テーブル１２０６の入れ替えを制御する回路である。具体的には、個別エンディアン変換設定入れ替え制御回路１２０３は、メインメモリ３０１から１エントリ分の情報を取得し、個別エンディアン変換設定テーブル１２０６のレコードに書き込む。たとえば、エントリ５０２−１３を個別エンディアン変換設定テーブル１２０６に登録する場合、個別エンディアン変換設定入れ替え制御回路１２０３は、個別エンディアン変換設定テーブル１２０６の１エントリを選択し、エントリ５０２−１３で上書きする。
【００９１】
アクセス調停回路１２０４は、バスインターフェイス（スレーブ側）４０６によるバス１０４へのアクセス要求と、個別エンディアン変換設定入れ替え制御回路１２０３によるバス１０４へのアクセス要求と、を調停する回路である。たとえば、アクセス調停回路１２０４は、アクセス要求を記憶可能なバッファを有し、前述の両アクセス要求のうち、一方がアクセス中の間に、他方からアクセス要求があった場合、他方からのアクセス要求をバッファリングする。一方に対してアクセス応答を返却した後、アクセス調停回路１２０４は、他方のアクセス要求をバス１０４に通知する。
【００９２】
図１２に示したエンディアン変換機構１２０１によって、システム１００はエンディアン変換を行う。なお、実施の形態２にかかるプログラムビルド処理、プログラム実行処理については、実施の形態１にかかるプログラムビルド処理、プログラム実行処理と等しいため、説明を省略する。また、実施の形態２にかかるバスアクセス時処理（その２）は、実施の形態１にかかるバスアクセス時処理（その２）と等しいため、説明を省略する。
【００９３】
図１３は、実施の形態２にかかるバスアクセス時処理を示すフローチャート（その１）である。エンディアン変換機構１２０１は、バスアクセスの対象アドレスがエンディアン変換領域テーブル１２０５のアドレス範囲内か否かを判断する（ステップＳ１３０１）。アドレス範囲内である場合（ステップＳ１３０１：Ｙｅｓ）、エンディアン変換機構１２０１は、個別エンディアン変換設定テーブル１２０６から対象アドレスに対応する個別エンディアン変換設定を取得する（ステップＳ１３０２）。
【００９４】
続けて、エンディアン変換機構１２０１は、対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する（ステップＳ１３０３）。対象アドレスに対応する個別エンディアン変換設定が存在する場合（ステップＳ１３０３：Ｙｅｓ）、エンディアン変換機構１２０１は、取得した個別エンディアン変換設定に基づいてデータのスワップ指示情報を生成する（ステップＳ１３０４）。生成後、エンディアン変換機構１２０１は、図１１に示したステップＳ１１０１に移行する。
【００９５】
対象アドレスに対応するエンディアン変換設定が存在しない場合（ステップＳ１３０３：Ｎｏ）、エンディアン変換機構１０５は、メインメモリ３０１上のエンディアン変換設定テーブル１２１１から対象アドレスに対応する個別エンディアン変換設定を取得する（ステップＳ１３０５）。なお、メインメモリ３０１上の個別エンディアン変換設定情報６０７は、エンディアン変換設定情報先頭アドレスフィールドに格納されたエンディアン変換設定情報に含まれるデータである。
【００９６】
続けて、エンディアン変換機構１０５は、対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する（ステップＳ１３０６）。対象アドレスに対応する個別エンディアン変換設定が存在する場合（ステップＳ１３０６：Ｙｅｓ）、エンディアン変換機構１２０１は、個別エンディアン変換設定テーブル１２０６の１エントリを選択する（ステップＳ１３０７）。なお、エントリの選択方法は、空きエントリがあればそのまま空きエントリを選択する。空きエントリがない場合のエントリの選択方法は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）、ＬＦＵ（Ｌｅａｓｔ  Ｆｒｅｑｕｅｎｔｌｙ  Ｕｓｅｄ）等の置換アルゴリズムに従って、１エントリを選択する。
【００９７】
選択後、エンディアン変換機構１２０１は、対象アドレスに対応するエンディアン変換設定で、選択されたエントリを上書きする（ステップＳ１３０８）。上書き後、エンディアン変換機構１２０１は、ステップＳ１３０４の処理に移行する。
【００９８】
アドレス範囲外である場合（ステップＳ１３０１：Ｎｏ）、または対象アドレスに対応する個別エンディアン変換設定が存在しない場合（ステップＳ１３０６：Ｎｏ）、エンディアン変換機構１０５は、通常通りバスアクセスを実行する（ステップＳ１３０９）。実行後、エンディアン変換機構１０５は、バスアクセス時処理を終了する。
【００９９】
以上説明したように、実施の形態２にかかるエンディアン変換方法、およびシステムによれば、個別エンディアン変換設定の一部をエンディアン変換機構内に登録し、他の個別エンディアン変換設定については、メインメモリに記憶する。これにより、実施の形態２にかかるエンディアン変換方法は、個別エンディアン変換設定を記憶する記憶領域を抑えることができる。また、システムは、エンディアン変換を行うアドレスに時間的局所性が存在する場合、個別エンディアン設定の入れ替え頻度も少なくなるため、性能上のオーバーヘッドを削減することができる。なお、時間的局所性が存在するアドレスは、たとえば、スタティック変数が格納されたアドレス等が該当する。スタティック変数は、宣言された関数内でしか使用されないため、時間的局所性が発生する。
【０１００】
（実施の形態３の説明）
実施の形態１および実施の形態２にかかるシステム１００では、プログラムロード時に、エンディアン変換設定をエンディアン変換機構１０５、１２０１に通知していた。実施の形態３にかかるシステム１００は、プログラム実行時にエンディアン変換設定をエンディアン変換機構１４０１に通知する。また、実施の形態３にかかるエンディアン変換機構１４０１は、実施の形態２にかかるエンディアン変換機構１２０１が有していたエンディアン変換設定キャッシュ１２０２と同様のハードウェアであることを想定する。
【０１０１】
図１４は、実施の形態３にかかるシステム１００のエンディアン変換動作を示す説明図である。ソフトウェア開発時において、ソフトウェア開発用装置は、コンパイラ１４０２の機能により、ソースコード１４０３を解析し、エンディアン変換が行われる登録対象アドレスが確保される箇所を抽出する。たとえば、コンパイラ１４０２は、ヒープ領域を確保するｍａｌｌｏｃ（）関数、ｎｅｗ演算子、または、ヒープ領域を再確保するｒｅａｌｌｏｃ（）関数等を抽出する。同様に、コンパイラ１４０２は、ヒープ領域を解放するｆｒｅｅ（）関数、ｄｅｌｅｔｅ演算子等を抽出する。なお、登録対象アドレスは、ヒープ領域に記憶される変数や、グローバル変数が格納されるグローバルデータのアドレス範囲内となる。
【０１０２】
抽出後、ソフトウェア開発用装置は、コンパイラ１４０２によって、エンディアン変換が行われる箇所より前に、エンディアン変換設定を通知するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）呼び出しを追加する。エンディアン変換が行われる箇所より前とは、たとえば、登録対象アドレスが確保される箇所である。同様に、ソフトウェア開発用装置は、コンパイラ１４０２によって、エンディアン変換が不要となる箇所に、エンディアン変換設定の解除を行うＡＰＩ呼び出しを追加する。エンディアン変換が不要となる箇所とは、たとえば、登録対象アドレスが解放される箇所である。
【０１０３】
ＡＰＩ呼び出しが追加されたロードモジュール１４０４のバイナリコードのイメージは、コードイメージ１４０５となる。コードイメージ１４０５には、コード１４０６、コード１４０７が追加されている。コード１４０６は、ｍａｌｌｏｃ（）関数の後に追加されているコードであり、エンディアン変換設定を通知するＡＰＩ“ｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅ（ｐ、ｓｉｚｅ、ｐ、４、ＬＥ）”である。
【０１０４】
なお、ｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅの第１引数は、登録対象アドレスの先頭アドレスであり、エンディアン変換領域テーブル１２０５の開始アドレスフィールドに設定される。第２引数は、登録対象アドレスのサイズであり、第１引数と加算した結果が、エンディアン変換領域テーブル１２０５の終了アドレスフィールドに設定される。第３引数は、登録対象の個別エンディアン変換設定のアドレスであり、個別エンディアン変換設定テーブル１２０６のアドレスフィールドに設定される。第４引数は、登録対象の個別エンディアン変換設定のサイズであり、個別エンディアン変換設定テーブル１２０６のサイズフィールドに設定される。第５引数は、リトルエンディアン、またはビッグエンディアンのいずれかを示す識別子が格納される。
【０１０５】
同様に、コード１４０７は、ｆｒｅｅ（）関数の後に追加されており、エンディアン変換設定の削除を通知するＡＰＩ“ｄｅｌｅｔｅ＿ｅｎｄｉａｎ＿ｍｏｄｅ（ｐ、ｓｉｚｅ）”が追加されている。なお、ｄｅｌｅｔｅ＿ｅｎｄｉａｎ＿ｍｏｄｅの第１引数は、削除対象アドレスの先頭アドレスである。第２引数は、削除対象アドレスのサイズである。なお、プログラムの設計者が、ソースコード内に上記ＡＰＩによる命令コードを追加してもよい。
【０１０６】
ＣＰＵ１０１は、ロードモジュール１４０４を実行し、プログラム実行中にエンディアン変換設定を通知するＡＰＩが実行されると、エンディアン変換設定情報をエンディアン変換機構１４０１に通知する。通知を受けたエンディアン変換機構１４０１は、エンディアン変換設定キャッシュ１２０２にエンディアン変換設定情報を登録する。なお、システム１００は、ＲＡＭ１０３のアドレス空間に機器のアドレス空間が共存するメモリマップドＩ／Ｏの形態を想定している。したがって、ＣＰＵ１０１は、エンディアン変換設定キャッシュ１２０２に割り当てられたアドレスにアクセスすることが可能である。なお、エンディアン変換設定情報登録処理については、図１６にて後述する。
【０１０７】
また、ＣＰＵ１０１は、プログラム実行中にエンディアン変換設定の削除を通知するＡＰＩが実行されると、エンディアン変換設定情報の削除をエンディアン変換機構１４０１に通知する。なお、エンディアン変換設定情報削除処理については、図１７にて後述する。
【０１０８】
このように、エンディアン変換機構１０５は、ｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅ（）によって設定されたアドレスに対して、ＣＰＵ１０１からのバスアクセスが行われるタイミングでエンディアン変換を行うことができる。
【０１０９】
図１５は、エンディアン変換設定の登録対象が構造体の場合におけるＡＰＩの追加例を示す説明図である。ソースコード１５０１には、ｈｅａｄｅｒ構造体の定義情報１５０２が含まれ、ｈｅａｄｅｒ構造体を型として、ヒープ領域に確保される変数が定義されている。ソフトウェア開発用装置は、コンパイラ１４０２によって、ソースコード１５０１をコンパイルし、ロードモジュール１５０３を生成する。ＡＰＩ呼び出しが追加されたロードモジュール１５０３のバイナリコードのイメージは、コードイメージ１５０４となる。コードイメージ１５０４には、コード１５０５、コード１５０６が追加されている。
【０１１０】
コード１５０５は、ｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅ（）が、ｈｅａｄｅｒ構造体で定義されているメンバごとに追加されている。たとえば、コード１５０５の先頭には、“ｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅ（ｈ、ｓｉｚｅｏｆ（ｓｔｒｕｃｔ  ｈｅａｄｅｒ）、＆ｈ−＞ａｔｔｒ［０］、１、ＬＥ）”が追加されている。
【０１１１】
次に、各引数の説明を行う。第１引数には、登録対象アドレスの先頭アドレスが設定されている。第２引数には、登録対象アドレスのサイズとなる、ｈｅａｄｅｒ構造体のサイズが設定されている。第３引数には、登録対象の個別エンディアン変換設定のアドレスである、ｈ−＞ａｔｔｒ［０］のアドレスが設定されている。第４引数には、登録対象の個別エンディアン変換設定のサイズである、ｈ−＞ａｔｔｒ［０］のサイズとなる１が設定されている。
【０１１２】
同様に、２行目〜４行目におけるｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅ（）は、ｈ−＞ａｔｔｒ［１］〜ｈ−＞ａｔｔｒ［３］が登録対象の個別エンディアン変換設定として追加されている。さらに、５行目〜７行目におけるｓｅｔ＿ｅｎｄｉａｎ＿ｍｏｄｅ（）は、ｈ−＞ｔｙｐｅ、ｈ−＞ｓｉｚｅ、ｈ−＞ｏｐｔが登録対象の個別エンディアン変換設定として追加されている。また、コード１５０６は、ｄｅｌｅｔｅ＿ｅｎｄｉａｎ＿ｍｏｄｅ（）が追加されている。削除に関しては、図１５で説明した処理と同等であるため、説明を省略する。
【０１１３】
図１６は、エンディアン変換設定情報登録処理を示すフローチャートである。エンディアン変換機構１４０１は、登録対象アドレスがグローバルデータのアドレス範囲内か否かを判断する（ステップＳ１６０１）。アドレス範囲内である場合（ステップＳ１６０１：Ｙｅｓ）、エンディアン変換機構１４０１は、メインメモリ３０１上のエンディアン変換設定テーブル１２１１から登録対象アドレスに対応する個別エンディアン変換設定を取得する（ステップＳ１６０２）。
【０１１４】
続けて、エンディアン変換機構１４０１は、登録対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する（ステップＳ１６０３）。個別エンディアン変換設定が存在しない場合（ステップＳ１６０３：Ｎｏ）、エンディアン変換機構１４０１は、メインメモリ３０１上のエンディアン変換設定の空きエントリを探索する（ステップＳ１６０４）。探索後、エンディアン変換機構１４０１は、空きエントリが存在するか否かを判断する（ステップＳ１６０５）。
【０１１５】
空きエントリが存在する場合（ステップＳ１６０５：Ｙｅｓ）、エンディアン変換機構１４０１は、空きエントリを有効に設定する（ステップＳ１６０６）。続けて、エンディアン変換機構１４０１は、登録対象の個別エンディアン変換設定のアドレス、サイズを、個別エンディアン変換設定情報のうち有効に設定したエントリのアドレスフィールド、サイズフィールドに設定する（ステップＳ１６０７）。設定後、エンディアン変換機構１４０１は、個別エンディアン変換設定テーブル１２０６の１エントリを選択する（ステップＳ１６０８）。なお、ステップＳ１６０８におけるエントリの選択方法は、ステップＳ１３０７にて記述した方法でよい。
【０１１６】
選択後、エンディアン変換機構１４０１は、選択したエントリを有効に設定する（ステップＳ１６０９）。設定後、エンディアン変換機構１４０１は、登録対象の個別エンディアン変換設定のアドレス、サイズを、選択したエントリのアドレスフィールド、サイズフィールドに設定し（ステップＳ１６１０）、エンディアン変換設定情報登録処理を終了する。
【０１１７】
アドレス範囲内でない場合（ステップＳ１６０１：Ｎｏ）、エンディアン変換機構１４０１は、エラーを出力し（ステップＳ１６１１）、エンディアン変換設定情報登録処理を終了する。なお、エラーの出力先は、ＣＰＵ１０１でもよいし、エンディアン変換機構１４０１内のステータスレジスタ等であってもよい。
【０１１８】
また、空きエントリが存在しない場合（ステップＳ１６０５：Ｎｏ）、または個別エンディアン変換設定が存在する場合（ステップＳ１６０３：Ｙｅｓ）、エンディアン変換機構１４０１は、ステップＳ１６１１の処理に移行する。
【０１１９】
図１７は、エンディアン変換設定情報削除処理を示すフローチャートである。エンディアン変換機構１４０１は、削除対象アドレスがグローバルデータのアドレス範囲内か否かを判断する（ステップＳ１７０１）。アドレス範囲内である場合（ステップＳ１７０１：Ｙｅｓ）、エンディアン変換機構１４０１は、メインメモリ３０１上のエンディアン変換設定テーブル１２１１から削除対象アドレスに対応する個別エンディアン変換設定を取得する（ステップＳ１７０２）。
【０１２０】
続けて、エンディアン変換機構１４０１は、削除対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する（ステップＳ１７０３）。対応する個別エンディアン変換設定が存在する場合（ステップＳ１７０３：Ｙｅｓ）、エンディアン変換機構１４０１は、取得した個別エンディアン変換設定を無効化する（ステップＳ１７０４）。無効化後、エンディアン変換機構１４０１は、個別エンディアン変換設定テーブル１２０６から削除対象アドレスに対応する個別エンディアン変換設定を取得する（ステップＳ１７０５）。
【０１２１】
続けて、エンディアン変換機構１４０１は、削除対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する（ステップＳ１７０６）。削除対象アドレスに対応する個別エンディアン変換設定が存在する場合（ステップＳ１７０６：Ｙｅｓ）、エンディアン変換機構１４０１は、取得した個別エンディアン変換設定を無効化し（ステップＳ１７０７）、エンディアン変換設定情報削除処理を終了する。
【０１２２】
また、削除対象アドレスに対応する個別エンディアン変換設定が存在しない場合（ステップＳ１７０６：Ｎｏ）、エンディアン変換機構１４０１は、エンディアン変換設定情報削除処理を終了する。アドレス範囲内でない場合（ステップＳ１７０１：Ｎｏ）、または対応する個別エンディアン変換設定が存在しない場合（ステップＳ１７０３：Ｎｏ）、エンディアン変換機構１４０１は、エラーを出力する（ステップＳ１７０８）。出力後、エンディアン変換機構１４０１は、エンディアン変換設定情報削除処理を終了する。
【０１２３】
以上説明したように、実施の形態３にかかるエンディアン変換方法、およびシステムによれば、実行中にグローバルデータを確保する場合に個別エンディアン変換設定を登録し、グローバルデータを解放する際に個別エンディアン変換設定を削除する。このように、実施の形態３にかかるエンディアン変換機構は、確保されたグローバルデータに対応する個別エンディアン変換設定のみ有していればよくなる。したがって、実施の形態３にかかるエンディアン変換機構は、実施の形態２にかかるエンディアン変換機構と比較して、個別エンディアン変換設定テーブルのサイズをより小さくすることができる。
【０１２４】
（実施の形態４の説明）
実施の形態１〜実施の形態３では、エンディアン変換設定を行うアドレス全てが、個別エンディアン変換設定を有していることを前提としていた。実施の形態４では、配列などの繰り返し構造を有するデータに対応したエンディアン変換機構１０５の説明を行う。
【０１２５】
図１８は、実施の形態４にかかるシステム１００のエンディアン変換動作を示す説明図である。リンカは、ロードモジュール生成時に、プログラム内に存在するグローバル変数となる配列をメモリ空間に割り当てる。たとえば、矩形１８０１内で示すメモリ空間上へのデータの配置情報として、リンカは、型が矩形１８０３で示すｈｅａｄｅｒ構造体であり、グローバル変数であるＨ［１６］を、０ｘ００１０００００をベースアドレスにして割り当てる。
【０１２６】
また、Ｈの各要素として、Ｈ［０］が０ｘ００１０００００に割り当てられ、Ｈ［１］が０ｘ００１０００４０に割り当てられ、Ｈ［２］が０ｘ００１０００８０に割り当てられ、Ｈ［３］が０ｘ００１０００Ｃ０に割り当てられる。以下、Ｈ［４］〜Ｈ［１５］まで、一つの要素サイズが０ｘ４０となるように、各要素が割り当てられる。なお、最後の要素となるＨ［１５］が０ｘ００１００３ＦＦに割り当てられる。また、一つの要素サイズとなった０ｘ４０は、ｈｅａｄｅｒ構造体のサイズとなる。このようなデータの配置情報より、リンカは、エンディアン変換領域情報１８０２を生成する。
【０１２７】
また、コンパイラは、オブジェクトファイル生成時に、矩形１８０３で示すｈｅａｄｅｒ構造体の変換対象データ形式に基づいて、構造体の各メンバのベースアドレスからのオフセット値とサイズを解析し、１要素分のデータ形式解析結果１８０４を生成する。なお、１要素分のデータ形式解析結果１８０４は、実施の形態１にかかるデータ形式解析結果６０４と等しい情報であるので、説明を省略する。リンカは、１要素分のデータ形式解析結果１８０４をそのまま個別エンディアン変換設定情報１８０５に設定し、エンディアン変換領域情報１８０２と個別エンディアン変換設定情報１８０５とをあわせて、エンディアン変換設定情報１８０６に設定する。
【０１２８】
エンディアン変換領域情報１８０２は、実施の形態１におけるエンディアン変換領域情報６０６から、さらにマスクフィールドを含む情報である。マスクフィールドは、対象アドレスから、１要素分のデータ形式解析結果１８０４のオフセット値を比較するためのマスク値である。たとえば、対象アドレスが０ｘ００１０００４４の場合、対象アドレスは、Ｈ［１］．ｔｙｐｅのデータを記憶している。このとき、マスク結果が０ｘ００１０００４４＆（０ｘ００３Ｆ）＝０ｘ０００４となるため、マスク結果は１要素分のデータ形式解析結果１８０４のオフセット値０ｘ０００４と一致する。
【０１２９】
次に、実施の形態４にかかるエンディアン変換機構１０５の説明を行う。実施の形態４にかかるエンディアン変換機構１０５は、実施の形態１にかかるエンディアン変換機構１０５に含まれるエンディアン変換設定レジスタ４０１の記憶内容と、スワップ指示生成回路４０２の機能と、を除くハードウェア、機能が全て等しい。したがって、エンディアン変換設定レジスタ４０１とスワップ指示生成回路４０２以外の説明を省略する。図１９では、実施の形態４にかかるエンディアン変換機構１０５に含まれるエンディアン変換設定レジスタ１９０１とスワップ指示生成回路１９０２について説明を行う。
【０１３０】
図１９は、実施の形態４にかかるエンディアン変換設定レジスタ１９０１の記憶内容の一例を示す説明図である。エンディアン変換設定レジスタ１９０１は、エンディアン変換設定テーブル１９０３を記憶する。なお、図１９では、エンディアン変換設定レジスタ１９０１内にエンディアン変換設定テーブル１９０３＃０とエンディアン変換設定テーブル１９０３＃１を含む。エンディアン変換設定テーブル１９０３＃０、＃１は、エンディアン変換領域テーブル１９０４＃０、＃１と、個別エンディアン変換設定テーブル１９０５＃０、＃１と、を含む。
【０１３１】
エンディアン変換領域テーブル１９０４は、実施の形態１にかかるエンディアン変換領域テーブル５０１が含むフィールド群に追加して、マスクフィールドを含む。マスクフィードに格納される内容は、エンディアン変換領域情報１８０２と等しいため、説明を省略する。
【０１３２】
個別エンディアン変換設定テーブル１９０５は、実施の形態１にかかる個別エンディアン変換設定テーブル５０２のアドレスフィールドが、オフセット値フィールドに置き換わったテーブルである。オフセット値フィールドに格納される内容は、データ形式解析結果１８０４のオフセット値と等しいため、説明を省略する。
【０１３３】
スワップ指示生成回路１９０２は、データフォーマット４０７のアドレスフィールドをエンディアン変換領域テーブル１９０４のマスクフィールドでマスクする。続けて、スワップ指示生成回路１９０２は、マスクして得られた値と、個別エンディアン変換設定テーブル１９０５のオフセット値フィールドを比較して、個別エンディアン変換設定を取得する。
【０１３４】
なお、実施の形態４にかかるバスアクセス時処理は、ステップＳ１００２にて、「個別エンディアン変換設定テーブル５０２から対象アドレスをマスクフィールドにてマスクしたアドレスに対応する個別エンディアン変換設定を取得」することに置き換える。他の処理は全て実施の形態１にかかるバスアクセス時処理と等しいため、説明を省略する。
【０１３５】
以上説明したように、実施の形態４にかかるエンディアン変換方法、およびシステムによれば、変換対象アドレスをマスクし、オフセット値と一致した場合に、エンディアン変換を行う。これにより、実施の形態４にかかるシステムは、配列などの繰り返し構造を有するデータに対して、少ない個別エンディアン変換設定で対応することができる。
【０１３６】
たとえば、ＣＰＵがＧＰＵに３Ｄ処理を依頼する際に、頂点データの配列を転送することを想定する。このような場合、実施の形態１〜実施の形態３におけるエンディアン変換機構では、確保された頂点データ全てに対する個別エンディアン変換設定を登録しなければならない。しかし、実施の形態４におけるエンディアン変換機構は、１要素分の個別エンディアン変換設定で対応することができる。
【０１３７】
なお、本実施の形態で説明したエンディアン変換方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本エンディアン変換方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本エンディアン変換方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１３８】
１０１  ＣＰＵ
１０４  バス
１０５  エンディアン変換機構
２０７  Ｉ／Ｆ
３０１  メインメモリ
３０２  プログラム
３０３  エンディアン変換設定
３１１  検出部
３１２  取得部
３１３  通知部
３１４  変換部
【図１】
2012127590.tif 000003
【図２】
2012127590.tif 000004
【図３】
2012127590.tif 000005
【図４】
2012127590.tif 000006
【図５】
2012127590.tif 000007
【図６】
2012127590.tif 000008
【図７】
2012127590.tif 000009
【図８】
2012127590.tif 000010
【図９】
2012127590.tif 000011
【図１０】
2012127590.tif 000012
【図１１】
2012127590.tif 000013
【図１２】
2012127590.tif 000014
【図１３】
2012127590.tif 000015
【図１４】
2012127590.tif 000016
【図１５】
2012127590.tif 000017
【図１６】
2012127590.tif 000018
【図１７】
2012127590.tif 000019
【図１８】
2012127590.tif 000020
【図１９】
2012127590.tif 000021
【国際調査報告】
2012127590.tif 000022
2012127590.tif 000023