(57)【特許請求の範囲】
【請求項１】
複数のレジスタを有し、前記複数のレジスタからレジスタを選択して、上位ビットと下位ビットに分割されたビットフィールド毎に演算し、演算結果を一つ以上のレジスタに出力するプロセッサにおいて、
実行される命令は、前記上位ビット、下位ビット毎の演算結果を、前記複数ののレジスタの内のどのプロセッサの上位ビット、下位ビットのビットフィールドに格納するかを指定するオペランドを含み、
前記実行される命令のオペランドの情報に従って、演算結果を指定されたプロセッサの上位ビット、下位ビットのビットフィールドに出力することを特徴とするプロセッサ。
【請求項２】
前記実行される命令のオペランドは、演算結果を同一のレジスタのビットフィールドに出力するか、あるいは、互いに異なったレジスタのビットフィールドに出力するかを指定するビットを有することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記複数のレジスタは、レジスタファイル内のレジスタであることを特徴とする請求項１記載のプロセッサ。
【請求項４】
複数のレジスタを有するレジスタファイルから一つ以上のレジスタを選択し、演算結果をレジスタファイルのレジスタに出力するプロセッサにおいて、
前記レジスタファイルのレジスタの分割されたビットフィールド毎に演算する演算器と、
前記演算器により前記ビットフィールド毎に演算された結果を保持する記憶手段と、
実行している命令語のオペランド情報から、出力するレジスタを指定する信号と、出力するレジスタの出力するビットフィールドの位置を指定する信号とを発生する手段と、
前記出力するビットフィールドの位置を指定する信号に基づいて、前記演算結果を保持する記憶手段を選択するセレクタと、
前記出力するレジスタを指定する信号に基づいて、前記レジスタファイルの中からレジスタの中から前記演算結果を保持する記憶手段に記憶された演算結果を出力するレジスタを選択する手段とを有することを特徴とするプロセッサ。
【請求項５】
前記レジスタファイルのレジスタの分割されたビットフィールドは、一つのレジスタの上位ビットフィールドと下位ビットフィールドであり、前記演算器により、上位ビットフィールドと下位ビットフィールド毎に演算し、前記記憶手段に、上位ビットフィールドと下位ビットフィールド毎に演算された演算結果を保持して、前記上位ビットフィールドと下位ビットフィールド毎に演算された演算結果を前記選択手段によって選択されたレジスタの選択された前記上位ビットフィールドまたは下位ビットフィールドに出力することを特徴とする請求項４記載のプロセッサ。
【請求項６】
前記プロセッサの命令語は、入力レジスタ指定オペランドと出力レジスタ指定オペランドとを有し、前記出力レジスタ指定オペランドが、出力レジスタのレジスタファイルの番号と前記上位ビットフィールドまたは下位ビットフィールドのいずれかに出力するかの情報を含むことを特徴とする請求項５記載のプロセッサ。
【請求項７】
さらに、前記入力レジスタ指定オペランドが、入力レジスタのレジスタファイルの番号と前記上位ビットフィールドまたは下位ビットフィールドのいずれかから入力するかの情報を含むことを特徴とする請求項６記載のプロセッサ。
【請求項８】
レジスタファイルを有し、前記レジスタファイルのレジスタを入力レジスタと出力レジスタとして指定するＳＩＭＤ命令を処理するプロセッサの演算制御方法において、
前記ＳＩＭＤ命令のオペランドにより、出力するレジスタと出力する演算フィールドを指定するステップと、
前記ＳＩＭＤ命令に従い、前記入力レジスタの対応する演算フィールド毎に演算器に入力して、演算器により演算するステップと、
前記演算器からの演算結果を演算フィールド毎にプロセッサ内部の記憶手段に保持するステップと、
前記ＳＩＭＤ命令のオペランドにより指定された出力する演算フィールドの値により、前記記憶手段に保持された値を出力する出力する演算フィールドを選択するステップと、
前記ＳＩＭＤ命令のオペランドにより指定された出力するレジスタの値と出力する演算フィールドに従い、前記レジスタファイルの一つ以上のレジスタと演算フィールドに出力するステップとを有することを特徴とするプロセッサの演算制御方法。
【請求項９】
前記各ステップを繰り返すことにより、前記レジスタファイル上で連続しておこなうＳＩＭＤ命令のソフトウェアによるパイプライン処理をおこなうことを特徴とする請求項８記載のプロセッサの演算制御方法。
【請求項１０】
前記ＳＩＭＤ命令のソフトウェアによるパイプライン処理は、同一レジスタの中でのシフト命令を含まないことを特徴とする請求項９記載のプロセッサの演算制御方法。
【請求項１１】
前記ＳＩＭＤ命令のソフトウェアによるパイプライン処理を、１サイクル毎に入出力がおこなわれるレジスタファイル内のレジスタの演算フィールドの個数の変動が少なくなるように制御することを特徴とする請求項１１記載のプロセッサの演算制御方法。
【請求項１２】
前記ＳＩＭＤ命令のソフトウェアによるパイプライン処理を、１サイクル毎に入出力がおこなわれるレジスタファイル内のレジスタの演算フィールドの個数の変動が一定であるように制御することを特徴とする請求項１１記載のプロセッサの演算制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，計算機の中央処理装置に用いられるプロセッサに関する。特に，複数の演算を並列に処理するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）方式を利用したプロセッサ、該プロセッサにおける演算命令処理方法及び演算制御方法に関する。
【０００２】
【従来の技術】
プロセッサの演算性能の向上の手段には主に，動作周波数向上，１サイクル当たりの演算性能の向上がある。今日のプロセッサでは，この両者を組み合わせて演算性能の向上を実現している。
【０００３】
１サイクル当たりの演算性能向上を目的とした技術の中に，ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）方式がある。一般的にＳＩＭＤ方式では，１個のデータ幅ａビットの演算器について，ｍをａの約数，ａ＝ｂｍとして，データ幅ｂビットのｍ個の演算器としても使用できるよう構成されている。複数個の演算器として使用するモードに対応する命令をＳＩＭＤ命令と呼ぶ。
【０００４】
例えば“インテル・アーキテクチャ・ソフトウェア・ディベロッパーズ・マニュアル，中巻：命令セットリファレンス”，インテル株式会社，１９９９にＳＩＭＤ命令が記載されている。ｐｐ．３−５２３に記載のＰＭＵＬＨＵＷ命令などがそれである。
【０００５】
従来のＳＩＭＤ方式での演算器データパスの例を図１に示す。この例では６４ビットの加算器を３２ビットの加算器２個として使用している。１３１がＳＩＭＤ方式の加算器である。１０１は６４ビット×６４個のレジスタファイルであり，２個のレジスタの読み出しと，１個のレジスタの書き込みを同時に行うことができる。１１１はレジスタファイル１０１の読み出し，および書き込みを制御する信号である。１２１，１２２，１６１は６４ビット分のフリップフロップである。
【０００６】
制御信号１１１によってレジスタファイル１０１から読み出された２個の値は，クロックに同期してフリップフロップ１２１，１２２に取り込まれる。その後に，フリップフロップ１２１，１２２の上位３２ビット部分がＳＩＭＤ加算器１３１によって加算され，クロックに同期してフリップフロップ１６１の上位３２ビット部分に取り込まれる。同時に，フリップフロップ１２１，１２２の下位３２ビット部分がＳＩＭＤ加算器１３１によって加算され，クロックに同期してフリップフロップ１６１の下位３２ビット部分に取り込まれる。フリップフロップ１６１に取り込まれた値は，制御信号１１１によってレジスタファイル１０１に書き込まれる。
【０００７】
また，従来のＳＩＭＤ方式の命令の例を示す。ＳＩＭＤ方式の加算を行う命令の形式を図２に示す。この命令のアセンブラでのニーモニック表記は，ＤＡＤＤＲｍ，Ｒｎ，Ｒｄであり，ＲｍとＲｎは入力レジスタ，Ｒｄは出力レジスタである。２０１〜２０６全体で３２ビットの命令コードである。２０１，２０３はそれぞれ６ビット，４ビットのビットフィールドで，オペコードである。２０６は４ビットのビットフィールドであり，予約フィールドである。２０２，２０４，２０５は６ビットのビットフィールドで，２０２，２０４は入力レジスタを指定するオペランド，２０５は出力レジスタを指定するオペランドである。
【０００８】
２０２，２０４，２０５の値と指定されるレジスタの対応を図３に示す。３０１の列はオペランドに記述されたビットパターンを示しており，３０２の列はそれに対応するレジスタを示している。このように，従来のＳＩＭＤ方式ではオペランドを通常のレジスタの単位で指定する。
【０００９】
【発明が解決しようとする課題】
前述した通り，従来のＳＩＭＤ方式ではＳＩＭＤ命令のオペランド指定は通常のレジスタ単位で行われ，同時に行われる演算について各演算に対する入出力レジスタのビットフィールドの位置は固定である。したがって，同時に行われる演算のどれか１個のオペランドを決めると，その他の演算のオペランドも自動的に決定する。
【００１０】
ここで，例として次の処理を行うことを考える。処理の内容は，メモリ上の３つの配列ａ［］，ｂ［］，ｃ［］の各要素を添字毎に加算し，配列ｓ［］に格納するというものである。その処理の部分をＣ言語で記述すると以下の式（１）の通りになる。
【００１１】
【数１】
0003753991.tif 000002
次に，前述した従来のＳＩＭＤ方式のプロセッサでこの処理を行うことを考える。ここで，論理演算，シフト演算と加算は並列に実行できないとする。ソフトウェアパイプライニングを用いた場合の処理の様子を図４に示す。なお，メモリに対するロードストアについては省略している。演算とロードストアが並列に実行できる場合，命令を適切に配置することによりロードストアを考えずに済むこともあるからである。
【００１２】
５０１〜５０４は１クロックサイクルの期間を示している。５１１〜５１３は６４ビットのレジスタを示している。これらのレジスタはサイクル５０１で行われる演算の入力となる。５２１〜５２３は６４ビットのレジスタを示している。これらのレジスタはサイクル５０１で行われた演算の出力であり，サイクル５０２で行われる演算の入力である。５３１〜５３３は６４ビットのレジスタを示している。これらのレジスタはサイクル５０２で行われた演算の出力であり，サイクル５０３で行われる演算の入力である。５４１〜５４３は６４ビットのレジスタを示している。これらのレジスタはサイクル５０３で行われた演算の出力であり，サイクル５０４で行われる演算の入力である。５５１〜５５３は６４ビットのレジスタを示している。これらのレジスタはサイクル５０４で行われた演算の出力である。
【００１３】
また，レジスタ５１１，５２１，５３１，５４１，５５１は別々に存在するのではなく，同一のレジスタの内容が変化しているものである。すなわち，サイクル５０１〜５０４を経て，レジスタの内容が５１１から５２１，５３１，５４１，５５１と変化している。レジスタ５１２，５２２，５３２，５４２，５５２の組み合わせ，レジスタ５１３，５２３，５３３，５４３，５５３の組み合わせについても同様である。
【００１４】
５１４，５１５は加算器を示している。これらは，ＳＩＭＤ方式によって１個の６４ビット加算器を分割して３２ビット加算器として使用しているものである。加算器５１４，５１５はサイクル５０１中において演算を行う。５４４，５４５は加算器を示している。加算器５４４，５４５はサイクル５０４中において演算を行う。
【００１５】
また，加算器５１４，５４４は別々に存在するのではなく，同一の加算器がサイクル５０１，５０４にそれぞれ演算を行っているものである。加算器５１５，５４５の組み合わせについても同様である。５２４は論理３２ビットシフタであり，サイクル５０２中において演算を行う。また，５３４は６４ビットの論理和演算を行う演算器であり，サイクル５０３中において演算を行う。
【００１６】
サイクル５０１では，ｉ番目の要素とｉ−１番目の要素の加算処理を同時に行っており，サイクル５０４ではｉ番目の要素とｉ＋１番目の要素の加算処理を同時に行っている。このように同一サイクルに異なる要素の処理を行う技法をソフトウェアパイプライニングと呼ぶ。サイクル５０２と５０３では，サイクル５０１の加算器５１４の出力であるレジスタ５２３の上位３２ビットを，シフタ５２４でレジスタ５３３の下位３２ビットに移動し，レジスタ５３１との論理和を取ることにより，レジスタ５４１の下位３２ビットに格納している。
【００１７】
従来のＳＩＭＤ方式でソフトウェアパイプライニングを行う場合，加算器５４４の入力であるレジスタ５４１について，上位３２ビット部分にはａ［ｉ＋１］，下位３２ビット部分には加算器５１４による演算結果が格納されていなければならない。しかし，加算器５１４による演算結果は必ずレジスタの上位３２ビット部分に格納されるため，下位３２ビット部分に移動させるためにサイクル５０２，５０３の演算が必要となる。この場合，１要素当たり３サイクルが必要となるため，前述の理想状態と比較すると性能が１／３になることがわかる。
【００１８】
また，従来のＳＩＭＤ方式でソフトウェアパイプライニングを用いず，同時に２要素の処理を行う場合を図５に示す。
【００１９】
６０１，６０２は１クロックサイクルの期間を示している。６１１〜６１３は６４ビットのレジスタを示している。これらのレジスタはサイクル６０１で行われる演算の入力となる。６２１〜６２３は６４ビットのレジスタを示している。これらのレジスタはサイクル６０１で行われた演算の出力であり，サイクル６０２で行われる演算の入力となる。６３１〜６３３は６４ビットのレジスタを示している。これらのレジスタはサイクル６０２で行われた演算の出力である。
【００２０】
また，レジスタ６１１，６２１，６３１は別々に存在するのではなく，同一のレジスタの内容が変化しているものである。すなわち，サイクル６０１，６０２を経て，レジスタの内容が６１１から６２１，６３１と変化している。レジスタ６１２，６２２，６３２の組み合わせ，レジスタ６１３，６２３，６３３の組み合わせについても同様である。
【００２１】
６１４，６１５は加算器を示している。これらは，ＳＩＭＤ方式によって１個の６４ビット加算器を分割して３２ビット加算器として使用しているものである。加算器６１４，６１５はサイクル６０１中に演算を行う。６２４，６２５は加算器を示している。加算器６２４，６２５はサイクル６０２中に演算を行う。
【００２２】
また，加算器６１４，６２４は別々に存在するのではなく，同一の加算器がサイクル６０１，６０２にそれぞれ演算を行っているものである。加算器６１５，６２５の組み合わせについても同様である。
【００２３】
サイクル６０１では，配列ａ［］とｂ［］のｉ番目とｉ＋１番目の処理を同時に行っている。サイクル６０２では，サイクル６０１の結果と配列ｃ［］のｉ番目，ｉ＋１番目の処理を同時に行っている。  この場合，１要素当たり１サイクルの性能を達成できているが，処理に必要となるレジスタ数が１／２個増加しており，好ましくない。ここで、レジスタ６１１，６２１，６３１などは物理的なレジスタと見なされ、配列ａ［］、ｂ［］、ｃ［］等は物理レジスタ内の論理レジスタ２個に格納されているデータに相当する。
【００２４】
以上に述べた通り，ＳＩＭＤ方式のプロセッサでは特定の処理を行う際に，実際の性能がピーク性能より低くなる場合がある。特に，処理を構成する一連の演算に依存関係があり，ソフトウェアパイプライニングが必要となる場合にこの現象が発生する。ｉ番目とｉ＋１番目を同時に処理するようなピーク性能の低下を免れる方法もあるが，その場合には理想ケースよりもレジスタ数が余計に必要となる。これは，ＳＩＭＤ命令での入出力レジスタ指定の自由度の低さに起因するものである。
【００２５】
【課題を解決するための手段】
本発明では以上の問題点に鑑み，ＳＩＭＤ命令の出力レジスタ指定に新たな指定を追加，拡張し，その拡張された機能を実現できるよう，ＳＩＭＤ演算器のデータパスを変更する。具体的には，ＳＩＭＤ演算器の演算結果の出力先が複数レジスタにまたがり，また，入力ビットフィールド部分とは異なる部分に格納するオペランド指定をＳＩＭＤ命令に追加し，また，複数レジスタの部分部分に書き込みができるようにする。
【００２６】
これを図４の例で示すならば，加算器５１４の出力をレジスタ５４１の下位３２ビット部分に格納するオペランド指定方法を追加することに相当する。以上が問題を解決するための手段である。
【００２７】
【発明の実施の形態】
以下において，本発明の実施例を示す。
【００２８】
図６は本発明のＳＩＭＤ方式での演算器データパスの実施例である。７３１は６４ビットの演算器を３２ビットの演算器２個に分割したＳＩＭＤ演算器である。７０１，７０２は３２ビット×６４個のレジスタファイルであり，それぞれ２個のレジスタの読み出しと，１個のレジスタの書き込みを同時に行うことができる。７１１，７１２はそれぞれレジスタファイル７０１，７０２の読み出し，および書き込みを制御する信号である。７２１，７２２は６４ビット分のフリップフロップであり，７６１、７６２は各々３２ビット分のフリップフロップである。７４１，７４２は３２ビットのセレクタであり，７５１はセレクタ７４１，７４２の出力を制御する信号である。
【００２９】
レジスタファイル７０１，７０２について，制御信号７１１，７１２によるレジスタ指定を同一とすると，従来ＳＩＭＤ方式でのレジスタファイル１０１（図１）と同等の動作となる。すなわちレジスタファイル７０１にはレジスタファイル１０１の上位３２ビット部分に相当するデータ，レジスタファイル７０２にはレジスタファイル１０１の下位３２ビット部分に相当するデータが格納されている。
【００３０】
従来のＳＩＭＤ方式の演算器データパスと比較すると，レジスタファイルが上位３２ビット分と下位３２ビット分に分割されていることと，演算器データパスにＳＩＭＤ演算器の出力の上位部分と下位部分を交換するためのセレクタ７４１，７４２，およびその制御信号７５１が追加されていることが本発明の特徴である。
【００３１】
制御信号７１１によってレジスタファイル７０１から読み出された２個の値は，クロックに同期してフリップフロップ７２１，７２２の上位３２ビット部分に取り込まれる。制御信号７１２によってレジスタファイル７０２から読み出された２個の値は，クロックに同期してフリップフロップ７２１，７２２の下位３２ビット部分に取り込まれる。
【００３２】
その後に，フリップフロップ７２１，７２２の上位３２ビット部分がＳＩＭＤ演算器７３１によって演算され，結果がフリップフロップ７６１に格納される。さらに、フリップフロップ７６１から演算結果がセレクタ７４１，７４２に入力される。同時にフリップフロップ７２１，７２２の下位３２ビット部分がＳＩＭＤ演算器７３１によって演算され，結果がフリップフロップ７６２に格納される。さらに、フリップフロップ７６２から演算結果がセレクタ７４１，７４２に入力される。
【００３３】
その後、セレクタ７４１を介して演算結果は，制御信号７１１によってレジスタファイル７０１に書き込まれる。又、セレクタ７４２を介して演算結果は，制御信号７１２によってレジスタファイル７０２に書き込まれる。
【００３４】
本発明のＳＩＭＤ方式の命令の例を示す。本発明のＳＩＭＤ方式の加算を行う命令の形式を図７に示す。この命令のアセンブラでのニーモニック表記は，ＤＡＤＤ  Ｒｍ，Ｒｎ，ＲｄもしくはＤＡＤＤ  Ｒｍ，Ｒｎ，Ｒｄ１＆Ｒｄ２である。ＲｍとＲｎは入力レジスタ，Ｒｄ，Ｒｄ１，Ｒｄ２は出力レジスタである。後者の命令では本発明のＳＩＭＤ方式の動作となる。８０１〜８０６に示すビットフィールドが図２の２０１〜２０６に示すビットフィールドに対応する。
【００３５】
すなわち８０１，８０３はオペコード，８０６は予約フィールド，８０２，８０４は入力レジスタを指定するオペランド，８０５は出力レジスタを指定するオペランドである。８０５について，２０５では６ビットのビットフィールドであるのに対し，７ビットのビットフィールドである。８０６について，２０６では４ビットのビットフィールドであるのに対し，３ビットのビットフィールドである。８０２，８０４の値と指定されるレジスタの対応は図２と同じである。
【００３６】
８０５の値と指定されるレジスタの対応を図８に示す。９０１の列はオペランドに記述されたビットパターンを示している。９０２の列はＳＩＭＤ演算器７３１の上位３２ビット部分の結果を格納するレジスタを示している。９０３の列は下位３２ビット部分の格納先である。
【００３７】
９１１の行の範囲の場合，演算結果の上位３２ビット部分の格納先がレジスタの上位３２ビット部分であり，下位３２ビット部分は同一レジスタの下位３２ビット部分である。ここで、図６のＲｄ１，Ｒｄ２は同一レジスタＲｄを論理的に分割したレジスタと見なす。
【００３８】
したがって，図６のセレクタ７４１は演算結果の上位３２ビット部分を出力し，セレクタ７４２は演算結果の下位３２ビット部分を出力する。また，レジスタファイル７０１，７０２に対する制御信号７１１，７１２は書き込みレジスタとして同一のレジスタを指示する。
【００３９】
９１２の行の範囲の場合，演算結果の上位３２ビット部分はレジスタＲｄ１に出力される。このレジスタＲｄ１が有するデータの格納先はセレクタ７４２を介したレジスタファイル７０２が有する１つのレジスタの下位３２ビット部分である。演算結果の下位３２ビット部分はレジスタＲｄ２に出力される。このレジスタＲｄ２が有するデータの格納先はセレクタ７４１を介した他のレジスタファイル７０１が有する１つのレジスタの上位３２ビット部分である。
【００４０】
したがって，図６のセレクタ７４１は演算結果の下位３２ビット部分を出力し，セレクタ７４２は演算結果の上位３２ビット部分を出力する。また，レジスタファイル７０１，７０２に対する制御信号７１１，７１２は書き込みレジスタであるＲｄ１，Ｒｄ２にしたがって異なるレジスタを指示する。
【００４１】
以上，実施例を説明したが，本発明はその技術的思想のもとに種々の変形が可能である。例を示すと，図７に示した出力レジスタ指定オペランド８０５の代わりに，入力レジスタ指定オペランド８０２，８０４について８０５と同様の拡張を行い，ＳＩＭＤ演算器の入力を異なるレジスタのそれぞれ一部分とする，などの方法も考えられる。
【００４２】
前述した，配列ａ［］，ｂ［］，ｃ［］の各要素を加算し，配列ｓ［］に格納する処理を，本発明のＳＩＭＤ方式を用いて処理する場合，処理ルーチンの命令列は，例えば，ＤＡＤＤ  Ｒ０，Ｒ１，Ｒ０＿Ｌ＆Ｒ２＿Ｈの１命令をループさせればよい。このときの処理の様子を図９に示す。なお，前述の処理例と同様，ロードストアは考えなくともよいと仮定し，省略している。
【００４３】
１００１，１００２は１クロックサイクルの期間を示している。１０１１〜１０１３はレジスタであり，サイクル１００１で行われる演算の入力となる。１０２１〜１０２３はレジスタであり，サイクル１００１で行われた演算の出力であり，サイクル１００２で行われる演算の入力となる。１０３１〜１０３３はレジスタであり，サイクル１００２で行われた演算の出力である。また，前述の図４の場合と同様，レジスタ１０１１，１０２１，１０３１は同一のレジスタの内容が変化しているものである。レジスタ１０１２，１０２２，１０３２の組み合わせ，レジスタ１０１３，１０２３，１０３３の組み合わせについても同様である。
【００４４】
１０１４，１０１５はＳＩＭＤ加算器であり，サイクル１００１中に演算を行う。１０２４，１０２５は加算器であり，サイクル１００２中に演算を行う。
また，前述の図４の場合と同様，加算器１０１４，１０２４は同一の加算器である。加算器１０１５，１０２５の組み合わせについても同様である。
【００４５】
あるｉ番目の要素の処理に着目すると，レジスタ１０１１の上位部分にａ［ｉ］が，レジスタ１０１２の上位部分にｂ［ｉ］がそれぞれロードされており，サイクル１００１に加算器１０１４で加算され，レジスタ１０２１の下位部分にｄ［ｉ］として格納される。また，レジスタ１０２２の下位部分にはｃ［ｉ］の値がロードされており，サイクル１００２にレジスタ１０２１の下位部分に格納されるｄ［ｉ］と加算器１０２５によって加算され，レジスタ１０３３の上位部分にＳ［ｉ］として格納される。
【００４６】
サイクル１００２には，ｉ番目の要素の処理の他に，加算器１０２４でｉ＋１番目の要素の処理を，サイクル１００１には，ｉ番目の要素の処理の他に，加算器１０１５でｉ−１番目の要素の処理を行っており，本発明のＳＩＭＤ方式では，図４の場合と同様にソフトウェアパイプライニングを行うことができ，１要素当たり１サイクルにて処理を行うことができる。
【００４７】
図１０（ｂ）に図６に示す本発明のプロセッサ構成例におけるレジスタファイル７０１，７０２の詳細図を示している。さらに図１０（ａ），（ｂ）を用いて、従来の図５に示す動作例と照らし合わせた本発明の図９に示す動作例の特徴とその効果について以下に述べる。
【００４８】
従来技術では、図５に示す如くＲ０レジスタの上位ビットであるａ［ｉ］とＲ１レジスタの上位ビットであるｂ［ｉ］を加算した結果は必ずｄ［ｉ］としてＲ０レジスタの上位ビットに格納され、Ｒ０レジスタの下位ビットであるａ［ｉ＋１］とＲ１レジスタの下位ビットであるｂ［ｉ＋１］を加算した結果は必ずｄ［ｉ＋１］としてＲ０レジスタの下位ビットに格納される必要が有った。それ故、図１０（ａ）のようにＲ０レジスタに対する書き込み指示である１つの制御信号１１１によりＲ０レジスタの上位と下位ビットに加算結果が書き込まれた。
【００４９】
本発明の実施例では、図１０（ｂ）に示す如くＲ２レジスタの上位ビットに対する書き込み指示を行う第１制御信号７１１とＲ０レジスタの下位ビットに対する書き込み指示を行う第２制御信号７１２に従い、図９に示す如くｄ［ｉ］としてＲ０レジスタの下位ビットに格納し、Ｓ［ｉ−１］としてＲ２レジスタの上位ビットに格納出来る。つまり、書き込み先のレジスタ及び該レジスタの上位／下位ビットを第１制御信号７１１と第２制御信号７１２の入力に基づき、任意に指定出来るという特徴がある。
【００５０】
以上に本発明の実施例に基づくＳＩＭＤ方式の命令を有するプロセッサの特徴について述べたが、さらに上述した実施例に示すプロセッサは、以下に示す項目（ａ）〜（ｅ）の特徴点を有するプロセッサとして提供することも可能である。
【００５１】
（ａ）第１レジスタから第６レジスタを有するプロセッサから構成され，前記第１レジスタが有する一部分のデータと前記第２レジスタの対応する一部分のデータを演算するとともに，前記第３レジスタが有する他の一部分のデータと前記第４レジスタの対応する他の一部分のデータを演算する命令を有し，前記プロセッサによる前記命令の実行に従い、前記一部分のデータと前記対応する一部分のデータとの前記演算を行い、前記プロセッサは第１演算結果を前記第５レジスタの他の一部分に格納し，前記他の一部分のデータと前記対応する他の一部分のデータとの前記演算を行い、第２演算結果を前記第６レジスタの一部分に格納することを特徴とするプロセッサ。
【００５２】
（ｂ）前記第１レジスタと前記第３レジスタが同一であり，前記第２レジスタと前記第４レジスタが同一であり、さらに前記第１レジスタと前記第５レジスタが同一であることを特徴とする、上記（ａ）に記載のプロセッサ。
【００５３】
（ｃ）前記プロセッサは第１制御信号及び第２制御信号を有し、前記第１制御信号の入力に基づき前記第１演算結果を前記第５レジスタの他の一部分に格納し、前記第２制御信号の入力に基づき前記第２演算結果を前記第６レジスタの一部分に格納することを特徴とする、上記（ｂ）に記載のプロセッサ。
【００５４】
（ｄ）前記プロセッサは第１セレクタと第２セレクタを備え、前記第１セレクタ及び第２セレクタは前記第１演算結果或いは前記第２演算結果を前記第５レジスタの他の一部分或いは前記第６レジスタの一部分に格納するデータパスを確立する為に設けられることを特徴とする、上記（ａ）に記載のプロセッサ。
【００５５】
（ｅ）前記一部分と前記他の一部分のデータが格納されるビットフィールドに対応して分割されたレジスタファイルを具備することを特徴とする、上記（ａ）に記載のプロセッサ。
【００５６】
さらに、本発明は前述した実施例によるプロセッサ並びに上述した項目（ａ）から（ｅ）の特徴を有するプロセッサを提供するばかりでなく、以下に示す項目（ｉ）〜（ｉｉｉ）の特徴を備えたプロセッサを提供することも可能である。
【００５７】
（ｉ）複数のレジスタファイル及び複数の演算回路を備え、複数の制御信号を有するプロセッサから構成され、該プロセッサはさらに第１及び第２入力レジスタと複数の出力レジスタを備え、前記複数のレジスタファイルの１つのレジスタから入力される前記第１入力レジスタの一部分のデータ及び他の１つのレジスタから入力される前記第２入力レジスタの対応する一部分のデータを前記演算回路が有する演算命令に基づき、演算し、該演算の結果を前記制御信号の１つの入力に従い前記出力レジスタの対応する一部分以外の部分に格納することを特徴とするプロセッサ。
【００５８】
（ｉｉ）前記演算命令は加算命令であり、前記第１入力レジスタの他の一部分のデータ及び前記第２入力レジスタの対応する他の一部分のデータを前記演算回路が有する演算命令に基づき、演算し、該演算の結果を前記制御信号の他の１つの入力に従い前記出力レジスタの前記対応する一部分に格納することを特徴とする、上記（ｉ）に記載のプロセッサ。
【００５９】
（ｉｉｉ）前記プロセッサはさらに第１セレクタと第２セレクタを備え、前記演算の結果は第１演算結果と第２演算結果を含み、前記第１セレクタ及び第２セレクタは前記第１演算結果或いは前記第２演算結果を前記出力レジスタの前記対応する一部分或いは前記対応する一部分以外の部分に格納するデータパスを確立する為に設けられることを特徴とする、上記（ｉｉ）に記載のプロセッサ。
【００６０】
さらに、本発明は上述したプロセッサが有する演算命令に基づく演算処理の方法として、以下に示す項目（１）〜（２）の特徴を備えたプロセッサにおける演算命令処理方法を提供しうる。
【００６１】
（１）複数のレジスタを備えたプロセッサにおける演算命令処理方法において、前記複数のレジスタの１つのレジスタから入力される第１入力レジスタの一部分のデータ及び他の１つのレジスタから入力される第２入力レジスタの対応する一部分のデータを演算するステップと、前記演算の結果を出力レジスタの対応する一部分以外の部分に格納するステップとを含むことを特徴とする演算命令処理方法。
【００６２】
（２）さらに、前記第１入力レジスタの他の一部分のデータ及び前記第２入力レジスタの対応する他の一部分のデータを演算し、該演算結果を前記出力レジスタの前記対応する一部分に格納するステップを含むことを特徴とする、上記（１）に記載の演算命令処理方法。
【００６３】
しかも、本発明は上述したプロセッサが有する演算命令に従い、演算を制御する方法として、以下に示す項目（Ｉ）から（ＩＩ）の特徴を有する演算制御方法を提供することも可能である。
【００６４】
（Ｉ）第１レジスタから第６レジスタを備え、第１制御信号、第２制御信号及び演算命令を有するプロセッサにおける演算制御方法において、前記第１レジスタが有する一部分のデータと前記第２レジスタが有する対応する一部分のデータを前記演算命令の実行に従い、演算するステップと、前記演算の結果を前記第１制御信号或いは第２制御信号の内何れかの入力により、前記第５レジスタが有する対応する一部分以外のデータ部に格納するステップとを含むことを特徴とする演算制御方法。
【００６５】
（ＩＩ）前記演算命令は加算命令であり、さらに前記第３レジスタが有する他の一部分のデータと前記第４レジスタが有する対応する他の一部分のデータを前記演算命令の実行に従い、演算し、前記演算の結果を前記第１制御信号或いは第２制御信号の内何れかの入力により、前記第６レジスタが有する前記一部分のデータ部に格納するステップを含むことを特徴とする、上記（Ｉ）に記載の演算制御方法。
【００６６】
【発明の効果】
本発明によるＳＩＭＤ方式の命令を有するプロセッサを提供することにより、以下に示す効果が挙げられる。
【００６７】
ＳＩＭＤ命令の出力レジスタ指定に新たな指定を追加，拡張し，その拡張された機能を実現できるよう，ＳＩＭＤ演算器のデータパスを変更することにより、複数レジスタの部分部分に書き込みができるようになる。
【００６８】
又、本発明により効率的なソフトウエアパイプライニングが可能となり、プロセッサ演算性能が向上する。
【図面の簡単な説明】
【図１】従来のＳＩＭＤ方式での演算器データパスを示す図である。
【図２】従来のＳＩＭＤ方式でのＳＩＭＤ加算命令形式を示す図である。
【図３】オペランド２０２，２０４，２０５に対応するレジスタ表を示す図である。
【図４】従来のＳＩＭＤ方式でソフトウェアパイプライニングを用いた場合の処理の様子を示す図である。
【図５】従来のＳＩＭＤ方式でソフトウェアパイプライニングを用いない場合の処理の様子を示す図である。
【図６】本発明のＳＩＭＤ方式での演算器データパスを示す図である。
【図７】本発明のＳＩＭＤ方式でのＳＩＭＤ加算命令形式を示す図である。
【図８】オペランド８０５に対応するレジスタ表を示す図である。
【図９】本発明のＳＩＭＤ方式でソフトウェアパイプライニングを用いた場合の処理の様子を示す図である。
【図１０】図１０（ａ）は、従来のＳＩＭＤ方式によるレジスタファイルに対する演算結果書き込み動作を示す図であり、図１０（ｂ）は、本発明のＳＩＭＤ方式におけるレジスタファイルに対する演算結果書き込み動作を示す図である。
【符号の説明】
７０１，７０２：レジスタファイル，７１１，７１２：レジスタファイル読み出し，および書き込み制御信号，７２１，７２２，７６１：フリップフロップ，７３１：ＳＩＭＤ演算器，７４１，７４２：セレクタ，７５１：セレクタ制御信号、８０１，８０３：ＳＩＭＤ命令のオペコード，８０６：予約フィールド，８０２，８０４：入力レジスタ指定オペランド，８０５：出力レジスタ指定オペランド、９０１：オペランド８０５のビットパターン，９０２：９０１に対応するＳＩＭＤ演算器の演算結果の上位部分の格納先レジスタ，９０３：９０１に対応するＳＩＭＤ演算器の演算結果の下位部分の格納先レジスタ、１００１，１００２：１クロックサイクル期間，１０１１〜１０１３：レジスタ，１０１４，１０１５：ＳＩＭＤ加算器，１０２１〜１０２３：サイクル１００１でレジスタ１０１１〜１０１３が変更された結果の値，１０２４，１０２５：１０１４，１０１５と同一のＳＩＭＤ加算器，１０３１〜１０３３：サイクル１００２でレジスタ１０１１〜１０１３が変更された結果の値。
【図１】
0003753991.tif 000003
【図２】
0003753991.tif 000004
【図３】
0003753991.tif 000005
【図４】
0003753991.tif 000006
【図５】
0003753991.tif 000007
【図６】
0003753991.tif 000008
【図７】
0003753991.tif 000009
【図８】
0003753991.tif 000010
【図９】
0003753991.tif 000011
【図１０】
0003753991.tif 000012