(57)【特許請求の範囲】
【請求項１】
それぞれＭビット（Ｍ≧１）から成る複数のフィールドで構成される演算対象ワードに対して算術論理演算を行う算術論理演算手段と、
上記演算対象ワードに対して所定のビット数だけシフトさせるシフト処理手段と、
上記演算対象ワードおよび上記演算が行われたワードを格納するレジスタとを備え、
上記同一の演算対象ワード内の上記複数フィールド間で並列演算を行うことを特徴とする演算装置。
【請求項２】
上記算術論理演算手段は演算対象データに対して上記フィールド単位で算術論理演算を行う算術論理演算ユニットを複数有して成り、上記シフト処理手段は演算対象データに対して上記フィールド単位で所定のビット数だけシフトさせるシフト処理演算ユニットを有して成り、上記レジスタは演算対象および演算が行われたデータを上記フィールド単位で格納するレジスタユニットを複数有して成ることを特徴とする請求項１記載の演算装置。
【請求項３】
上記複数フィールドからなる演算対象ワード内のフィールドを交換するフィールド交換手段を更に備えることを特徴とする請求項２記載の演算装置。
【請求項４】
演算装置によって、複数のＭビットからなるフィールドで構成される演算対象ワードに対してフィールド単位で算術論理演算を行う演算方法であって、
前記演算装置に設けられたフィールド交換手段によって、同一演算対象ワード内の２以上のフィールドの交換を実行し、
更に、前記演算装置は、上記フィールドを交換した演算対象ワードのフィールド間での算術論理演算を実行し、上記演算結果を上記演算対象フィールドの一方に格納することを特徴とする演算方法。
【請求項５】
前記算術論理演算を行うステップでは、上記フィールドを交換した演算対象ワードのフィールド間で加算又は減算を行うことを特徴とする請求項４記載の演算方法。
【発明の詳細な説明】
技術分野
本発明は、CPUを用いた算術論理演算を行うための演算装置および演算方法に関するものである。
背景技術
コンピュータなどに用いられる演算装置であるCPU（Central Processing Unit）のなかには、マルチメディア命令（以下では、MM命令または単に命令という。）と呼ばれる命令群を持つものがある。このMM命令は、CPUが備えている演算器を分割して複数の演算を同時に実行させるものである。
図１は、従来のCPUの一構成例を示している。この従来のCPUは、データ処理を実行するための算術論理演算手段である算術論理演算ユニット（ALU）130、データを左右にシフトさせるためのシフト処理手段であるシフト処理ユニット（SHT）140、およびレジスタユニット（REG）150を備えており、例えば64ビットのバス160,170,180と接続されてデータを相互に転送する。
図２は、上述した従来のCPUにおける、64ビット×64ビットの乗算器による乗算を示している。すなわち、レジスタＡの64ビットのワードｓと、レジスタＢの64ビットのワードｔとの積である128ビットのワードｓ＊ｔが生成されてレジスタＣに格納される。
図３は、上記の64ビットワードｓおよびｔを各々４個のフィールドに分割してそれぞれ４つのビットフィールドを形成し、対応するフィールドのビット、すなわち、16ビット×16ビットの乗算を行う様子を示している。すなわち、レジスタＡの各々16ビットs0,s1,s2,s3と、レジスタＢの各々16ビットt0,t1,t2,t3との積である各々32ビットのs0＊t0,s1＊t1,s2＊t2,s3＊t3が生成されてレジスタＣに格納される。
このような４並列乗算は、CPUが備えている乗算器を４分割して４並列の乗算器を構成することにより実現できる。また同様に、CPUが備えている加算器を４分割して４並列加算器を構成することもできる。
図４は、上述した従来のCPUにおける、128ビット＋128ビットの加算器による加算を示している。すなわち、レジスタＡの128ビットｓと、レジスタＢの128ビットｔとの和である128ビット（ｓ＋ｔ）が生成されてレジスタＣに格納される。
図５は、上記の各ワードを４分割して、各々32ビット＋32ビットの加算を行う様子を示している。すなわち、レジスタＡの各々32ビットs0,s1,s2,s3と、レジスタＢの各々32ビットt0,t1,t2,t3との和である各々32ビットのs0＋t0,s1＋t1,s2＋t2,s3＋t3が生成されてレジスタＣに格納される。
上記のように演算対象のデータ幅が16ビットや32ビット程度であるときには、一つの演算器を分割して構成される並列演算器を用いれば、演算処理を高速に行うことができる。図３および図５に示した並列演算を行わせる命令は、このために用いられるマルチメディア（MM）命令の一部である。
以下に、従来のMM命令を用いる並列演算の具体例を示す。
まず、第１の具体例として、以下の（１）式のようなｎ＋１元連立一次方程式をクラーマー（cramer）の公式を用いて解く場合について説明する。
0003583443.tif 000002
0003583443.tif 000003
このクラーマーの公式を用いると、（２）式のように（ｎ＋１）×（ｎ＋１）行列式のｊ列目を順次置き換えることにより（１）式の連立一次方程式の解を得ることができる。つまり、行列式を計算できれば、連立一次方程式を解くことができる。
一般に、（ｎ＋１）×（ｎ＋１）行列式は、次数がｎ＋１より低い小行列式を用いて（３）式のように展開される。ここで、Δijは、上記の（ｎ＋１）×（ｎ＋１）行列式のｉ行目およびｊ列目を取り去ったものに、（−１）i+jで与えられる符号を付したものである。
0003583443.tif 000004
すなわち、次数がより低い小行列式を順次計算すれば、もとの行列式を計算できる。従って、最低次の行列式である２×２行列式を計算できれば任意の次数の行列式を計算できることになる。２×２行列式を計算するためには（４）式で示される展開を用いればよい。
0003583443.tif 000005
また、３×３行列の行列式を計算する場合には、（３）式で示される展開が（５）式のようになる。
0003583443.tif 000006
図６は、３×３行列の各行ベクトル（a00,a01,a02），（a10,a11,a12），（a20,a21,a22）が、各々64ビットとしてレジスタA0,A1,A2に格納されている様子を示している。以下では、このように格納された行ベクトルに対して、従来のMM命令を用いて２×２の小行列式を計算する手順について説明する。
図７は、図６の３×３行列の行ベクトルに対して、従来のMM命令を用いて２×２の小行列式を計算する手順を示している。
まず、命令「SRL  B,A1,16」により、レジスタA1に格納された行ベクトルが、右に16ビットだけシフトされてレジスタＢに格納される。
次に、命令「ANDI  B,0x000000000000ffff」により、レジスタＢに格納された上記の行ベクトルと、000000000000ffffとの積（AND）が生成されてレジスタＢに再び格納される。これにより、レジスタＢのビット０からビット15までの下位の16ビットにa11のみが格納される。
次に、命令「SLL  C,A1,16」により、レジスタA1に格納された行ベクトルが、左に16ビットだけシフトされてレジスタＣに格納される。
次に、命令「ANDI  C,0x00000000ffff0000」により、レジスタＣに格納された上記の行ベクトルと、00000000ffff0000との積（AND）が生成されてレジスタＣに再び格納される。これにより、レジスタＣのビット16からビット31までの16ビットにa12のみが格納される。
次に、命令「OR  D,B,C」により、レジスタＢに格納されたデータと、レジスタＣに格納されたデータの和（OR）が生成されてレジスタＤに格納される。これにより、レジスタＤの下位の32ビットにa12,a11が格納される。
次に、命令「PMUL  E,A0,D」により、レジスタA0に格納された行ベクトルと、レジスタＤに格納されたデータとが並列に乗算され、その結果がレジスタＥに格納される。すなわち、レジスタＥの上位の32ビットにa01＊a12が格納され、下位の32ビットにa02＊a11が格納される。
次に、命令「SRL  F,E,32」により、レジスタＥに格納されたデータが、右に32ビットだけシフトされてレジスタＦに格納される。すなわち、レジスタＦの下位の32ビットにa01＊a12のみが格納される。
次に、命令「ANDI  E,0x00000000ffffffff」により、レジスタＥを格納された上記のデータと、00000000ffffffffとの積（AND）が生成されてレジスタＥに再び格納される。これにより、レジスタＥの下位の16ビットにa02＊a11のみが格納される。
次に、命令「SUB  G,F,E」により、レジスタＦに格納されたデータから、レジスタＥに格納されたデータが差し引かれて差が生成され、レジスタＧに格納される。これにより、レジスタＧの下位の32ビットに２×２行列の行列式a01＊a12−a02＊a11が格納される。
このように、従来のMM命令を用いて２×２行列の行列式を計算する場合には、上記の９ステップが必要であった。
次に、従来のMM命令を用いて並列演算を行う第２の具体例として、三角形の法線を求める場合について説明する。
３次元空間の３つの点は、一つの三角形を決める。また、三角形の面積と法線ベクトルは、外積ベクトルの絶対値と正規化ベクトルとで与えられる。このような２つの３次元ベクトルの外積は、（６）式で与えられる３次元ベクトルである。
0003583443.tif 000007
図８は、２つの３次元ベクトル（a00,a01,a02），（a10,a11,a12）が、各々64ビットの２つのワードとしてレジスタA0,A1に格納されている様子を示している。以下では、このように格納された２つの３次元ベクトルに対して、従来のMM命令を用いて外積を計算する手順について説明する。
図９は、図８の２つの３次元ベクトルに対して、従来のMM命令を用いて外積を計算する手順を示している。
まず、命令「SRL  B,A0,16」により、レジスタA0に格納された行ベクトルが、右に16ビットだけシフトされてレジスタＢに格納される。
次に、命令「SLL  C,A0,32」により、レジスタA0に格納された行ベクトルが、左に32ビットだけシフトされてレジスタＣに格納される。
次に命令「OR  D,B,C」により、レジスタＢに格納されたデータと、レジスタＣに格納されたデータとの和（OR）が生成されてレジスタＤに格納される。これにより、レジスタＤに各々16ビットのa01,a02,a00,a01が格納される。
次に、命令「SLL  E,A1,16」により、レジスタA1に格納された行ベクトルが、左に16ビットだけシフトされてレジスタＥに格納される。
次に、命令「SRL  F,A1,32」により、レジスタA1に格納された行ベクトルが、右に32ビットだけシフトされてレジスタＦに格納される。
次に、命令「OR  G,E,F」により、レジスタＥに格納されたデータと、レジスタＦに格納されたデータとの和（OR）が生成されてレジスタＧに格納される。これにより、レジスタＧに各々16ビットのa10,a11,a12,a10が格納される。
次に、命令「PMUL  H,D,G」により、レジスタＤに格納されたデータと、レジスタＧに格納されたデータとが並列に乗算され、その結果がレジスタＨに格納される。すなわち、レジスタＨに各々32ビットのa01＊a10,a02＊a11,a00＊a12,a01＊a10が格納される。
次に、命令「SLL  B,A0,16」により、レジスタA0に格納された行ベクトルが、左に16ビットだけシフトされてレジスタＢに格納される。
次に、命令「SRL  C,A0,32」により、レジスタA0に格納された行ベクトルが、右に32ビットだけシフトされてレジスタＣに格納される。
次に、命令「OR  D,B,C」により、レジスタＢに格納されたデータと、レジスタＣに格納されたデータとの和（OR）が生成されてレジスタＤに格納される。これにより、レジスタＤに各々16ビットのa00,a01,a02,a00が格納される。
次に、命令「SRL  E,A1,16」により、レジスタA1に格納された行ベクトルが、右に16ビットだけシフトされてレジスタＥに格納される。
次に、命令「SLL  F,A1,32」により、レジスタA1に格納された行ベクトルが、左に32ビットだけシフトされてレジスタＥに格納される。
次に、命令「OR  G,E,F」により、レジスタＥに格納されたデータと、レジスタＦに格納されたデータとの和（OR）が生成されてレジスタＧに格納される。これにより、レジスタＧに各々16ビットのa11,a12,a10,a11が格納される。
次に、命令「PMUL  H,D,G」により、レジスタＤに格納されたデータと、レジスタＧに格納されたデータとが並列に乗算され、その結果がレジスタＨに格納される。すなわち、レジスタＨに各々32ビットのa00＊a11,a01＊a12,a02＊a10,a00＊a11が格納される。
次に、命令「PSUB  K,J,H」により、レジスタＪに格納されたデータから、レジスタＨに格納されたデータが並列に減算され、その結果がレジスタＫに格納される。すなわち、レジスタＫに各々32ビットのa00＊a11−a01＊a10,a01＊a12−a02＊a11,a02＊a10−a00＊a12,a00＊a11−a01＊a10が格納される。
このように、従来のMM命令を用いて２つの３次元ベクトルの外積を計算する場合には、上記の15ステップが必要であった。
次に、従来のMM命令を用いて並列演算を行う第３の具体例として、２つのベクトルの内積を計算する場合について説明する。
２つのベクトルの内積は、それらの相関の度合いを表す。このような２つのベクトルの内積として、例えば２つの４次元ベクトルの内積は、（７）式で与えられる。
（a0a1a2a3）＊（b0b1b2b3）
＝a0＊b0＋a1＊b1＋a2＊b2＋a3＊b3          （７）
図10は、64ビットワードの２つの４次元ベクトル（a0,a1,a2,a3），（b0,b1,b2,b3）が、それぞれ２つのワードとしてレジスタA,Bに格納されている様子を示している。以下では、このように格納された２つの４次元ベクトルに対して、従来のMM命令を用いて内積を計算する手順について説明する。
図11は、図10の２つの４次元ベクトルに対して、従来のMM命令を用いて内積を計算する手順を示している。なお、この図11の×印をつけた部分は、この演算に無関係な値が格納されていることを示している。
まず、命令「PMUL  C,A,B」により、レジスタＡに格納されたデータと、レジスタＢに格納されたデータとが並列に乗算され、その結果がレジスタＨに格納される。すなわち、レジスタＣに各々16ビットのa0＊b0,a1＊b1,a2＊b2,a3＊b3が格納される。
次に、命令「SLL  D,C,16」により、レジスタＣに格納されたデータが、左に16ビットだけシフトされてレジスタＤに格納される。
次に、命令「PADD  E,C,D」により、レジスタＣに格納されたデータと、レジスタＤに格納されたデータとが並列に加算され、その結果がレジスタＥに格納される。これにより、レジスタＥには、ビット16からビット31に16ビットのa2＊b2＋a3＊b3が格納され、ビット48からビット63に16ビットのa0＊b0＋a1＊b1が格納される。
次に、命令「SLL  F,E,32」により、レジスタＥに格納されたデータが、左に32ビットだけシフトされてレジスタＦに格納される。これにより、レジスタＦには、最上位の16ビットにa2＊b2＋a3＊b3のみが格納され、下位の２つの16ビットのデータ値はいずれも０になる。
次に、命令「PADD  G,E,F」により、レジスタＥに格納されたデータと、レジスタＦに格納されたデータとが並列に加算され、その結果がレジスタＧに格納される。これにより、レジスタＧには、最上位の16ビットにa0＊b0＋a1＊b1＋a2＊b2＋a3＊b3が格納される。
このように、従来のMM命令を用いて２つの４次元ベクトルの内積を計算する場合には、上記の５ステップが必要であった。
ところで、従来のMM命令を用いる演算装置および演算方法では、レジスタに複数のｎビットのワードのデータを格納しているものの、それらのうちの同一のビットフィールド間でのみ演算が行われる。すなわち、複数フィールドからなる演算対象ワード内のフィールド間で直接に演算操作を施すことができないため、上述したような並列演算を行う際に所望のフィールド間で演算を行うための余分なフィールド操作を行う必要が生じ、演算速度を十分に高めることができなかった。
発明の開示
本発明は、上述した問題点に鑑みてなされたものであり、従来の演算装置よりも少ないステップ数で高速に並列演算が可能な演算装置および演算方法を提供することを目的としている。
本発明に係る演算装置は、複数のＭビット（Ｍ≧１）からなるフィールドで構成される演算対象ワードに対して算術論理演算を行う算術論理演算手段と、上記演算対象ワードに対して所定のビット数だけシフトさせるシフト処理手段と、上記演算対象ワードおよび上記演算が行われたワードを格納するレジスタとを備え、上記同一の演算対象ワード内の上記複数フィールド間で並列演算を行う機能を有することを特徴とする。
また、本発明に係る演算方法は、複数のＭビットからなるフィールドで構成される演算対象ワードに対してフィールド単位で算術論理演算を行う演算方法であって、同一演算対象ワード内の２以上のフィールドを交換するステップを有することを特徴とする。
このような演算装置および演算方法によれば、余分なフィールド操作を行う必要がないため、従来よりも少ないステップ数で高速に並列演算を行うことができる。
【図面の簡単な説明】
図１は、従来のCPUの構成例を示す図である。
図２は、64ビット×64ビットの乗算器による乗算について説明するための図である。
図３は、４分割された64ビット×64ビットの乗算器による並列乗算について説明するための図である。
図４は、64ビット×64ビットの加算器による加算について説明するための図である。
図５は、４分割された64ビット×64ビットの加算器による並列加算について説明するための図である。
図６は、３×３行列の行ベクトルが、各々64ビットワードとしてレジスタに格納されている様子を示す図である。
図７は、３×３行列の行ベクトルに対して、従来のMM命令を用いて２×２の小行列式を計算する手順を示す図である。
図８は、２つの３次元ベクトルが、各々64ビットのワードとしてレジスタに格納されている様子を示す図である。
図９は、２つの３次元ベクトルに対して、従来のMM命令を用いて外積を計算する手順を示す図である。
図10は、２つの４次元ベクトルが、各々２つのワードとしてレジスタに格納されている様子を示す図である。
図11は、２つの４次元ベクトルに対して、従来のMM命令を用いて内積を計算する手順を示す図である。
図12は、本発明の演算装置の一形態であるCPUの構成例を示す図である。
図13は、MM命令を有するCPUの基本的な構成例を示す図である。
図14A,B,Cは、命令「PMUL」と「PADD」について説明するための図である。
図15A〜Ｅは、本発明の演算装置のMM命令について説明するための図である。
図16は、データ交換ユニット（EXC回路）の構成例を示す図である。
図17は、EXC回路のマルチプレクサ（MUX）について説明するための図である。
図18は、MUXに送られる２つのコマンドと動作を示す図である。
図19は、EXC回路に送られるEXCコマンドと実現されるMM命令との対応を示す図である。
図20は、命令「PEXC」を実現するための回路を示す図である。
図21は、命令「PEXH」を実現するための回路を示す図である。
図22は、命令「PROT3」を実現するための回路を示す図である。
図23は、命令「PHADD」を実現するための回路を示す図である。
図24は、命令「PHSUB」を実現するための回路を示す図である。
図25は、本発明の演算装置により、各々格納された３×３行列の行ベクトルに対して２×２の小行列式を計算する手順を示す図である。
図26は、本発明の演算装置により２つの３次元ベクトルに対して外積を計算する手順を示す図である。
図27は、本発明の演算装置により２つの４次元ベクトルに対して内積を計算する手順を示す図である。
図28は、本発明に係る演算装置を適用した画像作成装置の構成例を示すブロック図である。
発明を実施するための最良の形態
以下、本発明の演算装置および演算方法の好ましい実施の形態について図を参照しながら説明する。以下では、まず本発明の演算装置の実施の形態の構成について説明し、その構成を参照しながら本発明の演算方法の実施の形態について説明する。
図12は、本発明の演算装置の実施の一形態としてのCPUの主要部の構成例を示している。このCPUは、算術論理演算手段である算術論理演算ユニット（ALU）330、シフト処理ユニット（SHT）340、およびレジスタユニット（REG）350を備えて構成されており、これらは64ビットのバス（BUS）360,370,380および16ビットのパラレルバスを介して互いにデータを転送することができる。上記のALU330,SHT340,REG350は、それぞれ４つに分割されて構成されている。
上記の各部は、図13に示すCPUの各部と同様の構成を有しているが、バス360,370とALU330の間に、ワード内のビットフィールド交換手段であるデータ交換ユニツト（EXC）310,320を備えている点が相違している。すなわち、このワード内のビットフィールド交換手段であるEXC310,320により、ALU330で同一の演算対象ワード内の複数フィールド間で演算を行う演算機能を実現している。なお、１フィールドはＭビット（Ｍ≧１）から成っており、以下の実施の形態では、１フィールドを例えば16ビットとしている。
次に、上述した本発明の演算装置が有している新たなMM命令についての説明に先立って、本発明の演算装置の基本となる演算装置の構成例を参照しながら、前述したMM命令である「PMUL」と「PADD」について再度説明する。
図13は、MM命令を有するCPUの基本的な構成例を示している。このMM命令を有するCPUの構成例は、図１に示したMM命令を有していない従来のCPUの構成例に基づいているが、ALU230,SHT240,REG250が、それぞれ分割されて４つずつ構成されている点が異なっている。
そして、バス260とALU230との間のデータ転送路として、64ビットのパラレル転送路に代えて、４つの16ビットパラレル転送路265を備えている。
図14A〜Ｃは、図13の演算装置で実行されるMM命令「PMUL」と「PADD」について示している。
図14Aは、各々16ビットのデータがREG250の64ビットレジスタA,Bの４分割された16ビットの各フィールドにそれぞれ格納されている様子を示している。
図14Bは、命令「PMUL  C,A,B」により、上記のレジスタＡの４つのフィールドに個々に格納されている４つのデータと、レジスタＢに格納されている４つのデータとがALU230で並列に乗算され、各々32ビットの積がREG250のレジスタＣに格納される様子を示している。
また、図14Cは、命令「PADD  C,A,B」により、上記のレジスタＡに格納されている４つのデータと、レジスタＢに格納されている４つのデータとが並列に加算され、各々16ビットの和がレジスタＣに格納される様子を示している。
ところが、図13の演算装置における上述のようなMM命令による演算は、ワード単位で行われるものであり、フィールド単位で演算を行うためにはステップ数が余計に必要であった。そこで、本発明の演算装置は、新しいMM命令である「ワード内のビットフィールド交換命令」および「ワード内のデータ間の演算命令」をさらに有して、より少ないステップ数で演算を行うように構成されている。
以下では、本発明の演算装置のMM命令群について、図15A〜Ｅを参照しながら説明する。
図15Aは、命令「PEXC」について示している。すなわち、命令「PEXC  B,A」は、４分割されたレジスタＡの、最上位のフィールドのデータと最下位のフィールドのデータはそのままにして、中央の２つのフィールドのデータを交換して、レジスタＢに格納するものである。
図15Bは、命令「PEXH」について示している。すなわち、命令「PEXH  B,A」は、４分割されたレジスタＡの、上位の２つのフィールドの各データを互いに交換し、下位の２つのフィールドの各データを互いに交換して、レジスタＢに格納するものである。
図15Cは、命令「PROT3」について示している。すなわち、命令「PROT3  B,A,16」は、４分割されたレジスタＡの、最上位のフィールドのデータはそのままにして、下位の３つのフィールドの各データを16ビットだけずらしてローテーションさせて、レジスタＢに格納するものである。
図15Dは、命令「PHADD」について示している。すなわち、命令「PHADD  B,A」は、４分割されたレジスタＡの、上位の２つのフィールドの各データを互いに加算し、下位の２つのフィールドの各データを互いに加算して、レジスタＢに格納するものである。
図15Eは、命令「PHSUB」について示している。すなわち、命令「PHSUB  B,A」は、４分割されたレジスタＡの、上位の２つのフィールドの各データを減算し、下位の２つのフィールドの各データを減算して、レジスタＢに格納するものである。
このように、本発明の演算装置は、従来のMM命令に加えて、分割されたビットフィールド間の交換を行う命令、および同一レジスタ内の異なるビットフィールド間の演算を行う命令をさらに有することにより演算性能を向上させたものである。
次に、従来のMM命令に加えて、上述したような新たなMM命令をさらに有する本発明の演算装置の構成について具体的に説明する。
図16は、図12のデータ交換ユニツト（EXC回路）310の構成例を示している。このEXC回路310への各入力A0〜A3は、マルチプレクサ（MUX）311〜314のそれぞれに供給される。そして、上記の各MUXは、供給される２つのコマンドにより、出力するデータを選択する。これにより、EXC310の動作が、コマンドC0〜C7により制御される。
なお、ここではEXC310についてのみ説明したが、EXC回路320についても同様である。
次に、上述したEXC回路310,320のMUX311〜314について説明する。これらのMUXは、４入力１出力の構成を有しており、各々２つのコマンドにより動作が制御される。
図17は、上記のMUX311〜314のうちのMUX311を示している。このMUX311は、４入力１出力の構成を有しており、２つのコマンドC0,C1によって動作が制御される。
図18は、上記のMUX311に送られる２つのコマンドと動作の対応を示している。すなわち、コマンドC0,C1が共に０のときには入力A0が出力B0とされる。また、C0が０であり、C1が１のときには入力A1が出力B0とされる。同様に、C0が１であり、C1が０のときには入力A2が出力B0とされ、C0,C1が共に１のときには入力A3が出力B0とされる。
なお、ここでは、MUX311について説明したが、MUX312〜314についても同様である。すなわち、MUX312はコマンドC2,C3により、MUX313はコマンドC4,C5により、MUX314はコマンドC6,C7により、それぞれ動作が同様に制御される。
図19は、図16に示したEXC回路に送られるEXCコマンドC0〜C7と、これらのコマンドにより実現されるMM命令との対応を示している。すなわち、
C0,C1,C3,C4が０であり、C2,C5,C6,C7が１であるときには、命令「PEXC」が実現される。
C0,C2,C3,C7が０であり、C1,C4,C5,C6が１であるときには、命令「PEXH」が実現される。
C0,C1,C4,C7が０であり、C2,C3,C5,C6が１であるときには、命令「PROT3」が実現される。
C0,C2,C3,C7が０であり、C1,C4,C5,C6が１であるときには、命令「PHADD」が実現される。
C0,C2,C3,C7が０であり、C1,C4,C5,C6が１であるときには、命令「PHSUB」が実現される。
なお、上記の命令「PHADD」と「PHSUB」は、EXC命令が同一であるが、ALUのコマンドが異なっている。
次に、上述した本発明の演算装置が有する新しいMM命令を実現するための回路について具体的に説明する。なお、以下の説明において、a0〜a3は、各々16ビットまたは32ビットのデータ幅を持つ入力データであり、全体として１つのワードを構成している。また、b0〜b3は、それぞれ16ビットまたは32ビットのデータ幅を持つ出力データであり、全体として１つのワードを構成している。
図20は、命令「PEXC」を実現するための回路を示している。この回路は、交換回路「exchange」を備えて構成されている。この回路に入力される４つのデータa0,a1,a2,a3に対して、最上位のa0および最下位のa3は、そのままb0およびb3として出力される。また、最上位と最下位のデータの間の２つのデータは互いに交換されて、a1がb2とされ、a2がb1とされて出力される。
図21は、命令「PEXH」を実現するための回路を示している。この回路は、２つの交換回路「exchange」を備えて構成されている。この回路に入力される４つのデータa0,a1,a2,a3のうち、上位の２つのデータa0,a1が互いに交換されて、a0がb1とされ、a1がb0とされて出力される。また、入力される上記の４つのデータのうち、下位の２つのデータa2,a3が互いに交換されて、a2がb3とされ、a3がb2とされて出力される。
図22は、命令「PROT3」を実現するための回路を示している。ここで、「SELECT」は選択回路である。この回路に入力される４つのデータa0,a1,a2,a3のうち、最上位のデータa0は、そのままb0とされて出力される。また。他の３つのデータa1,a2,a3は、３入力１出力の選択回路「select」で、例えば、a1がb3とされ、a2がb1とされ、a3がb2とされて出力される。すなわち、最上位のデータa0を除く上記の３つのデータは、ローテーションされて出力される。
図23は、命令「PHADD」を実現するための回路を示している。この回路は、２つの足し算回路「ADD」を備えて構成されている。この回路に入力される４つのデータa0,a1,a2,a3のうち、上位の２つのデータa0,a1が互いに加算されてb0とされて出力される。また、入力される上記の４つのデータのうち、下位の２つのデータa2,a3が互いに交換されてb2とされて出力される。
図24は、命令「PHSUB」を実現するための回路を示している。この回路は、２つの引き算回路「SUB」を備えて構成されている。この回路に入力される４つのデータa0,a1,a2,a3のうち、上位の２つのデータa0からa1が減算されてb0とされて出力される。また、出力される上記の４つのデータのうち、下位の２つのデータa2からa3が減算されてb2とされて出力される。
次に、前述したような、同一ワード内の異なるビットフィールドどうしを交換したり演算する機能を有する本発明の演算装置により、演算を行う場合について説明する。
図25は、本発明の演算装置を用いて、３×３行列の行ベクトルに対して２×２の小行列式を計算する手順を示している。
まず、前述した命令「PEXH  D,A1」により、４分割されたレジスタA1の、上位の２つのデータを互いに交換し、下位の２つのデータを互いに交換してレジスタＤに格納する。
次に、命令「PMULH  E,A0,D」により、レジスタA0に格納された行ベクトルと、レジスタＤに格納されたデータとの並列乗算が、16ビット単位で行われ、その結果がレジスタＥに格納される。この命令「PMULH」は、前述した命令「PMUL」と同様の操作を、ワード長の半分だけを単位として行う命令である。これにより、レジスタＥの上位の32ビットにはa01＊a12が格納され、下位の32ビットにはa02＊a11が格納される。
次に、命令「PSUBW  G,E」により、レジスタＥに格納されたデータを32ビット単位で、レジスタＨに格納された16ビット単位のデータを差し引く並列減算が行われ、その結果がレジスタＫに格納される。この命令「PSUBW」は、命令「PSUB」と同様の操作を、ワード長を単位として行う命令である。これにより、レジスタＧの上位の32ビットには０が格納され、下位のa01＊a12−a02＊a11が格納される。
このように、２×２行列式を計算するために、従来の演算装置では図７に示したように９ステップが必要であったが、本発明の演算装置によれば上記の３ステップのみで済む。
図26は、本発明の演算装置により、２つの３次元ベクトルの外積を計算する手順を示している。
まず、命令「PROT3  B,A0,16」により、レジスタA0の、最上位のデータはそのままにして、下位の３つのデータを16ビットだけずらしてローテーションさせてレジスタＢに格納する。
次に、命令「PROT3  C,A1,32」により、レジスタA1の、最上位のデータはそのままにして、下位の３つのデータを32ビットだけずらしてローテーションさせてレジスタＣに格納する。
次に、命令「PMUL  D,B,C」により、レジスタＢに格納された行ベクトルと、レジスタＣに格納されたデータとの並列乗算が行われ、その結果がレジスタＤに格納される。すなわち、レジスタＤの最上位の32ビットには０が格納され、続く各々32ビットにはa02＊a11,a00＊a12,a01＊a10が順次格納される。
次に、命令「PROT3  B,A0,32」により、レジスタA0の、最上位のデータはそのままにして、下位の３つのデータを32ビットだけずらしてローテーションさせてレジスタＢに格納する。
次に、命令「PROT3  C,A1,16」により、レジスタA1の、最上位のデータはそのままにして、下位の３つのデータを16ビットだけずらしてローテーションさせてレジスタＣに格納する。
次に、命令「PMUL  E,B,C」により、レジスタＢに格納されたデータと、レジスタＣに格納されたデータとの並列乗算が行われ、その結果がレジスタＥに格納される。すなわち、レジスタＥの最上位の32ビットには０が格納され、続く各々32ビットにはa01＊a12,a02＊a10,a00＊a11が順次格納される。
次に、命令「PSUB  F,E,D」により、レジスタＥ格納されたデータから、レジスタＤに格納されたデータを差し引く並列減算が行われ、その結果がレジスタＫに格納される。すなわち、レジスタＦの最上位の32ビットには０が格納され、続く各々32ビットにはa01＊a12−a02＊a11,a02＊a10−a00＊a12,a00＊a11−a01＊a10が格納される。
このように、２つの３次元ベクトルの外積を計算するために、従来の演算装置では図９に示したように15ステップが必要であったが、本発明の演算装置によれば上記の７ステップのみで済む。
図27は、本発明の演算装置により、２つの４次元ベクトルの内積を計算する手順を示している。
まず、命令「PMUL  C,A,B」により、レジスタＡに格納されたデータと、レジスタＢに格納されたデータとの並列乗算が行われ、その結果がレジスタＣに格納される。すなわち、レジスタＣには、各々32ビットのa0＊b0,a1＊b1,a2＊b2,a3＊b3が格納される。
次に、命令「PHADD  E,C」により、レジスタＥの、上位の２つのデータを互いに加算し、下位の２つのデータを互いに加算してレジスタＥに格納する。
次に、命令「PEXC  Ｅ」によりレジスタＥの、最上位のデータと最下位のデータはそのままにして、中央の２つのデータを交換して格納する。
次に、命令「PHADD  G,E」により、レジスタＥの、上位の２つのデータを互いに加算し、下位の２つのデータを互いに加算してレジスタＧに格納する。これにより、レジスタＧの最上位の32ビットには、a0＊b0＋a1＊b1＋a3＊b3＋a3＊b3が格納される。
なお、この図27の×印をつけた部分は、この演算に無関係な値が格納されていることを示している。
このように、２つの４次元ベクトルの内積を計算するために、従来の演算装置では図11に示したように５ステップが必要であったが、本発明の演算装置によれば上記の４ステップのみで済む。
図28は、以上説明したMM命令を備える本発明に係る演算装置を用いて構成した画像作成装置の構成例を示している。
この図28において、マイクロプロセッサ等からなる中央処理装置であるCPU1は、入力パッドやジョイスティック等の入力デバイス４の操作情報をインタフェース３およびメインバス９を介して取り出すためのものであり、本発明の演算装置が用いられている。そして、上記CPU1は、取り出された操作情報に基づいて、第１のメモリであるメインメモリ２に記憶されている３次元画像の情報を上記メインバス９を介してグラフィックプロセッサ６に送る。
グラフィックプロセッサ６は、送られた３次元画像の情報を交換して画像データを生成するためのものであり、ここで生成された画像データによる３次元画像が第２のメモリであるビデオメモリ５上に描かれる。このビデオメモリ５上に描かれた３次元画像データは、ビデオ信号のスキャン時に読み出されて図示しない表示装置上に３次元画像が表示される。
また、上述のように３次元画像を表示すると同時に、上記CPU1によって取り出された操作情報中の上記表示された３次元画像に対応する音声情報が、オーディオプロセッサ７に送られる。上記オーディオプロセッサ７は、この送られた音声情報に基づいてオーディオメモリ８内に記憶されている音声データを表示する。
このような画像作成装置は、例えば、３次元画像を比較的高精度かつ高速度に表示することが要求される家庭用ゲーム機に使用されるものである。
家庭用ゲーム機において、上述のような画像作成装置を用いて３次元画像を表示する方法は、表示対象となる物体の陰影を付加するシェーディング法や、他の２次元画像を変形して貼り付けるテクスチャマッピングが代表的である。
また、３次元を示す座標計には、３次元の物体そのものに関する形状や寸法を表現するためのオブジェクト座標系、３次元の物体を空間に配置したときの物体の位置を示すワールド（世界）座標系、およびスクリーン上に表示した３次元の物体を表現するためのスクリーン座標系が使用されることが多い。特に、スクリーン座標系上の３次元物体の３次元画像を表す単位となる多角形領域、いわゆるポリゴンは、簡略化した三角形領域として扱われることが多い。
本発明に係る演算装置は、この三角形領域（ポリゴン）に対して、頂点座標を算出したり、対象物体の属性と光源データとから法線ベクトルと光源ベクトルとの内積計算等を行うために好適なものである。
以上説明したような演算装置によれば、従来のMM命令に加えて、演算対象の同一ワード内の複数フィールド間で演算を行う機能を有するMM命令をさらに有して構成されているために、従来より少ないステップ数で高速に並列演算を行うことができる。
なお、本発明は上記実施の形態のみに限定されるものではなく、例えばレジスタのビット数やフィールドのビット数は図示のものに限定されないことは勿論である。
【図１０】
0003583443.tif 000008
【図１】
0003583443.tif 000009
【図６】
0003583443.tif 000010
【図１４Ａ】
0003583443.tif 000011
【図２】
0003583443.tif 000012
【図１４Ｂ】
0003583443.tif 000013
【図１４Ｃ】
0003583443.tif 000014
【図３】
0003583443.tif 000015
【図１５Ａ】
0003583443.tif 000016
【図１７】
0003583443.tif 000017
【図１８】
0003583443.tif 000018
【図４】
0003583443.tif 000019
【図１５Ｂ】
0003583443.tif 000020
【図５】
0003583443.tif 000021
【図１５Ｃ】
0003583443.tif 000022
【図７】
0003583443.tif 000023
【図８】
0003583443.tif 000024
【図９】
0003583443.tif 000025
【図１１】
0003583443.tif 000026
【図１５Ｄ】
0003583443.tif 000027
【図１５Ｅ】
0003583443.tif 000028
【図１２】
0003583443.tif 000029
【図１３】
0003583443.tif 000030
【図１６】
0003583443.tif 000031
【図１９】
0003583443.tif 000032
【図２０】
0003583443.tif 000033
【図２３】
0003583443.tif 000034
【図２１】
0003583443.tif 000035
【図２２】
0003583443.tif 000036
【図２４】
0003583443.tif 000037
【図２５】
0003583443.tif 000038
【図２６】
0003583443.tif 000039
【図２７】
0003583443.tif 000040
【図２８】
0003583443.tif 000041