(57)【特許請求の範囲】
【請求項１】
各々にレジスタ番号が付与されている複数のレジスタで構成され、各レジスタがオペランドデータおよび演算結果データのうちの少なくとも１つを格納するレジスタファイルと、
複数の演算パイプであって、各演算パイプは、複数のオペランドデータについて１種類の演算を他と並行して実行し、演算結果データを生成するところの演算パイプと、
命令コードの第１のレジスタ指定フィールドをデコードする第１デコーダであって、前記第１のレジスタ指定フィールドは第１のレジスタ番号を指定するフィールドであり、前記第１デコーダは、前記第１のレジスタ指定フィールドに基づいて連続番号となる複数のソースレジスタの番号を指定する信号を生成するところの第１デコーダと、
前記命令コードの第２のレジスタ指定フィールドをデコードする第２デコーダであって、前記第２のレジスタ指定フィールドは第２のレジスタ番号を指定するフィールドであり、前記第２デコーダは、前記第２のレジスタ指定フィールドに基づいて連続番号となる複数の結果レジスタの番号を指定する信号を生成するところの第２デコーダと、
指定されたソースレジスタ番号に対応するソースレジスタに格納されるオペランドデータを少なくとも１つの前記演算パイプに送り、前記少なくとも１つの演算パイプが他と並行して演算を実行せしめ、少なくとも１つの演算パイプから得られる演算結果データを指定された結果レジスタ番号に対応する結果レジスタへ送る制御回路とを有することを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサにおいて、前記複数のレジスタは、複数のバンクに分割されており、並列してデータを読み書きするレジスタを各バンクに配置することにより、連続する前記ソースレジスタ中の前記オペランドデータ又は連続する前記結果レジスタへの前記演算結果データを並列して読み書きすることを特徴とするプロセッサ。
【請求項３】
請求項１記載のプロセッサにおいて、さらにリードレジスタ指定フィールド数より多くの数の前記ソースレジスタからデータをリードするため、前記結果レジスタへの書き込みデータ数より多くの前記ソースレジスタからの読み出しデータ数に対応可能なデータパック演算は、前記結果レジスタに無効な部分を生成しないことを特徴とするプロセッサ。
【請求項４】
請求項１記載のプロセッサにおいて、さらにライトレジスタ指定フィールド数より多い数の前記結果レジスタにライトするため、前記ソースレジスタの読み出しデータ数より多くの前記結果レジスタへの書き込みデータ数に対応可能なデータアンパック演算は、ライトを複数回に分けることなく並列的に実行することを特徴とするプロセッサ。
【請求項５】
請求項１記載のプロセッサにおいて、さらにライトレジスタ指定フィールド数より多くの数の前記結果レジスタにライトするため、無効部分のない入力データを入力して、入力データ幅より広いデータ幅の出力を行う演算を実行することを特徴とするプロセッサ。
【請求項６】
各々にレジスタ番号が付与されている複数のレジスタで構成され、各レジスタがオペランドデータおよび演算結果データのうちの少なくとも１つを格納するレジスタファイルと、
複数の演算パイプであって、各演算パイプは、複数のオペランドデータについて１種類の演算を他と並行して実行し、演算結果データを生成するところの演算パイプと、
命令コードの第１のレジスタ指定フィールドをデコードする第１デコーダであって、前記第１のレジスタ指定フィールドは第１のレジスタ番号を指定するフィールドであり、前記第１デコーダは、前記第１のレジスタ指定フィールドに基づいて連続番号となる複数のソースレジスタの番号を指定する信号を生成するところの第１デコーダと、
前記命令コードの第２のレジスタ指定フィールドをデコードする第２デコーダであって、前記第２のレジスタ指定フィールドは第２のレジスタ番号を指定するフィールドであり、前記第２デコーダは、前記第２のレジスタ指定フィールドに基づいて連続番号となる複数の結果レジスタの番号を指定する信号を生成するところの第２デコーダと、
指定されたソースレジスタ番号に対応するソースレジスタに格納されるオペランドデータを当該オペランドデータの数だけ並列して前記複数の演算パイプに送り、前記複数の演算パイプの各々が他と並行して演算を実行せしめ、前記複数の演算パイプから得られる演算結果データを指定された結果レジスタ番号に対応する結果レジスタへ当該演算結果データの数だけ並列して送る制御回路とを有することを特徴とするプロセッサ。
【請求項７】
前記プロセッサは、さらに
前記命令コードの第３のレジスタ指定フィールドをデコードする第３デコーダであって、前記第３のレジスタ指定フィールドは第３のレジスタ番号を指定するフィールドであり、前記第３デコーダは、前記第３のレジスタ指定フィールドに基づいて連続番号となる複数の第２のソースレジスタの番号を指定する信号を生成するところの第３デコーダを備え、
前記制御回路は、指定されたソースレジスタ番号に対応するソースレジスタに格納されるオペランドデータを当該オペランドデータの数だけ並列して前記複数の演算パイプに送り、指定された第２のソースレジスタ番号に対応する前記第２のソースレジスタに格納される第２のオペランドデータを当該第２のオペランドデータの数だけ並列して前記複数の演算パイプに送り、前記複数の演算パイプの各々が他と並行して演算を実行せしめ、前記複数の演算パイプから得られる演算結果データを指定された結果レジスタ番号に対応する結果レジスタへ当該演算結果データの数だけ並列して送る制御回路とを有することを特徴とする請求項６記載のプロセッサ。
【請求項８】
請求項６記載のプロセッサにおいて、前記複数のレジスタは、複数のバンクに分割されており、並列してデータを読み書きするレジスタを各バンクに配置することにより、連続する前記ソースレジスタ中の前記オペランドデータ又は連続する前記結果レジスタへの前記演算結果データを並列して読み書きすることを特徴とするプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＳＩＭＤ（Single Instruction Multiple Data）プロセッサにおけるレジスタ指定方式および、レジスタ内データ整列処理に関するものであり、ＳＩＭＤの並列処理性能を低下させる惧れの有るレジスタ内データ整列を高速に行う手段に関するものである。
【０００２】
またＤＳＰ（Digital Signal Processing）命令として標準的な積和演算に関して、ＳＩＭＤの並列性を維持したまま、精度を落とすことなく演算させることが可能な手段に関するものである。
【０００３】
【従来の技術】
３次元グラフィックス等で必要となるベクトル演算処理を行う際に、１つのレジスタ指定フィールドで連続した複数個のレジスタを指定できるようにして、ベクトル演算を行わせるような方法が、特開平１０−１２４４８４の特許で既に公開されている。
【０００４】
また、レジスタ内データ整列命令としては、モトローラ社が開発したマルチメディア向け命令セットＡｌｔｉｖｅｃの、「ＡｌｔｉＶｅｃ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ  Ｍａｎｕａｌ」に４オペランドまで指定可能な各種データ整列命令が記述されている。
【０００５】
さらに積和演算に関しては、ＳＩＭＤの並列性を４並列から２並列に半減させた形で実現するような精度落ちのない積和演算命令が、日立製作所とＳＴマイクロエレクトロニクスの共同開発のＳＨ５アーキテクチャで定義されている。
【０００６】
【発明が解決しようとする課題】
しかし、特開平１０−１２４４８４に示されたベクトル演算処理においては、複数のレジスタ指定において、４の倍数の番号のみしか指定できない構成と成っているため自由度が乏しく、またＡｌｔｉｖｅｃのデータ整列命令においては、演算装置が大型で高価である上にソースレジスタとして３個しか指定できず、データパックやアンパックといったＳＩＭＤ特有の演算を効率良く行うことができない。従って、ＳＩＭＤの並列性を十分に達成できていない。
【０００７】
本発明の主たる目的は、ＳＩＭＤ命令の効果を最大限にあげるための、データ整列に関する手段を提供するものである。
【０００８】
また本発明の他の目的は、ＤＳＰ命令として標準的な積和演算命令をＳＩＭＤの並列性を落とすことなく、しかも精度を保ったままで実現する１手段を提供するものである。
【０００９】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１０】
本発明は、命令コードと、少なくとも１つのレジスタ指定フィールドからなる演算命令を有し、少なくとも１つのレジスタ指定フィールドは連続番号の複数個のレジスタが指定可能であることを特徴とする。
【００１１】
さらに本発明は、任意数のレジスタ指定フィールドの内、１フィールドで複数のリードレジスタを指定するデコーダと、デコーダからの出力に従って連続番号の複数個のレジスタ内データを出力するレジスタファイルとを具備することを特徴とする。
【００１２】
さらに本発明は、任意数のレジスタ指定フィールドの内、１フィールドで複数のライトレジスタを指定するデコーダと、デコーダからの出力に従って連続番号の複数個のレジスタに値を書き込めるレジスタファイルとを具備することを特徴とする。
【００１３】
上記レジスタファイルは複数のバンクを有し、複数のバンクからリードまたはライトを行うことにより、各バンクのリードまたはライトポート数をレジスタ指定フィールド数以下に制限して、フィールド数より多くのリードまたはライトを行うことによる回路規模の増大を抑制したものである。
【００１４】
上記連続番号の複数個のレジスタ数は２のｎ乗個（ｎは自然数）と限定して、レジスタ選択回路の削減を可能としたものである。
【００１５】
さらにリードレジスタ指定フィールド数より多くの数のレジスタからデータをリードするため、ライトレジスタへの書き込みデータ数より多くのリードレジスタからの読み出しデータ数に対応可能なデータパック演算を、ライトレジスタに無効な部分を生成することなく実現可能であることを特徴とする。
【００１６】
又さらにライトレジスタ指定フィールド数より多い数のレジスタにライトできることから、リードレジスタの読み出しデータ数より多くのライトレジスタへの書き込みデータ数に対応可能なデータアンパック演算を、ライトを複数回に分けることなく並列的に実現可能であることを特徴とする。
【００１７】
さらにライトレジスタ指定フィールド数より多くのレジスタにライトできることから、入力データ幅より広いデータ幅の出力を行う演算を、入力データに無効部分を作ることなく、さらにデータ幅の広い特別なレジスタを実装することもなく、実現可能であることを特徴とする。
【００１８】
さらにデータ整列を行うパイプなど、レジスタ指定フィールドの数以上のデータを必要とするパイプに、それぞれデータを供給するために、レジスタと演算パイプ間には、汎用のバスの他に、複数本のデータ用バスを設けていることを特徴とする。
【００１９】
さらにデータアンパック命令、並べ替え命令、行列演算命令、積和演算命令など、複数個の結果を出力するパイプのために、レジスタと演算パイプ間に、レジスタ書き込み用として複数本のデータ用バスを設けていることを特徴とする。
【００２０】
【発明の実施の形態】
以下、図面を参照して本発明の実施例を詳細に説明する。尚、実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。
【００２１】
図１には、本発明の実施例であるＳＩＭＤプロセッサのＣＰＵブロック図の概略を示す。ただし、このＣＰＵブロック部は、図２に示されるマイクロコンピュータのレイアウトにおけるＣＰＵ２００の部分を指すものとする。尚、図２においてＦＰＵは浮動小数点演算ユニット、ＣＣＮはキャッシュ・コントローラ、ＢＳＣはバスステートコントローラ、ＴＬＢはトランスレーション・ルックアサイド・バッファーを示し、これらのレイアウトは周知の構成である。
【００２２】
同図１に示されるＳＩＭＤプロセッサは、６４ｂｉｔＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャを例として採用して、オペランドを３個有し、３２ｂｉｔ固定長命令を実行するものとする。
【００２３】
この図１の例では、演算パイプとして、データ整列（ＡＬＮ）・乗算（ＭＵＬ）・整数演算（ＩＮＴ）・ロード／ストア（ＬＤ／ＳＴ）・分岐（ＢＲＡ）の５つをもつようなＳＩＭＤプロセッサを想定している。
【００２４】
図３には、上記ＳＩＭＤプロセッサのＣＰＵブロック図のうち、命令デコード部からレジスタファイル２１３へのアクセス部について詳細に示してある。
【００２５】
命令コード２０１のレジスタ指定フィールドの１つであるｍには、Ｒ０〜Ｒ６３までのいずれかのレジスタ番号が指定され、そのコードはデコーダ２０２によりデコードされて、各レジスタに直接アクセスできる。
【００２６】
このデコーダ２０２は、図４に示す真理値表を満たす論理回路で構成される。図４からもわかるように、出力６４本のうち、４本がｈｉｇｈとなり、４つの連続したレジスタを１度に指定することができる。各バンクから読み出されたデータは、セレクタ２０４とセレクタ２０５へ出力される。セレクタ２０５には、制御信号として、オペランドコードｍの下位２ｂｉｔを入力し、入力用の汎用バス２０６へ出力するデータを決定する。
【００２７】
セレクタ２０４にも同様に各バンクからのデータが入力され、汎用バスへ出力されるデータを除いた残りのデータを出力する制御信号としては、セレクタ２０５と同じオペランドコードｍの下位２ｂｉｔを使う。
【００２８】
図５にセレクタ２０４と２０５の出力の様子を示す真理値表を示す。表中のaとbは、前述のオペランドコードｍの下位２ｂｉｔを意味し、セレクタ２０５の出力が「Ｔｏ  ２０６」と対応し、セレクタ２０４の出力が「Ｔｏ  ３０７」と対応する。又、この真理値表の「Ｔｏ  ２０６」欄及び「Ｔｏ  ３０７」欄の出力値として表現されているＸ０〜Ｘ３の「Ｘ」はＢＮＫ（すなわち、バンク）を表している。
【００２９】
これらセレクタ２０４と２０５の出力は、各バンク毎にお互い排他的であり、この図５に示される真理値表を満たすような論理回路でセレクタ２０４と２０５は構成される。
【００３０】
各バンクについては、バンク３（図３内２０３に相当する）の詳細図が図６に示されているが、バンク３（２０３）に存在する各レジスタは、この例においては１ｂｉｔあたり２ｒｅａｄ・１ｗｒｉｔｅの標準的なもので構成される。
【００３１】
図３において、バンク０には、Ｒ０・Ｒ４・…・Ｒ４ｎの１６個のレジスタが格納され、バンク１には、Ｒ１・Ｒ５・…・Ｒ４ｎ＋１の１６個、バンク２には、Ｒ２・Ｒ６・…・Ｒ４ｎ＋２の１６個、バンク３には、Ｒ３・Ｒ７・…・Ｒ４ｎ＋３の１６個が格納されている。
【００３２】
図１に示す通り、各演算パイプで実行された演算結果は、出力用の汎用バス２０７に出力される。またこの例では、データ整列演算パイプや乗算パイプから出力が４本あるので、そのうち１本を汎用の２０７のバスへ、残りの３本を２１０のバスへ出力するようにする。２１０のバス上のデータは、セレクタ２０８に入力される。
【００３３】
セレクタ２０８は３入力４出力のセレクタで、図７に示される真理値表を満たす論理回路で構成される。
【００３４】
図７中のａとｂは、制御信号を示し、ｉｎｐｕｔのＸ，Ｙ，Ｚは入力値、ｏｕｔｐｕｔは、左からバンク０、１、２、３への出力を示す。
【００３５】
セレクタ２０８に入力される制御信号は、ディスティネーションレジスタ指定フィールド（オペランドコードｄ）で示されるコードの下位２ｂｉｔを使用する。また、汎用バス２０７へ出力されたデータは、セレクタ２０９へ入力され、格納するレジスタが存在するバンクへ選択・出力される。
【００３６】
セレクタ２０９は、制御信号として、セレクタ２０８同様ディスティネーションレジスタ指定フィールドで示されるコード（オペランドコードｄ）の下位２ｂｉｔを使い、図８に示す真理値表を満たす論理回路で構成される。
【００３７】
図８中のａとｂは、ディスティネーションレジスタ指定フィールド（オペランドコードｄ）の下位２ｂｉｔの値で、Ｘは入力値、Ｏｕｔｐｕｔは、左からバンク０、１、２、３への出力を示す。
【００３８】
これらセレクタ２０８とセレクタ２０９からの出力は、各バンクごとにお互いに排他的であり、片方のセレクタの出力がデータならば、もう片方のセレクタからの出力は０になる。従って、これら、セレクタ２０８と２０９からの出力は、各バンクごとに論理和をとって、バンク内のレジスタへ書き込まれることになる。
【００３９】
以上までが、複数レジスタが指定できるＳＩＭＤプロセッサの説明である。
【００４０】
次に、このＳＩＭＤプロセッサの特徴を活かして定義されるＳＩＭＤ演算命令について説明する。
【００４１】
一般にＳＩＭＤプロセッサでは、レジスタ内のデータが即演算できる順番に整列されているときに、その並列性を最大限に発揮することができるが、多くの場合データを並び替えて後に主要な演算を行う必要がある。従って、その並び替えサイクルをできる限り減らすことが、ＳＩＭＤプロセッサの性能向上につながる。
【００４２】
本発明の特徴を活かして、図９、図１０のようなデータパック命令を定義する。
【００４３】
図９はシフト量がレジスタ内に存在する場合。図１０は即値として、命令コード内にシフト量が存在する場合である。
【００４４】
図９ではデータパック命令のシフト量（Ｒｎ）をレジスタから読み込み、Ｒｍで示されるレジスタ群内のデータに対してシフト処理を施した後、パック演算を遂行するオペレーションコードを示しており、図１０では図９と比較してシフト量（ｓ）が即値の場合のオペレーションコードを示している。
【００４５】
この命令は図９中の動作説明からも分かるように、４つのレジスタ内データを１つのデータにパックして格納するためのものである。
【００４６】
この命令を実現するための回路構成は、図１１に示されるものである。
【００４７】
汎用バス２０６と３０７のバスには、レジスタ指定フィールド１（オペランドコードｍ）で示される４個のレジスタ内データが転送される。またレジスタ指定フィールド２（オペランドコードｎ）で示されるシフト量は、汎用バス３０１から取り込まれる。これらデータとシフト量は、任意ｂｉｔのシフトが可能なバレルシフタ３０２にそれぞれ入力される。このバレルシフタ３０２により固定小数点の除算を行うことができる。
【００４８】
これらシフトされた結果の下位１６ｂｉｔのみを各々取り出し、汎用バス２０７へ出力して、６４ｂｉｔ幅データとして１つのレジスタにパックすることができる。
【００４９】
次に本発明の特徴を活かして、図１２、図１３に示されるようなデータアンパック命令を定義する。このデータアンパック命令は、１つのレジスタ内ＳＩＭＤデータを複数のレジスタに分割して格納する命令である。図１２は１６ｂｉｔデータを扱う場合、図１３は８ｂｉｔデータを扱う場合を考慮して定義した。
【００５０】
図１２では６４ｂｉｔのデータを１６ｂｉｔ毎に分割、分割されたデータを６４ｂｉｔに符号拡張し、ライトレジスタに書き込むオペレーションコードを示している。図１３では図１２と比較し、８ｂｉｔデータを扱う為、書き込むライトレジスタ数が倍に成っている。
【００５１】
この命令を実現するための回路構成を図１４を用いて詳細に説明する。
【００５２】
レジスタ指定フィールド１（オペランドコードｍ）で示されるレジスタ内のＳＩＭＤデータが汎用バス２０６を通して伝送される。
【００５３】
この図１４では、１６ｂｉｔデータに分割する場合を示してあるが、汎用バス２０６を通して送られたデータは、１６ｂｉｔごとに分割されて、それぞれ別の符号拡張器４００に入力されて、６４ｂｉｔデータに符号拡張されてバス２０７と２１０に出力される。以上の操作でデータアンパック機能を実現することができる。
【００５４】
さらに、本発明の特徴を活かして図１５のような並べ替え命令を定義する。図１５では、４つの指定されたレジスタ内ＳＩＭＤデータを読み出して、要素毎に指定された並べ替えを行って指定されたレジスタに並べ替えたＳＩＭＤデータを格納する為のオペレーションコードを示している。
【００５５】
一般的に「並べ替え命令」は、行列の転置や回転、ＦＦＴのバタフライ演算等に有効であり、具体的な動作は図１６に示す。
【００５６】
従来の並べ替え命令では、例えば１６ｂｉｔ×４個のＳＩＭＤデータ２個に対して並べ替え操作を行うと、結果格納用に６４ｂｉｔ幅レジスタ２個を必要とするが、ディスティネーションレジスタとして１個しか指定できないため、並べ替え結果の上位ｂｉｔ部分用と下位ｂｉｔ部分用にそれぞれ別命令を用意していた。
【００５７】
本定義による並び替え命令は、１個のレジスタ指定フィールドで複数レジスタを指定できる特徴から、図１６のように４個のソースデータに対して、一度に上位ｂｉｔ部と下位ｂｉｔ部の並べ替え操作を行うことができ、２組分を同時に演算することができる。
【００５８】
図１７に具体的な機能構成図を示す。汎用バス２０６と３０７のバスを通して伝送されるソースデータ対２組は、それぞれ１６ｂｉｔ幅に分割されて、並び替え操作が行われ、その結果を２０７と２１０のバスへ出力して、レジスタに書き込まれる。
【００５９】
また、複素数データのような場合、ロードしたデータには実数と虚数が交互に存在することが多く、演算には実数データのみ、虚数データのみのデータ列を必要とすることが多々ある。
【００６０】
そのような場合、本発明のＳＩＭＤプロセッサならば、本実施例においては、最大で８個のＳＩＭＤデータを同時に読み込むことができるため、１６ｂｉｔデータならば３２個のデータ間で並べ替え操作を行って、１度に１６データ分の結果を求めることができる。
【００６１】
上記のように複素数データを扱う処理を行うためには、図１８、図１９で示されるような命令を定義すれば良い。
【００６２】
図１８では、８個の指定されたレジスタ内ＳＩＭＤデータを読み出して、各要素を右端から数えて１・２・３・４としたとき、１と３のデータ要素のみを抽出して、指定されたレジスタに格納する処理を示すオペレーションコードを示しており、図１９ではＳＩＭＤデータを読み出した後、２と４のデータ要素のみを抽出して、指定されたレジスタに格納する処理を示すオペレーションコードを示している。
【００６３】
具体的には図２０に示すような処理であって、この場合は各レジスタ内データの６３ｂｉｔ目〜４８ｂｉｔ目のデータと、３１ｂｉｔ目〜１６ｂｉｔ目のデータの抽出である。
【００６４】
動作の詳細を図２１の回路構成図で説明すると、汎用バス２０６と３０１、３０７と５０１のバスを通って伝送されるＳＩＭＤデータ８組３２個は、それぞれ必要な１６ｂｉｔデータのみ抽出されて、結果を汎用バス２０７と２１０のバスへ出力することによって実現する。
【００６５】
最後に、本発明の特徴を活かして、図２２で示されるような積和演算命令を定義する。
【００６６】
図２２では、２個の指定されたレジスタ内ＳＩＭＤソースデータを読み出し、４個の累積和の基になるレジスタ内データをさらに読み出し、累積和の計算をした後、指定された４個のレジスタにＳＩＭＤデータを格納する処理を示すオペレーションコードを示している。
【００６７】
一般の乗算においては、乗数および被乗数のｂｉｔ幅に対して、得られる結果は倍のｂｉｔ幅をもつため、１６ｂｉｔ幅のデータを４個も保持しているＳＩＭＤ型６４ｂｉｔデータでは、演算結果を格納するために１２８ｂｉｔ幅のレジスタが必要になる。現実解としては、ＳＩＭＤの並列性を犠牲にして、６４ｂｉｔ幅レジスタの下位３２ｂｉｔにのみ有効なデータを格納して、結果を６４ｂｉｔに収める方法が多くとられている。しかし累積和を取る場合、さらに結果のｂｉｔ幅が増加する可能性があり、上記方法でも演算精度が落ちてしまう。
【００６８】
ＤＳＰにおいては、１６ｂｉｔ×１６ｂｉｔの積和演算にて、格納用に４０ｂｉｔレジスタを用意するなどして演算の精度を保つ工夫がなされている。
【００６９】
しかし本発明の特徴を活かすと、ＳＩＭＤの並列性を損なうことなく、精度の落ちない積和演算を実行することができる。
【００７０】
図２２で定義した積和演算命令の具体的な説明図を図２３に、回路構成図を図２４に示す。
【００７１】
１６ｂｉｔデータ４個を含むＳＩＭＤデータは、汎用バス２０６とバス３０７を通して伝送される。それらのＳＩＭＤデータは、１６ｂｉｔデータごとに分割されて、各々乗算器７００〜７０３に入力され、７０４〜７０７の加算器へ出力される。累積和のデータは、汎用バス３０１とバス５０１を通して伝送され、７０４〜７０７の加算器へ入力される。これらの累積和演算の結果は、格納用の汎用バス２０７とバス２１０へ出力される。このような手段を用いて、精度を落とすことなく、かつ並列性を保ったまま、ＳＩＭＤデータの積和演算を実現することができる。
【００７２】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００７３】
例えば図１におけるセレクタ２０４は、４入力に対して３出力のセレクタであるが、これをトライステートバッファーにしても何ら問題はない。
【００７４】
データパック命令の場合、図１１では、４入力１出力であるが、入力は何本でもよく、また出力本数も制限されるものではない。
【００７５】
さらにデータアンパック命令の場合、レジスタ内のＳＩＭＤデータの型によって、分割する数が決定するので、図１４のように４個に限定されるものでもない。
【００７６】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００７７】
すなわち、本発明によるＳＩＭＤプロセッサは、ＳＩＭＤ演算の効果を妨げるレジスタ内データ整列演算の高速化を実現することができ、さらにＤＳＰ的な積和演算を実現することが可能である。
【００７８】
具体的な効果は以下に挙げる点である。
【００７９】
（１）本発明により定義されたデータパック命令を導入することにより、ばらばらに格納されているデータを纏め、ＳＩＭＤ命令で効率的にデータ処理を行うことができる。
【００８０】
本実施例の場合（１６ｂｉｔデータ４個のパック）を図２５に示す。図中のＡは現状の場合のプログラム例であり、Ｂが新規のデータパック命令を採用した場合のものである。
【００８１】
Ｂ中の「ｐａｃｋ．ｗ」をデータパック命令のニーモニックとする。このＡとＢのプログラム例のように、データパック命令を採用することによって、命令ステップを１／４に削減することができる。
【００８２】
（２）本発明により定義されたデータアンパック命令を導入することにより、速やかなレジスタの初期化や、データの分割が行え、ＳＩＭＤ処理が効果的でない部分においても、演算効率が落ちないようにすることができる。
【００８３】
本実施例の場合（１個のレジスタに存在する１６ｂｉｔデータ４個を４個のレジスタにアンパック）を図２６に示す。
【００８４】
図中のＡが従来の並べ替え命令を用いてデータパックする場合のプログラム例であり、Ｂが新規データアンパック命令を採用した場合のものである。図２６からもわかるように、新規命令の追加によって、命令ステップ数を１／６にまで削減することができる。
【００８５】
（３）本発明により定義されたデータ並べ替え命令を導入することにより、レジスタ内ＳＩＭＤデータの並び替えを高速に行うことができ、積和演算等のＳＩＭＤ処理に遅滞なくデータを供給することができる。
【００８６】
本実施例の場合を図２７に示す。図中のＡが従来の並べ替え命令を用いた場合のプログラム例であり、図中のＢが新規の並べ替え命令を採用した場合のプログラム例である。この図２７から明らかなように、命令ステップ数を１／８にまで削減することが可能となる。
【図面の簡単な説明】
【図１】本発明の１例に係わるＳＩＭＤプロセッサのＣＰＵブロック図である。
【図２】本発明の１例に係わるＳＩＭＤプロセッサの全体ブロック図である。
【図３】前記ＳＩＭＤプロセッサのレジスタファイル部近辺の詳細図である。
【図４】デコード部を構成する論理回路の真理値表を示す図である。
【図５】図３のバンクからのデータを選択するセレクタを構成する論理回路の真理値表を示す図である。
【図６】バンク２０３内の個々のレジスタ詳細図である。
【図７】汎用バス上の演算結果を、どのバンクのレジスタに格納するのか、その場所をセレクトするためのセレクタを構成する論理回路の真理値表を示す図である。
【図８】バス２１０上の演算結果を、どのバンクのレジスタに格納するのか、その場所をセレクトするためのセレクタを構成する論理回路の真理値表を示す図である。
【図９】データパック命令の定義を示す図である。
【図１０】即値を含むデータパック命令の定義を示す図である。
【図１１】データパック命令を実現するための機能構成図である。
【図１２】データアンパック命令の定義を示す図である。
【図１３】８ｂｉｔデータに対するアンパック命令の定義を示す図である。
【図１４】データアンパック命令を実現するための構成図である。
【図１５】並べ替え命令の定義を示す図である。
【図１６】並べ替え命令の具体的な説明図である。
【図１７】並べ替え命令を実現するための機能構成図である。
【図１８】並べ替え命令の定義を示す図である。
【図１９】並べ替え命令の他の定義を示す図である。
【図２０】並べ替え命令の具体的な使用例を示す図である。
【図２１】図２０を実現するための機能構成図である。
【図２２】積和演算命令の定義を示す図である。
【図２３】積和演算命令の具体的な説明図である。
【図２４】図２３を実現するための機能構成図である。
【図２５】データパック命令導入の効果を示すプログラム例を示す図である。
【図２６】データアンパック命令導入の効果を示すプログラム例を示す図である。
【図２７】並べ替え命令導入の効果を示すプログラム例を示す図である。
【符号の説明】
２００…ＣＰＵブロック、２０１…命令コード、２０２…レジスタ指定デコーダ、２０３…レジスタファイルを分割したバンクの１つ、２０４…４入力３出力セレクタ、２０５…４入力１出力セレクタ、２０６、３０１…ソースデータ用汎用バス、２０７…演算結果用汎用バス、２０８…３入力４出力セレクタ、２０９…１入力４出力セレクタ、２１０…演算結果用バス、２１１…データ整列演算パイプ、２１２…乗算パイプ、２１３…レジスタファイル、３０２…右算術シフト用バレルシフタ、３０７、５０１…ソースデータ用バス、４００…６４ｂｉｔ符号拡張器、７００、７０１，７０２，７０３…１６ｂｉｔ乗算器、７０４、７０５，７０６，７０７…６４ｂｉｔ加算器、７０８、７０９，７１０，７１１…１ｂｉｔ右シフト器。
【図１】
0003779540.tif 000002
【図２】
0003779540.tif 000003
【図３】
0003779540.tif 000004
【図４】
0003779540.tif 000005
【図５】
0003779540.tif 000006
【図６】
0003779540.tif 000007
【図７】
0003779540.tif 000008
【図８】
0003779540.tif 000009
【図９】
0003779540.tif 000010
【図１０】
0003779540.tif 000011
【図１１】
0003779540.tif 000012
【図１２】
0003779540.tif 000013
【図１３】
0003779540.tif 000014
【図１４】
0003779540.tif 000015
【図１５】
0003779540.tif 000016
【図１６】
0003779540.tif 000017
【図１７】
0003779540.tif 000018
【図１８】
0003779540.tif 000019
【図１９】
0003779540.tif 000020
【図２０】
0003779540.tif 000021
【図２１】
0003779540.tif 000022
【図２２】
0003779540.tif 000023
【図２３】
0003779540.tif 000024
【図２４】
0003779540.tif 000025
【図２５】
0003779540.tif 000026
【図２６】
0003779540.tif 000027
【図２７】
0003779540.tif 000028