(57)【特許請求の範囲】
【請求項１】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、シフト命令でシフト可能なシフト量の一部である１または複数の所定のシフト量のみのシフト処理を実行するシフタと、前記シフタの出力に少なくとも１つの入力が接続され、少なくとも算術演算または論理演算の内の一つを実行する演算手段とを含む複合演算手段とを有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令がシフト量が自身に含まれる即値で指定され、前記シフタが実行可能ないずれかのシフト量のシフト処理を実行するシフト命令である第１の条件と、前記第２の命令が前記演算手段で実行可能な演算を実行する命令であり、且つ前記第１の命令のシフト結果を前記第２の命令が参照する第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令のシフト処理と前記第２の命令の演算処理との２つの複合演算を前記複合演算手段に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項２】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、少なくとも算術演算または論理演算の内の一つを実行する演算手段と、前記演算手段の出力に入力が接続され、シフト命令でシフト可能なシフト量の一部である１または複数の所定のシフト量のみのシフト処理を実行するシフタとを含む複合演算手段とを有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が前記演算手段で実行可能な演算を実行する命令である第１の条件と、前記第２の命令がシフト量が自身に含まれる即値で指定され、前記シフタで実行可能ないずれかのシフト量のシフト処理を実行するシフト命令であり、且つ前記第１の命令の演算結果を前記第２の命令が参照する第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令の演算処理と前記第２の命令のシフト処理との２つの複合演算を前記複合演算手段に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項３】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、少なくとも算術演算，論理演算またはシフト処理の内の一つを実行する演算手段と、前記演算手段の演算結果を複数のレジスタへ転送するデータ転送手段とを有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が前記演算手段で実行可能な演算を実行してその結果を自身に含まれる第１の値に対応するレジスタへ転送する命令である第１の条件と、前記第２の命令が前記第１の命令の演算結果を自身に含まれる第２の値に対応するレジスタへ転送する命令である第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令の演算処理を前記演算手段に、前記第１の命令のデータ転送処理及び前記第２の命令のデータ転送処理を前記データ転送手段にそれぞれ実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項４】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、少なくとも算術演算，論理演算またはシフト処理の内の一つをそれぞれ実行する第１及び第２の演算手段と、前記第１の演算手段の演算結果及び前記第２の演算手段の演算結果をそれぞれ異なるレジスタへ並列に転送するデータ転送手段とを有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が前記第１及び第２の演算手段で実行可能な演算を実行してその結果を自身に含まれる第１の値に対応するレジスタへ転送する命令である第１の条件と、前記第２の命令が前記第１の命令の演算結果を自身に含まれる第２の値に対応するレジスタへ転送する命令である第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令の演算処理を前記第１の演算手段及び第２の演算手段に並列に実行させ、前記第１の命令のデータ転送処理及び前記第２の命令のデータ転送処理を前記データ転送手段に並列にそれぞれ実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項５】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
命令の実行に必要なデータを前記記憶手段から取り込むデータアクセス手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と、
前記記憶手段内に設定されているスタック領域のスタックトップのアドレスを指示するスタックポインタと
を備えたデータ処理装置において、
前記命令実行手段は、前記データアクセス手段から２データを並列にレジスタへ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令及び前記第２の命令が共に前記スタックポインタが指示する前記スタック領域のデータを自身に含まれる値に対応するレジスタへそれぞれポップする命令である条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記条件が成立すると判定した場合に、前記命令実行手段が前記データアクセス手段から前記第１の命令に含まれる値に対応するレジスタへの前記第１の命令のデータ転送処理と、前記データアクセス手段から前記第２の命令に含まれる値に対応するレジスタへの前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項６】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と、
データを前記記憶手段に格納するデータアクセス手段と、
前記記憶手段内に設定されているスタック領域のスタックトップのアドレスを指示するスタックポインタと
を備えたデータ処理装置において、
前記命令実行手段は、２個のレジスタから並列に読み出したデータを並列に、前記データアクセス手段へ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令及び前記第２の命令が共に自身に含まれる値に対応するレジスタのデータを前記スタックポインタが指示する前記スタック領域へそれぞれプッシュする命令である条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記条件が成立すると判定した場合に、前記命令実行手段が前記第１の命令に含まれる値に対応するレジスタから前記データアクセス手段への前記第１の命令のデータ転送処理と、前記第２の命令に含まれる値に対応するレジスタから前記データアクセス手段への前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項７】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
命令の実行に必要なデータを前記記憶手段から取り込むデータアクセス手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、前記データアクセス手段から２データを並列にレジスタへ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が自身に含まれる第１の値に対応するレジスタの内容で指定される前記記憶手段のアドレスのデータを自身に含まれる第２の値に対応するレジスタへ転送する命令であり、且つ前記第２の命令が自身に含まれる前記第１の値に対応するレジスタの内容に自身に含まれる第３の値を加算した値で指定される前記記憶手段のアドレスのデータを自身に含まれる第４の値に対応するレジスタへ転送する命令である第１の条件と、前記第１の命令により指定されるデータのデータ長が前記第２の命令に含まれる前記第３の値と等しい第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令のデータ転送処理と前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項８】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
命令の実行に必要なデータを前記記憶手段から取り込むデータアクセス手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、前記データアクセス手段から２データを並列にレジスタへ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が自身に含まれる第１の値に対応するレジスタの内容に第２の値を加算した値で指定される前記記憶手段のアドレスのデータを自身に含まれる第３の値に対応するレジスタへ転送する命令であり、且つ前記第２の命令が自身に含まれる前記第１の値に対応するレジスタの内容に自身に含まれる第４の値を加算した値で指定される前記記憶手段のアドレスのデータを自身に含まれる第５の値に対応するレジスタへ転送する命令である第１の条件と、前記第１の命令により指定されるデータのデータ長が前記第２の命令に含まれる前記第４の値と前記第１の命令に含まれる前記第２の値との差に等しい第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令のデータ転送処理と前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項９】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と、
データを前記記憶手段に格納するデータアクセス手段と
を備えたデータ処理装置において、
前記命令実行手段は、２個のレジスタから並列に読み出したデータを並列に、前記データアクセス手段へ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が自身に含まれる第１の値に対応するレジスタの内容で指定される前記記憶手段のアドレスへ自身に含まれる第２の値に対応するレジスタのデータを転送する命令であり、且つ前記第２の命令が自身に含まれる前記第１の値に対応するレジスタの内容に自身に含まれる第３の値を加算した値で指定される前記記憶手段のアドレスへ自身に含まれる第４の値に対応するレジスタのデータを転送する命令である第１の条件と、前記第１の命令により指定されるデータのデータ長が前記第２の命令に含まれる前記第３の値に等しい第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記条件が成立すると判定した場合に、前記命令実行手段が前記第２の値に対応するレジスタから前記データアクセス手段への前記第１の命令のデータ転送処理と、前記第４の値に対応するレジスタから前記データアクセス手段への前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１０】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と、
データを前記記憶手段に格納するデータアクセス手段と
を備えたデータ処理装置において、
前記命令実行手段は、２個のレジスタから並列に読み出したデータを並列に、前記データアクセス手段へ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が自身に含まれる第１の値に対応するレジスタの内容に自身に含まれる第２の値を加算した値で指定される前記記憶手段のアドレスへ自身に含まれる第３の値に対応するレジスタのデータを転送する命令であり、且つ前記第２の命令が自身に含まれる前記第１の値に対応するレジスタの内容に自身に含まれる第４の値を加算した値で指定される前記記憶手段のアドレスへ自身に含まれる第５の値に対応するレジスタのデータを転送する命令である第１の条件と、前記第１の命令により指定されるデータのデータ長が前記第２の命令に含まれる前記第４の値と前記第１の命令に含まれる前記第２の値との差に等しい第２の条件とが成立するか否かを判定する判定手段を備え、
前記判定手段が前記条件が成立すると判定した場合に、前記命令実行手段が前記第３の値に対応するレジスタから前記データアクセス手段への前記第１の命令のデータ転送処理と、前記第５の値に対応するレジスタから前記データアクセス手段への前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１１】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、少なくとも加算または減算の内の一つを含む第１の演算と、少なくとも命令コードで指定される即値の加算または減算の内の一つを含む第２の演算との複合演算を実行する複合演算手段を有し、
前記複合演算手段は、上位ｍビットが２入力で、下位ｎビットが３入力の（ｍ＋ｎ）ビット加算器（ｍ、ｎは１以上の自然数）  を備え、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令または前記第２の命令の内の一方が前記複合演算手段で実行可能な前記第１の演算を実行する第１の条件と、前記第１の命令または前記第２の命令の内の他方が前記複合演算手段で実行可能な第２の演算として実行可能な、自身に含まれるｎビット以下またはｎビットより小さい即値の加算または減算を行なう命令であり、且つ前記第１の命令の演算結果を前記第２の命令が参照する第２の条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令の処理と前記第２の命令の処理との２つの複合演算を前記複合演算手段に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１２】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、第１の演算としての加算と、第２の演算としてのインクリメント演算との複合演算を実行する複合演算手段を有し、
前記複合演算手段は、２つのデータ入力と１ビットキャリー入力とを有する２入力加算器を備え、前記第２の演算であるインクリメント演算は前記キャリー入力を制御することにより実現されるように構成されており、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令または前記第２の命令の内の一方が前記複合演算手段で実行可能な前記第１の演算を実行する第１の条件と、前記第１の命令または前記第２の命令の内の他方が前記複合演算手段で実行可能な前記第２の演算を実行する命令であり、且つ前記第１の命令の演算結果を前記第２の命令が参照する第２の条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令の処理と前記第２の命令の処理との２つの複合演算を前記複合演算手段に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１３】
命令を格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、第１の演算としての減算と、第２の演算としてのデクリメント演算との複合演算を実行する複合演算手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
前記複合演算手段は、２つのデータ入力と１ビットキャリー入力とを有する２入力加算器を備え、前記第２の演算であるデクリメント演算は前記キャリー入力を制御することにより実現されるように構成されており、
更に、前記第１の命令または前記第２の命令の内の一方が前記複合演算手段で実行可能な前記第１の演算を実行する第１の条件と、前記第１の命令または前記第２の命令の内の他方が前記複合演算手段で実行可能な前記第２の演算を実行する命令であり、且つ前記第１の命令の演算結果を前記第２の命令が参照する第２の条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記第１及び第２の条件が共に成立すると判定した場合に、前記命令実行手段が前記第１の命令の処理と前記第２の命令の処理との２つの複合演算を前記複合演算手段に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１４】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
命令の実行に必要なデータを前記記憶手段から取り込むデータアクセス手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と
を備えたデータ処理装置において、
前記命令実行手段は、前記データアクセス手段から２データを並列に前記命令実行手段へ転送するデータ転送手段とを有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が前記メモリからデータを読み出す命令であり、前記第２の命令が前記メモリの前記第１の命令により読み出されるデータに連続する領域のデータを読み出す命令である条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記条件が成立すると判定した場合に、前記命令実行手段が前記データアクセス手段から前記命令実行手段への前記第１の命令のデータ転送処理と、前記データアクセス手段から前記命令実行手段への前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１５】
前記第１及び第２の命令が共にロード命令であることを特徴とする請求項１４に記載のデータ処理装置。
【請求項１６】
命令及びデータを格納する記憶手段と、
前記記憶手段から命令を取り込む命令フェッチ手段と、
前記命令フェッチ手段が取り込んだ命令を解析する命令解析手段と、
前記命令解析手段での解析結果に基づいて命令を実行する命令実行手段と、
データを前記記憶手段に格納するデータアクセス手段と
を備えたデータ処理装置において、
前記命令実行手段は、２データを並列に前記データアクセス手段へ転送するデータ転送手段を有し、
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、
更に、前記第１の命令が前記メモリへデータを書き込む命令であり、前記第２の命令が前記メモリの前記第１の命令により書き込まれるデータに連続する領域にデータを書き込む命令である条件が成立するか否かを判定する判定手段を備え、
前記判定手段が前記条件が成立すると判定した場合に、前記命令実行手段が前記データアクセス手段への前記第１の命令のデータ転送処理と、前記データアクセス手段への前記第２の命令のデータ転送処理とを前記データ転送手段に並列に実行させることにより、前記第１及び第２の命令を並列に実行すべくなしてあることを特徴とするデータ処理装置。
【請求項１７】
前記第１及び第２の命令が共にストア命令であることを特徴とする請求項１６に記載のデータ処理装置。
【請求項１８】
前記命令解析手段は、第１の命令と前記第１の命令に引き続く命令以降の第２の命令とを並列に解析すべくなしてあることを特徴とする請求項１乃至１４及び１６に記載のデータ処理装置。
【請求項１９】
前記データアクセス手段は、前記記憶手段から以前に取り込んだデータを記憶するデータキャッシュを含むことを特徴とする請求項５，７，８及び１４に記載のデータ処理装置。
【請求項２０】
前記データアクセス手段は、前記記憶手段から以前に取り込んだデータを一時的に保持するバッファ手段を含むことを特徴とする請求項５，７，８及び１４に記載のデータ処理装置。
【請求項２１】
前記データアクセス手段は、前記記憶手段に書込むべきデータを一時的に保持するバッファ手段を含むことを特徴とする請求項６，９，１０及び１６に記載のデータ処理装置。
【請求項２２】
前記命令実行手段は、シフト命令の全シフト量のシフト処理を実行可能な第２のシフタを備え、
前記第１及び第２の命令を並列に実行する際に、前記第１の命令のシフト処理を前記第２のシフタでも実行すべくなしてあることを特徴とする請求項１に記載のデータ処理装置。
【請求項２３】
前記命令実行手段は、前記第１及び第２の命令を並列に実行する際に、並列に転送される２データのサイズの総和に対応した値だけ、前記スタックポインタの更新を行なうべくなしてあることを特徴とする請求項５または６に記載のデータ処理装置。
【請求項２４】
前記第１の命令は前記第２の演算としてデクリメントを行なう命令を含み、前記第２の命令は前記第１の演算として比較のための減算を行なう比較命令を含むことを特徴とする請求項１３に記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は高度な並列処理機構により高い処理能力を実現したデータ処理装置に関し、特に、複数の命令を並列実行可能なデータ処理装置に関する。
【０００２】
【従来の技術】
近年のデータ処理装置は、動作周波数の向上による高速化共に、パイプライン処理あるいはスーパースケーラ等の並列処理技術の開発により飛躍的な性能向上を続けている。スーパースケーラとは、複数の命令を並列にデコードし、並列に実行する技術である。例えば、特開平３−０９１０２９号公報に開示されている発明では、オペランド干渉のない２命令を並列にデコードして実行するデータ処理装置が開示されている。このようなスーパースケーラ技術を用いたデータ処理装置においては、今後はオペランド干渉のある命令あるいはオペランドがメモリオペランドである命令等のような命令に関して、複数命令の並列実行が可能な組み合せをいかにして増加させるかが性能向上の鍵となる。
【０００３】
オペランド干渉のある２命令を並列に処理するデータ処理装置としては、  ＡＬＵを２段に直列接続することによりオペランド干渉のある２命令を並列に実行するものが知られている。従来のデータ処理装置では、オペランドに依存関係のある２つの命令は同時に実行しない場合が多い。また、オペランド干渉のある２命令を実行するために単純に演算器を直列に接続したデータ処理装置もあるが、それだけでは高速な実行は困難であり、動作周波数向上の妨げになるという問題もある。
【０００４】
メモリオペランドを有する、即ちオペランドがメモリオペランドである２命令を並列に実行するためには、２つのメモリアクセスを並列に行なう必要がある。２つの独立したメモリオペランドをアクセスするためには、主記憶またはキャッシュメモリを２ポートにするか、あるいは内部キャッシュのタグメモリのみをマルチポート化してメモリをインタリーブ構成にする必要がある。そのような構成を採った従来のデータ処理装置では、２つのメモリオペランドを有する２命令を並列に実行するためには、追加すべきハードウェア量が大きくなり、制御もまた複雑になるという問題があった。
【０００５】
【発明が解決しようとする課題】
このように、スーパースケーラ方式を用いてデータ処理装置の性能向上を図るためには、並列実行可能な命令の組み合せを増加することが重要である。しかし、上述したようにオペランドの干渉がある２命令を高速に並列実行することは困難であった。また、２つのメモリアクセスを行なう命令を並列に実行するためには、ハードウェア量が大幅に増大するという問題点があった。
【０００６】
本発明はこのような事情に鑑みてなされたものであり、スーパースケーラ方式を用いてデータ処理装置の性能向上を図るために、オペランドの干渉がある２命令を高速に並列実行可能とし、またハードウェア量の大幅な増加なしに２つのメモリアクセスを行なう命令を並列に実行可能として、並列実行可能な命令の組み合せを増加させたデータ処理装置の提供を目的とする。
【０００７】
【課題を解決するための手段】
本発明のデータ処理装置の第１の発明は、第１の命令としてはシフト命令を、第２の命令としては算術演算，論理演算または比較命令を対象としている。そして、命令実行手段は、シフト命令でシフト可能なシフト量の一部である１または複数の所定のシフト量のみのシフト処理を実行するシフタと、シフタの出力に少なくとも１つの入力が接続され、少なくとも算術演算または論理演算の内の一つを実行する演算手段とを含む複合演算手段とを有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令がシフト量が自身に含まれる即値で指定され、シフタが実行可能ないずれかのシフト量のシフト処理を実行するシフト命令である第１の条件と、第２の命令が演算手段で実行可能な演算を実行する命令であり、且つ第１の命令のシフト結果を第２の命令が参照する第２の条件とが成立するか否かを判定する判定手段が備えられている。
【０００８】
本発明のデータ処理装置の第２の発明は、第１の命令としては算術演算，論理演算命令を、第２の命令としてはシフト命令を対象としている。そして、命令実行手段は、少なくとも算術演算または論理演算の内の一つを実行する演算手段と、演算手段の出力に入力が接続され、シフト命令でシフト可能なシフト量の一部である１または複数の所定のシフト量のみのシフト処理を実行するシフタとを含む複合演算手段とを有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が演算手段で実行可能な演算を実行する命令である第１の条件と、第２の命令がシフト量が自身に含まれる即値で指定され、シフタで実行可能ないずれかのシフト量のシフト処理を実行するシフト命令であり、且つ第１の命令の演算結果を第２の命令が参照する第２の条件とが成立するか否かを判定する判定手段が備えられている。
【０００９】
本発明のデータ処理装置の第３の発明は、第１の命令としては演算命令を、第２の命令としてはレジスタ間転送命令を対象としている。そして、命令実行手段は、少なくとも算術演算，論理演算またはシフト処理の内の一つを実行する演算手段と、演算手段の演算結果を複数のレジスタへ転送するデータ転送手段とを有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が演算手段で実行可能な演算を実行してその結果を自身に含まれる第１の値に対応するレジスタへ転送する命令である第１の条件と、第２の命令が第１の命令の演算結果を自身に含まれる第２の値に対応するレジスタへ転送する命令である第２の条件とが成立するか否かを判定する判定手段が備えられている。
【００１０】
本発明のデータ処理装置の第４の発明は、第１，第２の命令共に演算命令を対象としている。そして、命令実行手段は、少なくとも算術演算，論理演算またはシフト処理の内の一つをそれぞれ実行する第１及び第２の演算手段と、第１の演算手段の演算結果及び第２の演算手段の演算結果をそれぞれ異なるレジスタへ並列に転送するデータ転送手段とを有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が第１及び第２の演算手段で実行可能な演算を実行してその結果を自身に含まれる第１の値に対応するレジスタへ転送する命令である第１の条件と、第２の命令が第１の命令の演算結果を自身に含まれる第２の値に対応するレジスタへ転送する命令である第２の条件とが成立するか否かを判定する判定手段が備えられている。
【００１１】
本発明のデータ処理装置の第５の発明は、第１，第２の命令共にポップ命令を対象としている。そして、命令実行手段は、データアクセス手段から２データを並列にレジスタへ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令及び第２の命令が共にスタックポインタが指示するスタック領域のデータを自身に含まれる値に対応するレジスタへそれぞれポップする命令である条件が成立するか否かを判定する判定手段が備えられている。
【００１２】
本発明のデータ処理装置の第６の発明は、第１，第２の命令共にプッシュ命令を対象としている。そして、命令実行手段は、２個のレジスタから並列に読み出したデータを並列に、データアクセス手段へ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令及び第２の命令が共に自身に含まれる値に対応するレジスタのデータをスタックポインタが指示するスタック領域へそれぞれプッシュする命令である条件が成立するか否かを判定する判定手段が備えられている。
【００１３】
本発明のデータ処理装置の第７の発明は、第１の命令としてはレジスタ間接モードのロード命令を、第２の命令としてはレジスタ相対間接モードのロード命令を対象としている。そして、命令実行手段は、データアクセス手段から２データを並列にレジスタへ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が自身に含まれる第１の値に対応するレジスタの内容で指定される記憶手段のアドレスのデータを自身に含まれる第２の値に対応するレジスタへ転送する命令であり、且つ第２の命令が自身に含まれる第１の値に対応するレジスタの内容に自身に含まれる第３の値を加算した値で指定される記憶手段のアドレスのデータを自身に含まれる第４の値に対応するレジスタへ転送する命令である第１の条件と、第１の命令により指定されるデータのデータ長が第２の命令に含まれる第３の値と等しい第２の条件とが成立するか否かを判定する判定手段が備えられている。
【００１４】
本発明のデータ処理装置の第８の発明は、第１，第２の命令共にレジスタ相対間接モードのロード命令を対象としている。そして、命令実行手段は、データアクセス手段から２データを並列にレジスタへ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が自身に含まれる第１の値に対応するレジスタの内容に第２の値を加算した値で指定される記憶手段のアドレスのデータを自身に含まれる第３の値に対応するレジスタへ転送する命令であり、且つ第２の命令が自身に含まれる第１の値に対応するレジスタの内容に自身に含まれる第４の値を加算した値で指定される記憶手段のアドレスのデータを自身に含まれる第５の値に対応するレジスタへ転送する命令である第１の条件と、第１の命令により指定されるデータのデータ長が第２の命令に含まれる第４の値と第１の命令に含まれる第２の値との差に等しい第２の条件とが成立するか否かを判定する判定手段が備えられている。
【００１５】
本発明のデータ処理装置の第９の発明は、第１の命令がレジスタ間接モードのストア命令を、第２の命令がレジスタ相対間接モードのストア命令を対象としている。そして、命令実行手段は、２個のレジスタから並列に読み出したデータを並列に、データアクセス手段へ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が自身に含まれる第１の値に対応するレジスタの内容で指定される記憶手段のアドレスへ自身に含まれる第２の値に対応するレジスタのデータを転送する命令であり、且つ第２の命令が自身に含まれる第１の値に対応するレジスタの内容に自身に含まれる第３の値を加算した値で指定される記憶手段のアドレスへ自身に含まれる第４の値に対応するレジスタのデータを転送する命令である第１の条件と、第１の命令により指定されるデータのデータ長が第２の命令に含まれる第３の値に等しい第２の条件とが成立するか否かを判定する判定手段が備えられている。
【００１６】
本発明のデータ処理装置の第１０の発明は、第１，第２の命令共にレジスタ相対間接モードのストア命令を対象としている。そして、命令実行手段は、２個のレジスタから並列に読み出したデータを並列に、データアクセス手段へ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令が自身に含まれる第１の値に対応するレジスタの内容に自身に含まれる第２の値を加算した値で指定される記憶手段のアドレスへ自身に含まれる第３の値に対応するレジスタのデータを転送する命令であり、且つ第２の命令が自身に含まれる第１の値に対応するレジスタの内容に自身に含まれる第４の値を加算した値で指定される記憶手段のアドレスへ自身に含まれる第５の値に対応するレジスタのデータを転送する命令である第１の条件と、第１の命令により指定されるデータのデータ長が第２の命令に含まれる第４の値と第１の命令に含まれる第２の値との差に等しい第２の条件とが成立するか否かを判定する判定手段が備えられている。
【００１９】
本発明のデータ処理装置の第１１の発明は、第１の命令としては加算命令または減算命令の内の少なくとも一つの命令を、第２の命令としては少なくとも命令コードで指定される即値の加算命令または減算命令を対象としている。そして、命令実行手段は、少なくとも加算または減算の内の一つを含む第１の演算と、少なくとも命令コードで指定される即値の加算または減算の内の一つを含む第２の演算との複合演算を実行する複合演算手段を有し、複合演算手段は、上位ｍビットが２入力で、下位ｎビットが３入力の（ｍ＋ｎ）ビット加算器（ｍ、ｎは１以上の自然数）  を備え、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令または第２の命令の内の一方が複合演算手段で実行可能な第１の演算を実行する第１の条件と、第１の命令または第２の命令の内の他方が複合演算手段で実行可能な第２の演算として実行可能な、自身に含まれるｎビット以下またはｎビットより小さい即値の加算または減算を行なう命令であり、第２の演算を実行する命令であり、且つ第１の命令の演算結果を第２の命令が参照する第２の条件が成立するか否かを判定する判定手段を備えている。
【００２０】
本発明のデータ処理装置の第１２の発明は、第１の命令としては加算命令を、第２の命令としてはインクリメント命令を対象としている。そして、命令実行手段は、第１の演算としての加算と、第２の演算としてのインクリメント演算との複合演算を実行する複合演算手段を有し、複合演算手段は、２つのデータ入力と１ビットキャリー入力とを有する２入力加算器を備え、第２の演算であるインクリメント演算はキャリー入力を制御することにより実現されるように構成されており、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令または第２の命令の内の一方が複合演算手段で実行可能な第１の演算を実行する第１の条件と、第１の命令または第２の命令の内の他方が複合演算手段で実行可能な第２の演算を実行する命令であり、且つ第１の命令の演算結果を第２の命令が参照する第２の条件が成立するか否かを判定する判定手段が備えられている。
【００２１】
本発明のデータ処理装置の第１３の発明は、第１の命令としては減算命令を、第２の命令としてはデクリメント命令を対象としている。そして、命令実行手段は、第１の演算としての減算と、第２の演算としてのデクリメント演算との複合演算を実行する複合演算手段を有し、複合演算手段は、２つのデータ入力と１ビットキャリー入力とを有する２入力加算器を備え、第２の演算であるデクリメント演算は、キャリー入力を制御することにより実現されるように構成されており、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令または第２の命令の内の一方が複合演算手段で実行可能な第１の演算を実行する第１の条件と、第１の命令または第２の命令の内の他方が複合演算手段で実行可能な第２の演算を実行する命令であり、且つ第１の命令の演算結果を第２の命令が参照する第２の条件が成立するか否かを判定する判定手段が備えられている。
【００２２】
本発明のデータ処理装置の第１４の発明は、第１，  第２の命令共にメモリからデータを読み出す命令を対象としている。そして、命令実行手段は、データアクセス手段から２データを並列に命令実行手段へ転送するデータ転送手段とを有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令がメモリからデータを読み出す命令であり、第２の命令がメモリの第１の命令により読み出されるデータに連続する領域のデータを読み出す命令である条件が成立するか否かを判定する判定手段が備えられている。
【００２３】
本発明のデータ処理装置の第１５の発明は、第１４の発明において第１，  第２の命令が共にロード命令を対象としている。
【００２４】
本発明のデータ処理装置の第１６の発明は、第１，  第２の命令共にメモリにデータを書き込む命令を対象としている。そして、命令実行手段は、２データを並列にデータアクセス手段へ転送するデータ転送手段を有し、命令解析手段は、第１の命令と第１の命令に引き続く命令以降の第２の命令とを含む複数の命令からなる命令群の各命令を解析する手段を有し、更に、第１の命令がメモリへデータを書き込む命令であり、第２の命令がメモリの第１の命令により書き込まれるデータに連続する領域にデータを書き込む命令である条件が成立するか否かを判定する判定手段が備えられている。
【００２５】
本発明のデータ処理装置の第１７の発明は、第１６の発明において第１，  第２の命令が共にストア命令を対象としている。
【００２６】
更に、本発明のデータ処理装置の第１８の発明は、第１乃至第１４及び第１６の発明において、命令解析手段が、第１の命令と第１の命令に引き続く命令以降の第２の命令とを並列に解析するように構成されている。
【００２７】
また本発明のデータ処理装置の第１９の発明は、第５，第７，第８及び第１４の発明において、データアクセス手段は、記憶手段から以前に取り込んだデータを記憶するデータキャッシュを含む。
【００２８】
また本発明のデータ処理装置の第２０の発明は、第５，第７，第８及び第１４の発明において、データアクセス手段は、記憶手段から以前に取り込んだデータを記憶するバッファ手段を含む。
【００２９】
また本発明のデータ処理装置の第２１の発明は、第６，第９，第１０及び第１６の発明において、データアクセス手段は、記憶手段に書込むべきデータを一時的に保持するバッファ手段を含む。
また本発明のデータ処理装置の第２２の発明は、第１の発明において、命令実行手段は、シフト命令の全シフト量のシフト処理を実行可能な第２のシフタを備え、第１及び第２の命令を並列に実行する際に、第１の命令のシフト処理を第２のシフタでも実行すべくなしてある。
また本発明のデータ処理装置の第２３の発明は、第５または第６の発明において、命令実行手段は、第１及び第２の命令を並列に実行する際に、並列に転送される２データのサイズの総和に対応した値だけ、スタックポインタの更新を行なうべくなしてある。
また本発明のデータ処理装置の第２４の発明は、第１３の発明において、第１の命令は第２の演算としてデクリメントを行なう命令を含み、第２の命令は第１の演算として比較のための減算を行なう比較命令を含む。
【００３０】
【作用】
本発明のデータ処理装置の第１の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令のシフト処理と第２の命令の演算処理との２つの複合演算を複合演算手段に実行させることにより、第１及び第２の命令が並列に実行される。
【００３１】
本発明のデータ処理装置の第２の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令の演算処理と第２の命令のシフト処理との２つの複合演算を複合演算手段に実行させることにより、第１及び第２の命令が並列に実行される。
【００３２】
本発明のデータ処理装置の第３の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令の演算処理を第１の演算手段及び第２の演算手段に並列に実行させ、第１の命令のデータ転送処理及び第２の命令のデータ転送処理をデータ転送手段に並列にそれぞれ実行させることにより、第１及び第２の命令が並列に実行される。
【００３３】
本発明のデータ処理装置の第４の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段がデータアクセス手段から第１の命令に含まれる値に対応するレジスタへの第１の命令のデータ転送処理と、データアクセス手段から第２の命令に含まれる値に対応するレジスタへの第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００３４】
本発明のデータ処理装置の第５の発明では、判定手段が条件が成立すると判定した場合に、命令実行手段がデータアクセス手段から第１の命令に含まれる値に対応するレジスタへの第１の命令のデータ転送処理と、データアクセス手段から第２の命令に含まれる値に対応するレジスタへの第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００３５】
本発明のデータ処理装置の第６の発明では、判定手段が条件が成立すると判定した場合に、命令実行手段が第１の命令に含まれる値に対応するレジスタからデータアクセス手段への第１の命令のデータ転送処理と、第２の命令に含まれる値に対応するレジスタからデータアクセス手段への第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００３６】
本発明のデータ処理装置の第７の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令のデータ転送処理と第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００３７】
本発明のデータ処理装置の第８の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令のデータ転送処理と第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００３８】
本発明のデータ処理装置の第９の発明では、判定手段が条件が成立すると判定した場合に、命令実行手段が第２の値に対応するレジスタからデータアクセス手段への第１の命令のデータ転送処理と、第４の値に対応するレジスタからデータアクセス手段への第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００３９】
本発明のデータ処理装置の第１０の発明では、判定手段が条件が成立すると判定した場合に、命令実行手段が第３の値に対応するレジスタからデータアクセス手段への第１の命令のデータ転送処理と、第５の値に対応するレジスタからデータアクセス手段への第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００４２】
本発明のデータ処理装置の第１１の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令の処理と第２の命令の処理との２つの複合演算を複合演算手段に実行させることにより、第１及び第２の命令が並列に実行される。
【００４３】
本発明のデータ処理装置の第１２の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令の処理と第２の命令の処理との２つの複合演算を複合演算手段に実行させることにより、第１及び第２の命令が並列に実行される。
【００４４】
本発明のデータ処理装置の第１３の発明では、判定手段が第１及び第２の条件が共に成立すると判定した場合に、命令実行手段が第１の命令の処理と第２の命令の処理との２つの複合演算を複合演算手段に実行させることにより、第１及び第２の命令が並列に実行される。
【００４５】
本発明のデータ処理装置の第１４の発明及び第１５の発明では、判定手段が条件が成立すると判定した場合に、命令実行手段がデータアクセス手段から命令実行手段への第１の命令のデータ転送処理と、データアクセス手段から命令実行手段への第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００４６】
本発明のデータ処理装置の第１６の発明及び第１７の発明では、判定手段が条件が成立すると判定した場合に、命令実行手段がデータアクセス手段への第１の命令のデータ転送処理と、データアクセス手段への第２の命令のデータ転送処理とをデータ転送手段に並列に実行させることにより、第１及び第２の命令が並列に実行される。
【００４７】
本発明の第１８の発明では、第１乃至第１４及び第１６の発明において、第１の命令と第１の命令に引き続く命令以降の第２の命令とが並列に解析される。
本発明の第１９の発明では、第５，７，８及び１４の発明において、データアクセス手段は、記憶手段から以前に取り込んだデータをデータキャッシュに記憶する。
本発明の第２０の発明では、第５，７，８及び１４の発明において、データアクセス手段は、記憶手段から以前に取り込んだデータをバッファ手段に一時的に保持する。
本発明の第２１の発明では、第６，９，１０及び１６の発明において、データアクセス手段は、記憶手段に書込むべきデータをバッファ手段に一時的に保持する。
本発明の第２２の発明では、第１の発明において、命令実行手段は、シフト命令の全シフト量のシフト処理を実行可能な第２のシフタを備えており、第１及び第２の命令を並列に実行する際に、第１の命令のシフト処理を第２のシフタでも実行する。
本発明の第２３の発明では、第５または６の発明において、命令実行手段は、第１及び第２の命令を並列に実行する際に、並列に転送される２データのサイズの総和に対応した値だけ、スタックポインタの更新を行なう。
本発明の第２４の発明では、第１３の発明において、第１の命令は第２の演算としてデクリメントを行なう命令を実行することが可能であり、第２の命令は第１の演算として比較のための減算を行なう比較命令を実行することが可能である。
【００４８】
【実施例】
以下、本発明をその実施例を示す図面に基づいて詳述する。
【００４９】
〔実施例１〕
（１）  「本発明のデータ処理装置を用いたシステムの構成」
図１のブロック図に本発明のデータ処理装置１を使用したシステム構成例を示す。本発明のデータ処理装置１  は３２ビットのアドレスバス２と３２ビットのデータバス３とを有し、これらのバス２，３により主記憶（ＤＲＡＭ）５，ＲＯＭ  ６，周辺装置７をアクセスする。各ユーザが固有に必要とするＤＲＡＭコントローラ，    ＤＭＡコントローラ，  タイマ等の制御回路はＡＳＩＣ４に内蔵されている。従って、本発明のデータ処理装置１にはこれらの回路は内蔵されていない。
【００５０】
主記憶５へのアクセスは、１回のアクセスに際してアドレスを１つ出力して３２ビット以下のデータをアクセスする単一転送と、１回のアクセスに際してアドレスを１つ出力して４つの３２ビットデータ  （１６バイト）  をアクセスするバースト転送とが可能である。
【００５１】
（２）  「本発明のデータ処理装置の命令」
（２．１）  「命令フォーマット」
本発明のデータ処理装置の命令は１６ビット単位で可変長となっており、奇数バイト長の命令はない。
【００５２】
本発明のデータ処理装置１では高頻度に使用される命令を短いフォーマットとするため、特に工夫された命令フォーマット体系を有する。たとえば、２オペランド命令に対しては基本的に「４バイト＋拡張部」の構成を有し、全てのアドレッシングモードが利用可能な一般形フォーマットと、頻度の高い命令とアドレッシングモードとのみを使用可能な短縮形フォーマットの２つのフォーマットを有する。
【００５３】
図３乃至図１１は本発明のデータ処理装置の命令フォーマットを示す模式図である。これらの模式図中に現われる記号の意味は以下の通りである。
【００５４】
−：オペレーションコードが入る部分
＃：リテラルまたは即値の入る部分
Ｅａ：８ビットの一般形のアドレッシングモードでオペランドを指定する部分Ｓｈ：６ビットの短縮形のアドレッシングモードでオペランドを指定する部分Ｒｎ：    レジスタファイル上のオペランドをレジスタ番号で指定する部分
【００５５】
命令データは、図２に示すように右側が  ＬＳＢ側で、かつ高いアドレスになっている。アドレスＮとアドレスＮ＋１との２バイトを見た後でないと命令フォーマットが判別できないようになっているが、これは命令が必ず１６ビット（ハーフワード）単位でフェッチ、デコードされることを前提としたためである。
【００５６】
本発明のデータ処理装置１の命令では、いずれのフォーマットの場合も、各オペランドのＥａまたはＳｈの拡張部は必ずそのＥａまたはＳｈの基本部を含む１６ビット（ハーフワード）の直後に置かれる。これは、命令により暗黙に指定される即値データ及び命令固有の拡張部に優先する。従って、４バイト以上の命令では、Ｅａの拡張部によって命令のオペレーションコードが分断される場合がある。
【００５７】
また、後述するように、多段間接モードによってＥａの拡張部に更に拡張部が付加される場合にも次の命令オペレーションコードよりもそちらの方が優先される。なお、本発明のデータ処理装置１の命令フォーマットに関しては、特開昭６４−９１２２５号公報、あるいはＵ．Ｓ．Ｐ．  Ｎｏ．  ５，０２９，０６９に詳細に開示されている。
【００５８】
（２．１．１）  「短縮形２オペランド命令」
図３乃至図６は２オペランド命令の短縮形フォーマットを示す模式図である。
【００５９】
図３はメモリ−レジスタ間演算命令のフォーマットを示す模式図である。このフォーマットにはソースオペランド側がメモリとなるＬ−ｆｏｒｍａｔと、デスティネーションオペランド側がメモリとなるＳ−ｆｏｒｍａｔとがある。
【００６０】
Ｌ−ｆｏｒｍａｔでは、Ｓｈはソースオペランドの指定フィールドを、Ｒｎはデスティネーションオペランドのレジスタの指定フィールドを、ＲＲはＳｈのオペランドサイズの指定をそれぞれ表す。レジスタ上に置かれたデスティネーションオペランドのサイズは、３２ビットに固定されている。レジスタ側とメモリ側とのサイズが異なり、且つソース側のサイズが小さい場合に符号拡張が行なわれる。また、一部の命令（加算命令，  減算命令）では、ソースのオペランドサイズもワードに固定されている。この場合、ＲＲのフィールドはオペレーションコードとなっている。
【００６１】
Ｓ−ｆｏｒｍａｔでは、Ｓｈはデスティネーションオペランドの指定フィールドを、Ｒｎはソースオペランドのレジスタ指定フィールドを、ＲＲはＳｈのオペランドサイズの指定フィールドをそれぞれ表す。レジスタ上に置かれたソースオペランドのサイズは３２ビットに固定されている。レジスタ側とメモリ側とのサイズが異なり、且つソース側のサイズが大きい場合は、オーバフローした部分の切り捨てとオーバフローチェックが行なわれる。
【００６２】
図４はレジスタ−レジスタ間演算命令のフォーマット（Ｒ−ｆｏｒｍａｔ）を示す模式図である。このフォーマットでは、Ｒｎはデスティネーションレジスタの指定フィールドを、Ｒｍはソースレジスタの指定フィールドをそれぞれ示している。オペランドサイズは３２ビットのみである。
【００６３】
図５はリテラル−メモリ間演算命令のフォーマット（Ｑ−ｆｏｒｍａｔ）を示す模式図である。このフォーマットでは、ＭＭはディスティネーションオペランドサイズの指定フィールドを、＃はリテラルによるソースオペランドの指定フィールドを、Ｓｈはデスティネーションオペランドの指定フィールドをそれぞれ示している。
【００６４】
図６は即値−メモリ間演算命令のフォーマット（Ｉ−ｆｏｒｍａｔ）の模式図である。このフォーマットでは、ＭＭはオペランドサイズの指定フィールド（ソース，ディスティネーションで共通）を、Ｓｈはデスティネーションオペランドの指定フィールドをそれぞれ示している。Ｉ−ｆｏｒｍａｔの即値のサイズはデスティネーション側のオペランドのサイズと共通であって８，  １６，  ３２ビットとなり、ゼロ拡張、符号拡張は行なわれない。
【００６５】
（２．１．２）  「一般形１オペランド命令」
図７は１オペランド命令の一般形フォーマット（Ｇ１−ｆｏｒｍａｔ）  を示す模式図である。このフォーマットでは、ＭＭはオペランドサイズの指定フィールドを表している。一部のＧ１−ｆｏｒｍａｔ  命令では、Ｅａの拡張部以外にも拡張部を有する。また、ＭＭを使用しない命令もある。
【００６６】
（２．１．３）  「一般形２オペランド命令」
図８乃至図１０は２オペランド命令の一般形フォーマットを示す模式図である。このフォーマットに含まれるのは、８ビットで指定される一般形アドレッシングモードのオペランドが最大２つ存在する命令である。オペランドの総数自体は３つ以上になる場合がある。
【００６７】
図８は第１オペランドがメモリ読み出しを必要とする命令のフォーマット（Ｇ−ｆｏｒｍａｔ）を示す模式図である。このフォーマットでは、  ＥａＭはデスティネーションオペランドの指定フィールドを、ＭＭはデスティネーションオペランドサイズの指定フィールドを、  ＥａＲはソースオペランド指定フィールドを、ＲＲはソースオペランドサイズの指定フィールドをそれぞれ表している。なお、一部のＧ−ｆｏｒｍａｔ命令では、ＥａＭ，  ＥａＲの拡張部以外にも拡張部を有する。
【００６８】
図９は第１オペランドが８ビット即値の命令のフォーマット（Ｅ−ｆｏｒｍａｔ）を示す模式図である。このフォーマットでは、  ＥａＭはデスティネーションオペランドの指定フィールドを、ＭＭはデスティネーションオペランドサイズの指定フィールドを、＃はソースオペランド値をそれぞれ表している。
【００６９】
Ｅ−ｆｏｒｍａｔとＩ−ｆｏｒｍａｔとは機能的には似かよっているが、Ｅ−ｆｏｒｍａｔはあくまでも２オペランド一般形（Ｇ−ｆｏｒｍａｔ）からの派生形であり、ソースオペランドのサイズが８ビット固定，デスティネーションオペランドのサイズが８／１６／３２ビットからの選択になっている。即ち、異種サイズ間の演算を前提としてデスティネーションオペランドのサイズに合わせて８ビットのソースオペランドがゼロ拡張または符号拡張される。
【００７０】
図１０は第１オペランドがアドレス計算のみの命令のフォーマット（ＧＡ−ｆｏｒｍａｔ）  を示す模式図である。このフォーマットでは、  ＥａＷはデスティネーションオペランドの指定フィールドを、ＷＷはデスティネーションオペランドサイズの指定フィールドを、ＥａＡ  はソースオペランドの指定フィールドをそれぞれ表している。なお、ソースオペランドとしては実効アドレスの計算結果自体が使用される。
【００７１】
（２．１．４）  「その他の命令」
上述のフォーマット以外にもいくつかのフォーマットがある。図１１の模式図には、１６ビットすべてがオペレーションコードになっている命令、あるいは１６ビットのオペレーションコードフィールドの一部が即値に割り当てられている命令もある。また、一部の命令では、命令固有の拡張を有する場合もある。
【００７２】
（２．２）  「アドレッシングモード」
本発明のデータ処理装置１の命令のアドレッシングモード指定方法には、レジスタを含めて６ビットで指定する短縮形と、８ビットで指定する一般形とがある。
【００７３】
図１２乃至図２２に示すフォーマットの模式図中で使われている記号の意味は以下の如くである。
【００７４】
Ｒｎ：レジスタ指定
（Ｓｈ）：６  ビットの短縮形アドレッシングモードでの指定方法
（Ｅａ）：８ビットの一般形アドレッシングモードでの指定方法
なお、各フォーマットの模式図において点線にて囲まれている部分は拡張部を示す。
【００７５】
（２．２．１）  「基本アドレッシングモード」
本発明のデータ処理装置１の命令は種々のアドレッシングモードをサポートする。それらの内、本発明のデータ処理装置１でサポートする基本アドレッシングモードには、レジスタ直接モード，  レジスタ間接モード，  レジスタ相対間接モード，  即値モード，  絶対モード，  ＰＣ相対間接モード，  スタックポップモード，  スタックプッシュモードがある。
【００７６】
レジスタ直接モードは、レジスタの内容をそのままオペランドとするアドレッシングモードである。フォーマットの模式図を図１２に示す。図中、Ｒｎは汎用レジスタの番号を示す。
【００７７】
レジスタ間接モードは、汎用レジスタの内容をアドレスとするメモリの内容をオペランドとするアドレッシングモードである。フォーマットの模式図を図１３に示す。図中、Ｒｎは汎用レジスタの番号を示す。
【００７８】
レジスタ相対間接モードは、ディスプレースメント値が１６ビットであるか３２ビットであるかにより２種類に分かれる。いずれも、汎用レジスタの内容に１６ビットまたは３２ビットのディスプレースメント値を加えた値をアドレスとするメモリの内容をオペランドとするアドレッシングモードである。フォーマットの模式図を図１４に示す。図中、Ｒｎは汎用レジスタの番号を示す。ｄｉｓｐ：１６とｄｉｓｐ：３２とは、それぞれ１６ビットのディスプレースメント値，  ３２ビットのディスプレースメント値を示す。ディスプレースメント値は符号付きとして扱われる。
【００７９】
即値モードは、命令コード中で指定されるビットパターンをそのまま２進数と見なしてオペランドとするアドレッシングモードである。フォーマットの模式図を図１５に示す。図中、  ｉｍｍ＿ｄａｔａは即値を示す。  ｉｍｍ＿ｄａｔａのサイズは、オペランドサイズとして命令中で指定される。
【００８０】
絶対モードは、アドレス値が１６ビットで示されるか３２ビットで示されるかにより２種類に分かれる。いずれも、命令コード中で指定される１６ビットまたは３２ビットのビットパターンをアドレスとしたメモリの内容をオペランドとするアドレッシングモードである。フォーマットの模式図を図１６に示す。図中、ａｂｓ：１６とａｂｓ：３２とは、それぞれ１６ビット，  ３２ビットのアドレス値を示す。ａｂｓ：１６にてアドレスが示される場合は指定されたアドレス値は３２ビットに符号拡張される。
【００８１】
ＰＣ相対間接モードは、ディスプレースメント値が１６ビットであるか３２ビットであるかにより２種類に分かれる。いずれも、プログラムカウンタの内容に１６ビットまたは３２ビットのディスプレースメント値を加えた値をアドレスとするメモリの内容をオペランドとするアドレッシングモードである。フォーマットの模式図を図１７に示す。図中、ｄｉｓｐ：１６  とｄｉｓｐ：３２  とは、それぞれ１６ビットのディスプレースメント値，  ３２ビットのディスプレースメント値を示す。ディスプレースメント値は符号付きとして扱われる。ＰＣ相対間接モードにおいて参照されるプログラムカウンタの値は、そのオペランドを含む命令の先頭アドレスである。多段間接アドレッシングモードにおいてプログラムカウンタの値が参照される場合にも、同様に命令の先頭のアドレスがＰＣ相対モードの基準値として使用される。
【００８２】
スタックポップモードはスタックポインタ（ＳＰ，  Ｒ１５）  の内容をアドレスとするメモリの内容をオペランドとするアドレッシングモードである。オペランドアクセス後にＳＰがオペランドサイズだけインクリメントされる。例えば、３２ビットデータが扱われる場合には、オペランドアクセス後にＳＰが＋４だけ更新される。Ｂ（バイト），Ｈ（ハーフワード）  のサイズのオペランドに対するスタックポップモードの指定も可能であり、それぞれＳＰが＋１，  ＋２だけ更新される。フォーマットの模式図を図１８に示す。
【００８３】
スタックプッシュモードはＳＰの内容をオペランドサイズだけデクリメントした内容をアドレスとするメモリの内容をオペランドとするアドレッシングモードである。スタックプッシュモードではオペランドアクセス前にＳＰがデクリメントされる。例えば、３２ビットデータが扱われる場合には、オペランドアクセス前にＳＰが−４だけ更新される。Ｂ，  Ｈ  Ｏのサイズのオペランドに対するスタックプッシュモードの指定も可能であり、それぞれＳＰが−１，  −２だけ更新される。フォーマットの模式図を図１９に示す。
【００８４】
（２．２．２）  「多段間接アドレッシングモード」
複雑なアドレッシングも、基本的には加算と間接参照の組み合わせに分解することが可能である。従って、加算と間接参照のオペレーションをアドレッシングのプリミティブとして与えておき、それらを任意に組み合わせることができれば、どんな複雑なアドレッシングモードをも実現することが出来る。本発明のデータ処理装置１の命令の多段間接アドレッシングモードは上述のような考え方に基づいたアドレッシングモードである。
【００８５】
多段間接アドレッシングモードを指定する場合、基本アドレッシングモード指定フィールドではレジスタベース多段間接モード，  ＰＣベース多段間接モード，  絶対ベース多段間接モードの３種類の指定方法の内のいずれか１つを指定する。
【００８６】
レジスタベース多段間接モードは、汎用レジスタの値を、拡張する多段間接アドレッシングのベース値とするアドレッシングモードである。フォーマットの模式図を図２０に示す。図中、Ｒｎは汎用レジスタの番号を示す。
【００８７】
ＰＣベース多段間接モードは、プログラムカウンタの値を拡張する多段間接アドレッシングのベース値とするアドレッシングモードである。フォーマットの模式図を図２１に示す。
【００８８】
絶対ベース多段間接モードは、ゼロを拡張する多段間接アドレッシングのベース値とするアドレッシングモードである。フォーマットの模式図を図２２に示す。
【００８９】
拡張される多段間接モード指定フィールドは１６ビットを単位としており、これが任意回反復して付加される。１段の多段間接モードにより、ディスプレースメントの加算，  インデクスレジスタのスケーリング（×１，  ×２，  ×４，  ×８）と加算，  メモリの間接参照を行なう。多段間接モードのフォーマットの模式図を図２３に示す。各フィールドは以下に示す意味を有する。
【００９０】
Ｅ＝０  ：多段間接モード継続
Ｅ＝１  ：アドレス計算終了
ｔｍｐ  ＝＝＞  ａｄｄｒｅｓｓ    ｏｆ  ｏｐｅｒａｎｄ
Ｉ＝０  ：メモリ間接参照なし
ｔｍｐ  ＋  ｄｉｓｐ  ＋  Ｒｘ  ＊  Ｓｃａｌｅ  ＝＝＞  ｔｍｐ
Ｉ＝１  ：メモリ間接参照あり
ｍｅｍ［ｔｍｐ  ＋  ｄｉｓｐ  ＋  Ｒｘ  ＊  Ｓｃａｌｅ］  ＝＝＞  ｔｍｐ
【００９１】
Ｍ＝０  ：  ＜Ｒｘ＞  をインデクスとして使用
Ｍ＝１  ：特殊なインデクス
＜Ｒｘ＞＝０        インデクス値を加算しない  （Ｒｘ＝０）
＜Ｒｘ＞＝１        プログラムカウンタをインデクス値として使用  （Ｒｘ＝ＰＣ）
＜Ｒｘ＞＝２〜    ｒｅｓｅｒｖｅｄ
【００９２】
Ｄ＝０  ：多段間接アドレッシングモード中の４ビットのフィールドｄ４の値を４倍してディスプレースメント値とし、これを加算する。ｄ４は符号付きとして扱われ、オペランドのサイズとは関係なく必ず４倍して使用さ
れる。
Ｄ＝１  ：多段間接アドレッシングモードの拡張部で指定されたｄｉｓｐｘ  （１６／３２ビ
ット）をディスプレースメント値とし、これを加算する。
拡張部のサイズはｄ４フィールドで指定する。
ｄ４  ＝  ０００１        ｄｉｓｐｘは１６ビット
ｄ４  ＝  ００１０        ｄｉｓｐｘは３２ビット
ＸＸ    ：インデクスのスケール（ｓｃａｌｅ  ＝  １／２／４／８）
【００９３】
プログラムカウンタに対して×２，  ×４，  ×８のスケーリングを行なった場合には、その段の処理終了後の中間値（ｔｍｐ）  として不定値が入る。この多段間接アドレッシングモードによって得られる実効アドレスは予測できない値となるが、例外は発生しない。プログラムカウンタに対するスケーリングの指定は禁じられている。
【００９４】
多段間接アドレッシングモードによる命令フォーマットのバリエーションを図２４及び図２５の模式図に示す。図２４は多段間接アドレッシングモードが継続するか終了するかのバリエーションを、図２５はディスプレースメントのサイズのバリエーションをそれぞれ示す。
【００９５】
任意段数の多段間接アドレッシングモードが利用できれば、コンパイラの中で段数による場合分けが不要になるので、コンパイラの負担が軽減されるというメリットがある。多段の間接参照の頻度が非常に少ないとしても、コンパイラとしては必ず正しいコードを発生できなければならないからである。このため、フォーマット上では任意の段数が可能になっている。
【００９６】
（３）  「本発明のデータ処理装置の機能ブロック」
【００９７】
（３．１）  「機能ブロックの構成」
図２６は本発明のデータ処理装置１の構成例を示すブロック図である。本発明のデータ処理装置１の内部を機能的に大きく分けると、命令フェッチ部１１，命令デコード部１２，  ＲＯＭ部１３，  アドレス生成部１４，  ＰＣ生成部１５，  整数演算部１６，  オペランドアクセス部１７，  バスインタフェイス部１８に分かれる。なお、参照符号１０１  〜１１０  はデータ及びアドレス等を転送するための内部バスである。バスインタフェイス部１８は３２ビットのアドレスバス２，３２  ビットのデータバス３及び各種制御信号により外部と結合している。
【００９８】
命令フェッチ部１１は内蔵命令キャッシュあるいは外部のメモリから命令をフェッチする。命令デコード部１２は命令フェッチ部１１からＩＩバス１０１  を経由して転送された命令をデコードする。  ＲＯＭ部１３はマイクロプログラムに従って整数演算を制御する。ＰＣ生成部１５は命令のＰＣ値を計算する。アドレス生成部１４はオペランドのアドレスを計算する。オペランドアクセス部１７は内蔵データキャッシュあるいは外部のメモリからのオペランドのフェッチ及び外部のメモリへのオペランドのストアを行なう。
【００９９】
命令は命令フェッチ部１１により取り込まれ、命令デコード部１２でデコードされ、  ＲＯＭ部１３のマイクロプログラム制御により整数演算部１６で実行される。命令のＰＣ値の計算，  オペランドのアドレス計算，  オペランドのアクセスは整数演算と独立のブロックでハードワイヤード制御により行なわれる。
命令のアドレスはＪＡバス１０５  で各部から命令フェッチ部１１へ転送される。オペランドアドレスはＡＡバス１０６  で各部からオペランドフェッチ部へ転送される。整数演算部１６とオペランドアクセス部１７との間のオペランドの転送は６４ビット幅のＤＤバス１０７  により行なわれる。
【０１００】
（３．２）  「バスインタフェイス部」
バスインタフェイス部１８は命令フェッチ部１１あるいはオペランドアクセス部１７の要求に従ってバスサイクルを発行して外部のメモリをアクセスする。本発明のデータ処理装置１におけるメモリアクセスはクロック同期のプロトコルで行なわれる。１回のバスサイクルには最小２クロックサイクルが必要である。リードサイクル及びライトサイクルには、１回のバス転送で４バイト境界内の命令コードあるいはデータを転送する単一転送と、４回のバス転送で１６バイト境界内の命令コードあるいはデータを一度に転送するブロック転送とがある。更にブロック転送にはアドレスを１回出力して命令コードあるいはデータを４回連続転送するバーストモードと、アドレスを４回出力して命令コードあるいはデータを４回連続転送するクワッドムーブモードとがある。
【０１０１】
各バスサイクルの制御，  各種信号の入出力はバスインタフェイス部１８でハードワイヤード制御により行なわれる。バスインタフェイス部１８には、データや命令のブロック転送時にアドレスをインクリメントするための回路が備えられている。また、本発明のデータ処理装置１は、各エントリが８バイトの２エントリのストアバッファを備えているが、バスインタフェイス部１８にはこのストアバッファのアドレス保持部が備えられている。
【０１０２】
バスインタフェイス部１８は命令フェッチに際しては、命令フェッチ部１１からＩＡバス１０８  を経由して入力されたアドレスを外部のアドレスバス２へ出力し、データバス３から命令コードをフェッチし、ＢＤバス１１０  を経由して命令フェッチ部１１へ転送する。また、バスインタフェイス部１８はデータリードに際しては、オペランドアクセス部１７からＯＡバス１０９  を経由して入力されたアドレスを外部のアドレスバス２へ出力し、データバス３からデータをフェッチし、ＢＤバス１１０  を経由してオペランドアクセス部１７へ転送する。更に、バスインタフェイス部１８はデータライトに際しては、オペランドアクセス部１７からＯＡバス１０９  を経由して入力されたアドレスを外部のアドレスバス２へ出力し、ＢＤバス１１０  を経由して入力されたデータをデータバス３へ出力する。ブロック転送のクワッドムーブモードで命令コードあるいはデータを転送する際には、命令フェッチ部１１あるいはオペランドアクセス部１７からは１つのアドレスのみが出力され、残り３つのアドレスはバスインタフェイス部１８内部で下位ビットをラップアラウンドすることにより生成して出力する。
【０１０３】
バスインタフェイス部１８はメモリアクセスの他、外部割り込みの受け付け、バスアービトレーションの制御も行なう。本発明のデータ処理装置１以外の外部デバイスがバスマスタになっていて本発明のデータ処理装置１がバススヌープ動作の実行中に外部デバイスがデータライトまたは無効化サイクルを実行した際場合には、バスインタフェイス部１８はアドレスバス２上へ出力されたアドレスを取り込み、ＩＡバス１０８  を経由して命令フェッチ部１１へ、ＯＡバス１０９  を経由してオペランドアクセス部１７へそれぞれ転送する。
【０１０４】
（３．３）  「命令フェッチ部」
図２７は命令フェッチ部１１の構成例を示すブロック図である。命令フェッチ部１１には４Ｋバイトの内蔵命令キャッシュ２５、２つの１６バイトの命令キュー２１，  ２２、フェッチアドレスを保持，  生成する命令アドレスレジスタ  （ＩＡレジスタ）  ２３、アドレスデコード機構２４とそれらの制御部等が備えられている。命令フェッチ部１１は命令キャッシュ２５あるいは外部のメモリから命令をフェッチし、命令キュー２１，  ２２及びＩＩバス１０１  を経由して命令コードを命令デコード部１２へ転送する。
【０１０５】
バスインタフェイス部１８と命令キャッシュ２５とは３２ビットのアドレスを転送するためのＩＡバス１０８  と３２ビットのデータを転送するためのＢＤバス１１０  とで結合されている。命令キャッシュ２５と命令キュー２１，  ２２とは６４ビットのＩＤバス１１１  で結合されている。
【０１０６】
バスインタフェイス部１８から出力された命令コードはＢＤバス１１０  を経由して命令キャッシュ２５へ転送される。命令キュー２１，  ２２から出力された命令コードはＩＩバス１０１  を経由して命令デコード部１２へ転送される。
【０１０７】
命令キューは、条件分岐命令の分岐／非分岐両方向の命令を保持するために参照符号２１，  ２２で示されている２つが備えられている。２つの命令キュー２１，  ２２の内の一方は条件分岐命令に連続する命令コードをプリフェッチしてキューイングし、他方は条件分岐命令の分岐先の命令コードをプリフェッチしてキューイングする。
【０１０８】
ＩＡレジスタ２３は、２つの命令キュー２１，  ２２のフェッチアドレスを保持するための２つのレジスタと、アドレスをインクリメントするための専用カウンタとを含んでいる。リセット時を含みジャンプが発生した場合には、ジャンプ先アドレスがアドレス生成部１４，  ＰＣ生成部１５あるいは整数演算部１６からＪＡバス１０５  を介してＩＡレジスタ２３へ転送される。また、ジャンプ先アドレスの一部は、命令キュー２１，  ２２にも送られ、入出力ポインタの初期化に用いられる。ジャンプ先以外の命令アドレスは、ＩＡレジスタの内部のカウンタで計算される。命令のアドレスはＩＡレジスタからＩＡバス１０８  を経由してアドレスデコード機構２４及び命令キャッシュ２５へ出力される。
【０１０９】
アドレスデコード機構２４にはいくつかの制御レジスタを有しており、命令アドレスが  Ｉ／Ｏ領域に入るか否か、非キャッシュ領域に入るか否か等のチェックを行なう。
【０１１０】
命令キャッシュ２５は１６ｂｙｔｅ×２５６ｅｎｔｒｙ構成のダイレクトマップ制御で動作する。命令キャッシュ２５はＩＡレジスタ２３から転送されたアドレスの下位１２ビットに従ってキャッシュアドレスタグと命令コードとを出力する。キャッシュアドレスタグはアドレスの上位２０ビットと比較され、一致すれば命令キャッシュ２５はヒットする。この場合、ＩＤバス１１１  を経由して命令コードが命令キュー２１，  ２２へ転送される。命令キュー２１，  ２２が空であれば、命令コードは命令キュー２１，  ２２をバイパスして同一タイミングでＩＩバス１２を経由して命令デコード部１２へも転送される。命令キャッシュ２５がミスした場合はアドレスデコード機構２４からＩＡバス１０８  を経由してバスインタフェイス部１８へ命令アドレスが出力されることにより、外部のメモリがブロック転送でアクセスされて命令コードがフェッチされ、命令キャッシュ２５のエントリが更新される。
【０１１１】
また、本発明のデータ処理装置１がバススヌープ動作の実行中においては、バスインタフェイス部１８が外部のアドレスバス２上のアドレスをモニタしており、アドレスをＩＡバス１０８  を経由して命令キャッシュ２５へ転送する。バスインタフェイス部１８は本発明のデータ処理装置１自身がライト動作を行なったメモリのアドレスも命令キャッシュ２５へ転送する。
【０１１２】
（３．４）  「命令デコード部」
本発明のデータ処理装置１における命令は図２８の模式図に示すように２バイト単位の可変長命令であり、基本的には「２バイトの命令基本部＋０乃至４バイトのアドレッシング修飾部」を１乃至３回反復することにより命令が構成されている。
【０１１３】
命令基本部にはオペレーションコード部とアドレッシングモード指定部とが含まれる。インデックスアドレッシングまたはメモリ間接アドレッシングが必要な場合にはアドレッシング修飾部の代わりに「２バイトの多段間接モード指定部＋０乃至４バイトのアドレッシング修飾部」が必要なだけ拡張される。また、命令により２または４バイトの命令固有の拡張部が最後に付加される場合もある。
【０１１４】
本発明のデータ処理装置１では図２８に示した可変長フォーマットの命令を効率よく処理するために、命令デコード段階で１つの命令を１つまたは複数の処理単位  （以下、ステップコードと言う）  に分解する。基本的には「２バイトの命令基本部＋０乃至４バイトのアドレッシング修飾部」または「多段間接モード指定部＋アドレッシング修飾部」のデコード結果が１つのステップコードになり、命令デコーダは１クロックに１つのステップコードを出力する。しかし、第１オペランドにアドレッシング修飾部がない場合あるいは先頭の命令基本部にオペランド指定子がない命令では１クロックに２つの命令基本部  （３２ビット長）  がデコードされる。また、本発明のデータ処理装置１では一部の命令を先行する命令と並列にデコードし、２命令を同時に処理することもできる。
【０１１５】
本発明のデータ処理装置１の命令デコード部１２のブロック図を図２９に示す。命令デコード部１２は、分岐予測部３３，  Ｄステージデコーダ３１，  拡張データ処理部３２，  Ａステージデコーダ３４及びサブコード転送部３５からなる。
【０１１６】
分岐予測部３３は１ビット×１Ｋエントリの条件分岐命令の分岐履歴を保持している。条件分岐命令の直前に実行された命令のＰＣ値の下位アドレスに対応づけて分岐履歴が登録され、条件分岐命令の直前にデコードした命令のＰＣ値の下位アドレスに従って分岐予測ビットを出力する。その際に参照及び更新に用いられるＰＣ値はＰＣ生成部１５から転送される。
【０１１７】
Ｄステージデコーダ３１は、ＩＩバス１０１  を経由して転送される最大８バイトの命令コードと１ビットの分岐予測ビットとをデコードする。本発明のデータ処理装置１は２つの命令（先行命令と後続命令）を並列にデコード可能であり、先行命令の中間デコード結果（メインＤコード）がＡステージデコーダ３４へ、後続命令のデコード結果（サブＤコード）がサブコード転送部３５へそれぞれ転送される。また、先行命令または後続命令に関するアドレス計算情報（Ａコード）がアドレス生成部１４へ転送される。その他、処理コード長等のＰＣ計算に関係する情報，  命令実行に先立って分岐処理を行なう先行分岐に関する情報がＰＣ生成部１０２  に、命令キュー２１，  ２２の出力ポインタ制御または先行分岐に関する情報が命令フェッチ部１１へ出力される。命令デコードの詳細については、後述する。
【０１１８】
拡張データ処理部３２は、Ｄステージデコーダ３１でのデコード結果に従って、ディスプレースメント，  即値等のアドレッシング修飾部を命令コードから取り出し、ＤＩＳＰバス１０２  を経由してアドレス生成部１４やＰＣ生成部１５へ転送する。
Ａステージデコーダ３４はＤステージデコーダ３１から出力される命令の中間デコード結果であるメインＤコードを詳細にデコードしてマイクロプログラムのエントリ番地，  パラメータ等を  ＲＯＭ部１３へ出力する。Ａステージデコーダ３４ではＬＤＭ  やＳＴＭ  等の複数のオペランドをレジスタとメモリとの間で転送する命令を１度に８バイト以下のデータを転送する複数のメモリ−レジスタ間転送命令  （ステップコード）  に分解する。この際、Ａステージデコーダ３４はアドレス生成部１４にＡＡコードを出力し、分解したオペランドのアドレス計算を制御する。
【０１１９】
サブコード転送部３５はＤステージデコーダ３１から出力される後続命令のデコード結果であるサブＤコードをＡステージデコーダ３４でデコードされる命令と同期させて  ＲＯＭ部１３へ転送する。
また、Ａステージデコーダ３４とサブコード転送部３５とからはオペランドが書き込まれるべきレジスタの番号がアドレス生成部１４へ転送され、書き込みが終了していないレジスタ値を後続命令がオペランドアドレス計算に使用して  ＲＡＷデータハザード（Ｒｅａｄ−ａｆｔｅｒ−ｗｒｉｔｅ  ｄａｔａ  ｈａｚａｒｄ）を起こさないようにパイプラインインタロック機構により制御する。
【０１２０】
（３．５）  「ＰＣ生成部」
図３０はＰＣ生成部１５の構成例を示すブロック図である。ＰＣ生成部１５は、命令デコード段階での先行ジャンプ先アドレスを計算するジャンプ先アドレス生成部４１，  デコードする命令のＰＣ値を計算するＰＣ計算部４２．  パイプライン中で処理される命令の流れに同期してＰＣ値を転送するＰＣ転送部４３，  サブルーチンからのプリリターン先アドレスを管理するＰＣスタック４４からなる。
【０１２１】
ジャンプ先アドレス生成部４１は命令デコード段階でＰＣ相対ジャンプまたは絶対アドレスジャンプを行なう命令をデコードした場合のジャンプ先命令のアドレスを計算する。ジャンプ先アドレス生成部４１には、ＩＩバス１０１  と  ＤＰＣバス１１２  とに結合された２つの加算器があり、ＩＩバス１６９  上の分岐変位フィールドとなり得るフィールドの値と  ＤＰＣバス１６６  から転送された命令の先頭アドレスとの加算を命令デコードと並行して行なう。また、ジャンプ先アドレス生成部４１は、ＩＩバス１６９  上の絶対アドレスとなり得るフィールドの切り出し及び符号拡張を行なう。デコードした命令がＰＣ相対ジャンプを行なう命令または絶対アドレスジャンプを行なう命令であった場合、２つの加算結果と１つの符号拡張結果との内から一つの正しいジャンプ先アドレスを選択してＪＡバス１０５  へ出力する。また、命令デコードと同時に計算したジャンプ先アドレス以外のアドレスにＰＣ相対でジャンプする実行頻度の少ない一部のジャンプ命令に対しては、命令デコードの後に新たにＤＩＳＰバス１０２  から転送される分岐変位とＰＣ値とを加算してジャンプ先アドレスを求め、ＪＡバス１０５  へ出力する。
【０１２２】
ＰＣスタック４４はサブルーチンジャンプ命令からのリターン先アドレスのコピーを８エントリのスタックに保持し、サブルーチンリターン命令をデコードした場合にはリターン先アドレスをＪＡバス１０５  へ出力する。ＰＣスタック４４では、サブルーチンジャンプ命令が実行された場合にはリターン先アドレスがＳ１バス１０４  から転送されてプッシュされる。タスクスイッチによりスタックが切り替えられたり、８レベル以上のサブルーチンのネスティング等が発生するとＰＣスタック４４からＪＡバス１０５  へ出力されるリターン先アドレスは正しいリターン先アドレスではなくなる。このため、サブルーチンリターン命令がパイプラインの実行段階に到達した時点で、プリリターンアドレスがＰＣスタック４４から再びＳ１バス１０４  へ読み出され、メモリから読み出された正しいリターン先アドレスと比較される。
【０１２３】
ＰＣ計算部４２は、加算器と複数の作業用レジスタ（ＴＰＣ，  ＡＮＰＣ，  ＤＰＣ）４６とからなり、命令デコード部１２でデコードする命令のＰＣ値を計算する。ＰＣ値の計算はそのサイクルにデコードした命令の先頭アドレスに命令デコード部１２で消費した処理コード長を加算することにより行なわれる。ジャンプ命令またはＥＩＴ  により命令実行のシーケンスが変更された場合はＪＡバス１０５  からジャンプ先命令のアドレスが転送される。ＰＣ計算部４５の計算結果は命令のデコード結果と共にパイプラインの流れに同期してＰＣ転送部４３へ出力される。また、作業用レジスタに保持されている次にデコードされるべき命令のＰＣ値がＩＸバス１０３  を経由してアドレス生成部１４へ転送され、ジャンプ先アドレスの計算のために  ＤＰＣバス１１２  を経由してジャンプ先アドレス生成部４１へ転送される。
【０１２４】
ＰＣ転送部４３には、本発明のデータ処理装置１の各パイプラインステージに対応する複数のＰＣ保持用レジスタが備えられている。ＰＣ計算部４６で計算された命令の先頭アドレスであるＰＣ値は本発明のデータ処理装置１の各パイプラインステージで処理されるステップコードと共にＰＣ転送部４３内の複数のレジスタ間を転送される。アドレス計算の際にその命令のＰＣ値が参照される場合には、アドレス計算処理中のステップコードの基になった命令のＰＣ値がＩＸバス１０３  を経由してアドレス生成部１４へ転送される。また、ＰＣ転送部４３ではデバッグサポートのための命令アドレスブレイクあるいはトレース動作の起動のために、転送されるＰＣ値と命令ブレイクポイントアドレスの値あるいはトリガ開始命令アドレスの値との比較動作も行なう。
【０１２５】
（３．６）  「アドレス生成部」
アドレス生成部１４は、命令デコード部１２のＤステージデコーダ３１及びＡステージデコーダ３４から出力されたオペランドのアドレス生成に関係する制御情報（Ａコード，  ＡＡコード）によりハードワイヤード制御され、オペランドのアドレスを生成する。また、ＰＣ生成部１５でジャンプ先アドレスを生成しないレジスタ間接アドレッシングのジャンプ命令による先行ジャンプ処理，  条件分岐命令の分岐予測と、反対側の命令アドレスの計算，  サブルーチンジャンプ命令の戻り先アドレスの計算も行なう。
【０１２６】
図３１はアドレス生成部１４の構成例を示すブロック図である。アドレス生成部１４には、命令デコード部１２から出力されたアドレス生成に関係する制御情報であるＡコード及びＡＡコードから演算制御信号を生成するアドレス計算制御部５１，  ３入力加算器５８でオペランドのアドレス計算を行なうアドレス計算部５３，  アドレス計算部５３で計算されたオペランドアドレス値をパイプライン処理の進行に同期して転送するアドレス転送部５４，  オペランドアドレス計算に関する  ＲＡＷデータハザード検出を行なうスコアボードレジスタ部５２が備えられている。
【０１２７】
アドレッシングモードで指定されたディスプレースメント値は命令デコード部１２からＤＩＳＰバス１０２  を経由してアドレス計算部５３へ転送され、ＤＩＳＰ５５に保持される。また、スタックプッシュモードに伴うＳＰ値のプリデクリメント処理のため、ＤＩＳＰ５５には命令デコード部１２から転送された補正値（プリデクリメント値）を入力することもできる。アドレス計算で参照するレジスタ値は、整数演算部１６のレジスタからＩＸバス１０３  を経由して転送された値がＩＮＤＥＸ５６  に入力されて保持される。また、ＰＣ相対モード等の場合にはＰＣ生成部１５のＰＣ転送部４３からＰＣ値が、スタックポップモードまたはプッシュモードが用いられた場合、あるいはレジスタ１５（レジスタ１５はスタックポインタを指す）を参照する場合には整数演算部１６からＳＰ値が、それぞれＩＸバス１０３  を経由して転送されてＩＮＤＥＸ５６  に保持される。スケールドインデックスアドレッシングを実行するために、ＩＮＤＥＸ５６  では入力された値の１，  ２，  ４，  ８倍を３入力加算器５８へ出力することができる。多段間接アドレッシングにより前段までのアドレス計算結果を次の多段間接アドレッシングのベースアドレスとする場合は３入力加算器５８の出力がＡＯ５９からＢＡＳＥ５７へ転送される。また、メモリ間接アドレッシングでは、３入力加算器５８によるアドレス計算結果をＡＯ５９を経てＡＡバス１０６  へ出力してメモリからアドレスをフェッチし、Ｓ１バス１０４  を経由してＢＡＳＥ５７に目的アドレスを転送する。ＤＩＳＰ５５，  ＩＮＤＥＸ５６，  ＢＡＳＥ５７  に保持された３つの値は３入力加算器２６７  で加算されてＡＯへ出力される。ＤＩＳＰ５５，  ＩＮＤＥＸ５６，  ＢＡＳＥ５７  はそれぞれゼロクリア機能を有している。
【０１２８】
アドレスの計算結果はＡＯ５９からＡＡバス１０６  へ出力されてオペランドをアクセスするアドレスとして使用される。また、ＡＯ５９から出力されたオペランドアドレス自体はアドレス転送部５４に渡され、パイプライン中の命令の流れに同期してアドレス転送部５４で管理される。即値も命令デコード部１０２  からＤＩＳＰ５５，  ３入力加算器５８を経由してアドレス転送部５４へ転送され、オペランドアドレスと同様にパイプライン中の命令の流れに同期してアドレス転送部５４で管理される。
【０１２９】
ＰＣ相対と絶対とを除くアドレッシングモードのジャンプ命令のジャンプ先アドレス計算結果はＡＯ５９からＪＡバス１０５  へ出力され、アドレス生成段階での先行ジャンプに使用される。
【０１３０】
本発明のデータ処理装置１には、スタックポップアドレッシング（＠ＳＰ＋）あるいはスタックプッシュアドレッシング（＠−ＳＰ）が連続してもパイプラインインタロックなしに命令を処理するためのオペランドアドレス生成専用ＳＰ（ＡＳＰ）  とオペランドのアドレス生成段階で更新したＳＰの値を命令の流れに同期してパイプライン中で転送するレジスタ群  （ＳＰ転送部）  とからなるＳＰ先行更新機構が備えられている。アドレス計算段階でのＳＰ値の更新処理は、アドレス計算制御部５１から出力される制御信号により実行されるが、ブロックとしては整数演算部１６にあるので、詳細な説明は後で述べる。
【０１３１】
スコアボードレジスタ部５２には複数のスコアボードレジスタが備えられている。各スコアボードレジスタは１６ビットで構成されており、各ビットが１つの汎用レジスタに対応する。このスコアボードレジスタが、アドレス計算より後のパイプラインステージ（実行ステージまで）に対応して複数存在する。レジスタの更新情報が命令デコード段階で登録され、パイプラインの進行に従って転送され、命令実行が終了し、レジスタ値の更新が終了するまで保持される。アドレス計算時に参照するレジスタ番号に基づいて  ＲＡＷデータハザードの検出を行なう。
【０１３２】
（３．７）  「オペランドアクセス部」
図３２はオペランドアクセス部１７の構成例を示すブロックである。オペランドアクセス部１７には、４ＫＢのデータキャッシュ７４，  ２エントリのオペランドプリフェッチキューのアドレス管理部（ＳＤＡ）  ７３，  ２エントリのストアバッファのデータ保持部（ＳＢＤ）  ７５，  オペランドアクセスアドレスを保持，  生成するオペランドアドレスレジスタ（ＯＡ）７１，  アドレス判定部７２及びそれらの制御部（図示せず）等が備えられている。
【０１３３】
オペランドをアクセスする場合、ＡＡバス１０６  からＯＡレジスタ７１を経由してＯＡバス１０９  にオペランドアドレスが出力される。このアドレスはアドレスデコード機構２４にも出力される。アドレスデコード機構２４にはいくつかの制御レジスタが備えられており、命令アドレスが  Ｉ／Ｏ領域に入るか否か、非キャッシュ領域に入るか否かの等のチェックが行なわれる。また、デバッグサポートのためのオペランドブレイク起動のためのブレイクポイントアドレス値との比較処理も行なわれる。
【０１３４】
データキャッシュ７４は、ライトスルー方式の１６ｂｙｔｅ×２５６ｅｎｔｒｙ構成のダイレクトマップ制御で動作する。データキャッシュ７４はＯＡバス１０９  から転送されたデータアドレスの下位１２ビットに従ってキャッシュアドレスタグとデータとを出力する。キャッシュアドレスタグはデータアドレスの上位２０ビットと比較され、両者が一致すれば、データキャッシュはヒットする。
【０１３５】
データのリード動作ではアドレス生成部１４あるいは整数演算部１６から出力されたリードすべきデータアドレスがＯＡレジスタ７１へ転送されてデータキャッシュ７４がアクセスされる。キャッシュヒット時には、データがデータキャッシュ７４からＤＤバス１０７  を経由して整数演算部１６へ転送される。オペランドのプリフェッチ（命令実行に先立つステージでのオペランドフェッチ）では、ストアオペランドとのオーバーラップチェックのためフェッチデータの８バイト境界ごとのデータアドレスをＳＤＡ７３  へ転送して保持する。
【０１３６】
データキャッシュがミスした場合はデータアドレスがＯＡバス１０９  からバスインタフェイス部１８へ出力され、外部のメモリがブロック転送でアクセスされることにより、ＢＤバス１１０  からデータがフェッチされてデータキャッシュのエントリが更新される。ブロックリードはオペランドとして必要なデータからアドレスを昇順にラップアラウンドして行なわれ、オペランドとして必要なデータはデータキャッシュへの登録と並行してＤＤバス１０７  から整数演算部１６へ転送される。また、データキャッシュ７４には１６バイトのブロックバッファが備えられており、非キャッシュ領域のアクセスも含めてデータアクセスがブロックバッファのデータにヒットするか否かをチェックする。ブロックバッファは非キャッシュ領域に対する８バイトデータリードを１６バイト一括してブロック転送により行ない、リードした１６バイトのデータを保持して次のデータリードが同一の１６バイト境界内であればブロックバッファからデータを出力する。この機能によりストリング操作命令あるいはビットマップ命令で非キャッシュ領域のデータを１６バイト単位に高速アクセスすることが可能となる。
【０１３７】
データのストア動作ではＡＡバス１０６  から出力されたストアすべきデータのアドレスがＯＡレジスタ７１へ転送され、整数演算部１６から出力されたデータがＤＤバス１０７  を経由して転送される。ストア動作は必ず外部のメモリに対して行なわれる。ストアデータアドレスはバスインタフェイス部１８のストアバッファのアドレス保持部へ転送され、ストアデータはストアバッファデータ部２９２（７５）  へ転送される。ストアバッファにストアアドレスとデータとが転送される際に、プリフェッチデータまたはデータキャッシュにストアデータとオーバーラップするデータがある場合にはその内容が書き換えられる。プリフェッチデータのオーバーラップチェックはＳＤＡ７３  で、データキャッシュ７４のオーバーラップチェックはキャッシュ内のタグで行なわれる。なお、データキャッシュ７４はライトスルー方式でありライト動作でミスした  （オーバーラップがない）  場合はキャッシュの内容は変化しない。
【０１３８】
バスインタフェイス部１８がストアバッファ２９２  のデータを外部にライトしている間も、オペランドアクセス部１５６  は引き続くリードアクセスまたはライトアクセスを受け付ける。従って、ストアバッファ２９２  に未処理のデータが存在してもデータキャッシュがヒットした場合はオペランドアクセス部１７は後続の処理を続けることができる。
【０１３９】
本発明のデータ処理装置１がバススヌープ動作を実行している間は、バスインターフェイス部１８は無効化すべきデータのアドレスをＯＡバス１０９  を経由してオペランドアクセス部１７へ転送する。データキャッシュ７４はこのアドレスがヒットする１６バイトブロックのデータをすべて無効化する。
【０１４０】
（３．８）  「  ＲＯＭ部」
図３３は  ＲＯＭ部１３の構成例を示すブロック図である。  ＲＯＭ部１３には、マイクロプログラムルーチンが格納されているマイクロＲＯＭ８１，マイクロシーケンサ８２，  第１，  第２マイクロ命令デコーダ８５，  ８６，  命令デコーダから出力されるＲコードを保持するＲコードラッチ８３等が備えられている。  ＲＯＭ部１３は、命令デコード部１２から出力されたＲコード（メインＲコードとサブＲコード）に従ってマイクロプログラムにより整数演算部１６の動作を制御する。
【０１４１】
マイクロシーケンサ８２は命令実行に関するマイクロプログラム実行のためのシーケンス処理を主として行なう。ここには、複数のマイクロ命令アドレスを保持するためのラッチ，  マイクロ命令アドレス値をインクリメントするインクリメンタ，  演算実行結果の条件判定部等が備えられており、シーケンシャルなマイクロ命令実行及び４方向条件分岐の他、マイクロサブルーチンの実行等も制御する。この他、マイクロシーケンサ８２では、例外，  割込，  トラップ（ＥＩＴ）  の受付けと各ＥＩＴ  に対応するマイクロプログラムのシーケンス処理も行なう。
【０１４２】
Ｒコードラッチ８３は、マイクロエントリ番地保持部８３ａ，パラメータ保持部８３ｂ，サブＲコード保持部８３ｃ  で構成され、２エントリのキューとして構成されている。
【０１４３】
マイクロＲＯＭ８１  には  １５５ビット×４Ｋワードの  ＲＯＭと読み出されたマイクロ命令を保持するマイクロ命令レジスタとが備えられており、マイクロシーケンサから出力されるアドレスのマイクロ命令を読み出す。マイクロ命令アドレスは１２ビットであり、その内の上位１０ビットがマイクロＲＯＭ８１  のＸデコーダ入力となり、下位２ビットがマイクロＲＯＭ８１  のＹデコーダ入力となる。マイクロプログラムの条件ジャンプをディレイスロットなしで行なうために、マクロプログラムの条件ジャンプ時にはマイクロＲＯＭ８１  から４ワードが一度に読み出され、その内の一つが条件判定結果に従って選択される。マイクロ命令はマイクロＲＯＭ８１  から１クロックに１度読み出され、１つのマイクロ命令で１つのレジスタ間演算が行なわれる。従って、転送，  比較，  加算，  減算，  論理演算等の基本命令は１クロックで終了する。
【０１４４】
第１，  第２マイクロ命令デコーダ８５，  ８６はマイクロＲＯＭ８１  から出力されるマイクロ命令とＲコードのパラメータ８３ｂ  及びサブＲコード８３ｃ  とをデコードして整数演算部１６の制御信号及び小さな即値を出力する。命令デコード部１６で２命令が同時にデコードされた場合、先行命令のデコード結果はメインＲコードとして出力され、後続命令のデコード結果はサブＲコードとして出力される。先行命令の実行については、処理に必要なマイクロ命令が読み出され、第１マイクロ命令デコーダ８５で読み出されたマイクロ命令とメインＲコード内のパラメータ保持部８３ｃ  から得られるパラメータ情報とがデコードされて先行命令の実行に必要な制御信号が生成される。後続命令に関しては、マルチプレクサ８４でＲコードラッチ８３の出力が選択され、第２マイクロ命令デコーダ８６でデコードされる。また後続命令に関しても、先行命令の最終マイクロ命令と共に有効な制御信号が生成される。ストリング命令のように１つの命令で複数のオペレーションを行なう高機能命令を処理する場合には２命令の並列実行は行なわれず、２命令並列実行時の後続命令を処理するための演算ハードウェアもマイクロプログラムで制御される。この場合、マルチプレクサ８４はマイクロＲＯＭ８１  の出力を選択する。
【０１４５】
ＲＯＭ部８１は、主として整数演算部１６に対して演算実行制御信号を出力するが、オペランドアクセス，  ジャンプ，ＥＩＴ処理等のために他ブロックへも多くの制御信号を出力するがそれらは図示されていない。
【０１４６】
（３．９）  「整数演算部」
整数演算部１６は主として  ＲＯＭ部１３のマイクロＲＯＭ８１  に格納されたマイクロプログラムにより制御され、種々の整数演算命令を実行するために必要な演算をレジスタファイル２０５  と演算器とを用いて実行する。
【０１４７】
図３４は整数演算部１６の構成例を示すブロック図である。Ｅステージジャンプアドレスレジスタ（ＥＪＡ）２０１はパイプラインの命令実行ステージでジャンプを実行する際にジャンプ先アドレスを格納するレジスタである。  ＥＩＴを検出した場合、あるいはプリリターン先アドレスを誤ったサブルーチンリターン命令を実行した場合、マイクロプログラムにより  ＥＪＡレジスタ２０１  にジャンプ先アドレスを入力して実行ステージジャンプが行なわれる。この際のジャンプ先アドレスはＪＡバス１０５  を経由して命令フェッチ部１１へ転送される。
【０１４８】
メモリアドレスレジスタ部２０２  とメモリデータレジスタ部２０９  とは整数演算部１６がオペランドアクセス部１７と通信を行なうためのレジスタであり、メモリアドレスレジスタ部２０２  がアドレスを、メモリデータレジスタ部２０９  がデータをそれぞれ扱う。メモリアドレスレジスタ部２０２  には２つのアドレスレジスタとアドレスのインクリメント／デクリメントを行なうカウンタ等が備えられている。命令実行時にメモリアクセスを行なう場合には、オペランドアドレスがＡＡバス１０６  を経由してオペランドアクセス部１７へ出力される。
【０１４９】
メモリデータレジスタ部２０９  には、命令実行以前にプリフェッチされたオペランドを保持するための２エントリのＳコードデータレジスタ（ＳＤ）２１０，実行時のリード用のレジスタ（ＤＤＲ）２１１，  ライト用のレジスタ（ＤＤＷ）２１２が備えられている。各レジスタは、非整置の８バイトデータを保持できるように、それぞれ２つの８バイトのデータレジスタと整置回路とを備えており、６４ビット幅のＤＤバス１０７  によりオペランドアクセス部１５６  との間で整置された８バイト単位でデータをやりとりする。ＳＤ２１０，  ＤＤＲ２１１  からはプリフェッチオペランドが出力されるが、３２ビット以下のプリフェッチオペランドはＳ１バス１０４  またはＳ３バス１２２  のどちらのバスへも出力可能である。６４ビットのプリフェッチオペランドを出力する場合はＳ１バス１０４  またはＳ３バス１２２  にＳ２バス１２１  を連結して使用する。また、メモリにストアされるべきデータはＤ１バス１２４  とＤ２バス１２５  とを経由してＤＤＷ２１２に書き込まれる。
【０１５０】
主演算回路２０８  には、  ＡＬＵ，  ６４ビットバレルシフタ，  乗算器，  プライオリティエンコーダ，  カウンタ等が内蔵されている。副演算回路２０７  には、ＡＬＵ２７，バレルシフタなどが内蔵されている。レジスタファイルには、スタックポインタであるＲ１５  以外の１５本の汎用レジスタと１６本の作業用レジスタとが内蔵されている。スタックポインタ部  （ＳＰ部）  は、スタックポインタ（Ｒ１５）  を保持する。レジスタファイル２０５  とＳＰ部２０４  とは、２つの演算命令を並列に実行できるように、主演算回路２０８  及び副演算回路２０７  に接続された４つの出力ポートと２つの入力ポートとを有する。更に、オペランドのアドレス計算のためにデータをアドレス生成部１４へ転送するＩＸバス１０３  に接続するもう１つの出力ポートを有する。
【０１５１】
命令デコード部１２で同時にデコードされた２つの命令は主演算回路２０８  と副演算回路２０７  とで同時に実行される。先行命令の実行は  ＲＯＭ部１３の第１マイクロデコーダ８５の出力により制御され、主演算回路２０８  で演算実行が行なわれる。後続命令は第２マイクロデコーダ８６の出力によりハードワイアード制御され、副演算回路２０７  で演算実行が行なわれる。高機能命令を実行する場合はマイクロプログラムにより副演算回路２０７  と主演算回路２０８  とを並列に動作させることにより、８バイトデータを一度に処理したり、２つのオペレーションを並列に行なうこともできる。
【０１５２】
ＳＰ部２０４  は、単にスタックポインタ値を保持するのみならず、複雑な処理を行なう。
【０１５３】
図３５はＳＰ部２０４  の詳細な構成例を示すブロック図である。本発明のデータ処理装置ではリング保護を行なうために各リングごとにスタックポインタが用意されており、また割り込み処理用のスタックポインタを含めて５本のスタックポインタが用意されている。この５本のスタックポインタはマスタＳＰ２２８  に保持される。ＥＳＰ２２７は命令実行ステージ用の作業用スタックポインタであり、現在選択されているリングのスタックポインタ値を保持し、  ＥＳＰカウンタ２２７  でインクリメントまたはデクリメントの処理が行なわれる。各命令の終了時に、ＥＳＰ２２６の値がマスタＳＰ２２８  に書き戻される。
【０１５４】
また、本発明のデータ処理装置１では、スタックプッシュまたはスタックポップを行なう命令が連続した場合にも、パイプラインストールなしにＳＰ値を用いたアドレス計算を行なうことを可能とする目的で、アドレス計算段階でＳＰ値の先行更新を行なう。アドレス計算段階でのＳＰ値はＡＳＰ２２１で保持され、スタックプッシュに伴うＳＰ値のデクリメント処理またはスタックポップに伴うＳＰ値の  ＡＳＰ加算器２２４  での更新が行なわれる。更に、高機能命令でＳＰ値を補正する場合の処理も  ＡＳＰ加算器２２４  で行なわれる。アドレス計算部５３がＳＰ値を参照する場合はＩＸバス１０３  を経由してＡＳＰ２２１の値を参照する。アドレス計算段階で更新されたＳＰ値はパイプライン中の命令の流れに同期してＦＳＰ２２５を経由してＥＳＰ２２６へ転送される。但し、アドレス計算段階で更新が行なわれなかった場合にはその値が正しい値であるか否かがハードウェア的に保証されていないため、ＥＳＰ２２６への転送は行なわない。命令実行段階でＳＰの書き込みを行なう場合には、更新する値をＤ１バス１２４  またはＤ３バス１２５  からＡＳＰ２２１とＥＳＰ２２６とに同時に書き込む。命令実行段階でジャンプが発生してパイプラインがクリアされた場合にはＥＳＰ２２６の値がＡＳＰ２２１へ転送される。
【０１５５】
ＥＳＰ２２６にはＡＡバス１６０  への出力経路があり、メモリアドレスレジスタ部２０２  を介さずにＥＳＰ２２６の値でメモリをアクセスすることができる。
【０１５６】
制御レジスタ部３５９  にはプロセッサ・ステータス・ワード（ＰＳＷ），例外関連の処理，  デバッグ等を制御するための各種の制御レジスタが備えられている。定数生成部２０６  には、定数ＲＯＭ  や  ＲＯＭ部１３から出力される命令コードで指定された小さな即値やマイクロ命令で指定する小さな定数を保持するラッチ等があり、この定数値をバスへ出力する。
【０１５７】
（４）  「パイプライン処理」
（４．１）  「パイプラインの構成」
本発明のデータ処理装置１における命令パイプラインの構成例を図３６の模式図に示す。本発明のデータ処理装置１では、命令のプリフェッチを行なう命令フェッチステージ（ＩＦ  ステージ）４０１、命令のデコードを行なうデコードステージ  （Ｄステージ）４０２、オペランドのアドレス生成を行なうアドレス生成ステージ  （Ａステージ）４０３、マイクロＲＯＭ８１  のアクセス  （特にＲステージと称す）  とメモリオペランドのプリフェッチ  （特にＯＦステージと称す）  とを行なうオペランドフェッチステージ  （Ｆステージ）４０４、命令の実行を行なう実行ステージ  （Ｅステージ）４０５、メモリオペランドのストアを行なうストアステージ  （Ｓステージ）４０６の６段構成でパイプライン処理を行なう。
【０１５８】
ＩＦステージ４０１  には３２バイトの命令プリフェッチキュー２１，  ２２が、Ｆステージ４０４  には２エントリのオペランドプリフェッチキュー（ＳＤ）  ２１０が、Ｓステージ４０６  には２エントリのストアバッファ（ＳＢＤ）  ７５がそれぞれ対応する。
各ステージは他のステージとは独立に動作し、理論上は６つのステージが完全に独立動作する。Ｓステージ４０６  以外の各ステージは１回の処理を最小１クロックで行なう。Ｓステージ４０６  は１回のオペランドストア処理を、ストアバッファ７５に空きがある場合は１クロックで行ない、空きがない場合は最小２クロックで行なう。従って、本発明のデータ処理装置１の命令パイプラインは理想的には１クロックごとに次々と命令を処理する。
【０１５９】
本発明のデータ処理装置１の命令には、メモリ−メモリ間演算あるいはメモリ間接アドレッシング等のような１回の基本パイプライン処理のみでは処理が不可能な場合もあるが、本発明のデータ処理装置１の命令パイプラインはこれらの処理に対してもなるべく均衡したパイプライン処理が行なえるように設計されている。複数のメモリオペランドを有する命令に対してはメモリオペランドの数を基に、デコード段階で１つの命令を複数のパイプライン処理単位  （ステップコード）  に分解してパイプライン処理する。
【０１６０】
各パイプラインステージの入出力ステップコードには図３６に示したように便宜上名前が付けられている。またステップコードはオペレーションコードに関する処理を行ない、マイクロＲＯＭ８１  のエントリ番地あるいはＥステージ４０５  に対するパラメータになる系列と、Ｅステージ４０５  の処理対象のオペランドになる系列との２系列がある。また、Ｄステージ４０２  からＳステージ４０６  までの間では処理中の命令のプログラムカウンタ値（ＰＣ）が受け渡され、Ａステージ４０３  からＥステージ４０５  までの間ではスタックポインタ値（ＳＰ）が、更にはスコアボードレジスタ値も受け渡される。
【０１６１】
ＩＦステージ４０１  からＤステージ４０２  に渡される情報は命令コード４１１  そのものである。
Ｄステージ４０２  からＡステージ４０１  に渡される情報は命令で指定された演算に関するもの  （Ｄコード４１２  と称す）  と、オペランドのアドレス生成に関するもの（Ａコード４１３  と称す）  と、命令のプログラムカウンタ値との３つである。
【０１６２】
Ａステージ４０３  からＦステージ４０４  に渡される情報はマイクロプログラムルーチンのエントリ番地あるいはマイクロプログラムへのパラメータを含むＲコード４１４  、オペランドのアドレスとアクセス方法指示情報とを含むＦコード４１５  、更に処理中命令のプログラムカウンタ値とスタックポインタ値との４つである。
Ｆステージ４０４  からＥステージ４０５  に渡される情報は演算制御情報とリテラルとを含むＥコード４１６  、オペランドやオペランドアドレスを含むＳコード４１７  、それに処理中命令のプログラムカウンタ値とスタックポインタ値との４つである。Ｓコード４１７  はアドレスとデータとからなる。
【０１６３】
Ｅステージ４０５  からＳステージ４０６  に渡される情報はストアすべき演算結果であるＷコード４１８  とその演算結果を出力した命令のプログラムカウンタ値との２つである。Ｗコード４１８  はアドレスとデータとストア関連情報とからなる。
Ｅステージ４０５  が本来の命令実行ステージである。ＩＦ，  Ｄ，  Ａ，  Ｆステージは命令実行のための前処理を行なうステージであり命令コードあるいはオペランドの読み出しは行なうがメモリまたはレジスタの内容は一切変更しない。このため、これらのステージでの処理はＥステージ４０５  の処理結果に依存してキャンセルされる可能性がある。
【０１６４】
（４．２）  「命令フェッチステージ」
命令フェッチステージ  （ＩＦステージ）４０１では主として命令フェッチ部１１が動作し、内蔵命令キャッシュ２５または外部のメモリから命令をフェッチし、命令キュー２１，  ２２に入力して、命令デコード部１２に命令コードを出力する。命令キュー２１，  ２２の入力は、命令キャッシュ２５がヒットした場合は整置された１６バイト内の８バイト単位で、ミスした場合は整置された４バイト単位でそれぞれ行なわれる。命令キュー２１，  ２２は条件分岐命令に引き続く命令と分岐先命令との両方をフェッチするために２つ存在する。
【０１６５】
単一転送で外部のメモリから命令をフェッチする場合は整置された４バイトについて最小２クロックを要する。バーストモードによるブロック転送では１６バイトについて最小５クロックを要する。命令を外部からフェッチする場合はフェッチ先命令のアドレスが非キャッシュ領域であるか否か、あるいは  Ｉ／Ｏ領域であるか否かのチェックも行なわれる。  Ｉ／Ｏ領域からの命令フェッチは禁止されおり、ＥＩＴとなる。
【０１６６】
内蔵命令キャッシュ２５がヒットした場合は１クロックで整置された１６バイト内の任意の８バイトの命令がフェッチされる。命令キュー２１，  ２２の出力単位は２バイトごとに可変であり、１クロックの間に最大８バイトまで出力される。
内蔵命令キャッシュ２５の制御，  プリフェッチ先命令アドレスの管理，  命令キュー２１，  ２２の制御もＩＦステージが行なう。ＩＦステージ４０１  での処理を以下にまとめて示す。
【０１６７】
・命令コードのプリフェッチとＤステージ４０２  への出力
・２本の命令キュー２１，  ２２の管理
・命令プリフェッチアドレスのインクリメント
・命令キャッシュ２５の管理
・命令のアドレスが非キャッシュ領域に入るか否かのチェック
・命令のアドレスが  Ｉ／Ｏ領域に入るか否かのチェック
【０１６８】
（４．３）  「命令デコードステージ」
命令デコードステージ  （Ｄステージ）４０２では主として、命令デコード部１２のＤステージデコーダ３１，  拡張データ処理部３２及び分岐予測部３３と、ＰＣ生成部１５のＰＣ計算部４２，  ジャンプ先アドレス生成部４１及びＰＣスタック４４が動作する。
【０１６９】
Ｄステージ４０２  では、ＩＦステージ４０１  から入力された命令のオペレーションコードの前段デコードとアドレッシングモードのデコードとが行なわれる。デコードは１クロックに１度行なわれ、１回のデコード処理で０乃至８バイトの命令コードを消費する（一部の処理では命令コードを消費せずにステップコードの出力処理のみを行なう場合がある）。２つのメモリオペランドを有する命令や多段間接モードを使用する命令等のような１回のデコード処理ではデコードできない命令はこのステージで複数のステップコードに分解される。このため、命令全体のデコードが完了しなくても各クロックのデコード処理でＤコード４１２  とＡコード４１３  と命令のＰＣ値とが出力される。
【０１７０】
また、Ｄステージ４０２  では２命令の並列デコードを行ない、並列実行が可能な場合には２つの命令のデコード結果を同時に出力する。分岐予測部３３では条件分岐命令に対する分岐予測処理が行なわれる。各デコードサイクルで、命令キュー２１，  ２２の出力ポインタの更新情報が命令フェッチ部１１へ出力される。
【０１７１】
Ｄステージ４０２  では命令デコードに伴って消費した命令長を基にＰＣ生成部で各命令のＰＣ値を計算する。条件分岐命令，  絶対アドレスまたはＰＣ相対アドレスへのジャンプ命令  （サブルーチンジャンプ命令を含む），サブルーチンリターン命令に対してはＰＣ生成部で先行ジャンプ処理  （Ｄステージジャンプ）  を行なう。
【０１７２】
無条件ジャンプ命令をデコードして先行ジャンプを行なった場合はＩＦステージ４０１  に対して、現在使用中の命令キュー２１，  ２２の内容をキャンセルしてジャンプ先から命令をフェッチしてキューに入力し、そのコードを命令デコード部１２へ出力することを指示する。条件分岐命令をデコードした場合は分岐予測には関係なくＩＦステージ４０１  に対して、現在使用中のキューはそのままにしておき、もう一方の命令キューに分岐先から命令をフェッチして入力することを要求する。分岐すると予測する条件分岐命令では更に新規のキューから命令コードを命令デコード部１２へ出力することを指示する。
【０１７３】
Ｄステージ４０２  からは、１回のデコードでＡステージ４０３  に対してアドレス計算情報であるＡコード４１３  とオペレーションコードの中間デコード結果であるＤコード４１２  と命令のＰＣ値とが出力される。Ｄステージ４０２  での処理を以下にまとめて示す。
【０１７４】
・命令のオペレーションコードの前段デコード
・アドレッシングモードのデコード
・命令のステップコードへの分解
・命令キュー２１，  ２２の出力ポインタの更新情報
・ＰＣ値の計算
・条件分岐命令の分岐先アドレス計算
・条件分岐命令の分岐予測と先行分岐処理
・絶対アドレスまたはＰＣ相対アドレスへの先行ジャンプ処理
・サブルーチンリターン命令の先行リターン処理
【０１７５】
（４．４）  「アドレス生成ステージ」
アドレス生成ステージ  （Ａステージ）４０３では主として、命令デコード部１２のＡステージデコーダ３４及びサブコード転送部３５と、アドレス生成部１４と、整数演算部１６のＳＰ部２０４  と、ＰＣ生成部１５のＰＣ転送部４３とが動作する。
【０１７６】
Ａステージ４０３  はＤステージ４０２  から転送されたＤコード４１２  をデコードしてＲコード４１４  を出力し、Ａコード４１３  に従ってオペランドアドレスを生成してＦコード４１５  を出力する。Ｄステージ４０２  から転送されてきたＰＣ値はそのままＦステージ４０４  へ転送される。また、Ａステージ４０３  は命令実行ステージ４０５  とは独立に処理中命令のスタックポインタ値を計算してＦステージ４０４  へ転送する。
【０１７７】
Ａステージ４０３  では、Ｄステージ４０２  から出力されたオペレーションコードの中間デコード結果は更に詳細デコードされてマイクロＲＯＭ８１  のエントリアドレスとマイクロプログラムのパラメータとがＲコード４１４  として出力される。
【０１７８】
アドレス生成部１４はＡコード４１３  に従ってオペランドアドレスを生成する。レジスタ間接モードまたはレジスタ相対モードに対しては、ＩＸバス１０３  を経由して汎用レジスタの値が参照される。ディスプレースメント値，  即値，  絶対アドレス値はＡコード４１３  の一部として命令デコード部１２からＤＩＳＰバス１０２  を経由して転送されてくる。メモリ間接モードに対しては、生成した間接アドレスに対応して発生するステップコードがＦステージ４０４  及びＥステージ４０５  を介してメモリから目的とするアドレス値をフェッチするまで処理待ち状態となる。ＰＣ相対モードに対しては、Ｄステージ４０２  から転送された処理中命令のＰＣ値（ＡＰＣ）  が用いられる。スタックポップモードあるいはプッシュモードに対しては、専用の作業用スタックポインタでＳＰ値が計算される。計算されたＳＰ値はＦコード４１５  と共にＦステージ４０４  へ出力される。オペランドが即値である場合は、オペランドアドレスと同じ転送経路で即値が転送される。
【０１７９】
レジスタ間接ジャンプあるいはメモリ間接ジャンプ等の絶対ジャンプ及びＰＣ相対ジャンプ以外のジャンプ命令に対してはアドレス生成部１４でジャンプ先アドレスが計算されて先行ジャンプ処理  （Ａステージジャンプ）  が行なわれる。サブルーチンジャンプ命令の戻り先アドレスの計算では、ＰＣ計算部４２からＩＸバス１０３  を経由して送られるＡステージ４０３  で処理中の命令の次命令アドレスが参照される。条件分岐命令に対しては、分岐予測が誤った場合にはＰＣ生成部１５が初期化されるため、分岐予測側アドレスと反対側の命令アドレスとの双方が計算される。
【０１８０】
Ａステージ４０３  ではスコアボードレジスタ部５２へのデスティネーションオペランドの登録  （書き込み予約）  及びアドレス生成のためにレジスタあるいはメモリからデータを読み出す際のデータハザードのチェックも行なう。アドレス計算に使用するレジスタあるいはメモリがコンフリクトしてデータハザードが発生した場合には、パイプラインはインタロックされる。
【０１８１】
多段間接モードを使用しているためにＤステージ４０２  で複数のステップコードに分解された命令はＡステージ４０３  でオペランドのアドレスを計算して１つのステップコードに縮退する。
【０１８２】
複数オペランドのロード／ストアを行なう高機能命令はＡステージ４０３  で複数のステップコードに分解される。これらの命令はＡステージ４０３  で１つまたは２つのレジスタのデータを転送するステップコードに分解されて後続のパイプラインステージで処理される。各ステップコードでアクセスするメモリのアドレスはＡステージデコーダ３４から出力される制御信号  （ＡＡコード）  に従ってアドレス生成部１４が生成する。Ａステージ４０３  での処理を以下にまとめて示す。
【０１８３】
・命令のオペレーションコードの後段デコード
・オペランドアドレスの生成
・スタックポインタ値の計算
・条件分岐命令の分岐予測及び反対側の命令アドレスの計算
・サブルーチンジャンプ命令の戻り先アドレスの計算
・レジスタ間接，  レジスタ相対等のアドレッシングモードのジャンプ命令に
対する先行ジャンプ処理
・スコアボードレジスタ部５２へのデスティネーションの書き込み予約
・アドレス生成のためのデータハザードチェックとパイプランインタロック・複数オペランドの転送を行なう命令のステップコードへの分解
・ＰＣ値の転送
【０１８４】
（４．５）  「オペランドフェッチステージ」
オペランドフェッチステージ４０４（Ｆステージ）  では主として、  ＲＯＭ部１３と、オペランドアクセス部１７と、アドレス生成部１４のアドレス転送部５４及びスコアボードレジスタ部５２と、整数演算部１６のＳＰ部２０４  と、ＰＣ生成部１５のＰＣ転送部４３が動作する。
【０１８５】
Ｒコード４１４  に対する  ＲＯＭ部１３のマイクロＲＯＭ８１  アクセス動作とオペランドアクセス部１７の動作とは独立した制御のもとで行なわれる。これらの２つの動作を別々に扱う場合、  ＲＯＭ部１３のマイクロＲＯＭ８１  アクセス処理を特にＲステージの処理と称し、オペランドアクセス部１７の処理を特にＯＦステージの処理と称する。ＲステージはＲコード４１４  を入力とし、Ｅコード４１６  を出力する。ＯＦステージはＦコード４１５  を入力とし、Ｓコード４１７  を出力する。Ｆコード４１５  はキューングされないがＲコード４１４  は２つまでキューイングされ、Ｅコード４１６  はキューイングされないがＳコード４１７  は２つまでキューイングされる。また、Ｆステージ４０４  では、ＰＣ値，  ＳＰ値及びレジスタ書き込み予約情報等がステップコードの転送に同期して転送される。
【０１８６】
Ｒステージの処理であるマイクロＲＯＭ８１  アクセス処理は、次のＥステージ４０５  での実行に使用する実行制御コードであるＥコード４１６  を生成するためのＲコード４１４  に基づくマイクロＲＯＭ８１  アクセスとマイクロ命令デコード処理である。
【０１８７】
１つのＲコード４１４  に対する処理が２つ以上のマイクロプログラムステップに分解される場合、  ＲＯＭ部１３がＥステージ４０５  で使用され、次のＲコード４１４  がマイクロＲＯＭ８１  アクセス待ちになる可能性がある。Ｒコード４１４  に対するマイクロＲＯＭ８１  アクセスが行なわれるのはＥステージ４０５  でのマイクロＲＯＭ８１  アクセスが行なわれない場合である。本発明のデータ処理装置１では多くの整数演算命令が１マイクロプログラムステップで完了するため、実際にはＲコード４１４  に対するマイクロＲＯＭ８１  アクセスが次々と行なわれる可能性が高い。
【０１８８】
オペランドフェッチステージ４０４  ではＦコード４１５  のデータアドレスで内蔵データキャッシュ７４または外部のメモリをアクセスしてオペランドをフェッチし、そのオペランドとＦコード４１５  のデータアドレスとを組み合わせてＳコード４１７  を生成して出力する。
【０１８９】
１つのＦコード４１５  では、８バイト境界をクロスしてもよいが、８バイト以下のオペランドフェッチが指定される。Ｆコード４１５  にはオペランドのアクセスを行なうか否かの指定も含まれており、Ａステージ４０３  で計算したオペランドアドレス自体や即値がＥステージ４０５  へ転送される場合にはオペランドのフェッチは行なわれず、Ｆコード４１５  の内容がＳコード４１７  として転送される。Ｓコード４１７  は２つまでキューイング可能であるため、オペランドは２つまでプリフェッチ可能である。単一転送で外部のメモリからオペランドがフェッチされる場合は整置された４バイトについて最小２クロックを要する。バーストモードによるブロック転送では整置された１６バイトについて最小５クロックを要する。
【０１９０】
オペランドが外部からフェッチされる場合はフェッチ先のアドレスが制御レジスタで指定された非キャッシュ領域あるいは  Ｉ／Ｏ領域内か否かのチェックも行なわれる。  Ｉ／Ｏ領域からはオペランドのプリフェッチは行なわれない。この場合、先行命令がすべて実行を完了し、  Ｉ／Ｏ領域をアクセスする命令が実行されることが確実になった後にオペランドがフェッチされる。また、条件分岐命令（Ｂｃｃ，  ＡＣＢ，  ＳＣＢ）  または条件トラップ命令（ＴＲＡＰ）に引き続く命令の実行に際してデータキャッシュ７４がミスした場合、先行する条件分岐命令または条件トラップが実行されるまではオペランドのフェッチは行なわれない。これは、論理的には実行され得ない命令のオペランドプリフェッチが外部に対して行なわれることを抑止するためである。
【０１９１】
内蔵データキャッシュ７４がヒットした場合は整置された８バイトについて１クロックでオペランドがフェッチされる。
内蔵データキャッシュ７４の制御，  プリフェッチ先オペランドアドレスの管理，  Ｓコードキューの制御等もＯＦステージで行なわれる。以下にＦステージ４０４  での処理をまとめて示す。
【０１９２】
・マイクロＲＯＭ８１  のアクセス
・オペランドのプリフェッチ
・オペランドプリフェッチキュー２１０，  ７３  の管理
・データキャッシュ７４の管理
・オペランドのアドレスが非キャッシュ領域に入るか否かのチェック
・オペランドのアドレスがＩ／Ｏ  領域に入るか否かのチェック
・Ｉ／Ｏ  領域からのプリフェッチ抑止
・先行する条件分岐命令、条件トラップ命令の実行完了までの後続命令の外部メモリアクセス抑止
・ＰＣ値の転送
・ＳＰ値の転送
・レジスタ更新情報の転送
【０１９３】
（４．６）  「実行ステージ」
実行ステージ  （Ｅステージ）４０５ではＥコード４１６  及びＳコード４１７  を入力として主として整数演算部１６が動作する他、命令デコード部１２の分岐予測部３３と、ＰＣ生成部１５のＰＣ転送部４３及びＰＣスタック４４と、アドレス生成部１４のアドレス転送部５４及びスコアボードレジスタ部５２と、オペランドアクセス部１７と、更に各部に分散されている制御レジスタ部分等も動作する。
【０１９４】
このＥステージ４０５  が命令を実行するステージであり、Ｆステージ４０４  以前のステージでの処理はすべてＥステージ４０５  のための前処理である。Ｅステージ４０５  でジャンプが実行されたりあるいはＥＩＴ  処理が起動されたりした場合は、ＩＦステージ４０１  〜Ｆステージ４０４  までの処理はすべて無効化される。Ｅステージ４０５  はマイクロプログラムにより制御され、Ｒコード４１４  に示されたマイクロプログラムルーチンのエントリアドレスからの一連のマイクロ命令を実行することにより命令を実行する。
【０１９５】
マイクロＲＯＭ８１  の読み出しとマイクロ命令の実行とはパイプライン化されて行なわれる。マイクロプログラムの条件分岐はマイクロＲＯＭ８１  のＹデコーダ  （マイクロＲＯＭ８１  から同時に読み出した４つのマイクロ命令から目的のマイクロ命令をセレクトするためのデコーダ）  で行なわれるため、マイクロプログラムの条件分岐が発生した場合も１クロックの空きもなく次のマイクロ命令が実行される。
【０１９６】
Ｅステージ４０５  ではＡステージ４０３  で行なったスコアボードレジスタ部５２への書き込み予約の解除，  Ｄステージ４０２  での分岐予測が間違っていた場合の分岐予測部３３の分岐履歴の更新，  ＰＣスタック４４へのサブルーチンからの戻り先アドレスの登録，  プリリターンアドレスが正しいか否かのチェック等も行なわれる。
【０１９７】
各種の割り込みは命令の切れ目でＥステージ４０５  で直接受け付けられ、マイクロプログラムにより必要な処理が実行される。その他の各種ＥＩＴ  の処理もＥステージ４０５  でマイクロプログラムにより行なわれる。
演算の結果をメモリにストアする必要がある場合、Ｅステージ４０５  はＳステージ４０６  へＷコード４１８  とストア処理を行なう命令のプログラムカウンタ値とを出力する。メモリへのオペランドストアはすべてプログラムで論理的に指定された順序で行なわれる。
【０１９８】
ストア処理を行なう場合、データキャッシュの書換えの必要性を判断するためにＥステージ４０５  でデータキャッシュタグのチェックが行なわれる。このため、オペランドストア動作では実際のストア処理の前にＥステージ４０５  が１クロックサイクルの間データキャッシュを占有する。
【０１９９】
単純な命令を実行する場合は、Ｆステージ４０４  でオペランドをリードし、Ｅステージ４０５  で演算を実行し、Ｓステージ４０６  でオペランドをストアする。しかし、ストリング操作命令あるいはビットマップ操作命令を実行する場合は、Ｅステージ４０５  でバーストモードによるブロック転送（リード／ライト）を効率的に使用してメモリアクセスを行なう。従って、これらの命令では１ブロック＝１６バイトのデータがひとまとめにして処理される。また、２命令が並列にデコードされた場合には、主演算回路２０８  及び副演算回路２０９  と種々のバスを用いて２つの命令が並列実行される。以下にＥステージ４０５  での処理をまとめて示す。
【０２００】
・オペレーションコードで指定された命令オペレーションのマイクロプログ
ラムによる実行
・汎用レジスタ値，  制御レジスタ値の更新
・  ＰＳＷ中のフラグの更新
・リング毎に指定されたスタックポインタの更新
・  ＥＩＴ処理の受付と実行，  Ｅステージジャンプ
・スコアボードレジスタ部５２の書き込み予約解除
・分岐予測部３３の分岐履歴の更新
・プリリターンアドレスのチェック
・誤った先行ジャンプを訂正するためのＥステージジャンプ
・制御レジスタの更新及びインタロック命令の実行によるＥステージジャンプ
・ＰＣ値の転送
【０２０１】
（４．７）  「ストアステージ」
ストアステージ  （Ｓステージ）４０６ではオペランドアクセス部７４が動作する。Ｓステージ４０６  はＷコード４１８  のアドレスに従ってＷコード４１８  のデータを内蔵データキャッシュ７４にストアすると同時にＷコード４１８  をストアバッファ７５に入力して外部のメモリへＷコード４１８  のデータをストアする。
【０２０２】
ストアバッファ７５は２エントリあり、８バイトのデータ２つまでのストア要求をキューイング可能である。単一転送では、ストアバッファ７５から外部のメモリへのオペランドのストアが整置された４バイトについて最小２クロックに１回行なわれる。バーストモードのブロック転送では、ストアバッファ７５から外部のメモリへのオペランドのストアが整置された１６バイトについて最小５クロックで行なわれる。
Ｓステージ４０６  での動作はオペランドアクセス部１７で行なわれ、内蔵データキャッシュがミスした場合も入れ替え処理は行なわれない。以下にＳステージ４０６  での処理をまとめて示す。
【０２０３】
・データキャッシュ７４とメモリとへのストア
・ストアバッファ７５の管理
【０２０４】
（５）  「スーパースケーラ処理」
（５．１）  「スーパースケーラ処理の概要」
本発明のデータ処理装置１は、実行頻度が高い命令をそれに先行する命令と並列にデコードすることにより、両者を並列に実行する２命令のスーパースケーラ処理を行なう。
【０２０５】
具体的には、図２９に示されている命令デコード部１２のＤステージデコーダ３１が２つの命令（先行命令と後続命令）を並列にデコードし、２つの命令が並列に実行可能であると判断された場合には２つの命令のデコード結果を同時に出力する。この場合、Ｄコード４１２，Ｒコード４１４，Ｅコード４１６  では２つの命令の実行情報が転送されるが、各ステップコードの内の先行命令の実行情報に関するステップコードをメインコードと称し、後続命令の実行情報に関するステップコードをサブコードと称する。メインコードとサブコードとは基本的に各パイプラインステージで同期して処理される。そして、実際に２命令を並列に実行する場合、図３４に示した整数演算部１６において主演算回路２０８  がマイクロプログラム制御で先行命令を実行し、副演算回路２０７  がハードワイヤード制御で後続命令を実行する。先行命令が２マイクロ命令以上のマイクロプログラムで実行される場合、後続命令は先行命令の最終マイクロ命令が実行される際に並列に実行される。
【０２０６】
ところで、スーパースケーラ処理はハードウエアの制限により、すべての２命令の組み合せで可能なわけではない。２命令の並列実行が可能なのは、以下の条件を満たす場合である。詳細については後述する。
【０２０７】
・先行命令が２バイトまたは４バイト命令である。
・先行命令が分岐を発生しない。
・後続命令の実行前に、先行命令の実行に依存した例外処理が起動されない
。
・先行命令の最終マイクロステップで副演算回路２０７，Ｓ３バス１２２，Ｓ４バス１２３  あるいＤ２バス１２５  を使用しない。
・後続命令の命令基本部が１つである。後続命令は短縮形フォーマットの命令か１オペランド命令の場合に限られる。
・後続命令は副演算回路２０７  において１クロックサイクルで実行できる。
・オペランド干渉  （先行命令が更新するレジスタ値を後続命令が参照すること）  が発生しない。但し、以下の場合はオペランド干渉時にも並列実行が可能な場合がある。
・先行命令がレジスタへの転送命令である。
・後続命令が先行命令の演算結果をレジスタまたはメモリへ転送する命
令である。
・先行命令がシフト命令であり、後続命令が算術演算／論理演算／比
較命令である。
・先行命令が算術／論理演算命令であり、後続命令が左シフト命令で
ある。
・先行命令が算術演算命令であり、後続命令が算術演算／比較命令で
ある。
・先行命令と後続命令との双方がメモリ／即値オペランドを有していない。但し、２つの命令が連続したメモリ領域をアクセスするロード／ストア命令の場合には、並列に実行できる場合がある。
【０２０８】
２命令を並列に実行できる場合は以下のように分類できる。但し、ここで即値オペランドとは、命令基本部に埋め込まれた小さな即値（リテラル）を除く。
【０２０９】
・分類Ａ    ：後続命令がメモリ／即値オペランドを有していない。
・分類Ａ１  ：オペランド干渉なし。
・分類Ａ２  ：オペランド干渉有り。先行命令がレジスタへの転送命令。
・分類Ａ３  ：オペランド干渉有り。分類Ａ２以外で後続命令がレジスタ間転送命令。
・分類Ａ４  ：オペランド干渉有り。先行命令が３ビット以下の左シフト命令で、後続命令が算術演算／論理演算／比較命令。
・分類Ａ５  ：オペランド干渉有り。先行命令が算術／論理演算命令で、後続命令が３ビット以下の左シフト命令。
・分類Ａ６  ：オペランド干渉有り。先行命令が算術演算命令で、後続命令が算術演算／比較命令。
【０２１０】
・分類Ｂ    ：先行命令が即値／メモリオペランドを有しておらず、後続命令が即値／メモリオペランドを有する。
・分類Ｂ１  ：オペランド干渉なし。
・分類Ｂ２  ：後続命令が先行命令の演算結果をメモリへ転送する命令。
・分類Ｂ３  ：オペランド干渉有り。先行命令が３ビット以下の左シフト命令で、後続命令が算術演算／論理演算／比較命令。
・分類Ｂ４  ：オペランド干渉有り。先行命令が算術演算命令で、後続命令が算術演算／比較命令。
【０２１１】
・分類Ｃ    ：２つの命令がメモリオペランドを有する（連続領域アクセス）。
・分類Ｃ１  ：２つの命令が共にスタックポップを行なう転送命令。
・分類Ｃ２  ：２つの命令が共にスタックプッシュを行なう転送命令。
・分類Ｃ３    ：先行命令がレジスタ間接モード／レジスタ相対間接モードでオペランドを指定し、後続命令がレジスタ相対間接モードでオペランドを指定し、２つの命令が連続する２つのワードデータをロードする転送命令。
・分類Ｃ４    ：先行命令がレジスタ間接モード／レジスタ相対間接モードでオペランドを指定し、後続命令がレジスタ相対間接モードでオペランドを指定し、２つの命令が連続する２つのワードデータをストアする転送命令。
【０２１２】
（５．２）  「命令デコード部の並列デコード機構」
本発明のデータ処理装置１は、命令デコード部１２のＤステージデコーダ３１で２命令の並列デコードを行なう。図３７はそのＤステージデコーダ３１の構成例を示すブロック図である。
【０２１３】
Ｄステージデコーダ３１には、Ｄステージデコーダ３１自身を含むＤステージ４０２  の状態制御を行なうＤステージ制御部３０１，２命令を並列にデコードする場合の先行命令をデコードするためのメインデコーダ３０２，後続命令をデコードするためのサブデコーダ３０４，２命令の並列デコード／実行が可能か否かを判定する２命令並列デコード可否判定部３０３，Ｄコード４１２  を生成するＤコード生成部３０６，Ａコード４１３  を生成するＡコード生成部３０７  等が備えられている。
【０２１４】
メインデコーダ３０２  はＩＩバス１０１  の１〜４バイト目を入力し、最大４バイトの命令基本部と１ビットの分岐予測ビットとをデコードする。
【０２１５】
サブデコーダ３０４  には、第１ＳＯＰＤＥＣ  ３０８と第２ＳＯＰＤＥＣ  ３０９との２つのデコーダが備えられており、メインデコーダ３０２  でデコードされる命令に引き続く命令の命令基本部をデコードする。第１ＳＯＰＤＥＣ  ３０８は、メインデコーダ３０２  でデコードされる命令が２バイトであると仮定して、ＩＩバス１０１  の３バイト目と４バイト目とをデコードする。第２ＳＯＰＤＥＣ  ３０９は、メインデコーダ３０２  でデコードされる命令が４バイトであると仮定して、ＩＩバス１０１  の５バイト目と６バイト目とをデコードする。メインデコーダ３０２  でデコードされた命令とサブデコーダ３０４  でデコードされた命令とが、後述する並列デコード条件を満足する場合、２つのデコーダ３０８，  ３０９の出力の内のいずれか一方がＤコード生成部３０６  へ出力される。
【０２１６】
メインデコーダ３０２  及びサブデコーダ３０４  では、レジスタ番号，  サイズ，  オペレーションコードに埋め込まれた小さな即値（リテラル）等のパラメータとなるフィールドの切り出し処理も行なわれる。
【０２１７】
アドレッシングモードデコーダ３０５  は８ビットのオペランド指定子あるいは１６ビットの多段間接モードフィールドで指定される命令のアドレッシングモード部をデコードする。アドレッシングモードデコーダ３０５  には、ＩＩバス１０１  の２バイト目にある８ビットの一般形アドレッシングモードあるいは６ビットの短縮形アドレッシングモードをデコードする第１ＥＡＤＥＣ  ３１０  と、ＩＩバス１０１  の４バイト目にある８ビットの一般形アドレッシングモードあるいは６ビットの短縮形アドレッシングモードをデコードする第２ＥＡＤＥＣ  ３１１  と、ＩＩバス１０１  の１バイト目と２バイト目にある多段間接モードをデコードするＣＨＮＤＥＣ  ３１２との三つのデコーダが備えられている。アドレッシングモードデコーダ３０５  では、アドレス計算で参照するレジスタ番号の切り出し及び拡張データの切り出しに関する情報の生成も行なう。
【０２１８】
Ｄコード生成部３０６  には、先行命令のデコード結果であるメインＤコードを生成するメインＤコード生成部３１３  と、後続命令のデコード結果であるサブＤコードを生成するサブＤコード生成部３１４  とが備えられている。
【０２１９】
Ｄステージデコーダ３１は上述のようなハードウェア構成を採っているため、２命令を並列デコードする場合には、先行命令の最終デコードサイクルでの処理コード長が２バイトまたは４バイトの場合に限られる。先行命令は複数ステップに分解される命令であっても構わない。また、オペランドアドレス生成部１４にはアドレス計算のための加算器は１つのみがインプリメントされているため、メモリオペランドを有する命令を複数同時に処理することはきない。また特に、後続命令がメモリオペランドを有する場合は、アドレッシングモードデコーダ３０５  が上述のような構成を採っているため、特別な場合を除いては先行命令の最終デコードサイクルでの処理コード長が２バイトの場合に限られる。
【０２２０】
１サイクルで処理されるＩＩバス１０１  上の命令コードの位置関係を図３８の模式図に示す。ここで、２命令を並列にデコードできるのは、先行命令の最終デコードサイクル時のみである。
【０２２１】
図３８において、参照符号（ａ）  〜（ｄ）  にて示されている例は、先行命令が基本部１つのみの場合であり、これらの内で２命令を並列にデコードできるのは（ｂ）  〜（ｄ）  の例である。先行命令が即値／メモリオペランドを有していない場合には、後続命令はメモリ／即値オペランドを有していてもよく、３２ビットまでの拡張データを有していてもよい。
【０２２２】
参照符号（ｅ）  〜（ｇ）  にて示されている例は、先行命令が１つの基本部と１６ビットの拡張部とからなる例であり、これらの内で２命令を並列にデコードできるのは（ｆ）  〜（ｇ）  の例である。（ｅ）  の例に示されているように、通常、後続命令はメモリ／即値オペランドを有していてはいけない。（ｇ）  の例になるのは、レジスタ相対モードで連続領域のロード／ストアを行なう２つの転送命令が連続する場合のみである。
【０２２３】
参照符号（ｈ）  にて示されている例は、先行命令が１つの基本部と３２ビットの拡張部とからなる場合である。この場合、２命令の並列デコードは行なえない。
【０２２４】
参照符号（ｈ）  〜（ｋ）  にて示されている例は、先行命令の命令基本部を２つ同時にデコードする例である。この場合、（ｉ）  の例ように拡張部を有していない場合にのみ２命令の並列デコードが可能である。
【０２２５】
参照符号（ｌ）  にて示されている例は命令コードを消費しない場合を、（ｍ）  〜（ｐ）  にて示されている例は命令固有の拡張部のみを取り込む場合をそれぞれ示している。（ｎ）  あるいは（ｏ）  の例のように、拡張部を取り込む場合にも２命令の並列デコードが可能な場合がある。
【０２２６】
図３９に２命令並列デコード可否判定部３０３  のブロック図を示す。２命令並列デコード可否判定部３０３  には、レジスタ番号比較部３２１，拡張データ値判定部３２２，オペランド干渉判定部３２３，サブコード有効判定部３２４  等が備えられている。
【０２２７】
レジスタ番号比較部３２１  はレジスタオペランドの干渉判定を行なうためにＩＩバス１０１  上のレジスタ番号フィールドの比較を行なう。Ｄステージデコーダ３１で１サイクルに２命令を並列にデコードする場合、命令基本部に着目すると図４４の模式図に示されているような３つの場合に分けられる。
【０２２８】
図４４において、参照符号（Ａ）  は先行命令が命令基本部のみの２バイトの場合であり、ＲＬ１フィールド４２１  とＲＬ２フィールド４２３  とを、ＲＲ１フィールド４２２  とＲＲ２フィールド４２４  とをそれぞれ比較する必要がある。参照符号（Ｂ）  は先行命令が１つの命令基本部と１６ビットの拡張部を有する４バイトの場合であり、ＲＬ１フィールド４２１  とＲＬ３フィールド４２５  とを、ＲＲ１フィールド４２２  とＲＲ３フィールド４２６  とをそれぞれ比較する必要がある。参照符号（Ｃ）  は先行命令が２つの命令基本部を有する４バイトの場合であり、ＲＲ２フィールド４２４  とＲＬ３フィールド４２５  及びＲＲ３フィールド４２６  をそれぞれ比較する必要がある。但し、（Ｃ）  においては、ＲＬ２フィールド４２３  のレジスタを更新する場合があるが、それらの命令では２命令の並列デコードは行なわれない。これらのレジスタフィールドの比較を行なうためにレジスタ番号比較部３２１  には参照符号３２５  乃至３３４  にて示されている比較器１〜比較器１０の１０個の４ビット比較器が備えられている。
【０２２９】
拡張データ値判定部３３２  は、ロードあるいはストアを行なう２つの連続する転送命令が連続領域をアクセスするか否かを判定するために、レジスタ相対モードでオペランドが指定された場合の拡張データ（変位値）の判定を行なう。第１ＤＩＳＰ判定部３３５  では、ＩＩバス１０１  上の３バイト目と４バイト目（以下ＩＩ（１６：３１）  と示す）が”４”であるか否かを判定する。第２ＤＩＳＰ判定部３３６  では、ＩＩ（４８：６３）  で指定される変位値がＩＩ（１６：３１）  で指定される変位値”＋４”であるか否かを、減算により判定する。
【０２３０】
オペランド干渉判定部３２３  では、メインデコーダ３０２  から出力される各レジスタフィールドの更新情報と、サブデコーダ３０４  から出力される各レジスタフィールドの参照情報と、レジスタ番号比較部３２１  から出力される各レジスタフィールドの比較結果とを基に、レジスタオペランドの干渉判定を行なう。オペランド干渉判定部３２３  の詳細な論理構成例を図４０及び図４１の論理回路図に示す。但し、この論理回路図は機能的な処理内容を示すものである。なお、図４０と図４１とは、図４０の下側と図４１の上側とが接続された本来は一葉の図面である。
【０２３１】
サブコード有効判定部３２４  では、メインデコーダ３０２  から出力される先行命令に関する情報と、サブデコーダ３０４  から出力される後続命令に関する情報と、レジスタ番号比較部３２１  から出力される各レジスタフィールドの比較結果と、オペランド干渉判定部３２３  から出力されるレジスタオペランドの干渉情報と、拡張データ値判定部３２２  から出力される拡張データ値情報とに基づいて、２命令が並列デコード可能か否かを判定する。また、２つの命令の組み合せに依存するいくつかの制御信号の生成も行なう。サブコード有効判定部３２４  の詳細な論理構成例を図４２及び図４３の論理回路図に示す。但し、この論理図は機能的な処理内容を示すものである。なお、図４２と図４３とは、図４２の下側と図４３の上側とが接続された本来は一葉の図面である。
【０２３２】
メインデコーダ３０２  から出力されて２命令並列デコード可否判定部３０３  に入力される制御信号の一覧を表１に示す。なお、表１において、参照符号５０１  乃至５１４  の各信号はサブコード有効判定部３２４  に、参照符号５１５  乃至５１８  の各信号はオペランド干渉判定部３２３  にそれぞれ入力される。
【０２３３】
【表１】
0003543181.tif 000002
【０２３４】
注１）１命令の最終デコードサイクル。マイクロプログラムの最終ステップでサブのバス、演算器を使用しない。分岐を起こさない。パイプラインをパージしない。後続命令の実行前に、命令の実行に依存して例外を起動する可能性がない。明示的に指定されているレジスタ以外のレジスタを更新しない。多段間接モードでない。
【０２３５】
サブデコーダ３０４  の第１ＳＯＰＤＥＣ  ３０８から出力されて２命令並列デコード可否判定部３０３  に入力される制御信号の一覧を表２に示す。なお、表２において、参照符号５２１  乃至５３２  の各信号はサブコード有効判定部３２４  に、参照符号５３３  乃至５３７  の各信号はオペランド干渉判定部３２３  にそれぞれ入力される。
【０２３６】
【表２】
0003543181.tif 000003
【０２３７】
注２）命令コードが有効で例外が検出されていないことも判断。
【０２３８】
サブデコーダ３０４  の第２ＳＯＰＤＥＣ  ３０９から出力されて２命令並列デコード可否判定部３０３  に入力される制御信号の一覧を表３に示す。なお、表３において、参照符号５４１  乃至５４７  の各信号はサブコード有効判定部３２４  に、参照符号５４８  乃至５５０  の各信号はオペランド干渉判定部３２３  にそれぞれ入力される。
【０２３９】
【表３】
0003543181.tif 000004
【０２４０】
注３）命令コードが有効で例外が検出されていないことも判断。
【０２４１】
２命令並列デコード可否判定部３２１  の各ブロック間で転送される信号の一覧を表４に示す。なお、表４において、参照符号５５１  乃至５６０  の各信号はレジスタ番号比較部３２１  から、参照符号５６１  及び５６２  の各信号は拡張データ値判定部３２２  から、参照符号５７１  乃至５７９  の各信号はオペランド干渉判定部３２３  からそれぞれ出力される。
【０２４２】
【表４】
0003543181.tif 000005
【０２４３】
サブコード有効判定部３２４  から出力される信号の一覧を表５に示す。なお、表５において、参照符号５８１  乃至５９１  の各信号がサブコード有効判定部３２４  から出力される。
【０２４４】
【表５】
0003543181.tif 000006
【０２４５】
なお、これらの各表において、各信号の内容は、それぞれの値が”１”である場合の意味を示す。また、２命令並列デコード可否判定部３０３  のサブコード有効判定部３２４  で生成された信号はサブコードとして転送される。
【０２４６】
（５．３）  「命令実行部の並列実行機構」
命令デコード部１２で並列にデコードされた２つの命令は必ず並列に実行できる。基本的には、先行命令の最終マイクロステップにおいて先行命令は主演算回路２０８  とＳ１バス１０４，Ｓ２バス１２１  あるいはＤ１バス１２４  とを用いてマイクロ制御で実行され、後続命令は副演算回路２０７  とＳ３バス１２２，Ｓ４バス１２３  あるいはＤ２バス１２５  とを用いてハードワイヤード制御で実行される。
【０２４７】
図５９は主演算回路２０８  及び副演算回路２０７  のより詳細な構成例を示すブロック図である。
【０２４８】
主演算回路２０８  には、算術／論理演算を行なうメインＡＬＵ２３１，  ６４ビットデータのシフトが可能なメインシフタ２３２，他の演算器２３３  等が備えられている。複雑な処理を効率良く行なうために、各演算器の出力はＤ１バス１２４  の他、Ｄ２バス１２５  に結合されているものもある。他の演算器２３３  には、乗算器，  プライオリティエンコーダ，  カウンタ等の演算器が含まれる。
【０２４９】
副演算回路２０７  には、算術／論理演算を行なうサブＡＬＵ２３４，  ８ビットまでのシフトを行なうサブシフタ２３８，オペランド干渉のある２つの算術演算命令を並列に実行するための３値加算器２３７  等が備えられている。また、オペランド干渉のあるシフトカウント数が３以下のシフト命令と算術／論理演算／比較命令との２命令を並列に実行できるように、サブＡＬＵ２３４の入力側と出力側との双方に３ビット以下のシフト処理を行なう小さなシフタ２３５，  ２３６が接続されている。副演算回路２０７  内の演算器は主としてＳ３バス１２２，Ｓ４バス１２３，Ｄ２バス１２５  に結合されているが、オペランド干渉時のオペランドのバイパスや２命令の複合演算を行なうためにＳ１バス１０４  あるいはＳ２バス１２１  にも結合されている。
【０２５０】
（５．４）  「スーパースケーラ処理の詳細」
すべての場合をまとめて説明すると非常に複雑になるので、以下では前述の各分類毎にどのような処理が行なわれるかを、具体的な処理例に従って説明する。なお、以下の説明では、２命令を並列にデコードする際の先行命令を命令１と称し、後続命令を命令２と称する。
【０２５１】
（５．４．１）  「分類Ａ１の場合の処理」
まず、命令２がメモリ／即値オペランドを有しておらず、オペランド干渉がない分類Ａ１の場合について説明する。
【０２５２】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ａ１に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｆ），  （ｉ）  の３つの場合がある。命令１が後続のメモリ／即値オペランドを有していない命令２を並列に実行可能な場合、ＳＥＮＲ信号５０１  が”１”になる。また、命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有していない命令であった場合には、命令１のコード長に応じて  ＳＶＬＤ１信号５１２  または  ＳＶＬＤ２信号５４１  が”１”になる。
【０２５３】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。オペランド干渉があれば命令１のコード長に応じて  ＯＰＣＯＮＦ１信号５７１  または  ＯＰＣＯＮＦ２信号５７４  が”１”になる。命令１の処理コード長が２または４バイトで上述の条件をすべて満たす場合、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０２５４】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、命令１の処理コード長に従って、第１ＳＯＰＤＥＣ  ３０８または第２ＳＯＰＤＥＣ  ３０９の出力の一方を選択し、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  またはメインデコーダ３０２  の出力に基づいてＡコードを生成する。命令１が拡張データを有する場合には、拡張データ処理部３２で拡張データの切り出し及びＤＩＳＰバス１０２  への出力が行なわれる。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０２５５】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。また、命令１が即値／メモリオペランドを有する場合のアドレス計算，ＳＰ  値の補正等が行なわれる。また、命令１及び命令２のレジスタの更新情報がスコアボードレジスタ部５２に登録される。
【０２５６】
Ｆステージ４０４  では、命令１の処理に対応するマイクロ命令が読み出され、第１マイクロ命令デコーダ８５で命令１の実行制御情報が生成される。命令２の実行制御情報はサブＲコードをハードワイヤードでデコードすることにより第２マイクロ命令デコーダ８６で生成される。命令１の実行に複数のマイクロステップを要する場合には、命令１の最終マイクロステップで命令２の実行制御情報が有効になる。命令１の最終マイクロステップ以外では、第２マイクロ命令デコーダ８６は、マイクロＲＯＭ８１  から読み出されたマイクロ命令をデコードして命令１に関する実行制御情報を生成する場合もある。命令１がフェッチオペランドを有する場合には、オペランドアクセス部１７でオペランドがプリフェッチされる。
【０２５７】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。命令１は主演算回路２０８  とＳ１バス１０４，Ｓ２バス１２１  あるいはＤ１バス１２４  とを用いて実行される。命令２は副演算回路２０７  とＳ３バス１２２，Ｓ４バス１２３  あるいはＤ２バス１２５  とを用いて実行される。命令１がメモリへのオペランドストアを伴う場合、オペランドアクセス部１７でデータキャッシュ７４のタグチェック及びキャッシュのヒット／ミス判定が行なわれる。この場合、Ｓステージ４０６  で、キャッシュへのデータ書き込み及びメモリへのストアが行なわれる。
【０２５８】
以下に具体例に即して説明する。デスティネーションオペランドがレジスタである２つのＱフォーマットの加算命令（ＡＤＤ：Ｑ）  が連続する場合を考える。図４５の模式図にこの２命令をデコードする際の命令コードのＩＩバス１０１  上のビット位置を示す。命令１がＲ１（レジスタ１）に”４”を加える命令であり、命令２がＲ２に”８”を加える命令である。この場合、２命令の並列実行が可能な組み合わせであり、且つ命令１が書き換えるＲ１を命令２が参照することはないので、２命令が並列実行される。またこの場合、命令１の処理コード長が２バイトであるので、第１ＳＯＰＤＥＣ  ３０８の出力結果に基づいてサブＤコードが生成される。図４６の模式図に示すように、各パイプラインステージで２命令が並列に処理される。各パイプラインステージでは、１サイクルで２命令の処理を終了できる。
【０２５９】
各ステージでの具体的な処理の流れを図４７のフローチャートに示す。図４７に示したように、各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。
【０２６０】
（５．４．２）  「分類Ａ２の場合の処理」
ここでは、命令１がレジスタへの転送命令であり、命令２がメモリ／即値オペランドを有しておらず、オペランド干渉がある分類Ａ２の場合について説明する。命令の組み合せとしては分類Ａ１のサブセットになる。処理を簡略化するために、命令１の両オペランドサイズ及び命令２のデスティネーションオペランドサイズがワードである場合にのみ、ロードオペランドバイパスが可能としている。命令１のソースオペランドは、レジスタにあってもメモリにあってもよい。命令の実行頻度を考慮して、命令１がＬフォーマットの転送命令（ＭＯＶ：Ｌ）  であるか、またはデスティネーションオペランドがレジスタのＳフォーマットの転送命令（ＭＯＶ：Ｓ）  である場合に限って、オペランドのバイパス処理を行なう。
【０２６１】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ａ２に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｆ）の２つの場合がある。命令１が上述の転送命令である場合、  ＬＤＭＶＲ信号５０５  が”１”になる。また、命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有していない命令であり、デスティネーションオペランドサイズがワードであった場合には、命令１のコード長に応じて  ＬＢＹＰ１信号５２３  または  ＬＢＹＰ２信号５４２  が”１”になる。
【０２６２】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。オペランド干渉があれば命令１のコード長に応じて  ＯＰＣＯＮＦ１信号５７１  または  ＯＰＣＯＮＦ２信号５７４  が”１”になる。命令１の処理コード長が２または４バイトで上述の条件をすべて満たす場合、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になると共に、ロードオペランドのバイパスを行なうことを示す  ＬＤＢＹＰ信号５８３  が”１”になる。更に、命令２のソースオペランドをバイパスする場合にはＢＹＰＳＲＣ信号５８７  が、命令２のデスティネーションオペランドをバイパスする場合にはＢＹＰＤＳＴ信号５８８  がそれぞれ”１”になる。但し、双方が”１”になる場合もある。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。これらのオペランドバイパスに関する信号もサブＤコードとして出力され、転送されていく。その他の処理は分類Ａ１の場合と同じである。
【０２６３】
Ａステージ４０３  及びＦステージ４０４  における処理は、分類Ａ１の場合と同じである。
【０２６４】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。分類Ａ２が分類Ａ１と異なるのは、オペランドのバイパス処理を行なうことである。命令１は、Ｓ１バス１０４  へ出力されたソースオペランドデータを、メインＡＬＵ２３１，  Ｄ１バス１２４  を介して、デスティネーションとして指定されたレジスタに書き込むことにより実行される。命令２は基本的にはＳ３バス１２２，Ｓ４バス１２３，Ｄ２バス１２５  と副演算回路２０７  とで実行されるが、オペランド干渉があるデータはＳ３バス１２２，Ｓ４バス１２３  上のデータの代わりに、Ｓ１バス１０４  上のデータをバイパスして取り込むことにより、正しい結果が得られる。たとえば、命令２がサブＡＬＵ２３４で実行される際に、命令２のソースオペランドでオペランド干渉が起こっている場合、ラッチ２４４  にはＳ３バス１２２  の代わりにＳ１バス１０４  からデータがバイパスして取り込まれ、命令２のデスティネーションオペランドでオペランド干渉が起こっている場合、ラッチ２４５  にはＳ４バス１２３  の代わりにＳ１バス１０４  からデータがバイパスして取り込まれる。命令２がサブシフタ２３８  で実行されるシフト命令であり、命令２のデスティネーションオペランドでオペランド干渉が起こっている場合、ラッチ２５０  にはＳ４バス１２３  の代わりにＳ１バス１０４  からデータがバイパスして取り込まれる。命令２がサブシフタ２３８  で処理されるのは、シフトカウント値はリテラルが指定されるＱフォーマットのシフト命令のみであり、シフト命令のシフトカウント値をバイパスする必要がないからである。命令２が演算結果を命令１のデスティネーションと同一のレジスタに書き込みを行なう場合、Ｄ２バス１２５  からの書き込みが優先される。
【０２６５】
以下に具体例に即して説明する。命令１がＬフォーマットの転送命令（ＭＯＶ：Ｌ）  であり、レジスタ相対間接モードで指定されたメモリオペランドをＲ１にロードする命令であり、命令２がＲ１に”８”を加えるＱフォーマットの加算命令（ＡＤＤ：Ｑ）  である場合を考える。命令１のメモリオペランドのベースレジスタはＲ１３  であり、変位（ディスプレースメント）は１６であり、１６ビットの拡張データで指定されるものとする。図４８の模式図にこの２命令をデコードする際の命令コードのＩＩバス１０１  上のビット位置を示す。この場合、２命令間でオペランド干渉があるが、ロードオペランドバイパスを行なうことにより２命令を並列に実行できる命令の組み合せである。この場合、命令２のデスティネーションオペランドに関してロードオペランドバイパスを行なうので、  ＬＤＢＹＰ信号５８３  とＢＹＰＤＳＴ信号５８８  とが”１”になる。また、命令１の処理コード長が４バイトであるので、第２ＳＯＰＤＥＣ  ３０９の出力結果に基づいてサブＤコードが生成される。
【０２６６】
各ステージでの具体的な処理の流れを図４９のフローチャートに示す。各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。この例では、命令２がサブＡＬＵ１３４で実行される命令であり、命令２のデスティネーションオペランドに関してオペランドが干渉している。従って、サブＡＬＵ２３４のラッチ２４５  には命令１でＲ１にロードされるＳ１バス１０４  上の値が直接取り込まれて演算が行なわれている。Ｒ１には命令２の実行結果であるＤ２バス１２５  上のデータが書き込まれる。Ｄ１バス１２４  上のデータは書き込まれない。
【０２６７】
（５．４．３）  「分類Ａ３の場合の処理」
ここでは、命令１が演算結果をレジスタに書き込む命令であり、命令２が命令１の演算結果を別のレジスタへ転送する転送命令である分類Ａ３の場合について説明する。この場合も命令の組み合せとしては分類Ａ１のサブセットになる。処理を簡略化するために、命令１のデスティネーションオペランドのサイズ及び命令２の両オペランドのサイズがワードである場合にのみ、書き込みオペランドのバイパスが可能としている。命令１のソースオペランドは、レジスタにあってもメモリにあってもよい。但し、命令１は最終マイクロステップでレジスタへ書き込むデータをＤ１バス１２４  へ出力する命令であり、且つ命令２はＬフォーマットまたはＳフォーマットのレジスタ間転送を行なう転送命令（ＭＯＶ：Ｌ，ＭＯＶ：Ｓ）  である場合に限られる。
【０２６８】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ａ３に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｆ），  （ｉ）  の３つの場合がある。命令１がデスティネーションオペランドのサイズがワードであり、最終マイクロステップでＤ１バス１２４  を経由してレジスタへ書き込む命令である場合、  ＭＶＲＥＮ信号５０４  が”１”になる。また、命令２が上述のレジスタ間転送命令である場合には、命令１のコード長に応じてＭＶＲ１信号５２５  またはＭＶＲ２信号５４３  が”１”になる。
【０２６９】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。オペランド干渉があれば命令１のコード長に応じて  ＯＰＣＯＮＦ１信号５７１  または  ＯＰＣＯＮＦ２信号５７４  が”１”になる。命令１の処理コード長が２または４バイトで上述の条件をすべて満たす場合、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になると共に、書き込みオペランドのバイパスを行なうことを示す  ＢＹＰＤ１信号５８９  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。オペランドバイパスに関する信号もサブＤコードとして出力され、転送されていく。その他の処理は、分類Ａ１の場合と同じである。
【０２７０】
Ａステージ４０３  及びＦステージ４０４  における処理は、分類Ａ１の場合と同じである。
【０２７１】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。分類Ａ３が分類Ａ１と異なるのは、オペランドのバイパス処理を行なうことである。命令１の最終マイクロステップでは主演算回路２０８  のいずれかの演算器で演算が行なわれ、演算結果がＤ１バス１２４  を介して、デスティネーションとして指定されたレジスタに書き込まれる。命令２はこのＤ１バス１２４  へ出力された値を、命令２のデスティネーションとして指定されたレジスタに書き込むことにより、実行される。
【０２７２】
以下に具体例に即して説明する。命令１がＲ０の値をＲ１に加算するＬフォーマットの加算命令（ＡＤＤ：Ｌ）  であり、命令２がＲ１の値をＲ２へ転送するＬフォーマットの転送命令（ＭＯＶ：Ｌ）  である場合を考える。図５０の模式図にこの２命令をデコードする際の命令コードのＩＩバス１０１  上のビット位置を示す。この場合、２命令間でオペランド干渉があるが、書き込みオペランドのオペランドバイパスを行なうことにより２命令を並列に実行できる命令の組み合せである。この場合、  ＢＹＰＤ１信号５８９  が”１”になる。
【０２７３】
各ステージでの具体的な処理の流れを図５１のフローチャートに示す。各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。この例では、命令１がメインＡＬＵ２３１で実行され、演算結果がＤ１バス１２４  を経由してＲ１に書き込まれると共に、この値がＲ２にも書き込まれる。この場合、副演算回路２０７  では有効な処理は行なわれない。
【０２７４】
（５．４．４）  「分類Ａ４の場合の処理」
命令１が３ビット以下の左シフト命令であり、命令２が命令１のシフト結果を参照する算術演算／論理演算／比較命令である分類Ａ４の場合について説明する。命令の組み合せとしては分類Ａ１のサブセットになる。但し、２命令が並列に実行できるのは、命令１がＱフォーマットの論理シフト命令（ＳＨＬ：Ｑ）  であり、デスティネーションオペランドサイズがワードである場合のみである。
【０２７５】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ａ４に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ）  の場合のみである。命令１が後続のメモリ／即値オペランドを有していない命令２を並列に実行可能な場合、ＳＥＮＲ信号５０１  が”１”になる。更に、命令１がデスティネーションがレジスタで、サイズがワードであり、３ビット以下のシフトを行なう命令である場合、ＩＳＦＴ信号５０６  が”１”になる。命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有していない命令であった場合には、命令１のコード長に応じて  ＳＶＬＤ１信号５１２  が”１”になる。更に、命令２がサブＡＬＵ２３４で実行可能な算術演算／論理演算／比較命令であった場合には、  ＳＡＬＵ１信号５２６  が”１”になる。
【０２７６】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。オペランド干渉があれば命令１のコード長に応じて  ＯＰＣＯＮＦ１信号５７１  または  ＯＰＣＯＮＦ２信号５７４  が”１”になる。命令１の処理コード長が２または４バイトでオペランド干渉がなければ分類Ａ１になる。しかしこの場合、命令１の処理コード長が２バイトであればオペランド干渉があっても２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。また、シフト演算と  ＡＬＵ演算との複合演算を行なうことを示すＳＦＴＡＬＵ信号５８４  が”１”になる。更に、命令２のソースオペランドをバイパスする場合にはＢＹＰＳＲＣ信号５８７  が、命令２のデスティネーションオペランドをバイパスする場合にはＢＹＰＤＳＴ信号５８８  がそれぞれ”１”になる。但し、双方が”１”になる場合もある。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。これらのオペランドバイパスに関する信号もサブＤコードとして出力され、転送されていく。その他の処理は、分類Ａ１の場合と同じである。
【０２７７】
Ａステージ４０３  及びＦステージ４０４  における処理は、分類Ａ１の場合と同じである。
【０２７８】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。分類Ａ４が分類Ａ１と異なるのは、副演算回路２０７  でシフト演算と  ＡＬＵ演算との複合演算が行なわれることである。Ｓ１バス１０４  へ出力されたリテラル値（シフトカウント値）がラッチ２４１  に取り込まれ、Ｓ２バス１２１  へ出力されたデスティネーションデータがラッチ２４２  に取り込まれてメインシフタ２３２  でシフト演算が行なわれる。そのシフト結果がＤ１バス１２４  を介してデスティネーションとして指定されたレジスタに書き込まれることにより、命令１が実行される。副演算回路２０７  では、サブＡＬＵ２３４とその入力シフタ２３５  とを用いて、命令１と命令２との複合演算を行なう。入力シフタ２３５  では、Ｓ２バス１２１  から取り込んだデータに対してＳ１バス１０４  から取り込んだシフトカウント値に従ってシフト操作を行ない、シフト結果をラッチ２４４，  ２４５へ出力する。ラッチ２４４，  ２４５は、干渉していないオペランドデータはＳ３バス１２２  またはＳ４バス１２３  から取り込み、オペランドが干渉しているデータは入力シフタ２３５  の出力をそのデータとして取り込む。たとえば、命令２のソースオペランドでオペランド干渉が起こっている場合、ラッチ２４４  にはＳ３バス１２２  の代わりに入力シフタ２３５  の出力が取り込まれ、命令２のデスティネーションオペランドでオペランド干渉が起こっている場合、ラッチ２４５  にはＳ４バス１２３  の代わりに入力シフタ２３５  からデータが取り込まれる。サブＡＬＵ２３４では命令２で指定された演算が行なわれ、演算結果がＤ２バス１２５  を経由して命令１のデスティネーションとして指定されたレジスタに書き込まれる。命令１のデスティネーションと同一のレジスタに命令２が演算結果の書き込みを行なう場合、Ｄ２バス１２５  からの書き込みが優先される。入力シフタ２３５  で３ビットまでの左シフトのみを行なうのは、配列当等のアドレス計算で１〜３ビットの左シフトがよく用いられるためである。シフト可能なビット数を多くした場合には、シフタでの処理時間が長くなって動作周波数が向上しないためこのような設定にしてある。
【０２７９】
以下に具体例に即して説明する。命令１がＲ１の値を３ビット左シフトするＱフォーマットのシフト命令（ＳＨＬ：Ｑ）  であり、命令２がＲ１の値をＲ２に加算するＬフォーマットの加算命令（ＡＤＤ：Ｌ）  である場合を考える。この場合、２命令間でオペランド干渉があるが、命令１のシフト演算と命令２の加算とを複合演算として行なうことにより２命令を並列に実行できる命令の組み合せである。この場合、ＳＦＴＡＬＵ信号５８４  及びＢＹＰＳＲＣ信号５８７  が”１”になる。
【０２８０】
各ステージでの具体的な処理の流れを図５２のフローチャートに示す。各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。この例では、命令１がメインシフタ２３２  で実行され、演算結果がＤ１バス１２４  を経由してＲ１に書き込まれる。また、サブＡＬＵ２３４と入力シフタ２３５  を用いて、命令１のシフト演算と命令２の加算とが同じサイクルで実行され、Ｒ２に演算結果が書き込まれる。
【０２８１】
（５．４．５）  「分類Ａ５の場合の処理」
命令１が算術演算／論理演算命令であり、命令２が命令１の演算結果を参照する３ビット以下の左シフト命令である分類Ａ５の場合について説明する。命令の組み合せとしては分類Ａ１のサブセットになる。但し、２命令が並列に実行できるのは、命令２がＱフォーマットの論理シフト命令（ＳＨＬ：Ｑ）  である場合のみである。
【０２８２】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ａ５に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｆ），  （ｉ）  の３つの場合がある。命令１が後続のメモリ／即値オペランドを有していない命令２を並列に実行可能な場合、ＳＥＮＲ信号５０１  が”１”になる。更に、命令１がサブＡＬＵ２３４で実行可能な算術演算／論理演算であった場合には、ＳＡＬＵ信号５０７  が”１”になる。命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有していない命令であった場合には、命令１のコード長に応じて  ＳＶＬＤ１信号５１２  または  ＳＶＬＤ２信号５４１  が”１”になる。更に、命令２がサイズがワードであり、３ビット以下のシフトを行なう場合、命令１のコード長に応じて  ＯＳＦＴ１信号５２７  または  ＯＳＦＴ２信号５４４  が”１”になる。
【０２８３】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。オペランド干渉があれば命令１のコード長に応じて  ＯＰＣＯＮＦ１信号５７１  または  ＯＰＣＯＮＦ２信号５７４  が”１”になる。命令１の処理コード長が２または４バイトでオペランド干渉がなければ分類Ａ１になる。しかしこの場合、オペランド干渉があっても２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。また、  ＡＬＵ演算とシフト演算との複合演算を行なうことを示すＡＬＵＳＦＴ信号５８５  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。この複合演算に関する信号もサブＤコードとして出力され、転送されていく。その他の処理は、分類Ａ１の場合と同じである。
【０２８４】
Ａステージ４０３  及びＦステージ４０４  における処理は、分類Ａ１の場合と同じである。但しこの場合、副演算回路２０７  の演算制御情報の生成に、メインＲコード内の命令１のオペレーション情報が参照される。
【０２８５】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。分類Ａ５が分類Ａ１と異なるのは、副演算回路２０７  で  ＡＬＵ演算とシフト演算との複合演算が行なわれることである。Ｓ１バス１０４  へ出力されたソースオペランドデータはラッチ２３９  に取り込まれ、Ｓ２バス１２１  へ出力されたデスティネーションオペランドデータはラッチ２４０  に取り込まれてメインＡＬＵ２３１で算術／論理演算が行なわれ、演算結果がＤ１バス１２４  へ出力されることにより、命令１が実行される。副演算回路２０７  では、サブＡＬＵ２３４とその出力シフタ２３６  を用いて、命令１と命令２との複合演算を行なう。ラッチ２４４  にはＳ１バス１０４  へ出力されたソースオペランドデータが取り込まれ、ラッチ２４５  にはＳ２バス１２１  へ出力されたデスティネーションオペランドデータが取り込まれる。サブＡＬＵ２３４では、メインＡＬＵ２３１で実行される命令１の算術／論理演算と全く同じ演算を行ない、演算結果を出力シフタ２３６  へ出力する。ラッチ２４３  は、Ｓ３バス１２２  へ出力されたリテラル値（命令２のシフトカウント値）を取り込む。出力シフタ２３６  では、サブＡＬＵ２３４から取り込まれたデータをラッチ２４３  に取り込まれた値だけシフトする。シフト結果はＤ２バス１２５  を経由して命令２のデスティネーションとして指定されたレジスタに書き込まれる。この場合、命令１のデスティネーションになるレジスタと命令２のデスティネーションになるレジスタとは常に同じであり、Ｄ２バス１２５  から演算結果が書き込まれる。出力シフタ２３６  で３ビットまでの左シフトのみを行なう理由は、入力シフタ２３５  と同じ理由である。
【０２８６】
以下に具体例に即して説明する。命令１がＲ０の値をＲ１に加算するＬフォーマットの加算命令（ＡＤＤ：Ｌ）  であり、命令２がＲ１の値を３ビット左シフトするＱフォーマットのシフト命令（ＳＨＬ：Ｑ）  である場合を考える。この場合、２命令間でオペランド干渉があるが、命令１の加算と命令２のシフト演算とを複合演算として行なうことにより２命令を並列に実行できる命令の組み合せである。この場合、ＡＬＵＳＦＴ信号５８５  が”１”になる。
【０２８７】
各ステージでの具体的な処理の流れを図５３のフローチャートに示す。各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。この例では、命令１がメインＡＬＵ２３１で実行される。また、サブＡＬＵ２３４と出力シフタ２３６  を用いて、命令１の加算と命令２のシフトが同じサイクルで実行され、Ｄ２バス１２５  を経由してＲ１に演算結果が書き込まれる。
【０２８８】
（５．４．６）  「分類Ａ６の場合の処理」
命令１が算術演算命令であり、命令２が命令１の演算結果を参照する算術演算／比較命令である分類Ａ６の場合について説明する。命令の組み合せとしては分類Ａ１のサブセットになる。但し、干渉するオペランドのサイズがワードである場合に限る。
【０２８９】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ａ６に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｆ），  （ｉ）  の３つの場合がある。命令１が後続のメモリ／即値オペランドを有していない命令２を並列に実行可能な場合、ＳＥＮＲ信号５０１  が”１”になる。更に、命令１がデスティネーションがレジスタでサイズがワードの３値加算器２３７  で実行可能な算術演算命令であった場合には、ＴＡＤＤ信号５０８  が”１”になる。命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有していない命令であった場合には、命令１のコード長に応じて  ＳＶＬＤ１信号５１２  または  ＳＶＬＤ２信号５４１  が”１”になる。更に、命令２がサイズがワードであり、３値加算器２３７  で実行可能な算術演算／比較命令であった場合、命令１のコード長に応じて  ＴＡＤＤ１信号５２８  または  ＴＡＤＤ２信号５４５  が”１”になる。
【０２９０】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。オペランド干渉があれば命令１のコード長に応じて  ＯＰＣＯＮＦ１信号５７１  または  ＯＰＣＯＮＦ２信号５７４  が”１”になる。更に、命令２のソースオペランドとデスティネーションオペランドとが同じレジスタであった場合には、命令１のコード長に応じてＯＰＣＯＮＦＢ１信号５７２  またはＯＰＣＯＮＦＢ２信号５７５  が”１”になる。命令１の処理コード長が２または４バイトでオペランド干渉がなければ分類Ａ１になる。しかしこの場合、オペランド干渉があっても、命令２のソースオペランドとデスティネーションオペランドとが異なる場合は２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。また、３値加算器２３７  で２つの算術演算の複合演算を行なうことを示すＴＩＮＡＤＤ信号５８６  が”１”になる。更に、命令２のソースオペランドをバイパスする場合にはＢＹＰＳＲＣ信号５８７  が、命令２のデスティネーションオペランドをバイパスする場合にはＢＹＰＤＳＴ信号５８８  がそれぞれ”１”になる。但し、双方が”１”になることはない。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。この複合演算に関する信号もサブＤコードとして出力され、転送されていく。その他の処理は、分類Ａ１の場合と同じである。
【０２９１】
Ａステージ４０３  及びＦステージ４０４  における処理は、分類Ａ１の場合と同じである。但しこの場合、副演算回路２０７  の演算制御情報の生成に、メインＲコード内の命令１のオペレーション情報が参照される。
【０２９２】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。分類Ａ６が分類Ａ１と異なるのは、副演算回路２０７  で３値加算器２３７  を用いて２つの算術演算命令の複合演算が行なわれることである。Ｓ１バス１０４  へ出力されたソースオペランドデータはラッチ２３９  に取り込まれ、Ｓ２バス１２１  へ出力されたデスティネーションオペランドデータはラッチ２４０  に取り込まれてメインＡＬＵ２３１で算術演算が行なわれる。この演算結果がＤ１バス１２４  へ出力されて命令１のデスティネーションとして指定されたレジスタに書き込まれることにより、命令１が実行される。副演算回路２０７  では、３値加算器２３７  を用いて、命令１と命令２との複合演算を行なう。ソースオペランドが干渉する場合には、ラッチ２４７  にＳ１バス１０４  へ出力された命令１のソースオペランドデータが取り込まれ、ラッチ２４６  にＳ２バス１２１  へ出力された命令１のデスティネーションオペランドデータが取り込まれ、ラッチ２４８  にＳ４バス１２３  へ出力された命令２のデスティネーションオペランドデータが取り込まれる。デスティネーションオペランドが干渉する場合には、ラッチ２４７  にＳ１バス１０４  へ出力された命令１のソースオペランドデータが取り込まれ、ラッチ２４８  にＳ２バス１２１  へ出力された命令１のデスティネーションオペランドデータが取り込まれ、ラッチ２４６  にＳ３バス１２２  へ出力された命令２のソースオペランドデータが取り込まれる。３値加算器２３７  では、３つのラッチ２４６，２４７，  ２４８  に取り込まれた３値の加減算（命令１と命令２との複合演算）を行なう。演算結果はＤ２バス１２５  を経由して命令２のデスティネーションとして指定されたレジスタに書き込まれる。命令１の書き込みを行なうデスティネーションレジスタと命令２の書き込みを行なうデスティネーションレジスタとが同じ場合は、Ｄ２バス１２５  から演算結果が書き込まれる。
【０２９３】
以下に具体例に即して説明する。命令１がＲ０の値をＲ２に加算するＬフォーマットの加算命令（ＡＤＤ：Ｌ）  であり、命令２がＲ１の値をＲ２に加算するＬフォーマットの加算命令（ＡＤＤ：Ｌ）  である場合を考える。この場合、２命令間でオペランド干渉があるが、命令１の加算と命令２の加算とを複合演算として行なうことにより２命令を並列に実行できる命令の組み合せである。この場合、ＴＩＮＡＤＤ信号５８６  及びＢＹＰＤＳＴ信号５８８  が”１”になる。
【０２９４】
各ステージでの具体的な処理の流れを図５４のフローチャートに示す。各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。この例では、命令１がメインＡＬＵ２３１で実行される。また、３値加算器２３７  において、命令１と命令２との複合演算である３値の加算が行なわれ、Ｄ２バス１２５  を経由してＲ２に演算結果が書き込まれる。
【０２９５】
（５．４．７）  「分類Ｂ１の場合の処理」
次に分類Ｂについて説明する。まず、命令１がメモリ／即値オペランドを有しておらず、命令２がメモリ／即値オペランドを有し、オペランド干渉がない分類Ｂ１の場合について説明する。
【０２９６】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ｂ１に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｃ），  （ｄ）  の３つの場合がある。即ち、命令１の最終デコードサイクルでの処理コード長が２バイトである場合に限られる。これは、本実施例においてはアドレッシングモードをデコードするデコーダが、ＩＩバス１０１  上の２バイト目と４バイト目のみにインプリメントされているからである。命令１が後続のメモリ／即値オペランドを有する命令２を並列に実行可能な場合、ＳＥＮＭ信号５０２  が”１”になる。また、命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有する命令であった場合には、ＳＶＭ１信号５２２  が”１”になる。
【０２９７】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。命令実行に関するオペランド干渉がなければ  ＯＰＣＯＮＦ１信号５７１  が”０”になる。また、命令２のＳＰ値を含めアドレス計算で参照するレジスタ値を命令１が更新しなければ、ＯＰＣＯＮＦＡ１信号５７３  が”０”になる。命令１の処理コード長が２バイトで、オペランド干渉がなければ、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。またこの場合、命令２に対応してＡコードが生成されるので、  Ｉ２ＡＣＤ信号５８２  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０２９８】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、第１ＳＯＰＤＥＣ  ３０８の出力と２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  の出力に基づいてＡコードを生成する。但し、この場合は命令２に関してＡコードが生成される必要がある。従って、第２ＥＡＤＥＣ  ３１１  の出力と第１ＳＯＰＤＥＣ  ３０８の出力とに基づいてＡコードが生成される。命令２が拡張データを有する場合には、拡張データ処理部３２で拡張データの切り出し及びＤＩＳＰバス１０２  への出力が行なわれる。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０２９９】
Ａステージ４０３  以降の処理は、命令２のオペランドについてオペランドアドレス計算あるいはメモリアクセスが行なわれることを除いては、分類Ａ１の処理と全く同じである。
【０３００】
（５．４．８）  「分類Ｂ２の場合の処理」
命令１がメモリ／即値オペランドを有しておらず、命令２が命令１の演算結果をメモリにストアする転送命令である分類Ｂ２の場合について説明する。命令１のデスティネーションオペランドのサイズ及び命令２の両オペランドのサイズがワードである場合にのみ、書き込みオペランドのバイパスが可能である。また、命令１は最終マイクロステップでレジスタへ書き込むデータをＤ１バス１２４  へ出力する命令であり、且つ命令２はＳフォーマットのストアを行なう転送命令（ＭＯＶ：Ｓ）  である場合に限られる。
【０３０１】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ｂ２に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｃ），  （ｄ）  の３つの場合がある。即ち、命令１の最終デコードサイクルでの処理コード長が２バイトである場合に限られる。命令１が最終マイクロステップでレジスタへ書き込むデータをＤ１バス１２４  へ出力し、メモリ／即値オペランドを有しておらず、後続のストア命令を並列に実行可能な場合、ＳＴＥＮ信号５０３  が”１”になる。また、命令２がオペランドサイズがワードのメモリへレジスタ値をストアするＳフォーマットの転送命令であった場合には、  ＳＴ１信号５２４  が”１”になる。
【０３０２】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。命令実行に関するオペランド干渉がなければ  ＯＰＣＯＮＦ１信号５７１  が”１”になる。また、命令２のＳＰ値を含めアドレス計算で参照するレジスタ値を命令１が更新しなければ、ＯＰＣＯＮＦＡ１信号５７３  が”０”になる。命令１の処理コード長が２バイトで、アドレス計算に関するオペランド干渉がなければ、実行オペランドに関するオペランド干渉があっても２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になると共に、書き込みオペランドのバイパスを行なうことを示す  ＢＹＰＤ１信号５８９  が”１”になる。またこの場合、命令２に対応してＡコードが生成されるので  Ｉ２ＡＣＤ信号５８２  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。その他の処理は、分類Ａ１の場合と同じである。
【０３０３】
Ａステージ４０３  及びＦステージ４０４  における処理は、分類Ｂ１の場合と同じである。
【０３０４】
Ｅステージ４０５  では、命令１の最終ステップで２つの命令が並列に実行される。分類Ｂ２が分類Ｂ１と異なるのは、オペランドのバイパス処理を行なうことである。命令１の最終マイクロステップでは主演算回路２０８  のいずれかの演算器で演算が行なわれ、演算結果がＤ１バス１２４  を介して、デスティネーションとして指定されたレジスタに書き込まれる。命令２はこのＤ１バス１２４  へ出力された値を、ＤＤＷ２１２を経由してＤＤバス１０７  へ出力し、Ｓステージ４０６  でこのデータをデータキャッシュ７４あるいは外部メモリの命令２で指定されるアドレス位置に書き込むことにより実行される。
【０３０５】
以下に具体例に即して説明する。命令１がＲ０の値をＲ１に加算するＬフォーマットの加算命令（ＡＤＤ：Ｌ）  であり、命令２がＲ１の値をレジスタ相対間接モードで指定されたメモリにストアするＳフォーマットの転送命令（ＭＯＶ：Ｓ）  である場合を考える。命令１のメモリオペランドのベースレジスタはＲ１３  であり、変位（ディスプレースメント）は”１６”であり、１６ビットの拡張データで指定されるものとする。この場合、２命令間でオペランド干渉があるが、書き込みオペランドのオペランドバイパスを行なうことにより並列に実行可能な命令の組み合せであり、  ＢＹＰＤ１信号５８９  が”１”になる。
【０３０６】
各ステージでの具体的な処理の流れを図５５のフローチャートに示す。各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。この例では、命令１がメインＡＬＵ２３１で実行され、演算結果がＤ１バス１２４  を通じてＲ１に書き込まれると共に、命令２で指定されている処理に対応して、この値がメモリにも書き込まれる。この場合、副演算回路２０７  では、有効な処理は行なわれない。
【０３０７】
（５．４．９）  「分類Ｂ３の場合の処理」
命令１がメモリ／即値オペランドを有していない３ビット以下の左シフト命令であり、命令２がメモリ／即値オペランドを有し、命令１の演算結果を参照する算術演算／論理演算／比較命令である分類Ｂ３の場合について説明する。命令の組み合せとしては分類Ｂ１のサブセットになる。但し、２命令が並列に実行できるのは、命令１がＱフォーマットの論理シフト命令（ＳＨＬ：Ｑ）  であり、デスティネーションオペランドサイズがワードである場合のみである。
【０３０８】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ｂ１に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｃ），  （ｄ）  の３つの場合がある。即ち、命令１の最終デコードサイクルでの処理コード長が２バイトである場合に限られる。命令１が後続のメモリ／即値オペランドを有する命令２を並列に実行可能な場合、ＳＥＮＭ信号５０２  が”１”になる。更に、命令１がデスティネーションがレジスタで、サイズがワードであり、３ビット以下のシフトを行なう場合、ＩＳＦＴ信号５０６  が”１”になる。また、命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有する命令であった場合には、ＳＶＭ１信号５２２  が”１”になる。更に、命令２がサブＡＬＵ２３４で実行可能な算術演算／論理演算／比較命令であった場合には、  ＳＡＬＵ１信号５２６  が”１”になる。
【０３０９】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。命令実行に関するオペランド干渉があれば  ＯＰＣＯＮＦ１信号５７１  が”１”になる。また、命令２のＳＰ値を含めアドレス計算で参照するレジスタ値を命令１が更新しなければ、ＯＰＣＯＮＦＡ１信号５７３  が”０”になる。命令１の処理コード長が２バイトで、オペランド干渉がなければ分類Ｂ１になる。しかしこの場合、命令１の処理コード長が２バイトで、命令２がアドレス計算で参照するオペランドでオペランド干渉がなければ実行オペランド干渉があっても２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、命令２に対応してＡコードを生成するので、  Ｉ２ＡＣＤ信号５８２  が”１”になる。また、シフト演算と  ＡＬＵ演算との複合演算を行なうことを示すＳＦＴＡＬＵ信号５８４  が”１”になる。更に、命令２のソースオペランドをバイパスする場合にはＢＹＰＳＲＣ信号５８７  が、命令２のデスティネーションオペランドをバイパスする場合にはＢＹＰＤＳＴ信号５８８  がそれぞれ”１”になる。但し、双方が”１”になる場合もある。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。これらのオペランドバイパスに関する信号もサブＤコードとして出力され、転送されていく。その他の処理は、分類Ａ１の場合と同じである。
【０３１０】
Ａステージ４０３  以降の処理は、命令２のオペランドについてオペランドアドレス計算あるいはメモリアクセスが行なわれることを除いては、分類Ａ４の処理と全く同じである。
【０３１１】
（５．４．１０）分類Ｂ４の場合の処理
命令１がメモリ／即値オペランドを有していない算術演算命令であり、命令２がメモリ／即値オペランドを有し、命令１の演算結果を参照する算術演算／比較命令である場合について説明する。命令の組み合せとしては分類Ｂ１のサブセットになる。但し、干渉するオペランドのサイズがワードである場合に限る。
【０３１２】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ｂ１に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ），  （ｃ），  （ｄ）  の３つの場合がある。即ち、命令１の最終デコードサイクルでの処理コード長が２バイトである場合に限られる。命令１が後続のメモリ／即値オペランドを有する命令２を並列に実行可能な場合、ＳＥＮＭ信号５０２  が”１”になる。更に、命令１がデスティネーションがレジスタでサイズがワードの３値加算器２３７  で実行可能な算術演算命令であった場合には、ＴＡＤＤ信号５０８  が”１”になる。また、命令２が副演算回路２０７  で１サイクルで実行可能なメモリ／即値オペランドを有する命令であった場合には、ＳＶＭ１信号５２２  が”１”になる。更に、命令２がサイズがワードであり、３値加算器２３７  で実行可能な算術演算／比較命令であった場合、  ＴＡＤＤ１信号５２８  が”１”になる。
【０３１３】
オペランド干渉判定部３２３  では、命令１が更新するオペランドを命令２が参照するか否かを判定する。命令実行に関するオペランド干渉があればＯＰＣＯＮＦ１  信号５７１  が”１”になる。また、命令２のＳＰ値を含めアドレス計算で参照するレジスタ値を命令１が更新しなければ、ＯＰＣＯＮＦＡ１信号５７３  が”０”になる。命令１の処理コード長が２バイトで、オペランド干渉がなければ分類Ｂ１になる。しかしこの場合、命令１の処理コード長が２バイトで、命令２がアドレス計算で参照するオペランドでオペランド干渉がなければ実行オペランド干渉があっても２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、命令２に対応してＡコードが生成されるので、  Ｉ２ＡＣＤ信号５８２  が”１”になる。また、３値加算器２３７  で２つの算術演算の複合演算を行なうことを示すＴＩＮＡＤＤ信号５８６  が”１”になる。更に、命令２のソースオペランドをバイパスする場合にはＢＹＰＳＲＣ信号５８７  が、命令２のデスティネーションオペランドをバイパスする場合にはＢＹＰＤＳＴ信号５８８  がそれぞれ”１”になる。但し、双方が”１”になる場合もある。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。これらのオペランドバイパスに関する信号もサブＤコードとして出力され、転送されていく。その他の処理は、分類Ａ１の場合と同じである。
【０３１４】
Ａステージ４０３  以降の処理は、命令２のオペランドについてオペランドアドレス計算あるいはメモリアクセスが行なわれることを除いては、分類Ａ４の処理と全く同じである。
【０３１５】
（５．４．１１）「分類Ｃ１の場合の処理」
命令１と命令２が共にスタックトップのデータをポップしてレジスタにロードする転送命令である分類Ｃ１の場合について説明する。この２つの命令は、メモリ上の連続領域をアクセスするので、２命令の並列デコードが可能である。命令１，命令２共にデスティネーションがレジスタであるポップ命令（ＰＯＰ）  またはソースがポップモードで指定されたＬフォーマットの転送命令（ＭＯＶ：Ｌ）  であり、オペランドサイズがワードである場合にのみ、並列実行が可能である。また、命令１がＳＰ値に値をロードしない場合に限られる。
【０３１６】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ｃ１に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ）  の場合のみである。命令１が前述のスタックトップのデータをポップしてレジスタにロードする転送命令であり、オペランドサイズがワードであり、ロードするレジスタがＳＰでない場合に、  ＰＯＰ信号５０９  が”１”になる。また、命令２が前述のスタックトップのデータをポップしてレジスタにロードする転送命令であり、オペランドサイズがワードである場合に、ＰＯＰ１信号５２９  が”１”になる。命令１の処理コード長が２バイトの時、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、２ワードの並列転送を行なうので、ＭＯＶ２Ｗ信号５０９  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。
【０３１７】
サブＤコード生成部３１４  では、第１ＳＯＰＤＥＣ  ３０８の出力と、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  またはメインデコーダ３０２  の出力に基づいてＡコードを生成する。但し、  ＭＯＶ２Ｗ信号５９０  が”１”になったことに対応して、オペランドのサイズが８バイトに補正される。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０３１８】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。アドレス計算部５３では、ＡＳＰ２２１の値を参照することによりオペランドアドレスが生成される。また、ＡＳＰ２２１は  ＡＳＰ加算器２２４  により”＋８”だけ補正される。また、命令１及び命令２のレジスタの更新情報がスコアボードレジスタ部５２に登録される。
【０３１９】
Ｆステージ４０４  では、命令１の処理に対応するマイクロ命令が読み出され、第１マイクロ命令デコーダ８５で命令１の実行制御情報が生成される。命令２の実行制御情報はサブＲコードをハードワイヤードでデコードすることにより第２マイクロ命令デコーダ８６で生成される。また、オペランドアクセス部１７でオペランドがプリフェッチされる。この場合、オペランドサイズが８バイトであるものとしてオペランドがプリフェッチされる。この８バイトが８バイト境界内にある場合は、キャッシュがヒットすると８バイトのデータが１サイクルでフェッチされる。
【０３２０】
Ｅステージ４０５  では、２つの命令が並列に実行される。フェッチされた８バイトのデータの上位４バイトをＳ１バス１０４，ラッチ２３９，メインＡＬＵ２３１，  Ｄ１バス１２４  を経由してデスティネーションとして指定されたレジスタにロードオペランドとして書き込むことにより、命令１が実行される。フェッチされた８バイトのデータの下位４バイトをＳ３バス１２２，ラッチ２４４，サブＡＬＵ２３４，  Ｄ２バス１２５  を経由してデスティネーションとして指定されたレジスタにロードオペランドとして書き込むことにより、命令２が実行される。
【０３２１】
以下に具体例に即して説明する。ポップモードでソースオペランドが指定される、デスティネーションオペランドがレジスタであるＬフォーマットの転送命令（ＭＯＶ：Ｌ）  が連続する場合を考える。命令１がＲ０に、命令２がＲ１にロードする命令とする。この場合、２命令の並列実行が可能な組み合わせであり、且つ命令１がＳＰ（Ｒ１５）にロードしないので、２命令が並列実行される。またこの場合、命令１の処理コード長が２バイトであるので、第１ＳＯＰＤＥＣ  ３０８の出力結果に基づいてサブＤコードが生成される。
【０３２２】
各ステージでの具体的な処理の流れを図５６のフローチャートに示す。図５６に示したように、各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。Ａステージ４０３  では、ＡＳＰ２２１の値が”＋８”だけ補正される。Ｆステージ４０４  では、８バイト（２ワード）のデータがフェッチされる。Ｅステージ４０５  では、命令１，命令２で指定されたデスティネーションレジスタに２ワードのデータが並列に転送される。Ａステージ４０３  では、更新されたＡＳＰ２２１の値は、パイプライン処理に同期してＥＳＰ２２６あるいはマスタＳＰ２２８  へ転送されていく。
【０３２３】
（５．４．１２）「分類Ｃ２の場合の処理」
命令１及び命令２が共にレジスタ上のデータをスタックトップにプッシュする転送命令である分類Ｃ２の場合について説明する。この２つの命令は、メモリ上の連続領域をアクセスするので、２命令の並列デコードが可能である。命令１，命令２共にソースがレジスタであるプッシュ命令（ＰＵＳＨ）またはデスティネーションがプッシュモードで指定されたＳフォーマットの転送命令（ＭＯＶ：Ｓ）  であり、オペランドサイズがワードである場合にのみ、並列実行が可能である。また、命令２がＳＰ値をストアしない場合に限られる。
【０３２４】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。分類Ｃ１に対応するＩＩバス１０１  上の命令コードの位置としては、図３８の（ｂ）  の場合のみである。命令１が前述のレジスタ値をスタックトップにプッシュする転送命令であり、オペランドサイズがワードである場合に、ＰＵＳＨ信号５１０  が”１”になる。また、命令２が前述のＳＰ以外のレジスタ値をスタックトップにプッシュする転送命令であり、オペランドサイズがワードである場合に、  ＰＵＳＨ１信号５３０  が”１”になる。命令１の処理コード長が２バイトの時、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、２ワードの並列転送が行なわれるので  ＭＯＶ２Ｗ信号５０９  が”１”になると共に、２ワードのプッシュを行なうことを示すＰＵＳＨ２Ｗ信号５９１  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０３２５】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、第１ＳＯＰＤＥＣ  ３０８の出力と、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  またはメインデコーダ３０２  の出力に基づいてＡコードを生成する。但し、  ＭＯＶ２Ｗ信号５９０  が”１”になったことに対応して、オペランドのサイズが８バイトに補正される。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０３２６】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。アドレス計算部５３では、ＡＳＰ２２１の値を参照し、”８”デクリメントすることによりオペランドアドレスが生成される。また、ＡＳＰ２２１は  ＡＳＰ加算器２２４  により”−８”だけ補正される。
【０３２７】
Ｆステージ４０４  では、命令１の処理に対応するマイクロ命令が読み出され、第１マイクロ命令デコーダ８５で命令１の実行制御情報が生成される。命令２の実行制御情報はサブＲコードをハードワイヤードでデコードすることにより第２マイクロ命令デコーダ８６で生成される。
【０３２８】
Ｅステージ４０５  では、２つの命令が並列に実行される。命令１でプッシュするデータがレジスタファイル２０５  から、Ｓ１バス１０４，ラッチ２３９，メインＡＬＵ２３１，  Ｄ１バス１２４  を経由してＤＤＷ２１２へ転送される。命令２でプッシュするデータがレジスタファイル２０５  から、Ｓ３バス１２２，ラッチ２４４，サブＡＬＵ２３４，  Ｄ２バス１２５  を経由してＤＤＷ２１２へ転送される。この場合、連続するプッシュ命令を処理するので、ＰＵＳＨ２Ｗ信号５９１  が”１”になったことに対応して、命令２でストアするデータが上位に、命令１でストアするデータが下位になるようにＤＤＷ２１２内の整置回路で整置及び連結を行なってストアすべき８バイトデータが生成されてＤＤバス１０７  を経由してオペランドアクセス部１７へ転送される。Ｓステージ４０６  では、このデータがデータキャッシュ７４あるいは外部メモリの命令２で指定されるアドレス位置に書き込まれる。この８バイトが８バイト境界内にある場合、ストアバッファへの登録は１サイクルで終了する。
【０３２９】
以下に具体例に即して説明する。デスティネーションがプッシュモードで指定されるＳフォーマットの転送命令（ＭＯＶ：Ｓ）  が連続する場合を考える。命令１がＲ０を、命令２がＲ１をプッシュする命令とする。この場合、２命令の並列実行が可能な組み合わせであり、且つ命令２がＳＰ（Ｒ１５）値をプッシュしないので、２命令が並列実行される。またこの場合、命令１の処理コード長が２バイトであるので、第１ＳＯＰＤＥＣ  ３０８の出力結果に基づいてサブＤコードが生成される。
【０３３０】
各ステージでの具体的な処理の流れを図５７のフローチャートに示す。図５７に示したように、各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。Ａステージ４０３  では、アドレス計算部５３でＡＳＰ２２１の値を”８”デクリメントすることにより、オペランドアドレスを計算し、ＡＳＰ２２１の値が”−８”だけ補正される。Ｅステージ４０５  では、命令１，命令２でソースとして指定されたレジスタ値を転送し、Ｓステージでは、連結された８バイトデータをデータキャッシュ７４あるいは外部メモリに書き込む。Ａステージ４０３  では、更新されたＡＳＰ２２１の値がパイプライン処理に同期してＥＳＰ２２６あるいはマスタＳＰ２２８  へ転送されていく。
【０３３１】
（５．４．１３）「分類Ｃ３の場合の処理」
命令１と命令２が共にレジスタ間接／レジスタ相対間接モードでソースオペランドが指定され、レジスタにロードする転送命令である分類Ｃ３の場合について説明する。この２つの命令がメモリ上の連続領域をアクセスする場合には、２命令の並列デコードが可能である。命令１，命令２が共にＬフォーマットの転送命令（ＭＯＶ：Ｌ）  であり、オペランドサイズがワードである場合にのみ、並列実行が可能である。大きく分けて２つの場合に並列実行が可能である。並列実行が可能な２つの場合の命令コードを図５８の模式図に示す。
【０３３２】
一方は参照符号（ａ）  に示されているように、命令１がレジスタ間接モードであり、命令２が１６ビット変位のレジスタ相対間接モードである場合である。並列実行が可能な条件は、命令１のオペランドアドレス計算時のベースレジスタ５０２  と命令２のベースレジスタ５０３  とが同じで、命令２のディスプレースメント（変位）５０４  の値が”４”であり、命令１が更新するレジスタ５０１  が命令２のアドレス計算のベースアドレスレジスタ５０３  とは異なることである。この場合は、命令１が２バイトである。
【０３３３】
他方は参照符号（ｂ）  に示されているように、命令１及び命令２が共に１６ビット変位のレジスタ相対間接モードである場合である。並列実行が可能な条件は、命令１のオペランドアドレス計算時のベースレジスタ５０６  と命令２のベースレジスタ５０８  とが同じで、命令２のディスプレースメント（変位）５０９  の値が命令１のディスプレースメント（変位）５０７  の値より”４”だけ大きく、命令１が更新するレジスタ５０５  が命令２のアドレス計算のベースアドレスレジスタ５０８  とは異なることである。この場合は、命令１が４バイトである。
【０３３４】
まず、命令１がレジスタ間接モードのロード命令である場合について説明する。
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。命令１が前述のレジスタ間接モードのロード命令であり、オペランドサイズがワードである場合に、ＲＩＬＤ信号５１１  が”１”になる。また、命令２が前述のレジスタ相対間接モードのロード命令であり、オペランドサイズがワードである場合に、  ＲＩＬＤ１信号５３１  が”１”になる。更に、命令１及び命令２のアドレス計算に使用されるベースレジスタが一致する場合にはＭＴＲ１Ｒ２信号５５４  が”１”になり、アドレス計算で参照されるレジスタを命令１が更新しない場合にはＭＴＬ１Ｒ２信号５５４  が”０”になり、命令１のディスプレースメント値が”４”である場合にはＤＩＳＰ１信号５６１  が”１”になる。命令１の処理コード長が２バイトで上述の条件がすべて成立する場合には、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、２ワードの並列転送が行なわれるので、ＭＯＶ２Ｗ信号５０９  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０３３５】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、第１ＳＯＰＤＥＣ  ３０８の出力と、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  の出力に基づいてＡコードを生成する。但し、  ＭＯＶ２Ｗ信号５９０  が”１”になったことに対応して、オペランドのサイズが８バイトに補正される。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０３３６】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。アドレス計算部５３では、ベースアドレス値を参照してそのまま転送することによりオペランドアドレスが生成される。また、命令１及び命令２のレジスタの更新情報がスコアボードレジスタ部５２に登録される。
【０３３７】
次に、命令１がレジスタ相対間接モードのロード命令である場合について説明する。
【０３３８】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。命令１が前述のレジスタ相対間接モードのロード命令であり、オペランドサイズがワードである場合に、ＲＩＬＤ信号５１１  が”１”になる。また、命令２が前述のレジスタ相対間接モードのロード命令であり、オペランドサイズがワードである場合に、  ＲＩＬＤ２信号５４６  が”１”になる。更に、命令１及び命令２のアドレス計算に使用されるベースレジスタが一致する場合にはＭＴＲ１Ｒ３信号５５８  が”１”になり、アドレス計算で参照されるレジスタを命令１が更新しない場合にはＭＴＬ１Ｒ３信号５５６  が”０”になり、命令２のディスプレースメント値が”命令１のディスプレースメント値＋４”である場合にはＤＩＳＰ２信号５６２  が”１”になる。命令１の処理コード長が４バイトで上述の条件がすべて成立する場合には、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、２ワードの並列転送を行なうので、  ＭＯＶ２Ｗ信号５０９  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０３３９】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、第２ＳＯＰＤＥＣ  ３０９の出力と、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  の出力に基づいてＡコードを生成する。但し、  ＭＯＶ２Ｗ信号５９０  が”１”になったことに対応して、オペランドのサイズが８バイトに補正される。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０３４０】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。アドレス計算部５３では、ベースアドレス値と命令１のディスプレースメント値を加算することによりオペランドアドレスが生成される。また、命令１及び命令２のレジスタの更新情報がスコアボードレジスタ部５２に登録される。
【０３４１】
以下の処理は、双方の場合で同じである。
Ｆステージ４０４  では、命令１の処理に対応するマイクロ命令が読み出され、第１マイクロ命令デコーダ８５で命令１の実行制御情報が生成される。命令２の実行制御情報はサブＲコードをハードワイヤードでデコードすることにより第２マイクロ命令デコーダ８６で生成される。また、オペランドアクセス部１７でオペランドがプリフェッチされる。この場合、オペランドサイズが８バイトであるものとして、オペランドがプリフェッチされる。この８バイトが８バイト境界内にある場合、キャッシュがヒットすると８バイトのデータが１サイクルでフェッチされる。
【０３４２】
Ｅステージ４０５  では、２つの命令が並列に実行される。フェッチされた８バイトのデータの上位４バイトをＳ１バス１０４，ラッチ２３９，メインＡＬＵ２３１，  Ｄ１バス１２４  を経由してデスティネーションとして指定されたレジスタにロードオペランドとして書き込むことにより、命令１が実行される。フェッチされた８バイトのデータの下位４バイトをＳ３バス１２２，ラッチ２４４，サブＡＬＵ２３４，  Ｄ２バス１２５  を経由してデスティネーションとして指定されたレジスタにロードオペランドとして書き込むことにより、命令２が実行される。
【０３４３】
以下に具体例に即して説明する。ここでは命令１及び命令２が共にレジスタ相対間接モードのＬフォーマットの転送命令（ＭＯＶ：Ｌ）  である場合を考える。命令１がＲ１３  の値に”１６”（ディスプレースメント値）を加えたアドレスのデータをＲ０へ転送し、命令２がＲ１３  の値に”２０”（ディスプレースメント値）を加えたアドレスのデータをＲ１へ転送する命令とする。この場合、２命令の並列実行が可能な組み合わせであり、且つ命令１がＲ１３  にロードしないので、２命令が並列実行される。またこの場合、命令１の処理コード長が４バイトであるので、第２ＳＯＰＤＥＣ３０９の出力結果に基づいてサブＤコードが生成される。
【０３４４】
各ステージでの具体的な処理の流れを図５９のフローチャートに示す。図５９に示したように、各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。Ａステージ４０３  では、命令１に関するオペランドのアドレスが計算される。Ｆステージ４０４  で８バイト（２ワード）のデータがフェッチされ、Ｅステージ４０５  で命令１，命令２で指定されたデスティネーションレジスタに２ワードのデータが並列に転送される。
【０３４５】
（５．４．１４）「分類Ｃ４の場合の処理」
命令１と命令２がレジスタ間接／レジスタ相対間接モードでデスティネーションオペランドが指定され、レジスタの値をストアする転送命令である分類Ｃ４の場合について説明する。この２つの命令がメモリ上の連続領域をアクセスする場合には、２命令の並列デコードが可能である。命令１，命令２は共にＳフォーマットの転送命令（ＭＯＶ：Ｓ）  であり、オペランドサイズがワードである場合にのみ、並列実行が可能である。上述のレジスタへのロードを行なう場合と同様に、大きく分けて２つの場合に並列実行が可能である。並列実行が可能な２つの場合の命令コードは、オペレーションコードは当然異なるが、各フィールドのビット位置は図５６の模式図に示したロードの場合と同じである。
【０３４６】
一方は参照符号（ａ）  に示されているように、命令１がレジスタ間接モードであり、命令２が１６ビット変位のレジスタ相対間接モードである場合である。並列実行が可能な条件は、命令１のオペランドアドレス計算時のベースレジスタ５０２  と命令２のベースレジスタ５０３  とが同じで、命令２のディスプレースメント（変位）５０４  の値が”４”であり、命令１が更新するレジスタ５０１  が命令２のアドレス計算のベースアドレスレジスタ５０３  とは異なることである。この場合は、命令１が２バイトである。
【０３４７】
他方は参照符号（ｂ）  に示されているように、命令１及び命令２が共に１６ビット変位のレジスタ相対間接モードである場合である。並列実行が可能な条件は、命令１のオペランドアドレス計算時のベースレジスタ５０６  と命令２のベースレジスタ５０８  が同じで、命令２のディスプレースメント（変位）５０９  の値が命令１のディスプレースメント（変位）５０７  の値より”４”だけ大きいことである。この場合は、命令１が４バイトである。
【０３４８】
まず、命令１がレジスタ間接モードのストア命令である場合について説明する。
【０３４９】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。命令１が前述のレジスタ間接モードのストア命令であり、オペランドサイズがワードである場合に、ＲＩＳＴ信号５１２  が”１”になる。また、命令２が前述のレジスタ相対間接モードのストア命令であり、オペランドサイズがワードである場合に、  ＲＩＳＴ１信号５３２  が”１”になる。更に、命令１及び命令２のアドレス計算に使用されるベースレジスタが一致する場合にはＭＴＲ１Ｒ２信号５５４  が”１”になり、命令１のディスプレースメント値が”４”である場合にはＤＩＳＰ１信号５６１  が”１”になる。命令１の処理コード長が２バイトで上述の条件がすべて成立する場合には、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、２ワードの並列転送が行なわれるので、  ＭＯＶ２Ｗ信号５０９  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０３５０】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、第１ＳＯＰＤＥＣ  ３０８の出力と、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  の出力に基づいてＡコードを生成する。但し、  ＭＯＶ２Ｗ信号５９０  が”１”になったことに対応して、オペランドのサイズが８バイトに補正される。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０３５１】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。アドレス計算部５３では、ベースアドレス値を参照しそのまま転送することによりオペランドアドレスの生成が行なわれる。
【０３５２】
次に、命令１がレジスタ相対間接モードのストア命令である場合について説明する。
【０３５３】
Ｄステージ４０２  において、２命令の並列デコードと並列実行可否判定とが行なわれる。命令１が前述のレジスタ相対間接モードのストア命令であり、オペランドサイズがワードである場合に、ＲＩＳＴ信号５１２  が”１”になる。また、命令２が前述のレジスタ相対間接モードのロード命令であり、オペランドサイズがワードである場合に、  ＲＩＳＴ２信号５４７  が”１”になる。更に、命令１と命令２との双方のアドレス計算に使用されるベースレジスタが一致する場合にはＭＴＲ１Ｒ３信号５５８  が”１”になり、命令２のディスプレースメント値が、”命令１のディスプレースメント値＋４”である場合にはＤＩＳＰ２信号５６２  が”１”になる。命令１の処理コード長が４バイトで上述の条件がすべて成立する場合には、２命令並列実行が可能であると判断されてＳＶＡＬＩＤ信号５８１  が”１”になる。この場合、２ワードの並列転送が行なわれるので、  ＭＯＶ２Ｗ信号５０９  が”１”になる。サブコード有効判定部３２４  で生成されるその他の信号はすべて”０”になる。
【０３５４】
メインＤコード生成部３１３  では、メインデコーダ３０２  の出力に基づいてメインＤコードを生成する。サブＤコード生成部３１４  では、第２ＳＯＰＤＥＣ  ３０９の出力と、２命令並列デコード可否判定部３０３  からの出力信号とをあわせてサブＤコードを生成する。Ａコード生成部３０７  では、アドレッシングモードデコーダ３０５  の出力に基づいてＡコードを生成する。但し、ＭＯＶ２Ｗ  信号５９０  が”１”になったことに対応して、オペランドのサイズが８バイトに補正される。このようにして、２命令が並列にデコード可能であると判断された場合、２つの命令のデコード結果が同時に出力される。
【０３５５】
Ａステージ４０３  では、Ａステージデコーダ３４で命令１の後段デコードが行なわれ、命令２のデコード結果であるサブＤコードはサブコード転送部３５により転送される。アドレス計算部５３では、ベースアドレス値と命令１のディスプレースメント値を加算することによりオペランドアドレスが生成される。
【０３５６】
以下の処理は、双方の場合で同じである。
Ｆステージ４０４  では、命令１の処理に対応するマイクロ命令が読み出され、第１マイクロ命令デコーダ８５で命令１の実行制御情報が生成される。命令２の実行制御情報はサブＲコードをハードワイヤードでデコードすることにより第２マイクロ命令デコーダ８６で生成される。
【０３５７】
Ｅステージ４０５  では、２つの命令が並列に実行される。命令１でストアするデータがレジスタファイル２０５  から、Ｓ１バス１０４，ラッチ２３９，メインＡＬＵ２３１，  Ｄ１バス１２４  を経由してＤＤＷ２１２へ転送される。命令２でストアするデータがレジスタファイル２０５  から、Ｓ３バス１２２，ラッチ２４４，サブＡＬＵ２３４，  Ｄ２バス１２５  を経由してＤＤＷ２１２へ転送される。この場合、ＰＵＳＨ２Ｗ信号５９１  は”０”であるので、命令１でストアするデータが上位に、命令２でストアするデータが下位になるようにＤＤＷ２１２内の整置回路で整置及び連結が行なわれてストアすべき８バイトデータが生成され、ＤＤバス１０７  を経由してオペランドアクセス部１７へ転送される。Ｓステージ４０６  では、このデータをデータキャッシュ７４あるいは外部メモリの命令２で指定されるアドレス位置に書き込む。この８バイトが８バイト境界内にある場合、ストアバッファへの登録は１サイクルで終了する。
【０３５８】
以下に具体例に即して説明する。ここでは命令１がレジスタ間接モードで、命令２がレジスタ相対間接モードのＳフォーマットの転送命令（ＭＯＶ：Ｓ）  である場合を考える。命令１がＲ１３  の値に”１６”（ディスプレースメント値）を加えたアドレスのメモリにＲ０のデータを転送し、命令２がＲ１３  の値に”２０”（ディスプレースメント値）を加えたアドレスのメモリにＲ１のデータを転送する命令であるとする。この場合、２命令の並列実行が可能な組み合わせであり、２命令が並列実行される。この場合、命令１の処理コード長が２バイトであるので、第１ＳＯＰＤＥＣ  ３０８の出力結果に基づいてサブＤコードが生成される。
【０３５９】
各ステージでの具体的な処理の流れを図６０のフローチャートに示す。図６０に示したように、各パイプラインステージで２つの命令が並列に処理され、Ｅステージ４０５  で並列に実行される。Ａステージ４０３  では、命令１に関するオペランドのアドレスが計算される。Ｅステージ４０５  では、命令１，命令２でソースとして指定されたレジスタ値を転送する。Ｓステージでは、連結された８バイトデータをデータキャッシュ７４あるいは外部メモリに書き込む。
【０３６０】
以上では各論を述べたが、２命令並列デコード可否判定部３０３  ではメインデコーダ３０２  における命令１のデコード結果とサブデコーダ３０４  における命令２のデコード結果とに基づいて、上述のすべての場合の２命令の並列デコードの可否が総合的に判定される。メインデコーダ３０２  あるいはサブデコーダ３０８  からは、種々の命令の組み合せを判定できるように同じ命令に関して複数の並列デコード可否判定のための制御信号が”１”になる場合がある。しかし、同時に複数の分類に含まれて誤動作することがないように、制御信号の生成に制限を加える等の対策を講じて、誤動作を防いでいる。
【０３６１】
このように本発明のデータ処理装置では、オペランド干渉のある複数の命令に関しても、多くの組み合せについて並列に実行できるので、データ処理装置の性能を向上させることができる。シフト命令と他の命令とを実行する際には、シフト可能なシフト幅をあらかじめ定められた特定の値のみに限定しているので、少ないハードウェア量の追加で、高速な処理が可能となっている。算術演算同士の並列実行では３値加算器を用いることにより、高速な２命令の並列実行が可能となっている。転送命令は使用頻度が非常に高く、オペランド干渉のある２命令の少なくとも一方が転送命令である場合の並列実行は、性能向上において非常に有効である。
【０３６２】
また、メモリアクセスを行なう２命令では、命令デコード段階で判定できる連続領域をアクセスする命令を並列に実行する。ハードウェアとしてはアクセスするデータ幅を増加するのみで対処でき、キャッシュ等のＲＡＭ  を２ポートにしたりあるいはインタリーブを行なう必要はないので、簡単な制御でかつ小さな面積（コスト）の増加で性能を向上できる。また、キャッシュのセンスアンプの数も削減できるので消費電力の削減にも有効である。サブルーチンコール時のレジスタ値の退避，復帰等の連続領域のアクセスを行なう場合には非常に有効である。
【０３６３】
（６）  「他の変形例」
上述の実施例では、算術／論理演算命令とシフト命令とを並列に実行する場合、シフトカウント値が１〜３ビットの左シフトである場合にのみ制限しているが、チップ面積，  動作速度が許す限りいくつにしてもよい。たとえば、−８，  −１乃至−３，  １乃至３，  ８程度のシフトを行なうようにしてもよい  （但し、”−”は右シフトを示す）  。
【０３６４】
上述の実施例では、算術／論理演算命令とシフト命令とを並列に実行するために、出力シフタ２３６  をサブＡＬＵ２３４の出力に結合しているが、たとえばメインＡＬＵ２３１の出力に接続してもよい。
【０３６５】
上述の実施例では、入力シフタ２３５  をサブＡＬＵ２３４の双方に結合しているが、ソースまたはデスティネーションのいずれか一方のみの場合に２命令の並列実行を可能にするのであれば、いずれか一方に結合するのみでよい。また、サブＡＬＵ２３４の入力シフタ２３５  と出力シフタ２３６  とのいずれか一方のみをインプリメントしてもよいし、１つのシフタを切り替えて使用するような構成にしてもよい。また、必ずしもサブシフタ２３８  をインプリメントする必要はなく、シフト幅は限定されるが、入力シフタ２３５  または出力シフタ２３６  のいずれか一方を用いて、それで実行可能な場合のみシフト命令を後続命令として発行できるようにしてもよい。
【０３６６】
上述の実施例では、サブＡＬＵ２３４とは独立に３入力加算器２３７  を設けているが、タイミング的に問題がなければ、サブＡＬＵ２３４に３値加算機能を付加し、３入力加算器２３７  を削除してもよい。
【０３６７】
上述の実施例では、３入力加算器２３７  により、算術演算命令と算術演算命令との組み合せのみ複合演算を行なっているが、３入力加算器２３７  に論理演算機能を付加したり、あるいは別途３入力論理演算器を設けることにより、論理演算命令と論理演算命令との組み合せを並列に実行するようにしてもよい。但しこの場合は制御信号の生成も変更する必要がある。論理演算と算術演算との複合演算を行なわないのであれば、たとえば論理演算と論理演算との組み合せを判定するためのメインデコーダ３０２  あるいはサブデコーダ３０８  からの制御信号を追加し、サブコード有効判定部３２４  で判定項目を増やせばよい。また、ビットセット，  ビットクリア，  ビット反転命令も基本的には論理演算を行なうことにより実現できる。ビット操作命令を並列実行の処理対象とすることも当然可能である。
【０３６８】
上述の実施例では、オペランド干渉時には一方の命令のみが実行されるので、一方の演算器では意味のないオペレーションを行なっている場合もあるが、そのような場合消費電力を削減するためにその演算器が動作しないように制御してもよい。また、２命令の複合演算を行なう場合、命令１の演算は主演算回路２０８  で行なっているが、副演算回路２０７  での複合演算の中間結果（命令１の演算結果）をバスへ出力するようにしてもよい。
【０３６９】
上述の実施例では、２つの２オペランド演算命令が実行できるようなハードウェア構成をとっているが、一方の命令が１オペランド演算命令である場合にのみ限定した場合には３値加算器２３７  及び別途付加した２つの論理演算命令を行なうための複合論理演算回路入力ポートを２つに削減することが可能である。１オペランド演算命令としては、データの”０”／”１”反転を行なう命令、あるいは２の補数をとる（符号を反転する）命令等がある。
【０３７０】
更に、命令１と命令２との複合演算を行なう際に、上記実施例では命令１のデスティネーションオペランドと命令２のデスティネーションオペランドとが同じレジスタである場合にも、命令１の演算を行なっている。このような場合、もし演算命令でフラグを更新しない命令を含む命令セットを処理するのであれば、命令１の演算は行なう必要はなく、命令１と命令２との複合演算のみを行なって演算結果をデスティネーションオペランドに書き戻せばよい。更に、命令１及び命令２のデスティネーションオペランドが同じ場合のみ２命令の並列実行を行なうのであれば、演算器にオペランドの値を転送するためのバスの本数も、演算結果をレジスタファイル等へ転送するバスの本数も削減できる。また、命令１のデスティネーションオペランドと命令２のデスティネーションオペランドとが異なっても、命令２が比較命令であれば、命令２の演算結果を転送する必要がないので演算結果をレジスタファイル等へ転送するバスの本数は削減できる。
【０３７１】
また、ストアオペランドのバイパスを行なう際には、主演算回路２０８  からＤ１バス１２４  へ出力された値を参照してバイパスしているが、主演算回路２０８  からＤ２バス１２５  にも出力するようにしてもよいし、主演算回路２０８  で行なうのと同じオペレーションを副演算回路２０７  で行ない、副演算回路２０７  での演算結果をＤ２バス１２５  にも出力するように制御してもよい。構成によっては、多少並列実行できる命令の組み合せが少なくなる可能性もある。
【０３７２】
上述の実施例では、２つのメモリオペランドを有する２命令の並列実行を行なうのは、２つの命令が共にロード命令であるか、または２つの命令が共にストア命令である場合のみに限られているが、２つの命令が連続したメモリ領域のリードモディファイライトオペランドを有する場合に２命令の並列実行を行なってもよい。
【０３７３】
上述の実施例では、２つのメモリオペランドを有する２命令の並列実行を行なうのは、２つのオペランドのサイズがワード（この場合は４バイト）である場合に限っていたが、他のアクセスサイズに対処可能にすることは容易である。また、プッシュ命令が連続する場合を除いては命令１のメモリオペランド格納位置が命令２のメモリオペランド格納位置よりアドレスが小さい場合のみ対処していたが、逆の場合に対処できるようにしてもよい。また、上記実施例では命令１がレジスタ相対間接モードであり、命令２がレジスタ間接モードである場合は対象としていないが、このような場合も並列に実行できるようにしてもよい。また、オペランドデータは６４ビットのＤＤバス１０７  で整置された８バイトデータ単位で転送しているが、ＤＤバス１０７  の上位３２ビットと下位３２ビットとを独立に扱えるようにし、キャッシュの１ラインであれば、８バイト整置されていないデータも１サイクルで転送できるようにしてもよい。この場合、ハードウェアは多少増加するが２つのメモリオペランドを１サイクルで転送できる確率が向上するので性能は向上する。
【０３７４】
上述の実施例では、データキャッシュは１つのアドレスに対して１ラインのみのアクセスが行なわれる。従って、たとえキャッシュがヒットしてもアクセス対象のデータのすべてがキャッシュの１ラインに入っていなければ１サイクルでアクセスすることは出来ない。しかし、キャッシュの１ラインの境界をまたぐアクセスも１サイクルで実行できるデータ処理装置も存在する。たとえば、キャッシュを２分割し、そのそれぞれにアドレスデコーダを備え、境界をまたぐ場合には先頭アドレスを含むアドレスで一方をアクセスし、インクリメンタによりそのアドレスを”１”インクリメントしたアドレスで他方をアクセスすることにより、キャッシュの２ラインにまたがるオペランドデータを１サイクルでアクセスするデータ処理装置もある。また、キャッシュを複数のバンクに分割し、異なるバンクであれば１サイクルでアクセスできるものもある。本発明は実施例に示したキャッシュの構成に対してハードウェアコストを削減する上で特に有効であるが、性能を向上するためにキャッシュを他の構成とした場合にも当然有効である。要するに、命令デコード段階で１サイクルでアクセス可能か否かを判定し、１サイクルで実行できる場合あるいはその可能性が高い場合にメモリアクセスを行なう２命令を並列に発行して処理すればよいのである。ＲＩＳＣのように、データが必ずワード境界にのっている場合には特に有効である。通常、ＣＩＳＣでもコンパイラ等でデータを整置するので、このような手法は有効である。
【０３７５】
また上記実施例では、命令キャッシュを備えているが、内部データＲＡＭ  を備えてもよい。また、必ずしも内部にメモリを有する必要はなく、必ず外部にアクセスする場合にも有効である。この場合、２ワード分の外部バスを有する方が有効である。少なくともオペランドアクセス部またはバスインタフェイス部と演算部とが２ワードのデータを並列に実行する手段を備えていれば、２つのメモリオペランドを有する命令を並列に処理するのに有効である。ストアに関してはストアバッファで吸収すればよいが、フェッチに関しては２ワードを並列に１回の処理でアクセスして転送する方が効率がよい。但し、外部データバス幅が１ワード分であっても、２ワードを一度にアクセスすることにより１ワードを２回アクセスするよりも少ないサイクル数でアクセスできれば、本発明のような処理方法は有効である。たとえば、１ワードのアクセスであれば１つのアドレスに対して１つのデータを転送する単一転送を行なうが、２ワードのアクセスであれば１つのアドレスに対して複数のデータを転送するバースト転送を行なう場合には、内部にメモリがなく、外部バスがワード分であっても有効である。
【０３７６】
上述の実施例では、並列に実行されるのは２命令であったが、３命令以上の複数の命令を並列に実行することも可能である。
【０３７７】
上述の実施例では、並列にデコードされた２つの命令を並列に実行する場合について説明している。データ処理装置には、１命令づつデコードしてパイプラインが詰まった場合のみ２つの命令を並列に実行するものもある。また、  ＩＢＭとＭｏｔｏｌｏｒａ社のＰｏｗｅｒＰＣ  ６０３  のように、複数の命令を並列にデコードし、デコードされた命令を複数の独立に実行可能な実行ユニットに発行するようなデータ処理装置もある。この場合、並列にデコードされたか否かには拘わらず、複数の命令を並列に実行することが可能である。本発明は、並列にデコードされた２命令のみを並列に実行する場合のみならず、上述のような種々のパイプライン処理を行なうデータ処理装置に対処可能である。命令デコード後に２命令を並列実行するか否かを判定する場合には、上記実施例でデコード段階での判定に必要な情報を命令に付随して転送し、命令実行以前の任意のパイプラインステージで複数の命令間の並列実行可／不可判定を行なえばよい。
【０３７８】
上述の実施例では、ＣＩＳＣタイプの命令セットを扱っているが、もちろんＲＩＳＣタイプの命令セットを有するデータ処理装置に適応することも可能である。また上述の実施例では、命令の実行を１段のパイプラインステージで行なっているが、複数のパイプラインステージに分割して処理を行なうようにしてもよい。
【０３７９】
このように、本発明は実施例で示した構成に限定されるものではなく、オペランド干渉のある複数の命令を並列に実行したり、メモリオペランドを有する複数の命令を並列に実行する場合に有効である。複数命令の並列実行を行なう命令の組み合せ及びハードウェア構成は、ターゲットとなる仕様や価格性能比に基づいて決定すればよい。本発明は、種々のハードウェア構成に対して有効である。
【０３８０】
〔実施例２〕
上述の実施例では、種々の組み合せの２命令を並列に実行するために、多くのハードウェアを必要としている。しかし、並列に実行可能な命令の組み合せを限定すれば、必要なハードウェア量は削減できる。どのような組み合せの２命令を並列実行の対象とするかは、性能とハードウェアコストとにより決定すればよい。以下に、並列に実行できる命令の組み合せを限定した例を示す。
【０３８１】
本実施例では、オペランド干渉のある２命令のみを実行する。更に、本実施例では命令２が転送命令である場合を除き、命令１のデスティネーションオペランドと命令２のデスティネーションオペランドとが干渉した場合にのみ２命令を並列実行する。また、２つの算術演算命令の実行に際しては、一方の命令は小さな即値の加減算を行なう場合のみを処理対象とする。処理対象が異なるため、命令デコードを含むハードウェアの構成は実施例１とは当然異なるが、基本的な処理内容は実施例１と同じであるのでパイプラインの前段での処理に関する説明を省略する。但し、ここでは通常の演算命令に関してフラグの更新を行なわないか、あるいは命令２の実行結果のみをフラグに反映させればよい場合を想定する。
【０３８２】
全体のブロック構成は、図２６に示した実施例１のブロック構成とほぼ同じである。実施例２の整数演算部の構成例を図６２のブロック図に示す。説明を簡単化するため、一部のブロックは省略している。図３４，  図６１に示した実施例１の整数演算部１６と比べてバスの本数も少なく、演算器のハードウェア量も大幅に削減されている。整数演算部は、演算回路６０１，レジスタファイル６０２，ＳＰ部６０３，メモリアドレスレジスタ部６０４，メモリデータレジスタ部６０５  等で構成されており、Ｓ１バス６２１，Ｓ２バス６２２，Ｄ１バス６２３  で各部が接続されている。ここでは、２ワードのデータを並列に転送することは考えられておらず、ＤＤバス６２６  は３２ビット幅である。
【０３８３】
演算回路６０１  は３入力ＡＬＵ６１０及びシフタ６１４  等を含む。更に、３入力ＡＬＵ６１０の入力の一つには入力シフタ６０７  が、出力には出力シフタ６１１  が直列にそれぞれ接続されている。６０６，  ６０８，  ６０９，  ６１２，  ６１３  はラッチである。また、レジスタファイル６０２  またはＳＰ部６０３  の各レジスタは、Ｄ１バス６２３  に結合された入力ポートを有し、同時に２つのレジスタにＤ１バス６２３  上の値を書き込む機能を有する。
【０３８４】
図示していないが命令デコード部では、以下の場合のみ２命令が並列にデコードされ、発行される（実施例１の分類に従う）。
【０３８５】
・分類Ａ２
・分類Ａ３
・分類Ｂ２
・分類Ａ４またはＢ３で命令２が算術／論理演算命令で命令１のデスティネー
ションオペランドと命令２のデスティネーションオペランドとが一致
・分類Ａ５で命令１のデスティネーションオペランドと命令２のデスティネー
ションオペランドとが一致
・分類Ａ６またはＢ４で一方が即値加減算命令（ＱフォーマットのＡＤＤ，  ＳＵＢ命令）で命令１のデスティネーションオペランドと命令２のデスティネーションオペランドとが一致
【０３８６】
２命令を並列に実行する場合の、Ｑフォーマットのシフト命令及び加減算命令の即値は４ビットのリニアな値に変換され、命令実行時にラッチ６０６  及び入力シフタ６０７  へ転送される。以下、実施例１で分類した各場合について命令の並列実行の詳細を説明する。
【０３８７】
まず、分類Ａ３について説明する。この場合、命令１はレジスタに値を書き込む演算，  転送命令であり、命令２は命令１の実行結果を転送するレジスタ間転送命令である。命令１は転送命令の場合も含み演算回路６０１  のいずれかの演算器で処理され、演算結果がＤ１バス６２３  を介してレジスタファイル６０２  またはＳＰ部６０３  の命令１のデスティネーションとして指定されたレジスタに書き込まれる。更に、この場合Ｄ１バス６２３  上の値はレジスタファイル６０２  またはＳＰ部６０３  の命令２のデスティネーションとして指定されたレジスタにも並列に書き込まれる。
【０３８８】
分類Ｂ２は、命令１はレジスタに値を書き込む演算，  転送命令であり、命令２は命令１の実行結果を転送するストア命令の場合である。命令１は転送命令の場合も含み演算回路６０１  のいずれかの演算器で処理され、演算結果がＤ１バス６２３  を介してレジスタファイル６０２  またはＳＰ部６０３  の命令１のデスティネーションとして指定されたレジスタに書き込まれる。更に、この場合Ｄ１バス６２３  上の値はメモリデータレジスタ部６０５  にも並列に書き込まれ、ＤＤバス６２６  を介してオペランドアクセス部に転送され、キャッシュ及びメモリに書き込まれる。
【０３８９】
分類Ａ４，  Ｂ３の内で並列実行が可能なのは、命令１が３ビット以下のシフト命令であり、命令２が命令１のシフト結果をデスティネーションオペランドとする算術／論理演算命令の場合である。命令１のシフト処理は入力シフタ６０７  で行なわれる。命令１のデスティネーションオペランドがレジスタファイル６０２  等から読み出され、Ｓ２バス６２２  を介して入力シフタ６０７  に取り込まれる。シフト量は即値として入力され、シフト結果が入力ラッチ６０９  へ出力される。３入力ＡＬＵ６１０では、命令２の算術／論理演算が実行される。命令２のソースオペランドがレジスタファイル６０２  あるいはメモリデータレジスタ部６０５  等から読み出されてＳ１バス６２１  を介して入力ラッチ６０８  に取り込まれ、シフト結果を保持している入力ラッチ６０９  の値と演算が行なわれる。この場合、ラッチ６０６  からの入力は無視される。たとえば算術演算命令の場合にはゼロが入力される。演算結果は、Ｄ１バス６２３  を介して、命令２のデスティネーションオペランドとして指定されたレジスタに書き込まれる。
【０３９０】
分類Ａ５は、命令１が算術／論理演算命令で、命令２が３ビット以下の左シフト命令であるが、このうち並列実行が可能なのは命令２が命令１の演算結果をデスティネーションオペランドとするシフト命令の場合である。命令１のソースオペランドがレジスタファイル６０２  やメモリデータレジスタ部６０５  等から読み出され、Ｓ１バス６２１  を介して入力ラッチ６０８  に取り込まれ、デスティネーションオペランドがレジスタファイル６０２  等から読み出され、Ｓ２バス６２２  を介して入力ラッチ６０９  に取り込まれる。３入力ＡＬＵ６１０では、命令１の算術／論理演算が実行される。この場合も、ラッチ６０６  からの入力は無視される。演算結果は出力シフタ６１１  に出力される。命令２のシフト処理は出力シフタで行なわれる。シフト量は即値として入力され、ラッチ６０６  を介して出力シフタ６１１  の出力される。シフト結果は、Ｄ１バス６２３  を介して、命令２のデスティネーションオペランドとして指定されたレジスタに書き込まれる。
【０３９１】
分類Ａ６，  Ｂ４で一方が小さな即値をソースオペランドとする加減算命令（ＱフォーマットのＡＤＤ，  ＳＵＢ命令）で、命令２が命令１の演算結果をデスティネーションオペランドとする命令の場合について説明する。命令１がＱフォーマットの加減算命令である場合には、命令１のソースオペランドがＳ１バス６２１  を介して入力ラッチ６０８  へ、デスティネーションオペランドがＳ２バス６２２  を介して入力ラッチ６０９  へそれぞれ転送され、命令２のソースオペランドである即値がラッチ６０６  に保持される。また、命令２がＱフォーマットの加減算命令である場合には、命令１のソースオペランドである即値がラッチ６０６  に保持され、命令２のソースオペランドがＳ１バス６２１  を介して入力ラッチ６０８  へ、デスティネーションオペランドがＳ２バス６２２  を介して入力ラッチ６０９  へそれぞれ転送される。３入力ＡＬＵ６１０では、３値の加減算が行なわれ、加算結果がＤ１バス６２３  を介して命令２のデスティネーションオペランドとして指定されたレジスタに書き込まれる。
【０３９２】
３値Ａ，  Ｂ，  Ｃの加減算を行なう場合、Ｃが小さな正の即値であり、Ｃの反転を行なわないように加算しようとすると、入力Ａ，  Ｂと加算器の出力の反転機能とキャリーとを用いて以下のような演算を行なえばよい。加算器は入力Ａ’（ＡまたはＡの反転），  入力Ｂ’（ＢまたはＢの反転），  入力Ｃとキャリーの加算を行なうものとする。｛｝内が加算器出力である。
【０３９３】
入力Ａ’  入力Ｂ’  入力Ｃ  キャリー入力
Ａ＋Ｂ＋Ｃ＝｛Ａ      ＋Ｂ      ＋Ｃ    ＋０｝
Ａ−Ｂ＋Ｃ＝｛Ａ      ＋Ｂの反転＋Ｃ    ＋１｝
Ａ＋Ｂ−Ｃ＝｛Ａの反転＋Ｂの反転＋Ｃ    ＋１｝の反転
Ａ−Ｂ−Ｃ＝｛Ａの反転＋Ｂ      ＋Ｃ    ＋０｝の反転
【０３９４】
このように、加算器としてはＣの値を符号拡張することなく構成することが可能である。たとえば、３値（Ａ’（０：３１），  Ｂ’（０：３１），  Ｃ（２８：３１））を加算する加算器として図６３及び図６４のブロック図に示されているようなハードウェア構成があげられる。但し、ＯＵＴ（０：３１）  は加算器出力であり、表記はビッグエンディアンを用いている。この例では、加算器は大きく分けて、キャリーセーブドアダーからなる前段加算器とフルアダーとキャリールックアヘッドからなる後段加算器とで構成されている。なお、図６３と図６４とは、図６３の下側が図６４の上側と接続された本来は一葉の図面である。
【０３９５】
入力Ｃは下位４ビットのみなので、前段加算器のキャリーセーブドアダーは下位４ビットと上位２８ビットとで構成が異なる。下位４ビットはたとえば参照符号６３１  にて示されているように、３ビットの入力を１ビットＸと一つ上位の１ビットＹとの２ビットに変換する。この１ビットの第１ＣＳＡ６３１の構成を図６５の回路図に示す。参照符号６４１，  ６４２は排他的ＯＲゲートを、６４３，  ６４４，  ６４５  は  ＡＮＤゲートを、  ６４６はＯＲゲートをそれぞれ示す。上位２８ビットは２値の加算を行なえばよいので、より簡単な回路でよい。この１ビットの第２ＣＳＡ６３２の構成を図６６の回路図に示す。参照符号６４７  は排他的ＯＲゲートを、６４８  は  ＡＮＤゲートをそれぞれ示す。
【０３９６】
後段加算器は、４ビット単位にキャリールックアヘッド回路が付加されており、４入力  ＡＮＤゲート６３５  により４ビットのキャリー伝搬信号の論理積をとり、すべて”１”である場合にはセレクタＳＥＬ６３６によりキャリー入力をバイパスして上位に伝搬させる。最下位４ビットは通常キャリー伝搬信号の確定とキャリー出力の確定タイミングとに差がないので、キャリールックアヘッド回路は付加されていない。また、最下位ビットはこの場合ハーフアダーでよい。
【０３９７】
このように、１つの入力を小さな即値に限定することにより、下位４ビットはキャリーセーブドアダーの回路は複雑であるが、キャリールックアヘッド回路が不要になるので、３つの３２ビットデータの加減算を行なう場合に比してチップ上でのレイアウト面積が削減され、ハードウェアコストが削減できる。
【０３９８】
また、分類Ａ２で並列実行が可能なのは命令１の転送処理のデスティネーションが命令２のデスティネーションオペランドと一致する場合である。この場合は、単に命令２のデスティネーションオペランドの代わりに、命令１のソースオペランドをＳ１バス６２１  またはＳ２バス６２２  で演算器へ転送し、演算結果を命令２のデスティネーションとして指定されたレジスタに格納すればよい。
【０３９９】
このように、並列実行を行なう命令の組み合せを限定することによりより少ないハードウェアコストでデータ処理装置を実現することができる。とくに、２つの加減算命令を、一方がソースオペランドが小さな即値の場合のみに限定することにより、３値加算器のハードウェアコストを削減することが可能である。配列のポインタ計算で用いるスケールドインデックス加算を行なう場合などには、上述のような構成は非常に有効である。配列のポインタ計算では、ベースアドレスの値に、インデックス値を左シフト（２のべき乗倍）した値と変位とが加算されるからである。
【０４００】
上記実施例では、命令１がシフト命令の場合以外は命令１と命令２との複合演算を行なう際に、命令１の演算結果を出力できない構成となっているが、実施例１と同様に、命令１と命令２との複合演算と並列に命令１の演算を実行する演算器を有しているか、あるいは複合演算器の途中から命令１の演算結果を出力する手段を付加すれば、命令１のデスティネーションオペランドが命令２のソースオペランドと干渉する場合にも２命令の並列実行が可能である。但し、命令２が演算結果をレジスタに書き込む命令であった場合には、レジスタへ値を書き込むバスが２本必要になる。命令２が比較命令である場合には、命令１のデスティネーションオペランドのみを転送すればよいので、バスは１本でよい。たとえば、ループのカウンタ制御で、カウンタレジスタに即値（ステップ値）を加減算して上限値または下限値と比較を行なう場合には、命令１の演算結果のみを格納すればよい。
【０４０１】
〔実施例３〕
並列実行可能な命令の組み合せを実施例２より更に削減し、演算器のハードウェアコストを削減した実施例３について説明する。本実施例３では、以下の分類で命令１のデスティネーションオペランドと命令２のデスティネーションオペランドとが一致する場合にのみ２命令を並列実行する。
【０４０２】
・分類Ａ２
・分類Ａ３
・分類Ｂ２
・分類Ａ６またはＢ４
・加算命令とインクリメント命令（定数１を加算するＱフォーマットの加算
命令）との組み合せ
・減算命令とデクリメント命令（定数１を減算するＱフォーマットの減算命
令）との組み合せ
【０４０３】
図６７は本実施例の整数演算部の構成例を示すブロック図である。図６２に示した実施例２の整数演算部とはＡＬＵ  周囲の構成が異なる。基本的な命令の処理方法は実施例１及び実施例２とほぼ同じであるので説明は省略する。また、分類Ａ２，  Ａ３，  Ｂ２の処理の場合は実施例２と同じであるのでここでは説明を省略する。分類Ａ６またはＢ４で、ＡとＢと”１”との加算を行なう場合と、ＡからＢと”１”とを減算する場合では、３値の加減算は以下のように処理できる。加算器は入力Ａ’（ＡまたはＡの反転），  入力Ｂ’（ＢまたはＢの反転），  キャリーの加算を行なうものとする。｛｝内が加算器出力である。
【０４０４】
入力Ａ’  入力Ｂ’  キャリー入力
Ａ＋Ｂ＋１＝        ｛Ａ      ＋Ｂ      ＋１｝
Ａ−Ｂ−１＝        ｛Ａの反転＋Ｂ      ＋１｝の反転
もしくは｛Ａ      ＋Ｂの反転＋０｝
【０４０５】
即ち、ＡＬＵ６５３の加算器部分は２入力のフルアダー（図６３及び図６４の後段部分のみ）でよく、入出力の反転とキャリー入力との制御のみで２命令の並列実行を実現できる。２命令が並列実行可能な命令の組み合せは大幅に限定されるが、演算ハードウェアとしては、１命令づつ命令を実行する場合とほとんど同じで、制御方法を変えるのみで２命令の並列実行が実現できる。従って、このような処理が多いアプリケーションを実行する場合には、このような構成が有効である。
【０４０６】
但しこの場合も、実施例２と同様に命令１の演算結果を書き込むようにするならば、もう一つ加算器が必要になる。但し、この加算器ではインクリメント，  デクリメント機能のみがあればよいので、必要なハードウェア量は少なくて済む。また、一般のデータ処理装置ではアドレスレジスタ，  カウンタ等の他の演算器を備えている場合も多く、そのハードウェアを利用すれば更にハードウェアの削減には有効である。また、命令１と命令２とが異なるレジスタに処理結果を書き込む場合には２本のバスが必要となる。但し、命令２が比較命令である場合に限るのであれば、バスは１本でよい。ループ制御において、カウンタから”１”を減算し、下限値と比較するような場合には、一方の加算器で”カウンタ値−１”を実行し、もう一方の加算器で”カウンタ値−下限値−１”を実行すればよい。また、この場合には命令１の結果のみをカウンタとして用いられているレジスタに転送すればよい。
【０４０７】
【発明の効果】
以上に詳述したように本発明によれば、オペランド干渉のある複数の命令、あるいはメモリの連続領域をアクセスする複数の命令を並列実行可能に構成したため、高性能なデータ処理装置を比較的安価に提供することが可能になる。
【０４０８】
本発明のデータ処理装置の第１の発明によれば、第１の命令としてはシフト命令を、第２の命令としては算術演算，論理演算または比較命令が並列に実行される。
【０４０９】
本発明のデータ処理装置の第２の発明によれば、第１の命令としては算術演算，論理演算命令を、第２の命令としてはシフト命令が並列に実行される。
【０４１０】
本発明のデータ処理装置の第３の発明によれば、第１の命令としては演算命令を、第２の命令としてはレジスタ間転送命令が並列に実行される。
【０４１１】
本発明のデータ処理装置の第４の発明によれば、第１，第２の命令共に演算命令が並列に実行される。
【０４１２】
本発明のデータ処理装置の第５の発明によれば、第１，第２の命令共にポップ命令が並列に実行される。
【０４１３】
本発明のデータ処理装置の第６の発明によれば、第１，第２の命令共にプッシュ命令が並列に実行される。
【０４１４】
本発明のデータ処理装置の第７の発明によれば、第１の命令としてはレジスタ間接モードのロード命令を、第２の命令としてはレジスタ相対間接モードのロード命令が並列に実行される。
【０４１５】
本発明のデータ処理装置の第８の発明によれば、第１，第２の命令共にレジスタ相対間接モードのロード命令が並列に実行される。
【０４１６】
本発明のデータ処理装置の第９の発明によれば、第１の命令がレジスタ間接モードのストア命令を、第２の命令がレジスタ相対間接モードのストア命令が並列に実行される。
【０４１７】
本発明のデータ処理装置の第１０の発明によれば、第１，第２の命令共にレジスタ相対間接モードのストア命令が並列に実行される。
【０４２０】
本発明のデータ処理装置の第１１の発明によれば、第１の命令としては加算命令または減算命令の内の少なくとも一つの命令が、第２の命令としては少なくとも命令コードで指定される即値の加算命令または減算命令が並列に実行される。
【０４２１】
本発明のデータ処理装置の第１２の発明によれば、第１の命令としては加算命令が、第２の命令としてはインクリメント命令が並列に実行される。
【０４２２】
本発明のデータ処理装置の第１３の発明によれば、第１の命令としては減算命令が、第２の命令としてはデクリメント命令が並列に実行される。
【０４２３】
本発明のデータ処理装置の第１４の発明によれば、第１，  第２の命令共にメモリからデータを読み出す命令が並列に実行される。
【０４２４】
本発明のデータ処理装置の第１５の発明によれば、第１４の発明において第１，  第２の命令共にロード命令が並列に実行される。
【０４２５】
本発明のデータ処理装置の第１６の発明によれば、第１，  第２の命令共にメモリにデータを書き込む命令が並列に実行される。
【０４２６】
本発明のデータ処理装置の第１７の発明によれば、第１６の発明において第１，  第２の命令共にストア命令が並列に実行される。
本発明のデータ処理装置の第１８の発明によれば、第１乃至１４及び１６の発明において、命令解析手段により、第１の命令と第１の命令に引き続く命令以降の第２の命令とが並列に解析される。
本発明のデータ処理装置の第１９の発明によれば、第５，７，８及び１４の発明において、データアクセス手段は、記憶手段から以前に取り込んだデータをデータキャッシュに記憶させる。
本発明のデータ処理装置の第２０の発明によれば、第５，７，８及び１４の発明において、データアクセス手段は、記憶手段から以前に取り込んだデータをバッファ手段に一時的に保持させる。
本発明のデータ処理装置の第２１の発明によれば、第６，９，１０及び１６の発明において、データアクセス手段は、記憶手段に書込むべきデータをバッファ手段に一時的に保持させる。
本発明のデータ処理装置の第２２の発明によれば、第１の発明において、命令実行手段は、シフト命令の全シフト量のシフト処理を実行可能な第２のシフタを備えているので、第１及び第２の命令を並列に実行する際に、第１の命令のシフト処理を第２のシフタでも実行する。
本発明のデータ処理装置の第２３の発明によれば、第  ５及び６の発明において、命令実行手段は、第１及び第２の命令を並列に実行する際に、並列に転送される２データのサイズの総和に対応した値だけ、スタックポインタの更新を行なう。本発明のデータ処理装置の第２４の発明によれば、第１３の発明において、第１の命令は第２の演算としてデクリメントを行なう命令を含み、第２の命令は第１の演算として比較のための減算を行なう比較命令を含む。
【図面の簡単な説明】
【図１】本発明のデータ処理装置を用いたシステム構成を示すブロック図図である。
【図２】本発明のデータ処理装置のメモリ上での命令の配列状態を示す模式図である。
【図３】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図４】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図５】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図６】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図７】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図８】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図９】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図１０】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図１１】本発明のデータ処理装置の一実施例による命令フォーマットを示す模式図である。
【図１２】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１３】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１４】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１５】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１６】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１７】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１８】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図１９】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２０】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２１】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２２】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２３】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２４】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２５】本発明のデータ処理装置の一実施例によるアドレッシングモードのフォーマットを示す模式図である。
【図２６】本発明のデータ処理装置の一実施例の全体の構成例を示すブロック図である。
【図２７】本発明のデータ処理装置の一実施例の命令フェッチ部の構成例を示すブロック図である。
【図２８】本発明のデータ処理装置の命令の構成単位を示す模式図である。
【図２９】本発明のデータ処理装置の一実施例の命令デコード部の構成例を示すブロック図である。
【図３０】本発明のデータ処理装置の一実施例のＰＣ生成部の構成例を示すブロック図である。
【図３１】本発明のデータ処理装置の一実施例のアドレス生成部の構成例を示すブロック図である。
【図３２】本発明のデータ処理装置の一実施例のオペランドアクセス部の構成例を示すブロック図である。
【図３３】本発明のデータ処理装置の一実施例の  ＲＯＭ部の構成例を示すブロック図である。
【図３４】本発明のデータ処理装置の一実施例の整数演算部の構成例を示すブロック図である。
【図３５】本発明のデータ処理装置の一実施例のＳＰ部の構成例を示すブロック図である。
【図３６】本発明のデータ処理装置の一実施例のパイプライン処理の概要を示す模式図である。
【図３７】本発明のデータ処理装置の一実施例のＤステージデコーダの構成例を示すブロック図である。
【図３８】本発明のデータ処理装置が１サイクルでデコードを行なうＩＩバス上の命令コード位置を示す模式図である。
【図３９】本発明のデータ処理装置の一実施例の２命令並列デコード可否判定部の構成例を示すブロック図である。
【図４０】本発明のデータ処理装置の一実施例のオペランド干渉判定部の詳細な構成例を示す論理回路図の一部である。
【図４１】本発明のデータ処理装置の一実施例のオペランド干渉判定部の詳細な構成例を示す論理回路図の他の部分である。
【図４２】本発明のデータ処理装置の一実施例のサブコード有効判定部の詳細な構成例を示す論理回路図の一部である。
【図４３】本発明のデータ処理装置の一実施例のサブコード有効判定部の詳細な構成例を示す論理回路図の他の部分である。
【図４４】本発明のデータ処理装置のＩＩバス上のレジスタ番号フィールドの位置を示す模式図である。
【図４５】本発明のデータ処理装置により２命令を並列実行する場合の命令コードを示す模式図である。
【図４６】本発明のデータ処理装置により２命令を並列実行する場合のパイプライン処理の状態を示す模式図である。
【図４７】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図４８】本発明のデータ処理装置により２命令を並列実行する場合の命令コードを示す模式図である。
【図４９】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５０】本発明のデータ処理装置により２命令を並列実行する場合の命令コードを示す模式図である。
【図５１】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５２】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５３】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５４】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５５】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５６】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５７】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図５８】本発明のデータ処理装置でソースオペランドがレジスタ間接／相対間接モードで指定される２つのロード命令が並列デコードが可能な場合のＩＩバス上の命令コード位置を示す模式図である。
【図５９】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図６０】本発明のデータ処理装置により２命令を並列実行する場合の処理フローを示すフローチャートである。
【図６１】本発明のデータ処理装置の主演算回路と副演算回路との構成例を示すブロック図である。
【図６２】本発明のデータ処理装置の他の実施例の整数演算部の構成例を示すブロック図である。
【図６３】本発明のデータ処理装置の他の実施例の３入力ＡＬＵ  の加算器の構成例を示すブロック図の一部である。
【図６４】本発明のデータ処理装置の他の実施例の３入力ＡＬＵ  の加算器の構成例を示すブロック図の他の部分である。
【図６５】本発明のデータ処理装置の他の実施例の３入力ＡＬＵ  の加算器の下位側キャリーセーブドアダーの構成例を示す論理回路図である。
【図６６】本発明のデータ処理装置の他の実施例の３入力ＡＬＵ  の加算器の上位側キャリーセーブドアダーの構成例を示す論理回路図である。
【図６７】本発明のデータ処理装置の更に他の実施例の整数演算部の構成例を示すブロック図である。
【符号の説明】
５  主記憶、１１    命令フェッチ部、１２  命令デコード部、１６    整数演算部、
１７  オペランドアクセス部、１０７  ＤＤバス、３０２  メインデコーダ、３０３  ２命令並列デコード可否判定部、３０４  サブデコーダ。
【図１】
0003543181.tif 000007
【図２】
0003543181.tif 000008
【図３】
0003543181.tif 000009
【図４】
0003543181.tif 000010
【図５】
0003543181.tif 000011
【図６】
0003543181.tif 000012
【図７】
0003543181.tif 000013
【図８】
0003543181.tif 000014
【図９】
0003543181.tif 000015
【図１０】
0003543181.tif 000016
【図１１】
0003543181.tif 000017
【図１２】
0003543181.tif 000018
【図１３】
0003543181.tif 000019
【図１４】
0003543181.tif 000020
【図１５】
0003543181.tif 000021
【図１６】
0003543181.tif 000022
【図１７】
0003543181.tif 000023
【図１８】
0003543181.tif 000024
【図１９】
0003543181.tif 000025
【図２０】
0003543181.tif 000026
【図２１】
0003543181.tif 000027
【図２２】
0003543181.tif 000028
【図２３】
0003543181.tif 000029
【図２４】
0003543181.tif 000030
【図２５】
0003543181.tif 000031
【図２６】
0003543181.tif 000032
【図２７】
0003543181.tif 000033
【図２８】
0003543181.tif 000034
【図２９】
0003543181.tif 000035
【図３０】
0003543181.tif 000036
【図３１】
0003543181.tif 000037
【図３２】
0003543181.tif 000038
【図３３】
0003543181.tif 000039
【図３４】
0003543181.tif 000040
【図３５】
0003543181.tif 000041
【図３６】
0003543181.tif 000042
【図３７】
0003543181.tif 000043
【図３８】
0003543181.tif 000044
【図３９】
0003543181.tif 000045
【図４０】
0003543181.tif 000046
【図４１】
0003543181.tif 000047
【図４２】
0003543181.tif 000048
【図４３】
0003543181.tif 000049
【図４４】
0003543181.tif 000050
【図４５】
0003543181.tif 000051
【図４６】
0003543181.tif 000052
【図４７】
0003543181.tif 000053
【図４８】
0003543181.tif 000054
【図４９】
0003543181.tif 000055
【図５０】
0003543181.tif 000056
【図５１】
0003543181.tif 000057
【図５２】
0003543181.tif 000058
【図５３】
0003543181.tif 000059
【図５４】
0003543181.tif 000060
【図５５】
0003543181.tif 000061
【図５６】
0003543181.tif 000062
【図５７】
0003543181.tif 000063
【図５８】
0003543181.tif 000064
【図５９】
0003543181.tif 000065
【図６０】
0003543181.tif 000066
【図６１】
0003543181.tif 000067
【図６２】
0003543181.tif 000068
【図６３】
0003543181.tif 000069
【図６４】
0003543181.tif 000070
【図６５】
0003543181.tif 000071
【図６６】
0003543181.tif 000072
【図６７】
0003543181.tif 000073