(57)【要約】【課題】プロセッサ内のレジスタの値を保持するためのデバッグ用の別なレジスタを設けることなく、そのレジスタの値を保存することができるプロセッサを提供する。【解決手段】プロセッサは、モードを設定する設定レジスタ５２ａと、スカラ演算時に使用されるプリファードスロットSL1と、スカラ演算時に使用されないスロットSL2-SL4を含む汎用レジスタ１０と、スカラ演算時に設定レジスタ５２ａに設定されたモードにより指定されたレジスタのデータを選択して出力する選択器５２ｂと、汎用レジスタ１０のプリファードスロットSL1を用いてスカラ演算を実行し、スカラ演算の演算結果データを、汎用レジスタ１０のプリファードスロットSL1に保存する演算器５１とを有し、選択器５２ｂから出力されたレジスタのデータは汎用レジスタ１０のスロットSL2-SL4に保存される。【選択図】図３
2010218030.tif 000002
【特許請求の範囲】
【請求項１】
モードを設定する設定レジスタと、
所定の演算時に使用される第１の領域と、前記所定の演算時に使用されない第２の領域を含む少なくとも１つの汎用レジスタと、
前記少なくとも１つの汎用レジスタの前記第１の領域を用いて前記所定の演算を実行し、前記所定の演算の演算結果データを、前記少なくとも１つの汎用レジスタの前記第１の領域に保存する演算器と、
前記所定の演算時に前記設定レジスタに設定された前記モードに応じて、プロセッサ内の少なくとも１つのレジスタのデータを選択して前記第２の領域に出力し、あるいは前記所定の演算時に前記第１の領域及び第２の領域に保存されたデータを用いて、前記設定レジスタに設定された前記モードに応じた判定処理を実行して前記判定処理の結果に対して所定の信号を前記演算器に出力する出力回路と、
を有することを特徴とするプロセッサ。
【請求項２】
前記所定の演算は、スカラ演算であり、
前記演算器は、前記スカラ演算と、前記少なくとも１つの汎用レジスタの前記第１の領域と前記第２の領域とを使用するベクトル演算とを実行可能であることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
プロセッサ内の少なくとも１つのレジスタのデータを指定するモードを設定する設定レジスタと、
所定の演算時に使用される第１の領域と、前記所定の演算時に使用されない第２の領域を含む少なくとも１つの汎用レジスタと、
前記所定の演算時に前記設定レジスタに設定された前記モードにより指定された前記少なくとも１つのレジスタのデータを選択して出力する選択器と、
前記少なくとも１つの汎用レジスタの前記第１の領域を用いて前記所定の演算を実行し、前記所定の演算の演算結果データを、前記少なくとも１つの汎用レジスタの前記第１の領域に保存する演算器と、
を有し、
前記選択器から出力された前記少なくとも１つのレジスタのデータは前記少なくとも１つの汎用レジスタの前記第２の領域に保存されることを特徴とするプロセッサ。
【請求項４】
前記選択器から出力された前記少なくとも１つのレジスタのデータは、前記演算器又は前記選択器によって、前記少なくとも１つの汎用レジスタの前記第２の領域に保存されることを特徴とする請求項３に記載のプロセッサ。
【請求項５】
判定処理を指定するモードを設定する設定レジスタと、
所定の演算時に使用される第１の領域と、前記所定の演算時に使用されない第２の領域を含む少なくとも１つの汎用レジスタと、
前記所定の演算を実行時に、前記所定の演算の演算結果データを、前記少なくとも１つの汎用レジスタの前記第１の領域に保存し、前記第１の領域及び前記第２の領域に保存されたデータを出力する演算器と、
前記所定の演算時に前記演算器から出力された前記第１の領域及び第２の領域に保存されたデータを用いて、前記設定レジスタに設定された前記モードにより指定された前記判定処理を実行し、前記判定処理の結果に対して所定の信号を前記演算器に出力する判定器と、
を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
従来より、計算機上で実行されるソフトウエアプログラム（以下、単にプログラムという）の開発において、デバッグが行われている。  
プログラムのデバッグを行うときに、例えば、データを変更した時点におけるプログラムカウンタの値、スタックポインタの値、そのデータの変更前の値等の各種レジスタの情報が確認できれば、このような付加的な情報は、そのプログラムを開発する者にとって、すなわちプログラマにとって、エラーの発生原因の解析のために有用な情報となる。
【０００３】
プログラムの実行中のある時点におけるこのような各種レジスタの値等の付加情報を得るためには、付加情報を保存するための記憶領域を確保し、かつ、デバッグ対象のプログラム中に、その付加情報保存のための命令を挿入する必要がある。しかし、このような命令の挿入は、プログラムの実行性能を低下させてしまうという問題がある。
【０００４】
そこで、プログラムの処理に影響を与えることなく、デバッグをする者がプロセッサの内部レジスタの値を外部において知ることができるようにした技術が提案されている（例えば、特許文献１参照）。その提案のマイクロプロセッサは、演算処理において使用するレジスタの内容を複写して保持するミラーレジスタを別途有している。
【０００５】
しかし、この提案の方法によれば、デバッグ用のレジスタを別途設け、さらに、デバッグ用の情報を保存するための外部メモリが必要になるという問題があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−１８６８５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
そこで、本発明は、プロセッサ内のレジスタの値を保持するためのデバッグ用のレジスタを別途設けることなく、そのレジスタの値を保存することができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様によれば、モードを設定する設定レジスタと、所定の演算時に使用される第１の領域と、前記所定の演算時に使用されない第２の領域を含む少なくとも１つの汎用レジスタと、前記少なくとも１つの汎用レジスタの前記第１の領域を用いて前記所定の演算を実行し、前記所定の演算の演算結果データを、前記少なくとも１つの汎用レジスタの前記第１の領域に保存する演算器と、前記所定の演算時に前記設定レジスタに設定された前記モードに応じて、前記少なくとも１つのレジスタのデータを選択して前記第２の領域に出力し、あるいは前記所定の演算時に前記第１の領域及び第２の領域に保存されたデータを用いて、前記設定レジスタに設定された前記モードに応じた判定処理を実行して前記判定処理の結果に対して所定の信号を前記演算器に出力する出力回路と、を有するプロセッサを提供することができる。
【発明の効果】
【０００９】
本発明のプロセッサによれば、プロセッサ内のレジスタの値を保持するためのデバッグ用のレジスタを別途設けることなく、そのレジスタの値を保存することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施の形態に係る汎用レジスタの構成を説明するための図である。
【図２】本発明の第１の実施の形態に係るプロセッサを用いた計算機システムの構成例を示すブロック図である。
【図３】本発明の第１の実施の形態に係る各プロセッサの構成例を示すブロック図である。
【図４】本発明の第１の実施の形態に係る選択部の構成例を示すブロック図である。
【図５】本発明の第１の実施の形態に係るデバッグ処理実行時の処理の流れの例を示すフローチャートである。
【図６】本発明の第２の実施の形態に係るプロセッサの構成を示すブロック図である。
【図７】本発明の第２の実施の形態に係る判定部の構成例を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
（構成）
まず、図１から図３に基づき、本発明の第１の実施の形態に係わるプロセッサの構成について説明する。プロセッサは、演算器と各種レジスタを含んでいる。その各種レジスタには、汎用レジスタ (GPR: General Purpose Register)が含まれる。  
汎用レジスタは、各種演算処理において利用され、演算結果を保存して、さらに次のあるいは他の演算処理において利用されるレジスタである。
【００１２】
本実施の形態に係るプロセッサは、ベクトル演算を実行可能なSIMD型プロセッサであり、演算器は、例えば１２８ビット（１６バイト）のビット幅のデータを処理単位として処理可能に構成されている。汎用レジスタは、複数、例えば１２８個、設けられており、各汎用レジスタには、１２８ビットのデータが保存可能となっている。
【００１３】
プロセッサは、ベクトル演算時の処理は１２８ビット単位で行われるため、使用する各汎用レジスタの１２８ビットの全てが使用される。また、プロセッサは、スカラ演算も実行可能であり、スカラ演算時には、使用する各汎用レジスタの一部であるプリファードスロットだけが使用される。
【００１４】
図１は、本実施の形態に係る汎用レジスタの構成を説明するための図である。図１に示すように、各汎用レジスタ１０は、１２８ビット（１６バイト）の幅を持ち、スカラデータあるいはアドレスに関する処理を実行する時には、汎用レジスタ１０上の所定の部分（以下、プリファードスロットという）SL1に入っているデータが、処理に利用される。図１では、１６バイト中、バイトインデックス０から３の部分が、プリファードスロットSL1である。１２８ビットは、４つのスロットSL1からSL4に分けられて、各スロットには、３２ビットのデータが保存される。
【００１５】
例えば、プロセッサが、３２ビットの整数演算を実行する時には、プリファードスロットSL1のバイトインデックス０から３の位置にはその演算に使用するデータが保存されるが、残りのバイトインデックス４から１５の部分は、そのスカラ演算のためには使用されない空きスロットである。また、そのスカラ演算結果も、プリファードスロットであるスロットSL1のみに保存される。
【００１６】
一方、プロセッサが、ベクトル演算を実行する時には、汎用レジスタ１０のバイトインデックス０から１５の全てを使用して、データの読み出しと保存を行う。すなわち、汎用レジスタ１０は、スカラ演算のために使用される記憶領域としてのプリファードスロットSL1と、スカラ演算のためには使用されない記憶領域としてのスロットSL2からSL4とを含む。
【００１７】
従って、本実施の形態のプロセッサは、スカラ値とベクトル値を共に、同一の汎用レジスタ１０に保存するようにして汎用レジスタを有効に利用しているので、スカラ演算用の汎用レジスタとベクトル演算用の汎用レジスタを個別に設けていないので、汎用レジスタの個数を減らすことができる。後述するように、本実施の形態では、スカラ値の保存のために使用されていない汎用レジスタの記憶領域に、デバッグ時にプログラムの不具合の原因解析に有用となる情報を保存することにより、汎用レジスタの有効利用が図られている。
【００１８】
図２は、本実施の形態に係るプロセッサを用いた計算機システムの構成例を示すブロック図である。  
図２に示すように、計算機システムは、複数のプロセッサを含む本体部１１と、メインメモリ１２と、本体部１１に接続されたモニタ１３とを含む。  
本体部１１は、メインとなるCPUコア２１と、それぞれが独立した信号処理を行うプロセッサ２２から２９とを含む、例えば１チップに集積した並列処理可能な半導体装置のチップである。本体部１１には、モニタ１３と接続するためのインターフェース（I/F）３１がさらに含まれている。本体部１１内の各プロセッサと、インターフェース３１と、メインメモリ１２は、内部のバス３２を介して互いに接続されている。
【００１９】
メインのCPUコア２１は、８つのプロセッサ２２から２９を統轄制御するプロセッサであり、１次キャッシュ、二次キャッシュおよび演算部を含む。  
プロセッサ２２から２９のそれぞれは、演算部と、記憶部としてのローカルメモリを含む。さらに、プロセッサ２２から２９のそれぞれは、上述した汎用レジスタ群を含み、その汎用レジスタ群を用いて、ベクトル演算とスカラ演算の両方が実行可能である。
【００２０】
例えば、SIMD演算処理を含むプログラムが、各プロセッサにおいて実行されるとき、SIMD演算時には、１つの汎用レジスタ１０に４つの３２ビットデータが保存され、４つのデータが同時に処理される。また、スカラ演算時には、１つの汎用レジスタ１０の一部の記憶領域であるプリファードスロットSL1のみがスカラ演算のために使用される。
【００２１】
メインメモリ１２には、メインのCPUコア２１とプロセッサ２２から２９において実行されるプログラム及びデータが記憶される。メインメモリ１２に記憶されたプログラムが、CPUコア２１及びプロセッサ２２から２９にロードされて実行される。  
さらに、バス３２には、モニタ１３用のインターフェース（I/F）３１が接続されている。例えば、デバッグ時には、デバッグプログラムが、CPUコア２１及びプロセッサ２２から２９上で実行され、デバッグ用画面がモニタ１３の画面上に表示される。
【００２２】
従って、本体部１１とメインメモリ１２は、計算機システムを構成し、各プロセッサ上で各種プログラムを実行可能である。そして、ユーザは、本体部１１にデバッグプログラムを搭載してデバッガとしても機能させ、デバッグ時には、各種レジスタ等の内容を、モニタ１３の画面上に表示させて、SIMD演算処理を含むプログラムのデバッグを行うことができる。
【００２３】
図３は、各プロセッサの構成例を示すブロック図である。ここでは、プロセッサ２２の構成を説明するが、他のプロセッサ２３から２９の構成は、プロセッサ２２と同様の構成であるので、説明は省略する。  
図３に示すように、プロセッサ２２は、演算部４１と、記憶部としてのローカルメモリ４２を含み、バス３２と接続されている。演算部４１は、演算器５１と、選択部５２と、汎用レジスタ群５３を含む。汎用レジスタ群５３には、それぞれが図１に示すような４つのスロットを有する複数の汎用レジスタ１０が含まれる。
【００２４】
演算器５１は、ローカルメモリ４２に記憶されたプログラムとデータを用いて、そのプログラムを実行する。上述したように、プロセッサ２２は、ベクトル演算とスカラ演算の両方を実行可能である。演算器５１は、実行する命令によって、スカラ演算を実行するのか、ベクトル演算を実行するのかを判定することができる。  
演算器５１は、ベクトル演算を実行するときは、所定の汎用レジスタ１０を利用して、SIMD演算等を実行する。SIMD演算時には、４つのスロットが全て利用される。  
また、演算器５１は、スカラ演算を実行するときは、所定の汎用レジスタ１０を利用して、スカラ演算を実行するが、４つのスロットのうちの１つ、例えば、プリファードスロットSL1のみを、そのスカラ演算のために利用する。  
そして、後述するように、スカラ演算のために利用されない３つのスロットSL2からSL4の全てあるいは一部には、選択部５２において後述するモードにより指定されたデータが、保存される。
【００２５】
選択部５２は、設定レジスタ５２ａを含む。設定レジスタ５２ａには、モードが、ここでは動作モードOMが、設定される。複数の種類の動作モードOMが予め設定されており、設定レジスタ５２ａには、その内の１つの動作モードOMが外部から設定可能となっている。
【００２６】
選択部５２は、演算部４１内の各種レジスタのデータが取得できるように接続されている。図３は、プログラムカウンタ（PC）の値を保持するレジスタ６１と、スタックポインタ（SP）の値を保持する１つの汎用レジスタ中の一つのスロットの値を保持するレジスタ６２と、演算器５１内の実行命令（EC）を保持するレジスタ（図示せず）等が、選択部５２に接続されていることを示している。
【００２７】
選択部５２の演算器５１への出力内容は、設定レジスタ５２ａに設定された動作モードOMに基づいて決定される。すなわち、選択部５２は、スカラ演算時に設定レジスタ５２ａに設定された動作モードにOMより指定された少なくとも１つのレジスタのデータを選択して出力する出力回路である。
【００２８】
設定レジスタ５２ａへの動作モードOMの設定は、デバッグ時に、あるいはデバッグ実行前に、バス３２を介して、デバッグを行うユーザの指示あるいはプログラムに基づいて、CPUコア２１から行われる。
【００２９】
そして、選択部５２は、その設定された動作モードOMに応じて、各種レジスタのデータを選択して、演算器５１に出力する。例えば、ある動作モードOMが、プログラムカウンタ（PC）の値と、スタックポインタ（SP）の値と、演算器５１において実行中の実行命令（EC）を、選択して、演算器５１に出力するモードであれば、選択部５２は、これらの指定されたデータを演算器５１に出力する。
【００３０】
図４は、選択部５２の構成例を示すブロック図である。選択部５２は、設定レジスタ５２ａと、選択器５２ｂとを含む。選択部５２の選択器５２ｂは、演算器５１、汎用レジスタ群５３、プログラムカウンタ６１等と接続されており、実行命令（EC）、プログラムカウンタ（PC）の値、スタックポインタ（SP）の値、等のデータを取得可能となっている。選択器５２ｂは、設定レジスタ５２ａに設定された動作モードOMに応じたデータだけを選択する。選択された１又は２以上のデータは、演算器５１へ、所定の順番で出力、あるいはそれぞれ所定の信号線を介して出力される。選択部５２からのデータは、スロットSL2からSL4のそれぞれに対応付けられて、出力される。すなわち、選択部５２は、スカラ演算時に、動作モードOMに応じてプロセッサ２２の内部の各種レジスタから演算器５１に供給するデータを選択して、対応するスロットに出力する回路である。
【００３１】
演算器５１は、スカラ演算時に、スカラ演算が終了し、その演算結果を所定の汎用レジスタ１０のプリファードスロットSL1に保存するときに、一緒に、選択部５２の出力データを付加情報として、対応するスロットSL2からSL4に保存する。例えば、演算器５１は、３２ビットの整数演算の結果を、所定の汎用レジスタ１０のプリファードスロットSL1に保存するときに、その汎用レジスタ１０の空きスロットであるスロットSL2からSL4に、選択部５２に事前に設定されている設定情報である動作モードOMに基づいて選択された付加情報を保存する。
【００３２】
なお、上述した例では、選択部５２において選択されたデータは、演算器５１を介して空きスロットSL2からSL4に保存されているが、演算器５１を介さずに、選択部５２から直接空きスロットSL2からSL4に保存するように、プロセッサ２２を構成してもよい。その場合、選択部５２において選択されたデータは、選択部５２によって空きスロットSL2からSL4に保存される。
【００３３】
（動作）
次に、計算機システムの動作を説明する。デバッグプログラムが計算機システムの本体部１１において実行されるときに、各プロセッサの選択部５２の設定レジスタ５２ａへの動作モードの設定が予め行われる。
【００３４】
例えば、ユーザが開発プログラムに不具合を発見したときに、その不具合の発生に関連するスカラ演算の部分を実行させて、そのスカラ演算時における、実行命令（EC）とスタックポインタ（SP）の内容を確認したい場合がある。そのような場合は、ユーザは、スカラ演算時に、実行命令（EC）をスロットSL2に保存し、スタックポインタ（SP）の値をスロットSL3に保存するような動作モードを、設定レジスタ５２に予め設定する。
【００３５】
あるいは、ユーザは、スカラ演算時に、実行命令（EC）とスタックポインタ（SP）とプログラムカウンタ（PC）の内容を確認したい場合がある。そのような場合は、ユーザは、スカラ演算時に、実行命令（EC）をスロットSL2に、プログラムカウンタ（PC）の値をスロットSL3に、そしてスタックポインタ（SP）の値をスロットSL4に保存するような動作モードを、設定レジスタ５２に予め設定する。
【００３６】
さらにあるいは、ユーザは、不具合の発生に関連するスカラ演算の部分を実行させて、そのスカラ演算時における、直前のデータを確認したい場合がある。そのような場合は、ユーザは、直前のデータを保存する動作モードを選択部５２の設定レジスタ５２ａに設定する。例えば、３２ビットの整数演算の場合には、選択部５２は、過去３回までそのスカラ演算値を更新したときの値を選択して、３回前の値をスロットSL4に、２回前の値をスロットSL3に、そして、１回前の値をスロットSL2に保持し、保持した各データを、出力することができる動作モードが設定される。すなわち、スカラ演算の変更履歴データを汎用レジスタ１０の未使用領域に保存することができる。
【００３７】
なお、３２ビットの整数以外の値でも同様のことが可能であり、例えば８ビットの整数演算の場合、過去１５回までの変更履歴を保存し、６４ビットの浮動小数点演算の場合、過去１回の変更履歴を保存するような動作モードが設定可能である。このような過去の変更履歴データは、例えば１，２，３，４と連続して増加すべき値が、突然不連続な値となってしまった場合に、何処が不適切であったかの原因を突き止める場合に、有用である。  
なお、動作モードの設定において、空きスロットに保存されるデータの例についての以上説明した例は、一例であり、後でさらに詳述する。
【００３８】
図５は、デバッグ処理実行時の処理の流れの例を示すフローチャートである。まず、ユーザは、デバッグ処理プログラム上で、デバッグ対象のプログラムを実行させる前に、動作モードの設定を行う（ステップS1）。その結果、図３において点線で示すように、設定レジスタ５２ａに動作モードOMが設定される。
【００３９】
なお、この動作モードの設定は、例えば、モニタ１３の画面上に設定用の画面を表示させて、表示された複数の動作モードの中から、空きレジスタに保存したいレジスタを選択することにより、行われる。
【００４０】
そして、ユーザは、そのような動作モードの設定をした後に、デバッグプログラム上で、不具合を有するプログラムを実行させる（ステップS2）。すなわち、デバッグ対象プログラムの実行が行われる。
【００４１】
プログラムが実行されるとき、実行命令がSIMD命令であれば、４つのスロットを全て使用してSIMD演算が行われる。  
実行命令がスカラ演算の命令であるとき、演算器５１は、演算結果を、所定の汎用レジスタ１０中のプリファードスロットSL1に保存するときに、選択部５２からのデータも併せて、スロットSL2からSL4の中の指定されたスロットに保存する。
【００４２】
そして、スカラ演算に使用された汎用レジスタ１０のデータは、演算器５１のストア命令により、ローカルメモリ４２の所定の領域に保存することができる。よって、ユーザは、そのスカラ演算時における所望のデータを、モニタ１３に表示させて確認することができる。
【００４３】
（空きスロットに保存されるデータの例）
次に、空きスロットSL2からSL4に保存するデータの例を説明する。
【００４４】
１）プリファードスロットに保存されていた前の値
このデータは、プリファードスロットSL1にデータが書込まれる際に、プリファードスロットSL1に直前まで格納されていたデータであり、空きスロットに、例えばスロットSL2に、保存される。
【００４５】
さらに、複数の空きスロットに複数個のデータを保存するようにしてもよく、その場合は、直近の複数個のデータ、すなわち履歴データが保存される。例えば、上述したように、３２ビットの整数型のデータを、プリファードスロットSL1に格納する場合、直近の３回までの書き込みデータをスロットSL2からSL4に保存することが可能である。
【００４６】
２）演算を行った命令
このデータは、プリファードスロットにデータを格納する際に、その格納を指示したプログラムの命令セットであり、空きスロットに保存される。
【００４７】
さらに、空きスロットに複数個のデータを保存するようにしてもよく、その場合は、直近の複数個の実行命令が保持される。例えば、命令セットが３２ビットに固定で、３２ビットの整数型の演算結果データをプリファードスロットSL1に格納する場合、直近の実行命令を３回分スロットSL2からSL4に保存することが可能である。
【００４８】
３）命令実行時のプログラムカウンタ（PC）の値
このデータは、プリファードスロットSL1にデータを格納する際に、その格納を指示したプログラムのプログラムカウンタ（PC）の値であり、空きスロットに保存される。
【００４９】
さらに、空きスロットに複数個のデータを保存可能な場合は、直近の複数個のプログラムカウンタ（PC）の値が保持される。例えば、プログラムカウンタ（PC）の値が３２ビットであり、３２ビットの整数型の演算結果データをプリファードスロットSL1に格納する場合、直近のプログラムカウンタ（PC）の値を３回分スロットSL2からSL4に保存することが可能である。
【００５０】
４）スタックポインタ（SP）の値
このデータは、プリファードスロットSL1にデータを格納する際に、その格納を指示したプログラムを実行した際のスタックポインタ（SP）の値であり、空きスロットに保存される。
【００５１】
さらに、空きスロットに複数個のデータを保存可能な場合は、直近の複数個のスタックポインタ（SP）の値が保持される。例えば、スタックポインタスタックポインタ（SP）の値が３２ビットであり、３２ビットの整数型の演算結果データをプリファードスロットSL1に格納する場合、直近のスタックポインタスタックポインタ（SP）の値を３回分スロットSL2からSL4に保存することが可能である。
【００５２】
５）上記の組み合わせ
上記１）〜４）では、過去の履歴データとして、演算結果、実行命令、プログラムカウンタ（PC）の値等を複数個保持しているが、上述した例のように、これらデータを組み合わせてもよい。各種レジスタのデータを保持するようにすることにより、デバッグ時に種々の内部のレジスタのデータを得て確認することができ、より効果的にデバッグを行うことが可能となる。
【００５３】
以上のように、本実施の形態のプロセッサを用いれば、スカラ演算時に各種データを１以上保存するような動作モードを予め複数定めておき、選択部５２の設定レジスタ５２ａに所望の動作モードを設定することにより、デバッグを行う者の意図に応じた付加情報を自在に得ることができる。
【００５４】
なお、以上の説明では、プロセッサ２２から２９において汎用レジスタ１０の空きスロットの説明をしたが、CPUコアのプロセッサ２１においても、汎用レジスタの空きスロットを上述したように有効利用してもよい。
【００５５】
また、上述した例は、複数のプロセッサを搭載した半導体装置の例であるが、一つのプロセッサだけが搭載されている半導体装置においても、同様に適用できることは言うまでもない。
【００５６】
以上説明したように、本実施の形態によれば、スカラ演算時に、汎用レジスタの演算結果データがストアされる時に、自動で空きスロットに所望のデータが保存される。そして、プリファードスロットのサイズ毎に専用のストア命令によらずに、プリファードスロットに保存されている値と共に、空きスロットに保存されている値もあわせてローカルメモリに保存することができる。このようにすることで、プログラム開発者は、容易にスカラ演算時に所望のレジスタデータを確認することができるだけでなく、動作モードを変更することによって、確認したい所望のデータを容易に変更することもできる。
【００５７】
よって、本実施の形態のプロセッサによれば、プロセッサ内部の各種レジスタの値を保持するための新たなハードウエア回路を必要としないで、各種レジスタの値を保存することができる。
【００５８】
（第２の実施の形態）
次に、本発明の第２の実施の形態に係るプロセッサについて説明する。  
本実施の形態に係るプロセッサでは、汎用レジスタ中の空きスロットは、所定の判定処理の実行時に用いられる判定用のデータを記憶しておく記憶領域として使用される。そして、その判定処理のモードが設定されると、本実施の形態のプロセッサでは、スカラ演算時に、スカラ演算結果等のデータと判定用のデータを比較して、その比較結果に応じて、所定の信号を、ここでは割り込み信号を、出力する処理、が実行される。
【００５９】
図６は、本実施の形態に係るプロセッサの構成を示すブロック図である。第１の実施の形態と同じ構成要素については、同じ符号を付し説明は省略する。
【００６０】
プロセッサ２２Aは、演算部４１に判定部５４を有する。判定部５４は、動作モードOMが設定される設定レジスタ５４ａを含む。設定レジスタ５４ａには、実行すべき判定処理を指定するモード、すなわち動作モード、が設定される。動作モードOMの設定信号は、バス３２を介して、プロセッサ２２の外部から、例えば、CPUコア２１から設定される。
【００６１】
さらに、スカラ演算において使用される汎用レジスタ１０中の、空きスロットSL2からSL4の全てあるいは一部に、判定用データが保存される。そのデータは、プロセッサ２２Aにおいて実行されるデバッグ対象プログラムに含まれた、すなわち埋め込まれた、命令により、空きスロットSL2からSL4に保存される。
【００６２】
そして、判定部５４は、その汎用レジスタ１０に保存された判定用データを、読み出して、設定された動作モードに応じた判定処理を実行する。判定処理の結果は、割り込み信号として、演算器５１に出力される。
【００６３】
図７は、判定部５４の構成例を示すブロック図である。判定部５４は、設定レジスタ５４ａと、判定器５４ｂとを含む。判定部５４の判定器５４ｂは、演算器５１と接続されており、演算器５１から、比較及び判定に必要なデータを取得可能となっている。言い換えると、判定器５４ｂは、設定レジスタ５４ａに設定された動作モードOMに応じたデータ比較と判定結果出力を行う比較器である。
【００６４】
判定用のデータは、演算器５１から供給される汎用レジスタ１０のデータである。汎用レジスタ１０の各スロットのデータは、各スロットに対応付けられて、判定器５４ｂに供給される。例えば、汎用レジスタ１０の各スロットのデータは、演算器５１から、所定の順番で出力、あるいはそれぞれ所定の信号線を介して出力される。よって、演算器５１からのデータは、スロットSL1からSL4のそれぞれに対応付けられて、出力される。  
すなわち、判定器５４ｂは、スカラ演算時に、動作モードOMに応じて演算器５１からのスロットSL1からSL4のデータを用いて、設定レジスタ５４ａに設定された動作モードOMに応じた判定処理を実行して、判定結果に対して割り込み信号を出力する出力回路である。
【００６５】
演算器５１は、スカラ演算時に、スカラ演算が終了し、その演算結果を所定の汎用レジスタ１０のプリファードスロットSL1に保存するときに、その汎用レジスタ１０の各スロットSL1からSL4のデータを、判定部５４に供給する。例えば、演算器５１は、３２ビットの整数演算の結果を、所定の汎用レジスタ１０のプリファードスロットSL1に保存するときに、その汎用レジスタ１０の各スロットSL1からSL4のデータを、判定部５４に出力する。
【００６６】
そして、判定部５４は、予め設定された動作モードOMに基づいて、例えば、プリファードスロットSL1のデータと、空きスロットSL2からSL4のデータとを、比較して、比較結果を出力する。例えば、比較結果が所定の条件に合致すると、判定部５４は、所定の割り込み信号を、演算器５１に出力する。  
その結果、所定の条件に合致した状態が発生したことを、ユーザに知らせることができる。
【００６７】
（動作）
次に、本実施の形態の計算機システムの動作を説明する。デバッグプログラムが計算機システムの本体部１１において実行されるときに、各プロセッサの判定部５４の設定レジスタ５４ａに動作モードの設定が予め行われる。  
動作モードは、上述したように、判定処理の内容を示し、どのデータをどのように比較し、その比較結果がどのような場合に、割り込み信号を出力するかを示すものである。
【００６８】
例えば、ユーザが開発プログラムに不具合を発見したときに、その不具合の発生に関連するスカラ演算の部分を実行させて、そのスカラ演算結果のデータが、所定の範囲の値であるか否かを確認したい場合がある。具体的には、スカラ演算時に、演算結果データと、その所定の範囲の最小値と最大値とを比較させて、演算結果データがその所定の範囲外になった場合に、割り込み信号を発生させることにより、ユーザは、演算結果データがその所定の範囲外になったことを知ることができる。
【００６９】
そのような場合には、ユーザは、その最小値と最大値のデータを、それぞれ所定の汎用レジスタ１０のスロットSL2とSL3に予め記憶させる命令を、デバッグ対象プログラム中に埋め込む。すなわち、デバッグを行うとき、ユーザは、デバッグ対象プログラム中に、所定の汎用レジスタの空きスロットに所定の判定用データを記憶させる命令を、予め追加しておく。
【００７０】
そして、動作モードOMを、プリファードスロットSL1の値が、最小値と最大値の範囲にあるか否かの比較するモードに、予め設定する。
【００７１】
デバッグ対象プログラム中に埋め込まれた命令は、デバッグ対象プログラムが実行されたときに、最初の段階でロットSL2とSL3に最小値と最大値のデータを書き込む。その後、デバッグ対象プログラムの本体部分が実行される。  
その結果、デバッグ対象プログラムの実行中に、スカラ演算が実行された時に、判定器５４ｂは、プリファードスロットSL1に保存された演算結果データと、スロットSL2とSL3に保存された最小値と最大値を比較する。そして、演算結果データが、その所定の範囲内にないときは、判定器５４ｂは、所定の割り込み信号を演算器５１に出力する。
【００７２】
あるいは、ユーザは、スカラ演算の演算結果が、所定の値に一致するか否かを検出したい場合がある。そのような場合は、ユーザは、所定の値のデータを、スロットSL2に保存するように、デバッグ対象プログラム中に、命令を埋め込む。そして、ユーザは、動作モードを、プリファードスロットSL1の値（すなわち演算結果データ）が、その所定の値と一致するか否かを比較し、一致すると、所定の割り込み信号を演算器５１に出力するモードに設定する。
【００７３】
なお、動作モードの設定において、比較データとその比較内容についての以上説明した例は、一例であり、後でさらに他の例を詳述する。
【００７４】
デバッグ処理実行時の処理の流れは、上述した図５の処理と同様である。すなわち、ユーザは、デバッグ処理プログラム上で、デバッグ対象のプログラムを実行させる前に、動作モードの設定を行う（ステップS1）。その結果、図６において点線で示すように、設定レジスタ５４ａに動作モードOMが設定される。
【００７５】
なお、この動作モードの設定は、第１の実施の形態と同様に、例えば、モニタ１３の画面上に設定用の画面を表示させて、表示された複数の動作モードの中から、空きレジスタに保存したいレジスタを選択することにより、行われる。
【００７６】
そして、ユーザは、そのような動作モードの設定をした後に、デバッグプログラム上で、不具合を有するプログラムを実行させる（ステップS2）。すなわち、デバッグ対象プログラムの実行が行われる。デバッグ対象プログラムの実行時の最初の処理において、上述した判定用データの空きスロットへの書き込みが行われる。
【００７７】
プログラムが実行されるとき、第１の実施の形態と同様に、実行命令がSIMD命令であれば、４つのスロットを全て使用してSIMD演算が行われる。  
そして、実行命令がスカラ演算の命令であるとき、演算器５１は、演算結果を、所定の汎用レジスタ１０中のプリファードスロットSL1に保存するときに、その汎用レジスタ１０の各スロットSL1からSL4のデータを、判定部５４に供給する。
【００７８】
その結果、判定部５４は、設定された動作モードOMに基づいて、所定の比較演算による判定処理を実行し、判定結果が、割り込み信号として、演算器５１に供給される。例えば、演算結果が所定の範囲内の値であれば、割り込み信号は発生しないが、演算結果が所定の範囲外にあれば、割り込み信号が発生する。
【００７９】
発生した割り込み信号に応じて、所定の割り込み処理が実行されて、例えば、プリファードスロットSL1の値（すなわち演算結果）がスロットSL2とSL3の最小値と最大値の範囲外になったことを、モニタ１３の画面上に表示して、ユーザに告知する処理が実行される。よって、ユーザは、そのスカラ演算時において、割り込み信号発生時の演算結果データを、モニタ１３に表示させて確認することができる。
【００８０】
また、本実施の形態においても、図６において点線で示すように、各スロットのサイズ毎に専用のストア命令によらずに、プリファードスロットに保存されている値と共に、空きスロットに保存されている値もあわせてローカルメモリ４２に保存することができる。
【００８１】
（判定用データと判定処理の例）
次に、判定用データと判定処理の例を説明する。  
１）スタックポインタに関する制限
汎用レジスタをスタックポインタとして使用するように実装されたプロセッサの場合、所定の汎用レジスタのプリファードスロットSL1に、スタックポインタ（SP）の値が保存される。そのような場合に、デバッグを行う者は、そのスタックポインタ（SP）の値を保存する汎用レジスタの空きスロットSL2に、実行中のプログラムより求まるスタックポインタ（SP）の限界値データを設定する命令を、デバッグ対象プログラム中に追加する。そして、デバッグを行う者は、スタックポインタ（SP）の値が、その限界値を超える値となった場合に例外を発生する動作モードOMを、判定部５４の設定レジスタ５４ａに設定する。
【００８２】
例えば、いわゆるコンピュータへの攻撃者が悪意を持ったデータをそのコンピュータに処理させて、スタックがプログラマの想定した以上に大きくなり、スタックポインタ（SP）の値がデータを保持する領域を指し示すことになった場合、従来は、スタックオーバーフローとなり、その攻撃者の意図に沿ったプログラムの実行状態になったり、メモリに保存されているデータが破壊され、システムが不安定となったり、等々していた。このような場合に、本実施の形態のプロセッサを用いれば、スタックポインタ（SP）の取りうる値の範囲を事前に制限しておき、想定外の範囲をとった場合に例外を発生させるようにすることによって、このような攻撃、あるいはプログラム実行上の問題に対処することが可能となり、ひいては、計算機システムの安定性向上に役に立つ。
【００８３】
２）プログラムカウンタの値のチェック
スタックポインタ（SP）など、プログラムの実行時にしばしばスカラ値がアクセスされることが事前に判明している汎用レジスタがある。そのような場合に、デバッグを行う者は、そのレジスタがアクセスされたときのプログラムカウンタ（PC）の最大値と最小値を設定する命令を、デバッグ対象プログラム中に追加する。そして、デバッグを行う者は、プログラムカウンタ（PC）の値が、その範囲外になった場合に例外を発生する動作モードOMを、判定部５４の設定レジスタ５４ａに設定する。
【００８４】
このようにすることで、実行中のプログラムが、常に事前にプログラマが作製したプログラムの想定した領域のものであることが保障できるため、攻撃者が悪意を持ったデータをプロセッサに処理させるようにする場合に、そのような攻撃のための命令の実行が行われ難くなり、計算機システムの安全性向上に役に立つ。
【００８５】
３）変数のアクセス可能場所固定
デバッグを行う者は、スカラ値を保存している汎用レジスタの空きスロットに、その保存されているスカラ値を上書きすることが可能なプログラムの命令セットの種別、または、その数値を上書きすることが可能なプログラムカウンタの範囲を設定する命令を、デバッグ対象プログラム中に追加する。そして、デバッグを行う者は、その指定された命令セットの種別又はその指定されたプログラムカウンタ（PC）の範囲に合致しない、命令セット又はプログラムカウンタ（PC）の値が発生した場合に、例外を発生する動作モードOMを、判定部５４の設定レジスタ５４ａに設定する。  
このようにすることで、ある変数へのアクセスに関する条件の絞り込みが可能となるので、デバッグ時の原因解析などに有用である。
【００８６】
以上のように、本実施の形態のプロセッサを用いれば、プログラム開発者は、容易にスカラ演算時に演算結果データ等の内容が所定の条件になっているか否か等の確認をすることができるだけでなく、動作モードを変更することによって、確認したい内容を容易に変更することもできる。
【００８７】
なお、上述した例では、判定部５４は、判定用データを演算器５１から取得する構成であるが、判定用データの全てあるいは一部を、第１の実施の形態において示したように、各種レジスタから取得できるようにしてもよい。
【００８８】
上述したように、通常、これまでのプロセッサは、例えば、３２ビットの整数を計算する時には、汎用レジスタのバイトインデックス０から３の位置には演算に使用するデータが保存されるが、残りのバイトインデックス４から１５の領域は使用されない。また、演算結果も、汎用レジスタのバイトインデックス０から３のみに保存され、バイトインデックス４から１５の空きスロットの値は変更されない。
【００８９】
これに対して、上述した各実施の形態では、スカラ値を保存する場合に使用されていない汎用レジスタの記憶領域に、すなわち空きスロットを用いて、付加情報としての所望のデータの保存、あるいは、判定用データの保存を行うようにした。その結果、デバッグをする者は、空きスロットに保存されたデータの内容を確認する、あるいは空きスロットに保存された判定用データと演算結果等との所定の比較結果に基づく判定結果を知ることができる。
【００９０】
以上のように、上述した各実施の形態のプロセッサによれば、プロセッサ内のレジスタの値を保持するためのデバッグ用のレジスタを別途設けることなく、そのレジスタの値を保存することができる。その結果、プロセッサを提供することを目的プログラム開発時に、プログラム開発者の意図していない動作等を容易に見つけることができるようになるため、プログラムの開発効率が向上する。
【００９１】
なお、上述した実施の形態では、選択部と判定器は、各プロセッサに１つであったが、複数設けるようにしてもよい。
【００９２】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【００９３】
１０  汎用レジスタ、１１  本体部、１２  メインメモリ、１３  モニタ、２１  ＣＰＵコア、２２〜２９  プロセッサ、３１  インターフェース、３２  バス、４１  演算部、４２  ローカルメモリ、５１  演算器、５２  選択部、５２ａ、５４ａ  設定レジスタ、５２ｂ  選択器、５４  判定部、５４ｂ  判定器
【図１】
2010218030.tif 000003
【図２】
2010218030.tif 000004
【図３】
2010218030.tif 000005
【図４】
2010218030.tif 000006
【図５】
2010218030.tif 000007
【図６】
2010218030.tif 000008
【図７】
2010218030.tif 000009