JPH07334362A - 複数の動作を同時に行なうためのプロセッサ、その中のスタック、およびスタック制御方法 - Google Patents

複数の動作を同時に行なうためのプロセッサ、その中のスタック、およびスタック制御方法

Info

Publication number
JPH07334362A
JPH07334362A JP7134012A JP13401295A JPH07334362A JP H07334362 A JPH07334362 A JP H07334362A JP 7134012 A JP7134012 A JP 7134012A JP 13401295 A JP13401295 A JP 13401295A JP H07334362 A JPH07334362 A JP H07334362A
Authority
JP
Japan
Prior art keywords
stack
array
ahead
instruction
look
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.)
Granted
Application number
JP7134012A
Other languages
English (en)
Other versions
JP3714992B2 (ja
Inventor
Michael D Goddard
マイケル・ディー・ゴッダード
Scott A White
スコット・エイ・ホワイト
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JPH07334362A publication Critical patent/JPH07334362A/ja
Application granted granted Critical
Publication of JP3714992B2 publication Critical patent/JP3714992B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Vehicle Body Suspensions (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【目的】 スタックと、スタックの状態を単純かつ迅速
に復元するためのスタック動作方法を提供する。 【構成】 1つのサイクルで複数の命令を行ない、分岐
条件の結果を予測し、分岐予測に基づいて推論的に命令
を実行するプロセッサでは、データスタックを動作させ
るための方法および装置は、スタック交換能力をサポー
トするためにリマップアレイ(674)を用いる。リマ
ップアレイは、スタックポインタ(672)をスタック
内のデータエレメント(700)と相関させるために用
いられる。ルックアヘッドスタックポインタ(502)
およびリマップアレイ(504)は、推論的命令が実行
されている間にプロセッサの動作状態を保存するように
更新される。

Description

【発明の詳細な説明】
【0001】
【発明の分野】本発明はプロセッサスタックに関し、よ
り特定的には、命令の推論的実行に関わるプロセッサの
ためのスタックおよびスタック動作方法に関する。
【0002】
【関連技術の説明】プロセッサは一般に命令セットのう
ちの1つの命令をいくつかのステップで処理する。初期
の技術によるプロセッサは、これらのステップをシリア
ルに行なっていた。技術の進歩により、多くの命令の異
なるステップを同時に行なうスカラプロセッサと呼ばれ
るパイプライン方式のプロセッサが開発された。「スー
パースカラ」プロセッサは、スカラ命令の同時実行をサ
ポートすることにより性能をさらに向上する。スーパー
スカラプロセッサでは、データまたは資源が利用可能で
ないため発行された命令を実行することができない従属
性の条件や命令の競合が生じる。たとえば、発行された
命令は、その入力オペランドがまだ実行を終了していな
い他の命令によって計算されるデータに依存する場合
は、実行することができない。
【0003】スーパースカラプロセッサの性能は、命令
をすぐに実行する能力にかかわらず命令をデコードし続
けることにより向上される。命令のデコードと命令の実
行とを切離すためには、命令を実行する機能ユニットと
呼ばれる回路によって用いられるディスパッチされた命
令情報をストアするためのルックアヘッドバッファと呼
ばれるバッファが必要である。
【0004】このバッファによっても、散在する分岐命
令を含む命令シーケンスに対するプロセッサの性能が向
上される。分岐に従う命令は通常、状態がわかるまで待
たなければならず、その後になって初めて実行を進める
ことができるため、分岐命令はプロセッサの性能を損な
う。スーパースカラプロセッサでは、「推論的に」命令
を実行することによって、分岐条件の結果を予測しかつ
その予測に従ってその次の命令に進むことに関わる分岐
能力が向上される。バッファは、プロセッサの推論状態
を維持するように実現される。予測が間違っている場合
には、間違って予測された分岐に従う命令によって生じ
た結果は放棄される。分岐を間違って予測した場合に迅
速に回復し、適切な命令シーケンスを再び開始すること
により、スーパースカラプロセッサの性能はかなり向上
される。回復方法により、不適切に行なわれた命令によ
る影響が取消される。再開始の手順により、正しい命令
シーケンスが再び確立される。
【0005】『スーパースカラプロセッサ設計(Supers
calar Processor Design)』, Englewood Cliffs, N.
J., Prentice Hall, 1991, p.92-97においてマイク・ジ
ョンソン(Mike Johnson)によって教示される1つの回
復および再開始方法では、リオーダバッファおよびレジ
スタファイルが用いられる。レジスタファイルは、回収
された動作、すなわちもう推論的でない動作によって発
生したレジスタ値を保持する。リオーダバッファは、動
作の推論的結果、すなわち予測されてはいるが確証はさ
れていない分岐に従ったシーケンスで実行される動作の
結果を保持する。リオーダバッファは、先入れ先出しの
待ち行列として動作する。命令がデコードされると、リ
オーダバッファの末尾でエントリが割当てられる。エン
トリは、命令および命令の結果に関する情報が利用可能
になればそれを保持する。その結果値を受取ったエント
リがリオーダバッファの先頭に達すると、その結果をレ
ジスタファイルに書込むことによりその動作は回収され
る。リオーダバッファは、誤予測された分岐に従う命令
によって生じたレジスタ値を放棄するために、分岐の誤
予測の後の回復の間にプロセッサによって用いられる。
リオーダバッファは誤予測された分岐に従うレジスタを
復元するが、他のプロセッサのレジスタも復元される必
要があるかもしれない。たとえば、データを管理するた
めにスタックを用いるプロセッサでは、スタックは復元
を必要とする。スタックの復元には、アレイエレメント
およびポインタを含むすべてのスタックエレメントの回
復が必要である。
【0006】スタックの一例は、カリフォルニア州サン
タクララ(Santa Clara )のインテル・コーポレイショ
ン(Intel Corporation )から入手可能な商標ペンチウ
ム(Pentium )マイクロプロセッサの浮動小数点ユニッ
ト(FPU)レジスタスタックである。FPUレジスタ
スタックは、拡張された実データをストアする、8つの
マルチビット数値レジスタのアレイである。FPUの命
令により、スタックの頂部(TOS)に関するデータレ
ジスタがアドレス指定される。商標ペンチウムマイクロ
プロセッサにおける浮動小数点交換(FXCH)命令に
より、スタックの頂部の内容が、特定のスタックエレメ
ント、たとえばTOSに関するスタックの終わりから2
番目の位置にあるデフォルトエレメントの内容と交換す
る。ペンチウム(商標)浮動小数点命令は一般に、スタ
ックのトップ位置に配置されるべき1つのソースオペラ
ンドを必要とし、かつFPU命令の結果がTOSに残さ
れることがよくあるため、FXCH命令は有用である。
ほとんどのFPU命令がTOSへのアクセスを必要とす
るため、FXCH命令を用いてスタック内のデータ位置
を操作することが望ましい。
【0007】スタックのトップ位置はTOSポインタに
よって識別される。スタックエントリは、いくつかの浮
動小数点命令とデータのロードおよびストア命令とを実
行することによりプッシュされかつポップされる。これ
らの命令がプロセッサのプログラミングに依存するた
め、浮動小数点のオーバフローおよびアンダフローが生
じ、これらはトラップされなければならず、それにより
例外条件が発生する。誤予測された分岐のような例外条
件には、プロセッサの推論的状態の復元が必要である。
【0008】このFXCH命令により生じる1つの結果
は、スタックエレメントの順序が変わりやすくなってし
まうことであり、これにより誤予測された分岐または例
外の後に生じるスタックの復元が複雑になってしまう。
【0009】スーパースカラプロセッサでは、誤予測さ
れた分岐および例外が生じても、効果的な回復および再
開始の手順を所望のように行なう。スタック、およびス
タックの状態を簡単にかつ迅速に復元するためのスタッ
クの動作方法が求められている。
【0010】
【発明の概要】本発明の一実施例は、浮動小数点計算命
令、浮動小数点スタック交換、浮動小数点スタックをプ
ッシュまたはポップする命令等の複数個の動作を同時に
行なうためのプロセッサである。このプロセッサは、計
算を実行するための浮動小数点機能ユニットと、浮動小
数点機能ユニットから得られた計算結果を扱うための浮
動小数点スタックとを含む。スタックは、浮動小数点機
能ユニットから得られた計算結果をストアするための浮
動小数点スタックアレイと、浮動小数点スタックアレイ
のエレメントを特定するための浮動小数点スタックポイ
ンタと、スタックポインタによってアドレス指定された
浮動小数点スタックアレイエレメントを順序づけるため
の浮動小数点スタックリマップアレイとを含む。
【0011】本発明の別の実施例は、スタックを制御す
るための方法である。スタックは、スタック交換命令お
よびスタックをプッシュまたはポップする命令を含む命
令を実行するためのプロセッサにおいてスタックメモリ
アレイおよびスタックポインタを含む。この方法は、ス
タックポインタをスタックのトップ位置のメモリアレイ
に設定し、かつシーケンシャルな順序でスタックメモリ
アレイエレメントをアドレス指定するようにスタックリ
マップアレイを設定することによってスタックを初期化
するステップを含む。この方法は、実行するための命令
をデコードしかつディスパッチするステップと、スタッ
ク交換命令に応答してスタックリマップアレイのエレメ
ントを交換するステップと、スタックをプッシュまたは
ポップする命令に応答してスタックポインタを調節する
ステップとをさらに含む。
【0012】本発明のさらに他の実施例は、プロセッサ
スタックを制御するための方法である。スタックは、メ
モリアレイおよびスタックポインタを含む。この方法
は、スタックを初期化するステップを含み、この初期化
ステップは、スタックポインタおよびルックアヘッドス
タックポインタをスタックのトップ位置のメモリアレイ
に設定し、シーケンシャルな順序でスタックメモリアレ
イエレメントをアドレス指定するようにスタックリマッ
プアレイおよびルックアヘッドリマップアレイを設定す
るサブステップを含む。この方法は、実行するための命
令をデコードしかつディスパッチするステップと、ディ
スパッチされたスタック交換命令に応答してルックアヘ
ッドリマップアレイのエレメントを交換するステップ
と、ディスパッチされたスタックをプッシュまたはポッ
プする命令に応答してルックアヘッドスタックポインタ
を調節するステップとをさらに含む。ディスパッチされ
た分岐命令に応答して、この方法は、ルックアヘッドリ
マップアレイをセーブするステップと、分岐が発生され
るかどうかを予測するステップと、分岐が正しく予測さ
れたかどうかを判断するステップと、分岐命令が誤って
予測されたときにルックアヘッドリマップアレイをセー
ブされた値に復元するステップとを含む。この方法は、
命令をそのプログラムの順序で回収するステップをさら
に含み、この回収ステップは、回収するスタック交換命
令に応答してスタックリマップアレイをルックアヘッド
リマップアレイで置き換え、回収するスタックをプッシ
ュまたはポップする命令に応答してスタックポインタを
調節するサブステップを含む。
【0013】本発明の種々の実施例は、プロセッサが誤
予測された分岐または例外に遭遇した場合に単純でかつ
迅速な回復および再始動の手順を達成するデータスタッ
クを動作させるための方法および装置を含む。
【0014】本発明の特定の応用は、単純でかつ迅速な
回復および再始動の手順を達成する浮動小数点データス
タックを動作させるための方法および装置である。本発
明により、浮動小数点演算命令とパラレルに浮動小数点
交換命令を実行することができるという有利な能力が得
られる。
【0015】添付の図面を参照して以下に示す詳細な説
明を読めば本発明がよりよく理解され、本発明の利点、
目的および特徴がより明らかになるであろう。図中、同
一の参照番号は同一のエレメントを示す。
【0016】
【好ましい実施例の詳細な説明】図2および図3は、種
々の機能ブロックの間でアドレス、データおよび制御の
転送のやり取りを行なう内部アドレスおよびデータバス
111を含むスーパースカラプロセッサ110と、外部
メモリ114とを示している。命令キャッシュ116
は、CISC命令を解析しかつプリデコードする。バイ
トキュー135は、プリデコードされた命令を命令デコ
ーダ118に転送し、これはCISC命令をそれぞれR
ISCのような動作(「ROP」)のための命令のシー
ケンスにマップする。
【0017】適切な命令キャッシュ116は、1993
年10月29日出願の米国特許出願連続番号第08/1
45,905号により詳細に記載されている(デイビッ
ド・ビィ・ウィット(David B. Witt )およびマイケル
・ディ・ゴダード(MichaelD. Goddard)「可変バイト
長命令に特に適切なプリデコード命令キャッシュおよび
その方法(“Pre-Decode Instruction Cache and Metho
d Therefor Particularly Suitable for Variable Byte
-Length Instructions”)」;1994年10月25
日、日本出願第260701号の「可変バイト長命令フ
ォーマットを有するタイプのプロセッサのための命令キ
ャッシュ」)。適切なバイトキュー135は、1993
年10月29日出願の米国特許出願連続番号第08/1
45,902号に詳細に記載されている(デイビッド・
ビィ・ウィット(David B. Witt )「可変バイト長命令
に特に適切な推論的命令キューおよびその方法(“Spec
ulative Instruction Queue and Method Therefor Part
icularly Suitable for Variable Byte-Length Instruc
tions ”)」;1994年10月25日、日本出願第2
60700号の「可変バイト長命令フォーマットを有す
るタイプのプロセッサのための推論的命令キュー」)。
適切な命令デコーダ118は、1993年10月29日
出願の米国特許出願連続番号第08/146,383号
により詳細に記載されている(デイビッド・ビィ・ウィ
ット(David B. Witt )およびマイケル・ディ・ゴダー
ド(Michael D. Goddard)「スーパースカラ命令デコー
ダ(Syperscalar Instrucion Dcode)」;1994年1
0月26日、日本出願第262437号の「スーパース
カラ命令デコード/発行装置」)。これらの出願全体を
引用をここに援用する。命令デコーダ118は、種々の
バスを介してプロセッサ110内の機能ブロックにRO
Pをディスパッチする。プロセッサ110は、マイクロ
プロセッサのサイクルにおいて、4個以下のROPの発
行、5個以下のROP結果のやり取り、および16個以
下の推論的に実行されたROPのキューへの登録をサポ
ートする。AおよびBソースオペランドと宛先レジスタ
とに対する4組以下のポインタが、命令デコーダ118
によって、それぞれのAオペランドポインタ136、B
オペランドポインタ137、および宛先レジスタポイン
タ143を介してレジスタファイル124およびリオー
ダバッファ126に与えられる。レジスタファイル12
4およびリオーダバッファ126により、4対のAオペ
ランドバス130およびBオペランドバス131上の種
々の機能ユニットに適切なソースオペランドAおよびB
が与えられる。4対のAオペランドタグバス148およ
びBオペランドタグバス149を含むオペランドタグバ
スは、Aオペランドバス130およびBオペランドバス
131に関連する。データをオペランドバス上に配置す
るのに利用できない場合、利用可能になったときにデー
タを受取るためのリオーダバッファ126におけるエン
トリを識別するタグは、対応するオペランドタグバス上
にロードされる。オペランドバスおよびタグバスは、4
つのROPディスパッチ位置に対応する。命令デコーダ
は、リオーダバッファ126と協働して、ROPが実行
された後に機能ユニットから結果を受取るために、リオ
ーダバッファ126におけるエントリを識別するための
4つの宛先タグバス140を特定する。機能ユニット
は、ROPを実行し、宛先タグを5本の結果タグバス1
39のうちの1つにコピーし、結果が利用可能である場
合にはその結果を5本の結果バス132のうちの対応す
る結果バスに配置する。結果タグバス139における対
応するタグが結果を待っているROPのオペランドタグ
と一致すれば、機能ユニットは結果バス132上の結果
にアクセスする。
【0018】命令デコーダ118は、4本の操作コード
/タイプバス150を介してAおよびBソースオペラン
ド情報に付随する操作コード情報をディスパッチする。
操作コード情報は、機能ユニットのうちの適切な1つを
選択するタイプフィールドと、RISC操作コードを識
別する操作コードフィールドとを含む。
【0019】プロセッサ110は、分岐ユニット12
0、整数機能ユニット121、浮動小数点機能ユニット
122、ロード/ストア機能ユニット180等のいくつ
かの機能ユニットを含む。整数機能ユニット121は一
般的な意味で与えられたものであって、種々のタイプの
演算論理ユニットまたはシフトユニットを表わす。分岐
ユニット120は、分岐がある場合に適切な命令フェッ
チ速度を可能にする分岐予測機能を果たし、複数の命令
が発行された場合の性能を達成するために必要とされ
る。分岐ユニット120および命令デコーダ118を含
む適切な分岐予測システムは、ジョンソン(Johnson )
による『スーパースカラマイクロプロセッサ設計(“Su
perscalar Microprocessor Design )』, Prentice Hal
l, 1990 、および米国特許番号第5,136,697号
(ウィリアム・エム・ジョンソン(William M. Johnso
n)「キャッシュの命令ブロックの各々でストアされる
フェッチ情報を用いて、正しく予測された分岐命令の後
の実行に関して遅延を低減するためのシステム(“Syst
em for Reducing Delay for Execution Subsequent ro
Correctly Predicted Branch Instruction Using Fetch
Information Stored witheach Block of Instructions
in Cache”)」)により詳細に示されており、これは
引用によりここに援用される。プロセッサ110は、複
雑になりすぎないようにするために単純な1組の機能ユ
ニットを有するように示されている。必要に応じて、整
数ユニットおよび浮動小数点ユニットの他の組合せを実
現することも可能である。
【0020】レジスタファイル124は、中間の計算結
果を保持するためのマップされたCISC整数レジス
タ、浮動小数点レジスタ、一次レジスタを含む物理記憶
メモリである。レジスタファイル124は、4個以下の
同時にディスパッチされたROPの各々に関してAオペ
ランドポインタ136およびBオペランドポインタ13
7の2個以下のレジスタポインタによってアドレス指定
され、選択されたエントリの値を8個の読取ポートを介
してAオペランドバス130およびBオペランドバス1
31上に与える。整数はレジスタファイル124の32
ビットレジスタにストアされ、浮動小数点の数はレジス
タファイル124の82ビットレジスタにストアされ
る。レジスタファイル124は、回収結果として既知で
あるプロセスにおいて、リオーダバッファ126から4
本のライトバックバス134を介して実行された動作お
よび非推論的動作の結果を受取る。
【0021】リオーダバッファ126は、推論的に実行
されたROPの相対的な順序を追跡するための環状FI
FOである。記憶位置は、先頭キューポインタおよび末
尾キューポインタを用いて、結果をレジスタファイル1
24に回収しかつ機能ユニットから結果を受取るように
動的に割当てられる。命令がデコードされると、そのR
OPには、利用可能になった場合には結果値と、結果が
書込まれるべきレジスタファイル124の宛先レジスタ
の番号とを含むROP情報をストアするためのリオーダ
バッファ126における位置が割当てられる。従属性を
持たないROPに関しては、Aオペランドバス130お
よびBオペランドバス131は、レジスタファイル12
4から駆動される。浮動小数点データは、従属性を持た
ない浮動小数点ROPに関してAオペランド、Bオペラ
ンドおよび宛先レジスタが整数ROPの態様で直接アド
レス指定されるのではなくスタックポインタおよびリマ
ップレジスタによって指定されるように、スタックを用
いてアクセスされる。スタックポインタおよびリマップ
レジスタは組合されて、レジスタファイル124の浮動
小数点レジスタを指す。しかしながら、ROPが従属性
を持ち、そこにストアされていると考えられる値を得る
ために名前が変えられた宛先レジスタを参照すると、エ
ントリがリオーダバッファ126内でアクセスされる。
そこで結果が利用可能であれば、この結果はオペランド
バス上に置かれる。結果が利用不可能であれば、リオー
ダバッファエントリを識別するタグがAオペランドタグ
バス148およびBオペランドタグバス149のうちの
一方の上に与えられる。結果またはタグは、それぞれオ
ペランドバス130、131またはオペランドタグバス
148、149を介して機能ユニットに与えられる。浮
動小数点ROPに関しては、データ依存性オペランドが
リオーダバッファ124からアクセスされるか、または
スタックポインタおよびリマップレジスタに従ってタグ
がつけられる。
【0022】機能ユニット120、121、122、1
80において実行が終了し結果が得られると、それらの
結果およびそれぞれの結果タグは5本のバス幅結果バス
132および結果タグバス139を介してリオーダバッ
ファ126と機能ユニットの保存局に与えられる。5本
の結果バス、結果タグおよび状態バスのうち、4本は、
整数および浮動小数点の結果をリオーダバッファに送る
ための汎用バスである。送られた結果以外の情報を機能
ユニットのうちのいくつかからリオーダバッファに送る
ために、付加的な第5の結果バス、結果タグおよび状態
バスが用いられる。たとえば、分岐ユニット120によ
る分岐動作から生じる状態情報は、この付加的なバスに
置かれる。特定の機能ユニットは、5本の結果バス13
2および対応する結果タグバス139のサブセットにの
み相互接続し得る。
【0023】レジスタファイル、リオーダバッファ、お
よびバスを含む適切なRISCコアは、1993年10
月29日出願の米国特許出願連続番号第08/146,
382号(デイビッド・ビィ・ウィット(David B. Wit
t )およびウィリアム・エム・ジョンソン(William M.
Johnson)「高性能スーパースカラマイクロプロセッサ
(High Performance Superscalar Microprocessor
)」;1994年10月27日、日本出願第2633
17号の「スーパースカラマイクロプロセッサ」)に記
載されており、これを引用によりここに援用する。
【0024】図4は、3つのパイプラインを用いて算術
計算を行なう浮動小数点ユニット122の概略ブロック
図である。第1のパイプラインは、2つの加算器段24
2、243と正規化シフタ段253とを含む加算/減算
パイプラインである。第2のパイプラインは、2つの乗
算段244、245を含む乗算パイプラインである。第
3のパイプラインは、検出ブロック252を含む。浮動
小数点機能ユニット122はまた、共有浮動小数点ラウ
ンダ247とFPU結果ドライバ251とを含む。浮動
小数点保存局241は、操作コード/タイプバス15
0、Aオペランドバス130、Bオペランドバス13
1、結果バス132、結果タグバス139、Aオペラン
ドタグバス148、Bオペランドタグバス149、およ
び宛先タグバス140からの入力を受取るように接続さ
れる。保存局241は、2つのエントリを保持し、これ
らのエントリの各々は82ビットAオペランドおよび8
2ビットBオペランドのための記憶装置と、宛先結果タ
グと、8ビット操作コードと、4ビットAオペランドタ
グと、4ビットBオペランドタグと、浮動小数点スタッ
クのオーバフローおよびアンダフローの状態を示すため
の状態ビットとを含む。保存局241は、クロックサイ
クルごとに、2つのROPの形の1つの浮動小数点動作
を受入れることができる。保存局241は、その各々が
82ビットオペランドと3つの浮動小数点計算制御ビッ
トとを含む85ビット浮動小数点Aオペランドバス25
4および85ビット浮動小数点Bオペランドバス255
を駆動する。
【0025】検出252は、浮動小数点ユニット122
への入力が規定された無効性のある条件を満たす場合例
外信号を発生する。浮動小数点スタックオーバフローま
たはアンダフロー信号が設定されるか、除算動作におい
て分母オペランドが0であるか、またはソースオペラン
ドの値が命令により発生された結果が0または∞にされ
るような値を有する場合に、無効状態が生じる。浮動小
数点機能ユニット122への入力のために例外が発生さ
れると、ユニットが動作の残りの段をキャンセルし、リ
オーダバッファ126がプロセッサ110中にわたって
例外応答を開始するように結果バス132上に例外信号
を配置する。
【0026】浮動小数点ラウンダ247は、浮動小数点
ROPの実行により生じる例外を検出する。これらの例
外は、浮動小数点の指数値のオーバフローもしくはアン
ダフロー、または丸めている間の不正確な誤差を含む。
これらの誤差は信号で保存局141に送られる。
【0027】浮動小数点スタックは、浮動小数点命令に
より用いられる。浮動小数点命令は、スタックからその
オペランドを取る。なお、浮動小数点スタックはプロセ
ッサ110においていくぶんか分配されており、浮動小
数点機能ユニット122内にはなく、一般的には、浮動
小数点機能ユニット122から構造的に分離されてい
る。
【0028】リオーダバッファ126は、浮動小数点ス
タックにあるデータを含む推論データが、プロセッサ1
10の種々のブロックが協働することにより一貫した態
様で、しかしながら浮動小数点機能ユニット122の動
作から一般に独立して扱われるようにデータの管理を制
御する。リオーダバッファ126において従属性分析を
含むデータフロー制御を与えることによって、FPU1
22を含む他のプロセッサブロックが簡略化される。浮
動小数点ユニット122によって用いられる制御情報
は、スタックのオーバフローまたはアンダフローの状態
を示すビット等のスタック状態ビットに制限される。こ
の情報は命令デコーダ118によって発生され、ROP
がディスパッチされると浮動小数点ユニット122に送
られる。FPU122は、オーバフローまたはアンダフ
ロートラップを受取ると、例外信号を発生する。
【0029】図5は、種々のレジスタと、スタックを制
御しかつスタックを動作させるためのデータ通信経路を
相互接続するためのアレイとを含む、浮動小数点スタッ
クを組込むプロセッサ110のエレメントを示してい
る。図5は、分岐の予測および誤った予測によりスタッ
ク機能性のいくつかの局面が左右されるため、分岐機能
を実現するエレメントを示している。浮動小数点スタッ
クは、命令デコーダ118、分岐ユニット120、リオ
ーダバッファ126およびレジスタファイル124内に
記憶および制御回路を含む。なお、本実施例のプロセッ
サ110では、浮動小数点機能ユニット122は、浮動
小数点スタックの構造のうちのいずれも含んでおらず、
それにより浮動小数点命令および浮動小数点スタック交
換命令を同時に実行することができる。
【0030】スタックに影響を及ぼす命令のタイプは2
つある。スタックに影響を及ぼす命令の第1のタイプ
は、浮動小数点命令である。これらの命令は、スタック
上のデータを用い、結果をスタックに戻す。このスタッ
クに影響を及ぼす命令の第1のタイプは、浮動小数点ユ
ニット122において実行される。スタックに影響を及
ぼす命令の第2のタイプは、スタックのエレメントを交
換する浮動小数点スタック交換(FXCH)命令であ
る。種々の理由のため、FXCH命令は分岐ユニット1
20において実行される。
【0031】FXCH命令が分岐ユニット120におい
て実行される1つの理由は、データオペランドの値が推
論的であるのと同様にスタックエレメントの順序が推論
的であることである。条件つき分岐は誤予測され得るた
め、誤予測された分岐に従うFXCH命令によって変更
されるスタックエレメントの順序を復元しなければなら
ない。分岐がディスパッチされるときにルックアヘッド
スタックエレメントの順序をセーブするために、FXC
H命令は分岐ユニット120にディスパッチされる。F
XCH命令を分岐ユニット120において実行する第2
の理由は、プロセッサ110が、分岐ユニット120に
よって開始される再同期化動作を介してスタックアンダ
フロー状態等のスタックエラーに応答することである。
【0032】命令キャッシュ116と分岐ユニット12
0とが協働することにより、ターゲットPCバス322
および分岐フラグ310を介する通信を用いて分岐予測
能力が得られる。命令キャッシュ116は、バイトキュ
ーバス348を介して命令デコーダ118に命令を与え
る。分岐ユニット120は、スタックのルックアヘッド
状態を特定の分岐命令と相関させるデータをストアする
レジスタを含む。FXCHおよび浮動小数点命令を同時
に実行できるように、FXCH命令を浮動小数点ユニッ
ト122にではなく分岐ユニット120にディスパッチ
することが有利である。
【0033】命令デコーダ118は、与えられた命令に
対応するROPを種々のバスを介して種々の機能ユニッ
トにディスパッチし、この種々の機能ユニットのうちの
1つのは分岐ユニット120である。命令デコーダ11
8は、ROPをディスパッチすると、ROPのソースオ
ペランドおよび宛先レジスタを識別するために、Aオペ
ランドポインタ136、Bオペランドポインタ137、
および宛先ポインタ143をレジスタファイル124お
よびリオーダバッファ126に駆動する。命令デコーダ
118は、デコード(DPC)バス313を介して分岐
ユニット120にデコードプログラムカウンタ(PC)
を送る。命令デコーダ118は、スタックのルックアヘ
ッド状態をストアするレジスタおよびアレイを含む。浮
動小数点ROPに関しては、ルックアヘッドのスタック
のレジスタおよびアレイは、レジスタファイル124お
よびリオーダバッファ126のエレメントにアクセスす
るために、オペランドポインタバス136、137上で
駆動されるポインタと宛先ポインタ143との値を引出
すために用いられる。非推論的な整数および浮動小数点
データは共にレジスタファイル124にストアされる。
浮動小数点スタックは、レジスタファイル124内のレ
ジスタの形である。推論的な整数および浮動小数点デー
タはリオーダバッファ126にストアされる。命令デコ
ーダ118は、ルックアヘッドスタックポインタおよび
アレイを用いて、浮動小数点オペランドの指定を、スタ
ックのトップ位置に関するスタックエレメントの識別か
らレジスタファイル124内の物理レジスタの識別に変
換する。この変換が行なわれると、リオーダバッファ1
26の推論的浮動小数点は整数オペランドと同様に処理
される。データ処理のほとんどの局面に関して、プロセ
ッサ110は浮動小数点データを整数データと同様に扱
い、これにより専用論理が必要でなくなる。
【0034】命令デコーダ118は、命令処理パイプラ
インの最初にある。整数データと浮動小数点データとを
パイプラインの各段で同じように一貫して処理すること
が有利である。スタックのルックアヘッド状態は、RO
Pがデコードされるときに決定される。命令デコーダ1
18は、ルックアヘッドスタックポインタおよびリマッ
プアレイの更新を制御し、浮動小数点オペランドの識別
をスタック上の位置の指定から固定レジスタの指定に変
換する。命令デコーダ118は、命令パイプラインの最
初の位置にあるため、この命令デコーダ118により浮
動小数点データおよび整数データをプロセッサパイプラ
インにおけるできるだけ早い段階で一貫した態様で処理
することができるようになる。
【0035】レジスタファイル124は、スタックトッ
プ位置ポインタおよびリマップレジスタを含む、浮動小
数点スタック、浮動小数点スタック制御ポインタおよび
アレイを保持するためのレジスタを有する。したがっ
て、命令デコーダ118はスタック制御エレメントの推
論的状態を保持し、リオーダバッファ126は推論的状
態にあるいかなるスタックデータをも保持し、レジスタ
ファイル124は非推論的浮動小数点スタックデータお
よびスタック制御エレメントをストアする。
【0036】リオーダバッファ126はプロセッサの回
復および再始動手順を制御する。浮動小数点スタック回
復および再始動機能は、スタックをレジスタファイル1
24に物理的に組込むことによって、およびオペランド
が回収されるとスタックレジスタおよびアレイの書込を
制御するためにリオーダバッファ126を用いることに
よって達成される。リオーダバッファ126は、スタッ
クの推論的状態を含むプロセッサ110の推論的状態を
追跡するため、この更新のタイミングを制御する。
【0037】プロセッサ110の分岐予測能力およびそ
れが浮動小数点スタックに与える影響をよりよく理解す
るために、図6に詳細に示される命令キャッシュ116
のアーキテクチャを考える。命令キャッシュ116は、
命令デコーダ118のためのプリフェッチされたx86
命令バイトをプリデコードする。命令キャッシュ116
は、キャッシュコントロール408、フェッチプログラ
ムカウンタ(PC)410、フェッチpcバス406、
プリデコード412、コードセグメント416、バイト
キューシフト418、バイトキュー135、および3つ
のアレイ、すなわち命令ストアアレイ450とアドレス
タグアレイ452とサクセッサアレイ454とに組織化
されるキャッシュアレイ400を含む。
【0038】コードセグメントレジスタ416は、リク
エストされたメモリアクセスの有効性をチェックするた
めに用いられるコードセグメントディスクリプタのコピ
ーを保持する。コードセグメント416は、アプリケー
ションのアドレス空間にあるアドレスである論理アドレ
スをプロセッサ110のアドレス空間にあるアドレスで
ある線形アドレスに変換するために分岐ユニット120
において用いられるコードセグメント(CS)ベース値
を与える。CSベースは、CSベースライン430を介
して分岐ユニット120に伝えられる。プリデコード4
12は、内部アドレス/データバス111を介して、プ
リフェッチされたx86命令バイトを受取り、各々のx
86命令バイトにプリデコードされたビットを割当て、
プリデコードされたx86命令バイトをバス404を介
して命令ストアアレイ450に書込む。バイトキュー1
35は、キャッシュアレイ400からの予測実行された
命令を保持し、16以下の有効なプリデコードされたx
86命令バイトを16本のバス348を介して命令デコ
ーダ118に与える。バイトキューシフト418は、x
86の境界において命令を循環させ、マスクし、かつシ
フトする。シフトは、x86命令のすべてのROPが命
令デコーダ118によってディスパッチされるとシフト
制御ライン474上の信号に応答して生じる。キャッシ
ュコントロール408は、命令キャッシュ116の動作
を管理するために制御信号を発生する。
【0039】レジスタ410にストアされかつフェッチ
pcバス406を介してやり取りされるフェッチPC
は、キャッシュアレイ400の3つのアレイのアクセス
中にフェッチされるべき命令を識別する。中位フェッチ
PCビットは、検索のために各アレイからのエントリを
アドレス指定するキャッシュインデックスである。高位
ビットは、比較420によってアドレス指定されたタグ
と比較され、かつアドレスタグアレイ452から取出さ
れるアドレスタグである。一致すると、それはキャッシ
ュヒットを表わす。低位ビットは、命令ストアアレイ4
50からのアドレス指定されかつ取出されたエントリの
アドレス指定されたバイトを識別するオフセットであ
る。フェッチPC410、キャッシュコントロール40
8、およびキャッシュアレイ400は協働して、フェッ
チpcバス406を介して伝えられたアドレスを維持し
かつ再送する。フェッチPCレジスタ410は、ポイン
タ値を保持するか、ポインタを増分するか、内部アドレ
ス/データバス111を介してポインタを受取るか、ま
たはターゲットpcバス322からのポインタをロード
することによって、1つのサイクルからその次のサイク
ルでポインタを更新する。ターゲットpcは、分岐命令
が実行されかつそれが誤予測されたものであることがわ
かると分岐ユニット120から受取られる分岐フラグ3
10の分岐誤予測フラグ417に応答してキャッシュコ
ントロール408によってフェッチPCレジスタ410
にロードされる。
【0040】アドレスタグアレイ452のエントリは、
キャッシュヒットを識別するためのアドレスタグと、ア
ドレスタグの有効性を示すための有効ビットと、命令ス
トアアレイ450のバイトの各々に対応し、プリデコー
ドされたx86命令バイトが有効なx86命令バイトお
よび有効なプリデコードビットを含むかどうかを示すた
めのバイト有効ビットとを含む。
【0041】分岐予測をサポートするサクセッサアレイ
454は、サクセッサインデックス、サクセッサ有効ビ
ット(NSEQ)、およびブロック分岐インデックス
(BBI)を含むエントリを有する。サクセッサアレイ
が命令ストアアレイ450をアドレス指定するとNSE
Qがアサートされ、命令ブロックの分岐がいずれも「予
測発生されていない」場合はNSEQはアサートされな
い。NSEQがアサートされかつ予測実行された最後の
命令バイトの現在の命令ブロック内のバイト位置を指定
するときにのみBBIが規定される。サクセッサインデ
ックスは、推論的分岐のターゲット位置から始まる、そ
の次の予測実行された命令の最初のバイトのキャッシュ
位置を示す。
【0042】分岐命令は、命令キャッシュ116と分岐
ユニット120との動作を調製することによって行なわ
れる。たとえば、命令キャッシュ120が分岐がまだ発
生していないと予測すると、命令はシーケンシャルにフ
ェッチされる。その後分岐が分岐ユニット120による
実行の際に発生されると、予測は間違っていることにな
り、分岐ユニット120は分岐誤予測フラグ417およ
び分岐発生フラグ418をアサートする。分岐ユニット
120は、ターゲットpcバス322を介して正しいタ
ーゲットPCを命令キャッシュ116に戻し、これはフ
ェッチPCレジスタ410にストアされる。命令ストア
アレイ450は、フェッチPCレジスタ410の値に従
って、ターゲットpcアドレスで始まる命令ストリーム
を与え、バイトキュー135を再び満たし始める。RO
B126およびFPスタックの推論的状態は流される。
【0043】命令キャッシュ120が分岐が発生したと
予測すると、その次の命令はシーケンシャルではない。
サクセッサアレイ454のエントリが予測発生された分
岐命令に割当てられ、NSEQビットがアサートされる
と、分岐命令の最後のバイトを指すようにBBIが設定
され、ターゲット命令の命令キャッシュ116内の位置
を示すようにサクセッサインデックスが設定される。サ
クセッサインデックスは、完全なアドレスではなく、命
令ストアアレイ450のターゲット命令のインデック
ス、カラムおよびオフセットをストアする。シーケンシ
ャルではないその次の命令に関するフェッチPCは、サ
クセッサインデックスによって与えられたインデックス
およびカラムを用いてキャッシュブロックにアクセスす
ることによって、およびそのブロック内にストアされた
アドレスタグの高位ビットとその前のサクセッサインデ
ックスからのインデックスおよびオフセットビットとを
連結することによって構成される。
【0044】構成された分岐ターゲットは、命令キャッ
シュ116からフェッチpcバス406を介して命令デ
コーダ118に送られ、命令デコーダ118によって、
命令がデコードされるときにデコードPCを維持するた
めに用いられる。
【0045】命令デコーダ118は、分岐ユニット12
0に分岐命令をディスパッチすると、デコードpcバス
313を介してデコードPCを送り、オペランドバス1
30を介してターゲットの分岐オフセットを送る。この
情報は、分岐命令を実行するために、および予測を確認
するために分岐ユニット120によって用いられる。
【0046】図8および図9に示される命令デコーダ1
18は、バイトキュー135からプリデコードされたx
86命令バイトを受取り、それらをROPのそれぞれの
シーケンスに翻訳し、複数のディスパッチ位置からRO
Pをディスパッチする。単純な命令に関しては、翻訳
は、ハードウェアに組込まれた高速変換経路を介して行
なわれる。マイクロコードROMシーケンスは、使用頻
度の少ない命令と、3つよりも多いROPに翻訳する複
雑な命令とを扱う。命令デコーダ118は高速経路また
はマイクロコードROMからのROP情報を選択しかつ
増加させ、機能ユニットによる実行のために完全なRO
Pを与える。
【0047】ROPマルチプレクサ500は、バイトキ
ュー135の先頭にあるx86命令から始まる、バイト
キュー135の1つ以上のプリデコードされたx86命
令を1つ以上の利用可能なディスパッチ位置に同時に送
る。ROPディスパッチ位置ROP0、1、2、3(5
10、520、530、540)はそれぞれ、高速変換
器0、1、2、3(順に、512、522、532、5
42)と、共通段0、1、2、3(514、524、5
34、544)、マイクロコードROM0、1、2、3
(516、526、536、546)とを含む。各ディ
スパッチ位置は、共通段、高速変換器、およびMROM
を含む。MROM516、526、536、546は、
マイクロコードROM(MROM)コントローラ560
によって制御される。
【0048】共通段は、アドレス指定モードの処理を含
む、高速経路およびマイクロコードROM命令に共通す
るパイプライン処理およびx86命令変換動作を扱う。
【0049】MROMコントローラ560は、命令タイ
プおよび操作コードを与える、ディスパッチウィンドウ
を満たすROPの数を予測する、命令キャッシュ116
の分岐予測に従ってバイトキュー135のシフトをガイ
ドする、ROPマルチプレクサ500にROPの数を知
らせてバイトキュー135の先頭にあるx86命令に関
してディスパッチする、マイクロコードおよび制御RO
Mにアクセスする、等の制御機能を果たす。MROMコ
ントローラ560は、2つの方法、すなわち命令レベル
のシーケンス制御、およびマイクロ分岐ROPを用いて
ROPの順序づけを制御する。命令レベルの分岐および
マイクロ分岐ROPはともに、誤った予測を確認しかつ
訂正するために分岐ユニット120にディスパッチされ
る。命令レベルシーケンス制御フィールドは、マイクロ
コードサブルーチン呼出/リターン、ブロックに整列さ
れたMROM位置に対する無条件分岐、プロセッサの状
態に基づく条件つき分岐、およびシーケンスの終わりの
識別のようないくつかの能力を与える。命令レベルのシ
ーケンスROPがディスパッチされると、(命令アドレ
スではなく)MROMアドレスがターゲットの形成また
は分岐の訂正のために送られる。
【0050】マイクロ分岐ROPが無条件分岐および状
態フラグ125に基づく条件つき分岐を与える。マイク
ロ分岐ROPは、実行のために分岐ユニット120にデ
ィスパッチされる。MROMコントローラ560は、分
岐ユニット120のマイクロ分岐誤予測論理によって開
始されるマイクロコードROMエントリポイントを受入
れる。分岐ユニット120によって発生されたマイクロ
コードエントリポイントは、ターゲットpcバス322
を介して命令デコーダ118に送られる。マイクロ分岐
が訂正されると、分岐ユニット120は、訂正アドレス
がPCではなくMROMアドレスであることをターゲッ
トpcバス322を介して命令デコーダ118に示す。
【0051】ROPセレクト0、1、2、3(518、
528、538、548)は、共通段の出力と組合せて
高速変換器またはMROMの出力を選択し、この情報を
レジスタファイル124、リオーダバッファ126、お
よび種々の機能ユニットに送る。
【0052】ROP共有590は、すべてのディスパッ
チ位置によって共有される資源によって用いられる情報
をディスパッチする。ROP共有590は、機能ユニッ
トにディスパッチするために、操作コード/タイプバス
150にROP操作コードを符号化したものを与える。
【0053】分岐ユニット120は、操作コードと、1
ビット交換アンダフロー信号、2ビットキャッシュカラ
ム選択識別子、1ビット分岐予測発生選択信号、1ビッ
トマイクロ分岐インジケータ、および分岐ユニット12
0がターゲットpcバス322上の予測発生されたアド
レスを分岐予測発生FIFO(図10の906)に書込
むべきであるかどうかを示す1ビット信号を含む他のR
OP共有590の出力とを受取る。さらに、整数フラグ
ソースオペランドを識別する3ビット読取フラグポイン
タが、分岐ユニット120にマップされる最初のディス
パッチされていないROPの位置に基づいて設定され
る。分岐ユニット120にROPがマップされていなけ
れば、読取フラグポインタは0に設定される。2ビット
利用インジケータは、分岐ユニット120にマップされ
る最初のディスパッチされていないROPのディスパッ
チ位置を設定するように符号化される。
【0054】命令デコーダ118は、デコードPC58
2、デコーダコントロール584、およびデコーダスタ
ック586を含む。デコーダコントロール584は、バ
イトキュー135のx86命令の数、(ライン570か
らの)機能ユニットの状態、および(ライン572から
の)リオーダバッファの状態に基づいて発行されるべき
ROPの数を決定する。デコーダコントロール584
は、バイトキュー135が完全に実行されたx86命令
の数だけシフトしかつバイトキュー135の始まりが常
にその次の完全なx86命令の開始となるように、バイ
トキュー135に発行されたROPの数をシフト制御ラ
イン474を介して送る。例外または分岐が誤って予測
されると、デコーダコントロール584は、例外マイク
ロコードルーチンのために、新しいフェッチPCが入力
されるかまたはエントリポイントがMROMに送られる
まで、付加的なROPの発行を妨げる。
【0055】デコードPC582は、バイトキュー13
5からの各々のx86命令の論理PCを追跡する。シー
ケンシャルでないフェッチが検出されると、デコードP
C582は新しいポインタを含む。シーケンシャルな命
令が分岐の後に生じると、デコードPC582は、壊さ
れていないシーケンスの最初と最後の位置の間のバイト
キュー135のx86バイトの数をカウントし、この数
を現在のPCに加えて、そのシーケンスに続くその次の
PCを決定する。デコードPCは、DPCバス313を
介して分岐ユニット120に伝えられる。
【0056】デコーダスタック586は、ルックアヘッ
ドスタックトップ位置(TOS)ポインタ502、ルッ
クアヘッドリマップアレイ504、およびルックアヘッ
ドフル/エンプティアレイ506を含む種々の浮動小数
点スタックポインタアレイおよびレジスタのルックアヘ
ッドコピーを保持する。これらのアレイおよびポインタ
は、スタックを分岐の誤予測または例外に従った適切な
状態に戻すことを含む、スタックに影響を与えるROP
の推論的な発行から生じる浮動小数点スタックの推論的
変更を扱う。
【0057】ルックアヘッドリマップアレイ504は、
各々がスタックアレイの1つのレジスタを指定するポイ
ンタのアレイである。スタックの例示的な実施例では、
ルックアヘッドリマップアレイ504は、各々がレジス
タファイル124内の浮動小数点スタックアレイ700
のエレメントを識別する8つの3ビットポインタのアレ
イである。ルックアヘッドTOS502は、ルックアヘ
ッドリマップアレイ504の1つのポインタを選択する
3ビットポインタである。ルックアヘッドフル/エンプ
ティアレイ506は、スタックエントリがフル(1)で
あるかエンプティ(0)であるかを指定する単一ビット
のアレイである。
【0058】スーパースカラプロセッサでは、動作がデ
ィスパッチされても、その実行が適切であることの確認
にはならない。分岐が予測されると、その予測のうちの
いくつかは不正確である。ルックアヘッドリマップアレ
イ504、ルックアヘッドTOS502、およびルック
アヘッドフル/エンプティアレイ506は、浮動小数点
スタックの推論的状態のコピーをセーブするために用い
られ、それにより誤予測された分岐からの回復が加速さ
れる。浮動小数点スタックを変更する動作に関しては、
命令デコーダ118は、命令をデコードすると、浮動小
数点スタックアレイ700の未来の状態を更新する。命
令デコーダ118は、スタックポインタを増分または減
分する命令をデコードすると、ルックアヘッドTOS5
02を更新する。同様に、命令デコーダ118は、浮動
小数点交換命令(FXCH)をデコードすると、その命
令によって特定されるようなポインタを交換することに
よってルックアヘッドリマップアレイ504の未来の状
態を調節する。スタックの状態がいかなる2つの分岐命
令の間でも変化し得るため、スタック情報はすべての分
岐動作のために保存される。
【0059】浮動小数点ROPに関しては、ルックアヘ
ッドTOS502およびルックアヘッドリマップアレイ
504は、Aオペランドポインタ136、Bオペランド
ポインタ137、および宛先レジスタポインタ143の
値を決定するために組合せて用いられる。したがって、
浮動小数点ROPがデコードされると、そのオペランド
は、浮動小数点スタックの位置によって明確にまたは暗
に指定される。スタックのトップ位置にあるオペランド
に関しては、ルックアヘッドTOS502は、ルックア
ヘッドリマップアレイ504のエレメントを指し、この
ルックアヘッドリマップアレイ504のエレメントは浮
動小数点スタックアレイ700上の位置を指定する。こ
の位置は、レジスタファイル124における浮動小数点
レジスタに対応する。この位置は、スタックのトップ位
置にあるいかなるオペランドまたは宛先レジスタに関し
ても、Aオペランドポインタ136、Bオペランドポイ
ンタ137、および宛先レジスタポインタ143として
適用される。同様に、スタックのトップ位置に関するい
かなる位置に対するポインタも、ルックアヘッドTOS
502から指定された量だけオフセットされたポインタ
を適用することによって決定される。このようにしてル
ックアヘッドTOS502およびリマップアレイ504
からオペランドおよび宛先ポインタを引出すことによ
り、レジスタファイル124およびリオーダバッファ1
26が浮動小数点ROPおよび整数ROPの両方に関し
て同じ態様で推論的にまたは非推論的にデータを処理す
ることができるようになる。
【0060】図10を参照して、レジスタファイル12
4は、読取デコーダ660、レジスタファイルアレイ6
62、書込デコーダ664、レジスタファイルコントロ
ール666、およびレジスタファイルオペランドバスド
ライバ668を含む。読取デコーダ660はAオペラン
ドポインタ136およびBオペランドポインタ137を
受取り、4対の64ビットのAオペランドアドレス信号
およびBオペランドアドレス信号RA0、RA1、RA
2、RA3、RB0、RB1、RB2、RB3によって
レジスタファイルアレイ662をアドレス指定する。レ
ジスタファイルアレイ662は、ライトバックバス13
4を介してリオーダバッファ126から結果データを受
取る。リオーダバッファエントリが3個以下の他のリオ
ーダバッファエントリとパラレルに回収されると、エン
トリに関する結果データがライトバックバス134のう
ちの1つに置かれ、そのエントリに関する宛先ポインタ
がそのライトバックバスに対応する書込ポインタ133
に置かれる。ライトバックバス134上のデータは、書
込デコーダ664に与えられる書込ポインタ133上の
アドレス信号に従ってレジスタファイルアレイ662の
指定されたレジスタに送られる。
【0061】浮動小数点スタックの種々のレジスタおよ
びアレイに影響を及ぼす特定のROPを回収すると、リ
オーダバッファ126は、浮動小数点リマップアレイ6
74、浮動小数点トップ・オブ・スタック(TOS)レ
ジスタ672、および浮動小数点フル/エンプティアレ
イ676を含むレジスタファイル124内の種々の浮動
小数点スタックレジスタにデータを駆動する。レジスタ
ファイル124内に配置される浮動小数点スタックアレ
イ700(図11)は、拡張された実データをストアす
るための8つの82ビット数値レジスタのアレイであ
る。レジスタの各々は、1つの符号ビット、19ビット
指数フィールド、および62ビット有効数字部フィール
ドを含む。浮動小数点リマップアレイ674は、各々が
浮動小数点スタックアレイ700のレジスタに対するポ
インタである8つのポインタのアレイである。浮動小数
点TOS672は、浮動小数点リマップアレイ674へ
のポイントを指定する3ビットのポインタである。浮動
小数点フル/エンプティアレイ676は、スタックアレ
イの位置がフル(1)であるかエンプティ(0)である
かを示し、各々が浮動小数点スタックアレイ700のエ
レメントに対応する単一ビットのアレイである。レジス
タファイルアレイ662は、プロセッサ機能ユニットに
おいて演算されかつ発生される結果をストアするための
複数のアドレス指定可能なレジスタを含む。図11は、
8つの32ビット整数レジスタ(EAX、EBX、EC
X、EDX、ESP、EBP、ESI、EDI)、8つ
の82ビット浮動小数点レジスタFP0〜FP7、16
個の41ビット一時整数レジスタETMP0〜ETMP
15、および本実施例では一時整数レジスタETMP0
〜ETMP15と同じ物理レジスタ位置にマップされる
8つの82ビット一時浮動小数点レジスタFTMP0〜
FTMP7を含む40個のレジスタを備える例示的なレ
ジスタファイルアレイ662を示している。浮動小数点
レジスタFP0〜FP7は、浮動小数点スタックアレイ
700としてアドレス指定され、これらはルックアヘッ
ドTOS502およびルックアヘッドリマップアレイ5
04を用いて得られるとAオペランドポインタ136、
Bオペランドポインタ137および宛先レジスタポイン
タ143を用いてアクセスされる。
【0062】図12を参照して、リオーダバッファ12
6は、リオーダバッファ(ROB)コントロールおよび
ステータス870、ROBアレイ874、およびROB
オペランドバスドライバ876を含む。ROBコントロ
ールおよびステータス870は、ROPのソースオペラ
ンドおよび宛先オペランドを識別する入力を受取るよう
にAオペランドポインタ136、Bオペランドポインタ
137、および宛先ポインタ(DEST REG)バス
143に接続される。ROBアレイ874は、ROBコ
ントロールおよびステータス870によって制御される
メモリアレイである。ROBアレイ874は、機能ユニ
ットから結果を受取るように、結果バス132に接続さ
れる。先頭、末尾、Aオペランド選択、Bオペランド選
択、および結果選択信号を含む制御信号は、ROBコン
トロールおよびステータス870からROBアレイ87
4に伝えられる。これらの制御信号が、結果バス132
から入力されかつライトバックバス134、ライトポイ
ンタ133、Aオペランドバス130、Bオペランドバ
ス131、Aオペランドタグバス148、およびBオペ
ランドタグバス149に出力されるROBアレイエレメ
ントを選択する。各リオーダバッファアレイエレメント
に1つである16個の宛先ポインタが、従属性をチェッ
クするためにROBアレイ874からROBコントロー
ルおよびステータス870に与えられる。適切な従属性
検査回路は、1994年4月26日出願の米国特許出願
(スコット・エイ・ホワイト(Scott A. White)「環状
けた上げルックアヘッドを用いる範囲発見回路(A Rang
e-Finding Circuit using Circular Carry Lookahea
d)」)に詳細に記載されており、これを引用によりこ
こに援用する。
【0063】図13は、図12と関連して、各々が41
ビットの結果フィールド、9ビットの宛先ポインタフィ
ールド、4ビットの下位プログラムカウンタフィール
ド、11ビットの浮動小数点操作コードフィールド、1
1ビットの浮動小数点フラグレジスタフィールド、およ
び24ビットのコントロールおよびステータスフィール
ドを有する16個のエントリを含むリオーダバッファア
レイ874の一例である。41ビットの結果フィールド
は、機能ユニットから受取った結果をストアするために
与えられる。2つのリオーダバッファエントリは、浮動
小数点結果をストアするために用いられる。整数の結果
は41ビットのうちの32ビットにストアされ、残りの
9ビットは状態フラグを保持するために用いられる。R
OBアレイ874の各エントリの宛先ポインタフィール
ド(DEST PTR〈8:0〉)は、レジスタファイ
ル124の宛先レジスタを指定する。浮動小数点操作コ
ードフィールドは、リオーダバッファエントリに割当て
られる命令に対応するx86浮動小数点操作コードのビ
ットのサブセットをストアする。浮動小数点フラグレジ
スタフィールドは、浮動小数点動作から得られる浮動小
数点フラグの状態をストアする。浮動小数点フラグは、
浮動小数点機能ユニット122によって検出される精
度、アンダフロー、オーバフロー、ゼロ除算、非正規化
オペランドおよび無効オペランドのエラーに関する情報
をストアする。コントロールおよびステータスフィール
ドは、たとえばALLOCATEビット、BRANCH
TAKENビット、MISPREDICTビット、V
ALIDビット、EXITビット、UPDATE EI
Pビット、およびEXCEPTIONビット等のROB
エントリの状態を示すビットを含む。ALLOCATE
ビットは、リオーダバッファエントリが割当てられるか
どうかを指定する。BRANCH TAKENビット
は、分岐ユニット120が分岐が発生された分岐命令を
実行したことを信号で示す。MISPREDICTビッ
トは、分岐が不正確に予測されることを示す。VALI
Dビットは、結果が有効でありかつ命令が終了すること
を示す。EXITビットは、ROPが特定のx86命令
のROPのシーケンスにおいて最後のROPであること
を示し、拡張命令ポインタ(EIP)レジスタ(図示せ
ず)の更新をトリガするために用いられる。UPDAT
E EIPビットはまた、EIPレジスタが更新される
べきであることを示す。EXCEPTIONビットは、
命令の実行により例外またはエラー状態が生じたことを
示す。
【0064】さらに、コントロールおよびステータスフ
ィールドはまた、スタックポインタを更新するためのS
TACKビットを含む。命令デコーダ118は、浮動小
数点ROPをディスパッチすると、スタックを更新する
ための情報をリオーダバッファ126に送る。この情報
は、動作が回収されるとスタックポインタで行なうため
の動作を指定するコードを含む。スタックはプッシュさ
れるか、ポップされるか、2度ポップされるか、または
変えないままにすることが可能である。リオーダバッフ
ァ126は、動作の実行が終了しかつオペランドが回収
されるまで、リオーダバッファアレイ874内のエント
リのSTACKビットコントロールおよびステータスフ
ィールドにこの情報を保持する。
【0065】機能ユニットがスタック変更命令の実行を
終了しかつそれ以前のすべてのプログラムの順序の動作
が終了されかつそれらのオペランドが回収されると、リ
オーダバッファ126は、もし分岐の誤予測または例外
等のエラーが生じていなければ動作を回収する。スタッ
クは、リオーダバッファアレイ874内のエントリのコ
ントロールフィールドによって指定される動作に従って
更新される。たとえば、浮動小数点TOS672は、ス
タックをポップする場合には増分され、スタックを2回
ポップする場合には2だけ増分され、プッシュするかま
たは変えないままにする場合には減分される。
【0066】FXCH命令が実行されると、分岐ユニッ
ト120は4本の結果バス132のうちの1本を介して
ルックアヘッドリマップアレイのコピーをリオーダバッ
ファ126に送る。回収の際に、リオーダバッファ12
6は、ライトバックバス134のうちの1つを介してこ
のルックアヘッドリマップアレイ504の値を浮動小数
点リマップアレイ674に駆動し、この浮動小数点リマ
ップアレイ674でその値がストアされる。リオーダバ
ッファ126から浮動小数点TOS672への付加的な
ライン(図示せず)は、スタックポインタを更新するた
めに用いられる。レジスタファイルアレイ662は、浮
動小数点スタックアレイ700のエントリが更新される
と浮動小数点フル/エンプティアレイ676に0および
1を書込む回路(図示せず)を含む。このようにして、
推論的な浮動小数点スタック交換が非推論的となる。
【0067】図14に示される分岐ユニット120は、
ジャンプおよび呼出動作、復帰マイクロルーチンを含
む、シーケンシャルなプログラム順序に従っていない命
令のフェッチを制御する。分岐ユニット120は、加算
器910およびインクリメンタ912に接続される分岐
保存局902と、分岐予測比較論理908と、分岐リマ
ップアレイ904とを含む。分岐リマップアレイ904
は、浮動小数点スタックの一部分である。分岐ユニット
120はさらに、「予測発生される」分岐を追跡する分
岐予測発生FIFO906を含む。分岐予測発生FIF
O906のエントリは、対応する分岐のキャッシュ位置
と、予測発生された分岐のPCとを保持する。予測発生
された分岐のPCは、分岐が正しく予測されるかどうか
を決定するために分岐予測比較論理906に与えられ
る。加算器910およびインクリメンタ912は、デコ
ードPCに関する分岐のアドレスを計算する。命令キャ
ッシュ116によって分岐が予測発生されると、そのシ
ーケンシャルでない予測されたターゲットPCは、分岐
ブロックのPC、カラム、およびBBIから形成される
分岐の位置とともに分岐予測発生FIFO906に駆動
され、かつ分岐予測発生FIFO906にラッチされ
る。分岐ユニット120は、加算器910またはインク
リメンタ912を用いて、プログラムカウンタを決定す
ることによって対応する分岐ROPを実行する。たとえ
ば、分岐が発生されると、分岐命令のPCからのターゲ
ットプログラムカウンタと、オペランドバス130を介
してオペランドとして供給されたオフセットパラメータ
とを計算するために加算器910が用いられる。分岐ユ
ニット120によって更新されるプログラムカウンタ
と、DPCバス313を介して命令デコーダ118から
供給されるデコードPCとが一致すると、分岐ユニット
120は結果バス132を介して結果をリオーダバッフ
ァ126に駆動する。この結果は、ターゲットPCと、
一致を示す状態コードとを含む。分岐が誤予測される
と、正しいターゲットは命令キャッシュ116に駆動さ
れ、フェッチRCを再送する。
【0068】分岐保存局902は、命令デコーダ118
から操作コード/タイプバス150を介してROP操作
コードを受取り、かつ、Aオペランドバス130および
Bオペランドバス131を介してレジスタファイル12
4およびリオーダバッファ126からオペランドを受取
り、かつ、さらに結果バス132から結果データを受取
るマルチエレメントFIFOアレイである。保存局の各
エレメントは、1つの分岐命令に関する操作コード情報
をストアする。複数個の分岐命令は、そのキュー内に保
持され得る。分岐保存局902によって受取られる情報
は、デコードPC、分岐予測、および分岐オフセットを
含む。デコードPCは、デコードPCバス313を介し
てやり取りされる。分岐予測は、分岐予測ラインを介し
て伝えられる。オフセットは、リオーダバッファ126
を通過しAオペランドバス130およびBオペランドバ
ス131を介して分岐ユニット120に送られる。オフ
セットは、リオーダバッファ126を通過しAオペラン
ドバス130およびBオペランドバス131を介して分
岐ユニット120に送られる。
【0069】命令デコーダ118は、分岐ユニット12
0に分岐命令をディスパッチすると、分岐保存局902
にストアされるルックアヘッドTOS502およびルッ
クアヘッドフル/エンプティアレイ506とやり取りさ
れる。好ましくは、ルックアヘッドリマップアレイ50
4、ルックアヘッドフル/エンプティアレイ506、お
よびルックアヘッドTOS502は、予測が正しいとき
にはプロセッサ110がある態様で機能しかつ予測が間
違っている場合にはそれと異なった態様で機能するよう
に、分岐ユニット120による処理に利用可能である。
【0070】予測発生された分岐命令ROPがデコード
され発行されると、デコードPC、オフセット、および
予測がディスパッチされ、分岐ユニット120の保存局
902に保持される。予測されたターゲットカウンタが
デコードPCと一致すると、分岐は正しく予測されたこ
とになり、正しい予測を反映する結果情報が正しくリオ
ーダバッファ126に戻される。この情報は、ターゲッ
トPCと、一致が達成されたことを示す状態コードとを
含む。分岐が誤予測されると、分岐ユニット120は正
しいターゲットを命令キャッシュ116およびリオーダ
バッファ126の両方に駆動し、命令ブロックインデッ
クスを命令キャッシュ116に送る。このインデックス
は、分岐予測発生FIFO906を更新するために用い
られる予測情報を表わす。リオーダバッファ126は、
その後に続くROPの結果を取消すことにより、誤予測
された分岐に応答する。
【0071】分岐ユニット120はまた、誤予測が発生
した場合、命令デコーダ118からの論理アドレスを線
形アドレスに変換する。これを行なうために、コードセ
グメントベースポインタの局所コピーが、命令キャッシ
ュ116のコードセグメント416によって分岐ユニッ
ト120に供給される。分岐ユニット120は、浮動小
数点交換命令(FXCH)を実現しかつ浮動小数点動作
を加速するために、浮動小数点TOS672、浮動小数
点リマップアレイ674、および浮動小数点フル/エン
プティアレイ676を含む浮動小数点スタック回路の推
論的更新を管理する。分岐ユニット120は、推論的分
岐が生じたときには常に現在のスタック状態のコピーを
保存することによってこれらの目的を果たす。分岐リマ
ップアレイ904は、各FXCH命令でディスパッチさ
れるルックアヘッドリマップアレイ504からコピーさ
れる。他の実施例では、分岐リマップアレイ904は、
ルックアヘッドリマップアレイ504と同じ情報をスト
アするため、絶対に必要であるわけではない。しかしな
がら、例示的な実施例では、分岐命令ごとにではなく必
要な場合にのみルックアヘッドリマップアレイ504と
やり取りする。ここに記載する実施例では、ルックアヘ
ッドリマップアレイ504はFXCH命令に応答しての
み変化するため、ルックアヘッドリマップアレイ504
はFXCHがリクエストされたときにのみ分岐ユニット
120に送られる。
【0072】分岐ユニット120は、スタックポイン
タ、リマップアレイおよびフル/エンプティアレイの正
しいコピーを、最後に成功した分岐後に存在した状態に
ストアすることによって、誤予測に応答する。分岐RO
Pが終了すると、分岐ユニット120は、分岐予測結果
を送るように結果バス132を駆動する。分岐が正しく
予測されると、浮動小数点TOS672、浮動小数点リ
マップアレイ674、および浮動小数点フル/エンプテ
ィアレイ676は変更されずにセーブされる。
【0073】分岐の誤予測、例外、割込またはトラップ
なしでFXCH命令が通常に実行されると、分岐ユニッ
ト120は命令デコーダ118によって送られるルック
アヘッドリマップアレイ504の値をストアする。実行
が終了すると、分岐ユニット120はルックアヘッドリ
マップアレイ504の値を結果バス132に書込む。命
令が回収されると、リオーダバッファ126は、ルック
アヘッドリマップアレイ504を浮動小数点リマップア
レイ674に書込むことによってレジスタの交換にコミ
ットする。しかしながら、分岐ユニット120は、スタ
ックアンダフローエラー等のFXCH命令に関する問題
を検出すると、リオーダバッファ126によって、プロ
セッサをFXCH命令の際に再始動させる再同期化応答
を開始するようにされる。この再同期化応答は、エス・
エイ・ホワイト(S. A. White )およびエム・ディ・ゴ
ダード(M. D. Goddard )による「スーパースカラプロ
セッサの再同期化(RESYNCHRONIZATION OF A SUPERSCAL
AR PROCESSOR)」と題された本願と同日出願の同時継続
中の米国特許出願において議論されており、これを引用
によりここに援用する。
【0074】分岐ユニット120は、FXCH命令RO
Pを実行する前にスタックエラーに関して検査する。ス
タックアンダフローエラーが検出されると、分岐ユニッ
ト120はリオーダバッファ126にエラー通知コード
を戻し、これによりリオーダバッファ126に再同期化
応答を開始させる。これにより、プロセッサをFXCH
命令の際に再始動させる。しかしながら、スタックアン
ダフロー状態の後の再同期化の際に生じるFXCH命令
は他のFXCHとは異なる。特に、非再同期化FXCH
命令は、1つのFXCH ROPを含む。再同期化FX
CH命令は、2対の浮動小数点加算(FADD)ROP
と1つのFXCH ROPとを含む5つのROPを含
む。この2対のFADD ROPはそれぞれ、FXCH
命令において交換される2つの浮動小数点レジスタに0
を加える。スタックアンダフローエラーは、空のスタッ
ク位置からオペランドを読取ろうとすることによって生
じる。浮動小数点ユニット122は、ルックアヘッドフ
ル/エンプティレジスタ506に従って、レジスタが空
であるかいっぱいであるかを決定する。交換された浮動
小数点レジスタが有効データを含んでいれば、0を加え
てもデータの値は変わらない。有効データを含んでいな
ければ、浮動小数点ユニット122がFADDROPを
実行しかつ交換された浮動小数点レジスタが空であれ
ば、浮動小数点ユニット122はトラッピングがマスク
されていなければトラップ応答を開始することによっ
て、またはクワイエット非数字(QNaN)コードをレ
ジスタにロードすることによって応答する。
【0075】スタックアンダフローの後に生じる再同期
化により、プロセッサ110はFXCH命令に戻り、既
知の状態のデータ、すなわち有効データまたはQNaN
コードを配置し、無効データを用いて実行されるいかな
る命令をも含むFXCHの後に生じる命令を再試行す
る。
【0076】なお、すべての浮動小数点命令は、82ビ
ット浮動小数点データに適応するために、41ビットオ
ペランドバス130、131および41ビット結果バス
132に関して少なくとも1対のROPを含む。
【0077】分岐が誤予測されると、この誤予測された
分岐に関して、分岐リマップアレイ904と保存局90
2にストアされるスタックトップ位置ポインタおよびフ
ル/エンプティアレイとは、誤予測された分岐の前のス
タックの状態を示す。分岐ユニット120は、局所的に
ストアされたリマップおよびTOS値を命令デコーダ1
18内のルックアヘッドリマップアレイ504およびル
ックアヘッドTOSに書込み、スタックの状態を誤予測
された分岐の事実上前の状態に戻す。分岐ユニット12
0のみが誤予測を検出するため、別の機能ユニットでは
なく分岐ユニット120がスタックをテストしかつ回復
する。
【0078】プロセッサ110が例外状態を検出する
と、リオーダバッファ126は、実行が既知の状態で再
開されるようにそのエントリを流すことによって回復を
達成する。リオーダバッファコントロール870は、ス
タックに関して同様の回復動作を実行する。例外の場合
には、リオーダバッファ126は浮動小数点リマップア
レイ674をルックアヘッドリマップアレイ504に書
込み、浮動小数点TOS27をルックアヘッドTOS5
02に書込み、浮動小数点フル/エンプティアレイ67
6をルックアヘッドフル/エンプティアレイ506に書
込む。
【0079】浮動小数点スタックがFPUの外で実現さ
れるため、プロセッサ110は浮動小数点演算命令とパ
ラレルに浮動小数点交換を実行する。この理由のため、
浮動小数点スタックコンポーネント回路は浮動小数点ユ
ニット以外のユニットに組込まれる。したがって、ルッ
クアヘッドリマップアレイ504およびルックアヘッド
TOS502は、命令デコーダ118に組込まれる。浮
動小数点TOS672、浮動小数点リマップアレイ67
4、および浮動小数点スタックアレイ700は、レジス
タファイル124内に置かれる。分岐ユニット120
は、分岐リマップアレイ904を与える。同様に、パラ
レルな命令処理を促進するために、FXCH命令は、浮
動小数点ユニットではなく分岐ユニット120内で実行
される。
【0080】図15および図16はそれぞれ、リマップ
アレイMAP〈23:0〉924とスタックトップ位置
ポインタTOS〈2:0〉926とに従ってスタックエ
ントリを選択する、スタック選択信号STi〈2:0〉
928を引出すためのスタック回路920、およびスタ
ック選択信号STI〈2:0〉929を引出すためのス
タック回路922を示している。4つのディスパッチ位
置の各々に関してルックアヘッドリマップアレイ504
およびルックアヘッドTOS502を与えるために、ス
タック回路920のマルチプレクサ930および加算器
932は、命令デコーダ118において4回複製され
る。ルックアヘッドリマップアレイ504はMAP〈2
3:0〉924に対応する。ルックアヘッドTOS50
2はTOS〈2:0〉926に対応する。MAP〈2
3:0〉924に対応する浮動小数点リマップアレイ6
74、およびTOS〈2:0〉926に対応する浮動小
数点TOS672を与えるために、レジスタファイル1
24には1つのスタック回路920も含まれている。
【0081】同様に、ルックアヘッドスタック選択信号
であるスタック選択信号STI〈2:0〉929を引出
すために、命令デコーダ118にはスタック回路922
のマルチプレクサ934および加算器936が含まれ
る。スタック回路922は、4つのデコーダディスパッ
チ位置によって共有される。浮動小数点スタック選択信
号であるスタック選択信号STI〈2:0〉929を引
出すために、レジスタファイル124にスタック回路9
22のマルチプレクサ934および加算器936が含ま
れる。
【0082】STi〈2:0〉928またはSTI
〈2:0〉929に対応する浮動小数点スタック選択信
号は、図11のレジスタファイルアレイ662をアドレ
ス指定するビット〈5:3〉をセットする。これによ
り、浮動小数点命令は、スタックのトップ位置に関する
位置を指定することによってスタックのエントリを選択
する。したがって、スタック回路920または922
は、レジスタファイルアレイ662をアドレス指定する
ためにSTi〈2:0〉928またはSTI〈2:0〉
929を引出す。下位41ビットにアクセスするために
レジスタファイルアドレスビット〈8:6〉を「10
0」にセットすることにより、および浮動小数点の数の
上位41ビットにアクセスするためにレジスタファイル
アドレスビット〈8:6〉を「110」にセットするこ
とにより、浮動小数点オペランドはオペランドバス13
0、131上に駆動される。浮動小数点ROPに関して
推論的実行およびフォワーディングが達成されるよう
に、浮動小数点データの従属性に関してテストするため
にSTi〈2:0〉928またはSTI〈2:0〉92
9の信号はリオーダバッファ126に与えられる。
【0083】1つの24ビットレジスタMAP〈23:
0〉924内で、ルックアヘッドリマップアレイ504
の8つのポインタは、一連の連結された3ビットレジス
タMAP〈2:0〉〜MAP〈23:21〉に構成され
る。同様に、浮動小数点リマップアレイ674の8つの
ポインタは、1つの24ビットレジスタMAP〈23:
0〉924内に構成される。ルックアヘッドTOS50
2および浮動小数点TOS〈2:0〉はそれぞれ3ビッ
トポインタTOS〈2:0〉926によって示される。
図15および図16に示されるMAP〈23:0〉およ
びTOS〈2:0〉の内容は、スタックの初期状態を表
わす。
【0084】3ビットMAPレジスタ(MAP〈2:
0〉…MAP〈23:21〉924)におけるデータ
は、3ビットのリマップされたスタック信号STi
〈2:0〉(ここで、iはスタックのトップ位置に関す
る8つのスタック位置0〜7のうちの1つを選択する)
を発生するために、8方向マルチプレクサ930に与え
られる。ST0〈2:0〉は、スタックのトップ位置に
おけるスタックのリマップされたエントリを識別し、T
OS〈2:0〉926は0である。ST1〈2:0〉
は、スタックのトップ位置のエントリの後の位置のリマ
ップされたスタックエントリを識別する。加算器932
は、マルチプレクサ930においてST1〈2:0〉を
選択するために、TOS〈2:0〉ポインタに1を加え
る。ポインタiが増加すると、STi〈2:0〉は、ス
タックの物理的な限界(7)を超えるポインタがより低
いスタックアドレス(0)にラップするように、循環的
にシーケンシャルに付加的なスタックエレメントをアド
レス指定する。ST7〈2:0〉は、TOS〈2:0〉
926によってアドレス指定されたエレメントの前の位
置にあるリマップアレイ924のエレメントである。
【0085】いくつかのx86命令は、特定のスタック
エレメントに作用する動作を指定する。たとえば、8つ
のスタックエレメントのうちのいずれも、ROPによっ
て用いられるスタックエレメントを規定するために、命
令のmodrm バイトから得られるREG2を用いて指定す
ることができる。図16では、命令デコーダ118また
はレジスタファイル124は、TOS〈2:0〉926
とREG2との和によって指定されるリマップされたス
タックエントリSTI〈2:0〉を選択する。加算器9
36はポインタ値を加え、その和をマルチプレクサ93
4に与えて、STI〈2:0〉929が得られる。
【0086】図17を参照して、8つのスタックエレメ
ントi=0〜7に関するSTiEMPTY944を発生
するために、フル/エンプティアレイ942(EMPT
Y〈7:0〉)に保持されるデータがマルチプレクサ9
38に与えられるエンプティ回路946が示されてい
る。出力信号STiEMPTY944は、スタックのエ
レメントがいっぱいであるかまたは空であるかを指定す
る。STiEMPTY944は、ルックアヘッドスタッ
クレジスタSTi〈2:0〉928の出力によってアド
レス指定されるルックアヘッドフル/エンプティアレイ
EMPTY(EMPTY〈7〉…EMPTY〈0〉)の
エレメントの値である。STiEMPTY944の値1
は、指定された浮動小数点スタックアレイエレメントが
規定されている(いっぱいである)ことを示し、値0
は、スタックエレメントが規定されていない(空であ
る)ことを示す。4つのディスパッチ位置の各々に関し
てルックアヘッドフル/エンプティアレイ506を与え
るために、エンプティ回路946のマルチプレクサ93
8は命令デコーダ118において4回複製される。ルッ
クアヘッドフル/エンプティアレイ506(EMPTY
〈7:0〉)は、ルックアヘッドスタックレジスタST
i〈2:0〉の出力によってアドレス指定されるフル/
エンプティアレイ942(EMPTY〈7:0〉)に対
応する。浮動小数点スタックレジスタSTi〈2:0〉
の出力によってアドレス指定されるフル/エンプティア
レイ942(EMPTY〈7:0〉)に対応する浮動小
数点フル/エンプティアレイ806を与えるために、1
つのエンプティ回路946もレジスタファイル124に
含まれる。
【0087】ポインタREG2を用いて8つのフル/エ
ンプティアレイエレメントの各々をアドレス指定するこ
とができる。図18を参照して、フル/エンプティアレ
イ942(EMPTY〈7:0〉)に保持されるデータ
がマルチプレクサ940に与えられてSTIEMPTY
945信号を発生するエンプティ回路948が示されて
いる。信号STI〈2:0〉929によって、スタック
フル/エンプティアレイ942のエレメントが選択され
る。STIEMPTY945は、ポインタREG2によ
って決定されるスタック信号STI〈2:0〉929に
よってアドレス指定されるフル/エンプティアレイEM
PTY(EMPTY〈7〉…EMPTY〈0〉)のエレ
メントの値である。ルックアヘッドフル/エンプティア
レイ506を与えるために、エンプティ回路948のマ
ルチプレクサ940は、命令デコーダ118におけるデ
コーダディスパッチ位置によって共有される。ルックア
ヘッドフル/エンプティアレイ506(EMPTY
〈7:0〉)は、ルックアヘッドスタックレジスタST
I〈2:0〉の出力によってアドレス指定されるフル/
エンプティアレイ942(EMPTY〈7:0〉)に対
応する。浮動小数点スタックレジスタSTI〈2:0〉
の出力によってアドレス指定されるフル/エンプティア
レイ942(EMPTY〈7:0〉)に対応する浮動小
数点フル/エンプティアレイ806を与えるために、1
つのエンプティ回路948もレジスタファイル124に
含まれる。
【0088】4つのディスパッチ位置の各々に関して、
スタックアンダフローおよびオーバフローの状態がテス
トされ、スタックフル/エンプティアレイ506の種々
の状態の分析から結果が発生される。宛先オペランドに
関係する、1つがAソースオペランドおよびBソースオ
ペランドの各々に関するものである2つの可能なアンダ
フローインジケータと、1つのオーバフローインジケー
タとが、2つのSTACKUNDERインジケータおよ
び1つのSTACKOVERインジケータを引出すある
タイプの浮動小数点動作および分岐命令に応答して発生
される。浮動小数点ユニットにその次のROP対がディ
スパッチされると、STACKUNDER(A、B)イ
ンジケータおよびSTACKOVERインジケータが命
令デコーダ118から浮動小数点機能ユニット122に
送られる。動作がスタックプッシュを指定し、かつ、S
T7EMPTYがスタックエレメントが空でないことを
示すと、スタックオーバフロー状態が検出される。
【0089】図19、図20、図21および図22は、
以下に示すCISCタイプ命令コードのディスパッチお
よび実行から得られるスタックアレイおよびレジスタに
おける変化を示している。
【0090】 FADDP //スタックポップに応
じて加算 FXCH ST(2) //交換 FMUL //乗算 図19(A)〜図19(C)は、リマップアレイが初期
状態にある場合の、動作がディスパッチされる前のスタ
ックレジスタおよびアレイを示している。図19(A)
は、命令デコーダ118のルックアヘッドTOS50
2、ルックアヘッドリマップアレイ504、およびルッ
クアヘッドフル/エンプティアレイ506を示してい
る。図19(B)は、分岐ユニット120の分岐リマッ
プアレイ904を示している。図19(C)は、レジス
タファイル124の浮動小数点TOS672、リマップ
アレイ674、スタックアレイ700、およびフル/エ
ンプティアレイ676を示している。浮動小数点TOS
672は、値4を有し、浮動小数点リマップアレイ67
4の位置4を指している。ルックアヘッドリマップアレ
イ504は、初期化の際に設定されるポインタ値を保持
し、ポインタはシーケンスにおいて順に0から7まで1
ずつ増分する。スタックアレイ700およびフル/エン
プティアレイ676のエレメントを指す浮動小数点リマ
ップアレイ674およびルックアヘッドリマップアレイ
504は、初期化の際にこのように設定され、浮動小数
点交換(FXCH)命令に応答してのみ変化する。
【0091】図19(A)および図19(C)では、ス
タックのトップ位置は4であり、リマップアレイの位置
4は、値2.0を含む浮動小数点スタックアレイ700
の位置4を指す。浮動小数点スタック700は、アレイ
エレメント4〜7にあるデータのみを含む。したがっ
て、フル/エンプティアレイ676およびルックアヘッ
ドフル/エンプティアレイ506のエレメントはレジス
タエレメント4〜7において1に設定され、スタック7
00の対応するエレメントにデータ値が存在することを
示す。命令デコーダ118は、3つの命令をディスパッ
チするために2つのサイクルを用いる。最初のサイクル
では、デコーダはFADDPを浮動小数点ユニット12
2にディスパッチし、FXCHを分岐ユニット120に
ディスパッチする。
【0092】図20(A)〜図20(C)は、FADD
PおよびFXCH命令がディスパッチされ、そのいずれ
の命令も実行される前のスタックレジスタおよびアレイ
の値を示している。FADDPは、命令デコーダ118
によって、スタックのトップ位置の浮動小数点スタック
アレイ700のエントリ2.0をTOS(位置5)から
1だけ除いた位置のスタック値3.0に加え、TOSを
(位置5)に増分し、その和である5.0をTOSにス
トアするROPシーケンスに変換される。したがって、
図20(A)では、命令デコーダ118はルックアヘッ
ドTOS502を5に更新してスタックポップを実現
し、ルックアヘッドフル/エンプティアレイ506の位
置4を0に設定する。
【0093】FXCHは、TOSの記憶エレメントの内
容と、TOSから2つのエレメントだけ除いた指定され
たスタック位置の内容との交換を命令する。プロセッサ
は、スタックレジスタにあるデータを交換することによ
ってではなく、ルックアヘッドリマップアレイ504に
おけるポインタ5とポインタ7とを交換することによっ
てこれを行なう。図20(A)では、命令デコーダ11
8は、TOSの位置5のポインタと位置7のポインタと
を交換し、FADDPおよびFXCHをディスパッチす
る。図20(C)は、浮動小数点TOS672、リマッ
プアレイ674、スタックアレイ700、およびフル/
エンプティアレイ676がROPがディスパッチされて
も図16の値から変わらないことを示している。
【0094】図21(A)〜図21(C)は、FADD
PおよびFXCH ROPの実行後、およびFMULが
ディスパッチされた後のスタックレジスタおよびアレイ
を示している。図21(A)では、FMULはスタック
を変更しないため、FMULがディスパッチされてもル
ックアヘッドTOS502またはフル/エンプティアレ
イ506は変化しない。同様に、交換命令FXCHのみ
がリマップアレイの値を変えるため、FMULがディス
パッチされても、ルックアヘッドリマップアレイ504
は変化しない。図21(B)では、FXCHの実行によ
り、ルックアヘッドリマップアレイ504は分岐リマッ
プアレイ904にコピーされる。図21(C)は、FA
DDP、FXCHまたはFMULがいずれも回収され
ず、ROPが回収されるまで浮動小数点TOS672、
リマップアレイ674、スタックアレイ700、および
フル/エンプティアレイ676が変化しないことを示し
ている。
【0095】図22(A)〜図22(C)は、FADD
P、FXCH、およびFMULのROPの回収後のスタ
ックレジスタおよびアレイを示している。FADDPに
応答して、浮動小数点機能ユニット122は、スタック
の前のトップ位置からの2.0と、スタックのその次の
位置からの3.0とを加算し、そこにその和をストアす
る。浮動小数点TOS672は、5に増分される。FX
CHの実行の際に、命令が回収されるとルックアヘッド
リマップアレイ504は浮動小数点リマップアレイ67
4に書込まれる。FADDPが回収されると、ルックア
ヘッドTOS502が更新される。FMULは、スタッ
クのトップ位置のエントリ(位置5の8.0)をTOS
から1除いた位置のスタックエントリ(位置6の4.
0)で乗算する。FMULは、TOSの位置5において
その積をストアする。図22(C)では、FMUL R
OPに応答して、浮動小数点スタックアレイ700は、
乗算の積を含む。
【0096】分岐ユニット120がスタックアンダフロ
ーエラー等のFXCH命令に関する問題を検出すると、
分岐ユニット120は、再同期化状態の存在を示す状態
フラグ(図示せず)をリオーダバッファ126に戻す。
これらのフラグは、アサートされた例外状態通知を含
む。リオーダバッファ126は、例外信号および再同期
化信号(図示せず)を分岐ユニット120に送ることに
よって、再同期化応答を開始する。分岐ユニット120
は、フェッチPCをFXCH命令の位置に再送し、か
つ、ルックアヘッドTOS502、ルックアヘッドリマ
ップアレイ504、およびルックアヘッドフル/エンプ
ティアレイ506をFXCHのデコードの前の状態に復
元させることによって、これらの信号に応答する。この
状態で、ルックアヘッドTOS502およびルックアヘ
ッドフル/エンプティアレイ506は、図20(A)に
示されるようにFADDPをデコードした後の状態に対
応するように更新され、ルックアヘッドリマップアレイ
504は、図19(A)に示されるようにFXCHのデ
コードの前の状態に復元される。
【0097】分岐ユニット120によってFXCH命令
および分岐命令が誤予測されたことが発見された後に条
件つき分岐命令がディスパッチされると、分岐ユニット
120は命令キャッシュ116のフェッチPCを適切な
命令ポインタに再送し、FXCH命令に対応する、図2
1(B)および図22(B)に示される分岐リマップア
レイ904にストアされるアレイでルックアヘッドリマ
ップアレイ504を書換える。
【0098】プロセッサ110の機能エレメントによっ
て例外状態が検出されると、例外が回収されたときの浮
動小数点TOS672、リマップアレイ674、および
フル/エンプティアレイ676はそれぞれルックアヘッ
ドTOS502、リマップアレイ504、およびフル/
エンプティアレイ506に書込まれる。
【0099】プロセッサ110は、複数段パイプライン
として動作する。図23は、シーケンシャル実行パイプ
ラインに関するタイミング図である。段は、順に、フェ
ッチ段、デコード1段、デコード2段、実行段、結果
段、および回収段を含む。
【0100】デコード1の間、推論的命令がフェッチさ
れ、命令デコーダ118が命令をデコードし、命令が有
効になる。命令デコーダ118は、STI、STIEM
PTY、STi、およびSTiEMPTY(i=0〜
7)を含むスタック情報がデコード2の間に更新される
ように、ルックアヘッドTOS502、ルックアヘッド
フル/エンプティアレイ506、およびルックアヘッド
リマップアレイ504を更新する。
【0101】デコード2の間、命令デコーダ118の出
力は有効になる。たとえば、オペランドバス130、1
31およびオペランドタグバス148、149はデコー
ド2の初期段階で有効になり、レジスタファイル124
およびリオーダバッファ126からのオペランドとリオ
ーダバッファ126からのオペランドタグとがデコード
2の後の方で利用可能になるようにする。
【0102】実行の間、オペランドバス130、131
およびタグ148、149は有効になり、機能ユニット
の保存局に与えられる。機能ユニットはROPを実行
し、結果バスに関して調停する。FXCH ROPが実
行されると、分岐ユニット120は現在のルックアヘッ
ドリマップアレイ504をセーブする。分岐命令に関し
ては、分岐ユニット120は、ルックアヘッドTOS5
02およびルックアヘッドフル/エンプティアレイ50
6を保存する。誤予測された分岐に関しては、ルックア
ヘッドTOS502、ルックアヘッドフル/エンプティ
アレイ506、およびルックアヘッドリマップアレイ5
04は、分岐ユニット120によってセーブされた値か
ら復元される。結果の間、機能ユニットは結果をリオー
ダバッファ126および保存局に書込む。スタック交換
命令結果が書込まれると、結果段の終わりのほうの段階
で浮動小数点リマップアレイ674は分岐リマップアレ
イ904によって置き換えられる。プッシュまたはポッ
プするROPの結果がリオーダバッファ126に書込ま
れた後、TOS672および浮動小数点フル/エンプテ
ィアレイ676は結果段の終わりのほうの段階で更新さ
れる。回収の間、オペランドは、リオーダバッファ12
6からレジスタファイル124に回収される。
【0103】図24は、スーパースカラプロセッサにお
いてスタックを制御するための方法の一部分として、命
令デコーダ118によって行なわれる手順のフローチャ
ートである。この手順は、ディスパッチウィンドウにお
いてディスパッチされる4つ以下のROPの動作ごとに
繰返される。例示的なプロセッサ110では、2つ以下
の浮動小数点命令または1つだけの浮動小数点命令と、
2つの非浮動小数点命令とが1つのディスパッチウィン
ドウに置かれる。これにより、ディスパッチウィンドウ
において、浮動小数点スタックに影響を及ぼすROPの
数は効果的に2つに制限される。命令デコーダ118は
ステップ950で命令をデコードし、ステップ952で
デコードされた命令がスタックに影響を及ぼす命令であ
るかどうかを決定する。分岐命令等の、スタックを直接
変えない命令も命令デコーダ118によって処理され
る。フローチャートを簡略化するために、図24にはス
タックパラメータを更新する機能のみが示されている。
スタック調節命令は、スタックエレメント交換ROP
と、スタックをプッシュおよびポップするROPを含
む。
【0104】論理ステップ954の制御下で、ROPが
スタックをプッシュまたはポップすると、命令デコーダ
118は、ルックアヘッドTOS502を減分または増
分することにより、およびルックアヘッドフル/エンプ
ティアレイ506を更新することによりルックアヘッド
TOSを更新する。ステップ956で、ルックアヘッド
TOS502は、プッシュ機能の場合は減分され、ポッ
プ機能の場合は増分される。なお、プッシュ動作または
ポップ動作に関してスタックポインタを増分または減分
することによって異なるスタック実現例を調節してもよ
い。プッシュ動作において減分され、ポップ動作におい
て増分されるスタックが開示されたスタックの実施例と
同等のものであり本発明の範囲内であることが理解され
る筈である。スタックのプッシュの際に特定されるルッ
クアヘッドフル/エンプティアレイ506のエレメント
は1に設定され、TOSポインタは減分される。スタッ
クのポップの前に指定されるルックアヘッドフル/エン
プティアレイ506のエレメントは0にクリアされ、T
OSポインタ502はポップ動作において増分される。
【0105】論理ステップ958で識別されるスタック
エレメント交換ROPに関しては、命令デコーダ118
は、ステップ960で、命令によって指定されるルック
アヘッドリマップアレイ504のエレメントを交換す
る。
【0106】ステップ962で、スタックに影響を及ぼ
さないROPを含むすべてのROPが命令デコーダ11
8によって種々の機能ユニットにディスパッチされる。
たとえば、分岐動作は分岐ユニット120にディスパッ
チされる。図25は、スーパースカラプロセッサにおい
てスタックを制御するための方法の第2の部分として、
分岐ユニット120によって行なわれる手順のフローチ
ャートである。分岐ユニット120にディスパッチされ
るROPは、スタック交換命令および種々の分岐ROP
を含む。ROPは、動作識別ステップ964において識
別される。
【0107】論理ステップ965に従って命令がスタッ
クエレメント交換命令であれば、分岐ユニット120は
ステップ966でSTACKUNDER識別をテストす
ることによってスタックアンダフローエラーが起こった
かどうかを決定する。アンダフローが生じれば、ステッ
プ967で再同期化の手順が管理される。スタックアン
ダフローが起こっていなければ、命令デコーダ118に
よって交換命令に関して更新されたルックアヘッドリマ
ップアレイ504がステップ968でセーブされる。ル
ックアヘッドリマップアレイ504のすべてのエレメン
トは、分岐リマップアレイ904内のエントリに書込ま
れる。
【0108】論理ステップ970で検出された分岐RO
Pに関しては、分岐ユニット120はスタックパラメー
タをディスパッチされた分岐ROPと相関させるため
に、ステップ972で保存局902にルックアヘッドT
OS502およびルックアヘッドスタックフル/エンプ
ティアレイ506をセーブする。保存局902は、分岐
ROPの実行を妨げる競合を解決し、ステップ974で
ROPを発行する。ROPが発行されると、分岐ユニッ
ト120は分岐確認ステップ976を実行する。誤予測
が検出されると、分岐ユニット120は、予測訂正論理
ステップ978に応じて、命令デコーダ118における
ルックアヘッドTOS502およびルックアヘッドスタ
ックフル/エンプティアレイ506を、ステップ972
で分岐ユニット保存局902にストアされた値に置き換
えることによって、ステップ980でプロセッサ110
のルックアヘッド状態を復元する。
【0109】分岐が予測されても誤予測されても、分岐
ユニット120は、ステップ982で結果情報を結果バ
ス132のうちの1つに書込むことによって現在の分岐
動作を終了する。図26は、スーパースカラプロセッサ
においてスタックを制御するための方法の第3の部分と
して組合された、リオーダバッファ126およびレジス
タファイル124によって行なわれる手順の概略的なフ
ローチャートである。分岐命令が終了すると結果バス1
32を介してリオーダバッファ126およびレジスタフ
ァイル124に戻される分岐情報は、ルックアヘッドリ
マップアレイ504を含む。浮動小数点機能ユニット1
22が実行を終了すると更新されるパラメータは、浮動
小数点TOS672および浮動小数点フル/エンプティ
アレイ676である。リオーダバッファ126およびレ
ジスタファイル124は、スタックをプッシュまたはポ
ップする浮動小数点動作またはスタック交換動作が実行
を終了し、かつそのオペランドが回収されると、スタッ
クに関連するレジスタおよび位置を更新する。ROPの
識別は、識別ステップ984で認識される。
【0110】論理ステップ986での決定に従ってRO
Pがスタック交換命令であれば、ステップ988でリオ
ーダバッファ126内の浮動小数点リマップアレイ67
4は、分岐ユニット120における分岐リマップアレイ
904からルックアヘッドリマップアレイ504に置き
換えられる。同様に、論理ステップ990に従って動作
がスタックプッシュまたはポップであれば、浮動小数点
TOS672はそれぞれ減分または増分される。ステッ
プ992で、スタックがプッシュされた後にTOS67
2によってアドレス指定される浮動小数点フル/エンプ
ティアレイ676のエレメントは、プッシュが回収され
ると1に設定される。スタックをポップする前にTOS
672によってアドレス指定される浮動小数点フル/エ
ンプティアレイ676のエレメントは、スタックポップ
が回収されると0にクリアされる。
【0111】以上の説明では、種々のブロック、回路、
ポインタおよびアレイの位置を含む、スタックおよびプ
ロセッサの多数の属性を特に特定している。スタック
は、例示的に浮動小数点スタックとして実施されてい
る。これらの属性は本発明の範囲を制限するものではな
く、好ましい実施例を説明するためのものである。たと
えば、種々のデータ構造の各々はプロセッサのいかなる
位置に実現されてもよい。スタックは独立した汎用スタ
ックであってもよく、または特定の機能ブロック内に配
置されてもよい。スタックは、汎用スタックの呼出に応
答して動作してもよく、または特定の動作が実行されて
いるときにのみ機能してもよい。スタックは浮動小数点
動作と関連していなくてもよい。スタックは、スーパー
スカラ以外のプロセッサに組込まれてもよく、または、
多くのパイプラインを有しかつクロックサイクルの間に
種々の多くのROPを処理する能力を有するスーパース
カラプロセッサに組込まれてもよい。本発明の範囲は、
前掲の特許請求の範囲およびそれと同等のものによって
のみ決定される。
【図面の簡単な説明】
【図1】図2および図3の配置を示す図である。
【図2】データスタックが分布される種々の主なブロッ
クを示すプロセッサのアーキテクチャレベルの概略ブロ
ック図の上半分を示す図である。
【図3】データスタックが分布される種々の主なブロッ
クを示すプロセッサのアーキテクチャレベルの概略ブロ
ック図の下半分を示す図である。
【図4】図2および図3のプロセッサにおける浮動小数
点機能ユニットの概略ブロック図である。
【図5】図2および図3のプロセッサにおいて浮動小数
点スタックをサポートする機能ブロックを示すブロック
図である。
【図6】スタックに関連する機能を果たす命令キャッシ
ュのアーキテクチャレベルのブロック図である。
【図7】図8および図9の配置を示す図である。
【図8】スタックの機能ブロックを含む命令デコーダの
アーキテクチャレベルのブロック図の左半分を示す図で
ある。
【図9】スタックの機能ブロックを含む命令デコーダの
アーキテクチャレベルのブロック図の右半分を示す図で
ある。
【図10】図2および図3のプロセッサ内のレジスタフ
ァイルのアーキテクチャレベルのブロック図である。
【図11】図10に示されるレジスタファイルのメモリ
フォーマットを示す図である。
【図12】図2および図3のプロセッサ内のリオーダバ
ッファのアーキテクチャレベルのブロック図である。
【図13】図12のリオーダバッファ内のメモリフォー
マットを表わす図である。
【図14】スタック機能ブロックを含む分岐ユニットの
アーキテクチャレベルのブロック図である。
【図15】ルックアヘッドスタック機能ブロックの相互
接続を示す命令デコーダの機能ブロックを示す図であ
る。
【図16】ルックアヘッドスタック機能ブロックの相互
接続を示す命令デコーダの機能ブロックの図である。
【図17】ルックアヘッドスタック機能ブロックの相互
接続を示す命令デコーダの機能ブロックの図である。
【図18】ルックアヘッドスタック機能ブロックの相互
接続を示す命令デコーダの機能ブロックの図である。
【図19】(A)、(B)および(C)は、図2および
図3のプロセッサにおいてスタックを制御するためのレ
ジスタ、アレイおよびポインタと、その1回目の内容を
示す図である。
【図20】(A)、(B)および(C)は、図2および
図3のプロセッサにおいてスタックを制御するためのレ
ジスタ、アレイおよびポインタと、その2回目の内容を
示す図である。
【図21】(A)、(B)および(C)は、図2および
図3のプロセッサにおいてスタックを制御するためのレ
ジスタ、アレイおよびポインタと、その3回目の内容を
示す図である。
【図22】(A)、(B)および(C)は、図2および
図3のプロセッサにおいてスタックを制御するためのレ
ジスタ、アレイおよびポインタと、その4回目の内容を
示す図である。
【図23】プロセッサ110における複数段シーケンシ
ャル実行パイプラインに関するタイミング図である。
【図24】組合せてスタックを制御する種々の機能ブロ
ックにおいて行なわれる手順のフロー図である。
【図25】組合せてスタックを制御する種々の機能ブロ
ックにおいて行なわれる手順のフロー図である。
【図26】組合せてスタックを制御する種々の機能ブロ
ックにおいて行なわれる手順のフロー図である。
【符号の説明】
502 ルックアヘッドスタックポインタ 504 リマップアレイ 672 スタックポインタ 674 リマップアレイ 700 データエレメント
───────────────────────────────────────────────────── フロントページの続き (72)発明者 マイケル・ディー・ゴッダード アメリカ合衆国、78739 テキサス州、オ ースティン、オールド・ハーバー・レー ン、6434 (72)発明者 スコット・エイ・ホワイト アメリカ合衆国、78748 テキサス州、オ ースティン、ペレンニアル・コート、 11303

Claims (27)

    【特許請求の範囲】
  1. 【請求項1】 複数の動作を同時に行なうためのプロセ
    ッサであって、前記動作は、浮動小数点計算命令と、浮
    動小数点スタック交換と、浮動小数点スタックをプッシ
    ュまたはポップする命令とを含む命令セットから選択さ
    れ、前記プロセッサは、 (a) 浮動小数点機能ユニットと、 (b) 前記浮動小数点機能ユニットに結合され、 前記浮動小数点機能ユニットから受取られる計算結果を
    ストアするための浮動小数点スタックアレイと、 前記浮動小数点スタックアレイに結合され、アレイエレ
    メントを特定するための浮動小数点スタックポインタ
    と、 前記浮動小数点スタックポインタを前記浮動小数点スタ
    ックアレイに結合し、前記スタックポインタによってア
    ドレス指定される浮動小数点スタックアレイエレメント
    を再順序づけするための浮動小数点スタックリマップア
    レイとを含む浮動小数点スタックとを含む、プロセッ
    サ。
  2. 【請求項2】 前記浮動小数点スタックは、浮動小数点
    スタック交換命令が浮動小数点計算と同時に実行できる
    ように、前記浮動小数点機能ユニットから独立して動作
    可能である、請求項1に記載のプロセッサ。
  3. 【請求項3】 前記命令セットは分岐命令をさらに含
    み、前記浮動小数点スタックは、 アレイエレメントを交換することによって浮動小数点ス
    タック交換命令に応答するルックアヘッドリマップアレ
    イと、 前記浮動小数点スタックアレイのエレメントを特定する
    ように前記ルックアヘッドリマップアレイに結合され、
    前記浮動小数点スタックをポップまたはプッシュする命
    令に応答して前記ポインタを調節するルックアヘッドス
    タックポインタと、 前記ルックアヘッドリマップアレイおよび前記ルックア
    ヘッドスタックポインタに結合される分岐ユニットとを
    さらに含み、前記分岐ユニットは、 分岐命令に応答して前記ルックアヘッドリマップアレイ
    をセーブするためのメモリと、 分岐が発生されるかどうかを予測するための分岐予測器
    と、 前記分岐予測器に結合され、分岐が予測されるかまたは
    誤予測されるかを判断する分岐比較器と、 前記メモリと前記ルックアヘッドリマップアレイとの間
    に結合され、誤予測された分岐に応答して、セーブされ
    た値をアレイに送る第1の制御ラインと、 前記ルックアヘッドリマップアレイおよび前記ルックア
    ヘッドスタックポインタをそれぞれ前記浮動小数点リマ
    ップアレイおよび前記浮動小数点スタックポインタに結
    合し、それぞれ浮動小数点の値をルックアヘッドの値で
    置き換えることによってスタック交換命令の実行に応答
    する第2の制御ラインとを含む、請求項1に記載のプロ
    セッサ。
  4. 【請求項4】 前記浮動小数点スタックは、 前記浮動小数点リマップアレイに結合され、浮動小数点
    スタックエレメントが空であるかいっぱいであるかを指
    定する浮動小数点スタックフル/エンプティアレイと、 前記ルックアヘッドリマップアレイに結合され、前記浮
    動小数点スタックフル/エンプティアレイのルックアヘ
    ッド状態をモニタするルックアヘッドスタックフル/エ
    ンプティアレイとをさらに含む、請求項1に記載のプロ
    セッサ。
  5. 【請求項5】 スタック交換命令と、スタックをプッシ
    ュまたはポップする命令と、スタックにアクセスする命
    令とを含む命令セットを行なうプロセッサにおいてスタ
    ックを制御するための方法であって、 命令をデコードしてその指示を判断するステップと、 前記指示がスタック交換命令であるときスタックリマッ
    プアレイのエレメントを交換するステップと、 前記指示がスタックプッシュであるときスタックポイン
    タを1つの方向に調節するステップと、 前記指示がスタックポップであるとき前記スタックポイ
    ンタを別の方向に調節するステップと、 前記指示がスタックアクセスであるとき前記スタックポ
    インタによって指定されかつ前記スタックリマップアレ
    イによって再順序づけされたスタックアレイエレメント
    を用いるステップとを含む、方法。
  6. 【請求項6】 スタック交換命令、スタックをプッシュ
    またはポップする命令、スタックにアクセスする命令、
    および条件つき分岐命令を含む命令セットを行なうプロ
    セッサにおいてスタックを制御するための方法であっ
    て、 (a) 命令をデコードしてその指示を判断するステッ
    プと、 (b) スタック交換命令に応答してルックアヘッドス
    タックリマップアレイのエレメントを交換するステップ
    と、 (c) スタックをプッシュまたはポップする命令に応
    答して必要に応じてルックアヘッドスタックポインタを
    調節するステップと、 (d) スタックにアクセスする命令に応答して、前記
    ルックアヘッドスタックポインタによって指定されかつ
    前記ルックアヘッドスタックリマップアレイによって再
    順序づけされたスタックアレイエレメントを用いるステ
    ップと、 (e) 条件つき分岐命令に応答するステップとを含
    み、前記条件つき分岐命令に応答するステップは、 前記ルックアヘッドリマップアレイをセーブするステッ
    プと、 分岐が発生されるかどうかを予測するステップと、 分岐が正しく予測されたか誤予測されたかを判断するス
    テップと、 分岐命令が誤予測されたときに前記ルックアヘッドリマ
    ップアレイをセーブされた値に復元するステップとを含
    み、前記方法は、 (f) 命令をそのプログラムの順序で回収するステッ
    プをさらに含み、前記回収するステップは、 回収するスタック交換命令に応答してスタックリマップ
    アレイを前記ルックアヘッドリマップアレイと置き換え
    るステップと、 回収するスタックをプッシュまたはポップする命令に応
    答してスタックポインタを調節するステップとを含む、
    方法。
  7. 【請求項7】 スタックをプッシュおよびポップする命
    令に応答してルックアヘッドフル/エンプティアレイに
    おけるエントリを設定およびクリアするステップと、 スタックをプッシュまたはポップする命令の回収に応答
    してルックアヘッドフル/エンプティアレイにおけるエ
    ントリを設定およびクリアするステップとをさらに含
    む、請求項6に記載の方法。
  8. 【請求項8】 (a) スタック実行エラーを検出する
    ステップをさらに含み、前記ステップは、 前記ルックアヘッドフル/エンプティアレイのすべての
    エレメントがいっぱいであるかどうかを判断するステッ
    プと、 前記ルックアヘッドフル/エンプティアレイのすべての
    エレメントが空であるかどうかを判断するステップと、 前記ルックアヘッドフル/エンプティアレイのすべての
    エレメントが空であるとき、スタックをポップする命令
    に応答してスタックアンダフローエラーを検出するステ
    ップと、 前記ルックアヘッドフル/エンプティアレイのすべての
    エレメントがいっぱいであるとき、スタックをプッシュ
    する命令に応答してスタックオーバフローエラーを検出
    するステップとを含み、 (b) 検出されたスタック実行エラーに応答して再同
    期化応答を開始するステップをさらに含む、請求項7に
    記載の方法。
  9. 【請求項9】 例外状態を検出するステップと、 検出された例外状態に応答して、前記スタックリマップ
    アレイを前記ルックアヘッドスタックリマップアレイに
    コピーし、かつ前記スタックポインタを前記ルックアヘ
    ッドスタックポインタにコピーするステップとをさらに
    含む、請求項7に記載の方法。
  10. 【請求項10】 スタック交換命令とスタックをプッシ
    ュまたはポップする命令とを含む命令セットを行なうプ
    ロセッサにおけるスタックであって、前記スタックは、 スタックメモリアレイと、 前記スタックメモリアレイに結合され、スタックメモリ
    アレイエレメントを指定するスタックポインタとを含
    み、前記スタックポインタは、スタックをプッシュまた
    はポップする命令に応答して調節され、 前記スタックポインタに結合されかつスタックアレイエ
    レメントを、前記スタックポインタによってアドレス指
    定されるように再順序づけする前記スタックメモリアレ
    イに結合されるポインタのスタックリマップアレイとを
    含む、スタック。
  11. 【請求項11】 前記スタックリマップアレイに結合さ
    れ、前記スタックリマップアレイを介して前記スタック
    ポインタによってアドレス指定され、スタックアレイエ
    レメントを、前記スタックポインタによってアドレス指
    定されるように再順序づけするスタックフル/エンプテ
    ィアレイをさらに含み、前記スタックフル/エンプティ
    アレイのエレメントはそれぞれ、スタックアレイエント
    リの加算または削除を表わす、スタックをプッシュおよ
    びポップする命令に応答してセットおよびクリアされ
    る、請求項10に記載のスタック。
  12. 【請求項12】 分岐命令、スタック交換命令、スタッ
    クをプッシュする命令、およびスタックをポップする命
    令を含む命令セットの複数の命令を同時にフェッチし、
    デコードし、実行し、かつ回収するプロセッサにおける
    スタックであって、前記プロセッサは、条件つき分岐命
    令に応答して分岐が発生されるかどうかを予測する分岐
    予測器と、前記分岐予測器に結合され、その後に条件つ
    き分岐が予測されたかまたは誤予測されたかを判断する
    分岐テスタとを有する分岐ユニットを含み、前記スタッ
    クは、 スタックメモリアレイと、 前記スタックメモリアレイに結合され、スタックメモリ
    アレイエレメントを指定するためのスタックポインタと
    を含み、前記スタックポインタは、スタックをプッシュ
    またはポップする命令に応答して調節され、 前記スタックポインタに結合され、かつ、前記スタック
    ポインタによってアドレス指定されるスタックアレイエ
    レメントを再順序づけするように前記スタックメモリア
    レイに結合されるポインタのスタックリマップアレイを
    さらに含み、前記ポインタは、スタック交換命令に応答
    して交換され、 前記スタックポインタのルックアヘッド状態を指定する
    ルックアヘッドスタックポインタをさらに含み、前記ル
    ックアヘッドスタックポインタはスタックをプッシュま
    たはポップする命令に応答して調節され、 前記ルックアヘッドスタックポインタに結合され前記ス
    タックポインタによってアドレス指定されるスタックア
    レイエレメントを再順序づけするためのルックアヘッド
    リマップアレイをさらに含み、前記ルックアヘッドリマ
    ップアレイのエレメントはスタック交換命令に応答して
    交換され、 前記分岐ユニットに結合され、スタック交換命令に応答
    して前記ルックアヘッドリマップアレイをセーブするた
    めのメモリと、 前記分岐ユニットに結合され、スタックをプッシュまた
    はポップする命令に応答して前記ルックアヘッドスタッ
    クポインタをセーブするためのメモリと、 前記分岐テスタに結合され、誤予測された分岐に応答し
    て前記ルックアヘッドリマップアレイおよび前記ルック
    アヘッドスタックポインタをセーブされた値に復元する
    ための手段と、 スタック交換命令の回収に応答して、前記スタックリマ
    ップアレイを前記ルックアヘッドリマップアレイで置き
    換えるための手段とをさらに含む、スタック。
  13. 【請求項13】 前記ルックアヘッドリマップアレイに
    結合され、スタックアレイエレメントを再順序づけする
    ためにルックアヘッドスタックポインタによってルック
    アヘッドリマップアレイを介してアドレス指定されるル
    ックアヘッドフル/エンプティアレイをさらに含み、前
    記ルックアヘッドフル/エンプティアレイのエレメント
    は、それぞれスタックアレイエントリの加算または削除
    を表わすスタックをプッシュまたはポップする命令に応
    答して設定およびクリアされる、請求項12に記載のス
    タック。
  14. 【請求項14】 前記ルックアヘッドスタックポインタ
    と、ルックアヘッドリマップアレイと、ルックアヘッド
    フル/エンプティアレイとに結合される命令デコーダを
    さらに含むプロセッサにおけるスタックであって、前記
    スタックは、 前記命令デコーダに結合され、スタック交換命令に応答
    して前記ルックアヘッドリマップアレイのポインタを交
    換するための手段と、 前記命令デコーダに結合され、スタックをプッシュする
    命令およびスタックをポップする命令に応答して、前記
    ルックアヘッドスタックポインタを調整し、かつそれぞ
    れ前記ルックアヘッドフル/エンプティアレイにおいて
    エントリを加えるおよび取除くための手段とを含む、請
    求項13に記載のスタック。
  15. 【請求項15】 前記命令デコーダに結合され、スタッ
    ク実行エラーを検出するための手段と、 前記検出手段のスタックエラー検出に応答して、再同期
    化応答を開始するための手段とをさらに含む、請求項1
    4に記載のスタック。
  16. 【請求項16】 前記スタックポインタおよび前記リマ
    ップアレイに結合されるリオーダバッファと、前記スタ
    ックメモリアレイに結合されるレジスタファイルとをさ
    らに含むプロセッサにおけるスタックであって、前記ス
    タックは、 前記リオーダバッファに結合され、かつ前記スタックリ
    マップアレイを介して前記スタックポインタに結合され
    るスタックフル/エンプティアレイをさらに含む、請求
    項13に記載のスタック。
  17. 【請求項17】 前記プロセッサは例外状態検出器を含
    み、 前記命令デコーダに結合され、例外状態に応答して、前
    記ルックアヘッドリマップアレイを前記スタックリマッ
    プアレイで置き換え、前記ルックアヘッドスタックフル
    /エンプティアレイを前記スタックフル/エンプティア
    レイで置き換え、前記ルックアヘッドスタックポインタ
    を前記スタックポインタで置き換えるための手段をさら
    に含む、請求項16に記載のスタック。
  18. 【請求項18】 前記プロセッサは浮動小数点機能ユニ
    ットをさらに含み、前記浮動小数点機能ユニットは前記
    スタックメモリアレイ内に含まれるデータに基づいて動
    作する、請求項13に記載のスタック。
  19. 【請求項19】 分岐命令と、スタックエレメント交換
    命令と、スタックをプッシュおよびポップする命令とを
    含む命令セットからの複数の命令を同時に実行するプロ
    セッサであって、 前記スタックは、 (a) スタックメモリアレイを含むレジスタファイル
    と、 (b) 前記レジスタファイルに結合されるリオーダバ
    ッファとを含み、前記リオーダバッファは、 スタックメモリアレイエレメントを特定するたのスタッ
    クポインタと、 前記スタックポインタを前記スタックメモリアレイに結
    合し、前記スタックポインタによってアドレス指定され
    るスタックメモリエレメントを再順序づけするためのス
    タックリマップアレイとを含み、 (c) 前記レジスタファイルおよび前記リオーダバッ
    ファに結合される命令デコーダをさらに含み、前記命令
    デコーダは、 ルックアヘッドスタックポインタと、 前記ルックアヘッドスタックポインタに結合されるルッ
    クアヘッドリマップアレイと、 前記ルックアヘッドスタックポインタおよび前記ルック
    アヘッドリマップアレイに結合されるデコーダ回路と、 スタックエレメント交換命令のデコードに応答して、ル
    ックアヘッドリマップアレイエレメントを交換するため
    の手段と、 スタックをプッシュまたはポップする命令のデコードに
    応答して、前記ルックアヘッドスタックポインタを調節
    するための手段とを含み、 (d) 前記命令デコーダに結合され、前記ルックアヘ
    ッドリマップアレイおよび前記ルックアヘッドスタック
    ポインタのコピーを受取るための分岐ユニットをさらに
    含み、前記分岐ユニットは、 分岐命令に応答して、前記ルックアヘッドリマップアレ
    イおよび前記ルックアヘッドスタックポインタのコピー
    をその中にセーブするためのメモリと、 条件つき分岐命令に応答して、分岐が発生されるかどう
    かを予測するための分岐予測器と、 前記分岐予測器に結合され、前記条件つき分岐が予測さ
    れたか誤予測されたかをその後に判断するための分岐テ
    スタと、 誤予測された分岐に応答して、前記ルックアヘッドリマ
    ップアレイを前記セーブされたルックアヘッドリマップ
    アレイで置き換え、かつ前記ルックアヘッドスタックポ
    インタを前記セーブされたルックアヘッドスタックポイ
    ンタで置き換えるための手段と、 スタックエレメント交換命令の実行の終了に応答して、
    前記スタックリマップアレイを前記セーブされたルック
    アヘッドリマップアレイで置き換えるための手段とを含
    む、プロセッサ。
  20. 【請求項20】 前記命令デコーダに結合され、スタッ
    ク実行エラーを検出するための手段と、 前記検出手段のスタックエラー検出に応答して、再同期
    化応答を開始するための手段とをさらに含む、請求項1
    9に記載のプロセッサ。
  21. 【請求項21】 例外状態を検出するための手段と、 前記命令デコーダに結合され、例外状態に応答して、前
    記ルックアヘッドリマップアレイを前記スタックリマッ
    プアレイで置き換え、前記ルックアヘッドスタックフル
    /エンプティアレイを前記スタックフル/エンプティア
    レイで置き換え、前記ルックアヘッドスタックポインタ
    を前記スタックポインタで置き換えるための手段とをさ
    らに含む、請求項19に記載のプロセッサ。
  22. 【請求項22】 浮動小数点機能ユニットをさらに含
    み、前記浮動小数点機能ユニットは、前記スタックメモ
    リアレイに含まれるデータに基づいて動作する、請求項
    19に記載のプロセッサ。
  23. 【請求項23】 スタックプッシュ、スタックポップ、
    および分岐命令を含む命令セットからの命令を行なうプ
    ロセッサにおけるスタックであって、前記プロセッサ
    は、命令をディスパッチするデコーダと、前記デコーダ
    に結合され、条件つき分岐命令を予測しかつ誤予測を検
    出する分岐ユニットと、前記デコーダに結合され、予測
    に応じて命令を推論的に実行する複数の機能ユニット
    と、前記デコーダおよび前記機能ユニットに結合され、
    回収された命令の結果を受取るメモリとを含み、前記ス
    タックは、 (a) 複数の記憶エレメントと、 (b) 前記記憶エレメントに結合され、前記複数の記
    憶エレメントのうちの記憶エレメントにアドレス指定す
    るためのポインタと、 (c) 前記機能ユニットが命令を推論的に実行してい
    るときに前記複数の記憶エレメントのうちの記憶エレメ
    ントをアドレス指定するルックアヘッドポインタと、 (d) 前記記憶エレメント、前記ポインタ、および前
    記ルックアヘッドポインタに結合されるスタックコント
    ローラとを含み、前記スタックコントローラは、 スタックプッシュおよびスタックポップのディスパッチ
    に応答して、前記ルックアヘッドポインタを更新するた
    めの手段と、 スタックプッシュおよびスタックポップの回収に応答し
    て、前記ルックアヘッドポインタを前記ポインタにコピ
    ーするための手段と、 条件つき分岐命令のディスパッチに応答して、前記ルッ
    クアヘッドポインタをセーブするための手段と、 分岐の誤予測に応答して、前記ルックアヘッドポインタ
    を前記セーブされた値に復元するための手段とを含む、
    スタック。
  24. 【請求項24】 前記ポインタに結合され、前記複数の
    記憶エレメントのうちの記憶エレメントに対応するエレ
    メントを有し、前記記憶エレメントがいっぱいであるか
    空であるかを示すためのフル/エンプティアレイをさら
    に含み、前記スタックコントローラは、 スタックプッシュおよびスタックポップのディスパッチ
    に応答して前記フル/エンプティアレイを調節するため
    の手段と、 スタックプッシュおよびスタックポップの回収に応答し
    て、前記フル/エンプティアレイを調節するための手段
    と、 条件つき分岐命令予測に応答して、前記フル/エンプテ
    ィアレイをセーブするための手段と、 分岐の誤予測に応答して、前記フル/エンプティアレイ
    を前記セーブされた値に復元するための手段とをさらに
    含む、請求項23に記載のスタック。
  25. 【請求項25】 スタックプッシュ、スタックポップ、
    および分岐命令を含む命令セットからの命令を行なうプ
    ロセッサにおけるスタックであって、前記プロセッサ
    は、命令をディスパッチするデコーダと、前記デコーダ
    に結合され、条件つき分岐命令を予測しかつ誤予測を検
    出する分岐ユニットと、前記デコーダに結合され、予測
    に応じて命令を推論的に実行するための複数の機能ユニ
    ットと、前記デコーダおよび前記機能ユニットに結合さ
    れ、回収された命令の結果を受取るためのメモリとを含
    み、前記スタックは、 (a) 複数の記憶エレメントと、 (b) 前記記憶エレメントに結合され、前記複数の記
    憶エレメントのうちの記憶エレメントを再順序づけする
    ためのリマップアレイと、 (c) 前記リマップアレイを介して前記記憶エレメン
    トに結合され、前記複数の記憶エレメントのうちの記憶
    エレメントをアドレス指定するためのポインタと、 (d) 前記機能ユニットが推論的に命令を実行してい
    るときに前記複数の記憶エレメントのうちの記憶エレメ
    ントをアドレス指定するルックアヘッドポインタと、 (e) 前記記憶エレメントに結合され、前記機能ユニ
    ットがディスパッチされたスタック交換命令に関して命
    令を推論的に実行しているときに前記複数の記憶エレメ
    ントのうちの記憶エレメントを再順序づけするためのル
    ックアヘッドリマップアレイと、 (f) 前記記憶エレメント、前記リマップアレイ、前
    記ポインタ、前記ルックアヘッドポインタ、前記推論的
    な分岐ルックアヘッドポインタ、および前記ルックアヘ
    ッドリマップアレイに接続されるスタックコントローラ
    とを含み、前記スタックコントローラは、 スタックプッシュおよびスタックポップのディスパッチ
    に応答して、前記ルックアヘッドポインタを更新するた
    めの手段と、 スタックプッシュおよびスタックポップの回収に応答し
    て、前記ルックアヘッドポインタを前記ポインタにコピ
    ーするための手段と、 条件つき分岐命令のディスパッチに応答して、前記ルッ
    クアヘッドポインタをセーブするための手段と、 分岐の誤予測に応答して、前記ルックアヘッドポインタ
    を前記セーブされた値に復元するための手段と、 スタック交換命令のディスパッチに応答して、前記ルッ
    クアヘッドリマップアレイのエレメントを交換するため
    の手段と、 条件つき分岐命令予測のディスパッチに応答して、前記
    ルックアヘッドリマップアレイを前記推論的分岐ルック
    アヘッドリマップアレイにセーブするための手段と、 分岐の誤予測に応答して、前記ルックアヘッドリマップ
    アレイを前記セーブされた値に復元するための手段と、 スタック交換命令の回収に応答して、前記ルックアヘッ
    ドリマップアレイを前記リマップアレイにコピーするた
    めの手段とを含む、スタック。
  26. 【請求項26】 プロセッサのスタックアレイを動作さ
    せるための方法であって、 (a) スタックポインタを用いて前記スタックアレイ
    のエレメントを選択するステップと、 (b) リマップアレイを用いて、前記スタックポイン
    タによって指定されるスタックアレイエレメントを再順
    序づけするステップと、 (c) 前記スタックのルックアヘッド状態を、前記ス
    タックポインタに対応するルックアヘッドスタックポイ
    ンタメモリと、前記リマップアレイに対応するルックア
    ヘッドリマップアレイとにストアするステップと、 (d) スタックエレメント交換命令に応答して前記ル
    ックアヘッドリマップアレイのエレメントを交換するス
    テップと、 (e) スタックをプッシュまたはポップする命令に応
    答して前記ルックアヘッドスタックポインタを調節する
    ステップと、 (f) 分岐命令、スタック交換命令、およびスタック
    をプッシュまたはポップする命令を含む命令を推論的に
    実行するステップと、 (g) 推論的に実行された分岐命令に対応して、前記
    ルックアヘッドスタックポインタおよび前記ルックアヘ
    ッドリマップアレイをセーブするステップと、 (h) 推論的に実行された命令を回収するステップと
    を含み、前記回収ステップは、 回収するスタック交換命令に応答して、前記リマップア
    レイを前記ルックアヘッドリマップアレイで置き換える
    ステップと、 回収するスタックプッシュまたはポップ命令に応答して
    前記スタックポインタを調節するステップとを含み、 (i) 誤予測された分岐に応答して、前記ルックアヘ
    ッドスタックポインタおよび前記ルックアヘッドリマッ
    プアレイをセーブされた値に復元するステップをさらに
    含む、方法。
  27. 【請求項27】 前記ポインタに結合されるフル/エン
    プティアレイを用いて前記スタックアレイエレメントが
    空であるかいっぱいであるかをモニタするステップをさ
    らに含み、前記フル/エンプティアレイは、前記スタッ
    クアレイのエレメントに対応するエレメントを有し、ス
    タックコントローラは、 スタックをプッシュおよびポップする命令のディスパッ
    チに応答して必要に応じてそれぞれエントリを加えるお
    よび取除くことによって前記フル/エンプティアレイの
    ルックアヘッドコピーを調節するステップと、 スタックをプッシュおよびポップする命令の回収に応答
    して、必要に応じて、それぞれエントリを加えるおよび
    取除くことによって前記フル/エンプティアレイの永久
    的なコピーを調節するステップと、 条件つき分岐命令予測に応答して、前記ルックアヘッド
    フル/エンプティアレイをセーブするステップと、 分岐の誤予測の検出に応答して前記ルックアヘッドフル
    /エンプティアレイをセーブされた推論的分岐ルックア
    ヘッドフル/エンプティアレイに復元するステップとを
    実行する、請求項26に記載の方法。
JP13401295A 1994-06-01 1995-05-31 複数の動作を同時に行なうためのプロセッサ、その中のスタック、およびスタック制御方法 Expired - Fee Related JP3714992B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/252,303 US5696955A (en) 1994-06-01 1994-06-01 Floating point stack and exchange instruction
US252303 1994-06-01

Publications (2)

Publication Number Publication Date
JPH07334362A true JPH07334362A (ja) 1995-12-22
JP3714992B2 JP3714992B2 (ja) 2005-11-09

Family

ID=22955456

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13401295A Expired - Fee Related JP3714992B2 (ja) 1994-06-01 1995-05-31 複数の動作を同時に行なうためのプロセッサ、その中のスタック、およびスタック制御方法

Country Status (5)

Country Link
US (2) US5696955A (ja)
EP (1) EP0685789B1 (ja)
JP (1) JP3714992B2 (ja)
AT (1) ATE203114T1 (ja)
DE (1) DE69521647T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU745449B2 (en) * 1997-11-20 2002-03-21 Hajime Seki Computer system

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574670A (en) * 1994-08-24 1996-11-12 Advanced Micro Devices, Inc. Apparatus and method for determining a number of digits leading a particular digit
AU4464596A (en) 1994-12-02 1996-06-19 Intel Corporation Microprocessor with packing operation of composite operands
US5901302A (en) * 1995-01-25 1999-05-04 Advanced Micro Devices, Inc. Superscalar microprocessor having symmetrical, fixed issue positions each configured to execute a particular subset of instructions
US6321182B1 (en) * 1995-03-27 2001-11-20 Canon Kabushiki Kaisha Method and system for predicting a signal generated in signal processing apparatus
JP3739797B2 (ja) * 1995-10-06 2006-01-25 パトリオット サイエンティフィック コーポレイション 縮小命令セット・コンピューター・マイクロプロセッサーの構造
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5892936A (en) * 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
US5701508A (en) * 1995-12-19 1997-12-23 Intel Corporation Executing different instructions that cause different data type operations to be performed on single logical register file
US6792523B1 (en) 1995-12-19 2004-09-14 Intel Corporation Processor with instructions that operate on different data types stored in the same single logical register file
US5857096A (en) * 1995-12-19 1999-01-05 Intel Corporation Microarchitecture for implementing an instruction to clear the tags of a stack reference register file
US5940859A (en) 1995-12-19 1999-08-17 Intel Corporation Emptying packed data state during execution of packed data instructions
US5944818A (en) * 1996-06-28 1999-08-31 Intel Corporation Method and apparatus for accelerated instruction restart in a microprocessor
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
JP2933026B2 (ja) * 1996-08-30 1999-08-09 日本電気株式会社 複数命令並列発行/実行管理装置
JP2933027B2 (ja) * 1996-08-30 1999-08-09 日本電気株式会社 複数命令並列発行/実行管理装置
DE69734093D1 (de) * 1996-12-31 2005-10-06 Metaflow Technologies Inc System zur Ausführung von Gleitkommaoperationen
US5930492A (en) * 1997-03-19 1999-07-27 Advanced Micro Devices, Inc. Rapid pipeline control using a control word and a steering word
US5913048A (en) * 1997-03-31 1999-06-15 International Business Machines Corporation Dispatching instructions in a processor supporting out-of-order execution
US6088786A (en) * 1997-06-27 2000-07-11 Sun Microsystems, Inc. Method and system for coupling a stack based processor to register based functional unit
US5948098A (en) * 1997-06-30 1999-09-07 Sun Microsystems, Inc. Execution unit and method for executing performance critical and non-performance critical arithmetic instructions in separate pipelines
US5961636A (en) * 1997-09-22 1999-10-05 International Business Machines Corporation Checkpoint table for selective instruction flushing in a speculative execution unit
US5913047A (en) 1997-10-29 1999-06-15 Advanced Micro Devices, Inc. Pairing floating point exchange instruction with another floating point instruction to reduce dispatch latency
US6112018A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Apparatus for exchanging two stack registers
US6018798A (en) * 1997-12-18 2000-01-25 Advanced Micro Devices, Inc. Floating point unit using a central window for storing instructions capable of executing multiple instructions in a single clock cycle
US6112296A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Floating point stack manipulation using a register map and speculative top of stack values
US6192461B1 (en) * 1998-01-30 2001-02-20 International Business Machines Corporation Method and apparatus for facilitating multiple storage instruction completions in a superscalar processor during a single clock cycle
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6151669A (en) * 1998-10-10 2000-11-21 Institute For The Development Of Emerging Architectures, L.L.C. Methods and apparatus for efficient control of floating-point status register
US6240503B1 (en) * 1998-11-12 2001-05-29 Advanced Micro Devices, Inc. Cumulative lookahead to eliminate chained dependencies
SE513431C2 (sv) * 1999-01-11 2000-09-11 Ericsson Telefon Ab L M Buffert för icke-rapporterade hopp
US6327697B1 (en) 1999-06-28 2001-12-04 Sun Microsystems, Inc. Method for routing conductive paths in an integrated circuit
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
US6668315B1 (en) * 1999-11-26 2003-12-23 Hewlett-Packard Development Company, L.P. Methods and apparatus for exchanging the contents of registers
US6757816B1 (en) * 1999-12-30 2004-06-29 Intel Corporation Fast branch misprediction recovery method and system
US7496734B1 (en) * 2000-04-28 2009-02-24 Stmicroelectronics, Inc. System and method for handling register dependency in a stack-based pipelined processor
US6725361B1 (en) * 2000-06-16 2004-04-20 Transmeta Corporation Method and apparatus for emulating a floating point stack in a translation process
US7054898B1 (en) 2000-08-04 2006-05-30 Sun Microsystems, Inc. Elimination of end-around-carry critical path in floating point add/subtract execution unit
DE10133913A1 (de) * 2001-07-12 2003-01-30 Infineon Technologies Ag Programmgesteuerte Einheit
US6549442B1 (en) 2002-07-25 2003-04-15 Neomagic Corp. Hardware-assisted fast bank-swap in a content-addressable-memory (CAM) processor
US6970999B2 (en) * 2002-07-31 2005-11-29 International Business Machines Corporation Counting latencies of an instruction table flush, refill and instruction execution using a plurality of assigned counters
US7043626B1 (en) 2003-10-01 2006-05-09 Advanced Micro Devices, Inc. Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
DE602005017657D1 (de) * 2004-08-30 2009-12-24 Texas Instruments Inc Verfahren und vorrichtungen zur zweigvorhersage und verarbeitung von mikroprozessoranweisungen und dergleichen
US20070192573A1 (en) * 2006-02-16 2007-08-16 Guillermo Savransky Device, system and method of handling FXCH instructions
GB2447968B (en) * 2007-03-30 2010-07-07 Transitive Ltd Improvements in and relating to floating point operations
GB2448370B (en) * 2007-04-14 2012-09-05 Jds Uniphase Corp Method of decoding a bit sequence, network element apparatus and PDU specification toolkit
US7937573B2 (en) * 2008-02-29 2011-05-03 Freescale Semiconductor, Inc. Metric for selective branch target buffer (BTB) allocation
US7895422B2 (en) * 2008-02-29 2011-02-22 Freescale Semiconductor, Inc. Selective postponement of branch target buffer (BTB) allocation
US8495699B2 (en) 2008-12-23 2013-07-23 At&T Intellectual Property I, L.P. Distributed content analysis network
US20100223660A1 (en) * 2009-02-27 2010-09-02 At&T Intellectual Property I, L.P. Providing multimedia content with time limit restrictions
US20100223673A1 (en) * 2009-02-27 2010-09-02 At&T Intellectual Property I, L.P. Providing multimedia content with access restrictions
US8904421B2 (en) 2009-06-30 2014-12-02 At&T Intellectual Property I, L.P. Shared multimedia experience including user input
US9330383B1 (en) 2015-09-23 2016-05-03 Square, Inc. Message dispatcher for payment system
US10248940B1 (en) 2015-09-24 2019-04-02 Square, Inc. Modular firmware for transaction system
US10108412B2 (en) 2016-03-30 2018-10-23 Square, Inc. Blocking and non-blocking firmware update
US10417628B2 (en) 2016-06-29 2019-09-17 Square, Inc. Multi-interface processing of electronic payment transactions
US11010765B2 (en) 2016-06-29 2021-05-18 Square, Inc. Preliminary acquisition of payment information
US10817869B2 (en) 2016-06-29 2020-10-27 Square, Inc. Preliminary enablement of transaction processing circuitry
US10761970B2 (en) * 2017-10-20 2020-09-01 International Business Machines Corporation Computerized method and systems for performing deferred safety check operations
US10990969B2 (en) 2018-12-21 2021-04-27 Square, Inc. Point of sale (POS) systems and methods for dynamically processing payment data based on payment reader capability
US10762196B2 (en) 2018-12-21 2020-09-01 Square, Inc. Point of sale (POS) systems and methods with dynamic kernel selection
US11049095B2 (en) 2018-12-21 2021-06-29 Square, Inc. Point of sale (POS) systems and methods with dynamic kernel selection

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4161784A (en) * 1978-01-05 1979-07-17 Honeywell Information Systems, Inc. Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands
US4928223A (en) * 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
JPH0658631B2 (ja) * 1983-12-19 1994-08-03 株式会社日立製作所 デ−タ処理装置
DE3751503T2 (de) * 1986-03-26 1996-05-09 Hitachi Ltd Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen.
US4992938A (en) * 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US5056006A (en) * 1988-09-12 1991-10-08 General Electric Company Parallel processor with single program storage and sequencer and simultaneous instruction processing
US5155816A (en) * 1989-02-10 1992-10-13 Intel Corporation Pipelined apparatus and method for controlled loading of floating point data in a microprocessor
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
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5129067A (en) * 1989-06-06 1992-07-07 Advanced Micro Devices, Inc. Multiple instruction decoder for minimizing register port requirements
US5136697A (en) 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5251306A (en) * 1990-01-16 1993-10-05 Advanced Micro Devices, Inc. Apparatus for controlling execution of a program in a computing device
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5237700A (en) * 1990-03-21 1993-08-17 Advanced Micro Devices, Inc. Exception handling processor for handling first and second level exceptions with reduced exception latency
US5058048A (en) * 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
US5128891A (en) * 1990-04-02 1992-07-07 Advanced Micro Devices, Inc. High speed divider with square root capability
US5053631A (en) * 1990-04-02 1991-10-01 Advanced Micro Devices, Inc. Pipelined floating point processing unit
US5128888A (en) * 1990-04-02 1992-07-07 Advanced Micro Devices, Inc. Arithmetic unit having multiple accumulators
US5367650A (en) * 1992-07-31 1994-11-22 Intel Corporation Method and apparauts for parallel exchange operation in a pipelined processor
IE80854B1 (en) * 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5499352A (en) * 1993-09-30 1996-03-12 Intel Corporation Floating point register alias table FXCH and retirement floating point register array

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU745449B2 (en) * 1997-11-20 2002-03-21 Hajime Seki Computer system

Also Published As

Publication number Publication date
ATE203114T1 (de) 2001-07-15
EP0685789B1 (en) 2001-07-11
JP3714992B2 (ja) 2005-11-09
DE69521647D1 (de) 2001-08-16
US5857089A (en) 1999-01-05
EP0685789A3 (en) 1996-12-04
EP0685789A2 (en) 1995-12-06
US5696955A (en) 1997-12-09
DE69521647T2 (de) 2002-05-29

Similar Documents

Publication Publication Date Title
JP3714992B2 (ja) 複数の動作を同時に行なうためのプロセッサ、その中のスタック、およびスタック制御方法
JP3751049B2 (ja) パイプラインプロセッサおよびその動作方法
JP3977016B2 (ja) 仮想レジスタ番号を用いて論理レジスタ番号を物理レジスタ番号にマッピングするように構成されるプロセッサ
US6009511A (en) Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
US6079014A (en) Processor that redirects an instruction fetch pipeline immediately upon detection of a mispredicted branch while committing prior instructions to an architectural state
US5901302A (en) Superscalar microprocessor having symmetrical, fixed issue positions each configured to execute a particular subset of instructions
US6009512A (en) Mechanism for forwarding operands based on predicated instructions
US6119223A (en) Map unit having rapid misprediction recovery
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
JP3597540B2 (ja) 並列データプロセッサにおけるアクティブ命令を回転させる方法および装置
US5961634A (en) Reorder buffer having a future file for storing speculative instruction execution results
US5983342A (en) Superscalar microprocessor employing a future file for storing results into multiportion registers
JPH0334024A (ja) 分岐予測の方法とそのための装置
JP2839075B2 (ja) 処理システムを動作させる方法及び処理システム
US5878244A (en) Reorder buffer configured to allocate storage capable of storing results corresponding to a maximum number of concurrently receivable instructions regardless of a number of instructions received
US5784603A (en) Fast handling of branch delay slots on mispredicted branches
JP3866920B2 (ja) 命令のリタイアメント時に物理レジスタを選択的に自由にするよう構成されたプロセッサ
US5727177A (en) Reorder buffer circuit accommodating special instructions operating on odd-width results
US5903741A (en) Method of allocating a fixed reorder buffer storage line for execution results regardless of a number of concurrently dispatched instructions
US20050144427A1 (en) Processor including branch prediction mechanism for far jump and far call instructions

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20041108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041124

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050223

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050228

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050518

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050726

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050824

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080902

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090902

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090902

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100902

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110902

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees
S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350