(57)【要約】【課題】  処理を効率的に実行する。【解決手段】  マイクロプロセッサ１では、プログラム実行時に複数データのうち使用可能性の低いデータの更新は省略し、汎用レジスタ部５では更新に必要なレジスタ群のデータは退避用のレジスタ群に１サイクルで転送される。データステータス処理ユニット２１は更新が省略されたデータのデータステータスレジスタＤＳＴ０〜２の対応のデータステータスビットを無効に設定して、更新省略のデータを使用する処理を実行する必要があるか否かを命令デコードユニット２による命令コードのデコード結果が示すオペランドとステータスビットを参照して検出する。必要ありと検出すると割込みにより退避レジスタのデータを元のレジスタに復帰させて該データの更新を実行し、更新後の該データを用いて処理を実行する。【選択図】        図１
2005063042.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行するためのプログラム実行部と、
複数データそれぞれに対応して該データは有効または無効のいずれであるかを示しプログラム実行時に参照されるステータス情報を格納するステータス記憶部とを備えて、
前記プログラム実行部は、
前記プログラム実行時に前記複数データのうち使用可能性の低いデータの更新を省略して、対応の前記ステータス情報を無効に設定する更新省略手段と、
前記プログラム実行時に、前記ステータス記憶部の内容に基づき前記更新省略手段により更新が省略されたデータを用いる処理を実行すると判断したときは、予め該データの更新を実行した後に、該処理を実行する制御手段とを有する、情報処理装置。
【請求項２】
前記制御手段は、
処理に用いるデータの更新が省略されていることを、前記ステータス記憶部の該データに対応の前記ステータス情報に基づいて検出する無効データ検出手段を含む、請求項１に記載の情報処理装置。
【請求項３】
異なる２つのレジスタ群を有するレジスタ部と、
前記２つのレジスタ群の一方レジスタ群は複数のレジスタを含み、他方レジスタ群は前記一方レジスタ群の複数レジスタとは異なる複数レジスタを含み、
前記一方レジスタ群の複数のレジスタと、前記他方レジスタ群の複数レジスタとの間でレジスタ毎のデータ転送を同時に行なうためのマルチデータ転送手段とをさらに備えて、
前記一方レジスタ群の前記複数レジスタには、前記プログラム実行時に参照するために前記複数データがそれぞれ格納されて、前記他方レジスタ群の前記複数レジスタには前記複数データを退避させて保存することを特徴とする、請求項１または２に記載の情報処理装置。
【請求項４】
前記一方レジスタ群の複数レジスタそれぞれと前記他方レジスタ群の複数レジスタそれぞれとは予め定められた１対１対応でデータ転送することを特徴とする、請求項３に記載の情報処理装置。
【請求項５】
前記更新省略手段は、前記制御手段による前記データの更新のために、前記マルチデータ転送手段により前記一方レジスタ群の複数レジスタの内容を前記他方レジスタ群の複数レジスタに転送するデータ退避手段を有する、請求項３または４に記載の情報処理装置。
【請求項６】
前記データ退避手段は、
更新が省略されたデータを更新するために選択された１つまたは複数のデータを格納した前記一方レジスタ群の１つまたは複数のレジスタの内容を、前記マルチデータ転送手段により前記他方レジスタ群の対応する１つまたは複数のレジスタに転送する選択データ退避手段を含む、請求項５に記載の情報処理装置。
【請求項７】
前記制御手段は、前記複数データのうちの１つ以上のデータを予め準備されたメモリに格納する処理を実行するときは、前記無効データ検出手段による検出を省略することを特徴とする、請求項２に記載の情報処理装置。
【請求項８】
前記制御手段は、割込みにより前記データの更新を実行することを特徴とする、請求項１に記載の情報処理装置。
【請求項９】
前記プログラムの実行に従いデータが処理される毎に前記ステータス記憶部の対応する前記ステータス情報が該処理内容に基づき操作されることを特徴とする、請求項１に記載の情報処理装置。
【請求項１０】
前記複数データには前記プログラムの実行に関与するフラグが含まれることを特徴とする、請求項１に記載の情報処理装置。
【請求項１１】
情報処理装置に搭載されたレジスタ部におけるデータ転送をするためのデータ転送装置であって、
前記レジスタ部は異なる２つのレジスタ群を有し、
前記２つのレジスタ群の一方レジスタ群は複数のレジスタを含み、他方レジスタ群は前記一方レジスタ群の複数レジスタとは異なる複数レジスタを含み、
前記データ転送装置は、
前記一方レジスタ群の複数のレジスタと、前記他方レジスタ群の複数レジスタとの間でレジスタ毎のデータ転送を同時に行なうことを特徴とする、データ転送装置。
【請求項１２】
前記一方レジスタ群の複数レジスタそれぞれと前記他方レジスタ群の複数レジスタそれぞれとは予め定められた１対１対応でデータ転送することを特徴とする、請求項１１に記載のデータ転送装置。
【請求項１３】
前記データ転送装置の外部から与えられる命令に基づいて、データ転送する前記１対１の対応の１つまたは複数組のレジスタを指定することを特徴とする、請求項１２に記載のデータ転送装置。
【請求項１４】
前記レジスタ部において、前記予め定められた１対１対応のレジスタどうしは隣接して配置されることを特徴とする、請求項１２または１３に記載のデータ転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置およびデータ転送装置に関し、特に、情報処理装置における効率的な処理を図るための情報処理装置およびデータ転送装置に関する。
【背景技術】
【０００２】
マイクロプロセッサで実行される処理ついては常に性能の向上が望まれている。このような要求に応えるために、処理性能が要求されるケースでは、予め準備されたフラグの値に応じて所定処理（処理性能が要求されるケースに限っては無駄な処理）を省略して、プロセッサの運用を効率化する方法が提案されている（たとえば特許文献１を参照）。
【０００３】
またフラグに関する処理が不要なケースでは、この処理を省略して処理効率を高めることができるであろう。そこで、ある命令セットに対応したプロセッサＡ用のプログラムを、別の命令セットに対応したプロセッサＢで実行する場合を想定しフラグに関する処理の省略化について説明する。
【０００４】
このような場合には、バイナリトランスレーションが実行されることになる。つまり、プロセッサＢでプロセッサＡ用のオブジェクトコードを模擬実行することになる。このような処理において解決すべき課題の１つにフラグのステータス（値）の模擬（以下、フラグの模擬という）がある。たとえばプロセッサＢがオーバーフローフラグ（以下、フラグＶという）を備えていない場合、加算命令実行時のフラグＶの動作を模擬するには、（１）２つのソースオペランドの符号が同じである、（２）加算結果の符号がこれらと異なっている、という条件（１）と（２）を調べる必要がある。これら２つの条件を満たした場合にフラグＶをセットするが、この処理には複数命令の実行が必要とされる。
【特許文献１】特開平８−１３７６８７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、複数種類のフラグを備えたマイクロプロセッサでは、ある命令により値が更新されたフラグが、その後、一度も参照されることなく値が書換えられることがあり得るから、このようなフラグの模擬に係る処理を省略することは可能である。たとえばキャリーフラグ（以下、フラグＣという）、オーバーフローフラグ（フラグＶ）、０フラグ（以下、フラグＺという）およびネガティブフラグ（以下、フラグＮという）を有したマイクロプロセッサで、以下の命令（Ｃ１）〜（Ｃ３）を実行する場合を想定する。
【０００６】
（Ｃ１）  ADDS R8,R4：R8＝R8＋R4
：C,V,Z,Nの全フラグを更新する。
【０００７】
（Ｃ２）  ADDCS R9,R5：R9＝R9＋R5＋Carry−Flag
：C,V,Z,Nの全フラグを更新する。
【０００８】
（Ｃ３）  ZNE Label：条件分岐。Z＝0ならば分岐実行
上述した命令（Ｃ１）〜（Ｃ３）を実行した場合、命令（Ｃ１）の実行により更新されたＶ，ＺおよびフラグＮは一度も参照されることなく、次の命令（Ｃ２）が実行されることにより書換えられてしまう。
【０００９】
このように、その後に参照されないフラグの動作を模擬するために多くの命令を費やす（実行する）のは無駄であり処理を効率化するには、参照されるフラグのみを模擬することが望まれる。命令（Ｃ１）については、フラグＣのみ模擬すればよいことが容易にわかる。ところが命令（Ｃ２）については、フラグＺ以外を更新する必要があるか否かを簡単に判断することはできない。たとえば条件分岐の命令（Ｃ３）で示される分岐条件が成立しない場合は何もフラグは参照しないけれども分岐条件成立の場合にはフラグＶを参照するなどという場合が想定される。安全を期するには参照される可能性のあるすべてのフラグを模擬実行すればよいが、処理の効率は低下する。また条件分岐による分岐先の命令コードがレジスタによる間接指定で与えられている場合には、分岐先で実行される命令を特定することができない。したがって分岐先で実行され得るあらゆる命令を想定して、全フラグの動作を模擬する必要がある。この場合にはさらに処理効率は低下する。
【００１０】
それゆえにこの発明の目的は、処理を効率的に実行することのできる情報処理装置およびデータ転送装置を提供することである。
【課題を解決するための手段】
【００１１】
この発明のある局面に従う情報処理装置は、プログラムを実行するためのプログラム実行部と、複数データそれぞれに対応して該データは有効または無効のいずれであるかを示しプログラム実行時に参照されるステータス情報を格納するステータス記憶部とを備えて、プログラム実行部は、プログラム実行時に複数データのうち使用可能性の低いデータの更新を省略して、対応のステータス情報を無効に設定する更新省略手段と、プログラム実行時に、ステータス記憶部に内容に基づき更新省略手段により更新が省略されたデータを用いる処理を実行すると判断したときは、予め該データの更新を実行した後に、該処理を実行する制御手段とを有する。
【００１２】
この発明の他の局面に従う、情報処理装置に搭載されたレジスタ部におけるデータ転送をするためのデータ転送装置は次のように構成される。レジスタ部は異なる２つのレジスタ群を有し、２つのレジスタ群の一方レジスタ群は複数のレジスタを含み、他方レジスタ群は一方レジスタ群の複数レジスタとは異なる複数レジスタを含む。そしてデータ転送装置は、一方レジスタ群の複数のレジスタと、他方レジスタ群の複数レジスタとの間でレジスタ毎のデータ転送を同時に行なう。
【発明の効果】
【００１３】
この発明のある局面に従う情報処理装置は、プログラム実行部は、プログラム実行時に複数データのうち使用可能性の低いデータの更新は省略し、更新が省略されたデータのデータステータス情報を無効に設定するから、更新が省略されたデータを用いる処理を実行する必要があるか否かをステータス情報を参照することで簡単に判断できる。
【００１４】
また、必要ありと判断したときは、該データの更新を実行した後に該データを用いた処理を実行するようにしているから、データ更新を省略するとしても処理精度は維持され、また無効データが使用されてプログラムが暴走したりすることも回避できる。その結果、処理精度を維持しながら使われないと想定されるデータの更新を投機的に省略することが可能となり処理の高速化を図ることもできる。
【００１５】
この発明の他の局面に従うデータ転送装置は、情報処理装置のレジスタ部における一方レジスタ群の複数のレジスタと、他方レジスタ群の複数レジスタとの間でレジスタ毎のデータ転送を同時に行なうから、情報処理装置の１サイクル時間で複数のデータを同時に転送することできて、情報処理装置について高い処理効率を得ることができる。
【発明を実施するための最良の形態】
【００１６】
以下、この発明の実施の形態について図面を参照して詳細に説明する。本実施の形態では、本出願人が特開平１０−０４９３６８号公報において提案したマイクロプロセッサ（情報処理装置）の構成に対してレジスタに保持しているデータが有効か無効かを識別するための構成と無効なデータが使用された場合にこれを検出するための構成を付加したマイクロプロセッサ（情報処理装置）が提供される。さらに本実施の形態で提供されるマイクロプロセッサは、一度に複数のレジスタ間でデータ転送を行なうマルチデータ転送機能を有している。
【００１７】
（マイクロプロセッサの全体構成）
図１は、本実施の形態に係るマイクロプロセッサ１の構成図である。このマイクロプロセッサ１は、３２ビットの内部データバスを有する３２ビットマイクロプロセッサである。図においてマイクロプロセッサ１は、プログラムの実行部である命令デコードユニット２、メモリユニット３、整数演算ユニット４およびデータステータスレジスタＤＳＴ０〜ＤＴＳ２を有するデータステータス処理ユニット２１、汎用レジスタ部５、所定処理のプログラムの複数の命令コードが格納される命令ＲＡＭ（Random Access Memory）６、データが格納されるデータＲＡＭ７、ならびに各部間でデータを転送するためのバスＳ１〜Ｓ６およびバスＤ１〜Ｄ３を備える。
【００１８】
命令デコードユニット２は、命令コードをデコードするデコーダ８と９ならびにプロセッサ１の状態を示すプロセッサ状態語（Processor Status Word ；以下、プロセッサ状態語をＰＳＷという）１０を有して、命令ＲＡＭ６から入力した命令コードをデコードする処理を行う。メモリユニット３はアドレス計算を行う。整数演算ユニット４は乗算器１７、アキュムレータ１８、ＡＬＵ（Arithmetic Logical Unit）１９およびシフタ２０を有して論理演算やシフト演算などの各種演算を行う。汎用レジスタ部５は複数の汎用レジスタを含み３２ビット×６４ワードの構成を有する。
【００１９】
命令デコードユニット２においては、デコーダ８のデコード結果とＰＳＷ１０の内容に基づいて制御信号１１を作成し、それをメモリユニット３に与える。また、命令デコードユニット２は、デコーダ９のデコード結果とＰＳＷ１０の内容に基づいて制御信号１２を作成し、それを整数演算ユニット４に与える。また、デコーダ８または９のデコード結果に基づき制御信号２２を作成して、それをデータステータス処理ユニット２１に与える。制御信号２２の詳細に付いては後述する。
【００２０】
メモリユニット３はＰＣ（Program Counter）制御部１３、メモリ制御部１４、ＡＬＵ１５およびシフタ１６を有する。ＰＣ制御部１３はジャンプや分岐を含まない命令を実行するとＰＣ（プログラムカウンタ）値をインクリメントして次に実行する命令に対するＰＣ値を算出するとともに、ジャンプや分岐を含む命令の実行時に分岐変位をＰＣ値に加算したり、演算で指定されたアドレッシングモードに応じた計算を行ってジャンプ先の命令に対するＰＣ値を計算する。また、ＰＣ制御部１３は、計算したＰＣ値を命令ＲＡＭ６に送り、命令ＲＡＭ６から該ＰＣ値に基くアドレス指定により次位の命令コードを出力させる。メモリ制御部１４はオペランドとなるデータのアクセスを制御する。メモリ制御部１４は、アドレスデータをデータＲＡＭ７に転送し命令実行に必要なデータをＲＡＭ７においてアクセスする。ＡＬＵ１５は汎用レジスタ部５からバスＳ１〜Ｓ３を介して転送された最大３ワードのデータを用いて算術論理演算を行い演算結果をバスＤ１を介して汎用レジスタ部５に転送する。シフタ１６は汎用レジスタ部５からバスＳ１〜Ｓ３を介して転送されたデータを用いてシフト演算を行い演算結果をバスＤ１を介して汎用レジスタ５に転送する。
【００２１】
整数演算ユニット４において、乗算器１７は汎用レジスタ部５からバスＳ４〜Ｓ６を介して転送された最大３ワードのデータを用いて乗算を行い演算結果をバスＤ２とバスＤ３を介して汎用レジスタ部５に転送する。アキュムレータ１８は乗算の結果を累積加算または累積減算して保持する。アキュムレータとして、６４ビットのものが２本ある。ＡＬＵ１９は汎用レジスタ部５からバスＳ４〜Ｓ６を介して転送された最大３ワードのデータを用いて算術論理演算を行い演算結果をバスＤ２とバスＤ３を介して汎用レジスタ部５に転送する。シフタ２０は汎用レジスタ部５からバスＳ４〜Ｓ６を介して転送されたデータを用いてシフト演算を行い演算結果をバスＤ２とバスＤ３を介して汎用レジスタ部５に転送する。
【００２２】
（レジスタの構成）
図２（Ａ）〜（Ｄ）には本実施の形態に係るレジスタの構成が示される。汎用レジスタ部５は図２（Ａ）に示すような６４本の３２ビット長のレジスタＲ０〜Ｒ６３を有し、制御レジスタ１５０は図２（Ｂ）に示すような１５本のレジスタＣＲ０〜ＣＲ１４を有し、およびアキュムレータ１８は図２（Ｃ）に示すような２本のアキュムレータＡ０とＡ１を有する。
【００２３】
汎用レジスタＲ０の内容は常に０であり、そこへの書込みは無視される。汎用レジスタＲ６２は、サブルーチンからの戻り先アドレスが設定されるリンクレジスタである。汎用レジスタＲ６３はスタックポインタであり、ＰＳＷ１０のフィールドの値に応じてユーザスタックポインタ（ＳＰＵ）または割込みスタックポインタ（ＳＰＩ）として動作する。
【００２４】
制御レジスタ１５０には、プログラムカウンタＰＣのためのレジスタＣＲ０、ＰＳＷ１０のためのレジスタＣＲ１および各種の専用レジスタＣＲ２〜ＣＲ１４およびが含まれる。専用レジスタＣＲ１２〜ＣＲ１４はデータステータスレジスタＤＳＴ０〜ＤＳＴ２に当てられている。
【００２５】
これら３つのデータステータスレジスタＤＳＴ０〜ＤＳＴ２はデータステータス処理ユニット２１の中に配置される。これらデータステータスレジスタは他の制御レジスタと同様に、汎用レジスタ部５において配置されているレジスタＲ０〜Ｒ６３との間でデータ転送が可能である。この転送のためにはバスＳ１またはバスＤ１が使用される。
【００２６】
図２（Ｄ）を参照してデータステータスレジスタＤＳＴ０はレジスタＲ１〜レジスタＲ３２に対応付けされたビットＲＳＴ０〜ＲＳＴ３２を有する。データステータスレジスタＤＳＴ１はレジスタＲ３３〜Ｒ６２に対応付けされたビットＲＳＴ３３〜ＲＳＴ６２、ならびにレジスタＲ６３のユーザスタックポインタＳＰＵと割込スタックポインタＳＰＩに対応付けされたビットＲＳＴ６３ＵとビットＲＳＴ６３Ｉを有する。データステータスレジスタＤＳＴ２のビットＦＳＴ０〜ＦＳＴ７はＰＳＷ１０の後述するフラグＦ０〜Ｆ７に対応付けされている。データステータスレジスタＤＳＴ２のそれ以外のビット（８番目〜最終番目のビット）には何も配置されておらず、これらのビット上の書込は無視され読出の際には常に“０”が読出される。
【００２７】
データステータスレジスタＤＳＴ０〜ＤＳＴ２のこれら各ビットは、対応付けされるレジスタやフラグに保持しているデータの有効／無効（必要に応じて更新されてプロセッサ１で実行する処理にとって有効であるか、更新は省略されてプロセッサ１で実行される処理にとっては無効であるか）を示し、データのみならずプログラム実行に関与する各種フラグについてもステータスを明示して、後述のようにそれを操作できる。ビットが“０”の場合は対応するレジスタやフラグの値が無効であることを示し、“１”の場合は対応するレジスタやフラグの値が有効であることを示す。
【００２８】
図１のマイクロプロセッサ１がリセットされた場合には、データステータスレジスタＤＳＴ０およびＤＳＴ１のビットはすべて“０”に初期化されて、データステータスレジスタＤＳＴ２のビットはすべて“１”に初期化される。
【００２９】
（データステータスレジスタＤＳＴ０〜ＤＳＴ２の操作命令）
本実施の形態ではデータステータスレジスタＤＳＴ０〜ＤＳＴ２のビットを操作するために、命令ＲＡＭ６から読出されて図１のマイクロプロセッサ１で実行可能な以下の命令が準備される。
【００３０】
DSCLR：DST0,DST1およびDST2の選択したレジスタの任意の１ビットをクリア
DSSET：DST0,DST1およびDST2の選択したレジスタの任意の１ビットをセット
DSCLRM：DST0,DST1およびDST2の選択したレジスタの任意の複数ビットを一度にクリア
DSSETM：DST0,DST1およびDST2の選択したレジスタの任意の複数ビットを一度にセット
これらの命令DSCLR、DSSET、DSCLRMおよびDSSETMが命令ＲＡＭ６から読出されるとデコーダ８または９により解読されて、命令デコードユニット２は解読結果に基く制御信号２２を生成してデータステータス処理ユニット２１に出力する。
【００３１】
命令DSCLRと命令DSSETは図３（Ａ）のフォーマットShort＿Aにエンコードされる。フォーマットShort＿Aは演算内容（オペレーションコード）を指定するフィールド１２０、データステータスレジスタＤＳＴ０〜ＤＳＴ２のうちの操作対象のレジスタ番号を指定する２つのフィールド１２１，１２２、フィールド１２３、およびフィールド１２３がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２５を有する。データステータス処理ユニット２１は命令DSCLRと命令DSSETによる制御信号２２を入力すると、該制御信号２２に基いて以下のように動作する。つまり、命令DSCLRと命令DSSETのフィールド１２１または１２２で指定されたデータステータスレジスタにおけるフィールド１２３の内容により指定される所定ビットをクリアまたはセットする。
【００３２】
命令DSCLRMと命令DSSETMは図３（Ｂ）のフォーマットLong＿1にエンコードされる。フォーマットLong＿1は、演算内容（オペレーションコード）を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１，１２２および３２ビット長の即値を指定する即値フィールド１３２を有する。データステータス処理ユニット２１は命令DSCLRMと命令DSSETMによる制御信号２２を入力すると、該制御信号２２に基いて以下のように動作する。つまり、命令DSCLRMと命令DSSETMの即値フィールド１３２のビット０からビット３１（これは、対応のフィールド１２１または１２２で指定された操作対象のデータステータスレジスタのビット０からビット３１に対応している）のうち１がセットされているビットに対応の操作対象のデータステータスレジスタのビットについてセットまたはクリアを行なう。このように外部から操作命令を与えることにより、データステータスレジスタＤＳＴ０〜ＤＳＴ２の各ビットを簡単に操作できる。
【００３３】
図４はＰＳＷ１０の詳細内容を示す図である。ＰＳＷ１０の上位１６ビットには、スタックポインタを切り替えるためのＳＭビット１７１、セルフデバッグトラップ（ＳＤＢＴ）の検出を示すＥＡビット１７２、ＳＤＢＴの許可を指定するＤＢビット１７３、割り込み許可を指定するＩＥビット１７４、リピート動作の許可を指定するＲＰビット１７５、モジュロアドレッシングの許可を指定するＭＤビット１７６、フラグＶＩＥを格納するビット１７７およびフラグＶＳを格納するビット１７８を有する。本実施の形態では説明を簡単にするために本実施の形態に特に関与しないビット１７１〜１７６についての詳細説明は省略し、本実施の形態で特に参照されているフラグＶＳとＶＩＥについて説明する。なお、フラグＶＳとＶＩＥは命令デコードユニット２により必要に応じて更新される。
【００３４】
ＰＳＷ１０の下位１６ビットには８個のフラグＦ０〜Ｆ７が格納される。その中のフラグＦ０を示すビット１８１およびフラグＦ１を示すビット１８２は演算の有効／無効を指定する。下位１６ビットの各ビットの値は比較演算や算術演算の結果に応じて変化する。また、フラグ初期化演算で初期化したり、フラグ値書込み演算で任意の値を書込むことによって変化する。下位１６ビットの内容は、フラグ値読出し演算によって読出される。フラグＦ１は汎用フラグ（実行コントロールフラグ）、フラグＦ２は汎用フラグ、フラグＦ３は汎用フラグ、フラグＦ４は飽和演算フラグ、フラグＦ５（Ｖ）はオーバーフローフラグ、フラグＦ６（ＶＡ）は累積オーバーフローフラグ、フラグＦ７（Ｃ）はキャリー／ボローフラグとしてそれぞれ機能する。
【００３５】
本実施の形態ではＰＳＷ１０のフラグＶＩＥとフラグＶＳは次のように更新される。無効データが演算などの処理に使われたことがデータステータス処理ユニット２１によって検出されると、データステータス処理ユニット２１は該検出結果を命令デコードユニット２に通知するので、応じて命令デコードユニット２はフラグＶＳをセットする。また命令ＲＡＭ６から読出された転送命令によって命令デコードユニット２が“０”を書込むことによってフラグＶＳをクリアすることができる。
【００３６】
フラグＶＩＥは無効データ使用例外を起動するか否かを指示するように作用する。フラグＶＩＥがセットされていればフラグＶＳがセットされた場合に無効データ使用例外が起動されて、フラグＶＩＥがクリアされていればフラグＶＳがセットされても無効データ使用例外は起動されない。フラグＶＩＥについては命令ＲＡＭ６から読出された転送命令によって命令デコードユニット２が“０”または“１”を書込むことにより明示的にクリアまたはセットすることができる。これら両ビットはリセットによりクリアされる。
【００３７】
（データステータス処理ユニット２１）
データステータス処理ユニット２１は、主に無効データがメモリユニット３または整数演算ユニット４の処理において使用されるか否かを検出する。
【００３８】
データステータスの処理ユニット２１は、プログラム実行時などにメモリユニット３または整数演算部４で命令に従う処理（演算）が実行されることによってレジスタの内容やフラグの値が更新されるとき、以下の要領で対応するビット（以下、データステータスビットという）を並行して更新することができる。つまり、該実行命令のソースレジスタに対応するデータステータスビットの論理積を代入する。キャリー付加算などではキャリーフラグＣに対応するデータステータスビットも含めた論理積を代入する。該実行命令のソースオペランドとして、即値、データＲＡＭ７などのメモリ上のデータおよびＰＳＷ１０以外の制御レジスタが与えられた場合には、これに対応するステータスビットは有効であると見なす。該実行命令がロード命令であり、そのアドレスとして使われたレジスタのデータステータスビットが無効を示していた場合は、ロード結果を格納したレジスタに対応するデータステータスビットを無効化する。
【００３９】
ただし、例えばコンテキスト切換え時のＳＴ命令が実行されて各種レジスタおよび各種フラグの値が命令ＲＡＭ６にストアされる場合には、ストアされるデータについては例外的に無効データ使用とは見なさないようにデータステータス処理ユニット２１による無効データ検出を省略する。このように特定の命令が実行されるときにのみ無効データが参照されるか否かを検出するようにして、処理の効率化を図るようにしてもよい。
【００４０】
（制御信号２２に従うデータステータス処理ユニット２１の動作）
制御信号２２は命令ＲＡＭ６から読出された命令コードをデコーダ８または９によりデコードした結果に基づき命令デコードユニット２により生成されて、データステータス処理ユニット２１に与えられる。
【００４１】
制御信号２２は次のように生成される。マイクロプロセッサ１のリセット処理時には、制御信号２２はデータステータス処理ユニット２１の初期化を指示する。データステータスレジスタ操作のための命令コードがデコードされて該命令が実行されるときは、制御信号２２はデータステータスビットに施す処理（クリアまたはセット）の内容と、処理の対象とするビットを指定する。レジスタを参照する命令コードがデコードされて実行されるときは、制御信号２２は参照するレジスタに対応付けされたデータステータスビットを指定する。レジスタの内容を更新する命令コードがデコードされて実行されるとき、制御信号２２は更新するレジスタに対応付けられたデータステータスビットと、更新内容を指定する。
【００４２】
このような制御信号２２を受理したデータステータス処理ユニット２１は次のように動作する。リセット時にはデータステータスレジスタＤＳＴ０〜ＤＳＴ２を所定の値に初期化する。データステータスレジスタ操作の命令に従う制御信号２２を受理したときはステータスビットの明示的なクリアおよびセットをおこなう。また、制御信号２２により指示される所定データステータスビットを参照し、無効であるか否かにより無効データが参照されたか否かを判定する。無効データが参照された場合には命令デコードユニット２に対し、そのことを示す信号（通知）を出力する。命令デコードユニット２は、この信号（通知）を入力するとＰＳＷ１０のフラグＶＳをセットする。また、制御信号２２に基づき所定ステータスビットに対して論理演算をおこない、その結果に基いて所定のステータスビットを更新する。
【００４３】
このように本実施の形態では、命令ＲＡＭ６から読出された命令コードが命令デコードユニット２によりデコードされて、デコード結果に基づき各部を用いて該命令に従う処理が実行されるとき、データステータス処理ユニット２１は該処理に使用されるデータ（レジスタの内容またはフラグの値）が有効であるか無効であるかを、該データに対応のデータステータスビットの値に基いて簡単に検出することができる。検出結果が無効を示すときは、その旨を命令デコードユニット２に通知して、命令デコードユニット２に対して後述の無効データ使用例外の起動に関する判定を行なわせることができる。
【００４４】
（マルチデータ転送）
本実施の形態に係るマルチデータ転送は、一度に複数のレジスタ間でデータ転送を行なうものである。マルチデータ転送機能を実現するために汎用レジスタ部５に関しては図５に示される構成が採用される。図５ではレジスタ部５はレジスタＲ１〜Ｒ３０のレジスタ群、レジスタＲ３３〜Ｒ６２のレジスタ群、ならびにレジスタＲ０、Ｒ３１、Ｒ３２Ｒ６３（ＳＰＵ）およびＲ６３（ＳＰＩ）、およびＳ１バスセレクタ〜Ｓ６バスセレクタを含む。プログラム実行時にはレジスタＲ１〜Ｒ３０にプログラムの実行に従い参照されるデータまたはフラグが格納されて、これらデータまたはフラグを一時退避して保存するときは、レジスタＲ３３〜Ｒ６２に転送される。また、図５のＳ１バスセレクタ〜Ｓ６バスセレクタは、それぞれバスＳ１〜バスＳ６に対して読出すためのデータを選択するためのものであり、選択のための候補データとしてはレジスタＲ０〜Ｒ６２、レジスタＲ６３ＳＰＵおよびレジスタＲ６３ＳＰＩに格納されているデータとすることができる。また、これら各レジスタにはバスＤ１〜バスＤ３のいずれかから受理したデータを格納することができる。さらに、本実施の形態では、いくつかの隣接するレジスタ間に専用のデータ転送経路Ｔ１とＴ２が設けられている。以降、該専用データ転送経路をマルチデータ転送路と称する。
【００４５】
マルチデータ転送路Ｔ１とＴ２は、レジスタＲ１とＲ３３、レジスタＲ２とＲ３４、レジスタＲ３とＲ３５、…レジスタＲ２９とＲ６１、レジスタＲ３０とＲ６２の間にそれぞれ別個に設けられている。異なるレジスタ群間の予め定められた１対１対応のこれらレジスタの組に個々に設けられたマルチデータ転送路Ｔ１とＴ２を介して、各組のレジスタ間でデータ転送を同時に（１サイクル時間で）行なうことが可能となる。マルチデータ転送路Ｔ１を介して、レジスタＲ１〜Ｒ３０のデータを１サイクルでレジスタＲ３３〜Ｒ６２に転送するとき、これを上り方向のマルチデータ転送と称する。同様に、マルチデータ転送路Ｔ２を介して１サイクル時間でレジスタＲ３３〜Ｒ６２のデータをレジスタＲ１〜Ｒ３０に転送することができる。これを下り方向のマルチデータ転送と称する。
【００４６】
本実施の形態に係るマルチデータ転送路Ｔ１とＴ２は、図５に示すように上述の組を構成するレジスタを隣接させることにより、隣接する組のレジスタ間にのみ設ければよいから、マイクロプロセッサ１にマルチデータ転送路を追加したとしてもハードウェアの増加量を極めて小さくすることができる。
【００４７】
（マルチデータ転送命令）
マルチデータ転送を行なうために、本実施の形態では図１の命令ＲＡＭ６から読出されて命令デコードユニット２によりデコードされて実行される専用のマルチデータ転送命令MVMUPとMVMDNを設ける。命令MVMUPは上り方向のマルチデータ転送を命令MVMDNは下り方向のマルチデータ転送をそれぞれ指示する命令である。これらの命令のオペランドによりデータ転送対象のレジスタを指定できるから、複数組（本実施の形態では最大で３０組）のレジスタを選択的に指定して、指定された組のレジスタ間でのデータ転送を同時に（１サイクル時間で）実行させることもできるし、１組のレジスタを選択的に指定して、指定された１組のレジスタ間でのデータ転送のみを実行させることもできる。
【００４８】
マルチデータ転送の対象レジスタは、マルチデータ転送命令のオペランドで示されるレジスタによる間接指定、または３２ビットの即値フィールドを用いた直接指定によって指定することができる。これらレジスタや即値フィールドのビット１〜ビット３０のそれぞれと、レジスタＲ１とレジスタＲ３３の組〜レジスタＲ３０とレジスタＲ６２の組のそれぞれとは、１対１で対応しており、対応するビットがセットされているレジスタの組がマルチデータ転送の対象と指定される。ただし、マルチデータ転送命令の実行時に、これらレジスタや即値フィールドのビット０とビット３１は無視される。
【００４９】
また、命令MVMUPと命令MVMDNは図１のマイクロプロセッサ１で実行可能なフォーマットに従いエンコードされた後に命令ＲＡＭ６に格納される。具体的には転送対象レジスタをレジスタ間接で指定する場合は図３（Ａ）に示すフォーマットShort＿Aに従いエンコードされる。転送対象レジスタを即値フィールドで指定する場合は図３（Ｂ）に示すフォーマットLong＿1に従いエンコードされる。ただし、いずれのフォーマットにエンコードされる場合にもフィールド１２１と１２２のデータＲａおよびＲｂには“０”が格納される。
【００５０】
このようなエンコードにより例えば次のニーモニックコード（ＮＣ１）と（ＮＣ２）が得られる。（ＮＣ１）MVMUP ♯０ｘ０ｆｆｆｆ０００：レジスタR4〜R19をレジスタR36〜R51に転送。（ＮＣ２）MVMDN R1：レジスタR1の指定に従ってレジスタR33〜R62の一部を転送。
【００５１】
（無効データ使用例外について）
無効データ使用例外とは割込み処理の一種であり、該割込み処理により実行されるプログラムにより上述のマルチデータ転送が実行される。無効データ使用例外はハードウェアによりかけられる。データステータス処理ユニット２１が無効データ使用を検出し、それが命令デコードユニット２に通知されると、応じて命令デコードユニット２はＰＳＷ１０を検索して、検索結果、フラグＶＩＥがセットされていればハードウェア処理により自動的に例外を検出する。
【００５２】
例外を検出したことを示す検出信号は制御信号１１として命令デコードユニット２からメモリユニット３に与えられるので、メモリユニット３は該制御信号１１を入力すると命令ＲＡＭ６に対して所定アドレスに格納された命令コードの読出を指示する。所定アドレスから読出された命令コードは命令デコードユニット２に与えられて、デコードされて、各部でデコード結果に基く動作が実行される。この実行時に、後述のように省略したデータ更新の処理と該処理のためのマルチデータ転送とがなされる。
【００５３】
（使用例と効果）
あるプロセッサＡ用のバイナリコード（またはオブジェクトコード）を本実施の形態で示した別のプロセッサ１（以下、本プロセッサと称す）でエミュレート（模擬）実行する場合を考える。エミュレート実行はTransmeta社のCrusoeが採用している手法（ダイナミックトランスレーション、ダイナミックバイナリトランスレーションなどとも呼ばれる）である。
【００５４】
ここでは、プロセッサＡとして１６個のレジスタＡＲ０〜ＡＲ１５（本プロセッサ１のレジスタＲ０〜Ｒ１５に相当）と４種類のフラグを有したものを想定する。４種類のフラグとは０を用いた許可されない演算がなされたか否かを示す０フラグ（フラグＺ）、演算による桁上がりの有無を示すキャリーフラグ（フラグＣ）、演算による桁あふれの有無を示すオーバーフローフラグ（フラグＶ）、および演算に関す負数状態の有無を示すネガティブフラグ（フラグＮ）である。ここではプロセッサＡのレジスタＡＲ０〜ＡＲ１５の内容は、図１に示す本プロセッサの汎用レジスタ部５のレジスタＲ８〜Ｒ２３を使ってエミュレートされる。また、フラグＣは本プロセッサの汎用レジスタ部５のレジスタＲ４、フラグＶは同様にレジスタＲ５、フラグＺは同様にレジスタＲ６およびフラグＮは同様にレジスタＲ７の各ＬＳＢ（Least Significant Bit）を使ってそれぞれエミュレートされるものと想定する。
【００５５】
ここで本プロセッサにおいてプロセッサＡ用の以下の命令（Ｃ１）〜（Ｃ３）からなる命令列を実行する場合を想定する。
【００５６】
（Ｃ１）  ADDS  AR8，AR4：AR8＝AR8＋AR4
：フラグC,V,Z,Nの全てを更新する。
【００５７】
（Ｃ２）  ADDCS  AR9，AR5：AR9＝AR9＋AR5＋Carry−Flag
：フラグC,V,Z,Nの全てを更新する。
【００５８】
（Ｃ３）  JNE  Label：条件分岐。フラグZ＝０ならば分岐実行。
【００５９】
上述の命令（Ｃ２）の加算命令ADDCSに係るフラグＶを本プロセッサで模擬する際には、２つのソースオペランド（レジスタＡＲ５とＡＲ９の値）と加算結果との符号を調べて、調べた結果、２つのソースオペランドの符号が同じでありかつ加算結果の符号がこれらと異なっていればフラグＶに１を設定するという一連の処理が実行される。具体的には、本プロセッサで従来通り実行するためには以下の処理（Ｐ１）〜（Ｐ６）を実行する必要がある。
【００６０】
（Ｐ１）  XOR  R1，R17，R13：フラグＶの処理。
【００６１】
（Ｐ２）  NOT  R1，R1：フラグＶの処理（ソースオペランドが同符号ならR1［0］＝1）。
【００６２】
（Ｐ３）  ADDC  R17,R17,R13：上記命令（Ｃ２）に従う演算処理。
【００６３】
（Ｐ４）  XOR  R2,R17,R13：フラグＶの処理（ソースオペランドと演算結果の符号が違えばR2［0］＝1）。
【００６４】
（Ｐ５）  AND  R1,R1,R2：フラグＶの処理（R1［0］＝V）。
【００６５】
（Ｐ６）  SRL  R5,R1,♯31：フラグVの処理（レジスタR5のLSB（ビット31）にフラグV（レジスタR1の値）を保持）。
【００６６】
上述の処理（Ｐ１）〜（Ｐ６）を実行するには本プロセッサでは６サイクル時間を要するけれども、データステータス処理ユニット２１によるデータが有効か無効かを識別する機能を用いれば、処理（Ｐ１）〜（Ｐ６）はフラグＶの更新に係る処理を省略できて以下の処理（ＰＰ１）〜（ＰＰ４）に代替できる。その結果、実行時間を４サイクル時間に短縮できる。
【００６７】
（ＰＰ１）  MVFC  R4,PSW：PSW１０のフラグCをレジスタR4に保存。
【００６８】
（ＰＰ２）  MVMUP  ♯0ｘ0fffff000：マルチデータ転送によりレジスタR4−R23の内容をレジスタR36−R55に転送して保存。
【００６９】
（ＰＰ３）  ADDC  R17,R17,R13：上記命令（Ｃ２）に従う演算処理。
【００７０】
（ＰＰ４）  DSCLR  DST0，♯0x5：フラグVに対応のデータステータスを無効化（対応のデータステータスビットをクリア）する。
【００７１】
もしも、本プロセッサでのエミュレート時に予想に反して、フラグＶの更新を省略した後の演算においてフラグＶを使用（参照）する必要が生じたときは、すなわち無効データが演算に使用されたときは、該演算を含むその後の一連の処理（演算）の精度は保障されなくなったり、正常な処理を継続できなくなったりする。
【００７２】
そこで、本実施の形態ではデータステータス処理ユニット２１によって無効データの使用を検出するようにして、該検出に応じた割込みにより無効データ使用例外の処理に移行する。
【００７３】
無効データ使用例外処理では、まずレジスタＲ３６〜Ｒ５５に保存されたデータ（上述の処理（PP2）を参照）とレジスタＲ４〜Ｒ２３との間でマルチデータ転送が行なわれる。これにより、命令（Ｃ１）の処理が実行が終了し、かつ命令（Ｃ２）の処理が実行開始される直前のデータ（各種レジスタの内容および各種フラグの値）を復元することができる。続いて復元された元データを用いて先に省略されていたフラグＶの更新に係る処理が実行される。これによりフラグＶは有効な値を示すことになる。無効データ使用例外処理は割込みにより起動されるから、無効データ使用例外処理終了後は、元の処理（割込み前の処理）に復帰することができる。したがって、復帰後の元の処理は有効データを用いて実行されるから、処理精度は保障される。
【００７４】
（フローチャートに従う具体的な手順）
図６には無効データの使用を検出して無効データ使用例外処理を起動する手順の一例が示される。図６の手順を、データ（またはフラグ）Ｒｚ、ＲｙおよびＲｘを更新するような処理が実行される場合に、更新されたとしても参照される可能性が少ないと予め判断されたデータＲｘの更新を省略し、もし、データＲｘが参照された場合には無効データ使用例外処理が起動されるような場合を想定して説明する。これら一連の手順は命令コード列（プログラム）として命令ＲＡＭ６に格納されて、順次に読出されてデコードされて、実行されると想定する。
【００７５】
まず、無効データ使用例外処理が起動されるように、命令デコードユニット２はＰＳＷ１０のフラグＶＩＥをセットする（ステップＳＴ（以下、単にＳＴと略す）５）。そして、整数演算ユニット３などによりデータＲｚの更新処理およびデータＲｙの更新処理が行なわれる（ＳＴ７、ＳＴ９）。その後、データＲｘの更新を省略する処理を行なう。具体的には、データＲｘの更新に必要なデータをマルチデータ転送によりマルチデータ転送路Ｔ１により退避（保存）させて、データステータス処理ユニット２１によりデータＲｘに対応のデータステータスビットを無効化する（ＳＴ１１、ＳＴ１２）。このようにデータＲｘの更新が省略されるときは、その後に該データＲｘの更新が必要とされる場合に備えて、データＲｘの更新に必要なデータを退避させて保存しておくことができる。
【００７６】
その後に分岐に係る命令が実行されて、分岐のための条件が成立しない場合には（ＳＴ１５のＮｏ）更新後のデータＲｚとＲｙを参照するような処理が実行される（ＳＴ１７、ＳＴ１９）けれども、条件成立の場合には（ＳＴ１５でＹｅｓ）データＲｘが参照される（ＳＴ２１）。
【００７７】
ここで、データＲｘの参照は、データステータス処理ユニット２１により無効データ使用と検出されるので、割込みにより現在実行中の処理（元の処理）は中断されて、命令ＲＡＭ６からは無効データ使用例外処理に係る命令コードが読出されて、無効データ使用例外処理が起動する。
【００７８】
まず、データＲｘの更新に必要なデータであるＳＴ１１で退避させたデータを、ＳＴ１１のマルチデータ転送とは逆方向のマルチデータ転送により復帰させて（ＳＴ２３）、復帰後のデータを用いて省略していたデータＲｘの更新を実行し、データＲｘに対応のデータステータスビットを有効にする（ＳＴ２５）。そして、データＲｘを参照するような処理が再度実行される（ＳＴ２９）。これにより一連の無効データ使用例外処理は終了して、元の処理に復帰する。
【００７９】
本実施の形態では、本プロセッサで他のプロセッサの処理を模擬実行するとき、参照される可能性が低いと判断して更新を省略して無効化されたデータ（またはフラグ）が参照されようとする場合には、無効データ使用例外を起動して該データを有効化できる。したがって、処理の模擬実行の精度を維持しながら参照される可能性が低いデータの更新を省略して処理を高速化できる。
【００８０】
データの更新を省略するときは、該データの更新に関与する全てのデータを保存しておく必要がある。このため、これらデータを格納している１または複数のレジスタから保存のための１または複数のレジスタへのデータ転送が１サイクル時間で同時に行なわれて、更新を省略したデータのステータスは無効化される。更新に必要なデータは複数個に及ぶ場合であっても該データ転送機能を用いることで、１サイクル時間でデータの保存を行なうことができるから、該データ転送をしたとしても処理速度の低下を回避できる。また、転送可能なレジスタをＬＳＩのレイアウト上で隣接する予め定められたレジスタ同士（１対１の固定）に限定することにより、転送路が長くなるのが防止されてハードウェア増加を極めて小さく抑えることもできる。
【００８１】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００８２】
【図１】本実施の形態に係るマイクロプロセッサの構成図である。
【図２】（Ａ）〜（Ｄ）は本実施の形態に係るレジスタの構成図である。
【図３】（Ａ）と（Ｂ）は本実施の形態に係る命令のフォーマット例を示す図である。
【図４】本実施の形態に係るＰＳＷの詳細内容を示す図である。
【図５】本実施の形態に係るマルチデータ転送機能を実現するための構成図である。
【図６】本実施の形態に係る無効データの使用を検出して無効データ使用例外処理を起動する手順のフローチャートである。
【符号の説明】
【００８３】
１  マイクロプロセッサ、２  命令デコードユニット、４  整数演算ユニット、５  汎用レジスタ部、６  命令ＲＡＭ、８，９  デコーダ、１０  ＰＳＷ、２１  データステータス処理ユニット、１１，１２，２２  制御信号、ＶＩＥ，ＶＳ  フラグ、ＤＳＴ０〜ＤＳＴ２  データステータスレジスタ。
【図１】
2005063042.tif 000003
【図２】
2005063042.tif 000004
【図３】
2005063042.tif 000005
【図４】
2005063042.tif 000006
【図５】
2005063042.tif 000007
【図６】
2005063042.tif 000008