(57)【要約】【課題】エンディアン形式が異なる２つのプロセッサコアを備えるシステムを対象としたプログラムからエンディアン依存コードを検出すること。【解決手段】実施形態によれば、２つのプロセッサコアモデルと、メモリモデルと、エンディアン依存コード検出部と、を備える。２つのプロセッサコアモデルは、エンディアン形式が夫々異なる２つのプロセッサコアと、２つのプロセッサコア間の転送データを一時記憶するバッファメモリと、を備えるシステムのターゲットプログラムを実行して２つのプロセッサコアの動作を夫々模擬する。メモリモデルは、バッファメモリを模擬する。エンディアン依存コード検出部は、データ転送先のプロセッサコアモデルがメモリモデルから転送データを読み出すロード命令を実行したとき、リードサイズに基づいてロード命令がエンディアン依存コードであるか否かを判定する。【選択図】図８
2012022640.tif 000002
【特許請求の範囲】
【請求項１】
エンディアン形式が夫々異なる２つのプロセッサコアと、前記２つのプロセッサコア間の転送データを一時記憶するバッファメモリと、を備えるマルチプロセッサコアシステムで動作させる実行プログラムであるターゲットプログラムを実行して前記２つのプロセッサコアの動作を夫々模擬する２つのプロセッサコアモデルと、
前記バッファメモリを模擬するメモリモデルと、
前記２つのプロセッサコアモデルのうちのデータ転送先のプロセッサコアモデルが前記メモリモデルに書き込まれた転送データを読み出すロード命令を実行したとき、前記ロード命令のリードサイズに基づいて前記ロード命令がエンディアン依存コードであるか否かを判定するエンディアン依存コード検出部と、
前記エンディアン依存コード検出部が前記ロード命令をエンディアン依存コードと判定した場合、前記ロード命令がエンディアン依存コードである旨を出力するエンディアン依存コード通知部と、
を備えることを特徴とするソフトウェア開発システム。
【請求項２】
前記エンディアン依存コード検出部は、前記メモリモデルに対する書き込みデータのライトアドレスと書き込み元のプロセッサコアモデルのエンディアンとを対応づけて記録するライトアクセス情報を管理し、プロセッサコアモデルがロード命令を実行したとき、前記ロード命令のリードアドレスを検索キーとして前記ライトアクセス情報を検索し、前記リードアドレスに対応付けられているエンディアンと前記ロード命令を実行したプロセッサコアモデルのエンディアンとが一致するか否かに基づいて前記実行されたロード命令がデータ転送先のプロセッサコアモデルが転送データを読み出すロード命令であるかデータ転送元のプロセッサコアモデルが転送データを読み出すロード命令であるか否かを判定する、
ことを特徴とする請求項１に記載のソフトウェア開発システム。
【請求項３】
前記エンディアン依存コード検出部がエンディアン依存コードと判定したロード命令がリード対象とする転送前の転送データを求め、前記求めた転送前の転送データを前記データ転送先のプロセッサコアモデルに渡す変換処理部をさらに備える、
ことを特徴とする請求項１に記載のソフトウェア開発システム。
【請求項４】
前記２つのプロセッサコアは、前記バッファメモリを構成する各バイトに同一のアドレスを割り当て、
前記エンディアン依存コード検出部は、データ転送先のプロセッサコアモデルが転送データを読み出すロード命令のうちのリードサイズが複数バイトであるロード命令をエンディアン依存コードと判定する、
ことを特徴とする請求項３に記載のソフトウェア開発システム。
【請求項５】
前記変換処理部は、前記エンディアン依存コードと判定されたロード命令で指定されたリードアドレスから指定された複数バイトのデータを前記メモリモデルからデータ転送先のプロセッサコアモデルのエンディアン形式に従って読み出して、前記読み出した複数バイトのデータを構成する各バイトデータの順番を反転することによって前記転送前の転送データを求める、
ことを特徴とする請求項４に記載のソフトウェア開発システム。
【請求項６】
前記２つのプロセッサコアは、夫々、前記バッファメモリを構成する各ワードを構成する各バイトにエンディアン形式毎に異なるアドレスを割り当て、
前記エンディアン依存コード検出部は、データ転送先のプロセッサコアモデルが転送データを読み出すロード命令のうちのリードサイズがワード未満であるロード命令をエンディアン依存コードと判定する、
ことを特徴とする請求項３に記載のソフトウェア開発システム。
【請求項７】
前記変換処理部は、前記ロード命令で指定されたリードアドレスを転送元のプロセッサコアモデルが割り当てたアドレスに変換し、前記変換後のリードアドレスから前記データ転送先のプロセッサコアモデルのエンディアン形式に従って転送データを読み出すことによって前記転送前の転送データを求める、
ことを特徴とする請求項６に記載のソフトウェア開発システム。
【請求項８】
前記エンディアン依存コード毎の転送前の転送データを予め記録したエンディアン依存情報と、
前記エンディアン依存コード検出部がエンディアン依存コードと判定したロード命令のうち、前記変換処理部が求めた対応する転送前の転送データと前記エンディアン依存情報に記録されている転送前の転送データとを比較し、双方の転送データが一致したロード命令をエンディアン依存コードから除外するフィルタ部と、
をさらに備えることを特徴とする請求項４〜請求項７のうちの何れか一項に記載のソフトウェア開発システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ソフトウェア開発システムに関する。
【背景技術】
【０００２】
従来、複数のプロセッサコアを備え、プロセッサコア間のデータ通信（データ転送）をプロセッサコア間で共有されるメモリを介して行うコンピュータシステムがある。このようなシステムにおいて各プロセッサコアでエンディアン形式が異なる場合、プロセッサコア間の通信データ（転送データ）を授受させる際にエンディアン形式の違いに起因する転送データの転送前後の不一致が生じないようにプログラムを作成する必要がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−１１９９６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、エンディアン形式が異なる２つのプロセッサコアを備えるシステムを対象としたプログラムからエンディアン依存コードを検出するソフトウェア開発システムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、２つのプロセッサコアモデルと、メモリモデルと、エンディアン依存コード検出部と、エンディアン依存コード通知部と、を備える。２つのプロセッサコアモデルは、エンディアン形式が夫々異なる２つのプロセッサコアと、２つのプロセッサコア間の転送データを一時記憶するバッファメモリと、を備えるマルチプロセッサコアシステムで動作させる実行プログラムであるターゲットプログラムを実行して２つのプロセッサコアの動作を夫々模擬する。メモリモデルは、バッファメモリを模擬する。
エンディアン依存コード検出部は、２つのプロセッサコアモデルのうちのデータ転送先のプロセッサコアモデルがメモリモデルに書き込まれた転送データを読み出すロード命令を実行したとき、ロード命令のリードサイズに基づいてロード命令がエンディアン依存コードであるか否かを判定する。エンディアン依存コード通知部は、エンディアン依存コード検出部が前記ロード命令をエンディアン依存コードと判定した場合、ロード命令がエンディアン依存コードである旨を出力する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施の形態にかかるソフトウェア開発システムがプログラム開発対象とするコンピュータシステムの構成例を説明する図である。
【図２】図２は、データ転送を行う各方式の問題点を説明する図である。
【図３】図３は、本発明の第１の実施の形態のソフトウェア開発システムのハードウェア構成例を説明する図である。
【図４】図４は、第１の実施の形態のソフトウェア開発システムの機能構成を説明する図である。
【図５】図５は、ライトアクセス情報のデータ構造の一例を説明する図である。
【図６】図６は、ストア命令を実行した際の第１の実施の形態のソフトウェア開発システムの動作を説明するフローチャートである。
【図７】図７は、ライトアクセス情報のデータ構造の一例を説明する図である。
【図８】図８は、ロード命令を実行した際の第１の実施の形態のソフトウェア開発システムの動作を説明するフローチャートである。
【図９】図９は、第２の実施の形態のソフトウェア開発システムの機能構成を説明する図である。
【図１０】図１０は、ロード命令を実行した際の第２の実施の形態のソフトウェア開発システムの動作を説明するフローチャートである。
【図１１】図１１は、第３の実施の形態のソフトウェア開発システムの使用方法を説明するフローチャートである。
【図１２】図１２は、第３の実施の形態のソフトウェア開発システムの機能構成を説明する図である。
【図１３】図１３は、エンディアン依存情報のデータ構造の一例を説明する図である。
【図１４】図１４は、１回目のシミュレーションにおいて、ロード命令を実行した際の第３の実施の形態のソフトウェア開発システムの動作を説明するフローチャートである。
【図１５】図１５は、２回目以降のシミュレーションにおいて、ロード命令を実行した際の第３の実施の形態のソフトウェア開発システムの動作を説明するフローチャートである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、本発明の実施の形態にかかるソフトウェア開発システムを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【０００８】
（第１の実施の形態）
図１は、本発明の第１の実施の形態にかかるソフトウェア開発システムがプログラム開発対象とするコンピュータシステム（以下、単にターゲットシステム）の構成例を説明する図である。
【０００９】
図示するように、ターゲットシステム１００は、２つのプロセッサコア１、２と、ＲＡＭ（Random  Access  Memory）３と、を備えている。夫々の構成要素は、バスを介して互いに接続されている。
【００１０】
プロセッサコア１とプロセッサコア２とは、採用しているエンディアン形式が互いに異なっている。この例では、プロセッサコア１はビッグエンディアン形式、プロセッサコア２はリトルエンディアン形式を採用したものとなっている。
【００１１】
ＲＡＭ３には、ターゲットシステム１００を動作させるためのコンパイル済みの実行プログラムであるユーザプログラム３１がロードされており、プロセッサコア１およびプロセッサコア２は、該ユーザプログラム３１を実行することによってターゲットシステム１００全体の動作を制御する。また、ＲＡＭ３は、プロセッサコア１、２が使用するワークエリアが確保され、そのうちの一部がプロセッサコア１、２間の通信データ（転送データ）が置かれる通信データ領域３２として使用される。プロセッサコア１およびプロセッサコア２は、通信データ領域３２をバッファメモリとして用いて相互にデータ通信（データ転送）を実行する。すなわち、転送元のプロセッサコアは、転送データを通信データ領域３２に一時記憶させ、転送先のプロセッサコアは該転送データを通信データ領域３２から読み出す。
【００１２】
エンディアン形式が異なるプロセッサコア間でメモリを介したデータ転送を行う方式として、主に、バイト不変方式とワード不変方式とがある。図２は、データ転送を行う各方式の特徴について説明する図である。
【００１３】
バイト不変方式は、リトルエンディアン形式のプロセッサコアとビッグエンディアン形式のプロセッサコアで、メモリの各バイトのアドレスが同一になるようにしたものである。多バイト長のデータをメモリからロード・ストアするときは、メモリの各バイトに割り当てられたアドレスに基づいて、そのデータを構成するバイトがエンディアン形式に応じた順番に配列される。
【００１４】
図２（ａ）に示すように、１ワードは４バイトであるとし、例えばアドレス“４Ｎ”、“４Ｎ＋１”、“４Ｎ＋２”、“４Ｎ＋３”にデータ“0x01”、“0x23”、“0x45”、“0x67”が夫々格納されているとする。１バイト長のデータを読み出す際には、エンディアン形式が相違しても同一のバイトデータを読み出すことができる。しかしながら、多バイト長のデータを読み出す場合、読み出されるデータが構成するバイトデータの順番がエンディアン形式によって異なってしまうという問題がある。
【００１５】
例えば、ビッグエンディアン形式によれば、アドレスの先頭がデータのＭＳＢ（Most  Significant  Byte）となるようにロード・ストアするので、アドレス“４Ｎ”から１ワード読み出す場合、データ“0x01234567”を読み出すことができる。一方、リトルエンディアン形式によれば、アドレスの先頭がデータのＬＳＢ（Least  Significant  Byte）となるようにロード・ストアするので、ビッグエンディアン形式の場合の読み出しデータの順番を反転したデータ“0x67452301”を読み出すことになる。２バイト長のデータを読み出す場合も、１ワード長のデータを読み出す場合と同様に、エンディアン形式が変わると読み出しデータの順番の反転が起きる。すなわち、バイト不変方式によれば、異なるエンディアン形式のプロセッサコアが書き込んだ多バイト長のデータを読み出すと、順番が反転したデータを読み出してしまう。
【００１６】
ワード不変方式は、リトルエンディアン形式のプロセッサコアとビッグエンディアン形式のプロセッサコアとで１ワードを構成する各バイトのアドレス割り当て（アドレッシング）が異なり、一方のエンディアン形式でアドレスＡが割り当てられたバイトは、他方のエンディアン形式ではアドレスＡxor３が割り当てられるようにしたものである。メモリにアラインされたワードを構成するバイトデータは、エンディアン形式に関係なく、必ずメモリ上の同じバイトの並びで構成される。
【００１７】
図２（ｂ）に示すように、あるワードサイズのメモリに先頭位置からデータ“0x67452301”が格納されているとする。ワード不変方式に従うリトルエンディアン形式のプロセッサコアは、このメモリ領域に対して先頭位置から“４Ｎ”、“４Ｎ＋１”、“４Ｎ＋２”、“４Ｎ＋３”というように昇順にアドレス割り当てを行う。したがって、このメモリ領域から１ワードをロードした場合、データ“0x67452301”を読み出すことになる。一方、ワード不変方式に従うビッグエンディアン形式のプロセッサコアは、先頭位置から“４Ｎ＋３”、“４Ｎ＋２”、“４Ｎ＋１”、“４Ｎ”のように降順にアドレス割り当てを行う。したがって、このメモリ領域から１ワードをロードした場合、リトルエンディアン形式の場合と同様のデータ“0x67452301”を読み出すことができる。しかしながら、ワード不変方式によれば、エンディアン形式によってアドレス割り当てが異なるので、１バイト長のデータや２バイト長のデータのように１ワードより小さい単位でアクセスする場合、エンディアン形式によって異なったデータに対してアクセスすることになってしまうという問題点がある。
【００１８】
このように、バイト不変方式およびワード不変方式のどちらの方式が採用されている場合においても、プロセッサコア１、２間で転送データを授受する際、エンディアン形式の違いに起因して転送データが転送前後で相違し、意図したデータを授受できないケースが生じる。本発明の第１の実施の形態では、ターゲットシステム１００がバイト不変方式を採用しているものとし、ユーザプログラム３１を模擬実行（シミュレート）することによって、ユーザプログラム３１から転送前後の転送データに相違を生じせしめる命令（エンディアン依存コード）を検出する。
【００１９】
図３は、本発明の第１の実施の形態のソフトウェア開発システムのハードウェア構成例を説明する図である。図示するように、ソフトウェア開発システム２００は、ＣＰＵ（Central  Processing  Unit）４、ＲＡＭ５、ＲＯＭ６、入力装置７および表示装置８を備える。ＣＰＵ４、ＲＡＭ５、ＲＯＭ６、入力装置７および表示装置８は、バスラインを介して夫々接続されている。
【００２０】
表示装置８は、液晶モニタなどの表示装置であり、ＣＰＵ４からの指示に基づいて、操作画面などのユーザに対する出力情報を表示する。入力装置７は、マウスやキーボードを備えて構成され、ユーザからのソフトウェア開発システム２００の操作が入力される。入力装置７へ入力された操作情報は、ＣＰＵ４へ送られる。
【００２１】
ＲＯＭ６は、模擬実行対象のユーザプログラム３１であるターゲットプログラム６１と、ターゲットプログラム６１からエンディアン依存箇所を検出するためのコンピュータプログラムであるソフトウェア開発プログラム６２と、が格納されている。
【００２２】
ＣＰＵ４は、ユーザによる入力装置７からの指示入力に従って、ＲＯＭ６内からソフトウェア開発プログラム６２を読み出してＲＡＭ５内のプログラム格納領域に展開して実行することにより、次に説明するエンディアン依存箇所を検出するための各種機能を実現する。
【００２３】
図４は、第１の実施の形態のソフトウェア開発システム２００の機能構成を説明する図である。図示するように、ソフトウェア開発システム２００は、プロセッサコアモデル２１０、プロセッサコアモデル２２０、メモリアクセス処理部２３０、メモリアクセス処理部２４０、メモリモデル２５０およびエンディアン依存コード検出部２６０を備えている。
【００２４】
プロセッサコアモデル２１０、２２０はプロセッサコア１、２の機能を夫々モデル化したものであって、夫々プロセッサコア１、２の動作を模擬することができる。したがって、ここではプロセッサコアモデル２１０はビッグエンディアン形式、プロセッサコアモデル２２０はリトルエンディアン形式に従ったメモリアクセスを行う。また、メモリモデル２５０はＲＡＭ３をモデル化したものである。メモリモデル２５０には、ターゲットプログラム６１がロードされており、プロセッサコアモデル２１０、２２０は夫々ターゲットプログラム６１に含まれる対応する命令を夫々のプログラムカウンタに基づいてフェッチして実行する。メモリモデル２５０には、プロセッサコアモデル２１０、２２０がシミュレーション実行時に使用するワークエリアが確保され、そのうちの一部を通信データ領域（図中符号２５１）として用いる。なお、プロセッサコアモデル２１０、２２０、メモリモデル２５０は、ターゲットシステム１００の実機を用意するなどによってハードウェアにより実現するようにしてもよい。
【００２５】
メモリアクセス処理部２３０は、プロセッサコアモデル２１０とメモリモデル２５０との間に介在し、プロセッサコアモデル２１０はメモリアクセス処理部２３０を介してメモリモデル２５０に対するメモリアクセスを行う。具体的には、メモリアクセス処理部２３０は、プロセッサコアモデル２１０がロード・ストア命令実行時に発行するライトデータ（ストア命令実行時のみ）、アクセス先アドレスおよびアクセス対象のデータバイト長（以下、メモリアクセス要求）を受け付け、メモリモデル２５０に対して前記受け付けたメモリアクセス要求に応じたリードライトを、バイト不変方式およびビッグエンディアン形式に従って実行する。また、メモリアクセス処理部２３０は、受け付けたメモリアクセス要求の内容とメモリアクセス要求発行元のプロセッサコアモデルのエンディアン形式“ビッグエンディアン”とをエンディアン依存コード検出部２６０に通知する。
【００２６】
前述のように、バイト不変方式によれば、エンディアン形式が異なるプロセッサコアからデータが書き込まれたアドレスから多バイトの転送データを読み出した際、読み出した多バイトの転送データを構成する各バイトの順番が反転する。メモリアクセス処理部２３０は、プロセッサコアモデル２１０がプロセッサコアモデル２２０からの転送データを読み出したとき、該転送データを用いてターゲットプログラム６１のシミュレーションを意図したとおりに続行できるように、読み出した多バイトの転送データの順番を反転させることによって転送前の状態の転送データを求める変換処理部として機能する。メモリアクセス処理部２３０は、変換により求めたデータをプロセッサコアモデル２１０に渡す。
【００２７】
メモリアクセス処理部２４０は、プロセッサコアモデル２２０とメモリモデル２５０との間に介在し、プロセッサコアモデル２２０からのメモリアクセス要求を受け付け、メモリモデル２５０に対して前記受け付けたメモリアクセス要求に応じたリードライトをバイト不変方式およびリトルエンディアン形式に従って実行する。また、メモリアクセス処理部２４０は、受け付けたメモリアクセス要求の内容とメモリアクセス要求発行元のプロセッサコアモデルのエンディアン形式“リトルエンディアン”とをエンディアン依存コード検出部２６０に通知する。また、メモリアクセス処理部２４０は、多バイトの転送データを読み出したとき、該転送データの順番を反転させることによって転送前の状態の転送データを求める変換処理部として機能する。
【００２８】
エンディアン依存コード検出部２６０は、メモリアクセス処理部２３０、２４０からの通知に基づいてエンディアン依存コードを検出する。より詳しくは、エンディアン依存コード検出部２６０は、ライトデータ毎に書き込み先アドレスと書き込み元のプロセッサコアモデルのエンディアン形式とを記録したライトアクセス情報２６１を管理し、ライトアクセス情報２６１とロード命令のリードサイズとに基づいて該ロード命令がエンディアン依存コードであるか否かを判定する。エンディアン依存コード検出部２６０は、エンディアン依存コードを検出したとき、メモリアクセス処理部２３０、２４０のうちの対応するメモリアクセス処理部にエンディアン依存コードを検出した旨を通知する。
【００２９】
図５は、ライトアクセス情報２６１のデータ構造の一例を説明する図である。図示するように、ライトアクセス情報２６１には、バイト毎にアドレスと書き込み元のプロセッサコアモデルのエンディアン形式とが記録されている。
【００３０】
メモリアクセス処理部２３０、２４０は、さらに、エンディアン依存コード検出部２６０からエンディアン依存コードを検出した旨の通知を受信すると、対応するロード命令をエンディアン依存コードとしてユーザに通知するエンディアン依存コード通知部として機能する。ここでは、ユーザへの通知の一例として、レポート出力することとする。出力されたレポートは、表示装置８に表示するようにしてもよいし、ＲＡＭ５や図示しない外部記憶装置にファイルとして格納するようにしてもよい。
【００３１】
次に、本発明の第１の実施の形態のソフトウェア開発システム２００の動作を説明する。シミュレーションが開始されると、プロセッサコアモデル２１０、２２０は、ターゲットプログラム６１から命令を順次フェッチし、フェッチした命令をデコード、実行する。図６は、ストア命令を実行した際のソフトウェア開発システム２００の動作を説明するフローチャートである。なお、ここでは、一例として、プロセッサコアモデル２１０がストア命令の実行元である場合について説明する。
【００３２】
図６に示すように、まず、プロセッサコアモデル２１０は、ストア命令を実行すると、ライトアドレス、データバイト長およびライトデータからなるライトアクセス要求をメモリアクセス処理部２３０へ渡す（ステップＳ１）。メモリアクセス処理部２３０は、メモリモデル２５０におけるライトアクセス要求で指定されたライトアドレスへライトデータを書き込む（ステップＳ２）。そして、メモリアクセス処理部２３０は、プロセッサコアモデル２１０のエンディアン形式“ＢＥ（ビッグエンディアン）”、ライトアドレス、データバイト長をエンディアン依存コード検出部２６０に通知する（ステップＳ３）。エンディアン依存コード検出部２６０は、ライトアクセス情報２６１に前記渡されたライトアドレスからデータバイト長分の範囲のアドレスを“ＢＥ”とする記録を書き込んでライトアクセス情報２６１を更新し（ステップＳ４）、メモリモデル２５０にデータを書き込む動作が終了する。
【００３３】
例えば、プロセッサコアモデル２１０がライトアドレス“Ｘ”、データバイト長“２”、ライトデータ“0x1234”からなるライトアクセス要求を発行したとすると、エンディアン依存コード検出部２６０は、図７に示すライトアクセス情報２６１の例のように、アドレスが“Ｘ”、エンディアン形式が“ＢＥ”であることを示すエントリと、アドレスが“Ｘ＋１”、エンディアン形式が“ＢＥ”であることを示すエントリとをライトアクセス情報２６１に登録する。なお、すでにアドレスが同一のエントリが登録されていたとき、エンディアン依存コード検出部２６０は、該当するアドレスのエントリを上書きする。
【００３４】
なお、ストア命令によるライトデータは、通信データ領域２５１へ書き込まれるプロセッサコアモデル２２０への転送データだけでなく、プロセッサコアモデル２１０が使用する一時データなどを含む。ライトアクセス情報２６１には、転送データに関するエントリだけでなく、転送されない一時データに関するエントリも登録される。
【００３５】
図８は、ロード命令を実行した際のソフトウェア開発システム２００の動作を説明するフローチャートである。なお、ここでは、一例として、プロセッサコアモデル２２０がロード命令の実行元である場合について説明する。
【００３６】
まず、プロセッサコアモデル２２０は、ロード命令を実行すると、リードアドレス、データバイト長からなるリードアクセス要求をメモリアクセス処理部２４０へ渡す（ステップＳ１１）。メモリアクセス処理部２４０は、メモリモデル２５０におけるリードアドレスにて指定された位置からデータバイト長にて指定されたデータを読み出す（ステップＳ１２）。また、メモリアクセス処理部２４０は、プロセッサコアモデル２２０のエンディアン形式“ＬＥ（リトルエンディアン）”、リードアドレス、データバイト長をエンディアン依存コード検出部２６０に通知する（ステップＳ１３）。
【００３７】
エンディアン依存コード検出部２６０は、指定されたリードアドレスを検索キーとしてライトアクセス情報２６１を検索することによって、リードアドレスがライトアクセス情報２６１に登録済みであるか否かを判定する（ステップＳ１４）。ここで、データバイト長が複数バイトである場合、エンディアン依存コード検出部２６０は、読み出し先の１バイト毎のアドレスを検索キーとして、リードデータを構成するバイトデータ毎に検索する。そして、エンディアン依存コード検出部２６０は、複数バイトの読み出し先のアドレスが１つでも登録済みであれば、登録済み（ステップＳ１４、Ｙｅｓ）と判定し、どのアドレスも登録されていない場合、未登録（ステップＳ１４、Ｎｏ）と判定する。
【００３８】
ライトアクセス情報２６１に登録済みでなかった場合（ステップＳ１４、Ｎｏ）、メモリアクセス処理部２４０は、リードデータをプロセッサコアモデル２２０へ渡し（ステップＳ１５）、メモリモデル２５０からの読み出しにかかる動作が終了となる。
【００３９】
ライトアクセス情報２６１に登録済みであった場合（ステップＳ１４、Ｙｅｓ）、エンディアン依存コード検出部２６０は、リードアクセス要求を発行したプロセッサコアモデル２２０のエンディアン形式（ここではリトルエンディアン）と、登録されているエンディアン形式とが一致するか否かを判定する（ステップＳ１６）。一致した場合（ステップＳ１６、Ｙｅｓ）、実行したロード命令は一時データあるいはプロセッサコアモデル２２０が転送元の転送データをプロセッサコアモデル２２０自身でリードする命令であり、エンディアン依存コードではないということになるので、ステップＳ１５へ移行する。
【００４０】
リードアクセスを要求したプロセッサコアモデル２２０のエンディアン形式と、登録されているエンディアン形式とが一致しなかった場合（ステップＳ１６、Ｎｏ）、ロード命令の読み出し対象は、プロセッサコアモデル２１０が転送元となって通信データ領域２５１に書き込まれた転送データであることになる。エンディアン依存コード検出部２６０は、実行したロード命令の読み出し対象のデータバイト長が１バイトであるか否かをさらに判定する（ステップＳ１７）。データバイト長が１バイトであった場合（ステップＳ１７、Ｙｅｓ）、ステップＳ１５へ移行する。
【００４１】
データバイト長が１バイトではなかった場合（ステップＳ１７、Ｎｏ）、エンディアン依存コード検出部２６０は、ロード命令はエンディアン依存コードであると判定し、エンディアン依存コードであることをメモリアクセス処理部２４０へ通知する（ステップＳ１８）。該通知を受信すると、メモリアクセス処理部２４０は、リードデータの順番を反転させ（ステップＳ１９）、メモリアクセス処理部２４０は、反転後のリードデータをプロセッサコアモデル２２０へ渡す（ステップＳ２０）。また、メモリアクセス処理部２４０は、実行したロード命令がエンディアン依存コードであることをレポート出力し（ステップＳ２１）、ロード命令の実行処理が終了する。
【００４２】
例えば、プロセッサコアモデル２２０がリードアドレス“Ｘ”、データバイト長“２”からなるリードアクセス要求を発行したとすると、メモリアクセス処理部２４０は、リードアドレス“Ｘ”からデータ“0x3412”を読み出す。データ“0x3412”は、転送前のデータ“0x1234”と相違しており、プロセッサコアモデル２２０がこのデータを用いてシミュレーションを続行するとエラーとなる。エンディアン依存コード検出部２６０は、図７に示すライトアクセス情報２６１をアドレス“Ｘ”および“Ｘ＋１”を検索キーとして検索する。ライトアクセス情報２６１には、双方のアドレスにプロセッサコアモデル２２０のエンディアン形式と異なるビッグエンディアンが登録されており、かつデータバイト長が“２”であるので、エンディアン依存コード検出部２６０は、対応するロード命令をエンディアン依存コードとして検出する。メモリアクセス処理部２４０は、データ“0x3412”の順番を入れ替えて転送前のデータ“0x1234”を求め、プロセッサコアモデル２２０にリードデータとして“0x1234”を渡す。プロセッサコアモデル２２０は、データ“0x1234”を用いて意図したとおりにシミュレーションを続行することができる。
【００４３】
以上述べたように、本発明の第１の実施の形態によれば、エンディアン形式が夫々異なる２つのプロセッサコアの動作を模擬する２つのプロセッサコア１、２の動作を夫々模擬する２つのプロセッサコアモデル２１０、２２０と、プロセッサコア１、２間のデータ転送に用いられるＲＡＭ３を模擬するメモリモデル２５０と、２つのプロセッサコアモデル２１０、２２０のうちのデータ転送先のプロセッサコアモデルがメモリモデル２５０に書き込まれた転送データを読み出すロード命令を実行したとき、ロード命令のリードサイズに基づいてロード命令がエンディアン依存コードであるか否かを判定するエンディアン依存コード検出部２６０と、エンディアン依存コード検出部２６０がロード命令をエンディアン依存コードと判定した場合、該ロード命令がエンディアン依存コードである旨をユーザに通知するメモリアクセス処理部２３０、２４０（エンディアン依存コード通知部）と、を備えるように構成したので、エンディアン形式が異なる２つのプロセッサコアを備えるターゲットシステム１００を対象としたプログラムからエンディアン依存コードを検出することができるようになる。
【００４４】
メモリアクセス処理部（変換処理部）２３０、２４０は、エンディアン依存コード検出部２６０がロード命令をエンディアン依存コードと判定した場合、対応する転送前の転送データを求め、前記求めた転送前の転送データをデータ転送先のプロセッサコアモデルに渡すように構成したので、転送先のプロセッサコアモデルは、意図したデータを読み出すことができるので、エンディアン依存コードを実行して該エンディアン依存コードが検出された後でも、意図した通りにシミュレーションを続行することができる。
【００４５】
エンディアン依存コード検出部２６０は、データ転送先のプロセッサコアモデルが転送データを読み出すロード命令のうちのリードサイズが複数バイトであるロード命令をエンディアン依存コードと判定するように構成したので、ターゲットシステム１００がバイト不変方式を採用する場合にエンディアン形式が異なる２つのプロセッサコアを備えるターゲットシステム１００を対象としたプログラムからエンディアン依存コードを検出することができる。
【００４６】
なお、メモリアクセス処理部２３０、２４０は、エンディアン依存コードと判定されたロード命令で指定されたリードアドレスから指定された複数バイトのデータをデータ転送先のプロセッサコアモデルのエンディアン形式に従って読み出して、読み出した複数バイトのデータを構成する各バイトデータの順番を反転することによって転送前の転送データを求めるように構成した。
【００４７】
（第２の実施の形態）
第２の実施の形態では、ワード不変方式を採用したターゲットシステム１００で動作させるプログラムからエンディアン依存コードを検出する。第２の実施の形態のソフトウェア開発システムのハードウェア構成は第１の実施の形態と同様であるので、ここでは説明を省略する。なお、第２の実施の形態のソフトウェア開発システムに符号３００を付して第１の実施の形態と区別する。
【００４８】
図９は、第２の実施の形態のソフトウェア開発システム３００の機能構成を説明する図である。なお、ここでは、第１の実施の形態と等しい要素には同一の符号を付し、詳細な説明を省略する。
【００４９】
図９に示すように、ソフトウェア開発システム３００は、プロセッサコアモデル２１０、プロセッサコアモデル２２０、メモリアクセス処理部３３０、メモリアクセス処理部３４０、メモリモデル２５０およびエンディアン依存コード検出部３６０を備えている。メモリモデル２５０には、ターゲットプログラム６１がロードされている。また、メモリモデル２５０には、プロセッサコアモデル２１０、２２０がデータ転送のバッファとして用いる通信データ領域２５１が確保されている。なお、プロセッサコアモデル２１０、２２０、メモリモデル２５０は、ターゲットシステム１００の実機を用意するなどによってハードウェアにより実現するようにしてもよい。
【００５０】
メモリアクセス処理部３３０は、プロセッサコアモデル２１０とメモリモデル２５０との間に介在し、プロセッサコアモデル２１０からのメモリアクセス要求を受け付けたとき、メモリモデル２５０に対して前記受け付けたメモリアクセス要求に応じたリードライトをワード不変方式およびビッグエンディアン形式に従って実行する。また、メモリアクセス処理部３３０は、受け付けたメモリアクセス要求の内容とメモリアクセス要求発行元のプロセッサコアモデルのエンディアン形式“ビッグエンディアン”とをエンディアン依存コード検出部３６０に通知する。
【００５１】
前述のように、ワード不変方式によれば、１ワードを構成する領域内のアドレス割り当てがエンディアン形式で異なるので、エンディアン形式が異なるプロセッサコアからデータが書き込まれたアドレスからワードよりも小さい単位のデータを読み出そうとすると、意図したデータを読み出すことができない。メモリアクセス処理部３３０は、プロセッサコアモデル２１０がリードデータを用いてターゲットプログラム６１のシミュレーションを意図したとおりに続行できるように、プロセッサコアモデル２２０から書き込まれたアドレスから１ワードに満たないデータバイト長のデータを読み出す際、リードアドレスを変換する変換処理部として機能する。
【００５２】
メモリアクセス処理部３４０は、プロセッサコアモデル２２０とメモリモデル２５０との間に介在し、プロセッサコアモデル２２０からのメモリアクセス要求を受け付け、メモリモデル２５０に対して前記受け付けたメモリアクセス要求に応じたリードライトをワード不変方式およびリトルエンディアン形式に従って実行する。また、メモリアクセス処理部３４０は、受け付けたメモリアクセス要求の内容とメモリアクセス要求発行元のプロセッサコアモデルのエンディアン形式“リトルエンディアン”とをエンディアン依存コード検出部３６０に通知する。また、メモリアクセス処理部３４０は、プロセッサコアモデル２２０から書き込まれたアドレスから１ワードに満たないデータバイト長のデータを読み出す際、リードアドレスを変換する変換処理部として機能する。
【００５３】
エンディアン依存コード検出部３６０は、メモリアクセス処理部３３０、３４０からの通知に基づいてエンディアン依存コードを検出する。具体的には、エンディアン依存コード検出部３６０は、ライトアクセス情報２６１を管理し、ライトアクセス情報２６１とロード命令のリードサイズとに基づいて該ロード命令がエンディアン依存コードであるか否かを判定することによってエンディアン依存コードを検出する。エンディアン依存コード検出部３６０は、エンディアン依存コードを検出したとき、対応するメモリアクセス処理部にエンディアン依存コードを検出した旨を通知する。
【００５４】
メモリアクセス処理部３３０、３４０は、さらに、エンディアン依存コード検出部３６０からエンディアン依存コードを検出した旨の通知を受信すると、対応するロード命令をエンディアン依存コードとしてユーザに通知するエンディアン依存コード通知部として機能する。
【００５５】
次に、第２の実施の形態のソフトウェア開発システム３００の動作を説明する。シミュレーションが開始されると、夫々のプロセッサコアモデル２１０、２２０は、ターゲットプログラム６１から命令を順次フェッチして、デコード、実行する。
【００５６】
プロセッサコアモデル２１０、２２０がストア命令を実行した際、第２の実施の形態の各構成要素は第１の実施の形態の同名の構成要素と同じ動作を実行するので、説明を省略する。
【００５７】
図１０は、ロード命令を実行した際のソフトウェア開発システム３００の動作を説明するフローチャートである。なお、プロセッサコアモデル２２０がロード命令の実行元であるとして説明する。
【００５８】
まず、プロセッサコアモデル２２０は、ロード命令を実行すると、リードアドレス、データバイト長からなるリードアクセス要求をメモリアクセス処理部３４０へ渡す（ステップＳ３１）。メモリアクセス処理部３４０は、メモリモデル２５０におけるリードアドレスにて指定された位置からデータバイト長にて指定されたデータを読み出す（ステップＳ３２）。また、メモリアクセス処理部３４０は、プロセッサコアモデル２２０のエンディアン形式“ＬＥ”、リードアドレス、データバイト長をエンディアン依存コード検出部３６０に通知する（ステップＳ３３）。
【００５９】
エンディアン依存コード検出部３６０は、ライトアクセス情報２６１を指定されたリードアドレスを検索キーとして検索することによって、読み出し先のアドレスがライトアクセス情報２６１に登録済みであるか否かを判定する（ステップＳ３４）。ここで、データバイト長が複数バイトである場合、第１の実施の形態と同様に、エンディアン依存コード検出部３６０は、読み出し先の１バイト毎のアドレスを検索キーとして、リードデータを構成するバイトデータ毎に検索する。
【００６０】
ライトアクセス情報２６１に登録済みでなかった場合（ステップＳ３４、Ｎｏ）、メモリアクセス処理部３４０は、リードデータをプロセッサコアモデル２２０へ渡し（ステップＳ３５）、ロード命令を実行した際の動作が終了となる。
【００６１】
ライトアクセス情報２６１に登録済みであった場合（ステップＳ３４、Ｙｅｓ）、エンディアン依存コード検出部３６０は、リードアクセス要求を発行したプロセッサコアモデル２２０のエンディアン形式“リトルエンディアン”と、登録されているエンディアン形式とが一致するか否かを判定する（ステップＳ３６）。一致した場合（ステップＳ３６、Ｙｅｓ）、ステップＳ３５へ移行する。
【００６２】
リードアクセスを要求したプロセッサコアモデル２２０のエンディアン形式と、登録されているエンディアン形式とが一致しなかった場合（ステップＳ３６、Ｎｏ）、エンディアン依存コード検出部３６０は、データバイト長が１ワードであるか否かをさらに判定する（ステップＳ３７）。データバイト長が１ワードであった場合（ステップＳ３７、Ｙｅｓ）、ロード命令はエンディアン依存コードではないので、ステップＳ３５へ移行する。
【００６３】
データバイト長が１ワードではなかった場合（ステップＳ３７、Ｎｏ）、エンディアン依存コード検出部３６０は、エンディアン依存コードであると判定し、エンディアン依存コードであることをメモリアクセス処理部３４０へ通知する（ステップＳ３８）。メモリアクセス処理部３４０が該通知を受信すると、リードアドレスの下位２ビットを反転させる（ステップＳ３９）。メモリアクセス処理部３４０は、変換後のリードアドレスから指定されたデータバイト長のデータを読み出して、該読み出したリードデータをプロセッサコアモデル２２０へ渡す（ステップＳ４０）。また、メモリアクセス処理部２４０は、ターゲットプログラム６１におけるリードアクセス要求の元となったロード命令がエンディアン依存コードであることをレポート出力し（ステップＳ４１）、ロード命令を実行した際の動作が終了となる。
【００６４】
例えば、プロセッサコアモデル２１０がライトアドレス“Ｙ”にデータ“0x12345678”を書き込み済みであるとし、プロセッサコアモデル２２０がリードアドレス“Ｙ”、データバイト長“１”を含むリードアクセス要求を発行したとすると、メモリアクセス処理部３４０は、ライトアドレス“Ｙ”からデータ“0x21”を読み出す。データ“0x21”は、プロセッサコアモデル２２０が意図したデータではなく、プロセッサコアモデル２２０がこのデータを用いてシミュレーションを続行するとエラーとなる。エンディアン依存コード検出部３６０は、リードアクセス要求を発行するに至ったロード命令をエンディアン依存コードとして検出し、メモリアクセス処理部３４０は、リードアドレス“Ｙ”の下位２ビットを反転させたアドレス“Ｙ＾３”からデータ“0x78”を読み出し、読み出したデータ“0x78”をプロセッサコアモデル２２０にリードデータとして渡す。プロセッサコアモデル２２０は、データ“0x78”を用いて意図したとおりにシミュレーションを続行することができる。
【００６５】
以上述べたように、本発明の第２の実施の形態によれば、エンディアン依存コード検出部３６０は、データ転送先のプロセッサコアモデルが転送データを読み出すロード命令のうちのリードサイズがワード未満であるロード命令をエンディアン依存コードと判定するように構成したので、ターゲットシステム１００がワード不変方式を採用する場合にエンディアン形式が異なる２つのプロセッサコアを備えるターゲットシステム１００を対象としたプログラムからエンディアン依存コードを検出することができる。
【００６６】
また、メモリアクセス処理部３３０、３４０は、ロード命令で指定されたリードアドレスを転送元のプロセッサコアモデルが割り当てたアドレスに変換し、変換後のリードアドレスからデータ転送先のプロセッサコアモデルのエンディアン形式に従って転送データを読み出すように構成したので、エンディアン依存コードを実行して該エンディアン依存コードが検出された後でも、意図した通りにシミュレーションを続行することができる。
【００６７】
（第３の実施の形態）
まず、第３の実施の形態のソフトウェア開発システムの基本的な使用方法を説明する。図１１は、第３の実施の形態のソフトウェア開発システムの使用方法を説明するフローチャートである。なお、第３の実施の形態のソフトウェア開発システムに符号４００を付して、第１および第２の実施の形態と区別する。
【００６８】
図１１に示すように、まず、ユーザは、ターゲットプログラム６１をソフトウェア開発システム４００上でシミュレートして、ターゲットプログラム６１に含まれるエンディアン依存コードを全て検出する（ステップＳ５１）。ここで、ソフトウェア開発システム４００は、ステップＳ５１で検出したエンディアン依存コード実行時のリードアドレスとリードデータとを記録しておく。
【００６９】
そして、ユーザは、検出されたエンディアン依存コードを修正し（ステップＳ５２）、ソフトウェア開発システム４００を用いて再度エンディアン依存コードの検出を実行する（ステップＳ５３）。ステップＳ５３では、ソフトウェア開発システム４００は、記録されているリードアドレスとリードデータとを用いて、ステップＳ５２にて修正されていないエンディアン依存コードのみをフィルタリングして検出する。
【００７０】
ユーザは、エンディアン依存コードが検出されたか否かを判断し（ステップＳ５４）、エンディアン依存コードが検出された場合（ステップＳ５４、Ｙｅｓ）、ステップＳ５２へ移行してさらに修正を行う。エンディアン依存コードが検出されなかった場合（ステップＳ５４、Ｎｏ）、エンディアン依存コードを全て修正したとしてエンディアン依存コードの修正作業を終了する。
【００７１】
図１２は、上記説明した使用方法を実行できるようにするための第３の実施の形態のソフトウェア開発システム４００の機能構成を説明する図である。なお、ここでは、ターゲットシステム１００は、第１の実施の形態のケースと同様、バイト不変方式を採用したものであるとして説明する。ソフトウェア開発システム４００のハードウェア構成は第１の実施の形態と同じであるので、説明を省略する。また、第１の実施の形態と等しい機能構成要素には同一の符号を付し、詳細な説明を省略する。
【００７２】
図１２に示すように、ソフトウェア開発システム４００は、プロセッサコアモデル２１０、プロセッサコアモデル２２０、メモリアクセス処理部４３０、メモリアクセス処理部４４０、メモリモデル２５０およびエンディアン依存コード検出部２６０を備えている。メモリモデル２５０には、ターゲットプログラム６１がロードされている。また、メモリモデル２５０には、プロセッサコアモデル２１０、２２０がデータ転送のバッファとして用いる通信データ領域２５１が確保されている。また、エンディアン依存コード検出部２６０はライトアクセス情報２６１を備えている。なお、プロセッサコアモデル２１０、２２０、メモリモデル２５０は、ターゲットシステム１００の実機を用意するなどによってハードウェアにより実現するようにしてもよい。
【００７３】
メモリアクセス処理部４３０は、プロセッサコアモデル２１０とメモリモデル２５０との間に介在し、プロセッサコアモデル２１０はメモリアクセス処理部４３０を介してメモリモデル２５０に対するメモリアクセスを行う。具体的には、メモリアクセス処理部４３０は、プロセッサコアモデル２１０からのメモリアクセス要求を受け付け、メモリモデル２５０に対して前記受け付けたメモリアクセス要求に応じたリードライトを、バイト不変方式およびリトルエンディアン形式に従って実行する。また、メモリアクセス処理部４３０は、受け付けたメモリアクセス要求の内容とメモリアクセス要求発行元のプロセッサコアモデルのエンディアン形式“ビッグエンディアン”とをエンディアン依存コード検出部２６０に通知する。また、メモリアクセス処理部４３０は、プロセッサコアモデル２１０がプロセッサコアモデル２２０からの転送データを読み出したとき、読み出した多バイトの転送データの順番を反転させることによって転送前の状態の転送データを求める変換処理部として機能する。メモリアクセス処理部４３０は、変換により求めたデータをプロセッサコアモデル２１０に渡す。
【００７４】
また、メモリアクセス処理部４３０は、エンディアン依存情報４３１と、フィルタ部４３２とをさらに備えている。エンディアン依存情報４３１は、エンディアン依存コードであると判定されたロード命令にかかるリードアドレスとバイト入れ替えにより順番が入れ替えられたリードデータとを対にして時系列順に蓄積記録した情報である。
【００７５】
図１３は、エンディアン依存情報４３１のデータ構造の一例を説明する図である。図示するように、エンディアン依存情報４３１は、アドレスと修正されたリードデータとからなるエントリがエンディアン依存コードが検出された順番で登録されたテーブル形式のデータ構造を備えている。各エントリのＩＤは、登録された順番を示している。なお、エンディアン依存情報４３１は、各エントリを時系列順に管理することができればよいので、ＩＤの代わりに時間（サイクルタイム）を用いるようにしてもよい。
【００７６】
２回目以降のシミュレーションでは、エンディアン依存コード検出部２６０は、ユーザによって修正がなされたか否かに関わらず、１回目のシミュレーションにおいてエンディアン依存コードとして検出したロード命令を１回目と同一の順番でエンディアン依存コードとして検出する。フィルタ部４３２は、エンディアン依存コード検出部２６０から２回目以降のシミュレーション時にエンディアン依存コードを検出した旨が通知されると、エンディアン依存コードとして検出した際のリードデータとエンディアン依存情報４３１に登録されている対応するエントリに記録されている修正されたリードデータとの比較に基づいて、既にユーザによって修正されたエンディアン依存コードを通知対象から除外する。メモリアクセス処理部４３０は、フィルタ部４３２による除外により残ったエンディアン依存コードをレポート出力する。
【００７７】
メモリアクセス処理部４４０は、プロセッサコアモデル２２０とメモリモデル２５０との間に介在し、プロセッサコアモデル２２０はメモリアクセス処理部４４０を介してメモリモデル２５０に対するメモリアクセスを行う。また、メモリアクセス処理部４４０は、エンディアン依存情報４４１と、フィルタ部４４２とを備えている。エンディアン依存情報４４１およびフィルタ部４４２は、対象のプロセッサコアモデルが異なるだけで、夫々メモリアクセス処理部４３０が備えるエンディアン依存情報４３１、フィルタ部４３２と夫々同一の動作を実行する。
【００７８】
次に、第３の実施の形態のソフトウェア開発システム４００の動作を説明する。シミュレーションが開始されると、プロセッサコアモデル２１０、２２０は、ターゲットプログラム６１から命令を順次フェッチし、デコード、実行する。
【００７９】
プロセッサコアモデル２１０、２２０がストア命令を実行した際、第３の実施の形態の各構成要素は第１の実施の形態の同名の構成要素と同じ動作を実行するので、説明を省略する。
【００８０】
図１４は、１回目のシミュレーション（すなわちステップＳ５１におけるシミュレーション）において、ロード命令を実行した際のソフトウェア開発システム４００の動作を説明するフローチャートである。なお、プロセッサコアモデル２２０がロード命令の実行元であるとして説明する。
【００８１】
まず、プロセッサコアモデル２２０は、ロード命令を実行すると、リードアドレス、データバイト長からなるリードアクセス要求をメモリアクセス処理部４４０へ渡す（ステップＳ６１）。メモリアクセス処理部４４０は、メモリモデル２５０におけるリードアドレスにて指定された位置からデータバイト長にて指定されたデータを読み出す（ステップＳ６２）。また、メモリアクセス処理部４４０は、プロセッサコアモデル２２０のエンディアン形式“ＬＥ”、リードアドレス、データバイト長をエンディアン依存コード検出部２６０に通知する（ステップＳ６３）。
【００８２】
エンディアン依存コード検出部２６０は、ライトアクセス情報２６１を指定されたリードアドレスを検索キーとして検索することによって、読み出し先のアドレスがライトアクセス情報２６１に登録済みであるか否かを判定する（ステップＳ６４）。ライトアクセス情報２６１に登録済みでなかった場合（ステップＳ６４、Ｎｏ）、メモリアクセス処理部４４０は、リードデータをプロセッサコアモデル２２０へ渡し（ステップＳ６５）、ロード命令を実行した際の動作が終了となる。
【００８３】
ライトアクセス情報２６１に登録済みであった場合（ステップＳ６４、Ｙｅｓ）、エンディアン依存コード検出部２６０は、リードアクセスを要求したプロセッサコアモデル２２０のエンディアン形式（ここではリトルエンディアン）と、登録されているエンディアン形式とが一致するか否かを判定する（ステップＳ６６）。一致した場合（ステップＳ６６、Ｙｅｓ）、ステップＳ６５へ移行する。
【００８４】
リードアクセスを要求したプロセッサコアモデル２２０のエンディアン形式と、登録されているエンディアン形式とが一致しなかった場合（ステップＳ６６、Ｎｏ）、エンディアン依存コード検出部２６０は、データバイト長が１バイトであるか否かをさらに判定する（ステップＳ６７）。データバイト長が１バイトであった場合（ステップＳ６７、Ｙｅｓ）、ステップＳ６５へ移行する。
【００８５】
データバイト長が１バイトではなかった場合（ステップＳ６７、Ｎｏ）、エンディアン依存コード検出部２６０は、エンディアン依存コードを検出したとし、エンディアン依存コードであることをメモリアクセス処理部４４０へ通知する（ステップＳ６８）。該通知を受信すると、メモリアクセス処理部４４０は、リードデータの順番を反転させ（ステップＳ６９）、反転後のリードデータをプロセッサコアモデル２２０へ渡し（ステップＳ７０）、リードアドレスと反転後のリードデータとの対をエンディアン依存情報４４１へ登録する（ステップＳ７１）。そして、メモリアクセス処理部４４０は、ターゲットプログラム６１におけるリードアクセス要求の元となったロード命令がエンディアン依存コードであることをレポート出力し（ステップＳ７２）、１回目のシミュレーション時におけるロード命令を実行する動作が終了となる。
【００８６】
図１５は、２回目以降のシミュレーション（すなわちステップＳ５３におけるシミュレーション）において、ロード命令を実行した際の動作を説明するフローチャートである。ここでも、プロセッサコアモデル２２０がロード命令の実行元であるとして説明する。
【００８７】
ステップＳ８１〜ステップＳ８８の動作は、ステップＳ６１〜ステップＳ６８の動作と夫々等しいので、説明を省略する。
【００８８】
ステップＳ８８において、エンディアン依存コード検出部２６０がエンディアン依存コードである旨をメモリアクセス処理部４４０へ通知すると、フィルタ部４４２は、ステップＳ８２で読み出したリードデータと、エンディアン依存情報４４１に登録されているリードデータとを比較し、双方が一致するか否かを判定する（ステップＳ８９）。
【００８９】
ユーザが該当するエンディアン依存コードを修正済みである場合、双方のデータが一致する。双方のデータが一致した場合（ステップＳ８９、Ｙｅｓ）、ステップＳ８５に移行する。双方のデータが一致しなかった場合（ステップＳ８９、Ｎｏ）、メモリアクセス処理部４４０は、リードデータの順番を反転させて（ステップＳ９０）、メモリアクセス処理部４４０は、反転後のリードデータをプロセッサコアモデル２２０へ渡し（ステップＳ９１）、ターゲットプログラム６１におけるリードアクセス要求の元となったロード命令がエンディアン依存コードであることをレポート出力し（ステップＳ９２）、２回目以降のシミュレーション時におけるロード命令を実行する動作が終了となる。
【００９０】
以上述べたように、本発明の第３の実施の形態によれば、エンディアン依存コード毎の転送前の転送データを予め記録したエンディアン依存情報４４１、４４２と、エンディアン依存コード検出部２６０がエンディアン依存コードと判定したロード命令のうち、メモリアクセス処理部４３０、４４０が求めた対応する転送前の転送データとエンディアン依存情報４３１、４４１に記録されている転送前の転送データとを比較し、双方の転送データが一致したロード命令をエンディアン依存コードから除外するフィルタ部４３２、４４２と、をさらに備えるように構成したので、ユーザはエンディアン依存コードの修正処理と未修正のまま残っているエンディアン依存コードの検出とを繰り返し実行することができるようになる。
【００９１】
なお、以上の第３の実施の形態の説明においては、バイト不変方式を採用したターゲットシステム１００を対象としたターゲットプログラム６１からエンディアン依存コードを検出するものとしたので、第１の実施の形態にエンディアン依存情報４３１、４４１およびフィルタ部４３２、４４２を追加した構成となっているが、第２の実施の形態にこれらの構成要素を追加することによってワード不変方式のターゲットシステム１００を対象としたターゲットプログラム６１からエンディアン依存コードを検出することが可能になる。
【００９２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明の均等の範囲に含まれる。
【００９３】
なお、第１〜第３の実施の形態のソフトウェア開発システムを実現するソフトウェア開発プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供または配布するように構成しても良い。また、ソフトウェア開発プログラムを、ＲＯＭ３等に予め組み込んで提供するように構成してもよい。また、ソフトウェア開発プログラムを、ＣＤ−ＲＯＭや外付けのメモリデバイスなどに格納して提供するようにしてもよい。
【符号の説明】
【００９４】
６１  ターゲットプログラム、６２  ソフトウェア開発プログラム、２００、３００、４００  ソフトウェア開発システム、２１０、２２０  プロセッサコアモデル、２３０、２４０、３３０、３４０、４３０、４４０  メモリアクセス処理部、２５０  メモリモデル、２５１  通信データ領域、２６０、３６０  エンディアン依存コード検出部、２６１  ライトアクセス情報、４３１、４４１  エンディアン依存情報、４３２、４４２  フィルタ部。
【図１】
2012022640.tif 000003
【図２】
2012022640.tif 000004
【図３】
2012022640.tif 000005
【図４】
2012022640.tif 000006
【図５】
2012022640.tif 000007
【図６】
2012022640.tif 000008
【図７】
2012022640.tif 000009
【図８】
2012022640.tif 000010
【図９】
2012022640.tif 000011
【図１０】
2012022640.tif 000012
【図１１】
2012022640.tif 000013
【図１２】
2012022640.tif 000014
【図１３】
2012022640.tif 000015
【図１４】
2012022640.tif 000016
【図１５】
2012022640.tif 000017