(57)【要約】【課題】三角関数を演算する演算処理装置において、命令数を削減し、スループットを向上する。【解決手段】浮動小数点積和回路（１００）に、ＯＲ回路（１８８）と、セレクタ（１８４）と、ＥＯＲ回路（１８６）を設け、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）の演算を定義する第1の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）の演算を定義する第２の三角関数演算補助命令とにより、又は、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］＜＜６３）の演算を定義する第３の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））の演算を定義する第４の三角関数演算補助命令とにより、三角関数のテーラー級数展開の展開点と展開関数を演算する。【選択図】図１
2011013728.tif 000002
【特許請求の範囲】
【請求項１】
３つの入力ｒｓ１、ｒｓ２、ｒｓ３を受け、浮動小数点積和演算を行う浮動小数点積和回路と、
浮動小数点積和回路の出力の最上位ビットと、入力ｒｓ２の最下位ビットｒｓ２［０］とのＯＲを演算するＯＲ回路と、
入力ｒｓ１と、値「１．０」とのいずれかを選択するセレクタと、
入力ｒｓ２の最下位から1ビット上位のビットｒｓ２［１］とセレクタの最上位ビットとのＥＯＲを計算するＥＯＲ回路とを有し、
ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）の演算を定義する第1の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）の演算を定義する第２の三角関数演算補助命令とにより、前記三角関数のテーラー級数展開の展開点と展開関数を演算する
ことを特徴とする演算処理装置。
【請求項２】
３つの入力ｒｓ１、ｒｓ２、ｒｓ３を受け、浮動小数点積和演算を行う浮動小数点積和回路と、
浮動小数点積和回路の出力の最上位ビットと、入力ｒｓ２の最下位ビットｒｓ２［０］の反転信号とのＯＲを演算するＯＲ回路と、
入力ｒｓ１と、値「１．０」とのいずれかを選択するセレクタと、
入力ｒｓ２の最下位から1ビット上位のビットｒｓ２［１］と前記最下位ビットｒｓ２［０］とのＥＯＲを演算する第1のＥＯＲ回路と、
前記セレクタの最上位ビットと前記第1のＥＯＲ回路の出力とのＥＯＲを演算する第２のＥＯＲ回路とを有し、
ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］）＜＜６３）の演算を定義する第３の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））の演算を定義する第４の三角関数演算補助命令とにより、前記三角関数のテーラー級数展開の展開点と展開関数を演算する
ことを特徴とする演算処理装置。
【請求項３】
前記三角関数が、正弦関数（ｓｉｎ）である
ことを特徴とする請求項１の演算処理装置。
【請求項４】
前記三角関数が、余弦関数（ｃｏｓ）である
ことを特徴とする請求項２の演算処理装置。
【請求項５】
前記三角関数のテーラー級数の各次数の係数を格納する係数テーブルと、
前記演算された展開関数により、前記係数テーブルの係数を読み出す回路とを有し、
前記浮動小数点演算器が、前記演算された展開点と、前記読み出された係数とを用いて、前記三角関数のテーラー級数演算を実行する
ことを特徴とする請求項１の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数学関数の計算を行う演算処理装置に関する。
【背景技術】
【０００２】
三角関数等の数学関数を演算する演算処理装置は、スーパーコンピュータを含む種々のコンピュータで利用されている。このような演算処理装置は、一般的に、数学関数を、テーラー級数演算を用いて近似的に計算する。例えば、数学関数ｆ（ｘ）は、図２２に示すような、テーラー級数演算式で表現できる。
【０００３】
図２２に示すテーラー級数演算により、任意の値（入力引数）ｘにおける数学関数ｆ（ｘ）の値を計算するために、演算処理装置の計算は、テーラー級数演算の展開点ｘ０を決定し、その展開点に対応したテーラー級数係数（（１／ｎ！）・ｆ（ｎ）（ｘ０））のテーブルを決定する前処理部部分と、テーラー級数係数テーブルを用いて、図２２のテーラー級数演算を実行する後処理部分とに、分けられる。
【０００４】
例えば、数学関数が、ｓｉｎ関数である場合には、図２３に示すような、テーラー級数演算の展開点ｘ０を決定し、その展開点に対応したテーラー級数係数（（１／ｎ！）・ｆ（ｎ）（ｘ０））のテーブルを決定する。
【０００５】
即ち、ｓｉｎ関数の場合、周期性があるため、π／２の整数倍を、入力引数ｘ近傍の展開点とすると、入力引数ｘを、π／２で割った時の商（ｑ）から、テーラー級数展開点ｘ０を計算する。そして、商（ｑ）を「４」で割った余り（ｑ％４）に対応する、展開関数と、そのテーラー級数係数を、決定する。
【０００６】
例えば、余りが、「０」では、展開関数は、ｓｉｎ（ｘ−ｘｏ）であり、そのテーラー級数係数（（１／ｎ！）・ｆ（ｎ）（ｘ０））＝（−１）ｎ／（２＊ｎ＋１）！であり、図２２のテーラー級数は、Σ（−１）ｎ／（２＊ｎ＋１）！＊（ｘ−ｘ０）（２ｎ＋１）である。図２３では、「＊＊」は、べき乗を示し、「！」は、かい乗、「＊」は、乗算を示す。
【０００７】
従来技術では、三角関数のテーラー級数演算実行前の、テーラー級数展開関数の決定と、その展開関数への入力引数の算出処理は、ロード命令やシフト命令等の命令を使用して、浮動小数点レジスタと、整数レジスタ間のデータ転送や、マスク演算、シフト演算などの整数演算器を使用した演算処理とにより、行っていた。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−２３４０７６号公報（図１〜図７）
【特許文献２】特開２００２−０６３１５２号公報（図１〜図７）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
近年の演算処理の高速化の要求に従い、数学関数のテーラー級数演算の高速化が要求される。従来技術では、テーラー級数展開関数の決定と、その展開関数への入力引数の算出処理を、ロード命令やシフト命令等の命令を使用して、浮動小数点レジスタと、整数レジスタ間のデータ転送や、マスク演算、シフト演算などの複雑な処理が必要となり、浮動小数点演算以外のオーバーヘッド（整数演算命令やメモリアクセス命令等）が発生していた。
【００１０】
即ち、数学関数演算全体を処理するのに、多くの命令を必要とし、命令発行スループットの圧迫などの性能低下要因が存在した。
【００１１】
従って、本発明の目的は、数学関数演算の高速化する演算処理装置を提供することにある。
【課題を解決するための手段】
【００１２】
この目的の達成のため、演算処理装置は、３つの入力ｒｓ１、ｒｓ２、ｒｓ３を受け、浮動小数点積和演算を行う浮動小数点積和回路と、浮動小数点積和回路の出力の最上位ビットと、入力ｒｓ２の最下位ビットｒｓ２［０］とのＯＲ（論理和演算）を演算するＯＲ回路（論理和演算回路）と、入力ｒｓ１と、値「１．０」とのいずれかを選択するセレクタと、入力ｒｓ２の最下位から1ビット上位のビットｒｓ２［１］とセレクタの最上位ビットとのＥＯＲ（排他的論理和演算）を計算するＥＯＲ回路（排他的論理和演算回路）とを有し、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）の演算を定義する第1の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）の演算を定義する第２の三角関数演算補助命令とにより、前記三角関数のテーラー級数展開の展開点と展開関数を演算する。
【００１３】
又、この目的の達成のため、演算処理装置は、３つの入力ｒｓ１、ｒｓ２、ｒｓ３を受け、浮動小数点積和演算を行う浮動小数点積和回路と、浮動小数点積和回路の出力の最上位ビットと、入力ｒｓ２の最下位ビットｒｓ２［０］の反転信号とのＯＲを演算するＯＲ回路と、入力ｒｓ１と、値「１．０」とのいずれかを選択するセレクタと、入力ｒｓ２の最下位から1ビット上位のビットｒｓ２［１］と前記最下位ビットｒｓ２［０］とのＥＯＲを演算する第1のＥＯＲ回路と、前記セレクタの最上位ビットと前記第1のＥＯＲ回路の出力とのＥＯＲを演算する第２のＥＯＲ回路とを有し、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］＜＜６３）の演算を定義する第３の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））の演算を定義する第４の三角関数演算補助命令とにより、前記三角関数のテーラー級数展開の展開点と展開関数を演算する。
【発明の効果】
【００１４】
浮動小数点積和回路に、ＯＲ回路と、セレクタと、ＥＯＲ回路を設け、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）の演算を定義する第1の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）の演算を定義する第２の三角関数演算補助命令とにより、又は、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］）＜＜６３）の演算を定義する第３の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））の演算を定義する第４の三角関数演算補助命令とにより、三角関数のテーラー級数展開の展開点と展開関数を演算するため、命令数を削減でき、且つ高速な演算が可能となる。
【図面の簡単な説明】
【００１５】
【図１】本発明の演算処理装置の第１の実施の形態の回路図である。
【図２】図１に使用される演算補助命令の説明図である。
【図３】図２の演算補助命令２の演算処理の説明図である。
【図４】図２の演算補助命令３の演算処理の説明図である。
【図５】三角関数のテーラー級数の説明図である。
【図６】図５のテーラー級数演算の説明図である。
【図７】第１の実施の形態の三角関数演算補助命令を使用したｓｉｎ関数演算の前処理の命令列の説明図である。
【図８】図７の第1の実施の形態の命令列と、演算内容の説明図である。
【図９】図１の係数テーブルセットの一実施の形態の構成図である。
【図１０】アッセンブラ記述による従来の後処理の命令列と、本実施の形態による後処理の命令列との説明図である。
【図１１】アセンブラ記述のよるオペレーションコードと、演算内容との関係図である。
【図１２】テーラー級数演算順序の説明図である。
【図１３】ｎｏｎ−ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｉｅ  Ｄａｔａ  ｓｔｒｅａｍ）の場合の命令数の比較図である。
【図１４】ｎｏｎ−ＳＩＭＤの場合の演算スループットの比較図である。
【図１５】ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｉｅ  Ｄａｔａ  ｓｔｒｅａｍ）の場合の命令数の比較図である。
【図１６】ＳＩＭＤの場合の演算スループットの比較図である。
【図１７】本発明の演算処理装置の第２の実施の形態の回路図である。
【図１８】図１７に使用される演算補助命令の説明図である。
【図１９】図１７の三角関数のテーラー級数の説明図である。
【図２０】第２の実施の形態の三角関数演算補助命令を使用したｓｉｎ関数演算の前処理の命令列の説明図である。
【図２１】図２０の第２の実施の形態の命令列と、演算内容の説明図である。
【図２２】従来の三角関数のテーラー級数展開の説明図である。
【図２３】従来の展開点、展開関数の決定処理の説明図である。
【発明を実施するための形態】
【００１６】
以下、実施の形態の例を、演算処理装置の第１の実施の形態、前処理の説明、後処理の説明、演算処理装置の第２の実施の形態、他の実施の形態の順で説明するが、開示の演算処理装置は、この実施の形態に限られない。
【００１７】
（演算処理装置の第１の実施の形態）
図１は、本発明の演算処理装置の第１の実施の形態の回路図、図２は、図１に使用される演算補助命令の説明図、図３、図４は、その演算補助命令の演算処理の説明図である。
【００１８】
図１に示すように、命令種別コード２００に、図２に示す三角関数のテーラー級数演算実行前の、テーラー級数展開関数の決定と、その展開関数への入力引数の算出処理（前処理工程）を行う命令として、専用の三角関数演算補助命令を設けた。
【００１９】
図２では、ｓｉｎ関数のアッセンブラ命令の例を示し、三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ）と、三角関数演算補助命令３（ｆｔｒｉｓｓｅｌｄ）とが、前工程の補助命令であり、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）が、後述する後工程の補助命令である。
【００２０】
三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ）は、被演算対象であるオペランドフィールドに、＜積和演算の積演算の一方のレジスタ番号：ｒｓ１＞，＜積和演算の積演算の他方のレジスタ番号：ｒｓ２＞、＜積和演算の演算結果の出力レジスタ番号：ｒｄ＞を定義する。
【００２１】
そして、三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ）は、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）を演算する命令である。即ち、図３に示すように、レジスタｒｓ１の値を二乗し、レジスタｒｓ２の「０」ビット目のデータｒｓ［０］を、６３ビット左シフトし（最上位までシフトし）、レジスタｒｓ１の二乗の６３ビット目と、６３ビットシフトしたｒｓ２［０］とのＯＲをＯＲ回路１８８で演算し、ｒｓ１の二乗の値（６４ビット）の６３ビット目を、ＯＲ演算結果で置き換え、出力レジスタｒｄに格納する演算を行う。
【００２２】
一方、三角関数演算補助命令３（ｆｔｒｉｓｓｅｌｄ）は、オペランドフィールドに、＜積和演算の積演算の一方のレジスタ番号：ｒｓ１＞，＜積和演算の積演算の他方のレジスタ番号：ｒｓ２＞、＜積和演算の演算結果の出力レジスタ番号：ｒｄ＞を定義する。
【００２３】
そして、三角関数演算補助命令３（ｆｔｒｉｓｓｅｌｄ）は、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）を演算する命令である。即ち、図４に示すように、レジスタｒｓ２の「０」ビット目の値ｒｓ２［０］で、セレクタ１８４を選択する。セレクタ１８４は、値「１．０」（６４ビット）と、レジスタｒｓ１のデータ（６４ビット）が入力され、ｒｓ２［０］＝１なら、値「１．０」を、ｒｓ２［０］＝０なら、レジスタｒｓ１のデータを選択する。そして、セレクタ１８４の出力の６３ビット目の値と、レジスタｒｓ２の「１」ビット目の値ｒｓ２［１］のＥＯＲを、ＥＯＲ回路１８６で演算し、セレクタ１８４の出力の６３ビット目を、ＥＯＲ演算結果で置き換え、出力レジスタｒｄに格納する演算を行う。
【００２４】
更に、後工程で使用する三角関数演算補助命令１（ｆｔｒｉｍｍｄｄｄ）は、オペランドフィールドに、＜積和演算の積演算の一方のレジスタ番号：ｒｓ１＞，＜積和演算の積演算の他方のレジスタ番号：ｒｓ２＞、＜テーラー級数の次数番号：ｉｎｄｅｘ＞，＜積和演算の演算結果の出力レジスタ番号：ｒｄ＞を定義する。
【００２５】
そして、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）は、ｒｄ＝（（ｒｓ１＊ｆａｂｓ（ｒｓ２）＋Ｔ［ｒｓ２［６３］］［ｉｎｄｅｘ］）を実行する命令である。後述するように、この演算補助命令は、Ｔ［ｒｓ［６３］］で決定された展開関数のｉｎｄｅｘで指定される次数のテーラー級数係数を、テーブルから引き出し、レジスタｒｓ１に、レジスタｒｓ２の絶対値（ｆａｂｓ（ｒｓ２））を乗じた結果と、加算する演算を行う。
【００２６】
図１に戻り、演算処理装置１は、メモリ（メインメモリ）１１０と、メインメモリ１１０のデータの一部を記憶するキャッシュメモリ１２０と、リネーミングレジスタ１３０と、レジスタファイル１４０と、バイパスデータ１５０と、マルチプレクサ１５２〜１５６と、浮動小数点積和演算器１００とを有する。
【００２７】
レジスタファイル１４０は、浮動小数点積和演算器１００が、演算を実行するときに使用する全てのレジスタを備えている。リネーミングレジスタ１３０は、オペランドデータの逆依存と出力依存を解消するために設けられている。バイパスデータ１５０は、演算処理装置１の命令パイプラインにおいて、データハザードを解消するためのバイパシング（ｂｙｐａｓｓｉｎｇ）で使用されるデータ（演算結果データ）である。リネーミングレジスタ１３０のエントリに格納されているレジスタ値は、リタイア（ｒｅｔｉｒｅ）時に、レジスタファイル１４０に移される。
【００２８】
係数テーブルセット（ＲＯＭ）１６０、セレクタ１７０，１７２、一入力反転型ＡＮＤ回路（一入力反転型論理積演算回路）１７４は、後述する後処理で使用される。係数テーブルセット１６０は、図９にて詳述するテーラー級数の各次数の係数を格納する。この係数テーブルセット１６０は、次数を指定するｉｎｄｅｘと、決定された展開関数で、セレクタ１７０より、対応する展開関数の次数のテーラー級数の係数が、読み出さられる。
【００２９】
セレクタ１７２は、前述の三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）で操作され、セレクタ１７０の出力か、レジスタｒｓ３のいずれかを出力する。一入力反転型ＡＮＤ回路１７４は、後述する後処理で使用され、前述の三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）のフラグを反転し、反転出力とレジスタｒｓ２の６３ビット目ｒｓ２［６３］とのＡＮＤを演算する。
【００３０】
セレクタ１８０は、前述の三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ）で操作され、セレクタ１７２の出力か、値「１．０」かのいずれかを、浮動小数点積和演算器１００の和入力に、出力する。セレクタ１８２は、前述の三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ）で操作され、レジスタｒｓ２の出力か、レジスタｒｓ１かのいずれかを、浮動小数点積和演算器１００の積入力に、出力する。
【００３１】
セレクタ１８４は、図４で説明したように、前述の三角関数演算補助命令３（ｆｔｒｉｓｓｅｌｄ）で操作され、値「１．０」（６４ビット）と、レジスタｒｓ１のデータ（６４ビット）が入力され、レジスタｒｓ２の「０」ビット目の値ｒｓ２［０］で、いずれかを選択する。ＥＯＲ回路１８６は、セレクタ１８４の出力の６３ビット目の値と、レジスタｒｓ２の「１」ビット目の値ｒｓ２［１］のＥＯＲを、ＥＯＲ回路１８６で演算する。
【００３２】
ＯＲ回路１８８は、図３で説明したように、浮動小数点積和演算器１００が演算したレジスタｒｓ１の二乗の６３ビット目と、６３ビットシフトしたｒｓ［０］とのＯＲを演算する。セレクタ１９０は、浮動小数点積和演算器１００が演算したデータの６３ビット目の値か、ＯＲ回路１８８の出力かのいずれかを選択する。セレクタ１９２は、前述の三角関数演算補助命令３（ｆｔｒｉｓｓｅｌｄ）で操作され、浮動小数点積和演算器１００の出力か、セレクタ１８４の出力かのいずれかを出力する。
【００３３】
この演算処理装置１は、通常の構成であるメモリ（メインメモリ）１１０と、メインメモリ１１０のデータの一部を記憶するキャッシュメモリ１２０と、リネーミングレジスタ１３０と、レジスタファイル１４０と、バイパスデータ１５０と、マルチプレクサ１５２〜１５６と、浮動小数点積和演算器１００とを有する。
【００３４】
これに加え、前処理のため、セレクタ１８０，１８２，１８４，１９０，１９２、ＥＯＲ回路１８６、ＯＲ回路１８８とを有する。又、後処理のため、係数テーブルセット１６０、セレクタ１７０，１７２、ＡＮＤ回路１７４とを有する。
【００３５】
（前処理の説明）
図５は、テーラー級数の説明図、図６は、テーラー級数演算の説明図、図７は、本実施の形態の三角関数演算補助命令を使用したｓｉｎ関数演算のための前処理の命令列の説明図、図８は、図７の本実施の形態の命令列と、演算内容の説明図である。
【００３６】
テーラー級数演算実行の前処理は、テーラー級数演算が、高次で収束するように、入力引数近傍のテーラー級数演算の展開点の決定し、その展開点で級数展開したときのテーラー級数展開関数、およびテーラー級数係数を決定する。
【００３７】
先ず、図５により、テーラー級数展開式を説明する。図２３でも説明したように、ｓｉｎ関数のテーラー級数展開式は、ｙ（＝ｘ−ｘ０）の奇関数式（ｙ（2ｎ＋1））で表される。一方、ｃｏｓ関数のテーラー級数展開式は、ｙ（＝ｘ−ｘ０）の偶関数式（ｙ2ｎ）で表される。
【００３８】
ここで、テーラー級数の各次数の係数を、ａ３，・・ａ１５，ｂ２，・・ｂ１４で表すと、図６に示すように、ｓｉｎ（ｙ），ｃｏｓ（ｙ），−ｓｉｎ（ｙ），−ｃｏｓ（ｙ）のテーラー級数展開式に、共通性が現れる。即ち、偶関数の多項式（ｙ０−ａ３・ｙ２＋・・・−ａ１５・ｙ１４）に、ｙを掛けたものが、ｓｉｎ（ｙ）であり、多項式（ｙ０−ｂ２・ｙ２＋・・・−ｂ１４・ｙ１４）に、１．０を掛けたものが、ｃｏｓ（ｙ）である。同様に、多項式（ｙ０−ａ３・ｙ２＋・・・−ａ１５・ｙ１４）に、−ｙを掛けたものが、−ｓｉｎ（ｙ）であり、多項式（ｙ０−ｂ２・ｙ２＋・・・−ｂ１４・ｙ１４）に、−１．０を掛けたものが、−ｃｏｓ（ｙ）である。
【００３９】
この関係を利用して、後処理のテーラー級数演算を高速化するため、前処理では、展開点の演算、テーラー級数展開関数の決定の他に、「ｙ」、「１．０」を選択的に、後処理に与える。
【００４０】
図７は、従来技術によるｓｉｎ関数演算のアセンブラ記述のよる前処理の命令列と、本実施の形態によるアセンブラ記述のよるｓｉｎ関数演算の前処理の命令列とを対比した図である。図７から明らかなように、本実施の形態では、三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ），３（ｆｔｒｉｓｓｅｌｄ）を用いることにより、従来の命令列のロード、シフト命令、マスク命令等を削除でき、転送処理やシフト演算、マスク演算などの複雑な処理を省け、高速に演算できる。
【００４１】
図８は、アセンブラ記述のよるオペレーションコードと、演算内容との関係図であり、図１の構成を使用して、具体的に説明する。ロード命令（ｌｄｄｆ）で、ｘに、入力引数ｍｅｍを、ロードする。次に、積和命令ｆｍａｄｄｄ（ｆｌｏａｔｉｎｇ  ｍｕｌｔｉｐｙ  ａｄｄ  ｄｏｕｂｌｅ）により、ｂｑｘ＝（（ｘ＊ｒｐ２）＋ｂｇ）を演算する。
【００４２】
ここで、レジスタｒｐ２には、１／（π／２）がセットされており、レジスタｂｇには、値「１．５＊２＊＊５２」がセットさている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｘと、ｒｐ２との積を演算し、この積とｂｇの和を演算する。
【００４３】
これにより、展開関数と符号を決定する商ｑｘ＝ｉｎｔ（ｘ／（π／２））が、演算結果ｂｑｘの仮数部の下位５１ビットに得られる。又、値「１．５＊２＊＊５２」を加算する意味は、５２乗の値を加算すると、小数点以下が四捨五入され、所謂、丸め処理を実行される。
【００４４】
次に、差命令ｆｓｕｂｄ（ｆｌｏａｔｉｎｇ  ｓｕｂｓｔｒａｃｔ  ｄｏｕｂｌｅ）により、ｑｘ＝ｂｑｘ−ｂｇを演算する。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｂｑｘから、ｂｇを引き算し、差ｑｘを演算する。このｂｇを足して、引くことにより、小数点以下の四捨五入を行う。
【００４５】
次に、積和命令ｆｎｍｓｕｂｄ（ｆｌｏａｔｉｎｇ  ｎｅｇａｔｉｖｅ  ｍｕｌｔｉｐｌｙ  ｓｕｂｔｒａｃｔ  ｄｏｕｂｌｅ）により、ｙ＝ｘ−（ｑｘ＊ｐ２ａ）を演算する。レジスタｐ２ａには、「π／２」の上位の値がセットされている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｑｘと、ｐ２ａとの積を演算し、レジスタに格納した後、この積とｘを読み出し、差を演算する。
【００４６】
次に、積和命令ｆｎｍｓｕｂｄにより、ｙ＝ｙ−（ｑｘ＊ｐ２ｂ）を演算する。レジスタｐ２ｂには、「π／２」の下位の値がセットされている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｑｘと、ｐ２ｂとの積を演算し、レジスタに格納した後、この積とｙを読み出し、差を演算する。
【００４７】
これにより、テーラー級数演算の（ｘ−ｘ０）が、ｙとして得られる。ここで、２つの積和命令を用いているのは、π／２の値を、上位と下位に分け、演算し、小数点以下の精度を高めるためである。
【００４８】
次に、三角関数演算補助命令２（ｆｔｒｉｓｍｕｌｄ）により、ｙ２ｔ＝（ｙ＊ｙ）｜（ｂｑｘ［0］＜＜63）を演算する。即ち、命令種別コード２００の「ｆｔｒｉｓｍｕｌｄ」により、通常、ｒｓ２を選択するセレクタ１８２を切り替え、セレクタ１８２からｒｓ１を出力する。このため、浮動小数点積和演算器１００は、レジスタｒｓ１の値ｙを二乗する。そして、ＯＲ回路１８８は、レジスタｒｓ２の「０」ビット目のデータｒｓ２［０］が入力され、且つ演算器１００からの出力ｙ＊＊２の６３ビット目が入力される。そして、セレクタ１９０を介し、演算器１００の出力の６３ビット目に出力する。
【００４９】
即ち、図３で示したように、左シフトし（最上位までシフトし）、レジスタｒｓ１の二乗の６３ビット目と、６３ビットシフトしたｒｓ２［０］とのＯＲをＯＲ回路１８８で演算し、ｒｓ１の二乗の値（６４ビット）の６３ビット目を、ＯＲ演算結果で置き換え、セレクタ１９２を介し、レジスタファイル１４０の出力レジスタｒｄに格納する演算を行う。
【００５０】
図４で説明したように、ｂｑｘの仮数部下位５１ビットは、商ｑｘであり、ｂｑｘの最下位ビットｂｑｘ［０］は、テーラー展開関数が、ｓｉｎ関数か、ｃｏｓ関数かを示すため、ｙ２ｔは、６３ビット目が、テーラー展開関数の種類（ｓｉｎ又はｃｏｓ）を示し、６２〜０ビットが、図６で説明したｙ（ｘ−ｘ０）の二乗データとなる。
【００５１】
次に、三角関数演算補助命令３（ｆｔｒｉｓｓｅｌｄ）により、ｒｄ＝（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）を演算する。ここでは、ｙｓ＝（ｂｑｘ［０］）？１．０：ｙ）＾（ｂｑｘ［１］＜＜６３）を演算する。
【００５２】
図４にも示したように、レジスタｒｓ２の「０」ビット目の値ｒｓ２［０］で、セレクタ１８４を選択する。セレクタ１８４は、値「１．０」（６４ビット）と、レジスタｒｓ１のデータ（６４ビット）が入力され、ｒｓ２［０］（ｂｑｘ［０］）＝１なら、値「１．０」を、ｒｓ２［０］（ｂｑｘ［０］）＝０なら、レジスタｒｓ１のデータｙを選択する。そして、セレクタ１８４の出力の６３ビット目の値と、レジスタｒｓ２の「１」ビット目の値ｒｓ２［１］（ｂｑｘ［１］）のＥＯＲを、ＥＯＲ回路１８６で演算し、セレクタ１８４の出力の６３ビット目を、ＥＯＲ演算結果で置き換え、セレクタ１９２を介し、出力レジスタｒｄに格納する演算を行う。
【００５３】
この出力ｙｓの６３ビット目は、テーラー展開関数の符号（＋又は−）を示し、６２〜０ビットが、図６で説明したｙ（ｘ−ｘ０）又は「１．０」となる。
【００５４】
このようにして、三角関数演算補助命令２，３と、これにより動作するセレクタ１８０，１８２，１８４，１９０，１９２、ＥＯＲ回路１８６、ＯＲ回路１８８とを設けることにより、命令数を少なくして、テーラー級数展開関数の決定の他に、テーラー級数演算の「ｙ」、「１．０」を決定できる。このため、前処理を高速化できる。
【００５５】
（後処理の説明）
次に、三角関数演算補助命令１を用いた後処理を説明する。図９は、図１の係数テーブルセットの一実施の形態の構成図である。図１０は、アッセンブラ記述による従来の後処理の命令列と、本実施の形態による後処理の命令列との説明図、図１１は、アセンブラ記述のよるオペレーションコードと、演算内容との関係図である。
【００５６】
図９に示すように、係数テーブルセット１６０は、ｓｉｎ関数のテーラー級数の１次〜１５次の係数を格納したｓｉｎ関数部１６０−１と、ｃｏｓ関数のテーラー級数の１次〜１５次の係数を格納したｃｏｓ関数部１６０−２とを有する。
【００５７】
係数テーブルセット１６０に接続されたセレクタ１７０が、係数テーブルのセット番号（図４のｂｑｘ［０］、ｙ２ｔ［６３］）により、ｓｉｎ関数又はｃｏｓ関数を選択する。又、テーラー級数の次数番号を示すｉｎｄｅｘにより、係数テーブルセット１６０の次数が指定される。
【００５８】
図１０は、従来技術によるｓｉｎ関数演算のアセンブラ記述のよる後処理の命令列と、本実施の形態によるアセンブラ記述のよるｓｉｎ関数演算の後処理の命令列とを対比した図である。図１０から明らかなように、本実施の形態では、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）を用いることにより、従来の命令列のロード命令等を削除でき、転送処理やシフト演算、マスク演算などの複雑な処理を省け、高速に演算できる。
【００５９】
図１１は、アセンブラ記述のよるオペレーションコードと、演算内容との関係図であり、図１２は、図１１の演算順序の説明図である。図１２に示すように、演算順序は、次数の高いものを先に演算して、順次、その演算結果を用いて、次数の低いものを加算していく。即ち、次数の高い係数（１／１５！）を呼び出し，次に、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）により、（（前回の次数の係数＊ｙ２）＋今回の次数の係数）を演算する。
【００６０】
図１１の演算処理を、図１，図９の構成を使用して、具体的に説明する。三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）により、ｒｄ＝（（ｒｓ１＊ｆａｂｓ（ｒｓ２）＋Ｔ［ｒｓ２［６３］］［ｉｎｄｅｘ］）を実行する。先ず、ｒｓ1＝ｃｏ＝０．０とし、ｒｓ２［６３］＝ｙ２ｔ［６３］、ｉｎｄｅｘ＝７（次数１５）で、係数テーブルセット１６０をアクセスし、ｓｉｎ関数の次数１５の係数（１／１５！）を取り出し、セレクタ１７２を介し、演算器１００に入力させる。  
【００６１】
演算器１００は、ｒｓ1＝ｃｏ＝０．０であるから、演算結果ｒは、図１２のように、ｒ＝１／１５！となる。
【００６２】
次に、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）とオペレーションコードｒ、ｙ２ｔ、６、ｒを指定する。演算補助命令１により、Ｔ［ｙ２ｔ［６３］］で決定された展開関数のｉｎｄｅｘ＝６で指定される次数のテーラー級数係数を、セレクタ１７０，１７２を介し、テーブル１６０から引き出す。
【００６３】
一方、ｒｓ２＝ｙ２ｔの６３ビット目は、ＡＮＤ回路１７４に入力する。ＡＮＤ回路１７４の反転入力には、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）のフラグ「１」が入力されているため、ＡＮＤ回路１７４の出力は、「０」である。このため、ｒｓ２＝ｙ２ｔの６３ビット目は、「０」になり、セレクタ１８２を介し、演算器１００に入力する。一方、レジスタｒｓ１には、前述のｒが格納されているため、演算器１００は、（ｒ＝ｒ＊ｙ２ｔ［６２：０］＋係数）の演算を行い、レジスタファイル１４０に、ｒとして格納する。
【００６４】
以下、同様に、次数を、順次、５，４，３，２，１，０と下げ、三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）とオペレーションコードにより、同様に演算を行う。これにより、図１２の最後段の演算結果ｒが得られる。
【００６５】
次に、積命令（ｆｍｕｌｄ：ｍｕｌｔｉｐｌｙ）とｒ、ｒｓ２＝ｙｓ、ｒを指定する。この積命令で、演算器１００は、ｒ＝ｒ＊ｙｓを演算する。ｙｓは、ｙ又は１．０又は−ｙ又は−１．０であるため、演算器１００が計算するｒ＝ｒ＊ｙｓは、図６で説明したテーラー展開級数となる。
【００６６】
更に、ストア命令（ｓｔｄｆ）により、この結果ｒを、レジスタファイル１４０のエントリｍｅｍにストアする。
【００６７】
このようにして、三角関数演算補助命令１と、これにより動作する係数テーブルセット１６０、セレクタ１７０，１７２，ＡＮＤ回路１７４とを設けることにより、命令数を少なくして、テーラー級数展開関数の演算が可能となり、後処理を高速化できる。
【００６８】
次に、本実施の形態と従来技術との命令数と、性能とを比較する。図１３は、ｎｏｎ−ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｉｅ  Ｄａｔａ  ｓｔｒｅａｍ）の場合の命令数の比較図、図１４は、ｎｏｎ−ＳＩＭＤの場合の演算スループットの比較図である。
【００６９】
図１３に示すように、従来技術では、ロード命令（ｌｄ）、ストア命令（ｓｔ）、整数演算命令（Ｉｎｔ）が多いが、本実施の形態では、ロード命令（ｌｄ）、ストア命令（ｓｔ）、整数演算命令（Ｉｎｔ）が殆どなくなり、命令数が、半分以下（４０％）に減少する。
【００７０】
又、図１４に示すように、三角関数演算のみをベクトル演算する場合に、演算スループットが、従来に比し、１．４倍に向上する。他の演算と並行して、三角関数の演算を実行する場合、ｌｄ／ｓｔ  ｐｉｐｅ（メモリアクセス命令であるロード命令／ストア命令のパイプライン）を消費しないので、更に、演算スループットを向上できる。しかも、命令数が少なく、浮動小数点演算命令に限定しているため、ソフトウェアパイプライニングで、適切な命令スケジューリングを実施しやすくなり、性能向上につながる。
【００７１】
図１５は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｉｅ  Ｄａｔａ  ｓｔｒｅａｍ）の場合の命令数の比較図、図１６は、ＳＩＭＤの場合の演算スループットの比較図である。
【００７２】
図１５に示すように、従来技術では、ロード命令（ｌｄ）、ストア命令（ｓｔ）、整数演算命令（Ｉｎｔ）が多いが、本実施の形態では、ロード命令（ｌｄ）、ストア命令（ｓｔ）、整数演算命令（Ｉｎｔ）が殆どなくなり、命令数が、約１／４（２７％）に減少する。整数演算命令を含まないため、ＳＩＭＤ化に適している。
【００７３】
又、図１５に示すように、三角関数演算のみをベクトル演算する場合に、演算スループットが、従来に比し、２．１倍に向上する。
【００７４】
（演算処理装置の第２の実施の形態）
図１７は、本発明の演算処理装置の第２の実施の形態の回路図、図１８は、図１７に使用されるｃｏｓ関数演算のテーラー級数の展開点を、展開関数の説明図、図１９は、図１７のｃｏｓ演算補助命令の説明図、図２０、図２１は、その演算補助命令の演算処理の説明図である。
【００７５】
図１７において、図１と同一のものは、同一に記号で示してある。図１との相違点は、ＯＲ回路１９０の入力段に、反転回路１９６を設け、ＥＯＲ回路１８６の入力段に、ＥＯＲ回路１９４を設けた点である。又、図１７に示すように、命令種別コード２００に、図１８に示す三角関数（ｃｏｓ関数）のテーラー級数演算実行前の、テーラー級数展開関数の決定と、その展開関数への入力引数の算出処理（前処理工程）を行う命令として、専用の三角関数演算補助命令を設けた。
【００７６】
更に、図１８において、図２３のｓｉｎ関数の場合と、展開点の定義、展開関数のテーラー級数式は同じであるが、商ｑの剰余の値に対応する展開関数が、図２３とは、異なる。
【００７７】
図１９では、ｃｏｓ関数のアッセンブラ命令の例を示し、三角関数演算補助命令４（ｆｔｒｉｃｍｕｌｄ）と、三角関数演算補助命令５（ｆｔｒｉｃｓｅｌｄ）とを、前工程の補助命令として設けた。尚、図２の三角関数演算補助命令１（ｆｔｒｉｍａｄｄｄ）は、同様に、後工程の補助命令として、使用する。
【００７８】
三角関数演算補助命令４（ｆｔｒｉｃｍｕｌｄ）は、オペランドフィールドに、＜積和演算の積演算の一方のレジスタ番号：ｒｓ１＞，＜積和演算の積演算の他方のレジスタ番号：ｒｓ２＞、＜積和演算の演算結果の出力レジスタ番号：ｒｄ＞を定義する。
【００７９】
そして、三角関数演算補助命令４（ｆｔｒｉｃｍｕｌｄ）は、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］＜＜６３）を演算する命令である。即ち、図３と同様に、レジスタｒｓ１の値を二乗し、レジスタｒｓ２の「０」ビット目のデータｒｓ２［０］のビットワイズノット（反転回路１９６による）を、６３ビット左シフトし（最上位までシフトし）、レジスタｒｓ１の二乗の６３ビット目と、６３ビットシフトしたｒｓ２［０］とのＯＲを演算し、ｒｓ１の二乗の値（６４ビット）の６３ビット目を、ＯＲ演算結果で置き換え、出力レジスタｒｄに格納する演算を行う。
【００８０】
一方、三角関数演算補助命令５（ｆｔｒｉｃｓｅｌｄ）は、オペランドフィールドに、＜積和演算の積演算の一方のレジスタ番号：ｒｓ１＞，＜積和演算の積演算の他方のレジスタ番号：ｒｓ２＞、＜積和演算の演算結果の出力レジスタ番号：ｒｄ＞を定義する。
【００８１】
そして、三角関数演算補助命令５（ｆｔｒｉｃｓｅｌｄ）は、ｒｄ＝（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））を演算する命令である。即ち、図４と同様に、レジスタｒｓ２の「０」ビット目の値ｒｓ２［０］で、セレクタ１８４を選択する。セレクタ１８４は、値「１．０」（６４ビット）と、レジスタｒｓ１のデータ（６４ビット）が入力され、ｒｓ２［０］＝０なら、値「１．０」を、ｒｓ２［０］＝１なら、レジスタｒｓ１のデータを選択する。そして、レジスタｒｓ２の「１」、「０」ビット目の値ｒｓ２［１］、ｒｓ２［０］のＥＯＲを、ＥＯＲ回路１９４で演算する。更に、セレクタ１８４の出力の６３ビット目の値と、ＥＯＲ回路１９４の出力とのＥＯＲを、ＥＯＲ回路１８６で演算し、セレクタ１８４の出力の６３ビット目を、ＥＯＲ演算結果で置き換え、出力レジスタｒｄに格納する演算を行う。
【００８２】
図２０は、従来技術によるｃｏｓ関数演算のアセンブラ記述のよる前処理の命令列と、本実施の形態によるアセンブラ記述のよるｃｏｓ関数演算の前処理の命令列とを対比した図である。図２０から明らかなように、本実施の形態では、三角関数演算補助命令４（ｆｔｒｉｃｍｕｌｄ），５（ｆｔｒｉｃｓｅｌｄ）を用いることにより、従来の命令列のロード、シフト命令、マスク命令等を削除でき、転送処理やシフト演算、マスク演算などの複雑な処理を省け、高速に演算できる。
【００８３】
図２１は、アセンブラ記述のよるオペレーションコードと、演算内容との関係図であり、図１７の構成を使用して、具体的に説明する。図８のｓｉｎ関数と同様に、ロード命令（ｌｄｄｆ）で、ｘに、入力引数ｍｅｍを、ロードする。
【００８４】
次に、積和命令（ｆｍａｄｄｄ：ｍｕｌｔｉｐｙ＆ａｄｄ）により、ｂｑｘ＝（（ｘ＊ｒｐ２）＋ｂｇ）を演算する。ここで、レジスタｒｐ２には、１／（π／２）がセットされており、レジスタｂｇには、値「１．５＊２＊＊５２」がセットさている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｘと、ｒｐ２との積を演算し、この積とｂｇの和を演算する。
【００８５】
これにより、展開関数と符号を決定する商ｑｘ＝ｉｎｔ（ｘ／（π／２））が，演算結果ｂｑｘの仮数部の下位５１ビットに得られる。又、値「１．５＊２＊＊５２」を加算する意味は、５２乗の値を加算すると、小数点以下が四捨五入され、所謂、丸め処理を実行される。
【００８６】
次に、差命令（ｆｓｕｂｄ：ｓｕｂｓｔｒａｃｔ）により、ｑｘ＝ｂｑｘ−ｂｇを演算する。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｂｇｘから、ｂｇを引き算し、差ｑｘを演算する。このｂｇを足して、引くことにより、四捨五入を行う。
【００８７】
次に、積和命令（ｆｎｍｓｕｂｄ：ｍｕｌｔｉｐｌｙ＆ｓｕｂｔｒａｃｔ）により、ｙ＝ｘ−（ｑｘ＊ｐ２ａ）を演算する。レジスタｐ２ａには、「π／２」の上位の値がセットされている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｑｘと、ｐ２ａとの積を演算し、レジスタに格納した後、この積とｘを読み出し、差を演算する。
【００８８】
次に、積和命令（ｆｎｍｓｕｂｄ：ｍｕｌｔｉｐｌｙ＆ｓｕｂｔｒａｃｔ）により、ｙ＝ｙ−（ｑｘ＊ｐ２ｂ）を演算する。レジスタｐ２ｂには、「π／２」の下位の値がセットされている。浮動小数点積和演算器１００は、この命令により、レジスタファイル１４０のｑｘと、ｐ２ｂとの積を演算し、レジスタに格納した後、この積とｙを読み出し、差を演算する。
【００８９】
これにより、テーラー級数演算の（ｘ−ｘ０）が、ｙとして得られる。ここで、２つの積和命令を用いているのは、π／２の値を、上位と下位に分け、演算し、小数点以下の精度を高めるためである。
【００９０】
ここまでは、図８のｓｉｎ関数と同一の演算である。次に、三角関数演算補助命令４（ｆｔｒｉｃｍｕｌｄ）により、ｙ２ｔ＝（ｙ＊ｙ）｜（〜ｂｑｘ［0］＜＜63）を演算する。即ち、命令種別コード２００の「ｆｔｒｉｃｍｕｌｄ」により、通常、ｒｓ２を選択するセレクタ１８２を切り替え、セレクタ１８２からｒｓ１を出力する。このため、浮動小数点積和演算器１００は、レジスタｒｓ１の値ｙを二乗する。
【００９１】
そして、ＯＲ回路１８８は、レジスタｒｓ２の「０」ビット目のデータｒｓ２［０］を反転回路１９６で反転した（ビットワイズノット）ビットが入力され、且つ演算器１００からの出力ｙ＊＊２の６３ビット目が入力される。そして、セレクタ１９０を介し、演算器１００の出力の６３ビット目に出力する。
【００９２】
即ち、図３で示したように、左シフトし（最上位までシフトし）、レジスタｒｓ１の二乗の６３ビット目と、６３ビットシフトし、反転したｒｓ［０］とのＯＲをＯＲ回路１８８で演算し、ｒｓ１の二乗の値（６４ビット）の６３ビット目を、ＯＲ演算結果で置き換え、セレクタ１９２を介し、レジスタファイル１４０の出力レジスタｒｄに格納する演算を行う。
【００９３】
図４で説明したように、ｂｑｘの仮数部下位５１ビットは、商ｑｘであり、ｂｑｘの最下位ビットｂｑｘ［０］は、テーラー展開関数が、ｓｉｎ関数か、ｃｏｓ関数かを示すため、ｙ２ｔは、６３ビット目が、テーラー展開関数の種類（ｓｉｎ又はｃｏｓ）を示し、６２〜０ビットが、図６で説明したｙ（ｘ−ｘ０）の二乗データとなる。
【００９４】
次に、三角関数演算補助命令５（ｆｔｒｉｃｓｅｌｄ）により、ｒｄ＝（（ｒｓ２［０］＝ｂｑｘ［0］）？ｒｓ１＝ｙ：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３）を演算する。ここでは、ｙｓ＝（（ｂｑｘ［０］）？ｙ：１．０）＾（（ｂｑｘ［１］＾ｂｑｘ［０］）＜＜６３）を演算する。
【００９５】
図４にも示したように、レジスタｒｓ２の「０」ビット目の値ｒｓ２［０］で、セレクタ１８４を選択する。セレクタ１８４は、値「１．０」（６４ビット）と、レジスタｒｓ１のデータ（６４ビット）が入力され、ｒｓ２［０］（ｂｑｘ［０］）＝０なら、値「１．０」を、ｒｓ２［０］（ｂｑｘ［０］）＝１なら、レジスタｒｓ１のデータｙを選択する。
【００９６】
そして、レジスタｒｓ２の「１」、「０」ビット目の値ｒｓ２［１］（ｂｑｘ［１］）、ｒｓ２［０］（ｂｑｘ［０］）のＥＯＲを、ＥＯＲ回路１９４で演算する。更に、セレクタ１８４の出力のセレクタ１８４の出力の６３ビット目の値と、ＥＯＲ回路１９４の出力とのＥＯＲを、ＥＯＲ回路１８６で演算し、セレクタ１８４の出力の６３ビット目を、ＥＯＲ演算結果で置き換え、セレクタ１９２を介し、出力レジスタｒｄに格納する演算を行う。
【００９７】
この出力ｙｓの６３ビット目は、テーラー展開関数の符号（＋又は−）を示し、６２〜０ビットが、図６で説明したｙ（ｘ−ｘ０）又は「１．０」となる。尚、ｃｏｓ関数の場合、前述の反転回路１９６、ＥＯＲ回路１９４の付加で、図１８に示したような、ｑの剰余と、対応する展開関数、図６の「ｙ」、「１．０」が指定される。
【００９８】
このようにして、三角関数演算補助命令４，５と、これにより動作するセレクタ１８０，１８２，１８４，１９０，１９２、ＥＯＲ回路１８６、１９４、ＯＲ回路１８８、反転回路１９６とを設けることにより、命令数を少なくして、テーラー級数展開関数の決定の他に、テーラー級数演算の「ｙ」、「１．０」を決定できる。このため、前処理を高速化できる。
【００９９】
尚、後処理は、図9乃至図１２の実施の形態と同じである。
【０１００】
（他の実施の形態）
前述の実施の形態では、後処理も高速化する補助命令を用いているが、このような補助命令を用いない場合にも、適用できる。又、図１７の構成では、ｓｉｎ関数の演算も同様に可能であり、ｓｉｎ関数の補助命令２，３を適用し、ｓｉｎ関数とｃｏｓ関数の両方を高速化できる構成も採用できる。更に、命令列を、ＳＩＭＤで構成しても良い。
【０１０１】
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
【０１０２】
（付記１）
３つの入力ｒｓ１、ｒｓ２、ｒｓ３を受け、浮動小数点積和演算を行う浮動小数点積和回路と、浮動小数点積和回路の出力の最上位ビットと、入力ｒｓ２の最下位ビットｒｓ２［０］とのＯＲを演算するＯＲ回路と、入力ｒｓ１と、値「１．０」とのいずれかを選択するセレクタと、入力ｒｓ２の最下位から1ビット上位のビットｒｓ２［１］とセレクタの最上位ビットとのＥＯＲを計算するＥＯＲ回路とを有し、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）の演算を定義する第1の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）の演算を定義する第２の三角関数演算補助命令とにより、前記三角関数のテーラー級数展開の展開点と展開関数を演算することを特徴とする演算処理装置。
【０１０３】
（付記２）
３つの入力ｒｓ１、ｒｓ２、ｒｓ３を受け、浮動小数点積和演算を行う浮動小数点積和回路と、浮動小数点積和回路の出力の最上位ビットと、入力ｒｓ２の最下位ビットｒｓ２［０］の反転信号とのＯＲを演算するＯＲ回路と、入力ｒｓ１と、値「１．０」とのいずれかを選択するセレクタと、入力ｒｓ２の最下位から1ビット上位のビットｒｓ２［１］と前記最下位ビットｒｓ２［０］とのＥＯＲを演算する第1のＥＯＲ回路と、前記セレクタの最上位ビットと前記第1のＥＯＲ回路の出力とのＥＯＲを演算する第２のＥＯＲ回路とを有し、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］）＜＜６３）の演算を定義する第３の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））の演算を定義する第４の三角関数演算補助命令とにより、前記三角関数のテーラー級数展開の展開点と展開関数を演算することを特徴とする演算処理装置。
【０１０４】
（付記３）
前記三角関数が、正弦関数（ｓｉｎ）であることを特徴とする付記１の演算処理装置。
【０１０５】
（付記４）
前記三角関数が、余弦関数（ｃｏｓ）であることを特徴とする付記２の演算処理装置。
【０１０６】
（付記５）
前記入力ｒｓ１と前記入力ｒｓ２を選択し、前記浮動小数点積和演算器に、出力する第２のセレクタを更に有することを特徴とする付記１の演算処理装置。
【０１０７】
（付記６）
前記入力ｒｓ１と前記入力ｒｓ２を選択し、前記浮動小数点積和演算器に、出力する第２のセレクタを更に有することを特徴とする付記２の演算処理装置。
【０１０８】
（付記７）
前記三角関数のテーラー級数の各次数の係数を格納する係数テーブルと、前記演算された展開関数により、前記係数テーブルの係数を読み出す回路とを有し、前記浮動小数点演算器が、前記演算された展開点と、前記読み出された係数とを用いて、前記三角関数のテーラー級数演算を実行することを特徴とする付記１の演算処理装置。
【０１０９】
（付記８）
前記三角関数のテーラー級数の各次数の係数を格納する係数テーブルと、前記演算された展開関数により、前記係数テーブルの係数を読み出す回路とを有し、前記浮動小数点演算器が、前記演算された展開点と、前記読み出された係数とを用いて、前記三角関数のテーラー級数演算を実行することを特徴とする付記２の演算処理装置。
【産業上の利用可能性】
【０１１０】
浮動小数点積和回路に、ＯＲ回路と、セレクタと、ＥＯＲ回路を設け、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（ｒｓ２［０］＜＜６３）の演算を定義する第1の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？１．０：ｒｓ１）＾（ｒｓ２［１］＜＜６３）の演算を定義する第２の三角関数演算補助命令とにより、又は、ｒｄ＝（ｒｓ１＊ｒｓ１）｜（（〜ｒｓ２［０］）＜＜６３）の演算を定義する第３の三角関数演算補助命令と、ｒｄ＝（（ｒｓ２［０］）？ｒｓ１：１．０）＾（（ｒｓ２［１］＾ｒｓ２［０］）＜＜６３））の演算を定義する第４の三角関数演算補助命令とにより、三角関数のテーラー級数展開の展開点と展開関数を演算するため、命令数を削減でき、且つ高速な演算が可能となる。
【符号の説明】
【０１１１】
１００  浮動小数点積和回路
１４０  レジスタファイル
１６０  係数テーブルセット
１５２、１５４、１５６  マルチプレクサ
１７０、１７２、１８０、１８２、１８４、１９０、１９２  セレクタ
１７４  ＡＮＤ回路
１８８  ＯＲ回路
１８６、１９４  ＥＯＲ回路
２００  命令種別コード
【図１】
2011013728.tif 000003
【図２】
2011013728.tif 000004
【図３】
2011013728.tif 000005
【図４】
2011013728.tif 000006
【図５】
2011013728.tif 000007
【図６】
2011013728.tif 000008
【図７】
2011013728.tif 000009
【図８】
2011013728.tif 000010
【図９】
2011013728.tif 000011
【図１０】
2011013728.tif 000012
【図１１】
2011013728.tif 000013
【図１２】
2011013728.tif 000014
【図１３】
2011013728.tif 000015
【図１４】
2011013728.tif 000016
【図１５】
2011013728.tif 000017
【図１６】
2011013728.tif 000018
【図１７】
2011013728.tif 000019
【図１８】
2011013728.tif 000020
【図１９】
2011013728.tif 000021
【図２０】
2011013728.tif 000022
【図２１】
2011013728.tif 000023
【図２２】
2011013728.tif 000024
【図２３】
2011013728.tif 000025