(57)【要約】【課題】例外割り込みと例外処理の発生を効率的かつ未然に抑制してコンピュータの試験を行なうこと。【解決手段】コンピュータは、試験用命令列の作成時に、実行結果が書き込まれない入力専用レジスタ以外のレジスタから命令の出力先を指定する。また、コンピュータは、試験用命令列の作成時に、浮動小数点演算や固定小数点除算など例外割り込みが発生する可能性のある命令の入力に実行結果が書き込まれない入力専用レジスタを指定する。そして、コンピュータは、入力専用レジスタの初期値として例外割り込みの発生を回避することのできる値をセットして試験用命令列を実行し、例外割り込みを発生させることなく動作試験を行なう。【選択図】図１
2011253253.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
特定種別の命令実行によって例外割込みを発生しない値が設定された入力専用レジスタを命令の実行に用いる入力値を保持するレジスタとして指定し、入力専用レジスタ以外のレジスタを実行結果の出力先として指定する試験用の命令を複数有する試験用命令列を生成するステップと、
前記コンピュータが、
前記生成した試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理するステップと
を含んだことを特徴とするコンピュータ試験方法。
【請求項２】
前記試験用命令列を生成するステップは、前記特定種別の命令が固定小数点除算である場合には除数として用いる入力値を保持するレジスタとして前記入力専用レジスタを指定し、前記入力専用レジスタに前記初期値として０以外の値を設定することを特徴とする請求項１に記載のコンピュータ試験方法。
【請求項３】
前記試験用命令列を生成するステップは、前記特定種別の命令が浮動小数点演算である場合に前記浮動小数点演算の入力値を保持するレジスタの少なくとも一つに前記入力専用レジスタを指定し、前記入力専用レジスタに設定する初期値として、前記浮動小数点演算に用いる他の入力値がどのような値であっても前記浮動小数点演算における例外割り込みの発生を防止する値を用いることを特徴とする請求項１または２に記載のコンピュータ試験方法。
【請求項４】
前記試験用命令列を生成するステップは、命令の実行結果の出力先として指定されたレジスタを後続の命令が入力値を保持するレジスタとして指定する試験用命令列を生成することを特徴とする請求項１〜３のいずれか一つに記載のコンピュータ試験方法。
【請求項５】
特定種別の命令実行によって例外割込みを発生しない値が設定された入力専用レジスタを命令の実行に用いる入力値を保持するレジスタとして指定し、入力専用レジスタ以外のレジスタを実行結果の出力先として指定する試験用の命令を複数有する試験用命令列を生成する試験用命令列生成部と、
前記生成した試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する評価処理部と
を備えたことを特徴とするコンピュータ試験装置。
【請求項６】
前記命令の種別ごとに定めた第１のデータと第２のデータとを命令定義構造体として保持する命令定義構造体テーブルをさらに備え、前記試験用命令列生成部は、ランダムデータと前記第１のデータとの論理積に対し、前記第２のデータとの論理和を取って前記試験用命令列に含まれる命令を生成し、前記第１のデータは命令の実行結果の出力先として使用するレジスタに対応する範囲のビット値に０を含むことを特徴とする請求項５に記載のコンピュータ試験装置。
【請求項７】
特定種別の命令実行によって例外割込みを発生しない値が設定された入力専用レジスタを命令の実行に用いる入力値を保持するレジスタとして指定し、入力専用レジスタ以外のレジスタを実行結果の出力先としてを指定する試験用の命令を複数有する試験用命令列を生成する手順と、
前記生成した試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する手順と
をコンピュータに実行させることを特徴とするコンピュータ試験プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラムに関する。
【背景技術】
【０００２】
従来、コンピュータの論理設計の妥当性を検証する場合や、製造されたコンピュータの動作を検証する場合には、コンピュータに試験プログラムを実行させて動作確認を行なう動作確認試験が行われる。この動作確認試験としては、コンピュータが高負荷状態で正常動作をするか否かをチェックする高負荷試験や、パイプライン処理上のコンフリクト発生時に正常動作するか否かをチェックするコンフリクト試験などが知られている。
【０００３】
このため、高負荷試験を行うためには、コンピュータが高負荷状態となるような試験用の命令列を生成することが求められる。一方、コンフリクト試験を行うためには、コンピュータがコンフリクト状態となる試験用の命令列を生成することが求められる。例えば、各レジスタが使用中か否かを登録したスコアボードを利用し、命令で使用するレジスタを選択することで、コンフリクト状態となる命令列を生成することができる。
【０００４】
試験用の命令列は、命令のオペランドの値やオペランドとして指定するレジスタをランダムに生成したランダム命令列が用いられる。
【０００５】
ところが、コンピュータが高負荷試験やコンフリクト試験用の命令列を実行中に「割り込み」が発生すると、割り込みによって実行される例外処理が終わるまでコンピュータは試験動作から外れ、本来意図した高負荷状態やコンフリクト状態を作り出せない。このようにコンピュータに例外処理を実行させる割り込みを例外割り込みという。
【０００６】
例外割り込みは、例えば除数「０」で除算を行う固定小数点除算で発生する。かかる場合にはエラー処理が求められるため、コンピュータは後続の命令を止めてエラー処理用のサブルーチンを例外処理として実行することになる。同様に、オーバーフローを伴う浮動小数点演算で例外割り込みが発生する。かかるオーバーフローが発生すると、コンピュータは後続の命令を止めてオーバーフローした値を処理するサブルーチンを例外処理として実行することになる。このように、高負荷試験やコンフリクト試験の途中で例外割り込みが発生して例外処理用のサブルーチンに移行すると、コンピュータは、例外処理用のサブルーチンを終了するまで本来意図していた高負荷状態やコンフリクト状態を実現することができなくなる。
【０００７】
なお、試験用命令列を用いてコンピュータの試験を行う場合に、例外割り込みの発生を抑制する従来技術が知られている。例えば、コンピュータが試験用命令列を生成する際に、例外割り込みが発生する可能性のある命令については、オペランドデータや演算データ等の条件を変更することで、例外割り込みの少ない試験用命令列を取得する技術が知られている。また、コンピュータが試験用命令列を実行して例外割り込みが発生した命令については、例外割り込みの原因となるパラメータを記憶し、次回の試験用命令列生成時に原因となるパラメータを除外する技術が知られている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平２−２４４３３８号公報
【特許文献２】特開平６−３２４９０４号公報
【特許文献３】特開２００１−２２２４４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
コンピュータは、出力先としてレジスタ番号が指定された命令の実行結果を指定されたレジスタに書き込む。従って、コンピュータが試験用命令列を実行した場合には、処理が進むにつれてレジスタが保持する値は変化する。このため、オペランドとして指定するレジスタ番号をランダムに定めた試験用命令列では、命令が実行される時点でレジスタにいかなる値が格納されているかを事前に知ることはできない。
【００１０】
命令の実行時点でのレジスタの値が事前に分からないため、レジスタが命令の実行時点で保持する値の組み合わせによっては例外割り込みが発生する可能性がある。例えば、コンピュータがあるレジスタの値を除数として除算を行う除算命令を実行する場合に、先行する命令によって「０」を当該レジスタに書き込んでいたならば、結果的に除数０による除算命令を実行することとなり例外割り込みが発生する。同様に、コンピュータがあるレジスタの値を入力として浮動小数点演算を実行する場合にも、先行する命令がレジスタに書き込んだ値によっては演算結果がオーバーフローとなり、例外割り込みが発生する。
【００１１】
このように、ランダムなレジスタ番号をオペランドとする命令を用いた試験では、命令と実行結果との対応を予め判別し、例外割り込みがでないような命令と実行結果との組合せを設定することが困難である。このため、命令と実行結果との組合せによっては例外割込みが生じる可能性があり、例外割り込みが生じる可能性をなくすことができなかった。
【００１２】
オペランドデータ等の条件を変更する従来技術によれば、試験の開始前にオペランドのデータが特定されていることが前提となるので、レジスタ番号をオペランドとする命令を用いて試験を行なうと、例外割り込みが発生する可能性が残る。
【００１３】
また、例外割り込みが発生した命令のパラメータを次回の試験用命令列から除外する従来技術では、少なくとも一度は例外割り込みが発生しないと次回の試験用命令列から原因のパラメータを除外できず、例外割り込みの発生を防止できないという問題点がある。加えて、パラメータの蓄積数が多くなるほど例外割り込みの発生を低減できるものの、例外割り込みの可能性のある全てのパラメータを蓄積しない限り例外割り込みの発生は抑制できない。
【００１４】
このように、上記従来技術によれば、ランダムなレジスタ番号をオペランドとする命令を試験用命令列として取り入れた試験を行う場合に例外割り込み発生を排除することができない。また、過去の例外割り込み発生のパラメータを蓄積したとしても、未然に例外割り込みを抑制できないという問題があった。
【００１５】
開示の技術は、上記に鑑みてなされたものであって、例外割り込みと例外処理の発生を効率的かつ未然に抑制するコンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
本願の開示するコンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラムは、試験用の命令を複数有する試験用命令列の生成時に、複数のレジスタのうち命令の実行結果が書き込まれない入力専用レジスタを除外したレジスタから実行結果の出力先を指定する。さらに開示の方法、装置、プログラムは、命令が特定種別である場合には当該命令の実行に用いる入力値を保持するレジスタとして入力専用レジスタを指定する。そして、開示の方法、装置、プログラムは、入力専用レジスタに、特定種別の命令によって例外割り込みを発生しない初期値を設定し、試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する。
【発明の効果】
【００１７】
本願の開示する方法、装置、プログラムによれば、例外割り込みと例外処理の発生を効率的かつ未然に抑制するコンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラムを得ることができるという効果を奏する。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施例１にかかるコンピュータ試験方法のフローチャートである。
【図２】図２は、試験用命令列の説明図である。
【図３】図３は、実施例２にかかるコンピュータ試験装置の概要構成を示す概要構成図である。
【図４】図４は、試験プログラムを実行するコンピュータの説明図である。
【図５】図５は、例外処理の説明図である。
【図６】図６は、例外割込みが発生する可能性のある命令種と例外発生の回避条件の例を示す説明図である。
【図７】図７は、レジスタ群２３における入出力兼用レジスタと入力専用レジスタについての説明図である。
【図８】図８は、一つのランダムデータからの試験用命令の生成を説明する図である。
【図９】図９は、レジスタ番号の制御についての説明図である。
【図１０】図１０は、ｆｄｉｖ命令を生成する具体例の説明図である。
【図１１】図１１は、ｆａｎｄ命令を生成する具体例の説明図である。
【図１２】図１２は、コンフリクトの説明図である。
【図１３】図１３は、試験用命令列におけるコンフリクトの設定についての説明図である。
【図１４】図１４は、ランダムデータ生成部５２が生成したランダムデータの具体例である。
【図１５】図１５は、記憶部４３に格納された命令定義構造体テーブル６２の具体例である。
【図１６】図１６は、試験用命令列生成部５３が生成した試験用命令列データ６６の具体例である。
【図１７】図１７は、コンフリクト設定の具体例である。
【図１８】図１８は、コンピュータ１０の処理動作を説明するフローチャートである。
【図１９】図１９は、図１８に示した命令生成処理の詳細について説明するフローチャートである。
【図２０】図２０は、図１９に示したコンフリクト設定処理の詳細について説明するフローチャートである。
【図２１】図２１は、図２０に示したレジスタ番号の置き換え処理の詳細について説明するフローチャートである。
【図２２】図２２は、図１８に示した試験実行処理の詳細について説明するフローチャートである。
【図２３】図２３は、実施例３にかかる試験プログラムを実行するコンピュータの説明図である。
【図２４】図２４は、試験実行部８１の処理について説明するフローチャートである。
【発明を実施するための形態】
【００１９】
以下に、本願の開示するコンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例１】
【００２０】
図１は、実施例１にかかるコンピュータ試験方法のフローチャートである。図１に示した処理動作は、試験対象となるコンピュータが実行する。まず、コンピュータは、複数のレジスタのうち実行結果が書き込まれないレジスタを除外したレジスタから命令の実行結果の出力先を指定する試験用の命令を複数有する試験用命令列を生成する。実行結果が書き込まれないレジスタは、初期値として設定された値を保持する入力専用レジスタとなる。さらに、コンピュータは、命令が特定種別である場合には当該命令の実行に用いる入力値を保持するレジスタとして入力専用レジスタを指定する（Ｓ１０１）。
【００２１】
試験用命令列の生成後、コンピュータはレジスタに初期値をセットする。ここでコンピュータは、入力専用レジスタに対しては、命令の種別、すなわち命令種に対応した例外割り込みを発生しない初期値を設定する（Ｓ１０２）。
【００２２】
レジスタに初期値をセットした後、コンピュータは試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する（Ｓ１０３）。コンピュータは、例えば試験用命令列を複数回実行し、実行結果を比較することで実行結果の評価を行なう。
【００２３】
次に、コンピュータがＳ１０１で生成する試験用命令列についてさらに説明する。試験用命令列に含まれる複数の命令はそれぞれ、命令種を特定するオペコードと命令が扱うデータを示すオペランドとを有する。オペランドは、命令の入力値として用いるデータの読み出し元となるレジスタやメモリアドレス、命令の出力値を書き込むレジスタやメモリアドレスを示す。オペランドのうち、命令の入力として用いるレジスタ番号を示すものをソースレジスタ、または入力レジスタという。また、オペランドのうち実行した命令の出力値を書き込むレジスタ番号を示すものをデスティネーションレジスタ、または出力レジスタという。
【００２４】
この試験用命令列の具体例について説明する。図２は、試験用命令列の説明図である。図２に示した例では試験用命令列は、試験用命令ｏｐ０１，ｏｐ０２，ｏｐ０３を含む。各命令はオペコードとオペランドとを有する。例えば試験用命令ｏｐ０２は、オペコードｏｐｃ、入力レジスタｒｓ１、入力レジスタｒｓ２、出力レジスタｒｄを有する。このうち入力レジスタｒｓ１、入力レジスタｒｓ２、出力レジスタｒｄがオペランドである。
【００２５】
オペコードｏｐｃは、命令の種別を特定するビット列である。また、入力レジスタｒｓ１と入力レジスタｒｓ２は、それぞれ命令の入力として使用するレジスタのレジスタ番号を示すビット列である。出力レジスタｒｄは、命令の実行結果を格納するレジスタのレジスタ番号を示すビット列である。
【００２６】
図２に示した例では、試験用命令ｏｐ０２のオペコードｏｐｃは、入力レジスタｒｓ１から読み出した値を入力レジスタｒｓ２から読み出した値で割る除算を示している。また、入力レジスタｒｓ１は、レジスタｒｇ００からレジスタｒｇ３１までの３２個のレジスタを有するレジスタセット２のうちレジスタｒｇ１６を示している。同様に入力レジスタｒｓ２は、レジスタセット２のうちレジスタｒｇ０１を示している。そして、出力レジスタｒｄは、レジスタセット２のうちレジスタｒｇ１７を示している。
【００２７】
コンピュータの演算部１は、試験用命令ｏｐ０２を実行する場合にレジスタｒｇ１６から読み出した値をレジスタｒｇ０１から読み出した値で割って得られた結果をレジスタｒｇ１７に書き込む。
【００２８】
演算部１は、除算を行なう場合に除数が０であるとエラーを出力し、例外割り込みを発生する。したがって、演算部１が除算を実行する場合に例外割り込みの発生を回避するためには、除数として用いる入力レジスタから読み出した値が０以外であることが求められる。
【００２９】
しかし、先行の命令の出力レジスタを演算部１が除数として用いる入力レジスタとして使用すると、先行の命令の実行によって入力レジスタの値が書き換えられて入力レジスタ内の除数の値が０となる可能性がある。そこで、コンピュータは試験用命令を生成する場合に、レジスタの一部を入力専用に割り当て、除数を保持する入力レジスタを入力専用のレジスタから選択する。加えて、コンピュータは、各命令の出力レジスタを入力専用レジスタ以外のレジスタから選択する。
【００３０】
このため、除数を保持する入力専用レジスタは、命令の実行によっては保持した情報の書き換えが行なわれずに初期値を維持する。したがって入力専用レジスタの初期値が０以外であれば、演算部１が除算を行なう場合に除数が０となることによる例外割り込みの発生を回避することができる。
【００３１】
図２に示した例では、レジスタセット２のうちレジスタｒｇ００からレジスタｒｇ１５までの１６個のレジスタが入力専用レジスタである。また、レジスタセット２のうちレジスタｒｇ１６からレジスタｒｇ３１までの１６個のレジスタは、出力レジスタとしても入力レジスタとしても使用可能な入出力兼用レジスタである。
【００３２】
演算部１が試験用命令ｏｐ０２を実行する場合に用いる除数を保持するレジスタｒｇ０１は入力専用レジスタである。このため、コンピュータがレジスタｒｇ０１の初期値に０以外の値をセットしておくことで、演算部１が試験用命令ｏｐ０２を実行した時に例外割り込みの発生を回避することができる。
【００３３】
なお、演算部１が除算を行なう場合には被除数の値はどのような値であってもよいので、入力専用レジスタと入出力兼用レジスタのいずれであっても被除数に対応する入力レジスタとして使用可能である。試験用命令ｏｐ０２では、被除数に対応する入力レジスタｒｓ１は入出力兼用レジスタであるレジスタｒｇ１６を示している。
【００３４】
このように、コンピュータが試験用命令列を生成する場合にレジスタの一部を入力専用とし、除数を入力専用レジスタから選択するとともに、入力専用レジスタの初期値として０以外の値をセットすることで、除算における例外割り込みの発生を回避できる。
【００３５】
また、除算以外の命令であっても、入力値によって例外割り込みが発生する可能性のある命令をコンピュータが生成する場合には、入力レジスタとして入力専用レジスタを選択することで例外割り込みの発生を回避できる。入力値によって例外割り込みが発生する可能性のある命令としては、浮動小数点演算などがある。例えばコンピュータが浮動小数点演算で乗算を行なう場合は、入力値の組み合わせによっては演算結果が表現可能な上限を超えてオーバーフローが発生し、例外処理に移行する。コンピュータが浮動小数点演算の乗算を行なう場合には、入力値の少なくとも一つを入力専用レジスタから選択し、入力専用レジスタの初期値として例外割り込みの発生しない値、例えば１をセットしておくことで例外割り込みの発生を回避できる。
【００３６】
なお、例外割り込みが発生しない命令を生成する場合、コンピュータは入力レジスタとして入出力兼用レジスタと入力専用レジスタとのいずれも選択可能である。また、例外割り込みが発生する命令であっても、除算の被除数のように例外割り込みの発生に関与しない値を保持する入力レジスタは、コンピュータは入出力兼用レジスタと入力専用レジスタとのいずれからも選択可能である。
【００３７】
上述してきたように、本実施例１に示したコンピュータ試験方法は、試験用命令のうち、入力値によって例外割り込みが発生する可能性のある特定の種別の命令の入力レジスタには入力専用レジスタを設定する。そして、本実施例１に示したコンピュータ試験方法は、入力専用レジスタに、例外割り込みの発生を回避することのできる値を初期値としてセットして試験用命令列を実行する。
【００３８】
このため、本実施例１に示したコンピュータ試験方法は、例外割り込みと例外処理の発生を効率的かつ未然に抑制する。したがって、本実施例１に示したコンピュータ試験方法は、レジスタの値を書き換えつつ、かつ例外割り込みと例外処理を発生することなく試験を行なうことができる。また、試験用命令列を実行して発生した例外割り込みを回避するよう修正する技術に比して本実施例１に示したコンピュータ試験方法は短時間で例外割り込みが発生しない試験用命令列を生成できる。
【実施例２】
【００３９】
図３は、実施例２にかかるコンピュータ試験装置の概要構成を示す概要構成図である。図３に示したコンピュータ１０は、ＣＰＵ（Central Processing Unit）１１、メインメモリ１２、ＲＯＭ（Read Only Memory）１３、バス１５を有する。ＣＰＵ１１、メインメモリ１２、ＲＯＭ１３はバス１５に接続され、バス１５を介してデータの授受を行なう。
【００４０】
ＣＰＵ１１は、メインメモリ１２を主記憶装置として動作する演算装置であり、内部に命令制御部２１、演算部２２、レジスタ群２３、バスインタフェース２４を有する。命令制御部２１は、命令のデコードと処理順序制御を行なう処理部である。具体的には命令制御部２１は、ＣＰＵ１１が処理する命令を読み込み、解釈し、解釈結果を出力する。演算部２２は、演算を行なう処理部である。具体的には演算部２２は、命令の対象となるデータを読み込み、命令制御部２１によって解釈された命令に従って演算し、演算結果を出力する。
【００４１】
レジスタ群２３は、演算部２２による演算結果など各種情報の保持を行なうレジスタセットを複数有する。バスインタフェース２４は、命令制御部２１および演算部２２とバス１５との間に介在するインタフェースである。
【００４２】
命令制御部２１は、メインメモリ１２に展開されたプログラムから命令を読み出して実行する。命令制御部２１は、実行結果をメインメモリ１２に戻すか、もしくはレジスタ群２３に格納する。演算部２２は、命令制御部２１に指示された演算の入力値をメインメモリ１２もしくはレジスタ群２３から読み出して演算を実行し、実行結果をメインメモリ１２に戻すか、もしくはレジスタ群２３に格納する。
【００４３】
ＲＯＭ１３は、例えばフラッシュメモリであり、ＣＰＵ１１が実行するプログラムなどを格納する。ＲＯＭ１３に試験プログラム３１を格納し、ＣＰＵ１１が試験プログラム３１を実行することで、コンピュータ１０は自身の動作を試験するコンピュータ試験装置として機能する。
【００４４】
また、コンピュータ１０は、図示しない任意のインタフェースを介して外部装置と接続してもよい。コンピュータ１０は、外部装置から試験プログラムを受信して実行することで自身の動作を試験するコンピュータ試験装置として機能することができる。
【００４５】
図４は、試験プログラムを実行するコンピュータの説明図である。ＣＰＵ１１が試験プログラム３１を実行することで、ＣＰＵ１１は命令生成部４１および試験実行部４２の機能を実現する。また、ＣＰＵ１１は試験プログラム３１を実行する場合に、メインメモリ１２を記憶部４３として使用する。なお、ＣＰＵ１１は、メインメモリ１２に限らず任意の記憶媒体を記憶部４３として使用することができる。また、ＣＰＵ１１は複数の記憶媒体にデータを分散させて記憶部４３として使用してもよい。
【００４６】
命令生成部４１は、シード値設定部５１、ランダムデータ生成部５２、試験用命令列生成部５３を有する。シード値設定部５１は、試験用命令列の乱数部分の生成に使用するシード値を設定する。シード値設定部５１が新規にシード値を定めた場合、シード値設定部５１は新規に定めたシード値を記憶部４３にシード値データ６１として格納する。また、予め定められたシード値を用いる場合、シード値設定部５１は、記憶部４３からシード値データ６１を読み出してシード値に設定する。
【００４７】
ランダムデータ生成部５２は、シード値設定部５１が設定したシード値を初期値として擬似ランダム列を生成し、擬似ランダム列から試験用命令と同じ長さのデータを順次切り出してランダムデータを生成する。
【００４８】
試験用命令列生成部５３は、ランダムデータ生成部５２が生成したランダムデータから試験用命令列を生成し、試験用命令列データ６６として記憶部４３に格納する。ランダムデータからの試験用命令列の生成には、命令定義構造体テーブル６２、コンフリクトカウンタ６３、コンフリクトレジスタテーブル６４を使用する。ランダムデータからの試験用命令列生成の詳細については後述する。
【００４９】
試験実行部４２は、命令生成部４１が生成した試験用命令列データ６６を用いて試験を行なう処理部であり、初期値設定部５４、命令列実行部５５、実行結果退避部５６、結果比較部５７を有する。
【００５０】
初期値設定部５４は、記憶部４３からレジスタ初期値データ６５を読み出してレジスタにセットする。すなわち、記憶部４３は、レジスタ初期値データ６５を格納するレジスタ初期値データ格納部として機能する。
【００５１】
命令列実行部５５は、初期値設定部５４による初期値のセットの後、記憶部４３から試験用命令列データ６６を読み出して実行する。実行結果退避部５６は、命令列実行部５５の実行結果を実行結果データ６７として記憶部４３に登録する。その後、命令列実行部５５は、再度試験用命令列データ６６を読み出して実行する。結果比較部５７は、命令列実行部５５の二度目の実行結果と、実行結果データ６７とを比較して評価を行なう。すなわち、命令列実行部５５と結果比較部５７とは、協働して評価処理部として機能する。
【００５２】
例えば、命令列実行部５５の二度の実行結果が一致しなければ、結果比較部５７は、試験用命令列の実行中に何らかの異常が発生したと評価する。試験用命令列の実行中に生じる異常の例としては動作の遅れがある。試験用命令列の実行中に動作の遅れが生じると、命令の処理順序が乱れ、データに異常が発生する。このデータの異常によって試験用命令列を実行するごとに結果が異なる値となるので、結果比較部５７は二度の実行結果を比較することで異常の有無を評価することができるのである。なお、命令の動作の遅れは、動作チェック部をさらに設けて試験用命令列の実行中の状態を監視することでも検知することができる。
【００５３】
次に、例外処理による問題点について説明する。図５は、例外処理の説明図である。図５に示した試験用命令列を実行すると、ＣＰＵ１１は、まず試験用命令ｏｐ１１を実行し、次に試験用命令ｏｐ１２、試験用命令ｏｐ１３と順次命令を実行する。
【００５４】
試験用命令列は、試験用命令ｏｐ１３の実行後、試験用命令ｏｐ１４を実行することを定めている。しかし、試験用命令ｏｐ１３の実行の結果として例外割込みが発生すると、ＣＰＵ１１は例外処理に移行する。
【００５５】
例外処理に移行すると、ＣＰＵ１１は例外処理用命令ｏｐｘ−１，例外処理用命令ｏｐｘ−２と順次命令を実行する。そして、最後の例外処理用命令ｏｐｘ−ｅｎｄを実行し、例外処理が終了すると、ＣＰＵ１１は試験用命令列の処理に戻る。
【００５６】
図５に示した例では、試験用命令ｏｐ１３で例外割込みが発生しているので、ＣＰＵ１１は、例外処理の終了後に試験用命令ｏｐ１４、試験用命令ｏｐ１５を実行し、試験用命令列の処理を進める。
【００５７】
このように、試験用命令列の実行中に例外割込みが発生すると、ＣＰＵ１１は例外処理のための命令を実行する。例外処理にかかる命令の実行は、試験の中では意図されていない。このため、例外割込みが発生して試験用命令列の動作から外れると、ＣＰＵ１１は、試験用命令列で意図していた状態を維持できない場合がある。
【００５８】
たとえば、高負荷試験では、ＣＰＵのパイプラインに命令を連続して投入して高負荷状態を実現し、ＣＰＵやコンピュータの動作を検証する。この高負荷試験用に生成した試験用命令列をコンピュータが実行している途中で例外割込みが発生すると、高負荷状態が解消してしまう場合がある。
【００５９】
また、コンフリクト試験では、コンピュータは先行する命令の出力レジスタを入力レジスタとして指定した命令をパイプラインに投入してコンフリクト状態を実現し、動作を検証する。このコンフリクト試験用に生成した試験用命令列をコンピュータが実行している途中に例外割込みが発生すると、意図したコンフリクト状態が発生しない場合がある。この問題に対して本実施例２にかかるコンピュータ１０は、実施例１と同様に、レジスタを入出力兼用レジスタと入力専用レジスタに分け、例外割り込みが生じる可能性のある命令については入力値に入力専用レジスタを使用することで例外割り込みの発生を回避する。
【００６０】
この例外発生の可能性のある命令と例外発生の回避について説明する。図６は、例外割込みが発生する可能性のある命令種と例外発生の回避条件の例を示す説明図である。命令種が浮動小数点演算である場合は、コンピュータは入力値によっては例外割込みを発生する。具体的には、積算などの結果としてオーバーフローが起きる場合や、演算結果が非数となる場合などに、コンピュータは例外割込みを発生する。浮動小数点演算での例外割込みの発生を回避するためには、コンピュータが演算に使用する入力値の少なくとも一つに、他の入力値がどのような値であっても例外割り込みの発生を防止する値を用いればよい。具体的には、１、もしくは１に近い値、例えば０．９〜１．１の範囲の値を浮動小数点演算の一方の入力値として用いる。この入力値の範囲は、浮動小数点演算の他の入力値がどのような値であっても演算の結果として例外割り込みが発生しない範囲で任意に設定可能である。
【００６１】
また、命令種が固定小数点除算である場合は、コンピュータは除数が０である場合に例外割込みを発生する。コンピュータが固定小数点除算での例外割込みの発生を回避するためには、除数に０以外の値を用いればよい。
【００６２】
この例外発生を回避するため、本実施例２にかかるコンピュータ１０は、レジスタを入出力兼用レジスタと入力専用レジスタに分け、入力専用レジスタに対して例外処理を伴わない、言い換えると例外割込みが発生する可能性のない初期値を設定する。図７は、レジスタ群２３における入出力兼用レジスタと入力専用レジスタについての説明図である。レジスタ群２３は、浮動小数点演算に用いる浮動小数点レジスタセット７１と固定小数点演算に用いる汎用レジスタセット７２とを有する。
【００６３】
浮動小数点レジスタセット７１は、３２個のレジスタを有する。浮動小数点レジスタセット７１が有する３２個のレジスタのレジスタ番号はｆｒ００〜３１である。これらのレジスタ番号はビット列で示すと「０００００」〜「１１１１１」である。図７の例では、ビット列で示したレジスタ番号のうち、上位２ビット目が「０」であるレジスタを入力専用レジスタとし、上位２ビット目が「１」であるレジスタを入出力兼用レジスタとしている。図７において、ハッチングを付したレジスタが入出力兼用レジスタを、ハッチングを付していないレジスタが入力専用レジスタを、それぞれ示す。
【００６４】
したがって、「０００００」〜「１１１１１」のうち、入力専用レジスタは「０００００」〜「００１１１」と「１００００」〜「１０１１１」の１６個、入出力兼用レジスタは「０１０００」〜「０１１１１」と「１１０００」〜「１１１１１」の１６個となる。
【００６５】
浮動小数点レジスタセット７１の各レジスタのレジスタ番号「０００００」〜「１１１１１」をｆｒ００〜３１として表記すると、入力専用レジスタはｆｒ００〜０７とｆｒ１６〜２３、入出力兼用レジスタはｆｒ０８〜１５とｆｒ２４〜３１である。
【００６６】
コンピュータ１０が浮動小数点レジスタセット７１に初期値をセットする際には、入力専用レジスタには１あるいは１に近い値をセットする。コンピュータ１０は、入出力兼用レジスタの初期値には乱数など任意の値をセットすることができる。
【００６７】
汎用レジスタセット７２は、３２個のレジスタを有する。汎用レジスタセット７２が有する３２個のレジスタのレジスタ番号はｇｒ００〜３１である。各レジスタ番号ｇｒ００〜３１は、ビット列で示すと「０００００」〜「１１１１１」である。図７の例では、ビット列で示したレジスタ番号のうち、上位２ビット目が「０」であるレジスタを入力専用レジスタとし、上位２ビット目が「１」であるレジスタを入出力兼用レジスタとしている。浮動小数点レジスタセット７１と同様、汎用レジスタセット７２において、ハッチングを付したレジスタが入出力兼用レジスタを、ハッチングを付していないレジスタが入力専用レジスタをそれぞれ示す。
【００６８】
したがって、「０００００」〜「１１１１１」のうち、入力専用レジスタは「０００００」〜「００１１１」と「１００００」〜「１０１１１」の１６個、入出力兼用レジスタは「０１０００」〜「０１１１１」と「１１０００」〜「１１１１１」の１６個となる。
【００６９】
この汎用レジスタセット７２のレジスタ番号「０００００」〜「１１１１１」をｇｒ００〜３１として表記すると、入力専用レジスタはｇｒ００〜０７とｇｒ１６〜２３、入出力兼用レジスタはｇｒ０８〜１５とｇｒ２４〜３１となる。
【００７０】
コンピュータ１０が汎用レジスタセット７２に初期値をセットする際には、入力専用レジスタには０以外の値をセットする。コンピュータ１０は、入出力兼用レジスタの初期値には乱数など任意の値をセットすることができる。
【００７１】
次に、コンピュータ１０の試験用命令列生成部５３による試験用命令列の生成について説明する。試験用命令列を構成する命令は、命令の種別を示すオペコード、入力レジスタ、出力レジスタを有する。コンピュータ１０は、試験用命令の入力レジスタと出力レジスタとにランダムな値を設定する。
【００７２】
コンピュータ１０が試験用命令を生成する場合は、ランダムデータから入力レジスタ分と出力レジスタ分のデータを取り出して生成する命令に挿入してもよいが、命令と同じ長さの一つのランダムデータから入力レジスタと出力レジスタの値がランダムな命令を得る方法も知られている。
【００７３】
図８は、一つのランダムデータからの試験用命令の生成を説明する図である。図８に示した例では、コンピュータ１０は、シード値に基づいて生成した擬似ランダム列から、生成対象の命令全体と同じビット数のランダムデータＤ０を取り出して試験用命令の生成に使用する。コンピュータ１０は、ランダムデータＤ０とＡＮＤデータＤ１との論理積（ＡＮＤ）をとり、さらにＯＲデータＤ２との論理和（ＯＲ）を取ることで、試験用命令Ｄ３を得る。
【００７４】
ＡＮＤデータＤ１とＯＲデータＤ２は、それぞれビット数が命令全体と同じである。また、ＡＮＤデータＤ１とＯＲデータＤ２は、命令の種別ごとに定められる。図８の例では、ＡＮＤデータＤ１は、命令のオペコードに対応する範囲のビットの値が全て０である。一方、図８ではＯＲデータＤ２は、命令のオペコードに対応する範囲のビットの値は生成する試験用命令Ｄ３のオペコードと同一の値である。
【００７５】
したがって、コンピュータ１０は、ランダムデータＤ０とＡＮＤデータＤ１の論理積をとり、論理積結果とＯＲデータＤ２との論理和を取ることで、オペコードに対応する範囲について、ランダムデータＤ０の対応する領域の値に関わらず、ＯＲデータＤ２の値を残すことができる。
【００７６】
また、図８の例ではＡＮＤデータＤ１は、生成する試験用命令Ｄ３の出力レジスタと入力レジスタに対応する範囲のビットの値が全て１である。一方、ＯＲデータＤ２は、生成する試験用命令Ｄ３の命令の出力レジスタと入力レジスタに対応する範囲のビットの値が全て０である。
【００７７】
したがって、コンピュータ１０は、ランダムデータＤ０とＡＮＤデータＤ１の論理積をとり、論理積結果とＯＲデータＤ２との論理和を取ることで、出力レジスタと入力レジスタに対応する範囲について、ランダムデータＤ０の対応する領域の値をそのまま残すことができる。
【００７８】
このように、命令種ごとにＡＮＤデータＤ１とＯＲデータＤ２を用意し、ＯＲデータＤ２のオペコード対応部分を目的のオペコードに合わせれば、コンピュータ１０は目的のオペコードを持ち、入力レジスタと出力レジスタがランダムに設定された試験用命令Ｄ３を得ることができる。
【００７９】
ここで、入力レジスタと出力レジスタの値を全てランダムに定めると、コンピュータ１０は入力レジスタと出力レジスタのそれぞれについて、レジスタセット全体からいずれか一つのレジスタを指定することになる。コンピュータ１０は、図７を参照して説明したように、レジスタ番号の上位２ビット目の値によって入力専用レジスタと入出力兼用レジスタを分ける。このため、コンピュータ１０は、ＡＮＤデータＤ１とＯＲデータＤ２とのうち入力レジスタと出力レジスタとに対応する範囲の値を図９のように定める。
【００８０】
図９は、レジスタ番号の制御についての説明図である。入力レジスタや出力レジスタに対応する範囲の値が、ＡＮＤデータＤ１のビットがオール１であり、ＯＲデータＤ２のビットがオール０であれば、ランダムデータＤ０の入力レジスタ／出力レジスタに対応する範囲の値がそのまま残る。このため、コンピュータ１０は、レジスタセット全体から各レジスタを選択することとなる。
【００８１】
これに対し、入力レジスタや出力レジスタに対応する範囲の値が、ＡＮＤデータＤ１の２ビット目が０、他のビットが１であり、ＯＲデータＤ２がオール０であれば、生成される試験用命令Ｄ３のレジスタ番号の上位２ビット目は常に０となる。この結果、ＡＮＤデータＤ１とＯＲデータＤ２との入出力レジスタに対応する値を上記のように設定することによって、コンピュータ１０は、入力専用レジスタのいずれかを選択することとなる。
【００８２】
また、入力レジスタや出力レジスタに対応する範囲の値が、ＯＲデータＤ２の２ビット目が１、他のビットが０であれば、生成される試験用命令Ｄ３のレジスタ番号の上位２ビット目は常に１となる。この結果、コンピュータ１０は、入出力兼用レジスタのいずれかを選択することとなる。なお、入力レジスタや出力レジスタに対応する範囲について、ＯＲデータＤ２の上位２ビット目を１とした場合は、ＡＮＤデータＤ１の２ビット目は０であっても１であってもよい。
【００８３】
この試験用命令の生成についてｆｄｉｖ命令とｆａｎｄ命令の生成を例示する。図１０は、ｆｄｉｖ命令を生成する具体例の説明図である。浮動小数点の除算であるｆｄｉｖ命令は、入力値によっては例外割り込みを発生させるので、コンピュータ１０は、ｆｄｉｖ命令の第１入力レジスタと第２入力レジスタの双方を入力専用レジスタから選択する。また、コンピュータ１０は、出力レジスタについては、入出力兼用レジスタから選択する。
【００８４】
図１０に示した例では、ランダムデータＤ０（図１０「乱数」）のうち、第１入力レジスタに対応する範囲の乱数は「１１０１１」である。この値とＡＮＤデータＤ１の値「１０１１１」との論理積をとると「１００１１」となる。論理積の結果として得られた値とＯＲデータＤ２の値「０００００」との論理和をとると「１００１１」となる。この値は浮動小数点レジスタセット７１のレジスタｆｒ１９に対応する。
【００８５】
同様に、図１０に示した例では、ランダムデータＤ０のうち、第２入力レジスタに対応する範囲の乱数は「０１１０１」である。この値とＡＮＤデータＤ１の値「１０１１１」との論理積をとると「００１０１」となる。論理積の結果として得られた値とＯＲデータＤ２の値「０００００」との論理和をとると「００１０１」となる。この値は浮動小数点レジスタセット７１のレジスタｆｒ０５に対応する。
【００８６】
また、図１０に示した例では、ランダムデータＤ０のうち、出力レジスタに対応する範囲の乱数は「００１１０」である。この値とＡＮＤデータＤ１の値「１０１１１」との論理積をとると「００１１０」となる。論理積の結果として得られた値とＯＲデータＤ２の値「０１０００」との論理和をとると「０１１１０」となる。この値は浮動小数点レジスタセット７１のレジスタｆｒ１４に対応する。
【００８７】
したがって図１０に示した例では、命令「ｆｄｉｖ，ｆｒ１９，ｆｒ０５，ｆｒ１４」が生成される。既に述べたように、入力専用レジスタのレジスタ番号はｆｒ００〜０７とｆｒ１６〜２３、入出力兼用レジスタのレジスタ番号はｆｒ０８〜１５とｆｒ２４〜３１である。命令「ｆｄｉｖ，ｆｒ１９，ｆｒ０５，ｆｒ１４」のうち入力レジスタｆｒ１９，ｆｒ０５は入力専用レジスタであり、出力レジスタｆｒ１４は入出力兼用レジスタである。
【００８８】
図１１は、ｆａｎｄ命令を生成する具体例の説明図である。浮動小数点の論理積であるｆａｎｄ命令は、入力値によらず例外割り込みを発生させない。このため、コンピュータ１０は、ｆａｎｄ命令の第１入力レジスタと第２入力レジスタの双方をレジスタセット全体から選択することができる。また、コンピュータ１０は、出力レジスタについては入出力兼用レジスタから選択する。
【００８９】
図１１に示した例では、ランダムデータＤ０（図１１「乱数」）のうち、第１入力レジスタに対応する範囲の乱数は「１００１１」である。この値とＡＮＤデータＤ１の値「１１１１１」との論理積をとると「１００１１」となる。論理積の結果として得られた値とＯＲデータＤ２の値「０００００」との論理和をとると「１００１１」となる。この値は浮動小数点レジスタセット７１のレジスタ番号ｆｒ１９に対応する。
【００９０】
同様に、図１１に示した例では、ランダムデータＤ０のうち、第２入力レジスタに対応する範囲の乱数は「１１０１１」である。この値とＡＮＤデータＤ１の値「１１１１１」との論理積をとると「１１０１１」となる。論理積の結果として得られた値とＯＲデータＤ２の値「０００００」との論理和をとると「１１０１１」となる。この値は浮動小数点レジスタセット７１のレジスタ番号ｆｒ２７に対応する。
【００９１】
また、図１１に示した例では、ランダムデータＤ０のうち、出力レジスタに対応する範囲の乱数は「００１１１」である。この値とＡＮＤデータＤ１の値「１０１１１」との論理積をとると「００１１１」となる。論理積の結果として得られた値とＯＲデータＤ２の値「０１０００」との論理和をとると「０１１１１」となる。この値は浮動小数点レジスタセット７１のレジスタ番号ｆｒ１５に対応する。
【００９２】
したがって図１１に示した例では、命令として「ｆａｎｄ，ｆｒ１９，ｆｒ２７，ｆｒ１５」が生成される。既に述べたように、入力専用レジスタのレジスタ番号はｆｒ００〜０７とｆｒ１６〜２３、入出力兼用レジスタのレジスタ番号はｆｒ０８〜１５とｆｒ２４〜３１である。命令「ｆａｎｄ，ｆｒ１９，ｆｒ２７，ｆｒ１５」のうち入力レジスタｆｒ１９は入力専用レジスタである。また、入力レジスタｆｒ２７は入出力兼用レジスタである。同様に出力レジスタｆｒ１４は入出力兼用レジスタである。
【００９３】
このように一つのランダムデータに対して、ＡＮＤデータとの論理積と、論理積結果とＯＲデータとの論理和を用いて試験用命令を生成する場合に、ＡＮＤデータとＯＲデータのレジスタ指定部の値を適宜設定することで、命令の入力レジスタと出力レジスタの指定先を簡易に設定することができる。
【００９４】
コンピュータ１０が高負荷試験を行なう場合には、コンピュータ１０は、このように入力レジスタと出力レジスタの指定先を設定して生成した命令をパイプラインに順次投入することで、高負荷状態を実現して試験を行なう。
【００９５】
一方、コンピュータ１０がコンフリクト試験を行なう場合には、コンピュータ１０は、このように入力レジスタと出力レジスタの指定先を設定し、さらに命令間にコンフリクトが発生するよう設定した試験用命令列を用いて試験を行なう。
【００９６】
図１２は、コンフリクトの説明図である。図１２に示した命令ｏｐ２１は、オペコードが浮動小数点の加算を示すｆａｄｄ、第１入力レジスタがｆｒ１０、第２入力レジスタがｆｒ１２、出力レジスタがｆｒ１４である。また、命令ｏｐ２１の後続の命令ｏｐ２２は、オペコードが浮動小数点の減算を示すｆｓｕｂｄ、第１入力レジスタがｆｒ１４、第２入力レジスタがｆｒ１６、出力レジスタがｆｒ１８である。
【００９７】
ここで、命令ｏｐ２１の出力レジスタであるｆｒ１４は、後続の命令ｏｐ２２の入力レジスタとして使用されている。このように、ある命令の出力レジスタに割り振られたレジスタが後続の命令の入力レジスタに使用されることをコンフリクトといい、この状態をコンフリクト状態、対象となったレジスタをコンフリクトレジスタという。
【００９８】
通常、コンピュータは、コンフリクト状態に無い命令列はＣＰＵのパイプラインに連続的に投入する。しかし、命令列にコンフリクト状態が存在すると、コンピュータはコンフリクトの原因となった命令が終了するまで、コンフリクト状態である後続の命令の処理を保留する。コンピュータは、コンフリクト状態の命令を保留している間も、コンフリクト状態に無い後続の命令はパイプラインに流し続ける。このため、コンピュータは命令間の順序関係を保証するため複雑な制御を行なう。このコンフリクトの制御の状態を試験する場合、コンピュータは、様々なコンフリクト状態が組み込まれた試験用命令列を実行する。
【００９９】
図１３は、試験用命令列におけるコンフリクトの設定についての説明図である。図１３に示した命令ｏｐ３１と命令ｏｐ３２は、それぞれオペコード、第１入力レジスタ、第２入力レジスタ、出力レジスタを有する。コンピュータ１０は、試験用命令列を構成する命令ｏｐ３１と命令ｏｐ３２の入力レジスタおよび出力レジスタにランダムな値を設定する。
【０１００】
コンフリクトレジスタテーブル６４は、コンフリクトレジスタを登録するレジスタテーブルである。コンフリクトカウンタ６３は、コンフリクトレジスタテーブル６４へのレジスタ番号の登録数を管理するカウンタである。
【０１０１】
コンピュータ１０は、先行する命令である命令ｏｐ３１の出力レジスタのレジスタ番号をコンフリクトレジスタテーブル６４に登録する。コンピュータ１０はまた、後続の命令ｏｐ３２の入力レジスタのレジスタ番号を、コンフリクトレジスタテーブル６４から読み出した、先行する命令の出力レジスタのレジスタ番号に書き換える。
【０１０２】
入力レジスタとして他の命令の出力レジスタを使用することができるか否かは、命令ごと、また複数の入力を用いる命令であれば入力ごとに予め設定され、コンピュータ１０が設定データを保持している。
【０１０３】
コンピュータ１０は、コンフリクトレジスタテーブル６４に登録したレジスタ番号を他の命令の入力レジスタとして使用した場合に、使用したレジスタ番号をコンフリクトレジスタテーブル６４から削除する。
【０１０４】
また、コンピュータ１０は、コンフリクトレジスタテーブル６４に対してレジスタ番号の登録や削除を行なった場合に、コンフリクトカウンタ６３の値を書き換える。コンフリクトカウンタ６３の値が最大値となった場合、すなわちコンフリクトレジスタテーブル６４に登録したレジスタ番号の数が上限に達した場合には、コンピュータ１０はコンフリクトレジスタテーブル６４から最も古い値を削除する。
【０１０５】
このようにコンピュータ１０が命令の出力レジスタをコンフリクトレジスタテーブル６４に登録し、後続の命令の入力レジスタとしてコンフリクトレジスタテーブル６４に登録した出力レジスタを用いることで、試験用命令列にコンフリクト状態を組み込むことができる。なお、出力レジスタのレジスタ番号をコンフリクトレジスタテーブル６４に登録した命令と、登録されたレジスタ番号を入力レジスタとして使用する命令との間には他の命令が存在してもよい。
【０１０６】
次に、命令生成部４１による試験用命令列生成の具体例について説明する。図１４は、ランダムデータ生成部５２が生成したランダムデータの具体例である。ランダムデータ生成部５２は、シード値を初期値として擬似ランダム列を生成する。そして、ランダムデータ生成部５２は、生成した擬似ランダム列を試験用命令のビット数ごとに切り出して試験用命令列に含まれる命令数以上のランダムデータを生成する。図１４の例では、最初のランダムデータＤ０−１の値は「０ｘ３ｅａ８ｅ２ｄｂ」である。このうち０ｘは１６進数表記であることを示し、３ｅａ８ｅ２ｄｂがデータ本体である。また、２つ目のランダムデータＤ０−２は「０ｘｃ７４２８ａ５８」である。
【０１０７】
図１５は、記憶部４３に格納された命令定義構造体テーブル６２の具体例である。命令定義構造体テーブル６２は、命令の種別ごとに定めた命令定義構造体を保持する。各命令定義構造体は、命令の種別、ＡＮＤデータ、ＯＲデータ、コンフリクトフラグを有する。
【０１０８】
ＡＮＤデータとＯＲデータは、それぞれ４バイトのデータである。試験用命令列生成部５３は、４バイトのランダムデータとＡＮＤデータとの論理積をとり、さらに論理積結果とＯＲデータとの論理和をとることで、命令の種別に定められた命令を生成する。なお、図１５では、ＡＮＤデータとＯＲデータを１６進数で表記している。
【０１０９】
また、コンフリクトフラグは１バイトのデータであり、命令の入力レジスタと出力レジスタがコンフリクトの設定に使用可能であるか否かを示す。命令定義構造体テーブル６２では、コンフリクトフラグのうち４ビットを有効なビットとして使用する。なお、図１５では、コンフリクトフラグを２進数で表記している。
【０１１０】
命令定義構造体テーブル６２は、出力レジスタがコンフリクトレジスタとして使用できるか否かを、コンフリクトフラグの図示範囲の上位１ビット目で示している。コンフリクトフラグの上位１ビット目は、命令の出力レジスタがいずれかのレジスタを指している場合、すなわち命令の出力をいずれかのレジスタに書き込む場合に１、命令の出力をレジスタに書き込まない場合に０となる。
【０１１１】
また、命令定義構造体テーブル６２は、コンフリクトフラグの上位２ビット目から４ビット目で３つの入力レジスタがコンフリクトレジスタとして使用できるか否かをそれぞれ示している。これらのビットはそれぞれ、３つの入力のいずれか一つに対応しており、対応する入力レジスタを命令が使用し、かつコンフリクトレジスタとして使用できる場合に１となり、対応する入力レジスタを命令が使用しない場合やコンフリクトレジスタとして使用できない場合に０となる。コンフリクトレジスタとして使用できない入力レジスタは、例えばそのレジスタの値によっては例外処理が発生する可能性のある入力レジスタである。
【０１１２】
図１５では、命令定義構造体テーブル６２は、浮動小数点の論理和を示すｆｏｒ命令のＡＮＤデータとして「０ｘ１ｅ０７ｃ０１ｆ」、ＯＲデータとして「０ｘａ１ｂ００ｆ８０」、コンフリクトフラグとして「１０１１」を定義している。また、命令定義構造体テーブル６２は、ｆａｄｄ命令のＡＮＤデータとして「０ｘ１ｅ０３ｃ００ｆ」、ＯＲデータとして「０ｘａ１ａ００８４０」、コンフリクトフラグとして「１０００」を定義している。
【０１１３】
同様に、命令定義構造体テーブル６２は、ｆｓｕｂｄ命令のＡＮＤデータとして「０ｘ１ｅ０３ｃ００ｆ」、ＯＲデータとして「０ｘａ１ａ００８ｃ０」、コンフリクトフラグとして「１０００」を定義している。
【０１１４】
また、命令定義構造体テーブル６２は、浮動小数点の積算を示すｆｍｕｌｄ命令のＡＮＤデータとして「０ｘ１ｅ０３ｃ００ｆ」、ＯＲデータとして「０ｘａ１ａ００９４０」、コンフリクトフラグとして「１０００」を定義している。
【０１１５】
図１６は、試験用命令列生成部５３が生成した試験用命令列データ６６の具体例である。図１６に示した試験用命令列データ６６は、試験用命令列生成部５３が命令定義構造体テーブル６２を用いてランダムデータから生成した命令列の一例である。
【０１１６】
試験用命令列データ６６のうち、１番目の命令から５番目の命令を例示する。１番目の命令は「ｆｓｕｂｄ  ｆｒ１７，ｆｒ２１，ｆｒ３１」である。このｆｓｕｂｄ命令の第１入力レジスタであるｆｒ１７と第２入力レジスタであるｆｒ２１は入力専用レジスタである。そして、このｆｓｕｂｄ命令の出力レジスタであるｆｒ３１は入出力兼用レジスタである。
【０１１７】
２番目の命令は「ｆｍｕｌｄ  ｆｒ２３，ｆｒ０５，ｆｒ２４」である。このｆｍｕｌｄ命令の第１入力レジスタであるｆｒ２３と第２入力レジスタであるｆｒ０５は入力専用レジスタである。そして、このｆｍｕｌｄ命令の出力レジスタであるｆｒ２４は入出力兼用レジスタである。
【０１１８】
３番目の命令は「ｆｏｒ  ｆｒ０９，ｆｒ１９，ｆｒ０９」である。このｆｏｒ命令の第１入力レジスタであるｆｒ０９は入出力兼用レジスタであり、第２入力レジスタであるｆｒ１９は入力専用レジスタである。そして、このｆｏｒ命令の出力レジスタであるｆｒ０９は入出力兼用レジスタである。
【０１１９】
４番目の命令は「ｆｏｒ  ｆｒ０５，ｆｒ０４，ｆｒ２５」である。このｆｏｒ命令の第１入力レジスタであるｆｒ０５と第２入力レジスタであるｆｒ０４は入力専用レジスタである。そして、このｆｏｒ命令の出力レジスタであるｆｒ２５は入出力兼用レジスタである。
【０１２０】
５番目の命令は「ｆｓｕｂｄ  ｆｒ２１，ｆｒ００，ｆｒ３０」である。このｆｓｕｂｄ命令の第１入力レジスタであるｆｒ２１と第２入力レジスタであるｆｒ００は入力専用レジスタである。そして、このｆｓｕｂｄ命令の出力レジスタであるｆｒ３０は入出力兼用レジスタである。
【０１２１】
このように、コンピュータ１０は、各命令の出力レジスタに入出力兼用レジスタを指定し、特定の種別の命令の入力レジスタに入力専用レジスタを指定した試験用命令列データ６６を生成する。
【０１２２】
高負荷状態の試験などに用いる場合は、コンピュータ１０は、この試験用命令列データ６６を記憶部４３に格納して使用すればよい。試験用命令列にコンフリクトを設定する場合は、コンピュータ１０は試験用命令列の入力レジスタを置き換えて試験用命令列データ６６を更新し、記憶部４３に格納する。
【０１２３】
図１７は、コンフリクト設定の具体例である。初期状態ではコンフリクトレジスタテーブル６４にはレジスタ番号が登録されておらず、コンフリクトカウンタ６３の値は０である。コンピュータ１０の試験用命令列生成部５３は、まず１番目の命令について命令定義構造体テーブル６２のコンフリクトフラグを参照し、１番目の命令のレジスタ番号に対応する出力レジスタをコンフリクトに使用可能かを判定する。１番目の命令は、「ｆｓｕｂｄ  ｆｒ１７，ｆｒ２１，ｆｒ３１」であり、出力レジスタをコンフリクトに使用可能である。このため、試験用命令列生成部５３は、１番目の命令の出力レジスタのレジスタ番号ｆｒ３１をコンフリクトレジスタテーブル６４に登録し、コンフリクトカウンタ６３の値を１にする。
【０１２４】
２番目の命令は「ｆｍｕｌｄ  ｆｒ２３，ｆｒ０５，ｆｒ２４」である。命令定義構造体テーブル６２のコンフリクトフラグは、ｆｍｕｌｄ命令については出力レジスタのみコンフリクトに使用可能であることを示している。このため、試験用命令列生成部５３は、２番目の命令の出力レジスタｆｒ２４をコンフリクトレジスタテーブル６４に登録し、コンフリクトカウンタ６３の値を２にする。
【０１２５】
３番目の命令は「ｆｏｒ  ｆｒ０９，ｆｒ１９，ｆｒ０９」である。命令定義構造体テーブル６２のコンフリクトフラグは、ｆｏｒ命令については出力レジスタと入力レジスタとがともにコンフリクトに使用可能であることを示している。このため、試験用命令列生成部５３は、コンフリクトレジスタテーブル６４からレジスタ番号ｆｒ３１とｆｒ２４を読み出し、３番目の命令の２つの入力レジスタ番号と置き換える。この時、試験用命令列生成部５３は、ｆｏｒ命令に使用したｆｒ３１とｆｒ２４をコンフリクトレジスタテーブル６４から削除し、コンフリクトカウンタ６３の値を２減算して０とする。さらに、試験用命令列生成部５３は、３番目の命令の出力レジスタｆｒ０９をコンフリクトレジスタテーブル６４に登録し、コンフリクトカウンタ６３の値を１にする。
【０１２６】
４番目の命令は「ｆｏｒ  ｆｒ０５，ｆｒ０４，ｆｒ２５」である。命令定義構造体テーブル６２のコンフリクトフラグは、ｆｏｒ命令については出力レジスタと入力レジスタとがともにコンフリクトに使用可能であることを示している。このため、試験用命令列生成部５３は、コンフリクトレジスタテーブル６４からレジスタ番号ｆｒ０９を読み出し、４番目の命令の２つの入力レジスタ番号の一方をレジスタ番号ｆｒ０９に置き換える。試験用命令列生成部５３は、使用したレジスタ番号ｆｒ０９をコンフリクトレジスタテーブル６４から削除し、コンフリクトカウンタ６３の値を１減算して０とする。さらに、試験用命令列生成部５３は、４番目の命令の出力レジスタ番号ｆｒ２５をコンフリクトレジスタテーブル６４に登録し、コンフリクトカウンタ６３の値を１にする。
【０１２７】
５番目の命令は「ｆｓｕｂｄ  ｆｒ２１，ｆｒ００，ｆｒ３０」である。命令定義構造体テーブル６２のコンフリクトフラグは、ｆｓｕｂｄ命令については出力レジスタのみコンフリクトに使用可能であることを示している。このため、試験用命令列生成部５３は、５番目の命令の出力レジスタのレジスタ番号ｆｒ３０をコンフリクトレジスタテーブル６４に登録し、コンフリクトカウンタ６３の値を２にする。
【０１２８】
このように置き換えた結果、１番目の命令は「ｆｓｕｂｄ  ｆｒ１７，ｆｒ２１，ｆｒ３１」、２番目の命令は「ｆｍｕｌｄ  ｆｒ２３，ｆｒ０５，ｆｒ２４」となる。また、３番目の命令は「ｆｏｒ  ｆｒ３１，ｆｒ２４，ｆｒ０９」、４番目の命令は「ｆｏｒ  ｆｒ０９，ｆｒ０４，ｆｒ２５」、５番目の命令は「ｆｓｕｂｄ  ｆｒ２１，ｆｒ００，ｆｒ３０」となる。１番目、２番目、５番目の命令は置き換え前と変更がないが、３番目の命令と４番目の命令はコンフリクトが発生するように変更されている。
【０１２９】
次に、コンピュータ１０の処理動作について説明する。図１８は、試験プログラム３１を実行した場合のコンピュータ１０の処理動作を説明するフローチャートである。試験プログラム３１を実行したコンピュータ１０は、まず試験の種別を選択する（Ｓ２０１）。試験の種別とは、どのような条件下の動作試験を行なうかを示す。例えば固定小数点演算の試験や、浮動小数点演算の試験、固定小数点演算と浮動小数点演算の混在した試験、演算処理とアクセス処理とが混在した試験、演算処理と分岐処理が混在した試験などである。試験の種別の選択は、例えばユーザ入力などによって行なえばよい。
【０１３０】
試験種別を選択した後、コンピュータ１０は、試験パラメータを設定する（Ｓ２０２）。試験パラメータは、試験用命令列の命令数や、コンフリクトを設定するか否かなどを含む。また、コンピュータ１０は、シード値を試験パラメータとして指定することもできる。コンピュータ１０は、試験パラメータとしてシード値を指定した場合にはシード値からレジスタ初期値データを生成しても良い。
【０１３１】
試験パラメータを設定した後、コンピュータ１０は実行する試験種のうちの一つを選び（Ｓ２０３）、命令生成部４１による命令生成処理（Ｓ２０４）を行なう。そして、コンピュータ１０は生成した命令列を用いて試験実行部４２による試験実行処理を行なう（Ｓ２０５）。
【０１３２】
試験実行処理の後、コンピュータ１０は選択した全ての試験種を実施したかを判定する（Ｓ２０６）。まだ実施していない試験種が残っていれば（Ｓ２０６，Ｎｏ）、コンピュータ１０は、ふたたびＳ２０３に戻る。選択した全ての試験種について試験を実施したならば（Ｓ２０６，Ｙｅｓ）、コンピュータ１０は処理を終了する。
【０１３３】
図１９は、図１８に示した命令生成処理の詳細について説明するフローチャートである。命令生成部４１は、まず、シード値設定部５１によるシード値の設定を行なう（Ｓ３０１）。ここでシード値が試験パラメータとして指定されていれば、シード値設定部５１は指定されたシード値を用いる。また、シード値が指定されていなければ、シード値設定部５１はシード値を新たに生成して設定する。
【０１３４】
シード値を設定した後、命令生成部４１は、シード値設定部５１によって設定されたシード値を用いてランダムデータ生成部５２によるランダムデータ列の生成を行なう（Ｓ３０２）。ランダムデータ生成部５２は、シード値を初期値として擬似ランダム列を生成し、擬似ランダム列から命令長と同じ長さのランダムデータを順次切り出してランダムデータ列とする。
【０１３５】
ランダムデータ列が生成されると、命令生成部４１は、ランダムデータを一つ選択し（Ｓ３０３）、ランダムデータに命令定義構造体を適用して試験用命令を生成する（Ｓ３０４）。生成した試験用命令の数が試験パラメータによって指定された数に満たなければ（Ｓ３０５，Ｎｏ）、命令生成部４１はランダムデータの選択（Ｓ３０３）に戻る。
【０１３６】
生成した試験用命令の数が試験パラメータによって指定された数を満たすと（Ｓ３０５，Ｙｅｓ）、命令生成部４１は試験パラメータによってコンフリクトが指定されているか否かを判定する（Ｓ３０６）。この結果、コンフリクトが指定されていなければ（Ｓ３０６，Ｎｏ）、命令生成部４１は生成した試験用命令を試験用命令列データとして出力し（Ｓ３０８）、処理を終了する。一方、コンフリクトが指定されていれば（Ｓ３０６，Ｙｅｓ）、命令生成部４１は生成した試験用命令に対してコンフリクト設定を行なって（Ｓ３０７）、試験用命令列データとして出力し（Ｓ３０８）、処理を終了する。
【０１３７】
図２０は、図１９に示したコンフリクト設定処理の詳細について説明するフローチャートである。コンフリクト設定処理が開始されると、試験用命令列生成部５３はまず、生成した試験用命令列の最初の命令を選択する（Ｓ４０１）。
【０１３８】
試験用命令列生成部５３は、命令を選択した後、命令の第１入力レジスタを選択し（Ｓ４０２）、レジスタ番号置き換え処理を行なう（Ｓ４０３）。この後、試験用命令列生成部５３は、命令の第２入力レジスタを選択し（Ｓ４０４）、レジスタ番号置き換え処理を行なう（Ｓ４０５）。そして試験用命令列生成部５３は、命令の第３入力レジスタを選択し（Ｓ４０６）、レジスタ番号置き換え処理を行なう（Ｓ４０７）。
【０１３９】
入力レジスタ番号の置き換え後、試験用命令列生成部５３は命令の出力レジスタをコンフリクト対象とすることができるかを判定する（Ｓ４０８）。判定の結果、出力レジスタをコンフリクトの対象とすることができる場合（Ｓ４０８，Ｙｅｓ）、試験用命令列生成部５３はコンフリクトカウンタの値が最大値であるかを判定する（Ｓ４０９）。
【０１４０】
コンフリクトカウンタ６３の値が最大値である場合（Ｓ４０９，Ｙｅｓ）、試験用命令列生成部５３はコンフリクトレジスタテーブル６４から最も古い値を削除し（Ｓ４１０）、コンフリクトカウンタ６３の値を１減らす（Ｓ４１１）。
【０１４１】
コンフリクトカウンタ６３の値を減らした後、もしくはコンフリクトカウンタの値が最大値では無い場合（Ｓ４０９，Ｎｏ）、試験用命令列生成部５３は命令の出力レジスタのレジスタ番号をコンフリクトレジスタテーブル６４に登録し（Ｓ４１２）、コンフリクトカウンタの値を１増やす（Ｓ４１３）。
【０１４２】
コンフリクトカウンタの値を増やした後、もしくは命令の出力レジスタをコンフリクト対象にできない場合（Ｓ４０８，Ｎｏ）、試験用命令列生成部５３は試験用命令列の全ての命令に対して処理が終了したかを判定する（Ｓ４１４）。この結果、処理を行なっていない命令が残っているならば（Ｓ４１４，Ｎｏ）、試験用命令列生成部５３は、次の命令を選択して（Ｓ４１５）、第１入力レジスタの選択に戻る（Ｓ４０２）。そして、全ての命令に対して処理が終了した場合に（Ｓ４１４，Ｙｅｓ）、試験用命令列生成部５３はコンフリクト設定処理を終了する。
【０１４３】
図２１は、図２０に示したレジスタ番号置き換え処理の詳細について説明するフローチャートである。レジスタ番号の置き換え処理が開始されると、試験用命令列生成部５３はまず、コンフリクトカウンタ６３の値が１以上であるか否かを判定する（Ｓ５０１）。
【０１４４】
コンフリクトカウンタ６３の値が１以上であれば（Ｓ５０１，Ｙｅｓ）、試験用命令列生成部５３は命令定義構造体テーブル６２のコンフリクトフラグを参照し、対象の入力レジスタをコンフリクト対象とすることができるか否かを判定する（Ｓ５０２）。
【０１４５】
判定の結果、対象の入力レジスタをコンフリクト対象にできる場合（Ｓ５０２，Ｙｅｓ）、試験用命令列生成部５３は、対象の入力レジスタをコンフリクトレジスタテーブル６４に登録された最も古いレジスタ番号に置き換える（Ｓ５０３）。
【０１４６】
対象の入力レジスタを置き換えた後、試験用命令列生成部５３は、置き換えに用いたレジスタ番号をコンフリクトレジスタテーブル６４から削除し（Ｓ５０４）、コンフリクトカウンタ６３の値を１減らす（Ｓ５０５）。
【０１４７】
コンフリクトカウンタ６３の値を１減らした後、試験用命令列生成部５３は、レジスタ番号置き換え処理を終了する。また、コンフリクトカウンタ６３の値が０である場合（Ｓ５０１，Ｎｏ）および対象の入力レジスタをコンフリクトの対象にできない場合（Ｓ５０２，Ｎｏ）にも、試験用命令列生成部５３はレジスタ番号置き換え処理を終了する。
【０１４８】
図２２は、図１８に示した試験実行処理の詳細について説明するフローチャートである。試験実行処理が開始されると、試験実行部４２内部の初期値設定部５４がレジスタに初期値をセットする（Ｓ６０１）。記憶部４３にレジスタ初期値データ６５が格納されていれば、初期値設定部５４はレジスタ初期値データ６５を読み出して使用する。一方、記憶部４３にレジスタ初期値データ６５が格納されていなければ、初期値設定部５４は、シード値データ６１に基づいてレジスタ初期値データ６５を生成して使用し、記憶部４３に格納する。既に述べたようにレジスタ初期値データ６５は浮動小数点レジスタのうち入力専用レジスタにセットする値として１に近い値を持ち、汎用レジスタのうち入力専用レジスタにセットする値として０以外の値を持つ。
【０１４９】
レジスタに初期値をセットした後、命令列実行部５５は、記憶部４３から試験用命令列データ６６を読み出して実行する（Ｓ６０２）。試験用命令列の実行後、実行結果退避部５６は実行結果を記憶部４３に実行結果データ６７として格納する（Ｓ６０３）。
【０１５０】
実行結果データ６７を記憶部４３に格納した後、初期値設定部５４がレジスタに再度初期値をセットする（Ｓ６０４）。レジスタに初期値をセットした後、命令列実行部５５は、記憶部４３から試験用命令列データ６６を読み出して実行する（Ｓ６０５）。
【０１５１】
二度目の命令列の実行を終えた後、結果比較部５７は、実行結果データ６７として記憶部４３に格納された一度目の実行結果と二度目の実行結果とを比較して評価し（Ｓ６０６）、比較結果を出力して（Ｓ６０７）、処理を終了する。
【０１５２】
上述してきたように、本実施例２では、コンピュータに試験プログラムを実行させることでコンピュータ試験装置として動作させ、コンピュータ試験方法を実行する。そして、実施例２にかかる方法、装置、プログラムは、命令のオペランドに指定される複数のレジスタの一部を入力専用レジスタとする。加えて、実施例２にかかる方法、装置、プログラムは、特定の種別の命令については入力専用レジスタをオペランドとして指定しつつ試験用命令列を生成する。そして、実施例２にかかる方法、装置、プログラムは、入力専用レジスタに対して特定種別の命令によって例外割り込みを発生しない初期値を設定する。
【０１５３】
このため、実施例２にかかる方法、装置およびプログラムは、例外割り込みと例外処理の発生を効率的かつ未然に抑制する。したがって、実施例２にかかる方法、装置およびプログラムは、レジスタの値を書き換えつつ、かつ例外割り込みと例外処理を発生することなく試験を行なうことができる。
【０１５４】
また、実施例２にかかる方法、装置およびプログラムは、試験用命令列を生成する際に、命令が固定小数点除算である場合には除数として用いるオペランドとして入力専用レジスタを指定し、入力専用レジスタに初期値として０以外の値を設定する。このため、実施例２にかかる方法、装置およびプログラムは、固定小数点除算における例外割り込みの発生を回避することができる。
【０１５５】
また、実施例２にかかる方法、装置およびプログラムは、試験用命令列を生成する際に、命令が浮動小数点演算である場合にオペランドの少なくとも一つに入力専用レジスタを指定する。そして、実施例２にかかる方法、装置およびプログラムは、入力専用レジスタに設定する初期値として、浮動小数点演算に用いる他の入力値がどのような値であっても浮動小数点演算における例外割り込みの発生を防止する値を用いる。このため、実施例２にかかる方法、装置およびプログラムは、浮動小数点演算における例外割り込みの発生を回避することができる。
【０１５６】
また、実施例２にかかる方法、装置およびプログラムは、試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する。このため、実施例２にかかる方法、装置およびプログラムは、試験対象装置に複数回試験用命令列を実行させ、実行結果の比較によって評価を行なうことができる。この場合は、試験対象装置が試験用命令列の比較対象を試験中に生成することとなるので、シード値を変更させながら繰り返し試験を行なうことで長時間の動作試験を容易に実施可能である。
【０１５７】
また、実施例２にかかる方法、装置およびプログラムは、試験用命令列を生成する際には、ランダムデータと第１のデータであるＡＮＤデータとの論理積に対し、第２のデータであるＯＲデータとの論理和を取って試験用命令列に含まれる命令を生成する。第１のデータと第２のデータは、命令の種別ごとに定められる。そして、第１のデータは、命令の実行結果の出力先として使用するレジスタに対応する範囲のビット値に０を含む。このため、実施例２にかかる方法、装置およびプログラムは、簡易な処理で命令の出力にかかるレジスタ番号を制御することができる。
【０１５８】
同様に、実施例２にかかる方法、装置およびプログラムは、第１のデータと第２のデータについて、命令の入力として使用するレジスタに対応する範囲のビット値を適宜設定することで、簡易な処理で命令の入力にかかるレジスタ番号を制御することができる。
【０１５９】
また、実施例２にかかる方法、装置およびプログラムは、試験用命令列を生成する際に、命令の実行結果の出力先として指定したレジスタを後続の命令の入力に使用することで実行時にコンフリクトを発生する試験用命令列を生成することができる。このため、実施例２にかかる方法、装置およびプログラムは、コンフリクト試験中の例外割り込みの発生を回避することができる。
【０１６０】
また、実施例２にかかる方法、装置およびプログラムは、先行する命令の実行結果の出力先として指定されたレジスタを入力に使用可能であるかを命令の種別ごとに指定するデータを用いてコンフリクト試験に用いる試験用命令列を生成する。このため、実施例２にかかる方法、装置およびプログラムは、入力専用レジスタなどをコンフリクトレジスタから除外してコンフリクト試験用の試験用命令列を生成することができる。
【０１６１】
また、実施例２にかかる方法、装置およびプログラムは、出力レジスタを登録し、登録後に後続の命令の入力レジスタとして指定した場合に削除するレジスタテーブルを用いてコンフリクト試験用の試験用命令列を生成する。このため、実施例２にかかる方法、装置およびプログラムは、コンフリクト試験用の試験用命令列を簡易に生成することができる。
【実施例３】
【０１６２】
実施例３は、実施例２に示した試験プログラムの変形例である。コンピュータの試験は、論理設計段階や実機製造段階などで行なわれる。コンピュータが製造されて実機がある状態では、既に述べたように試験用命令列を複数回実行して結果を比較することが有効である。
【０１６３】
一方、論理設計の段階では、コンピュータはシミュレータ上で仮想的に構築される。したがって、コンピュータの処理能力はシミュレータの能力によって制限を受ける。このため論理設計段階の試験では、予め他の装置で試験用命令列を実行して期待値を生成することが望ましい。このように期待値を予め生成することで、シミュレータ上で仮想的に構築されたコンピュータは、試験用命令列を一度実行すれば期待値との比較で評価が可能となる。
【０１６４】
図２３は、実施例３にかかる試験プログラムを実行するコンピュータの説明図である。図２３に示したコンピュータ８０では、ＣＰＵ１１が試験プログラムを実行することで命令生成部４１と試験実行部８１の機能を実現する。また、試験プログラムを実行したＣＰＵ１１は、メインメモリ１２を記憶部４３として使用する。命令生成部４１の構成および動作は実施例２と同様であるので同一の構成要素に同一の符号を付して説明を省略する。
【０１６５】
記憶部４３は、シード値データ６１、命令定義構造体テーブル６２、コンフリクトカウンタ６３、コンフリクトレジスタテーブル６４、期待値データ８５を予め保持する。期待値データ８５は、予めシード値データ６１から試験用命令列を生成し、実行した結果である。期待値データ８５を求めた際と同じ命令列を生成するため、命令生成部４１は同じシード値データ６１を使用して試験用命令列データ６６を生成する。
【０１６６】
試験実行部８１は、初期値設定部８２、命令列実行部８３、結果比較部８４を有する。図２４は、試験実行部８１の処理について説明するフローチャートである。試験実行処理が開始されると、初期値設定部８２がレジスタに初期値をセットする（Ｓ７０１）。ここで、初期値設定部８２がセットする初期値は、期待値データ８５の生成時と同じ値を用いることが求められる。このため、期待値データ８５の生成時に用いたレジスタ初期値データ６５を記憶部４３に予め格納しておき、初期値設定部８２は、レジスタ初期値データ６５を読み出して使用する。また、初期値設定部８２が試験実行時にシード値データ６１からレジスタ初期値データ６５を求めるようにしてもよい。初期値設定部８２が試験実行時にレジスタ初期値データ６５を求める場合、初期値設定部８２は期待値生成時と同一のシード値データ６１を用いることで、期待値生成時と同一の初期値を得ることができる。
【０１６７】
レジスタに初期値をセットした後、命令列実行部８３は、記憶部４３から試験用命令列データ６６を読み出して実行する（Ｓ７０２）。命令列の実行を終えた後、結果比較部８４は、記憶部４３に格納された期待値データ８５と実行結果とを比較して評価し（Ｓ７０３）、比較結果を出力して（Ｓ７０４）、処理を終了する。
【０１６８】
上述してきたように、本実施例３にかかる試験プログラムによって得られるコンピュータ試験方法は、予め試験用命令列を実行して期待値を求めておくことで、試験対象のコンピュータ装置による試験用命令列の実行が一度であっても実行結果を評価可能である。このように予め期待値を求めることで試験対象装置の負荷を減らすことができる。このため、予め試験用命令列を実行して期待値を求める方法は、特にシミュレータでの試験に有効であるが、実機に対する試験に適用しても良い。また、試験用命令列を複数回実行して実行結果を互いに比較するとともに、各実行結果と期待値データとをさらに比較してもよい。
【０１６９】
なお、実施例１〜３に開示の方法、装置、プログラムはあくまで一例であり、構成および動作を適宜変更して実施することができる。例えば、実施例１〜３に開示の方法、装置、プログラムは、レジスタセットの半分を入力専用レジスタとしていたが、レジスタセットにおける入力専用レジスタの比率や数は適宜変更して実施することができる。同様に実施例２では浮動小数点用レジスタセットと汎用レジスタセットとを用いる場合を例示したが、開示の技術は任意のレジスタセットを使用して試験を行なう場合に適用可能である。
【０１７０】
また、実施例１〜３では、コンピュータがオペランドとして２個または３個の入力レジスタと１つの出力レジスタとを有する命令を使用する場合を例に説明を行ったが、どのようなオペランドの命令であっても開示の技術は適用可能である。また、実施例１〜３に開示したフローチャートは、その処理の追加、削除、順序の入れ替え等適宜変更することができる。
【０１７１】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１７２】
（付記１）コンピュータが、
特定種別の命令実行によって例外割込みを発生しない値が設定された入力専用レジスタを命令の実行に用いる入力値を保持するレジスタとして指定し、入力専用レジスタ以外のレジスタを実行結果の出力先として指定する試験用の命令を複数有する試験用命令列を生成するステップと、
前記コンピュータが、
前記生成した試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理するステップと
を含んだことを特徴とするコンピュータ試験方法。
【０１７３】
（付記２）前記試験用命令列を生成するステップは、前記特定種別の命令が固定小数点除算である場合には除数として用いる入力値を保持するレジスタとして前記入力専用レジスタを指定し、前記入力専用レジスタに前記初期値として０以外の値を設定することを特徴とする付記１に記載のコンピュータ試験方法。
【０１７４】
（付記３）前記試験用命令列を生成するステップは、前記特定種別の命令が浮動小数点演算である場合に前記浮動小数点演算の入力値を保持するレジスタの少なくとも一つに前記入力専用レジスタを指定し、前記入力専用レジスタに設定する初期値として、前記浮動小数点演算に用いる他の入力値がどのような値であっても前記浮動小数点演算における例外割り込みの発生を防止する値を用いることを特徴とする付記１または２に記載のコンピュータ試験方法。
【０１７５】
（付記４）前記試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理するステップは、前記試験用命令列を複数回実行して実行結果を比較することを特徴とする付記１〜３のいずれか一つに記載のコンピュータ試験方法。
【０１７６】
（付記５）前記試験用命令列を生成するステップは、前記命令の種別ごとに定められ、命令の実行結果の出力先として使用するレジスタに対応する範囲のビット値に０を含む第１のデータとランダムデータとの論理積に対し、前記命令の種別ごとに定められた第２のデータとの論理和を取って前記試験用命令列に含まれる命令を生成することを特徴とする付記１〜４のいずれか一つに記載のコンピュータ試験方法。
【０１７７】
（付記６）前記試験用命令列を生成するステップは、命令の実行結果の出力先として指定されたレジスタを後続の命令が入力値を保持するレジスタとして指定する試験用命令列を生成することを特徴とする付記１〜５のいずれか一つに記載のコンピュータ試験方法。
【０１７８】
（付記７）前記試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理するステップは、予め求められた期待値データと前記試験用命令列の実行結果とを比較することを特徴とする付記１〜６のいずれか一つに記載のコンピュータ試験方法。
【０１７９】
（付記８）特定種別の命令実行によって例外割込みを発生しない値が設定された入力専用レジスタを命令の実行に用いる入力値を保持するレジスタとして指定し、入力専用レジスタ以外のレジスタを実行結果の出力先として指定する試験用の命令を複数有する試験用命令列を生成する試験用命令列生成部と、
前記生成した試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する評価処理部と
を備えたことを特徴とするコンピュータ試験装置。
【０１８０】
（付記９）前記命令の種別ごとに定めた第１のデータと第２のデータとを命令定義構造体として保持する命令定義構造体テーブルをさらに備え、前記試験用命令列生成部は、ランダムデータと前記第１のデータとの論理積に対し、前記第２のデータとの論理和を取って前記試験用命令列に含まれる命令を生成し、前記第１のデータは命令の実行結果の出力先として使用するレジスタに対応する範囲のビット値に０を含むことを特徴とする付記８に記載のコンピュータ試験装置。
【０１８１】
（付記１０）前記命令定義構造体テーブルは、先行する命令の実行結果の出力先として指定されたレジスタを入力に使用可能であるかを前記命令の種別ごとに指定するデータをさらに保持することを特徴とする付記９に記載のコンピュータ試験装置。
【０１８２】
（付記１１）前記命令の実行結果の出力先として指定したレジスタを登録され、当該登録されたレジスタを後続の前記命令が入力値を保持するレジスタとして指定した場合に削除するレジスタテーブルをさらに備えたことを特徴とする付記８〜１０のいずれか一つに記載のコンピュータ試験装置。
【０１８３】
（付記１２）前記命令の種別が固定小数点演算である場合に用いるレジスタのうち前記入力専用レジスタに設定する前記初期値として０以外の数を定め、前記命令の種別が浮動小数点演算である場合に用いるレジスタのうち前記入力専用レジスタに設定する前記初期値として、前記浮動小数点演算に用いる他の入力値がどのような値であっても前記浮動小数点演算における例外割り込みの発生を防止する値を定めるレジスタ初期値データを格納するレジスタ初期値データ格納部をさらに備えたことを特徴とする付記８〜１１のいずれか一つに記載のコンピュータ試験装置。
【０１８４】
（付記１３）前記評価処理部は、予め求められた期待値データと前記試験用命令列の実行結果とを比較することを特徴とする付記８〜１２のいずれか一つに記載のコンピュータ試験装置。
【０１８５】
（付記１４）特定種別の命令実行によって例外割込みを発生しない値が設定された入力専用レジスタを命令の実行に用いる入力値を保持するレジスタとして指定し、入力専用レジスタ以外のレジスタを実行結果の出力先として指定する試験用の命令を複数有する試験用命令列を生成する手順と、
前記生成した試験用命令列に含まれる複数の命令を順次実行して、実行結果を評価処理する手順と
をコンピュータに実行させることを特徴とするコンピュータ試験プログラム。
【符号の説明】
【０１８６】
１，２２  演算部
２  レジスタセット
１０，８０  コンピュータ
１１  ＣＰＵ
１２  メインメモリ
１３  ＲＯＭ
１５  バス
２１  命令制御部
２３  レジスタ群
３１  試験プログラム
４１  命令生成部
４２，８１  試験実行部
４３  記憶部
５１  シード値設定部
５２  ランダムデータ生成部
５３  試験用命令列生成部
５４，８２  初期値設定部
５５，８３  命令列実行部
５６  実行結果退避部
５７，８４  結果比較部
６１  シード値データ
６２  命令定義構造体テーブル
６３  コンフリクトカウンタ
６４  コンフリクトレジスタテーブル
６５  レジスタ初期値データ
６６  試験用命令列データ
６７  実行結果データ
７１  浮動小数点レジスタセット
７２  汎用レジスタセット
８５  期待値データ
ｏｐ０１〜０３，ｏｐ１１〜１５  試験用命令
ｏｐ２１〜２２，ｏｐ３１〜３２  命令
ｏｐｘ−１〜２，ｏｐｘ−ｅｎｄ  例外処理用命令
ｏｐｃ  オペコード
ｒｓ１，ｒｓ２  入力レジスタ
ｒｄ    出力レジスタ
Ｄ０，Ｄ０−１，Ｄ０−２  ランダムデータ
Ｄ１  ＡＮＤデータ
Ｄ２  ＯＲデータ
Ｄ３  試験用命令
【図１】
2011253253.tif 000003
【図２】
2011253253.tif 000004
【図３】
2011253253.tif 000005
【図４】
2011253253.tif 000006
【図５】
2011253253.tif 000007
【図６】
2011253253.tif 000008
【図７】
2011253253.tif 000009
【図８】
2011253253.tif 000010
【図９】
2011253253.tif 000011
【図１０】
2011253253.tif 000012
【図１１】
2011253253.tif 000013
【図１２】
2011253253.tif 000014
【図１３】
2011253253.tif 000015
【図１４】
2011253253.tif 000016
【図１５】
2011253253.tif 000017
【図１６】
2011253253.tif 000018
【図１７】
2011253253.tif 000019
【図１８】
2011253253.tif 000020
【図１９】
2011253253.tif 000021
【図２０】
2011253253.tif 000022
【図２１】
2011253253.tif 000023
【図２２】
2011253253.tif 000024
【図２３】
2011253253.tif 000025
【図２４】
2011253253.tif 000026