(57)【要約】アドバンスド命令をマイクロプロセッサに追加するシステムは、新しい命令を形式的に捕らえる言語と、拡張されたプロセッサに対するハードウェアインプリメンテーションおよびソフトウェアツールを発生する方法を備えている。拡張言語は、ＶＬＩＷ命令、複合的なロード／記憶命令、機能を使用するもっと強力な記述スタイル、もっと強力なレジスタオペランド、および新しい組込みモジュールセットの追加を行う。その方法は、新しい命令に対する完全にパイプラインされたマイクロアーキテクチャインプリメンテーションを、標準的なＣＡＤツールにより処理されることのできる合成可能なＨＤＬ記述の形態で発生することができる。この方法はまた、新しい命令を有するマイクロプロセッサ用のソフトウェア開発ツールを拡張するためのソフトウェアコンポーネントを発生することができる。【特許請求の範囲】
【請求項１】
マイクロプロセッサ中のコア命令に加えて対応した論理による実行のためにＶＬＩＷ命令の記述を可能にするステップを含み、その記述がＶＬＩＷ命令の構成可能な特性を含んでいる、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項２】
構成可能な特性は、命令長を含んでいる請求項１記載の方法。
【請求項３】
構成可能な特性は、命令フォーマットを含んでいる請求項１記載の方法。
【請求項４】
構成可能な特性は、命令当りの演算スロットの数を含んでいる請求項１記載の方法。
【請求項５】
構成可能な特性は、命令フィールドを含んでいる請求項１記載の方法。
【請求項６】
構成可能な特性は、命令演算コードを含んでいる請求項１記載の方法。
【請求項７】
構成可能な特性は、命令演算を含んでいる請求項１記載の方法。
【請求項８】
マイクロプロセッサ中でコア命令と共用される対応した論理による実行のためにロード／記憶命令の記述を可能にするステップを含み、その共用される対応した論理は、ロード／記憶命令と協同して構成可能なワードの操作を自動的に行うロード／記憶ユニットインターフェースを含んでいる、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項９】
構成可能なワード操作は、ロード／記憶バイトディスエーブルを含んでいる請求項８記載の方法。
【請求項１０】
構成可能なワード操作は、回転量を含んでいる請求項８記載の方法。
【請求項１１】
構成可能なワード操作は、符号拡張を含んでいる請求項８記載の方法。
【請求項１２】
構成可能なワード操作は、条件付きロード／記憶を含んでいる請求項８記載の方法。
【請求項１３】
マイクロプロセッサ中の対応した論理による実行のために構成可能な機能の識別を可能にするステップを含み、この対応した論理はそのマイクロプロセッサにより実行される複数の異なった命令によって共用される、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項１４】
マイクロプロセッサ中の対応した論理による実行のために構成可能な機能の識別を可能にするステップを含み、この対応した論理は単一の命令によって反復的に使用される、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項１５】
マイクロプロセッサによって実行された命令により参照されるオペランドレジスタのフレキシブルな特定のために構成可能なオペランドレジスタインターフェースの記述を可能にするステップを含み、この構成可能なオペランドレジスタインターフェースは多数の読出し／書込み幅を含んでいる、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項１６】
マイクロプロセッサによって実行された命令により参照されるオペランドレジスタのフレキシブルな特定のために構成可能なオペランドレジスタインターフェースの記述を可能にするステップを含み、この構成可能なオペランドレジスタインターフェースはレジスタファイルポートにオペランドを手動で結びつける、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項１７】
マイクロプロセッサによって実行された命令により参照されるオペランドレジスタのフレキシブルな特定のために構成可能なオペランドレジスタインターフェースの記述を可能にするステップを含み、この構成可能なオペランドレジスタインターフェースは、レジスタ数を発生するためのレジスタファイルオペランド意味論を含んでいる、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項１８】
マイクロプロセッサによって実行された命令により参照されるオペランドレジスタのフレキシブルな特定のために構成可能なオペランドレジスタインターフェースの記述を可能にするステップを含み、この構成可能なオペランドレジスタインターフェースは、暗黙レジスタファイルオペランドを含んでいる、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項１９】
マイクロプロセッサ中の対応した拡張論理による命令の実行中に提起された例外の記述を可能にするステップを含んでいる、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項２０】
記述は例外定義を含んでいる請求項１９記載の方法。
【請求項２１】
記述は命令意味論を含んでいる請求項１９記載の方法。
【請求項２２】
記述はオペランド意味論を含んでいる請求項１９記載の方法。
【請求項２３】
記述は例外意味論を含んでいる請求項１９記載の方法。
【請求項２４】
記述は多数の例外を解決するサポートを含んでいる請求項１９記載の方法。
【請求項２５】
マイクロプロセッサ中の対応したハードウェア論理による実行のために命令の記述を可能にするステップを含み、その記述は、プロセッサ拡張言語の一部である組込みモジュール定義を含んでおり、そのモジュール定義はキャリーイン（carry-in）モジュールによる加算、Ｎ数加算モジュール、キャリー保存加算器モジュール、符号付きおよび符号なし比較モジュール、乗算・累算モジュール、符号付きおよび符号なし乗算モジュール、部分積乗算モジュール、ｎウェイマルチプレクサモジュール、ｎウェイ優先度セレクタモジュール、ｎウェイ１-ホットセレクタモジュールの１つである、アドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項２６】
さらに、コア命令に加えて非ＶＬＩＷ命令の記述を可能にするステップを含み、この非ＶＬＩＷ命令はマイクロプロセッサによって独立的に実行されることが可能であり、さらに非ＶＬＩＷ命令はＶＬＩＷ命令の１つの一部として含まれることが可能である請求項１記載の方法。
【請求項２７】
複数のロード／記憶ユニットによる実行のためにロード／記憶命令の記述を可能にするステップを含んでいるアドバンスド命令拡張命令をマイクロプロセッサに追加する方法。
【請求項２８】
さらに、あるロード／記憶命令をロード／記憶ユニットの特定の１つと関連付けることを可能にするステップを含んでいる請求項２７記載の方法。
【請求項２９】
さらに、ロード／記憶ユニットの利用可能なものに自動的にマップされることのできるあるロード／記憶命令の識別を可能にするステップを含んでいる請求項２７記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マイクロプロセッサに関し、とくに、アドバンスド命令拡張子をマイクロプロセッサに追加するための方法および装置に関する。
【背景技術】
【０００２】
本出願は、本出願人によって同時に出願され、その権利が所有されており、その内容がこの明細書において参考文献とされている米国特許出願第 10/145,380号および米国特許出願第10/146,651号に関係している。
【０００３】
新しいアプリケーション集中システム・オン・チッププラットホームは新しい特定用途向けプロセッサの動機となっている。構成可能で拡張可能なプロセッサアーキテクチャは、標準的な高レベルプログラミング方法のフレキシビリティを有する同調された論理ソリューションの効率を提供する。プロセッサの自動化された拡張および関連したソフトウェアツール（コンパイラ、デバッガ、シミュレータおよび実時間オペレーティングシステム）により、このような構成可能で拡張可能なプロセッサの使用が実現できる。同時に、ソフトウェアおよび命令セットアーキテクチャのレベルで設計を行うことにより、設計サイクルが著しく短縮されると共に検査の努力およびリスクが軽減される。
【０００４】
米国特許第 6,282,633号明細書（2001年8月28日出願、“High Date Density RISC Processor,”）、米国特許出願第 09/246,047号（1999年2月5日出願、“Automated Processor Generation System for Designing a Configurable Processor and Software,”）、米国特許出願第 09/322,735号（1999年5月28日出願、“System for Adding Complex Instruction Extensions to a Microprocessor,”）、米国特許出願第 09/506,502号（2000年2月17日出願、“Improved Automated Processor Generation System for Designing a Configurable Processor and Software,”）は、マイクロプロセッサアーキテクチャおよび設計を劇的に進歩させた。なお、これらの米国特許および米国特許出願は全て、その権利が本出願によって所有されており、この明細書において参考文献とされている。
【０００５】
とくに、これらの従来の米国特許および米国特許出願には、高性能ＲＩＳＣプロセッサおよびこのような高性能ＲＩＳＣプロセッサのカストマイズされたバージョンをユーザ仕様（たとえば、割込みの数、プロセッサインターフェースの幅、命令／データキャッシュのサイズ、ＭＡＣまたは乗算器を含むこと）とインプリメンテーション目的とに基づいて発生することのできるシステムが詳細に記載されている。そのシステムは、プロセッサのソフトウェアツール（コンパイラ、リンカ、アセンブラ、デバッガ、シミュレータ、プロファイラ等）と共にそのプロセッサのレジスタ転送レベル（ＲＴＬ）表現と、このＲＴＬ表現を製造可能な幾何学的表現に変換するための合成および配置ならびに経路指定スクリプトとを発生する。システムはさらに、そのアプリケーションにおいて一般に使用される機能に対するハードウェアサポートを提供し、ソフトウェアフレキシビリティとハードウェア性能との間における理想的なトレードオフを達成するプロセッサ拡張を可能にする評価ツールを備えている。
【０００６】
一般に、図１に示されているように、システムによって発生されたプロセッサ102は、実質的には、米国特許第 6,282,633号明細書に記載されているプロセッサである構成可能なコア104と、オプションの特定用途向けプロセッサ拡張子106のセットとを含んでいることができ、その拡張子は、上記に参照されている米国特許出願に詳細に記載されているように、テンシリカ命令拡張（Ｔｅｎｓｉｌｉｃａ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｅｘｔｅｎｓｉｏｎ：ＴＩＥ）言語命令および、または別の高レベルのハードウェア記述言語命令で記述されることができる。上記に参照されている米国特許および米国特許出願のプロセッサおよび発生システムは、カリフォルニア州サンタバーバラのテンシリカ社から販売されている製品に具体化される。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記のプロセッサおよび発生システムは多くの利点を提供したが、このプロセッサは、単一の計算タスクがたとえどんなに複雑でも、これを行うある１つの命令を限定することによって制限された。同時に行われることのできる計算タスクの数を増加することが、組込まれたシステムの性能をさらに改良する手段である。この目的を達成するために、典型的にＶＬＩＷマシンと呼ばれる従来技術のいくつかのマイクロプロセッサ（たとえば、Ｉｎｔｅｌ  ＩＡ−６４アーキテクチャ等）が発明され、多数の演算が同時実行のために単一の命令にパックされることを可能にした。このようなマイクロプロセッサにおいて、１つの命令は、それぞれが他のものとは無関係の１組の演算を行うことのできる多数の演算スロットを含んでいる。同時実行は、並列計算の演算を検出してその演算を同時実行のためのＶＬＩＷ命令にパックするＣ／Ｃ＋＋コンパイラによって、あるいはプログラマがこれらの演算をＶＬＩＷ命令に手動で分類することによって行われる。しかしながら、これら全ての従来技術のＶＬＩＷマシンは固定された命令セットを有するように制限され、特定用途向け拡張子をサポートするように構成されることはできない。
【課題を解決するための手段】
【０００８】
本発明は、アドバンスド命令をマイクロプロセッサに追加するシステムに関する。このシステムは、新しい命令を形式的に捕らえる言語と、拡張されたプロセッサに対するハードウェアインプリメンテーションおよびソフトウェアツールを発生する方法とを含んでいる。拡張言語は、ＶＬＩＷ命令、複合的なロード／記憶命令、機能を使用するもっと強力な記述スタイル、もっと強力なレジスタオペランド、例外を発生する命令、および新しい組込みモジュールセットの追加を行う。その方法は、新しい命令に対する完全にパイプラインされたマイクロアーキテクチャインプリメンテーションを、標準的なＣＡＤツールにより処理されることのできる合成可能なＨＤＬ記述の形態で発生することができる。この方法はまた、新しい命令を有するマイクロプロセッサ用のソフトウェア開発ツールを拡張するためのソフトウェアコンポーネントを発生することができる。
【０００９】
１つの特徴によると、本発明によるプロセッサ発生システムは、システム設計者が特定用途向けにカストマイズされたＶＩＬＷマイクロプロセッサを高い性能、低いハードウェアコストおよび低い電力消費を達成するように設計することを可能にすることにより、このプロセッサ発生システムの構成可能で拡張可能な特徴を改良すると共に、固定された命令セットＶＬＩＷマシンを改良する。
【発明を実施するための最良の形態】
【００１０】
以下における本発明の特定の実施形態の詳細な説明および添付図面を検討することにより、本発明のこれらおよびその他の特徴が当業者に明らかになるであろう。  
以下、図面を参照として本発明を詳細に説明する。なお、この図面は、当業者が本発明を実現できるようにするために本発明の例示として与えられたものである。以下の図面および例は、本発明の技術的範囲を制限するものではないことに注意されたい。さらに、本発明のある構成要素が既知のコンポーネントを使用して部分的または完全に構成されることが可能である場合、このような既知のコンポーネントは、本発明を理解するために必要な部分だけが説明され、その他の部分の詳細な説明は本発明を不明瞭なものにしないために省略される。さらに、本発明は、この明細書において例示によって示されている既知のコンポーネントに等価な現在および将来知られるものに等価なものまで包含している。テンシリカ命令拡張子（ＴＩＥ）言語参照マニュアルはこの開示の一部となっており、この明細書に付録として添付され、ここにおいて参考文献とされている。
【００１１】
図２は、本発明の命令拡張子にしたがって発生されることができる例示的なプロセッサを示すトップレベルのブロック図である。図２に示されているように、この発生されたプロセッサは、一般に、ＶＬＩＷ命令のようなアドバンスド命令を復号化することのできる命令フェッチチユニット210を含んでいる。そのシステムは、ＶＬＩＷコプロセッサ208による実行のための新しい命令とＴＩＥデータ路204に対する別のカストマイズされた命令との両者を形式的に捕らえる強化された拡張言語（ＴＩＥ）を含んでいる。拡張言語はさらに、いくつかの構成可能なロード／記憶ユニット212により使用される複合的なロード／記憶命令、共有機能を206を含むもっと強力な記述スタイル、レジスタファイル214を利用するもっと強力なレジスタオペランド、ランタイム演算中にプロセッサ例外を定義する新しい方法、および新しい組込みモジュールセットを提供する。
【００１２】
本発明は、カストマイズされた高性能プロセッサを発生すると共にこのカストマイズされたプロセッサに対するハードウェア記述およびソフトウェアツールをサポートする基本的なＴＩＥ言語およびそのコンパイラならびにその他のツールが示されている前の米国特許明細書および米国特許出願に記載の技術に基づいている。本発明は、付加的なプロセッサハードウェアおよび関連したツールを発生する新しい構造を有するＴＩＥ言語にまで拡張されるものであり、この開示には、新しい言語構造がどのようなものなのか、およびＴＩＥコンパイラがこれらの構造をどのようにしてサポートするのかが記載されている。したがって、この明細書においては、前に開示された米国特許および米国特許出願の内容を参考文献とし、本発明の新しい特徴だけを詳細に説明する。しかしながら、要するに、この組合せられた開示は、当業者がその拡張されたプロセッサに対するハードウェアインプリメンテーションおよびソフトウェアツールを発生する方法を実現することを可能にしている。
【００１３】
上述したように、また、図２に示されているように、本発明のある特徴は、ＶＬＩＷコプロセッサによる実行のためのＶＬＩＷ命令のようなアドバンスド命令を復号化する能力にある。本発明によって使用可能にされるＶＬＩＷ命令を利用することのできるコプロセッサの１つの可能な構成は、本出願人の別出願である米国特許出願第10/145,380号（ＴＥＮ−０１４）に詳細に示されている。このような構成例において、プロセッサコア202による実行のために１６ビットおよび２４ビット命令に加えて、ＶＬＩＷ命令が提供される（コア命令を実行する構造は本発明の簡明化のために詳しくは示されていないが、しかし、それは、たとえば、米国特許第 6,282,633明細書に記載された構造により実施されることができる）。
【００１４】
図３のＡには、本発明によるＶＬＩＷ命令302の１例が示されている。この例において、ＶＬＩＷ命令は６４ビットである。しかしながら、本発明はこのサイズのＶＬＩＷ命令に限定されるものではない。命令長は、リトルエンディアン（little-endian）システムに対する命令の最小桁のビットから決定されると都合がよい。図３の例については、命令302の最小桁のニブル（ビット０−３）が命令長を特定する。ビッグエンディアン（big-endian）システムでは、サイズの特定は最大桁ビットにより行われることが好ましい。
【００１５】
本発明の１例によるＶＬＩＷ命令セットにおいては、演算（ｏｐ）は、実行ユニットによって行われる計算タスクである。図３に示されているように、本発明のＴＩＥにより定義されるＶＬＩＷ命令はスロットの特定の組合せを含み、それはこの例では３つである。多数の命令フォーマットが存在している可能性が高いので、ある１つのスロットは複数フォーマットに属していることができる。あるＶＬＩＥ命令の中のスロットは、独立的に動作するばらばらのパイプラインされた実行ユニットを規定する。それにもかかわらず、ある１つの命令スロットは複数のｏｐを行うことができ、ある１つのｏｐは複数のスロットに属することができる。
【００１６】
さらに図３のＢには、どのようにＴＩＥを使用してＶＬＩＷ命令およびフォーマットを定義したら、カストマイズされたハードウェアがプロセッサ中において生成されるかが示されている。たとえば、ＶＬＩＷおよびその他の命令のサイズを規定することにより命令フェッチユニット210における長さデコーダ304の構造が決定される。さらに、種々の命令フォーマットの定義により、特定のフォーマットデコーダ306が命令フェッチユニット210中において発生される。最後に、各スロットに対して規定された演算のセットは、ＶＬＩＷコプロセッサ208中の分離したパイプラインされた実行ユニット308のそれぞれの構造を決定する。
【００１７】
図４には、本発明の１例による規定されたプロセッサ中のＶＬＩＷ命令に対する演算セットを決定するプロセスが全体的に示されている。図４に示されているように、命令の開始はプログラムカウンタ（ＰＣ）によって示される。次の命令の長さ（ビットの数）は、長さ復号化ビット（ＬＤ）中の値を観察することによって決定される。本発明の１例においては、ＬＤフィールド中の値１４は、現在の命令の長さが６４ビットであることを示している。フォーマット復号化ビット（ＦＤ）中の値を見ることにより、所定のフォーマットはさらにいくつかのフォーマットに符号化されることができる。１つの構成例において、ＦＤフィールド中の値２はフォーマットｆ６４ｂを示す。各フォーマットは、１組の演算スロットから構成されている。フォーマットが知られると、スロットが抽出されることができ、そのスロット中のフィールドが抽出されることができ、演算コードが復号化されることができ、オペランドが計算されることができる。これらは、行われるべき演算のセットを識別する基本的なステップである。これらのステップの詳細は後のセクションで説明される。
【００１８】
以下のセクションには、ＶＬＩＷ命令を捕捉して関連したハードウェア記述およびソフトウェアツールを発生する新しいＴＩＥ構造が示されている。
【００１９】
ＶＬＩＥ命令拡張子の記述における最初のステップは、それらの長さを特定することである。１つの構成例において、新しい命令長はＴＩＥステートメント：
ｌｅｎｇｔｈ［ｉ-ｎａｍｅ］［ｉ-ｌｅｎｇｔｈ］｛ｅｘｐｒｅｓｓｉｏｎ｝
によって定義され、ここでｉ-ｎａｍｅは、その長さを参照するために使用されることのできる特有の識別子であり、ｉ-ｌｅｎｇｔｈは命令長をビットで特定し、ｅｘｐｒｅｓｓｉｏｎは、可変的なＩｎｓｔＢｕｆにおける命令長を決定する復号化論理を特定するために随意に使用される。１つの構成例において、ｉ-ｌｅｎｇｔｈは８ビットの倍数で特定されなければならず、最小桁のニブルだけが表現の中で使用される。
【００２０】
命令長の定義がＴＩＥプログラム中に含まれているとき、そのプログラムはＴＩＥコンパイラによって処理される。ＴＩＥコンパイラ中のハードウェア論理手段およびソフトウェアツールの発生機能は共通した方法を共用する。この方法によって、長さ復号化フィールド中のｍｉｎ-ｔｅｒｍを命令長にマップした長さテーブルが生成される。長さ表現によって参照された命令ビットだけが関連している。このテーブルは、これらのビットの値のあらゆる可能な組合せに対するエントリを含んでいる。これらのビットの値の組合せは論理表現中のｍｉｎ-ｔｅｒｍに類似しており、また、それらはＴＩＥコンパイラによってこのようなものとして扱われる。図５には、ＴＩＥ長さステートメントから長さテーブルを発生する１つの方法が示されている。たとえば、ＴＩＥプログラムが以下の長さ表現： 
【表１】
2005525651.tif 000002
【００２１】
を含んでいる場合、以下の長さテーブルが発生される：
【表２】
2005525651.tif 000003
【００２２】
上記の構成された長さテーブルを使用して、ハードウェア復号化論理は図６において説明されるプロセスによって構成されることができる。上記の例を使用すると、この発生されるハードウェアは以下のようなものである：
【表３】
2005525651.tif 000004
【００２３】
上記の構成された長さテーブルを使用して、ソフトウェア復号化ルーチンは図７において説明されるプロセスによって構成されることができる。上記の例を使用すると、発生されるソフトウェア復号化ルーチンは以下のようなものである：
【表４】
2005525651.tif 000005
【００２４】
上記の例においては、復号化フィールドは４ビット幅に制限されていることに注意しなければならない。これは、効率的なハードウェア復号化論理を生じさせる好ましい実施形態である。しかしながら、一般的な方法は、復号化論理における任意のビット数を許容しており、このような別の実施形態は本発明に含まれる。
【００２５】
さらに、上記の例は、復号化論理表現に制限を課していることに注意しなければならない。再び、これは、効率的な復号化論理に対する好ましい実施形態である。一般的な方法は、復号化論理の任意の仕様を許容している。
【００２６】
ＶＬＩＷ拡張子の追加における別のステップは、このような命令のフォーマットを定義することである。１つの構成例において、新しいＶＬＩＷ命令のフォーマットは、以下のＴＩＥステートメントを使用して定義されることができる：
ｆｏｒｍａｔ［ｎａｍｅ］［ｌｅｎｇｔｈ］｛ｄｅｃｏｄｉｎｇ｝
ここで、ｎａｍｅはそのフォーマットに対する特有の識別子であり、ｌｅｎｇｔｈは前に定義された長さの名称であり、オプションの復号化はその命令フォーマットに対する復号化論理を特定する表現である。このようなステートメントを含むＴＩＥプログラムが生成されたとき、ＴＩＥコンパイラ中のハードウェア論理およびソフトウェアツールの発生機能は共通した方法を共用する。それは、フォーマット復号化フィールド中のｍｉｎ-ｔｅｒｍを命令フォーマットコードにマップした各命令長に対するフォーマットテーブルを生成することである。ＴＩＥフォーマットステートメントからフォーマットテーブルを発生するプロセスは図８に示されている。たとえば、ＴＩＥプログラムが以下のフォーマット定義：
【表５】
2005525651.tif 000006
【００２７】
を含んでいる場合、長さ１６４に対して以下のようなフォーマットテ―ブルが生成される：
【表６】
2005525651.tif 000007
【００２８】
上記の構成されたフォーマットコードテーブルを使用すると、ハードウェアフォーマット復号化論理は図９において説明されるプロセスによって構成されることができる。上記の例を使用すると、発生されるハードウェアは以下のようなものである：
【表７】
2005525651.tif 000008
【００２９】
上記の構成されたフォーマットコードテーブルを使用すると、ソフトウェアフォーマット復号化ルーチンは図１０において説明されるプロセスによって構成されることができる。上記の例を使用すると、発生されるソフトウェア復号化ルーチンは以下のようなものである：
【表８】
2005525651.tif 000009
【００３０】
ＶＬＩＷ拡張子の追加における別のステップは、演算スロットのフォーマットを定義することである。１つの構成例において、あるＶＬＩＷ命令に対する新しい演算スロットのフォーマットは、以下のＴＩＥステートメントを使用して定義されることができる：
ｓｌｏｔ［ｎａｍｅ］［ｆｏｒｍａｔ-ｎａｍｅ［ｉｎｄｅｘ：ｉｎｄｅｘ］］
ここで、ｎａｍｅはそのスロットに対する特有の識別子であり、ｆｏｒｍａｔ-ｎａｍｅは前に定義されたフォーマットの名称である。ビット索引はそのフォーマットの有効な索引でなればならず、すなわち、それらはそのフォーマットに対する命令長の範囲内のものでなければならない。スロット名は同じまたは異なったフォーマットで何度でも定義付けられることができるが、全ての定義は同じ数のビットを含んでいる。
【００３１】
このようなスロットステートメントを含むＴＩＥプログラムが生成されたとき、ＴＩＥコンパイラのハードウェア論理およびソフトウェア発生機能は、それらスロットを抽出することのできる論理を発生する。たとえば、ＴＩＥプログラムは、以下のステートメントを含んでいることができる：
【表９】
2005525651.tif 000010
【００３２】
ハードウェア構成において、ある変数を使用してあるスロットの内容を表現することが便利なことが多い。スロット変数の値は定義から直接得られる。上記の例を使用して、ｓｌｏｔ ａｌｕをａｌｕスロットに対する変数とすると、ＨＤＬステートメントは以下のようなものとなる：
ａｓｓｉｇｎ  ｓｌｏｔ ａｌｕ＝｛ＩｎｓｔＢｕｆ［２３：４］，ＩｎｓｔＢｕｆ［２７：２４］｝；
このＨＤＬは、そのフォーマット名（たとえば、“ｆ６４”）を命令バッファ（“ＩｎｓｔＢｕｆ”）で置換するだけでＴＩＥスロットステートメントから生成される。
【００３３】
ソフトウェアツールにおいては、１つの変数を使用してスロットの内容を表現することもまた有用である。同じ例を使用し、ｓｌｏｔ ａｌｕをａｌｕスロットに対する変数とすると、Ｃステートメントは以下のようなものになる：
ｓｌｏｔ ａｌｕ＝ＩｎｓｔＢｕｆ＆０ｘｆｆｆｆｆ０｜（ＩｎｓｔＢｕｆ＞＞２４）＆０ｘｆ；
（スロットフィールドを抽出して組合せるためにＣでシフトおよびマスク演算のシーケンスを発生することは簡単であり、その方法は容易に明らかになるものである。）
【００３４】
ＶＬＩＷ拡張子の追加における次のステップは、演算スロットに対するフィールドを定義することである。１構成例において、あるＶＬＩＷ命令に対する新しい演算スロットのフォーマットは、フィールドを含むことができ、フィールドは異なったスロットにおいて使用されることができる。新しい演算フィールドは以下のＴＩＥステートメントを使用して定義されることができる：
ｆｉｅｌｄ［ｎａｍｅ］［ｆｉｅｌｄ-ｎａｍｅ［ｉｎｄｅｘ：ｉｎｄｅｘ］  ｏｒ  ｓｌｏｔ-ｎａｍｅ［ｉｎｄｅｘ：ｉｎｄｅｘ］］
ここで、ｎａｍｅはそのフィールドに対する特有の識別子であり、ｆｉｅｌｄ-ｎａｍｅおよびｓｌｏｔ-ｎａｍｅはそれぞれ前に定義されたフィールドまたはスロットの名称である。ビット索引はフィールドまたはスロットと相対的であり、命令バッファ内において絶対的ではなく、また、そのフィールドまたはスロットの有効な索引でなればならない。
【００３５】
このようなフィールドステートメントを含むＴＩＥプログラムが生成されたとき、ＴＩＥコンパイラのハードウェア論理およびソフトウェア発生機能は、それらフィールドを抽出することのできる論理を発生する。とくに、ＴＩＥコンパイラは生成された各フィールドに対するスロットセットを決定するであろう。ある１つのフィールドに対するスロットセットは、そのフィールドを含むスロットのセットである。たとえば、ＴＩＥプログラムは、以下のステートメントを含んでいることができる：
【表１０】
2005525651.tif 000011
【００３６】
その後、コンパイラは以下のスロットセットを発生する：
【表１１】
2005525651.tif 000012
【００３７】
ＶＬＩＷ拡張子の追加における別のステップは、演算コードを定義することである。１構成例において、あるＶＬＩＷ命令に対する新しい演算コードは、異なったスロットにおいて使用されることができる。新しい演算コードは以下のＴＩＥステートメントを使用して定義されることができる：
ｏｐｃｏｄ［ｎａｍｅ］［ｆｉｅｌｄ-ｎａｍｅ＝ｓｉｚｅｄ  ｃｏｎｓｔａｎｔ］
ここで、ｎａｍｅはその演算コードに対する特有の識別子であり、ｆｉｅｌｄ-ｎａｍｅは前に定義されたフィールドの名称である。命令拡張子は、ユーザ定義ロードおよび記憶命令の例外を備えたＣＵＳＴ０またはＣＵＳＴ１定義済演算コード名のサブ演算コードとして定義されることが好ましい。
【００３８】
このような演算コードステートメントを含むＴＩＥプログラムが生成されたとき、ＴＩＥコンパイラのハードウェア論理およびソフトウェア発生機能は、それら演算コードを認識することのできるデコーダ論理を発生する。これの１つの特徴として、ＴＩＥコンパイラは生成された各演算コードに対するスロットセットを決定し、ある演算コードに対するスロットセットは、その演算コードを特定するフィールドを含んでいるスロットのセットである。たとえば、ＴＩＥプログラムは、以下のステートメントを含んでいることができる：
【表１２】
2005525651.tif 000013
【００３９】
その後、以下のスロットセットが決定される：
【表１３】
2005525651.tif 000014
【００４０】
認識できるように、演算コードｏ１はスロットｓ１およびｓ２の両者において定義される。演算コードｏ２はスロットｓ１のみにおいて定義される。
【００４１】
演算コードをオペランドと関連付ける命令（演算）クラスは、ＴＩＥ  ｉクラスステートメントにより定義される。ｉクラスが定義されたスロットのセットは、ｉクラスのスロットセットと呼ばれる。あるｉクラスは演算コードおよびオペランドにおいて定義されているので、そのｉクラスに対するスロットセットは直接は分からない可能性がある。あるｉクラスのスロットセットを決定する１つの方法の例は、全ての演算コードに対するスロットセットとオペランドにより使用されたフィールドのスロットセットの共通部分をｉクラス定義で決定することである。
【００４２】
各ｉクラスのスロットセットが与えられた場合、各スロット中の演算コードを識別するための復号化論理を発生する方法は、上述された米国特許出願に記載されている方法と同じである。上述された米国特許出願におけるＴＩＥ記述によるように、演算コードに対するｉクラス、意味論および参照定義は、その演算コードを含むある１つの命令の振舞い、および、したがって、その演算コードに対して決定されたＶＬＩＷスロットセットに対する実行ユニットに関連したハードウェアおよびソフトウェアを決定することとなる。
【００４３】
再び図２を参照とすると、本発明の別の特徴は構成可能ないくつかのロード／記憶ユニットにより動作する能力であり、このことは米国特許出願第10/146,651号（ＴＥＮ−０１５）にさらに詳細に説明されている。さらに別の特徴は、強化されたインターフェースをロード／記憶ユニットに提供することである。多数のロード／記憶命令拡張子がある共通した論理を共用することを可能にするために、本発明はＴＩＥ言語にある新しい構造を追加する。以下、これらの構造の定義および使用法を説明する。
【００４４】
従来の米国特許および米国特許出願のプロセッサ発生システムを使用すると、ロード命令はメモリからワード全体（多数のバイト）を読出す。このワード中のバイトの一部（ｓｕｂｓｅｔ）を、その残りを読出すことなく読出す方法は存在しなかった。あるメモリマップされた装置について、１つのある値を実効的に読出すことにより、そのデータがその装置から除去される。このような装置について、所望しないデータ（バイト）を読出すことは、極めて望ましくないことであり、その問題について稼動する非常に多くの付加的なハードウェアを必要とする可能性が高い。同様に、従来のシステムにおける記憶命令は常にワード全体をメモリ中に書込む。ワード中のバイトの一部だけを書込むことは不可能であった。本発明は、新しく提供されるロードバイトディスエーブルおよび記憶バイトディスエーブルインターフェース信号を使用することによりロードまたは記憶動作中に読出されるか、あるいは書込まれる個々のバイトを特定する一般的な方法を提供する。
【００４５】
この方式により、バイトディスエーブル論理は、ロード／記憶ユニットにおいて一度構成され、全てのプロセッサコア202命令および全てのユーザ定義ＴＩＥデータ路204命令を含む全てのロード／記憶命令の間において共用される。
【００４６】
従来のシステムの別の例示的な限界においては、メモリから読出されたデータは、そのデータが読出される仮想アドレスの下位ビットにしたがって特定の方法で回転される。メモリに書込まれたデータは全く回転されない。ロードまたは記憶命令がある別の方法でデータが回転されることを必要とした場合、付加的な論理手段が使用されなければならない。本発明は、読出しおよび書込みデータに対する回転量を特定し、個々の命令意味論論理中に余分な回転論理を有している必要性をなくし、多くの命令がその回転論理を共用することを可能にするさらに一般的な方法を提供する。
【００４７】
この新しい機能は、回転量インターフェース信号によって与えられる。この方式により、回転論理は、ロード／記憶ユニットにおいて一度実行され、全てのプロセッサコア202命令および全てのユーザ定義ＴＩＥ命令を含む全てのロード／記憶命令の間において共用される。図１２には、共通のロード／記憶ユニットに対する単一の共用される回転量信号を生成するために種々のロード／記憶命令をどのようにして組合せるかが示されている。
【００４８】
別の例として、符号のついた（ｓｉｇｎｅｄ）データを処理する多くのロード命令に対して、メモリから読出されたデータに関して符号拡張を行うことが一般的である。従来のシステムを使用すると、これは命令意味論で行われることができる。しかしながら、符号拡張論理は、典型的に、符号ビットを何回も複製することを必要とし、したがって符号ビットの出力ローディングを増加させ、それを潜在的に意味論論理におけるクリティカルなタイミング路にする。本出願人の別出願の米国特許出願第10/146,651号（ＴＥＮ−０１５）には、ロード／記憶ユニット中のクリティカルなタイミング路から演算を除去させることによりこの符号拡張を行う方法が記載されている。本発明は、ユーザ定義命令が命令意味論ではなくロード／記憶ユニットの中で符号拡張論理を使用する方法を提供し、設計における潜在的なタイミング問題を回避する。符号拡張要求を捕捉するために、本発明は２つの新しい信号ＳｉｇｎＥｘｔｅｎｄＦｒｏｍおよびＳｉｇｎＥｘｔｅｎｄＴｏをＴＩＥ言語に付加する。ＳｉｇｎＥｘｔｅｎｄＦｒｏｍは符号ビットを含むバイトの位置を特定し、それは典型的にロードデータの最大桁である。ＳｉｇｎＥｘｔｅｎｄＴｏは、符号拡張データ中の最大桁バイトの位置を特定する。たとえば、読出しデータが8’b10001111であり、ＳｉｇｎＥｘｔｅｎｄＦｒｏｍは１であり、ＳｉｇｎＥｘｔｅｎｄＴｏは２である場合、拡張されたデータは16’b1111111110001111となる。
【００４９】
この新しい機能により、ユーザＴＩＥ命令は、ハードウェアを追加せずに符号拡張されたデータをメモリからロードすることができる。以下は、この特徴の使用方法の一例である：
【表１４】
2005525651.tif 000015
【００５０】
この記述は、“ars+imm8”により特定されたメモリ位置から１６ビットデータを読出し、それを３２ビットデータに符号拡張し、その符号拡張されたデータを“art”に置く符号拡張されたロード命令を特定する。
【００５１】
ほとんど全てのアプリケーションにおいて、ロード／記憶動作は、ある条件が満足されたときにのみ行われる。多数の命令を使用してその条件付きロード／記憶動作を行うことはしばしば非効率的である。たとえば、以下のコードシーケンス：
【表１５】
2005525651.tif 000016
【００５２】
は典型的にいくつかの命令：状況の評価、ブランチ、およびロードを生じる。さらに別の非効率性は、典型的なブランチ命令に関連した追加の遅延から生じる。データを条件付きでロードすることのできる単一の命令でこのタスクを計算することが望ましい。しかしながら、従来のシステムにおいては、ロードまたは記憶命令が出された場合、ロードまたは記憶動作を取消す方法が存在せず、条件付きロード／記憶命令を実施することは不可能であった。本発明は、上述されたＬｏａｄＢｙｔｅＤｉｓａｂｌｅおよびＳｔｏｒｅＢｙｔｅＤｉｓａｂｌｅインターフェース信号を使用することによりこれを可能にする。ＬｏａｄＢｙｔｅＤｉｓａｂｌｅ／ＳｔｏｒｅＢｙｔｅＤｉｓａｂｌｅの定義は、全てのバイトがディスエーブルされた場合には関連したロード／記憶動作が取消されることを指定している。以下の例は、この特徴の使用方法を示している：
【表１６】
2005525651.tif 000017
【００５３】
この記述は、アドレスが偶数であるときにデータを条件付きでロードするロード命令を実施する。
【００５４】
多数の並列演算が命令によって行われることを可能にすることは、システム性能を増加させるための鍵である。本発明によってサポートされたＶＬＩＷアーキテクチャは、上述されたようにある１つの命令の中に多数の演算スロットを提供することによりこれを行う。これによって、いくつかのメモリ動作を同時に行うことが可能になる。本出願人の別出願の米国特許出願第10/146,651号（ＴＥＮ−０１５）には、多数のロード／記憶ユニットの実施について記載されている。本発明は、ユーザがロード／記憶命令を特定のロード／記憶ハードウェアユニットと関連付けるＴＩＥの付加的な機能を追加する。さらに、本発明は、どの特定のロード／記憶ユニットからも独立したロード／記憶命令を特定する方法と、および利用可能なハードウェアロード／記憶ユニットにユニット独立演算を自動的にマップする方法を提供する。
【００５５】
ユニット独立メモリインターフェースを使用して特定された任意のロード／記憶演算については必要とされるユニットの総数、すなわち、最大アプリケーション性能のようなある基準を最適化するように、自動手順が使用されて特定のハードウェアロード／記憶ユニットに演算を割当てることができる。図１３には１つの好ましい実施形態が示されている。ロード／記憶ユニットにユニット独立ロード／記憶演算を割当てるプロセスは、この命令の同じスロット位置ですでに使用されたロード／記憶ユニットを調べることによってスタートする。各スロット位置はサイクル当り１つの演算しか発生することができないので、このような割当ての結果、リソース（ロード／記憶ユニット）競合は生じない。このようなロード／記憶ユニットが見出されることができない場合、割当てプロセスは、どの場所でも使用されていないロード／記憶ユニットを調べる。第２のステップが失敗したとき、このプロセスはエラーメッセージをユーザに発生する。
【００５６】
再び図２を参照すると、本発明の別の特徴は、共用される機能を定義する能力である。従来技術のプロセッサ発生システムにおいては、ＴＩＥ命令の意味論は、論理表現による変数の割当ての集まりとして表現される。これは任意の命令意味論を特定するのに十分であったとしても、ある１つの命令グループの中で共通した計算手続きを表現する方法は存在しなかった。一例として、以下は、２つのＴＩＥ命令であるＬｏａｄおよびＳｔｏｒｅの意味論記述である：
【表１７】
2005525651.tif 000018
【００５７】
“Ｌｏａｄ”命令は３２ビットをメモリからロードし、状態レジスタ“ｓｗａｐ”の値に応じてバイトを条件付でスワップする。同様に、“Ｓｔｏｒｅ”命令は、状態レジスタ“ｓｗａｐ”の値に応じてバイトを条件付でスワップする前に３２ビットをメモリに記憶する。バイトスワッピング計算は両方の意味論中に存在しているが、しかし２回指定される必要がある。ＴＩＥ機能構造を使用すると、この記述は、以下のように構造がさらにはっきりし、理解できるものにされることが可能である：
【表１８】
2005525651.tif 000019
【００５８】
本発明のＴＩＥ機能構造は、それが同じ計算を数回並列に行うときに単一の命令意味論を構成するのに非常に有用である。以下の例において、命令ａｄｄｓｕｂ４×８は、状態レジスタの値“ｓｕｂ”に応じて２つの８ビット加算または減算を行う：
【表１９】
2005525651.tif 000020
【００５９】
明らかに、８ビットのａｄｄｓｕｂユニットは４回指定される。本発明の新しいＴＩＥ機能構造を使用すると、同じ記述は、以下のようにその構造がさらにはっきりし、理解できるものにされることができる：
【表２０】
2005525651.tif 000021
【００６０】
従来のプロセッサ発生システムは、いくつかの命令意味論に対して共通のハードウェアを共用することを可能にする。しかし、共用を行うために、ユーザは命令の記述を単一の意味論セクションに併合し、共用を手動で指定する必要がある。たとえば、ＡＤＤ２、ＡＤＤ３およびＡＤＤ４を、２、３または４つの数を加算する３つの命令とする。従来技術を使用すると、その記述は次のようなものになる：
【表２１】
2005525651.tif 000022
【００６１】
本発明の共用される機能構造を使用すると、その命令意味論は以下のように別々に指定されることができる：
【表２２】
2005525651.tif 000023
【００６２】
ソフトウェアとは異なり、ハードウェア記述言語は、２つの異なったモジュールが１つの論理ブロックを共用する直接的な方法を提供しない。本発明は、ＴＩＥコンパイラが多数の意味論モジュールがある１つの機能を共用するためのＲＴＬインプリメンテーションを自動的に発生するプロセスを提供する。このプロセスは、以下のステップを伴なう：
（１）共用される機能に対するあるモジュールを生成し、
（２）共用される機能モジュールに対するあるラッパーモジュールを生成し、
（３）その共用される機能の各入力に対して、
（ａ）Ｎ個の入力を備えたｍｕｘを生成し、ここでＮは共用される機能を使用する意味論モジュールの数であり、
（ｂ）ｍｕｘの出力を共用される機能に供給し、
（４）共用される機能を使用する各意味論モジュールに対して、
（ａ）共用される機能の各入力に対して１つの出力を生成し、
（ｂ）その共用される機能の出力に対して１つの入力を生成し、
（ｃ）意味論出力を入力としてラッパーモジュールに供給し、
（ｄ）そのラッパーモジュール出力を入力として意味論に供給し、
（５）共用される機能のコーラー（ｃａｌｌｅｒ）に対する１つの信号をデコーダにおいて生成し、その信号をそのラッパーモジュールに転送し、
（６）ラッパーモジュールにおいて復号化信号を使用して適切な入力を選択する。  
図１４には、このプロセスを使用して発生された上記の例に対するＲＴＬが示されている。
【００６３】
本発明において共用される機能は、ハードウェア計算ユニットを数回使用する命令（したがって、対話式命令と呼ばれる）を記述する能力を備えたＴＩＥを提供する。これは、従来の発生システムでは不可能であった。この特徴では、計算ハードウェアは何回も繰返される必要があり、その結果余分なハードウェアコストを要した。たとえば、従来のシステムを使用して、２つの１６ビット乗算を行うある命令を実施することが所望された場合、これを行う唯一の方法は、以下の記述で示されているように、２つの１６ビット乗算器を使用することである：
【表２３】
2005525651.tif 000024
【００６４】
本発明のＴＩＥ共用機能構造を使用すると、この命令は以下を使用して記述されることができる：
【表２４】
2005525651.tif 000025
【００６５】
この記述により、１６ビット乗算器はハードウェアにおいて一回だけ構成され、命令ＭＵＬ２の単一の実行中に２回使用される。単一の対話式命令で共用される機能を数回使用するＲＴＬインプリメンテーションは、１つの共用される機能を複数の異なった命令で使用することに非常によく似ている。図１５は、上記の例に対するＲＴＬ構造を示している。対話式命令は１つの共用機能を多数のサイクルで使用するので、論理を発生する命令は、共用機能の使用によって課されるリソース制約を理解していることが重要である。とくに、プロセッサは、このようなリソースコンフリクトが検出されたときは常にその機能を停止される必要がある。前の例を使用すると、プログラムがバック・ツー・バックＭＵＬ２命令を有している場合、第２のものはその機能を１サイクル中停止されなければならない。機能停止を行わなければ、プロセッサは、ステージ２における第１のＭＵＬ２およびステージ１における第２のＭＵＬ２が共用機能ｍｕｌ１６の同時的な使用を共に試みるのを見ていることになる。やがて生じるリソース競合をプロセッサに知らせるために、共用機能はそれぞれ、現在の命令が機能停止される必要があるか否かをプロセッサ制御に知らせる機能停止信号を発生する。機能停止論理は任意の数の方法で実施されることができる。１実施形態において、共用された機能ＲＴＬは、使用リクエストを入力とみなすインターフェースを提供し、そのリクエストが承諾されることができるか否か（すなわち、機能停止信号が真であるときはイエス）をプロセッサ制御装置に知らせる。内部では、それは、前に受取られ、終了されていないリクエストの全てを保持し、任意の新しいリクエストと比較するためにそれらを使用する。図１６は、種々の命令により４つの異なったサイクルで使用されるある共用機能に対する機能停止論理を示している。
【００６６】
図２を参照として上述したように、本発明の別の特徴は、レジスタファイルをさらに効率的でフレキシブルに使用できることである。命令のレジスタオペランドは、そのレジスタファイル中のどのレジスタが計算の入力または出力として使用されるべきかを特定する。従来のプロセッサ発生システムにおいては、レジスタオペランドを指定する方法は１つしかなかった。すなわち、命令のレジスタオペランドフィールド中の実際のレジスタ数を符号化することだけであった。たとえば、以下は、従来技術を使用するあるレジスタオペランドに対するＴＩＥ記述である：
【表２５】
2005525651.tif 000026
【００６７】
このレジスタオペランドの定義は、ＡＲレジスタファイル中の実際のレジスタ数が命令フィールド“ｔ”中に記憶された値であることを指定している。本発明は、レジスタオペランドを指定するはるかに一般的な方法を提供する。
【００６８】
命令によって行われる計算の量を増加させる重要な特徴は、入力および出力データの数を増加させることである。しかしながら、１つの命令の中のビット数は限られているため、命令により使用されることのできるレジスタオペランドの数には限界がある。本発明は、単一のレジスタオペランドがそのレジスタファイル内の多数の隣接したレジスタを指定する方法を提供する。この新しい能力は、強化されたレジスタファイルおよびレジスタオペランド記述に基づいている。１つの記述例は以下のようなものである：
【表２６】
2005525651.tif 000027
【００６９】
ＴＩＥコードのこの例は、レジスタファイルＩＮＴ８が３２の８ビット整数を保持することを宣言する。エントリが２つごとにグループ化されたとき、そのレジスタファイルは８つの１６ビット整数を保持するために使用されることができる。エントリが４つごとにグループ化されたとき、そのレジスタファイルは４つの３２ビット整数を保持するために使用されることができる。図１７には、このレジスタファイルが複数の使用法と共に示されている。
【００７０】
命令の計算効率を増加させるためにこの新しい能力を使用する２つの方法がある。第１の方法は、もっと多くのデータを命令意味論（計算論理）に、およびこれから転送する方法としていくつかの隣接したレジスタをグループ化することである。これは、以下の例により示される：
【表２７】
2005525651.tif 000028
【００７１】
“ｒｅｇｆｉｌｅ”ステートメントは、それぞれが３２ビット長である１６のエントリのベースレジスタを規定する。６４ビット長のレジスタは８つのエントリしか有しないので、それは３ビットフィールドｒｄ、ｓｄおよびｔｄを使用してアクセスされる。同様に、４エントリ１２８ビット長のレジスタファイルは２ビットフィールドｒｑ、ｓｑおよびｔｑを使用してアクセスされる。この記述能力により、２および４つの加算をそれぞれ行うさらに効率的な命令ＡＤＤＤおよびＡＤＤＱを規定することが可能になる。
【００７２】
広いレジスタファイルを使用する第２の方法は、広いデータを表現するために多くのレジスタエントリを使用することである。たとえば、単一の高精度浮動小数点レジスタファイルはまた、半分の数のエントリを備えた二重精度レジスタファイルとみなすことができる。
【００７３】
別の例として、以下のように広いレジスタオペランドをデカルトポイントデータタイプとして使用することを検討する：
【表２８】
2005525651.tif 000029
【００７４】
この例は、３２ビット１６エントリのベースレジスタファイル“ＳＣＡＬＡＲ”と、ある広いレジスタにベースレジスタを２つごとにグループ化する“ＰＯＩＮＴ”ビューを定義している。その後、それは、そのポイントデータタイプを宣言するためにそれがアプリケーションコードで使用されることができるようにｃタイプ“ポイント”を宣言する。広いレジスタファイル“ＰＯＩＮＴ”は半分の数（８）のレジスタしか有していないので、あるレジスタをアドレスするのに３ビット、したがって、フィールド“ｓｃ”、“ｒｃ”および“ｔｃ”の定義があればよい。広いオペランド“ｃｓ”、“ｃｒ”および“ｃｒ”は、広いレジスタファイル“ＰＯＩＮＴ”にアクセスするためにフィールド“ｓｃ”、“ｒｃ”および“ｔｃ”を使用して定義される。最後に、デカルトポイント加算命令“ＣＡＤＤ”が定義される。この記述により、次のようにアプリケーションコードを書くことが可能になる：
【表２９】
2005525651.tif 000030
【００７５】
多くのグループを備えたレジスタファイルを構成する多数の方法が存在する。好ましい方法は、それを階層的に構築することであり、以下に概説する：
ステップ１：レジスタファイルをバンクに分割する。ベースレジスタファイルの多くのバンクを構築する。各バンクレジスタファイル中のエントリの数は、ベースレジスタファイル中のエントリの数を最大グループ数で除算することにより得られる。上記の例について、各バンクは８つのエントリを有している。構築すべきバンクの数は、最大グループ数と同じである。上記の例では、２つのバンクが構築されることになる。
【００７６】
ステップ２：読出しポートを構築する。読出しポートの幅は、ベースレジスタファイル幅を最大グループ数と乗算することにより決定される。上記の例については、幅は６４である。読出しポートは、読出しデータを読出しアドレスの下位ビットにしたがって種々のバンクから選択するｍｕｘによって駆動される。上記の例では、読出しポートの最小桁の３２ビットは、読出しアドレスの最小桁ビットが０である場合にバンク０から選択され、その最小桁ビットが１である場合にはバンク１から選択される。
【００７７】
ステップ３：書込みポートを構築する。レジスタファイルは、各グループ幅に対して１つの書込みデータポートを有している。各バンクへの書込みデータは、現在の書込みグループ数に応じて適切な書込みデータから選択される。上記の例に対しては、バンク０への書込みデータは、その書込みグループ数が１である場合には単一幅書込みデータであり、書込みグループ数が２である場合には２倍の書込みデータの下位の３２ビットである。
【００７８】
ステップ４：機能停止論理を構築する。レジスタファイルの機能停止論理は、各バンクからの機能停止信号の論理的オアに過ぎない。付録Ａとして付されたコードは、上記の例に対するＲＴＬインプリメンテーションを示している。付録Ｂとして付されたコードは、上記の手続きのインプリメンテーションをｐｅｒｌで示している。
【００７９】
ＲＴＬインプリメンテーションにおいて、各入力／出力レジスタオペランドは、対応したレジスタファイルの読出し／書込みポートにマップされる。従来のシステムにおいては、このマッピングはＴＩＥコンパイラによって自動的に行われた。マッピング手続きの結果を無効にする方法は存在しなかった。レジスタファイルの読出しおよび書込みポートの数はそのインプリメンテーションのシリコンの面積およびクロック速度の両者に影響を与えるため、この設計のあるアスペクトの最適化を試みるとき、オペランド対レジスタファイルポート結合をＴＩＥ記述で手動により指定できることが望ましい。本発明はこの新しい能力をＴＩＥに追加する。
【００８０】
多数のレジスタオペランドが単一の物理的レジスタファイルポート（読出しまたは書込み）にマップされると、付加的なｍｕｘ化論理がその読出しまたは書込みアドレスを発生するために必要になる。ｍｕｘへのデータ入力はそのポートに割当てられた各オペランドに由来する。ｍｕｘへの選択信号はデコーダによって発生される。図１８は、その論理の回路構造を示している。
【００８１】
オペランド定義において、オペランド意味論は、命令フィールド中に記憶されている値から実際のレジスタ数を計算する論理である。従来のシステムにおいては、レジスタオペランド意味論は、簡単な恒等関数でなければならない。すなわち、レジスタ数は命令フィールド中にじかに存在していなければならない。簡単であるという利点がこれにあっても、それは時として非常に制限的である。本発明はＴＩＥ言語を拡張して、任意のオペランド意味論記述を許容する。“オペランド”言語構造がオペランド意味論を捕らえるために使用される。
【表３０】
2005525651.tif 000031
【００８２】
ｏｐｅｒａｎｄ-ｎａｍｅは定義されるべきオペランドの名称である。ｆｉｅｌｄ-ｎａｍｅは、オペランド意味論論理への入力として使用される前に定義されたフィールドの名称である。ｒｅｇｆｉｌｅ-ｎａｍｅは、このオペランドが関連付けられた前に定義されたレジスタファイルの名称である。ｃｏｍｐｕｔａｔｉｏｎはオペランド意味論に対する任意の論理記述である。ｆｉｅｌｄ-ｎａｍｅはそのｃｏｍｐｕｔａｔｉｏｎの中で入力として使用されなければならない。さらに、このｃｏｍｐｕｔａｔｉｏｎはまた別のプロセッサ状態および定数を使用することができる。ｃｏｍｐｕｔａｔｉｏｎは、結局、ある値をｏｐｅｒａｎｄ-ｎａｍｅに割当てる。さらに、それは値を別のプロセッサ状態に割当てることができる。
【００８３】
たとえば、レジスタファイル中のレジスタの一部にアクセスするためのあるオペランドを定義することを検討する。命令の中に限られた数のビットが与えられている場合、そのレジスタの一部だけがアクセスされる必要があるとき、時として、あるレジスタオペランド専用のビットの数を減少することが望ましい。これは、以下のＴＩＥ記述において示されている：
【表３１】
2005525651.tif 000032
【００８４】
この例においてレジスタファイルＸＲは多くの異なる方法でアクセスされることができる。“ｘｅｖｅｎ”は任意の偶数レジスタにアクセスするために使用されることができる。“ｘｈｉｇｈ”はレジスタファイルの上半分にアクセスするために使用されることができる。“ｘｆｉｒｓｔ”は第１の２つのレジスタの一方にアクセスするために使用されることができる。“ｘｂａｎｋｅｄ”は、状態ＢＡＮＫにより指定されたＸＲレジスタの４つのバンクの任意の１つにおけるレジスタにアクセスするために使用されることができる。“ｘｔｒａｃｋｅｄ”は１６のレジスタの任意の１つにアクセスすることができるが、しかしそれが状態ＣＯＵＮＴで使用される回数を保存する別の作用を有する。一般的なレジスタオペランドに対するハードウェアを構成するプロセスを以下に概説する：
-オペランドに対するモジュールを生成する
-オペランドによって使用される命令フィールドに対する入力を生成する
-オペランド意味論によって使用される各状態に対する入力を生成する
-オペランド意味論によって使用される各インターフェース信号に対する入力を生成する
-オペランドに対する出力を生成する
-オペランド意味論によって定義された各状態に対する出力を生成する
-オペランド意味論によって定義された各インターフェース信号に対する出力を生成する
-オペランド意味論によって定義された各例外信号に対する出力を生成する
-オペランド意味論をモジュールにコピーする
たとえば、以下のオペランド記述：
【表３２】
2005525651.tif 000033
【００８５】
の結果、
【表３３】
2005525651.tif 000034
【００８６】
を有するｖｅｒｉｌｏｇモジュールが生じる。
【００８７】
従来のプロセッサ発生システムにおいて、レジスタオペランドは命令フィールドの機能として定義されなければならない。本発明は、レジスタオペランドの定義が全ての命令フィールドから独立することを可能にする。命令フィールドに依存しないオペランドは、“暗黙”オペランドと呼ばれる。本発明は、この暗黙オペランドを捕らえるために以下の構造をＴＩＥ言語に追加する。
【表３４】
2005525651.tif 000035
【００８８】
ここで、ｏｐｅｒａｎｄ-ｎａｍｅは定義されるべきオペランドの特有の名称である。ｒｅｇｆｉｌｅ-ｎａｍｅは、このオペランドが関連付けられた前に定義されたレジスタファイルである。ｃｏｍｐｕｔａｔｉｏｎは任意の論理記述であり、最後にある値をｏｐｅｒａｎｄ-ｎａｍｅに割当てなければならないる。
【００８９】
あるレジスタファイルにアクセスするための暗黙オペランドを定義する以下の例を検討する：
【表３５】
2005525651.tif 000036
【００９０】
この例は２つの暗黙オペランドを定義する。“ｘ０”はレジスタファイルＸＲ中の第１のレジスタにアクセスするために使用されることができる。“ｘｒ”は状態ＩＮＤＥＸにより番号を付けられた任意のレジスタにアクセスするために使用されることができる。これらの両オペランドはどの命令フィールドにも依存しないため、それらは暗黙オペランドである。暗黙オペランドのＲＴＬインプリメンテーションは、暗黙オペランドがどの命令フィールドにも依存しないためにオペランドモジュールへのフィールド入力が省略されることを除いて、一般的なオペランドのものに非常によく似ている。
【００９１】
従来のプロセッサ発生システムにおいては、ＴＩＥ命令は例外を提起することはできない。たとえば、除算を行なうと共に、除数が０である場合にゼロ除算例外を提起するＴＩＥ命令を定義することは不可能であった。同様に、ＴＩＥロード命令は、そのアドレスが整列されていないとき、整列されていないロード例外を提起することは不可能であった。本発明はこの新しい能力を追加する。例外を定義するプロセスは、例外を定義し、その例外が提起される条件を指定する２つのステップを有している。以下、それらを説明する。
【００９２】
プロセッサ例外は、ＴＩＥ例外構造を使用して定義されることができる。ある例外は、その例外が採用されたときに評価される論理である意味論を有している。ある例外は、それの意味論論理またはオペランド論理の中の命令によって提起されることができる。ある例外はまた、別の例外の意味論を評価した結果提起されることができる。例外は優先度を有している。命令がいくつかの例外を提起した場合、最高の優先度を有するものがプロセッサによって採用されることになる：
【表３６】
2005525651.tif 000037
【００９３】
ここで、“ｎａｍｅ”は例外の特有の名称である。“ｈｉｇｈｅｒ-ｐｒｉｏｒｉｔｙ-ｌｉｓｔ”は、高い優先度を有する例外名のリストである。例外は、それがリストの中の少なくとも１つの他の例外より高い優先度を有している場合はそのリスト中に存在している必要はない。たとえば、例外Ａが例外Ｂより高い優先度を有し、この例外Ｂが例外Ｃより高い優先度を有している場合、Ｃのｈｉｇｈｅｒ-ｐｒｉｏｒｉｔｙ-ｌｉｓｔ中にＢを入れるだけで十分である。“ｃｏｍｐｕｔａｔｉｏｎ”は、例外が採用されたときに評価されるべき論理を指定する。それはプロセッサ状態およびインターフェース信号を読出し、値をプロセッサ状態およびインターフェース信号に割当てることができる。さらに、それはまたある条件で別の例外を提起することができる。例外意味論論理は、プロセッサインターフェース信号“ＥｘｃｅｐｔｉｏｎＶｅｃｔｏｒ”への割当てを含んでいなければならない。随意に、それは、その例外の理由に関するある情報を例外ハンドラにパスする１つの方法として、ある値をプロセッサ状態ＥＸＣＣＡＵＳＥに割当てることができる。
【００９４】
ある加算命令に対するオーバーフロー例外を定義する一例を検討する：
【表３７】
2005525651.tif 000038
【００９５】
この例は、新しい例外“ａｄｄ ｏｖｅｒｆｌｏｗ”を定義している。それは、例外ＷｉｎｄｏｗＯｖｅｒｆｌｏｗ４、ＷｉｎｄｏｗＯｖｅｒｆｌｏｗ８、およびＷｉｎｄｏｗＯｖｅｒｆｌｏｗ１２より低い優先度を有している。この例外が採用されたとき、プロセッサは、この例外に対するハンドラをロードされなければならない位置32’h40000810にジャンプする。
【００９６】
ある命令がある例外を条件付きで提起することを可能にするために、ＴＩＥ  ｉクラス構造は、例外名のリストを指定するための付加的なクローズを有するように拡張されている。ｉクラス定義により、命令意味論は値を例外名に割当てることができる。ｉクラスの中の例外のリストは、このｉクラスの中の演算コードに対して常に提起されることのできる例外をクオリファイ（ｑｕａｌｉｆｙ）する。たとえば、加算命令が前のセクションで定義されたオーバーフロー例外を提起することができる場合、そのｉクラスは次のようなものになる：
【表３８】
2005525651.tif 000039
【００９７】
このｉクラス定義により、オーバーフローが加算期間中に発生したとき、意味論論理は“ａｄｄ ｏｖｅｒｆｌｏｗ”に１を割当てることができる。
【表３９】
2005525651.tif 000040
【００９８】
あるオペランド意味論の中のある例外を提起することが、本発明により可能にされると共に、それは例外に論理表現を割当てることにより指定されることができる。この表現が１として評価されたとき、およびその例外が演算コードのｉクラスに対する例外のリスト中に含まれるとき、その例外は提起される。たとえば：
【表４０】
2005525651.tif 000041
【００９９】
それは、ある命令がそのレジスタファイル中の最後のエントリへのアクセスを試みたときに“ｌａｓｔ ｅｘｃｅｐｔｉｏｎ”を提起する。
【０１００】
ある命令またはオペランド意味論により提起された例外は１次例外と呼ばれる。別の例外により提起された例外は２次例外と呼ばれる。ある例外意味論の中の２次例外を提起することはまた、本発明により可能にされると共に、例外に論理表現を割当てることにより指定されることができる。その表現が１として評価されたとき、その例外が提起される。たとえば：
【表４１】
2005525651.tif 000042
【０１０１】
例外“ｅｘｃ ｐ”がある命令によって提起されたとき、状態“ＣＯＮＤ”が値“4’b1011”を有している場合、それは例外“ｅｘｃ ｓ”を提起することとなる。
【０１０２】
ここに説明されている例外インプリメンテーションは、１次および２次例外を扱うものである。しかしながら、その方法は一般的であり、例外ネスティングの任意の固定された深さを扱う例示的なインプリメンテーションからの拡張は極めて簡単であり、当業者に明らかである。
【０１０３】
多数の１次例外が提起されたとき、最高の優先度を有するものが選択される。その後、その例外の意味論が評価される。その意味論が１以上の２次例外を提起した場合、その２次例外の中で最高の優先度のものが採用されることになる。２次例外が存在しないとき、その選択された１次例外が採用される。図１９には、例外論理を構成する１つの方法が示されている。クォリファイアの１ブロックは、命令意味論ブロックおよびオペランド意味論ブロックの全てから例外信号を受取る。デコーダからの復号化信号を使用すると、それは、例外が現在の命令によって提起される例外のリスト中に存在しているか否かに基づいて、その例外を選択的にオフに切替える。クォリフィケーション（ｑｕａｌｉｆｉｃａｔｉｏｎ）の後、論理装置はＴＩＥ Ｅｘｃｅｐｔｉｏｎ信号を外部論理装置に対して発生する。外部論理装置はまた、外部例外信号のリストを例外発生論理装置に送る。その後、最高の優先度以外の全ての信号がオフに切替えられるように、組合せられた例外信号が優先度論理ブロックにフィードされる。優先度論理の後、アクティブである例外はせいぜい１つである。優先度をつけることと並行して、１次例外信号は例外意味論ブロックにおいて２次例外信号を発生するための論理を行う。優先度をつけられた１次例外信号と２次例外信号のセットは２次優先度論理ブロックにフィードされる。このブロックにおいて、現在アクティブの１次信号と関連付けられていない２次例外信号はオフに切替えられる。残っている２次信号は優先度をつけられ、最高の優先度を有するものを除いて全てオフに切替えられる。最後に、アクティブな１次信号は、それの２次例外の任意のものがアクティブである場合にオフに切替えられる。２次優先度論理の後、例外信号は、例外意味論によって発生された状態およびインターフェース信号を選択するために使用される。アクティブな例外に対応したものだけが選択される。例外意味論により定義されたインターフェース信号の１つは例外ベクトルである。この例外は、ある例外が生じた場合に次のＰＣとなるように選択される。
【０１０４】
上述したように、本発明の別の特徴はある組込みモジュールの追加である。この点に関して、共通して使用されるある計算は言語定義された演算子を有しないことが認識される。しかしながら、別の言語構造の使用はその記述が非常に冗長であるか、あるいはそれを効率的に使用することが非常に困難である。ＴＩＥは、機能呼出しに類似した方法で呼出される組込みモジュールとして共通して使用される演算子のセットを提供する。以下は、全ての組込みモジュールに共通するルールである：T各組込みモジュールは、計算された幅のそれ自身の定義を有している。その定義は、そのコンテキストの要求される幅により行われない。組込みモジュールへの入力は要求される幅を有しない。ある入力が組込みモジュールの定義によって必要とされる十分なビットを有しない場合には、それは０拡張される。
【０１０５】
以下は、本発明の好ましい構成による組込みモジュールの記述である。  
ＴＩＥａｄｄ：
概要：    ｓｕｍ＝ＴＩＥａｄｄ（ａ，ｂ，ｃｉｎ）
定義：    ｓｕｍ＝ａ＋ｂ＋ｃｉｎ
記述：    キャリーイン（carry-in）による加算。ＴＩＥａｄｄが３つのアーギュメントを持たず、最後のアーギュメントの計算された幅が１でない場合、それはエラーである。ａおよびｂの計算された幅が異なっている場合、さらに狭い入力がその計算された幅において評価され、その後０拡張される。  
ＴＩＥａｄｄｎ
概要：    ｓｕｍ＝ＴＩＥａｄｄｎ（Ａ０，Ａ１，・・・，Ａｎ-１）
定義：    ｓｕｍ＝Ａ０＋Ａ１＋・・・＋Ａｎ-１
記述：    Ｎ数加算。組込みモジュールに対しては少なくとも３つのアーギュメントが存在していなければならない。入力の計算された幅が異なっている場合、さらに狭い入力がそれらの計算された幅において評価され、その後０拡張される。ＴＩＥａｄｄｎ組込みモジュールを使用する利点は、＋演算子を使用するだけの場合より、基礎をなすＲＴＬインプリメンテーションのタイミングおよびエリア効率がはるかによくなることである。  
ＴＩＥｃｓａ
概要：    ｓｕｍ＝｛ｃａｒｒｙ，ｓｕｍ｝＝ＴＩＥｃｓａ（ａ，ｂ，ｃ）
定義：    ｃａｒｒｙ＝ａ＆ｂ｜ａ＆ｃ｜ｂ＆ｃ
ｓｕｍ＝ａ＾ｂ＾ｃ
記述：    キャリー保存加算器。ＴＩＥｃｓａはちょうど３つのアーギュメントを有していなければならない。入力の計算された幅が異なっている場合、さらに狭い入力がそれらの計算された幅において評価され、その後０拡張される。ＴＩＥｃａｓの計算された幅は入力幅の２倍である。その結果の下半分は合計ビットを表し、その上半分はキャリービットを表す。その合計およびキャリーを加算するために、キャリーは１ビットだけ左側にシフトされなければならない。このモジュールは、単一の加算器により後続される一連のｃｓａ減少により得られるいくつかの数の加算または減算を効率的に実施することを可能にするために設けられる。  
ＴＩＥｃｍｐ
概要：    ｛ｌｔ，ｌｅ，ｅｑ，ｇｅ，ｇｔ｝＝ＴＩＥｃｍｐ（ａ，ｂ，ｓｉｇｎｅｄ）
定義：    ｛ｌｔ，ｌｅ，ｅｑ，ｇｅ，ｇｔ｝＝｛ａ＜ｂ，ａ＜＝ｂ，ａ＝＝ｂ，ａ＞＝ｂ，ａ＞ｂ｝
記述：    符号付きおよび符号なし比較。ＴＩＥｃｍｐが３つのアーギュメントを持たず、最後のアーギュメントの計算された幅が１でない場合、それはエラーである。ａおよびｂの計算された幅が異なっている場合、さらに狭い入力がその計算された幅において評価され、その後０拡張される。符号を付けられた入力が真である場合、その比較は符号付データに対するものである。そうでない場合、その比較は符号なしのデータに対するものである。  
ＴＩＥｍａｃ
概要：    ｏ＝ＴＩＥｍａｃ（ａ，ｂ，ｃ，ｓｉｇｎｅｄ，ｎｅｇａｔｅ）
定義：    ｏ＝ｎｅｇａｔｅ？ｃ−ａ＊ｂ：ｃ＋ａ＊ｂ
記述：    乗算・累算する。この乗算は、符号付きのものが真である場合に符号を付けられ、そうでない場合は符号を付けられない。乗算の結果は、否定的なもの（negate）が真である場合に累算器ｃから減算され、そうでない場合に累算器ｃに加算される。乗算の計算された幅が累算器の幅より狭い場合、乗算の結果は、符号付きのものが真である場合に符号拡張され、そうでない場合は０拡張される。符号付きのものおよび否定的なものの計算された幅は１でなければならない。Ｘｔｅｎｓａのクロック周波数が減速することを避けるために、ＴＩＥｍａｃを使用する命令は少なくとも２つのサイクルを割当てられるべきである。しかしながら、命令スケジュールを注意深く選択することにより、サイクル当り１つのＴＩＥｍａｃ演算のスループットを達成することが可能である。  
ＴＩＥｍｕｌ
概要：    ｐｒｏｄ＝ＴＩＥｍｕｌ（ａ，ｂ，ｓｉｇｎｅｄ）
定義：    ｐｒｏｄ＝ａ＊ｂ
記述：    乗算する。この乗算は、符号付きのものが真である場合に符号を付けられ、そうでない場合は符号を付けられない。符号付きのものの計算された幅は１でなければならない。Ｘｔｅｎｓａのクロック周波数が減速することを避けるために、ＴＩＥｍｕｌを使用する命令はいずれも少なくとも２つのサイクルを割当てられるべきである。  
ＴＩＥｍｕｌｐｐ
概要：    ｛ｐ０，ｐ１｝＝ＴＩＥｍｕｌｐｐ（ａ，ｂ，ｓｉｇｎｅｄ，ｎｅｇａｔｅ）
定義：    ｐ０＋ｐ１＝ｎｅｇａｔｅ？−ａ＊ｂ：ａ＊ｂ
記述：    部分積乗算をする。このモジュールは、その乗算の２つの部分積を戻す。乗算は、符号付きのものが真である場合に符号を付けられ、そうでない場合は符号を付けられない。２つの部分積の和はその積に等しい。否定的なものが真である場合、その和は積の負数に等しい。定義は、個々の部分積に特定の意味を与えない。符号付きのものおよび否定的なものの計算された幅は１でなければならない。このモジュールは、乗算、加算および減算を含むある代数表現を効率的に実施することを可能にするために設けられる。  
ＴＩＥｍｕｘ
概要：    ｏ＝ＴＩＥｍｕｘ（ｓ，Ｄ０，Ｄ１，・・・，Ｄｎ-１）
定義：    ｏ＝ｓ＝＝０？Ｄ０：ｓ＝＝１？Ｄ１：・・・：ｓ＝＝ｎ-２？Ｄｎ-２：Ｄｎ-１
記述：    ｎウェイマルチプレクサである。このモジュールは、選択信号の値に応じてｎ個のデータの１つを戻す。データの数ｎは２の累乗でなければならない。選択信号の幅はｌｏｇ２（２）でなければならない。  
ＴＩＥｐｓｅｌ
概要：    ｏ＝ＴＩＥｐｓｅｌ（Ｓ０，Ｄ０，Ｓ１，Ｄ１，・・・，Ｓｎ-１，Ｄｎ-１）
定義：    ｏ＝Ｓ０？Ｄ０：Ｓ１？Ｄ１：・・・：Ｓｎ-１？Ｄｎ-１：０
記述：    ｎウェイ優先度セレクタである。このモジュールは、選択信号の値および優先度にしたがってｎ個の入力データの１つを選択する。最初の選択信号は最高の優先度を有し、最後の選択信号は最低の優先度を有している。選択信号のいずれもアクティブでない場合、結果は０である。選択信号の幅は１でなければならない。  
ＴＩＥｓｅｌ
概要：    ｏ＝ＴＩＥｓｅｌ（Ｓ０，Ｄ０，Ｓ１，Ｄ１，・・・，Ｓｎ-１，Ｄｎ-１）
定義：    ｏ＝Ｓ０？Ｄ０：Ｓ１？Ｄ１：・・・：Ｓｎ-１？Ｄｎ-１：０
記述：    ｎウェイ１-ホットセレクタである。このモジュールは、選択信号の値にしたがってｎ個の入力データの１つを選択する。選択信号は１-ホットであると期待される。選択信号のいずれもアクティブでない場合、結果は０である。２以上の選択信号がアクティブである場合、結果は規定されていない。選択の幅は１でなければならない。
【０１０６】
以上、本発明はその好ましい実施形態を参照としてとくに説明されているが、当業者は、本発明の技術的範囲を逸脱することなく形態および詳細の変更および修正が可能であることを容易に認識するであろう。たとえば、当業者は、上記のフロー図に示されている処理ステップの数および順序を変えることができることを理解するであろう。添付された特許請求の範囲は、このような変更および修正を含むものである。
【図面の簡単な説明】
【０１０７】
【図１】高性能プロセッサを示すブロック図。
【図２】本発明の原理にしたがって発生された高性能プロセッサを示すブロック図。
【図３】本発明の１つの特徴にしたがって発生されたＶＬＩＷ命令フォーマットならびに関連した復号化および実行論理手段の一例を示す概略図。
【図４】本発明の１つの特徴によるＶＬＩＷ命令の処理方法を示す概略図。
【図５】定義された命令の長さを決定する方法を示すフロー図。
【図６】新しく定義された命令に対する復号化の長さを決定する方法を示すフロー図。
【図７】長さテーブルを発生する本発明による方法を示すフロー図。
【図８】フォーマットテーブルを発生する本発明による方法を示すフロー図。
【図９】命令フォーマットテーブルを決定する本発明による方法を示すフロー図。
【図１０】フォーマットテーブル用のソフトウェアツールを発生する本発明による方法を示すフロー図。
【図１１】本発明にしたがってバイトディスエーブル論理をロード／記憶ユニットに提供する手段を示すブロック図。
【図１２】本発明にしたがってロード／記憶ユニットに提供する回転論理手段を示すブロック図。
【図１３】ロード／記憶ユニットとある１つの命令を関連付ける本発明による方法を示すフロー図。
【図１４】本発明による共用機能の提供を示す概略図。
【図１５】本発明による対話式命令を行う１つの共用機能の一例を示す概略図。
【図１６】本発明のプロセッサによる有用なパイプライン機能停止論理を示す概略図。
【図１７】本発明による強化されたオペランドレジスタファイル意味論を示す概略図。
【図１８】本発明による強化されたオペランドレジスタファイルインターフェースを示す概略図。
【図１９】本発明の１つの特徴による例外処理を示すブロック図。
【図１】
2005525651.tif 000043
【図２】
2005525651.tif 000044
【図３】
2005525651.tif 000045
【図４】
2005525651.tif 000046
【図５】
2005525651.tif 000047
【図６】
2005525651.tif 000048
【図７】
2005525651.tif 000049
【図８】
2005525651.tif 000050
【図９】
2005525651.tif 000051
【図１０】
2005525651.tif 000052
【図１１】
2005525651.tif 000053
【図１２】
2005525651.tif 000054
【図１３】
2005525651.tif 000055
【図１４】
2005525651.tif 000056
【図１５】
2005525651.tif 000057
【図１６】
2005525651.tif 000058
【図１７】
2005525651.tif 000059
【図１８】
2005525651.tif 000060
【図１９】
2005525651.tif 000061