(57)【要約】【課題】複数の演算による条件コードに基づいて行われるオペランドの供給を高速化する。【解決手段】実行ユニット群５００の４つの演算ユニットにおける演算により生成された条件コードは、設定レジスタ３２０の書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）の値に従って、フラグ書込み部３３０によりレジスタファイル３１０の条件コードセットレジスタｒＦに書き込まれる。条件コードセットレジスタの各フラグは、設定レジスタ３２０のマスクレジスタ（Ｒｅｇ＿ＭＡＳＫ）、反転レジスタ（Ｒｅｇ＿ＸＯＲ）、比較パターンレジスタ（Ｒｅｇ＿ＭＡＴＣＨ）および機能レジスタ（Ｒｅｇ＿ＦＵＮＣ）の各値に従って、フラグ変換部３４０によって変換されて、変換条件コードセットｒＦ＿ｏｕｔとして出力される。この変換条件コードセットに基づいて、他の命令のオペランドが供給される。【選択図】図２
2008146544.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記複数の演算器によって同時に生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、
前記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、
前記変換条件コードセットに基づいて前記複数の演算器における前記演算のためのオペランドを供給するオペランド供給手段と
を具備することを特徴とする演算処理装置。
【請求項２】
前記条件コード変換手段は、前記所定の変換として前記条件コードセットに基づく値の少なくとも一部に対してマスク演算を施すことを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記条件コード変換手段は、前記所定の変換として前記条件コードセットに基づく値の少なくとも一部に対して反転処理を施すことを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記条件コード変換手段は、前記所定の変換として前記条件コードセットに基づく値が所定の値と一致するか否かの比較結果を出力することを特徴とする請求項１記載の演算処理装置。
【請求項５】
前記条件コードセットに基づく値のそれぞれに対応して前記変換条件コードセットを保持する変換テーブルをさらに具備し、
前記条件コード変換手段は、前記条件コードセットに基づく値に対応する前記変換条件コードセットを前記変換テーブルから抽出する
ことを特徴とする請求項１記載の演算処理装置。
【請求項６】
前記オペランド供給手段は、前記変換条件コードセットを前記演算のためのオペランドとして供給することを特徴とする請求項１記載の演算処理装置。
【請求項７】
複数の語からなるデータレジスタをさらに具備し、
前記オペランド供給手段は、前記変換条件コードセットに従って前記データレジスタから読み出された語を前記演算のためのオペランドとして供給することを特徴とする請求項１記載の演算処理装置。
【請求項８】
それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記複数の演算器によって生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、
前記条件コードセットレジスタに保持された前記条件コードセットの一部と前記複数の演算器によって同時に生成された前記条件コードの一部とを新たな条件コードセットとして前記条件コードセットレジスタに保持させる条件コード書込み手段と、
前記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、
前記変換条件コードセットに基づいて前記複数の演算器における前記演算のためのオペランドを供給するオペランド供給手段と
を具備することを特徴とする演算処理装置。
【請求項９】
それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記条件コードの各々についてマスク演算を行うか否かを示すマスクビットを保持するマスクレジスタと、
前記条件コードの各々について前記マスクレジスタに従ってマスク演算を行うマスク演算器と、
前記マスク演算器により処理された前記条件コードの各々について反転処理を行うか否かを示す反転ビットを保持する反転レジスタと、
前記マスク演算器により処理された前記条件コードの各々について前記反転レジスタに従って反転処理を行う反転処理器と、
前記反転処理器により処理された前記条件コードの各々について比較対象となるパターンを保持する比較パターンレジスタと、
前記反転処理器により処理された前記条件コードと前記比較パターンレジスタに保持されたパターンを比較する比較器と、
前記反転処理器により処理された前記条件コードの組合せに対応した変換条件コードセットを保持する変換テーブルと、
前記比較器の比較結果、前記反転処理器により処理された前記条件コード、または、前記反転処理器により処理された前記条件コードの組合せに対応して前記変換テーブルから読み出された前記変換条件コードセットの何れか１つを選択する選択器と、
前記選択器の出力に基づいて前記複数の演算器における前記演算のためのオペランドを供給するオペランド供給手段と
を具備することを特徴とする演算処理装置。
【請求項１０】
複数の命令からなるプログラムを保持する命令メモリと、
前記命令メモリから命令を取り出してデコードする命令フェッチ／デコーダと、
前記デコード結果に基づきそれぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記デコード結果に基づき前記命令フェッチ／デコーダにおいて取り出すべき命令を決定する分岐処理手段と、
データメモリと、
前記データメモリから必要なデータをロードしもしくは前記データメモリに必要なデータをストアするためのアクセスを行うロードストア処理手段と、
前記複数の演算器によって同時に生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、
前記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、
前記変換条件コードセットに基づいて前記複数の演算器における前記演算、前記分岐処理手段における前記決定、または、前記ロードストア処理手段における前記アクセスのためのオペランドを供給するオペランド供給手段と
を具備することを特徴とする演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関し、特に複数の演算器が同期してそれぞれの演算を行う演算処理装置、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
近年のプロセッサアーキテクチャにおいては、マシンサイクルを短縮するとともに、１マシンサイクル当たりに実行される命令の数を増やすことにより、実効性能の向上を図るものが多く提案されている。このようなプロセッサアーキテクチャの一つとしてＶＬＩＷ（Very Long Instruction Word）方式が知られている。このＶＬＩＷ方式では、１つの命令の中で複数の演算等が指定され、それらが同時に実行される。
【０００３】
一般に、プロセッサにおいて演算が行われる際にはその演算結果とともに、その演算の状態が条件コードとして出力される。これにより、例えば、数値の一致や大小関係などを検出することができる。
【０００４】
従来のＶＬＩＷ方式によるプロセッサアーキテクチャでは、複数の命令処理部のいずれかで生成された条件コードが選択されて、その選択された条件コードに基づいて条件分岐命令やその他の条件付き命令が実行されている（例えば、特許文献１参照。）。
【特許文献１】特開平９−９１１４１号公報（図１）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来のＶＬＩＷ方式によるプロセッサアーキテクチャによれば、同時に実行された演算の条件コードのうち、いずれか１つを分岐条件として条件分岐命令などを実行することができる。
【０００６】
しかしながら、判定条件が複雑な場合、各演算の条件コードを保存しておいて、それらを組み合わせる演算を別途行った上で後続の命令のオペランドを生成する必要が生じる。また、これら条件コードに応じて分岐先アドレスが異なる場合があり、その場合には各演算の条件コードに基づいて分岐命令のオペランドを生成して、その分岐先アドレスを決定する必要が生じる。このような追加的な演算を前提とした場合には、複数の演算を同時に実行して高速化を図るというＶＬＩＷの利点を損なうおそれがある。
【０００７】
そこで、本発明は、複数の演算による条件コードに基づいて行われるオペランドの供給を高速化することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、上記複数の演算器によって同時に生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、上記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、上記変換条件コードセットに基づいて上記複数の演算器における上記演算のためのオペランドを供給するオペランド供給手段とを具備することを特徴とする演算処理装置である。これにより、複数の演算によって同時に生成された条件コードを条件コードセットとして所定の変換を施して、これに基づいてオペランドを供給させるという作用をもたらす。
【０００９】
また、この第１の側面において、上記条件コード変換手段は、上記所定の変換として上記条件コードセットに基づく値の少なくとも一部に対してマスク演算を施し、反転処理を施し、もしくは、所定の値と一致するか否かの比較結果を出力するようにしてもよい。このように変換を施された変換条件コードセットは、そのまま上記演算のためのオペランドとして供給されてもよく、また、上記条件コードセットに基づく値のそれぞれに対応して上記変換条件コードセットを保持する変換テーブルをさらに具備して、上記条件コードセットに基づく値に対応する上記変換条件コードセットがオペランドとして供給されてもよい。さらに、複数の語からなるデータレジスタをさらに具備して、上記変換条件コードセットに従って上記データレジスタから読み出された語を上記演算のためのオペランドとして供給してもよい。
【００１０】
また、本発明の第２の側面は、それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、上記複数の演算器によって生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、上記条件コードセットレジスタに保持された上記条件コードセットの一部と上記複数の演算器によって同時に生成された上記条件コードの一部とを新たな条件コードセットとして上記条件コードセットレジスタに保持させる条件コード書込み手段と、上記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、上記変換条件コードセットに基づいて上記複数の演算器における上記演算のためのオペランドを供給するオペランド供給手段とを具備することを特徴とする演算処理装置である。これにより、複数の演算における条件コードを条件コードセットとして所定の変換を施して、これに基づいてオペランドを供給させるという作用をもたらす。
【００１１】
また、本発明の第３の側面は、それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、上記条件コードの各々についてマスク演算を行うか否かを示すマスクビットを保持するマスクレジスタと、上記条件コードの各々について上記マスクレジスタに従ってマスク演算を行うマスク演算器と、上記マスク演算器により処理された上記条件コードの各々について反転処理を行うか否かを示す反転ビットを保持する反転レジスタと、上記マスク演算器により処理された上記条件コードの各々について上記反転レジスタに従って反転処理を行う反転処理器と、上記反転処理器により処理された上記条件コードの各々について比較対象となるパターンを保持する比較パターンレジスタと、上記反転処理器により処理された上記条件コードと上記比較パターンレジスタに保持されたパターンを比較する比較器と、上記反転処理器により処理された上記条件コードの組合せに対応した変換条件コードセットを保持する変換テーブルと、上記比較器の比較結果、上記反転処理器により処理された上記条件コード、または、上記反転処理器により処理された上記条件コードの組合せに対応して上記変換テーブルから読み出された上記変換条件コードセットの何れか１つを選択する選択器と、上記選択器の出力に基づいて上記複数の演算器における上記演算のためのオペランドを供給するオペランド供給手段とを具備することを特徴とする演算処理装置である。これにより、複数の演算における条件コードを条件コードセットとしてマスク演算、反転処理、一致処理、テーブル変換処理を施して、これらのうちの何れかの値に基づいてオペランドを供給させるという作用をもたらす。
【００１２】
また、本発明の第４の側面は、複数の命令からなるプログラムを保持する命令メモリと、上記命令メモリから命令を取り出してデコードする命令フェッチ／デコーダと、上記デコード結果に基づきそれぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、上記デコード結果に基づき上記命令フェッチ／デコーダにおいて取り出すべき命令を決定する分岐処理手段と、データメモリと、上記データメモリから必要なデータをロードしもしくは上記データメモリに必要なデータをストアするためのアクセスを行うロードストア処理手段と、上記複数の演算器によって同時に生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、上記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、上記変換条件コードセットに基づいて上記複数の演算器における上記演算、上記分岐処理手段における上記決定、または、上記ロードストア処理手段における上記アクセスのためのオペランドを供給するオペランド供給手段とを具備することを特徴とする演算処理装置である。これにより、命令メモリから読み出された複数の命令による演算によって同時に生成された条件コードを条件コードセットとして所定の変換を施して、これに基づいてオペランドを供給させるという作用をもたらす。
【発明の効果】
【００１３】
本発明によれば、複数の演算による条件コードに基づいて行われるオペランドの供給を高速化することができるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００１４】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１５】
図１は、本発明の実施の形態における演算処理装置の一構成例を示す図である。この演算処理装置は、命令メモリ１００と、命令フェッチ／デコーダ２００と、レジスタユニット３００と、オペランドセレクタ４００と、実行ユニット群５００と、データメモリ６００とを備えている。
【００１６】
命令メモリ１００は、複数の命令からなるプログラムを保持するものである。この命令メモリ１００は、主記憶の一部の領域であってもよく、また、主記憶の一部を保持する命令バッファであってもよい。
【００１７】
命令フェッチ／デコーダ２００は、命令メモリ１００から必要な命令をフェッチして、そのフェッチした命令をデコードするものである。この命令フェッチ／デコーダ２００のデコード結果により、実行ユニット群５００における処理内容が決定する。本発明の実施の形態では、ＶＬＩＷ方式によるプロセッサアーキテクチャを前提としており、３２ビット幅の命令が６つ同時にフェッチされ、デコードされるものと想定する。
【００１８】
レジスタユニット３００は、実行ユニット群５００における処理に必要なデータを保持するものである。このレジスタユニット３００には、複数語のデータレジスタおよび条件コードセットレジスタが含まれており、命令フェッチ／デコーダ２００のデコード結果に従って読出しや書込みが行われる。
【００１９】
オペランドセレクタ４００は、実行ユニット群５００に対して必要なオペランドを供給するものである。本発明の実施の形態では、実行ユニット群５００の６つのユニットに対してそれぞれ第１および第２のオペランドが供給されることを想定している。
【００２０】
実行ユニット群５００は、演算処理装置における実体的な処理を行うものであり、本発明の実施の形態では、演算ユニット＃Ａ（５０１）、演算ユニット＃Ｂ（５１１）、演算ユニット＃Ｃ（５２１）、演算ユニット＃Ｄ（５３１）、ロード／ストアユニット５４１、および、分岐ユニット５５１の６つのユニットを備える。これら６つのユニットは同時に実行される。
【００２１】
演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）は、オペランドセレクタ４００から供給された第１および第２のオペランドに対して四則演算や論理演算などを実行して、それぞれ信号線５０９、５１９、５２９および５３９に演算結果（ｒｄ０［３１：０］、ｒｄ１［３１：０］、ｒｄ２［３１：０］およびｒｄ３［３１：０］）を出力するものである。この例において、ｒｄ０［３１：０］は、演算ユニット＃Ａ（５０１）の出力として、ＭＳＢを第３１ビット、ＬＳＢを第０ビットとする、３２ビットの演算結果を表す。他のｒｄ１［３１：０］、ｒｄ２［３１：０］およびｒｄ３［３１：０］についても同様であり、それぞれ演算ユニット＃Ｂ（５１１）、演算ユニット＃Ｃ（５２１）および演算ユニット＃Ｄ（５３１）の３２ビットの演算結果を表す。
【００２２】
また、この演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）は、演算の際の状態を条件コード（ｒｆ０、ｒｆ１、ｒｆ２およびｒｆ３）としてそれぞれの演算結果とともに出力する。この例において、ｒｆ０は、演算ユニット＃Ａ（５０１）の１ビットの条件コードであり、論理演算の結果が真であれば「１」、偽であれば「０」を示すものとする。他のｒｆ１、ｒｆ２およびｒｆ３についても同様であり、それぞれ演算ユニット＃Ｂ（５１１）、演算ユニット＃Ｃ（５２１）および演算ユニット＃Ｄ（５３１）の条件コードを表す。
【００２３】
これら演算結果（ｒｄ０［３１：０］、ｒｄ１［３１：０］、ｒｄ２［３１：０］およびｒｄ３［３１：０］）および条件コード（ｒｆ０、ｒｆ１、ｒｆ２およびｒｆ３）は、レジスタユニット３００に供給される。
【００２４】
ロード／ストアユニット５４１は、オペランドセレクタ４００から供給された第１および第２のオペランドに基づいてデータメモリ６００にアクセスするものである。命令フェッチ／デコーダ２００によってデコードされた命令がロード命令である場合には、ロード／ストアユニット５４１はデータメモリ６００からデータを読み出して信号線５４９を介してロードデータ（ｒｄ４［３１：０］）をレジスタユニット３００に供給する。この例において、ｒｄ４［３１：０］は３２ビットのロードデータを表す。命令フェッチ／デコーダ２００によってデコードされた命令がストア命令である場合には、ロード／ストアユニット５４１はデータメモリ６００に対してストアデータを書き込む。
【００２５】
分岐ユニット５５１は、オペランドセレクタ４００から供給された第１および第２のオペランドに基づき、命令列において分岐するべきか否かを判定し、分岐する場合にはその分岐先アドレスを決定するものである。この分岐ユニット５５１による判定結果は、命令フェッチ／デコーダ２００に供給され、次の命令のフェッチおよびデコードに利用される。
【００２６】
データメモリ６００は、プログラムの動作に必要なデータを保持するものである。このデータメモリ６００は、主記憶であってもよく、また、主記憶の一部を保持するデータキャッシュであってもよい。
【００２７】
図２は、本発明の実施の形態におけるレジスタユニット３００の一構成例を示す図である。このレジスタユニット３００は、レジスタファイル３１０と、設定レジスタ３２０と、フラグ書込み部３３０と、フラグ変換部３４０とを備えている。
【００２８】
レジスタファイル３１０は、複数の語からなるレジスタ群である。このレジスタファイル３１０の内容は、データレジスタと条件コードセットレジスタとに分かれている。データレジスタは、実行ユニット群５００のためのオペランドデータを保持するものであり、本発明の実施の形態では１語当たり３２ビットのレジスタを１６語（ｒ０からｒ１５）備えることを想定している。条件コードセットレジスタは、条件コードセットを保持するレジスタである。条件コードセットは、演算ユニットの数に対応する条件コードをまとめたものであり、本発明の実施の形態では１語当たり１ビットのフラグを保持するレジスタを４語（ｒＦ［０］からｒＦ［３］）備えることを想定している。
【００２９】
設定レジスタ３２０は、レジスタユニット３００における動作を制御するための情報を設定するレジスタである。本発明の実施の形態では、書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）、マスクレジスタ（Ｒｅｇ＿ＭＡＳＫ［３：０］）、反転レジスタ（Ｒｅｇ＿ＸＯＲ［３：０］）、比較パターンレジスタ（Ｒｅｇ＿ＭＡＴＣＨ［３：０］）および機能レジスタ（Ｒｅｇ＿ＦＵＮＣ［１：０］）を備える。書込みモードレジスタの値はフラグ書込み部３３０に供給され、それ以外の４つのレジスタの値はフラグ変換部３４０に供給される。それぞれの内容については後述する。
【００３０】
フラグ書込み部３３０は、設定レジスタ３２０の書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）の値に従って、レジスタファイル３１０の条件コードセットレジスタの各フラグに対する書込みを行うものである。
【００３１】
フラグ変換部３４０は、レジスタファイル３１０の条件コードセットレジスタの各フラグに対して変換を施して、変換条件コードセット（ｒＦ＿ｏｕｔ［３：０］）を生成するものである。このフラグ変換部３４０には、設定レジスタ３２０のマスクレジスタ（Ｒｅｇ＿ＭＡＳＫ［３：０］）、反転レジスタ（Ｒｅｇ＿ＸＯＲ［３：０］）、比較パターンレジスタ（Ｒｅｇ＿ＭＡＴＣＨ［３：０］）および機能レジスタ（Ｒｅｇ＿ＦＵＮＣ［１：０］）の値が供給される。
【００３２】
なお、本発明の実施の形態において、データレジスタに対する書込みについては通常の演算処理装置と同様であるため、説明を省略する。
【００３３】
図３は、本発明の実施の形態におけるフラグ書込み部３３０の動作モード例を示す図である。上述のように、フラグ書込み部３３０は、設定レジスタ３２０の書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）の値に従って、レジスタファイル３１０の条件コードセットレジスタの各フラグに対する書込みを行う。書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）が「０」を示す場合、図３（ａ）のように、演算ユニット＃Ａ（５０１）の出力した条件コードｒｆ０が条件コードセットレジスタのｒＦ［０］に保持され、演算ユニット＃Ｂ（５１１）の出力した条件コードｒｆ１が条件コードセットレジスタのｒＦ［１］に保持され、演算ユニット＃Ｃ（５２１）の出力した条件コードｒｆ２が条件コードセットレジスタのｒＦ［２］に保持され、演算ユニット＃Ｄ（５３１）の出力した条件コードｒｆ３が条件コードセットレジスタのｒＦ［３］に保持される。この書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）が「０」を示す状態をスルーモードと呼ぶ。
【００３４】
一方、書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）が「１」を示す場合、図３（ｂ）のように、条件コードセットレジスタがＭＳＢ方向に左シフトする。すなわち、条件コードセットレジスタのｒＦ［２］の値が新たにｒＦ［３］に保持され、ｒＦ［１］の値が新たにｒＦ［２］に保持され、ｒＦ［０］の値が新たにｒＦ［１］に保持される。そして、ｒＦ［０］には演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）の何れかの出力した条件コードが保持される。ここでは、演算ユニット＃Ａ（５０１）の出力した条件コードｒｆ０が条件コードセットレジスタのｒＦ［０］に保持される例を示しているが、命令フォーマットの何れかのフィールドにおいて、対象となる演算ユニットを指定するようにしてもよい。この書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）が「１」を示す状態を履歴モードと呼ぶ。
【００３５】
図４は、本発明の実施の形態における設定レジスタ３２０およびフラグ変換部３４０の一構成例を示す図である。
【００３６】
設定レジスタ３２０は、書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）３２１、マスクレジスタ（Ｒｅｇ＿ＭＡＳＫ［３：０］）３２２、反転レジスタ（Ｒｅｇ＿ＸＯＲ［３：０］）３２３、比較パターンレジスタ（Ｒｅｇ＿ＭＡＴＣＨ［３：０］）３２４および機能レジスタ（Ｒｅｇ＿ＦＵＮＣ［１：０］）３２５を備える。
【００３７】
書込みモードレジスタ３２１は、フラグ書込み部３３０における条件コードセットレジスタに対する書込みの動作モードを指定するものである。本発明の実施の形態では、書込みモードレジスタ３２１が「０」を示す場合にはスルーモード、「１」を示す場合には履歴モードとして動作する。
【００３８】
マスクレジスタ３２２は、条件コードセットレジスタの各フラグをマスクするか否かを保持するレジスタである。
【００３９】
反転レジスタ３２３は、マスク演算後の条件コードセットレジスタの各フラグを反転するか否かを保持するレジスタである。
【００４０】
比較パターンレジスタ３２４は、反転処理後の条件コードセットレジスタの各フラグとの間で一致を検出するビットパターンを保持するレジスタである。
【００４１】
機能レジスタ３２５は、フラグ変換部３４０の機能を示すコードを保持するレジスタである。
【００４２】
フラグ変換部３４０は、論理積演算器３４２と、排他的論理和演算器３４３と、比較器３４４と、フラグ変換テーブル３４５と、選択器３４６とを備える。
【００４３】
論理積演算器３４２は、条件コードセットレジスタの各フラグとマスクレジスタ３２２の対応するビットとの間の論理積演算を行うものである。すなわち、マスクレジスタ３２２の対応するビットが「０」であれば論理積演算器３４２の対応する出力は「０」にマスクされ、マスクレジスタ３２２の対応するビットが「１」であれば条件コードセットレジスタの対応する値がそのまま論理積演算器３４２から出力される。
【００４４】
排他的論理和演算器３４３は、論理積演算器３４２の出力の各ビットと反転レジスタ３２３の対応するビットとの間の排他的論理和演算を行うものである。すなわち、反転レジスタ３２３の対応するビットが「１」であれば論理積演算器３４２の出力の対応する値が反転されて排他的論理和演算器３４３から出力され、反転レジスタ３２３の対応するビットが「０」であれば論理積演算器３４２の出力の対応する値がそのまま排他的論理和演算器３４３から出力される。この排他的論理和演算器３４３の出力は、信号ｒＦ＿ｘｏｒ［３：０］として出力される。
【００４５】
比較器３４４は、排他的論理和演算器３４３の出力と比較パターンレジスタ３２４のビットパターンとを比較して、両者が一致しているか否かを出力するものである。すなわち、両者が一致する場合には、信号ｒＦ＿ｍ［３：０］が「０００１」（２進数）になり、信号ｒＦ＿ｎｍ［３：０］が「００００」（２進数）になる。一方、両者が一致しない場合には、信号ｒＦ＿ｍ［３：０］が「００００」（２進数）になり、信号ｒＦ＿ｎｍ［３：０］が「０００１」（２進数）になる。
【００４６】
フラグ変換テーブル３４５は、複数エントリからなるテーブルであり、排他的論理和演算器３４３の出力（信号ｒＦ＿ｘｏｒ［３：０］）に対応した値を信号ｒＦ＿ｔｂｌ［３：０］として出力するものである。このフラグ変換テーブル３４５には、予め所望の値が設定される。本発明の実施の形態では、１エントリ当り４ビットの値を１６エントリ保持することを想定している。
【００４７】
選択器３４６は、機能レジスタ３２５に保持されるコードに応じた値を選択するものである。すなわち、機能レジスタ３２５に保持されるコードが「０」（１０進数）であれば信号ｒＦ＿ｍ［３：０］が選択され、「１」（１０進数）であれば信号ｒＦ＿ｎｍ［３：０］が選択され、「２」（１０進数）であれば信号ｒＦ＿ｘｏｒ［３：０］が選択され、「３」（１０進数）であれば信号ｒＦ＿ｔｂｌ［３：０］が選択されて、変換条件コードセット（ｒＦ＿ｏｕｔ［３：０］）として出力される。
【００４８】
これにより、条件コードセットレジスタの値ｒＦ［３：０］がビット毎にマスクまたは反転された信号ｒＦ＿ｘｏｒ［３：０］が生成され、その信号ｒＦ＿ｘｏｒ［３：０］と他のビットパターンとの間の一致または不一致、信号ｒＦ＿ｘｏｒ［３：０］そのもの、または、信号ｒＦ＿ｘｏｒ［３：０］に対応したフラグ変換テーブル３４５における値の何れかがフラグ変換部３４０から出力される。
【００４９】
図５は、本発明の実施の形態における命令フォーマットの一例を示す図である。本発明の実施の形態では、３２ビット長の命令が６つ同時に命令メモリ１００から命令フェッチ／デコーダ２００によって読み出されて、デコードされることを想定する。同図にはそのうちの１つの命令が示されている。
【００５０】
この命令フォーマットでは、ＭＳＢ側から、命令コード７０１、フラグ選択＃０（７０２）、フラグ選択＃１（７０３）、オペランド＃０（７０４）、オペランド＃１（７０５）およびデスティネーション７０６の各フィールドが設けられている。
【００５１】
命令コード７０１は、この命令の種類を示すコードを保持するフィールドであり、本発明の実施の形態では１５ビット幅を有する。
【００５２】
フラグ選択＃０（７０２）は、第１のオペランドとしてオペランド＃０（７０４）を選択するか否かを保持するフィールドである。また、フラグ選択＃１（７０３）は、第２のオペランドとしてオペランド＃１（７０５）を選択するか否かを保持するフィールドである。オペランド＃０（７０４）またはオペランド＃１（７０５）が選択されない場合には、フラグ変換部３４０の出力（変換条件コードセットｒＦ＿ｏｕｔ［３：０］）が使用される。フラグ選択＃０（７０２）およびオペランド＃１（７０５）は、本発明の実施の形態ではともに１ビットである。
【００５３】
オペランド＃０（７０４）は、この命令の第１のオペランドを保持するフィールドである。また、オペランド＃１（７０５）は、この命令の第２のオペランドを保持するフィールドである。オペランド＃０（７０４）およびオペランド＃１（７０５）は、本発明の実施の形態ではともに５ビット幅を有する。
【００５４】
デスティネーション７０６は、この命令の出力先を保持するフィールドであり、本発明の実施の形態では５ビット幅を有する。
【００５５】
図６は、本発明の実施の形態におけるオペランドセレクタ４００の第１のオペランドセレクタ＃０（４１０）の一構成例を示す図である。このオペランドセレクタ＃０（４１０）は、実行ユニット群５００における何れかのユニットの第１のオペランドを供給するものである。このオペランドセレクタ＃０（４１０）は、選択器４１１および４１２を備えている。
【００５６】
選択器４１１は、フラグ選択＃０（７０２）に応じて、オペランド＃０（７０４）またはフラグ変換部３４０の出力（変換条件コードセットｒＦ＿ｏｕｔ［３：０］）の何れか一方を選択するものである。本発明の実施の形態では、フラグ選択＃０（７０２）が「０」であればオペランド＃０（７０４）の値が選択され、「１」であればフラグ変換部３４０の出力が選択される。この選択器４１１の出力は選択器４１２の選択信号として供給される。
【００５７】
選択器４１２は、選択器４１１の出力に応じて、レジスタファイル３１０のデータレジスタ（ｒ０乃至ｒ１５）の値またはフラグ変換部３４０の出力（変換条件コードセットｒＦ＿ｏｕｔ［３：０］）の何れかを選択するものである。本発明の実施の形態では、選択器４１１の出力が「０」から「１５」（１０進数）であればその値に対応するデータレジスタの値が選択され、「１６」（１０進数）であればフラグ変換部３４０の出力が選択される。
【００５８】
したがって、フラグ選択＃０（７０２）が「０」であれば、オペランド＃０（７０４）により示される値に対応するデータレジスタ（ｒ０乃至ｒ１５）の値またはフラグ変換部３４０の出力がオペランドとして供給される。また、フラグ選択＃０（７０２）が「１」であれば、データレジスタ（ｒ０乃至ｒ１５）のうちフラグ変換部３４０の出力により示されるものの値がオペランドとして供給される。
【００５９】
図７は、本発明の実施の形態におけるオペランドセレクタ４００の第２のオペランドセレクタ＃１（４２０）の一構成例を示す図である。このオペランドセレクタ＃０（４２０）は、実行ユニット群５００における何れかのユニットの第２のオペランドを供給するものである。このオペランドセレクタ＃１（４２０）の構成は図６により説明したオペランドセレクタ＃０（４１０）の構成と同様であり、選択器４２１の選択信号としてフラグ選択＃１（７０３）が供給され、フラグ選択＃１（７０３）が「０」の場合に選択されるオペランドとしてオペランド＃１（７０５）が供給される点が異なる。
【００６０】
このように、本発明の実施の形態によれば、演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）の出力した条件コードが条件コードセットとして条件コードセットレジスタに保持され、その条件コードセットレジスタに保持された条件コードセットがフラグ変換部３４０によって変換されてオペランドセレクタ４００に供給される。これにより、複数の演算による条件コードに基づいて行われるオペランドの供給を高速化することができる。
【００６１】
次に、本発明の実施の形態における演算処理装置の動作について具体例を挙げて説明する。
【００６２】
図８は、本発明の実施の形態における演算処理装置の動作を説明するための第１のプログラム例を示す図である。この第１のプログラム例は、４つの条件を同時に判定し、分岐するか否かを決定するプログラムの例を示している。
【００６３】
図８（ａ）は、処理対象となるプログラムを高級言語風に表したものである。このプログラムは、データレジスタｒ０の値とデータレジスタｒ１の値とが一致し、データレジスタｒ３の値よりデータレジスタｒ２の値方が大きく、データレジスタｒ４の値とデータレジスタｒ５の値とが一致せず、かつ、データレジスタｒ６の値がデータレジスタｒ７以下である場合に、関数ｆｕｎｃ１に分岐することを意味している。
【００６４】
図８（ｂ）は、処理対象となるプログラムをアセンブリ言語風に表したものであり、横方向に並んだ６つの命令は同時に実行されることを意味している。［ＥＱ  ｒ０，ｒ１］は演算ユニット＃Ａ（５０１）によって実行され、［ＧＴ  ｒ２，ｒ３］は演算ユニット＃Ｂ（５１１）によって実行され、［ＥＱ  ｒ４，ｒ５］は演算ユニット＃Ｃ（５２１）によって実行され、［ＧＴ  ｒ６，ｒ７］は演算ユニット＃Ｄ（５３１）によって実行される。また、［ＢＲｆ  ｆｕｎｃ１］は分岐ユニット５５１によって実行される。
【００６５】
ここで、［ＥＱ  ｒｓ，ｒｔ］は条件判定命令であり、データレジスタｒｓの値とデータレジスタｒｔの値とが一致していれば（equal）条件コードとして「１」を、それ以外であれば条件コードとして「０」を出力する。また、［ＧＴ  ｒｓ，ｒｔ］は他の条件判定命令であり、データレジスタｒｓの値がデータレジスタｒｔの値よりも大きければ（greater than）条件コードとして「１」を、それ以外であれば条件コードとして「０」を出力する。また、［ＢＲｆ  ｆｕｎｃ１］は条件分岐命令であり、ｒＦ＿ｏｕｔ［０］が「１」であれば関数ｆｕｎｃ１に分岐する（branch）命令である。ｒＦ＿ｏｕｔ［０］はフラグ変換部３４０のＬＳＢの値であり、ｆｕｎｃ１は関数の先頭アドレスを示すラベルである。また、［ｎｏｐ］は何も実行を行わない（no-operation）命令である。
【００６６】
図９は、図８の第１のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。この例では予め、書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）３２１には「０」が設定され、マスクレジスタ（Ｒｅｇ＿ＭＡＳＫ［３：０］）３２２には「１１１１」（２進数）が設定され、反転レジスタ（Ｒｅｇ＿ＸＯＲ［３：０］）３２３には「１１００」（２進数）が設定され、比較パターンレジスタ（Ｒｅｇ＿ＭＡＴＣＨ［３：０］）３２４には「１１１１」（２進数）が設定され、機能レジスタ（Ｒｅｇ＿ＦＵＮＣ［１：０］）３２５には「００」（２進数）が設定される。これらの設定は、ソフトウェア命令により行うことができる。また、命令フォーマットに埋め込むようにしてもよい。
【００６７】
この例では、書込みモードレジスタ３２１が「０」（スルーモード）であることから、演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）による各演算の条件コードは、それぞれ条件コードセットレジスタのｒＦ［０乃至３］に保持される。
【００６８】
そして、条件コードセットレジスタの各フラグの値とマスクレジスタ３２２の対応するビットとの間で論理積演算器３４２によって論理積演算が行われるが、この例ではマスクレジスタ３２２が「１１１１」であることから、何れのビットもマスクされない。
【００６９】
続いて、論理積演算器３４２の出力の各ビットと反転レジスタ３２３の対応するビットとの間で排他的論理和演算器３４３によって排他的論理和演算が行われ、この例では反転レジスタ３２３が「１１００」であることから上位２ビットが反転される。
【００７０】
また、排他的論理和演算器３４３の出力と比較パターンレジスタ３２４のビットパターンとが比較器３４４によって比較される。この例では、比較パターンレジスタ３２４のビットパターンが「１１１１」であることから、「データレジスタｒ０の値とデータレジスタｒ１の値とが一致し、データレジスタｒ３の値よりデータレジスタｒ２の値方が大きく、データレジスタｒ４の値とデータレジスタｒ５の値とが一致せず、かつ、データレジスタｒ６の値がデータレジスタｒ７以下」が成立する場合にはｒＦ＿ｍ［３：０］が「０００１」となり、成立しない場合にはｒＦ＿ｍ［３：０］は「００００」となる。この例では、機能レジスタ３２５が「００」であるため、ｒＦ＿ｍ［３：０］の値が選択器３４６において選択されて、ｒＦ＿ｏｕｔ［３：０］として出力される。
【００７１】
［ＢＲｆ  ｆｕｎｃ１］では、フラグ選択＃０（７０２）が「０」、オペランド＃０（７０４）が「１６」を示すことから、分岐ユニット５５１には、ｒＦ＿ｏｕｔ［３：０］の値が供給される。分岐ユニット５５１は、このｒＦ＿ｏｕｔ［３：０］が「０００１」であれば関数ｆｕｎｃ１に分岐し、「００００」であれば分岐しない。
【００７２】
このように、図８の第１のプログラム例は、本発明の実施の形態において２マシンサイクルで実行される。なお、この２マシンサイクルには設定レジスタ３２０の設定のための時間は含まれないが、実際のプログラムでは設定レジスタ３２０が１回設定された後に主要な演算が繰り返し実行されることが多いため、その場合には設定に要する時間は無視することができる。
【００７３】
図１０は、本発明の実施の形態における演算処理装置の動作を説明するための第２のプログラム例を示す図である。この第２のプログラム例は、４つの条件を同時に判定し、分岐先を決定するプログラムの例を示している。
【００７４】
図１０（ａ）は、処理対象となるプログラムを高級言語風に表したものである。このプログラムは、データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きければ関数ｆｕｎｃ１に分岐し、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きければ関数ｆｕｎｃ２に分岐し、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きければ関数ｆｕｎｃ３に分岐し、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１４の値よりも大きければ関数ｆｕｎｃ４に分岐することを意味している。
【００７５】
図１０（ｂ）は、処理対象となるプログラムをアセンブリ言語風に表したものであり、横方向に並んだ６つの命令は同時に実行されることを意味している。［ＧＴ  ｒ１０，ｒ１１］は演算ユニット＃Ａ（５０１）によって実行され、［ＧＴ  ｒ１０，ｒ１２］は演算ユニット＃Ｂ（５１１）によって実行され、［ＧＴ  ｒ１０，ｒ１３］は演算ユニット＃Ｃ（５２１）によって実行され、［ＧＴ  ｒ１０，ｒ１４］は演算ユニット＃Ｄ（５３１）によって実行される。また、［ＪＭＰｆ］は分岐ユニット５５１によって実行される。
【００７６】
ここで、［ＪＭＰｆ］は、ｒＦ＿ｏｕｔ［３：０］が指すデータレジスタに格納されたアドレスにジャンプ（jump）するレジスタジャンプ命令である。他の命令は図８の例において説明したとおりである。
【００７７】
図１１は、図１０の第２のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。この例では予め、書込みモードレジスタ３２１には「０」が設定され、マスクレジスタ３２２には「１１１１」（２進数）が設定され、反転レジスタ３２３には「００００」（２進数）が設定され、機能レジスタ３２５には「１１」（２進数）が設定される。
【００７８】
この例では、書込みモードレジスタ３２１が「０」（スルーモード）であることから、演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）による各演算の条件コードは、それぞれ条件コードセットレジスタのｒＦ［０乃至３］に保持される。
【００７９】
そして、条件コードセットレジスタの各フラグの値とマスクレジスタ３２２の対応するビットとの間で論理積演算器３４２によって論理積演算が行われるが、この例ではマスクレジスタ３２２が「１１１１」であることから、何れのビットもマスクされない。
【００８０】
続いて、論理積演算器３４２の出力の各ビットと反転レジスタ３２３の対応するビットとの間で排他的論理和演算器３４３によって排他的論理和演算が行われるが、この例では反転レジスタ３２３が「００００」であることから、何れのビットも反転されない。
【００８１】
この例では、機能レジスタ３２５が「１１」であるため、フラグ変換テーブル３４５の出力ｒＦ＿ｔｂｌ［３：０］の値が選択器３４６において選択されて、ｒＦ＿ｏｕｔ［３：０］として出力される。
【００８２】
図１２は、図１０の第２のプログラム例を実行するためのフラグ変換テーブル３４５の設定例を示す図である。この例では予め、フラグ変換テーブル３４５の番地「０００１」には値「３」（１０進数）が、番地「００１０」および「００１１」には値「２」（１０進数）が、番地「０１００」乃至「０１１１」には値「１」（１０進数）が、番地「１０００」乃至「１１１１」には値「０」（１０進数）がそれぞれ格納される。これらはジャンプ先のアドレスを格納したデータレジスタの番号を意味する。
【００８３】
また、これに伴い、データレジスタｒ０には関数ｆｕｎｃ１の先頭アドレスが設定され、データレジスタｒ１には関数ｆｕｎｃ２の先頭アドレスが設定され、データレジスタｒ２には関数ｆｕｎｃ３の先頭アドレスが設定され、データレジスタｒ３には関数ｆｕｎｃ４の先頭アドレスが設定されていることを前提とする。
【００８４】
フラグ変換テーブル３４５は、排他的論理和演算器３４３の出力ｒＦ＿ｘｏｒ［０乃至３］を読出しアドレスとして読み出され、ｒＦ＿ｔｂｌ［３：０］を選択器３４６に出力する。したがって、データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きければｒＦ＿ｘｏｒ［０］が「１」になり、値「０」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きければｒＦ＿ｘｏｒ［１］が「１」になり、値「１」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きければｒＦ＿ｘｏｒ［２］が「１」になり、値「２」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１４の値よりも大きければｒＦ＿ｘｏｒ［３］が「１」になり、値「３」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。
【００８５】
［ＪＭＰｆ］では、フラグ選択＃０（７０２）が「１」を示すことから、選択器４２２の選択信号としてｒＦ＿ｏｕｔ［３：０］が用いられ、ｒＦ＿ｏｕｔ［３：０］の指すデータレジスタに格納されたアドレスがオペランドとして供給される。これにより、何れかの条件が成立する場合には、予めデータレジスタに格納されたアドレスの何れかが分岐ユニット５５１を通じて命令フェッチ／デコーダ２００に供給され、対応する関数へのジャンプが行われる。
【００８６】
このように、図１０の第２のプログラム例は、本発明の実施の形態において２マシンサイクルで実行される。
【００８７】
図１３は、本発明の実施の形態における演算処理装置の動作を説明するための第３のプログラム例を示す図である。この第３のプログラム例は、３つの条件を１つずつ順番に判定し、レジスタへ代入する値を選択するプログラムの例を示している。
【００８８】
図１３（ａ）は、処理対象となるプログラムを高級言語風に表したものである。このプログラムは、データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きければデータレジスタｒ５にデータレジスタｒ０の値を代入し、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きければデータレジスタｒ５にデータレジスタｒ１の値を代入し、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きければデータレジスタｒ５にデータレジスタｒ２の値を代入することを意味している。
【００８９】
図１３（ｂ）は、処理対象となるプログラムをアセンブリ言語風に表したものであり、横方向に並んだ６つの命令は同時に実行されることを意味しているが、この例では実体的な命令は全て演算ユニット＃Ａ（５０１）において実行され、他のユニットはｎｏｐ命令を実行する。
【００９０】
ここで、［ＭＶｆ  ｒ５］は、転送命令であり、ｒＦ＿ｏｕｔ［３：０］に指し示されるデータレジスタの値をデータレジスタｒ５に転送（move）する命令である。他の命令は図８の例において説明したとおりである。
【００９１】
図１４は、図１３の第３のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。この例では予め、書込みモードレジスタ３２１には「１」が設定され、マスクレジスタ３２２には「０１１１」（２進数）が設定され、反転レジスタ３２３には「００００」（２進数）が設定され、機能レジスタ３２５には「１１」（２進数）が設定される。
【００９２】
この例では、書込みモードレジスタ３２１が「１」（履歴モード）であることから、演算ユニット＃Ａ（５０１）による演算の条件コードは、条件コードセットレジスタのｒＦ［０］に保持され、その後、条件コードセットレジスタのｒＦ［１］、ｒＦ［２］、ｒＦ［３］へと順次シフトされていく。したがって、この例では、ｒＦ［２］には「データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きいか否か」の条件コード、ｒＦ［１］には「データレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きいか否か」の条件コード、ｒＦ［０］には「データレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きいか否か」の条件コードがそれぞれ保持される。
【００９３】
そして、条件コードセットレジスタの各フラグの値とマスクレジスタ３２２の対応するビットとの間で論理積演算器３４２によって論理積演算が行われ、この例ではマスクレジスタ３２２が「０１１１」であることから、ｒＦ［３］のみが「０」にマスクされる。
【００９４】
続いて、論理積演算器３４２の出力の各ビットと反転レジスタ３２３の対応するビットとの間で排他的論理和演算器３４３によって排他的論理和演算が行われるが、この例では反転レジスタ３２３が「００００」であることから、何れのビットも反転されない。
【００９５】
この例では、機能レジスタ３２５が「１１」であるため、フラグ変換テーブル３４５の出力ｒＦ＿ｔｂｌ［３：０］の値が選択器３４６において選択されて、ｒＦ＿ｏｕｔ［３：０］として出力される。
【００９６】
図１５は、図１３の第３のプログラム例を実行するためのフラグ変換テーブル３４５の設定例を示す図である。この例では予め、フラグ変換テーブル３４５の番地「０００１」には値「２」（１０進数）が、番地「００１０」および「００１１」には値「１」（１０進数）が、番地「０１００」乃至「０１１１」には値「０」（１０進数）がそれぞれ格納される。これらはジャンプ先のアドレスを格納したデータレジスタの番号を意味する。
【００９７】
フラグ変換テーブル３４５は、排他的論理和演算器３４３の出力ｒＦ＿ｘｏｒ［０乃至３］を読出しアドレスとして読み出され、ｒＦ＿ｔｂｌ［３：０］を選択器３４６に出力する。したがって、データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きければｒＦ＿ｘｏｒ［１］が「１」になり、値「０」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きければｒＦ＿ｘｏｒ［２］が「１」になり、値「１」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きければｒＦ＿ｘｏｒ［３］が「１」になり、値「２」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。
【００９８】
［ＭＶｆ  ｒ５］では、フラグ選択＃０（７０２）が「１」を示すことから、選択器４２２の選択信号としてｒＦ＿ｏｕｔ［３：０］が用いられ、ｒＦ＿ｏｕｔ［３：０］の指すデータレジスタの値がオペランドとして供給される。これにより、何れかの条件が成立する場合には、ｒＦ＿ｏｕｔ［３：０］の指すデータレジスタの値がデータレジスタｒ５に転送される。
【００９９】
このように、図１３の第３のプログラム例は、本発明の実施の形態において４マシンサイクルで実行される。
【０１００】
図１６は、本発明の実施の形態における演算処理装置の動作を説明するための第４のプログラム例を示す図である。この第４のプログラム例は、３つの条件を同時に判定し、その結果に従ってメモリロードを行うプログラムの例を示している。
【０１０１】
図１６（ａ）は、処理対象となるプログラムを高級言語風に表したものである。このプログラムは、データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きければデータレジスタｒ５にメモリの「ベースアドレス＋８」番地からデータをロードし、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きければデータレジスタｒ５にメモリの「ベースアドレス＋４」番地からデータをロードし、そうでなければデータレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きければデータレジスタｒ５にメモリの「ベースアドレス＋０」番地からデータをロードすることを意味している。
【０１０２】
図１６（ｂ）は、処理対象となるプログラムをアセンブリ言語風に表したものであり、横方向に並んだ６つの命令は同時に実行されることを意味している。［ＧＴ  ｒ１０，ｒ１１］は演算ユニット＃Ａ（５０１）によって実行され、［ＧＴ  ｒ１０，ｒ１２］は演算ユニット＃Ｂ（５１１）によって実行され、［ＧＴ  ｒ１０，ｒ１３］は演算ユニット＃Ｃ（５２１）によって実行される。また、［ＬＷｆ  ｒ１０，ｒ０］はロード／ストアユニット５４１によって実行される。
【０１０３】
ここで、［ＬＷｆ  ｒ１０，ｒ０］はメモリロード命令であり、ｒＦ＿ｏｕｔ［３：０］が指すデータレジスタに格納された値をアドレスオフセットとして、データレジスタｒ０に格納されたベースアドレスに加えることにより得られるアドレスに基づいてメモリからデータをロード（load）して、データレジスタｒ１０に格納する命令である。他の命令は図８の例において説明したとおりである。
【０１０４】
図１７は、図１６の第４のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。この例では予め、書込みモードレジスタ３２１には「０」が設定され、マスクレジスタ３２２には「０１１１」（２進数）が設定され、反転レジスタ３２３には「００００」（２進数）が設定され、機能レジスタ３２５には「１１」（２進数）が設定される。
【０１０５】
この例では、書込みモードレジスタ３２１が「０」（スルーモード）であることから、演算ユニット＃Ａ乃至＃Ｃ（５０１、５１１および５２１）による各演算の条件コードは、それぞれ条件コードセットレジスタのｒＦ［０乃至２］に保持される。
【０１０６】
そして、条件コードセットレジスタの各フラグの値とマスクレジスタ３２２の対応するビットとの間で論理積演算器３４２によって論理積演算が行われ、この例ではマスクレジスタ３２２が「０１１１」であることから、ｒＦ［３］のみが「０」にマスクされる。
【０１０７】
続いて、論理積演算器３４２の出力の各ビットと反転レジスタ３２３の対応するビットとの間で排他的論理和演算器３４３によって排他的論理和演算が行われるが、この例では反転レジスタ３２３が「００００」であることから、何れのビットも反転されない。
【０１０８】
この例では、機能レジスタ３２５が「１１」であるため、フラグ変換テーブル３４５の出力ｒＦ＿ｔｂｌ［３：０］の値が選択器３４６において選択されて、ｒＦ＿ｏｕｔ［３：０］として出力される。
【０１０９】
図１８は、図１６の第４のプログラム例を実行するためのフラグ変換テーブル３４５の設定例を示す図である。この例では予め、フラグ変換テーブル３４５の番地「０００１」には値「０」（１０進数）が、番地「００１０」および「００１１」には値「４」（１０進数）が、番地「０１００」乃至「０１１１」には値「８」（１０進数）がそれぞれ格納される。これらはアドレスオフセットの値を意味する。
【０１１０】
フラグ変換テーブル３４５は、排他的論理和演算器３４３の出力ｒＦ＿ｘｏｒ［０乃至３］を読出しアドレスとして読み出され、ｒＦ＿ｔｂｌ［３：０］を選択器３４６に出力する。したがって、データレジスタｒ１０の値がデータレジスタｒ１１の値よりも大きければｒＦ＿ｘｏｒ［１］が「１」になり、値「８」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１２の値よりも大きければｒＦ＿ｘｏｒ［２］が「１」になり、値「４」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。そうでなければ、データレジスタｒ１０の値がデータレジスタｒ１３の値よりも大きければｒＦ＿ｘｏｒ［３］が「１」になり、値「０」（１０進数）がｒＦ＿ｔｂｌ［３：０］として出力される。
【０１１１】
［ＬＷｆ  ｒ１０，ｒ０］では、フラグ選択＃０（７０２）が「１」を示すことから、選択器４２２の選択信号としてｒＦ＿ｏｕｔ［３：０］が用いられ、ｒＦ＿ｏｕｔ［３：０］の指すデータレジスタの値がオペランドとして供給される。これにより、何れかの条件が成立する場合には、ｒＦ＿ｏｕｔ［３：０］の指すデータレジスタの値がオフセットアドレスとしてロード／ストアユニット５４１に供給される。
【０１１２】
また、［ＬＷｆ  ｒ１０，ｒ０］では、フラグ選択＃１（７０３）が「０」、オペランド＃１（７０５）が「０」を示すことから、データレジスタｒ０の値がベースアドレスとしてロード／ストアユニット５４１に供給される。
【０１１３】
これにより、ロード／ストアユニット５４１では、オフセットアドレスをベースアドレスに加えて、そのアドレスに基づいてメモリからデータをロードする。そして、そのロードされたデータをデータレジスタｒ１０に格納する。
【０１１４】
このように、図１６の第４のプログラム例は、本発明の実施の形態において２マシンサイクルで実行される。
【０１１５】
すなわち、本発明の実施の形態によれば、演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）による条件コードを条件コードセットとして適宜組み合わせてフラグ変換部３４０によって変換して、これに基づいて他の命令のオペランドとして供給することにより、複数の演算による条件コードに基づいて行われるオペランドの供給を高速化することができる。
【０１１６】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【０１１７】
すなわち、請求項１において、演算器は例えば演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）に対応する。また、条件コードセットレジスタは例えばレジスタファイル３１０における条件コードセットレジスタ（ｒＦ［０乃至３］）に対応する。また、条件コード変換手段は例えばフラグ変換部３４０に対応する。また、オペランド供給手段は例えばオペランドセレクタ４００に対応する。
【０１１８】
また、請求項２において、マスク演算は例えば論理積演算器３４２による論理積演算に対応する。
【０１１９】
また、請求項３において、反転処理は例えば排他的論理和演算器３４３による排他的論理和演算に対応する。
【０１２０】
また、請求項４において、所定の値と一致するか否かの比較は例えば比較器３４４による比較に対応する。
【０１２１】
また、請求項５において、変換テーブルは例えば変換テーブル３４５に対応する。
【０１２２】
また、請求項７において、データレジスタは例えばレジスタファイル３１０におけるデータレジスタに対応する。
【０１２３】
また、請求項８において、演算器は例えば演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）に対応する。また、条件コードセットレジスタは例えばレジスタファイル３１０における条件コードセットレジスタ（ｒＦ［０乃至３］）に対応する。また、条件コード書込み手段は例えばフラグ書込み部３３０に対応する。また、条件コード変換手段は例えばフラグ変換部３４０に対応する。また、オペランド供給手段は例えばオペランドセレクタ４００に対応する。
【０１２４】
また、請求項９において、演算器は例えば演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）に対応する。また、マスクレジスタは例えばマスクレジスタ３２２に対応する。また、マスク演算器は例えば論理積演算器３４２に対応する。また、反転レジスタは例えば反転レジスタ３２３に対応する。また、反転処理器は例えば排他的論理和演算器３４３に対応する。また、比較パターンレジスタは例えば比較パターンレジスタ３２４に対応する。また、比較器は例えば比較器３４４に対応する。また、変換テーブルは例えばフラグ変換テーブル３４５に対応する。また、選択器は例えば選択器３４６に対応する。また、オペランド供給手段は例えばオペランドセレクタ４００に対応する。
【０１２５】
また、請求項１０において、命令メモリは例えば命令メモリ１００に対応する。また、命令フェッチ／デコーダは例えば命令フェッチ／デコーダ２００に対応する。また、演算器は例えば演算ユニット＃Ａ乃至＃Ｄ（５０１、５１１、５２１および５３１）に対応する。また、分岐処理手段は例えば分岐ユニット５５１に対応する。また、データメモリは例えばデータメモリ６００に対応する。また、ロードストア処理手段は例えばロード／ストアユニット５４１に対応する。また、条件コードセットレジスタは例えばレジスタファイル３１０における条件コードセットレジスタ（ｒＦ［０乃至３］）に対応する。また、条件コード変換手段は例えばフラグ変換部３４０に対応する。また、オペランド供給手段は例えばオペランドセレクタ４００に対応する。
【０１２６】
なお、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。
【図面の簡単な説明】
【０１２７】
【図１】本発明の実施の形態における演算処理装置の一構成例を示す図である。
【図２】本発明の実施の形態におけるレジスタユニット３００の一構成例を示す図である。
【図３】本発明の実施の形態におけるフラグ書込み部３３０の動作モード例を示す図である。
【図４】本発明の実施の形態における設定レジスタ３２０およびフラグ変換部３４０の一構成例を示す図である。
【図５】本発明の実施の形態における命令フォーマットの一例を示す図である。
【図６】本発明の実施の形態におけるオペランドセレクタ４００の第１のオペランドセレクタ＃０（４１０）の一構成例を示す図である。
【図７】本発明の実施の形態におけるオペランドセレクタ４００の第２のオペランドセレクタ＃１（４２０）の一構成例を示す図である。
【図８】本発明の実施の形態における演算処理装置の動作を説明するための第１のプログラム例を示す図である。
【図９】図８の第１のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。
【図１０】本発明の実施の形態における演算処理装置の動作を説明するための第２のプログラム例を示す図である。
【図１１】図１０の第２のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。
【図１２】図１０の第２のプログラム例を実行するためのフラグ変換テーブル３４５の設定例を示す図である。
【図１３】本発明の実施の形態における演算処理装置の動作を説明するための第３のプログラム例を示す図である。
【図１４】図１３の第３のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。
【図１５】図１３の第３のプログラム例を実行するためのフラグ変換テーブル３４５の設定例を示す図である。
【図１６】本発明の実施の形態における演算処理装置の動作を説明するための第４のプログラム例を示す図である。
【図１７】図１６の第４のプログラム例を実行するための設定レジスタ３２０の設定例を示す図である。
【図１８】図１６の第４のプログラム例を実行するためのフラグ変換テーブル３４５の設定例を示す図である。
【符号の説明】
【０１２８】
１００  命令メモリ
２００  命令フェッチ／デコーダ
３００  レジスタユニット
３１０  レジスタファイル
３２０  設定レジスタ
３２１  書込みモードレジスタ（Ｒｅｇ＿ＷＲＭＯＤＥ）
３２２  マスクレジスタ（Ｒｅｇ＿ＭＡＳＫ［３：０］）
３２３  反転レジスタ（Ｒｅｇ＿ＸＯＲ［３：０］）
３２４  比較パターンレジスタ（Ｒｅｇ＿ＭＡＴＣＨ［３：０］）
３２５  機能レジスタ（Ｒｅｇ＿ＦＵＮＣ［１：０］）
３３０  フラグ書込み部
３４０  フラグ変換部
３４２  論理積演算器
３４３  排他的論理和演算器
３４４  比較器
３４５  フラグ変換テーブル
３４６  選択器
４００  オペランドセレクタ
４１１、４１２、４２１、４２２  選択器
５００  実行ユニット群
５０１、５１１、５２１、５３１  演算ユニット
５４１  ロード／ストアユニット
５５１  分岐ユニット
６００  データメモリ
【図１】
2008146544.tif 000003
【図２】
2008146544.tif 000004
【図３】
2008146544.tif 000005
【図４】
2008146544.tif 000006
【図５】
2008146544.tif 000007
【図６】
2008146544.tif 000008
【図７】
2008146544.tif 000009
【図８】
2008146544.tif 000010
【図９】
2008146544.tif 000011
【図１０】
2008146544.tif 000012
【図１１】
2008146544.tif 000013
【図１２】
2008146544.tif 000014
【図１３】
2008146544.tif 000015
【図１４】
2008146544.tif 000016
【図１５】
2008146544.tif 000017
【図１６】
2008146544.tif 000018
【図１７】
2008146544.tif 000019
【図１８】
2008146544.tif 000020
【手続補正書】
【提出日】平成20年3月14日(2008.3.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記複数の演算器によって同時に生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、
前記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、
前記変換条件コードセットに基づいて前記複数の演算器における前記演算のためのオペランドを供給するオペランド供給手段と
を具備する演算処理装置。
【請求項２】
複数の語からなるデータレジスタをさらに具備し、
前記オペランド供給手段は、前記変換条件コードセットに従って前記データレジスタから読み出された語を前記演算のためのオペランドとして供給する請求項１記載の演算処理装置。
【請求項３】
前記条件コード変換手段は、前記所定の変換として前記条件コードセットに基づく値の少なくとも一部に対してマスク演算を施す請求項１記載の演算処理装置。
【請求項４】
前記条件コード変換手段は、前記所定の変換として前記条件コードセットに基づく値の少なくとも一部に対して反転処理を施す請求項１記載の演算処理装置。
【請求項５】
前記条件コード変換手段は、前記所定の変換として前記条件コードセットに基づく値が所定の値と一致するか否かの比較結果を出力する請求項１記載の演算処理装置。
【請求項６】
前記条件コードセットに基づく値のそれぞれに対応して前記変換条件コードセットを保持する変換テーブルをさらに具備し、
前記条件コード変換手段は、前記条件コードセットに基づく値に対応する前記変換条件コードセットを前記変換テーブルから抽出する
請求項１記載の演算処理装置。
【請求項７】
前記オペランド供給手段は、前記変換条件コードセットを前記演算のためのオペランドとして供給する請求項１記載の演算処理装置。
【請求項８】
それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記複数の演算器によって生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、
前記条件コードセットレジスタに保持された前記条件コードセットの一部と前記複数の演算器によって同時に生成された前記条件コードの一部とを新たな条件コードセットとして前記条件コードセットレジスタに保持させる条件コード書込み手段と、
前記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、
前記変換条件コードセットに基づいて前記複数の演算器における前記演算のためのオペランドを供給するオペランド供給手段と
を具備する演算処理装置。
【請求項９】
それぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記条件コードの各々についてマスク演算を行うか否かを示すマスクビットを保持するマスクレジスタと、
前記条件コードの各々について前記マスクレジスタに従ってマスク演算を行うマスク演算器と、
前記マスク演算器により処理された前記条件コードの各々について反転処理を行うか否かを示す反転ビットを保持する反転レジスタと、
前記マスク演算器により処理された前記条件コードの各々について前記反転レジスタに従って反転処理を行う反転処理器と、
前記反転処理器により処理された前記条件コードの各々について比較対象となるパターンを保持する比較パターンレジスタと、
前記反転処理器により処理された前記条件コードと前記比較パターンレジスタに保持されたパターンを比較する比較器と、
前記反転処理器により処理された前記条件コードの組合せに対応した変換条件コードセットを保持する変換テーブルと、
前記比較器の比較結果、前記反転処理器により処理された前記条件コード、または、前記反転処理器により処理された前記条件コードの組合せに対応して前記変換テーブルから読み出された前記変換条件コードセットの何れか１つを選択する選択器と、
前記選択器の出力に基づいて前記複数の演算器における前記演算のためのオペランドを供給するオペランド供給手段と
を具備する演算処理装置。
【請求項１０】
複数の命令からなるプログラムを保持する命令メモリと、
前記命令メモリから命令を取り出してデコードする命令フェッチ／デコーダと、
前記デコード結果に基づきそれぞれ異なる演算を行ってその演算による演算結果および条件コードを生成する複数の演算器と、
前記デコード結果に基づき前記命令フェッチ／デコーダにおいて取り出すべき命令を決定する分岐処理手段と、
データメモリと、
前記データメモリから必要なデータをロードしもしくは前記データメモリに必要なデータをストアするためのアクセスを行うロードストア処理手段と、
前記複数の演算器によって同時に生成された条件コードを条件コードセットとして保持する条件コードセットレジスタと、
前記条件コードセットに対して所定の変換を施して変換条件コードセットとして出力する条件コード変換手段と、
前記変換条件コードセットに基づいて前記複数の演算器における前記演算、前記分岐処理手段における前記決定、または、前記ロードストア処理手段における前記アクセスのためのオペランドを供給するオペランド供給手段と
を具備する演算処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１１８
【補正方法】変更
【補正の内容】
【０１１８】
また、請求項３において、マスク演算は例えば論理積演算器３４２による論理積演算に対応する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１１９
【補正方法】変更
【補正の内容】
【０１１９】
また、請求項４において、反転処理は例えば排他的論理和演算器３４３による排他的論理和演算に対応する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１２０
【補正方法】変更
【補正の内容】
【０１２０】
また、請求項５において、所定の値と一致するか否かの比較は例えば比較器３４４による比較に対応する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１２１
【補正方法】変更
【補正の内容】
【０１２１】
また、請求項６において、変換テーブルは例えば変換テーブル３４５に対応する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１２２
【補正方法】変更
【補正の内容】
【０１２２】
また、請求項２において、データレジスタは例えばレジスタファイル３１０におけるデータレジスタに対応する。