(57)【要約】      （修正有）【課題】テイラー級数の演算の処理効率を高める演算処理装置及びその制御方法を提供する。【解決手段】演算処理装置は、三角関数sin(x)の演算を実行する場合、補助命令を実行して、入力yの二乗値を求め、論理和回路により、第２入力の展開点識別データの最下位ビットbqx[0]と二乗値の符号ビットy2t[63]との論理和を求め、二乗値の符号ビットに格納し第1変数y2tを求め、補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し積和演算器で実行し、繰り返し実行した第３の補助命令の出力に、第２の補助命令で求めた第２変数ysを乗算して、三角関数sin(x)を算出する。【選択図】図１９
2019128763.tif 000002
【特許請求の範囲】
【請求項１】
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の第１ビット（rs2[1]=bqx[1]）と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビット（rs2[0]=bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有し、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第1変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビット（bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置。
【請求項２】
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の最下位ビット（rs2[0]=bqx[0]）と第１ビット（rs2[1]=bqx[1]）との第１の排他的論理和を演算する第１の排他的論理和回路と、
前記第１の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第２の排他的論理和を演算する第２の排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビットの反転ビット（~rs2[0]=~bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有し、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第１変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビットの反転ビット（~bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納して第１変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第１の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第１の排他的論理和を求め、前記第２の排他的論理和回路により、前記第１の排他的論理和と前記第１のセレクタで選択されたデータの符号ビット([63])との第２の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置。
【請求項３】
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の第１ビット（rs2[1]=bqx[1]）と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビット（rs2[0]=bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有する演算制御装置の制御方法であって、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第1変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビット（bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置の制御方法。
【請求項４】
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の最下位ビット（rs2[0]=bqx[0]）と第１ビット（rs2[1]=bqx[1]）との第１の排他的論理和を演算する第１の排他的論理和回路と、
前記第１の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第２の排他的論理和を演算する第２の排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビットの反転ビット（~rs2[0]=~bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有する演算制御装置の制御方法であって、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第１変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビットの反転ビット（~bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納して第１変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第１の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第１の排他的論理和を求め、前記第２の排他的論理和回路により、前記第１の排他的論理和と前記第１のセレクタで選択されたデータの符号ビット([63])との第２の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置は、例えばCPU（Central Processing Unit）またはプロセッサであり、命令をデコードする命令デコーダと、デコードされた命令に対応する演算を実行する演算器（演算回路）と、メインメモリのデータの一部を記憶するキャッシュメモリなどを有する。
【０００３】
演算器は、入力オペランドのデータを入力して演算し、演算結果を格納レジスタに格納し、さらに、その演算結果を再度入力オペランドとして入力して同じ演算または別の演算を実行する。また、演算器は、パイプライン構成を有し、上記の演算を所定のクロック周期で繰り返す。このような演算器については、以下の特許文献１−３に開示されている。
【０００４】
一方、数学関数ｆ（ｘ）は、後述するテイラー級数の展開式で表すことができる。そして、三角関数のテイラー級数では、初期値に入力ｘを乗算しその乗算値に次数番号に対応した係数を加算して積和値ｒを求め、その積和値ｒに入力ｘを乗算しその乗算値に次の次数番号に対応した係数を加算して新たな積和値ｒを求めることを繰り返す。
【０００５】
三角関数sin(x), cos(x)は、角度の入力ｘの２πの周期で同じ値になる。また、正弦sin(x)と余弦cos(x)は、互いに入力ｘがπ／２ずれると同じ値をとる。このような性質に注目すると、演算器は、sin(x)については入力ｘが２πの周期を４等分した角度範囲のいずれに属するかに応じて、sin(x)を、sin(x-x0), -sin(x-x0), cos(x-x0), -cos(x-x0)のいずれかのテイラー級数で演算することができる。また、sin(x)とcos(x)のテイラー級数の展開式の間には類似性がある。ここで、展開点x0は、上記４等分した角度範囲に対応する基準の角度である。
【０００６】
これらの性質に基づいて、三角関数sin(x), cos(x)のテイラー級数の展開式による演算を高い処理効率で行う演算処理装置が提案されている。例えば、以下の特許文献２などに開示されている。
【０００７】
この演算処理装置は、特殊な補助命令により入力ｘに対する一定の補助処理を実行し、その後、テイラー級数を演算する積和演算命令を補助処理で求めた値を使用して実行する。前述したとおり、テイラー級数の展開式の演算命令は、テイラー級数の係数を係数メモリから抽出しながら積和演算を繰り返す。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−２３４０７６号公報
【特許文献２】特開２０１１−１３７２８号公報
【特許文献３】特開２００９−１６９７６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記の補助命令の演算が完了した後でなければ、テイラー級数の積和演算命令を実行することができず、処理効率の低下が避けられないことが見いだされた。
【００１０】
そこで，本実施の形態の第１の側面の目的は，テイラー級数の演算の処理効率を高めた演算処理装置および演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１１】
本実施の形態の第１の側面は，
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビットと、前記第２の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の第１ビット（rs2[1]=bqx[1]）と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビット（rs2[0]=bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有し、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第1変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビット（bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置である。
【００１２】
本実施の形態の第２の側面は，
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の最下位ビット（rs2[0]=bqx[0]）と第１ビット（rs2[1]=bqx[1]）との第１の排他的論理和を演算する第１の排他的論理和回路と、
前記第１の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第２の排他的論理和を演算する第２の排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビットの反転ビット（~rs2[0]=~bqx[0]）を前記係数セレクタに供給する第２のバイパス経路（BYP_2）とを有し、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第１変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビットの反転ビット（~bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納して第１変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第１の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第１の排他的論理和を求め、前記第２の排他的論理和回路により、前記第１の排他的論理和と前記第１のセレクタで選択されたデータの符号ビット([63])との第２の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置である。
【発明の効果】
【００１３】
第１の側面によれば，テイラー級数の演算の処理効率を高めることができる。
【図面の簡単な説明】
【００１４】
【図１】演算処理装置の概略を示す図である。
【図２】係数メモリ１６０とセレクタ１７０の構成を示す図である。
【図３】テイラー級数の演算式を示す図である。
【図４】図３の演算式に基づいて、正弦sin(y)と余弦cos(y)のテイラー級数を展開した演算式を示す図である。
【図５】三角関数sin(x)について展開点x0とsin(y)=sin(x-x0)との関係を示す図である。
【図６】展開点識別データbqx=qx%4の下位２ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。
【図７】図６の４種類のテイラー級数の展開式を変形したものを示す図表である。
【図８】第１、第２の補助命令Ftrismuld、Ftrisseldのアセンブリ言語表記と、三角関数sin(x)に適用した場合のそれぞれの具体例とを示す図表である。
【図９】第１の補助命令Ftrismuldの処理内容を示す図である。
【図１０】第２の補助命令Ftrisseldの処理内容を示す図である。
【図１１】テイラー級数の積和演算命令Ftrimadddと乗算命令Fmuldのアセンブリ言語表記と、三角関数sin(x), cos(x)に適用した場合のそれぞれの具体例とを示す図表である。
【図１２】三角関数sin(x)のテイラー級数展開の演算の前処理のアセンブラ言語記述によるオペレーションコードと演算内容を示す図表である。
【図１３】後処理でのアセンブラ言語記述のよるオペレーションコードと演算内容との関係図である。
【図１４】図１３の演算のsin(x)の具体的な演算式を示す図である。
【図１５】積和演算器１００の乗算器部分の詳細構成図である。
【図１６】入力レジスタ１０１，１０２と結果レジスタ１０９のフォーマットを示す図である。
【図１７】図１の演算処理装置のバイパス経路を示す図である。
【図１８】本実施の形態における積和演算器１００の乗算器部分を含む構成を示す図である。
【図１９】本実施の形態における演算処理装置のバイパス経路を示す図である。
【図２０】本実施の形態の演算処理装置１の構成を示す図である。
【図２１】命令発行制御部２０２を含む図２０の演算処理装置の動作を示すフローチャート図である。
【図２２】三角関数cos(x)の場合のbqx=qx%4の下位２ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。
【図２３】三角関数cos(x)の場合の前処理の補助命令Ftricmuld、Ftricseldのアセンブリ言語表記と、三角関数cos(x)に適用した場合のそれぞれの具体例とを示す図表である。
【図２４】三角関数cos(x)の場合の演算処理装置１の構成を示す図である。
【発明を実施するための形態】
【００１５】
［演算処理装置の概略］
図１は、演算処理装置の概略を示す図である。この演算処理装置は、前述の補助命令を実行するための構成を有する。まず、概略構成を説明すると、演算処理装置１は、積和演算器１００と、積和演算器の演算結果を一時的に格納するリネーミングレジスタ１３０と、リネーミングレジスタ１３０に格納した演算結果を演算結果の順番が来た時に格納する格納レジスタ１４０とを有する。これらのレジスタは、複数のレジスタを有するレジスタファイルである。以下簡略的にレジスタと称する。また、外部のメインメモリ１１１のデータの一部を記憶するキャッシュメモリを有するキャッシュ１２０から読み出されたデータが、リネーミングレジスタ１３０または格納レジスタ１４０に格納される。
【００１６】
更に、演算処理装置１は、積和演算器の第１のオペランドレジスタに第１の入力データを入力する第１のマルチプレクサ１５６と、第２のオペランドレジスタに第２の入力データを入力する第２のマルチプレクサ１５４と、第３のオペランドレジスタに第３の入力データを入力する第３のマルチプレクサ１５２を有する。これらのマルチプレクサ１５２，１５４，１５６は、セレクタであり、リネーミングレジスタ１３０、格納レジスタ１４０、及びバイパスルートBYP_1を含む複数のバイパスルート１５０のいずれかを選択する。図１では、図示されるとおり、これらのマルチプレクサの入力端子は一部省略され、出力ノードnd1, nd2, nd3が示されている。
【００１７】
また、演算処理装置１は、テイラー級数の演算を行うために、テイラー級数の係数が記憶された係数メモリ（ＲＯＭ：Read Only Memory）１６０を有し、インデックスindexで選択された２種類の係数から、セレクタ１７０により選択された係数が、セレクタ１７２、１８０により選択され、積和演算器１００の第３のオペランドレジスタに入力される。
【００１８】
積和演算器１００は、例えば倍精度の浮動小数点演算を行う。倍精度の場合データは６４ビットである。但し、倍精度以外の他の精度の浮動小数点演算を行う積和演算器１００でも、本実施の形態に適用可能である。例えば単精度の場合、データ幅は３２ビットである。
【００１９】
図１の演算処理装置１は、前述した第１、第２の補助命令Ftrismuld及びFtrisseldと、テイラー級数の展開式を演算する積和演算命令Ftrimadddとを実行する。積和演算命令もテイラー級数の展開式を演算する第３の補助命令である。これらの命令の処理内容は後程詳述するが、演算処理装置１は、２つの補助命令と積和演算命令を実行するために積和演算器１００に加えて特殊な構成を有する。
【００２０】
例えば、第１の補助命令Ftrismuldを実行する場合、セレクタ１８０、１８２、１９０がそれぞれ「１」側の入力端子を選択するよう制御される。そして、論理和回路１８８は、積和演算器１００の演算出力の符号ビットである最上位ビット［６３］を、係数メモリ１６０のセット番号となる選択ビットに置き換えるFtrismuldの符号処理回路である。セット番号となる選択ビットは、ノードnd2の最下位ビット［０］である。
【００２１】
また、第２の補助命令Ftrisseldを実行する場合、セレクタ１９２が「１」側の入力端子を選択するよう制御される。また、セレクタ１８４がセット番号となる選択ビットに基づいてノードnd1（第１の入力）または値「１．０」のいずれかを選択し、EORゲート１８６が、セレクタ１８４の出力の符号ビットである最上位ビット［６３］を、ノードnd2（第２の入力）の第１ビット［１］で反転する。
【００２２】
そして、テイラー級数の積和演算命令Ftrimadddを実行する場合、セレクタ１７２が「１」側の入力を選択するよう制御される。それにより、係数メモリ１６０から抽出された係数が積和演算器１００の第３のオペランドレジスタに入力される。さらに、マルチプレクサ１５４，１５６の出力ノードnd2,nd1のデータが、積和演算器１００の第２、第１のオペランドレジスタに入力される。
【００２３】
そして、積和演算器１００の演算結果は、第１のバイパスルートBYP_1を経由して、積和演算器１００の第１の入力オペランドに入力される。同時に、係数メモリから新たに抽出された係数と、第１の補助命令Ftrismuldで算出されたデータとが、積和演算器１００の第３、第２の入力オペランドに入力される。これにより、積和演算器１００が、前サイクルの積和演算の結果と係数と第１の補助命令で算出されたデータとを積和演算する。かかる積和演算が繰り返されて、テイラー級数の展開式の演算が実行される。
【００２４】
図２は、係数メモリ１６０とセレクタ１７０の構成を示す図である。係数メモリ１６０には、正弦sin(x)と余弦cos(x)のテイラー級数の係数が記憶される。ここで、正弦sin(x)と余弦cos(x)のテイラー級数の係数について説明する。
【００２５】
図３は、テイラー級数の演算式を示す図である。数学関数f(x)は図３のテイラー級数の展開式で表現できる。即ち、テイラー級数の演算式は、入力xについて展開点x0を決定し、級数（x-x0）nに係数（1/n!）f(n)(x0)を乗じて、nについて級数展開する。
【００２６】
図４は、図３の演算式に基づいて、正弦sin(y)と余弦cos(y)のテイラー級数を展開した演算式を示す図である。ここで、ｙは、入力x、展開点x0とした場合のy=x-x0である。図４に示されるとおり、sin(y)は奇数関数であり、cos(y)は偶数関数であり、それぞれの係数も異なる。
【００２７】
そこで、図２の係数メモリ１６０は、テイラー級数の次数番号１６２のインデックスindexにより、行方向のsin(y)（図２ではsin(x)）の奇数次の係数と、cos(y) （図２ではcos(x)）の偶数次の係数を選択し、sinとcosを選択するセット番号１６４によりセレクタ１７０がsin/cosのいずれかの係数を選択するよう構成される。したがって、図１に示すとおり、テイラー級数の展開式で演算する場合、積和演算命令Ftrimadddの引数であるインデックスindexで次数に対応する係数をそれぞれ選択し、セレクタ１７０がsinまたはcosの係数をセット番号である選択ビットに基づいて選択する。
【００２８】
［三角関数のテイラー級数の展開式と、上記の２つの補助命令Ftrismuld、Ftrisseldと、テイラー級数の積和演算命令Ftrimaddd、乗算命令Fmuld］
次に、三角関数のテイラー級数の展開式と、上記の２つの補助命令Ftrismuld、Ftrisseldと、テイラー級数の積和演算命令Ftrimadddと、乗算命令Fmuldについて説明する。図３にて数学関数f(x)のテイラー級数の展開式を、図４にて三角関数sin(y),cos(y)のテイラー級数の展開式をそれぞれすでに説明した。
【００２９】
図５は、三角関数sin(x)について展開点x0とsin(y)=sin(x-x0)との関係を示す図である。三角関数sin(x)は-∞＜x＜+∞の入力xに対する値であるが、sin(x)は入力ｘの２πの周期で同じ値をとる。そこで、入力ｘに対して0からπ/2ずつ増加する展開点x0 = 0, π/2, π, 3π/2…のいずれかを選択すれば、以下の関係が満たされる。これは、sin(x)とcos(x)とではxがπ/2ずれて等しいからである。
（１）x0=0, 2π, 4π…の場合、sin(x) = sin (x-x0) = sin(y)
（２）x0=0+π/2, 2π+π/2, 4π+π/2…の場合、sin(x) = cos (x-x0) = cos(y)
（３）x0=0+π, 2π+π, 4π+π…の場合、sin(x) = -sin (x-x0) = -sin(y)
（４）x0=0+3π/2, 2π+3π/2, 4π+3π/2…の場合、sin(x) = -cos (x-x0) = -cos(y)
そこで、入力ｘが上記４種類の展開点x0を中心とする前後±π/4の範囲、(2qx-1)π/4＜ｘ≦(2qx+1)π/4 (qxは整数)、内の場合、それぞれsin(x) を以下のようにして演算することができる。
（１）-π/4 ＜ x ≦ +π/4（qx=4N,Nは整数）では、x0=0等, sin(x) = sin (x-x0) = sin(y)
（２）+π/4 ＜ x ≦ +3π/4 (qx=4N+1)では、x0=π/2等, sin(x) = cos (x-x0) = cos(y)
（３）+3π/4 ＜ x ≦ +5π/4 (or -5π/4 ＜ y=x-x0 ＜ -3π/4) (qx=4N+2)では、
x0=π or -π等, sin(x) = -sin (x-x0) = -sin(y)
（４）-3π/4 ＜ x ≦ -π/4 (qx=4N+3)では、x0=3π/2 or -π/2等, 
sin(x) = -cos (x-x0) = -cos(y)
上記のように入力ｘを４つ展開点x0と４つの狭い範囲に分けることで、それぞれの範囲内の入力ｘに対する三角関数sin(x)の値は、テイラー級数を少ない級数までの展開で、高い精度の値を得ることができる。
【００３０】
４つの範囲と４つの展開点x0は、入力ｘから以下のようにして算出されるbqx = 0,1,2,3により区別することができる。この算出は図５の右上にも示されている。
qx = int(x/(π/2))        : int(k)はkの小数点以下を切り捨てた整数
bqx = qx mod 4 = qx % 4  ：mod, %は剰余である。
そして、x0 = qx * π/2であるので、
y = x - x0 = x - (qx * π/2)
そこで、以下、bqx、特にその下位２ビットbqx[1:0]を展開点識別データと定義する。
【００３１】
図６は、展開点識別データbqx=qx%4の下位２ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。展開点識別データbqxはbqの４に対する剰余であるので、下位２ビットは二進数では、bqx[1:0] = 00,01,10,11となる。そして、図６では、**はべき乗を、！は階乗をそれぞれ示す。
【００３２】
図７は、図６の４種類のテイラー級数の展開式を変形したものを示す図表である。図７には、展開点識別データbqx[1:0](=qx%4) = 00,01,10,11それぞれの関数sin(y), cos(y), -sin(y), -cos(y)の展開式が記載される。sin関数のテイラー級数の展開式は、y(=x-x0)の奇関数式（ｙ（2ｎ＋1））で表される。一方、cos関数のテイラー級数の展開式は、y(=x-x0)の偶関数式（ｙ2ｎ）で表される。そのため、それぞれの展開式の括弧内は、y0, y2…y14にそれぞれsin,cosの係数（a3〜a15, b2〜b14）を乗じた偶関数の多項式（ｙ０−ａ３・ｙ２＋・・・−ａ１５・ｙ１４）という共通点を有する。一方、括弧以外は以下の差異点を有する。
（１）bqx[1:0] = 00の場合のsin(y)は、括弧の多項式にyを乗じる。
（２）bqx[1:0] = 01の場合のcos(y)は、括弧の多項式に1.0を乗じる。
（３）bqx[1:0] = 10の場合の-sin(y)は、括弧の多項式に(-y)を乗じる。
（４）bqx[1:0] = 11の場合の-cos(y)は、括弧の多項式に(-1.0)を乗じる。
【００３３】
そこで、図１の演算処理装置は、三角関数sin(x)を演算する場合、第１に、入力ｘから展開点識別データbqxを算出し、第２に、bqx[1:0]の２ビットの値と、y=x-x0, y2=(x-x0)2の値と、sin, cosのテイラー級数係数（a3〜a15, b2〜b14）により、後述するテイラー級数の積和演算命令Ftrimadddを繰り返し実行してテイラー級数の級数部分（図７の括弧内の部分）の計算を行う。第３に、乗算命令Fmuldを実行して、前述の級数部分にy, 1.0, -y, -1.0のいずれかを乗算する計算を行う。
【００３４】
したがって、第２の積和演算命令Ftrimadddの繰り返しによる級数部分の計算で使用する係数と、第３の乗算命令Fmuldで使用する乗数は、以下のとおりとなる。
（１）bqx[1:0]=00の場合は、sin(x)の係数と乗数yを使用し
（２）bqx[1:0]=01の場合は、cos(x)の係数と乗数1.0を使用し
（３）bqx[1:0]=00の場合は、sin(x)の係数と乗数-yを使用し
（４）bqx[1:0]=01の場合は、cos(x)の係数と乗数-1.0を使用する。
【００３５】
次に、三角関数sin(x)を求めるための補助命令である、テイラー級数の積和演算命令Ftrimadddと、係数メモリの選択と積和演算命令Ftrimadddの初期値y2を求める第１の補助命令Ftrismuldと、最終段の係数（y,1.0,-y,-1.0）を求める第２の補助命令Ftrisseldを説明する。
【００３６】
［第１の補助命令Ftrismuld］
図８は、第１、第２の補助命令Ftrismuld、Ftrisseldのアセンブリ言語表記と、三角関数sin(x)に適用した場合のそれぞれの具体例とを示す図表である。
【００３７】
まず、第１の補助命令Ftrismuldのアセンブリ言語表記は、以下のとおりである。
Ftrismuld  rs1，rs2，rd
そして、処理内容は、以下の通りである。
rd = (rs1 * rs1) | (rs2[0] << 63)
つまり、処理内容は、rs1で指定されるレジスタ（例えば倍精度浮動小数点レジスタ）の値を二乗し、rs2で指定されるレジスタの最下位ビットrs2[0]を符号ビット[63]とする結果を、rdで指定されるレジスタに格納する、である。
【００３８】
三角関数sin(x)の演算での補助命令Ftrismuldの例と処理内容は、以下のとおりとなる。
Ftrismuld  y，bqx，y2t
rd = (y * y) | (bqx[0] << 63)
つまり、処理内容は、y2を演算し、その最上位ビットである符号ビットを展開点識別データbqxの最下位ビットbqx[0]で置換する、である。y2は正であるので、bqxの最下位ビットbqx[0]で置換する処理は、y2の符号ビット（正）とbqx[0]の論理和演算で良い。
【００３９】
図９は、第１の補助命令Ftrismuldの処理内容を示す図である。倍精度浮動小数点の例であるので、各レジスタは６４ビット[63:0]であり、最上位ビット[63]が符号ビットとなる。但し、倍精度以外の他の精度浮動小数点でも適用可能であり、例えば単精度の場合、最上位ビット[31]が符号ビットとなる。
【００４０】
レジスタrs1にはy=(x-x0)が、レジスタrs2には展開点識別データbqxが格納され、レジスタrdは変数y2tのレジスタである。そして、レジスタrs1の値yの二乗、rs1*rs1=y2=(x-x0)2の符号ビット[63]（必ず正）と、レジスタrs2の展開点識別データbqxの最下位ビットbqx[0]とが論理和ゲート１８８に入力され、その出力であるbqxの最下位ビットbqx[0]がレジスタrdの符号ビット[63]に格納され、rdの符号ビットを除く[62:0]にrs1*rs1=y2=(x-x0)2の[62:0]ビットが格納される。
【００４１】
このレジスタrdの２つの情報、bqx[0]と、y2=(x-x0)2の[62:0]とが、テイラー級数の積和演算命令Ftrimadddを実行するときの、係数セットの選択ビット（sinまたはcosの係数の選択ビット）と、積和演算命令の初期値y2=(x-x0)2に利用される。
【００４２】
［第２の補助命令Ftrisseld］
図８に示されるとおり、第２の補助命令Ftrisseldのアセンブリ言語表記は、以下のとおりである。
Ftrisseld  rs1，rs2，rd
そして、処理内容は、以下の通りである。
rd = ((rs2[0] ? 1.0 : rs1) ^ (rs2[1] << 63)
つまり、処理内容は、rs1で指定されるレジスタの値か1.0を、rs2で指定されるレジスタの値の最下位ビットrs2[0]で選択し、その値の符号ビットをrs2レジスタの値のビット１、rs2[1]と排他的論理和をとり、rdで指定されるレジスタに格納する、である。^は排他的論理和（EOR）である。
【００４３】
三角関数sin(x)の演算での補助命令Ftrisseldの例と処理内容は、以下のとおりとなる。
Ftrisseld  y，bqx，ys
rd = ((bqx[0] ? 1.0 : y) ^ (bqx[1] << 63)
つまり、処理内容は、bqx[0]＝0の場合入力yを、bqx[0]＝1の場合1.0をそれぞれ選択し、選択した値の符号ビットとbqx[1]と排他的論理和をとり、rdで指定されるレジスタに格納する、である。つまり、排他的論理和によりbqx[1]＝１の場合、選択した値（y又は１．０）の符号ビットが反転される。
【００４４】
図１０は、第２の補助命令Ftrisseldの処理内容を示す図である。この場合も倍精度浮動小数点の例で示されるが、倍精度以外の他の精度浮動小数点でも適用可能である。
【００４５】
レジスタrs1にはy=(x-x0)が、レジスタrs2には展開点識別データbqxが格納され、レジスタrdは変数ysのレジスタである。そして、セレクタ１８４が、bqx[0]＝0の場合入力yを、bqx[0]＝1の場合1.0をそれぞれ選択する。さらに、EORゲート１８６が選択された値（y又は１．０）の符号ビット[63]とbqx[1]との排他的論理和を出力し、変数ysのレジスタの符号ビット[63]にEOR１８６の出力を格納し、変数ysのレジスタの[62:0]に選択された値の[62:0]ビットを格納する。
【００４６】
この処理で算出された変数ys（＝y, 1.0, -y, -1.0）は、後述する乗算命令Fmuldにより、積和演算命令Ftrimadddの演算結果（図７の括弧）に乗算される。
【００４７】
［テイラー級数の展開式の積和演算命令Ftrimaddd]
図１１は、テイラー級数の積和演算命令Ftrimadddと乗算命令Fmuldのアセンブリ言語表記と、三角関数sin(x), cos(x)に適用した場合のそれぞれの具体例とを示す図表である。
【００４８】
まず、第３の補助命令である積和演算命令Ftrimadddのアセンブリ言語表記は、以下のとおりである。
Ftrimaddd  rs1，rs2，index, rd
そして、処理内容は、以下の通りである。
rd = rs1 * Fabs(rs2) ＋ T[rs2[63]][index]
つまり、処理内容は、rs1で指定される倍精度浮動小数点レジスタの値とrs2で指定される倍精度浮動小数点レジスタの値の絶対値を乗じ、さらに、演算器内にあるテーブルメモリからindexで指定される倍精度数を取り出して加算し、結果をrdで指定される倍精度浮動小数点レジスタに格納する、である。Ftrimadddはsin(x), cos(x)の級数部分の計算を行う。
【００４９】
次に、図１１には、第３の補助命令である積和演算命令Ftrimadddをsin(x), cos(x)による級数部分の計算に適用した場合の、２つの例1、例２が示される。sin(x), cos(x)の級数部分の計算は、第３の補助命令Ftrimadddを複数回繰り返して行われる。例１は初回の演算、例２は２回目以降の演算例である。２つの例の演算命令と処理内容は次のとおりである。
【００５０】
例１
Ftrimaddd  c0，y2t，7, r
r = c0 * Fabs(y2t) ＋ T[y2t[63]][7]
つまり、処理内容は、関数Fabsは絶対値を意味するので、定数c0=0.0に変数y2t=y2の絶対値を乗じ、テーブルTのindex=7（図２の次数番号162）と, y2t[63]=bqx[0]（図２のセット番号164）とで選択される係数を加算し、変数ｒのレジスタに格納する処理である。sin(x)の場合y2t[63]=bqx[0]=0であるので、T[y2t[63]][7]として図２の係数メモリ１６０内のsin(x)のテイラー級数の15次の係数が選択される。
【００５１】
例２
Ftrimaddd  r，y2t，index, r (index=6〜0)
r = r * Fabs(y2t) ＋ T[y2t[63]][index]
つまり、処理内容は、前回の処理結果ｒに変数y2t=y2の絶対値を乗じ、テーブルTのindex（図２の次数番号162）と, y2t[63]=bqx[0]（図２のセット番号164）で選択される係数を加算し、変数ｒのレジスタに格納する処理である。sin(x)の場合y2t[63]=0であるので、T[y2t[63]][index]として図２の係数メモリ１６０内のsin(x)のindexに対応するテイラー級数の係数が選択される。
【００５２】
［乗算命令Fmuld］
次に、第４の補助命令である乗算命令Fmuldのアセンブリ言語表記は、以下のとおりである。
Fmuld  rs1，rs2，rd
そして、処理内容は、以下の通りである。
rd = rs1 * rs2
つまり、処理内容は、rs1で指定される倍精度浮動小数点レジスタの値とrs2で指定される倍精度浮動小数点レジスタの値とを乗算し、rdで指定される倍精度浮動小数点レジスタに格納する、である。
【００５３】
次に、補助命令Fmuldをsin(x), cos(x)の級数部分の計算に適用した場合の例は、以下のとおりである。
Fmuld r, ys, r
r = r * ys
つまり、第３の補助命令Ftrimadddの演算結果ｒに、第２の補助命令Ftrisseldの演算結果ysを乗算して変数ｒのレジスタに格納する処理である。
【００５４】
［三角関数sin(x)のテイラー級数展開の演算の前処理］
図１２は、三角関数sin(x)のテイラー級数展開の演算の前処理のアセンブラ言語記述によるオペレーションコードと演算内容を示す図表である。図１の演算器の構成も参照して、前処理を具体的に説明する。
【００５５】
ロード命令lddfで、ｘに、メモリ内の入力引数ｍeｍをロードする。
【００５６】
次に、積和命令Fmaddd（Floating multiply add double）により、bqx＝（（x＊rp2）＋bg）を演算する。ここで、レジスタrp2(ノードnd2)には、１／（π／２）がセットされており、レジスタbgには、値「１．５＊２＊＊５２」がセットさている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｘとrp2との積を演算し、この積とbgの和を演算する。
【００５７】
これにより、展開関数と符号を決定する値qx＝int（x/（π/２））が、演算結果bqxの仮数部の下位５１ビットに得られる。又、値「１．５＊２＊＊５２」を加算する意味は、この５２乗の値を加算すると、小数点以下が四捨五入され、所謂、丸め処理が実行される。
【００５８】
次に、差命令Fsubd（Floating substract double）により、qx = bqx−bgを演算する。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のbqxから、bgを減算し、差qxを演算する。このbgを加算して、減算することにより、小数点以下の四捨五入を行う。
【００５９】
次に、積和命令Fnmsubd（Floating negative multiply subtract double）により、y=x-(qx*p2a)を演算する（但し、p2a=π/2）。レジスタp2aには、「π／２」の上位の値がセットされている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のqxとp2aとの積を演算しレジスタに格納した後、この積とｘを読み出し差を演算する。
【００６０】
次に、積和命令Fnmsubdにより、y=x-(qx*p2a)を演算する。レジスタp2bには、「π／２」の下位の値がセットされている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のqxと、p2bとの積を演算しレジスタに格納した後、この積とｙを読み出し、差を演算する。これにより、テイラー級数演算のy = (x-x0)が得られる。２つの積和命令を用いているのは、π／２の値を、上位ビットと下位ビットに分けて演算し、小数点以下の精度を高めるためである。
【００６１】
次に、三角関数演算の第１の補助命令Ftrismuldを演算する。即ち、命令種別コード２００の「ftrismuld」により、通常、レジスタrs2（ノードnd2）を選択するセレクタ１８２を「１」側に切り替え、セレクタ１８２からレジスタrs1（ノードnd1）を出力する。このため、浮動小数点積和演算器１００は、レジスタrs1（ノードnd1）の値yを二乗する。そして、論理和回路１８８は、レジスタrs2（ノードnd2）の「０」ビット目のデータrs2［０］が入力され、且つ演算器１００からの出力y2の符号ビット、６３ビット目がy2 [63]に入力される。そして、セレクタ１９０を介し、論理和回路１８８の出力（=rs2[0]）が、演算器１００の出力の符号ビット[63]に出力される。なお、セレクタ１８０は「１」側の入力0.0を選択し積和演算器１００の加算オペランドに入力する。積和演算器１００はレジスタrs1の入力ｙを二乗するだけであるので、加算値は0.0でよい。
【００６２】
即ち、図９で説明したように、変数y2tのレジスタには、[62:0]ビットにy2が、符号ビット[63]に展開点識別データの最下位ビットbqx[0]が、それぞれ格納される。
【００６３】
次に、三角関数演算の第２の補助命令Ftrisseldを演算する。図１において、セレクタ１８４は、値1.0（６４ビット）と、レジスタrs1（nd1）のデータy（６４ビット）を入力し、レジスタrs2（ノードnd2）の[0]ビット目の値rs2[0]=bqx[0]に基づいて、bqx[0]=1なら値1.0を、bqx[0]=0ならデータyを選択する。そして、排他的論理和回路１８６が、セレクタ１８４の出力の[63]ビット目の値とレジスタrs2[1]=bqx[1]のＥＯＲを演算し、セレクタ１８４の出力の[63]ビット目をＥＯＲ演算結果で置き換え、セレクタ１９２を介して出力レジスタrd=ysに格納される。
【００６４】
この出力ysの[63]ビット目は、テイラー級数の展開関数の符号（＋又は−）を示し、[62:0]ビットがセレクタ１８４の出力である、y=(x-x0)又は1.0となる。
【００６５】
このようにして、三角関数演算の補助命令Ftrismuld，Ftrisseldと、これらにより動作するセレクタ１８０，１８２，１８４，１９０，１９２、排他的論理和回路１８６、論理和回路１８８とを設けることにより、命令数を少なくして、テイラー級数の展開関数の決定の他に、テイラー級数演算の最後に乗算する値「ｙ」、「１．０」を決定できる。これにより、前処理を高速化できる。
【００６６】
［三角関数sin(x)のテイラー級数展開の演算の後処理］
次に、三角関数演算の第３の補助命令Ftrimaldddと第４の補助命令である乗算命令Fmuldを用いた後処理を説明する。第３の補助命令Ftrimaldddを繰り返し実行することで、三角関数sin(x)のテイラー展開の演算を高速化できる。
【００６７】
図１３は、後処理でのアセンブラ言語記述によるオペレーションコードと演算内容との関係図である。図１４は、図１３の演算のsin(x)の具体的な演算式を示す図である。図１４に示すように、演算順序は、次数の高い係数を先に演算し、順次、その演算結果にy2s=y2を乗算し次数の低い係数を加算していく。即ち、最初に、テイラー展開の次数が最も高い係数（１／１５！）を呼び出し，三角関数演算の第３の補助命令Ftrimadddにより、（（前回の次数の係数＊ｙ２）＋今回の次数の係数）の積和演算を繰り返し実行する。
【００６８】
図１３の演算処理を、図１，図２の構成を参照して具体的に説明する。第３の補助命令Ftrimadddにより図１１で示した例1、例２の演算を実行する。
【００６９】
最初の補助命令Ftrimaddd c0, y2t, 7, rは、例１に対応し、以下の演算を実行する。
r = 0.0 * y2t[62:0] + 係数７ = 係数７
ここで、fabs(rs2) = fabs(y2t)は、y2t[63:0]の絶対値であるので、図１のAND回路１７４が、レジスタrs2（nd2）のy2tの符号ビット[63]を、命令種別コードFtrimaddd=1の反転ビット「０」と論理積演算し、符号ビット[63]を必ず「０」（正）に反転する。これは、第１の補助命令Ftrismuldによりy2t[63:0]の符号ビット[63]にbqx[0]が格納され、y2tの符号ビットが係数メモリ１６０のセレクタ１７０の選択ビットとして利用されていたからである。そのため、積和演算器１００には、AND回路１７４によりy2tの符号ビット[63]を「０」に変更したy2t[63:0]が入力される。
【００７０】
また、index=7、y2t[63]に基づいて係数メモリ１６０から係数７（1/15！）が抽出され、セレクタ１８０を介して積和演算器１００の加算オペランド（第３の入力オペランド）に入力される。そして、積和演算器１００が、c0=0.0, y2t[63:0]=y2, 係数７（1/15！）の入力を積和演算して、レジスタｒに係数７が格納される。
【００７１】
次に、演算処理装置は、第３の補助命令Ftrimadddとオペレーションコードｒ、y2t、６、ｒを指定し、次の演算を実行する。
Ftrimaddd r, y2t, 6, r
この演算処理では、前回のFtrismadddの結果rを積和演算器１００の第1の乗算オペランド（第１の入力オペランド）に入力し、AND回路１７４で絶対値に変更されたy2t[63:0]を第２の乗算オペランド（第２の入力オペランド）に入力する。さらに、係数メモリ係数メモリ１６０からindex=6, y2t[63]=bqx[0]で抽出された係数（1/13!）を、セレクタ１７２，１８０を経由して積和演算器の加算オペランド（第３の入力オペランド）に入力する。そして、積和演算器が以下の演算を実行し、演算結果をレジスタrに格納する。
r = r * y2t[62:0] + 係数６（1/13!）
以下同様にして、次数（index）を順次、５，４，３，２，１，０と下げ、第３の補助命令Ftrimadddと対応するオペレーションコードにより、同様に演算を繰り返し行う。これにより、図１３の最後から３段目の演算結果ｒが得られる。
【００７２】
次に、乗算命令Fmuld（multiply）とオペランドｒ、rs2 = ys、ｒを指定し、次の演算を実行する。
Fmuld r, ys, r
この演算処理では、補助命令Ftrimadddの繰り返しで求めたレジスタrの値に、前処理で第２の補助命令Ftrisseldで演算していた変数ys（＝y, 1.0, -y, -1.0）の値を乗算して、レジスタrに格納する。この演算により、図１４の最下行の多項式に、変数ys（＝y, 1.0, -y, -1.0）のいずれかが乗算される。その結果、図７に示したとおり、sin(x),-sin(x)の場合は奇関数になり、cos(x), -cos(x)の場合は偶関数になる。
【００７３】
さらに、ストア命令Stfdfにより、この結果ｒを、レジスタファイル１４０のエントリｍｅｍにストアする。
【００７４】
このようにして、三角関数演算補助命令Ftrimadddと、これにより動作する係数メモリ１６０、セレクタ１７０，１７２，ＡＮＤ回路１７４とを設けることにより、命令数を少なくして、テイラー級数展開関数の演算が可能となり、後処理を高速化できる。
【００７５】
［本実施の形態による改良された演算処理装置］
図１の演算処理装置において、三角関数sin(x)をテイラー展開の演算を行う場合、図１２に示した前処理で第１、第２の補助命令Ftrismuld、Ftisseldを実行し、次に、図１３に示した後処理で第３の補助命令Ftrimadddを繰り返し実行し、更に乗算命令Fmuldを実行する。前処理と後処理との間にはデータの依存関係があり、後処理での第３の補助命令Ftrimadddと乗算命令Fmuldを実行するためには、前処理での第１の補助命令Ftrismuldの結果y2tと第２の補助命令Ftrisseldの結果ysがそれぞれ必要である。
【００７６】
この場合、前処理のFtrisseldの結果ysは、後処理の後半の乗算命令Fmuldまで使用されないので、この依存関係は、演算処理の性能上問題とならない。一方で、前処理のFtrismuldの結果y2tは、直後の後処理の第３の補助命令Ftrimadddで必要となるので、第１の補助命令Ftrismuldの演算レイテンシが三角関数の演算処理全体の性能のネックとなる。
【００７７】
一般には、性能ネックとなるデータ依存関係について、バイパス経路を設けて、前処理の第１の補助命令Ftrismuldの結果y2tをバイパス経路を経由して直接、次の後処理の第３の補助命令Ftrimadddの入力に供給することが考えられる。
【００７８】
しかし、前処理の第１の補助命令Ftrismuldの結果y2t[63:0]には、y2t[63]=bqx[0]と、y2t[62:0]=y2[62:0]とが含まれている。そして、後処理の第３の補助命令Ftrimadddの入力には、y2t[62:0]=y2[62:0]と、y2t[63]=bqx[0]に基づいて係数メモリから選択した係数とが入力される。その結果、前処理の第１の補助命令Ftrismuldの結果y2t[63:0]のうち、y2t[62:0]=y2[62:0]の後処理の第３の補助命令Ftrimadddの入力への論理段数よりも、y2t[63]=bqx[0]に基づいて係数メモリから選択した係数のFtrimadddの入力への論理段数が多い。そのため、y2t[63]=bqx[0]に基づいて係数メモリから選択した係数のFtrimadddの入力への論理段数が、演算処理のクリティカルパスとなる。以下、具体的に演算処理装置の構成に基づいて説明する。
【００７９】
図１５は、積和演算器１００の乗算器部分の詳細構成図である。積和演算器の乗算器部分は、前処理の第１の補助命令Ftrismuldの場合、入力オペランドOP1,OP2（それぞれオペランドレジスタ１０１，１０２）に入力ｙ、ｙを入力し、入力オペランドOP3に展開点識別データbqx[63:0]のうち最下位ビットbqx[0]を入力する。
【００８０】
積和演算器１００の乗算器は、サイクル１のステージに、入力オペランドOP1,OP2のオペランドレジスタ１０１，１０２、入力ｙの仮数ｆを乗算する乗算器１０３、指数部ｅとバイアスBiasを加算する加算器１０４、符号部ｓの排他的論理和回路１０５を有する。さらに、サイクル２のステージに、乗算器１０３の乗算結果sumとキャリーcryとを加算する加算器１０６を有する。そして、サイクル３のステージに、加算器の出力である仮数ｆとEOR１０５の出力である符号部ｓとを入力する丸め回路１０７と、EOR１０５の出力である符号部ｓとbqx[0]の論理和回路１８８とを有する。さらに、サイクル４のステージに加算器１０８と結果ｒのレジスタ１０９を有する。各サイクルの境界には、図示しないラッチ回路が設けられ、ラッチ回路はクロックに同期して入力をラッチする。
【００８１】
図１６は、入力レジスタ１０１，１０２と結果レジスタ１０９のフォーマットを示す図である。この例は、倍精度の浮動小数点の例であり、最上位ビット[63]は符号部ｓ、[62:52]ビットは指数部ｅ、[51:0]ビットは仮数ｆをそれぞれ格納する。また、実線の入力と出力矢印は入力レジスタ１０１，１０２の例、破線の入力と出力矢印は出力レジスタ１０９の例である。
【００８２】
図１７は、図１の演算処理装置のバイパス経路を示す図である。積和演算器１００の出力ｒ（Ftrismuldの場合は、y2t[63]、y2t[62:0]）は、バイパス経路BYP_1を経由して、セレクタ群１５２−１５６に入力される。そして、マルチプレクサ１５４で選択されてノードnd2から分岐したy2t[63]=bqx[0]が、係数メモリ１６０のセレクタ１７０に入力され、セレクタ１７０により選択された係数が、セレクタ１７２でFtrimaddd=1により選択され、積和演算器１００に入力される。一方、マルチプレクサ１５４により選択されたノードnd2のy2t[62:0]=y2[62:0]は、直接積和演算器１００に入力される。したがって、積和演算器１００の出力ｒに含まれるy2t[63]=bqx[0]の、図１のOR回路１８８、セレクタ１９０，１９２、バイパス経路BYP_1、マルチプレクサ１５４、セレクタ１７０、セレクタ１７２、積和演算器の入力に至る論理段数が、後続の第３の補助命令Ftrimaddd実行開始までのクリティカルパスとなり、演算器のサイクル（周波数）を律速する。
【００８３】
図１８は、本実施の形態における積和演算器１００の乗算器部分を含む構成を示す図である。図１８に示された積和演算器１００は、サイクル１のステージに、Ftrismuld専用符号出力回路１１０を有する。それ以外の構成は、図１５と同じである。
【００８４】
Ftrismuld専用符号出力回路１１０は、サイクル１のステージに設けられ、オペランドOP3に入力される展開点識別データの最下位ビットbqx[0]をラッチするラッチ回路である。前述したとおり、Ftrismuldでは、オペランドOP1,OP2に入力されたy=(x-x0)の二乗は、必ず正（符号ビットｓ＝０）であるので、Ftrismuldの符号処理回路である論理和回路１８８の出力は必ずオペランドOP3の入力bqx[0]と等しい。そこで、本実施の形態では、OR回路１８８の出力である符号ビットｓ（y2t[63]=bqx[0]）が結果ｒに含められて、バイパス経路BYP_1らを経由して係数メモリのセレクタ１７０に入力される代わりに、積和演算器１００のサイクル１のステージでオペランドOP3の入力bqx[0]をFtrismuldの専用符号出力回路（ラッチ回路）１１０がラッチし、出力する。
【００８５】
図１９は、本実施の形態における演算処理装置のバイパス経路を示す図である。図１９において図１８と異なるのは、積和演算器１００の専用符号出力回路１１０の出力bqx[0]をバイパスする第２のバイパス経路BYP_2と、第２のバイパス経路BYP_2を他のレジスタ１４０，１３０及びバイパスデータ１５０らと共に入力し、選択したbqx[0]を係数メモリ１６０のセレクタ１７０に出力するセレクタ１５８である。
【００８６】
そして、後処理の補助命令Ftrimadddでは、セレクタ１５８が第２のバイパス経路BYP_2を選択して、積和演算器１００の専用符号出力回路１１０の出力bqx[0]を係数メモリ１６０のセレクタ１７０に供給し、セレクタ１７０で選択された係数を、セレクタ１７２を経由して積和演算器１００に入力する。
【００８７】
上記の構成及び動作により、積和演算器１００において４サイクルで前処理の補助命令Ftrismuldの演算結果r=y2t[63:0]が生成される間、積和演算器１００のサイクル１のステージに設けた専用符号出力回路１１０の出力bqx[0]を、演算結果ｒより数サイクル早く出力する。さらに、出力bqx[0]を、第２のバイパス経路BYP_2とセレクタ１５８を経由して、セレクタ１７０に供給する。したがって、前処理の補助命令Ftrismuldの実行から、後処理の補助命令Ftrimadddのための係数が積和演算器１００に入力されるまでの時間が、積和演算器１００内の数サイクルの論理段数分と、第２のバイパス経路BYP_2によりショートカットしたセレクタ１９０及び１９２の論理段数分短くなり、前述のクリティカルパスを改善することができる。
【００８８】
図２０は、本実施の形態の演算処理装置１の構成を示す図である。図１の構成と異なり、図１９に示した第２のバイパス経路BYP_2とセレクタ１５８が設けられ、命令発行制御部２０２が示されている。即ち、積和演算器１００の専用符号出力ｓに接続された第２のバイパス経路BYP_2と、第２のバイパス経路BYP_2で供給されるbqx[0]を選択して係数メモリのセレクタ１７０に供給するセレクタ１５８と、セレクタ１５８からセレクタ１７０までの配線が、新たに設けられる。
【００８９】
図２１は、命令発行制御部２０２を含む図２０の演算処理装置の動作を示すフローチャート図である。命令発行制御部２０２は、まず命令をデコードし（S1）、デコードした命令が特定命令か否か判定する（S2）。例えば、上記の三角関数の演算例の場合、特定命令は前処理での第1の補助命令Ftrismuldである。
【００９０】
デコードした命令が特定命令の場合（S2のYES）、命令発行制御部は、特定命令が後続命令とレジスタのRAW（Read After Write）の依存関係にあるか否か判定する（S3）。RAWの依存関係とは、先行命令が演算結果をレジスタに書込んだ後に後続命令がその演算結果を読み出さなければならない関係である。上記の三角関数の演算例の場合、特定命令Ftrismuldに対し、後続命令Ftrimadddは、特定命令Ftrismuldによりリネーミングレジスタに書込まれた演算結果y2t[63], y2t[62:0]を使用して演算を実行する関係にある。
【００９１】
最後に、命令発行制御部２０２は、後続命令が特定命令との所定の組み合わせ関係にあるか否か判定する（S4）。上記の例では、FtrimadddはFtrismuldと所定の組み合わせ関係にある。
【００９２】
その後の動作は、演算処理装置の動作であり、積和演算器１００は、特定命令Ftrismuldの専用符号出力回路１１０へ演算結果y2t[63]=bqx[0]を出力し（S5）、その出力y2t[63]=bqx[0]を専用バイパス経路BYP_2を経由してセレクタ１５８にバイパスする（S6）。セレクタ１５８が係数メモリの選択信号であるy2t[63]=bqx[0]を選択し（S7）、セレクタ１７０がその選択信号y2t[63]=bqx[0]で係数メモリ内の係数を選択し（S8）、積和演算器に入力する（S9）。そして、積和演算器１００は、選択された係数とFrismuldで算出されたy2t[62:0]を入力して後続命令Ftrimadddを実行し（S10）、演算結果を出力する（S11）。
【００９３】
図２０に示したとおり、命令発行制御部２０２は、図２１の工程S2,S3,S4が全てYESの場合、第２のバイパス経路BYP_2を選択する選択信号SLCTをセレクタ１５８に出力する。それにより、積和演算器１００のFrismuld専用符号出力回路１１０（図２０のS）から第２のバイパス経路BYP_2、セレクタ１５８、セレクタ１７０の経路で、係数メモリの選択信号bqx[0]が供給される。
【００９４】
一方、図２１の工程S2,S3,S4のいずれかがNOの場合、信号bqx[0]は、セレクタ１９０，１９２、及び第1のバイパス経路BYP_1、リネーミングレジスタ１３０、セレクタ１５８、セレクタ１７０の経路で供給される。
【００９５】
［三角関数cos(x)の例］
上記では、三角関数sin(x)の例について演算処理装置の改良構造について説明した。それに対して、三角関数cos(x)の場合も同様にして演算処理装置を改良して、クリティカルパスを短縮することができる。
【００９６】
図２２は、三角関数cos(x)の場合のbqx=qx%4の下位２ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。原理は図６の三角関数sin(x)と同じである。すなわち、
（１）-π/4 ＜ x ≦ +π/4（qx=4N,Nは整数）では、x0=0等, cos(x) = cos (x-x0) = cos(y)
（２）+π/4 ＜ x ≦ +3π/4 (qx=4N+1)では、x0=π/2等, cos(x) = -sin (x-x0) = -sin(y)
（３）+3π/4 ＜ x ≦ +5π/4 (or -5π/4 ＜ y=x-x0 ＜ -3π/4) (qx=4N+2)では、
x0=π or -π等, cos(x) = -cos (x-x0) = -cos(y)
（４）-3π/4 ＜ x ≦ -π/4 (qx=4N+3)では、x0=3π/2 or -π/2等,
cos(x) = sin(x-x0) = sin(y)
図２２によれば、bqx[0]=0の場合はcos(x)の係数を選択し、bqx[0]=1の場合はsin(x)の係数を選択すればよい。つまり、反転ビットであれば~bqx[0]=0ではsin(x)の係数、~bqx[0]=1ではcos(x)の係数を選択する。~は反転を意味する。また、後処理の補助命令Ftimadddでは、bqx[0]=0の場合は1.0を選択し、bqx[0]=1の場合はyを選択し、bqx[0]^bqx[1]=0の場合に符号ビットをy2t[63]=0（正）に、bqx[0]^bqx[1]=1の場合に符号ビットをy2t[63]=1（負）にすればよい。
【００９７】
［第１の補助命令Ftricmuld］
図２３は、三角関数cos(x)の場合の前処理の補助命令Ftricmuld、Ftricseldのアセンブリ言語表記と、三角関数cos(x)に適用した場合のそれぞれの具体例とを示す図表である。
【００９８】
まず、第１の補助命令Ftricmuldのアセンブリ言語表記は、以下のとおりである。
Ftricmuld  rs1，rs2，rd
そして、処理内容は、以下の通りである。
rd = (rs1 * rs1) | (~rs2[0] << 63)
つまり、処理内容は、rs1で指定されるレジスタ（例えば倍精度浮動小数点レジスタ）の値を二乗し、rs2で指定されるレジスタの最下位ビットの反転~rs2[0]を符号ビット[63]とする結果を、rdで指定されるレジスタに格納する、である。
【００９９】
三角関数sin(x)の演算での補助命令Ftricmuldの例と処理内容は、以下のとおりとなる。
Ftricmuld  y，bqx，y2t
rd = (y * y) | (~bqx[0] << 63)
つまり、処理内容は、y2を演算子、その最上位ビットである符号ビットをbqxの最下位ビットの反転~bqx[0]で置換する、である。y2は正であるので、bqxの最下位ビットの反転~bqx[0]で置換する処理は、y2の符号ビット（正）と~bqx[0]の論理和演算で良い。
【０１００】
［第２の補助命令Ftricseld］
第２の補助命令Ftricseldのアセンブリ言語表記は、以下のとおりである。
Ftrisseld  rs1，rs2，rd
そして、処理内容は、以下の通りである。
rd = ((rs2[0] ? rs1 : 1.0) ^ ((rs2[1]^rs2[0]) << 63)
つまり、処理内容は、rs1で指定されるレジスタの値か1.0を、rs2で指定されるレジスタの値の最下位ビットrs2[0]で選択し、その値の符号ビット[63]を、rs2レジスタの値の第1ビットrs2[1]と最下位ビットrs2[0]の排他的論理和と、排他的論理和をとり、rdで指定されるレジスタに格納する、である。
【０１０１】
三角関数cos(x)の演算での補助命令Ftricseldの例と処理内容は、以下のとおりとなる。
Ftricseld  y，bqx，ys
rd = ((bqx[0] ? y : 1.0) ^ ((bqx[1]^ bqx[0]) << 63)
つまり、処理内容は、bqx[0]＝0の場合1.0を、bqx[0]＝1の場合yを選択し、選択した値の符号ビット[63]と、bqx[1]とbqx[0]の排他的論理和と、排他的論理和をとり、rdで指定されるレジスタに格納する、である。つまり、排他的論理和によりbqx[1]^bqx[0]＝１の場合、選択した値の符号ビット[63]が反転される。
【０１０２】
図２４は、三角関数cos(x)の場合の演算処理装置１の構成を示す図である。図１，２０と同様に、図２４では、補助命令Ftricmuldのためにインバータ１９６、論理和回路１８８及びセレクタ１９０が設けられる。また、補助命令Ftricseldのためにセレクタ１８４、排他的論理和回路１９４，１８６、セレクタ１９２が設けられる。
【０１０３】
また、積和演算器１００は、図１８と同様の構成である。そして、積和演算器１００のFtricmuld専用符号出力回路１１０の出力ｓをセレクタ１５８に供給する第２バイパス経路BYP_2とインバータ１９７が設けられる。そして、命令発行制御部２０２は、補助命令FtricmuldとFtrimadddの組み合わせが実行される場合に、セレクタ１５８に第２バイパス経路BYP_2の信号bqx[0]を選択する選択信号SLCTを出力する。これにより、補助命令Ftrimadddを実行する時に、特定命令であるFtricmuldの係数の選択信号bqx[0]の供給パスの論理段数が短くなり、クリティカルパスが短縮される。
【０１０４】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１０５】
（付記１）
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の第１ビット（rs2[1]=bqx[1]）と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビット（rs2[0]=bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有し、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第1変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビット（bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置。
【０１０６】
（付記２）
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の最下位ビット（rs2[0]=bqx[0]）と第１ビット（rs2[1]=bqx[1]）との第１の排他的論理和を演算する第１の排他的論理和回路と、
前記第１の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第２の排他的論理和を演算する第２の排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビットの反転ビット（~rs2[0]=~bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有し、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第１変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビットの反転ビット（~bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納して第１変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第１の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第１の排他的論理和を求め、前記第２の排他的論理和回路により、前記第１の排他的論理和と前記第１のセレクタで選択されたデータの符号ビット([63])との第２の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置。
【０１０７】
（付記３）
前記係数メモリは、前記係数インデックスに基づいて前記三角関数のテイラー展開演算式の次数に対応する係数を選択し、前記係数セレクタが前記展開点識別データの最下位ビットに基づいてsin(x)の係数またはcos(x)の係数のいずれかを選択する、付記１または２に記載の演算処理装置。
【０１０８】
（付記４）
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の第１ビット（rs2[1]=bqx[1]）と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビット（rs2[0]=bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有する演算制御装置の制御方法であって、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第1変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビット（bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置の制御方法。
【０１０９】
（付記５）
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第１、第２、第３の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第１のバイパス経路と、
前記レジスタファイルと前記第１のバイパス経路のいずれかを選択し、前記積和演算器の第１、第２、第３の入力にそれぞれ出力する第１、第２、第３のマルチプレクサと、
前記積和演算器の出力の符号ビット（[63]）と、前記第２の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「１．０」とのいずれかを選択する第1のセレクタと、
前記第２の入力の最下位ビット（rs2[0]=bqx[0]）と第１ビット（rs2[1]=bqx[1]）との第１の排他的論理和を演算する第１の排他的論理和回路と、
前記第１の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第２の排他的論理和を演算する第２の排他的論理和回路と、
前記積和演算器の第２の入力の最下位ビットの反転ビット（~rs2[0]=~bqx[0]）を前記係数セレクタに供給する第２のバイパス経路とを有する演算制御装置の制御方法であって、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx）の４の剰余（qx%4）である展開点識別データ（bqx=qx%4）と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0（bqx*π/2）を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第２の入力とし、第１変数y2tを出力とする第１の補助命令を実行して、前記積和演算器が前記第１の入力yを二乗して二乗値（y2t）を求め、前記論理和回路により、前記第２の入力である展開点識別データbqxの最下位ビットの反転ビット（~bqx[0]）と前記二乗値の符号ビット（y2t[63]）との論理和を求め、前記論理和を前記二乗値（y2t）の符号ビットに格納して第１変数y2tを求め、
前記yと展開点識別データbqxを第１、第２の入力とし、第２変数ysを出力とする第２の補助命令を実行して、前記第１のセレクタにより、前記第１の入力yまたは値「１．０」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第１の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第１の排他的論理和を求め、前記第２の排他的論理和回路により、前記第１の排他的論理和と前記第１のセレクタで選択されたデータの符号ビット([63])との第２の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第２変数ysを求め、
前回の演算出力（ｒ）と前記第１変数(y2t)と係数インデックスを第1、第２、第３の入力とし積和演算を行う第３の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第３の補助命令の出力に、前記第２の補助命令で求めた前記第２変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置の制御方法。
【符号の説明】
【０１１０】
１３０，１４０：レジスタファイル
１６０：係数メモリ
１００：積和演算器
BYP_1：第１のバイパス経路
BYP_2：第２のバイパス経路
１８８：論理和回路
１９４、１８６：排他的論理和回路
bqx：展開点識別データ
qx：第２の展開点識別データ
x０：展開点
y2t：第1変数、yの二乗値
ys：第２変数、yまたは１．０
Ftrismuld、Ftricmuld：第１の補助命令
Ftrisseld、Ftricseld：第２の補助命令
Ftrimaddd：第３の補助命令、テイラー級数展開式の演算命令
【図１】
2019128763.tif 000003
【図２】
2019128763.tif 000004
【図３】
2019128763.tif 000005
【図４】
2019128763.tif 000006
【図５】
2019128763.tif 000007
【図６】
2019128763.tif 000008
【図７】
2019128763.tif 000009
【図８】
2019128763.tif 000010
【図９】
2019128763.tif 000011
【図１０】
2019128763.tif 000012
【図１１】
2019128763.tif 000013
【図１２】
2019128763.tif 000014
【図１３】
2019128763.tif 000015
【図１４】
2019128763.tif 000016
【図１５】
2019128763.tif 000017
【図１６】
2019128763.tif 000018
【図１７】
2019128763.tif 000019
【図１８】
2019128763.tif 000020
【図１９】
2019128763.tif 000021
【図２０】
2019128763.tif 000022
【図２１】
2019128763.tif 000023
【図２２】
2019128763.tif 000024
【図２３】
2019128763.tif 000025
【図２４】
2019128763.tif 000026