JPH11510288A - 間接指定子を用いるエミュレーションを含む命令デコーダ - Google Patents

間接指定子を用いるエミュレーションを含む命令デコーダ

Info

Publication number
JPH11510288A
JPH11510288A JP9514328A JP51432897A JPH11510288A JP H11510288 A JPH11510288 A JP H11510288A JP 9514328 A JP9514328 A JP 9514328A JP 51432897 A JP51432897 A JP 51432897A JP H11510288 A JPH11510288 A JP H11510288A
Authority
JP
Japan
Prior art keywords
instruction
code
emulation
decoder
circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9514328A
Other languages
English (en)
Inventor
フェイバー、ジョン・ジー
Original Assignee
アドバンスト・マイクロ・デバイシズ・インコーポレイテッド
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
Priority claimed from US08/649,980 external-priority patent/US5794063A/en
Application filed by アドバンスト・マイクロ・デバイシズ・インコーポレイテッド filed Critical アドバンスト・マイクロ・デバイシズ・インコーポレイテッド
Publication of JPH11510288A publication Critical patent/JPH11510288A/ja
Pending legal-status Critical Current

Links

Classifications

    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • 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/3816Instruction alignment, e.g. cache line crossing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 様々なオペレーション構造を共有し、かつ実質的にメモリサイズを減らすために、命令間の高い冗長度を高度に利用する。デコーダはROMサイズを減らすための共通ROMシーケンスをマージし、かつ共有するための回路を含む。スーパースケーラマイクロプロセッサが、論理命令デコーダをエミュレートする、エミュレーションデコードコントロール回路及びエミュレーションROMを有する命令デコーダを含む。命令レジスタは現在命令をロードされ、プロセッサの状態に対応して更新される様々なビットフィールドを有する。各エントリポイント回路が命令レジスタに格納された命令からエミュレーションROMエントリポイントを導出する。エミュレーションROMエントリポイントは、オペレーション(Op)が読み出される、エミュレーションROMをアドレス指定するために用いられる。Opの様々なフィールドは、命令レジスタ及びエミュレーション環境レジスタから選択的に置換えられる。

Description

【発明の詳細な説明】 間接指定子を用いるエミュレーションを含む命令デコーダ技術分野 本発明はプロセッサに関連する。更に詳細には、本発明はデコーダ論理をエミ ュレートするためのエミュレーションROMを含む命令デコーダを備えたプロセ ッサに関連する。背景技術 P6クラスx86のような高性能マイクロプロセッサは共通な機構の組により 定義される。この機構とは、スーパースケーラアーキテクチャ及びパフォーマン ス、サイクル毎の複数x86命令のデコーディング、複数x86命令のRISC 風オペレーションへの変換を含む。RISC風オペレーションはデコードから切 り離されたCSICタイプコアにてout−of−order実行される。これ らの高性能マイクロプロセッサは、命令及びメモリ参照をリオーダするための大 きな命令ウインドウをサポートする。 高度なスーパースケーラマイクロプロセッサの動作は、デコーディング速度を 含むデコーディング特性、1サイクル内にデコードされるx86命令数、分岐予 測特性及びハンドリングにかなり依存する。高度なスーパースケーラマイクロプ ロセッサ内の命令デコーダは1つ或いはそれ以上のデコーディング経路を含み、 その中で、x86命令に対応するRISC命令シーケンスをフェッチするための ROMメモリを用いて、x86命令はハードウエア論理変換及び分離デコーディ ング経路によりデコードされる。一般にハードウエア論理により変換されるx8 6命令は、単一のx86命令である。ルックアップROMはより複雑なx86命 令をデコードするために用いられる。 命令実行を割り当てるためのマイクロコードROMを用いるプロセッ サの実質的な問題点は、ROMメモリのサイズである。 命令をデコードするためにルックアップROMを用いる他の問題点は、ベクト ルROMアドレス(vector ROM address)を確定し、オペレーション(Op s)をROMから検索する際に発生するオーバーヘッドである。オーバーヘッド は一般に、ROMを用いてデコードされる命令に対するスループットにおけるペ ナルティを発生する。このスループットペナルティはデコーディング特性を低下 させる。 x86命令をデコーディングするためにルックアップROMを用いる別の問題 点は、x86プロセッサに対して標準的であるCISCタイプ命令が、多数の違 う種類のものが存在することである。実質的な命令数が実装されるから、命令を RISC風命令に変換するために、そのプロセッサチップ上に大きなROM回路 が必要になる。実装される多数の命令は、ROMに対するポインタを導出し、そ の導出したポインタをROMに適用するための回路を、増大させ、かつ複雑にす る。この増大した回路の複雑性は、命令デコーディングスループットを減少させ るオーバーヘッドの増加に直接結びつく。 大きなルックアップROMはプロセッサ集積回路のサイズを増大し、それによ り、回路の製造数は減少し、生産コストは増大する。ルックアップROMの1つ の特性は、多くの命令シーケンスが互いに類似しており、小さな違いしかないこ とである。従ってルックアップROMメモリは一般に、種々の命令間に大きな冗 長度を有する。 必要とされることは、スーパースケーラ命令デコーダにおいて、サイズを減少 し、ROM型デコーダの複雑性を減少させることである。発明の開示 本発明に基づくと、ROMベースのデコーダは、命令間の高い冗長性 を利用して、様々なオペレーション構造を共有(share)し、メモリのサイズを 大幅に低減する。このデコーダは、ROMのサイズを低減するべく共通のROM シーケンスをマージ(merge)しかつ共有するための回路を含む。 本発明の一側面に基づくと、スーパースケーラマイクロプロセッサは、論理命 令デコーダの機能をエミュレートするエミュレーションROM及びエミュレーシ ョンコード制御回路を備えた命令デコーダを含む。命令レジスタには現在の命令 (current instruction)がロードされ、さらに命令レジスタは、プロセッサの 状態に基づいて更新される様々なビットフィールドを有する。エントリポイント 回路は、命令レジスタ内に格納された命令からエミュレーションROMエントリ ポイントを導出する。このエミュレーションROMエントリポイントは、エミュ レーションROMをアドレス指定するのに用いられる。エミュレーションROM からは、オペレーション(Op)もしくはOpのグループが読み出される。Op 内の様々なフィールドが命令レジスタから選択的に置換される。 本発明の第1の実施例に基づけば、プロセッサ内の命令デコーダエミュレーシ ョン回路は、命令コードを保持するための命令レジスタと、命令コードを受け取 るように命令レジスタに接続されたエントリポイント回路とを含む。この命令レ ジスタは、命令コード内に複数のエンコードされたビットフィールドを有する。 エントリポイント回路は、命令コードからエントリポイントを導き出す。命令デ コーダエミュレーション回路はまた、導き出されたエントリポイントを受け取る ように前記エントリポイント回路に接続されたエミュレーションコードシーケン サと、方向信号(direction signal)を受け取るように前記エミュレーションコ ードシーケンサに接続されたエミュレーションコードメモリとを有する。エミュ レーションコードシーケンスは、オペレーションのシーケンス(O ps)を方向付けて、方向付けられたシーケンスに基づいて方向信号を生成する 。エミュレーションコードメモリは、複数のOpシーケンス及びシーケンス制御 コードを記憶する。エミュレーションコードメモリは、また、Opシーケンスを 出力するための第1の出力端子と、シーケンス制御コードを出力するための第2 の出力端子とを有する。シーケンス制御コード出力端子は、エミュレーションコ ードシーケンサに接続されている。また、命令デコーダエミュレーション回路は 、Opシーケンスを受け取るようにエミュレーションコードメモリの第1出力端 子に接続されかつ命令コードの選択されたエンコードされたビットフィールドを 受け取るように命令レジスタに接続されたオペレーション(Op)置換回路を含 む。このOp置換回路は、命令コードビットフィールドの選択されたフィールド をOpシーケンスに挿入する。 命令レジスタは、ベクタリングデコーダ(vectoring decoder)によってデコ ードされた命令バイトを保持する。ベクタリングによる命令デコードの間、ベク タリングデコーダは、命令レジスタの内容に基づいて、最初のベクタリングクワ ド(vectoring quad)及びエントリポイントアドレスを生成する。同時に、ベク タリングデコーダは、命令レジスタのフィールド及び他の情報に基づく様々な情 報から、エミュレーション環境レジスタとも呼ばれるエミュレーション環境変数 を初期化する。エミュレーション環境レジスタからの情報は、オペレーションの 置換を実行するOp置換論理へ供給される。 本発明の他の実施例に基づけば、プロセッサ内の命令デコーダエミュレーショ ン回路を動作させる方法は、命令コード内に複数のエンコードされたビットフィ ールドを有する命令レジスタ内へ命令コードを受け取る過程と、プロセッサの状 態に基づいて前記複数のエンコードされたビットフィールドの様々なビットフィ ールドを選択的に更新する過程とを 有する。この方法は、さらに、命令コードからエントリポイントを導き出す過程 と、導き出されたエントリポイントに基づいてエミュレーションコードメモリを アドレス指定する過程とを有する。エミュレーションコードメモリは、複数のO pシーケンスを記憶する。この方法は、さらに、エミュレーションコードメモリ からアドレス指定されたオペレーションをポップアップする過程と、命令コード の選択されたエンコードされたビットフィールドをアドレス指定されたオペレー ションに挿入する過程とを含む。 多くの利点が、上述されたデコーダによって得られる。エミュレーションモー ドの置換を用いることにより、CISC機能のエンコードを達成しつつ、エミュ レーションコードROMのサイズが縮小され、とりわけ、プロセッサ集積回路の 寸法及び製造コストが低減される。エミュレーションモードの置換によって、類 似した命令によるROMシーケンスの共有が可能となる。図面の簡単な説明 新規であると考えられる本発明の特徴は、添付の請求の範囲に記載されている 。しかしながら、本発明自身は、その構造及びその動作方法の両方において、添 付の図面及び以下の説明からより最もよく理解されるだろう。 第1図は、本発明の一実施例に基づくコンピュータシステムを表すブロック図 である。 第2図は、第1図に例示されたコンピュータシステムで用いるためのプロセッ サの一実施例を表すブロック図である。 第3図は、第2図に例示されたプロセッサの実施例に対するパイプラインのタ イミングを表すタイミング図である。 第4図は、第2図に例示されたプロセッサで用いられる命令デコーダ の実施例を表す模式的ブロック図である。 第5図は、第4図に例示された命令デコーダのエミュレーションコードメモリ 及びエミュレーションコードシーケンサの構造を表す模式的なブロック図である 。 第6A図〜第6E図は、第4図に例示された命令デコーダによって生成された 複数のオペレーション(Op)フォーマットを表す図である。 第7図は、第5図に例示されたエミュレーションコードメモリで用いられるO pSeqフィールドフォーマットを表す図である。 第8図は、命令置換の例を表す図である。 第9図は、本発明のある実施例に基づく間接指定子(indirectspecifier)を 用いたエミュレーションを含む命令デコーダを備えたプロセッサを組み込んだパ ーソナルコンピュータのブロック図である。 発明を実施するための形態 第1図に示すようなコンピュータシステム100は、パーソナルコンピュータ への応用を含む、様々な応用例にて用いられる。コンピュータシステム100は 本発明の1つの実施例に従ったプロセッサを包含するコンピュータマザーボード 110を含む。プロセッサ120はモノリシック集積回路であり、複雑な命令セ ットを実行するために複雑命令セットコンピュータ(CISC)と呼ばれること もある。複雑な命令の例はよく知られるマイクロプロセッサの8086ファミリ 上にインプリメントされるx86命令セットである。プロセッサ120はレベル 2(L2)キャッシュ122、メモリコントローラ124、ローカルバスコント ローラ126及び128に接続される。メモリコントローラ124はメインメモ リ130に接続され、プロセッサ120と主メモリ130との間のインターフェ ースを形成する。ローカルバスコントローラ126及び128はPCIバス13 2とISAバス134を含むバスに接続され、 PCIバス132とISAバス134との間のインターフェースを形成する。 第2図において、プロセッサ120の1つの実施例のブロック図が示される。 プロセッサ120のコアはRISCスーパースケーラプロセッシングエンジンで ある。共通x86命令が命令デコード用ハードウエアにより変換され、内部RI SC86命令セットにて動作する。プロセッシングを除く他の86命令及び種々 の機能はオンチップROMに格納されるRISC86オペレーションシーケンス としてインプリメントされる。プロセッサ120はシステムインターフェース2 10を含むインターフェース及びL2キャッシュコントロールロジック212を 含む。システムインターフェース210はプロセッサ120をコンピュータシス テム100の他のブロックに接続する。プロセッサ120は主メモリ130及び ローカルバス上の装置132、134を含む、コンピュータシステム100のア ドレス空間に、システムインターフェース210を介する読出しアクセス及び書 込みアクセスによりアクセスする。L2キャッシュコントロールロジック212 は、L2キャッシュ122のような外部キャッシュとプロセッサ120との間の インターフェースを形成する。詳細にはL2キャッシュコントロールロジック2 12は、プロセッサ120内の命令キャッシュ214及びデータキャッシュ21 6に対するL2キャッシュ122のインターフェースを形成する。命令キャッシ ュ214及びデータキャッシュ216はレベル1キャッシュであり、コンピュー タシステム100のアドレス空間に対して、L2キャッシュを通して接続される 。 主メモリ130からの命令は予測実行のためのプリデコーダ270を介して命 令キャッシュ214内にロードされる。プリデコーダ270は、命令キャッシュ 214内の命令ビットと組み合わせて格納されるプリデ コードビットを生成する。そのプリデコードビット、例えば3ビットは、関連す る命令バイト(8ビット)と共にフェッチされ、複数の命令デコーディングを容 易にし、デコード時間を短縮するために用いられる。命令バイトは、4つの8バ イトデータのバースト転送により一度に32バイトが、命令キャッシュ214内 にロードされる。プリデコーダ270のロジックは8回複製され、キャッシュラ インにおいて4回使用され、それによって全8命令バイトに対するプリデコード ビットが命令キャッシュ214内に書き込まれる直前に同時に計算されるように なっている。あるバイトに対するプリデコードオペレーションは、1、2、また は3つのバイトの情報に基づき、プリデコード情報は8バイトグループを越えて 広がることができる。そのため、ある8バイトグループの最後の2つのバイトは 、2つの8バイトグループ間にまたがるようなプリデコード情報に備えて、次の 8バイトグループに対する処理に対し退避される。命令キャッシュ214内の命 令はCISC命令であり、マクロ命令として参照される。命令デコーダ220は 、命令キャッシュ214からのCISC命令を、実行エンジン222上で実行す るために、縮小命令セットコンピューティング(RISC)アーキテクチャ命令 セットに変換する。命令キャッシュ214からの1つのマクロ命令は、実行エン ジン222に対する1つ或いは複数のオペレーション内にデコードされる。 命令デコーダ220は、命令キャッシュ214及び命令フェッチコントロール 回路218(第4図参照)とのインターフェース接続を有する。命令デコーダ2 20は、ほとんどのマクロ命令をデコードするためのマクロ命令デコーダ230 、複雑な命令を含む命令のサブセットをデコードするためのエミュレーションR OM232を含む命令エミュレーション回路231、並びに分岐予測し、ハンド リングするための分岐ユニット234を含む。マクロ命令は、それらのマクロ命 令が変換される一般 的なオペレーションタイプに基づいて分類される。一般のタイプのオペレーショ ンはレジスタオペレーション(RegOps)、ロード−ストアオペレーション(L dStOps)、ロード即値オペレーション(RIMNOps)、専用オペレーション (SpecOps)、浮動小数点演算(FpOps)である。 実行エンジン222はスケジューラ260及び、ロードユニット240、スト アユニット242、第1のレジスタユニット244、第2のレジスタユニット2 46、浮動小数点ユニット248、マルチメディアユニット250を含む6つの 実行ユニットを有する。スケジューラ260は適切な実行ユニットにオペレーシ ョンを分散し、実行ユニットは並行して動作する。各実行ユニットは特定のタイ プのオペレーションを実行する。特にロードユニット240及びストアユニット 242はそれぞれ、ロード/ストアオペレーション(LdStOps)中、データキ ャッシュ216(L1データキャッシュ)、L2キャッシュ122、メインメモ リ130に対してデータのロード(読出し)或いはデータの格納(書込み)を行 う。格納キュー262は、ストアユニット242及びロードユニット240がデ ータキャッシュ216へのアクセスに競合がなく並行して動作するように、スト アユニット242からのデータを一時格納する。レジスタユニット244及び2 46は、レジスタファイル290にアクセスするためにレジスタオペレーション (RegOps)を実行する。浮動小数点ユニット248は浮動小数点演算(FpOp s)を実行する。マルチメディアユニット250は、マルチメディアへの応用の 場合に算術演算を実行する。 スケジューラ260は複数の、例えば24のエントリに分割され、各エントリ が記憧機構及び論理を含む。24エントリはOpクワドと呼ばれる、4エントリ からなる6つのグループにグループ化される。各エントリに格納された情報は実 行に対するオペレーション、その実行が未完 了か、或いは完了か否かを記述する。スケジューラはエントリを監視し、情報指 定実行ユニットに対してエントリからの情報をディスパッチする。 図3においてプロセッサ120は、5ステージ及び6スデージベーシックパイ プラインタイミングを用いる。命令デコーダ220は、1クロックサイクルにお いて、2つの命令をデコードする。第1のステージ310、フェッチサイクルス テージ中に、命令フェッチコントロール回路218はCISC命令を命令キャッ シュ214内にフェッチする。ステージ310中のCISC命令のプリデコーデ ィングは、後続するデコード時間を短縮する。第2のステージ320、デコード サイクルステージ中に、命令デコーダ220は命令キャッシュ214からの命令 をデコードし、Opクワドをスケジューラ260内にロードする。第3のステー ジ330、発行サイクルステージ中に、実行ユニットのそれぞれのタイプに対す るオペレーションが有効である場合に、スケジューラ260はそのエントリをス キャンし、対応する実行ユニット240から252に対してオペレーションを発 行する。ステージ330にて発行されたオペレーションに対するオペランドは、 第4のステージ340の実行ユニットにフォアードされる。RegOpの場合、 ステージ350である次のクロックサイクルにて通常完了するが、LdStOp sはアドレス計算352、データアクセス及び結果の転送362のために多くの 時間を必要とする。 分岐オペレーションの場合、命令デコーダ220は分岐オペレーションの最初 のデコーディング中に分岐予測324を実行する。分岐ユニット252は後のス テージ364にて分岐に対する条件を評価し、分岐予測324が正確であったか 否かを判定する。2レベル分岐予測アルゴリズムが条件分岐の方向を予測し、ス テージ310にてCISC命令のフェッチング、さらにステージ320にてCI SC命令のデコーディング が予測された分岐方向にて継続される。スケジューラ260は分岐評価に対して 必要とされる全ての条件コードが有効であるとき確定し、分岐命令を評価するた めに分岐ユニット252を割り当てる。分岐が不正確に予測された場合、スケジ ューラ260にて実行されるべきでないオペレーションがフラッシュされ、デコ ーダ220は分岐後の正確なアドレスから新しいOpクワドをロードし始める。 正確な分岐に対する命令がフェッチされるが、タイムペナルティを被る。命令デ コーダ220は前ストア予測アドレスを読み出すか、或いは並列加算器の組を用 いてアドレスを計算する。前予測アドレスが格納される場合には、予測アドレス はステージ326にてフェッチされ、予測アドレスにて位置する命令は、加算器 で遅延することなくステージ328にてフェッチされる。そうでない場合には、 並列加算器が予測アドレスを計算する。 分岐評価ステージ364では、分岐ユニット252が予測された分岐方向が正 確か否かを判定する。予測された分岐が正確である場合には、フェッチ、デコー ド及び命令実行ステップが割り込みなしに継続される。予測が不正確な場合には 、スケジューラ260がフラッシュされ、命令デコーダ220は分岐に後続する 正確なプログラムカウンタからマクロ命令をデコードし始める。 図4において略ブロック図により、主メモリ130に接続される命令準備回路 400の実施例を示す。命令準備回路400は、プリデコーダ270を介して主 メモリ130に接続される命令キャッシュ214を含む。命令デコーダ220は 3つの別々のソース、命令キャッシュ214、分岐ターゲットバッファ(BTB )146、命令バッファ408からの命令バイト及びプリデコードビットを受信 するために接続される。命令バイト及びブレデコードビットは複数のローテータ 430、432及び434を通って命令レジスタ450、452及び454を介 して命令デ コーダ220に与えられる。マクロ命令デコーダ230は、命令キャッシュ21 4及び命令フェッチコントロール回路218に接続され、命令バイト及び関連す るプリデコード情報を受信する。マクロ命令デコーダ230は、命令フェッチコ ントロール回路218に接続される命令バッファ408にてフェッチされた命令 バイトをバッファリングする。命令バッファ408は命令キャッシュ214から の16バイト或いは4つの配列されたワードまでを受信し、バッファリングする 16バイトバッファである。命令キャッシュ214は、命令バッファ408内の 空きスペースにより許容されるだけのデータをロードする。命令バッファ408 はデコードされるべき次の命令バイトを保持し、古い命令バイトがマクロ命令デ コーダ230により処理されるに従って、新しい命令バイトをリロードする。命 令キャッシュ214及び命令バッファ408における命令は、メモリビット(8 )及びプリデコードビット(5)を含む「拡張された」バイト内に保持され、同 一の配列にて保持される。プリデコードビットは、マクロ命令デコーダ230が 単一クロックサイクル内において複数の命令デコードを実行することを支援する 。 デコードプログラムカウンタ(PC)420、422或いは424を用いてア ドレス指定された命令バイトは、命令バッファ408からマクロ命令デコーダ2 30に転送される。命令バッファ408はマクロ命令デコーダ230内のデコー ダによるバイトに基づきアクセスされる。しかしながら各デコードサイクルにお いて、命令バッファ408は、命令バッファ408内のそのバイトが有効であり 、かつ命令キャッシュ214から新しいバイトと共にリロードされる、トラッキ ングに対するワードに基づき管理される。命令バイトが有効であるか否かの指定 は、命令バイトがデコードされるに従って保持される。無効な命令バイトの場合 には、デコーダ無効確認ロジック(図示せず)がマクロ命令デコーダ2 30に接続されており、「バイト無効」信号をセットする。現在フェッチPC4 26の更新の制御は、命令バッファ408における命令バイトの有効性及び命令 デコーダ220による命令バイトの消費と密接に同期される。 マクロ命令デコーダ230はフェッチサイクルの最後で命令フェッチコントロ ール回路218からフェッチされた命令バイトを16バイト、すなわち4つの配 列されたワードまでを受信する。命令キャッシュ214からの命令バイトは16 バイト命令バッファ408にロードされる。命令バイトがフェッチ並びにまたデ コードされるように、命令バッファ408は、各命令バイトに関連するプリデコ ード情報を加えた命令バイトをバッファリングする。命令バッファ408は命令 バッファ408の空きスペースによって収容できるだけの多くの命令バイトを受 信し、デコードされるべき次の命令バイトを保持し、続いて前命令バイトがマク ロ命令デコーダ230内の個々のデコーダに転送されるように新しい命令バイト をリロードする。命令プリデコーダ270は命令バイトが命令キャッシュ214 に転送されるとき、プリデコード情報ビットを命令バイトに加える。それ故命令 キャッシュ214によって格納され、転送される命令バイトは、拡張バイトと呼 ばれる。各拡張バイトは8つのメモリビットと5つのプリデコードビットを含む 。5つのプリデコードビットは命令長をエンコードする3つのビット、その命令 長がDビット依存するか否かを指定する1つのDビット、命令コードがmodr mフィールドを含むか否かを示すHasModRMビットを含む。13ビットが 命令バッファ408に格納され、マクロ命令デコーダ230のデコーダに渡され る。命令バッファ408は各5つのプリデコードビットの組を6つのプリデコー ドビットに拡張する。プリデコードビットはそのデコーダをイネーブルし、1ク ロックサイクル内で迅速に複数の命令デコー ドを実行する。 命令バッファ408は命令がワード細分性を有してロードされ、置き換えられ るように、命令キャッシュ214の記憶装置のメモリ配列されたワードに基づき 、命令キャッシュ214から命令バイトを受信する。従って命令バッファ408 のバイトロケーション0は、0(mod16)のアドレスにてメモリにアドレス 指定されたバイトを常に保持する。 命令バイトはバイト細分性を有して命令バッファ408からマクロ命令デコー ダ230に転送される。各デコードサイクル中、命令バッファ408内の16の 拡張された命令バイトは、関連する暗黙ワード有効ビットを含み、マクロ命令デ コーダ230内の複数のデコーダに転送される。命令キャッシュ214からマク ロ命令デコーダ230への命令バッファ408を介した命令バイトの転送の方法 は命令がデコードされ続ける限り、各デコードサイクルを用いて繰り返される。 例えば行われた分岐オペレーションにより、コントロール転送が生じるとき、命 令バッファ408はフラッシュされ、その方法は再度開始される。 現在デコードPCは任意のバイト配列を有し、命令バッファ408はそのバイ ト配列内に16バイトの容量を有するが、4バイトワード毎に管理される。ワー ドの全4バイトは消費されると、取り除かれ、命令バッファ408内の4つの新 しいバイトを有するワードと置き換えられる。命令バイトが命令バッファ408 からマクロ命令デコーダ230へ転送されるとき、命令バッファ408は命令キ ャッシュ214からリロードされる。 命令バイトは、マクロ命令デコーダ230に対して連続的な命令バイトを適用 する場合に適切である逐次バイト配列ではなくメモリ用配列を用いて命令バッフ ァ408内に格納される。それ故バイトローテータ430、432、434の組 が命令バッファ408とマクロ命令デコーダ 230の各デコーダとの間に挿入される。4つの命令デコーダは3つのショート デコーダSDec0 410、SDec1 412或いはSDec2 414、 及び1つの組み合わされるロングデコーダ及びベクタリングデコーダ418を含 み、バイトローテータ430、432、434に共有される。特に、ショートデ コーダSDec0 410及び組み合わせたロングデコーダ及びベクタリングデ コーダ418は、バイトローテータ430に共有される。ショートデコーダSD ec1 412はバイトローテータ432に関連し、ショートデコーダSDec 2 414はバイトローテータ434に関連する。 複数のパイプラインレジスタ、具体的には命令レジスタ450、452及び4 54は、バイトローテータ430、432、434及び命令デコーダ220間に 挿入され、一時的に命令バイト、プリデコードビット及びその他の情報を保持し 、それによってデコードタイミングサイクルを短縮する。命令レジスタ450、 452、454に保持されるその他の情報は、プレフィクス(例えば0F)状態 、即値サイズ(8ビット或いは32ビット)、配列及び長いデコード可能長指定 を含む命令デコーディングを支援するための様々な情報を含む。 回路は3つのローテータ及び3つのショートデコーダを用いて示されるが、他 の実施例では、異なる数の回路構成要素が用いられる場合もある。例えば1つの 回路が2つのローテータ及び2つのショートデコーダを含む。 命令は、命令用配列ではなくメモリ用配列にて、命令キャッシュ214、分岐 ターゲットバッファ(BTB)456及び命令バッファ408内に格納され、第 1の命令バイトの位置は未知である。バイトローテータ430、432及び43 4が命令の先頭バイトを見出す。 マクロ命令デコーダ230はまた、様々な命令デコード及び、デコー ドオペレーションの有効性確認及び異なるタイプのデコードオペレーション間選 択を含む、例外デコードオペレーションを実行する。デコードオペレーション中 に実行される機能はプレフィクスバイトハンドリング、命令のエミュレーション のためのエミュレーションコードROM232に対するベクタリングのための支 援及び、分岐ユニット234のオペレーション、分岐ユニットのインターフェー ス化及び復帰アドレス予測に対する支援を含む。命令バイト及び関連する情報に 基づき、マクロ命令デコーダ230はOpクワドに対応する4つのオペレーショ ングループにてオペレーション情報を生成する。マクロ命令デコーダ230はま た、命令ベクタリングコントロール情報及びエミュレーションコードコントロー ル情報を生成する。マクロ命令デコーダ230はまた、Opクワド情報、命令ベ クタリングコントロール情報及びエミュレーションコードコントロール情報を出 力するために、スケジューラ260及びエミュレーションROM230に対する 出力を有する。マクロ命令デコーダ230は、スケジューラ260がOpクワド を許容できない、或いはエミュレーションコードROM230からのOpクワド を許容しているとき、命令をデコードしない。 マクロ命令デコーダ230は5つの別々のデコーダを有し、その中に含まれる 3つの「ショート」デコーダSDec0 410、SDec1412及びSDe c2 414はx86命令セットの簡単な命令のサブセット内において定義され る3つまでの命令の「ショート」デコードオペレーションをデコードするための 組み合わせにおいて機能する。一般に簡単な命令は3つ以下のオペレーションに 翻訳する命令である。ショートデコーダSDec0 410、SDec1 41 2及びSDec2414の各々は、プレフィクスデコードのような場合にはオペ レーションは生成されないが、一般に1つ或いは2つのオペレーションを生成す る。従って3つのショートデコーダオペレーションの場合、1デコードサイクル において2つから6つまでのオペレーションが生成される。3つのショートデコ ーダからの2つから6つのオペレーションは、6つのオペレーションの最大4つ が有効であるから、Opクワド内のオペレーションパッキングロジック438に より共に順次パックされる。具体的には、潜在的に6つのオペレーションを生成 するので、3つのショートデコーダSDec0 410、SDec1 412及 びSDec2 414の各々は、2つのオペレーションをデコードすることを試 みる。4つ以上のオペレーションが生じた場合には、ショートデコーダSDec 2 414からのオペレーションは無効とし、一度に4つのオペレーションのみ が生成される。5つのデコーダはまた、1つの「ロング」デコーダ416及び1 つの「ベクタリング」デコーダ418を含む。ロングデコーダ416は命令、す なわち多数の複雑なアドレスモード形式を有する命令の形式をデコードすること により、2つ以上のオペレーションが生成され、ショートデコードハンドリング は有効にならない。ベクタリングデコーダ418はショートデコーダSDec0 410、SDec1 412及びSDec2 414のオペレーションによっ て或いはロングデコーダ416のオペレーションによっては処理できない命令を 処理する。ベクタリングデコーダ418は実際には命令をデコードしないが、命 令をエミュレーションのためにエミュレーションROM230の位置にベクタリ ングする。マクロ命令デコーダ230によって検出される様々な例外条件はまた 、ベクタリングデコードオペレーションの特殊な形式として処理される。起動さ れると、ロングデコーダ416及びベクタリングデコーダ418はそれぞれ全O pクワドを生成する。ショートデコーダSDec0 410、SDec1 41 2及びSDec2414により生成されたOpクワドはロングデコーダ416及 びベクタ リングデコーダ418により生成されるOpクワドと同じフォーマットを有する 。ショートデコーダ及ロングデコーダOpクワドはOpSeqフィールドを含ま ない。マクロ命令デコーダ230は、マクロ命令デコーダ230のOpクワド結 果が各デコードサイクルとなるように、ショートデコーダ410、412、41 4によって生成されるOpクワドか、或いはロングデコーダ416またはベクタ リングデコーダ418により生成されるOpクワドのどちらかを選択する。1度 に1つのデコーダのみの結果が用いられるが、ショートデコーダオペレーション 、ロングデコーダオペレーション及びベクタリングデコーダオペレーションは並 列して、互いに独立に機能する。 各ショートデコーダ410、412、414は、先頭バイトがオペレーション コード(オペコード)バイトであり、命令がショートデコード命令であることを 仮定する場合、7つまでの命令バイトをデコードする。2つのオペレーション( Ops)は対応する有効なビットを用いて生成される。有効なアドレスサイズ、 有効なデータサイズ、現在x86標準Bビット及び任意のオーバーライドオペラ ンドセグメントレジスタに対する適切な値は、これらのパラメータに依存するオ ペレーションの生成のために与えられる。デコードされるべき次の「逐次」命令 の論理的アドレスはCALL命令に対するオペレーションを生成する際に用いる ために与えられる。逐次という用語は引用符の中におかれているが、「逐次」ア ドレスは一般に現在の命令の直前の命令をさすが、「逐次」アドレスは任意にア ドレス指定された位置にセットされる場合があるということを示す。現在分岐予 測は条件付き転送コントロール命令に対するオペレーションを生成する際に用い るために与えられる。ショートデコードは転送コントロール命令(例えばJcc ,LOOP,JMP,CALL)、無条件転送コントロール命令(例えばJMP ,CALL)、CA LL命令、プレフィクスバイト、cc−dependent RegOp、並び に命令長がアドレス或いはデータサイズ依存か否かの指定の指示を含む制御信号 を発生する。一般に1つ或いは2つのオペレーションが有効であるが、プレフィ クスバイト及びJMPは有効なオペレーションを発生しない。無効なオペレーシ ョンはOpクワドをパッドするために有効なNOOPオペレーションとして生じ る。 第1のショートデコーダ410はデコーディングする以上の命令バイトに基づ きオペレーションを生成する。第1のショートデコーダ410はまた、前デコー ドサイクル中、デコードされる任意のプレフィクスバイトの存在を判定する。種 々のプレフィクスバイトは0F、アドレスサイズオーバーライド、オペランドサ イズオーバーライド、6セグメントオーバーライドバイト、REP/REPE、 REPNE及びLOCKバイトを含む。各プレフィクスバイトは定義される方法 において、後続命令デコードに影響を与える。プレフィクスバイトのカウント及 び連続プレフィクスバイトのカウントはデコーディング中に累積され、第1のシ ョートデコーダSDec0 410及びロングデコーダ416に与えられる。連 続プレフィクスバイトカウントはデコードされている命令が長すぎないか否かを 検査するために用いられる。プレフィクスバイト情報は、後続デコードサイクル を制御するためにも用いられ、あるタイプの命令特定例外条件に対する検査を含 む。プレフィクスカウントはプレフィクス及び次の命令のオペコードバイトをデ コードするための準備において、各有効な非プレフィクスコードサイクル終了時 点で、リセット、すなわち初期化される。プレフィクスカウントは、マクロ命令 デコーダ230が分岐条件及び書込み命令ポインタ(WRIP)オペレーション デコードするとき、再度初期化される。 プレフィクスバイトは1バイトショートデコード命令の形式で、第1 のショートデコーダ410により処理される。多くても、1プレフィクスバイト は1デコードサイクル、プレフィクスバイトのデコードに後続する全てのショー トデコードの無効性確認を通して強制される条件にてデコードされる。有効なア ドレスサイズ、データサイズ、オペランドセグメントレジスタ値及び現在Bビッ トは、第1のショートデコーダ410に与えられるが、先行するオペコードと共 にデコードできる。 アドレスサイズプレフィクスは、生成されたオペレーションは有効なアドレス サイズに依存する命令のデコーディングに対して、並びにmodr/m命令のア ドレスモード及び命令長のデコーディングに対して、後続命令のデコードに影響 する。デフォルトアドレスサイズは現在特定済x86標準Dビットにより特定さ れ、Dビットは1つ或いはそれ以上のアドレスサイズプレフィクスの発生により 有効にトグルされる。 オペラントサイズプレフィクスもまた、生成したオペレーションが有効なデー タサイズに依存する命令のデコーディングに対して、並びに命令長のデコーディ ングに対して、後続命令のデコードに影響を与える。デフォルトオペランドサイ ズは現在特定済x86標準Dビットによって特定され、Dビットは1つ或いはそ れ以上のオペランドサイズプレフィクスの発生により有効にトグルされる。 セグメントオーバーライドプレフィクスは、ロードーストアオペレーション( LdStOps)の発生が命令の有効なオペランドセグメントに依存する場合に のみ、後続命令のデコードに影響を与える。デフォルトセグメントはDS或いは SSであり、関連する通常のアドレスモードに依存し、最後のセグメントオーバ ーライドプレフィクスにより特定されるセグメントによって置き換えられる。 REP/RERE及びREPNEプレフィクスは後続命令のデコードに影響を 与えない。命令がエミュレーションコードROM232ではな く、マクロ命令デコーダ230によりデコードされる場合には、あらゆる先行R EPプレフィクスは無視される。しかしながら、命令がベクタリングされる場合 には、ベクトルアドレスの生成が、ある場合には変更される。具体的には、スト リング命令或いは特定の隣接オペコードがベクタリングされる場合には、1つ或 いはそれ以上のREPプレフィクスの発生の指示及び遭遇した最後のREPプレ フィクスの指定がベクトルアドレスに含まれる。その他の全ての命令に対しては 、ベクトルアドレスは修正されず、REPプレフィクスは無視される。 LOCKプレフィクスは、プレフィクスバイトのデコーディングを除く、全て のショートデコーディング及びロングデコーディングを禁止し、後続命令をベク タリングさせる。この後続命令のベクタリングデコードサイクルが発生するとき 、後続命令がプレフィクスでない限りは、オペコードバイトが検査され、命令が その命令の「ロック可能」サブセット内にあることを確実にする。命令がロック 可能な命令でない場合には、例外条件が認識され、ベクタリングデコーダ418 により生成されたベクトルアドレスは例外エントリポイントアドレスにより置き 換えられる。 第2のショートデコーダ412及び第3のショートデコーダ414によりデコ ードされる命令はプレフィクスバイトを有さず、デコーダ412及び414はア ドレスサイズ、データサイズ及びオペランドセグメントレジスタ値に対する固定 デフォルト値を仮定する。 一般に、3つの連続するショートデコードが実行されるとは限らないため、か つ命令は単一のオペレーションのみにおいてショートデコードする場合が多いた め、3つのショートデコーダは4つ或いはそれ以下のオペレーションしか生成し ない。しかしながら、まれに4つ以上の有効なオペレーションが生成される場合 があるため、オペレーションパッキングロジック438が第3のショートデコー ダ414を禁止、すなわち 無効にし、2つの命令のみが完全にデコードされ、多くても、4つのオペレーシ ョンがOpクワッド内にパッキングするために生成される。 第1のショートデコーダ410が有効でないとき、第2のショートデコーダ4 12及び第3のデコーダ414の動作は無効にされる。第2のショートデコーダ 412が有効でないときには、第3のショートデコーダ414の動作は無効にさ れる。第1のショートデコーダが無効であった場合でも、デコードサイクルはロ ングデコードサイクル或いはベクタリングデコードサイクルになる。一般にマク ロ命令デコーダ230は、1つ或いはそれ以上のショートデコードを試み、ショ ートデコードが失敗する場合には、1つのロングデコードを試みる。ロングデコ ードが失敗する場合には、マクロ命令デコーダ230はベクタリングデコードを 実行する。複数の条件によりショートデコーダ410、412及び414は無効 にされる。大抵の場合、命令オペレーションコード(opcode)、すなわち modr/m命令の指定されたアドレスモードが、定義されたショートデコード に入らない、すなわち単一の命令のサブセットに入らない場合、ショートデコー ドは無効にされる。この条件は一般に、ショートデコード命令を1つ或いは2つ のオペレーションを生成するオペレーションに限定する。デコードされた命令に 対する命令バッファ408内の全てのバイトが有効ではない場合には、デコード はまた無効とされる。また「cc−dependent」オペレーションは、ス テータスフラグに依存するオペレーションであり、第1のショートデコーダ41 0によってのみ生成され、これらのオペレーションが確実に「.cc」RegO psにより先行されないようにする。直前のショートデコードが分岐予測した方 向にもかかわらず、転送コントロール命令のデコードであったとき、ショートデ コードは2つの連続するショートデコードの第2のデコードに対して無効とされ る。第1のショートデコード がプレフィクスバイトのデコードであったときは、ショートデコードは2つの連 続するショートデコードの第2のデコードに対して無効とされる。一般に、プレ フィクスコード或いは転送コントロールコードは1サイクル中でそれ以上のデコ ードを禁止する。 更に、命令バッファ408は一度に16バイトしか保持できないため、マクロ 命令デコーダ230によって16命令バイトしか消費されない。また多くても4 つのオペレーションしかOpクワド内にパックされることができない。これらの 制約条件は、各ショートデコード命令の長さが多くても7バイトしかないため、 第3のショートデコーダ414のみに影響を与え、4つより多いオペレーション は第3のショートデコーダ414においてのみ発生する。 関連する制約条件では、現在Dビット値が16ビットアドレスとデータサイズ デフォルトを特定する場合には、アドレス並びにまたデータ依存する長さを有す る命令は、プレデコード情報が不正確である可能性が高いため、第1のショート デコーダ410によってのみ処理される。また複数の命令デコーディングがディ スエーブルされるときには、第1のショートデコーダ410のみが有効に命令及 びプレフィクスバイトをデコードすることができる。 有効性確認テストはマクロ命令デコーダ230内のショートデコーダ有効性確 認ロジックにより制御され、ショートデコーダ410、412及び414のオペ レーションと独立である。しかしながらデコーダ410、412及び414は0 をセットし、1つあるいは2つの有効なビットはデコードされたオペレーション の数に依存する。これらの有効ビットは、3つのショートデコーダ410、41 2及び414の場合全6ビットであり、オペレーションパッキングロジック43 8により用いられ、Opクワッド内にパックするためのいづれかのオペレーショ ンを確定し、 かつ無効なオペレーションをNOOP(no operation)オペレーシ ョンとして発生させる。オペレーションパッキングロジック438は、有効なシ ョートデコード及び関連するオペレーションが、他の有効なショートデコード及 び関連する情報によってのみ先行されるため、ショートデコーダ有効性確認情報 を用いずに動作する。 ショートデコーダ410、412、及び414はまた、様々な特殊なオペコー ド、すなわちmodr/mアドレスモードデコードを表す複数の信号を生成する 。これらの信号はある命令の形式が現在、命令デコーダ220によりデコードさ れているか否かを示す。これらの信号はショートデコード有効性確認ロジックに より用いられ、ショートデコード有効性確認状況を処理する。 命令バイトは、命令バッファ408内に配列されずに格納されており、命令バ イトがデコーダ410−418に転送されるときに、バイトローテータ430、 432及び434により配列される。第1のショートデコーダSDec0 41 0、ロングデコーダ416及びベクタリングデコーダ418は、第1のバイトロ ーテータ430を共有する。第2のショートデコーダSDec1 412及び第 3のショートデコーダSDec2 414はそれぞれ第2のバイトローテータ4 32及び第3のバイトローテータ434を用いる。各デコードサイクル中、3つ のショートデコーダSDec0 410、SDec1 412及びSDec2 414は、3つの独立に動作し、かつ並列するバイトローテータ430、432 及び434を用いて、最も有効に3つのショートデコードオペレーションをデコ ードすることを試みる。命令バッファ408内の適切なバイトのバイトローテー タ430、432及び434によりそれぞれのデコーダSDec0410、SD ec1412及びSDec2414に対する多重化を行うことは概念的に先行す る命令デコードオペレーショ ンに依存するが、命令長ルックアヘッドロジック436はプリデコードビットを 用いて、デコーダが概ね並行して動作するようにする。 ロングデコーダ416及びベクタリングデコーダ418は共同で、11命令バ イトの2つの並行したデコードを実行し、第1のバイトをオペコードバイトとし 、ロング命令デコードOpクワド或いはベクタリングデコードOpクワドのいず れかを生成する。ロングデコーダ416及びベクタリングデコーダ418により 解析された情報は、有効なアドレスサイズ、有効なデータサイズ、現在Bビツト 及びDFビット、任意のオーバーライドオペランドセグメントレジスタ、デコー ドされるべき次に続くターゲット命令の論理アドレスを含む。ロングデコーダ4 16及びベクタリングデコーダ418は、任意のセグメントオーバーライドを加 えたmodr/mアドレスモードにより暗示されるデフォルトに基づいて、先行 プレフィックスビット、その命令が命令にロングデコードサブセット内にあるか 否かの指示、RET命令及び有効なオペランドセグメントレジスタを除く命令長 を含むデコード信号を生成する。 ショートデコーダSDec0 410、SDec1 412及びSDec2 414の何れもがショート命令をうまくデコードしないデコードサイクル中は、 マクロ命令デコーダ230はロングデコーダ416を用いてロングデコードを行 うことを試みる。ロングデコードが実行できない場合には、ベクタリングデコー ドが実行される。ある実施例では、ロングデコーダ416及びベクタリングデコ ーダ418は概念的に別々の独立のデコーダである。それはロングデコーダ41 6及びベクタリングデコーダ418が、ショートデコーダ410、412及び4 14と別々の独立のデコーダであるのと同様である。しかしながら、物理的にロ ングデコーダ416およびベクタリングデコーダ418は多くのロジックを共有 し、同様のOpクワド出力を生成する。命令長が7バイトよりも 長いために、或いはアドレスがディスブレイスメントに対して処理するための第 3のオペレーションの発生を必要とする大きなディスブレイスメントを有するた めに、その命令がショートデコーダによりデコードできないようなアドレスモー ド制約条件を除いて、ロングデコーダ416によりデコードされる命令は一般に 、命令のショートデコードサブセット内に含まれる。ロングデコーダ416はま た、ある付加的なmodr/m命令をデコードするが、その命令はショートデコ ードサブセット内にはなく、ハードウェアデコーディングを保証するため十分に 共有される。ロングデコーダ416によりデコーディングする際に用いるための 命令バイトは、、第1のバイトローテータ430、命令バイトを第1のショート デコーダSDec0 410に与える同一の命令マルチプレクサにより命令バッ ファ408から与えられる。しかしながら、第1のショートデコーダSDec0 410は7バイトのみを受信するが、ロングデコーダ416はプレフィックス ハイトを除くmod/m命令の最大長に対応する11バイトまでの連続命令バイ トを受信する。従って最初の7バイトだけは第1のショートデコーダSDec0 410に接続されるが、第1のバイトローテータ430は11バイト幅である 。ロングデコーダ416は、1度に1つの命令のみをデコードし、命令バッファ 408内の関連するプリデコード情報は用いられずに、通常無効とされる。 第1のバイトローテータ430の最初のバイトはオペコードバイトとして完全 にデコードされ、modr/m命令の場合には、第2の命令バイト及び恐らく第 3の命令バイトがmodr/m及びsibバイトとして完全にデコードされる。 0Fプレフィックスの存在はオペコードバイトのデコーディングの際に考慮され る。全てのショートデコード命令は0Fではない、すなわち「1バイト」オペコ ードであるから、0Fプレ フィックスバイトは全てのショートデコーディングを禁止する。全てのプレフィ ックスバイトは「1バイト」オペコード空間内に配置されるため、0Fプレフィ ックスのデコーディングは次のデコードサイクルを、ロングデコード命令或いは ベクタリングデコード命令のような、2バイトオペコード命令にさせる。mod r/m及びsibバイトのデコーディングに基づき発生するオペレーションに加 えて、第1のバイトローテータ430はまた、様々なプログラムカウンタにより 使用するための命令長、その命令がロングデコーダを禁止する、すなわち無効と するためのmodr/m命令であるか否かを、更にその命令がオペレーションコ ード(opcodes)のロングデコードサブセット内の命令であるか否かを判 定する。ロングデコーダ416は常に3つのオペレーションを発生し、ショート デコーダ410、412及び414のように、OpSeqフィールドを除くエミ ュレーションコード型Opクワドの形式にてオペレーションを与える。ロングデ コーダ416は比較的簡単なmodr/m命令のみを使う。ロングデコードOp クワドは、第3のオペレーションがロードオペレーション(LdOp)或いはス トアオペレーション(StOp)であるか、並びに第4のオペレーションがRe gOp或いはNOOPであるかにおいてのみ異なる2つの形式を有することがで きる。第1のロングデコードOpクワドは以下の形式を有する。 第2のロングデコードOpクワドは以下の形式を有する。 @(<gam>)アドレスモード仕様は命令のmodr/m並びに又sibバ イトにより特定されるものに対応するアドレス計算、例えば@(AX+BX*4 +LD)を表す。<imm32>及び<disp32>値は、デコードされた命 令がそのような値を含むときに、即値及びディスプレイスメント命令バイトを含 む4バイト値である。 ロングデコーダ416は、第1のショートデコーダ410のように先行デコー ドサイクル中にショートデコーダによりデコードされる任意のプレフィックスバ イトの存在を考慮してオペレーションを発生する。有効なアドレスサイズ、デー タサイズ、オペランドセグメントレジスタ値、現在Bビットはロングデコーダ4 16に与えられ、オペレーションを発生するために用いられる。間接サイズ、す なわちセグメントレジスタ規則子はロングデコーダ416により発生する最終的 なオペレーション内に含まれない。 いくつかの条件のみが、別の有効なロングデコードを禁止、すなわち無効とす る。そのような条件の1つが、命令のロングデコードサブセットに含まれない命 令オペレーションコード(opcode)である。第2の条件はデコードされた 命令に対する命令バッファ408バイトの全てが有効ではないということである 。 ベクタリングデコーダ418は、ショートデコーダか或いはロングデコーダ4 18かのどちらかによってデコードされない命令を処理する。ベクタリングデコ ードはロングデコーディングが可能であり、しかも十分な有効バイトが利用可能 であるようなデフォルトケースである。一般にベクタリングデコーダ418によ り処理される命令はショートデコード或いはロングデコードサブセットに含まれ ないばかりでなく、ディス エーブルされるデコーディング、すなわち例外条件の検出のような他の条件から 導かれる。通常のオペレーション中、非ショート命令および非ロング命令のみが ベクタリングされる。しかしながら全ての命令がベクタリングされる場合もある 。未定義のオペコードは常にベクタリングされる。プレフィックスバイトのみが 常にデコードされる。プレフィックスバイトはショートデコーダ410、412 及び414により常にデコードされる。 例外条件がデコード中に検出されるとき、ベクタリングデコードは一般に、デ コードされた命令の命令バイトの有効性に関係なくデコードの他の形式をオーバ ーライドすることを強制する。検出された例外条件がベクタリングデコードサイ クルを強制するとき、発生したOpクワドは未定義であり、スケジューラ260 対して与えるためのOpクワド有効ビットは0にされる。Opクワド有効ビット は、オペレーションがスケジューラ260に対してロードされるべきでないとい うことを、スケジューラ260に知らせる。結果的に、例外ベクタリングデコー ドサイクル中、Opクワドはスケジューラ260にロードされない。 いくつかの条件がベクタリングデコードを禁止、すなわち無効とする。そのよ うな条件の1つが命令バッファ408内の全てのバイトが有効ではないというこ とである。 命令がベクタリングされるとき、制御はエミュレーションコードエントリポイ ントに移される。エミュレーションコードエントリポイントは内部エミュレーシ ョンコードROM232或いは外部エミュレーションコードROM232のどち らかにある。エントリポイントアドレスから開始するエミュレーションコードは 、命令をエミュレートするか、或いは適切な例外処理を開始する。 ベクタリングデコードサイクルはマクロ命令デコーダ230デコード サイクルと考えられる。ベクタリングデコードの場合には、マクロ命令デコーダ 230はベクタリングクワドを発生し、エミュレーションコードアドレスをエミ ュレーションコードROM232内に発生する。最初のベクタリングデコードサ イクルの後、エミュレーションOpSeqからの復帰(ERET)が起こるまで 、命令がエミュレーションコードROM232或いはエミュレーションコードR AM236により発生するが、マクロ命令デコーダ230は動作しないままであ る。エミュレーションからの復帰(ERET)の順序付け動作は、マクロ命令デ コーダ230デコーディングに復帰する。最初のベクタリングデコードサイクル に後続するデコードサイクル中、マクロ命令デコーダ230は動作しないままで あり、ERETが起こった後、デフォルトにより次の「逐次」命令をデコードす るために待ち状態にはいるまで、引き続き次の「逐次」命令をデコードすること を試みるが、デコードサイクルは繰り返し無効とされる。 ベクタリングデコーダ418により使用する、すなわちデコードするための命 令バイトは、第1のショートデコーダSDec0 410及びロングデコーダ4 16に命令バイトを与える命令マルチプレッサである、第1のバイトローテータ 430により、命令バッファー408から与えられる。ベクタリングデコーダ4 18はプレフィクスバイトを除くmodr/m命令の最大長に対応する、11バ イトまでの連続する命令バイトを受信する。従って、第1のバイトローテータ4 30の全11バイト幅は、ロングデコーダ416及びベクタリングデコーダ41 8の両方に分散される。命令バッファー408内のプリデコード情報は、ベクタ リングデコーダ418により用いられる。 ロングデコーダ416の場合には、第1のバイトローテータ430の最初のバ イトは、オペコードバイトとして完全にデコードされ、mod r/m命令の場合には、第2の命令バイト及びおそらく第3の命令バイトがmo dr/mおよびsibバイトとしてそれぞれ完全にデコードされる。ベクタリン グデコーダ418は、先行デコードサイクル中,ショートデコーダによりデコー ドされる任意のプレフィクスバイトの存在を考慮してオペレーションを発生する 。0Fプレフィクスの存在はオペコードバイトのデコードの際に考慮される。m odr/m及びsibバイトのデコーディングに基づきオペレーションを発生す ることに加えて、第1のバイトローテータ430はまた、様々なプログラムカウ ンタにより使用するための命令長、その命令がロングデコーダを禁止、すなわち 無効とするためのmodr/m命令であるか否か、或いはその命令がオペレーシ ョンコード(オペコード)のロングデコードサブセット内の命令であるか否かを 判定する。そうでない場合には、ベクタリングデコードが開始される。有効なア ドレスサイズ、データサイズ及びオペラアンドセグメントレジスタ値は、ベクタ リングデコーダ418に与えられ、オペレーションを発生するために用いられる 。間接サイズ、すなわちセグメントレジスタ規則子はベクタリングデコーダ41 8により発生する最終的なオペレーション内に含まれない。 ベクタリングデコードサイクル中、ベクタリングデコーダ418はベクタリン グOpクワドを発生し、エミュレーションコードエントリーポイントすなわちベ クトルアドレスを発生し、エミュレーション環境を初期化する。ベクタリングO pクワドが様々な情報を渡すために特定され、エミュレーション環境スクラッチ レジスタを初期化する。 エミュレーションコードエントリポイント、すなわちベクトルアドレスの値は 、0Fプレフィクス、REPプレフィクス或いはそれと同様の存在のような他の 情報を加えた、第1及び第2の命令バイト、例えばオペコード並びにmodr/ mバイトのデコードに基づく。例外条件によ り発生するベクタリングの場合には、エントリポイント、すなわちベクトルアド レスは簡単なエンコードされた例外規則子に基づく。 エミュレーション環境は環境依存性を解決するために格納される。すべてのシ ョートデコーダ410、412、414及びロングデコーダ416が、オペレー ションが間接サイズすなわちレジスタ規則子含まないように発生するとき、有効 なアドレス及びデータサイズへの依存性のような、環境依存性を直接解決する。 しかしながらエミュレーションコードオペレーションは、エミュレートされてい る命令の特別な事例の場合、そのように有効なアドレス及びデータサイズ値を参 照する。エミュレーション環境はベクタリングされる特別な命令に関連するこの 付加的な情報を格納するために用いられる。この情報は、汎用レジスタ番号、有 効なアドレス及びデータサイズ、有効なオペランドセグメントレジスタ番号、プ レフィクスバイトカウント及びLOCKプレフィクスの存在の記録を含む。エミ ュレーション環境はまた、modr/m regフィールドをロードし、mod r/m regmフィールドはregおよびregmレジスタ内にロードされる 。エミュレーション環境は、有効なベクタリングデコードサイクルの最後で初期 化され、ERETコードが発生するまで、エミュレーションコードによる命令の エミュレーションの実質的な期間中、初期状態のままである。 ベクタリングデコーダ418は4つの形式の1つにてOpクワドの4つのオペ レーションを発生する。すべての4つの形式は3つのLIMMオペレーションを 含む。4つの形式はLIMMオペレーションの即値において及び第3のオペレー ションがLEAオペレーション或いはNOOPオペレーションであるか否かにお いてのみ異なる。 第1のベクタリングデコードOpクワドは以下の形式を有する。 第2のベクタリングデコードOpクワドは以下の形式を有する。 第3のベクタリングデコードOpクワドは以下の形式を有する。 第4のベクタリングデコードOpクワドは以下の形式を有する。 ベクタリングOpクワドの最初の2つの形式はほとんどのデコーダに対して適 用される。第1の形式は、LEAオペレーションが計算するために用いられ、t reg内に一般のアドレスモード有効オペランドアドレスをロードするメモリ参 照modr/m命令に対して用いられる。第2の形式は非modr/m及びレジ スタ参照modr/m命令に対して 用いられる。第2の形式を有する命令の場合、オペコードバイトに後続する命令 バイトを含む限りにおいて<imm32>及び<disp32>値は有効なまま であるが、アドレスは計算される必要がない。ベクタリングOpクワドの第3の 形式は、いくつかの隣接する非modr/m命令に加えた、すべてのストリング 命令に対して用いられる。ベクタリングOpクワドの第4の形式は、ニアRET 命令に対する特殊なベクタリング及びエミュレーション要件を支援する。 マクロ命令デコーダ230は4つのプログラムカウンタを有し、3つのデコー ドプログラムカウンタ420、422及び424、更に1つのフェッチプログラ ムカウンタ426を含む。第1のデコードプログラムカウンタは、命令PC42 0と呼ばれ、第1のバイトの論理アドレスであり、デコードされている現在の命 令或いは、現在デコードしている命令がないなら、デコードされるべき次の命令 のいづれかの任意のプレフィクスバイトを含む。デコードペレーションが複数命 令デコードである場合には、命令PC420はデコードされるべき複数の命令の 第1の命令を指す。命令PC420は命令の構造的なアドレスに対応し、例外の 処理に対して命令障害プログラムカウンタを発生させるために用いられる。命令 PC420は対応するOpクワドを用いてスケジューダーに渡され、スケジュー ラ260のオペレーションコミットユニット(OCU)(図示せず)により用い られ、例外処理中に退避されるべき命令障害プログラムカウンタを生成する。O pクワドがマクロ命令デコーダ230により発生するときは、現在命令PC42 0値はOpクワドにタグ付けされ、Opクワドと共にスケジューラ2600pク ワドエントリにロードされる。第2のデコードプログラムカウンタは、論理デコ ードPC422と呼ばれ、デコードされるべき次の命令バイトの論理アドレスで あり、オペコードバイト或いはプレフィクスバイトのどちらかをアドレス 指定する。第3のプログラムカウンタは、リニアデコードPC424と呼ばれ、 デコードされるべき次の命令バイトのリニアアドレスであり、オペコードバイト 或いはプレフィクスバイトのいづれかをアドレス指定する。論理デコードPC4 22及びリニアデコードPC424は同一の命令バイトを指す。リニアデコード PC424は第1のバイトローテータ430にて現在の命令バイトのアドレスを 指定する。 マクロ命令デコーダ230内の種々のデコーダは、プレフィクスが1バイト命 令として通常に処理されるように、プレフィクスバイトか或いは任意のプレフィ クスバイトを引いた全命令のどちらかをデコードする、すなわち消費することに 基づいて機能する。それ故命令とプレフィクスバイトとの間のアドレス境界は、 命令境界よりも重要である。従って各デコードサイクルの開始時、デコードされ るべき次の命令バイトは真の命令の開始である必要は無い。 デコードサイクルの開始時には、論理デコードPC422及びリニアデコード PC424は、デコードされるべき次の命令の論理及びリニアアドレス、命令あ るいはプレフィクスバイトのいずれかを含む。リニアデコードPC424は、命 令バッファ408にアクセスするために、デコーディング処理中に用いられる1 次プログラムカウンタ値である。リニアデコードPC424は、1サイクルのデ コードに対する開始点を表し、詳細には命令バッファ408から、第1のショー トデコーダ410への、並びにロングデコーダ416及びベクタリングデコーダ 418への、バイトを供給するバイトローテータを制御する。リニアデコードP C424はまた、任意の更なるショートデコード命令或いはプレフィクスバイト の命令アドレスを確定し、従って第2のショートデコーダ412及び第3のショ ートデコーダ414に供給するバイトローテータに対して制御信号を発生するた めの基準点でもある。 リニアデコードPC424はまた2次的に動作し、プレフィクスバイトがデコ ードされる前に、新しい命令の第1のデコードサイクル中にブレークポイント照 会のための検査を行い、さらに有効な命令デコードサイクル中にマクロ命令デコ ーダ230によるコードセグメントオーバーランのための検査を行う。 論理デコードPC422はCALL命令を含む、プログラムカウンタ関連転送 コントロール命令に対して用いられる。論理デコードPC422は分岐ユニット 234に与えられ、分岐ターゲットアドレスを計算するためにPC関連転送コン トロール命令のディスプレイスメント値と合計される。論理デコードPC422 はまた、命令のエミュレーションコードエミュレーションを支援する。次の逐次 論理デコードプログラムカウンタ(PC)422は一般的な使用のためのベクタ リングOpクワドによる一時的なレジスタ内の記憶機構からのエミュレーション コードにて使用可能である。例えば、次の逐次論理デコードPC422は、CA LL命令がスタック上にプッシュする復帰アドレスを与えるために用いられる。 次の論理デコードPC428は、次の逐次論理デコードプログラムカウンタ値 にセットされ、論理デコードPC422のユーティリティを超える機能的なユー ティリティを有する。次の論理デコードPC428はマクロ命令デコーダ230 によりデコードされるCALL命令に対する復帰アドレスを直接供給する。次の 論理デコードPC428はまた、ベクタリングOpクワド内のオペレーションの 1つを介して、ベクタリングデコードサイクル中にエミュレーションデコード論 理に渡される。 デコードサイクル中、リニアデコードPC424はデコードされるべき次の命 令バイトを指す。リニアデコードPC424の4つの最下位ビットは、命令バッ ファ408内の第1の命令バイトを指しており、それ により命令キャッシュ214内の第1及び後続する命令バイトを配列するために 必要とされるバイトローテーション量を直接指示する。第1のバイトローテータ 430は命令マルチプレクサ、詳細には16:1バイトプレクサであり、リニア デコードPC424量だけオフセットされる命令バッファ408内のバイトにア クセスする。第1のバイトローテータ430は、第1のショートデコーダSDe c0 410に対して7バイト幅であり、ロングデコーダ416及びベクタリン グデコーダ418の組み合わせに対しては11バイト幅である。第1のショート デコーダSDec0 410、ロングデコーダ416及びベクタリングデコーダ 418内で共有される論理は、第1の命令に対する第1の命令長値ILen0を 発生する。第2のバイトローテータ432及び第3のバイトローテータ434は 7バイト幅命令マルチプレクサであり、詳細には16:1バイトマルチプレクサ である。第2のバイトローテータ432は、リニアデコードPC424量及び第 1の命令長ILen0の合計だけオフセットされる、命令バッファ408内のバ イトにアクセスする。第2のショートデコーダSDec1 412における論理 は、第2の命令に対する第2の命令長値ILen1を発生する。第3のバイトロ ーテータ434はリニアデコードPC424量、並びに第1の命令長ILen0 及び第2の命令長ILen1の合計だけオフセットされる、命令バッファ408 内のバイトにアクセスする。バイトローテータ430、432及び434は命令 バイトを多重化するが、プリデコードビットは含まない。命令バイトローテータ 430、432及び434はプリデコード情報を用いて制御され、その中の第1 オペコードバイト、すなわち第1の命令の最初のバイトに関連するプリデコード ビットは第2のローテータ432を直接制御する。第2の命令の最初のバイトは 第3のローテータ434を直接制御する。各プリデコードコードは命令長を暗に 示すが、 次のローテータに適用されるものはポインターである。ポインターは次の命令に 対するプログラムカウンタを達成するための長さを加えた、現在の命令における プログラムカウンタの4つの最下位ビットを得ることにより導かれる。 マクロ命令デコーダ230内の全てのプログラムカウンタ420、422、4 24及び428は命令及び例外処理において初期化される。この初期化は複数の 信号源によってアクチベート(activate)される。第1に、PC関連制御転送命 令がデコードされ且つ実行されると予測されると、ターゲット分岐アドレスが分 岐ユニット234によって供給される。第2に、近くのRET命令がデコードさ れると、予測されたリターンターゲットアドレスがリターンアドレススタック( 図示せず)によって供給される。第3に、誤って予測された分岐条件(BRCO ND)オペレーションのためにマクロ命令デコーダ230がスケジューラ260 によってプロセッサ120内の残りの回路と共にリスタートされるとき、スケジ ューラ260は別の正しい分岐アドレスを生成する。第4として、レジスタユニ ット244(プライマリRegOP実行ユニット)は、WRIPRegOpが実行 されるとき新たなデコードアドレスを供給する。WRIPRegOpの実行によっ て、エミュレーションコードが明示的に命令デコードをリダイレクト(redirect )することが可能となる。4つの全ての場合において、3つのデコードプログラ ムカウンタ420、422及び424を同時に再初期化するべく論理アドレスが 供給され且つ使用される。リニアデコードPC424に対しては、供給された論 理アドレスをその時のコードセグメントベースアドレスに加えることによってリ ニアアドレス値が供給され、リニアデコードPC424にロードするための対応 するリニアアドレスが生成される。論理アドレスは現命令(currentinstruction )PC420及び論理デコードPC422にロードされる。 各デコードサイクルに対し次の再初期化まで、マクロ命令デコーダ230は現命 令PC420、論理デコードPC422及びリニアデコードPC424を順次的 に且つ同期して更新し、マクロ命令デコーダ230の個々のデコーダによって命 令バイトがデコードされ消費(consume)される。 命令長さIlen0及びIlen1は順次的に生成される。並列オペレーショ ンをエミュレートすることによってこの順次的処理を速めるため、命令長さルッ クアヘッド論理(instruction length lookahead logic)436は、命令バッフ ァ408内の各命令バイトの長さを示す4つのプリデコードビットを用いて命令 長さIlen0及びIlen1を速やかに特定する。命令バッファ408内の第 1の命令バイトのopcodeバイトに関連づけられたプリデコードビット(第 1命令バイトは第1ショートデコーダSDec0 410にマルチプレックスさ れる)は、命令バッファ408内の第2の命令バイトのopcodeバイトのバ イトインデックス(byte index)を直接指定する。命令バッファ408内の第2 の命令バイトのopcodeバイトに関連づけられたプリデコードビット(第2 命令バイトは第2ショートデコーダSDec1 412にマルチプレックスされ る)は、命令バッファ408内の第3の命令バイトのopcodeバイトのバイ トインデックスを直接指定する。命令長さルックアヘッド論理436には、命令 バッファ408内の第2及び第3命令バイトのopcodeバイトのバイトイン デックスを生成するため2つの4ビット幅16対1マルチプレクサが含まれる。 また、命令ルックアヘッド論理436はプリデコードビットのセットの有効性 を判定するための論理を含む。プリデコードビットは、関連する命令バイトが有 効なショートデコード命令の開始であるとき有効である。詳述すると、命令ルッ クアヘッド論理436は、命令バッファ40 8内の所与のバイトに対する複数のプリデコードビットが同じバイトを指す(そ のバイトから始まる命令に対し0長さを意味する)か否かを判定する。そうであ る場合、そのバイトはショートデコード命令の開始ではなく、従ってそれ以上シ ョートデコーディングはできない。そうでない場合、ショートデコードオペレー ションは可能であり、プリデコードビットは次の命令の開始を指す。 主メモリ130と命令キャッシュ214との間に接続されたプリデコーダ27 0は8つの論理ユニットを有しており、それらは各々関連する命令バイト及びあ る場合にはそれに続く1若しくは2つの命令バイトの検査(examine)を行う。 第1命令バイトはopcodeバイトとしてデコードされ、第2及び第3命令バ イトは、そのopcodeバイトがmodr/m opcodeである場合、m odr/m及びsibバイトとしてデコードされる。これら3つのバイトに基づ き、命令長さが決定され、その命令が“short”命令として分類されるかど うかが判定される。命令の長さは、その論理ユニット16の論理ユニットに対す る位置に対応する4ビットの固定値に加えられ、命令長さルックアヘッド論理4 36によって使用されるバイトインデックスを決定する。このバイトインデック スは、命令がショート命令の基準を満たす場合、プリデコードビットの値として セットされる。ショート命令の基準に合わない命令バイトに対しては、プリデコ ードビットはその論理ユニットの16の論理ユニットに対する位置に対応する4 ビットの固定値にセットされ、0の命令長さを示すべくインクレメントされない 。命令長さが0であるということは、その命令がショート命令ではないというこ とを意味する。ショートデコード命令は7バイトより長くはならず、また最上位 ビットは3つのプリデコードビット及び関連する固定されたバイトアドレスから 容易に再構成されるため、プリデコードビットは4ビットから 3ビットへと切りつめられる。プリデコードビットの3ビットから4ビットへの 拡張は、命令キャッシュ214の16の命令バイトに対応する16の論理ユニッ トを有するプリデコード拡張論理(predecodeexpansion logic)440によって 実行される。プリデコード拡張論理440の16の論理ユニットは、命令バイト が命令キャッシュ214からフェッチされ命令バッファ408へと送られるとき 、独立して且つ同時にプリデコードビットに対して作用する。 プリデコードされて命令キャッシュ214へとロードされる32の命令バイト のうち最後の2つは、プリデコーダ270によって検査される1または2バイト のみを有する。modr/m opcodeに対しては、完全な命令長さは決定 できない。従って、プリデコーダ270内のバイト14及び15に対する論理ユ ニットは、バイト0乃至13に対する論理ユニットから変更(modify)される。 命令バイト15に対して、プリデコーダ270の論理ユニット15は全てのmo dr/m opcode及び非ショートデコード命令に対し0の命令長さを強制 する。命令バイト14に対しては、modr/m opcodeに対して0の実 効命令長さが強制されるが、アドレスモードでは確実に命令長さを決定するため sibバイトの検査が要求される。これは非ショート命令に対しても同様である 。 各デコードサイクル中、マクロ命令デコーダ230はいくつかの例外条件に対 する検査を行う。例外条件は命令ブレイクポイント、未完了のマスク不可能割り 込み(NMI)、未完了の割り込み(INTR)、コードセグメントオーバーラ ン、命令フェッチページフォルト、16バイトより大きい命令長、LOCKプレ フィクスを有するLOOK不可能命令、浮動小数点利用使用不可条件、未完了の 浮動小数点誤差条件を含む。ある条件は別の有効なデコードサイクル中のみ評価 され、他の条件はそ のサイクル中あらゆるデコーディング動作とは関係なく評価される。起動例外条 件が検出されるとき、ショートデコードサイクル、ロングデコードサイクル及び ベクタリングデコードサイクルを含むすべての命令デコードサイクルは禁止され 、「例外」ベクタリングデコードは、例外検出に従ってそのデコードサイクルに て強制される。例外条件の認識は、例えば、ショート及びロング或いはベクタリ ングデコーダOpクワドではなく、エミュレーションコードOpクワドがスケジ ューラー260により許容されるとき、マクロ命令デコーダ230の休止によっ てのみ無効にされる、禁止される。実質的に、あらゆる例外条件の認識及び処理 は、ERET Op seqがマクロ命令デコーダ230に対する制御を復帰す るまで遅延される。 例外ベクタリングを強制するデコードサイクル中に、専用エミュレーションコ ードベクトルアドレスが通常の命令ベクトルアドレスに代わって生成される。ロ ングデコーダ416及びベクタリングデコーダ418によって生成されるベクタ リングOpクワドは未定義である。例外ベクトルアドレスは認識され、処理され る特定の例外条件を特定するための下位ビットを除き、固定値である。複数の例 外条件が同時に検出されるとき、例外は前オーダにてオーダされ、最優先例外が 認識される。 命令ブレイクポイント例外、最優先例外条件はリニアデコードPC424がプ レフィクスを含む命令の最初のバイトを指すとき認識され、リニアデコードPC 424は命令ブレイクポイントとしてイネーブルされるブレイクポイントアドレ スに一致し、いずれの命令ブレイクポイントマスクフラグもクリアされない。1 つのマスクフラグ(RF)は特に、命令ブレイクポイントの認識をマスクする。 別のマスクフラグ(DNTF)は、一時的にNMI要求及び命令ブレイクポイン トをマスクする。 未完了のNMI例外、下から2番目の優先例外はNMI要求が未完了 であり、かついずれのNMIマスクフラグもクリアされないとき認識される。1 つのマスク(NF)は特にマスク不可能割り込みをマスクする。別のマスクフラ グ(BNTF)は一時的にNMI要求及び命令ブレイクポイントをマスクする。 未完了のIMTR例外、未完了のNMI例外に後続する優先順位の次の例外は 、INTR要求が未完了であるとき認識され、割り込みフラグ(IF)及び一時 的割り込みフラグ(ITF)がクリアされる。 コードセグメントオーバラン例外、未完了のINTR例外に後続する優先順位 における次の例外は、マクロ命令デコーダ230が現在コードセグメント制限を 越える命令の組を有効にデコードすることを試みるとき認識される。 命令フェッチページフォルト例外は、コードセグメントオーバーラン例外に対 してすぐ下の優先順位を有しており、別の命令或いはプレフィクスバイトのデコ ーディングが可能になる前に、マクロ命令デコーダ230が命令バッファ408 からの付加的な有効命令バイト及び、ページフォルトが現在命令フェッチにて発 生することを示す命令翻訳ルックアサイドバッファ(ITB)信号を必要とする とき認識される。命令フェッチコントロール回路218のフォルティング条件は 、ページフォルトがマクロ命令デコーダ230により認識され、後続する例外処 理プロセッシングが停止し、かつ新しいアドレスに対してフェッチする命令を再 度割り当てるまで、ITBがページフォルト連続的にを報告するように、繰り返 し試行される。ITBからのフォルト指示は、命令キャッシュ214からロード される命令と同じタイミングを有し、それ故後続デコードサイクルにおいてレジ スタされる。ITBはフェッチングが新しい命令アドレスに再度割り当てられる まで、マクロ命令デコーダ230がフォルト指示を保持するように、連続する命 令フェッチ試行において、フ ォルトを信号化する必要はない。ページフォルトを認識すると、付加的なフォル ト情報が専用レジスタフィールドにロードされる。 16バイトより大きい命令長例外は、命令フェッチページフォルト例外のすぐ 下の優先順位を有し、マクロ命令デコーダ230が15バイトより大きいプレフ ィクスバイトを含む全長を有する命令を有効にデコードすることを試みるとき認 識される。16バイトより大きい命令長例外は、実際の命令がデコードされる前 にプレフィクスバイト数をカウントし、デコードされるとき命令の残りの長さを 計算することにより検出される。プレフィクスバイト及び残りの命令長の合計が 16バイトより大きい場合には、エラーが認識される。 LOCKプレフィクスを有するロック不可能命令例外は、マクロ命令デコーダ 230がLOCKプレフィクスを有する命令を有効にデコードすることを試み、 その命令がロック可能命令サブセットに含まれないとき認識される。ロック不可 能LOCK命令例外はオペコードバイトのデコード及び0Fプレフィクスの存在 に基づき検出される。ロック不可能LOOK命令例外は、LOCKプレフィクス がショートデコード及びロングデコードを検出するため、ベクタリングデコード サイクル中のみ生じる。 浮動小数点使用不可例外は、最も低い優先順位に次いでおり、マクロ命令デコ ーダ230がWAIT命令或いはプロセッサコントロールESCではないESC 命令を有効にデコードすることを試み、浮動小数点エラーの報告が未完了である とき認識される。マクロ命令デコーダ230は、0Fプレフィクスの存在に加え て、オペコード及びmodr/mバイトのデコーディングに基づいて、不動小数 点使用不可例外を検出する。 各デコードサイクル中、マクロ命令デコーダ230はいくつかの形式の1つ或 いはそれ以上の命令の命令デコードを実行することを試みる。 一般にマクロ命令デコーダ230は、1つ或いは複数のショートデコードのどち らか、1つのロングデコード或いは命令ベクタリングデコードを有効に実行する 。場合によりデコードは、起動例外条件の検出、命令バッファ408或いはマク ロ命令デコーダ230の十分な有効バイト数の欠如を含む3つのタイプの条件の 場合に有効に行われないか、或いは外部的な理由により進捗しない。 起動例外条件が検出されるとき、すべての形式の命令デコードは禁止され、例 外条件の検出に続く第2のデコードサイクル中、例外ベクタリングデコードサイ クルが強制され、無効なOpクワドを生成する。 十分に有効バイト数が命令バッファ408において使用可能でないとき、有効 なバイトが命令バッファ408内に保持されないか或いは、少なくとも第1のオ ペコードが有効であり、かつデコーダの1つが命令をデコードするが、デコード された命令長が、現在すべてが有効ではない命令バッファ408において、さら に有効なバイトを必要とするかのどちらかである。 外部的理由がマクロ命令デコーダ230の進捗を妨げるとき、スケジューラ2 60が一杯で、デコードサイクル中の更なるOpクワドを受け入れることができ ないか、或いはマクロ命令デコーダ230がデコーディングへの復帰を待つこと を休止するように、現在エミュレーションコードOpクワドを受け入れているか のどちらかである。 後者2つの場合には、マクロ命令デコーダ230のデコード状態は進捗を禁止 され、マクロ命令デコーダ230は次のデコードサイクルにおいて単純に同一の デコードを繰り返す。マクロ命令デコーダ230禁止の制御は、各デコーダに対 応する信号を有するデコード有効信号の組の発生に基づく。各デコーダに対して 、デコーダが有効にデコードを実施することができるかどうか否かを判定するた めのデコード有効信号に組 み合わされる複数の理由がある。すべてのデコーダに対するデコーダ有効信号は そのとき監視され、合わせて、実行するデコードサイクルのタイプを確定する。 デコードサイクルのタイプは、デコードを実行する特定のデコーダを示す。外部 的理由がまた評価され、選択されたデコードサイクルタイプが有効であるか否か を判定する。デコードサイクルの選択したタイプを示す信号は、代わりとなる次 のデコードPC値のように、異なるデコーダにより発生するマクロ命令デコーダ 230に対する内部の様々な信号間で選択し、またショートデコーダ、ロングデ コーダ416及びベクタリングデコーダ418により発生するOpクワドからの スケジューラ260に適用される入力Opクワドを選択するOpクワドマルチプ レクサ444を制御するためにも適用される。 ベクタリングデコードサイクルの場合には、マクロ命令デコーダ230はまた 、内部エミュレーションコードROM232或いは外部エミュレーションコード RAM236のいずれかにおけるエントリーポイントに対するベクタリングを開 始する信号を発生する。マクロ命令デコーダ230はそのとき、スケジューラ2 60内にフェッチし、ロードするエミュレーションコードの起動持続時間を監視 する。 命令デコーダ220は、オペレーションが投機的に実行されるように分岐予測 を実行するための分岐ユニット(図示せず)を含んでいる。パイプラインドレイ ニング予測誤り(pipeline-draining misprediction)が回避されるように分岐 が速やかに且つ正確に処理されると、out-of-orderプロセッサのパフォーマンス が向上する。プロセッサ120は2レベル分岐予測アルゴリズムを採用している 。この分岐予測アルゴリズムは、“CONFIGURABLE BRANCH P REDICTION FOR APROCESSOR PERFORMING SP ECULATIVE”というタイトルの米国特許第5,454,117号(Puz iol et al,1995年9月26日発行)、 “TWO-LEVEL BRANCH PREDICTION CACHE”という タイトルの米国特許第5,327,547号(Stiles et al,1994年7月 5日発行)、“TWO-LEVEL BRANCH PREDICTION CAC HE”というタイトルの米国特許第5,163,140号(Stiles et al,1 992年11月10日発行)、及び“INTEGRATED SINGLE ST RUCTURE BRANCHPREDICTION CACHE”というタイト ルの米国特許第5,093,778号(Favor et.al,1993年3月3日発行 )に詳しく開示されている。プロセッサ120は更に、8,192エントリの分 岐履歴テーブル(BHT)(図示せず)を用いている。分岐履歴テーブルは、4 つのプログラムカウンタビットをグローバル分岐履歴の9つのビットと組み合わ せることによってインデックス付けされる。各BHTエントリは2つの履歴ビッ トを含む。BHTはデュアルポートRAMであり、読み取り/参照アクセスと、 書き込み/更新アクセスの両方が可能である。BHTの参照及び更新は、1つの クロックサイクルの反対側の半位相(halfphase)で行われるため衝突すること はない。BHTの多数のエントリが適切な集積回路エリア内に供給されるが、こ れはBHTは条件付き分岐の方向を予測するのみでありエントリはタグ付けされ ず予測された分岐ターゲットアドレスは16エントリのリターンアドレススタッ ク(図示せず)を除いて記憶されないからである。従って、BHTへのアクセス はキャッシュ状構造への直接マッピングに類似している。即ち、BHTはBHT 内のエントリへのアクセスのためインデックス付けされ、アクセスされるエント リは分岐命令であるとされる。リターン以外の分岐に対しては、デコードサイク ルにおいてターゲットアドレスが計算される。ターゲットアドレスは並列加算器 (図示せず)を複数用いることによって十分高速に計算され、分岐命令のロケー ションが分かる前に全ての可能なターゲットアドレスが計算される。デコードサ イクルの終了ま でに、(もしあるのであれば)どのターゲットアドレス結果が有効かが決定され る。 ある分岐が選択されると予測される場合、ターゲットアドレスはすぐに分かり 、ターゲット命令は続くサイクルにおいてフェッチされ、1サイクルの分岐選択 ペナルティ(one-cycle taken-branch penalty)が生じる。分岐選択ペナルティ は分岐ターゲットバッファ(BTB)456を用いることによって回避すること ができる。BTB456は16のエントリを含み、各エントリは16の命令バイ トと関連するプリデコードビットとを有する。BTB456は分岐アドレスによ ってインデックス付けされ、デコードサイクルにおいてアクセスされる。BHT (図示せず)が選択される分岐を予測する際、BTB456のキャッシュヒット に対してBTB456から命令が命令デコーダ220に送られ、分岐選択ペナル ティが回避される。 各デコードサイクルにおいて、BTB456をアドレス指定するのに直接マッ プ形式でリニアデコードPC424が使用される。もし、PC関連条件付き制御 転送命令がショートデコーダによってデコードされ且つこの制御転送が実行され ると予測された場合に、BTBエントリに対してヒットが発生すると(デコード サイクルの終了前に認識される)、2つの動作が発生する。第1に、命令キャッ シュ214に向けられた初期ターゲットリニアフェッチアドレス(initial targ et linear fetch address)が、実ターゲットアドレス(actual target address )から、BTBエントリ内に格納された有効なターゲットバイトの直後の命令バ イトを指す値に変更される。この修飾されたフェッチアドレスはBTBエントリ 内に格納され、BTBエントリから直接アクセスされる。第2に、エントリから の命令バイト及びプリデコード情報がデコードサイクルの終了時に命令バッファ 408にロードされる。PC関連条件付き制 御転送命令がショートデコーダによってデコードされこの制御転送が実行される と予測される場合にミスが発生すると、新たなBTBエントリがターゲット命令 フェッチの結果と共に生成される。詳述すると、ターゲット命令バイトの命令キ ャッシュ214から命令バッファ408への最初の有効なロードと同時に、選択 されたBTBエントリに同じ情報がロードされ、前の内容を書き換える。ミスが 発生しない場合、ターゲットフェッチ及び命令バッファ408のロードは通常通 りに進行する。 各エントリはタグ部とデータ部を含む。データ部は1つのメモリバイトと3つ の関連するプリデコードビットを含む16の拡張された命令バイトを保持する。 メモリバイトの対応(correspondence)は、対応する命令バッファ408のロケ ーションとメモリ整合(memory-aligned)されている。BTBエントリのタグ部 は、キャッシュターゲット、下位ビット[4:1]、エントリ有効ビット(entr y valid bit)及び30ビット被修飾初期ターゲットリニア命令フェッチアドレ ス(30-bitmodified initial target linear instruction fetch address)を有 する制御転送命令に関連づけられた32ビットリニアデコードPC424を含む 30ビットタグを保持する。明示的な命令ワード有効ビット(instruction word valid bits)は使用されない。なぜなら、真のターゲットアドレスと修飾され たターゲットアドレスとの間の距離がBTB456内の有効な命令ワードの数及 び指示(designation)を直接的に意味するからである。 BTB456の目的は、ループ及び入れ子状になったループが実行されている あいだ小型乃至中型サイズのループ内の分岐ターゲットを捕捉する(capture) ことである。この目的のため、不整合の可能性が少しでも検出されると、全BT Bが無効にされフラッシュされる。BTB456は、命令キャッシュ214のミ ス(miss)、命令キャッシュ214 の任意の形態での無効化、ITBミス、または任意の形態でのITB無効化に応 じて無効化及び消去される。時間的または空間的局所性(locality)の外の分岐 ターゲットは効果的に捕えられない。通常、BTB456は複雑性を軽減するべ く少数のエントリしか含まないが、理想的な分岐ターゲットの捕捉によって生じ 得る機能的な利点の大部分が達成されている。 PC関連分岐ターゲットアドレス計算論理(図示せず)はターゲットアドレス の計算を実行する。分岐ターゲットアドレス計算論理は、ショートデコーダSD ec0 410、SDec1 414またはSDec2 416によってデコー ドされるPC関連転送制御命令に対してのみ用いられる。特に、分岐ターゲット アドレス計算論理は、Jcc disp8、LOOP disp8、JMP d isp8、JMP disp16/32、及びCALL disp16/32を 含むショートデコード分岐命令に対して用いられる。各ショートデコーダSDe c0 410、SDec1 412及びSDec2 414は、論理及びリニア 分岐ターゲットアドレス計算論理(図示せず)を含む。ショートデコーダ410 、412及び414が、オペレーションのいずれかがPC関連ショートデコード 分岐命令でないかどうか判定する際、これら3セットの論理及びリニア分岐ター ゲットアドレス計算論理は並列に機能する。論理及びリニア分岐ターゲットアド レス計算論理は、分岐の論理プログラムカウンタ、分岐命令の長さ、及び分岐命 令の符号拡張された変位(sign-extended displacement)を加算し、計算サイズ に応じて加算値の上位側16ビットを条件付きマスクし、論理ターゲットアドレ スを生成する。論理及びリニア分岐ターゲットアドレス計算論理は論理ターゲッ トアドレスを現コードセグメントベースアドレス(current codesegment base a ddress)に加算し、リニアターゲットアドレスを生成す る。その分岐が選択される場合、無条件または選択されると予測されているとき は、デコードされたショートデコード分岐命令に対応する計算されたアドレスが 論理デコードPC422及びリニアデコードPC424を再初期化するのに使用 される。分岐が選択されないと予測されている場合は、論理アドレスはスケジュ ーラ260のOpクワドエントリ内の関連するショートデコード分岐命令(BR COND Op)と共に退避される。論理ターゲットアドレスは現コードセグメ ント制限値と比較され、制限値を違反しないかどうかチェックされる。 論理及びリニア分岐ターゲットアドレス計算論理によって制限値違反が検出さ れると、その分岐が選択されると予測されているか或いは選択されないと予測さ れているかによらず、制限値違反を示す特別なタグがその分岐命令から生成され るオペレーションを保持しているスケジューラ260のOpクワドエントリにお いてセットされる。続いて、スケジューラ260のオペレーションコミットユニ ット(OCU)が、このOpクワドにコミット(commit)を試みると、Opクワ ドはフォールトを含むものとして処理されアボート(abort)される。マクロ命 令デコーダ230は、エミュレーションコードROM232内のフォールトハン ドラ(fault handler)へのベクタリングを開始させる信号を生成する。フォー ルトハンドラはショート及びロングデコーダによるデコーディングを一時的に禁 止し、フォールトされたOpクワドに関連する違反命令のフォールトPCアドレ ス(fault PC address)へとジャンプする。最終的に、分岐命令は再デコード され命令エミュレーションコードにベクタリングされる。分岐が実際に選択され る場合、エミュレーションコードは制限値違反を認識し、その違反を適切に処理 する。 プロセッサ120は一般にフォールト条件に対してエミュレーションコードR OM232内の特定のフォールトハンドラにベクタリングする ことによって応答する。フォールトハンドラは、フォールトの源を特定し、その フォールトに対する適切な応答を決定し、そして適切な応答を開始するステップ を決定するルーチンを実行するRISC命令セット内において定義されたオペレ ーションを含む。適切な場合における別の方法として、プロセッサ120は特別 なフォールト応答を開始する特別な“ロードオルタネートフォールトハンドラ( load alternate faulthandler)”オペレーションも含む。デコード時に検出さ れる様々な例外(exceptions)は、オルタネートフォールトハンドラを起動して フォールトハンドラアドレスを指定するベクタリングデコーダ418のオペレー ションを通じ、可能な例外条件の各々に対し1エントリポイントが対応するよう にして、エントリポイントの固定されたセットへと実行を移す。オルタネートフ ォールトハンドラは、特殊条件の修正された完全な取り扱いを可能とする利点が ある。ロードオルタネートフォールトハンドラ命令は、全ての命令と同様に命令 デコーダ220のパイプラインを通過するが、その後の全ての例外条件によって 異なるベクトル命令ROMエントリポイントが呼び出されるようにする。オルタ ネートフォールトハンドラは現マクロ命令の実行が完了すると終了する。 オルタネートフォールトハンドラの利点の1例は、繰返し動作ストリング命令 (repeated move string instruction:REP MOV)に関連して見ることが できる。多数の相互作用を高速に実行するためには、オペレーションのシーケン スの並べ替え(reorder)をする能力が重要である。オペレーションシーケンス は、通常、第1のポインタ指定されたアドレスへのロード、第2のポインタ指定 されたアドレスへの格納、そしてロード及び格納が両方とも問題なく行われた場 合、第1及び第2ポインタのインクレメント及びカウンタのデクレメントを含む 。より効率を上げるため、ポインタのインクレメント及びカウンタのデクレメン トは格納オペレーションが完了する前になされる。しかしながら、オペレーショ ンシーケンスにおいてフォールトまたは例外が発生すると、シーケンスはアボー トされカウンタ及びポインタは誤った状態となる。例えば、構造的なx86のS I、DI及びCXレジスタは正しい値を持たない。オルタネートフォールトハン ドラは、シーケンスに先だって指定されて使用され、繰返し動作フォールトの後 にクリーンアップ(cleanup)を実行する。シーケンスは、ポインタ及びカウン タの追跡のための中間命令のオーバーヘッドなしに進行する。エラーが発生しな い場合、オルタネートフォールトハンドラは影響を与えることなく終了する。し かしながら、エラーが発生すると、オルタネートフォールトハンドラが呼び出さ れる。オルタネートフォールトハンドラは特定のオペレーションシーケンスに対 して規定されており、それに応じてクリーンアップを実行し、デフォルトのフォ ールトハンドラにジャンプする。エラーの発生(このときエラーはアドレス指定 される)までは、オルタネートフォールトハンドラによって阻害されることなく 、効率的なコードによって実行速度の改善がなされる。 分岐履歴テーブル(BHT)は、過去に遭遇した条件付き制御転送命令につい ての最新の履歴情報(特に分岐方向情報)を格納する。ある分岐が繰り返される と、その分岐に関連する格納された情報が解析され、その分岐の現方向(curren t direction)が予測される。続いて、格納情報は、分岐によって選択された実 際の方向に基づいて更新される。格納情報は、特定の新たに遭遇した分岐、その 特定の分岐の最新の方向履歴、及び他の分岐の最新の方向履歴から求められる。 格納情報は2ビット状態マシーンの複数のセットに基づくとともに、最新の9つ の分岐実行の方向履歴にも基づいている(これら最新の9つの分岐実行が特定の 分岐に関連しているのか、または他の分岐に関連しているのかによらない)。 特定の新たに遭遇した分岐の命令アドレスは、2ビット状態マシーンの複数のセ ットの1つを選択するのに用いられる。最新の9つの分岐実行の方向履歴は、状 態マシーンの選択されたセットの中から特定の2ビット状態マシーンを選択する のに用いられる。各状態マシーンは、この特定の状態マシーンにアクセスした最 新の数個の分岐によって選択された方向をカウントするための2ビット飽和カウ ンタ(two-bit saturating counter)である。特定の状態マシーンが同じ静的な 分岐(static branch)によってアクセスされるのが通常であるが、他の分岐が 同じ状態マシーンにアクセスしてもよい。大きな状態マシーン値は分岐の選択が 多いことを示す。小さな状態マシーン値は分岐の選択が少ないことを示す。状態 マシーンを選択すると、その状態マシーンがアクセスされる。その時点での総合 的なカウントが“より大きい(greater)”である場合、分岐が選択されると予 測される。その時点での総合的なカウントが“より小さい(lesser)”の場合、 分岐は選択されないと予測される。最新の9つの分岐実行の方向履歴は9ビット のシフトレジスタに保持され、このレジスタは分岐命令が問題なくデコードされ る度にクロック(clocked)またはシフトされる。予測されたばかりの分岐方向 はシフトレジスタ内にシフトされ新たな方向履歴値となる。値が1の履歴ビット 値は選択された分岐を示し、値が0の履歴ビット値は非選択の分岐を示す。 デコードサイクルに於いて、リニアデコードPC424はBHTテーブル参照 を実行するのに用いられる。PC関連分岐命令がデコードされる場合、アクセス された状態マシーンは瞬時に分岐方向を予測するが、続いてフェッチされデコー ドされる実際の命令はそのデコードサイクルの終了時にマイクロ命令デコーダ2 30によって決定される。続いて、条件付き分岐命令のデコーディングによって 生成される分岐条件(BR COND)オペレーションがスケジューラ260内の論理によって解決(resolv e)されるが、そのとき状態マシーンの更新がなされる。その分岐が実際に選択 されると、状態マシーンは既に最大値(3)になっていない限りデクレメントさ れる。分岐が実際には選択されなかった場合、状態マシーンは既に最小値(0) になっていなければインクレメントされる。したがって、0及び1の状態マシー ン値は、それぞれ分岐が選択されない強い予測及びそれほど強くない予測を意味 する。ステートマシーン値2及び3は、それぞれ分岐が選択されるあまり強くな い予測及び強い予測を意味する。BHTエントリの更新をサポートするため、B HTをアクセスするための分岐アドレス及び方向履歴ビットのコピー及び状態マ シーン値のコピーが分岐条件(BRCOND)オペレーションとともにスケジュ ーラ260に渡される。最大一つのBRCONDが一つのOpクワドに含まれる ため、BHTサポード情報はスケジューラ260に与えられるOpクワドにタグ として付加される。回路サイズ及び複雑性を低減するためには、キャッシュ構造 では通常的なことであるが、BHTがエントリタグ(デコードされる条件付き分 岐に関連するリニアデコードPC424のアドレス)を含まないことが有利であ る。さらに、BHTが衝突発生率が低くなるように多数のエントリを有している ことが有利である。 関連するBRCONDオペレーションとともにスケジューラ260のOpクワ ド内に退避された情報は、4つの分岐アドレスビット、9つの現履歴ビット、及 び直前にアクセスされた2つの状態マシーンビット(そのうち上位側のビットは 直前の分岐に対する予測方向でもある)を含む15ビットの幅を有する。最初の 13ビットは、必要に応じて、BHTへの再アクセス及び状態マシーン値の更新 に用いられる。最後の2ビットは新たな状態マシーン値を生成するべく修飾され る。 分岐が誤って予測された場合、9ビット分岐履歴シフトレジスタ内の履歴値の セットは、分岐によって選択された実際の方向を反映するように修正される。さ らにそのシフトレジスタは、誤って予測された分岐に対応するよう“シフトバッ ク”され、そうして実際の分岐方向及びどの分岐方向が予測されたかに基づいて 更新される。 リターンアドレススタック(RAS)(図示せず)は、リターン(RET)制 御転送命令用のターゲットアドレスキャッシュである。RASは、8エントリ、 32ビット幅、シングルポートのRAMであり、単一の3ビットポインタを用い ることによって循環型バッファ(circularbuffer)として扱われる。各サイクル に於いて、高々1アクセス(RETデコードに対する読み出しアクセスまたはC ALLデコードに対する書き込みアクセスのいずれか)が実行される。RASは RETリターンアドレスをキャッシュして、間接的にターゲットアドレスを指定 するリターンアドレスを予測する。これは、ターゲットアドレスの直接的な指定 を含む他の制御転送命令と対照的である。RET命令はその実行においてしばし ばターゲットアドレスを変化させるため、RASを使用することに利点がある。 RASは、CALL命令によって退避(スタックにプッシュ)されるリターンア ドレスをモニタリングすることによって、RET命令の各実行に対してターゲッ トアドレス値を見い出しかつ予期する。通常、対応するCALL及びRET命令 は動的に対をなして生じ、他のCALL及びRET命令ペアに対してラストイン ファーストアウト(LIFO)の順で発生される。 CALL命令が問題なくデコードされる度、CALL命令の論理リターンアド レスは、LIFOスタックとして使用される循環型バッファに退避(プッシュ) される。RET命令が問題なくデコードされる度、そのときRASの一番上に位 置するリターンアドレス値がそのRETに対 する予測ターゲットアドレスとして用いられ、その値はRASからポップされる 。RASは高い予測率を達成するが、CALL及びRETは常に入れ子状になっ たペアとして現れるとは限らず、また近接したCALL及びRETのみがサポー トされ遠く離れたCALL及びRETはサポートされないため予測誤りの発生は 不可避ある。また予測誤りはRASの深さが有限であることに起因しても発生す る。条件付き分岐の予測誤りが発生すると、RASは予測誤りの前の状態に戻す べくスタックの一番上のポインタ(トップスタックポインタ)を前の状態にセッ トする。CALL及びRET命令が投機的に実行されトップスタックポインタが それによって変化されている可能性があるからである。予測誤りの前の元のポイ ンタは復元されるはずである。予測誤り後の復元は、スケジューラ260によっ てサポートされる。各スケジューラ260のOpクワドには、そのOpクワドが 生成されたデコードサイクルの間有効であった現初期トップスタックポインタ値 (current initial top-of-stackpointer value)がタグ付けされている。条件 付き分岐命令に対して生成されるBRCOND Opが分析され、誤って予測さ れていることがわかると、スケジューラOpクワドにタグ付けされたトップスタ ックポインタは、スケジューラ260によって生成されるリスタートサイクルに 於いてRASに供給される。RASは現トップスタック値をスケジューラのOp クワドのトップスタックポインタタグによって置き換える。 第5図の模式的なブロック図に示されているように、命令デコーダエミュレー ション回路231は、命令レジスタ512、エントリポイント回路514、エミ ュレーション環境レジスタ516、エミュレーションコードシーケンサ510、 エミュレーションコードメモリ520及びOp置換回路(substitution circuit )522を含んでいる。命令デコーダエミュレーション回路500は命令デコー ダ220内の回路である。命 令デコーダエミュレーション回路231は、命令キャッシュ214、BTB45 6、または命令フェッチ制御回路218に接続された命令バッファ408から命 令バイト及び関連するプレデコード情報を受け取る。命令バッファ408は命令 レジスタ512に接続されており、それに対してx86命令を供給する。命令レ ジスタ512はエントリポイント回路514に接続されており、エミュレーショ ンコードROMエントリポイントを供給する。エントリポイント回路514はx 86命令を受け取り、x86命令オペレーションコード(opcode)からエ ントリポイントアドレスを生成する。このエントリポイントアドレスはエミュレ ーションコードメモリ520内を指し示す開始アドレスである。このようにして 、エミュレーションコードメモリ520内の命令のアドレスが、x86命令のo pcodeから合成される。このアドレスは、モデムバイト(modem byte)、プ レフィックスREP及びREPE、保護モードビット及び実効データサイズビッ トDSzのような情報とともにx86命令のバイト(特にx86命令の第1及び 第2バイト)に基づいて求められる。一般に、緊密に関連する複数のx86命令 は同じ様にコード化されたビットフィールドを有し(例えば関連するx86命令 間では命令タイプを示すビットフィールドは同じである)、エミュレーションコ ードメモリ52内の単一のエントリがいくつかのx86命令に対応するようにな っている。エントリポイントは一般に、x86命令を読み出し、特定のx86命 令ビットフィールドの値に基づいてエントリポイントアドレスのビットの割り当 てを行うことによって合成される。命令レジスタ512はエミュレーションコー ドシーケンサ510に接続され、さらにエミュレーションコードシーケンサ51 0はエミュレーションコードメモリ520に接続されている。エミュレーション コードシーケンサ510はエントリポイントをエミュレーションコードメモリ5 20に適用 し、エミュレーションコードメモリ520からシーケンシング情報(sequencing information)を受け取る。エミュレーションコードシーケンサ510は命令の シーケンシングを制御するか、或いは、新たなシーケンスが開始される場合には 、エントリポイントをエミュレーションコードメモリ520に適用する。エミュ レーションコードメモリ520内のエンコードされたオペレーション(Ops) は、エミュレーションコードメモリ520によってOpクワドまたはOpユニッ トとしてOp置換回路へと出力される。これらのOpはRISC型x86オペレ ーション用のテンプレート(template)に対応する。このテンプレートは複数の フィールドを含んでおり、これらの複数のフィールドにコードが選択的に代替挿 入される。エミュレーションコードメモリ520はOp置換回路522に接続さ れてOpを供給し、そこに様々なOpフィールドが選択的に代替挿入される。機 能的には、エントリポイント回路514はエミュレーションコードROM232 またはエミュレーションコードRAM236へのエントリポイントを計算する。 エミュレーションコードROM232内のシーケンスは命令の機能を決定する。 エミュレーションコードメモリ520は、オンチップエミュレーションコード ROM232及び外部エミュレーションコードRAM236を含む。エミュレー ションコードメモリ520は、プロセッサ120がどのように機能するかを定め る複数のエンコードされたオペレーションを含んでおり、x86命令がどのよう に実行されるかを定める。エミュレーションコードROM232及びRAM23 6はどちらも、ROM232及びRAM236内において同じOpコーディング フォーマットを有する複数のオペレーション(Op)命令エンコーディングを含 む。例えば一実施例では、エミュレーションコード232は4K 64ビットワ ードの容量を有する。Opコーディングフォーマットは、典型的には、 例えば30乃至40ビットで定義されたフォーマットである。一実施例では、第 6A図乃至第6E図に示すように、38ビットフォーマットが定義される。エミ ュレーション空間内におけるエミュレーションコードROM232のベースアド レスロケーションは固定である。外部エミュレーションコードRAM236は、 キャッシュ可能メモリ内の標準メモリアドレス空間内に位置する。エミュレーシ ョン空間内におけるエミュレーションコードRAM236のベースアドレスロケ ーションは固定である。32ビットエミュレーションコードRAM236のアド レスは、上位15ビット<31:17>を与える固定されたベースアドレスと、 これらのベースアドレスビットに続く14ビット<16:3>を与えるOpアド レスとによって形成される。エミュレーションコードRAMのアドレスの2つの 最下位側ビット<1:0>は0にセットされる。エミュレーションコードRAM 236内の14ビットのOpアドレスは、エミュレーションコードROM232 内のOpアドレスと同じである。オペレーション(Op)は、例えば38ビット のOpコーディングフォーマットで、64ビットワードの外部エミュレーション コードRAM236に格納される。64ビットワードのOpコーディングフォー マットビットを越えるビットは、制御転送(OpSeq)情報を格納するのに用 いられる。外部エミュレーションコードRAM236は、通常、試験及びデバッ グの目的に用いられ、エミュレーションコードROM232内のエンコードされ た命令のパッチ(patching)を可能にするとともに、システム管理モード(SM M)のような特殊な機能の実現を可能とする。例えば、エミュレーションコード ROM232内の命令が適切に機能しないことが判明した場合、外部エミュレー ションコードRAM236がアクセスされ、エミュレーションコードROM23 2内の不適切に機能する固定されたコードを一時的にまたは永久的に置き換える 。外部エミ ュレーションコードRAM236へのアクセスは、通常2つの技法の内の一方を 用いてなされる。第1の技法では、エミュレーションコードメモリ520の要素 のOpSeqフィールド内の1ビットフィールドによって、命令をフェッチする ための次のアドレスが外部エミュレーションコードRAM236内に位置してい ることが指定される。この第1の技法では、オンチップエミュレーションコード ROM232によって外部エミュレーションコードRAM236の実行が開始さ れる。第2の技法では、エミュレーションコードRAM236内のエントリポイ ントをベクタリングするベクトルアドレスが与えられる。 命令キャッシュ214、命令フェッチ制御回路218及び命令デコーダ220 は、3つの命令フェッチ及びデコードモードで機能する。第1のモードでは、命 令デコーダ220はオンチップエミュレーションコードROM232からエミュ レーションコードOpクワドをフェッチする。各Opクワドは4つのオペレーシ ョン(Op)に加えて、フェッチ及びデコード機能の次のサイクルを決定する制 御転送情報(OpSeq)を含む。第2のモードでは、命令フェッチ制御回路2 18は、オンチップL1命令キャッシュ214の一部である命令キャッシュ21 4からのx86マクロ命令バイトのフェッチング(fetching)を制御する。x8 6マクロ命令はマクロ命令デコーダ230によってデコードされ、マクロ命令デ コーダ230は4つのオペレーション(Op)を生成する。4つのOp及びOp Seqフィールドは完全なOpクワドを形成する。命令デコーダ220は分岐ユ ニット234を用い且つマクロ命令デコーダ230の機能をベクタリングしてコ ーディングされた制御転送を実行する。第3のモードでは、命令フェッチ制御回 路218は、Opコーディングフォーマットでエミュレーションコードを含む6 4ビットワードの命令キャッシュ214からのフェッチング(fetching)を1サ イクルにつき 64ビットワード1つというように制御する。各64ビットワードは1つのオペ レーション(Op)に対応する。別の実施例では、1サイクルにつき複数の64 ビットワードがアクセスされるようにしてもよい。4つの64ビットワードがア クセスされる実施例では、エミュレーションコードRAM236がオンチップエ ミュレーションコードROM232の様に完全なOpクワドを供給し、完全に再 プログラム可能(fully-reprogrammable)な効率のよいプロセッサが達成される 。完全に再プログラム可能なプロセッサは、単一のハードウェアにおいて例えば x86プロセッサやpowerPCOのような大幅に異なるプロセッサをソフト ウェア的に具現することができるという利点を有する。 第1及び第3のオペレーティングモードでは、制御転送情報はフォーマットさ れて、Opクワドのオペレーションシーケンス(OpSeq)フィールド内に入 れられる。無条件制御転送(例えばエミュレーションからのリターン(ERET )オペレーションや分岐(BR)オペレーション)は、OpSeq制御転送情報 を用いて完全に制御される。条件付き転送(例えば条件付き分岐(BRcc)) は、OpSeqフィールドと分岐条件(BRCOND)オペレーションの組み合 わせを用いて制御される。OpSeqフィールドフォーマットを図式的に第7図 に示す。16ビットOpSeqフィールド700は、2ビットシーケンスアクシ ョン(ACT)フィールド710、1ビット外部emcodeフィールド712 、及び13ビットオペレーション(Op)アドレスフィールド714を含んでい る。ACTフィールド710内の4つのシーケンスアクションは次のようにエン コードされる。 OpSeqのシーケンスアクションが無条件か条件付きかは、Opクワド内の どこかに分岐条件(BRCOND)Opが存在するか否かによる。Opクワド内 のBRCOND Opは、テストされるべき条件を規定するとともに、代替エミ ュレーションコードターゲットアドレスを規定する。明示的な静的分岐方向予測 ビット(static branch direction prediction bit)は存在しない。代わりに、 予測されるアクション及び次のアドレスは常にOpSeqフィールド700によ って規定され、“予測されない”次のアドレスは常にBRCOND Opによっ て規定される。BRCOND Opは無条件コールを含むBSRシーケンスアク ションと常にペアとなっている。無条件及び条件付き“選択されると予測された (predicted-taken)”コールに対して、BRCOND Opは退避するべきリ ターンアドレスを規定する。 外部emcodeフィールド712は、実行されるべきエミュレーションコー ドが外部エミュレーションコードRAM236内にある場合1にセットされる。 外部emcodeフィールド712は、実行されるべきエミュレーションコード が内部エミュレーションコードROM232内にある場合0にセットされる。O pアドレスフィールド714は、非エントリポイントOpクワド内のターゲット Opのアドレスを指定する。 Opseqコントロール転送情報は、Opクワドまたは64ビットメモリワー ドがフェッチされ、「即時解読」されるとき、無条件コントロール転送を制御す る。次に解読される命令の指定は、Opseqフィールドのみにより制御される 。Opseqフィールドは、3つの異なる動作(action)の1つを指定する。第 1に、OpseqフィールドはエミュレーションコードROM232からエミュ レーションコードを指定さ れた14ビットの1つのオペレーションワードアドレスにフェッチするようにし 、従ってエミュレーションコードROM232Opクワドがフェッチされる。第 2に、Opseqフィールドは、エミュレーションコードRAM236からのエ ミュレーションコードの指定された14ビットの1つのオペレーションワードア ドレスにフェッチするようにし、従ってエミュレーションコードRAM2326 4ビットメモリワードがフェッチされる。第3に、Opseqフィールドは、エ ミュレーションからのリターン(ERET)指示を含み、これは、命令デコーダ 230にx86マイクロ命令デコーディングを戻すようにするものである。 エミュレーションコードROM232からフェッチされたエミュレーションコ ードは、Opクワドと位置合わせされた形態でフェッチされる。Opクワド内で の即値位置への分岐により、Opクワド内での先行のオペレーションは、その先 行オペレーションの代わりにNOOPをフェッチすることにより無効なものとし て処理される。 64ビットメモリワードをエミュレーションコードRAM236からフェッチ するためのバイトメモリアドレスは、指定された14ビットオペレーションアド レスと、既に設定された3つの最上位ビットとを結合することにより生成され、 これにより位置合わせされた8ビットアドレスが生成される。16ビットメモリ ワードをフェッチするためのバイトメモリアドレスは、8ビットの位置合わせさ れたアドレスであり、従ってメモリOpデコーディング及びフェッチ/デコード の進行を首尾一貫させ単純なものとすることができる。 Opseqコントロール転送情報、条件付きコントロール転送のために次にデ コードされる命令表示の制御も行う。分岐条件(BRCOND)オペレーション は、テストされ評価される条件コードを指定し、代わりの(alternate)14ビ ットエミュレーションコードフェッチ及びデコ ードアドレスを指定する。従って、条件付きコントロール転送のためのOpse qコントロール転送情報は、条件分岐の予測経路を効果的に指定する。BRCO NDアドレスは、通常14ビットターゲットOpワードアドレスであるか、次の 「順次」オペレーション(Op)の14ビットOpワードアドレスの何れかであ る。更に一般的には、BRCONDアドレスは、一般的な2ウェイ(2方向の) 条件分岐全体を指定し得る。条件付きERETオペレーションは、ERETオペ レーションを指定するようにOpseqフィールドを設定し、条件付きERET が予測されるようにすることにより実行される。次いでERETオペレーション が予測ミスであることが分かった場合には、ERETによるx86マクロ命令ス トリームがアボート(abort:中断)され、BRCONDにオペレーションによ り指定された連続的なマクロ命令ストリームが再スタートされる。 BRCONDオペレーションは、実行されない状態でスケジューラ260にロ ードされる。BRCONDオペレーションはスケジューラ260の分岐分析ユニ ットにより順番に評価される。分岐が適切に予測された場合には、分岐は完全に マークされる。そうでない場合には、BRCOND状態が、未発行状態のままに され、Op画定ユニットにより検出されたとき分岐アボート信号がトリガされる 。 エミュレーションコードメモリ520は、シングルレベル(入れ子のない)サ ブルーチンの機能性をサポートしており、この機能性においてはOpseqフィ ールドがエミュレーションコードのフェッチングのためのオルタナティブ(alte rnative)を指定するように設定される。このオルタナティブは、典型的な2ウ ェイ条件付き分岐として構成されているが、OpクワドまたはメモリOp内のB RCOND Opの即値フィールドからの14ビットOpワードアドレスが、サ ブルーチンリター ンアドレスレジスタにロードされる点が異なっている。このサブルーチンリター ンアドレスレジスタは、14ビットOpワードアドレス及びリターンアドレスが 、エミュレーションコードROM232かRAM236の何れに存在するかを表 す1ビットを格納する。このBRCONDOpにより指定された条件コードは、 TRUEを含むオルタナティブであり、無条件及び条件付き(予測が行われる) サブルーチンの双方が指定されることになる。しかし、BRCOND Opはサ ブルーチンリターンアドレスレジスタに未定義の値をロードすることが回避され るように指定されなければならない。 全てのエミュレーションコードサブルーチンのサポート及びリターンアドレス レジスタの管理は、パイプラインの前にあるエミュレーションコードシーケンサ 510により実行される。従って、リターンアドレスレジスタのローディング及 び使用は、標準的なデコーダのタイミングと完全に同期されており、遅延が生じ ないことになる。2ウェイエミュレーションコード分岐 エミュレーションコードROM232は、複数のオペレーション(Ops)シ ーケンス用のストレージ(記憶機構)である。オペレーションシーケンスは、定 義されたエントリポイントにおいて始まり、エミュレーションコードROM23 2にハード符号化され、オペレーションシーケンスの終わりのエミュレーション コード(ERET)Opseq宣言からのリターンに拡張している。1つのシー ケンスにおけるオペレーションの数は、通常様々な異なる機能を実行するために 適切な数に変えることができる。単純なx86命令は、エミュレーションコード ROM232に1つのOpエントリしか有していないが、これらの命令はOpク ワドの細分性(granularity)をもってフェッチされる。より複雑なx86命令 は、多くの成分オペレーションを使用する。エミュレーション コードROM232ストレージは、固定ROMアドレス空間にプログラムされた 複数のOpクワドとして構成される。各Opクワドは4つのRISC Opフィ ールド及び1つのOpseqフィールドを有する。オペレーションシーケンスは 、通常Opクワド内で位置合わせされておらず、従ってエミュレーションコード ROM232内の分散した位置に分岐させるためのいくつかの技術が用いられず 、エミュレーションコードROM232内の多くのROMユニットが使用不可能 であり、集積回路空間を無駄に使用することになる。更に、エミュレーションコ ードROM732における命令のエントリポイントアドレスが、x86命令のo pcodeから合成されることから、エントリポイントアドレスは、ROMアド レス空間全体に間隔をおいて固定された位置に広がるようになり、これがROM 内の使用されない部位を増やすことになる。エントリポイントを介したアクセス が行われないROM内の位置は、自由に他の用途に供することができるが、アク セス可能な領域が連続したものとならないという欠点がある。Opseqフィー ルドは、このような間隔をおいた位置への分岐のための技術を提供するものであ り、これによりメモリ空間内の無駄が概ね除去されることになる。 Opクワドの4つのRISC Opフィールドのそれぞれは、単純なRISC 風オペレーションを格納する。Opseqフィールドは、エミュレーションコー ドシーケンサ510とやりとりし、エミュレーションコードシーケンサ510に エミュレーションコードROM232内の次の位置への分岐をなさしめるコント ロールコードを格納する。エミュレーションコードROM232における4つの RISC Opフィールドのそれぞれは、条件付きまたは無条件の分岐オペレー ションを格納し、これによりターゲットアドレスを指定して複数の分岐がそのO pクワド内にコード化されることになる。命令エミュレーション回路231の他 の実施例では、OpクワドがOpseqフィールドと共にOpを順序付けする1 個の分岐オペレーションしか有していない。4つのRISCOpフィールドの1 つにおける条件付き分岐OpとOpクワドにおけるOpseqフィールドの組み 合わせにより、2つの可能なターゲットまたは次のアドレスを有するOpクワド が生成される。 複数のターゲットアドレスを有するOpクワドの場合は、エミュレーションコ ードシーケンサ510は、符号化された予測ターゲットアドレスを選択すること によりオペレーションのシーケンスを制御する。従って、条件分岐を含むOpク ワドの場合は、エミュレーションコードシーケンサ510が、条件分岐に対する 選好(preference)において、ハード符号化されたOpseqターゲットアドレ スを選択する。条件分岐は、プロセッサ120の分岐予測機能に基づいて続けて 処理され、2ウェイエミュレーションコード分岐の実現により、追加の分岐処理 オーバーヘッドが発生することがなくなる。 エミュレーションマイクロコードは、Opクワドの3つの位置の1つにBRC OND Opが配置されるように書かれる。従って、OpクワドにおけるBRC OND Opに続くOpsは、分岐が最終的に行われるか否かではなく予測され た方向に基づいて実行される。分岐が最終的に正しく予測されていることが分か った場合には、Opクワドの全てのOps及び後続のOpクワドの全てのOps は、スケジューラ260にコミットされる。この分岐が最終的に誤り予測である ことが分かった場合には、BRCOND Opに続く全てのOps+全ての後続 のOpクワドがアボートされる。エミュレーションコードは、分岐条件、ターゲ ットアドレス、「予測」アドレス、及び分岐条件の予測も含む形で供給される。 大抵の命令においては、Opseqフィールドのみが次のフェッチア ドレス即ちベクトルアドレスかERETリターンの何れかを供給する。これは制 御用のハードウェアを単純化し、条件分岐または分岐予測の分析なしにオペレー ションのフェッチングを制御できる高速で単純なコントロールロジックを与えら れるという点で有益である。条件分岐命令の場合には、Opseqフィールドが 予測分岐アドレスを供給し、クワドにおけるBRCONDオペレーションが、評 価されるべき条件コードを指定し、予測ミスの場合にそのフェッチアドレスを指 定する。エミュレーションコード処理(handling)により、いくつかに制限され た少ない数のプログラムにより命令コントロールシーケンスが選択されるという 非逐次的なOpクワドフェッチングの柔軟性が利点として得られる。従って、O pseqフィールドは、エミュレーションコードROM232における使用され ない位置に効率的にOpシーケンスを当てはめるために利用されるという点で有 益である。このエミュレーションコード処理により、条件分岐の場合に所望に応 じて2ウェイの分岐を行える柔軟性も得られ、また呼び出し命令の後の命令に戻 さなければいけないという制約を加えるのではなく後続の任意の位置に戻すよう にされるサブルーチン呼び出しの場合にも、所望に応じた2ウェイ分岐の柔軟性 が得られる。ターゲットアドレスで分岐するOpseqフィールドのこのように 利用することにより、時間的またはサイクルのペナルティを引き起こすことなく 無条件分岐が達成できるという利点が得られる。エミュレーション環境置換 エミュレーションコードシーケンサ510は様々なエミュレーション環境置換 を制御して、事実上エミュレーションコードROM232におけるオペレーショ ンエントリの数より多い数の符号化されたオペレーションへの拡張を行うことが できる。エミュレーションコードシーケンサ510は、Opフィールドの特定の 、典型的には専用のエンコーディン グを分析し、いつ置換が行われ、どの置換が実行されたかを判定するロジック回 路を備えている。たいていのエンコーディングは直接フィールドの値を指定する 。他のエンコーディングはエミュレーション環境置換を介して間接的にフィール ドの値を指定する。エミュレーションモードの置換を用いることにより、エミュ レーションコードROM232のサイズを小さくする共にCISC機能の符号化 を達成することができ、またプロセッサの集積回路のサイズ及び製造コストを低 減できるという利点が得られる。レジスタフィールド及びいくつかのサイズフィ ールドを含むOpフィールドは、レジスタを直接指定するか、またはAXまたは T1のような間接レジスタ指定子を指定する。同様にフィールドは、直接レジス タ指定子であるRegMも選択し得る。Op置換ロジックは、間接レジスタ指定 子に対するコーディングを分析して、レジスタコーディングを定義し、レジスタ コーディングを現在レジスタに置換する。サイズフィールドは、1バイト、2バ イト、または4バイトの中から選択するか、Dサイズを選択して、現在の実効デ ータサイズをもとのエンコーディングに戻す。HRegのような記号は、例えば T2に対するエンコーディングを表すシンボルHReg_T2のように表して特 定のエンコーディングを表す。このようなシンボルにはHReg、HDSz、H ASz、HSegDescr、HSpecOpType等がある。 以下の擬似RTLコードはエミュレーション環境置換オペレーションを記述し たものである。 エミュレーションコードシーケンサ510は、エミュレーションコードROM 232における次のエントリポイントに順序付けをし、4つのオペレーション( Ops)及びOpseqフィールドを含むOpクワドを生成する。Opクワドに おける4つのオペレーションのそれぞれに対して、様々な置換が行われ、置換の タイプは5つの汎用オペレーションタイプの特定のオペレーションタイプによっ て決まる。5つのオペレーションタイプには、レジスタオペレーション(Reg Ops)、ロード−ストアオペレーション(LdStOPs)、ロード即値オペ レーション(LIMMOps)、特殊オペレーション(SpecOps)、及び 浮動小数点演算(FpOps)が含まれる。5つのオペレーションタイプに対す るOpフォーマットは第6A図〜第6E図に示されている。 エミュレーションコードROM232によって生成されるOpsはもともと一 般的なものである。特に、このOpsはx86命令と正確に一致していない。そ の代わりに、エミュレーションコードROM232か らのOpsはx86命令様の構造を形成する。Opテンプレート内の様々なビッ トフィールドはエミュレーションコードシーケンサ510により実行される置換 ファンクションを用いて置換される。簡単に説明すると、置換ファンクションは Opのいくつかのビットをその選択されたビットで置き換える。 x86命令は、modr/mバイトが後続するOpコードを含んでいるのが普 通である。modr/mバイトは、命令において使用されるインデクシングタイ プまたはレジスタ番号を表す。modr/mバイトは、2ビット(MSB)モー ドフィールド、3ビット(中間)regフィールド、及び3ビット(LSB)r /mフィールドを含む3つのフィールドを有する。モードフィールドはr/mフ ィールドと結合して、8つのレジスタ及び24個のインデクシングモードを表す 42個の可能な値を形成する。regフィールドは、レジスタ番号またはOpコ ード情報の更なる3ビットを指定する。r/mフィールドは、オペランドのロケ ーションしてレジスタを指定するか、またはモードフィールドと共に用いられて レジスタ及びインデクシングモードを定義する。 第6A図は、RegOpフォーマットの様々なフィールドを示すレジスタオペ レーション(RegOp)フィールドエンコーディングの図である。RegOp フィールド610においては、最上位ビット36及び37がクリアされて、オペ レーションをRegOpとして表す。RegOpフィールド610は、ロケーシ ョン[35:30]に6ビットオペレーションタイプ(TYPE)フィールド6 12、ビットロケーション[29:26]に4ビット拡張(EXT)フィールド 614、ビットロケーション[25]にRU1−only(R1)ビット616 、ビットロケーション[24:22]に3ビットオペレーション/データサイズ (DSz)フィールド618、ビットロケーション[21:17]に5 ビットデスティネーション(DEST)汎用レジスタフィールド620、及びビ ットロケーション[16:12]に5ビットソース1(SRC1)汎用レジスタ フィールド622を有する。RegOpフィールド610は、ビットロケーショ ン[9]にシングルビットセットステータス(SS)フィールド624、ビット ロケーション[8]にシングルビット即値ソース2(I)フィールド626、ビ ットロケーション[7:0]にソース2オペランド(IMM8/SRC2)フィ ールド628用の8ビット即値データまたは汎用レジスタを有する。RegOp エンコーディングのTYPEフィールド612は以下のようなものを含む。 いくつかのRegOpエンコーディング、特にxx01xエンコーディングは 、条件コード依存性を指定する。シフトOpsのローテート及びシフトは、異な るstatmodビットがアサートされる点を除いて機能的に等価である。 5ビット条件コードを指定するMOVccオペレーションのために、エクステ ンションフィールド(EXT)614がTYPEフィールド612のビット<0 >と共に用いられる。エクステンションフィールド(EXT)614は、ビット の特殊レジスタ番号を特定するRDxxx/WRxxxオペレーションのために も使用される。セットステータス(SS)フィールド624は、EXTフィール ド614と共に、オペレーションによる影響を受けるステータスフラグを指定す るために使用される。セットステータス(SS)フィールド624が1に設定さ れる、即ちこのOpがフラグを変更するようなOpsの場合は、エクステンショ ンフィールド(EXT)614が、Opにより修飾されるフラグのグループを指 定する4つのステータス修飾ビットを特定する。RDSEG Opsの場合には 、EXTフィールド614が、4ビットセグメント(セレクタ)レジスタを指定 する。WRFLG条件付きOpの場合には、特殊レジスタエンコーディングがS Sフィールドが設定されている場合のための所望のStatMod値に一致する 。セットステータス(SS)フィールド624及びEXTフィールド614は、 RegOpフィールドである。 条件コードは、5つのビットに付加され、5ビット条件コードフィールドのビ ット<0>は、条件またはその相補的な条件が捨てられるか若しくはアサートさ れるようにテストされるべきか否かを指定する。例えばCC<0>が1の場合は 、条件が反転される。5ビット条件コードCCフィールドのビット<4:1>、 評価されるべき条件を以下のように 指定する。 EXTフィールド614は、x86フラグ及び2つのエミュレーションフラグ に対応する4つのフラグを含む条件フラグを更新するために使用される。8つの フラグはフラグのグループ毎にステップのステータス 修飾ビットを用いて8つのグループに分割される。EXTフィールド614は事 実上TYPE612仕様(specification)から独立した様々な条件コードフラ グの更新を定め、機能的に関連性を有するフラグは、制御されグループとして更 新される。関連するフラグのグループとしての更新は、コントロールロジックを 保存するという利点がある。EXTフィールド614は特定の命令に対して更新 されるフラグを決定するビットセットを定義する。独立のTYPE612及びセ ットステータス(SS)フィールド624を用いて、オペレーションタイプから 条件コード処理を切り離すことにより、いくつかのオペレーションをフラグを更 新しないものとして定義することができる。従って、条件フラグの更新が不要な このような条件の下では、フラグの更新をディスエーブルして、不必要な以前の フラグ値に対する依存性を取り除くことができるという利点が得られる。 RU1onlyフィールド616は、第1レジスタユニット244に対して実 行され、第2レジスタユニット246に対しては発効されないOpsを表し、従 ってR1フィールド616は実行ユニットの仕様のハード符号化のためのビット である。従って、RU1onlyフィールド616は、特殊実行ユニットのみが そのユニット上で実現される機能を組み込んでいることから、特殊実行ユニット 上でのみ実行される特定のオペレーションを表す。セットステータス(SS)フ ィールド624はEXTフィールド614の設定に従ってフラグを変更する。こ のIフィールド626は、ソース2オペランドが即値であるか汎用レジスタであ るかを指定する。IMM8/SRC2フィールド628は、Iフィールド626 が0である場合、5ビット汎用レジスタを指定する。IMM8/SRC2フィー ルド628は、Iフィールド626が0の場合、DSzフィールドサイズにより 指定されたオペレーションのサイズを拡張し た符号付き即値を規定する。 レジスタオペレーション(RegOp)置換の場合は、Opクワドからのオペ レーション(Op)がレジスタオペレーション(RegOp)である。命令レジ スタ512はベクタリングデコーダ418により解読される命令バイトを保持す る。ベクタリング命令デコードの間、ベクタリングデコーダ418は初期ベクタ リングクワド及びエントリポインタアドレスを命令レジスタ512の内容に基づ いて発生する。同時に、ベクタリングデコーダ418はエミュレーション環境変 数を初期化し、命令レジスタ512のフィールド及び他の情報に基づいて様々な 情報からエミュレーション環境レジスタ516の呼び出しを行う。エミュレーシ ョン環境レジスタ516からの情報は、置換オペレーションを実行するOp置換 ロジックに供給される。 RegOp置換の場合は、様々な置換が第6A図に示すRegOpフォーマッ ト610のフィールドに対して行われる。RegOpオペレーションのデスティ ネーション(DEST)620及びソース1(SRC1)622フィールドの場 合は、5ビットのレジスタエンコーディングが直接レジスタ指定子0−15、ま たは間接レジスタ指定子(Reg及びRegM)を用いてレジスタを指定する。 直接レジスタ指定子は16個のレジスタの1つを直接指定する。間接指定子Re g及びRegMは、エミュレーション環境レジスタ516からの現在レジスタ数 (0〜15)によりOpデコード時間において置換される。置換は命令デコーダ 230が命令をデコードし、エミュレーションコードROM232におけるエミ ュレーションコードシーケンスにベクタリングし、及び他の情報から様々なフィ ールドを備えたエミュレーション環境レジスタ516を初期化するときに行われ る。エミュレーションコードシーケンスのオペレーションの間、このシーケンス のOpsは間接レジスタフィールド 及びサイズデータフィールドのような様々なフィールドを有しており、これらは エミュレーション環境レジスタ516の現在値に基づいて置換される。Op置換 ロジックは、フィールドに対するエンコーディングが置換されたフィールドを表 しているか否かを判定する。そのフィールドに対するエンコーディングが他のフ ィールドが置換されたことを示していることもあり得る。例えば、dest62 0及びsrc1622フィールドにおける間接指定子Reg及びRegMのコー ディングが、DSzフィールド618も置換されたことを示している。 DSzフィールド618に関しては、x86命令セットは、プロセッサ120 の現在のデフォルト条件に応じて8ビット、16ビット、または32ビットデー タについて作用する命令である。DSzフィールド618は、1バイト、2バイ ト、または3バイトのデータサイズを示す3つのビットを有している。データサ イズの置換を指定する命令については、間接サイズ指定子がAサイズ、Dサイズ 、またはSサイズを指定する。データサイズ置換は、Bビット及びDビットによ り決定される。Bビットは現在スタックセグメントレジスタ(SS)により指定 される。Dビットは、コードセグメントレジスタ(CS)により指定される。間 接サイズ指定子の場合は、SサイズがBビットにより決定される。実効アドレス (A)サイズ及び実効データ(D)サイズは、Dビットにより決定され、アドレ スまたはデータサイズオーバーライトプリフィクスによりオーバーライドするこ とができ、エミュレーション環境レジスタ516に保持される。一般に、Aサイ ズ、Dサイズ、及びSサイズの間接指定子は、バイトまたは4バイトの絶対エン コーディングにより置換される。例えば、Dサイズが選択される場合には、デー タサイズはエミュレーション環境レジスタ516におけるビットによって指定さ れた実効データサイズに基づいて2バイトまたは4バイトに分解される。同様に 、 間接サイズ指定子がAサイズをコード化する場合には、実効データサイズはエミ ュレーション環境レジスタ516におけるビットにより2バイトか4バイトの何 れかに指定される。間接指定子はSサイズを選択する場合には、Bビットが2バ イトが置換されるか4バイトが置換されるかを決定する。 Imm8/Src2フィールド628の置換は、ソース2(src2)オペラ ンドが即値ではなく間接レジスタ指定子である場合にのみ実行される。Op置換 ロジックは、即値(I)フィールド626に対するエンコーディングがImm8 /Src2フィールド628における置換を表しているか否かを、Iフィールド 626にアクセスすることにより判定する。間接レジスタ指定子が選択されてい る場合には、レジスタの汎用レジスタ指定をRegOpフォーマット610のI mm8/Src2フィールド628に置換する。メモリのインデックスを付され たアドレス指定フォームを用いるレジスタに格納されたsrc2オペランドの場 合には、置換は行われずRegOpフォーマット610のImm8/Src2フ ィールド628がインデックス値と共にロードされる。RegOpフォーマット 610はSrc1フィールド622、Imm8/Src2フィールド628、及 びdestフィールド620を含むRISC型の3つの(2つのソースで1つが デスティネーション)オペランドフォーマットである。標準x86フォーマット は非オペランドフォーマットである。iフィールド626により、ソース2オペ ランドが即値か汎用レジスタの何れかのフォームを利用できる柔軟性を持つよう にできるという点で有益である。 RegOpフィールド610は符号付き乗算(MUL1S)、符号付き乗算( MUL1U)、符号付き乗算(MULEH)、上位データの乗算(MULEH) 及び下位データの乗算(MULEL)オペレーションを含む特定のOpsのグル ープを定義する。これらのOpsは乗算及びアンローディングオペレーションの 一部を実行し、即ち複数のこれらの 特定の乗算Opsから乗算命令が成り立っていることになる。除算オペレーショ ンは、同様に複数の特定の単純な除算Ops、即ち1または2のビット除算(D IV1)、ステップ除算(DIV2)、除算アンロード剰余(DIVER)及び 除算アンロード商(DIVEQ)Opsの組み合わせにより実行され、例えば除 算における2ビット反復(two-bititeration on a divide)が実行される。 WRIP Opは、それが交代したとき実行アドレスが変更するx86プログ ラムカウンタ(PC)を書き込み、所望のアドレスにおける命令のフェッチを再 開する。WRIP Opは、命令長のデコードが困難または不可能な様々な命令 の場合、即ちロジックが複雑になるのを回避するべく、インクリメントされたロ ジックは正しく命令長をデコードできない場合に特に有用である。この命令は、 命令フェッチオペレーションのシリアル化や分岐のエミュレートにおいても有益 である。ロジックが命令長を正しくデコードしなくてもよく、ロジックはWRI P Opを用いてプログラムカウンタを実現できるようにし、前記正しくないデ コード命令長を無視するようにすることによって効率が上がる。 チェックセレクタ(CHKS)Opは、x86命令セットセグメントデスクリ プタ及びセレクタのために使用される。CHKS Opは、nullセレクタの チェックやデスクリプタテーブルへのアドレスオフセットの発生のオペレーショ ンを含むセグメントレジスタのローディングのプロセスを開始する。 第6B図は、ロード−ストアオペレーション(LdStOP)フィールドエン コーディングの図であり、LdStOpフォーマットの様々なフィールドが示さ れている。LdStOpフィールド630においては、最上位ビット36及び3 7がそれぞれ1及び0に設定され、LdStOpとして動作することを示してい る。LdStOpフィールド630は ビットロケーション[35:32]に4ビットオペレーションタイプ(TYPE )フィールド632、及びビットロケーション[31:30]に2ビットのイン デックススケールファクタ(ISF)フィールド634を有し、これは1x、2 x、4x及び8の係数を表している。LdStOpフィールド630は、ビット ロケーション[29:26]に4ビットのセグメントレジスタ(SEG)フィー ルド636、及びビットロケーション[25:24]に2ビットのアドレス計算 サイズ(ASz)フィールド638を有し、後者はAサイズ、Sサイズ、Dサイ ズ及び4つのバイトの間の選択を指定する。実効データ及びアドレスサイズは、 RegOp置換と同様にLdStOpsの代わりに置き換えられる。LdStO pフィールド630は、ビットロケーション[23:22]において2ビットの データサイズ(DSz)フィールド640を有し、ビットロケーション[21: 17]に5ビットのデータソース/デスティネーション(DATA)汎用レジス タフィールド642を有し、ビットロケーション[16]にシングルビットの大 きい変位(LD)を有する。DSzは、整数用のサイズ(1、2、4及びDサイ ズを)及び浮動小数点用のサイズ(2、4、及び8バイト)を指定し、LDは先 行のOpからのDisp8変位を用いて大きな変位を指定するものである。LD ビット644は、Opsが38ビットの幅、32ビットの変位全部をオペレーシ ョンに指定するには不十分な命令フォーマットであることから有用である。8ビ ットに符号化された変位のみが1つのLdStOpフィールド630で可能であ る。LDビット644は、アサートされたとき、32ビット変位全体を供給する オペレーションに先行する即値を示す。LdStOpフィールド630は、ビッ トロケーション[15:12]において4ビットベース(BASE)の汎用レジ スタフィールド646を有する。LdStOpフィールド630は、ビットロケ ーション[1 1:4]における8ビット符号付き変位(DISP8)フィールド684、及び ビットロケーション[3:0]に4ビットインデックス(INDEX)汎用レジ スタ649を有する。LdStOpエンコーディングのTYPEフィールド63 2は以下のようなものである。 ロード/ストアオペレーション(LdStOp)置換の場合は、エミュレーシ ョンコードシーケンサ510がLOCKプリフィクスがエミュレーション環境の セットアップの間に確認されたか否かを判定する。指定されたLdStOpオペ レーションがストアチェックを有するロード整数(LDST)であり、LOCK プリフィクスが確認された場合には、 エミュレーションコードシーケンサ510は、ストアチェックを有するロード整 数のロックされた(LDSTL)opcodeをLDSTopcodeの代わり に用いる。 LdStOp置換の場合は、様々な置換が第6B図に示すLdStOpフォー マット630のフィールドにおいてなされる。LdStOpオペレーションのデ ータレジスタ(DataReg)フィールド642の場合は、5ビットのレジス タエンコーディングが直接レジスタ指定子(0〜15)または間接レジスタ指定 子(Reg及びRegM)を用いてレジスタを指定する。直接レジスタ指定子は 、16個のレジスタの1つを直接指定する。間接レジスタ指定子(Reg及びR egM)は、Opデコードの時間に、エミュレーション環境レジスタ516から の現在レジスタ数(0〜15)で置き換えられる。命令デコーダが命令をデコー ドし、エミュレーションコードROM232におけるエミュレーションコードシ ーケンスをベクトル指定し、エミュレーション環境レジスタ516を命令及び他 の情報からの様々なフィールドと共に初期化する。エミュレーションコードシー ケンスのオペレーションの間、シーケンス内のOpsは、複数のフィールド、例 えば間接レジスタ指定子フィールド、及びサイズデータフィールドを有し、これ らはエミュレーション環境レジスタ516の現在値に基づいて置換される。Op 置換ロジックは、1つのフィールドに対するエンコーディングは置換されたフィ ールドを指定しているか否かを判定する。一つのフィールドに対するエンコーデ ィングが他のフィールドが置換されたことを指定している場合もあり得る。特定 の置換はデータレジスタ(DataReg)642をレジスタアドレシングまた はメモリインデックストアドレシングを用いてアドレス指定されるか否かに依存 している。レジスタアドレシングフォームが指定されている場合には、LdSt Opフォーマット630のDataRe gフィールド642が間接指定子Regにより決定される。メモリインデックス トアドレシングが指定されている場合には、LdStOpフォーマット630の DataRegフィールド642が間接指定子RegMにより定められる。 ASzフィールド638及びDSzフィールド640については、x86命令 セット命令がプロセッサ120の現在のデフォルト条件に応じて8ビット、16 ビット、または32ビットデータ上に対して作用する。ASzフィールド638 及びDSzフィールド640はそれぞれ1バイト、2バイト、または3バイトの データサイズを示す2つのビットを有する。データサイズの置換を指定する命令 の場合は、間接サイズ指定子がAサイズ、Dサイズ、またはSサイズを指定する 。データサイズ置換は、Bビット及びDビットにより定められる。Bビットは現 在スタックセグメントレジスタ(SS)により指定される。Dビットは、コード セグメントレジスタ(CS)により指定される。間接サイズ指定子の場合は、S サイズがBビットにより定められる。実効アドレス(A)サイズ及び実効データ (D)サイズは、Dビットにより定められ、アドレスまたはデータサイズオーバ ーライトプリフィクスによりオーバーライドされ、エミュレーション環境レジス タ516に保持される。実際に、Aサイズ、Dサイズ、及びSサイズの間接指定 子は、バイトまたは4バイトの代わりに絶対エンコーディングにより置換または 置き換えられる。例えば、Dサイズが選択された場合、データサイズはエミュレ ーション環境レジスタ516におけるビットにより指定された実効データサイズ に基づいて2バイトまたは4バイトに展開される。同様に、間接サイズ指定子が Aサイズをコード化する場合、実効アドレスサイズは2バイトまたは4バイトの 何れかであるエミュレーション環境レジスタ516におけるビットによって指定 される。間接サイズ指定子がSサイズを選択し た場合、Bビットが2バイトまたは8バイトが置換されたか否かを判定する。 LdStOpオペレーションが4ビットセグメントレジスタフィールド636 が置換されるべきか否かを判定するべくチェックされる。エミュレーション環境 がセットアップされたとき、セグメントオーバーライドプリフィクスがモニタさ れる。セグメントオーバーライドプリフィクスがLdStOpの生成が命令の実 行オペランドセグメントに依存するとき、後続の命令のデコードに影響を与える 。デフォルトセグメントは関連する汎用アドレスモードに応じてDSかSSであ り、最終セグメントオーバーライドプリフィクスにより指定されるセグメントで 置き換えられる。セグメントレジスタアドレス空間は、従来型のx86仕様から 4ビットに拡張され、追加の特殊セグメントレジスタのサポートを可能にする。 セグメントレジスタは以下のように符号化される。 Opデコード時間において、エミュレーションコードシーケンサ510は「O S」セグメントレジスタをエミュレーション環境からの現在の3ビットセグメン トレジスタの数で置き換える。従って、セグメントレジスタは特殊セグメントレ ジスタにおいて交代的にハード符号化されるか、またはセグメントOSに設定さ れ、このセグメントOSは現在の実効データセグメントレジスタを指定するが、 セグメントオーバーライドでオーバーライドされ得ない。 エミュレーションメモリセグメントレジスタ(MS)は、エミュレーション環 境において使用するための特殊エミュレーションメモリのアクセスを表す。デス クリプタテーブルSegReg TSが、グローバルなディスクリプタテーブル (GDT)またはローカルなディスクリプタテーブル(LDT)の何れかのアク セスを探す。 第6C図は、ロード即値オペレーション(LIMMOP)フィールド エンコーディングの図であり、LIMMOPフォーマットにおける様々なフィー ルドが示されている。LIMMOPフィールド650において、上位ビット36 及び37は、双方共に1に設定され、これはLIMMOPとしてのオペレーショ ンを表す。LIMMOPフィールド650は、ビットロケーション[35:20 ]に16ビットの即値上位部分(ImmHi)652、ビットロケーション[1 9:16]の位置に5ビットのデスティネーション(DEST)汎用レジスタフ ィールド654、ビットロケーション[15:0]の位置に16ビットの即値下 位部分(ImmLo)656を有する。ImmHi652及びImmLo656 は、両者組み合わせて、DESTフィールド654により指定されたレジスタに ロードされる32ビットの値を指定する。 第6D図は、SpecOpフォーマットの様々なフィールドを示す特殊オペレ ーション(SpecOp)フィールドをコードするシーケンスの図である。Sp ecOpフィールド660において、上位ビット35〜37は、それぞれ101 に設定され、これはSpecOpとしてのオペレーションを表す。SpecOp フィールド660はビットロケーション[34:31]の位置に4ビットのオペ レーションタイプ(TYPE)フィールド662、ビットロケーション[30: 26]の位置に5ビットの条件コード(CC)フィールド664、及びビットロ ケーション[30:26]の位置に2ビットのデータサイズ(DSz)フィール ド666(これは1、4、及びDサイズバイトのサイズを表す)を有している。 SpecOpフィールド660は、ビットロケーション[21:17]の位置に 5ビットのデスティネーション汎用レジスタ(DEST)フィールド668、ビ ットロケーション[16:0]の位置に17ビットの即値定数(Imm17)フ ィールド670を有する。Imm17フィールド670は17ビットの符号付き 即値か14ビットのOpアドレ スの何れかを保持する。CCフィールド664はBRCOND Opsによって のみ使用される。DSzフィールド666及びDESTフィールド668は、L DKxx Opsによってのみ使用される。標準的なNOP Opは、“LIM M t0, <undefined>”と定義される。SpecOpエンコーデ ィングのTYPEフィールド662は以下のようなコードを含む。 特殊オペレーション(SpecOp)置換の場合においては、SpecOpが チェックされ、レジスタアドレシングまたはメモリインデックストアドレシング について、デスティネーション汎用レジスタ(DestReg)がアドレス指定 されたか否かが判定される。レジスタアドレシングフォームが指定された場合、 エミュレーションコードシーケンサ510はRegレジスタから第6D図に示す SpecOpフォーマット660のDestRegフィールド668、既に格納 されたmodr/m regを置換する。メモリインデックストアドレシングフ ォームが指定された場合には、エミュレーションコードシーケンサ510は、R egmレジスタからSpecOpフォーマットのDestRegフィールド66 8へ以前に格納されたmodr/m regmを置換する。DestRegフィ ールド668はLDKまたはLDKDなるオペレーションのデスティネーション である5ビットのレジスタの数を保持する。 SpecOpは、データサイズ(DSz)フィールド666が置換されるべき か否かを決定するためにチェックされる。DSzフィールドの代わりに置換され る値は、エミュレーション環境がオペランドサイズオーバーライドによりオーバ ーライドされたときの現在セグメントデフォルト情報に基づいて定義されたとき 、エミュレーションコードシーケンサ510により、Op処理の前に決定される 。DSzフィールド666は1バイト、4バイトのサイズまたはロード定数オペ レーションLDK及びに対する代わりの定義されたDサイズに設定される。エミ ュレーションコードシーケンサ510は、SpecOpフォーマット666のD Szフィールド666に指定された置換値を置き換える。 SpecOpがロード定数、即ちデータ(LDKD)オペレーションである場 合、エミュレーションコードシーケンサ510はデータサイズ(DSz)フィー ルド666により指定された現在実効データサイズに基づいて17ビット即値( Imm17)フィールド670におけるデータを調節またはスケールする。17 ビット即値(Imm17)フィールドは、17ビットの定数、17ビットの符号 付き即値または14ビットのOpアドレスを含む。レジスタアドレス空間及びエミュレーションインタフェース プロセッサ120は従来型のx86レジスタアドレス空間と比較して拡張され たレジスタアドレス空間を実現している。プロセッサ120レジスタアドレス空 間は、5ビットでアドレス指定され、即ち25または32個のレジスタが定義さ れうる。8個のレジスタがx86アーキテクチャのレジスタに対応する。16個 の追加の一次レジスタが追加されている。データサイズ(DSz)フィールドは 直接または間接にオペレーションのデータサイズを指定する。1バイトのオペレ ーションに対しては、レジスタエンコーディングフィールドにより指定されたレ ジスタが 同じレジスタエンコーディングフィールドにより指定された2バイトまたは4バ イトのレジスタとは異なったものとなる。オペレーションのデータサイズは、オ ペレーションRegOps、SpeOps、及びLdStOpsのデータフィー ルド642に対して1バイト(1B)または2/4バイト(2B/4B)の何れか である。このデータサイズはLdStOpsのインデックス649及びベース6 46フィールドに対しては常に2/4バイト(2B/4B)である。 プロセッサ120レジスタフィールドエンコーディングは以下の通りである。 即値データー時レジスタは、値の差またはリトルエンディアン桁(little-end ian significance)の順番でt8から始めて使用される。“reg”及び“re gm”レジスタ番号は、Opデコード時に、Reg/RegMを“00xxx” で置換することによりエミュレーション環境からの現在3ビットレジスタ番号に より置き換えられる。この3ビットは、第1の8個のレジスタ(AX〜DI)の 中から1つのレジスタ を指定する。 Opフォーマットの生成及び拡張レジスタアドレス空間は、プロセッサ120 の柔軟な内部マイクロアーキテクチャの状態を定義する。x86アーキテクチャ 状態は、プロセッサ120のマイクロアーキテクチャの状態のサブセットである こともある。拡張レジスタアドレス空間は、x86レジスタアドレス空間と比較 して拡張された数の一次レジスタを備えている。24個のレジスタがプロセッサ 120の拡張レジスタアドレス空間により与えられ、これらのレジスタのうち8 つだけがx86アーキテクチャのレジスタに対応し、16個の一次レジスタが追 加されたものである。同様に、プロセッサ120は拡張された数のフラグレジス タを備えており、これらのうちいくつかがx86ステータスフラグに対応してい る。 例えば、プロセッサ120の一実施例においては、エミュレーションキャリー フラグが従来型のキャリーフラグ及び関連するエミュレーション環境に追加され て定義されている。従って、従来のadd命令は、キャリーフラグを設定し、プ ロセッサ120の持続的なアーキテクチャの状態を変化させるものとして定義さ れる。エミュレーションaddオペレーションは、エミュレーションキャリーフ ラグをセットし、従来型のキャリーフラグはセットしないように定義される。様 々な命令がエミュレーションキャリーフラグに基づく分岐を行うように定義され ているが、他の命令は従来型のキャリーフラグに基づいて分岐する。従って、プ ロセッサ120は従来型のマイクロアーキテクチャ状態とエミュレーションマイ クロアーキテクチャ状態と双方において同時に動作する。このエミュレーション 環境における動作により、プロセッサ120はエミュレーションマイクロシーケ ンスを実行すると共に目に見える(visible)マイクロアーキテクチャの状態を 変化させないようにすることができる。 第8図には、特定の実施例により代替技術が説明されている。x86命令セッ トのADDレジスタ命令は、modr/mバイトに先行するopcodeとして コード化される。ADD命令の8ビットopcodeフィールドは、命令がレジ スタ命令であるmodr/mバイトにおける使用と共に、エミュレーションコー ドROM232にADD RegM〜Regオペレーションに対するOpを生成 させる特定のROMエントリポイントを誘導するために用いられる。命令レジス タ512におけるreg及びregmフィールドは、regがAXになり、re gmがBXになるように指定する。reg及びregmフィールドは、命令レジ スタ512からOp置換回路522に供給され、それにより置換が行われる。オ ペレーションコードROM232は、限られた数のOpsのみに対するテンプレ ートを有し、Op置換回路522は、このテンプレートを埋め、複数の異なるO psを生成する。 リストされたプロセッサ120のレジスタフィールドエンコーディングでは、 レジスタAXがregコード00000によりハード的に特定されている。この 他、4つの可能なregエンコーディング、即ち110xxが、レジスタの置換 を指定する。この置換はエミュレートされる特定の命令、及び現在エミュレーシ ョン環境を含むプロセッサ120現在の状態に基づいてなされる。一般に、オペ レーションの置換及び実行は、(1)Regに対するエンコーディングをdes tフィールド620に入れ、(2)レジスタRegに対するエンコーディングを src1フィールド622に入れ、(3)RegMに対するエンコーディングを Imm8/Sec2フィールド628に入れ、(4)0を即値(I)フィールド 626に入れ、 (5)データサイズにより指定された1、2、または4バイト をDSzフィールド618に入れることにより行われる。システム開示テキスト 本発明に基づく間接指定子を用いるエミュレーション回路を含む命令デコーダ を実現する様々なコンピュータシステムコンフィギュレーションが考えられる。 例えば、このようなコンピュータシステム(例えばコンピュータシステム100 0)は、本発明に基づく間接指定子を用いるエミュレーション回路を含む命令デ コーダを提供するプロセッサ100、メモリサブシステム(例えばRAM102 0)、ディスプレイアダプタ1010、ディスクコントローラ/アダプタ103 0、様々な入力/出力インタフェース及びアダプタ(例えば並列インタフェース 1009、直列インタフェース1008、LANアダプタ107等)、及び対応 する外部装置(例えばディスプレイデバイス1001、プリンタ1002、モデ ム1003、キーボード1006、及びデータ記憶装置)を含む。データ記憶装 置には、例えばハードディスク1032、フロッピーディスク1031、テープ ユニット、CD−ROM、ジュークボックス、RAID、フラッシュメモリ等の ような装置が含まれる。 本発明について様々な実施例を取り上げて説明したが、これらの実施例は例示 であり、本発明の範囲をこれらに限定するものではないということは理解されよ う。ここに開示した実施例の様々な変更、追加、及び改良が可能である。更に、 実施例の中でハードウェアとして実現された構造及び機能性は、別の実施例では ソフトウェア、ファームウェア、またはマイクロコードとして実現され得る。例 えば、本明細書においては、3つのローテータ430、432、及び434、3 つの命令レジスタ450、452、及び454、及び3つのショートデコーダS Dec0410、SDec11412、SDec2414を備えたショートデコ ード回路を有するマクロ命令デコーダが開示されているが、他の実施例では、異 なる数のショートデコーダ経路が採用される。2つのデコード経路を採用したデ コーダは非常に適切なものである。これらの実施例及び 他の実施例の変更、修正、追加、及び改良は請求の範囲に記載の本発明の範囲内 に収まり得るものである。
【手続補正書】特許法第184条の8第1項 【提出日】1997年11月3日 【補正内容】 明細書 間接指定子を用いるエミュレーションを含む命令デコーダ技術分野 本発明はプロセッサに関連する。更に詳細には、本発明はデコーダ論理をエミ ュレートするためのエミュレーションROMを含む命令デコーダを備えたプロセ ッサに関連する。背景技術 EP−A−0 651 320は、当出願人による先行技術スーパスケーラ命 令デコーダを開示する。 先行技術は、Segars他による論文、「Embedded control problems,thumb,an d the ARN7TDMI」IEEE MICRO,vol.15,No.5,1October1995, pages22-30,XP000527879に関連する。 また先行技術は、John R Mickによる論文、「Microprogramming techniqu es using the AM 2910 sequencer」COMPCON'78,Februry 1978,IE EE,New York,USA,pages81-87,XP002021090に関連する。 P6クラスx86のような高性能マイクロプロセッサは共通な機構の組により 定義される。この機構とは、スーパースケーラアーキテクチャ及びパフォーマン ス、サイクル毎の複数x86命令のデコーディング、複数x86命令のRISC 風オペレーションへの変換を含む。RISC風オペレーションはデコードから切 り離されたCSICタイプコアにてout−of−order実行される。これ らの高性能マイクロプロセッサは、命令及びメモリ参照をリオーダするための大 きな命令ウインドウをサポートする。 高度なスーパースケーラマイクロプロセッサの動作は、デコーディング速度を 含むデコーディング特性、1サイクル内にデコードされるx86命令数、分岐予 測特性及びハンドリングにかなり依存する。高度なス ーパースケーラマイクロプロセッサ内の命令デコーダは1つ或いはそれ以上のデ コーディング経路を含み、その中で、x86命令に対応するRISC命令シーケ ンスをフェッチするためのROMメモリを用いて、x86命令はハードウエア論 理変換及び分離デコーディング経路によりデコードされる。一般にハードウエア 論理により変換されるx86命令は、単一のx86命令である。ルックアップR OMはより複雑なx86命令をデコードするために用いられる。 命令実行を割り当てるためのマイクロコードROMを用いるプロセッサの実質 的な問題点は、ROMメモリのサイズである。 命令をデコードするためにルックアップROMを用いる他の問題点は、ベクト ルROMアドレス(vector ROM address)を確定し、オペレーション(Op s)をROMから検索する際に発生するオーバーヘッドである。オーバーヘッド は一般に、ROMを用いてデコードされる命令に対するスループットにおけるペ ナルティを発生する。このスループットペナルティはデコーディング特性を低下 させる。 x86命令をデコーディングするためにルックアップROMを用いる別の問題 点は、x86プロセッサに対して標準的であるCISCタイプ命令が、多数の違 う種類のものが存在することである。実質的な命令数が実装されるから、命令を RISC風命令に変換するために、そのプロセッサチップ上に大きなROM回路 が必要になる。実装される多数の命令は、ROMに対するポインタを導出し、そ の導出したポインタをROMに適用するための回路を、増大させ、かつ複雑にす る。この増大した回路の複雑性は、命令デコーディングスループットを減少させ るオーバーヘッドの増加に直接結びつく。 大きなルックアップROMはプロセッサ集積回路のサイズを増大し、それによ り、回路の製造数は減少し、生産コストは増大する。ルックア ップROMの1つの特性は、多くの命令シーケンスが互いに類似しており、小さ な違いしかないことである。従ってルックアップROMメモリは一般に、種々の 命令間に大きな冗長度を有する。 必要とされることは、スーパースケーラ命令デコーダにおいて、サイズを減少 し、ROM型デコーダの複雑性を減少させることである。発明の開示 本発明に基づくと、ROMベースのデコーダは、命令間の高い冗長性を利用し て、様々なオペレーション構造を共有(share)し、メモリのサイズを大幅に低 減する。このデコーダは、ROMのサイズを低減するべく共通のROMシーケン スをマージ(merge)しかつ共有するための回路を含む。 本発明の一側面に基づくと、スーパースケーラマイクロプロセッサは、論理命 令デコーダの機能をエミュレートするエミュレーションROM及びエミュレーシ ョンコード制御回路を備えた命令デコーダを含む。命令レジスタには現在の命令 (current instruction)がロードされ、さらに命令レジスタは、プロセッサの 状態に基づいて更新される様々なビットフィールドを有する。エントリポイント 回路は、命令レジスタ内に格納された命令からエミュレーションROMエントリ ポイントを導出する。このエミュレーションROMエントリポイントは、エミュ レーションROMをアドレス指定するのに用いられる。エミュレーションROM からは、オペレーション(Op)もしくはOpのグループが読み出される。Op 内の様々なフィールドが命令レジスタから選択的に置換される。 本発明の第1の実施例に基づけば、プロセッサ内の命令デコーダエミュレーシ ョン回路は、命令コードを保持するための命令レジスタと、命令コードを受け取 るように命令レジスタに接続されたエントリポイント 回路とを含む。この命令レジスタは、命令コード内に複数のエンコードされたビ ットフィールドを有する。エントリポイント回路は、命令コードからエントリポ イントを導き出す。命令デコーダエミュレーション回路はまた、導き出されたエ ントリポイントを受け取るように前記エントリポイント回路に接続されたエミュ レーションコードシーケンサと、方向信号(direction signal)を受け取るよう に前記エミュレーションコードシーケンサに接続されたエミュレーションコード メモリとを有する。エミュレーションコードシーケンスは、オペレーションのシ ーケンス(Ops)を方向付けて、方向付けられたシーケンスに基づいて方向信 号を生成する。エミュレーションコードメモリは、複数のOpシーケンス及びシ ーケンス制御コードを記憶する。エミュレーションコードメモリは、また、Op シーケンスを出力するための第1の出力端子と、シーケンス制御コードを出力す るための第2の出力端子とを有する。シーケンス制御コード出力端子は、エミュ レーションコードシーケンサに接続されている。また、命令デコーダエミュレー ション回路は、Opシーケンスを受け取るようにエミュレーションコードメモリ の第1出力端子に接続されかつ命令コードの選択されたエンコードされたビット フィールドを受け取るように命令レジスタに接続されたオペレーション(Op) 置換回路を含む。このOp置換回路は、命令コードビットフィールドの選択され たフィールドをOpシーケンスに挿入する。 命令レジスタは、ベクタリングデコーダ(vectoring decoder)によってデコ ードされた命令バイトを保持する。ベクタリングによる命令デコードの間、ベク タリングデコーダは、命令レジスタの内容に基づいて、最初のベクタリングクワ ド(vectoring quad)及びエントリポイントアドレスを生成する。同時に、ベク タリングデコーダは、命令レジスタのフィールド及び他の情報に基づく様々な情 報から、エミュレーション環 境レジスタとも呼ばれるエミュレーション環境変数を初期化する。エミュレーシ ョン環境レジスタからの情報は、オペレーションの置換を実行するOp置換論理 へ供給される。 本発明の他の実施例に基づけば、プロセッサ内の命令デコーダエミュレーショ ン回路を動作させる方法は、命令コード内に複数のエンコードされたビットフィ ールドを有する命令レジスタ内へ命令コードを受け取る過程と、プロセッサの状 態に基づいて前記複数のエンコードされたビットフィールドの様々なビットフィ ールドを選択的に更新する過程とを有する。この方法は、さらに、命令コードか らエントリポイントを導き出す過程と、導き出されたエントリポイントに基づい てエミュレーションコードメモリをアドレス指定する過程とを有する。エミュレ ーションコードメモリは、複数のOpシーケンスを記憶する。この方法は、さら に、エミュレーションコードメモリからアドレス指定されたオペレーションをポ ップアップする過程と、命令コードの選択されたエンコードされたビットフィー ルドをアドレス指定されたオペレーションに挿入する過程とを含む。 多くの利点が、上述されたデコーダによって得られる。エミュレーションモー ドの置換を用いることにより、CISC機能のエンコードを達成しつつ、エミュ レーションコードROMのサイズが縮小され、とりわけ、プロセッサ集積回路の 寸法及び製造コストが低減される。エミュレーションモードの置換によって、類 似した命令によるROMシーケンスの共有が可能となる。図面の簡単な説明 新規であると考えられる本発明の特徴は、添付の請求の範囲に記載されている 。しかしながら、本発明自身は、その構造及びその動作方法の両方において、添 付の図面及び以下の説明からより最もよく理解される だろう。 第1図は、本発明の一実施例に基づくコンピュータシステムを表すブロック図 である。 第2図は、第1図に例示されたコンピュータシステムで用いるためのプロセッ サの一実施例を表すブロック図である。 第3図は、第2図に例示されたプロセッサの実施例に対するパイプラインのタ イミングを表すタイミング図である。 第4図は、第2図に例示されたプロセッサで用いられる命令デコーダの実施例 を表す模式的ブロック図である。 第5図は、第4図に例示された命令デコーダのエミュレーションコードメモリ 及びエミュレーションコードシーケンサの構造を表す模式的なブロック図である 。 第6A図〜第6E図は、第4図に例示された命令デコーダによって生成された 複数のオペレーション(Op)フォーマットを表す図である。 第7図は、第5図に例示されたエミュレーションコードメモリで用いられるO pSeqフィールドフォーマットを表す図である。 第8図は、命令置換の例を表す図である。 第9図は、本発明のある実施例に基づく間接指定子(indirectspecifier)を 用いたエミュレーションを含む命令デコーダを備えたプロセッサを組み込んだパ ーソナルコンピュータのブロック図である。 発明を実施するための形態 第1図に示すようなコンピュータシステム100は、パーソナルコンピュータ への応用を含む、様々な応用例にて用いられる。コンピュータシステム100は 本発明の1つの実施例に従ったプロセッサを包含するコンピュータマザーボード 110を含む。プロセッサ120はモノリシック集積回路であり、複雑な命令セ ットを実行するために複雑命令セッ トコンピュータ(CISC)と呼ばれることもある。複雑な命令の例はよく知ら れるマイクロプロセッサの8086ファミリ上にインプリメントされるx86命 令セットである。プロセッサ120はレベル2(L2)キャッシュ122、メモ リコントローラ124、ローカルバスコントローラ126及び128に接続され る。メモリコントローラ124はメインメモリ130に接続され、プロセッサ1 20と主メモリ130との間のインターフェースを形成する。ローカルバスコン トローラ126及び128はPCIバス132とISAバス134を含むバスに 接続され、PCIバス132とISAバス134との間のインターフェースを形 成する。 第2図において、プロセッサ120の1つの実施例のブロック図が示される。 プロセッサ120のコアはRISCスーパースケーラプロセッシングエンジンで ある。共通x86命令が命令デコード用ハードウエアにより変換され、内部RI SC86命令セットにて動作する。プロセッシングを除く他の86命令及び種々 の機能はオンチップROMに格納されるRISC86オペレーションシーケンス としてインプリメントされる。プロセッサ120はシステムインターフェース2 10を含むインターフェース及びL2キャッシュコントロールロジック212を 含む。システムインターフェース210はプロセッサ120をコンピュータシス テム100の他のブロックに接続する。プロセッサ120は主メモリ130及び ローカルバス上の装置132、134を含む、コンピュータシステム100のア ドレス空間に、システムインターフェース210を介する読出しアクセス及び書 込みアクセスによりアクセスする。L2キャッシュコントロールロジック212 は、L2キャッシュ122のような外部キャッシュとプロセッサ120との間の インターフェースを形成する。詳細にはL2キャッシュコントロールロジック2 12は、プロセッ サ120内の命令キャッシュ214及びデータキャッシュ216に対するL2キ ャッシュ122のインターフェースを形成する。命令キャッシュ214及びデー タキャッシュ216はレベル1キャッシュであり、コンピュータシステム100 のアドレス空間に対して、L2キャッシュを通して接続される。 主メモリ130からの命令は予測実行のためのプリデコーダ270を介して命 令キャッシュ214内にロードされる。プリデコーダ270は、命令キャッシュ 214内の命令ビットと組み合わせて格納されるプリデコードビットを生成する 。そのプリデコードビット、例えば3ビットは、関連する命令バイト(8ビット )と共にフェッチされ、複数の命令デコーディングを容易にし、デコード時間を 短縮するために用いられる。命令バイトは、4つの8バイトデータのバースト転 送により一度に32バイトが、命令キャッシュ214内にロードされる。プリデ コーダ270のロジックは8回複製され、キャッシュラインにおいて4回使用さ れ、それによって全8命令バイトに対するプリデコードビットが命令キャッシュ 214内に書き込まれる直前に同時に計算されるようになっている。あるバイト に対するプリデコードオペレーションは、1、2、または3つのバイトの情報に 基づき、プリデコード情報は8バイトグループを越えて広がることができる。そ のため、ある8バイトグループの最後の2つのバイトは、2つの8バイトグルー プ間にまたがるようなプリデコード情報に備えて、次の8バイトグループに対す る処理に対し退避される。命令キャッシュ214内の命令はCISC命令であり 、マクロ命令として参照される。命令デコーダ220は、命令キャッシュ214 からのCISC命令を、実行エンジン222上で実行するために、縮小命令セッ トコンピューティング(RISC)アーキテクチャ命令セットに変換する。命令 キャッシュ214からの1つのマクロ命令は、実行エンジン2 22に対する1つ或いは複数のオペレーション内にデコードされる。 命令デコーダ220は、命令キャッシュ214及び命令フェッチコントロール 回路218(第4図参照)とのインターフェース接続を有する。命令デコーダ2 20は、ほとんどのマクロ命令をデコードするためのマクロ命令デコーダ230 、複雑な命令を含む命令のサブセットをデコードするためのエミュレーションR OM232を含む命令エミュレーション回路231、並びに分岐予測し、ハンド リングするための分岐ユニット234を含む。マクロ命令は、それらのマクロ命 令が変換される一般的なオペレーションタイプに基づいて分類される。一般のタ イプのオペレーションはレジスタオペレーション(RegOps)、ロードーストア オペレーション(LdStOps)、ロード即値オペレーション(RIMNOps)、 専用オペレーション(SpecOps)、浮動小数点演算(FpOps)である。 実行エンジン222はスケジューラ260及び、ロードユニット240、スト アユニット242、第1のレジスタユニット244、第2のレジスタユニット2 46、浮動小数点ユニット248、マルチメディアユニット250を含む6つの 実行ユニットを有する。スケジューラ260は適切な実行ユニットにオペレーシ ョンを分散し、実行ユニットは並行して動作する。各実行ユニットは特定のタイ プのオペレーションを実行する。特にロードユニット240及びストアユニット 242はそれぞれ、ロード/ストアオペレーション(LdStOps)中、データキ ャッシュ216(L1データキャッシュ)、L2キャッシュ122、メインメモ リ130に対してデータのロード(読出し)或いはデータの格納(書込み)を行 う。格納キュー262は、ストアユニット242及びロードユニット240がデ ータキャッシュ216へのアクセスに競合がなく並行して動作するように、スト アユニット242からのデータを一時格納する。レジスタユニット244及び2 46は、レジスタファイル290にアク セスするためにレジスタオペレーション(RegOps)を実行する。浮動小数点ユ ニット248は浮動小数点演算(FpOps)を実行する。マルチメディアユニッ ト250は、マルチメディアへの応用の場合に算術演算を実行する。 スケジューラ260は複数の、例えば24のエントリに分割され、各エントリ が記憶機構及び論理を含む。24エントリはOpクワドと呼ばれる、4エントリ からなる6つのグループにグループ化される。各エントリに格納された情報は実 行に対するオペレーション、その実行が未完了か、或いは完了か否かを記述する 。スケジューラはエントリを監視し、情報指定実行ユニットに対してエントリか らの情報をディスパッチする。 図3においてプロセッサ120は、5ステージ及び6スデージベーシックパイ プラインタイミングを用いる。命令デコーダ220は、1クロックサイクルにお いて、2つの命令をデコードする。第1のステージ310、フェッチサイクルス テージ中に、命令フェッチコントロール回路218はCISC命令を命令キャッ シュ214内にフェッチする。ステージ310中のCISC命令のプリデコーデ ィングは、後続するデコード時間を短縮する。第2のステージ320、デコード サイクルステージ中に、命令デコーダ220は命令キャッシュ214からの命令 をデコードし、Opクワドをスケジューラ260内にロードする。第3のステー ジ330、発行サイクルステージ中に、実行ユニットのそれぞれのタイプに対す るオペレーションが有効である場合に、スケジューラ260はそのエントリをス キャンし、対応する実行ユニット240から252に対してオペレーションを発 行する。ステージ330にて発行されたオペレーションに対するオペランドは、 第4のステージ340の実行ユニットにフォアードされる。RegOpの場合、 ステージ350である次のクロックサイクルにて通常完了するが、LdStOp sはアドレス計算 352、データアクセス及び結果の転送362のために多くの時間を必要とする 。 分岐オペレーションの場合、命令デコーダ220は分岐オペレーションの最初 のデコーディング中に分岐予測324を実行する。分岐ユニット252は後のス テージ364にて分岐に対する条件を評価し、分岐予測324が正確であったか 否かを判定する。2レベル分岐予測アルゴリズムが条件分岐の方向を予測し、ス テージ310にてCISC命令のフェッチング、さらにステージ320にてCI SC命令のデコーディングが予測された分岐方向にて継続される。スケジューラ 260は分岐評価に対して必要とされる全ての条件コードが有効であるとき確定 し、分岐命令を評価するために分岐ユニット252を割り当てる。分岐が不正確 に予測された場合、スケジューラ260にて実行されるべきでないオペレーショ ンがフラッシュされ、デコーダ220は分岐後の正確なアドレスから新しいOp クワドをロードし始める。正確な分岐に対する命令がフェッチされるが、タイム ペナルティを被る。命令デコーダ220は前ストア予測アドレスを読み出すか、 或いは並列加算器の組を用いてアドレスを計算する。前予測アドレスが格納され る場合には、予測アドレスはステージ326にてフェッチされ、予測アドレスに て位置する命令は、加算器で遅延することなくステージ328にてフェッチされ る。そうでない場合には、並列加算器が予測アドレスを計算する。 分岐評価ステージ364では、分岐ユニット252が予測された分岐方向が正 確か否かを判定する。予測された分岐が正確である場合には、フェッチ、デコー ド及び命令実行ステップが割り込みなしに継続される。予測が不正確な場合には 、スケジューラ260がフラッシュされ、命令デコーダ220は分岐に後続する 正確なプログラムカウンタからマクロ命令をデコードし始める。 図4において略ブロック図により、主メモリ130に接続される命令準備回路 400の実施例を示す。命令準備回路400は、プリデコーダ270を介して主 メモリ130に接続される命令キャッシュ214を含む。命令デコーダ220は 3つの別々のソース、命令キャッシュ214、分岐ターゲットバッファ(BTB )146、命令バッファ408からの命令バイト及びプリデコードビットを受信 するために接続される。命令バイト及びブレデコードビットは複数のローテータ 430、432及び434を通って命令レジスタ450、452及び454を介 して命令デコーダ220に与えられる。マクロ命令デコーダ230は、命令キャ ッシュ214及び命令フェッチコントロール回路218に接続され、命令バイト 及び関連するプリデコード情報を受信する。マクロ命令デコーダ230は、命令 フェッチコントロール回路218に接続される命令バッファ408にてフェッチ された命令バイトをバッファリングする。命令バッファ408は命令キャッシュ 214からの16バイト或いは4つの配列されたワードまでを受信し、バッファ リングする16バイトバッファである。命令キャッシュ214は、命令バッファ 408内の空きスペースにより許容されるだけのデータをロードする。命令バッ ファ408はデコードされるべき次の命令バイトを保持し、古い命令バイトがマ クロ命令デコーダ230により処理されるに従って、新しい命令バイトをリロー ドする。命令キャッシュ214及び命令バッファ408における命令は、メモリ ビット(8)及びプリデコードビット(5)を含む「拡張された」バイト内に保 持され、同一の配列にて保持される。プリデコードビットは、マクロ命令デコー ダ230が単一クロックサイクル内において複数の命令デコードを実行すること を支援する。 デコードプログラムカウンタ(PC)420、422或いは424を用いてア ドレス指定された命令バイトは、命令バッファ408からマク ロ命令デコーダ230に転送される。命令バッファ408はマクロ命令デコーダ 230内のデコーダによるバイトに基づきアクセスされる。しかしながら各デコ ードサイクルにおいて、命令バッファ408は、命令バッファ408内のそのバ イトが有効であり、かつ命令キャッシュ214から新しいバイトと共にリロード される、トラッキングに対するワードに基づき管理される。命令バイトが有効で あるか否かの指定は、命令バイトがデコードされるに従って保持される。無効な 命令バイトの場合には、デコーダ無効確認ロジック(図示せず)がマクロ命令デ コーダ230に接続されており、「バイト無効」信号をセットする。現在フェッ チPC426の更新の制御は、命令バッファ408における命令バイトの有効性 及び命令デコーダ220による命令バイトの消費と密接に同期される。 マクロ命令デコーダ230はフェッチサイクルの最後で命令フェッチコントロ ール回路218からフェッチされた命令バイトを16バイト、すなわち4つの配 列されたワードまでを受信する。命令キャッシュ214からの命令バイトは16 バイト命令バッファ408にロードされる。命令バイトがフェッチ並びにまたデ コードされるように、命令バッファ408は、各命令バイトに関連するプリデコ ード情報を加えた命令バイトをバッファリングする。命令バッファ408は命令 バッファ408の空きスペースによって収容できるだけの多くの命令バイトを受 信し、デコードされるべき次の命令バイトを保持し、続いて前命令バイトがマク ロ命令デコーダ230内の個々のデコーダに転送されるように新しい命令バイト をリロードする。命令プリデコーダ270は命令バイトが命令キャッシュ214 に転送されるとき、プリデコード情報ビットを命令バイトに加える。それ故命令 キャッシュ214によって格納され、転送される命令バイトは、拡張バイトと呼 ばれる。各拡張バイトは8つのメモ リビットと5つのプリデコードビットを含む。5つのプリデコードビットは命令 長をエンコードする3つのビット、その命令長がDビット依存するか否かを指定 する1つのDビット、命令コードがmodrmフィールドを含むか否かを示すH asModRMビットを含む。13ビットが命令バッファ408に格納され、マ クロ命令デコーダ230のデコーダに渡される。命令バッファ408は各5つの プリデコードビットの組を6つのプリデコードビットに拡張する。プリデコード ビットはそのデコーダをイネーブルし、1クロックサイクル内で迅速に複数の命 令デコードを実行する。 命令バッファ408は命令がワード細分性を有してロードされ、置き換えられ るように、命令キャッシュ214の記憶装置のメモリ配列されたワードに基づき 、命令キャッシュ214から命令バイトを受信する。従って命令バッファ408 のバイトロケーション0は、0(mod16)のアドレスにてメモリにアドレス 指定されたバイトを常に保持する。 命令バイトはバイト細分性を有して命令バッファ408からマクロ命令デコー ダ230に転送される。各デコードサイクル中、命令バッファ408内の16の 拡張された命令バイトは、関連する暗黙ワード有効ビットを含み、マクロ命令デ コーダ230内の複数のデコーダに転送される。命令キャッシュ214からマク ロ命令デコーダ230への命令バッファ408を介した命令バイトの転送の方法 は命令がデコードされ続ける限り、各デコードサイクルを用いて繰り返される。 例えば行われた分岐オペレーションにより、コントロール転送が生じるとき、命 令バッファ408はフラッシュされ、その方法は再度開始される。 現在デコードPCは任意のバイト配列を有し、命令バッフア408はそのバイ ト配列内に16バイトの容量を有するが、4バイトワード毎に管理される。ワー ドの全4バイトは消費されると、取り除かれ、命令バ ッファ408内の4つの新しいバイトを有するワードと置き換えられる。命令バ イトが命令バッファ408からマクロ命令デコーダ230へ転送されるとき、命 令バッファ408は命令キャッシュ214からリロードされる。 命令バイトは、マクロ命令デコーダ230に対して連続的な命令バイトを適用 する場合に適切である逐次バイト配列ではなくメモリ用配列を用いて命令バッフ ァ408内に格納される。それ故バイトローテータ430、432、434の組 が命令バッファ408とマクロ命令デコーダ230の各デコーダとの間に挿入さ れる。4つの命令デコーダは3つのショートデコーダSDec0 410,SD ec1 412或いはSDec2 414、及び1つの組み合わされるロングデ コーダ及びベクタリングデコーダ418を含み、バイトローテータ430、43 2、434に共有される。特に、ショートデコーダSDec0 410及び組み 合わせたロングデコーダ及びベクタリングデコーダ418は、バイトローテータ 430に共有される。ショートデコーダSDec1 412はバイトローテータ 432に関連し、ショートデコーダSDec2 414はバイトローテータ43 4に関連する。 複数のパイプラインレジスタ、具体的には命令レジスタ450、452及び4 54は、バイトローテータ430、432、434及び命令デコーダ220間に 挿入され、一時的に命令バイト、プリデコードビット及びその他の情報を保持し 、それによってデコードタイミングサイクルを短縮する。命令レジスタ450、 452、454に保持されるその他の情報は、プレフィクス(例えば0F)状態 、即値サイズ(8ビット或いは32ビット)、配列及び長いデコード可能長指定 を含む命令デコーディングを支援するための様々な情報を含む。 回路は3つのローテータ及び3つのショートデコーダを用いて示され るが、他の実施例では、異なる数の回路構成要素が用いられる場合もある。例え ば1つの回路が2つのローテータ及び2つのショートデコーダを含む。 命令は、命令用配列ではなくメモリ用配列にて、命令キャッシュ214、分岐 ターゲットバッファ(BTB)456及び命令バッファ408内に格納され、第 1の命令バイトの位置は未知である。バイトローテータ430、432及び43 4が命令の先頭バイトを見出す。 マクロ命令デコーダ230はまた、様々な命令デコード及び、デコードオペレ ーションの有効性確認及び異なるタイプのデコードオペレーション間選択を含む 、例外デコードオペレーションを実行する。デコードオペレーション中に実行さ れる機能はプレフィクスバイトハンドリング、命令のエミュレーションのための エミュレーションコードROM232に対するベクタリングのための支援及び、 分岐ユニット234のオペレーション、分岐ユニットのインターフェース化及び 復帰アドレス予測に対する支援を含む。命令バイト及び関連する情報に基づき、 マクロ命令デコーダ230はOpクワドに対応する4つのオペレーショングルー プにてオペレーション情報を生成する。マクロ命令デコーダ230はまた、命令 ベクタリングコントロール情報及びエミュレーションコードコントロール情報を 生成する。マクロ命令デコーダ230はまた、Opクワド情報、命令ベクタリン グコントロール情報及びエミュレーションコードコントロール情報を出力するた めに、スケジューラ260及びエミュレーションROM230に対する出力を有 する。マクロ命令デコーダ230は、スケジューラ260がOpクワドを許容で きない、或いはエミュレーションコードROM230からのOpクワドを許容し ているとき、命令をデコードしない。 マクロ命令デコーダ230は5つの別々のデコーダを有し、その中に 含まれる3つの「ショート」デコーダSDec0 410、SDec1412及 びSDec2 414はx86命令セットの簡単な命令のサブセット内において 定義される3つまでの命令の「ショート」デコードオペレーションをデコードす るための組み合わせにおいて機能する。一般に簡単な命令は3つ以下のオペレー ションに翻訳する命令である。ショートデコーダSDec0 410、SDec 1 412及びSDec2414の各々は、プレフィクスデコードのような場合 にはオペレーションは生成されないが、一般に1つ或いは2つのオペレーション を生成する。従って3つのショートデコーダオペレーションの場合、1デコード サイクルにおいて2つから6つまでのオペレーションが生成される。3つのショ ートデコーダからの2つから6つのオペレーションは、6つのオペレーションの 最大4つが有効であるから、Opクワド内のオペレーションパッキングロジック 438により共に順次パックされる。具体的には、潜在的に6つのオペレーショ ンを生成するので、3つのショートデコーダSDec0 410、SDec1 412及びSDec2 414の各々は、2つのオペレーションをデコードする ことを試みる。4つ以上のオペレーションが生じた場合には、ショートデコーダ SDec2 414からのオペレーションは無効とし、一度に4つのオペレーシ ョンのみが生成される。5つのデコーダはまた、1つの「ロング」デコーダ41 6及び1つの「ベクタリング」デコーダ418を含む。ロングデコーダ416は 命令、すなわち多数の複雑なアドレスモード形式を有する命令の形式をデコード することにより、2つ以上のオペレーションが生成され、ショートデコードハン ドリングは有効にならない。ベクタリングデコーダ418はショートデコーダS Dec0 410、SDec1 412及びSDec2 414のオペレーショ ンによって或いはロングデコーダ416のオペレーションによっては処理できな い命令を 処理する。ベクタリングデコーダ418は実際には命令をデコードしないが、命 令をエミュレーションのためにエミュレーションROM230の位置にベクタリ ングする。マクロ命令デコーダ230によって検出される様々な例外条件はまた 、ベクタリングデコードオペレーションの特殊な形式として処理される。起動さ れると、ロングデコーダ416及びベクタリングデコーダ418はそれぞれ全O pクワドを生成する。ショートデコーダSDec0 410、SDec1 41 2及びSDec2414により生成されたOpクワドはロングデコーダ416及 びベクタリングデコーダ418により生成されるOpクワドと同じフォーマット を有する。ショートデコーダ及ロングデコーダOpクワドはOpSeqフィール ドを含まない。マクロ命令デコーダ230は、マクロ命令デコーダ230のOp クワド結果が各デコードサイクルとなるように、ショートデコーダ410、41 2、414によって生成されるOpクワドか、或いはロングデコーダ416また はベクタリングデコーダ418により生成されるOpクワドのどちらかを選択す る。1度に1つのデコーダのみの結果が用いられるが、ショートデコーダオペレ ーション、ロングデコーダオペレーション及びベクタリングデコーダオペレーシ ョンは並列して、互いに独立に機能する。 各ショートデコーダ410、412、414は、先頭バイトがオペレーション コード(オペコード)バイトであり、命令がショートデコード命令であることを 仮定する場合、7つまでの命令バイトをデコードする。2つのオペレーション( Ops)は対応する有効なビットを用いて生成される。有効なアドレスサイズ、 有効なデータサイズ、現在x86標準Bビット及び任意のオーバーライドオペラ ンドセグメントレジスタに対する適切な値は、これらのパラメータに依存するオ ペレーションの生成のために与えられる。デコードされるべき次の「逐次」命令 の論理的ア ドレスはCALL命令に対するオペレーションを生成する際に用いるために与え られる。逐次という用語は引用符の中におかれているが、「逐次」アドレスは一 般に現在の命令の直前の命令をさすが、「逐次」アドレスは任意にアドレス指定 された位置にセットされる場合があるということを示す。現在分岐予測は条件付 き転送コントロール命令に対するオペレーションを生成する際に用いるために与 えられる。ショートデコードは転送コントロール命令(例えばJcc,LOOP ,JMP,CALL)、無条件転送コントロール命令(例えばJMP,CALL )、CALL命令、プレフィクスバイト、cc−dependent RegO p、並びに命令長がアドレス或いはデータサイズ依存か否かの指定の指示を含む 制御信号を発生する。一般に1つ或いは2つのオペレーションが有効であるが、 プレフィクスバイト及びJMPは有効なオペレーションを発生しない。無効なオ ペレーションはOpクワドをパッドするために有効なNOOPオペレーションと して生じる。 第1のショートデコーダ410はデコーディングする以上の命令バイトに基づ きオペレーションを生成する。第1のショートデコーダ410はまた、前デコー ドサイクル中、デコードされる任意のプレフィクスバイトの存在を判定する。種 々のプレフィクスバイトは0F、アドレスサイズオーバーライド、オペランドサ イズオーバーライド、6セグメントオーバーライドバイト、REP/REPE、 REPNE及びLOCKバイトを含む。各プレフィクスバイトは定義される方法 において、後続命令デコードに影響を与える。プレフィクスバイトのカウント及 び連続プレフィクスバイトのカウントはデコーディング中に累積され、第1のシ ョートデコーダSDec0 410及びロングデコーダ416に与えられる。連 続プレフィクスバイトカウントはデコードされている命令が長すぎないか否かを 検査するために用いられる。プレフィクスバイト情報 は、後続デコードサイクルを制御するためにも用いられ、あるタイプの命令特定 例外条件に対する検査を含む。プレフィクスカウントはプレフィクス及び次の命 令のオペコードバイトをデコードするための準備において、各有効な非プレフィ クスコードサイクル終了時点で、リセット、すなわち初期化される。プレフィク スカウントは、マクロ命令デコーダ230が分岐条件及び書込み命令ポインタ( WRIP)オペレーションデコードするとき、再度初期化される。 プレフィクスバイトは1バイトショートデコード命令の形式で、第1のショー トデコーダ410により処理される。多くても、1プレフィクスバイトは1デコ ードサイクル、プレフィクスバイトのデコードに後続する全てのショートデコー ドの無効性確認を通して強制される条件にてデコードされる。有効なアドレスサ イズ、データサイズ、オペランドセグメントレジスタ値及び現在Bビットは、第 1のショートデコーダ410に与えられるが、先行するオペコードと共にデコー ドできる。 アドレスサイズプレフィクスは、生成されたオペレーションは有効なアドレス サイズに依存する命令のデコーディングに対して、並びにmodr/m命令のア ドレスモード及び命令長のデコーディングに対して、後続命令のデコードに影響 する。デフォルトアドレスサイズは現在特定済x86標準Dビットにより特定さ れ、Dビットは1つ或いはそれ以上のアドレスサイズプレフィクスの発生により 有効にトグルされる。 オペラントサイズプレフィクスもまた、生成したオペレーションが有効なデー タサイズに依存する命令のデコーディングに対して、並びに命令長のデコーディ ングに対して、後続命令のデコードに影響を与える。デフォルトオペランドサイ ズは現在特定済x86標準Dビットによって特定され、Dビットは1つ或いはそ れ以上のオペランドサイズプレフィクスの発生により有効にトグルされる。 セグメントオーバーライドプレフィクスは、ロード−ストアオペレーション( LdStOps)の発生が命令の有効なオペランドセグメントに依存する場合に のみ、後続命令のデコードに影響を与える。デフォルトセグメントはDS或いは SSであり、関連する通常のアドレスモードに依存し、最後のセグメントオーバ ーライドプレフィクスにより特定されるセグメントによって置き換えられる。 REP/RERE及びREPNEプレフィクスは後続命令のデコードに影響を 与えない。命令がエミュレーションコードROM232ではなく、マクロ命令デ コーダ230によりデコードされる場合には、あらゆる先行REPプレフィクス は無視される。しかしながら、命令がベクタリングされる場合には、ベクトルア ドレスの生成が、ある場合には変更される。具体的には、ストリング命令或いは 特定の隣接オペコードがベクタリングされる場合には、1つ或いはそれ以上のR EPプレフィクスの発生の指示及び遭遇した最後のREPプレフィクスの指定が ベクトルアドレスに含まれる。その他の全ての命令に対しては、ベクトルアドレ スは修正されず、REPプレフィクスは無視される。 LOCKプレフィクスは、プレフィクスバイトのデコーディングを除く、全て のショートデコーディング及びロングデコーディングを禁止し、後続命令をベク タリングさせる。この後続命令のベクタリングデコードサイクルが発生するとき 、後続命令がプレフィクスでない限りは、オペコードバイトが検査され、命令が その命令の「ロック可能」サブセット内にあることを確実にする。命令がロック 可能な命令でない場合には、例外条件が認識され、ベクタリングデコーダ418 により生成されたベクトルアドレスは例外エントリポイントアドレスにより置き 換えられる。 第2のショートデコーダ412及び第3のショートデコーダ414によりデコ ードされる命令はプレフィクスバイトを有さず、デコーダ41 2及び414はアドレスサイズ、データサイズ及びオペランドセグメントレジス タ値に対する固定デフォルト値を仮定する。 一般に、3つの連続するショートデコードが実行されるとは限らないため、か つ命令は単一のオペレーションのみにおいてショートデコードする場合が多いた め、3つのショートデコーダは4つ或いはそれ以下のオペレーションしか生成し ない。しかしながら、まれに4つ以上の有効なオペレーションが生成される場合 があるため、オペレーションパッキングロジック438が第3のショートデコー ダ414を禁止、すなわち無効にし、2つの命令のみが完全にデコードされ、多 くても、4つのオペレーションがOpクワッド内にパッキングするために生成さ れる。 第1のショートデコーダ410が有効でないとき、第2のショートデコーダ4 12及び第3のデコーダ414の動作は無効にされる。第2のショートデコーダ 412が有効でないときには、第3のショートデコーダ414の動作は無効にさ れる。第1のショートデコーダが無効であった場合でも、デコードサイクルはロ ングデコードサイクル或いはベクタリングデコードサイクルになる。一般にマク ロ命令デコーダ230は、1つ或いはそれ以上のショートデコードを試み、ショ ートデコードが失敗する場合には、1つのロングデコードを試みる。ロングデコ ードが失敗する場合には、マクロ命令デコーダ230はベクタリングデコードを 実行する。複数の条件によりショートデコーダ410、412及び414は無効 にされる。大抵の場合、命令オペレーションコード(opcode)、すなわち modr/m命令の指定されたアドレスモードが、定義されたショートデコード に入らない、すなわち単一の命令のサブセットに入らない場合、ショートデコー ドは無効にされる。この条件は一般に、ショートデコード命令を1つ或いは2つ のオペレーションを生成するオペレーションに限定する。デコードされた命令に 対する命令バッフ ァ408内の全てのバイトが有効ではない場合には、デコードはまた無効とされ る。また「cc−dependent」オペレーションは、ステータスフラグに 依存するオペレーションであり、第1のショートデコーダ410によってのみ生 成され、これらのオペレーションが確実に「.cc」RegOpsにより先行さ れないようにする。直前のショートデコードが分岐予測した方向にもかかわらず 、転送コントロール命令のデコードであったとき、ショートデコードは2つの連 続するショートデコードの第2のデコードに対して無効とされる。第1のショー トデコードがプレフィクスバイトのデコードであったときは、ショートデコード は2つの連続するショートデコードの第2のデコードに対して無効とされる。一 般に、プレフィクスコード或いは転送コントロールコードは1サイクル中でそれ 以上のデコードを禁止する。 更に、命令バッファ408は一度に16バイトしか保持できないため、マクロ 命令デコーダ230によって16命令バイトしか消費されない。また多くても4 つのオペレーションしかOpクワド内にパックされることができない。これらの 制約条件は、各ショートデコード命令の長さが多くても7バイトしかないため、 第3のショートデコーダ414のみに影響を与え、4つより多いオペレーション は第3のショートデコーダ414においてのみ発生する。 関連する制約条件では、現在Dビット値が16ビットアドレスとデータサイズ デフォルトを特定する場合には、アドレス並びにまたデータ依存する長さを有す る命令は、プレデコード情報が不正確である可能性が高いため、第1のショート デコーダ410によってのみ処理される。また複数の命令デコーディングがディ スエーブルされるときには、第1のショートデコーダ410のみが有効に命令及 びプレフィクスバイトをデコードすることができる。 有効性確認テストはマクロ命令デコーダ230内のショートデコーダ有効性確 認ロジックにより制御され、ショートデコーダ410、412及び414のオペ レーションと独立である。しかしながらデコーダ410、412及び414は0 をセットし、1つあるいは2つの有効なビットはデコードされたオペレーション の数に依存する。これらの有効ビットは、3つのショートデコーダ410、41 2及び414の場合全6ビットであり、オペレーションパッキングロジック43 8により用いられ、Opクワッド内にパックするためのいづれかのオペレーショ ンを確定し、かつ無効なオペレーションをNOOP(no operation )オペレーションとして発生させる。オペレーションパッキングロジック438 は、有効なショートデコード及び関連するオペレーションが、他の有効なショー トデコード及び関連する情報によってのみ先行されるため、ショートデコーダ有 効性確認情報を用いずに動作する。 ショートデコーダ410、412、及び414はまた、様々な特殊なオペコー ド、すなわちmodr/mアドレスモードデコードを表す複数の信号を生成する 。これらの信号はある命令の形式が現在、命令デコーダ220によりデコードさ れているか否かを示す。これらの信号はショートデコード有効性確認ロジックに より用いられ、ショートデコード有効性確認状況を処理する。 命令バイトは、命令バッファ408内に配列されずに格納されており、命令バ イトがデコーダ410−418に転送されるときに、バイトローテータ430、 432及び434により配列される。第1のショートデコーダSDec0 41 0、ロングデコーダ416及びベクタリングデコーダ418は、第1のバイトロ ーテータ430を共有する。第2のショートデコーダSDec1 412及び第 3のショートデコーダSDec2 414はそれぞれ第2のバイトローテータ4 32及び第3のバイ トローテータ434を用いる。各デコードサイクル中、3つのショートデコーダ SDec0 410、SDec1 412及びSDec2 414は、3つの独 立に動作し、かつ並列するバイトローテータ430、432及び434を用いて 、最も有効に3つのショートデコードオペレーションをデコードすることを試み る。命令バッファ408内の適切なバイトのバイトローテータ430、432及 び434によりそれぞれのデコーダSDec0410、SDec1412及びS Dec2414に対する多重化を行うことは概念的に先行する命令デコードオペ レーションに依存するが、命令長ルックアヘッドロジック436はプリデコード ビットを用いて、デコーダが概ね並行して動作するようにする。 ロングデコーダ416及びベクタリングデコーダ418は共同で、11命令バ イトの2つの並行したデコードを実行し、第1のバイトをオペコードバイトとし 、ロング命令デコードOpクワド或いはベクタリングデコードOpクワドのいず れかを生成する。ロングデコーダ416及びベクタリングデコーダ418により 解析された情報は、有効なアドレスサイズ、有効なデータサイズ、現在Bビツト 及びDFビット、任意のオーバーライドオペランドセグメントレジスタ、デコー ドされるべき次に続くターゲット命令の論理アドレスを含む。ロングデコーダ4 16及びベクタリングデコーダ418は、任意のセグメントオーバーライドを加 えたmodr/mアドレスモードにより暗示されるデフォルトに基づいて、先行 プレフィックスビット、その命令が命令にロングデコードサブセット内にあるか 否かの指示、RET命令及び有効なオペランドセグメントレジスタを除く命令長 を含むデコード信号を生成する。 ショートデコーダSDec0 410、SDec1 412及びSDec2 414の何れもがショート命令をうまくデコードしないデコードサイクル中は、 マクロ命令デコーダ230はロングデコーダ416を 用いてロングデコードを行うことを試みる。ロングデコードが実行できない場合 には、ベクタリングデコードが実行される。ある実施例では、ロングデコーダ4 16及びベクタリングデコーダ418は概念的に別々の独立のデコーダである。 それはロングデコーダ416及びベクタリングデコーダ418が、ショートデコ ーダ410、412及び414と別々の独立のデコーダであるのと同様である。 しかしながら、物理的にロングデコーダ416およびベクタリングデコーダ41 8は多くのロジックを共有し、同様のOpクワド出力を生成する。命令長が7バ イトよりも長いために、或いはアドレスがディスブレイスメントに対して処理す るための第3のオペレーションの発生を必要とする大きなディスブレイスメント を有するために、その命令がショートデコーダによりデコードできないようなア ドレスモード制約条件を除いて、ロングデコーダ416によりデコードされる命 令は一般に、命令のショートデコードサブセット内に含まれる。ロングデコーダ 416はまた、ある付加的なmodr/m命令をデコードするが、その命令はシ ョートデコードサブセット内にはなく、ハードウェアデコーディングを保証する ため十分に共有される。ロングデコーダ416によりデコーディングする際に用 いるための命令バイトは、、第1のバイトローテータ430、命令バイトを第1 のショートデコーダSDec0 410に与える同一の命令マルチプレクサによ り命令バッファ408から与えられる。しかしながら、第1のショートデコーダ SDec0 410は7バイトのみを受信するが、ロングデコーダ416はプレ フィックスハイトを除くmod/m命令の最大長に対応する11バイトまでの連 続命令バイトを受信する。従って最初の7バイトだけは第1のショートデコーダ SDec0 410に接続されるが、第1のバイトローテータ430は11バイ ト幅である。ロングデコーダ416は、1度に1つの命令のみをデコードし、命 令バッファ 408内の関連するプリデコード情報は用いられずに、通常無効とされる。 第1のバイトローテータ430の最初のバイトはオペコードバイトとして完全 にデコードされ、modr/m命令の場合には、第2の命令バイト及び恐らく第 3の命令バイトがmodr/m及びsibバイトとして完全にデコードされる。 0Fプレフィックスの存在はオペコードバイトのデコーディングの際に考慮され る。全てのショートデコード命令は0Fではない、すなわち「1バイト」オペコ ードであるから、0Fプレフィックスバイトは全てのショートデコーディングを 禁止する。全てのプレフィックスバイトは「1バイト」オペコード空間内に配置 されるため、0Fプレフィックスのデコーディングは次のデコードサイクルを、 ロングデコード命令或いはベクタリングデコード命令のような、2バイトオペコ ード命令にさせる。modr/m及びsibバイトのデコーディングに基づき発 生するオペレーションに加えて、第1のバイトローテータ430はまた、様々な プログラムカウンタにより使用するための命令長、その命令がロングデコーダを 禁止する、すなわち無効とするためのmodr/m命令であるか否かを、更にそ の命令がオペレーションコード(opcodes)のロングデコードサブセット 内の命令であるか否かを判定する。ロングデコーダ416は常に3つのオペレー ションを発生し、ショートデコーダ410、412及び414のように、OpS eqフィールドを除くエミュレーションコード型Opクワドの形式にてオペレー ションを与える。ロングデコーダ416は比較的簡単なmodr/m命令のみを 使う。ロングデコードOpクワドは、第3のオペレーションがロードオペレーシ ョン(LdOp)或いはストアオペレーション(StOp)であるか、並びに第 4のオペレーションがRegOp或いはNOOPであるかにおいてのみ異なる2 つの形式を有することがで きる。第1のロングデコードOpクワドは以下の形式を有する。 第2のロングデコードOpクワドは以下の形式を有する。 @(<gam>)アドレスモード仕様は命令のmodr/m並びに又sibバ イトにより特定されるものに対応するアドレス計算、例えば@(AX+BX*4 +LD)を表す。<imm32>及び<disp32>値は、デコードされた命 令がそのような値を含むときに、即値及びディスプレイスメント命令バイトを含 む4バイト値である。 ロングデコーダ416は、第1のショートデコーダ410のように先行デコー ドサイクル中にショートデコーダによりデコードされる任意のプレフィックスバ イトの存在を考慮してオペレーションを発生する。有効なアドレスサイズ、デー タサイズ、オペランドセグメントレジスタ値、現在Bビットはロングデコーダ4 16に与えられ、オペレーションを発生するために用いられる。間接サイズ、す なわちセグメントレジスタ規則子はロングデコーダ416により発生する最終的 なオペレーション内に含まれない。 いくつかの条件のみが、別の有効なロングデコードを禁止、すなわち無効とす る。そのような条件の1つが、命令のロングデコードサブセットに含まれない命 令オペレーションコード(opcode)である。第 2の条件はデコードされた命令に対する命令バッファ408バイトの全てが有効 ではないということである。 ベクタリングデコーダ418は、ショートデコーダか或いはロングデコーダ4 18かのどちらかによってデコードされない命令を処理する。ベクタリングデコ ードはロングデコーディングが可能であり、しかも十分な有効バイトが利用可能 であるようなデフォルトケースである。一般にベクタリングデコーダ418によ り処理される命令はショートデコード或いはロングデコードサブセットに含まれ ないばかりでなく、ディスエーブルされるデコーディング、すなわち例外条件の 検出のような他の条件から導かれる。通常のオペレーション中、非ショート命令 および非ロング命令のみがベクタリングされる。しかしながら全ての命令がベク タリングされる場合もある。未定義のオペコードは常にベクタリングされる。プ レフィックスバイトのみが常にデコードされる。プレフィックスバイトはショー トデコーダ410、412及び414により常にデコードされる。 例外条件がデコード中に検出されるとき、ベクタリングデコードは一般に、デ コードされた命令の命令バイトの有効性に関係なくデコードの他の形式をオーバ ーライドすることを強制する。検出された例外条件がベクタリングデコードサイ クルを強制するとき、発生したOpクワドは未定義であり、スケジューラ260 対して与えるためのOpクワド有効ビットは0にされる。Opクワド有効ビット は、オペレーションがスケジューラ260に対してロードされるべきでないとい うことを、スケジューラ260に知らせる。結果的に、例外ベクタリングデコー ドサイクル中、Opクワドはスケジューラ260にロードされない。 いくつかの条件がベクタリングデコードを禁止、すなわち無効とする。そのよ うな条件の1つが命令バッファ408内の全てのバイトが有効で はないということである。 命令がベクタリングされるとき、制御はエミュレーションコードエントリポイ ントに移される。エミュレーションコードエントリポイントは内部エミュレーシ ョンコードROM232或いは外部エミュレーションコードROM232のどち らかにある。エントリポイントアドレスから開始するエミュレーションコードは 、命令をエミュレートするか、或いは適切な例外処理を開始する。 ベクタリングデコードサイクルはマクロ命令デコーダ230デコードサイクル と考えられる。ベクタリングデコードの場合には、マクロ命令デコーダ230は ベクタリングクワドを発生し、エミュレーションコードアドレスをエミュレーシ ョンコードROM232内に発生する。最初のベクタリングデコードサイクルの 後、エミュレーションOpSeqからの復帰(ERET)が起こるまで、命令が エミュレーションコードROM232或いはエミュレーションコードRAM23 6により発生するが、マクロ命令デコーダ230は動作しないままである。エミ ュレーションからの復帰(ERET)の順序付け動作は、マクロ命令デコーダ2 30デコーディングに復帰する。最初のベクタリングデコードサイクルに後続す るデコードサイクル中、マクロ命令デコーダ230は動作しないままであり、E RETが起こった後、デフォルトにより次の「逐次」命令をデコードするために 待ち状態にはいるまで、引き続き次の「逐次」命令をデコードすることを試みる が、デコードサイクルは繰り返し無効とされる。 ベクタリングデコーダ418により使用する、すなわちデコードするための命 令バイトは、第1のショートデコーダSDec0 410及びロングデコーダ4 16に命令バイトを与える命令マルチプレッサである、第1のバイトローテータ 430により、命令バッファー408から与え られる。ベクタリングデコーダ418はプレフィクスバイトを除くmodr/m 命令の最大長に対応する、11バイトまでの連続する命令バイトを受信する。従 って、第1のバイトローテータ430の全11バイト幅は、ロングデコーダ41 6及びベクタリングデコーダ418の両方に分散される。命令バッファー408 内のプリデコード情報は、ベクタリングデコーダ418により用いられる。 ロングデコーダ416の場合には、第1のバイトローテータ430の最初のバ イトは、オペコードバイトとして完全にデコードされ、modr/m命令の場合 には、第2の命令バイト及びおそらく第3の命令バイトがmodr/mおよびs ibバイトとしてそれぞれ完全にデコードされる。ベクタリングデコーダ418 は、先行デコードサイクル中,ショートデコーダによりデコードされる任意のプ レフィクスバイトの存在を考慮してオペレーションを発生する。0Fプレフィク スの存在はオペコードバイトのデコードの際に考慮される。modr/m及びs ibバイトのデコーディングに基づきオペレーションを発生することに加えて、 第1のバイトローテータ430はまた、様々なプログラムカウンタにより使用す るための命令長、その命令がロングデコーダを禁止、すなわち無効とするための modr/m命令であるか否か、或いはその命令がオペレーションコード(オペ コード)のロングデコードサブセット内の命令であるか否かを判定する。そうで ない場合には、ベクタリングデコードが開始される。有効なアドレスサイズ、デ ータサイズ及びオペラアンドセグメントレジスタ値は、ベクタリングデコーダ4 18に与えられ、オペレーションを発生するために用いられる。間接サイズ、す なわちセグメントレジスタ規則子はベクタリングデコーダ418により発生する 最終的なオペレーション内に含まれない。 ベクタリングデコードサイクル中、ベクタリングデコーダ418はベ クタリングOpクワドを発生し、エミュレーションコードエントリーポイントす なわちベクトルアドレスを発生し、エミュレーション環境を初期化する。ベクタ リングOpクワドが様々な情報を渡すために特定され、エミュレーション環境ス クラッチレジスタを初期化する。 エミュレーションコードエントリポイント、すなわちベクトルアドレスの値は 、0Fプレフィクス、REPプレフィクス或いはそれと同様の存在のような他の 情報を加えた、第1及び第2の命令バイト、例えばオペコード並びにmodr/ mバイトのデコードに基づく。例外条件により発生するベクタリングの場合には 、エントリポイント、すなわちベクトルアドレスは簡単なエンコードされた例外 規則子に基づく。 エミュレーション環境は環境依存性を解決するために格納される。すべてのシ ョートデコーダ410、412、414及びロングデコーダ416が、オペレー ションが間接サイズすなわちレジスタ規則子含まないように発生するとき、有効 なアドレス及びデータサイズへの依存性のような、環境依存性を直接解決する。 しかしながらエミュレーションコードオペレーションは、エミュレートされてい る命令の特別な事例の場合、そのように有効なアドレス及びデータサイズ値を参 照する。エミュレーション環境はベクタリングされる特別な命令に関連するこの 付加的な情報を格納するために用いられる。この情報は、汎用レジスタ番号、有 効なアドレス及びデータサイズ、有効なオペランドセグメントレジスタ番号、プ レフィクスバイトカウント及びLOCKプレフィクスの存在の記録を含む。エミ ュレーション環境はまた、modr/m regフィールドをロードし、mod r/m regmフィールドはregおよびregmレジスタ内にロードされる 。エミュレーション環境は、有効なベクタリングデコードサイクルの最後で初期 化され、ERETコードが発生するまで、エミュレーションコードによる命令の エミュレーションの 実質的な期間中、初期状態のままである。 ベクタリングデコーダ418は4つの形式の1つにてOpクワドの4つのオペ レーションを発生する。すべての4つの形式は3つのLIMMオペレーションを 含む。4つの形式はLIMMオペレーションの即値において及び第3のオペレー シヨンがLEAオペレーション或いはNOOPオペレーションであるか否かにお いてのみ異なる。 第1のベクタリングデコードOpクワドは以下の形式を有する。 第2のベクタリングデコードOpクワドは以下の形式を有する。 第3のベクタリングデコードOpクワドは以下の形式を有する。 第4のベクタリングデコードOpクワドは以下の形式を有する。 ベクタリングOpクワドの最初の2つの形式はほとんどのデコーダに対して適 用される。第1の形式は、LEAオペレーションが計算するために用いられ、t reg内に一般のアドレスモード有効オペランドアドレスをロードするメモリ参 照modr/m命令に対して用いられる。第2の形式は非modr/m及びレジ スタ参照modr/m命令に対して用いられる。第2の形式を有する命令の場合 、オペコードバイトに後続する命令バイトを含む限りにおいて<imm32>及 び<disp32>値は有効なままであるが、アドレスは計算される必要がない 。ベクタリングOpクワドの第3の形式は、いくつかの隣接する非modr/m 命令に加えた、すべてのストリング命令に対して用いられる。ベクタリングOp クワドの第4の形式は、ニアRET命令に対する特殊なベクタリング及びエミュ レーション要件を支援する。 マクロ命令デコーダ230は4つのプログラムカウンタを有し、3つのデコー ドプログラムカウンタ420、422及び424、更に1つのフェッチプログラ ムカウンタ426を含む。第1のデコードプログラムカウンタは、命令PC42 0と呼ばれ、第1のバイトの論理アドレスであり、デコードされている現在の命 令或いは、現在デコードしている命令がないなら、デコードされるべき次の命令 のいづれかの任意のプレフィクスバイトを含む。デコードペレーションが複数命 令デコードである場合には、命令PC420はデコードされるべき複数の命令の 第1の命令を指す。命令PC420は命令の構造的なアドレスに対応し、例外の 処理に対して命令障害プログラムカウンタを発生させるために用いられる。命令 PC420は対応するOpクワドを用いてスケジューダーに渡 され、スケジューラ260のオペレーションコミットユニット(OCU)(図示 せず)により用いられ、例外処理中に退避されるべき命令障害プログラムカウン タを生成する。Opクワドがマクロ命令デコーダ230により発生するときは、 現在命令PC420値はOpクワドにタグ付けされ、Opクワドと共にスケジュ ーラ260Opクワドエントリにロードされる。第2のデコードプログラムカウ ンタは、論理デコードPC422と呼ばれ、デコードされるべき次の命令バイト の論理アドレスであり、オペコードバイト或いはプレフィクスバイトのどちらか をアドレス指定する。第3のプログラムカウンタは、リニアデコードPC424 と呼ばれ、デコードされるべき次の命令バイトのリニアアドレスであり、オペコ ードバイト或いはプレフィクスバイトのいづれかをアドレス指定する。論理デコ ードPC422及びリニアデコードPC424は同一の命令バイトを指す。リニ アデコードPC424は第1のバイトローテータ430にて現在の命令バイトの アドレスを指定する。 マクロ命令デコーダ230内の種々のデコーダは、プレフィクスが1バイト命 令として通常に処理されるように、プレフィクスバイトか或いは任意のプレフィ クスバイトを引いた全命令のどちらかをデコードする、すなわち消費することに 基づいて機能する。それ故命令とプレフィクスバイトとの間のアドレス境界は、 命令境界よりも重要である。従って各デコードサイクルの開始時、デコードされ るべき次の命令バイトは真の命令の開始である必要は無い。 デコードサイクルの開始時には、論理デコードPC422及びリニアデコード PC424は、デコードされるべき次の命令の論理及びリニアアドレス、命令あ るいはプレフィクスバイトのいずれかを含む。リニアデコードPC424は、命 令バッファ408にアクセスするために、デコーディング処理中に用いられる1 次プログラムカウンタ値である。リ ニアデコードPC424は、1サイクルのデコードに対する開始点を表し、詳細 には命令バッファ408から、第1のショートデコーダ410への、並びにロン グデコーダ416及びベクタリングデコーダ418への、バイトを供給するバイ トローテータを制御する。リニアデコードPC424はまた、任意の更なるショ ートデコード命令或いはプレフィクスバイトの命令アドレスを確定し、従って第 2のショートデコーダ412及び第3のショートデコーダ414に供給するバイ トローテータに対して制御信号を発生するための基準点でもある。 リニアデコードPC424はまた2次的に動作し、プレフィクスバイトがデコ ードされる前に、新しい命令の第1のデコードサイクル中にブレークポイント照 会のための検査を行い、さらに有効な命令デコードサイクル中にマクロ命令デコ ーダ230によるコードセグメントオーバーランのための検査を行う。 論理デコードPC422はCALL命令を含む、プログラムカウンタ関連転送 コントロール命令に対して用いられる。論理デコードPC422は分岐ユニット 234に与えられ、分岐ターゲットアドレスを計算するためにPC関連転送コン トロール命令のディスプレイスメント値と合計される。論理デコードPC422 はまた、命令のエミュレーションコードエミュレーションを支援する。次の逐次 論理デコードプログラムカウンタ(PC)422は一般的な使用のためのベクタ リングOpクワドによる一時的なレジスタ内の記憶機構からのエミュレーション コードにて使用可能である。例えば、次の逐次論理デコードPC422は、CA LL命令がスタック上にプッシュする復帰アドレスを与えるために用いられる。 次の論理デコードPC428は、次の逐次論理デコードプログラムカウンタ値 にセットされ、論理デコードPC422のユーティリティを超 える機能的なユーティリティを有する。次の論理デコードPC428はマクロ命 令デコーダ230によりデコードされるCALL命令に対する復帰アドレスを直 接供給する。次の論理デコードPC428はまた、ベクタリングOpクワド内の オペレーションの1つを介して、ベクタリングデコードサイクル中にエミュレー ションデコード論理に渡される。 デコードサイクル中、リニアデコードPC424はデコードされるべき次の命 令バイトを指す。リニアデコードPC424の4つの最下位ビットは、命令バッ ファ408内の第1の命令バイトを指しており、それにより命令キャッシュ21 4内の第1及び後続する命令バイトを配列するために必要とされるバイトローテ ーション量を直接指示する。第1のバイトローテータ430は命令マルチプレク サ、詳細には16:1バイトプレクサであり、リニアデコードPC424量だけ オフセットされる命令バッファ408内のバイトにアクセスする。第1のバイト ローテータ430は、第1のショートデコーダSDec0 410に対して7バ イト幅であり、ロングデコーダ416及びベクタリングデコーダ418の組み合 わせに対しては11バイト幅である。第1のショートデコーダSDec0 41 0、ロングデコーダ416及びベクタリングデコーダ418内で共有される論理 は、第1の命令に対する第1の命令長値ILen0を発生する。第2のバイトロ ーテータ432及び第3のバイトローテータ434は7バイト幅命令マルチプレ クサであり、詳細には16:1バイトマルチプレクサである。第2のバイトロー テータ432は、リニアデコードPC424量及び第1の命令長ILen0の合 計だけオフセットされる、命令バッファ408内のバイトにアクセスする。第2 のショートデコーダSDec1 412における論理は、第2の命令に対する第 2の命令長値ILen1を発生する。第3のバイトローテータ434はリニアデ コードPC424量、並びに第1の命令長ILen0 及び第2の命令長ILen1の合計だけオフセットされる、命令バッファ408 内のバイトにアクセスする。バイトローテータ430、432及び434は命令 バイトを多重化するが、プリデコードビットは含まない。命令バイトローテータ 430、432及び434はプリデコード情報を用いて制御され、その中の第1 オペコードバイト、すなわち第1の命令の最初のバイトに関連するプリデコード ビットは第2のローテータ432を直接制御する。第2の命令の最初のバイトは 第3のローテータ434を直接制御する。各プリデコードコードは命令長を暗に 示すが、次のローテータに適用されるものはポインターである。ポインターは次 の命令に対するプログラムカウンタを達成するための長さを加えた、現在の命令 におけるプログラムカウンタの4つの最下位ビットを得ることにより導かれる。 マクロ命令デコーダ230内の全てのプログラムカウンタ420、422、4 24及び428は命令及び例外処理において初期化される。この初期化は複数の 信号源によってアクチベート(activate)される。第1に、PC関連制御転送命 令がデコードされ且つ実行されると予測されると、ターゲット分岐アドレスが分 岐ユニット234によって供給される。第2に、近くのRET命令がデコードさ れると、予測されたリターンターゲットアドレスがリターンアドレススタック( 図示せず)によって供給される。第3に、誤って予測された分岐条件(BRCO ND)オペレーションのためにマクロ命令デコーダ230がスケジューラ260 によってプロセッサ120内の残りの回路と共にリスタートされるとき、スケジ ューラ260は別の正しい分岐アドレスを生成する。第4として、レジスタユニ ット244(プライマリRegOP実行ユニット)は、WRIPRegOpが実行 されるとき新たなデコードアドレスを供給する。WRIPRegOpの実行によっ て、エミュレーションコードが明示的に命令デコ ードをリダイレクト(redirect)することが可能となる。4つの全ての場合にお いて、3つのデコードプログラムカウンタ420、422及び424を同時に再 初期化するべく論理アドレスが供給され且つ使用される。リニアデコードPC4 24に対しては、供給された論理アドレスをその時のコードセグメントベースア ドレスに加えることによってリニアアドレス値が供給され、リニアデコードPC 424にロードするための対応するリニアアドレスが生成される。論理アドレス は現命令(currentinstruction)PC420及び論理デコードPC422にロー ドされる。各デコードサイクルに対し次の再初期化まで、マクロ命令デコーダ2 30は現命令PC420、論理デコードPC422及びリニアデコードPC42 4を順次的に且つ同期して更新し、マクロ命令デコーダ230の個々のデコーダ によって命令バイトがデコードされ消費(consume)される。 命令長さIlen0及びIlen1は順次的に生成される。並列オペレーショ ンをエミュレートすることによってこの順次的処理を速めるため、命令長さルッ クアヘッド論理(instruction length lookahead logic)436は、命令バッフ ァ408内の各命令バイトの長さを示す4つのプリデコードビットを用いて命令 長さIlen0及びIlen1を速やかに特定する。命令バッファ408内の第 1の命令バイトのopcodeバイトに関連づけられたプリデコードビット(第 1命令バイトは第1ショートデコーダSDec0 410にマルチプレックスさ れる)は、命令バッファ408内の第2の命令バイトのopcodeバイトのバ イトインデックス(byte index)を直接指定する。命令バッファ408内の第2 の命令バイトのopcodeバイトに関連づけられたプリデコードビット(第2 命令バイトは第2ショートデコーダSDec1 412にマルチプレックスされ る)は、命令バッファ408内の第3の命令バイ トのopcodeバイトのバイトインデックスを直接指定する。命令長さルック アヘッド論理436には、命令バッファ408内の第2及び第3命令バイトのo pcodeバイトのバイトインデックスを生成するため2つの4ビット幅16対 1マルチプレクサが含まれる。 また、命令ルックアヘッド論理436はプリデコードビットのセットの有効性 を判定するための論理を含む。プリデコードビットは、関連する命令バイトが有 効なショートデコード命令の開始であるとき有効である。詳述すると、命令ルッ クアヘッド論理436は、命令バッファ408内の所与のバイトに対する複数の プリデコードビットが同じバイトを指す(そのバイトから始まる命令に対し0長 さを意味する)か否かを判定する。そうである場合、そのバイトはショートデコ ード命令の開始ではなく、従ってそれ以上ショートデコーディングはできない。 そうでない場合、ショートデコードオペレーションは可能であり、プリデコード ビットは次の命令の開始を指す。 主メモリ130と命令キャッシュ214との間に接続されたプリデコーダ27 0は8つの論理ユニットを有しており、それらは各々関連する命令バイト及びあ る場合にはそれに続く1若しくは2つの命令バイトの検査(examine)を行う。 第1命令バイトはopcodeバイトとしてデコードされ、第2及び第3命令バ イトは、そのopcodeバイトがmodr/m opcodeである場合、m odr/m及びsibバイトとしてデコードされる。これら3つのバイトに基づ き、命令長さが決定され、その命令が“short”命令として分類されるかど うかが判定される。命令の長さは、その論理ユニット16の論理ユニットに対す る位置に対応する4ビットの固定値に加えられ、命令長さルックアヘッド論理4 36によって使用されるバイトインデックスを決定する。このバイトインデック スは、命令がショート命令の基準を満たす場合、プリ デコードビットの値としてセットされる。ショート命令の基準に合わない命令バ イトに対しては、プリデコードビットはその論理ユニットの16の論理ユニット に対する位置に対応する4ビットの固定値にセットされ、0の命令長さを示すべ くインクレメントされない。命令長さが0であるということは、その命令がショ ート命令ではないということを意味する。ショートデコード命令は7バイトより 長くはならず、また最上位ビットは3つのプリデコードビット及び関連する固定 されたバイトアドレスから容易に再構成されるため、プリデコードビットは4ビ ットから3ビットへと切りつめられる。プリデコードビットの3ビットから4ビ ットへの拡張は、命令キャッシュ214の16の命令バイトに対応する16の論 理ユニットを有するプリデコード拡張論理(predecodeexpansion logic)440 によって実行される。プリデコード拡張論理440の16の論理ユニットは、命 令バイトが命令キャッシュ214からフェッチされ命令バッファ408へと送ら れるとき、独立して且つ同時にプリデコードビットに対して作用する。 プリデコードされて命令キャッシュ214へとロードされる32の命令バイト のうち最後の2つは、プリデコーダ270によって検査される1または2バイト のみを有する。modr/m opcodeに対しては、完全な命令長さは決定 できない。従って、プリデコーダ270内のバイト14及び15に対する論理ユ ニットは、バイト0乃至13に対する論理ユニットから変更(modify)される。 命令バイト15に対して、プリデコーダ270の論理ユニット15は全てのmo dr/m opcode及び非ショートデコード命令に対し0の命令長さを強制 する。命令バイト14に対しては、modr/m opcodeに対して0の実 効命令長さが強制されるが、アドレスモードでは確実に命令長さを決定するため sibバイトの検査が要求される。これは非ショート命令に対 しても同様である。 各デコードサイクル中、マクロ命令デコーダ230はいくつかの例外条件に対 する検査を行う。例外条件は命令ブレイクポイント、未完了のマスク不可能割り 込み(NMI)、未完了の割り込み(INTR)、コードセグメントオーバーラ ン、命令フェッチページフォルト、16バイトより大きい命令長、LOCKプレ フィクスを有するLOOK不可能命令、浮動小数点利用使用不可条件、未完了の 浮動小数点誤差条件を含む。ある条件は別の有効なデコードサイクル中のみ評価 され、他の条件はそのサイクル中あらゆるデコーディング動作とは関係なく評価 される。起動例外条件が検出されるとき、ショートデコードサイクル、ロングデ コードサイクル及びベクタリングデコードサイクルを含むすべての命令デコード サイクルは禁止され、「例外」ベクタリングデコードは、例外検出に従ってその デコードサイクルにて強制される。例外条件の認識は、例えば、ショート及びロ ング或いはベクタリングデコーダOpクワドではなく、エミュレーションコード Opクワドがスケジューラー260により許容されるとき、マクロ命令デコーダ 230の休止によってのみ無効にされる、禁止される。実質的に、あらゆる例外 条件の認識及び処理は、ERET Op seqがマクロ命令デコーダ230に 対する制御を復帰するまで遅延される。 例外ベクタリングを強制するデコードサイクル中に、専用エミュレーションコ ードベクトルアドレスが通常の命令ベクトルアドレスに代わって生成される。ロ ングデコーダ416及びベクタリングデコーダ418によって生成されるベクタ リングOpクワドは未定義である。例外ベクトルアドレスは認識され、処理され る特定の例外条件を特定するための下位ビットを除き、固定値である。複数の例 外条件が同時に検出されるとき、例外は前オーダにてオーダされ、最優先例外が 認識される。 命令ブレイクポイント例外、最優先例外条件はリニアデコードPC424がプ レフィクスを含む命令の最初のバイトを指すとき認識され、リニアデコードPC 424は命令ブレイクポイントとしてイネーブルされるブレイクポイントアドレ スに一致し、いずれの命令ブレイクポイントマスクフラグもクリアされない。1 つのマスクフラグ(RF)は特に、命令ブレイクポイントの認識をマスクする。 別のマスクフラグ(DNTF)は、一時的にNMI要求及び命令ブレイクポイン トをマスクする。 未完了のNMI例外、下から2番目の優先例外はNMI要求が未完了であり、 かついずれのNMIマスクフラグもクリアされないとき認識される。1つのマス ク(NF)は特にマスク不可能割り込みをマスクする。別のマスクフラグ(BN TF)は一時的にNMI要求及び命令ブレイクポイントをマスクする。 未完了のIMTR例外、未完了のNMI例外に後続する優先順位の次の例外は 、INTR要求が未完了であるとき認識され、割り込みフラグ(IF)及び一時 的割り込みフラグ(ITF)がクリアされる。 コードセグメントオーバラン例外、未完了のINTR例外に後続する優先順位 における次の例外は、マクロ命令デコーダ230が現在コードセグメント制限を 越える命令の組を有効にデコードすることを試みるとき認識される。 命令フェッチページフォルト例外は、コードセグメントオーバーラン例外に対 してすぐ下の優先順位を有しており、別の命令或いはプレフィクスバイトのデコ ーディングが可能になる前に、マクロ命令デコーダ230が命令バッファ408 からの付加的な有効命令バイト及び、ページフォルトが現在命令フェッチにて発 生することを示す命令翻訳ルックアサイドバッファ(ITB)信号を必要とする とき認識される。命令フェッチコントロール回路218のフォルティング条件は 、ページフォルト がマクロ命令デコーダ230により認識され、後続する例外処理プロセッシング が停止し、かつ新しいアドレスに対してフェッチする命令を再度割り当てるまで 、ITBがページフォルト連続的にを報告するように、繰り返し試行される。I TBからのフォルト指示は、命令キャッシュ214からロードされる命令と同じ タイミングを有し、それ故後続デコードサイクルにおいてレジスタされる。IT Bはフェッチングが新しい命令アドレスに再度割り当てられるまで、マクロ命令 デコーダ230がフォルト指示を保持するように、連続する命令フェッチ試行に おいて、フォルトを信号化する必要はない。ページフォルトを認識すると、付加 的なフォルト情報が専用レジスタフィールドにロードされる。 16バイトより大きい命令長例外は、命令フェッチページフォルト例外のすぐ 下の優先順位を有し、マクロ命令デコーダ230が15バイトより大きいプレフ ィクスバイトを含む全長を有する命令を有効にデコードすることを試みるとき認 識される。16バイトより大きい命令長例外は、実際の命令がデコードされる前 にプレフィクスバイト数をカウントし、デコードされるとき命令の残りの長さを 計算することにより検出される。プレフィクスバイト及び残りの命令長の合計が 16バイトより大きい場合には、エラーが認識される。 LOCKプレフィクスを有するロック不可能命令例外は、マクロ命令デコーダ 230がLOCKプレフィクスを有する命令を有効にデコードすることを試み、 その命令がロック可能命令サブセットに含まれないとき認識される。ロック不可 能LOCK命令例外はオペコードバイトのデコード及び0Fプレフィクスの存在 に基づき検出される。ロック不可能LOOK命令例外は、LOCKプレフィクス がショートデコード及びロングデコードを検出するため、ベクタリングデコード サイクル中のみ生じる。 浮動小数点使用不可例外は、最も低い優先順位に次いでおり、マクロ命令デコ ーダ230がWAIT命令或いはプロセッサコントロールESCではないESC 命令を有効にデコードすることを試み、浮動小数点エラーの報告が未完了である とき認識される。マクロ命令デコーダ230は、0Fプレフィクスの存在に加え て、オペコード及びmodr/mバイトのデコーディングに基づいて、不動小数 点使用不可例外を検出する。 各デコードサイクル中、マクロ命令デコーダ230はいくつかの形式の1つ或 いはそれ以上の命令の命令デコードを実行することを試みる。一般にマクロ命令 デコーダ230は、1つ或いは複数のショートデコードのどちらか、1つのロン グデコード或いは命令ベクタリングデコードを有効に実行する。場合によりデコ ードは、起動例外条件の検出、命令バッファ408或いはマクロ命令デコーダ2 30の十分な有効バイト数の欠如を含む3つのタイプの条件の場合に有効に行わ れないか、或いは外部的な理由により進捗しない。 起動例外条件が検出されるとき、すべての形式の命令デコードは禁止され、例 外条件の検出に続く第2のデコードサイクル中、例外ベクタリングデコードサイ クルが強制され、無効なOpクワドを生成する。 十分に有効バイト数が命令バッファ408において使用可能でないとき、有効 なバイトが命令バッファ408内に保持されないか或いは、少なくとも第1のオ ペコードが有効であり、かつデコーダの1つが命令をデコードするが、デコード された命令長が、現在すべてが有効ではない命令バッファ408において、さら に有効なバイトを必要とするかのどちらかである。 外部的理由がマクロ命令デコーダ230の進捗を妨げるとき、スケジューラ2 60が一杯で、デコードサイクル中の更なるOpクワドを受け入れることができ ないか、或いはマクロ命令デコーダ230がデコーデ ィングへの復帰を待つことを休止するように、現在エミュレーションコードOp クワドを受け入れているかのどちらかである。 後者2つの場合には、マクロ命令デコーダ230のデコード状態は進捗を禁止 され、マクロ命令デコーダ230は次のデコードサイクルにおいて単純に同一の デコードを繰り返す。マクロ命令デコーダ230禁止の制御は、各デコーダに対 応する信号を有するデコード有効信号の組の発生に基づく。各デコーダに対して 、デコーダが有効にデコードを実施することができるかどうか否かを判定するた めのデコード有効信号に組み合わされる複数の理由がある。すべてのデコーダに 対するデコーダ有効信号はそのとき監視され、合わせて、実行するデコードサイ クルのタイプを確定する。デコードサイクルのタイプは、デコードを実行する特 定のデコーダを示す。外部的理由がまた評価され、選択されたデコードサイクル タイプが有効であるか否かを判定する。デコードサイクルの選択したタイプを示 す信号は、代わりとなる次のデコードPC値のように、異なるデコーダにより発 生するマクロ命令デコーダ230に対する内部の様々な信号間で選択し、またシ ョートデコーダ、ロングデコーダ416及びベクタリングデコーダ418により 発生するOpクワドからのスケジューラ260に適用される入力Opクワドを選 択するOpクワドマルチプレクサ444を制御するためにも適用される。 ベクタリングデコードサイクルの場合には、マクロ命令デコーダ230はまた 、内部エミュレーションコードROM232或いは外部エミュレーションコード RAM236のいずれかにおけるエントリーポイントに対するベクタリングを開 始する信号を発生する。マクロ命令デコーダ230はそのとき、スケジューラ2 60内にフェッチし、ロードするエミュレーションコードの起動持続時間を監視 する。 命令デコーダ220は、オペレーションが投機的に実行されるように 分岐予測を実行するための分岐ユニット(図示せず)を含んでいる。パイプライ ンドレイニング予測誤り(pipeline-draining misprediction)が回避されるよ うに分岐が速やかに且つ正確に処理されると、out-of-orderプロセッサのパフォ ーマンスが向上する。プロセッサ120は2レベル分岐予測アルゴリズムを採用 している。この分岐予測アルゴリズムは、“CONFIGURABLE BRA NCH PREDICTION FOR APROCESSOR PERFORMI NG SPECULATIVE”というタイトルの米国特許第5,454,11 7号(Puziol et al,1995年9月26日発行)、“TWO-LEVEL B RANCH PREDICTION CACHE”というタイトルの米国特許第5 ,327,547号(Stiles et al,1994年7月5日発行)、“TWO-L EVEL BRANCH PREDICTION CACHE”というタイトルの 米国特許第5,163,140号(Stiles et al,1992年11月10日発 行)、及び“INTEGRATED SINGLE STRUCTURE BRA NCHPREDICTION CACHE”というタイトルの米国特許第5,0 93,778号(Favor et.al,1993年3月3日発行)に詳しく開示されて いる。プロセッサ120は更に、8,192エントリの分岐履歴テーブル(BH T)(図示せず)を用いている。分岐履歴テーブルは、4つのプログラムカウン タビットをグローバル分岐履歴の9つのビットと組み合わせることによってイン デックス付けされる。各BHTエントリは2つの履歴ビットを含む。BHTはデ ュアルポートRAMであり、読み取り/参照アクセスと、書き込み/更新アクセ スの両方が可能である。BHTの参照及び更新は、1つのクロックサイクルの反 対側の半位相(halfphase)で行われるため衝突することはない。BHTの多数 のエントリが適切な集積回路エリア内に供給されるが、これはBHTは条件付き 分岐の方向を予測するのみでありエントリはタグ付けされず予測された分岐ター ゲットアドレスは16エントリのリターンアドレススタック(図 示せず)を除いて記憶されないからである。従って、BHTへのアクセスはキャ ッシュ状構造への直接マッピングに類似している。即ち、BHTはBHT内のエ ントリへのアクセスのためインデックス付けされ、アクセスされるエントリは分 岐命令であるとされる。リターン以外の分岐に対しては、デコードサイクルにお いてターゲットアドレスが計算される。ターゲットアドレスは並列加算器(図示 せず)を複数用いることによって十分高速に計算され、分岐命令のロケーション が分かる前に全ての可能なターゲットアドレスが計算される。デコードサイクル の終了までに、(もしあるのであれば)どのターゲットアドレス結果が有効かが 決定される。 ある分岐が選択されると予測される場合、ターゲットアドレスはすぐに分かり 、ターゲット命令は続くサイクルにおいてフェッチされ、1サイクルの分岐選択 ペナルティ(one-cycle taken-branch penalty)が生じる。分岐選択ペナルティ は分岐ターゲットバッファ(BTB)456を用いることによって回避すること ができる。BTB456は16のエントリを含み、各エントリは16の命令バイ トと関連するプリデコードビットとを有する。BTB456は分岐アドレスによ ってインデックス付けされ、デコードサイクルにおいてアクセスされる。BHT (図示せず)が選択される分岐を予測する際、BTB456のキャッシュヒット に対してBTB456から命令が命令デコーダ220に送られ、分岐選択ペナル ティが回避される。 各デコードサイクルにおいて、BTB456をアドレス指定するのに直接マッ プ形式でリニアデコードPC424が使用される。もし、PC関連条件付き制御 転送命令がショートデコーダによってデコードされ且つこの制御転送が実行され ると予測された場合に、BTBエントリに対してヒットが発生すると(デコード サイクルの終了前に認識される)、 2つの動作が発生する。第1に、命令キャッシュ214に向けられた初期ターゲ ットリニアフェッチアドレス(initial target linear fetch address)が、実 ターゲットアドレス(actual target address)から、BTBエントリ内に格納 された有効なターゲットバイトの直後の命令バイトを指す値に変更される。この 修飾されたフェッチアドレスはBTBエントリ内に格納され、BTBエントリか ら直接アクセスされる。第2に、エントリからの命令バイト及びプリデコード情 報がデコードサイクルの終了時に命令バッファ408にロードされる。PC関連 条件付き制御転送命令がショートデコーダによってデコードされこの制御転送が 実行されると予測される場合にミスが発生すると、新たなBTBエントリがター ゲット命令フェッチの結果と共に生成される。詳述すると、ターゲット命令バイ トの命令キャッシュ214から命令バッファ408への最初の有効なロードと同 時に、選択されたBTBエントリに同じ情報がロードされ、前の内容を書き換え る。ミスが発生しない場合、ターゲットフェッチ及び命令バッファ408のロー ドは通常通りに進行する。 各エントリはタグ部とデータ部を含む。データ部は1つのメモリバイトと3つ の関連するプリデコードビットを含む16の拡張された命令バイトを保持する。 メモリバイトの対応(correspondence)は、対応する命令バッファ408のロケ ーションとメモリ整合(memory-aligned)されている。BTBエントリのタグ部 は、キャッシュターゲット、下位ビット[4:1]、エントリ有効ビット(entr y valid bit)及び30ビット被修飾初期ターゲットリニア命令フエッチアドレ ス(30-bitmodified initial target linear instruction fetch address)を有 する制御転送命令に関連づけられた32ビットリニアデコードPC424を含む 30ビットタグを保持する。明示的な命令ワード有効ビット(instruction word valid bits)は使用されない。なぜなら、真のター ゲットアドレスと修飾されたターゲットアドレスとの間の距離がBTB456内 の有効な命令ワードの数及び指示(designation)を直接的に意味するからであ る。 BTB456の目的は、ループ及び入れ子状になったループが実行されている あいだ小型乃至中型サイズのループ内の分岐ターゲットを捕捉する(capture) ことである。この目的のため、不整合の可能性が少しでも検出されると、全BT Bが無効にされフラッシュされる。BTB456は、命令キャッシュ214のミ ス(miss)、命令キャッシュ214の任意の形態での無効化、ITBミス、また は任意の形態でのITB無効化に応じて無効化及び消去される。時間的または空 間的局所性(locality)の外の分岐ターゲットは効果的に捕えられない。通常、 BTB456は複雑性を軽減するべく少数のエントリしか含まないが、理想的な 分岐ターゲットの捕捉によって生じ得る機能的な利点の大部分が達成されている 。 PC関連分岐ターゲットアドレス計算論理(図示せず)はターゲットアドレス の計算を実行する。分岐ターゲットアドレス計算論理は、ショートデコーダSD ec0 410、SDec1 414またはSDec2 416によってデコー ドされるPC関連転送制御命令に対してのみ用いられる。特に、分岐ターゲット アドレス計算論理は、Jcc disp8、LOOP disp8、JMP d isp8、JMP disp16/32、及びCALL disp16/32を 含むショートデコード分岐命令に対して用いられる。各ショートデコーダSDe c0 410、SDec1 412及びSDec2 414は、論理及びリニア 分岐ターゲットアドレス計算論理(図示せず)を含む。ショートデコーダ410 、412及び414が、オペレーションのいずれかがPC関連ショートデコード 分岐命令でないかどうか判定する際、これら3セット の論理及びリニア分岐ターゲットアドレス計算論理は並列に機能する。論理及び リニア分岐ターゲットアドレス計算論理は、分岐の論理プログラムカウンタ、分 岐命令の長さ、及び分岐命令の符号拡張された変位(sign-extended displaceme nt)を加算し、計算サイズに応じて加算値の上位側16ビットを条件付きマスク し、論理ターゲットアドレスを生成する。論理及びリニア分岐ターゲットアドレ ス計算論理は論理ターゲットアドレスを現コードセグメントベースアドレス(cu rrent codesegment base address)に加算し、リニアターゲットアドレスを生成 する。その分岐が選択される場合、無条件または選択されると予測されていると きは、デコードされたショートデコード分岐命令に対応する計算されたアドレス が論理デコードPC422及びリニアデコードPC424を再初期化するのに使 用される。分岐が選択されないと予測されている場合は、論理アドレスはスケジ ューラ260のOpクワドエントリ内の関連するショートデコード分岐命令(B RCOND Op)と共に退避される。論理ターゲットアドレスは現コードセグ メント制限値と比較され、制限値を違反しないかどうかチェックされる。 論理及びリニア分岐ターゲットアドレス計算論理によって制限値違反が検出さ れると、その分岐が選択されると予測されているか或いは選択されないと予測さ れているかによらず、制限値違反を示す特別なタグがその分岐命令から生成され るオペレーションを保持しているスケジューラ260のOpクワドエントリにお いてセットされる。続いて、スケジューラ260のオペレーションコミットユニ ット(OCU)が、このOpクワドにコミット(commit)を試みると、Opクワ ドはフォールトを含むものとして処理されアボート(abort)される。マクロ命 令デコーダ230は、エミュレーションコードROM232内のフォールトハン ドラ(fault handler)へのベクタリングを開始させる信号を生成する。 フォールトハンドラはショート及びロングデコーダによるデコーディングを一時 的に禁止し、フォールトされたOpクワドに関連する違反命令のフォールトPC アドレス(fault PC address)へとジャンプする。最終的に、分岐命令は再デ コードされ命令エミュレーションコードにベクタリングされる。分岐が実際に選 択される場合、エミュレーションコードは制限値違反を認識し、その違反を適切 に処理する。 プロセッサ120は一般にフォールト条件に対してエミュレーションコードR OM232内の特定のフォールトハンドラにベクタリングすることによって応答 する。フォールトハンドラは、フォールトの源を特定し、そのフォールトに対す る適切な応答を決定し、そして適切な応答を開始するステップを決定するルーチ ンを実行するRISC命令セット内において定義されたオペレーションを含む。 適切な場合における別の方法として、プロセッサ120は特別なフォールト応答 を開始する特別な“ロードオルタネートフォールトハンドラ(load alternate f ault handler)”オペレーションも含む。デコード時に検出される様々な例外( exceptions)は、オルタネートフォールトハンドラを起動してフォールトハンド ラアドレスを指定するベクタリングデコーダ418のオペレーションを通じ、可 能な例外条件の各々に対し1エントリポイントが対応するようにして、エントリ ポイントの固定されたセットへと実行を移す。オルタネートフォールトハンドラ は、特殊条件の修正された完全な取り扱いを可能とする利点がある。ロードオル タネートフォールトハンドラ命令は、全ての命令と同様に命令デコーダ220の パイプラインを通過するが、その後の全ての例外条件によって異なるベクトル命 令ROMエントリポイントが呼び出されるようにする。オルタネートフォールト ハンドラは現マクロ命令の実行が完了すると終了する。 オルタネートフォールトハンドラの利点の1例は、繰返し動作ストリ ング命令(repeated move string instruction:REP MOV)に関連して見 ることができる。多数の相互作用を高速に実行するためには、オペレーションの シーケンスの並べ替え(reorder)をする能力が重要である。オペレーションシ ーケンスは、通常、第1のポインタ指定されたアドレスへのロード、第2のポイ ンタ指定されたアドレスへの格納、そしてロード及び格納が両方とも問題なく行 われた場合、第1及び第2ポインタのインクレメント及びカウンタのデクレメン トを含む。より効率を上げるため、ポインタのインクレメント及びカウンタのデ クレメントは格納オペレーションが完了する前になされる。しかしながら、オペ レーションシーケンスにおいてフォールトまたは例外が発生すると、シーケンス はアボートされカウンタ及びポインタは誤った状態となる。例えば、構造的なx 86のSI,DI及びCXレジスタは正しい値を持たない。オルタネートフォー ルトハンドラは、シーケンスに先だって指定されて使用され、繰返し動作フォー ルトの後にクリーンアップ(cleanup)を実行する。シーケンスは、ポインタ及 びカウンタの追跡のための中間命令のオーバーヘッドなしに進行する。エラーが 発生しない場合、オルタネートフォールトハンドラは影響を与えることなく終了 する。しかしながら、エラーが発生すると、オルタネートフォールトハンドラが 呼び出される。オルタネートフォールトハンドラは特定のオペレーションシーケ ンスに対して規定されており、それに応じてクリーンアップを実行し、デフォル トのフォールトハンドラにジャンプする。エラーの発生(このときエラーはアド レス指定される)までは、オルタネートフォールトハンドラによって阻害される ことなく、効率的なコードによって実行速度の改善がなされる。 分岐履歴テーブル(BHT)は、過去に遭遇した条件付き制御転送命令につい ての最新の履歴情報(特に分岐方向情報)を格納する。ある分 岐が繰り返されると、その分岐に関連する格納された情報が解析され、その分岐 の現方向(current direction)が予測される。続いて、格納情報は、分岐によ って選択された実際の方向に基づいて更新される。格納情報は、特定の新たに遭 遇した分岐、その特定の分岐の最新の方向履歴、及び他の分岐の最新の方向履歴 から求められる。格納情報は2ビット状態マシーンの複数のセットに基づくとと もに、最新の9つの分岐実行の方向履歴にも基づいている(これら最新の9つの 分岐実行が特定の分岐に関連しているのか、または他の分岐に関連しているのか によらない)。特定の新たに遭遇した分岐の命令アドレスは、2ビット状態マシ ーンの複数のセットの1つを選択するのに用いられる。最新の9つの分岐実行の 方向履歴は、状態マシーンの選択されたセットの中から特定の2ビット状態マシ ーンを選択するのに用いられる。各状態マシーンは、この特定の状態マシーンに アクセスした最新の数個の分岐によって選択された方向をカウントするための2 ビット飽和カウンタ(two-bit saturating counter)である。特定の状態マシー ンが同じ静的な分岐(static branch)によってアクセスされるのが通常である が、他の分岐が同じ状態マシーンにアクセスしてもよい。大きな状態マシーン値 は分岐の選択が多いことを示す。小さな状態マシーン値は分岐の選択が少ないこ とを示す。状態マシーンを選択すると、その状態マシーンがアクセスされる。そ の時点での総合的なカウントが“より大きい(greater)”である場合、分岐が 選択されると予測される。その時点での総合的なカウントが“より小さい(less er)”の場合、分岐は選択されないと予測される。最新の9つの分岐実行の方向 履歴は9ビットのシフトレジスタに保持され、このレジスタは分岐命令が問題な くデコードされる度にクロック(clocked)またはシフトされる。予測されたば かりの分岐方向はシフトレジスタ内にシフトされ新たな方向履歴値となる。値が 1の履歴ビッ ト値は選択された分岐を示し、値が0の履歴ビット値は非選択の分岐を示す。 デコードサイクルに於いて、リニアデコードPC424はBHTテーブル参照 を実行するのに用いられる。PC関連分岐命令がデコードされる場合、アクセス された状態マシーンは瞬時に分岐方向を予測するが、続いてフェッチされデコー ドされる実際の命令はそのデコードサイクルの終了時にマイクロ命令デコーダ2 30によって決定される。続いて、条件付き分岐命令のデコーディングによって 生成される分岐条件(BRCOND)オペレーションがスケジューラ260内の 論理によって解決(resolve)されるが、そのとき状態マシーンの更新がなされ る。その分岐が実際に選択されると、状態マシーンは既に最大値(3)になって いない限りデクレメントされる。分岐が実際には選択されなかった場合、状態マ シーンは既に最小値(0)になっていなければインクレメントされる。したがっ て、0及び1の状態マシーン値は、それぞれ分岐が選択されない強い予測及びそ れほど強くない予測を意味する。ステートマシーン値2及び3は、それぞれ分岐 が選択されるあまり強くない予測及び強い予測を意味する。BHTエントリの更 新をサポートするため、BHTをアクセスするための分岐アドレス及び方向履歴 ビットのコピー及び状態マシーン値のコピーが分岐条件(BRCOND)オペレ ーションとともにスケジューラ260に渡される。最大一つのBRCONDが一 つのOpクワドに含まれるため、BHTサポート情報はスケジューラ260に与 えられるOpクワドにタグとして付加される。回路サイズ及び複雑性を低減する ためには、キャッシュ構造では通常的なことであるが、BHTがエントリタグ( デコードされる条件付き分岐に関連するリニアデコードPC424のアドレス) を含まないことが有利である。さらに、BHTが衝突発生率が低くなるように多 数のエントリを有していること が有利である。 関連するBRCONDオペレーションとともにスケジューラ260のOpクワ ド内に退避された情報は、4つの分岐アドレスビット、9つの現履歴ビット、及 び直前にアクセスされた2つの状態マシーンビット(そのうち上位側のビットは 直前の分岐に対する予測方向でもある)を含む15ビットの幅を有する。最初の 13ビットは、必要に応じて、BHTへの再アクセス及び状態マシーン値の更新 に用いられる。最後の2ビットは新たな状態マシーン値を生成するべく修飾され る。 分岐が誤って予測された場合、9ビット分岐履歴シフトレジスタ内の履歴値の セットは、分岐によって選択された実際の方向を反映するように修正される。さ らにそのシフトレジスタは、誤って予測された分岐に対応するよう“シフトバッ ク”され、そうして実際の分岐方向及びどの分岐方向が予測されたかに基づいて 更新される。 リターンアドレススタック(RAS)(図示せず)は、リターン(RET)制 御転送命令用のターゲットアドレスキャッシュである。RASは、8エントリ、 32ビット幅、シングルポートのRAMであり、単一の3ビットポインタを用い ることによって循環型バッファ(circularbuffer)として扱われる。各サイクル に於いて、高々1アクセス(RETデコードに対する読み出しアクセスまたはC ALLデコードに対する書き込みアクセスのいずれか)が実行される。RASは RETリターンアドレスをキャッシュして、間接的にターゲットアドレスを指定 するリターンアドレスを予測する。これは、ターゲットアドレスの直接的な指定 を含む他の制御転送命令と対照的である。RET命令はその実行においてしばし ばターゲットアドレスを変化させるため、RASを使用することに利点がある。 RASは、CALL命令によって退避(スタックにプッシュ)されるリターンア ドレスをモニタリングすることによって、 RET命令の各実行に対してターゲットアドレス値を見い出しかつ予期する。通 常、対応するCALL及びRET命令は動的に対をなして生じ、他のCALL及 びRET命令ペアに対してラストインファーストアウト(LIFO)の順で発生 される。 CALL命令が問題なくデコードされる度、CALL命令の論理リターンアド レスは、LIFOスタックとして使用される循環型バッファに退避(プッシュ) される。RET命令が問題なくデコードされる度、そのときRASの一番上に位 置するリターンアドレス値がそのRETに対する予測ターゲットアドレスとして 用いられ、その値はRASからポップされる。RASは高い予測率を達成するが 、CALL及びRETは常に入れ子状になったペアとして現れるとは限らず、ま た近接したCALL及びRETのみがサポートされ遠く離れたCALL及びRE Tはサポートされないため予測誤りの発生は不可避ある。また予測誤りはRAS の深さが有限であることに起因しても発生する。条件付き分岐の予測誤りが発生 すると、RASは予測誤りの前の状態に戻すべくスタックの一番上のポインタ( トップスタックポインタ)を前の状態にセットする。CALL及びRET命令が 投機的に実行されトップスタックポインタがそれによって変化されている可能性 があるからである。予測誤りの前の元のポインタは復元されるはずである。予測 誤り後の復元は、スケジューラ260によってサポートされる。各スケジューラ 260のOpクワドには、そのOpクワドが生成されたデコードサイクルの間有 効であった現初期トップスタックポインタ値(current initial top-of-stack p ointer value)がタグ付けされている。条件付き分岐命令に対して生成されるB RCOND Opが分析され、誤って予測されていることがわかると、スケジュ ーラOpクワドにタグ付けされたトップスタックポインタは、スケジューラ26 0によって生成されるリスタートサイクルに 於いてRASに供給される。RASは現トップスタック値をスケジューラのOp クワドのトップスタックポインタタグによって置き換える。 第5図の模式的なブロック図に示されているように、命令デコーダエミュレー ション回路231は、命令レジスタ512、エントリポイント回路514、エミ ュレーション環境レジスタ516、エミュレーションコードシーケンサ510、 エミュレーションコードメモリ520及びOp置換回路(substitution circuit )522を含んでいる。命令デコーダエミュレーション回路231は命令デコー ダ220内の回路である。命令デコーダエミュレーション回路231は、命令キ ャッシュ214、BTB456、または命令フェッチ制御回路218に接続され た命令バッファ408から命令バイト及び関連するプレデコード情報を受け取る 。命令バッファ408は命令レジスタ512に接続されており、それに対してx 86命令を供給する。命令レジスタ512はエントリポイント回路514に接続 されており、エミュレーションコードROMエントリポイントを供給する。エン トリポイント回路514はx86命令を受け取り、x86命令オペレーションコ ード(opcode)からエントリポイントアドレスを生成する。このエントリ ポイントアドレスはエミュレーションコードメモリ520内を指し示す開始アド レスである。このようにして、エミュレーションコードメモリ520内の命令の アドレスが、x86命令のopcodeから合成される。このアドレスは、モデ ムバイト(modem byte)、プレフィックスREP及びREPE、保護モードビッ ト及び実効データサイズビットDSzのような情報とともにx86命令のバイト (特にx86命令の第1及び第2バイト)に基づいて求められる。一般に、緊密 に関連する複数のx86命令は同じ様にコード化されたビットフィールドを有し (例えば関連するx86命令間では命令タイプを示すビットフィールドは同じで ある)、エミュレーションコ ードメモリ52内の単一のエントリがいくつかのx86命令に対応するようにな っている。エントリポイントは一般に、x86命令を読み出し、特定のx86命 令ビットフィールドの値に基づいてエントリポイントアドレスのビットの割り当 てを行うことによって合成される。命令レジスタ512はエミュレーションコー ドシーケンサ510に接続され、さらにエミュレーションコードシーケンサ51 0はエミュレーションコードメモリ520に接続されている。エミュレーション コードシーケンサ510はエントリポイントをエミュレーションコードメモリ5 20に適用し、エミュレーションコードメモリ520からシーケンシング情報( sequencing inkrmation)を受け取る。エミュレーションコードシーケンサ51 0は命令のシーケンシングを制御するか、或いは、新たなシーケンスが開始され る場合には、エントリポイントをエミュレーションコードメモリ520に適用す る。エミュレーションコードメモリ520内のエンコードされたオペレーション (Ops)は、エミュレーションコードメモリ520によってOpクワドまたは OpユニットとしてOp置換回路へと出力される。これらのOpはRISC型x 86オペレーション用のテンプレート(template)に対応する。このテンプレー トは複数のフィールドを含んでおり、これらの複数のフィールドにコードが選択 的に代替挿入される。エミュレーションコードメモリ520はOp置換回路52 2に接続されてOpを供給し、そこに様々なOpフィールドが選択的に代替挿入 される。機能的には、エントリポイント回路514はエミュレーションコードR OM232またはエミュレーションコードRAM236へのエントリポイントを 計算する。エミュレーションコードROM232内のシーケンスは命令の機能を 決定する。 エミュレーションコードメモリ520は、オンチップエミュレーションコード ROM232及び外部エミュレーションコードRAM236を 含む。エミュレーションコードメモリ520は、プロセッサ120がどのように 機能するかを定める複数のエンコードされたオペレーションを含んでおり、x8 6命令がどのように実行されるかを定める。エミュレーションコードROM23 2及びRAM236はどちらも、ROM232及びRAM236内において同じ Opコーディングフォーマットを有する複数のオペレーション(Op)命令エン コーディングを含む。例えば一実施例では、エミュレーションコード232は4 K 64ビットワードの容量を有する。Opコーディングフォーマットは、典型 的には、例えば30乃至40ビットで定義されたフォーマットである。一実施例 では、第6A図乃至第6E図に示すように、38ビットフォーマットが定義され る。エミュレーション空間内におけるエミュレーションコードROM232のベ ースアドレスロケーションは固定である。外部エミュレーションコードRAM2 36は、キャッシュ可能メモリ内の標準メモリアドレス空間内に位置する。エミ ュレーション空間内におけるエミュレーションコードRAM236のベースアド レスロケーションは固定である。32ビットエミュレーションコードRAM23 6のアドレスは、上位15ビット<31:17>を与える固定されたベースアド レスと、これらのベースアドレスビットに続く14ビット<16:3>を与える Opアドレスとによって形成される。エミュレーションコードRAMのアドレス の2つの最下位側ビット<1:0>は0にセットされる。エミュレーションコー ドRAM236内の14ビットのOpアドレスは、エミュレーションコードRO M232内のOpアドレスと同じである。オペレーション(Op)は、例えば3 8ビットのOpコーディングフォーマットで、64ビットワードの外部エミュレ ーションコードRAM236に格納される。64ビットワードのOpコーディン グフォーマットビットを越えるビットは、制御転送(OpSeq)情報を格納す るのに用 いられる。外部エミュレーションコードRAM236は、通常、試験及びデバッ グの目的に用いられ、エミュレーションコードROM232内のエンコードされ た命令のパッチ(patching)を可能にするとともに、システム管理モード(SM M)のような特殊な機能の実現を可能とする。例えば、エミュレーションコード ROM232内の命令が適切に機能しないことが判明した場合、外部エミュレー ションコードRAM236がアクセスされ、エミュレーションコードROM23 2内の不適切に機能する固定されたコードを一時的にまたは永久的に置き換える 。外部エミュレーションコードRAM236へのアクセスは、通常2つの技法の 内の一方を用いてなされる。第1の技法では、エミュレーションコードメモリ5 20の要素のOpSeqフィールド内の1ビットフィールドによって、命令をフ ェッチするための次のアドレスが外部エミュレーションコードRAM236内に 位置していることが指定される。この第1の技法では、オンチップエミュレーシ ョンコードROM232によって外部エミュレーションコードRAM236の実 行が開始される。第2の技法では、エミュレーションコードRAM236内のエ ントリポイントをベクタリングするベクトルアドレスが与えられる。 命令キャッシュ214、命令フェッチ制御回路218及び命令デコーダ220 は、3つの命令フェッチ及びデコードモードで機能する。第1のモードでは、命 令デコーダ220はオンチップエミュレーションコードROM232からエミュ レーションコードOpクワドをフェッチする。各Opクワドは4つのオペレーシ ョン(Op)に加えて、フェッチ及びデコード機能の次のサイクルを決定する制 御転送情報(OpSeq)を含む。第2のモードでは、命令フェッチ制御回路2 18は、オンチップL1命令キャッシュ214の一部である命令キャッシュ21 4からのx86マクロ命令バイトのフェッチング(fetching)を制御する。x8 6 マクロ命令はマクロ命令デコーダ230によってデコードされ、マクロ命令デコ ーダ230は4つのオペレーション(Op)を生成する。4つのOp及びOpS eqフィールドは完全なOpクワドを形成する。命令デコーダ220は分岐ユニ ット234を用い且つマクロ命令デコーダ230の機能をベクタリングしてコー ディングされた制御転送を実行する。第3のモードでは、命令フェッチ制御回路 218は、Opコーディングフォーマットでエミュレーションコードを含む64 ビットワードの命令キャッシュ214からのフェッチング(fetching)を1サイ クルにつき64ビットワード1つというように制御する。各64ビットワードは 1つのオペレーション(Op)に対応する。別の実施例では、1サイクルにつき 複数の64ビットワードがアクセスされるようにしてもよい。4つの64ビット ワードがアクセスされる実施例では、エミュレーションコードRAM236がオ ンチップエミュレーションコードROM232の様に完全なOpクワドを供給し 、完全に再プログラム可能(fully-reprogrammable)な効率のよいプロセッサが 達成される。完全に再プログラム可能なプロセッサは、単一のハードウェアにお いて例えばx86プロセッサやPowerPCOのような大幅に異なるプロセッ サをソフトウェア的に具現することができるという利点を有する。 第1及び第3のオペレーティングモードでは、制御転送情報はフォーマットさ れて、Opクワドのオペレーションシーケンス(OpSeq)フィールド内に入 れられる。無条件制御転送(例えばエミュレーションからのリターン(ERET )オペレーションや分岐(BR)オペレーション)は、OpSeq制御転送情報 を用いて完全に制御される。条件付き転送(例えば条件付き分岐(BRcc)) は、OpSeqフィールドと分岐条件(BRCOND)オペレーションの組み合 わせを用いて制御される。OpSeqフィールドフォーマットを図式的に第7図 に示す。 16ビットOpSeqフィールド700は、2ビットシーケンスアクション(A CT)フィールド710、1ビット外部emcodeフィールド712、及び1 3ビットオペレーション(Op)アドレスフィールド714を含んでいる。AC Tフィールド710内の4つのシーケンスアクションは次のようにエンコードさ れる。 OpSeqのシーケンスアクションが無条件か条件付きかは、Opクワド内の どこかに分岐条件(BRCOND)Opが存在するか否かによる。Opクワド内 のBRCOND Opは、テストされるべき条件を規定するとともに、代替エミ ュレーションコードターゲットアドレスを規定する。明示的な静的分岐方向予測 ビット(static branch direction prediction bit)は存在しない。代わりに、 予測されるアクション及び次のアドレスは常にOpSeqフィールド700によ って規定され、“予測されない”次のアドレスは常にBRCOND Opによっ て規定される。BRCOND Opは無条件コールを含むBSRシーケンスアク ションと常にペアとなっている。無条件及び条件付き“選択されると予測された (predicted-taken)”コールに対して、BRCOND Opは退避するべきリ ターンアドレスを規定する。 外部emcodeフィールド712は、実行されるべきエミュレーションコー ドが外部エミュレーションコードRAM236内にある場合1にセットされる。 外部emcodeフィールド712は、実行されるべきエミュレーションコード が内部エミュレーションコードROM232 内にある場合0にセットされる。Opアドレスフィールド714は、非エントリ ポイントOpクワド内のターゲットOpのアドレスを指定する。 Opseqコントロール転送情報は、Opクワドまたは64ビットメモリワー ドがフェッチされ、「即時解読」されるとき、無条件コントロール転送を制御す る。次に解読される命令の指定は、Opseqフィールドのみにより制御される 。Opseqフィールドは、3つの異なる動作(action)の1つを指定する。第 1に、OpseqフィールドはエミュレーションコードROM232からエミュ レーションコードを指定された14ビットの1つのオペレーションワードアドレ スにフェッチするようにし、従ってエミュレーションコードROM232Opク ワドがフェッチされる。第2に、Opseqフィールドは、エミュレーションコ ードRAM236からのエミュレーションコードの指定された14ビットの1つ のオペレーションワードアドレスにフェッチするようにし、従ってエミュレーシ ョンコードRAM23264ビットメモリワードがフェッチされる。第3に、O pseqフィールドは、エミュレーションからのリターン(ERET)指示を含 み、これは、命令デコーダ230にx86マイクロ命令デコーディングを戻すよ うにするものである。 エミュレーションコードROM232からフェッチされたエミュレーションコ ードは、Opクワドと位置合わせされた形態でフェッチされる。Opクワド内で の即値位置への分岐により、Opクワド内での先行のオペレーションは、その先 行オペレーションの代わりにNOOPをフェッチすることにより無効なものとし て処理される。 64ビットメモリワードをエミュレーションコードRAM236からフェッチ するためのバイトメモリアドレスは、指定された14ビットオペレーションアド レスと、既に設定された3つの最上位ビットとを結合することにより生成され、 これにより位置合わせされた8ビットアドレ スが生成される。16ビットメモリワードをフェッチするためのバイトメモリア ドレスは、8ビットの位置合わせされたアドレスであり、従ってメモリOpデコ ーディング及びフェッチ/デコードの進行を首尾一貫させ単純なものとすること ができる。 Opseqコントロール転送情報、条件付きコントロール転送のために次にデ コードされる命令表示の制御も行う。分岐条件(BRCOND)オペレーション は、テストされ評価される条件コードを指定し、代わりの(alternate)14ビ ットエミュレーションコードフェッチ及びデコードアドレスを指定する。従って 、条件付きコントロール転送のためのOpseqコントロール転送情報は、条件 分岐の予測経路を効果的に指定する。BRCONDアドレスは、通常14ビット ターゲットOpワードアドレスであるか、次の「順次」オペレーション(Op) の14ビットOpワードアドレスの何れかである。更に一般的には、BRCON Dアドレスは、一般的な2ウェイ(2方向の)条件分岐全体を指定し得る。条件 付きERETオペレーションは、ERETオペレーションを指定するようにOp seqフィールドを設定し、条件付きERETが予測されるようにすることによ り実行される。次いでERETオペレーションが予測ミスであることが分かった 場合には、ERETによるx86マクロ命令ストリームがアボート(abort:中 断)され、BRCONDにオペレーションにより指定された連続的なマクロ命令 ストリームが再スタートされる。 BRCONDオペレーションは、実行されない状態でスケジューラ260にロ ードされる。BRCONDオペレーションはスケジューラ260の分岐分析ユニ ットにより順番に評価される。分岐が適切に予測された場合には、分岐は完全に マークされる。そうでない場合には、BRCOND状態が、未発行状態のままに され、Op画定ユニットにより検出 されたとき分岐アボート信号がトリガされる。 エミュレーションコードメモリ520は、シングルレベル(入れ子のない)サ ブルーチンの機能性をサポートしており、この機能性においてはOpseqフィ ールドがエミュレーションコードのフェッチングのためのオルタナティブ(alte rnative)を指定するように設定される。このオルタナティブは、典型的な2ウ ェイ条件付き分岐として構成されているが、OpクワドまたはメモリOp内のB RCOND Opの即値フィールドからの14ビットOpワードアドレスが、サ ブルーチンリターンアドレスレジスタにロードされる点が異なっている。このサ ブルーチンリターンアドレスレジスタは、14ビットOpワードアドレス及びリ ターンアドレスが、エミュレーションコードROM232かRAM236の何れ に存在するかを表す1ビットを格納する。このBRCONDOpにより指定され た条件コードは、TRUEを含むオルタナティブであり、無条件及び条件付き( 予測が行われる)サブルーチンの双方が指定されることになる。しかし、BRC OND Opはサブルーチンリターンアドレスレジスタに未定義の値をロードす ることが回避されるように指定されなければならない。 全てのエミュレーションコードサブルーチンのサポート及びリターンアドレス レジスタの管理は、パイプラインの前にあるエミュレーションコードシーケンサ 510により実行される。従って、リターンアドレスレジスタのローディング及 び使用は、標準的なデコーダのタイミングと完全に同期されており、遅延が生じ ないことになる。2ウェイエミュレーションコード分岐 エミュレーションコードROM232は、複数のオペレーション(Ops)シ ーケンス用のストレージ(記憶機構)である。オペレーションシーケンスは、定 義されたエントリポイントにおいて始まり、エミュレ ーションコードROM232にハード符号化され、オペレーションシーケンスの 終わりのエミュレーションコード(ERET)Opseq宣言からのリターンに 拡張している。1つのシーケンスにおけるオペレーションの数は、通常様々な異 なる機能を実行するために適切な数に変えることができる。単純なx86命令は 、エミュレーションコードROM232に1つのOpエントリしか有していない が、これらの命令はOpクワドの細分性(granularity)をもってフェッチされ る。より複雑なx86命令は、多くの成分オペレーションを使用する。エミュレ ーションコードROM232ストレージは、固定ROMアドレス空間にプログラ ムされた複数のOpクワドとして構成される。各Opクワドは4つのRISC Opフィールド及び1つのOpseqフィールドを有する。オペレーションシー ケンスは、通常Opクワド内で位置合わせされておらず、従ってエミュレーショ ンコードROM232内の分散した位置に分岐させるためのいくつかの技術が用 いられず、エミュレーションコードROM232内の多くのROMユニットが使 用不可能であり、集積回路空間を無駄に使用することになる。更に、エミュレー ションコードROM732における命令のエントリポイントアドレスが、x86 命令のopcodeから合成されることから、エントリポイントアドレスは、R OMアドレス空間全体に間隔をおいて固定された位置に広がるようになり、これ がROM内の使用されない部位を増やすことになる。エントリポイントを介した アクセスが行われないROM内の位置は、自由に他の用途に供することができる が、アクセス可能な領域が連続したものとならないという欠点がある。Opse qフィールドは、このような間隔をおいた位置への分岐のための技術を提供する ものであり、これによりメモリ空間内の無駄が概ね除去されることになる。 Opクワドの4つのRISC Opフィールドのそれぞれは、単純な RISC風オペレーションを格納する。Opseqフィールドは、エミュレーシ ョンコードシーケンサ510とやりとりし、エミュレーションコードシーケンサ 510にエミュレーションコードROM232内の次の位置への分岐をなさしめ るコントロールコードを格納する。エミュレーションコードROM232におけ る4つのRISC Opフィールドのそれぞれは、条件付きまたは無条件の分岐 オペレーションを格納し、これによりターゲットアドレスを指定して複数の分岐 がそのOpクワド内にコード化されることになる。命令エミュレーション回路2 31の他の実施例では、OpクワドがOpseqフィールドと共にOpを順序付 けする1個の分岐オペレーションしか有していない。4つのRISCOpフィー ルドの1つにおける条件付き分岐OpとOpクワドにおけるOpseqフィール ドの組み合わせにより、2つの可能なターゲットまたは次のアドレスを有するO pクワドが生成される。 複数のターゲットアドレスを有するOpクワドの場合は、エミュレーションコ ードシーケンサ510は、符号化された予測ターゲットアドレスを選択すること によりオペレーションのシーケンスを制御する。従って、条件分岐を含むOpク ワドの場合は、エミュレーションコードシーケンサ510が、条件分岐に対する 選好(preference)において、ハード符号化されたOpseqターゲットアドレ スを選択する。条件分岐は、プロセッサ120の分岐予測機能に基づいて続けて 処理され、2ウェイエミュレーションコード分岐の実現により、追加の分岐処理 オーバーヘッドが発生することがなくなる。 エミュレーションマイクロコードは、Opクワドの3つの位置の1つにBRC OND Opが配置されるように書かれる。従って、OpクワドにおけるBRC OND Opに続くOpsは、分岐が最終的に行われるか否かではなく予測され た方向に基づいて実行される。分岐が最終的 に正しく予測されていることが分かった場合には、Opクワドの全てのOps及 び後続のOpクワドの全てのOpsは、スケジューラ260にコミットされる。 この分岐が最終的に誤り予測であることが分かった場合には、BRCOND O pに続く全てのOps+全ての後続のOpクワドがアボートされる。エミュレー ションコードは、分岐条件、ターゲットアドレス、「予測」アドレス、及び分岐 条件の予測も含む形で供給される。 大抵の命令においては、Opseqフィールドのみが次のフェッチアドレス即 ちベクトルアドレスかERETリターンの何れかを供給する。これは制御用のハ ードウェアを単純化し、条件分岐または分岐予測の分析なしにオペレーションの フェッチングを制御できる高速で単純なコントロールロジックを与えられるとい う点で有益である。条件分岐命令の場合には、Opseqフィールドが予測分岐 アドレスを供給し、クワドにおけるBRCONDオペレーションが、評価される べき条件コードを指定し、予測ミスの場合にそのフェッチアドレスを指定する。 エミュレーションコード処理(handling)により、いくつかに制限された少ない 数のプログラムにより命令コントロールシーケンスが選択されるという非逐次的 なOpクワドフェッチングの柔軟性が利点として得られる。従って、Opseq フィールドは、エミュレーションコードROM232における使用されない位置 に効率的にOpシーケンスを当てはめるために利用されるという点で有益である 。このエミュレーションコード処理により、条件分岐の場合に所望に応じて2ウ ェイの分岐を行える柔軟性も得られ、また呼び出し命令の後の命令に戻さなけれ ばいけないという制約を加えるのではなく後続の任意の位置に戻すようにされる サブルーチン呼び出しの場合にも、所望に応じた2ウェイ分岐の柔軟性が得られ る。ターゲットアドレスで分岐するOpseqフィールドのこのように 利用することにより、時間的またはサイクルのペナルティを引き起こすことなく 無条件分岐が達成できるという利点が得られる。エミュレーション環境置換 エミュレーションコードシーケンサ510は様々なエミュレーション環境置換 を制御して、事実上エミュレーションコードROM232におけるオペレーショ ンエントリの数より多い数の符号化されたオペレーションへの拡張を行うことが できる。エミュレーションコードシーケンサ510は、Opフィールドの特定の 、典型的には専用のエンコーディングを分析し、いつ置換が行われ、どの置換が 実行されたかを判定するロジック回路を備えている。たいていのエンコーディン グは直接フィールドの値を指定する。他のエンコーディングはエミュレーション 環境置換を介して間接的にフィールドの値を指定する。エミュレーションモード の置換を用いることにより、エミュレーションコードROM232のサイズを小 さくする共にCISC機能の符号化を達成することができ、またプロセッサの集 積回路のサイズ及び製造コストを低減できるという利点が得られる。レジスタフ ィールド及びいくつかのサイズフィールドを含むOpフィールドは、レジスタを 直接指定するか、またはAXまたはT1のような間接レジスタ指定子を指定する 。同様にフィールドは、直接レジスタ指定子であるRegMも選択し得る。Op 置換ロジックは、間接レジスタ指定子に対するコーディングを分析して、レジス タコーディングを定義し、レジスタコーディングを現在レジスタに置換する。サ イズフィールドは、1バイト、2バイト、または4バイトの中から選択するか、 Dサイズを選択して、現在の実効データサイズをもとのエンコーディングに戻す 。HRegのような記号は、例えばT2に対するエンコーディングを表すシンボ ルHReg_T2のように表して特定のエンコーディングを表す。このようなシ ンボルにはHReg、HDSz、H ASz、HSegDescr,HSpecOpType等がある。 以下の擬似RTLコードはエミュレーション環境置換オペレーションを記述し たものである。 エミュレーションコードシーケンサ510は、エミュレーションコードROM 232における次のエントリポイントに順序付けをし、4つのオペレーション( Ops)及びOpseqフィールドを含むOpクワドを生成する。Opクワドに おける4つのオペレーションのそれぞれに対して、様々な置換が行われ、置換の タイプは5つの汎用オペレーション タイプの特定のオペレーションタイプによって決まる。5つのオペレーションタ イプには、レジスタオペレーション(RegOps)、ロード−ストアオペレー ション(LdStOps)、ロード即値オペレーション(LIMMOps)、特 殊オペレーション(SpecOps)、及び浮動小数点演算(FpOps)が含 まれる。5つのオペレーションタイプに対するOpフォーマットは第6A図〜第 6E図に示されている。 エミュレーションコードROM232によって生成されるOpsはもともと一 般的なものである。特に、このOpsはx86命令と正確に一致していない。そ の代わりに、エミュレーションコードROM232からのOpsはx86命令様 の構造を形成する。Opテンプレート内の様々なビットフィールドはエミュレー ションコードシーケンサ510により実行される置換ファンクションを用いて置 換される。簡単に説明すると、置換ファンクションはOpのいくつかのビットを その選択されたビットで置き換える。 x86命令は、modr/mバイトが後続するOpコードを含んでいるのが普 通である。modr/mバイトは、命令において使用されるインデクシングタイ プまたはレジスタ番号を表す。modr/mバイトは、2ビット(MSB)モー ドフィールド、3ビット(中間)regフィールド、及び3ビット(LSB)r /mフィールドを含む3つのフィールドを有する。モードフィールドはr/mフ ィールドと結合して、8つのレジスタ及び24個のインデクシングモードを表す 42個の可能な値を形成する。regフィールドは、レジスタ番号またはOpコ ード情報の更なる3ビットを指定する。r/mフィールドは、オペランドのロケ ーションしてレジスタを指定するか、またはモードフィールドと共に用いられて レジスタ及びインデクシングモードを定義する。 第6A図は、RegOpフォーマットの様々なフィールドを示すレジ スタオペレーション(RegOp)フィールドエンコーディングの図である。R egOpフィールド610においては、最上位ビット36及び37がクリアされ て、オペレーションをRegOpとして表す。RegOpフィールド610は、 ロケーション[35:30]に6ビットオペレーションタイプ(TYPE)フィ ールド612、ビットロケーション[29:26]に4ビット拡張(EXT)フ ィールド614、ビットロケーション[25]にRU1−only(R1)ビッ ト616、ビットロケーション[24:22]に3ビットオペレーション/デー タサイズ(DSz)フィールド618、ビットロケーション[21:17]に5 ビットデスティネーション(DEST)汎用レジスタフィールド620、及びビ ットロケーション[16:12]に5ビットソース1(SRC1)汎用レジスタ フィールド622を有する。RegOpフィールド610は、ビットロケーショ ン[9]にシングルビットセットステータス(SS)フィールド624、ビット ロケーション[8]にシングルビット即値ソース2(I)フィールド626、ビ ットロケーション[7:0]にソース2オペランド(IMM8/SRC2)フィ ールド628用の8ビット即値データまたは汎用レジスタを有する。RegOp エンコーディングのTYPEフィールド612は以下のようなものを含む。 いくつかのRegOpエンコーディング、特にxx01xエンコーディングは 、条件コード依存性を指定する。シフトOpsのローテート及びシフトは、異な るstatmodビットがアサートされる点を除いて機能的に等価である。 5ビット条件コードを指定するMOVccオペレーションのために、エクステ ンションフィールド(EXT)614がTYPEフィールド612のビット<0 >と共に用いられる。エクステンションフィールド(EXT)614は、ビット の特殊レジスタ番号を特定するRDxxx/WRxxxオペレーションのために も使用される。セットステータス(SS)フィールド624は、EXTフィール ド614と共に、オペレーションによる影響を受けるステータスフラグを指定す るために使用される。セットステータス(SS)フィールド624が1に設定さ れる、即ちこのOpがフラグを変更するようなOpsの場合は、エクステンショ ンフィールド(EXT)614が、Opにより修飾されるフラグのグループを指 定する4つのステータス修飾ビットを特定する。RDSEG Opsの場合には 、EXTフィールド614が、4ビットセグメント(セレクタ)レジスタを指定 する。WRFLG条件付きOpの場合には、特殊 レジスタエンコーディングがSSフィールドが設定されている場合のための所望 のStatMod値に一致する。セットステータス(SS)フィールド624及 びEXTフィールド614は、RegOpフィールドである。 条件コードは、5つのビットに付加され、5ビット条件コードフィールドのビ ット<0>は、条件またはその相補的な条件が捨てられるか若しくはアサートさ れるようにテストされるべきか否かを指定する。例えばCC<0>が1の場合は 、条件が反転される。5ビット条件コードCCフィールドのビット<4:1>、 評価されるべき条件を以下のように指定する。 EXTフィールド614は、x86フラグ及び2つのエミュレーションフラグ に対応する4つのフラグを含む条件フラグを更新するために使用される。8つの フラグはフラグのグループ毎にステップのステータス修飾ビットを用いて8つの グループに分割される。EXTフィールド614は事実上TYPE612仕様( specification)から独立した様々な条件コードフラグの更新を定め、機能的に 関連性を有するフラグは、制御されグループとして更新される。関連するフラグ のグループとしての更新は、コントロールロジックを保存するという利点がある 。EXTフィールド614は特定の命令に対して更新されるフラグを決定するビ ットセットを定義する。独立のTYPE612及びセットステータス(SS)フ ィールド624を用いて、オペレーションタイプから条件コード処理を切り離す ことにより、いくつかのオペレーションをフラグを更新しないものとして定義す ることができる。従って、条件フラグの更新が不要なこのような条件の下では、 フラグの更新をディスエーブルして、不必要な以前のフラグ値に対する依存性を 取り除くことができるという利点が得られる。 RU1onlyフィールド616は、第1レジスタユニット244に対して実 行され、第2レジスタユニット246に対しては発効されないOpsを表し、従 ってR1フィールド616は実行ユニットの仕様のハ ード符号化のためのビットである。従って、RU1onlyフィールド616は 、特殊実行ユニットのみがそのユニット上で実現される機能を組み込んでいるこ とから、特殊実行ユニット上でのみ実行される特定のオペレーションを表す。セ ットステータス(SS)フィールド624はEXTフィールド614の設定に従 ってフラグを変更する。このIフィールド626は、ソース2オペランドが即値 であるか汎用レジスタであるかを指定する。IMM8/SRC2フィールド62 8は、Iフィールド626が0である場合、5ビット汎用レジスタを指定する。 IMM8/SRC2フィールド628は、Iフィールド626が0の場合、DS zフィールドサイズにより指定されたオペレーションのサイズを拡張した符号付 き即値を規定する。 レジスタオペレーション(RegOp)置換の場合は、Opクワドからのオペ レーション(Op)がレジスタオペレーション(RegOp)である。命令レジ スタ512はベクタリングデコーダ418により解読される命令バイトを保持す る。ベクタリング命令デコードの間、ベクタリングデコーダ418は初期ベクタ リングクワド及びエントリポインタアドレスを命令レジスタ512の内容に基づ いて発生する。同時に、ベクタリングデコーダ418はエミュレーション環境変 数を初期化し、命令レジスタ512のフィールド及び他の情報に基づいて様々な 情報からエミュレーション環境レジスタ516の呼び出しを行う。エミュレーシ ョン環境レジスタ516からの情報は、置換オペレーションを実行するOp置換 ロジックに供給される。 RegOp置換の場合は、様々な置換が第6A図に示すRegOpフォーマッ ト610のフィールドに対して行われる。RegOpオペレーションのデスティ ネーション(DEST)620及びソース1(SRC1)622フィールドの場 合は、5ビットのレジスタエンコーディング が直接レジスタ指定子0−15、または間接レジスタ指定子(Reg及びReg M)を用いてレジスタを指定する。直接レジスタ指定子は16個のレジスタの1 つを直接指定する。間接指定子Reg及びRegMは、エミュレーション環境レ ジスタ516からの現在レジスタ数(0〜15)によりOpデコード時間におい て置換される。置換は命令デコーダ230が命令をデコードし、エミュレーショ ンコードROM232におけるエミュレーションコードシーケンスにベクタリン グし、及び他の情報から様々なフィールドを備えたエミュレーション環境レジス タ516を初期化するときに行われる。エミュレーションコードシーケンスのオ ペレーションの間、このシーケンスのOpsは間接レジスタフィールド及びサイ ズデータフィールドのような様々なフィールドを有しており、これらはエミュレ ーション環境レジスタ516の現在値に基づいて置換される。Op置換ロジック は、フィールドに対するエンコーディングが置換されたフィールドを表している か否かを判定する。そのフィールドに対するエンコーディングが他のフィールド が置換されたことを示していることもあり得る。例えば、dest620及びs rc1622フィールドにおける間接指定子Reg及びRegMのコーディング が、DSzフィールド618も置換されたことを示している。 DSzフィールド618に関しては、x86命令セットは、プロセッサ120 の現在のデフォルト条件に応じて8ビット、16ビット、または32ビットデー タについて作用する命令である。DSzフィールド618は、1バイト、2バイ ト、または3バイトのデータサイズを示す3つのビットを有している。データサ イズの置換を指定する命令については、間接サイズ指定子がAサイズ、Dサイズ 、またはSサイズを指定する。データサイズ置換は、Bビット及びDビットによ り決定される。Bビットは現在スタックセグメントレジスタ(SS)により指定 される。 Dビットは、コードセグメントレジスタ(CS)により指定される。間接サイズ 指定子の場合は、SサイズがBビットにより決定される。実効アドレス(A)サ イズ及び実効データ(D)サイズは、Dビットにより決定され、アドレスまたは データサイズオーバーライトプリフィクスによりオーバーライドすることができ 、エミュレーション環境レジスタ516に保持される。一般に、Aサイズ、Dサ イズ、及びSサイズの間接指定子は、バイトまたは4バイトの絶対エンコーディ ングにより置換される。例えば、Dサイズが選択される場合には、データサイズ はエミュレーション環境レジスタ516におけるビットによって指定された実効 データサイズに基づいて2バイトまたは4バイトに分解される。同様に、間接サ イズ指定子がAサイズをコード化する場合には、実効データサイズはエミュレー ション環境レジスタ516におけるビットにより2バイトか4バイトの何れかに 指定される。間接指定子はSサイズを選択する場合には、Bビットが2バイトが 置換されるか4バイトが置換されるかを決定する。 Imm8/Src2フィールド628の置換は、ソース2(src2)オペラ ンドが即値ではなく間接レジスタ指定子である場合にのみ実行される。Op置換 ロジックは、即値(I)フィールド626に対するエンコーディングがImm8 /Src2フィールド628における置換を表しているか否かを、Iフィールド 626にアクセスすることにより判定する。間接レジスタ指定子が選択されてい る場合には、レジスタの汎用レジスタ指定をRegOpフォーマット610のI mm8/Src2フィールド628に置換する。メモリのインデックスを付され たアドレス指定フォームを用いるレジスタに格納されたsrc2オペランドの場 合には、置換は行われずRegOpフォーマット610のImm8/Src2フ ィールド628がインデックス値と共にロードされる。RegOpフォーマット 610はSrc1フィールド622、Imm8/Src 2フィールド628、及びdestフィールド620を含むRISC型の3つの (2つのソースで1つがデスティネーション)オペランドフォーマットである。 標準x86フォーマットは非オペランドフォーマットである。iフィールド62 6により、ソース2オペランドが即値か汎用レジスタの何れかのフォームを利用 できる柔軟性を持つようにできるという点で有益である。 RegOpフィールド610は符号付き乗算(MUL1S)、符号付き乗算( MUL1U)、符号付き乗算(MULEH)、上位データの乗算(MULEH) 及び下位データの乗算(MULEL)オペレーションを含む特定のOpsのグル ープを定義する。これらのOpsは乗算及びアンローディングオペレーションの 一部を実行し、即ち複数のこれらの特定の乗算Opsから乗算命令が成り立って いることになる。除算オペレーションは、同様に複数の特定の単純な除算Ops 、即ち1または2のビット除算(DIV1)、ステップ除算(DIV2)、除算 アンロード剰余(DIVER)及び除算アンロード商(DIVEQ)Opsの組 み合わせにより実行され、例えば除算における2ビット反復(two-bit iteratio n on a divide)が実行される。 WRIP Opは、それが交代したとき実行アドレスが変更するx86プログ ラムカウンタ(PC)を書き込み、所望のアドレスにおける命令のフェッチを再 開する。WRIP Opは、命令長のデコードが困難または不可能な様々な命令 の場合、即ちロジックが複雑になるのを回避するべく、インクリメントされたロ ジックは正しく命令長をデコードできない場合に特に有用である。この命令は、 命令フェッチオペレーションのシリアル化や分岐のエミュレートにおいても有益 である。ロジックが命令長を正しくデコードしなくてもよく、ロジックはWRI P Opを用いてプログラムカウンタを実現できるようにし、前記正しくないデ コード命令長を無視するようにすることによって効率が上がる。 チェックセレクタ(CHKS)Opは、x86命令セットセグメントデスクリ プタ及びセレクタのために使用される。CHKS Opは、nullセレクタの チェックやデスクリプタテーブルへのアドレスオフセットの発生のオペレーショ ンを含むセグメントレジスタのローディングのプロセスを開始する。 第6B図は、ロード−ストアオペレーション(LdStOp)フィールドエン コーディングの図であり、LdStOpフォーマットの様々なフィールドが示さ れている。LdStOpフィールド630においては、最上位ビット36及び3 7がそれぞれ1及び0に設定され、LdStOpとして動作することを示してい る。LdStOpフィールド630はビットロケーション[35:32]に4ビ ットオペレーションタイプ(TYPE)フィールド632、及びビットロケーシ ョン[31:30]に2ビットのインデックススケールファクタ(ISF)フィ ールド634を有し、これは1x、2x、4x及び8の係数を表している。Ld StOpフィールド630は、ビットロケーション[29:26]に4ビットの セグメントレジスタ(SEG)フィールド636、及びビットロケーション[2 5:24]に2ビットのアドレス計算サイズ(ASz)フィールド638を有し 、後者はAサイズ、Sサイズ、Dサイズ及び4つのバイトの間の選択を指定する 。実効データ及びアドレスサイズは、RegOp置換と同様にLdStOpsの 代わりに置き換えられる。LdStOpフィールド630は、ビットロケーショ ン[23:22]において2ビットのデータサイズ(DSz)フィールド640 を有し、ビットロケーション[21:17]に5ビットのデータソース/デステ ィネーション(DATA)汎用レジスタフィールド642を有し、ビットロケー ション[16]にシングルビットの大きい変位(LD)を有する。DSzは、整 数用のサイズ(1、2、4及びDサイズを)及び浮動小数 点用のサイズ(2、4、及び8バイト)を指定し、LDは先行のOpからのDi sp8変位を用いて大きな変位を指定するものである。LDビット644は、O psが38ビットの幅、32ビットの変位全部をオペレーションに指定するには 不十分な命令フォーマットであることから有用である。8ビットに符号化された 変位のみが1つのLdStOpフィールド630で可能である。LDビット64 4は、アサートされたとき、32ビット変位全体を供給するオペレーションに先 行する即値を示す。LdStOpフィールド630は、ビットロケーション[1 5:12]において4ビットベース(BASE)の汎用レジスタフィールド64 6を有する。LdStOpフィールド630は、ビットロケーション[11:4 ]における8ビット符号付き変位(DISP8)フィールド684、及びビット ロケーション[3:0]に4ビットインデックス(INDEX)汎用レジスタ6 49を有する。LdStOpエンコーディングのTYPEフィールド632は以 下のようなものである。 ロード/ストアオペレーション(LdStOp)置換の場合は、エミュレーシ ョンコードシーケンサ510がLOCKプリフィクスがエミュレーション環境の セットアップの間に確認されたか否かを判定する。指定されたLdStOpオペ レーションがストアチェックを有するロード整数(LDST)であり、LOCK プリフィクスが確認された場合には、エミュレーションコードシーケンサ510 は、ストアチェックを有するロード整数のロックされた(LDSTL)opco deをLDSTopcodeの代わりに用いる。 LdStOp置換の場合は、様々な置換が第6B図に示すLdStOpフォー マット630のフィールドにおいてなされる。LdStOpオペレーションのデ ータレジスタ(DataReg)フィールド642の場合は、5ビットのレジス タエンコーディングが直接レジスタ指定子(0〜15)または間接レジスタ指定 子(Reg及びRegM)を用いてレジスタを指定する。直接レジスタ指定子は 、16個のレジスタの1つを直接指定する。間接レジスタ指定子(Reg及びR egM)は、Opデコードの時間に、エミュレーション環境レジスタ516から の現在レジスタ数(0〜15)で置き換えられる。命令デコーダが命令をデコー ドし、エミュレーションコードROM232におけるエミュレーションコードシ ーケンスをベクトル指定し、エミュレーション環境レジスタ516を命令及び他 の情報からの様々なフィールドと共に初期化する。エミュレーションコードシー ケンスのオペレーションの間、シーケンス内の Opsは、複数のフィールド、例えば間接レジスタ指定子フィールド、及びサイ ズデータフィールドを有し、これらはエミュレーション環境レジスタ516の現 在値に基づいて置換される。Op置換ロジックは、1つのフィールドに対するエ ンコーディングは置換されたフィールドを指定しているか否かを判定する。一つ のフィールドに対するエンコーディングが他のフィールドが置換されたことを指 定している場合もあり得る。特定の置換はデータレジスタ(DataReg)6 42をレジスタアドレシングまたはメモリインデックストアドレシングを用いて アドレス指定されるか否かに依存している。レジスタアドレシングフォームが指 定されている場合には、LdStOpフォーマット630のDataRegフィ ールド642が間接指定子Regにより決定される。メモリインデックストアド レシングが指定されている場合には、LdStOpフォーマット630のDat aRegフィールド642が間接指定子RegMにより定められる。 ASzフィールド638及びDSzフィールド640については、x86命令 セット命令がプロセッサ120の現在のデフォルト条件に応じて8ビット、16 ビット、または32ビットデータ上に対して作用する。ASzフィールド638 及びDSzフィールド640はそれぞれ1バイト、2バイト、または3バイトの データサイズを示す2つのビットを有する。データサイズの置換を指定する命令 の場合は、間接サイズ指定子がAサイズ、Dサイズ、またはSサイズを指定する 。データサイズ置換は、Bビット及びDビットにより定められる。Bビットは現 在スタックセグメントレジスタ(SS)により指定される。Dビットは、コード セグメントレジスタ(CS)により指定される。間接サイズ指定子の場合は、S サイズがBビットにより定められる。実効アドレス(A)サイズ及び実効データ (D)サイズは、Dビットにより定められ、アドレスま たはデータサイズオーバーライトプリフィクスによりオーバーライドされ、エミ ュレーション環境レジスタ516に保持される。実際に、Aサイズ、Dサイズ、 及びSサイズの間接指定子は、バイトまたは4バイトの代わりに絶対エンコーデ ィングにより置換または置き換えられる。例えば、Dサイズが選択された場合、 データサイズはエミュレーション環境レジスタ516におけるビットにより指定 された実効データサイズに基づいて2バイトまたは4バイトに展開される。同様 に、間接サイズ指定子がAサイズをコード化する場合、実効アドレスサイズは2 バイトまたは4バイトの何れかであるエミュレーション環境レジスタ516にお けるビットによって指定される。間接サイズ指定子がSサイズを選択した場合、 Bビットが2バイトまたは8バイトが置換されたか否かを判定する。 LdStOpオペレーションが4ビットセグメントレジスタフィールド636 が置換されるべきか否かを判定するべくチェックされる。エミュレーション環境 がセットアップされたとき、セグメントオーバーライドプリフィクスがモニタさ れる。セグメントオーバーライドプリフィクスがLdStOpの生成が命令の実 行オペランドセグメントに依存するとき、後続の命令のデコードに影響を与える 。デフォルトセグメントは関連する汎用アドレスモードに応じてDSかSSであ り、最終セグメントオーバーライドプリフィクスにより指定されるセグメントで 置き換えられる。セグメントレジスタアドレス空間は、従来型のx86仕様から 4ビットに拡張され、追加の特殊セグメントレジスタのサポートを可能にする。 セグメントレジスタは以下のように符号化される。 Opデコード時間において、エミュレーションコードシーケンサ510は「O S」セグメントレジスタをエミュレーション環境からの現在の3ビットセグメン トレジスタの数で置き換える。従って、セグメントレジスタは特殊セグメントレ ジスタにおいて交代的にハード符号化されるか、またはセグメントOSに設定さ れ、このセグメントOSは現在の実効データセグメントレジスタを指定するが、 セグメントオーバーライドでオーバーライドされ得ない。 エミュレーションメモリセグメントレジスタ(MS)は、エミュレーション環 境において使用するための特殊エミュレーションメモリのアクセスを表す。デス クリプタテーブルSegReg TSが、グローバルなディスクリプタテーブル (GDT)またはローカルなディスクリプタテーブル(LDT)の何れかのアク セスを探す。 第6C図は、ロード即値オペレーション(LIMMOP)フィールド エンコーディングの図であり、LIMMOPフォーマットにおける様々なフィー ルドが示されている。LIMMOPフィールド650において、上位ビット36 及び37は、双方共に1に設定され、これはLIMMOPとしてのオペレーショ ンを表す。LIMMOPフィールド650は、ビットロケーション[35:20 ]に16ビットの即値上位部分(ImmHi)652、ビットロケーション[1 9:16]の位置に5ビットのデスティネーション(DEST)汎用レジスタフ ィールド654、ビットロケーション[15:0]の位置に16ビットの即値下 位部分(ImmLo)656を有する。ImmHi652及びImmLo656 は、両者組み合わせて、DESTフィールド654により指定されたレジスタに ロードされる32ビットの値を指定する。 第6D図は、SpecOpフォーマットの様々なフィールドを示す特殊オペレ ーション(SpecOp)フィールドをコードするシーケンスの図である。Sp ecOpフィールド660において、上位ビット35〜37は、それぞれ101 に設定され、これはSpecOpとしてのオペレーションを表す。SpecOp フィールド660はビットロケーション[34:31]の位置に4ビットのオペ レーションタイプ(TYPE)フィールド662、ビットロケーション[30: 26]の位置に5ビットの条件コード(CC)フィールド664、及びビットロ ケーション[30:26]の位置に2ビットのデータサイズ(DSz)フィール ド666(これは1、4、及びDサイズバイトのサイズを表す)を有している。 SpecOpフィールド660は、ビットロケーション[21:17]の位置に 5ビットのデスティネーション汎用レジスタ(DEST)フィールド668、ビ ットロケーション[16:0]の位置に17ビットの即値定数(Imm17)フ ィールド670を有する。Imm17フィールド670は17ビットの符号付き 即値か14ビットのOpアドレ スの何れかを保持する。CCフィールド664はBRCOND Opsによって のみ使用される。DSzフィールド666及びDESTフィールド668は、L DKxx Opsによってのみ使用される。標準的なNOP Opは、“LIM M t0, <undefined>”と定義される。SpecOpエンコーデ ィングのTYPEフィールド662は以下のようなコードを含む。 特殊オペレーション(SpecOp)置換の場合においては、SpecOpが チェックされ、レジスタアドレシングまたはメモリインデックストアドレシング について、デスティネーション汎用レジスタ(DestReg)がアドレス指定 されたか否かが判定される。レジスタアドレシングフォームが指定された場合、 エミュレーションコードシーケンサ510はRegレジスタから第6D図に示す SpecOpフォーマット660のDestRegフィールド668、既に格納 されたmodr/m regを置換する。メモリインデックストアドレシングフ ォームが指定された場合には、エミュレーションコードシーケンサ510は、R egmレジスタからSpecOpフォーマットのDestRegフィールド66 8へ以前に格納されたmodr/m regmを置換する。DestRegフィ ールド668はLDKまたはLDKDなるオペレーションのデスティネーション である5ビットのレジスタの数を保持する。 SpecOpは、データサイズ(DSz)フィールド666が置換されるべき か否かを決定するためにチェックされる。DSzフィールドの代わりに置換され る値は、エミュレーション環境がオペランドサイズオーバーライドによりオーバ ーライドされたときの現在セグメントデフォルト情報に基づいて定義されたとき 、エミュレーションコードシーケンサ510により、Op処理の前に決定される 。DSzフィールド666は1バイト、4バイトのサイズまたはロード定数オペ レーションLDK及びに対する代わりの定義されたDサイズに設定される。エミ ュレーションコードシーケンサ510は、SpecOpフォーマット666のD Szフィールド666に指定された置換値を置き換える。 SpecOpがロード定数、即ちデータ(LDKD)オペレーションである場 合、エミュレーションコードシーケンサ510はデータサイズ(DSz)フィー ルド666により指定された現在実効データサイズに基づいて17ビット即値( Imm17)フィールド670におけるデータを調節またはスケールする。17 ビット即値(Imm17)フィールドは、17ビットの定数、17ビットの符号 付き即値または14ビットのOpアドレスを含む。レジスタアドレス空間及びエミュレーションインタフェース プロセッサ120は従来型のx86レジスタアドレス空間と比較して拡張され たレジスタアドレス空間を実現している。プロセッサ120レジスタアドレス空 間は、5ビットでアドレス指定され、即ち25または32個のレジスタが定義さ れうる。8個のレジスタがx86アーキテクチャのレジスタに対応する。16個 の追加の一次レジスタが追加されている。データサイズ(DSz)フィールドは 直接または間接にオペレーションのデータサイズを指定する。1バイトのオペレ ーションに対しては、レジスタエンコーディングフィールドにより指定されたレ ジスタが 同じレジスタエンコーディングフィールドにより指定された2バイトまたは4バ イトのレジスタとは異なったものとなる。オペレーションのデータサイズは、オ ペレーションRegOps、SpeOps、及びLdStOpsのデータフィー ルド642に対して1バイト(1B)または2/4バイト(2B/4B)の何れか である。このデータサイズはLdStOpsのインデックス649及びベース6 46フィールドに対しては常に2/4バイト(2B/4B)である。 プロセッサ120レジスタフィールドエンコーディングは以下の通りである。 即値データー時レジスタは、値の差またはリトルエンディアン桁(little-end ian significance)の順番でt8から始めて使用される。“reg”及び“re gm”レジスタ番号は、Opデコード時に、Reg/RegMを“00xxx” で置換することによりエミュレーション環境からの現在3ビットレジスタ番号に より置き換えられる。この3ビットは、第1の8個のレジスタ(AX〜DI)の 中から1つのレジスタ を指定する。 Opフォーマットの生成及び拡張レジスタアドレス空間は、プロセッサ120 の柔軟な内部マイクロアーキテクチャの状態を定義する。x86アーキテクチャ 状態は、プロセッサ120のマイクロアーキテクチャの状態のサブセットである こともある。拡張レジスタアドレス空間は、x86レジスタアドレス空間と比較 して拡張された数の一次レジスタを備えている。24個のレジスタがプロセッサ 120の拡張レジスタアドレス空間により与えられ、これらのレジスタのうち8 つだけがx86アーキテクチャのレジスタに対応し、16個の一次レジスタが追 加されたものである。同様に、プロセッサ120は拡張された数のフラグレジス タを備えており、これらのうちいくつかがx86ステータスフラグに対応してい る。 例えば、プロセッサ120の一実施例においては、エミュレーションキャリー フラグが従来型のキャリーフラグ及び関連するエミュレーション環境に追加され て定義されている。従って、従来のadd命令は、キャリーフラグを設定し、プ ロセッサ120の持続的なアーキテクチャの状態を変化させるものとして定義さ れる。エミュレーションaddオペレーションは、エミュレーションキャリーフ ラグをセットし、従来型のキャリーフラグはセットしないように定義される。様 々な命令がエミュレーションキャリーフラグに基づく分岐を行うように定義され ているが、他の命令は従来型のキャリーフラグに基づいて分岐する。従って、プ ロセッサ120は従来型のマイクロアーキテクチャ状態とエミュレーションマイ クロアーキテクチャ状態と双方において同時に動作する。このエミュレーション 環境における動作により、プロセッサ120はエミュレーションマイクロシーケ ンスを実行すると共に目に見える(visible)マイクロアーキテクチャの状態を 変化させないようにすることができる。 第8図には、特定の実施例により代替技術が説明されている。x86命令セッ トのADDレジスタ命令は、modr/mバイトに先行するopcodeとして コード化される。ADD命令の8ビットopcodeフィールドは、命令がレジ スタ命令であるmodr/mバイトにおける使用と共に、エミュレーションコー ドROM232にADD RegM〜Regオペレーションに対するOpを生成 させる特定のROMエントリポイントを誘導するために用いられる。命令レジス タ512におけるreg及びregmフィールドは、regがAXになり、re gmがBXになるように指定する。reg及びregmフィールドは、命令レジ スタ512からOp置換回路522に供給され、それにより置換が行われる。オ ペレーションコードROM232は、限られた数のOpsのみに対するテンプレ ートを有し、Op置換回路522は、このテンプレートを埋め、複数の異なるO psを生成する。 リストされたプロセッサ120のレジスタフィールドエンコーディングでは、 レジスタAXがregコード00000によりハード的に特定されている。この 他、4つの可能なregエンコーディング、即ち110xxが、レジスタの置換 を指定する。この置換はエミュレートされる特定の命令、及び現在エミュレーシ ョン環境を含むプロセッサ120現在の状態に基づいてなされる。一般に、オペ レーションの置換及び実行は、(1)Regに対するエンコーディングをdes tフィールド620に入れ、(2)レジスタRegに対するエンコーディングを src1フィールド622に入れ、(3)RegMに対するエンコーディングを Imm8/Sec2フィールド628に入れ、(4)0を即値(I)フィールド 626に入れ、(5)データサイズにより指定された1、2、または4バイトを DSzフィールド618に入れることにより行われる。システム開示テキスト 本発明に基づく間接指定子を用いるエミュレーション回路を含む命令デコーダ を実現する様々なコンピュータシステムコンフィギュレーションが考えられる。 例えば、このようなコンピュータシステム(例えばコンピュータシステム100 0)は、本発明に基づく間接指定子を用いるエミュレーション回路を含む命令デ コーダを提供するプロセッサ120、メモリサブシステム(例えばRAM102 0)、ディスプレイアダプタ1010、ディスクコントローラ/アダプタ103 0、様々な入力/出力インタフェース及びアダプタ(例えば並列インタフェース 1009、直列インタフェース1008、LANアダプタ107等)、及び対応 する外部装置(例えばディスプレイデバイス1001,プリンタ1002、モデ ム1003、キーボード1006、及びデータ記憶装置)を含む。データ記憶装 置には、例えばハードディスク1032、フロッピーディスク1031、テープ ユニット、CD−ROM、ジュークボックス、RAID、フラッシュメモリ等の ような装置が含まれる。 本発明について様々な実施例を取り上げて説明したが、これらの実施例は例示 であり、本発明の範囲をこれらに限定するものではないということは理解されよ う。ここに開示した実施例の様々な変更、追加、及び改良が可能である。更に、 実施例の中でハードウェアとして実現された構造及び機能性は、別の実施例では ソフトウェア、ファームウェア、またはマイクロコードとして実現され得る。例 えば、本明細書においては、3つのローテータ430、432、及び434、3 つの命令レジスタ450、452、及び454、及び3つのショートデコーダS Dec0410、SDec11412、SDec2414を備えたショートデコ ード回路を有するマクロ命令デコーダが開示されているが、他の実施例では、異 なる数のショートデコーダ経路が採用される。2つのデコード経路を採用したデ コーダは非常に適切なものである。これらの実施例及び 他の実施例の変更、修正、追加、及び改良は請求の範囲に記載の本発明の範囲内 に収まり得るものである。請求の範囲 1.プロセッサ(120)内の命令デコーダエミュレーション回路(231)に おいて、 命令コードを保持するための命令レジスタ(512)であって、前記命令レジ スタが命令コード内に複数のエンコードされたビットフィールドを有する、該命 令レジスタと、 命令コードを受信するために前記命令レジスタに接続されるエントリポイント 回路(514)であって、前記エントリポイント回路が前記命令コードからエン トリポイントを導出する、該エントリポイント回路と、 前記導出されたエントリポイントを受信するために前記エントリポイント回路 に接続されるエミュレーションコードシーケンサ(510)であって、前記エミ ュレーションコードシーケンサ(510)が演算(Ops)のシーケンスを制御す る制御信号を発生する、該エミュレーションコードシーケンサと、 前記割当て信号を受信するために前記エミュレーションコードシーケンサ(5 10)に接続されるエミュレーションコードメモリ(520)であって、 前記エミュレーションコードメモリがOpシーケンス及びシーケンスコントロ ールコードを格納し、また前記エミュレーションコードメモリがOpシーケンス を出力するための第1の出力端子及びシーケンスコントロールコードを出力する ための第2の出力端子を有し、前記シーケンスコントロール出力端子が前記エミ ュレーションコードシーケンサ(510)に接続される、該エミュレーションコ ードメモリ(520)と、 Opシーケンスを受信するために前記エミュレーションコードメモリ(520 )第1出力端子に接続され、かつ前記命令コードの選択されたエンコードされた ビットフィールドを受信するために前記命令レジスタ (512)に接続されるオペレシーョン(Op)置換回路(522)であって、 前記Op置換回路(522)が前記命令コードビットフィールドの選択されたフ ィールドをOpシーケンスに置き換え、また前記Op置換回路(522)が前記命 令のビットフィールドにより指定される直接指定子及び間接指定子に従って置換 を制御する、該オペレーション置換回路とを有することを特徴とする命令デコー ダエミュレーション回路。 2.前記命令レジスタ(512)が現在命令及びエミュレーション環境を含むプ ロセッサ(120)の現在状態の組み合わせからセットされるフィールドを有す る複数のフィールドを含むことを特徴とする請求項1に記載の命令デコーダエミ ュレーション回路。 3.前記エミュレーション環境が、Regレジスタ内のmodr/m regフィールド及び RegMレジスタ内のmodr/m regmフィールドをロードし、前記Op置換回路(52 2)が前記Reg及びRegMレジスタを前記Opシーケンスの前記命令ビットコー ドフィールドの選択されたフィールドに置き換え、前記エミュレーションコード メモリ(520)が複数の異なるレジスタ仕様上のOpsオペレーティングを生成 するための単一ROMエントリポイントを含むことを特徴とする請求項1に記載 の命令デコーダエミュレーション回路。 4.前記エミュレーション環境が、データサイズ仕様をロードし、前記Op置換 回路(522)が前記データサイズ仕様を前記Opシーケンスの前記命令コード ビットフィールドのデータサイズフィールドに置き換え、前記エミュレーション コードメモリ(520)が複数の異なるデータサィズ上にOpsオペレーティング を生成するための単一ROMエントリポイントを含むことを特徴とする請求項1 に記載の命令デコーダエミュレーション回路。 5.前記エミュレーション環境が、メモリセグメント記述子をロードし、 前記Op置換回路(522)が前記メモリセグメント記述子を前記Opシーケンス の前記命令ビットコードフィールドのセグメント記述子フィールドに置き換え、 前記エミュレーションコードメモリ(520)が複数の異なるメモリセグメント 内にOpsオペレーティングを生成するための単一ROMエントリポイントを含む ことを特徴とする請求項1に記載の命令デコーダエミュレーション回路。 6.前記エミュレーション環境が、アドレスサイズ仕様をロードし、前記Op置 換回路(522)が前記アドレスサイズ仕様をASzフィールドに置き換えるこ とを特徴とする請求項1に記載の命令デコーダエミュレーション回路。 7.前記エミュレーション環境が、データサイズ仕様をロードし、前記Op置換 回路(522)が前記データサイズ仕様をDSzフィールドに置き換えることを 特徴とする請求項1に記載の命令デコーダエミュレーション回路。 8.プロセッサ(120)内の命令デコーダエミュレーション回路(231)を 動作させるための方法において、 命令コード内に複数のエンコードされたビットフィールドを有する命令レジス タ(512)内の命令コードを受信する過程と、 プロセッサ状態に従って各前記複数のエンコードされたビットフィールドを選 択的に更新する過程と、 前記命令コードかエントリポイントを導出する過程と、 前記導出されたエントリポイントに従って複数のOpシーケンスを格納する、 エミュレーションコードメモリ(520)をアドレス指定する過程と、 前記エミュレーションコードメモリ(520)からアドレス指定されたオペレ ーションを出力する過程と、 前記命令コードが選択されたエンコードされたビットフィールドを前記アドレ ス指定されたオペレーションに置き換える過程と、 前記命令のビットフィールドにより指定される直接指定子及び間接指定子に従 って置換を制御する過程とを有することを特徴とする方法。 9.前記方法がさらに、 命令コード内に複数のエンコードされたビットフィールドを有する命令レジス タ(512)内の命令コードを受信する過程と、 プロセッサ状態に従って各前記複数のエンコードされたビットフィールドを選 択的に更新する過程と、 前記命令コードかエントリポイントを導出する過程と、 前記導出されたエントリポイントを受信し、オペレーションのシーケンス(O ps)を制御するための制御信号を生成する過程と、 前記導出されたエントリポイントに従って複数のOpシーケンスを格納する、 エミュレーションコードメモリ(520)をアドレス指定する過程と、 前記エミュレーションコードメモリ(520)からアドレス指定されたオペレ ーションを出力する過程と、 前記エミュレーションコードメモリからの前記シーケンスコントロール信号を 受信し、かつ出力する過程と、 前記エミュレーションコードメモリからのOpシーケンスを受信し、かつ前記 命令レジスタから受信した前記命令コードの選択されるエンコードされたビット フィールドをアドレス指定されたオペレーションに置き換える過程と、 前記命令のビットフィールドにより指定される直接指定予及び間接指定子に従 って置換を制御する過程とを有することを特徴とする方法。 10.スーパスケーラプロセッサ用の命令デコーダ(220)において、 第1のタイプの命令の所定グループ内の複数の命令を同時にデコードするため の複数の第1のタイプのマクロ命令デコーダ(410,412,414)と、 請求項1に記載があるような命令デコーダエミュレーション回路(231)と を有することを特徴とする命令デコーダ。 11.CISC型命令をRISC型オペレーションに変換するためのスーパスケ ーラプロセッサ内の命令デコーダにおいて、 複数の第1のタイプのマクロ命令デコーダが第1のCISC型命令の所定グル ープ内の複数のCISC型命令を同時にデコードし 前記エミュレーションROMデコーダによりデコードされる命令コードが第2 のCISC型命令コードであることを特徴とする請求項10に記載のスーパスケ ーラ用命令デコーダ。 12.コンピュータシステムにおいて、 データ及び命令を格納するためのメモリサブシステムと、 前記メモリサブシステム内に格納される前記データ及び命令にアクセスするた めに動作可能に接続されるプロセッサであって、前記プロセッサが請求項10に 記載があるような命令デコーダ(220)を含む、該プロセッサとを有すること を特徴とするコンピュータシステム。 13.プロセッサのためのデコーダにおいて、 前記デコーダが請求項1に記載があるような命令デコーダエミュレーション回 路(231)を含むことを特徴とするデコーダ。
───────────────────────────────────────────────────── フロントページの続き (31)優先権主張番号 592,208 (32)優先日 1996年1月26日 (33)優先権主張国 米国(US) (31)優先権主張番号 649,980 (32)優先日 1996年5月16日 (33)優先権主張国 米国(US) (81)指定国 EP(AT,BE,CH,DE, DK,ES,FI,FR,GB,GR,IE,IT,L U,MC,NL,PT,SE),OA(BF,BJ,CF ,CG,CI,CM,GA,GN,ML,MR,NE, SN,TD,TG),AP(KE,LS,MW,SD,S Z,UG),UA(AM,AZ,BY,KG,KZ,MD ,RU,TJ,TM),AL,AM,AT,AU,AZ ,BA,BB,BG,BR,BY,CA,CH,CN, CU,CZ,DE,DK,EE,ES,FI,GB,G E,HU,IL,IS,JP,KE,KG,KP,KR ,KZ,LC,LK,LR,LS,LT,LU,LV, MD,MG,MK,MN,MW,MX,NO,NZ,P L,PT,RO,RU,SD,SE,SG,SI,SK ,TJ,TM,TR,TT,UA,UG,UZ,VN

Claims (1)

  1. 【特許請求の範囲】 1.プロセッサ内の命令デコーダエミュレーション回路において、 命令コードを保持するための命令レジスタであって、前記命令レジスタが命令 コード内に複数のエンコードされたビットフィールドを有する、該命令レジスタ と、 命令コードを受信するために前記命令レジスタに接続されるエントリポイント 回路であって、前記エントリーポイント回路が前記命令コードからエントリポイ ントを導出する、該エントリポイント回路と、 前記導出されたエントリポイントを受信するために前記エントリポイント回路 に接続されるエミュレーションコードシーケンサであって、前記エミュレーショ ンコードシーケンサが演算(Ops)のシーケンスを割り当て、また前記エミュレ ーションコードシーケンサが前記割り当てられたシーケンスに従って割当て信号 を発生する、該エミュレーションコードシーケンサと、 前記割当て信号を受信するために前記エミュレーションコードシーケンサに接 続されるエミュレーションコードメモリであって、 前記エミュレーションコードメモリがOpシーケンス及びシーケンスコントロ ールコードを格納し、また前記エミュレーションコードメモリがOpシーケンス を出力するための第1の出力端子及びシーケンスコントロールコードを出力する ための第2の出力端子を有し、前記シーケンスコントロール出力端子が前記エミ ュレーションコードシーケンサに接続される、該エミュレーションコードメモリ と、 Opシーケンスを受信するために前記エミュレーションコードメモリ第1出力 端子に接続され、かつ前記命令コードの選択されたエンコードされたビットフィ ールドを受信するために前記命令レジスタに接続されるオペレシーョン(Op) 置換回路であって、前記Op置換回路が前記命 令コードビットフィールドの選択されたフィールドをOpシーケンスに置き換え る、該オペレーション置換回路とを有することを特徴とする命令デコーダエミュ レーション回路。 2.前記命令レジスタが現在命令及びエミュレーション環境を含むプロセッサの 現在状態の組み合わせからセットされるフィールドを有する複数のフィールドを 含むことを特徴とする請求項1に記載の命令デコーダエミュレーション回路。 3.前記エミュレーション環境が、Regレジスタ内のmodr/m regフィールド及び RegMレジスタ内のmodr/m regmフィールドをロードし、前記Op置換回路が前記 Reg及びRegMレジスタを前記Opシーケンスの前記命令ビットコードフィール ドの選択されたフィールドに置き換え、前記エミュレーションコードメモリが複 数の異なるレジスタ仕様上のOpsオペレーティングを生成するための単一ROM エントリポイントを含むことを特徴とする請求項1に記載の命令デコーダエミュ レーション回路。 4.前記エミュレーション環境が、データサイズ仕様をロードし、前記Op置換 回路が前記データサイズ仕様を前記Opシーケンスの前記命令コードビットフィ ールドのデータサイズフィールドに置き換え、前記エミュレーションコードメモ リが複数の異なるデータサイズ上にOpsオペレーティングを生成するための単一 ROMエントリポイントを含むことを特徴とする請求項1に記載の命令デコーダ エミュレーションエミュレーション回路。 5.前記エミュレーション環境が、メモリセグメント記述子をロードし、前記O p置換回路が前記メモリセグメント記述子を前記Opシーケンスの前記命令ビット コードフィールドのセグメント記述子フィールドに置き換え、前記エミュレーシ ョンコードメモリが複数の異なるメモリセ グメント内にOpsオペレーティングを生成するための単一ROMエントリポイン トを含むことを特徴とする請求項1に記載の命令デコーダエミュレーション回路 。 6.前記エミュレーション環境が、アドレスサイズ仕様をロードし、前記Op置 換回路が前記アドレスサイズ仕様をASzフィールドに置き換えることを特徴と する請求項1に記載の命令デコーダエミュレーション回路。 7.前記エミュレーション環境が、データサイズ仕様をロードし、前記Op置換 回路が前記データサイズ仕様をDSzフィールドに置き換えることを特徴とする 請求項1に記載の命令デコーダエミュレーション回路。 8.プロセッサ内の命令デコーダエミュレーション回路を動作させるための方法 において、 命令コード内に複数のエンコードされたビットフィールドを有する命令レジス タ内の命令コードを受信する過程と、 プロセッサ状態に従って各前記複数のエンコードされたビットフィールドを選 択的に更新する過程と、 前記命令コードかエントリポイントを導出する過程と、 前記導出されたエントリポイントに従って複数のOpシーケンスを格納する、 エミュレーションコードメモリをアドレス指定する過程と、 前記エミュレーションコードメモリからアドレス指定されたオペレーションを 出力する過程と、 前記命令コードが選択されたエンコードされたビットフィールドを前記アドレ ス指定されたオペレーションに置き換える過程とを有することを特徴とする方法 。 9.スーパスケーラプロセッサ内の命令デコーダにおいて、 第1のタイプの命令の所定グループ内の複数の命令を同時にデコード するための複数の第1のタイプのマクロ命令デコーダと、 前記複数のマクロ命令デコーダに接続されるエミュレーションROMデコーダ とを有することを特徴とし、 前記エミュレーションROMデコーダが、 前記命令コード内に複数のエンコードされたビットフィールドを有する、前 記命令コード保持するための命令レジスタと、 前記命令コードを受信するために前記命令レジスタに接続されるエントリポ イント回路であって、前記エントリポイント回路が前記命令コードからエントリ ポイントを導出する、該エントリポイント回路と、 前記導出されたエントリポイントを受信するために前記エントリポイント回 路に接続されるエミュレーション回路シーケンサであって、前記エミュレーショ ンコードシーケンサがオペレーション(Ops)のシーケンスを割り当て、また前 記エミュレーションコードシーケンサが前記割り当てられたシーケンスに従って 割当て信号を発生する、該エミュレーションコードシーケンサと、 前記割当て信号を受信するために前記エミュレーションコードシーケンサに 接続されるエミュレーションコードメモリであって、前記エミュレーションコー ドメモリコードが複数のOpシーケンス及びシーケンスコントロールコードを格 納し、また前記エミュレーションコードメモリがOpシーケンスを出力するため の第1の出力端子及びシーケンスコントロールコードを出力するための第2の出 力端子を有し、前記シーケンスコントロールコード出力端子が前記エミュレーシ ョンコードシーケンサに接続される、該エミュレーションコードメモリと、 Opシーケンスを受信するために前記エミュレーションコードメモリの第1 の出力端子に接続され、かつ前記命令コードの選択されるエンコードされたビッ トフィールドを受信するために前記命令レジスタに接 続されるオペレーション(Op)置換回路であって、前記Op置換回路が前記命令 コードビットフィールドの選択されたフィールドを前記Opシーケンスに置き換 える、該オペレーション置換回路とを有することを特徴とする命令デコーダ。 10.プロセッサ内の命令デコーダエミュレーション回路において、 命令コードを保持するための命令レジスタであって、前記命令レジスタが前記 命令コード内に複数のエンコードされたビットフィールドを有する、該命令レジ スタと、 前記命令コードを受信し、かつ前記命令コードからエントリポイントを導出す るために前記命令レジスタに接続される手段と、 前記導出されたエントリポイントを受信し、かつオペレーション(Ops)のシ ーケンスを割り当てるために、前記エントリポイント導出に接続される手段と、 前記割り当てられたシーケンスに従って割当て信号を生成するために前記受信 及び割当て手段に接続される手段と、 複数のOpシーケンス及びシーケンスコントロールコードを格納するために前 記割当て信号生成手段に接続されるエミュレーションコードメモリであって、前 記エミュレーションコードメモリがOpシーケンスを出力し、また前記エミュレ ーションコードメモリがシーケンスコントロールコードを出力し、前記シーケン スコントロールコード出力端子が前記エミュレーションコードシーケンサに接続 される、該エミュレーションコードメモリと、 Opシーケンスを受信するために前記エミュレーションコードメモリに接続さ れ、かつ前記命令コードの選択されるエンコードされたビットフィールドを受信 するために前記命令レジスタに接続されるオペレーション(Op)置換回路であ って、前記Op置換回路が前記命令コードビッ トフィールドの選択されたフィールドを前記Opシーケンスに置き換える、該オ ペレーション置換回路とを有することを特徴とする命令デコーダエミュレーショ ン回路。 11.前記命令レジスタが現在命令及びエミュレーション環境を含むプロセッサ の現在状態の組み合わせからセットされるフィールドを有する複数のフィールド を含むことを特徴とする請求項10に記載の命令デコーダエミュレーション回路 。 12.前記エミュレーション環境が、Regレジスタ内のmodr/m regフィールド及 びRegMレジスタ内のmodr/m regmフィールドをロードし、前記Op置換回路が前 記Reg及びRegMレジスタを前記Opシーケンスの前記命令コードビットフィー ルドの選択されたフィールドに置き換え、前記エミュレーションコードメモリが 複数の異なるレジスタ仕様上のOpsオペレーティングを生成するための単一RO Mエントリポイントを含むことを特徴とする請求項10に記載の命令デコーダエ ミュレーション回路。 13.前記エミュレーション環境が、データサイズ仕様をロードし、前記Op置 換回路が前記データサイズ仕様を前記Opシーケンスの前記命令コードビットフ ィールドのデータサイズフィールドに置き換え、前記エミュレーションコードメ モリが複数の異なるデータサイズ上Opsオペレーティングを生成するための単一 ROMエントリポイントを含むことを特徴とする請求項10に記載の命令デコー ダエミュレーション回路。 14.前記エミュレーション環境が、メモリセグメント記述子をロードし、前記 Op置換回路が前記メモリセグメント記述子を前記Opシーケンスの前記命令コー ドビットフィールドのセグメント記述子フィールドに置き換え、前記エミュレー ションコードメモリが複数の異なるメモリセグメント内のOpsオペレーティング を生成するための単一ROMエン トリポイントを含むことを特徴とする請求項10に記載の命令デコーダエミュレ ーション回路。 15.前記エミュレーション環境が、アドレスサイズ仕様をロードし、前記Op 置換回路が前記アドレスサイズ仕様をASzフィールドに置き換えることを特徴 とする請求項10に記載の命令デコーダエミュレーション回路。 16.前記エミュレーション環境が、データサイズ仕様をロードし、前記Op置 換回路が前記データサイズ仕様をDSzフィールドに置き換えることを特徴とす る請求項10に記載の命令デコーダエミュレーション回路。 17.CISC型命令をRISC型オペレーションに変換するためのスーパスケ ーラプロセッサ内の命令デコーダにおいて、 第1のCISC型命令の所定グループ内の複数のCISC型命令を同時にデコ ードするための複数の第1のタイプのマクロ命令デコーダと、 第2のCISC型命令をRISC型オペレーションに、デコードするために前 記複数のマクロ命令デコーダに接続されるエミュレーションROMデコーダとを 有することを特徴とし、 前記エミュレーションROMデコーダが、 第2のCISC型命令コードを保持するための命令レジスタであって、前記 命令レジスタが前記命令コード内に複数のエンコードされたビットフィールドを 有する、該命令レジスタと、 第2のCISC型命令コードを受信するために前記命令レジスタに接続され るエントリポイント回路であって、前記エントリポイント回路が前記第2のCI SC型命令コードからエントリポイントを導出する、該エントリポイント回路と 、 前記導出されたエントリポイントを受信するために前記エントリポ イント回路に接続されるエミュレーションコードシーケンサであって、前記エミ ュレーションコードシーケンサがオペレーション(Ops)のシーケンスを割り当 て、また前記エミュレーションコードシーケンサが前記割り当てられたシーケン スに従って割当て信号を生成する、該エミュレーションコードシーケンサと、 前記割当て信号を受信するために前記エミュレーションコードシーケンサに 接続されるエミュレーションコードメモリであって、前記エミュレーションコー ドメモリが複数のOpシーケンス及びシーケンスコントロールコードを格納し、 また前記エミュレーションコードメモリがOpシーケンスを出力するための第1 の出力端子及びシーケンスコントロールコードを出力するための第2の出力端子 を有し、前記シーケンスコントロールコード出力端予が前記エミュレーションコ ードシーケンサに接続される、該エミュレーションコードメモリと、 Opシーケンスを受信するための前記エミュレーションコードメモリの第1 の出力端子に接続され、かつ前記命令コードが選択されるエンコードされたビッ トフィールドを受信するための前記命令レジスタに接続されるオペレーション( Op)置換回路であって、前記Op置換回路が前記命令コードビットフィールドの 選択されたフィールドを前記Opシーケンスに置き換える、該オペレーション置 換回路とを有することを特長とする命令デコーダ。 18.コンピュータシステムであって、 データ及び命令を格納するためのメモリサブシステムと、 前記メモリサブシステム内に格納される前記データ及び命令にアクセスするた めに実行可能に接続される命令デコーダを含むプロセッサとを有することを特徴 とし、 前記命令デコーダさらに、 第1のタイプの命令の所定グループ内の複数の命令を同時にデコードするた めの複数の第1のタイプのマクロ命令デコーダと 前記複数のマクロ命令デコーダに接続されるエミュレーションROMデコー ダとを含むことを特徴とし、 前記マクロ命令デコーダが、 命令コードを保持するための命令レジスタであって、前記命令レジスタが 前記命令コード内に複数のエンコードされたビットフィールドを有する、該命令 レジスタと、 命令コードを受信するために前記命令レジスタに接続されるエントリポイ ント回路であって、前記エントリポイント回路が前記命令コードからエントリポ イントを導出する、該エントリポイント回路と、 前記導出されたエントリポイントを受信するために前記エントリポイント 回路に接続されるエミュレーションコードシーケンサであって、前記エミュレー ションコードシーケンサがオペレーション(Ops)のシーケンスを割り当て、ま た前記エミュレーションコードシーケンサが前記割り当てられたシーケンスに従 って割当て信号を生成する、該エミュレーションコードシーケンサと、 前記割当て信号を受信するために前記エミュレーションコードシーケンサ に接続されるエミュレーションコードメモリであって、前記エミュレーションコ ードメモリが複数のOpシーケンス及びシーケンスコントロールコードを格納し 、また前記エミュレーションコードメモリがOpシーケンスを出力するための第 1の出力端子及びシーケンスコントロールコードを出力するための第2の出力端 子を有し、前記シーケンスコントロールコード出力端子が前記エミュレーション コードシーケンサに接続される、該エミュレーションコードメモリと、 Opシーケンスを受信するために前記エミュレーションコードメ モリの第1の出力端子に接続され、かつ前記命令コードの選択されるエンコード されたビットフィールドを受信するために前記命令レジスタに接続されるオペレ ーション(Op)置換回路であって、前記Op置換回路が前記命令コードビットフ ィールドの選択されたフィールドを前記Opシーケンスに置き換える、該オペレ ーション置換回路とを有することを特徴とするコンピュータシステム。 19.デコーダを有するプロセッサにおいて、前記デコーダが命令デコーダエミ ュレーション回路を含み、前記命令デコーダエミュレーション回路が、 命令コードを保持するための命令レジスタであって、前記命令レジスタが前記 命令コード内に複数のエンコードされたビットフィールドを有する、該命令レジ スタと、 命令コードを受信するための前記命令レジスタに接続されるエントリポイント 回路であって、前記エントリポイント回路が前記命令コードからエントリポイン トを導出する、該エントリポイント回路と、 前記導出されたエントリポイントを受信するために前記エントリポイント回路 に接続されるエミュレーションコードシーケンサであって、前記エミュレーショ ンコードシーケンサがオペレーション(Ops)のシーケンスを割り当て、また前 記エミュレーションコードシーケンサが前記割り当てられたシーケンスに従って 割当て信号を発生する、該エミュレーションコードシーケンサと、 前記割当て信号を受信するために前記エミュレーションコードシーケンサに接 続されるエミュレーションコードメモリであって、前記エミュレーションコード メモリが複数のOpシーケンス及びシーケンスコントロールコードを格納し、ま た前記エミュレーションコードメモリがOpシーケンスを出力するための第1の 出力端子及びシーケンスコントロー ルコードを出力するための第2の出力端子を有し、前記シーケンスコントロール コード出力端子が前記エミュレーションコードシーケンサに接続される該エミュ レーションコードメモリと、 Opシーケンスを受信するために前記エミュレーションコードメモリの第1の 出力端子に接続され、かつ前記命令コードの選択されるエンコードされたビット フィールドを受信するために前記命令レジスタに接続されるオペレーション(O p)置換回路であって、前記Op置換回路が前記命令コードビットフィールドの選 択されたフィールドを前記Opシーケンスに置き換える、該オペレーション置換 回路とを有することを特徴とするデコーダ。
JP9514328A 1995-10-06 1996-10-04 間接指定子を用いるエミュレーションを含む命令デコーダ Pending JPH11510288A (ja)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US592,208 1990-10-03
US506995P 1995-10-06 1995-10-06
US502195P 1995-10-10 1995-10-10
US59220896A 1996-01-26 1996-01-26
US649,980 1996-05-16
US60/005,069 1996-05-16
US08/649,980 US5794063A (en) 1996-01-26 1996-05-16 Instruction decoder including emulation using indirect specifiers
US60/005,021 1996-05-16
PCT/US1996/015421 WO1997013195A1 (en) 1995-10-06 1996-10-04 Instruction decoder including emulation using indirect specifiers

Publications (1)

Publication Number Publication Date
JPH11510288A true JPH11510288A (ja) 1999-09-07

Family

ID=27485440

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9514328A Pending JPH11510288A (ja) 1995-10-06 1996-10-04 間接指定子を用いるエミュレーションを含む命令デコーダ

Country Status (5)

Country Link
EP (1) EP0853782B1 (ja)
JP (1) JPH11510288A (ja)
AU (1) AU7246496A (ja)
DE (1) DE69613586T2 (ja)
WO (1) WO1997013195A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9703562B2 (en) 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11204768B2 (en) 2019-11-06 2021-12-21 Onnivation Llc Instruction length based parallel instruction demarcator

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
DE69427265T2 (de) * 1993-10-29 2002-05-02 Advanced Micro Devices Inc Superskalarbefehlsdekoder
GB2289354B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9703562B2 (en) 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems

Also Published As

Publication number Publication date
DE69613586D1 (de) 2001-08-02
WO1997013195A1 (en) 1997-04-10
DE69613586T2 (de) 2002-04-25
EP0853782A1 (en) 1998-07-22
AU7246496A (en) 1997-04-28
EP0853782B1 (en) 2001-06-27

Similar Documents

Publication Publication Date Title
KR100513358B1 (ko) Risc형명령세트및슈퍼스칼라마이크로프로세서
EP0853789B1 (en) Flexible implementation of a system management mode (smm) in a processor
US5909567A (en) Apparatus and method for native mode processing in a RISC-based CISC processor
US5598546A (en) Dual-architecture super-scalar pipeline
AU631419B2 (en) Branch prediction
Ditzel et al. Branch folding in the CRISP microprocessor: Reducing branch delay to zero
CA1324671C (en) Decoding multiple specifiers in a variable length instruction architecture
US5142633A (en) Preprocessing implied specifiers in a pipelined processor
EP0853781B1 (en) Instruction buffer organization method and system
US5167026A (en) Simultaneously or sequentially decoding multiple specifiers of a variable length pipeline instruction based on detection of modified value of specifier registers
US20060174089A1 (en) Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture
JPH0773036A (ja) 命令シーケンスを識別してタグを付加する方法
KR20010092736A (ko) 데이터 밀도가 높은 risc 프로세서
US5812809A (en) Data processing system capable of execution of plural instructions in parallel
US5461715A (en) Data processor capable of execution of plural instructions in parallel
EP0853783B1 (en) Instruction decoder including two-way emulation code branching
JPH11510288A (ja) 間接指定子を用いるエミュレーションを含む命令デコーダ
US5745723A (en) Data processing system capable of execution of plural instructions in parallel
Song Demystifying epic and ia-64
EP0853779B1 (en) Instruction predecode and multiple instruction decode