(57)【特許請求の範囲】
【請求項１】
第１のプロセッサ及び第２のプロセッサを含む情報処理装置であって、
前記第１のプロセッサが、
受信した命令アドレスの次の命令アドレスを算出する算出部と、
算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信する第１の送信部とを含み、
前記第２のプロセッサが、
実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信する第２の送信部と、
前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する実行部と、
を含むことを特徴とする情報処理装置。
【請求項２】
前記命令情報は、前記算出部が算出した前記命令アドレスに示される命令語に対応するエミュレート関数の格納先アドレスであること
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記実行部は、
前記第１のプロセッサから受信した前記第２の命令アドレスに関する命令の処理の開始から当該命令に後続する命令の処理の終了までに要する第１の実行時間が、命令アドレスに基づいて命令情報を読み出す処理の第２の実行時間に近似しているか否かを判定する命令実行時間判定部を有し、
前記第２の送信部は、
前記命令実行時間判定部による判定の結果、前記第１の実行時間が、前記第２の実行時間に近似している場合には、当該命令に後続する命令の命令アドレスを前記第１のプロセッサに送信すること
を特徴とする請求項１又は請求項２に記載の情報処理装置。
【請求項４】
前記第２の送信部によって送信された前記第１の命令アドレスの命令が分岐命令であるか否かを判定する分岐命令判定部と、
前記分岐命令判定部による判定の結果、前記第１の命令アドレスの命令が分岐命令である場合には、当該命令に後続する次の命令の命令アドレスを予測する次命令アドレス予測部と
を有することを特徴とする請求項１又は請求項２に記載の情報処理装置。
【請求項５】
第１のプロセッサ及び第２のプロセッサを含むコンピュータに、
受信した命令アドレスの次の命令アドレスを算出し、
算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信し、
実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信し、
前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する
処理を実行させることを特徴とするエミュレーション処理プログラム。
【請求項６】
第１のプロセッサ及び第２のプロセッサを含む情報処理装置にエミュレーション処理を実行させるエミュレーション処理方法であって、
受信した命令アドレスの次の命令アドレスを算出し、
算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信し、
実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信し、
前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する
ことを特徴とするエミュレーション処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレーション処理を実行する情報処理装置、エミュレーション処理プログラム及びエミュレーション処理方法に関する。
【背景技術】
【０００２】
従来から、ＣＰＵ（Central  Processing  Unit）に、自ＣＰＵのアーキテクチャと異なるアーキテクチャのＣＰＵの動作を実行させるＣＰＵエミュレータがある。ＣＰＵエミュレータは、自ＣＰＵのアーキテクチャでは動作できないソフトウェアについて、該ソフトウェアが動作可能なアーキテクチャのＣＰＵの動作を自ＣＰＵに実行させることで、該ソフトウェアを自ＣＰＵにおいて実行させる。
【０００３】
また、メインプロセッサには、命令コードをエミュレートする第１のソフトウェアモジュールが実装され、メインプロセッサ以外のプロセッサコアのうちの一つが、メインプロセッサが実行予定の命令コードを、メインプロセッサの実行に先立って共有キャッシュメモリにプリフェッチする技術が知られている。他にも、例えば、プロセッサ数に対応させて命令エミュレーション処理を分割し、分割されたそれぞれの処理をプロセッサごとに割付け、各プロセッサは割付けられた処理を並列に実行する技術が知られている。（特許文献１、特許文献２参照）
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１２７１５４号公報
【特許文献２】特開２００６−２６８４８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、例えば、命令エミュレーション処理を複数の物理ＣＰＵにパイプライン的に実行させる従来の技術では、エミュレートする命令語の命令が分岐命令の場合、分岐命令を実行している物理ＣＰＵと異なる他の物理ＣＰＵが、分岐命令の終了まで処理を中断することとなってしまう。
【０００６】
１つの側面では、本発明は、エミュレートする処理が分岐命令であることによる処理速度の低下を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
本願の開示する情報処理装置は、一つの態様において、第１のプロセッサ及び第２のプロセッサを含む情報処理装置であって、前記第１のプロセッサが、受信した命令アドレスの次の命令アドレスを算出する算出部と、算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信する第１の送信部と、前記第２のプロセッサが、実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信する第２の送信部を含み、前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する実行部とを備える。
【発明の効果】
【０００８】
１つの態様では、エミュレートする処理が分岐命令であることにより処理速度が低下することを抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係る情報処理装置の構成を示す機能ブロック図である。
【図２】図２は、実施例１に係る情報処理装置の処理のシーケンス図である。
【図３】図３は、実施例２に係るエミュレーション装置の構成を示す機能ブロック図である。
【図４】図４は、フェッチ命令情報記憶部のデータ構造の一例を示す図である。
【図５】図５は、実施例２に係るエミュレーション装置の処理のシーケンス図である。
【図６】図６は、命令実行ＣＰＵの待ち時間発生時における従来技術と実施例３の処理とを比較した説明図である。
【図７】図７は、実施例３に係るエミュレーション装置の構成を示す機能ブロック図である。
【図８】図８は、実施例３に係るエミュレーション装置の処理のシーケンス図である。
【図９】図９は、フェッチ・デコードＣＰＵの待ち時間発生時における従来技術と実施例３の変形例の処理とを比較した説明図である。
【図１０】図１０は、実施例４に係るエミュレーション装置の構成を示す機能ブロック図である。
【図１１】図１１は、分岐実績記憶部のデータ構造の一例を示す図である。
【図１２】図１２は、実施例４に係るエミュレーション装置の処理のシーケンス図である。
【図１３】図１３は、エミュレーション処理プログラムを実行するコンピュータを示す図である。
【図１４】図１４は、１つの物理ＣＰＵによる命令エミュレーション処理のシーケンス図である。
【発明を実施するための形態】
【００１０】
まず、１つの物理ＣＰＵに実行させる１命令語あたりの命令エミュレーション処理を、図１４を参照して説明する。図１４は、１つの物理ＣＰＵによる命令エミュレーション処理のシーケンス図である。まず、物理ＣＰＵが、命令アドレスから命令語をロード（フェッチ）し（ステップＳ１１）、フェッチした命令語を解析（デコード）する（ステップＳ１２）。さらに、物理ＣＰＵが、フェッチした命令語の値からこの命令語に対応する命令エミュレーション関数のアドレスを取得する（ステップＳ１３）。そして、物理ＣＰＵが、Ｓ１３で取得したアドレスが示す命令エミュレーション関数を呼び出す（ステップＳ１４）。物理ＣＰＵが、Ｓ１４で呼び出した命令エミュレーション関数を、Ｓ１２で求めたオペランドを用いて実行し（ステップＳ１５）、次に実行する命令語の命令アドレスを取得する（ステップＳ１６）。このように、命令エミュレーション処理は、後続する命令語を順次エミュレートする。
【００１１】
ＣＰＵエミュレータを用いて動作させるソフトウェアによってはＣＰＵ数の制限が設けられている場合がある。ＣＰＵ数の制限が設けられたソフトウェアを実行する情報処理装置が、該ソフトウェアに設けられた制限以上の数の物理ＣＰＵを有することも考えられる。その場合、該情報処理装置が有する１つの物理ＣＰＵで、１つのＣＰＵをエミュレートすると、いくつかの物理ＣＰＵは余ることになる。そこで、複数の物理ＣＰＵを用いて１つのＣＰＵをさらに高速にエミュレートする機構が求められる。
【００１２】
以下に、本願の開示する情報処理装置、エミュレーション処理プログラム及びエミュレーション処理方法の実施例を図面に基づいて詳細に説明する。なお、以下に説明する実施例では、情報処理装置が、２個の物理ＣＰＵを備えるものとして説明するが、１個の物理ＣＰＵに物理コアが２個あっても良い。また、本実施例によりこの発明が限定されるものではない。
【実施例１】
【００１３】
図１は、本実施例１に係る情報処理装置の構成を示す機能ブロック図である。図１に示すように、情報処理装置１は、第１のプロセッサ１１及び第２のプロセッサ１２を有する。また、第１のプロセッサ１１は、算出部１１ａ及び第１の送信部１１ｂを有する。さらに、第２のプロセッサ１２は、第２の送信部１２ａ及び実行部１２ｂを有する。
【００１４】
算出部１１ａは、第２のプロセッサ１２から受信した命令アドレスの次の命令アドレスを算出する。なお、第２のプロセッサ１２から受信した命令アドレスとは、第２のプロセッサ１２によって実行された命令エミュレーション処理の実行結果に含まれる第１の命令アドレスを意味する。
【００１５】
第１の送信部１１ｂは、算出部１１ａによって算出された命令アドレスと、当該命令アドレスに基づいて読み出した命令情報とを第２のプロセッサ１２に送信する。ここで、命令アドレスに基づいて命令情報を読み出すことを「フェッチする」というものとする。
【００１６】
第２の送信部１２ａは、実行した命令エミュレーション処理の実行結果に含まれる命令アドレスである第１の命令アドレスを第１のプロセッサ１１に送信する。実行部１２ｂは、第１のプロセッサ１１から受信した命令アドレスである第２の命令アドレスが、第１の命令アドレスと同じである場合に、第１のプロセッサ１１から受信した命令情報に基づくエミュレーション処理を実行する。また、実行部１２ｂは、第２の命令アドレスが第１の命令アドレスと同じでない場合に、第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく命令エミュレーション処理を実行する。
【００１７】
次に、情報処理装置１の命令エミュレーション処理のシーケンスを、図２を参照して説明する。図２は、実施例１に係る情報処理装置の処理のシーケンス図である。なお、図２では、１命令の命令エミュレーション処理のシーケンスについて説明する。図２に示すように、情報処理装置１は、１個の物理ＣＰＵであるフェッチ・デコードＣＰＵ及び当該フェッチ・デコードＣＰＵと異なる１個の物理ＣＰＵである命令実行ＣＰＵを備えているものとする。
【００１８】
まず、フェッチ・デコードＣＰＵは、エミュレーションの対象となるＣＰＵの命令アドレスから命令語をフェッチし、フェッチした命令語をデコードする（ステップＳ２１）。そして、フェッチ・デコードＣＰＵは、フェッチした命令語の値からこの命令語に対応する命令エミュレーション関数のアドレスを取得する（ステップＳ２２）。そして、フェッチ・デコードＣＰＵの第１の送信部１１ｂは、エミュレーションの対象となるＣＰＵの命令アドレス（第２の命令アドレス）を含む命令情報を命令実行ＣＰＵに送信する（ステップＳ２３）。
【００１９】
次に、命令実行ＣＰＵは、命令情報の通知待ちを行っている（ステップＳ２４）。命令実行ＣＰＵでは、命令情報を取得すると（ステップＳ２５）、第２の送信部１２ａが前命令のエミュレーション処理の実行結果に含まれる命令アドレス（第１の命令アドレス）をフェッチ・デコードＣＰＵに送信する（ステップＳ２６）。なお、第１の命令アドレスは、直近に実行される命令の命令アドレスである現命令アドレスを意味する。引き続き、命令実行ＣＰＵの実行部１２ｂは、第２の命令アドレスが第１の命令アドレスと同じである場合に、取得した命令情報を用いて命令エミュレーション関数を呼び出す（ステップＳ２７）。一方、命令実行ＣＰＵの実行部１２ｂは、第２の命令アドレスが第１の命令アドレスと同じでない場合に、第１の命令アドレスから命令語をフェッチし、フェッチした命令情報を用いて命令エミュレーション関数を呼び出す（ステップＳ２７）。そして、実行部１２ｂは、呼び出した命令エミュレーション関数を、命令情報を用いて実行する（ステップＳ２８）。
【００２０】
一方、フェッチ・デコードＣＰＵは、現命令アドレスの通知待ちを行っている（ステップＳ２９）。フェッチ・デコードＣＰＵは、現命令アドレスである第１の命令アドレスを取得すると（ステップＳ３０）、算出部１１ａが取得された現命令アドレスの次の命令アドレスである次命令アドレスを算出する（ステップＳ３１）。そして、フェッチ・デコードＣＰＵは、引き続き、次命令アドレスから命令語をフェッチし、該フェッチした命令語をデコードすることになる（ステップＳ３２）。
【００２１】
このようにして、情報処理装置１は、エミュレーションの実行結果に含まれる命令アドレス（第１の命令アドレス）をフェッチ・デコードＣＰＵに送信させることとした。このため、フェッチ・デコードＣＰＵは、受信した第１の命令アドレスが示す命令に後続する命令のフェッチ及びデコードを、当該命令アドレスが示す命令のエミュレーションとパイプライン的に実行できるので、全体のエミュレーション処理を高速化できる。特に、フェッチ・デコードＣＰＵは、受信した第１の命令アドレスが示す命令が分岐命令であっても、当該命令に後続する命令をフェッチ及びデコードするので、当該命令のエミュレーションで分岐に失敗したときデコード結果を活かせる。このため、フェッチ・デコードＣＰＵは、全体のエミュレーション処理を高速化でき、エミュレーション処理が分岐命令であることによる処理速度の低下の抑制を図ることができる。
【実施例２】
【００２２】
［実施例２に係るエミュレーション装置の構成］
図３は、本実施例２に係るエミュレーション装置２の構成を示す機能ブロック図である。図３に示すように、エミュレーション装置２は、フェッチ・デコードＣＰＵ３０及び命令実行ＣＰＵ４０の２つの物理ＣＰＵを備える。また、エミュレーション装置２は、ターゲットメモリ記憶部２１、命令関数記憶部２４、フェッチ命令情報記憶部２５及び命令アドレス記憶部２６を有する。
【００２３】
フェッチ・デコードＣＰＵ３０は、エミュレーションの対象となるＣＰＵの命令をフェッチし、フェッチした命令をデコードする命令デコード部３１を有する。さらに、命令デコード部３１は、フェッチ処理部３２、デコード処理部３３及び次命令アドレス判定部３４を有する。命令実行ＣＰＵ４０は、フェッチ・デコードＣＰＵ３０によってデコードされた命令の情報に基づきエミュレーションを実行するエミュレーション実行部４１を有する。さらに、エミュレーション実行部４１は、命令アドレス通知部４２、命令アドレス合致判定部４３、フェッチ・デコード処理部４４及びエミュレーション処理部４５を有する。なお、フェッチ・デコードＣＰＵ３０及び命令実行ＣＰＵ４０は、ＣＰＵであるが、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）又はＭＰＵ（Micro Processing Unit）等の電子回路であっても良い。
【００２４】
ターゲットメモリ記憶部２１は、エミュレーションのターゲットとなるＣＰＵのメモリ空間として割り当てられ、命令列２２及びオペランド２３を記憶する。命令列２２は、エミュレーションの対象となるＣＰＵの命令語の列である。オペランド２３は、命令語に含まれるオペランド部が指す情報であり、命令の対象となるデータを示す。なお、ターゲットメモリ記憶部２１は、例えば、ＲＡＭ（Random Access Memory）、フラッシュメモリ（flash memory）等の半導体メモリ素子、又は、ハードディスク、光ディスクなどの記憶装置である。
【００２５】
命令関数記憶部２４は、エミュレーションの対象となるＣＰＵの命令の動作をエミュレートする関数を記憶する。以降、命令関数記憶部２４に記憶された関数を命令エミュレーション関数というものとする。フェッチ命令情報記憶部２５は、フェッチ・デコードＣＰＵ３０及び命令実行ＣＰＵ４０によって共有される、命令に関する情報を記憶する。
【００２６】
ここで、フェッチ命令情報記憶部２５について図４を参照しながら説明する。図４は、フェッチ命令情報記憶部２５のデータ構造の一例を示す図である。図４に示すように、フェッチ命令情報記憶部２５は、命令アドレス２５ａ、オペランド情報２５ｂ及び命令関数アドレス２５ｃを対応付けて記憶する。命令アドレス２５ａは、命令列２２からフェッチした命令語のアドレスを示す。オペランド情報２５ｂは、命令列２２からフェッチした命令語に関するオペランド情報であり、例えば、命令の対象となるデータのアドレスを示す。命令関数アドレス２５ｃは、命令列２２からフェッチした命令語に対応する命令エミュレーション関数の格納先アドレスを示す。
【００２７】
命令アドレス記憶部２６は、命令実行ＣＰＵ４０が直近にエミュレートする命令に関する情報を記憶する。すなわち、命令アドレス記憶部２６は、命令列２２における直近にエミュレートされる命令の命令アドレスである現命令アドレスを記憶する。なお、命令関数記憶部２４、フェッチ命令情報記憶部２５及び命令アドレス記憶部２６は、例えば、ＲＡＭ（Random Access Memory）、フラッシュメモリ（flash memory）等の半導体メモリ素子、又は、ハードディスク、光ディスクなどの記憶装置である。
【００２８】
フェッチ処理部３２は、プログラムカウンタにしたがって、命令アドレスが示す命令語を命令列２２からフェッチする。デコード処理部３３は、フェッチした命令語をデコードし、命令実行に必要な命令情報を命令実行ＣＰＵ４０に通知する。具体的には、デコード処理部３３は、フェッチ処理部３２によってフェッチされた命令語を各フィールドに分解し、オペランド情報を求める。また、デコード処理部３３は、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する。そして、デコード処理部３３は、命令列２２からフェッチされた命令語の命令アドレス、デコードの結果として得られるオペランド情報及び命令エミュレーション関数のアドレスを含む命令情報をフェッチ命令情報記憶部２５に記憶する。
【００２９】
次命令アドレス判定部３４は、デコードされた命令の命令アドレスが前命令のエミュレーションの実行結果から得られる命令アドレスと合致するか否かを判定する。すなわち、次命令アドレス判定部３４は、フェッチ及びデコード処理対象の命令アドレスが、該処理と同期間にエミュレーションがされた前命令の実行結果から得られる実効アドレスと合致するか否かを判定する。この実効アドレスは、エミュレーション処理がされた前命令の次に処理されるべき命令アドレスである。
【００３０】
具体的には、次命令アドレス判定部３４は、フェッチ命令情報記憶部２５に記憶された命令情報を、デコード処理部３３から取得する。また、次命令アドレス判定部３４は、命令アドレス記憶部２６から直近にエミュレートされる命令の現命令アドレスを読み出す。また、次命令アドレス判定部３４は、命令情報に含まれる命令アドレス２５ａが現命令アドレスと合致するか否かを判定する。そして、次命令アドレス判定部３４は、命令アドレス２５ａが現命令アドレスと合致する場合には、命令アドレス２５ａのアドレスが示す命令に後続する命令の命令アドレスを算出し、算出した命令アドレスをプログラムカウンタに保持する。
【００３１】
また、次命令アドレス判定部３４は、命令アドレス２５ａが現命令アドレスと合致しない場合には、前命令のエミュレーションの実行結果から得られる実効アドレスが所定の条件により変更されたと判断する。そして、次命令アドレス判定部３４は、現命令アドレスが示す命令に後続する命令の命令アドレスをプログラムカウンタに保持する。なお、所定の条件とは、例えば、現命令アドレスが実行結果となる前命令が分岐命令であった場合や割り込み処理があった場合等であり、これらの場合に実効アドレスが変更されるのである。
【００３２】
命令アドレス通知部４２は、命令のエミュレーション処理の実行結果から得られる現命令アドレスを命令デコード部３１に通知する。具体的には、命令アドレス通知部４２は、後述するエミュレーション処理部４５によって前命令のエミュレーションがされた実行結果から得られる実効アドレス、すなわち直近に実行される命令の命令アドレスである現命令アドレスを取得する。また、命令アドレス通知部４２は、取得した現命令アドレスを命令アドレス記憶部２６に記憶する。
【００３３】
命令アドレス合致判定部４３は、前命令のエミュレーション処理の実行結果から得られる命令アドレスがデコードされた命令の命令アドレスと合致するか否かを判定する。具体的には、命令アドレス合致判定部４３は、命令アドレス通知部４２によって通知された現命令アドレスを取得する。また、命令アドレス合致判定部４３は、フェッチ命令情報記憶部２５から命令情報を読み出す。また、命令アドレス合致判定部４３は、現命令アドレスが命令情報に含まれる命令アドレス２５ａと合致するか否かを判定する。そして、命令アドレス合致判定部４３は、現命令アドレスが命令アドレス２５ａと合致する場合には、命令情報を用いたエミュレーション処理を実行するように、エミュレーション処理部４５に依頼する。一方、命令アドレス合致判定部４３は、現命令アドレスが命令アドレス２５ａと合致しない場合には、フェッチ命令情報記憶部２５に記憶された命令情報を破棄する。そして、命令アドレス合致判定部４３は、現命令アドレスが示す命令のフェッチ及びデコード処理を実行するように、フェッチ・デコード処理部４４に依頼する。
【００３４】
フェッチ・デコード処理部４４は、命令アドレス合致判定部４３から現命令アドレスのフェッチ及びデコード処理の実行依頼を取得すると、この現命令アドレスが示す命令語を命令列２２からフェッチする。また、フェッチ・デコード処理部４４は、フェッチした命令語を各フィールドに分解し、オペランド情報を求める。また、フェッチ・デコード処理部４４は、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する。そして、フェッチ・デコード処理部４４は、フェッチした命令語の命令アドレス、デコードの結果として得られるオペランド情報及び命令エミュレーション関数のアドレスを含む命令情報をエミュレーション処理部４５に通知する。
【００３５】
エミュレーション処理部４５は、命令情報に基づいて、エミュレーション処理を実行する。具体的には、エミュレーション処理部４５は、命令アドレス合致判定部４３又はフェッチ・デコード処理部４４から命令情報を取得する。また、エミュレーション処理部４５は、命令情報に含まれる命令関数アドレス２５ｃのアドレスが示す命令エミュレーション関数を呼び出す。そして、エミュレーション処理部４５は、命令情報に含まれる命令アドレス２５ａが示す命令のエミュレーション処理を実行する。このエミュレーション処理は、命令エミュレーション関数によって命令情報に含まれるオペランド情報２５ｂを用いて実行される。
【００３６】
［実施例２に係る命令エミュレーション処理のシーケンス］
次に、エミュレーション装置２の命令エミュレーション処理のシーケンスを、図５を参照して説明する。図５は、実施例２に係るエミュレーション装置の処理のシーケンス図である。なお、図５では、１個の命令エミュレーション処理のシーケンスについて説明する。図５に示すように、エミュレーション装置２は、フェッチ・デコードＣＰＵ３０及び命令実行ＣＰＵ４０を備えているものとする。
【００３７】
まず、フェッチ処理部３２は、プログラムカウンタにしたがって、命令アドレスが示す命令語を命令列２２からフェッチし、デコード処理部３３は、フェッチした命令語をデコードする（ステップＳ４１）。ここでは、フェッチ処理部３２によってフェッチされた命令の命令アドレスを「命令アドレスＡ」として表すものとする。そして、デコード処理部３３は、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する（ステップＳ４２）。そして、デコード処理部３３は、フェッチされた命令語の命令アドレスＡ、デコードの結果として得られるオペランド情報及び命令エミュレーション関数アドレスを含む命令情報を、フェッチ命令情報記憶部２５を通じて命令実行ＣＰＵ４０に通知する（ステップＳ４３）。
【００３８】
次に、命令実行ＣＰＵ４０では、命令情報の通知待ちを行い（ステップＳ４４）、命令情報を取得する（ステップＳ４５）。そして、命令アドレス通知部４２は、前命令のエミュレーション処理の実行結果から得られる現命令アドレスをフェッチ・デコードＣＰＵ３０に通知する（ステップＳ４６）。具体的には、命令アドレス通知部４２は、前命令のエミュレーション処理の実行結果から得られる実効アドレス、すなわち直近に実行される現命令の命令アドレスである現命令アドレスを命令アドレス記憶部２６に記憶する。ここでは、現命令アドレスを「命令アドレスＢ」として表すものとする。
【００３９】
続いて、命令アドレス合致判定部４３は、前命令のエミュレーションの実行結果から得られる命令アドレスＢがデコードされた命令の命令アドレスＡと合致するか否かを判定する（ステップＳ４７）。そして、命令アドレスＢが命令アドレスＡと合致する場合には（ステップＳ４７Ｙｅｓ）、命令アドレス合致判定部４３は、命令アドレスＢの命令が既にフェッチされていると判断し、エミュレーション処理を実行させるためにステップＳ５０に移行する。
【００４０】
命令アドレスＢが命令アドレスＡと合致しない場合には（ステップＳ４７Ｎｏ）、命令アドレス合致判定部４３は、前命令が分岐命令等であると判断し、命令アドレスＢのフェッチ及びデコード処理を実行させるためにステップＳ４８に移行する。そして、フェッチ・デコード処理部４４は、命令アドレスＢが示す命令語を命令列２２からフェッチし、フェッチした命令語をデコードする（ステップＳ４８）。そして、フェッチ・デコード処理部４４は、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する（ステップＳ４９）。
【００４１】
続いて、エミュレーション処理部４５は、命令情報に含まれる命令関数アドレス２５ｃのアドレスが示す命令エミュレーション関数を呼び出す（ステップＳ５０）。そして、エミュレーション処理部４５は、命令情報に含まれる命令アドレス２５ａの命令アドレスＢ、すなわち現命令アドレスが示す現命令のエミュレーション処理を実行する（ステップＳ５１）。
【００４２】
一方、フェッチ・デコードＣＰＵ３０では、次命令アドレス判定部３４が前命令のエミュレーションの実行結果から得られる現命令アドレスの通知待ちを行なっている（ステップＳ５２）。そして、次命令アドレス判定部３４が現命令アドレスである命令アドレスＢを取得すると（ステップＳ５３）、デコードされた命令の命令アドレスＡが命令アドレスＢと合致するか否かを判定する（ステップＳ５４）。
【００４３】
命令アドレスＡが命令アドレスＢと合致すると判定された場合には（ステップＳ５４Ｙｅｓ）、次命令アドレス判定部３４は、命令アドレスＡに、当該命令アドレスＡが示す命令の命令長を加算し、次命令アドレスを算出する（ステップＳ５５）。具体的には、次命令アドレス判定部３４は、フェッチ命令情報記憶部２５に記憶された命令情報に基づいて、命令アドレスＡに当該命令アドレスＡが示す命令の命令長を加算し、次命令アドレスを算出する。
【００４４】
命令アドレスＡが命令アドレスＢと合致しないと判定された場合には（ステップＳ５４Ｎｏ）、次命令アドレス判定部３４は、命令アドレスＢの命令がフェッチされていないと判断する。そして、次命令アドレス判定部３４は、命令アドレスＢに、当該命令アドレスＢが示す命令の命令長を加算し、次命令アドレスを算出する（ステップＳ５６）。具体的には、次命令アドレス判定部３４は、命令アドレスＢが示す命令語を命令列２２からフェッチし、この命令語の命令長を求める。そして、次命令アドレス判定部３４は、命令アドレスＢに、求めた命令長を加算して得られる次命令アドレスを算出する。
【００４５】
そして、次命令アドレス判定部３４は、算出した次命令アドレスをプログラムカウンタに保持し、フェッチ処理部３２及びデコード処理部３３が、次命令アドレスに関するフェッチ処理及びデコード処理を実行することとなる（ステップＳ５７）。
【００４６】
［実施例２の効果］
上記実施例２によれば、命令デコード部３１の次命令アドレス判定部３４は、デコードされた命令の命令アドレスが命令アドレス通知部４５によって通知された現命令アドレスと合致するか否かを判定する。そして、デコードされた命令の命令アドレスが現命令アドレスと合致しない場合には、次命令アドレス判定部３４は、現命令アドレスが示す命令に後続する命令の命令アドレスを算出する。
【００４７】
かかる構成によれば、デコードされた命令の命令アドレスが現命令アドレスと合致しない場合には、現命令アドレスを実行結果とした前命令が分岐命令等であると判断し、現命令アドレスが示す命令に後続する命令の命令アドレスを算出する。この結果、エミュレーション実行部４１で現命令アドレスに関する現命令のエミュレーション処理が実行される一方で、命令デコード部３１では、算出した命令アドレス（現命令に後続する命令を示す命令アドレス）に関するフェッチ処理及びデコード処理を実行させることができるので、全体のエミュレーション処理を高速化できる。
【００４８】
また、仮に現命令アドレスに関する現命令が分岐命令であっても、次命令アドレス判定部３４は、現命令アドレスが示す命令に後続する命令の命令アドレスを算出する。このため、次命令アドレス判定部３４では、算出した命令アドレスに関するフェッチ処理及びデコード処理を実行させるので、現命令のエミュレーションで分岐に失敗したときデコード結果を活用することで、全体のエミュレーション処理を高速化できる。つまり、エミュレーション処理が分岐命令であることにより処理速度が低下することを抑制できる。なお、分岐の失敗とは、分岐命令のエミュレーションを実行したが、分岐できなかった場合をいう。
【実施例３】
【００４９】
ところで、実施例２のエミュレーション装置２では、分岐命令等により前命令のエミュレート結果から得られる現命令アドレスが前命令に後続する命令アドレスと合致しない場合であっても、命令エミュレーション処理を高速に実行できる場合について説明した。しかしながら、エミュレーション処理自体の処理量が軽量な場合には、エミュレーション処理を実行する命令実行ＣＰＵに待ち時間が発生し、命令エミュレーション処理を高速に実行できない。そこで、本実施例３では、エミュレーション処理自体の処理量が軽量な場合であっても、命令エミュレーション処理を高速に実行できる場合を説明する。ここで、命令実行ＣＰＵの待ち時間発生時における従来技術と実施例３の処理とを、図６を参照して比較する。
【００５０】
図６は、命令実行ＣＰＵの待ち時間発生時における従来技術と実施例３の処理とを比較した説明図である。図６（ａ）では、従来の処理のシーケンス図であり、図６（ｂ）では、本実施例３の処理のシーケンス図である。なお、括弧内のアルファベットは、命令アドレスを示すものとする。また、命令アドレスＢの命令が、エミュレーション処理自体の処理量が軽量な命令であるものとする。
【００５１】
図６（ａ）に示すように、従来の処理では、命令実行ＣＰＵ４０が命令アドレスＢの命令のエミュレーション処理を実行する（ステップＳ６ａ）。このとき、フェッチ・デコードＣＰＵ３０が命令アドレスＢの命令に後続する命令アドレスＣの命令をフェッチし、デコードする（ステップＳ６ｂ）。このとき、命令アドレスＢの命令のエミュレーション処理は、軽量であるので、命令アドレスＣに関するフェッチ・デコード処理の早い時点で終了する。そして、命令実行ＣＰＵ４０では、フェッチ・デコードＣＰＵ３０における命令アドレスＣの命令のフェッチ・デコード処理が終了するまで待機することとなる（ステップＳ６ｃ）。したがって、エミュレーション処理自体の処理が軽量な命令がある場合には、命令実行ＣＰＵ４０に長時間の待ち時間が発生するので、エミュレーション装置２は、命令エミュレーション処理を高速に実行できない。
【００５２】
一方、図６（ｂ）に示すように、命令実行ＣＰＵ４０では、命令アドレスＢが示す軽量な命令に後続する命令の命令アドレスＣをフェッチ・デコードＣＰＵ３０に通知する（ステップＳ６ｄ）。そして、フェッチ・デコードＣＰＵ３０では、命令実行ＣＰＵ４０から通知された命令アドレスＣが示す命令に後続する命令アドレスＤの命令をフェッチし、デコードする（ステップＳ６ｅ）。このとき、命令実行ＣＰＵ４０では、命令アドレスＢが示す命令のエミュレーション処理を実行する（ステップＳ６ｆ）。そして、引き続き、命令アドレスＢに後続する命令アドレスＣが示す命令のフェッチ・デコード処理を実行し（ステップＳ６ｇ）、当該命令のエミュレーション処理を実行する（ステップＳ６ｈ）。したがって、エミュレーション処理自体の処理が軽量な命令がある場合であっても、軽量な命令に後続する命令まで纏めてエミュレーション処理を実行するので、エミュレーション装置２は、命令エミュレーション処理を高速に実行できる。
【００５３】
そこで、本実施例３では、エミュレーション装置２が、エミュレーション処理自体の処理量が軽量な命令があっても、命令エミュレーション処理を高速に実行できる場合を説明する。
【００５４】
［実施例３に係るエミュレーション装置の構成］
図７は、実施例３に係るエミュレーション装置の構成を示す機能ブロック図である。なお、図３に示すエミュレーション装置と同一の構成については同一符号を示すことで、その重複する構成及び動作の説明については省略する。実施例２と実施例３とが異なるところは、エミュレーション実行部４１Ａの命令アドレス合致判定部４３を削除し、命令実行時間判定部５１Ａを追加した点にある。さらに、実施例２と実施例３とが異なるところは、エミュレーション実行部４１Ａのフェッチ・デコード処理部４４Ａ、エミュレーション処理部４５Ａ及び命令アドレス通知部４２Ａを変更した点にある。
【００５５】
命令実行時間判定部５１Ａは、デコードされた命令のエミュレーションの開始から後続する命令のエミュレーションの終了までに要するエミュレーション実行時間が命令のフェッチ及びデコード処理に要するデコード実行時間に近似しているか否かを判定する。具体的には、命令実行時間判定部５１Ａは、フェッチ命令情報記憶部２５から命令情報を読み出す。また、命令実行時間判定部５１Ａは、命令情報に関わる命令及びこの命令に後続する命令が軽量な命令であるか否かを、命令の種類に基づいて判定する。そして、命令実行時間判定部５１Ａは、判定結果を命令アドレス通知部４２Ａ及びフェッチ・デコード処理部４４Ａに通知する。
【００５６】
例えば、１命令のフェッチ及びデコード処理に要する平均実行時間と、各命令の平均実行時間を、あらかじめ記憶部（図示しない）に記憶しておく。また、命令実行時間判定部５１Ａは、命令情報に関わる命令の平均実行時間及びこの命令に後続する命令の平均実行時間をそれぞれ記憶部から読み出す。また、命令実行時間判定部５１Ａは、命令のフェッチ及びデコード処理に要する平均実行時間を記憶部から読み出す。そして、命令実行時間判定部５１Ａは、命令情報に関わる命令の平均実行時間とこの命令に後続する命令の平均実行時間とを加算して得られた値が命令のフェッチ及びデコード処理に要する平均実行時間に近似しているか否かを判定する。
【００５７】
命令アドレス通知部４２Ａは、命令実行時間判定部５１Ａによって判定された判定結果に基づいて、命令アドレスを命令デコード部３１に通知する。具体的には、命令アドレス通知部４２Ａは、命令実行時間判定部５１Ａによる判定の結果、エミュレーション実行時間がデコード実行時間に近似している場合には、デコードされた命令に後続する命令の命令アドレスを命令アドレス記憶部２６に記憶する。一方、命令アドレス通知部４２Ａは、命令実行時間判定部５１Ａによる判定の結果、エミュレーション実行時間がデコード実行時間に近似していない場合には、デコードされた命令が示す命令アドレスを命令アドレス記憶部２６に記憶する。
【００５８】
エミュレーション処理部４５Ａは、命令情報に基づいて、エミュレーション処理を実行する。具体的には、エミュレーション処理部４５Ａは、命令アドレス通知部４２Ａによる命令アドレスの通知後、命令実行時間判定部５１Ａによって読み出された命令情報を取得する。また、エミュレーション処理部４５Ａは、フェッチ・デコード処理部４４Ａによる処理後、フェッチ・デコード処理部４４Ａによって作成された命令情報を取得する。また、エミュレーション処理部４５Ａは、取得した命令情報に含まれる命令関数アドレス２５ｃのアドレスが示す命令エミュレーション関数を呼び出す。そして、エミュレーション処理部４５Ａは、命令情報に含まれる命令アドレス２５ａが示す命令のエミュレーション処理を実行する。
【００５９】
フェッチ・デコード処理部４４Ａは、命令実行時間判定部５１Ａによって判定された判定結果に基づいて、デコードされた命令に後続する命令アドレスの命令を命令列２２からフェッチする。具体的には、フェッチ・デコード処理部４４Ａは、命令実行時間判定部５１Ａによる判定の結果、エミュレーション実行時間がデコード実行時間に近似している場合には、デコードされた命令に後続する命令を命令列２２からフェッチする。また、フェッチ・デコード処理部４４Ａは、フェッチした命令語を各フィールドに分解し、オペランド情報を求める。また、フェッチ・デコード処理部４４Ａは、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する。そして、フェッチ・デコード処理部４４Ａは、フェッチした命令語の命令アドレス、デコードの結果として得られるオペランド情報及び命令エミュレーション関数のアドレスを含む命令情報を作成し、該作成した命令情報をエミュレーション処理部４５Ａに通知する。一方、フェッチ・デコード処理部４４Ａは、命令実行時間判定部５１Ａによる判定の結果、エミュレーション実行時間がデコード実行時間に近似していない場合には、フェッチ及びデコード処理を実行しないものとする。
【００６０】
［実施例３に係る命令エミュレーション処理のシーケンス］
次に、エミュレーション装置３の命令エミュレーション処理のシーケンスを、図８を参照して説明する。図８は、実施例３に係るエミュレーション装置の処理のシーケンス図である。なお、図８では、１個の命令エミュレーション処理のシーケンスについて説明する。図８に示すように、エミュレーション装置３は、フェッチ・デコードＣＰＵ３０及び命令実行ＣＰＵ４０を備えているものとする。
【００６１】
まず、フェッチ処理部３２は、プログラムカウンタにしたがって、命令アドレスが示す命令語を命令列２２からフェッチし、デコード処理部３３は、フェッチした命令語をデコードする（ステップＳ６１）。ここでは、フェッチ処理部３２によってフェッチされた命令の命令アドレスを「命令アドレスＢ」として表すものとする。そして、デコード処理部３３は、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する（ステップＳ６２）。そして、デコード処理部３３は、フェッチされた命令語の命令アドレスＢ、デコードの結果得られるオペランド情報及び命令エミュレーション関数アドレスを含む命令情報を、フェッチ命令情報記憶部２５を通じて命令実行ＣＰＵ４０に通知する（ステップＳ６３）。
【００６２】
次に、命令実行ＣＰＵ４０では、命令実行時間判定部５１Ａは、命令情報の通知待ちを行い（ステップＳ６４）、命令情報を取得する（ステップＳ６５）。そして、命令実行時間判定部５１Ａは、取得した命令情報に関わる命令の開始から後続する命令の終了までのエミュレーション実行時間がフェッチ及びデコード処理のデコード実行時間に近似しているか否かを判定する（ステップＳ６６）。ここでは、命令情報に含まれる命令アドレスＢが示す命令に後続する命令の命令アドレスを「命令アドレスＣ」として表すものとする。例えば、命令実行時間判定部５１Ａは、各命令の平均実行時間をあらかじめ記憶部（図示しない）に記憶しておき、命令情報に関わる命令の平均実行時間及びこの命令に後続する命令の平均実行時間を、それぞれ記憶部から読み出す。また、命令実行時間判定部５１Ａは、１命令のフェッチ及びデコード処理に要する平均実行時間をあらかじめ記憶部（図示しない）に記憶しておき、１命令のフェッチ及びデコード処理に要する平均実行時間を記憶部から読み出す。そして、命令実行時間判定部５１Ａは、命令情報に関わる命令の平均実行時間とこの命令に後続する命令の平均実行時間とを加算して得られた値が１命令のフェッチ及びデコード処理に要する平均実行時間に近似しているか否かを判定する。
【００６３】
そして、エミュレーション実行時間がデコード実行時間に近似していない場合には（ステップＳ６６Ｎｏ）、命令アドレス通知部４２Ａは、命令情報に含まれる現命令アドレスＢを、命令アドレス記憶部２６を通じて命令デコード部１１に通知する（ステップＳ６７）。一方、エミュレーション実行時間がデコード実行時間に近似している場合（ステップＳ６６Ｙｅｓ）、命令実行時間判定部５１Ａは、命令情報に関わる命令に後続する命令のフェッチ及びデコード処理を実行させるべく、フラグをＯＮに設定する（ステップＳ６８）。そして、命令アドレス通知部４２Ａは、命令情報に関わる命令に後続する命令の命令アドレスＣを、命令アドレス記憶部２６を通じて命令デコード部１１に通知する（ステップＳ６９）。
【００６４】
続いて、エミュレーション処理部４５Ａは、命令情報に含まれる命令関数アドレス２５ｃのアドレスが示す命令エミュレーション関数を呼び出す（ステップＳ７０）。そして、エミュレーション処理部４５Ａは、命令情報に含まれる命令アドレス２５ａの命令アドレスＢが示す命令のエミュレーション処理を実行する（ステップＳ７１）。
【００６５】
続いて、フェッチ・デコード処理部４４Ａは、命令実行時間判定部５１Ａによって設定されたフラグがＯＮであるか否かを判定する（ステップＳ７２）。そして、フラグがＯＮでないと判定された場合（ステップＳ７２Ｎｏ）、フェッチ・デコード処理部４４Ａは、フェッチ及びデコード処理を実行しないで、ステップＳ７６に移行する。
【００６６】
一方、フラグがＯＮであると判定された場合（ステップ７２Ｙｅｓ）、フェッチ・デコード処理部４４Ａは、命令情報に関わる命令に後続する命令アドレスＣの命令語を命令列２２からフェッチし、フェッチした命令語をデコードする（ステップＳ７３）。
【００６７】
続いて、エミュレーション処理部４５Ａは、命令アドレスＣが示す命令エミュレーション関数を呼び出す（ステップＳ７４）。そして、エミュレーション処理部４５Ａは、命令アドレスＣが示す命令のエミュレーション処理を実行する（ステップＳ７５）。その後、命令実行時間判定部５１Ａは、フェッチ・デコードＣＰＵ３０からの命令情報の通知待ちを行う（ステップＳ７６）。
【００６８】
一方、フェッチ・デコードＣＰＵ３０では、次命令アドレス判定部３４が、命令実行ＣＰＵ４０からの命令アドレスの通知待ちを行なっている（ステップＳ７７）。そして、次命令アドレス判定部３４が、命令実行ＣＰＵ４０から命令アドレスを取得すると（ステップＳ７８）、デコードされた命令の命令アドレスＢが、命令実行ＣＰＵ４０から取得された命令アドレスと合致するか否かを判定する（ステップＳ７９）。なお、ここでは、命令アドレスＢが命令実行ＣＰＵ４０から取得された命令アドレスと合致しない場合には、次命令アドレス判定部３４は、命令アドレスＢが示す命令に後続する命令を指す命令アドレスＣを取得したものとする。
【００６９】
命令アドレスＢが、取得された命令アドレスと合致する場合（ステップＳ７９Ｙｅｓ）、次命令アドレス判定部３４は、命令情報に基づいて、命令アドレスＢに当該命令アドレスＢが示す命令の命令長を加算し、次命令アドレスを算出する（ステップＳ８０）。
【００７０】
一方、命令アドレスＢが、取得された命令アドレスと合致しない場合（ステップＳ７９Ｎｏ）、次命令アドレス判定部３４は、取得された命令アドレスＣに、当該命令アドレスＣが示す命令の命令長を加算し、次命令アドレスを算出する（ステップＳ８１）。具体的には、次命令アドレス判定部３４は、命令アドレスＣに関する命令情報がないので、命令アドレスＣが示す命令語を命令列２２からフェッチし、この命令語の命令長を求める。そして、次命令アドレス判定部３４は、命令アドレスＣに、求めた命令長を加算して得られる次命令アドレスを算出する。
【００７１】
そして、次命令アドレス判定部３４は、算出した次命令アドレスをプログラムカウンタに保持し、フェッチ処理部３２及びデコード処理部３３が、後続する次命令アドレスに関するフェッチ処理及びデコード処理を実行する（ステップＳ８２）こととなる。
【００７２】
［実施例３の効果］
上記実施例３によれば、命令実行ＣＰＵ４０では、デコードされた命令のエミュレーションの開始からこの命令に後続する命令のエミュレーションの終了までの実行時間が、フェッチ及びデコードに要する実行時間に近似しているか否かを判定する。そして、命令アドレス通知部４５Ａは、判定の結果、エミュレーション実行時間がデコード実行時間に近似している場合には、デコードされた命令に後続する命令の命令アドレスを命令デコード部３１に通知する。
【００７３】
かかる構成によれば、エミュレーション実行時間がデコード実行時間に近似している場合には、デコードされた命令に後続する命令の次の命令のフェッチ及びデコード処理を実行できることとなる。そして、命令実行ＣＰＵ４０が、フェッチ及びデコード処理期間に、デコードされた命令及びこれに後続する命令のエミュレーション処理を纏めて実行すれば、デコードされた命令のエミュレーション処理後の待ち時間を短縮できる。この結果、エミュレーション装置３は、命令エミュレーション処理を高速化できる。
【００７４】
ところで、上記実施例３では、エミュレーション装置３は、エミュレーション処理自体の処理量が軽量な命令があっても、命令実行ＣＰＵ４０の待ち時間を短縮し、命令エミュレーション処理を高速に実行できる場合を説明した。しかしながら、エミュレーション装置３は、エミュレーション処理自体の処理量が重量な命令があっても、フェッチ・デコードＣＰＵ３０の待ち時間を短縮し、命令エミュレーション処理を高速に実行するようにしても良い。そこで、エミュレーション処理自体の処理量が重量な場合であっても、命令エミュレーション処理を高速に実行できる場合を説明する。ここで、フェッチ・デコードＣＰＵ３０の待ち時間発生時における従来技術と実施例３の変形例の処理とを、図９を参照して比較する。
【００７５】
図９は、フェッチ・デコードＣＰＵ３０の待ち時間発生時における従来技術と実施例３の変形例の処理とを比較した説明図である。図９（ａ）では、従来の処理のシーケンス図であり、図９（ｂ）では、本実施例３の変形例の処理のシーケンス図である。なお、括弧内のアルファベットは、命令アドレスを示すものとする。また、命令アドレスＢの命令が、エミュレーション処理量の重量な命令であるものとする。
【００７６】
図９（ａ）に示すように、従来の処理では、フェッチ・デコードＣＰＵ３０が、命令アドレスＢの命令のフェッチ及びデコード処理を実行し（ステップＳ９ａ）、処理結果である命令情報を、命令情報領域を通じて命令実行ＣＰＵ４０に通知する。続いて、フェッチ・デコードＣＰＵ３０が、命令アドレスＢの命令に後続する命令アドレスＣの命令のフェッチ及びデコード処理を実行する（ステップＳ９ｂ）。このとき、命令実行ＣＰＵ４０が、命令情報に基づいて、命令アドレスＢに関するエミュレーション処理を実行する（ステップＳ９ｃ）。命令アドレスＢの命令のエミュレーション処理は重量であるので、フェッチ・デコードＣＰＵ３０では、命令アドレスＣに関する処理が終了しても、命令実行ＣＰＵ４０におけるエミュレーション処理が終了するまで長時間待機することとなる（ステップＳ９ｄ）。したがって、エミュレーション処理自体の処理量が重量な命令がある場合には、フェッチ・デコードＣＰＵ３０に長時間の待ち時間が発生するので、命令エミュレーション処理が滞ることとなり、エミュレーション装置３は、当該処理を高速に実行できない。
【００７７】
一方、図９（ｂ）に示すように、実施例３の変形例の処理では、命令情報領域１〜４が複数存在する。フェッチ・デコードＣＰＵ３０が、命令アドレスＢの命令のフェッチ及びデコード処理を実行し（ステップＳ９ｅ）、処理結果である命令情報を、命令情報領域２を通じて命令実行ＣＰＵ４０に通知する。そして、命令実行ＣＰＵ４０が、命令情報領域２に記憶された命令情報に基づいて、命令アドレスＢに関するエミュレーション処理を実行する（ステップＳ９ｆ）。このとき、フェッチ・デコードＣＰＵ３０が、命令アドレスＢの命令に後続する命令アドレスＣの命令のフェッチ及びデコード処理を実行し（ステップＳ９ｇ）、処理結果である命令情報を、命令情報領域３を通じて命令実行ＣＰＵ４０に通知する。そして、引き続き、フェッチ・デコードＣＰＵ３０では、命令アドレスＢが示す命令のエミュレーション処理の終了を待たないで、命令アドレスＣに後続する命令アドレスＤの命令のフェッチ・デコード処理を実行する（ステップＳ９ｈ）。そして、フェッチ・デコードＣＰＵ３０では、処理結果である命令情報を、命令情報領域４を通じて命令実行ＣＰＵ４０に通知する。
【００７８】
命令実行ＣＰＵ４０では、命令アドレスＢの命令のエミュレーション処理を実行後、命令情報領域３に記憶された命令情報に基づいて、命令アドレスＣに関するエミュレーション処理を実行する（ステップＳ９ｉ）。そして、引き続き、命令実行ＣＰＵ４０では、命令情報領域４に記憶された命令情報に基づいて、命令アドレスＤに関するエミュレーション処理を実行する（ステップＳ９ｊ）。このように、命令情報領域を複数備えることで、エミュレーション処理自体の処理量が重量な命令がある場合であっても、フェッチ・デコードＣＰＵ３０に長時間の待ち時間が発生しないので、ミュレーション装置３は、当該処理を高速に実行できる。
【実施例４】
【００７９】
ところで、実施例２に係るエミュレーション装置２では、エミュレート結果から得られる現命令アドレスをフェッチ・デコードＣＰＵ３０に通知し、現命令アドレスの命令に後続する命令のアドレスを算出する場合を説明した。エミュレーション装置２は、これに限定されず、エミュレート結果から得られる現命令アドレスをフェッチ・デコードＣＰＵ３０に通知し、現命令アドレスの命令が分岐命令である場合、現命令アドレスの命令に後続する命令のアドレスを予測しても良い。
【００８０】
そこで、実施例４では、エミュレーション装置４が、エミュレート結果から得られる現命令アドレスをフェッチ・デコードＣＰＵ３０に通知し、現命令アドレスの命令が分岐命令である場合、現命令アドレスの命令に後続する命令のアドレスを予測する。
【００８１】
［実施例４に係るエミュレーション装置の構成］
図１０は、実施例４に係るエミュレーション装置の構成を示す機能ブロック図である。なお、図４に示すエミュレーション装置と同一の構成については同一符号を示すことで、その重複する構成及び動作の説明については省略する。実施例２と実施例４とが異なるところは、命令デコード部３１Ｂに分岐命令判定部６１Ｂ及び次命令アドレス予測部６２Ｂを追加し、次命令アドレス判定部３４Ｂを変更した点にある。また、実施例２と実施例４とが異なるところは、分岐実績記憶部６３を追加した点にある。さらに、実施例２と実施例４とが異なるところは、エミュレーション実行部４１Ｂに分岐実績更新部６４Ｂを追加した点にある。
【００８２】
分岐実績記憶部６３は、分岐命令における分岐実績を記憶する。ここで、分岐実績記憶部６３について図１１を参照しながら説明する。図１１は、分岐実績記憶部のデータ構造の一例を示す図である。図１１に示すように、分岐実績記憶部６３は、分岐先アドレス６３ｂ、分岐成功回数６３ｃ及び分岐失敗回数６３ｄを分岐命令アドレス６３ａに対応付けて記憶する。
【００８３】
分岐命令アドレス６３ａは、分岐命令を示す命令アドレスである。分岐先アドレス６３ｂは、分岐命令が分岐に成功した際に制御が移る命令アドレスである。分岐成功回数６３ｃは、分岐命令を実行した結果、分岐が成功した回数である。分岐失敗回数６３ｄは、分岐命令を実行した結果、分岐が失敗した回数である。
【００８４】
分岐実績更新部６４Ｂは、現命令が分岐命令である場合に、現命令の分岐実績を更新する。具体的には、分岐実績更新部６４Ｂは、現命令が分岐命令である場合に、現命令のエミュレーションがされた結果に基づいて、分岐が成功したか否かを判定する。そして、分岐実績更新部６４Ｂは、分岐が成功したと判定した場合には、現命令を示す現命令アドレスが分岐命令アドレス６３ａと合致する、分岐実績記憶部６３の分岐成功回数６３ｃを１加算する。一方、分岐実績更新部６４Ｂは、分岐が失敗したと判定した場合には、現命令を示す現命令アドレスが分岐命令アドレス６３ａと合致する、分岐実績記憶部６３の分岐失敗回数６３ｄを１加算する。
【００８５】
なお、分岐実績更新部６４Ｂは、現命令を示す現命令アドレスが分岐実績記憶部６３の分岐命令アドレス６３ａと合致しない場合には、分岐実績記憶部６３に１レコードを追加する。すなわち、分岐実績更新部６４Ｂは、分岐命令アドレス６３ａを現命令アドレスとし、分岐先アドレス６３ｂを現命令のオペランドから算出した分岐先アドレスとし、分岐成功回数６３ｃ及び分岐失敗回数６３ｄを「０」とするレコードを追加する。そして、分岐実績更新部６４Ｂは、分岐実績の判定結果に基づいて、分岐実績記憶部６３を更新する。
【００８６】
次命令アドレス判定部３４Ｂは、デコードされた命令の命令アドレスが前命令のエミュレーションの実行結果から得られる現命令アドレスと合致するか否かを判定する。具体的には、次命令アドレス判定部３４Ｂは、デコード処理部３３によってフェッチ命令情報記憶部２５に記憶された命令情報を、デコード処理部３３から取得する。また、次命令アドレス判定部３４Ｂは、命令アドレス記憶部２６から直近にエミュレートされる命令の命令アドレスである現命令アドレスを読み出す。また、次命令アドレス判定部３４Ｂは、命令情報に含まれる命令アドレス２５ａが現命令アドレスと合致するか否かを判定する。そして、次命令アドレス判定部３４Ｂは、命令アドレス２５ａが現命令アドレスと合致しない場合には、前命令のエミュレーションの実行結果から得られる命令アドレスが所定の条件により変更されたと判断する。そして、次命令アドレス判定部３４Ｂは、現命令アドレスが示す命令に後続する命令の命令アドレスを算出する。なお、所定の条件とは、例えば、現命令アドレスが実行結果となる前命令が分岐命令であった場合や割り込み処理があった場合等であり、これらの場合に実効アドレスが変更されるのである。
【００８７】
分岐命令判定部６１Ｂは、デコードされた命令の命令アドレスが、現命令アドレスと合致すると判定された場合には、当該命令が分岐命令であるか否かを判定する。また、分岐命令判定部６１Ｂが、デコードされた命令が分岐命令であると判定された場合には、当該命令の次命令のアドレス予測を次命令アドレス予測部６２Ｂに依頼する。一方、分岐命令判定部６１Ｂが、デコードされた命令が分岐命令でないと判定された場合には、命令情報に含まれる命令アドレス２５ａのアドレスが示す命令に後続する命令の命令アドレスを算出する。そして、分岐命令判定部６１Ｂは、算出した命令アドレスをプログラムカウンタに保持する。
【００８８】
次命令アドレス予測部６２Ｂは、デコードされた命令が分岐命令である場合には、分岐実績記憶部６３に基づいて、当該命令に後続する次命令の命令アドレスを予測する。具体的には、次命令アドレス予測部６２Ｂは、分岐命令判定部６１Ｂからデコードされた命令の次命令のアドレス予測依頼を取得すると、当該命令の命令アドレスと合致するレコードを分岐実績記憶部６３から読み出す。また、次命令アドレス予測部６２Ｂは、読み出したレコードの分岐成功回数６３ｃが分岐失敗回数６３ｄより大きい場合には、分岐命令の分岐が成功する可能性が高いと判断し、分岐実績記憶部６３の分岐先アドレス６３ｂを次命令アドレスとして予測する。一方、次命令アドレス予測部６２Ｂは、読み出したレコードの分岐成功回数６３ｃが分岐失敗回数６３ｄ以下である場合には、分岐命令の分岐が失敗する可能性が高いと判断し、デコードされた命令に後続する命令のアドレスを次命令アドレスとして予測する。また、次命令アドレス予測部６２Ｂは、デコードされた命令の命令アドレスと合致するレコードを分岐実績記憶部６３から読みだせなかった場合には、分岐先を予測できないので、デコードされた命令に後続する命令のアドレスを次命令アドレスとして予測する。
【００８９】
［実施例４に係る命令エミュレーション処理のシーケンス］
次に、エミュレーション装置４の命令エミュレーション処理のシーケンスを、図１２を参照して説明する。図１２は、実施例４に係るエミュレーション装置の処理のシーケンス図である。なお、図１２に示すように、エミュレーション装置４は、フェッチ・デコードＣＰＵ３０及び命令実行ＣＰＵ４０を備えているものとする。
【００９０】
まず、フェッチ処理部３２は、プログラムカウンタにしたがって、命令アドレスが示す命令語を命令列２２からフェッチし、デコード処理部３３は、フェッチした命令語をデコードする（ステップＳ９１）。ここでは、フェッチ処理部３２によってフェッチされた命令の命令アドレスを「命令アドレスＡ」として表すものとする。そして、デコード処理部３３は、命令関数記憶部２４に基づいて、この命令語の命令に相当する命令エミュレーション関数のアドレスを取得する（ステップＳ９２）。そして、デコード処理部３３は、フェッチされた命令語の命令アドレスＡ、デコードの結果得られるオペランド情報及び命令エミュレーション関数アドレスを含む命令情報を、フェッチ命令情報記憶部２５を通じて命令実行ＣＰＵ４０に通知する（ステップＳ９３）。
【００９１】
次に、命令実行ＣＰＵでは、命令情報の通知待ちを行い、命令情報を取得する（ステップＳ９４、９５）。そして、命令アドレス通知部４２は、前命令のエミュレーション処理の実行結果から得られる現命令アドレスを、命令アドレス記憶部２６を通じてフェッチ・デコードＣＰＵ３０に通知する（ステップＳ９６）。ここでは、現命令アドレスを「命令アドレスＡ’」として表すものとする。
【００９２】
一方、フェッチ・デコードＣＰＵ３０では、次命令アドレス判定部３４Ｂが前命令のエミュレーションの実行結果から得られる現命令アドレスの通知待ちを行なっている（ステップＳ９７）。そして、次命令アドレス判定部３４Ｂが現命令アドレスＡ’を取得すると（ステップＳ９８）、デコードされた命令の命令アドレスＡが現命令アドレスＡ’と合致するか否かを判定する（ステップＳ９９）。
【００９３】
命令アドレスＡが現命令アドレスＡ’と合致しないと判定された場合には（ステップＳ９９Ｎｏ）、次命令アドレス判定部３４Ｂは、現命令アドレスＡ’に、当該命令アドレスＡ’が示す命令の命令長を加算し、次命令アドレスを算出する（ステップＳ１００）。
【００９４】
命令アドレスＡが現命令アドレスＡ’と合致すると判定された場合には（ステップＳ９９Ｙｅｓ）、分岐命令判定部６１Ｂは、命令アドレスＡの命令が分岐命令であるか否かを判定する（ステップＳ１０１）。命令アドレスＡの命令が分岐命令でないと判定された場合には（ステップＳ１０１Ｎｏ）、分岐命令判定部６１Ｂは、現命令アドレスＡに、命令アドレスＡが示す命令の命令長を加算し、次命令アドレスを算出する（ステップＳ１０２）。
【００９５】
一方、命令アドレスＡの命令が分岐命令であると判定された場合には（ステップＳ１０１Ｙｅｓ）、次命令アドレス予測部６２Ｂは、分岐実績記憶部６３に基づいて、命令アドレスＡの命令に後続する次命令の命令アドレスを予測する（ステップＳ１０３）。具体的には、次命令アドレス予測部６２Ｂは、分岐命令アドレス６３ａのアドレスが命令アドレスＡと合致するレコードを分岐実績記憶部６３から読み出す。そして、次命令アドレス予測部６２Ｂは、読み出したレコードの分岐成功回数６３ｃが分岐失敗回数６３ｄより大きい場合には、分岐が成功する可能性が高いと判断し、分岐先アドレス６３ｂを次命令アドレスとして予測する。また、次命令アドレス予測部６２Ｂは、読み出したレコードの分岐成功回数６３ｃが分岐失敗回数６３ｄ以下である場合には、分岐が失敗する可能性が高いと判断し、命令アドレスＡの命令に後続する命令のアドレスを次命令アドレスとして予測する。また、次命令アドレス予測部６２Ｂは、命令アドレスＡと合致するレコードを分岐実績記憶部６３から読みだせなかった場合には、分岐先を予測できないので、命令アドレスＡの命令に後続する命令のアドレスを次命令アドレスとして予測する。
【００９６】
続いて、フェッチ処理部３２及びデコード処理部３３が、予測した次命令アドレスに関するフェッチ処理及びデコード処理を実行する（ステップＳ１０４）。ここでは、予測した次命令アドレスを「命令アドレスＢ」として表すものとする。そして、デコード処理部３３は、命令アドレスＢの命令に相当する命令エミュレーション関数のアドレスを取得し（ステップＳ１０５）、命令アドレスＢに関する命令情報を命令実行ＣＰＵ４０に通知する（ステップＳ１０６）。
【００９７】
一方、実行命令ＣＰＵ４０では、現命令アドレスＡ’をフェッチ・デコードＣＰＵ３０に通知した後、命令アドレス合致判定部４３は、前命令のエミュレーションの実行結果から得られる命令アドレスＡ’が命令アドレスＡと合致するか否かを判定する（ステップＳ１０７）。そして、命令アドレスＡ’が命令アドレスＡと合致する場合には（ステップＳ１０７Ｙｅｓ）、命令アドレス合致判定部４３は、前命令が分岐命令等でないと判断し、命令情報を用いたエミュレーション処理を実行させるためにステップＳ１１０に移行する。
【００９８】
命令アドレスＡ’が命令アドレスＡと合致しない場合には（ステップＳ１０７Ｎｏ）、前命令が分岐命令等であると判断し、フェッチ・デコード処理部４４は、命令アドレスＡ’のフェッチ及びデコード処理を実行する（ステップＳ１０８）。そして、フェッチ・デコード処理部４４は、命令関数記憶部２４に基づいて、命令アドレスＡ’の命令に相当する命令エミュレーション関数のアドレスを取得し（ステップＳ１０９）、命令情報を作成する。
【００９９】
続いて、エミュレーション処理部４５は、命令情報に含まれる命令関数アドレス２５ｃのアドレスが示す命令エミュレーション関数を呼び出し（ステップＳ１１０）、現命令アドレスＡ’が示す現命令のエミュレーション処理を実行する（ステップＳ１１１）。ここで、現命令が分岐命令の場合には、分岐命令のエミュレーション処理が実行される。
【０１００】
続いて、命令実行ＣＰＵ４０では、命令情報の通知待ちを行い、次命令アドレスＢを含む命令情報を取得する。（ステップＳ１１２、１１３）。そして、分岐実績更新部６４Ｂは、現命令アドレスＡ’の現命令が分岐命令である場合に、現命令の分岐実績を更新する（ステップＳ１１４）。具体的には、分岐実績更新部６４Ｂは、現命令アドレスＡ’の現命令が分岐命令である場合に、現命令のエミュレーションがされた結果に基づいて、分岐が成功したか否かを判定する。そして、分岐実績更新部６４Ｂは、分岐が成功したと判定した場合には、現命令アドレスＡ’が分岐命令アドレス６３ａと合致する、分岐実績記憶部６３の分岐成功回数６３ｃを１加算する。一方、分岐実績更新部６４Ｂは、分岐が失敗したと判定した場合には、現命令アドレスＡ’が分岐命令アドレス６３ａと合致する、分岐実績記憶部６３の分岐失敗回数６３ｄを１加算する。
【０１０１】
［実施例４の効果］
上記実施例４によれば、分岐命令判定部６１は、次命令アドレス判定部３４によってデコードされた命令の命令アドレスが命令アドレス通知部４２によって通知された現命令アドレスと合致すると判定された場合には、当該命令が分岐命令であるか否かを判定する。そして、次命令アドレス予測部６２は、分岐命令判定部６１による判定の結果、現命令アドレスの命令が分岐命令である場合には、当該命令に後続する次命令の命令アドレスを予測する。
【０１０２】
かかる構成によれば、分岐命令である現命令アドレスの命令のエミュレーション処理が実行されても、エミュレーション処理の実行結果から得られる命令アドレスの命令を先取り的にデコードさせることが可能となる。この結果、現命令アドレスの命令が分岐命令であっても、エミュレーション装置４は、分岐命令に後続している命令を無条件にフェッチする場合に生じるフェッチ及びデコード処理の無駄を軽減できる。さらに、現命令アドレスの命令が分岐命令である場合に、エミュレーション装置４は、分岐命令に後続している命令を無条件にフェッチする場合に生じる命令実行ＣＰＵ４０側でのフェッチ及びデコード処理のオーバヘッドを削減できる。
【０１０３】
なお、次命令アドレス予測部６２Ｂは、デコードされた命令が無条件分岐命令である場合には、分岐実績記憶部６３を用いないで、デコードによって得られる分岐先アドレスを次命令アドレスとしても良い。これによって、次命令アドレス予測部６２Ｂは、次命令アドレスを確実に求めることができ、無条件分岐命令に後続している命令を無条件にフェッチする場合に生じるフェッチ及びデコード処理の無駄を確実になくせる。
【０１０４】
［プログラム等］
【０１０５】
また、このエミュレーション装置２〜４は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記した命令デコード部３１、エミュレーション実行部４１等の各機能を搭載することによって実現することができる。
【０１０６】
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、フェッチ処理部３２とデコード処理部３３とを１個の部として統合しても良い。一方、デコード処理部３３を、命令のデコードを実行する命令デコード部と命令エミュレーション関数のアドレスを取得する命令エミュレーション関数取得部とに分散しても良い。また、ターゲット記憶部２１等の記憶部をエミュレーション装置２の外部装置としてネットワーク経由で接続するようにしても良い。
【０１０７】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１３を用いて、図３に示したエミュレーション装置２と同様の機能を有するエミュレーション処理プログラムを実行するコンピュータの一例を説明する。
【０１０８】
図１３は、エミュレーション処理プログラムを実行するコンピュータを示す図である。図１３に示すように、コンピュータ１０００は、ＲＡＭ（Random  Access  Memory）１０１０と、キャッシュ１０２０と、ＨＤＤ１０３０と、ＲＯＭ（Read  Only  Memory）１０４０と、ＣＰＵａ（Central  Processing  Unit）１０５０、ＣＰＵｂ１０６０及びバス１０７０とを有する。ＲＡＭ１０１０、キャッシュ１０２０、ＨＤＤ１０３０、ＲＯＭ１０４０、ＣＰＵａ１０５０、ＣＰＵｂ１０６０は、バス１０７０によって接続されている。
【０１０９】
ＲＯＭ１０４０には、図３に示したエミュレーション装置２と同様の機能を発揮するエミュレーション処理プログラムが予め記憶されている。具体的には、ＲＯＭ１０４０には、フェッチ・デコード処理プログラム１０４１と、エミュレーション処理プログラム１０４２とが記憶されている。
【０１１０】
そして、ＣＰＵａ１０５０は、フェッチ・デコード処理プログラム１０４１を読み出して実行する。ＣＰＵｂ１０６０は、エミュレーション処理プログラム１０４２を読み出して実行する。これにより、図１３に示すように、フェッチ・デコード処理プログラム１０４１は、フェッチ・デコード処理プロセス１０５１になり、エミュレーション処理プログラム１０４２は、エミュレーション処理プロセス１０６１になる。そして、フェッチ・デコード処理プロセス１０５１及びエミュレーション処理プロセス１０６１は、ターゲットメモリ情報１０３１及び命令関数情報１０３２から読み出した情報等を適宜ＲＡＭ１０１０上の自身に割り当てられた領域に展開する。そして、フェッチ・デコード処理プロセス１０５１及びエミュレーション処理プロセス１０６１は、この展開したデータ等に基づいて各種データ処理を実行する。なお、フェッチ・デコード処理プロセス１０５１は、図３に示した命令デコード部３１に対応し、エミュレーション処理プロセス１０６１は、図３に示したエミュレーション実行部４１に対応する。
【０１１１】
また、ＨＤＤ１０３０には、図１３に示すようにターゲットメモリ情報１０３１及び命令関数情報１０３２が設けられる。ターゲットメモリ情報１０３１は、例えば、図３に示したターゲットメモリ記憶部２１に記憶される各種データ（命令列２２及びオペランド２３）に対応する。命令関数情報１０３２は、例えば、図３に示した命令関数記憶部２４に記憶されるデータに対応する。
【０１１２】
なお、上述した各プログラム１０４１〜１０４２については、必ずしもＲＯＭ１０４０に記憶させなくても良い。例えば、コンピュータ１０００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にプログラム１０４１〜１０４２を記憶させても良い。又は、コンピュータ１０００の内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」にプログラム１０４１〜１０４２を記憶させても良い。又は、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１０００に接続される「他のコンピュータ（又はサーバ）」にプログラム１０４１〜１０４２を記憶させても良い。そして、コンピュータ１０００は、上述したフレキシブルディスクなどから各プログラムを読み出して実行するようにしても良い。
【０１１３】
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
【０１１４】
（付記１）第１のプロセッサ及び第２のプロセッサを含む情報処理装置であって、
前記第１のプロセッサが、
受信した命令アドレスの次の命令アドレスを算出する算出部と、
算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信する第１の送信部とを含み、
前記第２のプロセッサが、
実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信する第２の送信部と、
前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する実行部と、
を含むことを特徴とする情報処理装置。
【０１１５】
（付記２）前記命令情報は、前記算出部が算出した前記命令アドレスに示される命令語に対応するエミュレート関数の格納先アドレスであること
を特徴とする付記１に記載の情報処理装置。
【０１１６】
（付記３）前記実行部は、
前記第１のプロセッサから受信した前記第２の命令アドレスに関する命令の処理の開始から当該命令に後続する命令の処理の終了までに要する第１の実行時間が、命令アドレスに基づいて命令情報を読み出す処理の第２の実行時間に近似しているか否かを判定する命令実行時間判定部を有し、
前記第２の送信部は、
前記命令実行時間判定部による判定の結果、前記第１の実行時間が、前記第２の実行時間に近似している場合には、当該命令に後続する命令の命令アドレスを前記第１のプロセッサに送信すること
を特徴とする付記１又は付記２に記載の情報処理装置。
【０１１７】
（付記４）複数の命令情報を記憶する命令情報記憶部を有し、
前記実行部は、
前記命令情報記憶部に記憶された複数の命令情報を用いて、順次エミュレーションを実行することを特徴とする付記１に記載の情報処理装置。
【０１１８】
（付記５）前記第２の送信部によって送信された前記第１の命令アドレスの命令が分岐命令であるか否かを判定する分岐命令判定部と、
前記分岐命令判定部による判定の結果、前記第１の命令アドレスの命令が分岐命令である場合には、当該命令に後続する次の命令の命令アドレスを予測する次命令アドレス予測部と
を有することを特徴とする付記１又は付記２に記載の情報処理装置。
【０１１９】
（付記６）第１のプロセッサ及び第２のプロセッサを含むコンピュータに、
受信した命令アドレスの次の命令アドレスを算出し、
算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信し、
実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信し、
前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する
処理を実行させることを特徴とするエミュレーション処理プログラム。
【０１２０】
（付記７）第１のプロセッサ及び第２のプロセッサを含む情報処理装置にエミュレーション処理を実行させるエミュレーション処理方法であって、
受信した命令アドレスの次の命令アドレスを算出し、
算出した命令アドレスと、算出した命令アドレスに基づいて読み出した命令情報とを前記第２のプロセッサに送信し、
実行した処理の実行結果に含まれる命令アドレスである第１の命令アドレスを前記第１のプロセッサに送信し、
前記第１のプロセッサから受信した命令アドレスである第２の命令アドレスが、前記第１の命令アドレスと同じである場合に、前記第１のプロセッサから受信した命令情報に基づく処理を実行し、前記第２の命令アドレスが前記第１の命令アドレスと同じでない場合に、前記第１の命令アドレスに基づいて命令情報を読出し、読み出した命令情報に基づく処理を実行する
ことを特徴とするエミュレーション処理方法。
【符号の説明】
【０１２１】
１〜４  エミュレーション装置
１１  命令デコード部
１２  エミュレーション実行部
１３  命令アドレス通知部
２１  ターゲットメモリ記憶部
２２  命令列
２３  オペランド
２４  命令関数記憶部
２５  フェッチ命令情報記憶部
２６  命令アドレス記憶部
３０  フェッチ・デコードＣＰＵ
３１、３１Ｂ  命令デコード部
３２  フェッチ処理部
３３  デコード処理部
３４、３４Ｂ  次命令アドレス判定部
４０  命令実行ＣＰＵ
４１、４１Ａ、４１Ｂ  エミュレーション実行部
４２、４２Ａ  命令アドレス通知部
４３  命令アドレス合致判定部
４４、４４Ａ  フェッチ・デコード処理部
４５、４５Ａ  エミュレーション処理部
５１Ａ  命令実行時間判定部
６１Ｂ  分岐命令判定部
６２Ｂ  次命令アドレス予測部
６３  分岐実績記憶部
６４Ｂ  分岐実績更新部
【図１】
0005533538.tif 000002
【図２】
0005533538.tif 000003
【図３】
0005533538.tif 000004
【図４】
0005533538.tif 000005
【図５】
0005533538.tif 000006
【図６】
0005533538.tif 000007
【図７】
0005533538.tif 000008
【図８】
0005533538.tif 000009
【図９】
0005533538.tif 000010
【図１０】
0005533538.tif 000011
【図１１】
0005533538.tif 000012
【図１２】
0005533538.tif 000013
【図１３】
0005533538.tif 000014
【図１４】
0005533538.tif 000015