(57)【要約】【課題】  レジスタ及び演算ステップを削減可能なパイプライン式演算処理装置を提供する。【解決手段】  後段制御信号C3に応じて演算を行い演算結果データR3を出力する演算器６０を有する後段回路３と、後段制御信号C3に応じて演算結果データR3及び演算対象となる前段用データR1aに対して演算を行い演算データR1afを生成し、後段制御信号C3及び後段制御信号C3に後続する前段制御信号C1に応じて前段用データR1aと演算データR1afのいずれかを選択する第１前段フォワーディング機構１０ａを有する、後段回路３より前段の前段回路１とを備える。【選択図】      図１
2005128949.tif 000002
【特許請求の範囲】
【請求項１】
後段制御信号に応じて演算を行い演算結果データを出力する演算器を有する後段回路と、
前記後段制御信号に応じて前記演算結果データ及び演算対象となる前段用データに対して演算を行い演算データを生成し、前記後段制御信号及び前記後段制御信号に後続する前段制御信号に応じて前記前段用データと前記演算データのいずれかを選択する第１前段フォワーディング機構を有する、前記後段回路より前段の前段回路
とを備えることを特徴とするパイプライン式演算処理装置。
【請求項２】
前記第１前段フォワーディング機構は、
前記後段制御信号に応じて前記演算結果データと前記前段用データとに対して演算を行い前記演算データを生成するフォワーディング演算部と、
前記後段制御信号及び前記前段制御信号に応じて前記演算データと前記前段用データのいずれかを選択するフォワーディング選択部
とを備えることを特徴とする請求項１に記載のパイプライン式演算処理装置。
【請求項３】
前記フォワーディング演算部は、
前記後段制御信号で指定されるビットに対して前記前段用データの対応するビットを使用し、
前記後段制御信号で指定されるビットの他のビットに対して前記演算結果データを使用する
ことを特徴とする請求項２に記載のパイプライン式演算処理装置。
【請求項４】
後段制御信号に応じて演算を行い演算結果データを出力する手順と、
前記演算結果データが出力される後段ステージに先行して実行される前段ステージに前記演算結果データをバイパスし、前記後段制御信号に応じてバイパスされた前記演算結果データ及び演算対象となる前段用データに対して演算を行い演算データを生成する手順と、
前記後段制御信号及び前記後段制御信号に後続する前段制御信号に応じて前記前段用データと前記演算データのいずれかを選択する手順
とを含むパイプライン式演算処理方法。
【請求項５】
コンピュータに、
演算器により演算を行い演算結果データを出力する命令と、
前記演算器のある後段ステージに先行して実行される前段ステージに前記演算結果データをバイパスし、バイパスされた前記演算結果データ及び演算対象となる前段用データに対してフォワーディング演算部により演算を行い演算データを生成する命令と、
前記前段用データと前記演算データのいずれかをフォワーディング選択部により選択する命令
とを実行させることを特徴とするパイプライン式演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理技術に関し、特にフォワーディングを行うパイプライン式演算処理装置、パイプライン式演算処理方法及びパイプライン式演算処理プログラムに関する。
【背景技術】
【０００２】
演算処理装置においてパイプライン式演算処理装置が知られている。パイプライン式演算処理装置では、ひとつの命令の処理を複数のパイプラインステージ（以下において「ステージ」という。）に分割して、各ステージにおいて複数の命令を１ステージずつずらして並列処理が行われる。パイプライン式演算処理装置において、以前の命令の演算結果（演算結果データ）を現命令で参照する依存関係が存在する場合、以前の命令の演算結果が確定するまで現処理が開始できないためにパイプラインのストールが生じる。これをデータハザードという。このデータハザードによるパイプライン効率の低下を防止する手法として、フォワーディング機構が知られている。フォワーディング機構とは、ある命令Ａと、命令Ａの演算結果を使用する他の命令Ｂを順に実行する場合において、命令Ａの演算結果をレジスタに格納（ライトバック）する際、命令Ａの演算結果を命令Ｂが存在するステージにもバイパス（フォワーディング）して、参照可能とさせる機構である。フォワーディング機構によれば、命令Ａの演算結果のレジスタへのライトバックを待たずに、命令Ｂが存在するステージで命令Bの処理を行うことができる。このフォワーディング機構は、パイプラインコンピュータアーキテクチャにおけるデータハザードを解決する手段の１つとして知られている（例えば、特許文献１参照。）。
【特許文献１】特開２００１−１８８６７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、従来のフォワーディング機構は、フォワーディングした演算結果をそのままフォワーディング先のステージのデータに置き換えるものである。例えば、３２ビットのレジスタ及びデータバスを有するパイプライン式演算処理装置において、８ビットの演算を行い、その演算結果をフォワーディング機構を用いてフォワーディングする際には、８ビットの演算結果の他に、２４ビットの不要なデータも同時にフォワーディングされる。このため、フォワーディングによってレジスタ内の２４ビットの不要なデータが上書きされるデータ領域には有効なデータを格納することができない。したがって、３２ビットデータから８ビットデータへ変換した演算結果を一時的に格納するレジスタ等の余計なレジスタや、８ビットデータ群を３２ビットデータにマージする命令等の演算ステップを要する。
【０００４】
上記問題点を鑑み、本発明は、レジスタ及び演算ステップを削減可能なパイプライン式演算処理装置、パイプライン式演算処理方法及びパイプライン式演算処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明の第１の特徴は、（イ）後段制御信号に応じて演算を行い演算結果データを出力する演算器を有する後段回路と、（ロ）後段制御信号に応じて演算結果データ及び演算対象となる前段用データに対して演算を行い演算データを生成し、後段制御信号及び後段制御信号に後続する前段制御信号に応じて前段用データと演算データのいずれかを選択する第１前段フォワーディング機構を有する、後段回路より前段の前段回路とを備えるパイプライン式演算処理装置であることを要旨とする。
【０００６】
本発明の第２の特徴は、（イ）後段制御信号に応じて演算を行い演算結果データを出力する手順と、（ロ）演算結果データが出力される後段ステージに先行して実行される前段ステージに演算結果データをバイパスし、後段制御信号に応じてバイパスされた演算結果データ及び演算対象となる前段用データに対して演算を行い演算データを生成する手順と、（ハ）後段制御信号及び後段制御信号に後続する前段制御信号に応じて前段用データと演算データのいずれかを選択する手順とを含むパイプライン式演算処理方法であることを要旨とする。
【０００７】
本発明の第３の特徴は、コンピュータに、（イ）演算器により演算を行い演算結果データを出力する命令と、（ロ）演算器のある後段ステージに先行して実行される前段ステージに演算結果データをバイパスし、バイパスされた演算結果データ及び演算対象となる前段用データに対してフォワーディング演算部により演算を行い演算データを生成する命令と、（ハ）前段用データと演算データのいずれかをフォワーディング選択部により選択する命令とを実行させるパイプライン式演算処理プログラムであることを要旨とする。
【発明の効果】
【０００８】
本発明によれば、レジスタ及び演算ステップを削減可能なパイプライン式演算処理装置、パイプライン式演算処理方法及びパイプライン式演算処理プログラムを提供できる。
【発明を実施するための最良の形態】
【０００９】
以下に図面を参照して本発明の実施の形態を説明する。図面の記載において同一あるいは類似部分には同一あるいは類似な符号を付している。ただし、図面は模式的なものである。
【００１０】
（パイプライン式演算処理装置）
本発明の実施の形態に係るパイプライン式演算処理装置は、図１に示すように、プロセッサ１００、命令メモリ２００及びデータメモリ３００を備える。命令メモリ２００は、プロセッサ１００で実行される複数の命令（パイプライン式演算処理プログラム）を格納する。データメモリ３００は、多数のデータを格納する。プロセッサ１００は、命令フェッチ（ＩＦ）及び命令デコード（ＩＤ）ステージ（前段ステージ）である前段回路１、メモリアクセス（ＭＡ）ステージ（中段ステージ）である中段回路２、並びに演算実行（ＥＸ）及びライトバック（ＷＢ）ステージ（後段ステージ）である後段回路３を備える。前段回路１と中段回路２の間には前段レジスタ群２０が接続され、中段回路２と後段回路３の間には後段レジスタ群５０が接続されている。
【００１１】
前段回路１は、命令メモリ２００に接続された解読器４と、解読器４に接続されたレジスタファイル５と、レジスタファイル５にそれぞれ接続された第１前段フォワーディング機構１０ａ及び第２前段フォワーディング機構１０ｂを備える。レジスタファイル５は、図２に示すように、命令メモリ２００から読み出された命令の演算対象となる３２ビットデータD0，D1，D2，D3，・・・・・，D15を一時的にそれぞれ格納する複数のレジスタr0，r1，r2，r3，・・・・・，r15を備える。第１前段フォワーディング機構１０ａは、レジスタファイル５に接続されたフォワーディング演算部１１ａと、解読器４、レジスタファイル５及びフォワーディング演算部１１ａに接続されたフォワーディング選択部１２ａを有する。第２前段フォワーディング機構１０ｂは、レジスタファイル５に接続されたフォワーディング演算部１１ｂと、解読器４、レジスタファイル５及びフォワーディング演算部１１ｂに接続されたフォワーディング選択部１２ｂ備える。
【００１２】
前段レジスタ群２０は、解読器４に接続された信号用レジスタ２０ｘと、フォワーディング選択部１２ａ，１２ｂにそれぞれ接続されたデータ用レジスタ２０ａ，２０ｂを備える。信号用レジスタ２０ｘ及びデータ用レジスタ２０ａ，２０ｂはそれぞれ、例えば３２ビット幅のデータ幅を有する。
【００１３】
また、中段回路２は、信号用レジスタ２０ｘ、データメモリ３００及びデータ用レジスタ２０ａに接続された第１データ選択部３０ａと、信号用レジスタ２０ｘ、データメモリ３００及びデータ用レジスタ２０ｂに接続された第２データ選択部３０ｂと、第１及び第２データ選択部３０ａ，３０ｂにそれぞれ接続された第１後段フォワーディング機構４０ａ及び第２後段フォワーディング機構４０ｂとを備える。第１後段フォワーディング機構４０ａは、第１データ選択部３０ａに接続されたフォワーディング演算部４１ａと、信号用レジスタ２０ｘ、第１データ選択部３０ａ及びフォワーディング演算部４１ａに接続されたフォワーディング選択部４２ａを有する。第２後段フォワーディング機構４０ｂは、第１データ選択部３０ａに接続されたフォワーディング演算部４１ｂと、信号用レジスタ２０ｘ、第２データ選択部３０ｂ及びフォワーディング演算部４１ｂに接続されたフォワーディング選択部４２ｂを有する。
【００１４】
後段レジスタ群５０は、信号用レジスタ２０ｘ、フォワーディング演算部１１ａ，１１ｂ，４１ａ，４１ｂ、フォワーディング選択部１２ａ，１２ｂ，４２ａ，４２ｂに接続された信号用レジスタ５０ｘと、フォワーディング選択部４２ａ，４２ｂにそれぞれ接続されたデータ用レジスタ５０ａ，５０ｂを備える。信号用レジスタ５０ｘ及びデータ用レジスタ５０ａ，５０ｂはそれぞれ、例えば３２ビットのデータ幅を有する。
【００１５】
一方、後段回路３は、信号用レジスタ５０ｘ、データ用レジスタ５０ａ，５０ｂ、フォワーディング演算部１１ａ，１１ｂ，４１ａ，４２ｂに接続された演算器６０と、信号用レジスタ５０ｘ、演算器６０及びレジスタファイル５に接続されたライトバック機構７０を備える。
【００１６】
図１に示したプロセッサ１００において、前段回路１により前段ステージでは命令フェッチ（ＩＦ）及び命令デコード（ＩＤ）、中段回路２により中段ステージではメモリアクセス（ＭＡ）、後段回路３により後段ステージでは演算実行（ＥＸ）及びライトバック（ＷＢ）が行われる。前段ステージ、中段ステージ及び後段ステージでは、命令メモリ２００から読み出された命令に対して１クロックサイクル毎に順次並列処理が行われる。
【００１７】
図１に示した前段回路１において、解読器４は、命令メモリ２００から読み出された命令を解読して、前段制御信号C1を出力する。レジスタファイル５は、図１に示した前段制御信号C1に応じて３２ビットデータD0〜D15のいずれかが選択的に前段用データR1a，R1bとして読み出される。
【００１８】
フォワーディング演算部１１ａは、信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、演算器６０から出力された演算結果データR3とレジスタファイル５から読み出された前段用データR1aに対して演算を行い、演算結果を演算データR1afとして出力する。また、フォワーディング選択部１２ａは、解読器４から出力された前段制御信号C1、及び信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、フォワーディング演算部１１ａから出力された演算データR1af又はレジスタファイル５から読み出された前段用データR1aを選択し、中段用データR2aとして出力する。
【００１９】
ここで、フォワーディング選択部１２ａは、前段制御信号C1で指定される演算対象（前段用データ）R1a、及び後段制御信号C3で指定されるライトバックデータR3fの参照先が同一の場合、フォワーディング選択部１２ａは演算データR1afを選択する。ここで、「演算対象（前段用データ）R1aの参照先」とは、演算対象（前段用データ）R1aの格納元であるレジスタファイル５のレジスタを意味する。また、「ライトバックデータR3fの参照先」とは、ライトバックデータR3fの格納先となるレジスタファイル５のレジスタを意味する。「参照先が同一」とは、演算対象（前段用データ）R1aの格納元であるレジスタファイル５のレジスタ、及びライトバックデータR3fの格納先となるレジスタファイル５のレジスタが一致することを意味する。フォワーディング選択部１２ａは、前段用データR1a及びライトバックデータR3fの参照先が互いに異なる場合、前段用データR1aを選択する。選択された演算データR1af又は前段用データR1aは、中段用データR2aとして出力される。
【００２０】
フォワーディング演算部１１ｂは、演算器６０から出力された演算結果データR3、及びレジスタファイル５から読み出された前段用データR1bに対して演算を行い、演算結果を演算データR1bfとして出力する。フォワーディング選択部１２ｂは、解読器４から出力された前段制御信号C1、及び信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、演算データR1bf又は前段用データR1bを選択して中段用データR2bとして出力する。
【００２１】
また、前段レジスタ群２０において、信号用レジスタ２０ｘは、解読器４から出力された前段制御信号C1を１クロックサイクル保持する。保持された前段制御信号C1は、中段制御信号C2として読み出される。データ用レジスタ２０ａは、フォワーディング選択部４２ａから出力された中段用データR2aを１クロックサイクル保持する。データ用レジスタ２０ｂは、フォワーディング選択部４２ｂから出力された中段用データR2bを１クロックサイクル保持する。
【００２２】
また、中段回路２において、データメモリ３００には、信号用レジスタ２０ｘから読み出された中段制御信号C2に応じてデータの読み出し又は書き込みが行われる。第１データ選択部３０ａは、信号用レジスタ２０ｘから読み出された中段制御信号C2に応じて、データメモリ３００から読み出された読み出しデータRr1又はデータ用レジスタ２０ａから読み出された中段用データR2aを選択し、選択データR2xとして出力する。また、第２データ選択部３０ｂは、信号用レジスタ２０ｘから読み出された中段制御信号C2に応じて、データメモリ３００から読み出された読み出しデータRr2又はデータ用レジスタ２０ｂから読み出された中段用データR2bを選択して選択データR2yとして出力する。
【００２３】
フォワーディング演算部４１ａは、信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、演算器６０から出力された演算結果データR3と、第１データ選択部３０ａから出力された選択データR2xに対して演算を行い、演算結果を演算データR2afとして出力する。フォワーディング選択部４２ａは、信号用レジスタ２０ｘから読み出された中段制御信号C2及び信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、演算データR2af又は第１データ選択部３０ａから出力された選択データR2xを選択して後段用データR3aとして出力する。
【００２４】
フォワーディング演算部４１ｂは、信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて演算器６０から出力された演算結果データR3と選択データR2yに対して演算を行い、演算結果を演算データR2bfとして出力する。フォワーディング選択部４２ｂは、信号用レジスタ２０ｘから読み出された中段制御信号C2及び信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、演算データR2bf又は選択データR2yを選択して後段用データR3bとして出力する。
【００２５】
後段レジスタ群５０において、信号用レジスタ５０ｘは、信号用レジスタ２０ｘから読み出された中段制御信号C2を１クロックサイクル保持する。保持された中段制御信号C2は後段制御信号C3として読み出される。データ用レジスタ５０ａは、フォワーディング選択部４２ａから出力された後段用データR3aを１クロックサイクル保持する。データ用レジスタ５０ｂは、フォワーディング選択部４２ａから出力された後段用データR3bを１クロックサイクル保持する。
【００２６】
一方、後段回路３において、演算器６０は、信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、データ用レジスタ５０ａから読み出された後段用データR3a、及びデータ用レジスタ５０ｂから読み出された後段用データR3bに対して演算を行い、演算結果データR3を出力する。演算結果データR3は、フォワーディング演算部１１ａ，１１ｂ，４１ａ，４１ｂにフォワーディング（バイパス）される。また、ライトバック機構７０は、信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、演算器６０から出力された演算結果データR3、及び格納先となるレジスタファイル５のレジスタから読み出された格納先データR3wに対して演算を行い、演算結果をライトバックデータR3fとして出力する。ライトバックデータR3fは、格納先となるレジスタファイル５のレジスタに格納される。
【００２７】
命令メモリ２００が格納しているパイプライン式演算処理プログラムの命令としては、「演算命令」と「メモリストア命令」の２つの命令がある。演算命令は、図１及び図２に示すレジスタファイル５のレジスタr0〜r15に格納されているデータD0〜D15、及びデータメモリ３００のアドレスのデータを演算対象とする。演算命令は、例えば、第１の演算命令
“opecode.func dst,src0”              ・・・・・（１）
あるいは、第２の演算命令
“opecode.func dst,src0,src1”  ・・・・・（２）
の書式を取る。“opecode”は、演算対象に対して演算器６０等が行う演算を指定する。“opecode”としては、３２ビットデータを１６ビットデータに変換する演算を指定する“f32to16i”、３２ビットデータを８ビットデータに変換する演算を指定する“f32to16i”、加算を指定する“add”や、減算を指定する“sub”等を取る。“func”は、フォワーディング演算部１１ａ，１１ｂ，４１ａ，４１ｂ及びライトバック機構７０等が行う機能を指定する。“dst”としては、“rd（d=0,1,…,15）”又は“（rd）”を取る。“rd”は、ライトバックデータR3fの格納先となるレジスタファイル５のレジスタを指定する。“（rd）”は、ライトバックデータR3fの格納先となるデータメモリ３００のアドレスを指定する。“src0”としては、“rn（n=0,1,…,15）”又は“（rn）”を取る。“rn”は、演算対象の格納元のレジスタファイル５のレジスタを指定する。“（rn）”は、演算対象の格納元のデータメモリ３００のアドレスを指定する。“src1”としては、“rm（m=0,1,…,15）”又は“（rm）”を取る。“rm”は、“src0”で指定される演算対象とペアの演算対象の格納元のレジスタを指定する。“（rm）”は、“src0”で指定される演算対象とペアの演算対象の格納元のデータメモリ３００のアドレスを指定する。
【００２８】
即ち、図１に示したプロセッサ１００において、例えば第１の演算命令（１）が与えられた場合、“src0”で指定される演算対象に対し、“opecode”で指定される演算が行われ、演算結果が“dst”で指定される格納先に格納される。また、第２の演算命令（２）が与えられた場合、“src0”及び“src1”で指定される２つの演算対象に対し、“opecode”で指定される演算が行われ、演算結果が“dst”で指定される格納先に格納される。
【００２９】
例えば“opecode”としてニーモニック“f32to16i”を割り当て、“f32to16i.func dst,src0”とされた第１の演算命令（１）が与えられた場合、演算器６０は、図６に示すように、“src0”で指定されるレジスタから読み出された後段用データR3aに相当する３２ビット浮動小数点Dnを１６ビット整数dnに変換する。変換された１６ビット整数dnは、３２ビットデータの下位ビット側に位置付けられるものとする。変換された１６ビット整数dnは演算結果データR3として出力される。また、“opecode”としてニーモニック“add16i”を割り当て、“add16i.func dst,src0”と記述された第１の演算命令（１）が与えられた場合、演算器６０は、“src0”で指定されるレジスタから読み出された後段用データR3aの上位ビット側の１６ビット整数と下位ビット側の１６ビット整数を加算する。
【００３０】
図１に示したフォワーディング演算部１１ａ，１１ｂ，４１ａ，４１ｂ及びライトバック機構７０は、第１の演算命令（１）又は第２の演算命令（２）に対応する前段制御信号C1、中段制御信号C2及び後段制御信号C3にそれぞれ応じて、例えばＬＬバイトレーンライトイネーブル機能、ＬＨバイトレーンライトイネーブル機能、ＨＬバイトレーンライトイネーブル機能、ＨＨバイトレーンライトイネーブル機能、Ｌハーフワードレーンライトイネーブル機能、及びＨハーフワードレーンライトイネーブル機能等のライトマスク機能や、８ビットシフト−モディファイ機能、１６ビットシフト−モディファイ機能、及び２４ビットシフト−モディファイ機能等のｎビット−シフト−モデファイ機能を実行する。
【００３１】
例えばＬＬバイトレーンライトイネーブル機能が実行される場合、第１の演算命令（１）の“func”としてニーモニック“fw8ll”を割り当て、“opecode.fw8ll dst,src0”と記述する。例えば図１に示したフォワーディング演算部１１ａは、上記第１の演算命令（１）に対応する前段制御信号（ライトマスク信号）C1に応じて、演算結果データR3及び前段用データR1aに対して演算を行う。ここで、図３（ａ）に示すように、演算結果データR3の下位８ビット“ｄ”と、前段用データR1aの上位２４ビット“ｗ，ｘ，ｙ”がマージされ、演算データR1afとして、
R1af[31:0]=fw8ll(R3[31:0],R1a[31:0])
={R1a[31:24],R1a[23:16],R1a[15:8],R3[7:0]}  …（３）
が出力される。
【００３２】
また、ＬＨバイトレーンライトイネーブル機能、ＨＬバイトレーンライトイネーブル機能及びＨＨバイトレーンライトイネーブル機能がそれぞれ実行される場合、第１の演算命令（１）の“func”としてニーモニック“fw16ll”、“fw16hl”及び“fw16hh”を割り当て、“opecode.fw8lh dst,src0”、“opecode.fw8hl dst,src0”及び“opecode.fw8hh dst,src0”とそれぞれ記述する。図１に示したフォワーディング演算部１１ａは、上記第１の演算命令（１）にそれぞれ対応する前段制御信号（ライトマスク信号）C1に応じて、演算結果データR3及び前段用データR1aに対してそれぞれ演算を行う。
【００３３】
ＬＨバイトレーンライトイネーブル機能では、 図３（ｂ）に示すように、演算結果データR3の１５〜８ビット“ｃ”と、前段用データR1aの上位３１〜１６ビット“ｗ，ｘ”及び下位７〜０ビット“ｚ”がマージされる。また、ＨＬバイトレーンライトイネーブル機能では、図３（ｃ）に示すように、演算結果データR3の２３〜１６ビット“ｂ”と、前段用データR1aの上位３１〜２４ビット“ｗ”及び下位１５〜０ビット“ｙ，ｚ”がマージされる。一方、ＨＨバイトレーンライトイネーブル機能では、図３（ｄ）に示すように、演算結果データR3の上位８ビット“ａ”と前段用データR1aの下位２４ビット“ｘ，ｙ，ｚ”がマージされる。その結果、演算データR1afとしてそれぞれ、
R1af[31:0]=fw8lh(R3[31:0],R1a[31:0])
={R1a[31:24],R1a[23:16],R3[15:8],R1a[7:0]}  …（４）
R1af[31:0]=fw8hl(R3[31:0],R1a[31:0])
={R1a[31:24],R3[23:16],R1a[15:8],R1a[7:0]}  …（５）
R1af[31:0]=fw8hh(R3[31:0],R1a[31:0])
={R3[31:24],R1a[23:16],R1a[15:8],R1a[7:0]}  …（６）
が出力される。
【００３４】
また、Lハーフワードレーンライトイネーブル機能及びHハーフワードレーンライトイネーブル機能が実行される場合、第１の演算命令（１）の“func”としてニーモニック“fw16l”及び“fw16h”を割り当て、“opecode.fw16l dst,src0”及び“opecode.fw16h dst,src0”とそれぞれ記述する。図１に示したフォワーディング演算部１１ａは、上記第１の演算命令（１）にそれぞれ対応する前段制御信号（ライトマスク信号）C1に応じて、演算結果データR3及び前段用データR1aに対してそれぞれ演算を行う。Lハーフワードレーンライトイネーブル機能では、図４（ａ）に示すように、下位１６ビットには演算結果データR3の下位１６ビット“ｃ，ｄ”と、前段用データR1aの上位１６ビット“ｗ，ｘ”がマージされる。また、Hハーフワードレーンライトイネーブル機能では、図４（ｂ）に示すように、演算結果データR3の上位１６ビット“ａ，ｂ”と、前段用データR1aの下位１６ビット“ｙ，ｚ”がマージされる。その結果、演算データR1afとしてそれぞれ、
R1af[31:0]=fw16l(R3[31:0],R1a[31:0])
={R1a[31:16],R3[15:0]}        …（７）
R1af[31:0]=fw16h(R3[31:0],R1a[31:0])
={R3[31:16],R1a[15:0]}        …（８）
が出力される。
【００３５】
また、８ビットシフト−モディファイ信号、１６ビットシフト−モディファイ機能、及び２４ビットシフト−モディファイ機能等をそれぞれ実行する場合、第１の演算命令（１）の“func”としてニーモニック“frs8m（function shift right and modify 8bit）”，“frs16m”，“frs24m”を割り当て、“opecode.frs8m dst,src0”，“opecode.frs16m dst,src0”，“opecode.frs24m dst,src0”とそれぞれ記述する。図１に示したフォワーディング演算部１１ａは、上記第１の演算命令（１）にそれぞれ対応する前段制御信号（ｎビットシフト−モディファイ信号）C1に応じて、演算結果データR3及び前段用データR1aに対してそれぞれ演算を行う。
【００３６】
８ビットシフト−モディファイ機能では、図５（ａ）に示すように、演算結果データR3の下位８ビット“ｄ”を下位８ビットに使用し、前段用データR1aの下位２４ビット“ｘ，ｙ，ｚ”を上位に８ビットシフトして上位２４ビットに使用する。また、１６ビットシフト−モディファイ機能では、図５（ｂ）に示すように、演算結果データR3の下位１６ビット“ｃ，ｄ”を下位１６ビットに使用し、前段用データR1aの下位１６ビット“ｙ，ｚ”を上位に１６ビットシフトして上位１６ビットに使用する。一方、２４ビットシフト−モディファイ信号では、図５（ｃ）に示すように、演算結果データR3の下位２４ビット“ｂ，ｃ，ｄ”を下位２４ビットに使用し、前段用データR1aの下位８ビット“ｚ”を上位に２４ビットシフトして上位８ビットに使用する。その結果、演算データR1afとしてそれぞれ、
R1af[31:0]=frs8m(R3[31:0],R1a[31:0])
={R1a[23:0],R3[7:0]}          …（９）
R1af[31:0]=frs16m(R3[31:0],R1a[31:0])
={R1a[15:0],R3[15:0]}          …（１０）
R1af[31:0]=frs24m(R3[31:0],R1a[31:0])
={R1a[7:0],R3[23:0]}          …（１１）
が出力される。
【００３７】
一方、メモリストア命令は、レジスタファイル５のレジスタのデータを、レジスタファイル５の他のレジスタ又はデータメモリ３００に格納（ストア）する命令である。メモリストア命令は、例えば、
“store st_src ,st_dst”        ・・・・・（１２）
の書式を取る。“store”は、図１に示したプロセッサ１００にメモリストアを指定する。“st_src”は、“rd（d=0,1,…,15）”を取り、格納元となるレジスタファイル５のレジスタを指定する。“st_dst”は、“rn（n=0,1,…,15）”又は“（rn）”を取る。“rn”は、格納先となるレジスタファイル５のレジスタを指定する。“（rn）”は、格納先となるデータメモリ３００のアドレスを指定する。即ち、“store st_src,st_dst”で指定される命令が与えられた場合、“st_src”で指定されるレジスタのデータを、“st_dste”で指定される格納先に格納する。
【００３８】
（パイプライン式演算処理方法）
次に、図７を参照して、本発明の実施の形態に係るパイプライン式演算処理方法を説明する。実施の形態に係るパイプライン式演算処理方法では、
１行目  “f32to16i. fw16l r14,r0”      （第１の命令Ｉ11）
２行目  “f32to16i. fw16h r14,r1”      （第２の命令Ｉ12）
３行目  “add16i r15,r14”              （第３の命令Ｉ13）
のコードで記述された命令を用いる。ここで、図２に示したレジスタファイル５のレジスタr0，r1には、３２ビット浮動小数点D0，D1がそれぞれ格納されているとする。
【００３９】
（イ）図７のサイクルＴ１１のステップＳ１１１において、図１に示した前段回路１では、命令メモリ２００から第１の命令Ｉ11が読み出される。解読器４は、読み出された第１の命令Ｉ11を解読し、前段制御信号C1を出力する。また、出力された前段制御信号C1に応じて、レジスタファイル５のレジスタr0から３２ビット浮動小数点D0が前段用データR1aとして読み出される。フォワーディング選択部１２ａは、前段制御信号C1に応じて、前段用データR1aを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から読み出された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００４０】
（ロ）次のサイクルＴ１２のステップＳ１２１において、中段回路２では、ステップＳ１１１で信号用レジスタ２０ｘに保持された、第１の命令Ｉ11に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、中段用データR2aを選択して選択データR2xとして出力する。フォワーディング選択部４２ａは、中段制御信号C2に応じて、選択データR2xを選択して後段用データR3a.として出力する。出力された後段用データR3aはデータ用レジスタ５０ａに保持される。また、信号用レジスタ２０ｘから読み出された中段制御信号C2は信号用レジスタ５０ｘに保持される。
【００４１】
（ハ）ステップＳ１２２において、図１に示した前段回路１では、命令メモリ２００から第２の命令Ｉ12が読み出される。解読器４は、読み出された第２の命令Ｉ12を解読し、前段制御信号C1を出力する。また、出力された前段制御信号C1に応じて、レジスタファイル５のレジスタr1から３２ビット浮動小数点D1が前段用データR1aとして読み出される。フォワーディング選択部１２ａは、前段制御信号C1に応じて、前段用データR1aを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から出力された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００４２】
（ニ）次のサイクルＴ１３のステップＳ１３１において、図１に示した後段回路３では、ステップＳ１２１で信号用レジスタ５０ｘに保持された、第１の命令Ｉ11に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ５０ａから読み出された前段用データR1aに相当する３２ビット浮動小数点D0を１６ビット整数d0に変換して演算結果データR3として出力する。ライトバック機構７０は、後段制御信号C3に応じて、Ｌハーフワードレーンライトイネーブル機能を実行する。即ち、図８（ａ）に示すように、演算結果データR3に相当する１６ビット整数d0を格納先データR3wに相当するレジスタr14の下位１６ビットデータd14bと置き換えて上位１６ビットデータd14aとマージする。その結果、ライトバックデータR3fとして、
R1af ={r14[31:16], d0}={d14a d0}        …（１３）
が出力される。出力されたライトバックデータR3fは、図１に示したレジスタファイル５のレジスタr14に格納される。
【００４３】
（ホ）ステップＳ１３２において、中段回路２では、ステップＳ１２２で信号用レジスタ２０ｘに保持された、第２の命令Ｉ12に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された中段用データR2aを選択して選択データR2xとして出力する。フォワーディング選択部４２ａは、中段制御信号C2で指定される中段用データR2aの参照先“r1”、及びステップＳ１３１で信号用レジスタ５０ｘから読み出された後段制御信号C3で指定されるライトバックデータR3fの参照先“r14”が異なるので、第１データ選択部３０ａから出力された選択データR2xを選択して後段用データR3a.として出力する。出力された後段用データR3aはデータ用レジスタ５０ａに保持される。また、信号用レジスタ２０ｘから読み出された中段制御信号C2は信号用レジスタ５０ｘに保持される。
【００４４】
（ヘ）ステップＳ１３３において、図１に示した前段回路１では、命令メモリ２００から第３の命令Ｉ13が読み出される。解読器４は、読み出された第３の命令Ｉ13を解読し前段制御信号C1を出力する。また、解読器４から出力された前段制御信号C1に応じて、レジスタファイル５のレジスタr0から３２ビット浮動小数点D0が前段用データR1aとして読み出される。フォワーディング演算部１１ａは、ステップＳ１３１で信号用レジスタ５０ｘから読み出された第１の命令Ｉ11に対応する後段制御信号C3に応じて、Ｌハーフワードレーンライトイネーブル機能を実行する。即ち、図８（ｂ）に示すように、ステップＳ１３１で出力された演算結果データR3に相当する１６ビット整数d0を、前段用データR1aに相当するレジスタr14の下位１６ビットデータd14bと置き換えて上位１６ビットデータd14aとマージする。その結果、演算データR1afとして、
R1af ={r14[31:16], d0}={d14a, d0}       …（１４）
が出力される。フォワーディング選択部１２ａは、前段制御信号C1に対応する第３の命令Ｉ13で指定される前段用データR1aの参照先“r14”、及びステップＳ１３１で信号用レジスタ５０ｘから読み出された後段制御信号C3に対応する第１の命令Ｉ11で指定されるライトバックデータR3fの参照先“r14”が互いに同一なので、フォワーディング演算部１１ａから出力された演算データR1afを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から出力された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００４５】
（ト）次のサイクルＴ１４のステップＳ１４１において、図１に示した後段回路３では、ステップＳ１３２で信号用レジスタ５０ｘに保持された、第２の命令Ｉ12に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ５０ａから読み出されたレジスタr1の３２ビット浮動小数点D1を１６ビット整数d1に変換し演算結果データR3として出力する。ライトバック機構７０は、後段制御信号C3に応じて、Ｈハーフワードレーンライトイネーブル機能を実行する。即ち、図８（ｃ）に示すように、演算結果データR3に相当する１６ビット整数d1を、格納先データR3wに相当するレジスタr14の上位１６ビットデータd14aと置き換えて下位１６ビットデータd0とマージする。その結果、ライトバックデータR3fとして、
R3f={r14[31:16], d0}={d1,d0}    …（１５）
が出力される。出力されたライトバックデータR3fは、図２に示したレジスタファイル５のレジスタr15に格納される。
【００４６】
（チ）また、ステップＳ１４２において、中段回路２では、ステップＳ１３３で信号用レジスタ２０ｘに保持された第３の命令Ｉ13に対応する前段制御信号C1が中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された演算データR1afを選択して選択データR2xとして出力する。フォワーディング演算部４１ａは、ステップＳ１４１で信号用レジスタ５０ｘから読み出された第２の命令Ｉ12に対応する後段制御信号C3に応じて、Ｈハーフワードレーンライトイネーブル機能を実行する。即ち、図８（ｄ）に示すように、ステップＳ１４１で出力された演算結果データR3に相当する１６ビット整数d1と、第１データ選択部３０ａから出力された選択データR2xに相当するレジスタr14の上位１６ビットデータd14aと置き換えて下位１６ビットデータd0とマージする。その結果、演算データR2afとして、
R2af={r14[31:16], d0}={d1,d0}   …（１６）
が出力される。フォワーディング選択部４２ａは、中段制御信号C2で指定される演算対象（選択データ）R2xの参照先“r14”、及びステップＳ１４１で信号用レジスタ５０ｘから読み出された後段制御信号C3で指定されるライトバックデータR3fの参照先“r14”が同一であるので、演算データR2afを選択して後段用データR3aとして出力する。出力された後段用データR3aはデータ用レジスタ５０ａに保持される。また、信号用レジスタ２０ｘから読み出された中段制御信号C2は信号用レジスタ５０ｘに保持される。
【００４７】
（リ）次のサイクルＴ１４のステップＳ１５１において、後段回路３では、ステップＳ１４２で信号用レジスタ５０ｘに保持された第３の命令Ｉ13に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ５０ａから読み出された演算データR2afの上位ビット側の１６ビット整数d1と下位ビット側の１６ビット整数d0を加算し、演算結果データR3として出力する。ライトバック機構７０は、後段制御信号C3に応じて、演算結果データR3をレジスタファイル５のレジスタr15に格納する。
【００４８】
以上説明したように、本発明の実施の形態によれば、また、第１前段フォワーディング機構１０ａにより、前段用データR1aと演算結果データR3に対して演算を行い演算データR1afを出力することができる。また、第１後段フォワーディング機構４０ａにより、選択データR2xと演算結果データR3に対して演算を行い演算データR2afを出力することができる。したがって、前段用データR1a又は選択データR2xと演算結果データR3をマージさせるためのビットマージ命令等の演算ステップを削減可能となる。
【００４９】
また、ライトバック機構７０により、演算結果データR3と格納先データR3wに対して演算を行いライトバックデータR3fをレジスタファイル５のレジスタに格納することができるので、フォワーディングが行われる場合と行われない場合のいずれにおいてもデータの整合性をとることができる。
【００５０】
更に、格納先データR3w、演算データR1a及び選択データR2xの特定のビットにライトマスク付きでフォワーディング及びライトバックが行われるため、演算結果データR3の全ビットを格納先データR3w、前段用データR1a及び選択データR2xと置き換えずに有効なデータをフォワーディング及びライトバックすることができるので、パイプラインのストールを防止可能となる。また、従来ではフォワーディング及びライトバックにより上書きされてしまう有効なデータを別なレジスタに退避しておく必要があったが、実施の形態によれば、有効なデータを退避不要となり、有効なデータを退避させるレジスタが不要となる。
【００５１】
なお、便宜上図１に示した第１前段フォワーディング機構１０ａ及び第１後段フォワーディング機構４０ａ等を用いる手順を説明したが、第２前段フォワーディング機構１０ｂ及び第２後段フォワーディング機構４０ｂ等も同様の機能を有することは勿論である。また、実施の形態に係る演算処理方法では、第１〜第３の命令Ｉ11，Ｉ12，Ｉ13を実行する手順を説明したが、第１〜第３の命令Ｉ11，Ｉ12，Ｉ13に先行する命令及び後続する命令が図１に示した命令メモリ２００から読み出され、プロセッサ１００で実行しても良いのは勿論のことである。
【００５２】
（第１の変形例）
本発明の実施の形態の第１の変形例に係るパイプライン式演算処理方法を図９を参照して説明する。第１の変形例に係る演算処理方法では、
１行目  “f32to16i.fw16l r15,r0”       （第１の命令Ｉ21）
２行目  “f32to16i.fw16h r15,r1”       （第２の命令Ｉ22）
３行目  “store r15,(r3)”              （第３の命令Ｉ23）
のコードで記述された命令を用いる。ここで、図２に示したレジスタファイル５のレジスタr0，r1には、３２ビット浮動小数点D0，D1がそれぞれ格納されているとする。
【００５３】
（イ）図９のサイクルＴ２１のステップＳ２１１において、図１に示した前段回路１では、命令メモリ２００から第１の命令Ｉ21が読み出される。解読器４は、第１の命令Ｉ21を解読し前段制御信号C1を出力する。また、解読器４から出力された前段制御信号C1に応じて、レジスタファイル５のレジスタr0から３２ビット浮動小数点D0が前段用データR1aとして読み出される。フォワーディング選択部１２aは、前段制御信号C1に応じて、前段用データR1aを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から出力された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００５４】
（ロ）次のサイクルＴ２２のステップＳ２２１において、中段回路２では、ステップＳ２１１で信号用レジスタ２０ｘに保持された、第１の命令Ｉ21に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された中段用データR2aを選択して選択データR2xとして出力する。フォワーディング選択部４２ａは、信号用レジスタ２０ｘから読み出された中段制御信号C2に応じて、選択データR2xを選択して後段用データR3a.として出力する。出力された後段用データR3aは、データ用レジスタ５０ａに保持される。また、信号用レジスタ２０ｘから読み出された中段制御信号C2は、信号用レジスタ５０ｘに保持される。
【００５５】
（ハ）また、ステップＳ２２２において、前段回路１では、命令メモリ２００から第２の命令Ｉ22が読み出される。解読器４は、第２の命令Ｉ22を解読し中段制御信号C2を出力する。また、解読器４から出力された前段制御信号C1に応じて、レジスタファイル５のレジスタr1から３２ビット浮動小数点D1が前段用データR1aとして読み出される。フォワーディング選択部１２aは、前段制御信号C1に応じて、前段用データR1aを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から出力された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００５６】
（ニ）サイクルＴ２３のステップＳ２３１において、後段回路３では、ステップＳ２２１で信号用レジスタ５０ｘに保持された、第１の命令Ｉ21に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ５０ａから読み出された後段用データR3aに相当する３２ビット浮動小数点D0を１６ビット整数d0に変換し、演算結果データR3として出力する。ライトバック機構７０は、後段制御信号C3に応じて、Ｌハーフワードレーンライトイネーブル機能を実行する。即ち、図１０（ａ）に示すように、演算結果データR3に相当する１６ビット整数d0を格納先データR3wに相当するレジスタr15の下位１６ビットデータd15bと置き換えて上位１６ビットデータd15aとマージする。その結果、ライトバックデータR3fとして、
R3f ={r15[31:16],d0}={d15a,d0}  …（１７）
が出力される。出力されたライトバックデータR3fは、図２に示したレジスタファイル５のレジスタr15に格納される。
【００５７】
（ホ）ステップＳ２３２において、中段回路２では、ステップＳ１１１で信号用レジスタ２０ｘに保持された、第２の命令Ｉ22に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された中段用データR2aを選択して選択データR2xとして出力する。フォワーディング選択部４２ａは、中段制御信号C2の演算対象（選択データ）R2xの参照先“r1”、及びステップS２３１で信号用レジスタ５０ｘから読み出された第１の命令Ｉ21に対応する後段制御信号C3の参照先“(r3)”が異なるので、第１データ選択部３０ａから出力された選択データR2xを選択して後段用データR3a.として出力する。出力された後段用データR3aはデータ用レジスタ５０ａに保持される。また、信号用レジスタ２０ｘから読み出された中段制御信号C2は、信号用レジスタ５０ｘに保持される。
【００５８】
（ヘ）また、ステップＳ２３３において、前段回路１では、命令メモリ２００から第３の命令Ｉ33が読み出される。解読器４は、第３の命令Ｉ33を解読して後段制御信号C3を出力する。出力された後段制御信号C3は、信号用レジスタ２０ｘに保持される。フォワーディング演算部１１ａは、ステップＳ２３１で信号用レジスタ５０ｘから読み出された第１の命令Ｉ21に対応する前段制御信号C1に応じて、Ｌハーフワードレーンライトイネーブル機能を実行する。即ち、図１０（ｂ）に示すように、演算器６０から出力されバイパスされた演算結果データR3に相当する１６ビット整数d0を前段用データR1aに相当するレジスタr15の下位１６ビットデータd15bと置き換えて上位１６ビットデータd15aとマージする。その結果、演算データR1afとして、
R1af ={r15[31:16],d0}={d15a,d0} …（１８）
が出力される。図１に示したフォワーディング選択部１２ａは、ステップＳ２３１で信号用レジスタ５０ｘから読み出された第１の命令Ｉ21に対応する後段制御信号C3で指定されるライトバックデータR3fの参照先“r15”、及び前段制御信号C1で指定される前段用データR1aの参照先”r15”が同一なので、演算データR1afを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。
【００５９】
（ト）次のサイクルＴ２４のステップＳ２４１において、後段回路３では、ステップＳ２３２で信号用レジスタ５０ｘに保持された第２の命令Ｉ22に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ５０ａから読み出された３２ビット浮動小数点D1を１６ビット整数d1に変換し、演算結果データR3として出力する。ライトバック機構７０は、信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、Ｈハーフワードレーンライトイネーブル機能を実行する。即ち、図１０（ｃ）に示すように、１６ビット整数d1を格納先データR3wに相当するレジスタr15の上位１６ビットデータd15aに置き換えて下位１６ビットデータd0とマージする。その結果、ライトバックデータR3fとして
R2af={d1,d0}    …（１９）
が出力される。出力されたライトバックデータR3fは、図１に示したレジスタファイル５のレジスタr15に格納される。
【００６０】
（チ）また、ステップＳ２４２において、中段回路２では、ステップＳ２３３で信号用レジスタ２０ｘに保持された第３の命令Ｉ23に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された中段用データR2aを選択して選択データR2xとして出力する。フォワーディング演算部４１ａは、ステップＳ２４１で信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、Ｈハーフワードレーンライトイネーブル機能を実行する。即ち、図１０（ｄ）に示すように、ステップＳ２４１で演算器６０から出力された演算結果データR3に相当する１６ビット整数d1を、選択データR2xみに相当するレジスタr15の上位１６ビットデータd15aと置き換えて下位１６ビットデータd15bとマージする。その結果、演算データR2afとして、
R2af={d1,d0}    …（２０）
が出力される。フォワーディング選択部１２ａは、中段制御信号C2で指定される選択データR2xの参照先“r15”及びステップＳ２４１で信号用レジスタ５０ｘから読み出された後段制御信号C3で指定されるライトバックデータR3fの参照先“r15”が同一なので、フォワーディング演算部４１ａから出力された演算データR2afを選択して後段用データ（書き込みデータ）R3aとして出力する。書き込みデータR3aは、データメモリ３００のアドレスr3へ格納される。次のサイクルＴ１５のステップＳ２５１では、後段回路３において処理は行われない。
【００６１】
以上説明したように、第１の変形例によれば、実施の形態と同様に、前段用データR1a又は選択データR2xと演算結果データR3をマージさせるためのビットマージ命令等の演算ステップを削減可能となる。また、フォワーディングが行われる場合と行われない場合のいずれにおいてもデータの整合性をとることができる。
【００６２】
更に、格納先データR3w、演算データR1a及び選択データR2xの特定のビットにライトマスク付きでフォワーディング及びライトバックが行われるため、演算結果データR3の全ビットを格納先データR3w、前段用データR1a及び選択データR2xと置き換えずに有効なデータをフォワーディング及びライトバックすることができるので、パイプラインのストールを防止可能となる。また、有効なデータを退避不要となり、有効なデータを退避させるレジスタが不要となる。
【００６３】
（第２の変形例）
次に、図１１を参照して、本発明の実施の形態の第２の変形例に係る演算処理方法を説明する。第２の変形例に係る演算処理方法では、
１行目  “f32to16i.frs16m r1,r0”       （第１の命令Ｉ31）
２行目  “add16i r15,r1”              （第２の命令Ｉ32）
のコードで記述された命令を用いる。ここで、レジスタr1の下位ビット側には１６ビット整数d1が予め格納されているとする。
【００６４】
（イ）図１１のサイクルＴ３１のステップＳ３１１において、図１に示した前段回路１では、命令メモリ２００から第１の命令Ｉ31が読み出される。解読器４は、第１の命令Ｉ31を解読し前段制御信号C1を出力する。前段制御信号C1に応じて、レジスタファイル５のレジスタr0から３２ビット浮動小数点D0が前段用データR1aとして読み出される。フォワーディング選択部１２aは、前段制御信号C1に応じて、前段用データR1aを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から出力された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００６５】
（ロ）次のサイクルＴ３２のステップＳ３２１において、中段回路２では、ステップＳ１１１で信号用レジスタ２０ｘに保持された、第１の命令Ｉ31に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された中段用データR2aを選択して選択データR2xとして出力する。フォワーディング選択部４２ａは、中段制御信号C2に応じて、選択データR2xを選択して後段用データR3a.として出力する。出力された後段用データR3aは、データ用レジスタ５０ａに保持される。また、信号用レジスタ２０ｘから読み出された中段制御信号C2は、信号用レジスタ５０ｘに保持される。
【００６６】
（ハ）また、ステップS３２２において、前段回路１では、命令メモリ２００から第２の命令Ｉ32が読み出される。解読器４は、第２の命令Ｉ32を解読して中段制御信号C2を出力する。出力された前段制御信号C1に応じて、レジスタファイル５のレジスタr1から３２ビット浮動小数点D1が前段用データR1aとして読み出される。フォワーディング選択部１２aは、前段制御信号C1に応じて、前段用データR1aを選択して中段用データR2aとして出力する。出力された中段用データR2aはデータ用レジスタ２０ａに保持される。また、解読器４から出力された前段制御信号C1は信号用レジスタ２０ｘに保持される。
【００６７】
（ニ）サイクルＴ３３のステップＳ３３１において、後段回路３では、ステップＳ３２１で信号用レジスタ５０ｘに保持された、第１の命令Ｉ31に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ２０ａから読み出された後段用データR3aに相当する３２ビット浮動小数点D0を、１６ビット整数d0に変換して演算結果データR3として出力する。ライトバック機構７０は、後段制御信号C3に応じて、１６ビットシフト−モデファイ機能を実行する。即ち、図１２（ａ）に示すように、演算結果データR3に相当する１６ビット整数d0を下位１６ビットに使用し、格納先データR3wに相当するレジスタr1の下位ビット側の１６ビット整数d1bを上位に１６ビットシフトして使用する。その結果、ライトバックデータR3fとして、
R3f ={r1[15:0],d0 }={d1b,d0 }   …（２１）
が出力される。ライトバックデータR3fは、図２に示したレジスタファイル５のレジスタr1に格納される。
【００６８】
（ホ）また、ステップＳ３３２において、中段回路２では、ステップＳ３２２で信号用レジスタ２０ｘに保持された、第２の命令Ｉ32に対応する前段制御信号C1が、中段制御信号C2として読み出される。第１データ選択部３０ａは、中段制御信号C2に応じて、データ用レジスタ２０ａから読み出された中段用データR2aを選択して選択データR2xとして出力する。フォワーディング演算部４１ａは、ステップＳ３３１で信号用レジスタ５０ｘから読み出された後段制御信号C3に応じて、１６ビットシフト−モデファイ機能を実行する。即ち、図１２（ｂ）に示すように、演算結果データR3に相当する１６ビット整数d0を下位１６ビットに使用し、選択データR2xに相当するレジスタr1の下位側の１６ビットデータd1bを上位に１６ビットシフトして使用する。その結果、演算データR2afとして、
R2af ={r1[15:0],d0}={d1b,d0}    …（２２）
が出力される。フォワーディング選択部４２ａは、中段制御信号C2の演算対象（選択データ）R2xの参照先“r1”、及び信号用レジスタ５０ｘから読み出された第１の命令Ｉ31に対応する後段制御信号C3の参照先“r1”が同一なので、フォワーディング演算部４１ａから出力された演算データR1afを選択して後段用データR3aとして出力する。出力された後段用データR3aは、データ用レジスタ５０ａに保持される。
【００６９】
（ヘ）次のサイクルＴ３４のステップＳ３４１において、後段回路３では、ステップＳ３３２で信号用レジスタ５０ｘに保持された、第２の命令Ｉ32に対応する中段制御信号C2が、後段制御信号C3として読み出される。演算器６０は、後段制御信号C3に応じて、データ用レジスタ２０ａから読み出された後段用データR3aに相当する上位ビット側の１６ビット整数d1及び下位ビット側の１６ビット整数d0を加算し、図１に示した演算結果データR3として出力する。ライトバック機構７０は、後段制御信号C3に応じて、演算結果データR3をそのままライトバックデータR3fとしてレジスタファイル５のレジスタr15に格納する。
【００７０】
以上説明したように、第２の変形例によれば、ｎビットシフト演算を行う場合でも、実施の形態と同様に、前段用データR1a又は選択データR2xと演算結果データR3をマージさせるためのビットマージ命令等の演算ステップを削減可能となる。また、フォワーディングが行われる場合と行われない場合のいずれにおいてもデータの整合性をとることができる。
【００７１】
更に、格納先データR3w、演算データR1a及び選択データR2xの特定のビットにライトマスク付きでフォワーディング及びライトバックが行われるため、演算結果データR3の全ビットを格納先データR3w、前段用データR1a及び選択データR2xと置き換えずに有効なデータをフォワーディング及びライトバックすることができるので、パイプラインのストールを防止可能となる。また、有効なデータを退避不要となり、有効なデータを退避させるレジスタが不要となる。
【００７２】
（パイプライン式演算処理プログラム）
本発明の実施の形態に係るパイプライン式演算処理プログラムは、（イ）演算器により演算を行い演算結果を出力する命令と、（ロ）演算器のある後段ステージより前段の前段ステージに演算結果をバイパスし、バイパスされた演算結果と前段用データに対してフォワーディング演算部により演算を行い演算データを生成する命令と、（ハ）前段用データと演算データのいずれかをフォワーディング選択部により選択する命令と、（ニ）演算結果とレジスタファイルから読み出された格納先データに対して演算を行いライトバックデータを出力する命令等を、図１に示したプロセッサ１００等のコンピュータに実行させる。
【００７３】
上記パイプライン式演算処理プログラムは、図１に示した命令メモリ２００等のコンピュータ読み取り可能な記憶媒体に記憶させることができる。命令メモリ２００としては、例えば半導体メモリ、磁気ディスク、光ディスク、光磁気ディスクや磁気テープなどの記録媒体が使用可能である。具体的には、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＭＯディスクやオープンリールテープ等がある。
【００７４】
（その他の実施の形態）
本発明は、実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。例えば、図１に前段回路１、中段回路２及び後段回路３の３段のステージからなるパイプライン構造を示したが、プロセッサ１００が有するステージ数や、各ステージで行われる処理、その処理の組み合わせ等は特に限定されるものではない。
【００７５】
また、図１に第１前段フォワーディング機構１０ａ、第２前段フォワーディング機構１０ｂ、第１後段フォワーディング機構４０ａ、及び第２後段フォワーディング機構４０ｂ等のフォワーディング機構を示したが、フォワーディング機構の数や配置関係、接続関係は、ステージ数やその処理に対応して適宜選択可能である。
【００７６】
また、実施の形態に係るパイプライン式演算処理方法において、Ｈハーフワードレーンライトイネーブル機能、Ｌハーフワードレーンライトイネーブル機能及び１６ビットシフト−モデファイ機能を実行する場合を説明したが、フォワーディング演算部１１ａ，１１ｂ，４１ａ，４１ｂ及びライトバック機構７０は、他にＬＬバイトレーンライトイネーブル機能、ＬＨバイトレーンライトイネーブル機能、ＨＬバイトレーンライトイネーブル機能、ＨＨバイトレーンライトイネーブル機能、等のライトマスク機能や、８ビットシフト−モディファイ機能及び２４ビットシフト−モディファイ機能等のｎビット−シフト−モデファイ機能等を実行しても良い。このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論であり、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によって定められるものである。
【図面の簡単な説明】
【００７７】
【図１】本発明の実施の形態に係るパイプライン式演算処理装置を示す回路図である。
【図２】本発明の実施の形態に係るレジスタファイルのデータ構造を示すブロック図である。
【図３】図３（ａ）〜図３（ｄ）は、本発明の実施の形態に係るフォワーディング機構及びライトバック機構のライトマスク機能を説明するための概念図（その１〜その４）である。
【図４】図４（ａ）及び図４（ｂ）は、本発明の実施の形態に係るフォワーディング機構及びライトバック機構のライトマスク機能を説明するための概念図（その５、その６）である。
【図５】図５（ａ）〜図５（ｃ）は、本発明の実施の形態に係るフォワーディング機構及びライトバック機構のｎビットシフト−モディファイ機能を説明するための概念図（その１〜その３）である。
【図６】本発明の実施の形態に係る３２ビット浮動小数点を１６ビット整数に変換する演算手順を説明するための概念図である。
【図７】本発明の実施の形態に係る演算処理方法を説明するための図（その１）である。
【図８】本発明の実施の形態に係る演算処理方法を説明するための図（その２）である。
【図９】本発明の実施の形態の第１の変形例に係る演算処理方法を説明するための図（その１）である。
【図１０】本発明の実施の形態の第１の変形例に係る演算処理方法を説明するための図（その２）である。
【図１１】本発明の実施の形態の第２の変形例に係るパイプライン式演算処理装置を示す回路図である。
【図１２】本発明の実施の形態の第２の変形例に係るパイプライン式演算処理装置の処理を説明するための図である。
【符号の説明】
【００７８】
r0〜r15…レジスタ
１…前段回路
２…中段回路
３…後段回路
４…解読器
５…レジスタファイル
１０ａ…第１前段フォワーディング機構
１０ｂ…第２前段フォワーディング機構
１１ａ，１１ｂ…フォワーディング演算部
１２ａ，１２ｂ…フォワーディング選択部
２０…前段レジスタ群
２０ａ，２０ｂ…データ用レジスタ
２０ｘ…信号用レジスタ
３０ａ…第１データ選択部
３０ｂ…第２データ選択部
４０ａ…第１後段フォワーディング機構
４０ｂ…第２後段フォワーディング機構
４１ａ，４１ｂ…フォワーディング演算部
４２ａ，４２ｂ…フォワーディング選択部
５０…後段レジスタ群
５０ａ，５０ｂ…データ用レジスタ
５０ｘ…信号用レジスタ
６０…演算器
７０…ライトバック機構
１００…プロセッサ
２００…命令メモリ
３００…データメモリ
【図１】
2005128949.tif 000003
【図２】
2005128949.tif 000004
【図３】
2005128949.tif 000005
【図４】
2005128949.tif 000006
【図５】
2005128949.tif 000007
【図６】
2005128949.tif 000008
【図７】
2005128949.tif 000009
【図８】
2005128949.tif 000010
【図９】
2005128949.tif 000011
【図１０】
2005128949.tif 000012
【図１１】
2005128949.tif 000013
【図１２】
2005128949.tif 000014