JP3093684B2 - 命令ループを投機的に実行するプロセッサ及び方法 - Google Patents
命令ループを投機的に実行するプロセッサ及び方法Info
- Publication number
- JP3093684B2 JP3093684B2 JP09181943A JP18194397A JP3093684B2 JP 3093684 B2 JP3093684 B2 JP 3093684B2 JP 09181943 A JP09181943 A JP 09181943A JP 18194397 A JP18194397 A JP 18194397A JP 3093684 B2 JP3093684 B2 JP 3093684B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- branch
- execution
- count
- instruction loop
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 26
- 230000004044 response Effects 0.000 claims description 22
- 230000015654 memory Effects 0.000 claims description 10
- 239000000872 buffer Substances 0.000 description 27
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000008685 targeting Effects 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 102100038520 Calcitonin receptor Human genes 0.000 description 1
- 101710178048 Calcitonin receptor Proteins 0.000 description 1
- 241000255925 Diptera Species 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000004377 microelectronic Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/82—Architectures of general purpose stored program computers data or demand driven
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
【0001】
【発明が属する技術分野】本発明の技術分野は、概要的
にデータ処理方法及びシステムに関し、特に分岐命令を
実行するプロセッサ及び方法に関する。更に詳細に述べ
ると、本発明の技術分野は、命令ループを投機的に実行
するプロセッサ及び方法に関する。
にデータ処理方法及びシステムに関し、特に分岐命令を
実行するプロセッサ及び方法に関する。更に詳細に述べ
ると、本発明の技術分野は、命令ループを投機的に実行
するプロセッサ及び方法に関する。
【0002】
【従来の技術】最新のスーパースケーラ・プロセッサ
は、例えば、命令を記憶する命令キャッシュ、命令キャ
ッシュからフェッチした複数の命令を一時的に記憶して
実行する命令バッファ、命令シーケンスを実行する1以
上の実行ユニット、分岐命令を実行する分岐処理ユニッ
ト(BPU)、命令バッファから特定の実行ユニットへ
命令シーケンスをディスパッチするディスパッチ・ユニ
ット、及び実行を終了したが、完結しなかった命令シー
ケンスを一時記憶する完了バッファを備えることができ
る。
は、例えば、命令を記憶する命令キャッシュ、命令キャ
ッシュからフェッチした複数の命令を一時的に記憶して
実行する命令バッファ、命令シーケンスを実行する1以
上の実行ユニット、分岐命令を実行する分岐処理ユニッ
ト(BPU)、命令バッファから特定の実行ユニットへ
命令シーケンスをディスパッチするディスパッチ・ユニ
ット、及び実行を終了したが、完結しなかった命令シー
ケンスを一時記憶する完了バッファを備えることができ
る。
【0003】スーパースケーラ・プロセッサの分岐処理
ユニット(BPU)により実行される分岐命令は、条件
分岐命令又は無条件分岐命令に分類され得る。無条件分
岐命令は、プログラム実行の流れを逐次的な実行パスか
ら指定された目標実行パスへ変更し、かつ他の命令の実
行により提供される条件に依存しない分岐命令である。
従って、常に無条件分岐命令により指定された分岐が行
われる。これに対して、条件分岐命令は、プロセッサ内
の条件、例えば指定されたレジスタの状態又はカウンタ
の値に従い、プログラムの流れにおいて指示された分岐
を行うか、又は行わない分岐命令である。更に、条件分
岐命令は、これが分岐処理ユニット(BPU)により評
価されるときに、分岐が依存する条件が得られるか否か
に基づいて、決定済み又は未決定として分類できる。決
定された条件分岐命令が依存している条件は実行前に分
かっているので、典型的には、決定された条件分岐命令
を実行することができ、また目標実行パス内の命令を命
令シーケンスの実行において僅かな遅延又は遅延なしで
フェッチすることができる。他方、未解決の条件命令
は、分岐が依存する条件が入手可能となるまで、命令シ
ーケンスのフェッチを遅延させるのであれば、大きなパ
フォーマンスの低下を来す恐れがある。
ユニット(BPU)により実行される分岐命令は、条件
分岐命令又は無条件分岐命令に分類され得る。無条件分
岐命令は、プログラム実行の流れを逐次的な実行パスか
ら指定された目標実行パスへ変更し、かつ他の命令の実
行により提供される条件に依存しない分岐命令である。
従って、常に無条件分岐命令により指定された分岐が行
われる。これに対して、条件分岐命令は、プロセッサ内
の条件、例えば指定されたレジスタの状態又はカウンタ
の値に従い、プログラムの流れにおいて指示された分岐
を行うか、又は行わない分岐命令である。更に、条件分
岐命令は、これが分岐処理ユニット(BPU)により評
価されるときに、分岐が依存する条件が得られるか否か
に基づいて、決定済み又は未決定として分類できる。決
定された条件分岐命令が依存している条件は実行前に分
かっているので、典型的には、決定された条件分岐命令
を実行することができ、また目標実行パス内の命令を命
令シーケンスの実行において僅かな遅延又は遅延なしで
フェッチすることができる。他方、未解決の条件命令
は、分岐が依存する条件が入手可能となるまで、命令シ
ーケンスのフェッチを遅延させるのであれば、大きなパ
フォーマンスの低下を来す恐れがある。
【0004】従って、いくつかのプロセッサは、パフォ
ーマンスを高めるために、指示された分岐をするのか、
しないのかを予測して、未決定の分岐命令を投機的に実
行する。次に、フェッチヤーは、予測の結果を利用し
て、分岐の決定前に、投機的な実行パス内の複数の命令
をフェッチすることにより、次に分岐が正しく予測され
たとして分岐を決定する場合に、実行パイプラインにお
けるストールをなくするすることができる。
ーマンスを高めるために、指示された分岐をするのか、
しないのかを予測して、未決定の分岐命令を投機的に実
行する。次に、フェッチヤーは、予測の結果を利用し
て、分岐の決定前に、投機的な実行パス内の複数の命令
をフェッチすることにより、次に分岐が正しく予測され
たとして分岐を決定する場合に、実行パイプラインにお
けるストールをなくするすることができる。
【0005】大抵の形式の条件命令は、例えば静的又は
動的な予測を用いて、BPUにより通常に予測される
が、命令ループのインデックスとして用いられるレジス
タ内に保持されている値に基づいて分岐する「カウント
による条件分岐」命令(以下、「カウント分岐命令」と
いう)は、通常のプロセッサにより予測されることはな
い。カウント分岐命令が通常のプロセッサのBPUによ
りデコードされると、命令は、分岐インデックス値(典
型的には特殊用レジスタ内に記憶される)が利用可能に
なるまでストールする。このようにしてプロセッサがス
トールすると、特に実行しているプログラムが多数回の
ループを有するときは、大きなパフォーマンス劣化に帰
結する。従って、プロセッサにカウント分岐命令を投機
的に実行させ、次いで分岐インデックス値を判断したと
きに、分岐を決定させる分岐予測方法論が必要とされる
のは、明らかである。
動的な予測を用いて、BPUにより通常に予測される
が、命令ループのインデックスとして用いられるレジス
タ内に保持されている値に基づいて分岐する「カウント
による条件分岐」命令(以下、「カウント分岐命令」と
いう)は、通常のプロセッサにより予測されることはな
い。カウント分岐命令が通常のプロセッサのBPUによ
りデコードされると、命令は、分岐インデックス値(典
型的には特殊用レジスタ内に記憶される)が利用可能に
なるまでストールする。このようにしてプロセッサがス
トールすると、特に実行しているプログラムが多数回の
ループを有するときは、大きなパフォーマンス劣化に帰
結する。従って、プロセッサにカウント分岐命令を投機
的に実行させ、次いで分岐インデックス値を判断したと
きに、分岐を決定させる分岐予測方法論が必要とされる
のは、明らかである。
【0006】
【発明が解決しようとする課題】従って、本発明の第1
の目的はデータ処理方法及びシステムを提供することで
ある。
の目的はデータ処理方法及びシステムを提供することで
ある。
【0007】本発明の他の目的は分岐命令を実行するプ
ロセッサ及び方法を提供することである。
ロセッサ及び方法を提供することである。
【0008】本発明の更に他の目的は投機的に命令ルー
プを実行するプロセッサ及び方法を提供することであ
る。
プを実行するプロセッサ及び方法を提供することであ
る。
【0009】
【課題を解決するための手段】以上の目的は、ここで説
明されているように達成される。命令ループを投機的に
実行するプロセッサ及び方法を開示する。この方法によ
れば、プロセッサが命令ループの実行を開始し、それぞ
れ実行された前記命令ループの繰り返しをカウントす
る。その後、命令ループが実行されるべき実際の繰り返
し回数を判断する。この判断に応答して、前記命令ルー
プが実行されるべき実際の繰り返し回数と、実行された
繰り返し回数との間の差を判断する。この差が0より大
きいという判断に応答して、その差に等しい付加的な繰
り返し回数につき命令ループが実行される。一実施例に
よれば、この差が0未満であるとの判断に応答して、誤
予測による命令ループの繰り返し内でフェッチされた未
実行命令は、取り消される。更に、実行された誤予測に
よる命令ループの繰り返しのデータ結果は、無視され
る。他の実施例によれば、実行された命令ループの繰り
返しは、カウント・レジスタを0にセットし、かつ実行
された命令ループの各繰り返しについて前記カウント・
レジスタを1つ減算することにより、カウントされる。
実行すべき実際の繰り返し回数と実行繰り返し回数との
間の差は、実際の繰り返しの数とカウント・レジスタの
値とを加算することにより、決定される。
明されているように達成される。命令ループを投機的に
実行するプロセッサ及び方法を開示する。この方法によ
れば、プロセッサが命令ループの実行を開始し、それぞ
れ実行された前記命令ループの繰り返しをカウントす
る。その後、命令ループが実行されるべき実際の繰り返
し回数を判断する。この判断に応答して、前記命令ルー
プが実行されるべき実際の繰り返し回数と、実行された
繰り返し回数との間の差を判断する。この差が0より大
きいという判断に応答して、その差に等しい付加的な繰
り返し回数につき命令ループが実行される。一実施例に
よれば、この差が0未満であるとの判断に応答して、誤
予測による命令ループの繰り返し内でフェッチされた未
実行命令は、取り消される。更に、実行された誤予測に
よる命令ループの繰り返しのデータ結果は、無視され
る。他の実施例によれば、実行された命令ループの繰り
返しは、カウント・レジスタを0にセットし、かつ実行
された命令ループの各繰り返しについて前記カウント・
レジスタを1つ減算することにより、カウントされる。
実行すべき実際の繰り返し回数と実行繰り返し回数との
間の差は、実際の繰り返しの数とカウント・レジスタの
値とを加算することにより、決定される。
【0010】この実施例の付加的な目的、特徴及び効果
は以下に詳細に記載した説明により明らかとなる。
は以下に詳細に記載した説明により明らかとなる。
【0011】
【発明の実施の形態】ここで図、特に図1を参照する
と、特許請求の範囲に記載され、本発明により情報を処
理するプロセッサの一実施例のブロック図が総体的に1
0により示されている。説明する図示の実施例におい
て、プロセッサ10は一個の集積回路スーパースケーラ
・マイクロプロセッサを備えている。従って、以下で更
に説明しているように、プロセッサ10は、集積回路に
より全て形成された種々の実行ユニット、複数のレジス
タ、複数バッファ、複数のメモリ、及び他の複数の機能
ユニットを備えている。プロセッサ10は、好ましく
は、縮小命令セット(RISC)技術に従って動作し、IBM
マイクロエレクトロニクスから入手可能なマイクロプロ
セッサのPower PC(登録商標)ラインのうちの一つを備
えている。しかし、当該技術分野において習熟する者
は、他の適当なプロセッサを使用してもよいことを理解
すべきである。図1に示すように、プロセッサ10は、
このプロセッサ10内のバス・インターフェイス・ユニ
ット(BIU)12を介してシステム・バス11に接続
されている。BIU12はプロセッサ10とシステム・
バス11に接続されている他の装置、例えばメイン・メ
モリ(図示なし)との間の情報の転送を制御する。プロ
セッサ10、システム・バス11、及びシステム・バス
11に接続された他の装置は、相互にデータ処理システ
ムを形成している。
と、特許請求の範囲に記載され、本発明により情報を処
理するプロセッサの一実施例のブロック図が総体的に1
0により示されている。説明する図示の実施例におい
て、プロセッサ10は一個の集積回路スーパースケーラ
・マイクロプロセッサを備えている。従って、以下で更
に説明しているように、プロセッサ10は、集積回路に
より全て形成された種々の実行ユニット、複数のレジス
タ、複数バッファ、複数のメモリ、及び他の複数の機能
ユニットを備えている。プロセッサ10は、好ましく
は、縮小命令セット(RISC)技術に従って動作し、IBM
マイクロエレクトロニクスから入手可能なマイクロプロ
セッサのPower PC(登録商標)ラインのうちの一つを備
えている。しかし、当該技術分野において習熟する者
は、他の適当なプロセッサを使用してもよいことを理解
すべきである。図1に示すように、プロセッサ10は、
このプロセッサ10内のバス・インターフェイス・ユニ
ット(BIU)12を介してシステム・バス11に接続
されている。BIU12はプロセッサ10とシステム・
バス11に接続されている他の装置、例えばメイン・メ
モリ(図示なし)との間の情報の転送を制御する。プロ
セッサ10、システム・バス11、及びシステム・バス
11に接続された他の装置は、相互にデータ処理システ
ムを形成している。
【0012】BIU12はプロセッサ10内の命令キャ
ッシュ14及びデータ・キャッシュ16に接続されてい
る。命令キャッシュ14及びデータ・キャッシュ16の
ような高速度キャッシュは、プロセッサ10がメイン・
メモリから命令キャッシュ14及びデータ・キャッシュ
16へ前に転送されたデータ又は命令のサブセットに対
して比較的に速いアクセス時間を達成できるようにする
ものであり、従ってデータ処理システムの動作速度を改
善する。命令キャッシュ14は、更に、各サイクルにお
いて1以上の命令をフェッチして命令キャッシュ14か
ら実行するシーケンシャル・フェッチヤー17に接続さ
れている。シーケンシャル・フェッチヤー17は命令キ
ャッシュ14からフェッチされた命令を分岐処理ユニッ
ト(BPU)18及び命令キュー19へ転送し、これら
の命令が分岐か又は命令シーケンスかを判断する。分岐
命令は実行のためにBPU18により保持され、かつ命
令キュー19から取り消される。他方、命令シーケンス
はBPU18から取り消されると共に、プロセッサ10
内の他の実行回路による次の実行のために命令キュー1
9内に記憶される。前述のように、BPU18により実
行される分岐命令を条件命令又は無条件命令に分類する
ことができる。更に、条件分岐命令を決定済みか、又は
未決定かに分類することができる。条件分岐命令は、デ
ータ処理システム内の種々の条件に応答してセット若し
くはクリアされる条件レジスタ(CR)における特定の
ビット状態、及び/又はカウント・レジスタ(CTR)に
記憶した値に基づくことができる。
ッシュ14及びデータ・キャッシュ16に接続されてい
る。命令キャッシュ14及びデータ・キャッシュ16の
ような高速度キャッシュは、プロセッサ10がメイン・
メモリから命令キャッシュ14及びデータ・キャッシュ
16へ前に転送されたデータ又は命令のサブセットに対
して比較的に速いアクセス時間を達成できるようにする
ものであり、従ってデータ処理システムの動作速度を改
善する。命令キャッシュ14は、更に、各サイクルにお
いて1以上の命令をフェッチして命令キャッシュ14か
ら実行するシーケンシャル・フェッチヤー17に接続さ
れている。シーケンシャル・フェッチヤー17は命令キ
ャッシュ14からフェッチされた命令を分岐処理ユニッ
ト(BPU)18及び命令キュー19へ転送し、これら
の命令が分岐か又は命令シーケンスかを判断する。分岐
命令は実行のためにBPU18により保持され、かつ命
令キュー19から取り消される。他方、命令シーケンス
はBPU18から取り消されると共に、プロセッサ10
内の他の実行回路による次の実行のために命令キュー1
9内に記憶される。前述のように、BPU18により実
行される分岐命令を条件命令又は無条件命令に分類する
ことができる。更に、条件分岐命令を決定済みか、又は
未決定かに分類することができる。条件分岐命令は、デ
ータ処理システム内の種々の条件に応答してセット若し
くはクリアされる条件レジスタ(CR)における特定の
ビット状態、及び/又はカウント・レジスタ(CTR)に
記憶した値に基づくことができる。
【0013】この実施例において、プロセッサ10の実
行回路は、BPU18に加えて、固定少数点ユニット
(FXU)22、ロード・ストア・ユニット(LSU)
28、浮動少数点ユニット(FPU)30を含むシーケ
ンシャル命令用の複数の実行ユニットを備えている。コ
ンピュータの技術分野に習熟する者にとっては周知のよ
うに、各実行ユニット22、LSU28及びFPU30
は、典型的には、各プロセッサ・サイクルにおいて特定
形式の命令シーケンスにおける1以上の命令を実行す
る。例えば、FXU22は、指定された汎用レジスタ
(GPR)32又はGPRリネーム・バッファ33から
受け取ったソース・オペランドを用いて加算、減算、論
理積、論理和及び排他的論理和のような固定少数点算術
及び論理演算を実行する。FXU22は、固定少数点命
令を実行した後に、GPRリネーム・バッファ33に対
して命令の結果データを出力する。このGPRリネーム
・バッファ33は、命令を完了するまで、GPRリネー
ム・バッファ33から1以上の汎用レジスタ(GPR)
32へ結果データを転送することにより、結果データを
一時的に記憶する。逆に、FPU30は、典型的には、
浮動少数点レジスタ(FPR)36又はFPRリネーム
・バッファ37から受け取ったソース・オペランドによ
り浮動少数点掛け算及び割り算のような単及び倍精度算
術及び論理演算を実行する。FPU30は浮動少数点命
令の実行結果によるデータを選択したFPRリネーム・
バッファ37に出力し、このFPRリネーム・バッファ
37は、命令を完了するまで、FPRリネーム・バッフ
ァ37から選択した浮動少数点レジスタ(FPR)36
へ結果データを転送することにより、結果データを一時
的に記憶する。LSU28は、その名称が意味するよう
に、LSU28は、典型的には、メモリ(即ち、データ
・キャッシュ16又はメイン・メモリ)からのデータを
選択した汎用レジスタ(GPR)32若しくは浮動少数
点レジスタ(FPR)36にロードするか、又は汎用レ
ジスタ(GPR)32、GPRリネーム・バッファ3
3、浮動少数点レジスタ(FPR)36若しくはFPR
リネーム・バッファ37のうちから選択した一つからの
データをメモリに記憶する固定少数点命令及び浮動少数
点命令を実行する。
行回路は、BPU18に加えて、固定少数点ユニット
(FXU)22、ロード・ストア・ユニット(LSU)
28、浮動少数点ユニット(FPU)30を含むシーケ
ンシャル命令用の複数の実行ユニットを備えている。コ
ンピュータの技術分野に習熟する者にとっては周知のよ
うに、各実行ユニット22、LSU28及びFPU30
は、典型的には、各プロセッサ・サイクルにおいて特定
形式の命令シーケンスにおける1以上の命令を実行す
る。例えば、FXU22は、指定された汎用レジスタ
(GPR)32又はGPRリネーム・バッファ33から
受け取ったソース・オペランドを用いて加算、減算、論
理積、論理和及び排他的論理和のような固定少数点算術
及び論理演算を実行する。FXU22は、固定少数点命
令を実行した後に、GPRリネーム・バッファ33に対
して命令の結果データを出力する。このGPRリネーム
・バッファ33は、命令を完了するまで、GPRリネー
ム・バッファ33から1以上の汎用レジスタ(GPR)
32へ結果データを転送することにより、結果データを
一時的に記憶する。逆に、FPU30は、典型的には、
浮動少数点レジスタ(FPR)36又はFPRリネーム
・バッファ37から受け取ったソース・オペランドによ
り浮動少数点掛け算及び割り算のような単及び倍精度算
術及び論理演算を実行する。FPU30は浮動少数点命
令の実行結果によるデータを選択したFPRリネーム・
バッファ37に出力し、このFPRリネーム・バッファ
37は、命令を完了するまで、FPRリネーム・バッフ
ァ37から選択した浮動少数点レジスタ(FPR)36
へ結果データを転送することにより、結果データを一時
的に記憶する。LSU28は、その名称が意味するよう
に、LSU28は、典型的には、メモリ(即ち、データ
・キャッシュ16又はメイン・メモリ)からのデータを
選択した汎用レジスタ(GPR)32若しくは浮動少数
点レジスタ(FPR)36にロードするか、又は汎用レ
ジスタ(GPR)32、GPRリネーム・バッファ3
3、浮動少数点レジスタ(FPR)36若しくはFPR
リネーム・バッファ37のうちから選択した一つからの
データをメモリに記憶する固定少数点命令及び浮動少数
点命令を実行する。
【0014】プロセッサ10は、その投機的なアーキテ
クチャのパフォーマンスを更に改善するために、命令に
ついてのパイプライン処理実行及び順序通りでない実行
を共に採用する。従って、データ依存性を喪失しない限
り、実行ユニット22、LSU28及びFPU30によ
り、任意の順序で命令を便宜的に実行してもよい。更
に、命令はシーケンスのパイプライン段階により処理さ
れる。典型的な多くのハイ・パフォーマンス・プロセッ
サのように、各命令は、5つの異なるパイプライン段
階、即ちフェッチ、デコード/ディスパッチ、実行、終
了及び完了で処理される。
クチャのパフォーマンスを更に改善するために、命令に
ついてのパイプライン処理実行及び順序通りでない実行
を共に採用する。従って、データ依存性を喪失しない限
り、実行ユニット22、LSU28及びFPU30によ
り、任意の順序で命令を便宜的に実行してもよい。更
に、命令はシーケンスのパイプライン段階により処理さ
れる。典型的な多くのハイ・パフォーマンス・プロセッ
サのように、各命令は、5つの異なるパイプライン段
階、即ちフェッチ、デコード/ディスパッチ、実行、終
了及び完了で処理される。
【0015】フェッチ段階において、シーケンシャル・
フェッチヤー17は命令キャッシュ14から、1又は複
数のメモリ・アドレスに関連づけられた1又は複数の命
令を取り出す。以上で述べたように、命令キャッシュ1
4からフェッチした命令シーケンスはシーケンシャル・
フェッチヤー17により命令キュー19に記憶され、一
方分岐命令は命令シーケンス・ストリームから除去(フ
ォールド・アウト)される。前述のように、第2図〜第
6図を参照して以下で説明するように、分岐命令は、未
決定のカウント分岐命令を投機的に実行できるようにす
る機能を含むBPU18により実行される。
フェッチヤー17は命令キャッシュ14から、1又は複
数のメモリ・アドレスに関連づけられた1又は複数の命
令を取り出す。以上で述べたように、命令キャッシュ1
4からフェッチした命令シーケンスはシーケンシャル・
フェッチヤー17により命令キュー19に記憶され、一
方分岐命令は命令シーケンス・ストリームから除去(フ
ォールド・アウト)される。前述のように、第2図〜第
6図を参照して以下で説明するように、分岐命令は、未
決定のカウント分岐命令を投機的に実行できるようにす
る機能を含むBPU18により実行される。
【0016】デコード/ディスパッチ段階において、デ
ィスパッチ・ユニット20は命令キュー19からの1以
上の命令を実行ユニット22、LSU28及びFPU3
0へディスパッチする。更に、デコード/ディスパッチ
段階において、ディスパッチ・ユニット20はGPRリ
ネーム・バッファ33又はFPRリネーム・バッファ3
7内のリネーム・バッファを各ディスパッチされた命令
の結果データに割り付ける。この実施例によれば、更
に、ディスパッチ・ユニット20によりディスパッチさ
れた命令は、完了ユニット40内の完了バッファに転送
される。順序通りでない実行において、プロセッサ10
は固有の命令識別を利用してディスパッチされた命令の
プログラム順序をトラッキングしている。
ィスパッチ・ユニット20は命令キュー19からの1以
上の命令を実行ユニット22、LSU28及びFPU3
0へディスパッチする。更に、デコード/ディスパッチ
段階において、ディスパッチ・ユニット20はGPRリ
ネーム・バッファ33又はFPRリネーム・バッファ3
7内のリネーム・バッファを各ディスパッチされた命令
の結果データに割り付ける。この実施例によれば、更
に、ディスパッチ・ユニット20によりディスパッチさ
れた命令は、完了ユニット40内の完了バッファに転送
される。順序通りでない実行において、プロセッサ10
は固有の命令識別を利用してディスパッチされた命令の
プログラム順序をトラッキングしている。
【0017】実行段階において、実行ユニット22、L
SU28及びFPU30は、指示されたオペレーション
用のオペランド及び実行リソースが利用可能になると、
ディスパッチ・ユニット20から受け取った命令シーケ
ンスを便宜的に実行する。各実行ユニットのFXU2
2、LSU28及びFPU30は、好ましくは、オペラ
ンド又は実行リソースが利用可能になるまで、その実行
ユニットにディスパッチされた命令を記憶する予約ステ
ーションを備えている。命令の実行を終結した後に、実
行ユニットのFXU22、LSU28及びFPU30
は、命令形式に従ってGPRリネーム・バッファ33か
又はFPRリネーム・バッファ37における命令のデー
タ結果を記憶する。次いで、実行ユニットのFXU2
2、LSU28及びFPU30は、完了ユニット40の
完了バッファ内に記憶された命令の実行を終了したこと
を完了ユニット40に通知する。最後に、完了ユニット
40がプログラム順序により、GPRリネーム・バッフ
ァ33及びFPRリネーム・バッファ37から汎用レジ
スタ(GPR)32及び浮動少数点レジスタ(FPR)
36に命令のデータ結果をそれぞれ転送することによ
り、命令を完了する。
SU28及びFPU30は、指示されたオペレーション
用のオペランド及び実行リソースが利用可能になると、
ディスパッチ・ユニット20から受け取った命令シーケ
ンスを便宜的に実行する。各実行ユニットのFXU2
2、LSU28及びFPU30は、好ましくは、オペラ
ンド又は実行リソースが利用可能になるまで、その実行
ユニットにディスパッチされた命令を記憶する予約ステ
ーションを備えている。命令の実行を終結した後に、実
行ユニットのFXU22、LSU28及びFPU30
は、命令形式に従ってGPRリネーム・バッファ33か
又はFPRリネーム・バッファ37における命令のデー
タ結果を記憶する。次いで、実行ユニットのFXU2
2、LSU28及びFPU30は、完了ユニット40の
完了バッファ内に記憶された命令の実行を終了したこと
を完了ユニット40に通知する。最後に、完了ユニット
40がプログラム順序により、GPRリネーム・バッフ
ァ33及びFPRリネーム・バッファ37から汎用レジ
スタ(GPR)32及び浮動少数点レジスタ(FPR)
36に命令のデータ結果をそれぞれ転送することによ
り、命令を完了する。
【0018】ここで図2を参照すると、プロセッサ10
におけるBPU18の更に詳細なブロック図が示されて
いる。図示のように、BPU18はデコード・ロジック
50を有する。このデコード・ロジック50は、BPU
18が逐次フェッチヤー17から受け取った各命令をデ
コードして、命令が分岐命令であるか否かを判断し、イ
エスであれば、どのような形式の分岐命令かを判断す
る。更に、BPU18は制御ロジック52を有する。こ
の制御ロジック52は、分岐をするのであれば目標実行
パスの有効アドレス(EA)を計算し、分岐をしないの
であれば逐次実行パスの有効アドレス(EA)を計算す
ることにより、デコード・ロジック50が識別した各分
岐命令を実行する。図示のように、制御ロジック52は
条件レジスタ(CR)56、カウント・レジスタ(CT
R)60、及び分岐履歴テーブル(BHT)54に接続
されている。条件レジスタ(CR)56は32ビット・
レジスタを備えており、これにはデータ処理システム内
の種々の条件に応答してセット又はリセットされるいく
つかのビット・フィールドが含まれている。従って、制
御ロジック52は、条件レジスタ(CR)56を参照し
て条件レジスタ(CR)56内のビット・フィールドを
セット又はクリアする事象の発生に従って、各分岐条件
命令を決定する。カウント・レジスタ(CTR)60は分
岐インデックス値を記憶する32ビット・レジスタを備
えており、この分岐インデックス値はカウント分岐命令
を決定するために制御ロジック52により参照される。
分岐履歴テーブル(BHT)54は、分岐命令により指
定された分岐をすべきか、又はすべきでないという予測
に関連して、最近に実行された分岐命令のアドレスを記
憶する。制御ロジック52は分岐履歴テーブル(BH
T)54を参照して、条件レジスタ(CR)56内のビ
ット・フィールドの状態に従う未決定の条件分岐命令を
投機的に実行する。
におけるBPU18の更に詳細なブロック図が示されて
いる。図示のように、BPU18はデコード・ロジック
50を有する。このデコード・ロジック50は、BPU
18が逐次フェッチヤー17から受け取った各命令をデ
コードして、命令が分岐命令であるか否かを判断し、イ
エスであれば、どのような形式の分岐命令かを判断す
る。更に、BPU18は制御ロジック52を有する。こ
の制御ロジック52は、分岐をするのであれば目標実行
パスの有効アドレス(EA)を計算し、分岐をしないの
であれば逐次実行パスの有効アドレス(EA)を計算す
ることにより、デコード・ロジック50が識別した各分
岐命令を実行する。図示のように、制御ロジック52は
条件レジスタ(CR)56、カウント・レジスタ(CT
R)60、及び分岐履歴テーブル(BHT)54に接続
されている。条件レジスタ(CR)56は32ビット・
レジスタを備えており、これにはデータ処理システム内
の種々の条件に応答してセット又はリセットされるいく
つかのビット・フィールドが含まれている。従って、制
御ロジック52は、条件レジスタ(CR)56を参照し
て条件レジスタ(CR)56内のビット・フィールドを
セット又はクリアする事象の発生に従って、各分岐条件
命令を決定する。カウント・レジスタ(CTR)60は分
岐インデックス値を記憶する32ビット・レジスタを備
えており、この分岐インデックス値はカウント分岐命令
を決定するために制御ロジック52により参照される。
分岐履歴テーブル(BHT)54は、分岐命令により指
定された分岐をすべきか、又はすべきでないという予測
に関連して、最近に実行された分岐命令のアドレスを記
憶する。制御ロジック52は分岐履歴テーブル(BH
T)54を参照して、条件レジスタ(CR)56内のビ
ット・フィールドの状態に従う未決定の条件分岐命令を
投機的に実行する。
【0019】図2を引き続いて参照すると、BPU18
は更に加算器62及びマルチプレクサ64を備えてお
り、これらはカウント分岐命令を実行するために用いら
れる。図示のように、マルチプレクサ64は、−1(FF
FF FFFFh)に接続された第1の入力、及び「特殊用レジ
スタに移動」(mtspr)命令の実行に応答して、32ビ
ット分岐インデックス値をカウント・レジスタ(CTR)
60にロードすることを指定する第2の入力を有する。
制御ロジック52から制御信号を受け取ると、マルチプ
レクサ64の選択入力に存在する値、及びカウント・レ
ジスタ(CTR)60の値は、加算器62により加算され
て、カウント・レジスタ(CTR)60に記憶される。従
って、カウント・レジスタ(CTR)60をクリアするこ
とにより、及びマルチプレクサ64の分岐インデックス
入力を選択することにより、制御ロジック52はカウン
ト・レジスタ(CTR)60に32ビット分岐インデック
ス値をロードすることができる。その代わりに、マルチ
プレクサ64の−1入力を選択することにより、制御ロ
ジック52はカウント・レジスタ(CTR)60内に記憶
した分岐インデックス値を減少させてもよい。
は更に加算器62及びマルチプレクサ64を備えてお
り、これらはカウント分岐命令を実行するために用いら
れる。図示のように、マルチプレクサ64は、−1(FF
FF FFFFh)に接続された第1の入力、及び「特殊用レジ
スタに移動」(mtspr)命令の実行に応答して、32ビ
ット分岐インデックス値をカウント・レジスタ(CTR)
60にロードすることを指定する第2の入力を有する。
制御ロジック52から制御信号を受け取ると、マルチプ
レクサ64の選択入力に存在する値、及びカウント・レ
ジスタ(CTR)60の値は、加算器62により加算され
て、カウント・レジスタ(CTR)60に記憶される。従
って、カウント・レジスタ(CTR)60をクリアするこ
とにより、及びマルチプレクサ64の分岐インデックス
入力を選択することにより、制御ロジック52はカウン
ト・レジスタ(CTR)60に32ビット分岐インデック
ス値をロードすることができる。その代わりに、マルチ
プレクサ64の−1入力を選択することにより、制御ロ
ジック52はカウント・レジスタ(CTR)60内に記憶
した分岐インデックス値を減少させてもよい。
【0020】ここで図3を参照すると、参照番号70に
より、プロセッサ10の命令セット内のカウント分岐命
令の実施例が示されている。図示のように、カウント命
分岐令70は多数のフィールドを有する32ビット命令
であり、これらのフィールドには、オペレーション・コ
ード・フィールド72、分岐オプション(BO)フィー
ルド74、分岐条件(BC)フィールド76、アドレス
計算フィールド78、及びリンク・フィールド80が含
まれる。オペレーション・コード・フィールド72はカ
ウント分岐命令70の命令形式を固有に識別する。分岐
オプション(BO)フィールド74は、指定された分岐
インデックス値の検出に応答して、分岐をするのか、し
ないのかを指定する。更に、分岐オプション(BO)フ
ィールド74は、その分岐が分岐条件(BC)フィール
ド76で指定された条件レジスタ(CR)56のビット
・フィールドに従うのか否かを表している。カウント分
岐命令とは、指示された分岐が条件レジスタ(CR)5
6内の選択したビット・フィールドの状態に依存してい
るか、いないかに拘わらず、指示された分岐がカウント
・レジスタ(CTR)60内の分岐インデックス値に依存
するということを指定したBO符号を有する分岐命令の
ことである。カウント分岐命令70を再び参照すると、
アドレス計算フィールド78は、カウント分岐命令70
により表された分岐をするときに、実行を進める目標ア
ドレスを指定する。最後に、リンク・フィールド60
は、カウント分岐命令70の実行に応答して、フォール
・スルー(逐次的な次の)アドレスをリンク・レジスタ
にロードするのか否かを表している。
より、プロセッサ10の命令セット内のカウント分岐命
令の実施例が示されている。図示のように、カウント命
分岐令70は多数のフィールドを有する32ビット命令
であり、これらのフィールドには、オペレーション・コ
ード・フィールド72、分岐オプション(BO)フィー
ルド74、分岐条件(BC)フィールド76、アドレス
計算フィールド78、及びリンク・フィールド80が含
まれる。オペレーション・コード・フィールド72はカ
ウント分岐命令70の命令形式を固有に識別する。分岐
オプション(BO)フィールド74は、指定された分岐
インデックス値の検出に応答して、分岐をするのか、し
ないのかを指定する。更に、分岐オプション(BO)フ
ィールド74は、その分岐が分岐条件(BC)フィール
ド76で指定された条件レジスタ(CR)56のビット
・フィールドに従うのか否かを表している。カウント分
岐命令とは、指示された分岐が条件レジスタ(CR)5
6内の選択したビット・フィールドの状態に依存してい
るか、いないかに拘わらず、指示された分岐がカウント
・レジスタ(CTR)60内の分岐インデックス値に依存
するということを指定したBO符号を有する分岐命令の
ことである。カウント分岐命令70を再び参照すると、
アドレス計算フィールド78は、カウント分岐命令70
により表された分岐をするときに、実行を進める目標ア
ドレスを指定する。最後に、リンク・フィールド60
は、カウント分岐命令70の実行に応答して、フォール
・スルー(逐次的な次の)アドレスをリンク・レジスタ
にロードするのか否かを表している。
【0021】図4を参照すると、プログラムにおけるカ
ウント分岐命令の典型的な使用を説明する命令シーケン
ス例が示されている。プログラム順序によると、命令シ
ーケンス100はロード命令102、及びmtspr命令1
04により開始し、これらは汎用レジスタ(GPR)3
2内のレジスタ26から特殊用レジスタ(SPR)9、
即ちカウント・レジスタ(CTR)60に分岐インデック
ス値をロードする。次に、命令シーケンス100には、
加算命令106及び108と、カウント分岐命令110
とを備えた命令ループが含まれている。図示されている
ように、カウント分岐命令110は、分岐すると決定す
れば実行し続けることになる目標アドレスとして、加算
命令106のアドレスを指定することにより、命令ルー
プを閉じている。最後に、命令シーケンス100にはス
トア命令112が含まれており、この命令は、カウント
分岐命令110が分岐をしないと決定するのであれば、
実行されるシーケンス命令である。
ウント分岐命令の典型的な使用を説明する命令シーケン
ス例が示されている。プログラム順序によると、命令シ
ーケンス100はロード命令102、及びmtspr命令1
04により開始し、これらは汎用レジスタ(GPR)3
2内のレジスタ26から特殊用レジスタ(SPR)9、
即ちカウント・レジスタ(CTR)60に分岐インデック
ス値をロードする。次に、命令シーケンス100には、
加算命令106及び108と、カウント分岐命令110
とを備えた命令ループが含まれている。図示されている
ように、カウント分岐命令110は、分岐すると決定す
れば実行し続けることになる目標アドレスとして、加算
命令106のアドレスを指定することにより、命令ルー
プを閉じている。最後に、命令シーケンス100にはス
トア命令112が含まれており、この命令は、カウント
分岐命令110が分岐をしないと決定するのであれば、
実行されるシーケンス命令である。
【0022】多数の異なる実行シナリオにより、制御ロ
ジック52がレディーであって、カウント分岐命令11
0を実行するときは、カウント分岐命令110が依存す
る分岐インデックス値をカウント・レジスタ(CTR)6
0にストアすることはできない。例えば、mtspr命令1
04は、ロード命令102により要求された分岐インデ
ックス値がデータ・キャッシュ16におけるキャッシュ
・ミスに応答してメイン・メモリから戻されるまで、ス
トールする恐れがある。その代りに、ロード命令102
の実行は、LSU28内に利用可能な実行リソースがな
いために、単純に遅延されることがある。このような場
合には、分岐インデックス値がカウント・レジスタ(CT
R)60から得られるまで、カウント分岐命令110に
よって指定された分岐を決定することができない。図5
を参照して以下で詳細に説明するように、カウント分岐
命令が決定されるまでストールする通常のプロセッサに
対して、プロセッサ10は、プロセッサ・パフォーマン
スを高めるために未決定のカウント分岐命令(及び関連
の命令ループ)を投機的に実行する。
ジック52がレディーであって、カウント分岐命令11
0を実行するときは、カウント分岐命令110が依存す
る分岐インデックス値をカウント・レジスタ(CTR)6
0にストアすることはできない。例えば、mtspr命令1
04は、ロード命令102により要求された分岐インデ
ックス値がデータ・キャッシュ16におけるキャッシュ
・ミスに応答してメイン・メモリから戻されるまで、ス
トールする恐れがある。その代りに、ロード命令102
の実行は、LSU28内に利用可能な実行リソースがな
いために、単純に遅延されることがある。このような場
合には、分岐インデックス値がカウント・レジスタ(CT
R)60から得られるまで、カウント分岐命令110に
よって指定された分岐を決定することができない。図5
を参照して以下で詳細に説明するように、カウント分岐
命令が決定されるまでストールする通常のプロセッサに
対して、プロセッサ10は、プロセッサ・パフォーマン
スを高めるために未決定のカウント分岐命令(及び関連
の命令ループ)を投機的に実行する。
【0023】ここで図5を参照すると、BPU18内の
カウント分岐命令を投機的に実行する方法の実施例の論
理的なフローチャートが示されている。図5に示した論
理的なフローチャートは多数の逐次的なステップを記載
しているが、当該技術分野に習熟する者は、記載したい
くつかのステップを平行して実行してもよいことが以下
の説明から明らかである。図4に示す命令シーケンス例
を参照して、カウント分岐命令を投機的に実行する本発
明の方法を説明することにより、記載のステップを更に
詳細に説明する。
カウント分岐命令を投機的に実行する方法の実施例の論
理的なフローチャートが示されている。図5に示した論
理的なフローチャートは多数の逐次的なステップを記載
しているが、当該技術分野に習熟する者は、記載したい
くつかのステップを平行して実行してもよいことが以下
の説明から明らかである。図4に示す命令シーケンス例
を参照して、カウント分岐命令を投機的に実行する本発
明の方法を説明することにより、記載のステップを更に
詳細に説明する。
【0024】図示のように、処理はブロック200から
開始し、その後、ブロック202及び204に進む。ブ
ロック202及び204は、シーケンシャル・フェッチ
ヤー17が命令シーケンスの次のセット、例えば命令キ
ャッシュ14からロード命令102及びmtspr命令10
4を検索して、フェッチされた命令をBPU18及び命
令キュー19に転送する。図2に示すように、BPU1
8内のデコード・ロジック50は各サイクルにおいてシ
ーケンシャル・フェッチヤー17から1以上の命令を受
け取る。デコード・ロジック50は、命令の受け取りに
応答して、図5のブロック206に示すように命令をデ
コードする。次に、プロセスはブロック206からブロ
ック208に進み、命令が分岐命令を含むか否かを判断
する。ブロック208において、デコード・ロジック5
0によりデコードされた命令が非分岐インデックスであ
るとの判断に応答して、命令はデコード・ロジック50
により単に無視される。しかし、ブロック210におい
て、ディスパッチ・ユニット20により、命令はカウン
ト・レジスタ(CTR)60に選択した値をロードするmts
pr命令であるか否かを判断する。ノーのときは、処理が
ページ・コネクタAを介して、FXU22、LSU28
及びFPU30のうちの一つによる通常の命令実行を表
すブロック212に進む。従って、例えば、図4を参照
すると、ロード命令102は、BPU18により無視さ
れるが、ディスパッチ・ユニット20によりディスパッ
チされて実行される。同様に、加算命令106及び10
8はBPU18により無視されるが、FXU22にディ
スパッチされて実行される。その後、処理はページ・コ
ネクタBを介してブロック202に戻る。
開始し、その後、ブロック202及び204に進む。ブ
ロック202及び204は、シーケンシャル・フェッチ
ヤー17が命令シーケンスの次のセット、例えば命令キ
ャッシュ14からロード命令102及びmtspr命令10
4を検索して、フェッチされた命令をBPU18及び命
令キュー19に転送する。図2に示すように、BPU1
8内のデコード・ロジック50は各サイクルにおいてシ
ーケンシャル・フェッチヤー17から1以上の命令を受
け取る。デコード・ロジック50は、命令の受け取りに
応答して、図5のブロック206に示すように命令をデ
コードする。次に、プロセスはブロック206からブロ
ック208に進み、命令が分岐命令を含むか否かを判断
する。ブロック208において、デコード・ロジック5
0によりデコードされた命令が非分岐インデックスであ
るとの判断に応答して、命令はデコード・ロジック50
により単に無視される。しかし、ブロック210におい
て、ディスパッチ・ユニット20により、命令はカウン
ト・レジスタ(CTR)60に選択した値をロードするmts
pr命令であるか否かを判断する。ノーのときは、処理が
ページ・コネクタAを介して、FXU22、LSU28
及びFPU30のうちの一つによる通常の命令実行を表
すブロック212に進む。従って、例えば、図4を参照
すると、ロード命令102は、BPU18により無視さ
れるが、ディスパッチ・ユニット20によりディスパッ
チされて実行される。同様に、加算命令106及び10
8はBPU18により無視されるが、FXU22にディ
スパッチされて実行される。その後、処理はページ・コ
ネクタBを介してブロック202に戻る。
【0025】ブロック210に戻り、命令はカウント・
レジスタ(CTR)60に選択した値をロードするmtspr命
令であるという判断をしたときは、更にブロック214
において、カウント・レジスタ(CTR)60を目標とし
ている他のmtspr命令がディスパッチされ、未完了であ
るか否かを判断をする。例えば、mtspr命令用に完了ユ
ニット40内の完了バッファを検索することにより、ブ
ロック214に示した判断をすることができる。未完了
のmtspr命令がカウント・レジスタ(CTR)60を目標と
しているとの判断に応答して、処理はブロック216に
進む。ブロック216は、前にディスパッチしたmtspr
命令が完了するまで、ディスパッチ・ユニット20がカ
ウント・レジスタ(CTR)60内の分岐インデックス値
が重ね書きされないように、命令キュー19にデコード
したmtspr命令を保持することを表している。次いで、
処理はページ・コネクタBを介してブロック202に戻
る。
レジスタ(CTR)60に選択した値をロードするmtspr命
令であるという判断をしたときは、更にブロック214
において、カウント・レジスタ(CTR)60を目標とし
ている他のmtspr命令がディスパッチされ、未完了であ
るか否かを判断をする。例えば、mtspr命令用に完了ユ
ニット40内の完了バッファを検索することにより、ブ
ロック214に示した判断をすることができる。未完了
のmtspr命令がカウント・レジスタ(CTR)60を目標と
しているとの判断に応答して、処理はブロック216に
進む。ブロック216は、前にディスパッチしたmtspr
命令が完了するまで、ディスパッチ・ユニット20がカ
ウント・レジスタ(CTR)60内の分岐インデックス値
が重ね書きされないように、命令キュー19にデコード
したmtspr命令を保持することを表している。次いで、
処理はページ・コネクタBを介してブロック202に戻
る。
【0026】しかし、ブロック214において、カウン
ト・レジスタ(CTR)60を目標としている他のmtspr命
令はないという判断に応答して、処理はブロック218
に進む。ブロック218はディスパッチ・ユニット20
がカウント・レジスタ(CTR)60をクリアするように
制御ロジック52に通知することを表している。カウン
ト・レジスタ(CTR)60のクリアは他の2つの目的に
利用される。プログラム順序でmtspr命令及びカウント
分岐命令を実行する場合に(分岐が非投機的に実行され
る場合に)、カウント・レジスタ(CTR)60のクリア
は、カウント分岐命令が依存している分岐インデックス
値を、カウント・レジスタ(CTR)60の現在値と分岐
インデックス値とを加算する加算器62を介してカウン
ト・レジスタ(CTR)60にロードさせる。その代りと
して、BPU18により未決定のカウント分岐命令がデ
コードされる場合に、このBPU18の実施例は、常に
条件分岐をすると想定して、関連する命令ループの投機
的な実行を可能にする。従って、カウント・レジスタ
(CTR)60の値がカウント分岐命令により指定された
分岐オプションを満足させるか否かを判断する前に、制
御ロジック52はカウント・レジスタ(CTR)60を減
算させるので、mtspr命令セットの検出に応答して、カ
ウント・レジスタ(CTR)60のクリアにより、カウン
ト・レジスタ(CTR)60における値を投機的に実行可
能な命令ループの最大繰返し回数にセットする。更に、
カウント分岐命令を投機的に実行する前に、カウント・
レジスタ(CTR)60をクリアすることにより、カウン
ト・レジスタ(CTR)60内の値は、カウント分岐命令
の繰返し回数と、カウント分岐命令を決定する前に、投
機的に実行する関連の命令ループとの2の補数表示を指
定する。ブロック218を再び参照すると、処理はブロ
ック218からページ・コネクタAを介してブロック2
12に進む。ブロック212は、実行リソース及びオペ
ランドが利用可能になったときに、mtspr命令を実行す
ることを表している。
ト・レジスタ(CTR)60を目標としている他のmtspr命
令はないという判断に応答して、処理はブロック218
に進む。ブロック218はディスパッチ・ユニット20
がカウント・レジスタ(CTR)60をクリアするように
制御ロジック52に通知することを表している。カウン
ト・レジスタ(CTR)60のクリアは他の2つの目的に
利用される。プログラム順序でmtspr命令及びカウント
分岐命令を実行する場合に(分岐が非投機的に実行され
る場合に)、カウント・レジスタ(CTR)60のクリア
は、カウント分岐命令が依存している分岐インデックス
値を、カウント・レジスタ(CTR)60の現在値と分岐
インデックス値とを加算する加算器62を介してカウン
ト・レジスタ(CTR)60にロードさせる。その代りと
して、BPU18により未決定のカウント分岐命令がデ
コードされる場合に、このBPU18の実施例は、常に
条件分岐をすると想定して、関連する命令ループの投機
的な実行を可能にする。従って、カウント・レジスタ
(CTR)60の値がカウント分岐命令により指定された
分岐オプションを満足させるか否かを判断する前に、制
御ロジック52はカウント・レジスタ(CTR)60を減
算させるので、mtspr命令セットの検出に応答して、カ
ウント・レジスタ(CTR)60のクリアにより、カウン
ト・レジスタ(CTR)60における値を投機的に実行可
能な命令ループの最大繰返し回数にセットする。更に、
カウント分岐命令を投機的に実行する前に、カウント・
レジスタ(CTR)60をクリアすることにより、カウン
ト・レジスタ(CTR)60内の値は、カウント分岐命令
の繰返し回数と、カウント分岐命令を決定する前に、投
機的に実行する関連の命令ループとの2の補数表示を指
定する。ブロック218を再び参照すると、処理はブロ
ック218からページ・コネクタAを介してブロック2
12に進む。ブロック212は、実行リソース及びオペ
ランドが利用可能になったときに、mtspr命令を実行す
ることを表している。
【0027】ここで、図6を参照すると、mtspr命令の
実行に応答してカウント・レジスタ(CTR)60を更新
する方法のフローチャートが示されている。図示のよう
に、BPU18が分岐インデックス値を受け取ることに
応答して、ブロック250から処理が開始される。その
後、処理はブロック252に進む。ブロック252は、
制御ロジック52が分岐インデックス値をカウント・レ
ジスタ(CTR)60に記憶されている2の補数値に加算
することを表している。次に、ブロック254におい
て、カウント・レジスタ(CTR)60の値が0より大き
いか又は等しいかを判断する。この値が0より大きい又
は等しく、カウント分岐命令が実行されなかった、又は
カウント分岐命令が分岐インデックス値により指定され
た回数より少ない回数について投機的に実行されたこと
を示しているときは、処理はブロック260に進み、終
了する。いずれの場合も、カウント・レジスタ(CTR)
60の値が0より大きいときは、投機的な分岐オプショ
ンが満足されるまで、図5に示す方法に従って命令ルー
プの非投機的な実行が続く。
実行に応答してカウント・レジスタ(CTR)60を更新
する方法のフローチャートが示されている。図示のよう
に、BPU18が分岐インデックス値を受け取ることに
応答して、ブロック250から処理が開始される。その
後、処理はブロック252に進む。ブロック252は、
制御ロジック52が分岐インデックス値をカウント・レ
ジスタ(CTR)60に記憶されている2の補数値に加算
することを表している。次に、ブロック254におい
て、カウント・レジスタ(CTR)60の値が0より大き
いか又は等しいかを判断する。この値が0より大きい又
は等しく、カウント分岐命令が実行されなかった、又は
カウント分岐命令が分岐インデックス値により指定され
た回数より少ない回数について投機的に実行されたこと
を示しているときは、処理はブロック260に進み、終
了する。いずれの場合も、カウント・レジスタ(CTR)
60の値が0より大きいときは、投機的な分岐オプショ
ンが満足されるまで、図5に示す方法に従って命令ルー
プの非投機的な実行が続く。
【0028】ブロック254に戻り、カウント・レジス
タ(CTR)60に記憶された値が0より小さく、カウン
ト分岐命令の少なくとも一回の繰返しが誤って予測され
たことを示しているときは、処理はブロック256に進
む。ブロック256は、BPU18が命令キュー19、
FXU22、LSU28、FPU30、及び完了ユニッ
ト40内の完了バッファによる誤予測の命令ループの繰
返し内の命令を取り消すことを表している。更に、誤予
測の命令ループの繰返し内で投機的に実行された命令の
データ結果は、GPRリネーム・バッファ33及びFP
Rリネーム・バッファ37が無視するものとなる。次
に、処理は、ブロック258に進む。ブロック258
は、制御ロジック52がカウント・レジスタ(CTR)6
0をクリアして、ブロック260で終了する。
タ(CTR)60に記憶された値が0より小さく、カウン
ト分岐命令の少なくとも一回の繰返しが誤って予測され
たことを示しているときは、処理はブロック256に進
む。ブロック256は、BPU18が命令キュー19、
FXU22、LSU28、FPU30、及び完了ユニッ
ト40内の完了バッファによる誤予測の命令ループの繰
返し内の命令を取り消すことを表している。更に、誤予
測の命令ループの繰返し内で投機的に実行された命令の
データ結果は、GPRリネーム・バッファ33及びFP
Rリネーム・バッファ37が無視するものとなる。次
に、処理は、ブロック258に進む。ブロック258
は、制御ロジック52がカウント・レジスタ(CTR)6
0をクリアして、ブロック260で終了する。
【0029】図5のブロック208を再び参照して、デ
コード・ロジック50によりデコードされた命令が分岐
命令であると判断されたときは、ブロック230に示す
ように、更に分岐命令がカウント分岐命令であるか否か
を判断する。ノーのときは、処理はブロック230から
ブロック212に進む。ブロック212は分岐命令を通
常的に実行することを表している。従って、例えば、デ
コード・ロジック50から無条件分岐命令を受け取った
ことに応答して、制御ロジック52は単に分岐命令によ
り指示された目標命令パスの有効アドレス(EA)を計
算して、有効アドレス(EA)を命令キャッシュ14に
送信する。しかし、制御ロジック52は、条件レジスタ
(CR)56におけるビット状態に依存する条件分岐命
令を受け取ったことに応答して、まず条件レジスタ(C
R)56における指定されたビット・フィールドを調べ
ることにより、分岐を決定しようとする。条件分岐命令
が依存するCRビット・フィールドが利用可能でないと
きは、制御ロジック52が分岐履歴テーブル(BHT)
54を利用して指定された分岐を予測する。その後、制
御ロジック52は、目標の投機的実行の有効アドレス
(EA)を計算して、命令キャッシュ14の有効アドレ
ス(EA)に送信する。
コード・ロジック50によりデコードされた命令が分岐
命令であると判断されたときは、ブロック230に示す
ように、更に分岐命令がカウント分岐命令であるか否か
を判断する。ノーのときは、処理はブロック230から
ブロック212に進む。ブロック212は分岐命令を通
常的に実行することを表している。従って、例えば、デ
コード・ロジック50から無条件分岐命令を受け取った
ことに応答して、制御ロジック52は単に分岐命令によ
り指示された目標命令パスの有効アドレス(EA)を計
算して、有効アドレス(EA)を命令キャッシュ14に
送信する。しかし、制御ロジック52は、条件レジスタ
(CR)56におけるビット状態に依存する条件分岐命
令を受け取ったことに応答して、まず条件レジスタ(C
R)56における指定されたビット・フィールドを調べ
ることにより、分岐を決定しようとする。条件分岐命令
が依存するCRビット・フィールドが利用可能でないと
きは、制御ロジック52が分岐履歴テーブル(BHT)
54を利用して指定された分岐を予測する。その後、制
御ロジック52は、目標の投機的実行の有効アドレス
(EA)を計算して、命令キャッシュ14の有効アドレ
ス(EA)に送信する。
【0030】分岐230に戻り、フェッチ命令がカウン
ト分岐命令であること、例えばカウント分岐命令110
であることをデコード・ロジック50が判断したとき
は、処理がブロック232に進む。このブロック232
は、制御ロジック52がカウント・レジスタ(CTR)6
0に記憶した値を減少させることを表している。次に、
ブロック234において、カウント・レジスタ(CTR)
60に記憶した値がカウント分岐命令のBOフィールド
74に符号化された分岐オプションを満足させるか否か
(例えば、分岐インデックス値が0か否か)を判断す
る。カウント分岐命令の分岐オプションが満足されない
ときは、処理がブロック236に進む。ブロック236
は命令ループの他の繰り返しを実行することを表してい
る。次に、処理は前述したようにページ・コネクタBを
介してブロック202に戻る。しかし、ブロック234
において、カウント・レジスタ(CTR)60に記憶され
ている分岐インデックス値が分岐オプションを満足させ
ると判断されたときは、処理がブロック240に進む。
ブロック240はカウント分岐命令を含む命令ループの
実行を終了させる。
ト分岐命令であること、例えばカウント分岐命令110
であることをデコード・ロジック50が判断したとき
は、処理がブロック232に進む。このブロック232
は、制御ロジック52がカウント・レジスタ(CTR)6
0に記憶した値を減少させることを表している。次に、
ブロック234において、カウント・レジスタ(CTR)
60に記憶した値がカウント分岐命令のBOフィールド
74に符号化された分岐オプションを満足させるか否か
(例えば、分岐インデックス値が0か否か)を判断す
る。カウント分岐命令の分岐オプションが満足されない
ときは、処理がブロック236に進む。ブロック236
は命令ループの他の繰り返しを実行することを表してい
る。次に、処理は前述したようにページ・コネクタBを
介してブロック202に戻る。しかし、ブロック234
において、カウント・レジスタ(CTR)60に記憶され
ている分岐インデックス値が分岐オプションを満足させ
ると判断されたときは、処理がブロック240に進む。
ブロック240はカウント分岐命令を含む命令ループの
実行を終了させる。
【0031】カウント分岐命令により閉じられた命令ル
ープを投機的に実行するプロセッサ及び方法を説明し
た。このプロセッサ及び方法は未決定のカウント分岐命
令に応答してストールした従来のプロセッサよりもパフ
ォーマンスが高い。更に、このプロセッサ及び方法は、
誤予測の命令ループの繰り返しを実行することから立ち
直る効果的な機構を提供する。カウント分岐命令により
閉じられた命令ループの実行を参照して、このプロセッ
サ及び方法を説明したが、当該技術分野に習熟する者
は、開示した実施例を参照して、ループ繰り返しを制御
する投機的な命令構成を含まないアーキテクチャに説明
した概念を拡張できることを理解すべきである。
ープを投機的に実行するプロセッサ及び方法を説明し
た。このプロセッサ及び方法は未決定のカウント分岐命
令に応答してストールした従来のプロセッサよりもパフ
ォーマンスが高い。更に、このプロセッサ及び方法は、
誤予測の命令ループの繰り返しを実行することから立ち
直る効果的な機構を提供する。カウント分岐命令により
閉じられた命令ループの実行を参照して、このプロセッ
サ及び方法を説明したが、当該技術分野に習熟する者
は、開示した実施例を参照して、ループ繰り返しを制御
する投機的な命令構成を含まないアーキテクチャに説明
した概念を拡張できることを理解すべきである。
【0032】実施例を詳細に示し、かつ説明したが、当
該技術分野に習熟する者は、本発明の精神及び範囲から
逸脱することなく、形式及び細部において種々の変更を
行い得ることを理解すべきである。
該技術分野に習熟する者は、本発明の精神及び範囲から
逸脱することなく、形式及び細部において種々の変更を
行い得ることを理解すべきである。
【図1】カウント分岐命令を投機的に実行する機能を含
むプロセッサの実施例を示すブロック図である。
むプロセッサの実施例を示すブロック図である。
【図2】図1に示したプロセッサ内の分岐処理ユニット
(BPU)の更に詳細なブロック図である。
(BPU)の更に詳細なブロック図である。
【図3】カウント分岐命令の実施例を説明するビット・
フィールド図である。
フィールド図である。
【図4】カウント分岐命令を含み、図5に示す方法によ
り投機的に実行し得る命令シーケンス例を説明する図で
ある。
り投機的に実行し得る命令シーケンス例を説明する図で
ある。
【図5】カウント分岐命令を含む命令ループを投機的に
実行する方法の実施例のフローチャートである。
実行する方法の実施例のフローチャートである。
【図6】分岐インデックスの判断に応答して図2に示す
カウント・レジスタ(CRT)内の値を更新する方法の
フローチャートである。
カウント・レジスタ(CRT)内の値を更新する方法の
フローチャートである。
10 プロセッサ 12 BIU 14 命令キャッシュ 16 データ・キャッシュ 17 逐次フェッチヤー 18 BPU 19 命令キュー 20 ディスパッチ・ユニット 22 FXU 28 LSU 30 FPU 32 汎用レジスタ(GPR) 33 GPRリネーム・バッファ 36 浮動少数点レジスタ(FPR) 37 FPRリネーム・バッファ 40 完了ユニット 50 デコード・ロジック 52 制御ロジック 56 条件レジスタ(CR) 60 カウント・レジスタ(CTR) 62 加算器
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 昭62−159231(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/38
Claims (3)
- 【請求項1】プロセッサ内で命令ループを投機的に実行
する方法であって、 前記命令ループの実行を開始して、実行された前記命令
ループの繰り返しをそれぞれカウントするステップと、 その後に、前記命令ループが実行されるべき実際の繰り
返し回数を判断するステップと、 前記判断に応答して、前記実際の繰り返し回数と実行さ
れた前記命令ループの繰り返しとの間の差を判断するス
テップと、 前記差が0より大きいとの判断に応答して、前記差に等
しい付加的な繰り返し回数につき前記命令ループを実行
するステップとを含む方法。 - 【請求項2】複数の命令を実行する1以上の実行ユニッ
トであって、実行すべき前記命令ループの実際の繰り返
し回数が未知である間に、命令ループの実行を開始する
前記実行ユニットと、 前記実行された前記命令ループの繰り返し回数をカウン
トする手段と、 前記実際の繰り返し回数の判断に応答して、前記実際の
繰り返し回数と前記実行された繰り返し回数との間の差
を判断する手段とを含み、前記実行ユニットは前記差が
0又は0より大であるとの判断に応答して前記差に等し
い付加的な繰り返し回数につき前記命令ループを実行す
るプロセッサ。 - 【請求項3】複数の命令を記憶するメモリと、 前記メモリから命令ループ内の複数の命令を実行のため
にフェッチするフェッチヤーと、 複数の命令を実行する1以上の実行ユニットであって、
実行すべき前記命令ループの実際の繰り返し回数が未知
である間に、命令ループの実行を開始する前記実行ユニ
ットと、 実行された前記命令ループの繰り返し回数をカウントす
る手段と、 前記実際の繰り返し回数の判断に応答して、前記実際の
繰り返し回数と前記実行された繰り返し回数との間の差
を判断する手段とを含み、前記実行ユニットが前記差が
0又はそれより多いことを判断したことに応答して、前
記差に等しい付加的な繰り返し回数につき前記命令ルー
プを実行するデータ処理システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/685060 | 1996-07-22 | ||
US08/685,060 US5740419A (en) | 1996-07-22 | 1996-07-22 | Processor and method for speculatively executing an instruction loop |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1069385A JPH1069385A (ja) | 1998-03-10 |
JP3093684B2 true JP3093684B2 (ja) | 2000-10-03 |
Family
ID=24750624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP09181943A Expired - Fee Related JP3093684B2 (ja) | 1996-07-22 | 1997-07-08 | 命令ループを投機的に実行するプロセッサ及び方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US5740419A (ja) |
EP (1) | EP0821305A3 (ja) |
JP (1) | JP3093684B2 (ja) |
KR (1) | KR100244842B1 (ja) |
TW (1) | TW386214B (ja) |
Families Citing this family (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6003128A (en) * | 1997-05-01 | 1999-12-14 | Advanced Micro Devices, Inc. | Number of pipeline stages and loop length related counter differential based end-loop prediction |
US5898865A (en) * | 1997-06-12 | 1999-04-27 | Advanced Micro Devices, Inc. | Apparatus and method for predicting an end of loop for string instructions |
US6085305A (en) * | 1997-06-25 | 2000-07-04 | Sun Microsystems, Inc. | Apparatus for precise architectural update in an out-of-order processor |
US5958047A (en) * | 1997-06-25 | 1999-09-28 | Sun Microsystems, Inc. | Method for precise architectural update in an out-of-order processor |
US5838988A (en) * | 1997-06-25 | 1998-11-17 | Sun Microsystems, Inc. | Computer product for precise architectural update in an out-of-order processor |
US6032252A (en) * | 1997-10-28 | 2000-02-29 | Advanced Micro Devices, Inc. | Apparatus and method for efficient loop control in a superscalar microprocessor |
US6963967B1 (en) | 2000-06-06 | 2005-11-08 | International Business Machines Corporation | System and method for enabling weak consistent storage advantage to a firmly consistent storage architecture |
US6691220B1 (en) * | 2000-06-06 | 2004-02-10 | International Business Machines Corporation | Multiprocessor speculation mechanism via a barrier speculation flag |
US6748518B1 (en) | 2000-06-06 | 2004-06-08 | International Business Machines Corporation | Multi-level multiprocessor speculation mechanism |
US6725340B1 (en) | 2000-06-06 | 2004-04-20 | International Business Machines Corporation | Mechanism for folding storage barrier operations in a multiprocessor system |
US6728873B1 (en) | 2000-06-06 | 2004-04-27 | International Business Machines Corporation | System and method for providing multiprocessor speculation within a speculative branch path |
US6675372B1 (en) * | 2000-10-31 | 2004-01-06 | Sun Microsystems, Inc. | Counting speculative and non-speculative events |
US6728856B2 (en) | 2001-06-01 | 2004-04-27 | Microchip Technology Incorporated | Modified Harvard architecture processor having program memory space mapped to data memory space |
US6937084B2 (en) * | 2001-06-01 | 2005-08-30 | Microchip Technology Incorporated | Processor with dual-deadtime pulse width modulation generator |
US7467178B2 (en) * | 2001-06-01 | 2008-12-16 | Microchip Technology Incorporated | Dual mode arithmetic saturation processing |
US6952711B2 (en) * | 2001-06-01 | 2005-10-04 | Microchip Technology Incorporated | Maximally negative signed fractional number multiplication |
US20030028696A1 (en) * | 2001-06-01 | 2003-02-06 | Michael Catherwood | Low overhead interrupt |
US6976158B2 (en) * | 2001-06-01 | 2005-12-13 | Microchip Technology Incorporated | Repeat instruction with interrupt |
US7020788B2 (en) * | 2001-06-01 | 2006-03-28 | Microchip Technology Incorporated | Reduced power option |
US6975679B2 (en) * | 2001-06-01 | 2005-12-13 | Microchip Technology Incorporated | Configuration fuses for setting PWM options |
US6552625B2 (en) | 2001-06-01 | 2003-04-22 | Microchip Technology Inc. | Processor with pulse width modulation generator with fault input prioritization |
US7003543B2 (en) * | 2001-06-01 | 2006-02-21 | Microchip Technology Incorporated | Sticky z bit |
US6604169B2 (en) | 2001-06-01 | 2003-08-05 | Microchip Technology Incorporated | Modulo addressing based on absolute offset |
US20020184566A1 (en) * | 2001-06-01 | 2002-12-05 | Michael Catherwood | Register pointer trap |
US20030023836A1 (en) * | 2001-06-01 | 2003-01-30 | Michael Catherwood | Shadow register array control instructions |
US20030005268A1 (en) * | 2001-06-01 | 2003-01-02 | Catherwood Michael I. | Find first bit value instruction |
US20030005269A1 (en) * | 2001-06-01 | 2003-01-02 | Conner Joshua M. | Multi-precision barrel shifting |
US6934728B2 (en) * | 2001-06-01 | 2005-08-23 | Microchip Technology Incorporated | Euclidean distance instructions |
US6985986B2 (en) * | 2001-06-01 | 2006-01-10 | Microchip Technology Incorporated | Variable cycle interrupt disabling |
US7007172B2 (en) * | 2001-06-01 | 2006-02-28 | Microchip Technology Incorporated | Modified Harvard architecture processor having data memory space mapped to program memory space with erroneous execution protection |
US6601160B2 (en) | 2001-06-01 | 2003-07-29 | Microchip Technology Incorporated | Dynamically reconfigurable data space |
US20040021483A1 (en) * | 2001-09-28 | 2004-02-05 | Brian Boles | Functional pathway configuration at a system/IC interface |
US6552567B1 (en) | 2001-09-28 | 2003-04-22 | Microchip Technology Incorporated | Functional pathway configuration at a system/IC interface |
US7010783B2 (en) | 2002-03-18 | 2006-03-07 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation |
US7181737B2 (en) | 2002-03-18 | 2007-02-20 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using static procedure return addresses |
US6996802B2 (en) | 2002-03-18 | 2006-02-07 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using initialization order and calling order constraints |
US6912633B2 (en) | 2002-03-18 | 2005-06-28 | Sun Microsystems, Inc. | Enhanced memory management for portable devices |
US20040123075A1 (en) * | 2002-12-19 | 2004-06-24 | Yoav Almog | Extended loop prediction techniques |
US7281237B2 (en) | 2003-01-16 | 2007-10-09 | Sun Microsystems, Inc. | Run-time verification of annotated software code |
US7010676B2 (en) * | 2003-05-12 | 2006-03-07 | International Business Machines Corporation | Last iteration loop branch prediction upon counter threshold and resolution upon counter one |
US7353499B2 (en) | 2003-09-25 | 2008-04-01 | Sun Microsystems, Inc. | Multiple instruction dispatch tables for application program obfuscation |
US7363620B2 (en) | 2003-09-25 | 2008-04-22 | Sun Microsystems, Inc. | Non-linear execution of application program instructions for application program obfuscation |
US7415618B2 (en) | 2003-09-25 | 2008-08-19 | Sun Microsystems, Inc. | Permutation of opcode values for application program obfuscation |
US8220058B2 (en) | 2003-09-25 | 2012-07-10 | Oracle America, Inc. | Rendering and encryption engine for application program obfuscation |
US7424620B2 (en) | 2003-09-25 | 2008-09-09 | Sun Microsystems, Inc. | Interleaved data and instruction streams for application program obfuscation |
KR100867269B1 (ko) * | 2007-02-22 | 2008-11-06 | 삼성전자주식회사 | 프로세서의 추론적 로드 명령 실행 방법 및 상기 방법을채용한 프로세서 |
US9459871B2 (en) * | 2012-12-31 | 2016-10-04 | Intel Corporation | System of improved loop detection and execution |
US10990404B2 (en) * | 2018-08-10 | 2021-04-27 | Arm Limited | Apparatus and method for performing branch prediction using loop minimum iteration prediction |
US11693666B2 (en) * | 2021-10-20 | 2023-07-04 | Arm Limited | Responding to branch misprediction for predicated-loop-terminating branch instruction |
US11972264B2 (en) * | 2022-06-13 | 2024-04-30 | Arm Limited | Micro-operation supply rate variation |
US20230418611A1 (en) * | 2022-06-23 | 2023-12-28 | Arm Limited | Prediction of number of iterations of a fetching process |
US11803390B1 (en) * | 2022-07-01 | 2023-10-31 | Arm Limited | Prediction class determination |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4825360A (en) * | 1986-07-30 | 1989-04-25 | Symbolics, Inc. | System and method for parallel processing with mostly functional languages |
US5101484A (en) * | 1989-02-14 | 1992-03-31 | Intel Corporation | Method and apparatus for implementing an iterative program loop by comparing the loop decrement with the loop value |
US5056604A (en) * | 1990-05-02 | 1991-10-15 | Xerox Corporation | Sheet feeder devices |
JPH04102926A (ja) * | 1990-08-22 | 1992-04-03 | Nec Corp | 繰り返しループの展開最適化方式 |
US5303355A (en) * | 1991-03-27 | 1994-04-12 | Motorola, Inc. | Pipelined data processor which conditionally executes a predetermined looping instruction in hardware |
US5421020A (en) * | 1993-01-08 | 1995-05-30 | International Business Machines Corporation | Counter register implementation for speculative execution of branch on count instructions |
US5454117A (en) * | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
EP0649086B1 (en) * | 1993-10-18 | 2000-07-19 | National Semiconductor Corporation | Microprocessor with speculative execution |
US5404473A (en) * | 1994-03-01 | 1995-04-04 | Intel Corporation | Apparatus and method for handling string operations in a pipelined processor |
US5608886A (en) * | 1994-08-31 | 1997-03-04 | Exponential Technology, Inc. | Block-based branch prediction using a target finder array storing target sub-addresses |
US5664135A (en) * | 1994-09-28 | 1997-09-02 | Hewlett-Packard Company | Apparatus and method for reducing delays due to branches |
-
1996
- 1996-07-22 US US08/685,060 patent/US5740419A/en not_active Expired - Fee Related
- 1996-12-10 TW TW085115276A patent/TW386214B/zh not_active IP Right Cessation
-
1997
- 1997-04-30 KR KR1019970016696A patent/KR100244842B1/ko not_active IP Right Cessation
- 1997-07-08 JP JP09181943A patent/JP3093684B2/ja not_active Expired - Fee Related
- 1997-07-15 EP EP97480045A patent/EP0821305A3/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
US5740419A (en) | 1998-04-14 |
KR980010787A (ko) | 1998-04-30 |
EP0821305A3 (en) | 1999-05-19 |
JPH1069385A (ja) | 1998-03-10 |
EP0821305A2 (en) | 1998-01-28 |
KR100244842B1 (ko) | 2000-02-15 |
TW386214B (en) | 2000-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3093684B2 (ja) | 命令ループを投機的に実行するプロセッサ及び方法 | |
JP3397081B2 (ja) | 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を推測的に実行するためのプロセッサ、データ処理システム及び方法 | |
US5404473A (en) | Apparatus and method for handling string operations in a pipelined processor | |
US5611063A (en) | Method for executing speculative load instructions in high-performance processors | |
US5634103A (en) | Method and system for minimizing branch misprediction penalties within a processor | |
EP0605872B1 (en) | Method and system for supporting speculative execution of instructions | |
US6279105B1 (en) | Pipelined two-cycle branch target address cache | |
US5901307A (en) | Processor having a selectively configurable branch prediction unit that can access a branch prediction utilizing bits derived from a plurality of sources | |
US20020087849A1 (en) | Full multiprocessor speculation mechanism in a symmetric multiprocessor (smp) System | |
US6598153B1 (en) | Processor and method that accelerate evaluation of pairs of condition-setting and branch instructions | |
US6728872B1 (en) | Method and apparatus for verifying that instructions are pipelined in correct architectural sequence | |
US5898864A (en) | Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors | |
JP2839075B2 (ja) | 処理システムを動作させる方法及び処理システム | |
US6338133B1 (en) | Measured, allocation of speculative branch instructions to processor execution units | |
US6971000B1 (en) | Use of software hint for branch prediction in the absence of hint bit in the branch instruction | |
US5875325A (en) | Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history | |
US5872948A (en) | Processor and method for out-of-order execution of instructions based upon an instruction parameter | |
JP3207124B2 (ja) | カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置 | |
US8028151B2 (en) | Performance of an in-order processor by no longer requiring a uniform completion point across different execution pipelines | |
US6237085B1 (en) | Processor and method for generating less than (LT), Greater than (GT), and equal to (EQ) condition code bits concurrent with a logical or complex operation | |
US6035390A (en) | Method and apparatus for generating and logically combining less than (LT), greater than (GT), and equal to (EQ) condition code bits concurrently with the execution of an arithmetic or logical operation | |
US20050273579A1 (en) | Method and apparatus for maintaining status coherency between queue-separated functional units | |
JP3721002B2 (ja) | メモリ要求を形成するために並列に生成される複数の取出アドレスのうちの1つを選択する、プロセッサおよび命令取出方法 | |
US5764940A (en) | Processor and method for executing a branch instruction and an associated target instruction utilizing a single instruction fetch | |
US6490653B1 (en) | Method and system for optimally issuing dependent instructions based on speculative L2 cache hit in a data processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |