(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムにおいて、
メイン・メモリと、
命令キャッシュと、
前記メイン・メモリおよび前記命令キャッシュに結合されたプロセッサ
とを備え、
前記プロセッサが、
前記メイン・メモリから命令を取り出すために、前記メイン・メモリに結合されたメモリ・インタフェース手段と、
前記命令を前復号して、前復号ビットを生成するために、前記メモリ・インタフェース手段に結合された前復号手段であって、前記前復号ビットは、前記命令をバンドリングすることができるか否か、及び、どのようにして前記命令をバンドリングすることができるかを示し、前記前復号ビットは、さらに、実行のためにバンドリングすることが可能な２つの連続する命令が整列しているか、非整列であるかを示すことからなる、前復号手段と、
前記命令および前記前復号ビットを前記命令キャッシュに格納し、及び、前記前復号ビットと共に前記命令を前記命令キャッシュから取り出すために、前記前復号手段及び前記命令キャッシュに結合されたインタフェース手段と、
第１の論理演算ユニットと、
第２の論理演算ユニットと、
各命令を実行するために、各命令を、前記第１の論理演算ユニットと前記第２の論理演算ユニットのうちの一方に操向するべく、前記インタフェース手段と前記第１の論理演算ユニットと前記第２の論理演算ユニットとに結合された操向手段であって、前記前復号ビットを使用して、それらの各命令を操向する操向手段
を備えることからなる、コンピュータ・システム。
【請求項２】
前記前復号手段によって生成される前復号ビットは、バンドリングされた命令の対の各々について、ある特定の命令が、前記第１の論理演算ユニットと前記第２の論理演算ユニットのいずれに操向されるかを識別する、請求項１のコンピュータ・システム。
【請求項３】
前記前復号手段が、
現在復号されつつある命令対の偶数ワード命令を保持するための第１の前復号レジスタと、
現在復号されつつある命令対の奇数ワード命令を保持するための第２の前復号レジスタと、
以前に前復号された命令対の奇数ワード命令を保持するための第３の前復号レジスタ
を備えることからなる、請求項１または２のコンピュータ・システム。
【請求項４】
前記操向手段が状態マシンを備え、該状態マシンは、命令がバンドリングされるか否かによりその状態を遷移させ、該状態マシンの現在の状態により、前記操向手段がどの前復号ビットを使用して命令を操向するかが決定されることからなる、請求項１乃至３のいずれかのコンピュータ・システム。
【請求項５】
前記プロセッサが更に、前記操向手段に結合された浮動小数点演算ユニットを備え、前記操向手段が、浮動小数点命令を前記浮動小数点演算ユニットに操向するよう動作可能であることからなる、請求項２乃至４のいずれかのコンピュータ・システム。
【請求項６】
コンピュータ・システムにおいて、第１の論理演算ユニット、第２の論理演算ユニット、及び浮動小数点演算ユニットに、実行のために命令を操向する方法において、
（ａ）メイン・メモリから命令を取り出すステップと、
（ｂ）前記命令を前復号して、前記命令をバンドリングできるかどうか、及び、どのようにしてバンドリングできるかを示す前復号ビットを生成するステップであって、前記前復号ビットは、実行のためにバンドリングすることが可能な２つの連続する命令が整列しているか、非整列であるかを示すことからなる、ステップと、
（ｃ）前記命令および前復号ビットを命令キャッシュに格納するステップと、
（ｄ）前記前復号ビットと共に前記命令を前記命令キャッシュから取り出すステップと、
（ｅ）前記前復号ビットを使用して、前記第１の論理演算ユニットと前記第２の論理演算ユニットと前記浮動小数点演算ユニットのうちの１つに、実行のために前記命令の各々を操向するステップ
を含む、方法。
【請求項７】
前記ステップ（ｂ）において、前記前復号ビットが、さらに、２つの連続する命令を実行のためにバンドリングできるかどうかを示すことからなる、請求項６の方法。
【請求項８】
前記ステップ（ｂ）において、前記前復号ビットが、さらに、前記第１の論理演算ユニットと前記第２の論理演算ユニットと前記浮動小数点演算ユニットのうちのどれにある特定の命令を操向するかを、バンドリングされた命令の対の各々について識別する、請求項６または７の方法。
【請求項９】
前記ステップ（ａ）において、前記メイン・メモリからダブルワードで一度に２つの命令が取り出される、請求項６乃至８のいずれかの方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、スーパースカラ・プロセッサで実行される前復号命令および操向命令に関する。
【０００２】
【従来の技術】
大部分の現代のシステムは、中央演算処理装置（CPU）とメイン・メモリとを含む。CPUが命令およびオペランドを復号して実行できる速度は、命令およびオペランドをメイン・メモリからCPUに転送できる速度に依存する。CPUが命令およびオペランドをメイン・メモリから得るために必要とされる時間を短縮する試みとして、多数のコンピュータ・システムは、CPUとメイン・メモリの間にキャッシュ・メモリを含む。
【０００３】
キャッシュ・メモリとは、近い将来にCPUによって使用されると考えられるメイン・メモリの内容のその部分を一時的に保持するために使用される小型の高速バッファ・メモリである。キャッシュ・メモリの主な目的は、データ取出しの場合であれ、命令取出しの場合であれ、メモリ・アクセスを実行するのに必要な時間を短縮することである。キャッシュ・メモリに位置する情報は、メイン・メモリに位置する情報よりもずっと短い時間でアクセスすることができる。したがって、キャッシュ・メモリを含むCPUは、命令およびオペランドが取り出され、及び／又は記憶されるのを待つのに必要な時間がかなり短い。
【０００４】
キャッシュ・メモリは、１以上のデータ・ワードの多数のブロックから構成される。各ブロックには、それがメイン・メモリのどのブロックのコピーであるかを固有に識別するアドレス・タグが関連付けられる。プロセッサがメモリ参照を行うたびに、要求されたデータのコピーがキャッシュ・メモリに存在しているかどうかを確認するためにアドレス・タグの比較が行われる。所望のメモリ・ブロックがキャッシュ・メモリ中にない場合、そのブロックはメイン・メモリから検索され、キャッシュ・メモリに格納され、プロセッサに供給される。命令を記憶するために使用されるキャッシュ・メモリを一般に命令キャッシュと呼ぶ。プログラム・カウンタを使用して、どの命令を実行のために取り出すべきかが、決定される。
【０００５】
いくつかのコンピュータ・システムでは、命令の並列実行（命令の「バンドリング」と呼ばれる）を使用して、コンピュータの動作を高速化することができる。命令の並列実行を行うプロセッサは、スーパースカラ・プロセッサと呼ぶことができる。スーパースカラ・コンピュータは一般に、１つ以上の実行ユニットを使用して命令のバンドリングを行う。実行ユニットとは、例えば、論理演算ユニット（ALU）、又は浮動小数点演算ユニット（FPU）である。
【０００６】
【発明が解決しようとする課題】
多数の実行ユニットを使用しても、どの命令がバンドリングできるかに依然として制限がある。例えば、ある命令は他の命令と競合する。このタイプの競合は様々な形をとる。２つの命令が共に同じ限られたプロセッサ資源を使用するとき資源の競合が発生する。例えば、これは、両方の命令が同じ実行ユニットを使用する必要があるときに発生する。交互に、データの依存性によって結果として競合になることもある。すなわち、１つの命令が、次の命令で使用されるべき結果を生成するとき、２つの命令をバンドリングすることはできない。又、手順の依存性によって結果として競合になることもある。例えば、分岐命令の次の命令を分岐命令とバンドリングすることはできない。なぜなら、この命令の実行は、この分岐が選択されるかどうかに依存するからである。２つ以上の命令がバンドリングできるかどうかを判定するには一般に、まず命令を復号する必要がある。これは、例えば、命令復号ユニットで行うことができる。
【０００７】
適当な実行ユニットへの命令を復号、及び操向するための性能上の悪影響を最小限に抑えるために様々な方法が開発されている。例えば、コンパイラ技法を使用して、命令復号ユニットが２つ以上の命令をバンドリングできるかどうかを判定するのを助けることができる。すなわち、コンパイル時に、コンパイラは、命令復号／操向ハードウェアによって使用されるべき実際の命令演算コード（opコード）中の１つ以上のビットを符号化することができる。これらのビットは、命令を他の命令といかにバンドリングできるかに関する情報を復号ハードウェアに提供する。前復号情報は、実際には、命令セット・アーキテクチャの一部として使用される。しかし、復号ハードウェアによって必要とされる情報はプロセッサに依存する。従って、そのようなビット符号化は、異なるプロセッサがコードの再コンパイルなしに命令演算コードを最適に実行する柔軟性を制限することがある。
【０００８】
あるシステムでは、整数演算論理ユニット（ALU）、又は浮動小数点演算ユニット（FPU）のどちらかに命令を操向するために、復号ハードウェアによって使用される命令キャッシュに前復号された専用ビットが格納される。例えば、E.DeLano、W.Walker、J.Yetter、M.Forsyth著「（高速スカラ PA-RISC プロセッサ）High Speed Superscalar PA-RISC Processor」IEEE,1992,pp.116-121を参照されたい。
【０００９】
【課題を解決するための手段】
本発明の好適実施例によれば、コンピュータ・システムが提供される。この計算システムは、メイン・メモリ、命令キャッシュ、及びプロセッサを含む。プロセッサは、メモリ・インタフェース手段、前復号手段、インタフェース手段、第１の論理演算ユニット、第２の論理演算ユニット、及び操向手段を含む。メモリ・インタフェース手段は、メイン・メモリに接続され、メイン・メモリから命令を取り出す。好適実施例では、メモリ・インタフェース手段は、命令をダブル・ワードで一度に２つずつメイン・メモリから取り出す。
【００１０】
前復号手段は、メモリ・インタフェース手段に接続され、命令を前復号して前復号ビットを生成する。前復号ビットは、命令をバンドリングできるかどうか、及びいかにバンドリングできるかを示す。好適実施例では、前復号ビットは、バンドリングされた各対ごとに、特定の命令が第１の整数論理演算ユニットと第２の整数論理演算ユニットのうちのどちらに操向されるかを識別する。前復号手段は、３つの前復号レジスタを含む。第１の前復号レジスタは、現在復号されている命令対の偶数ワード命令を保持する。第２の前復号レジスタは、現在復号されている命令対の奇数ワード命令を保持する。第３の前復号レジスタは、以前に前復号された命令対の奇数ワード命令を保持する。
【００１１】
インタフェース手段は、前復号手段および命令キャッシュに接続される。インタフェース手段は、命令および前復号ビットを命令キャッシュに格納し、前復号ビットと共に命令を命令キャッシュから取り出す。操向手段は、インタフェース手段、第１の論理演算ユニット、及び第２の論理演算ユニットに接続される。操向手段は、各命令を実行するために前記命令を第１の整数論理演算ユニットと第２の整数論理演算ユニットのうちの一方に操向する。操向手段は、前復号ビットを使用して命令を操向する。好適実施例では、操向手段は状態マシンを含む。状態マシンの現在状態は、操向手段がどちらの前復号ビットを使用して命令を操向するかを決定する。
【００１２】
本発明の好適実施例では、プロセッサは、操向手段に接続された浮動小数点演算ユニットも含む。操向手段は、浮動小数点命令を浮動小数点演算ユニットに操向する。好適実施例ではまた、前復号手段によって生成される前復号ビットは、２つの連続命令を実行するために前記命令をバンドリングできるかどうかも示す。更に、前復号手段によって生成される前復号ビットは、実行するためにバンドリングできる２つの連続命令が非整列命令であるか、それとも整列命令であるかを示す。
【００１３】
本発明の好適実施例は、命令の効率的なバンドリングおよび操向をスーパースカラ・プロセッサで実施する。
【００１４】
【実施例】
図１は、コンピュータ・システムの簡略ブロック図を示す。プロセッサ12、及びメモリ11は、バス10に接続されるように示されている。プロセッサ12は、命令キャッシュ13およびデータ・キャッシュ14を使用する。命令キャッシュ13は、プロセッサ12用の命令を静的ランダム・アクセス・メモリ（SRAM）に格納する。データ・キャッシュ14は、プロセッサ12用のデータをSRAMに格納する。
【００１５】
図２は、プロセッサ12の簡略ブロック図を示す。プロセッサ12は、システム・バス・インタフェース論理26、命令キャッシュ・インタフェース論理24、データ・キャッシュ・インタフェース論理25、論理演算ユニット（ALU）22、変換索引バッファ（TLB）21、及び補助キャッシュ23を含むように示されている。システム・バス・インタフェース論理26は、システム・バス10とのインタフェースをプロセッサ12に提供する。命令キャッシュ・インタフェース論理24は、命令キャッシュ13とのインタフェースをプロセッサ12に提供する。データ・キャッシュ・インタフェース論理25は、データ・キャッシュ14とのインタフェースをプロセッサ12に提供する。補助キャッシュ23は、論理演算ユニット22にデータを提供するためにデータ・キャッシュ14と並列に使用される。変換索引バッファ21は、仮想アドレスを実アドレスにマップして、補助キャッシュ23およびデータ・キャッシュ14内に格納されたデータにアクセスするために使用すべきキャッシュ・タグを生成するために使用される。
【００１６】
図３は、プロセッサ12内の前復号命令、及び操向命令に関連する論理ブロックの簡略ブロック図である。本発明の好適実施例では、システム・バス・インタフェース26は、メモリ11とプロセッサ12の間で６４ビット幅ダブルワード転送を実施する。各ダブルワードは２つの３２ビット命令を含む。ダブルワードの上位ビット（ビット［０：３１］）を占めるダブルワード中の命令を偶数ワード命令と呼ぶ。ダブルワードの下位ビット（ビット［３２：６３］）を占めるダブルワード中の命令を奇数ワード命令と呼ぶ。
【００１７】
ワードがメモリ11から検索され、データ経路54に沿って命令キャッシュに送られると、前復号論理ユニット44は、各ダブルワードと共に格納すべき、データ経路55上に置かれる前復号ビットを生成する。前復号ビットの特性および機能を以下で更に説明する。
【００１８】
前復号論理ユニット44は、ダブルワード中の情報に基づいて前復号ビットを生成する。ダブルワードがメモリから取り出されると、偶数ワード命令はデータ経路60を介して、偶数ワード命令レジスタ40に置かれる。奇数ワード命令はデータ経路61を介して、奇数ワード命令レジスタ41に置かれる。次のダブルワードがメモリから取り出されると、新しい偶数ワード命令が偶数ワード命令レジスタ40に置かれる。新しい奇数ワード命令は奇数ワード命令レジスタ41に置かれる。以前に奇数ワード命令レジスタ41にあった奇数ワード命令は、奇数ワード命令レジスタ43に移動される。以下で更に説明するように、前復号論理ユニット44は、偶数ワード命令レジスタ40、奇数ワード命令レジスタ41、及び奇数ワード命令レジスタ43中の命令に基づいて、データ経路55上に置かれる前復号ビットを生成する。
【００１９】
命令キャッシュ・インタフェース24は、データ経路54上で受け取られたダブルワードをデータ経路55上の前復号ビットと共に命令キャッシュ13に格納する。アドレス線51は、命令キャッシュ13中のメモリ位置にアドレスするために使用される。６４ビット幅データ経路52は、プロセッサ12と命令キャッシュ13の間でダブルワード命令を転送するために使用される。ダブルワードと共に格納された前復号ビットは、ダブルワードと同時に、データ経路53に沿って命令キャッシュ13とプロセッサ12の間で転送される。命令キャッシュ13は、関連するダブルワードと共に前復号ビットを格納する。
【００２０】
ダブルワード内の命令を実行するためにプロセッサ12によって前記ダブルワードが命令キャッシュ13から検索されると、偶数ワード命令が、受信偶数ワード命令レジスタ30に置かれ、奇数ワード命令が、受信奇数ワード命令レジスタ31に置かれる。次のダブルワードがプロセッサ12によって命令キャッシュ13から検索されると、新しい偶数ワード命令が、受信偶数ワード命令レジスタ30に置かれ、新しい奇数ワード命令が、受信奇数ワード命令レジスタ31に置かれる。以前に、受受信偶数ワード命令レジスタ30にあった偶数ワード命令は、保存偶数ワード命令レジスタ32に移動される。以前に、受信奇数ワード命令レジスタ31にあった奇数ワード命令は、保存奇数ワード命令レジスタ33に移動される。
【００２１】
操向論理ユニット34は、受信偶数ワード命令レジスタ30、保存偶数ワード命令レジスタ32、受信奇数ワード命令レジスタ31、及び保存奇数ワード命令レジスタ33中の命令を実行するために論理演算ユニット（ALU）36、ALU 37、または浮動小数点演算ユニット（FPU）35に前記命令を転送する。操向論理ユニットは、データ経路56上で受け取られた前復号されたビットと、同じく二重状態マシン45から受け取られた状態情報に基づいて決定を下す。好適実施例では、操向論理ユニット34はまた、これが浮動小数点命令であるかどうかを確認するために、保存奇数レジスタ33から単一のビットも検索する。
【００２２】
本発明の好適実施例には、６つの命令の類別がある。第１の類別は、ロード／格納（ldst）命令である。ldst命令を実行すると、結果として情報がメモリ／キャッシュからロードされ、あるいはメモリ／キャッシュに格納される。この第１の類別には、例えば、整数と浮動小数点をロードし、あるいは格納する命令が含まれる。
【００２３】
第２の類別は、演算／論理（alu）命令である。第２の類別には、例えば、加算、減算、論理「OR」、及び論理「AND」を実行する命令が含まれる。
【００２４】
第３の類別は、マスク／マージ／シフト（mms）命令である。第３の類別には、たとえば１つ以上のレジスタ内でデータを累積し、抽出し、シフトする命令が含まれる。
【００２５】
第４の類別は浮動小数点（flop）命令である。第４の類別には、例えば、浮動小数点に関する加算、乗算、除算、平方根を実行する命令が含まれる。
【００２６】
第５の類別は分岐（br）命令である。第５の類別には、例えば、比較および分岐、加算および分岐、ならびに分岐およびリンクの命令が含まれる。
【００２７】
第６の類別はシステム（sys）命令である。第６の類別には、例えば、TLB値の挿入、データ・キャッシュのフラッシュ、制御レジスタとの間の移動、及び空間レジスタとの間の移動を行う命令が含まれる。
【００２８】
本発明の好適実施例では、FPU 35、ALU 36、及びALU 37はそれぞれ、ある類別の命令しか実行しない。特に、FPU 35は第４の類別の命令（flop命令）しか実行しない。ALU 36は、第２の類別の命令（alu命令）、第３の類別の命令（mms命令）、及び第５の類別の命令（br命令）を実行する。ALU 37は、第１の類別の命令（ldst命令）、及び第２の類別の命令（alu命令）を実行する。第６の類別の命令（sys命令）を実行するにはALU 36とALU 37の両方が必要である。
【００２９】
本発明の好適実施例では、前復号論理ユニット44は、２つの命令のあらゆるダブルワードに関して６つの前復号ビットを生成する。前復号ビットは、命令の整列およびバンドリングを示す。整列命令がバンドリングされると、これは、現在のダブルワードの偶数ワード中の命令が、現在のダブルワードの奇数ワード中の命令と同時に実行される予定であることを意味する。非整列命令がバンドリングされると、これは、現在のダブルワードの偶数ワード中の命令が、以前のダブルワードの奇数ワード中の命令と同時に実行される予定であることを意味する。
【００３０】
第１（ビット0）前復号ビット（EFLOP）が、セットされると、偶数ワード命令が、整列ダブルワードに関する浮動小数点演算であることを示す。第２（ビット1）の前復号ビット（AL02）は、セットされると、２つのダブルワード整列命令がバンドリングされ、奇数ワード命令がALU 37に操向されることを示す。第３（ビット2）の前復号ビット（AL01）が、セットされると、２つのダブルワード整列命令がバンドリングされ、奇数ワード命令がALU 36に操向されることを示す。第４（ビット3）の前復号ビット（NLE2）が、セットされると、２つのダブルワード非整列命令がバンドリングされ、偶数ワード命令がALU 37に操向されることを示す。第５（ビット4）の前復号ビット（NLE1）が、セットされると、２つのダブルワード非整列命令がバンドリングされ、偶数ワード命令がALU 36に操向されることを示す。第６（ビット5）の前復号ビット（ALDUAL）が、セットされると、２つのダブルワード整列命令がバンドリングされることを示す。
【００３１】
前復号ビットの符号化は前復号論理ユニット44によって以下のように実行される。ダブルワードがメモリから取り出されると、偶数ワード命令が偶数ワード命令レジスタ40に置かれる。奇数ワード命令は奇数ワード命令レジスタ41に置かれる。単一命令サイクル内で、前復号論理ユニット44は、偶数ワード命令レジスタ40に置かれた偶数ワード命令と、奇数ワード命令レジスタ41に置かれた奇数ワード命令とから成る整列ダブルワードに適用される前復号ビットを生成する。生成された前復号ビットはまた、奇数ワード命令レジスタ43に置かれた奇数ワード命令と、偶数ワード命令レジスタ40に置かれた偶数ワード命令とから成る非整列ダブルワードにも適用される。生成された前復号ビットは、最初にメモリから取り出されたダブルワードと共に命令キャッシュに格納されるように命令キャッシュ・インタフェース24に送られる。
【００３２】
前復号論理ユニット44は、偶数ワード命令レジスタ40に置かれた偶数ワード命令が浮動小数点命令であるとき、EFLOPビットをセットする。
【００３３】
前復号論理ユニット44は、奇数ワード命令レジスタ41に置かれた奇数ワード命令がロード／格納命令、またはalu演算命令であるとき、AL02ビットをセットする。しかし、このビットをセットする場合、偶数ワード命令レジスタ40に置かれた偶数ワード命令と奇数ワード命令レジスタ41に置かれた奇数ワード命令の間に依存性があってはならない。AL02ビットのセットを妨げる３つの依存性がある。第１の依存性は、例えば、偶数ワード・レジスタ40中の偶数ワード命令が特定のレジスタをセットして、奇数ワード・レジスタ41中の奇数ワード命令がそのレジスタを使用する場合に発生するレジスタ・セット／使用依存性である。第２の依存性は、例えば、偶数ワード・レジスタ40中の偶数ワード命令が繰上り／借りビットをセットし、奇数ワード・レジスタ41中の奇数ワード命令がその繰上り／借りビットを使用する時に発生する繰上り／借りセット／使用依存性である。第３の依存性は、例えば、偶数ワード・レジスタ40中の偶数ワード命令が分岐命令、またはシステム命令であるときに発生する分岐／システム依存性である。分岐の次の命令を分岐命令と共にバンドリングすることはできない。システム命令と共にバンドリングできるものはない。
【００３４】
前復号論理ユニット44は、奇数ワード命令レジスタ41に置かれた奇数ワード命令がmms命令、分岐命令、またはalu演算命令であるとき、AL01ビットをセットする。しかし、このビットをセットする場合、偶数ワード命令レジスタ40に置かれた偶数ワード命令と奇数ワード命令レジスタ41に置かれた奇数ワード命令の間に依存性があってはならない。
【００３５】
前復号論理ユニット44は、偶数ワード命令レジスタ40に置かれた偶数ワード命令がロード／格納命令、またはalu演算命令であるとき、NLE2ビットをセットする。しかし、このビットをセットする場合、奇数ワード命令レジスタ43に置かれた奇数ワード命令と偶数ワード命令レジスタ40に置かれた偶数ワード命令の間に依存性があってはならない。
【００３６】
前復号論理ユニット44は、偶数ワード命令レジスタ40に置かれた偶数ワード命令がmms命令、分岐命令、またはalu演算命令であるとき、NLE1ビットをセットする。しかし、このビットをセットする場合、奇数ワード命令レジスタ43に置かれた奇数ワード命令と偶数ワード命令レジスタ40に置かれた偶数ワード命令の間に依存性があってはならない。
【００３７】
前復号論理ユニット44は、偶数ワード命令レジスタ40に置かれた偶数ワード命令を、奇数ワード命令レジスタ41に置かれた奇数ワード命令と共にバンドリングできるとき、ALDUALビットをセットする。しかし、このビットをセットする場合、偶数ワード命令レジスタ40に置かれた偶数ワード命令と奇数ワード命令レジスタ41に置かれた奇数ワード命令の間に依存性があってはならない。ALDUALビットは操向には使用されない。
【００３８】
図４は、二重状態マシン45の状態図を示す。偶数ワード命令への分岐があるときは必ず、二重状態マシン45は状態101に入る。命令キャッシュ13から検索されたダブルワードからの命令がバンドリングされる限り、二重状態マシンは状態101のままである。ダブルワード中の２つの命令がバンドリングされないとき、二重状態マシン45は状態102に入る。命令キャッシュ13から検索された非整列命令がバンドリングされる限り、二重状態マシンは状態102のままである。非整列命令がバンドリングされないとき、二重状態マシン45は状態103に入る。保存偶数ワード・レジスタ32、及び保存奇数ワード命令レジスタ33から検索されたダブルワードからの次の整列命令がバンドリングされる場合、二重状態マシンは状態101に入る。状態103にあり、保存偶数ワード命令レジスタ32、及び保存奇数ワード命令レジスタ33からの次の整列命令がバンドリングされない場合、二重状態マシン45は状態102に入る。
【００３９】
奇数ワード命令への分岐があるときは必ず、二重状態マシン45は状態104に入る。状態104では、命令をバンドリングすることはできない。奇数ワード命令の実行後、二重状態マシン45は状態101に入る。
【００４０】
操向論理ユニット34は、データ経路56上で受け取られた前復号ビットと、同じく二重状態マシン45から受け取られた状態情報に基づいて、受信偶数ワード命令レジスタ30、保存偶数ワード命令レジスタ32、受信奇数ワード命令レジスタ31、及び保存奇数ワード命令レジスタ33中の命令をALU 36、ALU 37、又はFPU 35に操向する。好適実施例では、操向論理ユニット34はまた、これが浮動小数点命令であるかどうかを確認するために、保存奇数レジスタ33から単一のビットも検索する。
【００４１】
操向表１は、二重状態マシン45が状態101または状態103にあり、整列命令がバンドリングされるとき、ALU 36、ALU 37、またはFPU 35のうちのどれによってどの命令が実行されるかを示す。
【００４２】
【表１】
0003670043.tif 000002
【００４３】
上記の操向表１の第１列は、偶数ワード命令レジスタ30にある命令のタイプを示す。命令のタイプの前に記入された「ｅ」は、それがダブルワード中の偶数命令であることを示す。上記の操向表１の第２列は、奇数ワード命令レジスタ31にある命令のタイプを示す。命令のタイプの前に記入された「ｏ」は、それがダブルワード中の奇数命令であることを示す。操向表１の第３列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ31に格納されたダブルワードに関する前復号ビットEFLOPの値を示す。第３列の「０」は、ビットEFLOPがクリアされていることを示す。第３列の「１」は、ビットEFLOPがセットされていることを示す。操向表１の第４列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ31に格納されたダブルワードに関する前復号ビットAL01の値を示す。操向表１の第５列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ31に格納されたダブルワードに関する前復号ビットAL02の値を示す。操向表１の第６列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ31に格納されたダブルワードに関する前復号ビットNLE1の値を示す。第６列の「Ｘ」値は、NLE1ビットがクリアされているか、セットされているかは重要でないことを示す。操向表１の第７列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ31に格納されたダブルワードに関する前復号ビットNLE2の値を示す。操向表１の第８列は、ALU 36に操向される列１または列２からの命令を示す。第８列の「Ｘ」値は、どの命令がALU 36に操向されるかは重要でないことを示す。操向表１の第９列は、ALU 37に操向される列１または列２からの命令を示す。第９列の「Ｘ」値は、どの命令がALU 37に操向されるかは重要でないことを示す。操向表１の第１０列は、FPU 35に操向される列１または列２からの命令を示す。第１０列の「Ｘ」値は、どの命令がFPU 35に操向されるかは重要でないことを示す。
【００４４】
操向表２は、二重状態マシン45が状態102にあり、非整列命令がバンドリングされるとき、ALU 36、ALU 37、またはFPU 35のうちのどれによってどの命令が実行されるかを示す。
【００４５】
【表２】
0003670043.tif 000003
【００４６】
上記の操向表２の第１列は、奇数ワード命令レジスタ33にある命令のタイプを示す。命令のタイプの前に記入された「ｏ」は、それがダブルワード中の奇数命令であることを示す。上記の操向表２の第２列は、偶数ワード命令レジスタ30にある命令のタイプを示す。命令のタイプの前に記入された「ｅ」は、それがダブルワード中の偶数命令であることを示す。操向表２の第３列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ33に格納されたダブルワードに関する前復号ビットEFLOPの値を示す。操向表２の第４列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ33に格納されたダブルワードに関する前復号ビットAL01の値を示す。操向表２の第５列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ33に格納されたダブルワードに関する前復号ビットAL02の値を示す。操向表２の第６列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ33に格納されたダブルワードに関する前復号ビットNLE1の値を示す。操向表２の第７列は、偶数ワード命令レジスタ30、及び奇数ワード命令レジスタ33に格納されたダブルワードに関する前復号ビットNLE2の値を示す。操向表２の第８列は、ALU 36に操向される列１または列２からの命令を示す。操向表２の第９列は、ALU 37に操向される列１または列２からの命令を示す。ステアリング表２の第１０列は、FPU 35に操向される列１または列２からの命令を示す。
【００４７】
以下の表３は、７つのダブルワードがメモリ11から取り出され、命令キャッシュ13に置かれた際、前復号論理ユニット44によって生成される７つのダブルワードに関する前復号ビットを示す。
【００４８】
【表３】
0003670043.tif 000004
【００４９】
第１のダブルワードの場合、２つのダブルワード整列命令をバンドリングすることができ、奇数ワード命令がALU 37に操向されることを示す前復号ビットAL02がセットされる。又、２つのダブルワード整列命令がバンドリングされることを示す前復号ビットALDUALもセットされる。
【００５０】
第２のダブルワードの場合、２つのダブルワード非整列命令をバンドリングすることができ、偶数ワード命令がALU 36に操向されることを示す前復号ビットNLE1がセットされる。
【００５１】
第３のダブルワードの場合、偶数ワード命令が、整列ダブルワードに関する浮動小数点演算であることを示す前復号ビットEFLOPがセットされる。又、２つのダブルワード整列命令をバンドリングすることができ、奇数ワード命令がALU 36に操向されることを示す前復号ビットAL01もセットされる。又、２つのダブルワード整列命令がバンドリングされることを示す前復号ビットALDUALもセットされる。
【００５２】
第４のダブルワードの場合、２つのダブルワード非整列命令をバンドリングすることができ、偶数ワード命令がALU 37に操向されることを示す前復号ビットＮＬＥ２がセットされる。
【００５３】
第５のダブルワードの場合、前復号ビットはセットされず、バンドリングが不可能であることを示す。
【００５４】
第６のダブルワードの場合、偶数ワード命令が、整列ダブルワードに関する浮動小数点演算であることを示す前復号ビットEFLOPがセットされる。又、２つのダブルワード整列命令をバンドリングすることができ、奇数ワード命令がALU 36に操向されることを示す前復号ビットAL01もセットされる。又、２つのダブルワード整列命令がバンドリングされることを示す前復号ビットALDUALもセットされる。
【００５５】
第７のダブルワードの場合、前復号ビットはセットされず、バンドリングが不可能であることを示す。
【００５６】
以下の表４は、最初の８回の実行サイクル中の上記の７つのワードに関する操向を示す。
【００５７】
【表４】
0003670043.tif 000005
【００５８】
表４の第１列はサイクルを示す。表４の第２列は、二重状態マシン45の現在の状態を示す。「１」の値は、二重状態マシン45が状態101であることを示す。「２」の値は、二重状態マシン45が状態102であることを示す。「３」の値は、二重状態マシン45が状態103であることを示す。「４」の値は、二重状態マシン４５が状態104であることを示す。第３列は、偶数ワード命令レジスタ30に置かれた命令を示す。第４列は、奇数ワード命令レジスタ31に置かれた命令を示す。第５列は、偶数ワード命令レジスタ32に置かれた命令を示す。第６列は、奇数ワード命令レジスタ33に置かれた命令を示す。第７列は、ALU 36に操向すべき列３、列４、列５、または列６からの命令を示す。第７列の「Ｘ」値は、どの命令がALU 36に送られるかは重要でないことを示す。第８列は、ALU 37に操向すべき列３、列４、列５、または列６からの命令を示す。第９列は、FPU 35に送るべき列３、列４、列５、または列６からの命令を示す。
【００５９】
前記の議論は、本発明の単なる典型的な方法および実施例を開示し説明したものである。当業者には理解されるように、本発明は、その趣旨または本質的な特性から逸脱することなく他の特定の形で実施することができる。従って、本発明の開示は、特許請求の範囲で述べた本発明の範囲の例示を目的とするものであり、制限を目的とするものではない。
【００６０】
以下に、本発明の実施態様を列挙する。
【００６１】
１．計算システムにおいて、命令を実行するために第１の整数論理演算ユニット、第２の整数論理演算ユニット、および浮動小数点演算ユニットに前記命令を操向する方法において、
（ａ）メイン・メモリから命令を取り出すステップと、
（ｂ）命令を前復号して、命令をバンドリングできるかどうか、及びいかにバンドリングできるかを示す前復号ビットを生成するステップと、
（ｃ）命令および前復号ビットを命令キャッシュに格納するステップと、
（ｄ）前復号ビットと共に命令を命令キャッシュから取り出すステップと、
（ｅ）各命令を実行するために、前復号ビットを使用して第１の整数論理演算ユニット、第２の整数論理演算ユニット、および浮動小数点演算ユニットのうちの１つに前記命令を操向するステップとを含むことを特徴とする方法。
【００６２】
２．ステップ（ｂ）において、前復号ビットが、２つの連続命令を実行するために前記命令をバンドリングできるかどうかを示すことを特徴とする前項１に記載の方法。
【００６３】
３．ステップ（ｂ）において、前復号ビットが、実行するためにバンドリングできる２つの連続命令が非整列命令であるか、それとも整列命令であるかを示すことを特徴とする前項２に記載の方法。
【００６４】
４．ステップ（ａ）において、命令が、メイン・メモリからダブル・ワードで１度に２つずつ取り出されることを特徴とする前項１に記載の方法。
【００６５】
５．ステップ（ｂ）において、更に前復号ビットが、第１の整数論理演算ユニット、第２の整数論理演算ユニット、及び浮動小数点演算ユニットのうちのどれに特定の命令を操向すべきかも、バンドリングされる各命令対ごとに識別することを特徴とする前項１に記載の方法。
【００６６】
６．コンピュータ・システムにおいて、
メイン・メモリと、
命令キャッシュと、
メイン・メモリおよび命令キャッシュに結合されたプロセッサとを備え、前記プロセッサは、
メイン・メモリから命令を取り出すためにメイン・メモリに結合されたメモリ・インタフェース手段と、
命令を前復号して、命令をバンドリングできるかどうか、及びいかにバンドリングできるかを示す前復号ビットを生成するために、メモリ・インタフェース手段に結合された前復号手段と、
命令および前復号ビットを命令キャッシュに格納し、前復号ビットと共に命令を命令キャッシュから取り出すために前復号手段、及び命令キャッシュに結合されたインタフェース手段と、
第１の論理演算ユニットと、
第２の論理演算ユニットと、
各命令を実行するために、命令を操向するための前復号ビットを使用して、第１の整数論理演算ユニット、及び第２の整数論理演算ユニットのうちの一方に前記命令を操向するために、インタフェース手段、第１の論理演算ユニット、及び第２の論理演算ユニットに結合された操向手段とを含むことを特徴とするコンピュータ・システム。
【００６７】
７．前復号手段によって生成される前復号ビットが、２つの連続命令を実行するために前記命令をバンドリングできるかどうかを示すことを特徴とする前項６に記載のコンピュータ・システム。
【００６８】
８．前復号手段によって生成される前復号ビットが、実行するためにバンドリングできる２つの連続命令が非整列命令であるか、又は整列命令であるかを示すことを特徴とする前項７に記載のコンピュータ・システム。
【００６９】
９．メモリ・インタフェース手段が、メイン・メモリからダブルワードで一度に２つずつ命令を取り出すことを特徴とする前項８に記載のコンピュータ・システム。
【００７０】
１０．前復号手段によって生成される前復号ビットが、第１の整数論理演算ユニット、及び第２の整数論理演算ユニットのうちのどれに特定の命令を操向すべきかを、バンドリングされる各命令対ごとに識別することを特徴とする前項６に記載のコンピュータ・システム。
【００７１】
１１．前復号手段が、
現在復号中の命令対の偶数ワード命令を保持するための第１の前復号レジスタと、
現在復号中の命令対の奇数ワード命令を保持するための第２の前復号レジスタと、
以前に前復号された命令対の奇数ワード命令を保持するための第３の前復号レジスタとを含むことを特徴とする前項６に記載のコンピュータ・システム。
【００７２】
１２．現在の状態が、操向手段がどちらの前復号ビットを使用して命令を操向するかを決定する状態マシンを操向手段が含むことを特徴とする前項６に記載のコンピュータ・システム。
【００７３】
１３．プロセッサが更に、浮動小数点命令を浮動小数点プロセッサに操向する操向手段に結合された浮動小数点演算ユニットをも含むことを特徴とする前項６に記載のコンピュータ・システム。
【００７４】
１４．計算システムにおいて、第１の整数論理演算ユニット、及び第２の整数論理演算ユニットに命令を操向する方法において、
（ａ）メイン・メモリから命令を取り出すステップと、
（ｂ）命令を前復号して、命令をバンドリングできるかどうか、及びいかにバンドリングできるかを示す前復号ビットを生成するステップと、
（ｃ）命令および前復号ビットを命令キャッシュに格納するステップと、
（ｄ）前復号ビットと共に命令を命令キャッシュから取り出すステップと、
（ｅ）前復号ビットを使用して第１の整数論理演算ユニット、及び第２の整数論理演算ユニットのうちの一方に各命令を操向するステップとを含むことを特徴とする方法。
【００７５】
１５．ステップ（ｂ）において、前復号ビットが、２つの連続命令を実行するために前記命令をバンドリングできるかどうかを示すことを特徴とする前項１４に記載の方法。
【００７６】
１６．ステップ（ｂ）において、前復号ビットが、実行するためにバンドリングできる２つの連続命令が非整列命令であるか、又は整列命令であるかを示すことを特徴とする前項１４に記載の方法。
【００７７】
１７．ステップ（ａ）において、命令が、メイン・メモリからダブル・ワードで１度に２つずつ取り出されることを特徴とする前項１４に記載の方法。
【００７８】
１８．ステップ（ｂ）において、前復号ビットが更に、第１の整数論理演算ユニット、及び第２の整数論理演算ユニットのうちのどれに特定の命令を操向すべきかも、バンドリングされる各命令対ごとに識別することを特徴とする前項１４に記載の方法。
【００７９】
【発明の効果】
本発明は上述のように構成し、前復号手段は、メモリ・インタフェース手段に接続され、命令を前復号して前復号ビットを生成する。前復号ビットは、命令をバンドリングできるかどうか、及びいかにバンドリングできるかを示し、バンドリングされた各対ごとに、特定の命令が第１の整数論理演算ユニットと第２の整数論理演算ユニットのうちのどちらに操向されるかを識別する。前復号手段は、３つの前復号レジスタを含む。第１の前復号レジスタは、現在復号されている命令対の偶数ワード命令を保持する。第２の前復号レジスタは、現在復号されている命令対の奇数ワード命令を保持する。第３の前復号レジスタは、以前に前復号された命令対の奇数ワード命令を保持する。
【００８０】
インタフェース手段は、前復号手段および命令キャッシュに接続される。インタフェース手段は、命令および前復号ビットを命令キャッシュに格納し、前復号ビットと共に命令を命令キャッシュから取り出す。操向手段は、インタフェース手段、第１の論理演算ユニット、及び第２の論理演算ユニットに接続される。操向手段は、各命令を実行するために前記命令を第１の整数論理演算ユニットと第２の整数論理演算ユニットのうちの一方に操向する。操向手段は、前復号ビットを使用して命令を操向する。好適実施例では、操向手段は状態マシンを含む。状態マシンの現在状態は、操向手段がどちらの前復号ビットを使用して命令を操向するかを決定する。
【００８１】
本発明の好適実施例では、プロセッサは、操向手段に接続された浮動小数点演算ユニットも含む。操向手段は、浮動小数点命令を浮動小数点演算ユニットに操向する。また、前復号手段によって生成される前復号ビットは、２つの連続命令を実行するために前記命令をバンドリングできるかどうかも示す。更に、前復号手段によって生成される前復号ビットは、実行するためにバンドリングできる２つの連続命令が非整列命令であるか、それとも整列命令であるかを示す。
【００８２】
以上の構成により、命令演算コードを最適に実行する柔軟性を制限することなく、命令の効率的なバンドリングおよび操向をスーパースカラ・プロセッサで実施することが可能となる。
【図面の簡単な説明】
【図１】本発明の好適実施例による、命令キャッシュ、及びデータキャッシュを有するコンピュータ・システムの簡略ブロック図を示す。
【図２】本発明の好適実施例による、図１に示すプロセッサの簡略ブロック図を示す。
【図３】本発明の好適実施例による、図１に示すプロセッサ内の命令の前復号、及び操向に関連する論理ブロックの簡略ブロック図を示す。
【図４】本発明の好適実施例による、図３に示す状態マシンに対する状態図を示す。
【符号の説明】
10      バス
11      メモリ
12      プロセッサ
13      命令キャッシュ
14      データ・キャッシュ
21      変換索引バッファ（TLB）
22      論理演算ユニット（ALU）
23      補助キャッシュ
24      命令キャッシュ・インターフェース
25      データ・キャッシュ・インターフェース
26      システム・バス・インタフェース
30      受信偶数ワード命令レジスタ
31      受信奇数ワード命令レジスタ
32      保存偶数ワード命令レジスタ
33      保存奇数ワード命令レジスタ
34      操向論理ユニット
35      浮動小数点演算ユニット（FPU）
36,37   整数論理演算ユニット（INT ALU）
40      偶数ワード命令レジスタ
41,43   奇数ワード命令レジスタ
44      前復号論理ユニット
45      二重状態マシン
【図１】
0003670043.tif 000006
【図２】
0003670043.tif 000007
【図３】
0003670043.tif 000008
【図４】
0003670043.tif 000009