(57)【要約】      （修正有）【課題】ベクトルプロセッサにおいて、回路規模の増大を抑制しつつ、飽和機能を持つ命令を高速に処理する。【解決手段】  加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６で加算処理がそれぞれ行われる時に、飽和処理部２５ａ、２６ａは、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断し、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローしている場合、その加算結果として“０ｘ７ＦＦＦＦＦＦＦ”を出力するとともに、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がアンダーフローしている場合、その加算結果として“０ｘ８０００００００”を出力する。【選択図】図２
2006171827.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル加算処理を行うベクトル加算器と、
前記ベクトル加算器に搭載され、前記ベクトル加算器にて得られた加算結果に基づいて飽和処理を行う飽和処理部とを備えることを特徴とする演算処理装置。
【請求項２】
前記飽和処理を有効化するための飽和指定フラグを格納するステータスレジスタをさらに備え、
前記飽和処理部は、前記飽和指定フラグの参照結果に基づいて飽和処理を行うことを特徴とする請求項１記載の演算処理装置。
【請求項３】
ベクトルシフト演算処理を行うベクトルシフト演算器と、
前記ベクトルシフト演算器に搭載され、前記ベクトルシフト演算器にて得られたシフト演算結果に基づいて飽和処理を行う飽和処理部とを備えることを特徴とする演算処理装置。
【請求項４】
前記飽和処理部は、前記ベクトルシフト演算器にて行われるシフト演算が算術シフトの場合、前記ベクトルシフト演算器にて得られたシフト演算結果に応じて飽和処理を無条件に実行し、前記ベクトルシフト演算器にて行われるシフト演算が論理シフトの場合、前記ベクトルシフト演算器にて得られたシフト演算結果のオーバーフローの有無に関わらず飽和処理を実行しないようにすることを特徴とする請求項３記載の演算処理装置。
【請求項５】
ベクトル乗算処理を行うベクトル乗算器と、
ベクトル加算処理を行うベクトル加算器と、
前記ベクトル加算器に搭載され、前記ベクトル加算器にて得られた加算結果に基づいて飽和処理を行う第１飽和処理部と、
ベクトルシフト演算処理を行うベクトルシフト演算器と、
前記ベクトルシフト演算器に搭載され、前記ベクトルシフト演算器にて得られたシフト結果に基づいて飽和処理を行う第２飽和処理部とを備えることを特徴とする演算処理装置。
【請求項６】
前記飽和処理部は、前記飽和処理の有無に基づいてオーバーフローフラグを前記ステータスレジスタに設定することを特徴とする請求項１から５のいずれか１項記載の演算処理装置。
【請求項７】
飽和機能が実装されていないベクトル乗算命令と、
飽和機能が実装されたベクトル加算命令と、
飽和機能が実装されたベクトルシフト命令とをコンピュータに実行させることを特徴とする演算処理プログラム。
【請求項８】
前記ベクトル加算命令の飽和機能のオン／オフを指定する命令をコンピュータに実行させることを特徴とする請求項７記載の演算処理プログラム。
【請求項９】
前記ベクトル加算命令による加算結果または前記ベクトルシフト命令によるシフト演算結果のオーバーフローの有無を検出する検出関数をコンピュータに実行させることを特徴とする請求項７または８記載の演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理プログラムに関し、特に、ＡＭＲ−ＮＢ（Ａｄａｐｔｉｖｅ  Ｍｕｌｔｉ−Ｒａｔｅ  Ｎａｒｒｏｗ  Ｂａｎｄ）コーディック（以下、ＡＭＲコーディックと称す）などに用いられるベクトルパイプラインプロセッサに適用して好適なものである。
【背景技術】
【０００２】
ＡＭＲコーディックは、３ＧＰＰ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ）の提案する音声コーディックの１つであり、人間の音声を効率的に圧縮符号化することができるという特徴があり、１６ｂｉｔ精度での飽和処理や積和演算などが頻繁に行われる。特に、ＡＭＲディコーダでコール回数が多い関数として、Ｌ_ＭＡＣ（）という積和演算関数がある。このＬ_ＭＡＣ（）関数では、Ｌ_ｍｕｌｔ（）関数とＬ_ａｄｄ（）関数を呼び出すことにより、積和演算が行われるとともに、オーバーフローの有無に応じて飽和処理が行われる。
【０００３】
図１７はＬ_ＭＡＣ（）関数のソースコードの一例を示す図、図１８は、図１７のソースコードのコンパイル例を示す図である。
図１７において、Ｌ_ＭＡＣ（）関数を実行されると、Ｌ_ｍｕｌｔ（）関数が呼び出され、通常の乗算が行われる。そして、乗算結果を左１ビットシフトしたときにオーバーフローしない時は、乗算結果の左１ビットシフトが行われ、オーバーフローする時は、オーバーフローフラグが立てられるとともに、乗算結果として飽和値が代入される。
【０００４】
次に、Ｌ_ａｄｄ（）関数が呼び出され、通常の加算が行われる。そして、加算結果がオーバーフローしているかどうかが判断され、オーバーフローしている時は、オーバーフローフラグが立てられるとともに、加算結果として飽和値が代入される。
このように、図１７のＬ_ＭＡＣ（）関数では複雑な処理が行われるため、図１７のソースコードのコンパイルすると、図１８に示すように、３６行にも及ぶ膨大な関数になる。
【０００５】
また、特許文献１には、ＭＡＣ（Ｍｕｌｔｉｐｌｙ  ａｎｄ  Ａｃｃｕｍｕｌａｔｅ）命令において、汎用レジスタＲｍとＲｎの内容をアドレスとする１６ビットオペランドを符号付きで乗算し、乗算結果の３２ビットとＭＡＣレジスタの内容とを加算し、加算結果をＭＡＣレジスタに格納するとともに、Ｓビットが１のときはＭＡＣレジスタとの加算を飽和演算とする方法が開示されている。この飽和演算においては、オーバーフローが発生すると、ＭＡＣＨレジスタのＬＳＢが１にセットされ、加算結果が負の方向にオーバーフローした時は、Ｈ”８０００００００（最小値）がＭＡＣレジスタに格納され、加算結果が正の方向にオーバーフローした時は、Ｈ”７ＦＦＦＦＦＦＦ（最大値）がＭＡＣレジスタに格納される。Ｓビットが０のときは、連結されたＭＡＣＨ／Ｌレジスタに加算結果の４２ビットが格納される。
【特許文献１】特開平６−１５００２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、Ｌ_ＭＡＣ（）関数では飽和機能が実装されているため、１回分の演算を行うごとにオーバーフローの有無を判断し、その判断結果に従って分岐処理を行う必要がある。このため、１命令分の演算ごとにサイクル数が変動し、Ｌ_ＭＡＣ（）関数をベクトル命令化することができず、演算速度の高速化に支障をきたすという問題があった。
また、特許文献１に開示された方法では、Ｓビットを参照しながらＭＡＣ命令における飽和演算が実行されるが、ＭＡＣ命令を高速に処理できるようにするため、ＭＡＣ命令に専用のハードウェアを追加すると、回路規模の増大を招くという問題があった。
【０００７】
そこで、本発明の目的は、回路規模の増大を抑制しつつ、飽和機能を持つ命令を高速に処理することが可能な演算処理装置および演算処理プログラムを提供することである。
【課題を解決するための手段】
【０００８】
上述した課題を解決するために、本発明の一態様に係る演算処理装置によれば、ベクトル加算処理を行うベクトル加算器と、前記ベクトル加算器に搭載され、前記ベクトル加算器にて得られた加算結果に基づいて飽和処理を行う飽和処理部とを備えることを特徴とする。
これにより、加算演算に伴う飽和処理をハードウェア上で行わせることが可能となり、オーバーフローの有無の判断およびその判断結果に従った分岐処理をプログラムに記述することなく、飽和処理を実行させることが可能となる。このため、加算命令に飽和機能が実装された場合においても、１命令分の演算を１サイクルで実行させることが可能となり、飽和機能が実装された加算命令のベクトル化ができるようにして、飽和機能が実装された加算処理の高速化を図ることができる。
【０００９】
また、本発明の一態様に係る演算処理装置によれば、前記飽和処理を有効化するための飽和指定フラグを格納するステータスレジスタをさらに備え、前記飽和処理部は、前記飽和指定フラグの参照結果に基づいて飽和処理を行うことを特徴とする。
これにより、飽和処理を実行させるかどうかをプログラムから指定することが可能となる。このため、加算演算に伴う飽和処理のハードウェア化を行った場合においても、加算結果に対して飽和処理が一律に行われることを防止することが可能となり、一つの加算命令を用意することで、飽和機能が実装された加算処理と飽和機能が実装されていない加算処理とを実現することができる。
【００１０】
また、本発明の一態様に係る演算処理装置によれば、ベクトルシフト演算処理を行うベクトルシフト演算器と、前記ベクトルシフト演算器に搭載され、前記ベクトルシフト演算器にて得られたシフト演算結果に基づいて飽和処理を行う飽和処理部とを備えることを特徴とする。
これにより、シフト演算に伴う飽和処理をハードウェア上で行わせることが可能となり、オーバーフローの有無の判断およびその判断結果に従った分岐処理をプログラムに記述することなく、飽和処理を実行させることが可能となる。このため、シフト演算命令に飽和機能が実装された場合においても、１命令分の演算を１サイクルで実行させることが可能となり、飽和機能が実装されたシフト演算命令のベクトル化ができるようにして、飽和機能が実装されたシフト演算処理の高速化を図ることができる。
【００１１】
また、本発明の一態様に係る演算処理装置によれば、前記飽和処理部は、前記ベクトルシフト演算器にて行われるシフト演算が算術シフトの場合、前記ベクトルシフト演算器にて得られたシフト演算結果に応じて飽和処理を無条件に実行し、前記ベクトルシフト演算器にて行われるシフト演算が論理シフトの場合、前記ベクトルシフト演算器にて得られたシフト演算結果のオーバーフローの有無に関わらず飽和処理を実行しないようにすることを特徴とする。
【００１２】
これにより、算術シフト命令をプログラム上に記述することで、飽和機能が実装された左シフト演算処理を実現することが可能となるとともに、論理シフト命令をプログラム上に記述することで、飽和機能が実装されていない左シフト演算処理を実現することが可能となる。このため、シフト演算に伴う飽和処理のハードウェア化を行った場合においても、シフト演算結果に対して飽和処理が一律に行われることを防止することが可能となり、左シフトに対して等しい演算結果が得られる２種類の冗長な左右シフト演算命令を使い分けることで、飽和機能が実装されたシフト演算処理と飽和機能が実装されていないシフト演算処理とを実現することができる。
【００１３】
また、本発明の一態様に係る演算処理装置によれば、ベクトル乗算処理を行うベクトル乗算器と、ベクトル加算処理を行うベクトル加算器と、前記ベクトル加算器に搭載され、前記ベクトル加算器にて得られた加算結果に基づいて飽和処理を行う第１飽和処理部と、ベクトルシフト演算処理を行うベクトルシフト演算器と、前記ベクトルシフト演算器に搭載され、前記ベクトルシフト演算器にて得られたシフト結果に基づいて飽和処理を行う第２飽和処理部とを備えることを特徴とする。
【００１４】
これにより、乗算命令とシフト演算命令と加算命令とを含む３つの命令を実行させることでＬ_ＭＡＣ（）関数を実行させることが可能となり、オーバーフローの有無の判断およびその判断結果に従った分岐処理をプログラムに記述することなく、Ｌ_ＭＡＣ（）関数を実行させることが可能となる。このため、Ｌ_ＭＡＣ（）関数に専用のハードウェアを追加することなく、Ｌ_ＭＡＣ（）関数をベクトル命令化することが可能となり、回路規模の増大を抑制しつつ、Ｌ_ＭＡＣ（）関数を高速に実行させることが可能となる。
【００１５】
また、本発明の一態様に係る演算処理装置によれば、前記飽和処理部は、前記飽和処理の有無に基づいてオーバーフローフラグを前記ステータスレジスタに設定することを特徴とする。
これにより、ステータスレジスタに設定されたオーバーフローフラグの値を参照することで、演算終了後に飽和の有無を検知することが可能となり、飽和の有無による処理の分岐を可能にする。
【００１６】
また、本発明の一態様に係る演算処理プログラムによれば、飽和機能が実装されていないベクトル乗算命令と、飽和機能が実装されたベクトル加算命令と、飽和機能が実装されたベクトルシフト命令とをコンピュータに実行させることを特徴とする。
これにより、オーバーフローの有無の判断およびその判断結果に従った分岐処理をプログラムに記述することなく、Ｌ_ＭＡＣ（）関数を実行させることが可能となる。このため、Ｌ_ＭＡＣ（）関数に専用のハードウェアを追加することなく、Ｌ_ＭＡＣ（）関数をベクトル命令化することが可能となり、回路規模の増大を抑制しつつ、Ｌ_ＭＡＣ（）関数を高速に実行させることが可能となる。
【００１７】
また、本発明の一態様に係る演算処理プログラムによれば、前記ベクトル加算命令の飽和機能のオン／オフを指定する命令をコンピュータに実行させることを特徴とする。
これにより、飽和処理を実行させるかどうかをプログラムから指定することが可能となる。このため、加算演算に伴う飽和処理のハードウェア化を行った場合においても、加算結果に対して飽和処理が一律に行われることを防止することが可能となり、一つの加算命令を用意することで、飽和機能が実装された加算処理と飽和機能が実装されていない加算処理とを実現することができる。
【００１８】
また、本発明の一態様に係る演算処理プログラムによれば、前記ベクトル加算命令による加算結果または前記ベクトルシフト命令によるシフト演算結果のオーバーフローの有無を検出する検出関数をコンピュータに実行させることを特徴とする。
これにより、検出関数をプログラムに記述することで、演算終了後に飽和の有無を検知することが可能となり、飽和の有無による処理の分岐を可能にする。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態に係る演算処理装置について図面を参照しながら説明する。なお、以下の実施形態では、図１のコンピュータシステムにおいて、図２のベクトルプロセッサ１００の各演算器を動作させることによりベクトルパイプライン処理を行う場合を例にとって説明する。
図１は、本発明の一実施形態に係るコンピュータシステムの概略構成を示すブロック図である。
【００２０】
図１において、コンピュータシステムには、ベクトル演算器を備えるベクトルプロセッサ１００、所定領域にあらかじめベクトルプロセッサ１００の制御プログラム等を格納するメインメモリ１１０、データを入力可能なヒューマンインターフェースとしての入力部１２０、ディスプレイ等のデータを出力可能な出力部１３０、ネットワーク等を介して外部との通信を行う通信部１４０が設けられている。
【００２１】
ここで、メインメモリ１１０には、プログラムを格納するプログラム・テキスト領域１１１、定数などのデータを予め格納する初期化済みデータ領域１１２、定数などのデータを格納するための事前に確保された未初期化データ領域１１３、プログラム実行時に動的に確保されるヒープ領域１１４およびスタック領域１１５ならびにその他論理的に区分された記憶領域を有している。
【００２２】
そして、制御プログラムは、ベクトルプロセッサ１００が直接実行可能な低水準言語（例えば、機械語）で構成されており、高水準言語（例えば、Ｃ言語）により記述されたアセンブリソースコード２００を、アセンブラ２１０およびリンカ２２０からなる命令コード生成系により低水準言語にコンパイルし、実行プログラム２３０として生成される。そして、生成された制御プログラムは、ハードディスク等の補助記憶装置に格納されるが、ベクトルプロセッサ１００が実行するときは、プログラムローダ２４０によりメインメモリ１１０の記憶領域のうちプログラム・テキスト領域１１１に配置され、実行可能な状態に置かれる。なお、アセンブラ２１０、リンカ２２０およびプログラムローダ２４０は、一般にソフトウェアにより構成することができる。
【００２３】
図２は、図１のベクトルプロセッサ１００の概略構成を示すブロック図である。
図２において、ベクトルプロセッサ１００には、メインメモリ１１０から読み出された命令の内容を解読する命令ディコーダ２１、ベクトルプロセッサ１００のステータスに関する情報を記憶するステータスレジスタ２２、スカラー演算に利用するスカラーレジスタレジスタおよびベクトル演算に利用するベクトルレジスタが配置されたレジスタファイル２３、乗算を行う乗算ユニット２４、加減算およびシフト演算を行う加減算／シフトユニットＡ２５、加減算およびシフト演算を行う加減算／シフトユニットＢ２６、シフト、アンドおよびオアなどの論理演算を行うＭＯＶＥユニットＡ２７、シフト、アンドおよびオアなどの論理演算を行うＭＯＶＥユニットＢ２８、演算処理を行うＡＬＵ２９、ロード用のアドレスを生成するアドレス生成ユニットＸ３０、ロード用のアドレスを生成するアドレス生成ユニットＹ３１、ストア用のアドレスを生成するアドレス生成ユニットＺ３２が設けられている。
【００２４】
ここで、命令ディコーダ２１には分岐制御を行う分岐制御部２１ａが設けられている。また、ステータスレジスタ２２には、加減算処理時の飽和処理を有効化するための飽和指定フラグを格納するＳビットが割り当てられるとともに、加減算処理およびシフト演算時のオーバーフローフラグを格納するＶＶビットが割り当てられている。さらに、加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８には、飽和処理部２５ａ〜２８ａがそれぞれ搭載されている。
【００２５】
ここで、飽和処理部２５ａは、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５で得られた加減算結果に応じて飽和処理を実行するとともに、飽和処理を実行した場合には、ステータスレジスタ２２のＶＶビットに“１”を設定する。また、飽和処理部２６ａは、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＢ２６で得られた加減算結果に応じて飽和処理を実行するとともに、飽和処理を実行した場合には、ステータスレジスタ２２のＶＶビットに“１”を設定する。
【００２６】
また、飽和処理部２７ａは、ＭＯＶＥユニットＡ２７で行われるシフト演算が算術シフトの場合、ＭＯＶＥユニットＡ２７にて得られたシフト演算結果に応じて飽和処理を無条件に実行するとともに、ステータスレジスタ２２のＶＶビットに“１”を設定し、ＭＯＶＥユニットＡ２７にて行われるシフト演算が論理シフトの場合、ＭＯＶＥユニットＡ２７にて得られたシフト演算結果のオーバーフローの有無に関わらず飽和処理を実行しないようにする。また、飽和処理部２８ａは、ＭＯＶＥユニットＢ２８で行われるシフト演算が算術シフトの場合、ＭＯＶＥユニットＢ２８にて得られたシフト演算結果に応じて飽和処理を無条件に実行するとともに、ステータスレジスタ２２のＶＶビットに“１”を設定し、ＭＯＶＥユニットＢ２８にて行われるシフト演算が論理シフトの場合、ＭＯＶＥユニットＢ２８にて得られたシフト演算結果のオーバーフローの有無に関わらず飽和処理を実行しないようにする。
【００２７】
そして、命令ディコーダ２１は、プログラムバスＰＢおよびプログラムアドレスバスＰＡＢに接続されるとともに、バスＢ１〜Ｂ３をそれぞれ介してレジスタファイル２３、乗算ユニット２４、加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７、ＭＯＶＥユニットＢ２８、ＡＬＵ２９、アドレス生成ユニットＸ３０、アドレス生成ユニットＹ３１およびアドレス生成ユニットＺ３２に接続されている。また、レジスタファイル２３は、Ｘ−バスＸＢ、Ｙ−バスＸＹ、ＺＸ−バスＺＸＢおよびＺＹ−バスＺＹＢに接続されるとともに、バスＢ４を介して乗算ユニット２４、加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７、ＭＯＶＥユニットＢ２８、ＡＬＵ２９、アドレス生成ユニットＸ３０、アドレス生成ユニットＹ３１およびアドレス生成ユニットＺ３２に接続されている。また、アドレス生成ユニットＸ３０はＸ−アドレスバスＸＡＢに接続され、アドレス生成ユニットＹ３１はＹ−アドレスバスＹＡＢに接続され、アドレス生成ユニットＺ３２はＺＸ−アドレスバスＺＸＡＢおよびＺＹ−アドレスバスＺＹＡＢに接続されている。
【００２８】
図３は、図２のレジスタファイル２３の概略構成を示すブロック図である。
図３において、レジスタファイル２３にはスカラーレジスタおよびベクトルレジスタが配置されている。ここで、スカラーレジスタには、例えば、３２ビット分のデータをそれぞれ記憶する記憶領域ＳＲ０〜ＳＲ１５を１６本だけ設けることができる。
また、例えば、ベクトルの要素数が８であるとすると、３２ビット分のデータをそれぞれ記憶する８個の記憶領域ＶＲ０［０］〜ＶＲ０［７］で１本分のベクトルレジスタを構成することができる。そして、例えば、３２ビット分のデータをそれぞれ記憶する６４個の記憶領域ＶＲ０［０］〜ＶＲ０［７］、ＶＲ１［０］〜ＶＲ１［７］、ＶＲ２［０］〜ＶＲ２［７］、ＶＲ３［０］〜ＶＲ３［７］、ＶＲ４［０］〜ＶＲ４［７］、ＶＲ５［０］〜ＶＲ５［７］、ＶＲ６［０］〜ＶＲ６［７］、ＶＲ７［０］〜ＶＲ７［７］を設けることで、８本分のベクトルレジスタを設けることができる。
【００２９】
図４は、ベクトル命令のデータ構造を示す図である。
図４において、ベクトル命令には、乗算や加算などの命令の種類を定義するオペコードｏｐｅｃｏｄｅおよびベクトル演算の実行回数を定義するリピートアマウントｒｐｔａｍｔが設けられている。また、ベクトル命令では、書き込み先のディスティネーションレジスタｄｓｔおよび読み出し先のソースレジスタｓｒｃ１、ｓｒｃ２を指定することができる。また、図４のデータ構造において、リピートアマウントｒｐｔａｍを０にした場合、同じデータ構造を用いてスカラー命令、ベクトル命令を格納することができる。
【００３０】
図５は、図２のベクトルプロセッサ１００のベクトル加算処理を示す図である。
図５において、ベクトル命令において、例えば、オペコードｏｐｅｃｏｄｅにて加算が指定され、リピートアマウントｒｐｔａｍｔで８が指定され、ディスティネーションレジスタｄｓｔとして図３のベクトルレジスタＶＲ０が指定され、ソースレジスタｓｒｃ１、ｓｒｃ２として図３のベクトルレジスタＶＲ１、ＶＲ２がそれぞれ指定されていたものとする。この場合、図２の加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６が加算器Ａ１として選択され、ベクトルレジスタＶＲ１に格納されている要素ａ０〜ａ７およびベクトルレジスタＶＲ２に格納されている要素ｘ０〜ｘ７が加算器Ａ１に順次送られる。そして、加算器Ａ１にて各要素ごとに加算が行われた後、その加算結果がベクトルレジスタＶＲ０に格納される。
【００３１】
図６は、図２の飽和処理部２５ａ、２６ａの概略構成を示すブロック図である。
図６において、飽和処理部２５ａ、２６ａは、ステータスレジスタ２２のＳビットおよびＶＶビットに接続することができる。また、オーバーフローした時の飽和値として“０ｘ７ＦＦＦＦＦＦＦ”が設定され、アンダーフローした時の飽和値として“０ｘ８０００００００”が設定されているものとする。そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６で加算処理がそれぞれ行われる時に、飽和処理部２５ａ、２６ａは、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断する。
【００３２】
そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしていない場合、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果をそのまま出力する。一方、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローしている場合、その加算結果として“０ｘ７ＦＦＦＦＦＦＦ”を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。また、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がアンダーフローしている場合、その加算結果として“０ｘ８０００００００”を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。
【００３３】
一方、飽和処理部２５ａ、２６ａは、ステータスレジスタ２２のＳビットを参照した結果、Ｓビットが“０”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にてそれぞれ得られた加算結果をそのまま出力する。
これにより、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６の加算演算に伴う飽和処理をハードウェア上で行わせることが可能となり、オーバーフローまたはアンダーフローの有無の判断およびその判断結果に従った分岐処理をプログラムに記述することなく、飽和処理を実行させることが可能となる。このため、加算命令に飽和機能が実装された場合においても、１命令分の演算を１サイクルで実行させることが可能となり、飽和機能が実装された加算命令のベクトル化ができるようにして、飽和機能が実装された加算処理の高速化を図ることができる。
【００３４】
また、ステータスレジスタ２２にＳビットを割り当てることにより、飽和処理を実行させるかどうかをプログラムから指定することが可能となる。このため、加算演算に伴う飽和処理のハードウェア化を行った場合においても、加算結果に対して飽和処理が一律に行われることを防止することが可能となり、一つの加算命令を用意することで、飽和機能が実装された加算処理と飽和機能が実装されていない加算処理とを実現することができる。
【００３５】
さらに、ステータスレジスタ２２にＶＶビットを割り当てることにより、ステータスレジスタ２２に設定されたＶＶビットの値を参照することで、演算終了後にプログラマが飽和の有無を検知することが可能となり、デバッグなどの作業に役立てることができる。
図７は、図２の飽和処理部２７ａ、２８ａの概略構成を示すブロック図である。
図７において、飽和処理部２７ａ、２８ａは、ステータスレジスタ２２のＶＶビットに接続することができる。また、オーバーフローした時の飽和値として“０ｘ７ＦＦＦＦＦＦＦ”が設定され、アンダーフローした時の飽和値として“０ｘ８０００００００”が設定されているものとする。そして、飽和処理部２７ａ、２８ａは、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８でそれぞれ行われるシフト演算が算術シフトの場合、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８にて得られた左シフト演算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断する。
【００３６】
そして、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８にて得られた左シフト演算結果がオーバーフローまたはアンダーフローしていない場合、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８にて得られた左シフト演算結果をそのまま出力する。一方、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８にて得られた左シフト演算結果がオーバーフローしている場合、その左シフト演算結果として“０ｘ７ＦＦＦＦＦＦＦ”を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。また、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８にて得られた左シフト演算結果がアンダーフローしている場合、その左シフト演算結果として“０ｘ８０００００００”を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。
【００３７】
一方、飽和処理部２７ａ、２８ａは、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８でそれぞれ行われるシフト演算が論理シフトの場合、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８にてそれぞれ得られたシフト演算結果をそのまま出力する。
これにより、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８のシフト演算に伴う飽和処理をハードウェア上で行わせることが可能となり、オーバーフローの有無の判断およびその判断結果に従った分岐処理をプログラムに記述することなく、飽和処理を実行させることが可能となる。このため、シフト演算命令に飽和機能が実装された場合においても、１命令分の演算を１サイクルで実行させることが可能となり、飽和機能が実装されたシフト演算命令のベクトル化ができるようにして、飽和機能が実装されたシフト演算処理の高速化を図ることができる。
【００３８】
また、算術シフト命令をプログラム上に記述することで、飽和機能が実装されたシフト演算処理を実現することが可能となるとともに、論理シフト命令をプログラム上に記述することで、飽和機能が実装されていないシフト演算処理を実現することが可能となる。このため、シフト演算に伴う飽和処理のハードウェア化を行った場合においても、シフト演算結果に対して飽和処理が一律に行われることを防止することが可能となり、等しい演算結果が得られる２種類の冗長なシフト演算命令を使い分けることで、飽和機能が実装されたシフト演算処理と飽和機能が実装されていないシフト演算処理とを実現することができる。
【００３９】
さらに、ステータスレジスタ２２にＶＶビットを割り当てることにより、ステータスレジスタ２２に設定されたＶＶビットの値を参照することで、演算終了後にプログラマが飽和の有無を検知することが可能となり、デバッグなどの作業に役立てることができる。
図８は、図２のベクトルプロセッサ１００のパイプライン処理を示すブロック図である。
【００４０】
図８のサイクルＣ１において、ベクトル命令のインストラクションフェッチＩＦが行われると、そのベクトル命令が図２の命令ディコーダ２１に送られる。そして、インストラクションフェッチＩＦが行われたベクトル命令が図２の命令ディコーダ２１に送られると、サイクルＣ２において、デコードＲＤが命令ディコーダ２１にて行われ、ベクトル命令の解読が行われる。そして、命令ディコーダ２１にてベクトル命令を解読することにより、オペコードｏｐｅｃｏｄｅおよびリピートアマウントｒｐｔａｍｔが抽出され、そのベクトル命令では、どのような種類のベクトル演算が何回分だけ行われるかを判別することができる。
【００４１】
ここで、ベクトル命令のオペコードｏｐｅｃｏｄｅで加算が指定され、リピートアマウントｒｐｔａｍｔに４が設定されているものとすると、サイクルＣ３において、ベクトル命令の１回目の加算に対応した実行ＥＸＥが、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて行われる。そして、飽和処理部２５ａ、２６ａは、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて実行ＥＸＥが行われる時に、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断する。
【００４２】
そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしている場合、その加算結果として飽和値を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。
次に、サイクルＣ４において、ベクトル命令の１回目の加算結果の記憶ＭＥＭがベクトルレジスタに行われるとともに、ベクトル命令の２回目の加算に対応した実行ＥＸＥが行われる。そして、飽和処理部２５ａ、２６ａは、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて実行ＥＸＥが行われる時に、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断する。
【００４３】
そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしている場合、その加算結果として飽和値を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。
次に、サイクルＣ５おいて、ベクトル命令の２回目の加算結果の記憶ＭＥＭがベクトルレジスタに行われるとともに、ベクトル命令の３回目の加算に対応した実行ＥＸＥが行われる。そして、飽和処理部２５ａ、２６ａは、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて実行ＥＸＥが行われる時に、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断する。
【００４４】
そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしている場合、その加算結果として飽和値を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。
次に、サイクルＣ６おいて、ベクトル命令の３回目の加算結果の記憶ＭＥＭがベクトルレジスタに行われるとともに、ベクトル命令の４回目の加算に対応した実行ＥＸＥが行われる。そして、飽和処理部２５ａ、２６ａは、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて実行ＥＸＥが行われる時に、ステータスレジスタ２２のＳビットを参照し、Ｓビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしているかどうかをそれぞれ判断する。
【００４５】
そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られた加算結果がオーバーフローまたはアンダーフローしている場合、その加算結果として飽和値を出力し、ステータスレジスタ２２のＶＶビットに“１”を設定する。
次に、サイクルＣ７おいて、ベクトル命令の４回目の加算結果の記憶ＭＥＭがベクトルレジスタに行われ、今回インストラクションフェッチＩＦが行われたベクトル命令の処理が完了する。
【００４６】
図９は、本発明の一実施形態に係るＬ_ＭＡＣ（）関数のハンドアセンブル例を示す図である。
加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８に飽和処理部２５ａ〜２８ａがそれぞれ搭載されない場合には、１回分の演算を行うごとにオーバーフローの有無を判断し、その判断結果に従って分岐処理を行う必要がある。このため、Ｌ_ＭＡＣ関数のソースコードには、図１７に示したように、条件分岐などの命令を挿入する必要があり、図１７のソースコードのコンパイル例は、図１８に示すように、３６行にも及ぶ膨大な関数になる。
【００４７】
これに対して、加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８に飽和処理部２５ａ〜２８ａをそれぞれ搭載することにより、図９に示すように、乗算を行わせるＭＰＨ命令、飽和機能付きシフト演算を行わせるＳＡＷ命令および飽和機能付き加算を行わせるＡＤＤＷ命令の３個の命令でＬ_ＭＡＣ（）関数を実現することができる。
【００４８】
図１０は、本発明の一実施形態に係るベクトル命令化されたＬ_ＭＡＣ（）関数の使用例を示す図、図１１は、図１０のソースコードのハンドアセンブル例を示す図である。
加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８に飽和処理部２５ａ〜２８ａがそれぞれ搭載されない場合、ベクトル命令を使うことができないので、例えば、Ｌ_ＭＡＣ（）関数を４０回だけ実行させるには、図１８に示した３６行にも及ぶ膨大な関数を４０回も繰り返す必要がある。
【００４９】
これに対して、加減算／シフトユニットＡ２５、加減算／シフトユニットＢ２６、ＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８に飽和処理部２５ａ〜２８ａをそれぞれ搭載することにより、図８に示したように、飽和機能付き加算の実行および飽和機能付きシフト演算の実行をそれぞれ１サイクルで行わせることができる。このため、図１０に示すように、Ｌ_ＭＡＣ（）関数をベクトル命令化することが可能となり、例えば、Ｌ_ＭＡＣ（）関数を４０回実行させる場合においても、図１１に示すように、長さ８のベクトル命令を５回発行すればよい。この結果、図１０の例では、ベクトル命令を使わないでＬ_ＭＡＣ（）関数を実行させた場合に比べて、約２０倍の速度向上が見られた。
【００５０】
これにより、既存のベクトルプロセッサの命令セットとの整合性を保ちつつ、命令の変更量を極力少なくしてＬ_ＭＡＣ（）関数の高速化を図ることができ、ＡＭＲコーディックのベクトルプロセッサ１００上で実現することが可能となる。
なお、図１１の例では、コメントアウトしたＮＯＰが１回につき４度書かれているが、インターロックがかからないユニットなら、ここに他の命令を書くこともできる。例えば、積和演算中に絶えず積和値を確認し、その値が飽和していたら、即座に別の処理に移行させるようにしてもよい。
【００５１】
図１２は、本発明の一実施形態に係るステータスレジスタの飽和機能の指定方法の一例を示す図である。
飽和機能をオン／オフする場合、例えば、図１２に示すような命令をソースコードに挿入することができる。これにより、ソースコード中で飽和機能のオン／オフを指定することができ、プログラマが飽和機能のオン／オフを指定することができる。なお、図１２の例では、インラインアセンブラであるが、アセンブラファイルに直接記述するようにしてもよい。
【００５２】
図１３は、本発明の一実施形態に係るＶＶビットの検出関数の一例を示す図、図１４は、本発明の一実施形態に係るオーバーフローの検出方法の一例を示す図である。
図１３において、オーバーフローの有無を確認するために、Ｔｅｓｔ_Ｏｖｅｒｆｌｏｗ（）という命令を定義するソースコードをヘッダファイルに書いておく。そして、図１４に示すように、オーバーフローを調べたい箇所で、図１３のインラインアセンブラを呼び出せばよい。この方法では、ｇｌｏｂａｌ変数“Ｏｖｅｒｆｌｏｗ”が既に１の時かＶＶビットが１の時、“Ｏｖｅｒｆｌｏｗ”を１にできるため、オリジナルソースコードの変数Ｏｖｅｒｆｌｏｗと競合することなく、オーバーフローの検出ができる。
【００５３】
図１５は、図２の加減算／シフトユニットＡ２５および加減算／シフトユニットＢ２６でそれぞれ実行可能な飽和機能付き加減算命令の一覧を示す図である。
図１５において、ＡＤＤＷ命令では、レジスタｓｒｃ１とレジスタｓｒｃ２のワードの加算が行われる。なお、ＡＤＤＷ命令では、ｓｈａｍｔで指定されたビット数分だけ加算結果の算術右シフトができる。ＡＤＤ２Ｈ命令では、レジスタｓｒｃ１とレジスタｓｒｃ２の上位と下位のハーフワードごとに加算が行われる。なお、ＡＤＤ２Ｈ命令では、ｓｈａｍｔで指定されたビット数分だけ加算結果の算術右シフトができる。
【００５４】
ＳＵＢＷ命令では、レジスタｓｒｃ１からレジスタｓｒｃ２のワードの減算が行われる。なお、ＳＵＢＷ命令では、ｓｈａｍｔで指定されたビット数分だけ加算結果の算術右シフトができる。ＳＵＢ２Ｈ命令では、レジスタｓｒｃ１からレジスタｓｒｃ２の上位と下位のハーフワードごとに減算が行われる。なお、ＳＵＢ２Ｈ命令では、ｓｈａｍｔで指定されたビット数分だけ減算結果の算術右シフトができる。
【００５５】
ＡＤＳＢ２Ｈ命令では、レジスタｓｒｃ１とレジスタｓｒｃ２の上位と下位のハーフワードごとに加減算が行われる。ここで、下位のハーフワードに対しては加算が行われ、上位のハーフワードに対しては減算が行われる。なお、ＡＤＳＢ２Ｈ命令では、ｓｈａｍｔで指定されたビット数分だけ加減算結果の算術右シフトができる。ＳＢＡＤ２Ｈ命令では、レジスタｓｒｃ１とレジスタｓｒｃ２の上位と下位のハーフワードごとに加減算が行われる。ここで、下位のハーフワードに対しては減算が行われ、上位のハーフワードに対しては加算が行われる。なお、ＳＢＡＤ２Ｈ命令では、ｓｈａｍｔで指定されたビット数分だけ加減算結果の算術右シフトができる。
【００５６】
ＡＤＤＷＩ命令では、レジスタｓｒｃ１と１０ビットの拡張符号ｉｍｍｅｄｉａｔｅのワードの加算が行われる。ＡＤＤ２ＨＩ命令では、レジスタｓｒｃ１の上位と下位の各々のハーフワードに対して１０ビットの拡張符号ｉｍｍｅｄｉａｔｅの加算が行われる。
ＡＤＤ２Ｗ命令では、ＡＤＤＷ命令のデュアル・ユニット命令が発行される。ＡＤＤ４Ｈ命令では、ＡＤＤ２Ｈ命令のデュアル・ユニット命令が発行される。ＳＵＢ２Ｗ命令では、ＳＵＢＷ命令のデュアル・ユニット命令が発行される。ＳＵＢ４Ｈ命令では、ＳＵＢ２Ｈ命令のデュアル・ユニット命令が発行される。ＡＤＳＢ４Ｈ命令では、ＡＤＳＢ２Ｈ命令のデュアル・ユニット命令が発行される。ＳＢＡＤ４Ｈ命令では、ＳＢＡＤ２Ｈ命令のデュアル・ユニット命令が発行される。ＡＤＤ２ＷＩ命令では、ＡＤＤＷＩ命令のデュアル・ユニット命令が発行される。ＡＤＤ４ＨＩ命令では、ＡＤＤ２ＨＩ命令のデュアル・ユニット命令が発行される。
【００５７】
ここで、1)の命令では、ステータスレジスタ２２のＳビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られたシフト前の演算結果を符号付き３２ビットの値と解釈する。そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られたシフト前の演算結果がオーバーフローオーバーフローしている場合、“０ｘ７ＦＦＦＦＦＦＦ”に飽和し、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られたシフト前の演算結果がアンダーフローしている場合、“０ｘ８０００００００”に飽和する。そして、飽和処理した場合には、ステータスレジスタ２２のＶＶビットに“１”を設定する。なお、1)´の命令ではシフトは行わない。
【００５８】
また、2)の命令では、ステータスレジスタ２２のＳビットが“１”の時、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られたシフト前の演算結果を上位および下位とも符号付き１６ビットの値と解釈する。そして、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られたシフト前の演算結果がオーバーフローオーバーフローしている場合、“０ｘ７ＦＦＦ”に飽和し、加減算／シフトユニットＡ２５または加減算／シフトユニットＢ２６にて得られたシフト前の演算結果がアンダーフローしている場合、“０ｘ８０００”に飽和する。そして、飽和処理した場合には、ステータスレジスタ２２のＶＶビットに“１”を設定する。なお、2)´の命令ではシフトは行わない。
【００５９】
図１６は、図２のＭＯＶＥユニットＡ２７およびＭＯＶＥユニットＢ２８でそれぞれ実行可能な飽和機能付きシフト命令の一覧を示す図である。
図１６において、ＳＡＷ命令では、レジスタｓｒｃ１のワードをｓｈａｍｔで指定されたビット数分だけ算術シフトする。ＳＡ２Ｈ命令では、レジスタｓｒｃ１の上位と下位のハーフワードごとにｓｈａｍｔで指定されたビット数分だけ算術シフトする。ＳＡＶＷ命令では、レジスタｓｒｃ１のワードをレジスタｓｒｃ２で指定されたビット数分だけ算術シフトする。ＳＡ２Ｗ命令では、２つのレジスタの２ワードを各々ｓｈａｍｔで指定されたビット数分だけ算術シフトする。ＳＡ４Ｈ命令では、２つのレジスタの上位と下位のハーフワードを、各々ｓｈａｍｔで指定されたビット数分だけ算術シフトする。ＳＡＶ２Ｗ命令では、２並列でレジスタｓｒｃ１のワードをレジスタｓｒｃ２で指定されたビット数分だけ算術シフトする。
【００６０】
ここで、1)の命令では、左シフトの場合、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８で得られた演算結果の３２ビットの値がオーバーフローしている場合、“０ｘ７ＦＦＦＦＦＦＦ”に飽和し、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８で得られた演算結果の３２ビットの値がアンダーフローしている場合、“０ｘ８０００００００”に飽和する。そして、飽和処理した場合には、ステータスレジスタ２２のＶＶビットに“１”を設定する。
【００６１】
また、2)の命令では、左シフトの場合、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８で得られた演算結果の上位または下位の１６ビットの値がオーバーフローしている場合、“０ｘ７ＦＦＦ”に飽和し、ＭＯＶＥユニットＡ２７またはＭＯＶＥユニットＢ２８で得られた上位または下位の１６ビットの値がアンダーフローしている場合、“０ｘ８０００”に飽和する。そして、飽和処理した場合には、ステータスレジスタ２２のＶＶビットに“１”を設定する。
【図面の簡単な説明】
【００６２】
【図１】本発明の一実施形態に係るコンピュータシステムの概略構成を示すブロック図。
【図２】図１のベクトルプロセッサ１００の概略構成を示すブロック図。
【図３】図２のレジスタファイル２３の概略構成を示すブロック図。
【図４】本発明の一実施形態に係るベクトル命令のデータ構造を示す図である。
【図５】図２のベクトルプロセッサ１００のベクトル加算処理を示す図。
【図６】図２の飽和処理部２５ａ、２６ａの概略構成を示すブロック図。
【図７】図２の飽和処理部２７ａ、２８ａの概略構成を示すブロック図。
【図８】図２のベクトルプロセッサ１００のパイプライン処理を示すブロック図。
【図９】本発明の一実施形態に係るＬ_ＭＡＣ（）関数のハンドアセンブル例を示す図。
【図１０】ベクトル命令化されたＬ_ＭＡＣ（）関数の使用例を示す図。
【図１１】ベクトル命令化されたＬ_ＭＡＣ（）関数のハンドアセンブル例を示す図。
【図１２】ステータスレジスタの飽和機能の指定方法の一例を示す図。
【図１３】本発明の一実施形態に係るＶＶビットの検出関数の一例を示す図。
【図１４】本発明の一実施形態に係るオーバーフローの検出方法の一例を示す図。
【図１５】本発明の一実施形態に係る飽和機能付き加減算命令の一覧を示す図。
【図１６】本発明の一実施形態に係る飽和機能付きシフト命令の一覧を示す図。
【図１７】Ｌ_ＭＡＣ（）関数のソースコードの一例を示す図。
【図１８】Ｌ_ＭＡＣ（）関数のコンパイル例を示す図。
【符号の説明】
【００６３】
１００  ベクトルプロセッサ、２１  命令デコータ、２１ａ  分岐制御部、２２  ステータスレジスタ、２３  レジスタファイル、２４  乗算ユニット、２５  加減算／シフトユニットＡ、２６  加減算／シフトユニットＢ、２７  ＭＯＶＥユニットＡ、２８  ＭＯＶＥユニットＢ、２５ａ〜２８ａ  飽和処理部、２９  ＡＬＵ、３０、アドレス生成ユニットＸ、３１、アドレス生成ユニットＹ、３２、アドレス生成ユニットＺ、Ｂ１〜Ｂ４  バス、１１０  メインメモリ、１１１  プログラムテキスト領域、１１２  初期化済みデータ領域、１１３  未初期化データ領域、１１４  ヒープ領域、１１５  スタック領域、１２０  入力部、１３０  出力部、１４０  通信部、２００  アセンブリソースコード、２１０  アセンブラ、２２０  リンカ、２３０  実行プログラム、２４０  プログラムローダ、Ａ１  加算器、ＶＲ０〜ＶＲ２  ベクトルレジスタ
【図１】
2006171827.tif 000003
【図２】
2006171827.tif 000004
【図３】
2006171827.tif 000005
【図４】
2006171827.tif 000006
【図５】
2006171827.tif 000007
【図６】
2006171827.tif 000008
【図７】
2006171827.tif 000009
【図８】
2006171827.tif 000010
【図９】
2006171827.tif 000011
【図１０】
2006171827.tif 000012
【図１１】
2006171827.tif 000013
【図１２】
2006171827.tif 000014
【図１３】
2006171827.tif 000015
【図１４】
2006171827.tif 000016
【図１５】
2006171827.tif 000017
【図１６】
2006171827.tif 000018
【図１７】
2006171827.tif 000019
【図１８】
2006171827.tif 000020