JP2006185462A - 高データ密度のriscプロセッサ - Google Patents
高データ密度のriscプロセッサ Download PDFInfo
- Publication number
- JP2006185462A JP2006185462A JP2006039754A JP2006039754A JP2006185462A JP 2006185462 A JP2006185462 A JP 2006185462A JP 2006039754 A JP2006039754 A JP 2006039754A JP 2006039754 A JP2006039754 A JP 2006039754A JP 2006185462 A JP2006185462 A JP 2006185462A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- register
- instructions
- field
- contents
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
【課題】高データ密度のRISCプロセッサ。
【解決手段】RISCプロセッサは、プログラムの実行に必要とされる命令の数と、クロック期間と、命令当たりの平均クロック数との間の関係を最適化することに加えて、Sがビットでのプログラム命令のサイズであり、ISがプログラムを表すために必要な命令の静的数(実行によって必要とされる数ではない)であり、BIが命令あたりの平均ビット数である式:S=IS*BIを最適化するように設計されている命令セットを実行する。通常のRISCアーキテクチャと比較すると、このプロセッサは、クロック期間および命令当たりの平均クロック数の増加を最小限にとどめながら、BIおよびISの両者を低下させる。このプロセッサは、ロード/記憶アーキテクチャを備えた汎用レジスタを含むRISC原理に基づいた固定長の高性能符号化における良好なコード密度を達成する。
【選択図】図1
【解決手段】RISCプロセッサは、プログラムの実行に必要とされる命令の数と、クロック期間と、命令当たりの平均クロック数との間の関係を最適化することに加えて、Sがビットでのプログラム命令のサイズであり、ISがプログラムを表すために必要な命令の静的数(実行によって必要とされる数ではない)であり、BIが命令あたりの平均ビット数である式:S=IS*BIを最適化するように設計されている命令セットを実行する。通常のRISCアーキテクチャと比較すると、このプロセッサは、クロック期間および命令当たりの平均クロック数の増加を最小限にとどめながら、BIおよびISの両者を低下させる。このプロセッサは、ロード/記憶アーキテクチャを備えた汎用レジスタを含むRISC原理に基づいた固定長の高性能符号化における良好なコード密度を達成する。
【選択図】図1
Description
本発明は、マイクロプロセッサに関し、特に命令幅を高度に有効に使用することのできる高性能で命令セットの数を減少させたコンピュータ(RISC)アーキテクチャプロセッサに関する。
プロセッサの命令セットの設計は十分に確立された技術である。多くの命令セット特徴はそれ自体は新しいものではない。しかしながら個々の特徴は技術の進歩のために新しいユニークな方法で組合わせられることができる。特に、命令セット設計が従来の命令セットとは異なった使用に対して最適となるように設計されるとき、命令セットがターゲットアプリケーションにおいて使用されるようにプロセッサが構成されている場合に顕著な改善が得られる。
命令セットの設計は、種々のアルゴリズムを符号化するために必要なマシンコードの大きさを含む多くの競合する目標をバランスさせるために必要であり、それらには、新しいアルゴリズムおよびアプリケーションに対する命令セットの拡大性および適用性、そのようなアルゴリズムにおいて命令セットを実行するプロセッサの性能および消費電力、命令セットを実行するプロセッサのコスト、多くのプロセッサを長い時間使用することに対する命令セットの安定性、命令セットを実行するプロセッサの設計の複雑性、高レベルプログラム言語から編集するためのターゲットとしての命令セットの安定性等が含まれている。
命令セットはプロセッサの性能に対して1つの直接的な影響および2つの間接的な影響を有している。命令セットは直接IE,すなわち、所定のアルゴリズムを実行するために必要な命令の数を決定する。なお、ここでは、編集のためにターゲットとしての命令セットの安定性は良好であるとしている。プロセッサの性能の他のコンポーネントはクロック期間CPと命令当たりの平均クロックCPIである。これらは命令セットの実行の主要な影響であるが、命令セット特徴はクロック当たりの時間および命令目標当たりのクロックに同時に適合するために実行者の能力に影響する。例えば、符号化の選択は残りの命令の実行により直列に付加的な論理装置に命令してもよく、それはクロック当たりの時間を増加させることにより実行者がアドレスし、或いは命令当たりのクロックを通常増加させる付加的なパイプライン段を追加することによって実行者がアドレスする。
1980年代および1990年代にRISCと呼ばれる新しい命令セットアーキテクチャが開発された。それは上記の妥協の実現により得られたものであり、すなわち、
T=IE*CPI*CP
であり、ここで、Tは秒で表されるプログラム実行時間であり、他の変数は上述したものである。RISC命令セットは実行者が著しくIEを増加させずにCPIおよびCPを顕著に改善することを可能にする。RISC命令セットはプロセッサの性能を改善し、設計の複雑性を低下させ、所定の性能レベルにおけるプロセッサ構成のコストを低下させ、高レベルプログラム言語からの編集に適している。
T=IE*CPI*CP
であり、ここで、Tは秒で表されるプログラム実行時間であり、他の変数は上述したものである。RISC命令セットは実行者が著しくIEを増加させずにCPIおよびCPを顕著に改善することを可能にする。RISC命令セットはプロセッサの性能を改善し、設計の複雑性を低下させ、所定の性能レベルにおけるプロセッサ構成のコストを低下させ、高レベルプログラム言語からの編集に適している。
プロセッサアーキテクチャコミュニティはRISCの完全に満足できる定義について同意していないが、それは一般に次のような属性の多くのものを含んでいる。すなわち、固定サイズの命令ワード;算術演算およびその他の計算動作は16以上のレジスタを有する汎用レジスタファイルから読取られたオペランドについて行われ、その結果は同じレジスタファイルに書込まれる;レジスタファイルのアクセスが並列に行われるように、ソースレジスタに対して命令ワード中の固定された位置にある;メモリアクセスは主としてメモリからレジスタへのロードにより行われ、レジスタからメモリへ記憶される(計算命令におけるメモリオペランドを有するのと反対);メモリアドレスを計算する小さい数の方法(通常4以下であり、しばしば1である);命令のパイプライン実行を困難にする特徴の回避(例えば所定の命令による2回以上のハードウエアリソースの使用);およびマイクロコードまたはその等価物を要求する特徴の回避等が含まれる。全てのプロセッサが上記の要素の全てを含んでいるRISCであるとは考えられないが、全てのプロセッサが上記の要素の多くのものを含んでいる。
しかしながら、初期のRISC命令セットはコンパクトなマシンコードの生成において特に効率的ではない。特に、RISC命令セットはアプリケーションを符号化するために通常はプレRISC命令セットよりも多くのビットを必要とする。アプリケーションに対するマシンコードの大きさは、全体のソリューションコストにおいてプロセッサそれ自身のコストよりもしばしば重要である。それはアプリケーションを保持するためにより大きいメモリが必要であるからである。RISCは性能が最も重要である多くのアプリケーションにおいて依然として許容されているが、RISCの利点を有しているが、減少されたコードサイズの命令セットは多くの他のプロセッサアプリケーションにおいて有効である。
初期のプロセッサ命令セット(IBM7090,CDC6600,DEC PDP6 ,GE635 )のいくつかはRISCの特徴のいくつかのものを有している。それはそれらがRISCのようなマイクロコードなしでハードウエアにより直接実行されるように設計されていたからである。これらの命令セットの大部分は最新の高レベル言語およびアプリケーションにあまり適したものではない。その理由は、ワード(バイトではなく)アドレス、限定されたアドレススペース、および演算の特別の組合わせのような特徴のためである。実際に多くのものは言語プログラムを組立てるために意図されたものである。いくつかのものは36ビットのデータワードおよび命令幅に基づいており、36ビット命令はコード密度に対しては非常に良好であるとは言えない。いくつかのものは計算のための累算器およびメモリ例に基づいており、それは性能を制限する。本発明の個々の特徴のいくつかはこれらのマシンの世代に続くものであるが、所望の特性のものは従来存在していない。
プロセッサを動作させるためのマイクロコードの使用はさらに複雑な命令セットの適合を可能にする(IBM360,DEC PDP11,DEC VAX,インテルx86,LLNL S-1,モトローラ68000)。それ故、次の世代のプロセッサは、複雑な可変命令長コード化による等のために良好なコード密度を有する複雑な命令セットを有している。しかしながら、マイクロコードのプロセッサおよび複雑な命令セットは高性能には良好に適合しないことが多い。複雑な命令は、ハードウエアパイプラインにおける直接の実行の代りにマイクロエンジンの相互作用により実行されるが、それはCPIを増加させる。種々の異なるスタイルのこの世代に出現した命令セットは1個または2個の累算器から汎用レジスタアーキテクチャまたはスタックアーキテクチャのいずれかに変更される傾向がある。レジスタまたはスタックの構成コストは十分に低く、命令セットはこれらの有効なスタイルを使用することができる。
上述のように性能の顕著な改善はあるが、RISCはコード密度に対してはむしろ後退している。多くのRISC命令セットは固定長の32ビット命令に基づいており、32ビットは必要以上のものである。またいくつかの種類の可変長符号化が最良のコード密度を得るために必要である。スタックアーキテクチャはコードサイズの点では有利であるが、性能が低いためにこの時点で除外される。それは命令が性能とコードサイズの目標を共に達成することがいかに重要であるかを示している。
RISCのコードサイズの欠点を補償するために、プロセッサ設計者は命令セットのコンパクトな符号化を導入した。ARMのTnumbおよびMIOS16はその例である。両者は少数の32ビット命令を含むが、主として16ビットを使用する。16ビット符号化(それは命令当たりのビット数を半分にすることによって小さいコードを与える)は貧弱な性能を与える。その理由は8個のレジスタしか有していないからであり(IEを増加)、編集されたソースレジスタオペランドの使用(CPまたはCPIを増加)は命令ワード(IEを増加)の制限範囲を限定し、行先レジスタオペランドの数(多くの場合2以下…IEを増加)を制限する。
ヒタチのSH命令セットはRISCと類似し、対象としてコードサイズをターゲットにしている。それは16ビットの命令セットでスタートするが、後で必要が認められたとき32ビット命令が追加される。16のレジスタを有するが命令当たり大抵は2個のレジスタであり(IEを増加)、ブランチオフセットを厳しく制限する。
RISCの性能その他の利点を与え、しかも小型でコストの効率のよいマシンコードを与える命令セット構成が必要とされている。過度に複雑化されることなく、高性能の構成を実現するために、命令セットは簡単な短いパイプラインによってマイクロコードを使用しないで直接実行可能でなければならない。良好な性能を得て編集を最適にするための適切なターゲットである十分な数の汎用レジスタがなければならない。さらにコードサイズを減少させるためにその他の技術が使用されてもよい。
上述した従来の技術の問題に鑑みて、本発明の目的は、完全な特徴のRISC命令セットの24ビット符号化を行うプロセッサを提供することである。
本発明の別の目的は、命令当たりのバスの平均数が限定された命令符号化を使用したときプログラムを表すために必要な命令の静的な数を低い値に維持するために相乗的に動作する命令を有する命令セットを実行するプロセッサを提供することである。本発明は狭い命令ワードにおける命令定数の効率的な符号化を行うために技術的に有効である。
本発明の別の目的は、24ビット命令ワード符号化比較および普通の場合にもっと長いターゲット特定素子を有する最も有用な比較および形態を使用するブランチ命令を使用するRISC命令セットの符号化を行うプロセッサを提供することである。
本発明のさらに別の目的は、プログラムを表すために必要な命令およびサイクルの静的な数およびプログラムを実行するために必要な命令の数を少くすることのできる減少されたオーバーヘッドループ能力を有する汎用(DSPのような特別の目的のものと対照的な)命令セットを実行するプロセッサを提供することである。
本発明のさらに別の目的は、プログラムを表すために必要な命令およびサイクルの静的な数およびプログラムを実行するために必要な命令の数を少くすることのできる減少されたオーバーヘッドループ能力を有する汎用(DSPのような特別の目的のものと対照的な)命令セットを実行するプロセッサを提供することである。
上述の目的は、本発明の第1の好ましい実施形態の命令セットを実行するRISCプロセッサを提供することによって達成される。それ命令セットは、上記のような式T=IE*CPI*CPに対して調整されるために付加される次のようなコードサイズ式により構成される。
S=IS*BI
ここで、Sはビットによるプログラムの大きさであり、
ISはプログラムを表すために必要な命令の静的な数(前のもののような実行に必要な数ではない)であり、
BIは命令当たりのビットの平均数である。
RISCに比較して本発明はCPおよびCPIの増加を最小にしてBIおよびISを低下させる。それは同時にIEを増加および減少させることが特徴である。
S=IS*BI
ここで、Sはビットによるプログラムの大きさであり、
ISはプログラムを表すために必要な命令の静的な数(前のもののような実行に必要な数ではない)であり、
BIは命令当たりのビットの平均数である。
RISCに比較して本発明はCPおよびCPIの増加を最小にしてBIおよびISを低下させる。それは同時にIEを増加および減少させることが特徴である。
本発明のこの特徴は、ロード/記憶アーキテクチャを有する一般的なレジスタを含むRISCの原理に基づいた固定長の高性能符号化において良好なコード密度を提供しなければならないことの認識により構成されたものである。典型的なコード密度を得るために、実施例では性能と妥協しない簡単な可変長符号化が付加される。この実施形態はプロセッサ構成のコストを最適なものにする。
本発明の上記およびその他の目的は、以下の詳細な説明および添付図面から容易に明らかになるであろう。
図1乃至4には、本発明の好ましい実施形態による命令セットを実施するのに適したプロセッサが示されている。一般に、プロセッサは命令およびデータ用の232バイト、すなわち4GBのバーチャルメモリと、32ビットのプログラムカウンタIPCと、16個以上の32ビットの汎用レジスタと、シフトアドレスレジスタSARと、32ビットのループ開始アドレスレジスタLBEGと、32ビットのループ終了アドレスレジスタLENDと、および32ビットのループカウントレジスタLCOUNTとを有しており、これら3つのレジスタは全て、以下詳細に説明するようにオーバーヘッド減少ループ命令によって使用される。
図1乃至4には、本発明の好ましい実施形態による命令セットを実施するのに適したプロセッサが示されている。一般に、プロセッサは命令およびデータ用の232バイト、すなわち4GBのバーチャルメモリと、32ビットのプログラムカウンタIPCと、16個以上の32ビットの汎用レジスタと、シフトアドレスレジスタSARと、32ビットのループ開始アドレスレジスタLBEGと、32ビットのループ終了アドレスレジスタLENDと、および32ビットのループカウントレジスタLCOUNTとを有しており、これら3つのレジスタは全て、以下詳細に説明するようにオーバーヘッド減少ループ命令によって使用される。
とくに、プロセッサパイプラインは5つの基本ステージ:命令フェッチすなわちIステージ100と、命令デコードおよびレジスタアクセス、すなわちRステージ200と、実行およびアドレス計算、すなわちEステージ300と、メモリアクセス、すなわちMステージ400と、およびライトバック、すなわちWステージ500とを有している。Iステージ100において、実行されるべき命令を検索するためにプログラムメモリがアクセスされる。Rステージ200では、このようにフェッチされた命令が復号され、それが使用するレジスタがあるならば、これがアクセスされる。その後、Eステージ300において、Rステージ200で復号されたレジスタの内容および定数が命令オペランドにしたがってプロセッサのALU332によって処理される。Mステージ400では、ロード(負荷)、記憶等の任意の必要なメモリアクセスが行われる。最後にWステージ500において、命令を実行した結果が命令オペランドによって命じられたとおりに汎用レジスタにライトバックされる。
とくにIステージ100では、ワードがIステージプログラムカウンタIPC104中に保持されているアドレスに基づいて命令キャッシュ102から抽出される。その後そのワードは、命令キャッシュRAM IC102(以下に示す別のコンポーネントと一緒に、命令キャッシュ116を形成する)から読出され、整列ユニットALIGN108により最後のフェッチレジスタ106中に保持され、Rステージ命令レジスタRINST202に記憶された最後のワードと結合される。キャッシュミスは、主プログラムメモリからステージングレジスタIREFILL110を通ってキャッシュRAM IC102までメモリフェッチによって処理され、タグがそれにしたがって、レジスタIMISSA112およびタグキャッシュRAM ITAG114を使用して調節される。マルチプレクサ118は、キャッシュRAM IC102の出力か、または主メモリから直接フェッチされた命令かのいずれかを選択し、選択されたデータを整列ユニット108に出力し、この整列ユニット108がそれを、最後のフェッチレジスタ106に記憶されている最後にフェッチされたワードと連結し、必要ならばそのサブセットを選択して、命令長バリエーションに対して調節する。タグ比較装置122はキャッシュミスを検出し、その表示をIステージコントローラ124に与え、このIステージコントローラ124はそのステージの全動作を制御する。
素子104として示されている回路はここではプログラムカウンタと呼ばれているが、Iステージプログラムカウンタ104は実際はフェッチされるべき命令をカウントするのではなく、ワードをカウントするために使用されることを認識しなければならない。しかしながら、Rステージプログラムカウンタ204のような後続するプログラムカウンタは、好ましい実施形態では、実際の命令をカウントする。また、当業者は、Iステージコントローラ124に加えて、対応したRステージコントローラ224、Eステージコントローラ324およびMステージコントローラ424のそれぞれがその各ステージの全動作を制御することを容易に理解するであろう。また、Rステージ状態レジスタ203、Eステージ状態レジスタ303、Mステージ状態レジスタ403およびWステージ状態レジスタ503のそれぞれが、その各パイプラインステージにおける命令に関する関連状態情報、たとえばデータが有効か否か等の情報を各コントローラに供給する。さらに、ステージコントローラからそれらの各マルチプレクサまで延びているマルチプレクサ選択ライン、クロック信号、例外ベクトルアドレス等のある特徴は、説明を容易にするために省略されているが、しかしながら当業者は、それらの配置を容易に認識するであろう。
命令はRステージ命令レジスタ202に供給されているが、次のアドレス発生セクション126内の加算器128は、フェッチされるべき次のワードを指すように現在のワードアドレスをインクレメントし、それをマルチプレクサ130に供給し、このマルチプレクサ130がそれを命令プログラムカウンタ104にフィードバックする。ループ命令(以下さらに詳細に説明する)が実行されたとき、それは開始ループアドレスをループ開始レジスタLBEG132にロードし、その後マルチプレクサ130が開始アドレスをプログラムカウンタ104に供給する。ループ命令で使用されたように、ループ終了レジスタ134は、ループ状態の終了を検出してループ指標レジスタLOUNT138をデクレメントするために比較装置136によって現在のアドレスと比較される値を供給する。ループ外での実行を続けるために、比較装置140は、カウントがゼロの場合に命令コントローラ124に表示を与える。そうでない場合には、ループ指標レジスタLOUNT138はデクレメンタ142によってデクレメントされ、マルチプレクサ144(レジスタをロードするためにも使用される)を通過させられる。最後に、RステージPC選択マルチプレクサ146は、以下さらに詳細に説明するようにEステージ300に供給されるべきアドレス値を選択する。
Rステージ命令レジスタ202に記憶された命令はデコーダ201によって復号され、予め定められたパラメータフィールドを抽出し、命令オプコードにしたがって即値または定数フィールドを復号する。復号された命令は、実行のためにEステージ命令復号レジスタ302にパイプラインされる。命令復号動作と並列に、命令からのフィールドは、以下詳細に説明するように、ウインドウされるレジスタ動作のために、それにウインドウベース値を加算するために加算器208−212を介してレジスタファイル206に送られる。ある命令中に存在する可能性のある2つのソースレジスタフィールドおよび1つの行先レジスタフィールドのそれぞれに対して1個の加算器が使用される。
レジスタファイル206中の値は読出されて、マルチプレクサ214および216に供給され、その後EステージSおよびTレジスタ304および306に供給される。マルチプレクサ214および216はレジスタファイル206から値を供給することができる。すなわち、必要とされるデータがまだファイル206中に書込まれていない場合、以下に説明するように、それらはEステージから供給された値を使用してもよい。マルチプレクサ214はまた定数値を命令デコーダ204から受取ってもよい。
加算器218は、Rステージプログラムカウンタ201の内容と命令デコーダ204からの指標定数に基づいて指標付きターゲットアドレスを計算し、その結果をEステージブランチレジスタ308に記憶する。加算器220は、命令長に応じて2または3をマルチプレクサ222を介してRステージプログラムカウンタ201内の値に加算することにより次の命令アドレスを計算し、ブランチがとられない場合に使用するためにその結果を次のPCレジスタ310に送る。
Eステージ300に進むと、バイパスマルチプレクサ318および320は、種々の機能ユニット(ブランチユニット326、シフト/マスクユニット330、ALU332、AGEN334および記憶整列ユニット336)に対するオペランドを選択する。マルチプレクサ選択は、Eステージ300、Mステージ400およびWステージ500中の現在の命令に基づいて各レジスタ228、230および232によってバイパスブロックEBYP314によりRステージ200において計算され、バイパスブロックEBYP226を通ってパイプラインされた。結果がRステージ200から得られたとき、各マルチプレクサ318,320はETレジスタ312またはESレジスタ316を選択する。マルチプレクサ318および320に対する別の入力は、Mステージ400およびWステージ500からのものである。
ブランチユニット326はマルチプレクサ318および320からの2つのオペランドを使用して、条件付きブランチ採用/不採用決定を生成し、それはIステージ100およびRステージ200中のコントローラ124および224にそれぞれ供給され、そこでマルチプレクサが選択をする。シフト/マスクユニット330は、マルチプレクサ328の出力に基づいてシフトおよび抽出命令を実行する。それはマルチプレクサ318および320から2つのオペランドをとるだけでなく、復号された命令レジスタEINSTD302からのマスク入力をとり、このEINSTD302はまたMステージ命令レジスタMINSTD402に供給する。シフト量はシフト×定数に関してはEINSTD302から選択され、あるいはシフト×可変量についてはESAR322から選択される。ESAR322はEステージ300に対するISA状態SARを含んでいる。
ALU332は、ADD,SDDI,ADDX2,SUB,ADN,OR,XORを含む演算および論理機能を実行する。シフト/マスクユニット330およびALU332の出力は、マルチプレクサ338中の命令タイプに基づいて多重化され、MALUレジスタ406に供給される。アドレス発生ユニットAGEN334は、レジスタオペランドとEINSTD302中の復号された命令からのオフセットとの和を計算する。その出力は、MステージバーチャルアドレスレジスタMVA408に送られる。記憶整列ユニット336は、ETマルチプレクサ318の出力を0,8,16または24の位置だけシフトして、記憶されたデータをメモリに適したバイト位置に整列する。出力はMステージ記憶データレジスタMSD410に送られる。
前のパイプステージと同様に、ECTL324はEステージ300に対する制御と、そこで実行される命令の状態の更新とを処理する。Eステージ命令アドレスプログラムカウンタEPC304は、例外処理のためにMステージ命令アドレスプログラムカウンタMPC404にパイプラインされる。
パイプラインのMステージ400は、ロードおよび記憶命令の第2の半分と全てのステージに対する例外決定とを処理する。MPC404の出力は、WPCレジスタ504に送られる。Mステージ400における命令が例外または割込みによって無効にされた場合、WPC504の出力はISA特定例外命令アドレスレジスタEPC[i] (示されていない)(EステージプログラムカウンタEPC304とは異なる)の1つにロードされる。Mステージ400中の命令が再試行されなければならない(たとえば、キャッシュミスために)場合、WPCレジスタ504の内容は命令フェッチを再スタートするためにIステージ100に送り返される。
シフトまたはALU命令は、このステージにおいてMALU406からWALU506に単に転送されるに過ぎない。MALU406の出力はまた、このステージにおいてバイパスマルチプレクサ318および320に供給され、それによってシフトまたはALU命令の出力は、後続する命令がレジスタファイルに書込まれる前にこれによって使用されることができるようになる。Wステージ500におけるロード命令は、データキャッシュRAMおよびデータタグRAMの両者を読出す。Wステージ500における記憶命令は、データタグRAMだけを読出す。データキャッシュRAMの書込みは、タグ比較が完了するまで遅延される。非ロード命令は、任意の未決定の記憶データをデータキャッシュRAMに書込む。同じアドレスへのロードが後続する記憶は、記憶データがデータキャッシュRAMに書込まれていないので、特殊バイパスを必要とする。
Wステージ中のロード命令は、バーチャルアドレスMVA408の指標部分をデータタグRAMのアドレス入力に送り、およびマルチプレクサ422を通って直接マップされたデータキャッシュRAM DC434のアドレス入力にも送る。DC434の読出しと並列に、アドレスが、STVI416中の未決定の記憶バーチャル指標および有効ビットと比較される。比較装置428の出力に基づいて、読出しが未決定の記憶のキャッシュ指標に対するものである場合、マルチプレクサ432は未決定の記憶データバッファ418の結果を選択する。そうしないと、DA読出しデータが選択される。マルチプレクサ432はロード整列回路436に供給し、この回路436はバーチャルアドレスの下位の2つのビットに基づいてロードデータを0,8,18または24だけシフトし、その後L8UIおよびL16UI命令に対してビット7または15からそれぞれゼロ拡張され、L16SI命令に対してビット位置15から符号拡張される。この結果はWLOAD508によってラッチされる。データタグRAMの出力は、比較装置430によってMVA408からのMステージバーチャルアドレスの上位ビットと比較され、このヒット/ミス結果は、キャッシュミスおよび例外を処理するMステージ制御論理MCTL424に送られる。最後に、ロードバーチャルアドレスがキャッシュミスを処理するためにWMA510において捕獲される。
ロードキャッシュミスは、パイプラインのIからMまでのステージ中の命令を無効にする。WMA510からのロードアドレスは、外部メモリに送られる。そのメモリから読出されたデータは、WMA510の下位ビットをアドレスとして使用して、マルチプレクサ412およびSTDATA418を通ってデータキャッシュRAM424中に書込まれる。データタグRAM426はマルチプレクサ414およびSTADDR420を通ってWMA510において捕獲された上位桁のミスアドレスから書込まれ、DTAG420はMVA408からの小さい桁のビットによってアドレスされる。
Wステージ500における記憶命令は、記憶アドレスおよびデータをSTADDR418およびSTDATA420に入れる。さらに、データタグRAM426がアクセスされ、その結果がMVA408の上位桁ビットと比較されて、記憶アドレスがヒットかミスかが決定される。キャッシュにおいて記憶がヒットしたならば、SDTDATA418の内容が第1の非ロードサイクルにおいて、SDTDATA418に記憶されているアドレスにおいてデータキャッシュRAM424中に書込まれる。キャッシュミスの補充が完了したとき、命令フェッチユニットは、ミスされたロード命令から再びスタートするフェッチ命令を開始する。この実施形態のデータキャッシュはライトスルーされ、したがって記憶アドレスおよびデータもまたSTADDR420およびSTDATA418から書込みバッファ438に送られ、外部メモリに書込まれるまで、この書込みバッファ438に保持される。
WALUおよびWLOADレジスタ506および508の出力は、マルチプレクサ512によって選択され、この時点で命令が依然として有効ならばRステージ200におけるレジスタファイル206中に書込まれ、それはAレジスタの結果を有する命令である。
プロセッサはまた6ビットシフト量レジスタを有しており、この6ビットシフト量レジスタは、論理の左、論理の右および演算の右のような通常の即値シフトを行うために使用されるが、直接変数シフトはクリティカルタイミングパスである可能性が高いため、シフト量がレジスタオペランドである場合には単一の命令シフトを行わず、簡単なシフトは効率的に広い幅に広がらない。ファンネルシフトは広げられることができるが、それらには過大な数のオペランドが必要である。本発明の好ましい実施形態によるプロセッサは、そのシフト量がSARレジスタからとられるファンネルシフトを与えることによってこれらの問題を解決する。変数シフトは、汎用レジスタ中のシフト量からSARを計算するための命令を使用してコンパイラによって合成され、それに続いてファンネルシフトされる。SARに対する値のリーガル範囲は0乃至31ではなく0乃至32であり、したがって6つのビットがそのレジスタに対して使用される。
当然ながら、以下において詳細に示される命令セットの説明が与えられたならば、本発明による他の種々のプロセッサアーキテクチャは、当業者に容易に明らかになるであろう。これらの構造もまた請求の範囲に記載された技術的範囲内に含まれるべきものである。
プロセッサ内において種々のパイプライン構造が使用されてもよい。しかしながら、命令セットのある特徴がある実施クラスに関していちばんよく実行する。図5には、1つのこのようなタイプが一般的に示されている。このタイプのアーキテクチャは、浮動小数点ユニットおよびDSPのような主な計算ユニットにより有効に使用されることができ、このパイプラインアーキテクチャの1つの顕著な点は、このようなユニットがDキャッシュの後に(図5においてDReg/DALUとラベル付けされた位置に)配置されることにより、このようなユニットに対する命令がメモリ参照を1つのソースオペランドとして含むことが可能になることである。これによって、多数の命令セットをサイクルごとにフェッチおよび実行する必要なしに、データキャッシュ参照および動作をサイクルごとに行うことができるようになる。
[一般的な命令セット設計考慮事項]
多数の命令セット特徴はプロセッサ構成費用を増加させる犠牲を伴って、性能を改善し(IEを低くすることにより)、符号サイズを改善する(ISを低くすることにより)。たとえば、“自動インクレメント”アドレスモード(ベースアドレスレジスタが読出し、その後インクレメントされたアドレスで再度書込まれる)には、ロード用の第2のレジスタファイル書込みポートが必要である。“指標付き”アドレスモード(2つのレジスタの和がバーチャルアドレスを形成するために使用される)には、記憶用の3つのレジスタファイル読出しポートが必要である。好ましい実施形態は、妥当な性能のために最小限必要な2個の読出しポートと1個の書込みポートのレジスタファイルに合わせられている。
多数の命令セット特徴はプロセッサ構成費用を増加させる犠牲を伴って、性能を改善し(IEを低くすることにより)、符号サイズを改善する(ISを低くすることにより)。たとえば、“自動インクレメント”アドレスモード(ベースアドレスレジスタが読出し、その後インクレメントされたアドレスで再度書込まれる)には、ロード用の第2のレジスタファイル書込みポートが必要である。“指標付き”アドレスモード(2つのレジスタの和がバーチャルアドレスを形成するために使用される)には、記憶用の3つのレジスタファイル読出しポートが必要である。好ましい実施形態は、妥当な性能のために最小限必要な2個の読出しポートと1個の書込みポートのレジスタファイルに合わせられている。
好ましい実施形態は、構成の費用を増加させるいくつかの特徴を有しているが、レジスタファイルポートの追加と同程度の増額が必要とされる特徴は回避される。これはとくに、構成されたものが多数の命令をサイクルごとに実行する場合に重要である。それは、ポートの数がプロセッサの最大実行機能(たとえば、2乃至8)により増倍されるためである。
性能を維持するために、命令セットは少なくとも2つのソースレジスタフィールドと1つの異なる行先レジスタフィールドとをサポートしなければならない。さもないと、IEおよびISの両者が増加する。符号密度だけを最適化する汎用レジスタ命令セットが、しばしば、1つがソースとしてのみ使用され、1つがソースおよび行先の両方として使用される2つのレジスタフィールドを中心に設計される(たとえば、日立SH)。これによって符号サイズは、ISの増加がBIの減少だけオフセットされたときに減少するが、IE命令セットの増加を補償する方法は存在しない。少数のレジスタを指定する命令セットは狭いレジスタフィールドを使用し、したがって低いBIを使用するが、多くの可変的で一時的な値をメモリ中において強制的に生かしておき、それ故付加的ロードおよび記憶命令を要求することによってIEおよびISを増加させる。符号密度だけが優先度である場合、ISの増加は正味の節約としてBIの減少分だけオフセットされるが、良好な性能もまた要求された場合にはIEの増加を補償する方法はない。
レジスタの数が増えるにしたがって、IEおよびISの減少は低下して特性は平らになる。命令セットは、少なくとも収穫逓減点に達するように、すなわちレジスタカウントをさらに増加した結果としてIEおいて対応した著しい減少が生じないように、十分なレジスタを提供しなければならない。とくにRISC性能レベルに対して、少なくとも16個の汎用レジスタが必要である。また、3個の4ビットレジスドタフィールドは、符号化するために少なくとも12ビットを必要とする。操作コード(オプコード)および定数フィールドに対するビットもまた要求され、したがっていくつかのプロセッサによって使用されるような16ビット符号化では不十分である。
[24ビット符号化]
大部分の従来技術において符号サイズと性能との間の適切なバランスをとることができていない1つの理由は、命令セットの設計者が16ビットまたは32ビットのようなある命令サイズを強制されていると感じているためである。実際、プロセッサのデータワード幅に対して簡単な比率の命令サイズを使用することには利点がある。しかしながら、制限を若干緩和することには大きな利点がある。
大部分の従来技術において符号サイズと性能との間の適切なバランスをとることができていない1つの理由は、命令セットの設計者が16ビットまたは32ビットのようなある命令サイズを強制されていると感じているためである。実際、プロセッサのデータワード幅に対して簡単な比率の命令サイズを使用することには利点がある。しかしながら、制限を若干緩和することには大きな利点がある。
好ましい実施形態では、24ビットの固定長符号化をスタート地点として使用する。24ビットは高性能に対して十分なだけでなく、命令に対して拡張性と空間とを提供し、それがIEを減少させる。別の実施形態は、18−28ビットの範囲の符号化を使用することができるが、24ビットより小さいものは拡張性とブランチ範囲が制限されることになる。24ビット符号化は、ほとんどの32ビットRISC命令セットからのBIおよびしたがって符号サイズにおける25%の減少を代表的に示す。最後に、24ビットは32のデータパス幅を有するプロセッサにおいて非常に簡単に適応する。
好ましい実施形態は4ビットレジスタフィールドを使用し、これは許容可能な性能のために要求される最小のものであり、また24ビット命令ワード内に満足できるように適合する最大のものである。多くのRISC命令セットは、32個のレジスタ(5ビットレジスタフィールド)を使用している。3つの5ビットレジスタフィールドの後、24ビット命令は操作コードおよび定数フィールドのために9ビットだけを残す。短い定数フィールドの結果、ブランチ、呼出しおよび他のPC関連参照の範囲が不十分となる可能性が高い。操作コードに対するビットが少な過ぎると、拡張性が不十分なものになる。これら2つの理由から、5ビットレジスタフィールドを有する24ビット命令ワードは望ましくない。16個と32個の汎用レジスタ間の性能差(IEの差による)(約6%)は、8個と16個の汎用レジスタ間の差ほど大きくなく、失われた性能(たとえば、以下に認められるように複合命令およびレジスタウインドウ)を生成するために別の特徴が導入されることができるほど十分に小さい。ISの増加(これもまた6%)は、24ビットと32ビットの符号化間の差によるオフセット以上のものである。
5ビットレジスタフィールドを有する多くの命令セットは、コンパイル用の32個の汎用レジスタを提供しないことも認識すべきである。ゼロを保持するために多くのレジスタが専有されるが、ゼロレジスタは、少数の特別命令操作コードを与えることによって容易に必要のないものにすることができる。別のレジスタが特定の用途に使用されることも多いが、これも命令セットの中に別の特徴を含むことによって回避できる。たとえば、MIPSはその31個の汎用レジスタのうち2個を例外処理コードに対して、1個をグローバル区域ポインタに対して使用する。したがって、それは実際には可変的および一時的なものに対して28個のレジスタしか有しておらず、これは4ビットレジスタフィールドと適切な命令セット特徴とを備えた命令セットより12個多いだけである。ソフトウェア規定によって汎用レジスタを呼出す側および呼出される側のセーブされたレジスタに分割することは一般的であり、また、大きいレジスタファイルのユーティリティをさらに減少する。好ましい実施形態は、以下さらに詳細に説明するようにこれを回避する特徴を含んでいる。
[複合命令]
ISおよびIEを低くするために、好ましい実施形態はまた、RISCにおいて一般に見出される多数の命令の機能とその他の命令セットを組合せる単一の命令を使用する。簡単な複合命令の一例は、左シフトおよび加算/減算である。HP PA−RISCおよびDECアルファは、これらの動作を実行させる命令セットの例である。小さい定数によるアドレス演算および乗算はしばしばこれらの組合せを使用し、これらの動作を実行することによりCPの潜在的なコストの増加(計算パイプラインステージにおいて一連の論理装置が追加されるので)を犠牲にしてIEおよびISを減少させる。しかしながら、シフトが0乃至3に制限されたとき、追加の論理手段はCPに関して最もクリティカルな制約ではないことが種々の構成において立証されている。逆にいえば、ARM命令セットは任意のシフトおよび加算を実行し、その実施においてCPは非常に低いものである。
ISおよびIEを低くするために、好ましい実施形態はまた、RISCにおいて一般に見出される多数の命令の機能とその他の命令セットを組合せる単一の命令を使用する。簡単な複合命令の一例は、左シフトおよび加算/減算である。HP PA−RISCおよびDECアルファは、これらの動作を実行させる命令セットの例である。小さい定数によるアドレス演算および乗算はしばしばこれらの組合せを使用し、これらの動作を実行することによりCPの潜在的なコストの増加(計算パイプラインステージにおいて一連の論理装置が追加されるので)を犠牲にしてIEおよびISを減少させる。しかしながら、シフトが0乃至3に制限されたとき、追加の論理手段はCPに関して最もクリティカルな制約ではないことが種々の構成において立証されている。逆にいえば、ARM命令セットは任意のシフトおよび加算を実行し、その実施においてCPは非常に低いものである。
右シフトはしばしば、フィールドを大きいワードから抽出するために使用される。符号なしのフィールドを抽出するために、一般に2つの命令(右シフトによって後続される左シフト、または定数とのANDによって後続される右シフトのいずれか)が使用される。好ましい実施形態では、この機能を行うために単一の複合命令extuiが実行される。それは、命令ワードにおいて丁度4ビットの符号化を指定されたマスクを有するANDによって後続されるシフトとして実行される。複合命令extuiのAND部分は非常に論理的であるため、命令セットにそれが含まれることによってその構成のCPは増加する可能性は少ない。これは、符号付きのフィールドを抽出する命令に対して該当せず、したがってこれは含まれない。
大部分の命令セット、RISCおよびその他(たとえば、ARM,DEC PDP11,DEC VAX,インテルx86,モトローラ68000,サンSPARC,モトローラ88000)は条件コードを設定する比較命令を使用し、この条件コードは、制御の流れを決定するために条件コードを試験する条件付きブランチ命令によって後続される。条件付きブランチは大部分のRISC命令セットの10−20%の命令を構成し、また各条件付きブランチは通常比較命令と対にされており、したがってこのスタイルの命令セットは無駄である。さらに古い命令セットはしばしば比較およびスキップスタイルの条件に基づいていたが、これには分離した比較およびブランチと同じ欠点があった。
いくつかの命令セット(たとえば、Cray−1,MIPS,DECアルファ,HP PA−RISCおよびSunSPARCの後におけるV9バージョン)は、フレキシビリティを変化させる複合比較およびブランチ機能を提供している。CrayおよびDECアルファは、レジスタとゼロの比較とブランチだけを行う。MIPSはレジスタ・ゼロ比較とレジスタ・レジスタ同等および非同等ならびにブランチを行う。HP PA−RISCは、非常に完全なセットのレジスタ・レジスタ比較およびブランチ命令を提供する。
好ましい実施形態は、最も有用な複合比較およびブランチ命令を提供する。的確なセットの選択には、とくに24ビット(32ビットとは対照的に)符号化が目標である場合、それが消費する操作コード空間により各比較およびブランチのユーティリティのバランスをとることが要求される。その他の命令セットはこのテストに失敗する。たとえば、HP PA−RISCは、ほとんど効用のないいくつかの複合比較およびブランチ命令コード(たとえば、加算の後のネバーおよびオーバーフロー)を提供し、有効ないくつかを削除する。
好ましい実施形態に対して選択された複合比較およびブランチ命令のセットは、
A==0,A!= 0,A<S0,A>= S0,
A==B,A!= B,A<SB,A<UB,A>= SB,A>= UB,
(A&B)==0,(A&B)!= 0,(〜A&B)==0,(〜A&B)!= 0,
A==I,A!= I,A<SI,A<UI,A>= SI,A>= UI,
AのビットB==0,A!のビットB= 0,
AのビットI==0,A!のビットI= 0
ここで、AおよびBはレジスタの内容を示し、レジスタの関連演算子上の接尾部“U”および“S”は、符号なしの、または符号付きのレジスタ内容との“符号なし”または“符号付き”の各比較を示す。ゼロとの関連演算子上の接尾部(たとえば、A<S0)はゼロに対する符号なしの、または符号付きの比較を示し、Iは指標定数を示す。
A==0,A!= 0,A<S0,A>= S0,
A==B,A!= B,A<SB,A<UB,A>= SB,A>= UB,
(A&B)==0,(A&B)!= 0,(〜A&B)==0,(〜A&B)!= 0,
A==I,A!= I,A<SI,A<UI,A>= SI,A>= UI,
AのビットB==0,A!のビットB= 0,
AのビットI==0,A!のビットI= 0
ここで、AおよびBはレジスタの内容を示し、レジスタの関連演算子上の接尾部“U”および“S”は、符号なしの、または符号付きのレジスタ内容との“符号なし”または“符号付き”の各比較を示す。ゼロとの関連演算子上の接尾部(たとえば、A<S0)はゼロに対する符号なしの、または符号付きの比較を示し、Iは指標定数を示す。
複合比較およびブランチは、分離した比較およびブランチ命令セットと比較して、また、MIPSおよびDECアルファのような部分的比較およびブランチ命令セットと比較した場合でも、IEおよびISを減少させる。好ましい実施形態は、複合比較およびブランチを実施するためにCPIの増加を要求する可能性があるが、全体的な性能効果は依然として改善されたものである。
分離した比較およびブランチ命令セットの主な利点は、比較演算子、比較オペランドおよびブランチ目標を指定するのに2つの命令ワードが利用可能であり、このためにそれぞれに対する豊富なフィールド幅割当てが可能になることである。これと対照的に、複合比較およびブランチ命令セットは、これら全てを単一の命令ワードにパックしなければならず、その結果フィールドが少なくなり、適合しない値を処理するメカニズム(たとえば、広い範囲を有するブランチ)に対する必要性も小さくなる。好ましい実施形態は、比較操作コード、2つのソースレジスタフィールドおよび24ビット命令ワードへの8ビットPC相対オフセットをパックする。8ビットターゲット特定子は場合によって不十分であり、広い範囲を有する無条件ブランチに基づいて逆の性質の条件付きブランチを使用するためにコンパイラまたはアセンブラが必要になり、これを好ましい実施形態が提供する。この状態は当然IEおよびISを増加させ、これは望ましくない。このために、好ましい実施形態はまた、最も一般的な場合であるゼロに対する試験を行う一連の複合比較およびブランチを提供する。これらの複合比較およびブランチ命令は、それらの同僚(colleagues)よりはるかに広い範囲を提供する12ビットのPC相対オフセットを有している。両形式を提供した余分な複雑さはIEおよびISの改善によって釣り合わせられる。好ましい実施形態は、MIPSおよびDECアルファとは異なり、ゼロに対する全ての比較を提供するわけではなく(ゼロ以下およびゼロより大きいレジスタを省略する)、再び、好ましい実施形態はプログラムニーズを操作コード空間と釣り合わせる命令のセットを提供する。
全ての命令を符号化するために24ビットしか使用しない1つの結果として、命令ワードにおける定数フィールドのサイズが限定される。これは、ISおよびIEを潜在的に増加させる可能性が高い(もっとも、IEの増加はその定数をループの外側のレジスタにロードすることによって減少させることができるが)。好ましい実施形態はこの問題をいくつかの方法で解決する。第1に、それは最も共通する定数を捕獲するために小さい定数フィールドを提供する。狭い(たとえば、4ビット)定数フィールドを最大限に使用するために、命令セットは定数値を直接指定するのではなく、それを符号化するためにフィールドを使用する。符号化された値は、広範囲のプログラム統計群からN(たとえば、16)の最大頻度定数として選択される。好ましい実施形態は、16の値が0乃至15ではなく−1および1乃至15であるように選択されるaddi.n命令でこの技術を使用する。0の加算は全く効用がなく(分離したmov.n命令が存在する)、−1加算は共通である。beqi、bnei、blti、bgei命令はまた、種々の共通定数を符号化する4ビットフィールドを使用する。bltuiおよびbgeui命令は、符号のない比較が異なったセットの使用値を有しているため、異なった符号化を使用する。
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも1つの命令を有している。テスト(試験)はフィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含む。
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも1つの命令を有している。テスト(試験)はフィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含む。
最も普通の定数は典型的に非常に小さく、狭いフィールドは所望の値のほとんどを捕獲する。しかしながら、ビット様式の論理動作(たとえば、AND、OR、XOR等)で使用される定数は種々の種類のビットマスクを表し、小さい定数ティールドでは適合しないことが多い。たとえば、単一ビットが任意の位置において1に設定されているか、あるいは単一ビットが任意の位置においてゼロに設定されている定数は普通である。1のシーケンスが後続する0のシーケンス、および0のシーケンスが後続する1のシーケンスからなるビットパターンもまたは普通である。この理由から、好ましい実施形態はマスクを命令ワード中に直接入れる必要を避けるための命令を有している。好ましい実施形態における例はbbeiおよびbbsi命令であり、それらはそれぞれ、レジスタの指定されたビットが0か1かに応じてブランチする。そのビットはマスクではなくビット番号として与えられる。extui命令(上述された)はシフトを行い、このシフトは、一連の1により後続される一連の0から成るマスクによって後続され、ここで1の数はこの命令における定数フィールドである。
[コプロセッサブールレジスタおよびブランチ]
複合比較およびブランチは非常に多数のものを32ビット未満の広さの命令ワード中にパックするために、上記にリストされた命令は利用可能な命令ワードのかなりの部分を消費する。これは、これらのブランチの頻度とその結果達成される節約のために、これらのブランチのためになる妥協である。
複合比較およびブランチは非常に多数のものを32ビット未満の広さの命令ワード中にパックするために、上記にリストされた命令は利用可能な命令ワードのかなりの部分を消費する。これは、これらのブランチの頻度とその結果達成される節約のために、これらのブランチのためになる妥協である。
命令セット設計に対するその他の制約の他に、命令セットは拡張可能で(新しいデータタイプの追加を可能にし)なければならず、緊密に結合されたコプロセッサ(共同するプロセッサ)において特徴が活用されなければならない。しかしながら、短い命令には、浮動小数点、DSPのような他のデータタイプに対する複合比較およびブランチ命令を追加するための空間はない。さらに、各コプロセッサがそれ自身の複合比較およびブランチを実施することはできない可能性がある。個々の複合比較およびブランチ命令の実施が可能な場合でも、それは無駄かもしれない。それは、このようなデータタイプに関する比較およびブランチはまた多くのアプリケーションにおいて整数データより頻度が少ないからである。
この理由から、本発明の好ましい実施形態は、コプロセッサ条件付きブランチに対して異なった方法を使用する。好ましい実施形態において、命令セットは、任意のコプロセッサパッケージに予め必要なものであるオプショナルパッケージを含んでいる。このパッケージは、16個の単一ビットブールレジスタと、これらのブールレジスタおよびそれに応じたブランチを試験するBF(偽ならばブランチ)およびBT(真ならばブランチ)命令とを追加する。その後、コプロセッサは、たとえばそれらのサポートされているデータタイプの比較に基づいてブールレジスタを設定する命令を出す。ブールレジスタならびにBFおよびBT命令は、全てのコプロセッサによって共有され、それによって短い命令ワードが効率的に利用される。
これは、上述した多くの初期の命令セットにおいて見出される条件コードベース比較およびブランチの新しい変形である。初期の命令セットは、プロセッサと、そのコプロセッサ(たとえば、PowerPC)と、使用される多数のコプロセッサごとの単一ビット条件コード(たとえば、MIPS)との間における多数の共有多ビット条件コードを有している。本発明の好ましい実施形態では、多数の共有単一ビット条件コードが使用される。
比較に対する多数の行先(たとえば、本発明の好ましい実施形態では、MIPS、PowerPC)を設けることにより、コンパイラがコードをさらに自由にスケジュールすることが可能になり、単一の命令中の多数のデータ値を比較して多数の結果(たとえば、MIPS MDMX)を生成する命令が可能になる。
比較結果レジスタを多数のコプロセッサ間で共有する(本発明)か、あるいはこれをプロセッサとそのコプロセッサとの間で共有する(PowerPCのように)ことによって、比較結果を試験するために必要とされる操作コードの数が節約される。またこれによって、比較結果レジスタ上の論理動作を実行する命令を提供する可能性もまた増加する(本発明の好ましい実施形態およびPowerPCのように)。
単一ビット比較結果レジスタ(本発明の好ましい実施形態、MIPS)を多ビット(他のほとんどのISA)の代わりに使用することにより、要求される比較操作コードの数は増加するが、必要とされるブランチ操作コードの数は減少する。ブランチ命令はまたPC相対ターゲットアドレスを提供しなければならないため、好ましい実施形態では単一ビット比較結果(ブール)レジスタが使用され、したがって非常に多数のコプロセッサが存在していなければ、ブランチ命令コードの追加はさらに高価なものとなる。
要約すると、複合比較およびブランチはコードサイズの最小化に対して重要な技術であるが、BIを小さい状態に維持しておくことが必要なことから、異なる頻度および要求されるコプロセッサ操作コードの異なる数のために分割方法がコプロセッサ比較およびブランチに適切であることが分かっている。比較およびブランチ選択肢の範囲内において、コプロセッサ間で共有される多数の単一ビット比較結果レジスタを使用することにより、命令コード空間は最も効率的に利用される。
[ロードおよび記憶命令]
好ましい実施形態のロードおよび記憶命令は、レジスタからのベースアドレスに加算される8ビット定数オフセットを有する命令フォーマットを使用する。最初に、好ましい実施形態はこれら8ビットの大部分を形成し、次にこれが不十分な場合に簡単な拡張方法を適用する。また、好ましい実施形態の4つのロード/記憶オフセットは符号付き拡張(他の多くの命令セットにおいて共通の)ではなくゼロ拡張される。これは、値128乃至255のほうが値−128乃至−1より普通であるためである。また、ほとんどの参照は整列されたベースレジスタからの整列されたアドレスに対するものであるため、オフセットは参照サイズに対して適切に左シフトされる。32ビットのロードおよび記憶に対するオフセットは2だけシフトされ、16ビットのロードおよび記憶に対するオフセットは1だけシフトされ、8ビットのロードおよび記憶に対するオフセットはシフトされない。大部分のロードおよび記憶は32ビットなので、この技術では2の付加的なビット範囲が与えられる。
好ましい実施形態のロードおよび記憶命令は、レジスタからのベースアドレスに加算される8ビット定数オフセットを有する命令フォーマットを使用する。最初に、好ましい実施形態はこれら8ビットの大部分を形成し、次にこれが不十分な場合に簡単な拡張方法を適用する。また、好ましい実施形態の4つのロード/記憶オフセットは符号付き拡張(他の多くの命令セットにおいて共通の)ではなくゼロ拡張される。これは、値128乃至255のほうが値−128乃至−1より普通であるためである。また、ほとんどの参照は整列されたベースレジスタからの整列されたアドレスに対するものであるため、オフセットは参照サイズに対して適切に左シフトされる。32ビットのロードおよび記憶に対するオフセットは2だけシフトされ、16ビットのロードおよび記憶に対するオフセットは1だけシフトされ、8ビットのロードおよび記憶に対するオフセットはシフトされない。大部分のロードおよび記憶は32ビットなので、この技術では2の付加的なビット範囲が与えられる。
ロード/記憶命令(またはaddi命令)において指定された8ビット定数オフセットが不十分である場合、好ましい実施形態では、8だけ左シフトされたその8ビット定数を加算するaddmi命令が与えられる。したがって、2命令シーケンスは、addmiからの8およびロード/記憶/addiからの8からなる16のビット範囲を有する。さらに、上述の方法の1つによって符号化されない定数は、分離した命令によりレジスタ中にロードされなければならない(この技術は、2つではなく単一のレジスタオペランドしかとらないために上記のaddmiソリューションを必要とするロード/記憶命令には適用できない)。好ましい実施形態は、定数をレジスタにロードするための2つの方法を提供する。第1の方法は、このためのmovi(および以下に説明される短い命令フォーマットにおけるmovi.n)命令である。moviは命令ワード中の12ビット符号付き拡張された対のフィールド中の定数を指定する。また、定数値をレジスタ変数に割当てることはそれ自体は普通のことである。
32ビット以下の命令フォーマットにおいて、任意の32ビット定数を符号化できる命令は1つもなく、したがって他のいくつかの方法がレジスタを任意の定数値に設定するために必要とされる。少なくとも2つの方法が別の命令セットにおいて使用されており、これらの方法のどちらもソリューションを提供するために上記の技術と共に使用されてよい。第1のソリューションは、各命令の中の多数の定数を使用して32ビットの定数を一緒に合成する命令の対を提供することである(たとえば、MIPS LUI/ADDI,DECアルファ,IBM PowerPCは2つの個別の命令における上位の16ビットと下位の16ビットとを指定する命令を有している)。第2のソリューション(たとえば、MIPS浮動小数点定数、MIPS16およびARM Thumb)は、ロード命令によりメモリから定数を読出す簡単な方法を提供することである。
ロード自身が単一の命令だけを必要とする場合、定数を参照するためにロード命令を使用することによって、命令のシーケンスを使用した場合より低いISおよびIEが提供されることができる。たとえば、MIPSコンパイラは、(とくに)4バイトおよび8バイト浮動小数点定数が保存されている定数プールにポインタを保持するために31の汎用レジスタの1つを専有する。このレジスタによってアドレスされた区域が64KBより小さい場合、その定数は単一ロード命令によって参照されることができる。これは、MIPSがロードにおいて64KBのオフセット範囲を有しているためである。一度参照された定数に対して、32ビットのロード命令プラス32ビット定数の合計サイズは、命令ワードを使用した2者と同じである。定数が2回以上参照された場合、定数プールはもっと小さい合計サイズを提供する。24ビットの命令対に対する48ビットに対して定数プールプラスロードが56ビットである好ましい実施形態の24ビットサイズのような他の命令長に対して、妥協は異なる。しかしながら、定数が多数回使用された場合、定数プールはほとんど常にさらに有効な合計サイズソリューションである。
定数およびその他の値をアドレスするためにレジスタを専用にするMIPS技術は、上述したようにより狭い命令ワードが一般に32個より少ないレジスタを提供し、したがって各レジスタはより高い価値を有するために、本発明の好ましい実施形態およびその他の実施形態にとって望ましくない。また、狭い命令セット中のレジスタから利用可能なオフセットは制限され、したがって単一のレジスタは小さい定数プール(小さ過ぎて実用的でない)へのアクセスしか行わない。好ましい実施形態は、定数プールにアクセスするために使用されることのできるPC相対ロードを提供する際に、多数の命令セット(たとえば、PDP11,モトローラ68000,MIPS16,ARM Thumb)のソリューションを採用する。
任意の定数をロードするいずれの技術も本発明に適用可能である。好ましい実施形態は、第2の技術を使用しているが、一方、別の実施形態は、完全な定数の一部分をそれぞれ含んでいる複数の命令を使用する。24ビット命令ワードに対する別の実施形態の具体的な例は、16ビット命令定数をレジスタの上位部分に入力する1つの命令(16ビットの定数+4ビットのレジスタ行先+4ビットの命令コード=24ビット)と、16ビットの符号付き定数をレジスタに加算する別の命令(16ビットの定数+4ビットのレジスタソースおよび行先+4ビットの命令コード=24ビット)とを有するものである。
[オーバーヘッド減少ループ命令]
好ましい実施形態はまたいくつかのデジタル信号プロセッサ(DSP)において見出されるが、RISCプロセッサ中では見出されないループ特徴を提供する。ほとんどのRISCプロセッサはそれらの既存の条件付きブランチ命令を使用して、新しい特徴を提供することによりループを実施するのではなくループを生成する。この効率的使用によって、プロセッサは簡単なままに維持されるが、IEおよびISが増加する。たとえば、Cループ
for(i=0;i<n;i+=1){
body
}
は、好ましい実施形態において、
movi. n a3,0 //initialize i
blti a2,1,done //no iteration if n<=0
loop:
body
addi.n a3,a3,1 //i+=1
blt a3,a2,loop //continue if i<n
としてコンパイルされる。あらゆる反復には2つの“ループオーバーヘッド”の命令である、加算および条件付きブランチが存在する。(好ましい実施形態の比較およびブランチ特徴がない場合には、3つのオーバーヘッドの命令が必要になる。)これは明らかにIEを増加させる。さらに、いくつかのプロセッサ構成における選ばれた条件付きブランチは、パイプライン化および、またはブランチ予測のために、実行すべきサイクルを別の命令より多く要求する可能性がある。したがって、CPIが増加する可能性がある。いくつかの命令セットは、レジスタをインクレメントまたはデクレメントし、比較し、ブランチするための単一の命令(たとえば、DEC PDP6,DEC PDP11,IBM PowerPC)を追加し、この場合はIEを低下させる(IBM PowerPC命令の実施はまたCPIの低下を目標とする。)。
好ましい実施形態はまたいくつかのデジタル信号プロセッサ(DSP)において見出されるが、RISCプロセッサ中では見出されないループ特徴を提供する。ほとんどのRISCプロセッサはそれらの既存の条件付きブランチ命令を使用して、新しい特徴を提供することによりループを実施するのではなくループを生成する。この効率的使用によって、プロセッサは簡単なままに維持されるが、IEおよびISが増加する。たとえば、Cループ
for(i=0;i<n;i+=1){
body
}
は、好ましい実施形態において、
movi. n a3,0 //initialize i
blti a2,1,done //no iteration if n<=0
loop:
body
addi.n a3,a3,1 //i+=1
blt a3,a2,loop //continue if i<n
としてコンパイルされる。あらゆる反復には2つの“ループオーバーヘッド”の命令である、加算および条件付きブランチが存在する。(好ましい実施形態の比較およびブランチ特徴がない場合には、3つのオーバーヘッドの命令が必要になる。)これは明らかにIEを増加させる。さらに、いくつかのプロセッサ構成における選ばれた条件付きブランチは、パイプライン化および、またはブランチ予測のために、実行すべきサイクルを別の命令より多く要求する可能性がある。したがって、CPIが増加する可能性がある。いくつかの命令セットは、レジスタをインクレメントまたはデクレメントし、比較し、ブランチするための単一の命令(たとえば、DEC PDP6,DEC PDP11,IBM PowerPC)を追加し、この場合はIEを低下させる(IBM PowerPC命令の実施はまたCPIの低下を目標とする。)。
ループ本体が小さいとき、ループオーバーヘッドの性能インパクトはさらに高い。多数のコンパイラは、1以上の反復にわたってループオーバーヘッドを拡散するためにこの場合ではループアンローリングと呼ばれる最適化を使用する。Cでは前述のループは例えば以下のように変換される。
i=0;
if(n>0){
if((i&1)!=0){
body
i+=1;
if(n==1)goto done;
}
do {
body
i+=1:
body
i+=1;
}while (i<n);
done:;
{
幾つかのケースでは、
body
i+=1;
body
i+=1;
これは以下に置換されてもよい。
if(n>0){
if((i&1)!=0){
body
i+=1;
if(n==1)goto done;
}
do {
body
i+=1:
body
i+=1;
}while (i<n);
done:;
{
幾つかのケースでは、
body
i+=1;
body
i+=1;
これは以下に置換されてもよい。
body(i)
body(i+1)
i+=2;
i+定数が本体の命令中に(例えばロードと記憶命令のオフセットに)折畳まれることができ、それによってただ1つのインクエメントだけが反復毎に必要とされる。
body(i+1)
i+=2;
i+定数が本体の命令中に(例えばロードと記憶命令のオフセットに)折畳まれることができ、それによってただ1つのインクエメントだけが反復毎に必要とされる。
2よりも大きい係数によるループアンローリングは非常に普通のものであり、4および8が普通である(幾つかの利点を有する2の累乗)。係数2のアンロールについて留意することは、結果として生じるコードサイズの増加である(本体は前述の例では3回生じる)。性能を実現するためのRISCプロセッサにおけるこの技術の使用はコードサイズにわたる性能および単純化の強調と一貫している。
多数のDSPと、幾つかの汎用プロセッサはある種のループを実行する他の方法を与える。第1の方法は固定回数だけ第2の命令を反復する命令を与えることである(例えばTI TMS320C2X. Intel x86)。これは実行が非常に簡単である利点を有する。これが適用可能な場合、ループオーバーヘッドを除去し、反復して同じ命令をフェッチする要件を除くことによりパワー消費を節約する。反復命令を有する幾つかの命令セットはプロセッサがループ中に中断を行わないことを必要とし、これは重要な制限である。また、1つの命令ループは限定された状態でのみ便利であり、反復された命令が多数の効果を有するのに十分複雑であるときだけ有効であり、それによって各反復において異なるデータで動作する。
簡単な反復命令についての改良は減少されたまたはゼロループオーバーヘッドで多数回命令のブロックを反復する能力である(例えばTI TMS320C5X)。好ましい実施形態はそのループ、即ちloopgtz およびloopnez 命令によりこの能力を与える。前述の第1のCループは以下の命令へ編集される。
movi.n a3,0 //i=0
loopgtz a2,done //goto done if a2 <=0, otherwise
//set LCOUNT to a2-1, LBEG to loop,
//and LEND to DONE, and the fall
//into body
loop:
body
addi.n a3,a3,1 //i+=1
//the processor returns automatically
//to loop when it reaches here (LEND)
done:
LCOUNT、LBEGおよびLENDレジスタは命令セットで利用され、それによってループは中断可能である。これはまたこれらのレジスタが他の命令時実行と並列に読取られ、書込まれることを可能にする(汎用レジスタが使用されるならば、レジスタファイルの読取り/書込みポートは増加される必要がある)。好ましい実施形態はLCOUNTレジスタが命令のフェッチを行うために最大時間を与えるようにテストされた後、直ちにデクリメントされることを特定する。ループ命令は、好ましい実施形態によってループの条件的ブランチコンパイルに関連するブランチペナルティを取ることを防止できることを期待されている。
loopgtz a2,done //goto done if a2 <=0, otherwise
//set LCOUNT to a2-1, LBEG to loop,
//and LEND to DONE, and the fall
//into body
loop:
body
addi.n a3,a3,1 //i+=1
//the processor returns automatically
//to loop when it reaches here (LEND)
done:
LCOUNT、LBEGおよびLENDレジスタは命令セットで利用され、それによってループは中断可能である。これはまたこれらのレジスタが他の命令時実行と並列に読取られ、書込まれることを可能にする(汎用レジスタが使用されるならば、レジスタファイルの読取り/書込みポートは増加される必要がある)。好ましい実施形態はLCOUNTレジスタが命令のフェッチを行うために最大時間を与えるようにテストされた後、直ちにデクリメントされることを特定する。ループ命令は、好ましい実施形態によってループの条件的ブランチコンパイルに関連するブランチペナルティを取ることを防止できることを期待されている。
a3(i)のインクレメントはループ命令により自動的に実行されない。前述したように特に強度減少の最適化後に、多数のループは異なる量だけ帰納変数のインクレメントまたはデクレメントを必要とするので、これは別々の命令のままにされる。さらに、幾つかのケースではこれらのインクレメントは自動インクレメントのようなコプロセッサアドレスモードへ折り畳まれることができる。最終的に、汎用レジスタをインクレメントするために、汎用レジスタファイルに特別のポートが必要とされる。
前述の例および説明から認められるように、ループ命令はIEとISの両者を減少し、CPIを減少する構成を容易にする。ループ命令がループアンローリングを行う必要性をなくしたとき、ISにおけるインパクトは最大であるが、アンロールのケースでさえも存在する。しかしながら、当業者により容易に明白であるように、好ましい実施形態ではこれらの命令が存在することにより付加的なプロセッサ構成コスト(例えば特別なレジスタ、特別な命令フェッチ論理装置)が必要とされる。
[ハザード]
ほとんどの命令セットはパイプラインハードウェアにより実行される。パイプラインの使用はしばしばハードウェアまたはソフトウェアで避けなければならない命令実行中のハザードを発生する。例えば多数のパイプラインはパイプラインの端部において(または少なくとも後期に)レジスタファイルを書込む。正確な動作においては、ソースオペランドとして書込まれるレジスタを使用する次の命令は、値が書込まれるまでまたは書込まれる値がバイパスされなければならないか或いは依存命令へ転送されなければならなくなるまでレジスタファイルの読取りを待機しなければならず、レジスタファイル内容は無視される。
ほとんどの命令セットはパイプラインハードウェアにより実行される。パイプラインの使用はしばしばハードウェアまたはソフトウェアで避けなければならない命令実行中のハザードを発生する。例えば多数のパイプラインはパイプラインの端部において(または少なくとも後期に)レジスタファイルを書込む。正確な動作においては、ソースオペランドとして書込まれるレジスタを使用する次の命令は、値が書込まれるまでまたは書込まれる値がバイパスされなければならないか或いは依存命令へ転送されなければならなくなるまでレジスタファイルの読取りを待機しなければならず、レジスタファイル内容は無視される。
ほとんどのプロセッサは結果が有効になるまで通常のレジスタファイルと両遅延依存命令に対してハードウェアの依存検出を行い、その後、これがレジスタファイルに書込まれる前に依存動作をバイパスする。(通常はNOPの挿入による)ソフトウェアの命令の遅延は(ISの増加により)コードサイズを著しく増加し、バイパスしないことは非常に性能を減少する。したがって検出、機能停止、バイパスハードウェアはその価格に値する。
しかしながら、汎用レジスタファイル以外のプロセッサ状態では、このようなレジスタはしばしばそれ程参照されないので、妥協点は異なる。幾つかの命令セット(例えばMIPS)はそれ故、(例えば書込みを使用とは別にするためにNOPを挿入することによって)特別なレジスタハザードのソフトウェア管理に切換える。これは残念ながら、命令ストリーム中に組立てられるパイプラインの知識を必要とする。
代りの方法はハザードを避けるために、全ての後続する命令を遅延する特別なレジスタ書込みを有することである。これは簡単で問題を解決するが、(例えば内容スイッチ後の状態を回復するか妨害するため)特別なレジスタの書込みがしばしばグループで行われ、多くは他の特別なレジスタの書込みとそれらに基づく命令を遅延する理由はないので非効率的である。本発明の好ましい実施形態はハイブリッド方法を採用する。これは検出されずハードウェアにより防止されたハザードを防止するためにソフトウェアが挿入しなければならないISYNC、RSYNC、ESYNC、DSYNC命令を与える。NOPとは異なって、これらの命令は全ての特別なレジスタの書込みが完了するまで機能停止する。これは1つの構成依存型命令が実現されることを可能にし、そうでなければ、潜在的に多数の特定構造向けNOPを必要とする。また、プログラマーが性能を最大にするために機能停止せずに、特別なレジスタ書込みを共にグループ化することを可能にする。
[コード密度オプション]
好ましい実施形態の命令セットは、命令セットの全ての構成に存在することが好ましい命令のコアセットと、所定の構成に存在しても存在しなくてもよいオプショナル命令パッケージのセットとからなる。1つのこのようなパッケージはBI、すなわち命令当りの平均ビットを減少することにより顕著なコードサイズの減少を行う短い命令フォーマットである。これらの短いフォーマット命令が存在するとき、好ましい実施形態は固定長(24ビット)命令セットから2つの命令サイズ(24ビットおよび16ビット)を有する長さへ変化する。代わりの実施形態は命令サイズの異なるセットを取出す。例えば24/16符号化への類似のコード密度による1つの別の方法は24/12であり、ここでは短い形態において3つの代わりに2つのレジスタフィールドが存在する。
好ましい実施形態の命令セットは、命令セットの全ての構成に存在することが好ましい命令のコアセットと、所定の構成に存在しても存在しなくてもよいオプショナル命令パッケージのセットとからなる。1つのこのようなパッケージはBI、すなわち命令当りの平均ビットを減少することにより顕著なコードサイズの減少を行う短い命令フォーマットである。これらの短いフォーマット命令が存在するとき、好ましい実施形態は固定長(24ビット)命令セットから2つの命令サイズ(24ビットおよび16ビット)を有する長さへ変化する。代わりの実施形態は命令サイズの異なるセットを取出す。例えば24/16符号化への類似のコード密度による1つの別の方法は24/12であり、ここでは短い形態において3つの代わりに2つのレジスタフィールドが存在する。
短い命令形態が随意のものであるので、これらの形態はコードサイズの改良だけに使用され、これらの命令には新しい機能は存在しない。16ビットで符号化されることができる命令セットは適合する(または例えば一定のフィールド幅の減少によって適合するように変更されることができる)最も統計的に頻度の高い命令として選択される。ほとんどの命令セットにおける最も頻度の高い命令はロード、記憶、ブランチ、付加、移動であり、これらは丁度好ましい実施形態の16ビット符号化に存在する命令である。BIを減少するための全体的に短いフォーマットの使用はMotorola 68000、Intel x86 、DEC VAX のような可変長命令セットと対称的であり、それらでは各命令は主にオペランドの数、オペランドの種類に依存し、使用の静的頻度に依存しない符号化を有する。
本発明と類似の特性を有することで知られている唯一の命令セットは、Simens Tricoreであり、これは32ビットの主要なフォーマットと、BIを減少するための16ビットの短いフォーマットを有する。本発明と異なって、主要なフォーマットは長過ぎるため例示的なBIを実現することができず、短い形態は、ソースおよび行先レジスタのうちの一方を同一にさせ、またはソースまたは行先レジスタの一方を操作コードにより示唆させる2つのレジスタフィールドだけを与えるので、それ程機能的ではない。前述したように、示唆されたソースレジスタの使用は構造のCPまたはCPIの一方を増加させる傾向がある。
16ビットのみの命令セットは不十分な性能と機能性を与えることを先に示した。最も頻度の高い命令の16ビットの符号化はこの落とし穴(pitfall )を避ける。最も頻度の高い命令だけが短い符号化を必要とするので、3つのレジスタフィールドが有効であり、狭い一定のフィールドは大きな使用部分を捕捉できる。アプリケーションを表すために必要なほぼ半分の命令は、3つの4ビットフィールドがレジスタ特定子または定数のために保留された後、16ビット符号化に有効な16個の操作コードの丁度6で符号化されることができる。
16ビット符号化された密度の高い命令オプションは132i.n命令(ロード32ビット、4セットオフセット)と、s32i.n(32ビット保存、4ビットオフセット)と、mov.n (一方のレジスタの内容を別のレジスタへ移動)と、add.n (2つのレジスタの内容を付加)と、addi.n(レジスタと即値を付加、ここでは即値は−1または1…15の範囲である)と、movi.n(レジスタを即値でロード、ここでは即値は−32…95の範囲である)と、nop.n (動作ではない)と、break.n (中断)と、ret.n 、retw.n(ret およびretw)と、beqz.n(レジスタがゼロならば、6ビットのコードなしのオフセットを有するブランチを転送)と、bnez.n(レジスタがゼロでないならば、6ビットのコードなしのオフセットを有するブランチを転送)を含んでいる。
別の実施形態は前述した12ビットの短い形態を使用する。12ビット形態は2つの4ビットフィールドと、4ビットの主要操作コードだけをサポートする。これはロードだけをサポートし、オフセットなしで記憶し(時折、フィールドにおけるレジスタ間接アドレスと呼ばれる)、行先と1つのソースレジスタが同一である場合命令を付加する。コンパイラは適切であるとき3つのオペランドを自由に使用するので、他の状況のようにこれらの制限は性能における限定ではない。制限は12ビット形態がしばしば使用されることを防止するが、その減少されたサイズは部分的に補償する。30%の12ビットおよび70%の24ビットにおいては、BIは20.4ビットであり、ほぼ50%の16ビットと50%の24ビットにより実現される20.0ビットと同一である。1つのフォーマットが他のフォーマットのサイズの半分であるときに生じる幾つかの構造の単純化が存在するが、命令のサイズとデータ幅の最大の共通の除数(ged)が小さい(これは24、12、32では4、24、16、32では8)とき幾つかの構造問題が存在する。全体的に2は構造価格にほぼ等しく、好ましい実施形態は良好なコードサイズを与える1であり、これは24/16である。
24/12に比べて24/16の付加的な1つのコードサイズの欠点が存在する。ブランチオフセット(異なる命令アドレスを経てターゲット命令を特定する命令定数)は全ての命令サイズのgedの倍数でなければならない。これは24/12に対しては12であり、24/16で8である。この数が大きい程、ブランチはさらに(ビットにおいて)到達できる。この到達点を超えるブランチはISを増加する多数の命令シーケンスを必要とする。
固定長命令の最も重要な利点は、大部分のRISCで見られるようにプロセッサ構造がサイクル当たり多数の命令を実行するときに得られる。この状態では、命令は通常並列で復号される。可変長命令では、十分な復号は第2の命令の開始を発見するために第1の命令で行われなければならず、それによって復号はそこで開始することができ、十分な復号は第3の命令の開始を発見するために第2の命令で行われなければならない。これはCPを増加する。CPの増加を防止するためにパイプライン段を付加することはCPIを増加する可能性が高い。幾つかの構造は潜在的な命令の開始の都度の復号と、その情報が先の命令の復号から利用できるようになったときに実際の命令の選択によって早期の開始を獲得する。これは明白に構造価格を増加する。命令を分類するパイプライン段を付加することは同様に価格を増加する。命令キャッシュへ予め復号する等のさらに他の可能性も可能であるが、全て構造価格を増加する。
好ましい実施形態は可変長の復号問題を除去しないが、第1にただ2つの命令長を使用し、第2に2つの長さを弁別するため1つの命令ビットを使用することにより、できる限り簡単にする。これは構造価格と、CPに対する任意の影響を最少にする。最後に、短い形態をオプショナルにすることにより、好ましい実施形態は価格と、コードサイズが1番の優先順位ではないときのCP効果を減少することを可能にする。
多数の命令セットはリトルエンディアンまたはビッグエンディアンバイトオーダリングで動作する。これを実現する技術は例えばWeberの米国特許第4,959,779号明細書に記載されている。しかしながら、可変サイズの命令を有する命令セットは付加的な注意を必要とする。MIPS命令セットはビッグおよびリトルエンディアンバイト順序で同じ命令フォーマットを使用し、これは命令が全て1サイズであるので動作するだけである。好ましい実施形態は、命令サイズを決定するために必要なビットが最下位の番号のアドレスバイト(好ましい実施形態では最小のアドレス可能な単位)に存在する特性を維持するために、ビッグおよびリトルエンディアンバイト順序に対して異なる命令ワードを特定する。
[ウィンドウを付けられたレジスタオプション]
別のオプショナルパッケージはウィンドウを付けられたレジスタオプションである。これはさらに低いIEおよびISに与えられる。低くされたIEからの性能の増加はまた、32の代わりに16レジスタを有するので、IEの増加を補償する。レジスタウィンドウはSun SPARCのような幾つかの他のプロセッサで見られる。サブジェクトに対する完全な概論はSun SPARCの文書を参照する。名称“レジスタウィンドウ”とは命令中のレジスタフィールドが現在のウィンドウ中のレジスタをさらに大きいレジスタファイルに特定する典型的な構造を示している。ウィンドウの位置はウィンドウベースのレジスタにより示される。
別のオプショナルパッケージはウィンドウを付けられたレジスタオプションである。これはさらに低いIEおよびISに与えられる。低くされたIEからの性能の増加はまた、32の代わりに16レジスタを有するので、IEの増加を補償する。レジスタウィンドウはSun SPARCのような幾つかの他のプロセッサで見られる。サブジェクトに対する完全な概論はSun SPARCの文書を参照する。名称“レジスタウィンドウ”とは命令中のレジスタフィールドが現在のウィンドウ中のレジスタをさらに大きいレジスタファイルに特定する典型的な構造を示している。ウィンドウの位置はウィンドウベースのレジスタにより示される。
レジスタウィンドウは(ISとIEを減少する)処理エントリおよびエクシートでレジスタを保存し回復する必要性をなくす。これはこれらの点におけるポインタを変更することにより行われ、これは幾つかのレジスタを視界から隠し、新しいレジスタを露出する。露出されたレジスタは通常有効なデータを含まず、直接使用されることができる。しかしながら、露出されたレジスタが有効なデータを含むとき(ウィンドウはさらに移動しているので先の呼フレームのレジスタへラップアラウンドされるため)、実行の継続(これは通常ソフトウェアハンドラへのトラップにより実現される)の前に、ハードウェアがこれを検出し、有効なレジスタをメモリに記憶する。これはレジスタウィンドウオーバーフローと呼ばれる。レジスタがメモリに記憶されているフレームに呼が戻るとき、レジスタウィンドウのアンダーフローが生じ、プロセッサはメモリからの値をロードしなければならない(これもまた通常ソフトウェアハンドラへのトラップにより実現される)。
呼者と、被呼者との間の物理的レジスタファイルの視野中でオーバーラップするレジスタウィンドウはまた、処理手順へのアーギュメントがレジスタで通過されるときに生じるアーギュメントシャッフリングを防止する(アーギュメントシャッフリングはISとIEを増加する)。最後に、レジスタウィンドウは可変および一時的な値をレジスタに割当てるブレークイーブン点を変更し、したがってレジスタの使用を助長し、これはメモリ位置を使用するよりも高速度で小型である(またISとIEを減少する)。
本発明のレジスタウィンドウとSPARC との主な差は、(1)SPARC はウィンドウポインタに対して固定したインクレメント16を有し、(2)SPARC はウィンドウを付けられたレジスタに加えてグローバルレジスタを有し、本発明の好ましい実施形態ではそれを具備しておらず、(3)SPARC は現在のウィンドウが先のウィンドウとオーバーラップする状況のときウィンドウのオーバーフローを検出し、一方、好ましい実施形態は先のウィンドウの一部であるレジスタを参照するときウィンドウのオーバーフローを検出することである。
固定したインクレメントから可変のインクレメントへの変更は構造価格を低くするのに重要である。これは非常に小さい物理的レジスタファイルの使用を可能にする。例えば多数のSun SPARC 構造は136エントリの物理的レジスタを使用し、好ましい実施形態は類似のウィンドウ性能を実現するために64のみのエントリのレジスタファイルを必要とするに過ぎない。可変インクレメントの複雑性の増加が存在するが、プロセッサ構造価格の差は30%以上である(これはさらに簡単な固定したインクレメントSPARC 方法により必要とされるさらに大きいレジスタの価格である)。好ましい実施形態はオーバーフローとアンダーフローを検出し、スタックフレームを組織するための新しい方法を特定する。
表面上において、レジスタウィンドウ機構はレジスタファイルの読取りと直列して付加(短いにもかかわらず)を必要とすることによりCP(またはCPI)を増加するように見える(パイプラインに付加を行うための1サイクルが存在するので、レジスタの書込みは問題ではない)。しかしながら、レジスタファイルへのウィンドウを付けられていないレジスタのアクセスに対して類似したタイミングとウィンドウサイズを有する方法でレジスタウィンドウアクセスを実行することが可能である。例えば、64レジスタの物理的レジスタファイルと、任意の所定の命令に可視である16のウィンドウを考慮する。この場合、16の64:1多重化はウィンドウポインタにのみ基づいて16の可視レジスタを選択するために使用され、その後これらの16の結果は16エントリレジスタファイルのようにアクセスされる。16の64:1多重化の使用は、高い構造価格を要する。この理由で、好ましい実施形態は4の倍数に制限されるウィンドウポインタを特定し、この価格を係数4だけ減少する。連続した加算の使用を選択する構成においてさえも、これはレジスタ数の2ビットが即座にレジスタファイルアクセスの開始に使用されることができ、さらに低速度の合計ビット(4ビットと2ビット入力の合計)がアクセスにおける後の点で使用される。最後に、これらの2つの構成間のハイブリッドが可能であり、構造価格は中間になる。
本発明の実施の形態に記載の発明は、16以上の汎用レジスタと、それらのレジスタとデータを交換するメモリにアクセスする手段と、28ビットを越えない長さを有する命令の実質上全てであるメモリからの命令を処理するための演算装置とを具備し、
少なくとも1つの命令は、オプコードフィールドと、命令に対する定数オペランドを特定するフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる1つのソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる1つの行先レジスタフィールドとを有しており、
少なくとも1つの命令は、オプコードフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる複数のソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる1つの行先レジスタフィールドとを有しており、
少なくとも1つの命令は、前記演算装置に複数の複合演算を実行させ、それらの演算の第1のものは第1の計算および論理演算の1つであり、第2のものは第2の計算動作の1つおよび条件ブランチ演算であるプロセッサに係る発明を含む。
少なくとも1つの命令は、オプコードフィールドと、命令に対する定数オペランドを特定するフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる1つのソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる1つの行先レジスタフィールドとを有しており、
少なくとも1つの命令は、オプコードフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる複数のソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる1つの行先レジスタフィールドとを有しており、
少なくとも1つの命令は、前記演算装置に複数の複合演算を実行させ、それらの演算の第1のものは第1の計算および論理演算の1つであり、第2のものは第2の計算動作の1つおよび条件ブランチ演算であるプロセッサに係る発明を含む。
さらに、上記構成に加え、
命令は、同じ第1の固定長の命令を有する第1のグループの命令と、第1の固定長とは異なる同じ第2の固定長の命令を有する第2のグループの命令とを含み、そして、両方のグループに共通のオプコードフィールド中の所定のビットフィールドはそのビットフィールドを有する命令が属している1つのグループを示しているプロセッサ、または、
第1の演算は、命令内のソースレジスタフィールドによって示されたレジスタ値の比較であり、第2の演算は、比較の結果に応答するブランチ演算であるプロセッサ、または、
第1の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な左シフトであり、第2の演算は、シフトされたレジスタ内容および別のソースレジスタ値についての計算動作であるプロセッサ、または、
第1の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な右シフトであり、第2の演算は、命令の定数フィールドによって特定された値を有するシフトの結果についての論理的なアンド動作であるプロセッサ、または、
少なくとも1つの命令は、第2の命令アドレスに到達するまで第1の命令アドレスにおいて開始した命令をプロセッサに実行させ、その後再び第1のアドレスにおいて実行を継続し、命令のソースレジスタフィールドによって示されたソースレジスタの内容によって決定された回数だけ反復するプロセッサ、または、
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも1つの命令を有しているプロセッサ、または、
さらに、複数の特定目的のレジスタと、コプロセッサとデータを交換するために特定目的のレジスタをアクセスする手段とを具備し、少なくとも1つの命令は、予め定められた値である特定目的のレジスタ中のデータに応答する条件ブランチであるプロセッサ、さらに、
特定目的のレジスタは単一ビットレジスタであり、前記アクセスする手段はさらに単一ビットレジスタと複数のコプロセッサとの間でデータを交換するプロセッサ、または、
さらに、1つの特定目的のレジスタと、特定目的のレジスタへの書込みの実行がまだ完了していないこと、および全てのペンディングの特定目的のレジスタの書込みの実行が完了したことを選択的に示す状態指示手段とを具備し、命令のセットは、全てのペンディングの書込みの実行が完了したことを状態指示手段が示すまで演算装置に次の命令の実行を遅延させる命令を含んでいるプロセッサに係る発明を含む。
命令は、同じ第1の固定長の命令を有する第1のグループの命令と、第1の固定長とは異なる同じ第2の固定長の命令を有する第2のグループの命令とを含み、そして、両方のグループに共通のオプコードフィールド中の所定のビットフィールドはそのビットフィールドを有する命令が属している1つのグループを示しているプロセッサ、または、
第1の演算は、命令内のソースレジスタフィールドによって示されたレジスタ値の比較であり、第2の演算は、比較の結果に応答するブランチ演算であるプロセッサ、または、
第1の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な左シフトであり、第2の演算は、シフトされたレジスタ内容および別のソースレジスタ値についての計算動作であるプロセッサ、または、
第1の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な右シフトであり、第2の演算は、命令の定数フィールドによって特定された値を有するシフトの結果についての論理的なアンド動作であるプロセッサ、または、
少なくとも1つの命令は、第2の命令アドレスに到達するまで第1の命令アドレスにおいて開始した命令をプロセッサに実行させ、その後再び第1のアドレスにおいて実行を継続し、命令のソースレジスタフィールドによって示されたソースレジスタの内容によって決定された回数だけ反復するプロセッサ、または、
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも1つの命令を有しているプロセッサ、または、
さらに、複数の特定目的のレジスタと、コプロセッサとデータを交換するために特定目的のレジスタをアクセスする手段とを具備し、少なくとも1つの命令は、予め定められた値である特定目的のレジスタ中のデータに応答する条件ブランチであるプロセッサ、さらに、
特定目的のレジスタは単一ビットレジスタであり、前記アクセスする手段はさらに単一ビットレジスタと複数のコプロセッサとの間でデータを交換するプロセッサ、または、
さらに、1つの特定目的のレジスタと、特定目的のレジスタへの書込みの実行がまだ完了していないこと、および全てのペンディングの特定目的のレジスタの書込みの実行が完了したことを選択的に示す状態指示手段とを具備し、命令のセットは、全てのペンディングの書込みの実行が完了したことを状態指示手段が示すまで演算装置に次の命令の実行を遅延させる命令を含んでいるプロセッサに係る発明を含む。
さらに、本発明の実施の形態に記載の発明は、データを記憶する複数のレジスタと、メモリとレジスタとの間でデータを交換するためにメモリにアクセスする手段と、レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
複数の命令は複数のレジスタフィールドを有し、各レジスタフィールドは4ビット幅以上のビット幅であり、
命令は、ロードと、セーブと、均一性についての条件ブランチと、非均一性についての条件ブランチと、計算動作のそれぞれの少なくとも1つを含み、それらはそれぞれ28ビットを越えない長さで符号化されており、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびロード命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドの内容によって指定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第2のソースレジスタフィールドおよび記憶命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置の記憶命令の第1のソースレジスタフィールドの内容によって指定されたレジスタからのデータを記憶し、
演算手段は、均一性についての条件ブランチの実行に応答して非均一性についての条件ブランチ命令により示された2つのレジスタの内容が等しいとき均一性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、非均一性についての条件ブランチ命令の実行に応答して非均一性についての条件ブランチ命令により示された2つのレジスタの内容が等しくないとき非均一性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、計算命令の実行に応答して計算命令の各ソースレジスタフィールドにより示される複数のレジスタの内容について計算動作を実行し、計算命令の行先レジスタフィールドによって示される複数のレジスタ中にその結果を記憶させることを特徴とするプロセッサに係る発明を含む。
複数の命令は複数のレジスタフィールドを有し、各レジスタフィールドは4ビット幅以上のビット幅であり、
命令は、ロードと、セーブと、均一性についての条件ブランチと、非均一性についての条件ブランチと、計算動作のそれぞれの少なくとも1つを含み、それらはそれぞれ28ビットを越えない長さで符号化されており、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびロード命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドの内容によって指定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第2のソースレジスタフィールドおよび記憶命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置の記憶命令の第1のソースレジスタフィールドの内容によって指定されたレジスタからのデータを記憶し、
演算手段は、均一性についての条件ブランチの実行に応答して非均一性についての条件ブランチ命令により示された2つのレジスタの内容が等しいとき均一性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、非均一性についての条件ブランチ命令の実行に応答して非均一性についての条件ブランチ命令により示された2つのレジスタの内容が等しくないとき非均一性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、計算命令の実行に応答して計算命令の各ソースレジスタフィールドにより示される複数のレジスタの内容について計算動作を実行し、計算命令の行先レジスタフィールドによって示される複数のレジスタ中にその結果を記憶させることを特徴とするプロセッサに係る発明を含む。
さらに、上記構成に加え、
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令のそれぞれのソースレジスタフィールドは各命令の境界に関して同じ位置にあり、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の付加的なソースレジスタフィールドは各命令の境界に関して同じ位置にあるプロセッサ、さらに、
演算手段はさらに、ループ命令を一度実行するのに応答して他の命令を複数回実行するプロセッサ、さらに、
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令はそれぞれ同じ第1の固定長で符号化され、演算手段は、短いロード、短い記憶、短い均等性についての条件ブランチ、短い非均等性について条件ブランチ、および短い計算命令はそれぞれ第1の固定長よりも短い同じ第2の固定長で符号化され、それぞれロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の対応する動作を実行するプロセッサ、または、
演算手段は、レジスタファイル内のレジスタのグループを示すウインドウベースレジスタを含み、演算手段はさらに、レジスタフィールドがレジスタのグループ中のウインドウに関係するレジスタを示すようにレジスタファイル内のレジスタのグループをウインドウに示すプロセッサ、さらに、
ウインドウベースレジスタの相対的インクリメントはサブルーチン呼出し命令中の定数によって特定されるプロセッサを含む。
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令のそれぞれのソースレジスタフィールドは各命令の境界に関して同じ位置にあり、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の付加的なソースレジスタフィールドは各命令の境界に関して同じ位置にあるプロセッサ、さらに、
演算手段はさらに、ループ命令を一度実行するのに応答して他の命令を複数回実行するプロセッサ、さらに、
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令はそれぞれ同じ第1の固定長で符号化され、演算手段は、短いロード、短い記憶、短い均等性についての条件ブランチ、短い非均等性について条件ブランチ、および短い計算命令はそれぞれ第1の固定長よりも短い同じ第2の固定長で符号化され、それぞれロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の対応する動作を実行するプロセッサ、または、
演算手段は、レジスタファイル内のレジスタのグループを示すウインドウベースレジスタを含み、演算手段はさらに、レジスタフィールドがレジスタのグループ中のウインドウに関係するレジスタを示すようにレジスタファイル内のレジスタのグループをウインドウに示すプロセッサ、さらに、
ウインドウベースレジスタの相対的インクリメントはサブルーチン呼出し命令中の定数によって特定されるプロセッサを含む。
さらに、本発明の実施の形態に記載の発明は、データを記憶する複数のレジスタと、
メモリと前記レジスタとの間でデータを交換するためにメモリをアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
各命令は32ビット幅より狭く、複数の命令は複数のソースレジスタフィールドおよび行先レジスタフィールドを有し、各レジスタフィールドは4ビット幅以上のビット幅であり、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびこの命令の定数フィールドによって特定されたレジスタの1つの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドによって特定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第2のソースレジスタフィールドおよび命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置において命令の第1のソースレジスタフィールドによって特定されたレジスタからのデータを記憶し、
演算手段は、条件ブランチ命令の実行に応答してテストを行い、テストの結果が真実であった場合には、条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
前記テストは、
2つのソースレジスタの内容の均等性、
2つのソースレジスタの内容の非均等性、
ゼロに等しい2つのソースレジスタのビット的論理アンド、
ゼロに等しくない2つのソースレジスタのビット的論理アンド、
ゼロである第2のソースレジスタの内容によって指定された第1のソースレジスタの1ビットの内容、
1である第2のソースレジスタの内容によって指定された第1のソースレジスタの1ビットの内容、
ゼロである命令のフィールドによって指定されたソースレジスタの1ビットの内容、
1である命令のフィールドによって指定されたソースレジスタの1ビットの内容、
第2のソースレジスタの内容より小さい2の補数である命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容以上の大きさの2の補数である命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容より小さい符号のない命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容以上の大きさの符号のない命令のフィールドによって指定された第1のソースレジスタの内容、
ソースレジスタの内容と命令の定数フィールドとの均等性、
ソースレジスタの内容と命令の定数フィールドとの非均等性、
命令の定数フィールドより小さい2の補数のソースレジスタの内容、
命令の定数フィールド以上の大きさの2の補数のソースレジスタの内容、
命令の定数フィールドよりも小さい符号のないソースレジスタの内容、
命令の定数フィールドよりも大きい符号のないソースレジスタの内容、
からなる第1のグループから選択されるプロセッサに係る発明を含む。
メモリと前記レジスタとの間でデータを交換するためにメモリをアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
各命令は32ビット幅より狭く、複数の命令は複数のソースレジスタフィールドおよび行先レジスタフィールドを有し、各レジスタフィールドは4ビット幅以上のビット幅であり、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびこの命令の定数フィールドによって特定されたレジスタの1つの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドによって特定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第2のソースレジスタフィールドおよび命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置において命令の第1のソースレジスタフィールドによって特定されたレジスタからのデータを記憶し、
演算手段は、条件ブランチ命令の実行に応答してテストを行い、テストの結果が真実であった場合には、条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
前記テストは、
2つのソースレジスタの内容の均等性、
2つのソースレジスタの内容の非均等性、
ゼロに等しい2つのソースレジスタのビット的論理アンド、
ゼロに等しくない2つのソースレジスタのビット的論理アンド、
ゼロである第2のソースレジスタの内容によって指定された第1のソースレジスタの1ビットの内容、
1である第2のソースレジスタの内容によって指定された第1のソースレジスタの1ビットの内容、
ゼロである命令のフィールドによって指定されたソースレジスタの1ビットの内容、
1である命令のフィールドによって指定されたソースレジスタの1ビットの内容、
第2のソースレジスタの内容より小さい2の補数である命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容以上の大きさの2の補数である命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容より小さい符号のない命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容以上の大きさの符号のない命令のフィールドによって指定された第1のソースレジスタの内容、
ソースレジスタの内容と命令の定数フィールドとの均等性、
ソースレジスタの内容と命令の定数フィールドとの非均等性、
命令の定数フィールドより小さい2の補数のソースレジスタの内容、
命令の定数フィールド以上の大きさの2の補数のソースレジスタの内容、
命令の定数フィールドよりも小さい符号のないソースレジスタの内容、
命令の定数フィールドよりも大きい符号のないソースレジスタの内容、
からなる第1のグループから選択されるプロセッサに係る発明を含む。
さらに、上記構成に加え、
ゼロである1つのソースレジスタの内容、ゼロではない1つのソースレジスタの内容、ゼロより小さい2の補数である1つのソースレジスタの内容、ゼロより大きい2の補数である1つのソースレジスタの内容、からなる第2のグループおよび前記の第1のグループの中の1つからテストが選択され、ゼロに対する各比較が、ソースレジスタをゼロでないオーギュメントと比較する対応する命令のオフセットよりも大きいブランチターゲットを指定するためのオフセットを特定するプロセッサ、さらに、
テストは、フィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含んでいるプロセッサ、さらに、
全ての命令が32ビット長よりも短いプロセッサ、さらに、
命令は、より少ないビットで符号化されて、対応する条件ブランチ命令よりも短い相対的オフセットフィールドを使用する条件ブランチ命令およびソースレジスタの内容の1つがゼロであることおよび1つのソースレジスタの内容の1つがゼロでないことのテストを含んでいるプロセッサに係る発明を含む。
ゼロである1つのソースレジスタの内容、ゼロではない1つのソースレジスタの内容、ゼロより小さい2の補数である1つのソースレジスタの内容、ゼロより大きい2の補数である1つのソースレジスタの内容、からなる第2のグループおよび前記の第1のグループの中の1つからテストが選択され、ゼロに対する各比較が、ソースレジスタをゼロでないオーギュメントと比較する対応する命令のオフセットよりも大きいブランチターゲットを指定するためのオフセットを特定するプロセッサ、さらに、
テストは、フィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含んでいるプロセッサ、さらに、
全ての命令が32ビット長よりも短いプロセッサ、さらに、
命令は、より少ないビットで符号化されて、対応する条件ブランチ命令よりも短い相対的オフセットフィールドを使用する条件ブランチ命令およびソースレジスタの内容の1つがゼロであることおよび1つのソースレジスタの内容の1つがゼロでないことのテストを含んでいるプロセッサに係る発明を含む。
好ましい実施形態の変更および変形は当業者に容易に明白であろう。このような変形は特許請求の範囲に記載されている本発明の技術的範囲内にある。
Claims (27)
- 16以上の汎用レジスタと
それらのレジスタとデータを交換するメモリにアクセスする手段と、
メモリからの命令を処理するための演算装置とを具備し、全ての命令は28ビットを越えない長さを有し、全ての命令は完全な特徴のRISC命令のセットを含み、
少なくとも1つの命令は、オプコードフィールドと、命令に対する定数オペランドを特定するフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる1つのソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる1つの行先レジスタフィールドとを有しており、
少なくとも1つの命令は、オプコードフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる複数のソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる1つの行先レジスタフィールドとを有しており、
少なくとも1つの命令は、前記演算装置に複数の複合演算を実行させ、それらの演算の第1のものは第1の計算および論理演算の1つであり、第2のものは第2の計算動作の1つおよび条件ブランチ演算であることを特徴とするプロセッサ。 - 命令は、同じ第1の圧縮されていない固定長の命令を有する第1のグループの命令と、第1の固定長の命令とは異なる同じ第2の圧縮されていない固定長の命令を有する第2のグループの命令とを含んでおり、
両方のグループに共通のオプコードフィールド中の所定のビットフィールドはそのビットフィールドを有する命令が属している1つのグループを示している請求項1記載のプロセッサ。 - 第1の演算は、命令内のソースレジスタフィールドによって示されたレジスタ値の比較であり、第2の演算は、比較の結果に応答するブランチ演算である請求項1記載のプロセッサ。
- 第1の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な左シフトであり、第2の演算は、シフトされたレジスタ内容および別のソースレジスタ値についての計算動作である請求項1記載のプロセッサ。
- 第1の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な右シフトであり、第2の演算は、命令の定数フィールドによって特定された値を有するシフトの結果についての論理的なアンド動作である請求項1記載のプロセッサ。
- 少なくとも1つの命令は、第2の命令アドレスに到達するまで第1の命令アドレスにおいて開始した命令をプロセッサに実行させ、その後再び第1のアドレスにおいて実行を継続し、命令のソースレジスタフィールドによって示されたソースレジスタの内容によって決定された回数だけ反復する請求項1記載のプロセッサ。
- プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも1つの命令を有している請求項1記載のプロセッサ。
- さらに、複数の特定目的のレジスタと、
コプロセッサとデータを交換するために特定目的のレジスタをアクセスする手段とを具備し、
少なくとも1つの命令は、予め定められた値である特定目的のレジスタ中のデータに応答する条件ブランチである請求項1記載のプロセッサ。 - 特定目的のレジスタは単一ビットレジスタであり、
前記アクセスする手段はさらに単一ビットレジスタと複数のコプロセッサとの間でデータを交換する請求項8記載のプロセッサ。 - データを記憶する複数のレジスタと、
メモリとレジスタとの間でデータを交換するためにメモリにアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
複数の命令は複数のレジスタフィールドを有し、各レジスタフィールドは4ビット幅以上のビット幅であり、
命令は、完全な特徴のRISC命令のセットを含み、そしてロードと、セーブと、均等性についての条件ブランチと、非均等性についての条件ブランチと、計算動作のそれぞれの少なくとも1つを含み、命令はそれぞれ28ビットを越えない長さで符号化されており、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびロード命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドの内容によって指定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第2のソースレジスタフィールドおよび記憶命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置の記憶命令の第1のソースレジスタフィールドの内容によって指定されたレジスタからのデータを記憶し、
演算手段は、均等性についての条件ブランチの実行に応答して非均等性についての条件ブランチ命令により示された2つのレジスタの内容が等しいとき均等性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、非均等性についての条件ブランチ命令の実行に応答して非均等性についての条件ブランチ命令により示された2つのレジスタの内容が等しくないとき非均等性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、計算命令の実行に応答して計算命令の各ソースレジスタフィールドにより示される複数のレジスタの内容について計算動作を実行し、計算命令の行先レジスタフィールドによって示される複数のレジスタ中にその結果を記憶させることを特徴とするプロセッサ。 - ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令のそれぞれのソースレジスタフィールドは各命令の境界に関して同じ位置にあり、
記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の付加的なソースレジスタフィールドは各命令の境界に関して同じ位置にある請求項10記載のプロセッサ。 - 演算手段はさらに、ループ命令を一度実行するのに応答して他の命令を複数回実行する請求項11記載のプロセッサ。
- ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令はそれぞれ同じ第1の固定長で符号化され、
演算手段は、短いロード、短い記憶、短い均等性についての条件ブランチ、短い非均等性について条件ブランチ、および短い計算命令はそれぞれ第1の固定長よりも短い同じ第2の固定長で符号化され、それぞれロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の対応する動作を実行する請求項12記載のプロセッサ。 - 演算手段は、レジスタファイル内のレジスタのグループを示すウインドウベースレジスタを含み、
演算手段はさらに、レジスタフィールドがレジスタのグループ中のウインドウに関係するレジスタを示すようにレジスタファイル内のレジスタのグループをウインドウに示す請求項12記載のプロセッサ。 - ウインドウベースレジスタの相対的インクリメントはサブルーチン呼出し命令中の定数によって特定される請求項14記載のプロセッサ。
- データを記憶する複数のレジスタと、
メモリと前記レジスタとの間でデータを交換するためにメモリをアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
命令は完全な特徴のRISC命令のセットを含み、各命令は28ビットを越えない長さを有し、複数の命令は複数のソースレジスタフィールドおよび行先レジスタフィールドを有し、各レジスタフィールドは4ビット幅以上のビット幅であり、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびこの命令の定数フィールドによって特定されたレジスタの1つの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドによって特定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第2のソースレジスタフィールドおよび命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置において命令の第1のソースレジスタフィールドによって特定されたレジスタからのデータを記憶し、
演算手段は、条件ブランチ命令の実行に応答してテストを行い、テストの結果が真実であった場合には、条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
前記テストは、
2つのソースレジスタの内容の均等性、
2つのソースレジスタの内容の非均等性、
ゼロに等しい2つのソースレジスタのビット的論理アンド、
ゼロに等しくない2つのソースレジスタのビット的論理アンド、
ゼロである第2のソースレジスタの内容によって指定された第1のソースレジスタ中のデータの1つの2進ビット、
1である第2のソースレジスタの内容によって指定された第1のソースレジスタ中のデータの1つの2進ビット、
ゼロである命令のフィールドによって指定されたソースレジスタ中のデータの1つの2進ビット、
1である命令のフィールドによって指定されたソースレジスタ中のデータの1つの2進ビット、
第2のソースレジスタの内容より小さい2の補数である命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容以上の大きさの2の補数である命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容より小さい符号のない命令のフィールドによって指定された第1のソースレジスタの内容、
第2のソースレジスタの内容以上の大きさの符号のない命令のフィールドによって指定された第1のソースレジスタの内容、
ソースレジスタの内容と命令の定数フィールドとの均等性、
ソースレジスタの内容と命令の定数フィールドとの非均等性、
命令の定数フィールドより小さい2の補数のソースレジスタの内容、
命令の定数フィールド以上の大きさの2の補数のソースレジスタの内容、
命令の定数フィールドよりも小さい符号のないソースレジスタの内容、
命令の定数フィールド以上の大きさの符号のないソースレジスタの内容、
からなる第1のグループから選択され、そして
命令は、同じ第1の圧縮されていない固定長の命令を有する第1のセットの命令と、そして圧縮されていない第1の固定長の命令とは異なる、同じ第2の圧縮されていない固定長の命令を有する第2のセットの命令を含み、
両方のセットに共通のオプコードフィールド中の所定のビットフィールドは、そのビットフィールドを有する命令が属している1つのセットを示している
ことを特徴とするプロセッサ。 - ゼロである1つのソースレジスタの内容、
ゼロではない1つのソースレジスタの内容、
ゼロより小さい2の補数である1つのソースレジスタの内容、
ゼロより大きい2の補数である1つのソースレジスタの内容、
からなる第2のグループおよび前記の第1のグループの中の1つからテストが選択され、
ゼロに対する各比較が、ソースレジスタをゼロでないオーギュメントと比較する対応する命令のオフセットよりも大きいブランチターゲットを指定するためのオフセットを特定する請求項16記載のプロセッサ。 - テストは、フィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含んでいる請求項17記載のプロセッサ。
- 命令は、より少ないビットで符号化されて、対応する条件ブランチ命令よりも短い相対的オフセットフィールドを使用する条件ブランチ命令およびソースレジスタの内容の1つがゼロであることおよび1つのソースレジスタの内容の1つがゼロでないことのテストを含んでいる請求項18記載のプロセッサ。
- 第2の命令のグループは第1の命令のグループの動作上のサブセットである請求項2記載のプロセッサ。
- 第1および第2の命令のグループは同じオプコードマップを占める請求項2記載のプロセッサ。
- 命令は、同じ第1の圧縮されていない固定長の命令を有する第1の命令のセットと、第1の圧縮されていない固定長の命令とは異なる、同じ第2の圧縮されていない固定長の命令を有する第2の命令のセットを含み、
両方のグループに共通のオプコードフィールド中の所定のビットフィールドがそのビットフィールドを有する命令が属している1つのセットを示す請求項10記載のプロセッサ。 - 第2の命令のグループは第1の命令のグループの動作上のサブセットである請求項22記載のプロセッサ。
- 第1および第2の命令のグループは同じオプコードマップを占める請求項22記載のプロセッサ。
- 命令は、同じ第1の圧縮されていない固定長の命令を有する第1の命令のセットと、第1の圧縮されていない固定長の命令とは異なる、同じ第2の圧縮されていない固定長の命令を有する第2の命令のセットを含み、
両方のグループに共通のオプコードフィールド中の所定のビットフィールドがそのビットフィールドを有する命令が属している1つのセットを示す請求項16記載のプロセッサ。 - 第2の命令のセットは第1の命令のセットの動作上のサブセットである請求項25記載のプロセッサ。
- 第1および第2の命令のセットは同じオプコードマップを占める請求項25記載のプロセッサ。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/192,395 US6282633B1 (en) | 1998-11-13 | 1998-11-13 | High data density RISC processor |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000582881A Division JP3795757B2 (ja) | 1998-11-13 | 1999-11-10 | 高データ密度のriscプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006185462A true JP2006185462A (ja) | 2006-07-13 |
JP2006185462A5 JP2006185462A5 (ja) | 2006-12-21 |
Family
ID=22709471
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000582881A Expired - Fee Related JP3795757B2 (ja) | 1998-11-13 | 1999-11-10 | 高データ密度のriscプロセッサ |
JP2006039754A Pending JP2006185462A (ja) | 1998-11-13 | 2006-02-16 | 高データ密度のriscプロセッサ |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000582881A Expired - Fee Related JP3795757B2 (ja) | 1998-11-13 | 1999-11-10 | 高データ密度のriscプロセッサ |
Country Status (8)
Country | Link |
---|---|
US (1) | US6282633B1 (ja) |
EP (1) | EP1129402A1 (ja) |
JP (2) | JP3795757B2 (ja) |
KR (1) | KR100412920B1 (ja) |
CN (1) | CN1204490C (ja) |
AU (1) | AU1346500A (ja) |
TW (1) | TW452693B (ja) |
WO (1) | WO2000029938A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011209859A (ja) * | 2010-03-29 | 2011-10-20 | Renesas Electronics Corp | 情報処理装置 |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2984463B2 (ja) * | 1991-06-24 | 1999-11-29 | 株式会社日立製作所 | マイクロコンピュータ |
US6990570B2 (en) * | 1998-10-06 | 2006-01-24 | Texas Instruments Incorporated | Processor with a computer repeat instruction |
US7779236B1 (en) * | 1998-12-31 | 2010-08-17 | Stmicroelectronics, Inc. | Symbolic store-load bypass |
US6842853B1 (en) * | 1999-01-13 | 2005-01-11 | Sun Microsystems, Inc. | Thread suspension system and method |
JP2000353092A (ja) * | 1999-06-09 | 2000-12-19 | Nec Corp | 情報処理装置及びそのレジスタファイル切替方法 |
US6446197B1 (en) * | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US6446195B1 (en) * | 2000-01-31 | 2002-09-03 | Intel Corporation | Dyadic operations instruction processor with configurable functional blocks |
US7418580B1 (en) * | 1999-12-02 | 2008-08-26 | International Business Machines Corporation | Dynamic object-level code transaction for improved performance of a computer |
US6754892B1 (en) * | 1999-12-15 | 2004-06-22 | Transmeta Corporation | Instruction packing for an advanced microprocessor |
US6633181B1 (en) * | 1999-12-30 | 2003-10-14 | Stretch, Inc. | Multi-scale programmable array |
US7036106B1 (en) | 2000-02-17 | 2006-04-25 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6763327B1 (en) * | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
AU2001245720A1 (en) | 2000-03-15 | 2001-09-24 | Arc International Plc | Method and apparatus for processor code optimization using code compression |
KR100379837B1 (ko) * | 2000-06-30 | 2003-04-11 | 주식회사 에이디칩스 | 확장명령어 축약장치 |
US6922773B2 (en) * | 2000-12-29 | 2005-07-26 | Stmicroelectronics, Inc. | System and method for encoding constant operands in a wide issue processor |
US6857110B1 (en) | 2001-01-30 | 2005-02-15 | Stretch, Inc. | Design methodology for merging programmable logic into a custom IC |
JP3776732B2 (ja) * | 2001-02-02 | 2006-05-17 | 株式会社東芝 | プロセッサ装置 |
US7010558B2 (en) * | 2001-04-19 | 2006-03-07 | Arc International | Data processor with enhanced instruction execution and method |
US6842849B2 (en) * | 2001-05-21 | 2005-01-11 | Arm Limited | Locking source registers in a data processing apparatus |
US7493470B1 (en) | 2001-12-07 | 2009-02-17 | Arc International, Plc | Processor apparatus and methods optimized for control applications |
US7278137B1 (en) | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
KR100718754B1 (ko) * | 2002-01-31 | 2007-05-15 | 에이알씨 인터내셔널 | 길이가 다른 명령어집합 구조를 갖는 설정가능형데이터프로세서 |
US20030167460A1 (en) * | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
CN1666202A (zh) * | 2002-04-25 | 2005-09-07 | Arc国际公司 | 管理集成电路设计的装置和方法 |
US6986023B2 (en) * | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
WO2004015563A1 (en) * | 2002-08-09 | 2004-02-19 | Intel Corporation | Multimedia coprocessor control mechanism including alignment or broadcast instructions |
US7392368B2 (en) * | 2002-08-09 | 2008-06-24 | Marvell International Ltd. | Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements |
FR2845784B1 (fr) * | 2002-10-11 | 2005-01-14 | St Microelectronics Sa | Dispositif de memorisation de donnees de type lifo incorporant deux memoires a acces aleatoire |
US7600096B2 (en) * | 2002-11-19 | 2009-10-06 | Stmicroelectronics, Inc. | Coprocessor extension architecture built using a novel split-instruction transaction model |
GB2402764B (en) * | 2003-06-13 | 2006-02-22 | Advanced Risc Mach Ltd | Instruction encoding within a data processing apparatus having multiple instruction sets |
GB2402763B (en) * | 2003-06-13 | 2006-03-01 | Advanced Risc Mach Ltd | Data access program instruction encoding |
US7698539B1 (en) | 2003-07-16 | 2010-04-13 | Banning John P | System and method of instruction modification |
US7606997B1 (en) | 2003-07-18 | 2009-10-20 | Guillermo Rozas | Method and system for using one or more address bits and an instruction to increase an instruction set |
US7373642B2 (en) * | 2003-07-29 | 2008-05-13 | Stretch, Inc. | Defining instruction extensions in a standard programming language |
US7526757B2 (en) * | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7216216B1 (en) * | 2004-06-30 | 2007-05-08 | Sun Microsystems, Inc. | Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window |
US7620042B2 (en) * | 2004-12-17 | 2009-11-17 | Samsung Electronics Co., Ltd. | Apparatus and method for inter-processor communications in a multiprocessor routing node |
US7664928B1 (en) | 2005-01-19 | 2010-02-16 | Tensilica, Inc. | Method and apparatus for providing user-defined interfaces for a configurable processor |
US7415599B1 (en) * | 2005-11-01 | 2008-08-19 | Zilog, Inc. | Instruction operation and operand memory location determined based on preceding instruction operation and operand memory location |
US7971132B2 (en) * | 2007-01-05 | 2011-06-28 | Dialogic Corporation | Universal multimedia engine and method for producing the same |
CN101382884B (zh) * | 2007-09-07 | 2010-05-19 | 上海奇码数字信息有限公司 | 指令编码方法、指令编码系统及数字信号处理器 |
JP4526560B2 (ja) * | 2007-12-05 | 2010-08-18 | 日本テキサス・インスツルメンツ株式会社 | プロセッサおよび信号処理方法 |
WO2010096119A1 (en) * | 2008-10-29 | 2010-08-26 | Adapteva Incorporated | Variable instruction width digital signal processor |
US8738860B1 (en) * | 2010-10-25 | 2014-05-27 | Tilera Corporation | Computing in parallel processing environments |
US9898283B2 (en) * | 2011-12-22 | 2018-02-20 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset |
US9292291B2 (en) * | 2012-03-28 | 2016-03-22 | International Business Machines Corporation | Instruction merging optimization |
MX2014015093A (es) * | 2012-07-06 | 2015-03-05 | Koninkl Philips Nv | Procesador y sistema informaticos sin una unidad aritmetica y logica. |
US9411589B2 (en) | 2012-12-11 | 2016-08-09 | International Business Machines Corporation | Branch-free condition evaluation |
US20150178078A1 (en) * | 2013-12-21 | 2015-06-25 | H. Peter Anvin | Instructions and logic to provide base register swap status verification functionality |
US9250900B1 (en) | 2014-10-01 | 2016-02-02 | Cadence Design Systems, Inc. | Method, system, and computer program product for implementing a microprocessor with a customizable register file bypass network |
KR102270790B1 (ko) | 2014-10-20 | 2021-06-29 | 삼성전자주식회사 | 데이터 처리 방법 및 장치 |
US10620957B2 (en) * | 2015-10-22 | 2020-04-14 | Texas Instruments Incorporated | Method for forming constant extensions in the same execute packet in a VLIW processor |
US10331449B2 (en) * | 2016-01-22 | 2019-06-25 | Arm Limited | Encoding instructions identifying first and second architectural register numbers |
US10157164B2 (en) * | 2016-09-20 | 2018-12-18 | Qualcomm Incorporated | Hierarchical synthesis of computer machine instructions |
CN111723920B (zh) * | 2019-03-22 | 2024-05-17 | 中科寒武纪科技股份有限公司 | 人工智能计算装置及相关产品 |
WO2020192587A1 (zh) * | 2019-03-22 | 2020-10-01 | 中科寒武纪科技股份有限公司 | 人工智能计算装置及相关产品 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5051885A (en) | 1988-10-07 | 1991-09-24 | Hewlett-Packard Company | Data processing system for concurrent dispatch of instructions to multiple functional units |
EP0374419A3 (en) | 1988-12-21 | 1991-04-10 | International Business Machines Corporation | Method and apparatus for efficient loop constructs in hardware and microcode |
US5155820A (en) | 1989-02-21 | 1992-10-13 | Gibson Glenn A | Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits |
US5493687A (en) | 1991-07-08 | 1996-02-20 | Seiko Epson Corporation | RISC microprocessor architecture implementing multiple typed register sets |
JP2683488B2 (ja) | 1992-06-30 | 1997-11-26 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 3−1論理演算装置 |
JP3532975B2 (ja) * | 1993-09-27 | 2004-05-31 | 株式会社ルネサステクノロジ | マイクロコンピュータおよびそれを用いて命令を実行する方法 |
DE69428466T2 (de) | 1993-11-23 | 2002-05-23 | Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto | Parallele Datenverarbeitung in einem Einzelprozessor |
DE69428504T2 (de) | 1993-11-30 | 2002-05-16 | Texas Instruments Inc., Dallas | Drei-Eingänge-Arithmetik-Logik-Einheit mit Trommel-Rotationsschaltung |
US5581717A (en) | 1994-03-01 | 1996-12-03 | Intel Corporation | Decoding circuit and method providing immediate data for a micro-operation issued from a decoder |
US5655132A (en) | 1994-08-08 | 1997-08-05 | Rockwell International Corporation | Register file with multi-tasking support |
JP3630804B2 (ja) * | 1995-11-30 | 2005-03-23 | 三洋電機株式会社 | データ処理装置 |
-
1998
- 1998-11-13 US US09/192,395 patent/US6282633B1/en not_active Expired - Lifetime
-
1999
- 1999-11-10 JP JP2000582881A patent/JP3795757B2/ja not_active Expired - Fee Related
- 1999-11-10 EP EP99956977A patent/EP1129402A1/en not_active Withdrawn
- 1999-11-10 KR KR10-2001-7006015A patent/KR100412920B1/ko not_active IP Right Cessation
- 1999-11-10 AU AU13465/00A patent/AU1346500A/en not_active Abandoned
- 1999-11-10 WO PCT/US1999/026531 patent/WO2000029938A1/en active IP Right Grant
- 1999-11-10 CN CNB998154288A patent/CN1204490C/zh not_active Expired - Fee Related
- 1999-12-10 TW TW088119754A patent/TW452693B/zh active
-
2006
- 2006-02-16 JP JP2006039754A patent/JP2006185462A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011209859A (ja) * | 2010-03-29 | 2011-10-20 | Renesas Electronics Corp | 情報処理装置 |
Also Published As
Publication number | Publication date |
---|---|
AU1346500A (en) | 2000-06-05 |
KR100412920B1 (ko) | 2003-12-31 |
US6282633B1 (en) | 2001-08-28 |
JP3795757B2 (ja) | 2006-07-12 |
WO2000029938A1 (en) | 2000-05-25 |
KR20010092736A (ko) | 2001-10-26 |
CN1204490C (zh) | 2005-06-01 |
JP2003521753A (ja) | 2003-07-15 |
TW452693B (en) | 2001-09-01 |
EP1129402A1 (en) | 2001-09-05 |
CN1348560A (zh) | 2002-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3795757B2 (ja) | 高データ密度のriscプロセッサ | |
KR100513358B1 (ko) | Risc형명령세트및슈퍼스칼라마이크로프로세서 | |
Silc et al. | Processor Architecture: From Dataflow to Superscalar and Beyond; with 34 Tables | |
US5269007A (en) | RISC system capable of simultaneously executing data interlocked shift and arithmetic/logic instructions in one clock cycle by bypassing register | |
JP3547139B2 (ja) | プロセッサ | |
US5958048A (en) | Architectural support for software pipelining of nested loops | |
US20040049663A1 (en) | System with wide operand architecture and method | |
US20060174089A1 (en) | Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture | |
EP0465322A2 (en) | In-register data manipulation in reduced instruction set processor | |
US20010010072A1 (en) | Instruction translator translating non-native instructions for a processor into native instructions therefor, instruction memory with such translator, and data processing apparatus using them | |
WO2005099383A2 (en) | Processor having compound instruction and operation formats | |
JP2004532466A (ja) | バイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサ | |
JP2847974B2 (ja) | データ処理装置 | |
US20180181347A1 (en) | Data processing apparatus and method for controlling vector memory accesses | |
Pan et al. | Heads and tails: a variable-length instruction format supporting parallel fetch and decode | |
Berenbaum et al. | Introduction to the CRISP Instruction Set Architecture. | |
US6857063B2 (en) | Data processor and method of operation | |
JP3345787B2 (ja) | データ処理装置 | |
EP3559803A1 (en) | Vector generating instruction | |
Gwennap | MAJC gives VLIW a new twist | |
US5764939A (en) | RISC processor having coprocessor for executing circular mask instruction | |
JP2668456B2 (ja) | ビット検索回路及びそれを備えたデータ処理装置 | |
JP2646855B2 (ja) | データ処理装置 | |
KR20070018066A (ko) | 합성 명령 및 연산 포맷들을 갖는 프로세서 | |
EP1113356B1 (en) | Method and apparatus for reducing the size of code in a processor with an exposed pipeline |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061107 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061107 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090602 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20091027 |