JP3792696B2 - 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置 - Google Patents

単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置 Download PDF

Info

Publication number
JP3792696B2
JP3792696B2 JP2003417823A JP2003417823A JP3792696B2 JP 3792696 B2 JP3792696 B2 JP 3792696B2 JP 2003417823 A JP2003417823 A JP 2003417823A JP 2003417823 A JP2003417823 A JP 2003417823A JP 3792696 B2 JP3792696 B2 JP 3792696B2
Authority
JP
Japan
Prior art keywords
instruction
register file
floating point
packed data
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2003417823A
Other languages
English (en)
Other versions
JP2004152318A (ja
Inventor
リン,デリック
ヴァッカラガッダ,ラマモハン・アール
グルー,アンドリュー・エフ
メネマイヤー,ラリー・エム
ペレグ,アレギザンダー・ディ
ビストリー,デイヴィッド
ミタル,ミリンド
デュロング,キャロル
英一 小鷲
エイタン,ベニー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2004152318A publication Critical patent/JP2004152318A/ja
Application granted granted Critical
Publication of JP3792696B2 publication Critical patent/JP3792696B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

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

Description

本発明は、コンピュータ・システムの分野に関する。詳細には、本発明は、プロセッサによって浮動小数点命令およびパック・データ命令を実行することに関する。
典型的なコンピュータ・システムでは、プログラムされた命令に応答して、1つまたは複数のプロセッサが、多数のビット(たとえば、16、32、64など)で表されたデータ値を処理して結果を生成する。たとえば、加算命令を実行すると、第1のデータ値と第2のデータ値が加えられ、結果が第3のデータ値として記憶される。しかし、マルチメディア・アプリケーション(たとえば、コンピュータ・サポーテッド・コーペレーション(CSC−電話会議と混合媒体データ処理を統合したもの)、2D/3Dグラフィックス、画像処理、ビデオ圧縮/圧縮解除、認識アルゴリズム、オーディオ処理を対象とするアプリケーション)では、より小数のビットで表されることが多い大量のデータを処理する必要がある。たとえば、マルチメディア・データは通常、64ビット数で表されるが、有意の情報を伝達するのは小数のビットだけである。
マルチメディア・アプリケーション(ならびに同じ特性を有するその他のアプリケーション)の効率を向上させるために、従来技術のプロセッサはパック・データ・フォーマットを使用する。パック・データ・フォーマットとは、単一の値を表すために使用されるビットが、それぞれ、別々の値を表す、いくつかの固定サイズのデータ要素に分割されるフォーマットである。たとえば、64ビット・レジスタ内のデータは、それぞれ、別々の32ビット値を表す、2つの32ビット要素に分割することができる。
ヒューレット・パッカード社の基本32ビット・アーキテクチャ・マシンはこの手法を使用してマルチメディア・データ・タイプを実装していた。すなわち、プロセッサは32ビット汎用整数レジスタを並行して使用して64ビット・データ・タイプを実施していた。この簡単な手法の主要な欠点は、利用可能なレジスタ空間が厳しく制限されることである。また、既存のアーキテクチャを拡張するために必要な作業に鑑み、このようにマルチメディア・データを処理することの性能上の利点は最小限のものであるとみなされている。
Motorola(登録商標)88110TMプロセッサで使用されている同様な手法では、整数レジスタ対が組み合わされる。2つの32ビット・レジスタを対にするこの方法では、単一の演算または命令に関して指定されたレジスタのランダム組合せが連結される。しかし、この場合も、レジスタ対を使用して64ビット・マルチメディア・データ・タイプを用いることの主要な欠点は、限られた数のレジスタ対しか使用できないということである。アーキテクチャに追加レジスタ空間を加えずに、マルチメディア・データ・タイプを用いる他の技法が必要である。
大規模なソフトウェア・ハードウェア・ベースを有する1つのプロセッサ・ラインは、カリフォルニア州サンタクララのインテル社によって製造されている、Pentium(登録商標)プロセッサを含むインテル・アーキテクチャ・プロセッサ・ファミリである。図1は、Pentiumプロセッサを使用した例示的なコンピュータ・システム100を示すブロック図である。この図に示したよりも詳しいPentiumプロセッサの説明については、カリフォルニア州サンタクララのインテル社から入手することのできる「Pentium Processor’s Users Manual−Volume 3; Architecture and Programming Manual」(1994年)を参照されたい。例示的なコンピュータ・システム100は、プロセッサ105と、記憶装置110と、バス115とを含む。プロセッサ105はバス115によって記憶装置110に結合される。また、キーボード120やディスプレイ125などいくつかのユーザ入出力装置もバス115に結合される。ネットワーク130をバス115に結合することもできる。プロセッサ105はPentiumプロセッサを表す。記憶装置110は、データを記憶する1つまたは複数の機構を表す。たとえば、記憶装置110には、読取り専用メモリ(ROM)や、ランダム・アクセス・メモリ(RAM)や、磁気ディスク記憶媒体や、光学記憶媒体や、フラッシュ・メモリ装置や、その他の機械可読媒体を含めることができる。バス115は、1つまたは複数のバス(たとえば、PCI、ISA、X−Bus、EISA、VESAなど)およびブリッジ(バス・コントローラとも呼ばれる)を表す。
図1は、プロセッサ105上で実行されるオペレーティング・システム132が記憶装置110に記憶されていることも示している。もちろん、記憶装置110は好ましくは、追加ソフトウェア(図示せず)を含む。図1は、プロセッサ105が浮動小数点装置135と浮動小数点状態レジスタ155とを含む(本明細書では、「浮動小数点」を示すために表記「FP」を使用する)ことも示している。もちろん、プロセッサ105は、本発明を理解するうえで必要とされない追加回路を含む。
浮動小数点装置135は、浮動小数点データを記憶するために使用され、1組の浮動小数点レジスタ(浮動小数点レジスタ・ファイルとも呼ぶ)145と、1組のタグ150と、浮動小数点状態レジスタ155とを含む。1組の浮動小数点レジスタ145は、R0ないしR7(本明細書では、浮動小数点レジスタの物理的位置を示すために表記Rnを使用している)で示された8つのレジスタを含む。この8つのレジスタはそれぞれ、80ビット幅であり、符号フィールド(ビット79)と、指数フィールド(ビット[78:64])と、小数部フィールド(ビット[63:0])とを含む。浮動小数点装置135は1組の浮動小数点レジスタ145をスタックとして操作する。言い換えれば、浮動小数点装置135はスタック参照レジスタ・ファイルを含む。1組のレジスタをスタックとして操作すると、動作は、1組の浮動小数点レジスタ145内のレジスタの物理的位置ではなくスタックの1番上の浮動小数点レジスタを参照することによって実行される(本明細書では、スタックの1番上の浮動小数点レジスタに対する論理浮動小数点レジスタnの相対位置を示すために表記STnを使用する)。浮動小数点状態レジスタ155は、1組の浮動小数点レジスタ145内のどのレジスタが現在、浮動小数点スタックの1番上にあるかを識別するトップ・オブ・スタック・フィールド160を含む。図1では、トップ・オブ・スタック表示は、物理位置R4にあるレジスタ165をスタックの1番上のレジスタとして識別している。
1組のタグ150は8つのタグを含み、単一のレジスタに格納される。各タグは、それぞれの異なる浮動小数点レジスタに対応し、2つのビットを備える。図1に示したように、タグ170はレジスタ165に対応する。タグは、そのタグが対応する浮動小数点レジスタの現在の内容に関する情報を識別する。すなわち、00=有効、01=零、10=特殊、11=空である。これらのタグは、空レジスタ位置と非空レジスタ位置を区別するために浮動小数点装置135によって使用される。したがって、タグは、11で示される空と、00、01、10のうちの1つで示される非空の2つの状態を識別するともみることができる。
これらのタグを使用してイベントを処理することもできる。「イベント」とは、ハードウェア割込み、ソフトウェア割込み、例外、障害、トラップ、アボート、マシン・チェック、アシスト、デバッグ・イベントとを含め、コンピュータ・システムが応答することのできるアクションまたはオカレンスである。イベントを受け取ると、プロセッサのイベント処理機構によって、プロセッサは現プロセスの実行に割り込み、割り込まれたプロセスの実行環境(すなわち、割り込まれたプロセスの実行を再開するのに必要な情報)を記憶し、適切なイベント・ハンドラを呼び出しイベントを処理する。イベントを処理した後、イベント・ハンドラはプロセッサに、すでに記憶されているプロセスの実行環境を使用して、割り込まれたプロセスを再開させる。イベント・ハンドラのプログラマは、これらのタグを使用してそれぞれの異なる浮動小数点レジスタの内容を検査し、イベントをよりうまく処理することができる。
各タグを2つのビットを含むものとして説明したが、代替実施形態では、各タグごとに1ビットのみを格納することができる。このような1ビット・タグはそれぞれ、空と非空のどちらかを識別する。そのような実施形態では、タグ値が必要なときに適切な2ビット・タグ値を決定することによって、このような1ビット・タグをユーザからは2ビットを備えるように見えるようにすることができる。
状態レジスタ140は、それぞれ、EM表示とTS表示を格納する、EMフィールド175とTSフィールド180を含む。EM表示が1であり、あるいはTS表示が1であり、あるいはその両方である場合、プロセッサ・ハードウェアにより、浮動小数点命令実行時に「装置使用不能」例外が発生することによってオペレーティング・システムがトラップされる。ソフトウェア規約によれば、EM表示およびTS表示はそれぞれ、浮動小数点命令をエミュレートし、マルチタスクを実施するために使用される。しかし、これらの表示を使用することはソフトウェア規約に過ぎない。したがって、どちらかの表示または両方の表示を任意の目的に使用することができる。たとえば、EM表示を使用してマルチタスクを実施することができる。
前述のソフトウェア規約によれば、EMフィールド175は、ソフトウェアを使用して浮動小数点装置をエミュレートすべきであるかどうかを識別する浮動小数点エミュレート表示(「EM表示」)を格納するために使用される。システムのブート時には通常、一連の命令または単一の命令(たとえば、CPUID)が実行され、浮動小数点装置が存在するかどうかが判定され、必要に応じてEM表示が変更される。したがって、EM表示は通常、プロセッサが浮動小数点装置を含まないときに浮動小数点装置をエミュレートすべきであることを示すように変更される。一実施態様では、浮動小数点装置をエミュレートすべきであるときEM表示は1に等しく、代替実施態様では他の値を使用することができる。
オペレーティング・システムを使用することによって、多くのプロセッサは、コオペラティブ・マルチタスクやタイムスライス・マルチタスクなどの技法を使用していくつかのプロセス(本明細書ではタスクと呼ぶ)をマルチタスク化することができる。プロセッサは、一度に1つのタスクしか実行できないので、様々なタスクを切り換えることによって、様々なタスク間で処理時間を分割しなければならない。プロセッサがあるタスクから他のタスクに切り換えたとき、タスク切換(「コンテキスト切換」または「プロセス切換」とも呼ぶ)が行われたと言う。タスク切換を実行するには、プロセッサはあるタスクの実行を停止し、他のタスクの実行を再開または開始しなければならない。タスク切換の後にタスクの実行を再開するために内容を保存しなければならない(浮動小数点レジスタを含む)いくつかのレジスタがある。タスクの実行時の所与の時間のこれらのレジスタの内容をそのタスクの「レジスタ状態」と呼ぶ。いくつかのプロセスをマルチタスク化する間、タスクの「レジスタ状態」は、他のプロセスの実行時に、プロセッサの外部のメモリに含まれるデータ構造(タスクの「コンテキスト構造」と呼ぶ)に格納されることによって保存される。タスクの実行を再開するときは、タスクのコンテキスト構造を使用してタスクのレジスタ状態が復元される(すなわち、プロセッサにロードし直される)。
タスクのレジスタ状態の保存および復元は、いくつかの異なる技法を使用して行うことができる。たとえば、あるオペレーティング・システムは、前のタスクのレジスタ状態全体を記憶し、各タスク切換時に次のタスクのレジスタ状態全体を復元する。しかし、レジスタ状態全体を記憶し復元するのは時間がかかるので、タスク切換時に不要な部分を記憶および/または復元することを回避することが望ましい。タスクが浮動小数点装置を使用しない場合、浮動小数点レジスタの内容をそのタスクのレジスタ状態の一部として記憶し復元することは不要である。したがって、従来、タスク切換時の浮動小数点レジスタの内容の記憶および復元を回避するために、前述のソフトウェア規約に従って、オペレーティング・システムによってTS表示が使用されている(一般に、「部分コンテキスト切換」または「オンデマンド・コンテキスト切換」と呼ぶ)。
TS表示を使用して部分コンテキスト切換を実施することは良く知られている。しかし、本発明では、部分コンテキスト切換が実行された(すなわち、浮動小数点装置が「使用不能」であり、あるいは「ディスエーブル」されている)TS表示が示すときに浮動小数点命令を実行しようすると、「装置使用不能」例外が生じることが重要である。イベント・ハンドラは、この例外に応答して、プロセッサに作用し、現タスクが浮動小数点装置のオーナーであるかどうか(浮動小数点装置に記憶されているデータが現タスクまたはすでに実行されたタスクに属するものであるかどうか)を判定する。現タスクがオーナーではない場合、イベント・ハンドラによって、プロセッサは浮動小数点レジスタの内容を前のタスクのコンテキスト構造に格納し、現タスクの浮動小数点状態(使用可能である場合)を復元し、現タスクをオーナーとして識別する。しかし、現タスクが浮動小数点装置のオーナーである場合、現タスクは浮動小数点装置を最後に使用したタスクであり(現タスクのレジスタ状態の浮動小数点部分はすでに浮動小数点装置に記憶されている)、浮動小数点装置に対して処置を施す必要はなく、TSは設定されず、例外は生じない。ハンドラを実行すると、プロセッサはまた、浮動小数点装置が現タスクによって所有されている(「使用可能」または「イネーブル」とも呼ぶ)ことを示すようにTS表示を変更する。
イベント・ハンドラの完了時に、装置使用不能例外を生じさせた浮動小数点命令を再開することによって現タスクの実行が再開される。TS表示は、浮動小数点装置が使用可能であることを示すように変更されているので、後続の浮動小数点命令を実行しても装置使用不能例外は生じない。しかし、次の部分コンテキスト切換時には、部分コンテキスト切換が実行されたことを示すようにTS表示が変更される。したがって、他の浮動小数点命令の実行が試みられた場合、他の装置使用不能例外が発生し、再びイベント・ハンドラが実行される。このように、TS表示によって、オペレーティング・システムは浮動小数点レジスタ・ファイルの保存およびロードを遅延させ、場合によっては回避することができる。そうすることにより、保存しロードしなければならないレジスタの数を削減することによってタスク切換オーバヘッドが低減される。
タスク切換時には浮動小数点状態が記憶されることも、あるいは復元されることもないあるオペレーティング・システムについて説明したが、代替実施形態では任意の数の他の技法を使用することができる。たとえば、前述のように、常に各タスク切換時にレジスタ状態全体を記憶し復元するようにオペレーティング・システムを構成することができる。
プロセスの浮動小数点状態を記憶できるいくつかの異なる時間(たとえば、装置使用不能イベントなどに応答したコンテキスト切換時など)だけでなく、浮動小数点状態を記憶するいくつかの異なる技法もある。たとえば、浮動小数点状態全体を記憶するようにオペレーティング・システムを実装することができる(本明細書では「単純タスク切換」と呼ぶ)。別法として、対応するタグが非空状態を示す浮動小数点レジスタのみの内容を記憶するようにオペレーティング・システムを実装することもできる(本明細書では「最小タスク切換」と呼ぶ)。そうする際に、オペレーティング・システムは、有用なデータを含む浮動小数点レジスタのみの内容を記憶する。このように、保存しなければならないレジスタの数を削減することによって、浮動小数点状態の記憶に関するオーバヘッドを低減することができる。
図2は、Pentiumプロセッサによる命令の実行を示す流れ図である。この流れ図はステップ200から開始し、フローはステップ200からステップ205に進む。
ステップ205に示したように、1組のビットが命令としてアクセスされ、フローはステップ210に進む。この1組のビットは、この命令によって実行される動作を識別する命令コードを含む。
ステップ210で、命令コードが有効であるかどうかが判定される。命令コードが有効ではない場合、フローはステップ215に進む。そうでない場合、フローはステップ220に進む。
ステップ215に示したように、無効命令コード例外が発生し、適切なイベント・ハンドラが実行される。このイベント・ハンドラを、プロセッサにメッセージを表示させ、現タスクの実行を中止させ、他のタスクを実行させるようにすることができる。もちろん、代替実施形態では、このイベント・ハンドラを任意の数の方法で実行できるようにすることができる。
ステップ220で、命令が浮動小数点命令であるかどうかが判定される。命令が浮動小数点命令ではない場合、フローはステップ225に進む。そうでない場合、フローはステップ230に進む。
ステップ225に示したように、プロセッサは命令を実行する。このステップは本発明を説明するうえで必要とされないものなので、本明細書ではこれ以上は説明しない。
ステップ230に示したように、EM表示が1に等しいかどうか(前述のソフトウェア規約によれば、浮動小数点装置をエミュレートすべきかどうか)と、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が実行されたかどうか)が判定される。EM表示またはTS表示、あるいはその両方が1に等しい場合、フローはステップ235に進む。そうでない場合、フローはステップ240に進む。
ステップ235で、「装置使用不能」例外が発生し、対応するイベント・ハンドラが実行される。このイベントに応答して、対応するイベント・ハンドラを、EM表示およびTS表示をポーリングするようにすることができる。EM表示が1に等しい場合、プロセッサに、浮動小数点装置をエミュレートすることによって命令を実行させ、かつ次の命令(ステップ205で受け取った命令の後に論理的に続く命令)時に実行を再開させるようにイベント・ハンドラを構成することができる。TS表示が1に等しい場合、部分コンテキスト切換に関連して説明したように機能し(浮動小数点装置の内容を記憶し、必要に応じて正しい浮動小数点状態を復元する)、かつプロセッサに、ステップ205で受け取った命令の実行を再開することによって実行を再開させるようにイベント・ハンドラを構成することができる。もちろん、代替実施形態では、このイベント・ハンドラを任意の数の方法を利用できるようにすることができる。
浮動小数点命令の実行時にある数値エラーが発生した場合、そのようなエラーは、次の浮動小数点命令の実行が試みられるまで未処理のままに保持され、次の浮動小数点命令の実行が試みられた時点でその実行に割り込み、未処理の浮動小数点数値エラーを処理することができる。ステップ240に示したように、そのような未処理のエラーがあるかどうかが判定される。そのような未処理のエラーがある場合、フローはステップ245に進む。そうでない場合、フローはステップ250に進む。
ステップ245で、未処理浮動小数点エラー・イベントが発生する。このイベントに関して、プロセッサは、浮動小数点エラーがマスクされているかどうかを判定する。そうである場合、プロセッサはマイクロコードを使用してイベントを内部で処理することを試み、浮動小数点命令が「マイクロ再開」される。マイクロ再開の語は、非マイクロコード・ハンドラ(オペレーティング・システム・イベント・ハンドラとも呼ぶ)を実行せずにイベントを処理する技法を指す。そのようなイベントは、内部でプロセッサによって処理され、したがって、外部オペレーティング・システム・ハンドラの実行を必要としないので、内部イベントと呼ばれる(ソフトウェアに見えないイベントとも呼ぶ)。これに対して、浮動小数点エラーがマスクされていない場合、このイベントは外部イベントであり(「ソフトウェアに見えるイベント」とも呼ぶ)、イベントの対応するイベント・ハンドラが実行される。このイベント・ハンドラを、エラーを処理し、かつプロセッサに、ステップ205で受け取った命令の実行を再開することによって実行を再開させるようにすることができる。命令を再開するこの技法を「マクロ再開」または「命令レベル再開」と呼ぶ。もちろん、代替実施形態では、この非マイクロコード・イベント・ハンドラを任意の数の方法が利用できるようにすることができる。
ステップ250に示したように、浮動小数点命令が実行される。そのような実行時には、タグが必要に応じて変更され、このとき処理できる数値エラーが報告され、他の数値エラーは未処理のままで保持される。
(Pentiumプロセッサを含む)インテル・アーキテクチャ・プロセッサ・ファミリならびにその他のある汎用プロセッサの1つの制限は、パック・データを処理する1組の命令を含まないことである。したがって、既存のソフトウェアおよびハードウェアとの互換性を有するように、パック・データを処理する1組の命令をそのようなプロセッサに組み込むことが望ましい。さらに、1組のパック・データ命令をサポートし、オペレーティング・システムを含め既存のソフトウェアとの互換性を有する新しいプロセッサを製造することが望ましい。
本発明は、エイリアス化された単一の物理レジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置を提供する。本発明の一態様によれば、復号装置と、マッピング装置と、記憶装置とを含むプロセッサが設けられる。復号装置は、少なくとも第1の1組の命令と第2の1組の命令とを含む少なくとも1つの命令セットの命令およびそのオペランドを復号するように構成される。記憶装置は、物理レジスタ・ファイルを含む。マッピング装置は、物理レジスタ・ファイルへの第1の1組の命令によってスタック参照的に使用されるオペランドをマップするように構成される。また、マッピング装置は、同じ物理レジスタ・ファイルへの第2の1組の命令によって非スタック参照的に使用されるオペランドをマップするように構成される。
本発明の他の態様によれば、一般に復号装置と、マッピング装置と、リタイヤメント装置とを含むプロセッサが設けられる。マッピング装置は、浮動小数点およびパック・データ・オペランドを、リタイヤメント装置に含まれる同じ1組のレジスタにマップする。マッピング装置は、浮動小数点オペランドをスタック参照的にマップしながら、パック・データ・オペランドを非スタック参照的にマップする。また、マッピング装置は1組のタグを含み、これらのタグはそれぞれ、マッピング・テーブル内のそれぞれの異なるエントリに対応し、その対応するエントリが空状態であるか、それとも非空状態であるかを識別する。
下記の説明では、本発明を完全に理解していただくために多数の特定の詳細について述べる。しかし、本発明がこれらの特定の詳細なしに実施できるものであることを理解されたい。他の例では、本発明を曖昧にしないように、周知の回路、構造、技法については詳しく示していない。
本発明の一実施形態によれば、本出願は、様々なオペレーティング・システム技法には見えず、良好なプログラミング方法を推進し、既存のソフトウェアには見えないように、それぞれの異なるデータ・タイプ演算をプロセッサに実行させる、いくつかの異なる数組の命令を実行する方法および装置について説明するものである。これを達成するには、少なくとも論理的にはソフトウェアから単一のエイリアス化レジスタ・ファイルとして見えるものに対して、いくつかの異なるデータ・タイプ演算をプロセッサに実行させる異なる数組の命令を実行する。異なる数組の命令を実行した結果として実行されるデータ・タイプ演算はどんなタイプの演算でもよい。たとえば、ある1組の命令では、プロセッサはスカラ演算(浮動小数点または整数、あるいはその両方)を実行し、他の1組の命令ではパック演算(浮動小数点または整数、あるいはその両方)を実行する。他の例を挙げると、ある1組の命令では、プロセッサは浮動小数点演算(スカラまたはパック、あるいはその両方)を実行し、他の1組の命令では整数演算(スカラまたはパック、あるいはその両方)を実行する。他の例を挙げると、単一のエイリアス化レジスタ・ファイルをスタック参照レジスタ・ファイルおよびフラット・レジスタ・ファイルとして動作させることができる。また、本出願では、論理的にはソフトウェアから単一のエイリアス化レジスタ・ファイルとして見える別々の物理レジスタ・ファイルを使用してこれらの異なる数組の命令を実行する方法および装置について説明する。さらに、本出願では、単一の物理レジスタ・ファイルを使用してこれらの異なる数組の命令を実行する方法および装置について説明する。
話を明確にするために、浮動小数点命令およびパック・データ命令(浮動小数点または整数、あるいはその両方)の実行に関連して本発明を説明する。しかし、任意の数の異なるデータ・タイプ演算を実行することができ、本発明が浮動小数点演算やパック・データ演算に限らないことを理解されたい。
図3Aは、本発明の一実施形態による、パック・データ状態および浮動小数点状態のエイリアス化を示す機能図である。図3Aは、浮動小数点データ(本明細書では、浮動小数点状態と呼ぶ)を格納する1組の浮動小数点レジスタ300と、パック・データ(本明細書では、パック・データ状態と呼ぶ)を格納する1組のパック・データ・レジスタ310を示す。本明細書では、パック・データ・レジスタの物理的位置を示すために表記PDnを使用する。図3Aは、パック・データ状態が浮動小数点状態上にエイリアス化されることも示す。すなわち、浮動小数点命令およびパック・データ命令は少なくとも、ソフトウェアには同じ1組の論理レジスタ上で実行されるように見える。複数の別々の物理レジスタ・ファイルまたは単一の物理レジスタ・ファイルを使用することを含め、このエイリアス化を行ういくつかの技法がある。そのような技法の例については後で、図4ないし図13を参照して説明する。
前述のように、既存のオペレーティング・システムは、プロセッサにマルチタスクの結果として浮動小数点状態を記憶させるようになっている。パック・データ状態は浮動小数点状態上にエイリアス化されるので、これらの同じオペレーティング・システムは、プロセッサに、浮動小数点状態上にエイリアス化されたパック・データ状態を記憶させる。その結果、本発明は従来のオペレーティング・システム・タスク切換ルーチンを必要とせず(もちろん、タスク切換ルーチンを1つまたは複数のイベント・ハンドラとして構成することができる)、イベント・ハンドラを修正することも、あるいは新しいオペレーティング・システム・イベント・ハンドラを書き込むことも必要としない。したがって、新しいオペレーティング・システムや修正済みオペレーティング・システムを設計しなくても、マルチタスクを行う際にパック・データ状態を記憶することができる。そのため、そのようなオペレーティング・システムを開発するために必要なコストおよび時間が必要とされない。また、一実施形態では、パック・データ命令を実行することによって生成されたイベントは、内部でプロセッサによって処理され、あるいは既存のイベントにマップされ、既存のイベントの対応するオペレーティング・システム・イベント・ハンドラによって既存のイベントを処理することができる。その結果、オペレーティング・システムに見えないようにパック・データ命令を実行することができる。
図3Aは、1組の浮動小数点タグ320および1組のパック・データ・タグ330も示す。浮動小数点タグ320は、図1を参照して説明したタグ150と同様に働く。したがって、各タグは、対応する浮動小数点レジスタの内容が空であるか、それとも非空であるかを示す2つのビットを含む(たとえば、有効、特殊、または零)。パック・データ・タグ330は、パック・データ・レジスタ310に対応し、浮動小数点タグ320上にエイリアス化される。各タグは2つのビットを使用するようにできるが、代替実施形態では、各タグごとに1ビットのみを格納することができる。これらの1ビット・タグはそれぞれ、空と非空のどちらかを識別する。そのような実施形態では、タグ値が必要なときに適切な2ビット・タグ値を決定することによって、これらの1ビット・タグを、ソフトウェアから2ビットを備えるものとして見えるようにすることができる。最小タスク切換を実施するオペレーティング・システムは、対応するタグが非空状態を示すレジスタのみの内容を記憶する。タグがエイリアス化されるので、そのようなオペレーティング・システムは必要なパック・データ状態および浮動小数点状態を記憶する。これに対して、単純タスク切換を実施するオペレーティング・システムは、タグの状態にかかわらずに、エイリアス化論理レジスタ・ファイルの内容全体を記憶する。
一実施形態では、浮動小数点レジスタ300は、図1で説明した浮動小数点レジスタ145と同様に動作する。したがって、図3Aは、トップ・オブ・スタック・フィールド350を含む浮動小数点状態レジスタ340も示す。トップ・オブ・スタック・フィールド350は、1つの浮動小数点レジスタ300を識別するトップ・オブ・スタック表示(TOS)を格納するために使用される。浮動小数点レジスタ300がスタックとして動作すると、レジスタの物理的位置にかかわらず、トップ・オブ・スタック・レジスタに対して演算が実行される。これに対して、パック・データ・レジスタ310は固定レジスタ・ファイル(直接アクセス・レジスタ・ファイルとも呼ぶ)として動作する。したがって、パック・データ命令は、使用するレジスタの物理的位置を指定する。パック・データ・レジスタ310は浮動小数点レジスタ300の物理的位置にマップされ、このマッピングは、スタックの1番上のレジスタが変更されても変化しない。そのため、ソフトウェアからは、少なくとも、スタック参照レジスタ・ファイルまたはフラット・レジスタ・ファイルとして動作できる単一の論理レジスタ・ファイルが存在するように見える。
図3Bおよび図3Cは、図3Aに示した、エイリアス化浮動小数点レジスタ300および浮動小数点タグ320のパック・データ・レジスタ310およびパック・データ・タグ330に対するマッピングを示す。前述のように、浮動小数点環境では、各レジスタnは、TOSポインタで識別される浮動小数点レジスタに対して指定される。図3Bおよび図3Cに2つのケースが示されている。各図は、論理浮動小数点レジスタまたはプログラマに見える浮動小数点レジスタ(スタック)と論理パック・データ・レジスタまたはプログラマに見えるパック・データ・レジスタとの関係を表す。図3Bおよび図3Cに示した内円360は、物理浮動小数点/パック・データ・レジスタおよび対応するタグを表し、外円は、トップ・オブ・スタック・ポインタ370によって参照される論理浮動小数点レジスタを表す。図3Bに示したように、トップ・オブ・スタック・ポインタ370は物理浮動小数点/パック・データ・レジスタ0を指し示す。したがって、論理浮動小数点レジスタと物理浮動小数点/パック・データ・レジスタが対応する。図示したように、プッシュとポップのどちらかを行わせる浮動小数点命令によってトップ・オブ・スタック・ポインタ370が修正されると、それに応じてトップ・オブ・スタック・ポインタ370も変更される。プッシュは、図中の逆時計回りのトップ・オブ・スタック・ポインタの回転によって示されており、浮動小数点ポップ動作では、トップ・オブ・スタック・ポインタが時計回りに回転する。
図3Cに示した例では、論理浮動小数点レジスタST0と物理レジスタ0は対応しない。したがって、図示した図3Cの例では、トップ・オブ・スタック・ポインタ370は、論理浮動小数点レジスタST0に対応する物理浮動小数点/パック・データ・レジスタ2を指し示す。他のすべての論理浮動小数点レジスタはTOS370を基準としてアクセスされる。浮動小数点レジスタがスタックとして動作し、パック・データ・レジスタが固定レジスタ・ファイルとして動作する一実施形態について説明したが、代替実施形態では、これらの数組のレジスタを任意の方法を利用できるようにすることができる。また、浮動小数点演算およびパック・データ演算に関連して一実施形態を説明したが、この技法を使用して、レジスタ・ファイルに対して実行される演算のタイプにかかわらずに、スタック参照レジスタ・ファイル上に固定レジスタ・ファイルをエイリアス化できることを理解されたい。
パック・データ状態は、浮動小数点状態の任意の部分にエイリアス化することも、あるいはすべての浮動小数点状態にエイリアス化することもできる。一実施形態では、パック・データ状態は、浮動小数点状態の小数部フィールドにエイリアス化される。さらに、エイリアス化は完全なものでも、あるいは部分的なものでもよい。全エイリアス化は、レジスタの内容全体がエイリアス化される実施形態を表すために使用される。部分エイリアス化については図6Aを参照して説明する。
図3Dは、本発明の一実施形態による、経時的な浮動小数点命令およびパック・データ命令の実行を示すブロック図である。図3Dは、第1の1組の浮動小数点命令380と、1組のパック・データ命令382と、第2の1組の浮動小数点命令384を実行順序に従って示すものである。1組のパック・データ命令382の実行は時間T1から開始し時間T2で終了し、それに対して、1組の浮動小数点命令の実行は時間T3から開始する。他の命令は、1組のパック・データ命令382が実行されてから第2の1組の浮動小数点命令384の実行が開始されるまでの間に実行しても、あるいは実行しなくてもよい。第1の間隔386は時間T1と時間T3との間の時間を示し、それに対して、第2の間隔388は時間T2と時間T3との間の時間を示す。
浮動小数点状態およびパック・データ状態がエイリアス化レジスタ・ファイルに格納されるので、タグは、第2の1組の浮動小数点命令384が実行される前に空に変更すべきである。そうでない場合、スタック・オーバフロー例外が発生する恐れがある。したがって、場合によっては第1の間隔386中にタグが空に変更される。これはいくつかの異なる方法で行うことができる。たとえば、ある実施形態では、1)1組のパック・データ命令382中の第1のパック・データ命令を実行させることによってタグを空状態に変更し、2)1組のパック・データ命令382中の各パック・データ命令を実行させることによってタグを空状態に変更し、3)実行するとエイリアス化レジスタ・ファイルが修正される第1の浮動小数点命令の実行が試みられたときにタグを空状態に変更することなどによって、これを行うことができる。これらの実施形態は、パック・データ状態がレジスタ状態の残りの部分と共に記憶され復元されるので、単純コンテキスト切換(レジスタ状態全体を各タスク切換時に記憶し復元する)をサポートする既存のオペレーティング・システムからは見えない。
他の実施形態では、単純コンテキスト切換または最小コンテキスト切換、あるいはその両方をサポートするオペレーティング・システムとの互換性を維持するために、1組のパック・データ命令382を実行すると、論理ブロック390で表された1組の遷移命令が時間T2から時間T3(第2の1組の浮動小数点命令384が開始される時間)までの間に実行されないかぎり、第1の間隔386でタグが非空状態に変更される。たとえば、1組のパック・データ命令382がタスクAに属すると仮定する。また、タスクAが、1組の遷移命令390を実行する前に全タスク切換(すなわち、部分タスク切換ではない)によって割り込まれると仮定する。全タスク切換が実行されるので、タスク切換ハンドラは、浮動小数点/パック・データ状態を記憶するための浮動小数点命令(第2の1組の浮動小数点命令384によって示されており、この例では「FPタスク切換ルーチン」と呼ばれる)を含む。1組の遷移命令390が実行されていないので、プロセッサは、FPタスク切換ルーチンを実行する前のある時にタグを非空状態に変更する。そのため、FPタスク切換ルーチンは、最小切換ルーチンであるか、それとも単純切換ルーチンであるかにかかわらず、エイリアス化レジスタ・ファイル全体の内容(この例では、タスクAのパック・データ状態)を記憶する。これに対して、1組の遷移命令390が実行された場合、プロセッサは第2の間隔388中のある時間にタグを空状態に変更する。したがって、1組の遷移命令390が実行された後にタスク切換がタスクAに割り込むかどうかにかかわらず、プロセッサは、(第2の1組の浮動小数点命令384がタスク切換ハンドラに属するか、それともタスクAに属するか、それとも他のプログラムに属するかにかかわらず)第2の1組の浮動小数点命令384を実行する前のある時にタグを空状態に変更する。
他の例として、再び、1組のパック・データ命令382がタスクAに属し、タスクAが、1組の遷移命令390が実行される前にタスク切換によって割り込まれると仮定する。しかし、この場合、タスク切換は部分タスク切換である(すなわち、浮動小数点/パック・データ状態は記憶されることも、あるいは復元されることもない)。浮動小数点命令またはパック・データ命令を使用する他のタスクを実行しない場合、プロセッサは最終的にタスクAの実行に戻り、1組の遷移命令390が実行される。しかし、他のタスク(たとえば、タスクB)が浮動小数点命令またはパック・データ命令を使用する場合、このような命令の実行を試みると、オペレーティング・システム・ハンドラ呼出しによってタスクAの浮動小数点/パック・データ状態が記憶され、タスクBの浮動小数点/パック・データ状態が復元される。このハンドラは、浮動小数点/パック・データ状態を記憶するためのFPタスク切換ルーチン(この例では、第2の1組の浮動小数点命令384によって示されている)を含む。1組の遷移命令390が実行されていないので、プロセッサは、FPタスク切換ルーチンを実行する前のある時にタグを非空状態に変更する。そのため、FPタスク切換ルーチンは、最小切換ルーチンであるか、それとも単純切換ルーチンであるかにかかわらず、エイリアス化レジスタ・ファイル全体の内容(すなわち、タスクAのパック・データ状態)を記憶する。このように、この実施形態は、エイリアス化レジスタの状態を記憶するために使用される技法にかからわず、オペレーティング・システムからは見えない。
1組の遷移命令は、任意の数の方法を利用できるようにすることができる。一実施形態では、この1組の遷移命令は、本明細書ではEMMS(空マルチメディア状態)命令と呼ぶ新しい命令を含むことができる。この命令によって、浮動小数点/パック・データ・タグがクリアされ、実行される可能性のある後続の浮動小数点命令にすべての浮動小数点レジスタ300を使用できることが、これに続いて実行されるコードに対して示される。これによって、普通なら、パック・データ命令の後ではなく浮動小数点命令の実行前にEMMS命令が実行される場合に発生するスタック・オーバフロー条件が発生するのが回避される。
インテル・アーキテクチャ・プロセッサを使用した従来技術の浮動小数点プログラミング方法では、一般に、浮動小数点状態をクリアする動作によって浮動小数点コードのブロックを終了する。部分コンテキスト切換を使用するか、それとも最小コンテキスト切換を使用するか、それともその両方を使用するかにかかわらず、浮動小数点コードの第1のブロックの終了時に浮動小数点状態はクリア状態のままである。したがって、EMMS命令は、パック・データ状態をクリアするためにパック・データ・シーケンスで使用されるものである。EMMS命令は、パック・データ・コードのブロックの後に実行すべきである。したがって、本明細書に記載した方法および装置を備えたプロセッサは、インテル・アーキテクチャ・プロセッサを使用した従来技術の浮動小数点プロセッサとの完全な互換性を保持するが、良好なプログラミング技法および適切なハウスキーピング(パック・データ・コードと浮動小数点コードとの間の遷移の前に状態をクリアすること)を用いてプログラムした場合に、浮動小数点状態にも、あるいはパック・データ状態にも悪影響を与えずにパック・データ・コードと浮動小数点コードとの間の遷移を可能にするパック・データ命令を実行する機能も有する。
他の実施形態では、プロセッサにタグを実行時に空状態に変更させる既存の浮動小数点命令を使用して1組の遷移命令を形成することができる。
一実施形態では、パック・データ命令の実行と浮動小数点命令の実行との間の切換に時間がかかる。したがって、良好なプログラミング技法はこれらの遷移の数を最小限に抑えることである。浮動小数点命令とパック・データ命令との間の遷移の数は、パック・データ命令だけでなく浮動小数点命令もグループ化することによって削減することができる。そのような良好なプログラミング技法を推進することが望ましいので、そのような良好なプログラミング技法を無視することを困難にするようにプロセッサを構成することが望ましい。したがって、一実施形態ではまた、第1の間隔386中にトップ・オブ・スタック表示が初期設定状態(たとえば、レジスタR0を示す零)に変更される。これは、1)第1のパック・データ命令を実行させることによってトップ・オブ・スタック表示を変更し、2)1組のパック・データ命令382中の各パック・データ命令を実行させることによってトップ・オブ・スタック表示を変更し、3)EMMS命令を実行させることによってトップ・オブ・スタック表示を設定し、4)図3Dの時間T3に浮動小数点命令の実行が試みられたときにトップ・オブ・スタック表示を変更することなどによって行うことができる。この場合も、これは、パック・データ命令と浮動小数点命令を混合するコードに完全な互換性を維持するために行われる。また、良好なプログラミング技法を推進するために、一実施形態では、第1の間隔386中に、パック・データが書き込まれるエイリアス化レジスタの符号フィールドおよび指数フィールドに、数ではないことを示す値も格納される。
図4Aおよび図4Bは、様々なオペレーティング・システム技法からは見えず、かつ効率的なプログラミング技法を推進するように浮動小数点命令およびパック・データ命令を実行する、本発明の一実施形態による方法を示す一般的な流れ図である。流れ図はステップ400から開始する。フローは、ステップ400からステップ402に進む。
ステップ402に示したように、1組のビットが命令としてアクセスされ、フローはステップ404に進む。この1組のビットは、この命令によって実行される動作を識別する命令コードを含む。
ステップ404で、命令コードが有効であるかどうかが判定される。命令コードが有効ではない場合、フローはステップ406に進む。そうでない場合、フローはステップ408に進む。パック・データ命令をサポートしないプロセッサに対して、パック・データ命令を含むルーチンの実行が試みられると仮定すると、パック・データ命令の命令コードは有効ではなく、フローはステップ406に進む。逆に、プロセッサがパック・データ命令を実行できる場合、このような命令の命令コードは有効であり、フローはステップ408に進む。
ステップ406に示したように、無効命令コード例外が発生し、適切なイベント・ハンドラが実行される。上記で図2のステップ215を参照して説明したように、このイベント・ハンドラは、プロセッサにメッセージを表示させ、現タスクの実行を中止させ、他のタスクを実行させることができる。もちろん、このイベント・ハンドラを任意の数の方法を利用できるようにすることができる。たとえば、このイベント・ハンドラは、プロセッサがパック・データ命令を実行できないかどうかを識別するようにすることができる。この同じイベント・ハンドラを、プロセッサがパック・データ命令を実行できないことを識別する表示を設定するようにすることもできる。プロセッサ上で実行される他のアプリケーションは、この表示を使用して、1組のスカラ・ルーチンを使用して実行すべきか、それとも重複された1組のパック・データ・ルーチンを使用して実行すべきかを判定する。しかし、そのように構成するには、既存のオペレーティング・システムを変更し、あるいは新しいオペレーティング・システムを開発する必要がある。
ステップ408で、どんなタイプの命令を受け取ったかが判定される。命令が浮動小数点命令でも、あるいはパック・データ命令でもない場合、フローはステップ410に進む。しかし、命令が浮動小数点命令である場合、フローはステップ412に進む。これに対して、命令がパック・データ命令である場合、フローはステップ414に進む。
ステップ410に示したように、プロセッサは命令を実行する。このステップは本発明を理解するうえで必要とされないので、本明細書ではこれ以上説明しない。
ステップ412に示したように、EM表示が1に等しいかどうか(前述のソフトウェア規約によれば、浮動小数点装置をエミュレートすべきかどうか)と、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が実行されたかどうか)が判定される。EM表示またはTS表示、あるいはその両方が1に等しい場合、フローはステップ416に進む。そうでない場合、フローはステップ420に進む。一実施形態は、EM表示またはTS表示、あるいはその両方が1のときに装置使用不能例外が発生するようにするが、代替実施形態は任意の数の他の値を使用するできるようにすることができる。
ステップ416で、「装置使用不能」例外が発生し、対応するイベント・ハンドラが実行される。上記で図2のステップ235を参照して説明したように、対応するイベント・ハンドラを、EM表示およびTS表示をポーリングするようにすることができる。EM表示が1に等しい場合、イベント・ハンドラは浮動小数点装置をエミュレートして命令を実行し、プロセッサに次の命令(ステップ402で受け取った命令の後に論理的に続く命令)時に実行を再開させる。TS表示が1に等しい場合、イベント・ハンドラは、プロセッサに、部分コンテキスト切換に関連して説明したように機能し(浮動小数点装置の内容を記憶し、必要に応じて正しい浮動小数点状態を復元する)、かつプロセッサにステップ402で受け取った命令の実行を再開することによって実行を再開させる。もちろん、代替実施形態では、このイベント・ハンドラを任意の数の方法を利用できるようにすることができる。たとえば、EM表示を使用してマルチタスクを構成することができる。
パック・データ状態が浮動小数点状態上にエイリアス化され、EM表示およびTS表示によって浮動小数点状態が変化するので、プロセッサはまた、パック・データ命令を実行する際にEM表示およびTS表示に応答し、ソフトウェアとの完全な互換性を維持しなければならない。
ステップ414で、EM表示が1に等しいと判定される。前述のように、装置使用不能例外を処理するために実行されるイベント・ハンドラを、EM表示をポーリングし、EM表示が1に等しい場合に浮動小数点装置のエミュレーションを試みるようにすることができる。既存のイベント・ハンドラはパック・データ命令をエミュレートするようには書かれていないので、EM表示が1に等しいときのパック・データ命令の実行の試みをこのイベント・ハンドラによって処理することはできない。さらに、オペレーティング・システムから見えないようにするには、このイベント・ハンドラの変更をプロセッサからは要求しないようにする必要がある。このため、ステップ414でEM表示が1に等しいと判定された場合、フローはステップ416ではなくステップ406に進む。そうでない場合、フローはステップ418に進む。
前述のように、ステップ406で無効命令コード例外が発生し、対応するイベント・ハンドラが実行される。EM=1のときのパック・データ命令の実行の試みを無効命令コード例外に切り換えることによって、この実施形態はオペレーティング・システムから見えなくなる。
オペレーティング・システムから見えないようにEM表示を処理する一実施形態について説明したが、代替実施形態では他の技法を使用することができる。たとえば、代替実施形態は、EM表示が1に等しいときのパック・データ命令の実行の試みに応答して装置使用不能例外と、異なる既存のイベントと、新しいイベントとのうちのいずれかを発生することができる。さらに、オペレーティング・システムのわずかな修正が受け入れられる場合、この状況に応じて適切とみなされる処置をとるように、選択されたイベント・ハンドラを変更することができる。たとえば、パック・データ命令をエミュレートするようにイベント・ハンドラを書くことができる。他の代替実施形態では、パック・データ命令を実行する際にEM表示を単に無視することができる。
ステップ418に示したように、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が実行されたかどうか)が判定される。TS表示が1に等しい場合、フローはステップ416に進む。そうでない場合、フローはステップ422に進む。
前述のように、ステップ416で装置使用不能例外が発生し、対応するイベント・ハンドラが実行される。したがって、このイベントに応答して、対応するイベント・ハンドラを、EM表示およびTS表示をポーリングするようにすることができる。ステップ414で、EM表示が1に等しい状況が無効命令コード例外に切り換えられたので、EM表示は0に等しくなければならず、TS表示は1に等しくなければならない。TS表示が1に等しいので、イベント・ハンドラは、プロセッサに、部分コンテキスト切換に関連して説明したように機能し(浮動小数点装置の内容を記憶し、必要に応じて正しい浮動小数点状態を復元する)、かつプロセッサにステップ402で受け取った命令の実行を再開することによって実行を再開させる。パック・データ状態が浮動小数点状態上にエイリアス化されるので、このイベント・ハンドラは浮動小数点状態とパック・データ状態の両方のために働く。このため、この方法はオペレーティング・システムからは見えない。もちろん、代替実施形態ではこのイベント・ハンドラを任意の数の方法を利用できるようにすることができる。たとえば、パック・データ状態が浮動小数点状態上にエイリアス化されない代替実施形態では、浮動小数点状態とパック・データ状態の両方を記憶する新しいイベント・ハンドラを使用することができる。
オペレーティング・システムから見えないようにTS表示を処理する一実施形態について説明したが、代替実施形態では他の技法を使用することができる。たとえば、代替実施形態ではTS表示を実施しなくてもよい。そのような代替実施形態は、TS表示を使用して部分コンテキスト切換を実施するオペレーティング・システムとの互換性を有さない。しかし、そのような代替実施形態は、TS表示を使用した部分コンテキスト切換をサポートしない既存のオペレーティング・システムとの互換性を有する。他の例を挙げると、TS表示が1に等しいときのパック・データ命令の実行の試みを、新しいイベント・ハンドラまたは修正された既存のイベント・ハンドラに切り換えることができる。このイベント・ハンドラは、この状況に応じて適切とみなされる処置をとるようにすることができる。たとえば、パック・データ状態が浮動小数点状態上にエイリアス化されない実施形態では、このイベント・ハンドラはパック・データ状態または浮動小数点状態、あるいはその両方を記憶することができる。
上記で図2を参照して説明したように、浮動小数点命令の実行時にある数値エラーが発生した場合、このようなエラーは、次の浮動小数点命令の実行が試みられるまで未処理のままに保持され、次の浮動小数点命令の実行が試みられた時点でその実行に割込み、エラーを処理することができる。ステップ420とステップ422の両方に示したように、次に処理できるそのような未処理のエラーがあるかどうかが判定される。したがって、これらのステップは図2のステップ240に類似している。そのような未処理のエラーがある場合、フローはステップ420とステップ422の両方からステップ424へ移る。しかし、ステップ420でそのような未処理のエラーがないと判定された場合、フローはステップ426に進む。これに対して、ステップ422でそのような未処理のエラーがないと判定された場合、フローはステップ430に進む。代替実施形態では、パック・データ命令が実行される間そのようなエラーは未処理のままにされる。
ステップ424で、未処理浮動小数点エラー例外が発生する。上記で図2のステップ245を参照して説明したように、プロセッサはこのイベントに応答して、浮動小数点エラーがマスクされているかどうかを判定する。そうである場合、プロセッサはこのイベントを内部で処理することを試み、浮動小数点命令がマイクロ再開される。浮動小数点エラーがマスクされていない場合、このイベントは外部イベントであり、対応するイベント・ハンドラが実行される。このイベント・ハンドラは、エラーを処理し、かつプロセッサに、ステップ402で受け取った命令の実行を再開することによって実行を再開させるようにすることができる。もちろん、代替実施形態では、このイベント・ハンドラを任意の数の方法を利用するようにすることができる。
ステップ426に示したように、浮動小数点命令が実行される。オペレーティング・システムから見えないように、一実施形態はまた、タグを必要に応じて変更し、次に処理できる数値エラーを報告し、他の数値エラーを未処理のままにしておく。浮動小数点装置の内容を記憶するための多数のオペレーティング・システム技法があるが、すべてのそのようなオペレーティング・システム技法から見えないようにパック・データ命令および浮動小数点命令を実行することが望ましい。タグを維持することによってこの実施形態は、対応するタグが非空状態を示す浮動小数点レジスタのみの内容を記憶するそのようなオペレーティング・システム技法からは見えないオペレーティング・システムのままとなる。しかし、代替実施形態は、これらのオペレーティング・システム技法のうちのいくつかの技法との互換性を有するようにすることができる。たとえば、既存のオペレーティング・システムがタグを使用しない場合、タグを実装していないプロセッサは依然として、そのオペレーティング・システムとの互換性を有する。さらに、本発明では、数値浮動小数点例外を未処理のままにしておく必要はなく、したがって、数値浮動小数点例外を未処理のままにしておかない代替実施形態も本発明の範囲内である。
ステップ430に示したように、パック・データ命令がEMMS命令(遷移命令とも呼ぶ)であるかどうかが判定される。パック・データ命令がEMMS命令である場合、フローはステップ432に進む。そうでない場合、フローはステップ434に進む。EMMS命令を使用して、浮動小数点タグが初期設定状態に変更される。したがって、パック・データ状態が浮動小数点状態上にエイリアス化されている場合、この命令は、パック・データ命令の実行から浮動小数点命令の実行へ遷移する際に実行すべきである。このように、浮動小数点装置は、浮動小数点命令を実行できるように初期設定される。パック・データ状態を浮動小数点状態上にエイリアス化しない代替実施形態は、ステップ430およびステップ432を実行する必要はない。EMMS命令をエミュレートする場合も、ステップ430およびステップ432は必要とされない。
ステップ432に示したように、すべてのタグが空状態に変更され、トップ・オブ・スタック表示が初期設定値に変更される。タグを空状態に変更することによって、浮動小数点装置は初期設定され、浮動小数点命令を実行する準備が完了している。トップ・オブ・スタック表示を初期設定値(一実施形態ではレジスタR0を識別する零)に変更すると、浮動小数点命令とパック・データ命令が別々にグループ化され、したがって、良好なプログラミング技法が推進される。代替実施形態では、トップ・オブ・スタック表示を初期設定する必要はない。ステップ432が完了すると、システムは次の命令(ステップ402で受け取った命令の後に論理的に続く命令)を実行することができる。
ステップ434に示したように、(数値例外を発生せずに)パック・データ命令が実行され、トップ・オブ・スタック表示が初期設定値に変更される。数値例外が発生するのを回避するために、一実施形態は、データ値が最大値または最小値で飽和しあるいは固定されるようにパック・データ命令を構成する。数値例外が発生しないことにより、イベント・ハンドラは例外を処理する必要がない。このため、本発明のこの実施形態はオペレーティング・システムからは見えない。別法として、そのような数値例外に応答してマイクロコード・イベント・ハンドラを実行するように実施形態を構成させることができる。オペレーティング・システムに追加イベント・ハンドラが組み込まれ、あるいは既存のイベント・ハンドラがエラーを処理するように変更されるように、オペレーティング・システムから完全に見えないわけではない代替実施形態を構成することができる。トップ・オブ・スタックは上記で述べたのと同じ理由で変更される。代替実施形態は、トップ・オブ・スタックを任意のそれぞれの異なる回数だけ変更するようにすることができる。たとえば、EMMSを除くすべてのパック・データ命令の実行時にトップ・オブ・スタック表示を変更するように代替実施形態を形成することができる。他の代替実施形態は、EMMSを除くパック・データ命令の実行時にはトップ・オブ・スタック表示を変更しないようにすることができる。パック・データ命令の実行を試みた結果としてメモリ・イベントが発生した場合、実行が割り込まれ、トップ・オブ・スタック表示は変更されず、このイベントが処理される。イベントの処理が完了すると、ステップ402で受け取った命令が再開される。フローはステップ434からステップ436へ移る。
ステップ436に示したように、パック・データ命令によってプロセッサがエイリアス化レジスタに書込みを行うかどうかが判定される。そうである場合、フローはステップ438へ進む。そうでない場合、フローはステップ440に進む。
ステップ438で、パック・データ命令によってプロセッサが書込みを行う各エイリアス化レジスタの符号フィールドおよび指数フィールドに1が格納される。フローはステップ438からステップ440へ移る。このステップを実行すると、浮動小数点命令とパック・データ命令が別々にグループ化されるため、良好なプログラミング技法が推進される。もちろん、この問題に関連のない代替実施形態は、このステップを実施するのを回避することができる。一実施形態では、符号フィールドおよび指数フィールドに1が書き込まれるが、代替実施形態では、NAN(非数値)または無限を表す任意の値を使用することができる。
ステップ440に示したように、すべてのタグが非空状態に変更される。すべてのタグを非空状態に変更すると、浮動小数点命令とパック・データ命令が別々にグループ化されるため、良好なプログラミング技法が推進される。また、オペレーティング・システム互換性のために、ある種のオペレーティング・システム技法では、対応するタグが非空状態(最小コンテキスト切換)を示す浮動小数点レジスタのみの内容が記憶される。したがって、パック・データ状態が浮動小数点状態上にエイリアス化される実施形態では、すべてのタグを非空状態に等しい値に変更することによって、そのようなオペレーティング・システムが浮動小数点状態の場合と同様にパック・データ状態を保存する。代替実施形態では、対応するレジスタが有効なパック・データ項目を含むタグのみを変更することができる。さらに、代替実施形態は、このようなオペレーティング・システム技法のいくつかとの互換性を有するようにすることができる。たとえば、ある既存のオペレーティング・システムがタグを使用しない(たとえば、レジスタ状態全体を記憶し復元するオペレーティング・システム)場合、タグを実装しない実施形態はそのオペレーティング・システムとの互換性を有する。ステップ440が完了すると、システムは次の命令(ステップ402で受け取った命令の後に論理的に続く命令)を実行することができる。
したがって、この実施形態では、浮動小数点状態保存(FSAVE)命令または浮動小数点環境記憶(FSTENV)命令の後のメモリ内のタグの内容を以下に、表1を参照して示す。
Figure 0003792696
図のように、EMMSを除くパック・データ命令では、タグ320が非空状態(00)に設定される。EMMSによって浮動小数点タグ・レジスタは空(11)に設定される。また、EMMSを含むパック・データ命令では、トップ・オブ・スタック・フィールド350に記憶されているトップ・オブ・スタック表示も0にリセットされる。
インテル・アーキテクチャ・プロセッサ内の制御ワードや状況ワード(TOSを除く)など残りの環境レジスタは変更されない。パック・データ読取りまたはEMMSでは、浮動小数点レジスタ300の小数部および指数部は変更されない。しかし、一実施形態では、エイリアス化機構のためのパック・データ・レジスタへのパック・データ書込みでは、対応する浮動小数点レジスタの小数部が、実行中の演算に応じて修正される。さらに、この実施形態では、パック・データ・レジスタ310を修正することによって浮動小数点レジスタの小数部にデータが書き込まれると、浮動小数点レジスタ300の符号部および指数部中のすべてのビットが1に設定される。パック・データ命令は浮動小数点レジスタの符号部および指数部を使用しないので(浮動小数点レジスタの符号部および指数部においてパック・データ・レジスタはエイリアス化されない)、これはパック・データ命令には影響を与えない。前述のように、代替実施形態では、浮動小数点状態の任意の部分上にパック・データ状態をエイリアス化することができる。また、代替実施形態では、他の値を書き込むこともでき、また、レジスタの符号部または指数部、あるいはその両方を変更しなくてもよい。
Figure 0003792696
パック・データ命令の実行をさらに示すために、書き込まれる浮動小数点レジスタの符号部および指数部がすべて1に設定される。これが行われるのは、浮動小数点レジスタが浮動小数点レジスタの指数部を使用し、パック・データ命令を実行した後にレジスタのこの部分を決定状態のままにしておくことが望ましいからである。インテル・アーキテクチャ・マイクロプロセッサでは、浮動小数点レジスタの指数部がすべて1に設定されている場合、非数値(NAN)として解釈される。したがって、パック・データ・タグ330が非空状態に設定されるだけでなく、浮動小数点レジスタの指数部が、すでにパック・データ命令が実行されたことを示すために使用できるすべて1に設定される。このため、データを修正し不適切な結果をもたらすパック・データ命令および浮動小数点命令によるデータの混合がさらに防止される。したがって、浮動小数点コードは、浮動小数点レジスタが浮動小数点データを含むときと、パック・データを含むときとを区別する追加方法を有する。
したがって、既存のオペレーティング・システム(ワシントン州レッドモンドのマイクロソフト社(Microsoft Corporation)から市販されているMS Windows(登録商標)ブランド・オペレーティング環境など)との互換性を有し、良好なプログラミング技法を推進するパック・データ命令を実行する方法について説明する。パック・データ状態が浮動小数点状態上にエイリアス化されるので、パック・データ状態は、浮動小数点状態の場合と同様に、既存のオペレーティング・システムによって保存され復元される。さらに、パック・データ命令を実行することによって生成されるイベントを既存のオペレーティング・システム・イベント・ハンドラによって処理できるので、このようなイベント・ハンドラを修正する必要がなく、新しいイベント・ハンドラを追加する必要もない。このため、プロセッサは後方互換性を有し、更新時には、オペレーティング・システムを開発または修正するために必要なコストおよび時間が必要とされない。
やはり既存のオペレーティング・システムとの互換性を有するこの方法のいくつかの異なる実施形態について、図7Aないし図7C、図8、図9、図11Aないし図11Cを参照して説明する。これらの実施形態はそれぞれ異なるが、以下のことはすべてのこれらの実施形態(図4Aないし図4Bに示した実施形態、図7Aないし図7C、図8、図9に示した実施形態、図11Aないし図11Cに示した実施形態)に共通する。1)ソフトウェアからは少なくとも、浮動小数点状態およびパック・データ状態が単一の論理レジスタ・ファイルに格納されているように見える。2)EMビットが「浮動小数点命令をエミュレートすべきである」ことを示すときにパック・データ命令を実行すると、装置使用不能例外ではなく無効命令コード例外が生じる。3)TSビットが「部分コンテキスト切換が実行された」ことを示すときにパック・データ命令を実行すると装置使用不能例外が生じる。4)パック・データ命令の実行を試みることによって未処理の浮動小数点イベントが処理される。5)パック・データ命令を実行すると、次の浮動小数点命令が実行される前のある時点でトップ・オブ・スタック表示が0に変更される。6)EMMS命令が実行された後に他のパック・データ命令が実行されない場合、EMMS命令を実行すると、次の浮動小数点命令が実行される前のある時点ですべてのタグが空状態に変更される。7)パック・データ命令が実行された後にEMMS命令が実行されない場合、次の浮動小数点命令が実行される前のある時点ですべてのタグが非空状態に変更される。8)パック・データ命令の実行に応答してプロセッサによって書き込まれるFP/PDレジスタの符号フィールドおよび指数フィールドに、NAN(非数値)または無限を表すある値が記憶される。9)新しい非マイクロコード・イベント・ハンドラは必要とされない。
図4Aないし図4Bに示した実施形態の変形形態のうちのいくつかについて説明したが、これらの実施形態は、そのようなオペレーティング・システムとの全互換性または部分互換性を有し、かつ/あるいは良好なプログラミング技法を推進することができる。たとえば、本発明の代替実施形態は、図4Aないし図4Bに示した流れ図内のあるステップを異なる位置へ移動することができる。本発明の他の実施形態は1つまたは複数のステップを変更または削除することができる。たとえば、代替実施形態はEMビットをサポートしないこともある。もちろん、本発明は任意の数のシステム・アーキテクチャに有用であり、本明細書に記載したアーキテクチャに限らない。
本発明の実施形態を使用するプログラマが、浮動小数点命令およびパック・データ命令を実行する上記の方法を使用して、コードを、図3Dに示したように浮動小数点命令およびパック・データ命令の別々のブロックを備えるセクションに区画することを推奨する。これによって、浮動小数点演算のシーケンスからパック・データ演算のシーケンスへの遷移の前にパック・データの状態を保存しクリアすることができ、その逆の場合も同様である。この場合も、タスク切換時にコンテキストを保存する機構を含め従来技術のタスク切換機構との互換性が許容される。
パック・データ命令は浮動小数点レジスタ300(図3A)に影響を与え、単一のパック・データ命令がすべての浮動小数点タグを非空状態に設定するので、適切なブックキーピングを行うにはコードをコード・タイプのブロックとして区画することを推奨する。ブロック中の混合された浮動小数点命令およびパック・データ命令の実行の例を図3Dに示す。これには、コオペラティブ・マルチタスク・オペレーティング・システム内の動作、または単一のアプリケーション内の浮動小数点命令パック命令混合アプリケーション・コードを含めることができる。いずれの場合も、浮動小数点レジスタ300、対応するタグ、トップ・オブ・スタック表示の適切なブックキーピングは、機能を別々の浮動小数点パック・データ・コード・ブロックとして区画することによって保証される。
たとえば、図3Dに示したように、実行ストリームには第1の1組の浮動小数点命令380を含めることができる。浮動小数点命令380のブロックが終了した後、アプリケーションの必要に応じて浮動小数点状態を保存することができる。これは、浮動小数点スタックをポップすることと、インテル・アーキテクチャ・プロセッサでFSAVE/FNSAVE命令を使用することを含め、任意の数の既知の従来技術の技法を使用して実行することができる。これは、浮動小数点環境を保存し、対応する浮動小数点レジスタが有効なデータを含むことの表示があるかどうかに関して個別のタグを検査する最小コンテキスト切換時に行うこともできる。対応する浮動小数点データが有効なデータを含むことを示す各タグごとに、対応する浮動小数点レジスタが保存される。また、この場合、浮動小数点レジスタの数の表示も保存する必要がある。
第1の1組の浮動小数点命令380が実行された後に、実行ストリーム内の第2の1組のパック・データ命令382が実行される。1組の遷移命令390が実行されない場合、各パック・データ命令を実行するたびに、間隔386中のある時点ですべてのパック・データ・タグ330が非空状態に設定されることを想起されたい。
1組のパック・データ命令382が実行された後にタスク切換が行われない場合は、1組の遷移命令390が実行される。この1組の遷移命令390をパック・データ状態を保存するようにすることができる。これは、前述の従来技術の浮動小数点保存命令、またはパック・データ状態のみを保存する専用命令を含む機構を使用して実行することができる。パック・データ状態は、部分コンテキスト切換機構や最小コンテキスト切換機構を含め、任意の従来技術の方法で保存することができる。パック・データ状態を保存するかどうかにかかわらず、1組の遷移命令390によってパック・データ状態が空になる。この場合、パック・データ状態はパック・データ・タグ330および対応するエイリアス化浮動小数点タグ320に影響を与える。前述のように、パック・データ状態を空にすることは、単一の命令EMMSを実行し、あるいは以下で図14を参照して論じるように一連の浮動小数点演算を実行することによって行われる。このため、プロセッサは、間隔388中のある時点でパック・データ状態を空にし、浮動小数点命令を実行できるように初期設定される。
1組の遷移命令390が実行された後に、第2の1組の浮動小数点命令384が実行される。第2の間隔388中にタグが空にされトップ・オブ・スタック表示が第1の物理レジスタ0を指し示すように変更されたので、すべての浮動小数点レジスタを使用することができる。このため、普通なら浮動小数点命令の実行時に起こる浮動小数点スタック・オーバフロー例外の発生が防止される。いくつかのソフトウェア実施態様では、スタック・オーバフロー条件によって、割込みハンドラはパック・データ状態を保存し空にすることができる。したがって、本発明の実施済み実施形態では、パック・データ命令浮動小数点命令混合ブロックが許容される。しかし、遷移時にタスクの状態が破壊されないように、パック・データ命令と浮動小数点命令との間の遷移時に所望の浮動小数点状態またはパック・データ状態を保存するためにアプリケーション・プログラマまたはコオペラティブ・マルチタスク・コードによって適切なブックキーピングを行わなければならない。また、この方法では、本発明の実施済み実施形態を使用して、普通なら、推奨されないプログラミング技法を使用した場合に起こる、不要な例外が回避される。
EMMS命令では、パック・データ命令ストリームと浮動小数点命令ストリームとの間の遷移を円滑に行うことができる。前述のように、EMMS命令は、浮動小数点タグをクリアして、発生する恐れのある浮動小数点オーバフロー条件を回避し、さらにトップ・オブ・スタック・フィールド350に記憶されているトップ・オブ・スタック表示をリセットする。これらの動作を実行する専用命令を実行することができるが、既存の浮動小数点命令の組合せを使用してそのような動作を行うことも企図され、かつこの開示の範囲内である。この例を図14に示す。さらに、パック・データ命令を実行した後の第1の浮動小数点命令の実行にこの機能を組み込むことができる。この実施形態では、パック・データ命令を実行した後に(浮動小数点/パック・データ状態の環境を記憶する命令以外の)第1の浮動小数点命令を実行すると、プロセッサは暗黙的なEMMS動作(すべてのタグを空状態に設定する)を実行する。
図5は、本発明の一実施形態による例示的なコンピュータ・システム500を示すブロック図である。例示的なコンピュータ・システム500はプロセッサ505と、記憶装置510と、バス515とを含む。プロセッサ505はバス515によって記憶装置510に結合される。また、キーボード520やディスプレイ525などいくつかのユーザ入出力装置もバス515に結合される。ネットワーク530をバス515に結合することもできる。プロセッサ505はCISC、RISC、VLIW、混成アーキテクチャなど任意のタイプのアーキテクチャの中央演算処理装置を表す。また、プロセッサ505は1つまたは複数のチップに実装することができる。記憶装置510はデータを記憶する1つまたは複数の機構を表す。たとえば、記憶装置510には、読取り専用メモリ(ROM)や、ランダム・アクセス・メモリ(RAM)や、磁気ディスク記憶媒体や、光学記憶媒体や、フラッシュ・メモリ装置や、その他の機械可読媒体を含めることができる。バス515は1つまたは複数のバス(たとえば、PCI、ISA、X−Bus、EISA、VESAなど)およびブリッジ(バス・コントローラとも呼ぶ)を表す。この実施形態は単一のプロセッサ・コンピュータ・システムに関して説明しているが、本発明はマルチプロセッサ・コンピュータ・システムで実施することができる。また、この実施形態は、32ビット・コンピュータ・システムおよび64ビット・コンピュータ・システムに関して説明しているが、本発明の実施態様はそのようなコンピュータ・システムに限らない。
図5は、プロセッサ505がバス装置545と、キャッシュ550と、命令セット装置560とメモリ管理装置565と、イベント処理装置570とを含むことも示している。もちろん、プロセッサ505は、本発明の実施態様を理解するうえでは必要とされない追加回路を含む。
バス装置545はキャッシュ550に結合される。バス装置545は、プロセッサ505の外部で生成された信号を監視し評価すると共に、プロセッサ505内の他の装置および機構からの入力信号および内容要求に応答して出力信号を調整するために使用される。
キャッシュ550は、プロセッサ505によって命令キャッシュおよびデータ・キャッシュとして使用される1つまたは複数の記憶域を表す。たとえば、一実施形態では、キャッシュ550は、一方が命令用で一方がデータ用の2つの別々のキャッシュとして実施される。キャッシュ550は、命令セット装置560およびメモリ管理装置565に結合される。
命令セット装置560は、少なくとも1つの命令セットを復号し実行するハードウェアまたはファームウェア、あるいはその両方を含む。図5に示したように、命令セット装置560は復号/実行装置575を含む。復号装置は、プロセッサ505が受け取った命令を、制御信号またはマイクロコード・エントリ・ポイント、あるいはその両方に復号するために使用される。このような制御信号またはマイクロコード・エントリ・ポイント、あるいはその両方に応答して、実行装置は適切な動作を実行する。復号装置は、任意の数の異なる機構(たとえば、参照テーブルや、ハードウェア実施態様や、PLAなど)を使用して構成することができる。復号装置および実行装置による様々な命令の実行は本明細書では一連のif/then文で表されるが、これらのif/then文の一連の処理なしでも命令が実行できることを理解されたい。むしろ、このif/then処理を論理的に実行する機構は本発明の実施態様の範囲内であるとみなされる。
復号/実行装置575は、パック・データ命令を含む命令セット580を含む装置として示されている。このようなパック・データ命令は、任意の数の演算を実行するようにすることができる。たとえば、このようなパック・データ命令を実行すれば、プロセッサにパック浮動小数点演算またはパック整数演算、あるいはその両方を実行させることができる。一実施形態では、このようなパック・データ命令は、1995年8月31日に出願された出願番号08/521360号の「A Set of Instructions for Operating on Packed Data」に記載された命令である。命令セット580には、パック・データ命令だけでなく、新しい命令や、既存の汎用プロセッサで使用される命令と同様な命令、またはそのような命令と同じ命令を含めることができる。たとえば、一実施形態では、プロセッサ505は、Pentiumプロセッサなど既存のプロセッサで使用されるインテル・プロセッサ・アーキテクチャ命令セットとの互換性を有する命令セットをサポートする。
図5は、メモリ装置585を含む命令セット装置560も示す。メモリ装置585は、浮動小数点データ、パック・データ、整数データ、制御データ(たとえば、EM表示、TS表示、トップ・オブ・スタック表示など)を含め情報を記憶するプロセッサ505上の1組または複数組のレジスタを表す。そのうちのいくつかを本明細書で詳しく説明するある種の実施形態では、メモリ装置585は浮動小数点状態上にパック・データ状態をエイリアス化する。
メモリ管理装置565は、ページングやセグメント化など1つまたは複数のメモリ管理技法を実装するハードウェアおよびファームウェアを表す。任意の数のメモリ管理技法を使用することができるが、一実施形態では、インテル・プロセッサ・アーキテクチャとの互換性を有するメモリ管理技法が実装される。イベント処理装置570はメモリ管理装置565および命令セット装置560に結合される。イベント処理装置570は、1つまたは複数のイベント処理技法を実装するハードウェアおよびファームウェアを表す。任意の数のイベント処理技法を使用することができるが、一実施形態では、インテル・プロセッサ・アーキテクチャとの互換性を有するイベント処理技法が実装される。
図5は、コンピュータ・システム500によって実行されるオペレーティング・システム535およびパック・データ・ルーチン540が記憶されている記憶装置510も示す。パック・データ・ルーチン540は、1つまたは複数のパック・データ命令を含む命令のシーケンスである。もちろん、記憶装置510は好ましくは、本発明を理解するうえでは必要とされない追加ソフトウェア(図示せず)を含む。
一実施形態では、プロセッサ505上のレジスタ内のビットを使用して様々な表示(たとえば、EM表示、TS表示など)が実施されるが、代替実施形態では任意の数の技法を使用することができる。たとえば、代替実施形態では、これらの表示をオフチップで(たとえば、記憶装置510に)記憶し、かつ/あるいは各表示ごとに複数のビットを使用することができる。記憶域の語は本明細書では、記憶装置510内の位置、プロセッサ505内の1つまたは複数のレジスタなどを含め、データを記憶する機構を指すために使用される。
図6Aは、2つの別々の物理レジスタ・ファイルを使用して浮動小数点状態上にパック・データ・レジスタ状態をエイリアス化する、本発明の一実施形態による装置を示すブロック図である。この2つの物理レジスタ・ファイルは、エイリアス化されるので、論理的にはソフトウェアからはプロセッサ上で単一の論理レジスタ・ファイルとして実行されているように見える。図6Aは、遷移装置600と、浮動小数点装置605と、パック・データ装置610を示す。浮動小数点装置605は図1の浮動小数点装置135に類似している。浮動小数点装置605は、1組の浮動小数点レジスタ615と、1組のタグ620と、浮動小数点状態レジスタ625と、浮動小数点スタック参照装置630とを含む。一実施形態では、浮動小数点装置605は8つのレジスタ(R0ないしR7と呼ぶ)を含む。この8つのレジスタはそれぞれ、80ビット幅であり、符号フィールドと、指数フィールドと、小数部フィールドとを含む。浮動小数点スタック参照装置630は1組の浮動小数点レジスタ615をスタックとして操作する。浮動小数点状態レジスタ625は、トップ・オブ・スタック表示を記憶するトップ・オブ・スタック・フィールド635を含む。前述のように、トップ・オブ・スタック表示は、現在、1組の浮動小数点レジスタ615内のどのレジスタが浮動小数点スタックの1番上のレジスタであるかを識別する。図6Aでは、トップ・オブ・スタック表示は、物理的位置R4にあるレジスタ640をST(0)、すなわちスタックの1番上のレジスタとして識別する。
一実施形態では、1組のタグ620は、8つのタグを含み、単一のレジスタに記憶される。各タグはそれぞれの異なる浮動小数点レジスタに対応し、2つのビットを備える。別法として、各タグを、エイリアス化の結果として得られる論理レジスタ・ファイル内のそれぞれの異なるレジスタに対応するものとみることができる。図6Aに示したように、タグ645はレジスタ640に対応する。前述のように、これらのタグは、空レジスタ位置と非空レジスタ位置を区別するために浮動小数点装置605によって使用される。前述のように、実施形態では、空状態と非空状態のどちらかを識別する1ビット・タグを使用することができるが、ソフトウェアからは、タグ値が必要なときに適切な2ビット・タグ値を判定することによって、このような1ビット・タグが2つのビットを備えるように見える。もちろん、代替実施形態では2ビット・タグとすることができる。いずれの場合も、タグを、11によって示される空状態と00、01、10のうちの1つによって示される非空状態の2つの状態を識別するものとみることができる。
パック・データ装置610は、パック・データを記憶するために使用され、1組のパック・データ・レジスタ(パック・データ・レジスタ・ファイルとも呼ぶ)650と、パック・データ状態レジスタ655と、パック・データ非スタック参照装置660とを含む。一実施形態では、1組のパック・データ・レジスタ650は8つのレジスタを含む。この8つのレジスタはそれぞれ、1組の浮動小数点レジスタ615内の異なるレジスタに対応する。8つのパック・データ・レジスタはそれぞれ、64ビット幅であり、それが対応する浮動小数点レジスタの64ビット小数部フィールド上にマップされる。パック・データ非スタック参照装置660は、パック・データ・レジスタ650を固定レジスタ・ファイルとして操作する。したがって、パック・データ命令は、1組のパック・データ・レジスタ650内のどのレジスタを使用すべきかを明示的に指定する。
遷移装置600は、パック・データ・レジスタ650と浮動小数点レジスタ615の2つの物理レジスタ・ファイル間でデータをコピーすることによってパック・データ・レジスタ650を浮動小数点レジスタ615上にエイリアス化する。したがって、遷移装置600は、物理浮動小数点レジスタ615および物理パック・データ・レジスタ650がユーザ/プログラマから論理的に単一の論理レジスタ・ファイルとして見えるようにする。このように、ソフトウェアからは、浮動小数点命令およびパック・データ命令を実行する場合に単一の論理レジスタ・ファイルしか使用できないように見える。遷移装置600は、ハードウェアやマイクロコードを含め任意の数の技法を使用して構成することができる。もちろん、代替実施形態では、遷移装置600をプロセッサ上の任意の場所に配置することができる。さらに、代替実施形態では、遷移装置600は、プロセッサの外部に記憶された非マイクロコード・イベント・ハンドラでよい。
遷移装置600は、全エイリアス化または部分エイリアス化を行うようにすることができる。パック・データ・モードへの遷移時にすべての物理浮動小数点レジスタの内容をパック・データ・レジスタ・ファイルにコピーする場合、物理浮動小数点レジスタ・ファイルは完全にパック・データ・レジスタ・ファイル上にエイリアス化される。同様に、浮動小数点モードへの遷移時にすべての物理パック・データ・レジスタの内容を浮動小数点レジスタ・ファイルにコピーする場合、物理パック・データ・レジスタ・ファイルは完全に物理浮動小数点レジスタ・ファイル上にエイリアス化される。これに対して、部分エイリアス化では、「有用な」データを含むレジスタのみの内容がコピーされる。どのレジスタが有用なデータを含むかは、任意の数の基準に基づいて判定することができる。たとえば、対応するタグが非空状態を示す物理浮動小数点レジスタのみに記憶されているデータを物理パック・データ・レジスタにコピーすることによって部分エイリアス化を実施することができる。もちろん、実施形態は、パック・データ命令を実行する際に浮動小数点タグを使用することも、あるいは物理パック・データ・レジスタを物理浮動小数点レジスタ上に部分的にエイリアス化するための別々のパック・データ・タグを含むこともできる。別法として、接触された(読取りまたは書込み、あるいはその両方が行われた)パック・データ・レジスタまたは浮動小数点レジスタ、あるいはその両方を、有用なデータを含むレジスタとみることもできる。空状態または非空状態を示すのではなく、あるいは空状態または非空状態を示すだけでなく、この目的のために浮動小数点タグを使用することができる。別法として、どのレジスタが接触されたかを記録するために、浮動小数点レジスタまたはパック・データ・レジスタ、あるいはその両方用の追加表示を含めることができる。部分エイリアス化を実施する際の良好なプログラミング技法は、遷移時にデータがコピーされなかったレジスタを不定値を含むレジスタとみなさなければならないと仮定することである。
パック・データ状態レジスタ655は、1組のパック・データ・ダーティ・フィールド665と、スペキュラティブ・フィールド670と、モード・フィールド675と、例外状況フィールド680と、EMMSフィールド685とを含む。各パック・データ・ダーティ・フィールド665はそれぞれの異なるパック・データ・レジスタ650に対応し、ダーティ表示を記憶するために使用される。パック・データ・レジスタ650と浮動小数点レジスタ615との間に対応する関係があるので、各ダーティ表示は、それぞれの異なる浮動小数点レジスタ615との対応する関係を有する。1つのパック・データ・レジスタ650に値が書き込まれると、そのレジスタの対応するダーティ表示がダーティ状態を示すように変更される。遷移装置600によってパック・データ装置610から浮動小数点装置605への遷移が行われると、対応するダーティ表示がダーティ状態を示す浮動小数点レジスタ615の符号フィールドおよび指数フィールドに1が書き込まれる。このように、図4Bのステップ430を実施することができる。
モード・フィールド675は、プロセッサの現在の動作モード、すなわち、現在浮動小数点装置605が使用されている浮動小数点モード、またはパック・データ装置610が使用されているパック・データ・モードを識別するモード表示を格納するために使用される。プロセッサが浮動小数点モードでありパック・データ命令を受け取った場合、浮動小数点モードからパック・データ・モードへの遷移を実行しなければならない。逆に、プロセッサがパック・データ・モードであり浮動小数点命令を受け取った場合、パック・データ・モードから浮動小数点モードへの遷移を実行しなければならない。したがって、パック・データ命令と浮動小数点命令のどちらかを受け取ったときに、モード表示をポーリングして、遷移が必要かどうかを判定することができる。遷移が必要である場合は、その遷移が実行され、それに応じてモード表示が変更される。モード表示の動作については、本明細書で図7Aないし図9を参照して詳しく説明する。
例外状況フィールド680は、例外状況表示を格納するために使用される。例外状況表示は、前の浮動小数点命令を実行した結果として生じた未処理の例外があるかどうかを識別するために、パック・データ命令の実行時に使用される。一実施形態では、そのような例外が未処理であることを例外状況表示が示す場合、そのような例外はパック・データ・モードへの遷移の前に処理される。一実施形態では、この目的のために浮動小数点装置605によって使用される表示はコード化され、あるいは例外状況表示として例外状況フィールドに直接コピーされる。
EMMSフィールド685は、最後に実行されたパック・データ命令がEMMS命令であるかどうかを識別するEMMS表示を記憶するために使用される。一実施形態では、EMMS命令を実行したときに、EMMS表示は、最後に実行されたパック・データ命令がEMMS命令であることを示す1に変更される。これに対して、他のすべてのパック・データ命令を実行したときに、EMMS表示は零に変更される。遷移装置600は、パック・データ・モードから浮動小数点モードに遷移する際にEMMS表示をポーリングし、最後のパック・データ命令がEMMS命令であったかどうかを判定する。最後に実行されたパック・データ命令がEMMS命令である場合、遷移装置600はすべてのタグ620を空状態に変更する。しかし、最後に実行されたパック・データ命令がEMMSではないことをEMMSが示す場合、遷移装置600はすべてのタグ620を非空状態に変更する。このように、タグは、図4Bのステップ432および440と同様に変更される。
スペキュラティブ・フィールド670は、浮動小数点モードからパック・データ・モードへの遷移がスペキュラティブであるかどうかを識別するスペキュラティブ表示を格納するために使用される。遷移がスペキュラティブである場合、浮動小数点装置605に戻る遷移が必要な場合に時間を節約することができる。モード表示の動作については、本明細書で図7Aないし図9を参照して詳しく説明する。
図6Bは、本発明の実施形態による図6Aの浮動小数点スタック参照ファイルの一部の拡大図を示すブロック図である。図6Bは、1組のタグ620内のあるタグを選択的に変更するタグ修飾装置690を含む浮動小数点スタック参照装置630を示す。図6Bに示した実施形態では、1組のタグ620はそれぞれ、空状態であるか、それとも非空状態であるかを示す1ビットのみを含む。タグ修飾装置690は1組のTOS調整装置696と検査/修正装置698とを含む。各TOS調整装置696は、実施態様に応じて1つまたは複数のマイクロ演算を受け取るためにマイクロ演算回線692に結合される(たとえば、1つのマイクロ演算のみを受け取るTOS調整装置は1つしか存在できない)。少なくとも、タグの変更を必要とする浮動小数点命令に関するマイクロ演算を、TOS調整装置696が受け取る。もちろん、すべての各マイクロ演算またはその関連部分のみをTOS調整装置696が受け取るように浮動小数点スタック参照装置630を構成することができる。
マイクロ演算を受け取ったことに応答して、TOS調整装置は、少なくとも1)マイクロ演算によって識別される1組のタグ620内のあるタグのアドレスと、2)そのタグに対して実行する処置(たとえば、0または1に変更する、ポーリングするなど)を示す信号を検査/修正装置698へ送信する。本発明を理解するうえでタグのポーリングは必要とされないので、これについて本明細書ではこれ以上説明しない。各TOS調整装置696は、現在のTOS値を受け取りそれに応じてタグ・アドレスを調整するために回線694にも結合される。検査/修正装置698は少なくとも書込み線によって各タグ620に結合される。たとえば、検査/修正装置698は書込み線によってタグ645に結合される。タグ・アドレスおよび対応する信号を受け取ったことに応答して、検査/修正装置698は必要な検査または修正、あるいはその両方を実行する。複数のマイクロ演算を一度に受け取ることのできる実施態様では、検査/修正装置698はマイクロ演算間の比較も実行し、それらのマイクロ演算が同じタグを修正するものであるかどうかを判定する(たとえば、マイクロ演算1ではタグ1を1に変更する必要があり、それに対して、マイクロ演算1と同じ時間に受け取ったマイクロ演算2ではタグ1を0に変更する必要があると仮定する)。同じタグを修正する場合、検査/修正装置698は、最後に実行すべきマクロ演算はどれかを判定し、そのマイクロ演算に応じてタグを変更する。上記の例では、マイクロ演算1の後にマイクロ演算2を実行すると仮定しているので、検査/修正装置698はタグ1を0を示すように変更する。
たとえば、タグ(たとえば、タグ645)を空状態に変更することを必要とする浮動小数点演算を実行する場合、TOS調整装置は現在のTOS値を受け取り、マイクロ演算線692上で、タグを識別するマイクロ演算を受け取る。TOS調整装置はタグ(たとえば、タグ645)のアドレスを判定し、そのアドレスと、そのタグを空状態に変更すべきであることを示す信号とを検査/修正装置698へ送信する。これに応答して、検査/修正装置698は、タグ645に結合された書込み線上で0を送信することによってタグ645を空状態に変更する。
一実施形態では、一度にすべてのタグを修正しなくても済むように浮動小数点命令を構成することができるので、タグ修飾装置690は、一度にすべてのタグは修正できないように実施される。回路の複雑さを回避するために、この既存の機構を使用して、浮動小数点モードへの遷移に応答してタグのグローバル変更を行うことができる。なお、遷移装置600をマイクロコードで形成する場合、1組のマイクロコード命令によって、復号装置は、8つのタグを変更するいくつかの既存のマイクロ演算を発行する。したがって、最後に実行されたパック・データ命令がEMMS命令であることをEMMS表示が示している間にパック・データ・モードへの遷移が実行されたことに応答して、復号装置は遷移装置600にアクセスし、いくつかの既存のマイクロ演算を発行する。これらのマイクロ演算に応答して、タグ修飾装置690は、対応するタグを空状態に修正する。これに対して、最後に実行されたパック・データ命令がEMMS命令ではないことをEMMS表示が示している間にパック・データ・モードへの遷移が実行されたことに応答して、復号装置は遷移装置600にアクセスし、タグ修飾装置690に各タグを非空状態に変更させるいくつかの既存のマイクロ演算を発行する。そのような実施形態では、タグのグローバル変更に約4クロック・サイクルないし8クロック・サイクルが必要である。
パック・データ・モードへの遷移に応答してすべてのタグを変更する一実施形態について説明したが、代替実施形態では任意の数の機構を使用することができる。たとえば、新しいマイクロ演算を備え、タグ修飾装置690を、新しいマイクロ演算に応答してタグをグローバルに変更できるようにすることによって、すべてのタグの空状態または非空状態への変更を単一のクロック・サイクルで完了することができる。この実施形態では、復号装置に、(いくつかの別々のマイクロ演算ではなく)この単一のマイクロ演算を発行してすべてのタグを空状態または非空状態に変更させるように、遷移装置600を実装することができる。他の例では、復号装置は、タグ620に結合することができ、かつEMMS命令を受け取ったことに応答してすべてのタグ620を変更する追加ハードウェアを含むことができる。
前述のように、1組のタグ620を1ビット・タグを有するものとして説明したが、1組のタグ620は各タグごとに2つのビットがあるように見えるようにすることができる。代替実施形態では、タグの変更後の様々な状態(たとえば、00、01、10、11)を示す追加コード化線または非コード化線を備えることによって各タグごとに2つのビットを形成することができる。
図7A、図7B、図7C、図8、図9は、オペレーティング・システムからは見えず、良好なプログラミング方法を推進し、図6Aのハードウェア構成を使用して実施することができるように、1組の浮動小数点レジスタ上にエイリアス化された1組のレジスタに対してパック・データ命令を実行する、本発明の一実施形態による方法を示す。この流れ図は、図4Aおよび図4Bを参照して説明した流れ図に類似している。図4Aおよび図4Bを参照して、ステップが変更され、移動され、かつ/あるいは削除される多数の代替実施形態について説明した。図4Aおよび図4Bで実行されたステップと同様な、図7A、図7B、図7C、図8、図9を参照して説明するステップを少なくとも、そのような代替実施形態を使用して実行することができることを理解されたい。この流れ図はステップ700から始まる。フローはステップ700からステップ702に進む。
ステップ702に示したように、1組のビットが命令としてアクセスされ、フローはステップ704に進む。この1組のビットは、命令によって実行される演算を識別する命令コードを含む。したがって、ステップ702は、図4Aのステップ402に類似している。
ステップ704で、命令コードが有効であるかどうかが判定される。命令コードが有効でない場合、フローはステップ706に進む。そうでない場合、フローはステップ708に進む。ステップ704は、図4Aのステップ404に類似している。
ステップ706に示したように、無効命令コード例外が生成され、適切なイベント・ハンドラが実行される。したがって、ステップ706は、図4Aのステップ406に類似している。
ステップ708で、どんな種類の命令コードを受け取ったかが判定される。命令が浮動小数点命令でも、あるいはパック・データ命令でもない場合、フローはステップ710に進む。しかし、命令が浮動小数点命令である場合、フローはステップ712に進む。これに対して、命令がパック・データ命令である場合、フローはステップ714に進む。したがって、ステップ708は図4Aのステップ408に類似している。
ステップ710に示したように、プロセッサは命令を実行する。このステップは本発明を理解するうえで必要とされないので、本明細書ではこれ以上説明しない。ステップ710は図4Aのステップ410に類似している。
ステップ712に示したように、EM表示が1に等しいかどうか(前述のソフトウェア規約によれば、浮動小数点装置をエミュレートすべきかどうか)と、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が行われたかどうか)が判定される。EM表示またはTS表示、あるいはその両方が1に等しい場合、フローはステップ716に進む。そうでない場合、フローはステップ720に進む。したがって、ステップ712は図4Aのステップ412に類似している。
ステップ716で、装置使用不能例外が発生し、対応するイベント・ハンドラが実行される。したがって、ステップ716は図4Aのステップ416に類似している。前述のように、EM表示およびTS表示を使用して、浮動小数点命令をエミュレートすべきかどうか、あるいは部分コンテキスト切換が行われたかどうか、あるいはその両方を判定するように、このイベント・ハンドラを構成することができる。
ステップ714で、EM表示が1に等しいかどうかが判定される。したがって、ステップ714は図4Aのステップ414に類似している。このため、ステップ714で、EM表示が1に等しいと判定された場合、フローはステップ718ではなくステップ706に進む。そうでない場合、フローはステップ718に進む。
前述のように、ステップ706で、無効命令コード例外が発生し、対応するイベント・ハンドラが実行される。EM=1のときのパック・データ命令の実行の試みを無効命令コード例外に切り換えることによって、上記で図4Aのステップ406を参照して説明したように実施形態はオペレーティング・システムから見えなくなる。
オペレーティング・システムから見えないようにEM表示を処理する一実施形態について説明したが、代替実施形態では他の技法を使用することができる。たとえば、代替実施形態では、EM表示が1に等しいときにパック・データ命令の実行が試みられたことに応答して装置使用不能例外と、異なる既存のイベントと、新しいイベントのいずれかを発生させることができる。他の例を挙げると、代替実施形態では、パック・データ命令を実行するときにEM表示を無視することができる。
ステップ718に示したように、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が行われたかどうか)が判定される。TS表示が1に等しい場合、フローはステップ716に進む。そうでない場合、フローはステップ722に進む。したがって、ステップ718は図4Aのステップ418に類似している。
前述のように、ステップ716で、装置使用不能例外が発生し、対応するイベント・ハンドラが実行される。ステップ716は図4Aのステップ418に類似している。ステップ714が、EM表示が1に等しい状況を無効命令コード例外に切り換えているので、EM表示は0に等しくなければならず、TS表示は1に等しくなければならない。TS表示が1に等しいので、イベント・ハンドラはプロセッサに、上記で部分コンテキスト切換に関して説明したように機能させ(浮動小数点装置の内容を記憶し、必要に応じて正しい浮動小数点状態を復元する)、かつプロセッサに、ステップ702で受け取った命令の実行を再開することによって実行を再開させる。パック・データ状態は浮動小数点状態上にエイリアス化されているので、このイベント・ハンドラは浮動小数点状態とパック・データ状態の両方のために働く。このため、この方法はオペレーティング・システムからは見えない。もちろん、代替実施形態ではこのイベント・ハンドラを任意の数の方法を利用できるようにすることができる。
オペレーティング・システムから見えないようにTS表示を処理する一実施形態について説明したが、代替実施形態では他の技法を使用することができる。たとえば、代替実施形態ではTS表示を実施しなくてもよい。そのような代替実施形態は、TS表示を使用して部分コンテキスト切換を実施するオペレーティング・システムとの互換性を有さない。しかし、このような代替実施形態は、TS表示を使用した部分コンテキスト切換をサポートしない既存のオペレーティング・システムとの互換性を有する。他の例を挙げると、TS表示が1に等しいときのパック・データ命令の実行の試みを新しいイベント・ハンドラ、または修正された既存のイベント・ハンドラに切り換えることができる。このイベント・ハンドラは、この状況に応じて適切とみなされる処置をとるようにすることができる。たとえば、パック・データ状態が浮動小数点状態上にエイリアス化されない実施形態では、このイベント・ハンドラは、パック・データ状態または浮動小数点状態、あるいはその両方を記憶することができる。
前述のように、浮動小数点命令を実行する間にある数値エラーが発生した場合、そのようなエラーは、次の浮動小数点命令の実行が試みられるまで未処理のままにされ、次の浮動小数点命令の実行に割り込みこのようなエラーを処理することができる。前述のように、図4のステップ420とステップ422の両方で、処理できるそのような未処理のエラーがあるかどうかが判定される。図4Aのステップ420と同様に、ステップ720で、処理できるそのような未処理のエラーがあるかどうかが判定される。そのような未処理のエラーがある場合、フローはステップ720からステップ724に移る。しかし、ステップ720で、そのような未処理のエラーがないと判定された場合、フローはステップ726に進む。これに対して、パック・データ命令の実行を試みるときの、前の浮動小数点命令による未処理のエラーがあるかどうかの判定は、以下で詳しく説明する別のステップで実行される。このため、ステップ722はステップ422とは異なる。
ステップ724で、未処理浮動小数点エラー・イベントが発生する。したがって、ステップ724は図4Aのステップ424に類似している。上記で図4Aのステップ424を参照して説明したように、このイベントを内部イベントまたは外部イベントとみなし、それに応じて処理することができる。
ステップ726に示したように、プロセッサが浮動小数点モードで動作していることをモード表示が示しているかどうかが判定される。したがって、ステップ726は図4Bのステップ426とは異なる。プロセッサは、浮動小数点モードではない場合、パック・データ・モードから浮動小数点モードへ遷移し浮動小数点命令を実行する必要がある。したがって、プロセッサが浮動小数点モードではない場合、フローはステップ728に進む。そうでない場合、フローはステップ732に進む。
ステップ728で、プロセッサはパック・データ・モードから浮動小数点モードへ遷移し、フローはステップ730に進む。ステップ728は図6Aの遷移装置600によって実行され、このステップについては図9を参照して詳しく説明する。
ステップ730に示したように、「マイクロ再開」を実行することによって、ステップ702で受け取った命令が再開される。一実施形態では、マイクロコードを使用してステップ728が実行され、命令がマイクロ再開されるので、オペレーティング・システム・イベント・ハンドラを実行する必要はない。このため、プロセッサの外部での処置を施さずに現在のタスクの実行を再開することができる。すなわち、オペレーティング・システム・イベント・ハンドラなどの非マイクロコード・イベント・ハンドラを実行する必要はない。したがって、プロセッサは、オペレーティング・システムを含め、ソフトウェアから見えないようにパック・データ・モードから浮動小数点モードへ遷移することができる。このように、この実施形態は既存のオペレーティング・システムとの互換性を有する。代替実施形態をより低い互換性を有するようにすることができる。たとえば、プロセッサに追加イベントを組み込むことができ、この遷移を実行する追加イベント・ハンドラをオペレーティング・システムに追加することができる。
ステップ732に示したように、浮動小数点命令が実行される。ステップ732は図4Bのステップ426に類似している。オペレーティング・システムから見えないようにするために、一実施形態ではまた、必要に応じてタグを変更し、このとき処理できる数値エラーを報告し、他の数値エラーを未処理のままにしておく。前述のように、タグを変更することによって、対応するタグが非空状態を示す浮動小数点レジスタのみの内容を記憶するオペレーティング・システム技法からはこの実施形態が見えないようにすることができる。しかし、前述のように、代替実施形態をより少しのオペレーティング・システム技法との互換性を有するようにすることができる。たとえば、既存のオペレーティング・システムがタグを使用しない場合でも、タグを実施しないプロセッサは、そのオペレーティング・システムとの互換性を有する。さらに、本発明では数値浮動小数点例外を未処理のままにしておく必要はなく、したがって、数値浮動小数点例外を未処理のままにしない実施形態は本発明の範囲内である。
ステップ722に示したように、プロセッサがパック・データ・モードであることをモード表示が示しているかどうかが判定される。したがって、ステップ722は図4Aのステップ422とは異なる。ステップ722が実行され、プロセッサがパック・データ命令を実行するのに適切なモードであるかどうかが判定される。プロセッサがパック・データ・モードではない場合、プロセッサは浮動小数点モードからパック・データ・モードに遷移しパック・データ命令を実行する必要がある。したがって、プロセッサがパック・データ・モードではない場合、フローはステップ734に進む。そうでない場合、フローはステップ738に進む。
ステップ734で、プロセッサは浮動小数点モードからパック・データ・モードへ遷移し、フローはステップ736に進む。ステップ734は図6Aの遷移装置600によって実行され、このステップについては図8を参照して詳しく説明する。
ステップ736に示したように、マイクロ再開を実行することによって、ステップ702で受け取った命令が再開される。したがって、ステップ736はステップ730に類似している。
ステップ740で、パック・データ命令がEMMS命令であるかどうかが判定される。パック・データ命令がEMMS命令である場合、フローはステップ742に進む。そうでない場合、フローはステップ744に進む。パック・データ命令は独立の装置(すなわち、パック・データ装置)上で実行されるので、ある動作(たとえば、EMMS命令の実行に応答してタグを空状態に変更し、他のパック・データ命令の実行に応答してタグを非空状態に変更すること)を実際に実行するよりも、浮動小数点モードに戻る遷移時に、ステップ728で何を行わなければならないかを識別する表示(たとえば、EMMS表示)を記憶する方が効率的である。EMMS表示とその他の表示の使用については、図9で詳しく説明するパック・データ・モードから浮動小数点モードへの遷移のステップを参照して説明する。
ステップ742に示したように、EMMS表示は、最後のパック・データ命令がEMMS命令であったことを示すように変更される。ステップ742の完了時に、プロセッサは次の命令(ステップ702で受け取った命令の後に論理的に続く命令)を実行することができる。
ステップ744から明らかなように。最終パック・データ命令はEMM命令でなかったことを示すようにEMM表示が変更される。フローはステップ744からステップ746へと進む。表示動作の説明は図8との関連で後に説明する。
ステップ746に示したように、パック・データ命令がプロセッサにエイリアス化レジスタに書込みを行わせるかどうかが判定される。そうである場合、フローはステップ748に進む。そうでない場合、フローはステップ750に進む。したがって、ステップ746は図4Bのステップ436に類似している。
ステップ748で、エイリアス化レジスタの対応するダーティ表示がダーティ状態に変更され、フローはステップ750に進む。このようなダーティ表示は、ステップ728で、パック・データ・モードから浮動小数点モードへ遷移する際に使用される。前述のように、このようなダーティ表示は、符号フィールドおよび指数フィールドを1に設定する必要のある浮動小数点レジスタを識別するために使用される。一実施形態では符号フィールドおよび指数フィールドに1が書き込まれるが、代替実施形態ではNAN(非数値)または無限を表す任意の値を使用することができる。符号フィールドおよび指数フィールドが変更されない代替実施形態ではステップ746および748は必要とされない。
ステップ750に示したように、パック・データ命令は、何らの数値例外を発生させることなく実行される。それ故ステップ750はトップ・オブ・スタック表示が変更される以外は。図4Bのステップ440と類似している。前述したように、オペレーティング・システムに追加のイベント・ハンドラが組み込まれ、あるいは既存のイベント・ハンドラがエラーを処理できるように、完全ではないがオペレーティング・システムを見ることができる別の装置が得られる。もし、パック・データ命令を実行しようと試みた結果、あるメモリ・イベントが発生すると、その実行は中断され、このイベントが処理される。
したがって、(ワシントン州レッドモンドのマイクロソフト社(Microsoft Corporation)から市販されているMS−DOS Windowsブランド動作環境など)既存のオペレーティング・システムとの互換性を有し、良好なプログラミング技法を推進するパック・データ命令を実行する方法および装置について説明した。パック・データ状態は、浮動小数点状態上にエイリアス化されるので、浮動小数点状態の場合と同様に既存のオペレーティング・システムによって保存され復元される。さらに、パック・データ命令を実行することによって発生したイベントを既存のオペレーティング・システム・イベント・ハンドラによって処理することができるので、このようなイベント・ハンドラを修正する必要がなく、新しいイベント・ハンドラを追加する必要がない。このため、プロセッサは後方互換性を有し、更新時に、オペレーティング・システムを開発または修正するために必要なコストおよび時間が必要とされない。
そのうちのいくつかについて説明したこの実施形態の変形形態は、そのようなオペレーティング・システムとの全互換性または部分互換性を有し、かつ/あるいは良好なプログラミング技法を推進することができる。たとえば、本発明の代替実施形態では、あるステップを流れ図の異なる位置へ移動することができる。本発明の他の代替実施形態では、1つまたは複数のステップを変更または削除することができる。図7Aまたは図7Bまたは図7C、あるいはそれらの組合せからあるステップを削除する場合、図6A中のあるハードウェアは必要とされない。たとえば、EMMS命令を使用しない場合、EMMS表示は必要とされない。もちろん、本発明は任意の数のシステム・アーキテクチャに有用であり、本明細書で説明するアーキテクチャに限らない。
さらに、2つの物理レジスタ・ファイルをエイリアス化する方法および装置について説明したが、代替実施形態では任意の数の物理レジスタ・ファイルをエイリアス化し任意の数の異なる種類の命令を実行することができる。また、浮動小数点命令を実行する物理スタック・レジスタ・ファイルと、パック・データ命令を実行する物理フラット・レジスタ・ファイルに関してこの実施形態を説明したが、本明細書の教示を使用して、レジスタ・ファイル上の実行される命令の種類にかかわらず、少なくとも1つの物理スタック・レジスタ・ファイルと少なくとも1つの物理フラット・レジスタ・ファイルをエイリアス化することができる。
また、浮動小数点命令およびパック・データ命令を実行する方法および装置について説明したが、代替実施形態を、いくつかの異なる種類の命令を実行するようにすることができる。たとえば、前述のように、プロセッサにパック整数演算またはパック浮動小数点演算、あるいはその両方を実行させるようにパック・データ命令を形成することができる。他の例を挙げると、代替実施形態では、パック・データ命令ではなく、あるいはパック・データ命令の他に、スカラ浮動小数点命令およびスカラ整数命令を実行できるように物理レジスタ・ファイルにエイリアス化することができる。他の例を挙げると、代替実施形態では、パック・データ命令を浮動小数レジスタ上にエイリアス化するのではなく、パック・データ命令を整数レジスタ上にエイリアス化することができる。他の例を挙げると、代替実施形態では、スカラ浮動小数点命令、スカラ整数命令、パック命令(整数または浮動小数点、あるいはその両方)の実行を単一の論理レジスタ・ファイル上にエイリアス化することができる。したがって、本明細書の教示を使用して、ソフトウェアから論理的に、いくつかの異なるデータ・タイプに作用する命令を単一の論理レジスタ・ファイルを用いて実行できるように見えるようにすることができる。
図8は、本発明の一実施形態によって図7Cのステップ734を実行する方法を示す流れ図である。前述のように、ステップ734で、プロセッサは浮動小数点モードからパック・データ・モードへ遷移する。フローはステップ722からステップ800へ移る。
ステップ800に示したように、前の浮動小数点命令による未処理のエラーがあるかどうかが判定される。そうである場合、フローはステップ724に移る。そうでない場合、フローはステップ804に進む。したがって、ステップ800は第7図のステップ720および図4Aのステップ422に類似している。
前述のように、ステップ724で、未処理浮動小数点エラー例外が発生し、適切なイベント・ハンドラが実行される。上記で図4Aのステップ424を参照して説明したように、このイベントを内部イベントまたは外部イベントとみなし、それに応じて処理することができる。代替実施形態では、パック・データ命令の実行時にそのようなエラーは未処理のままにされる。
ステップ804に示したように、浮動小数点レジスタの小数部フィールドに格納されているデータは、パック・データ・レジスタにコピーされる。そうする際に、浮動小数点レジスタに記憶されていたデータをパック・データとして処理することができる。全エイリアス化を行う場合、すべての浮動小数点レジスタの小数部フィールドに格納されているデータが、対応するパック・データ・レジスタにコピーされる。これに対して、部分エイリアス化を行う場合、対応するタグが非空状態を示す浮動小数点レジスタのみの小数部フィールドに格納されているデータが、適切な対応するパック・データ・レジスタにコピーされるように、実施形態を形成することができる。浮動小数点レジスタに記憶されているデータをパック・データとして処理することを許容しない代替実施形態は、ステップ804を実行する必要はない。フローはステップ804からステップ806へ移る。
ステップ806で、EMMS表示が、最後のパック・データ命令がEMMS命令ではなかったことを示すように変更され、フローはステップ808に進む。このステップは、パック・データ・モードを初期設定するために実行される。
ステップ808に示したように、各ダーティ表示は、クリーン状態を示すように変更され、フローはステップ810に進む。ステップ806およびステップ808は、パック・データ・モードを初期設定するために実行される。
ステップ810に示したように、スペキュラティブ表示は、浮動小数点からパック・データへの遷移がスペキュラティブであることを示すように変更される。ステップ804で、浮動小数点レジスタに記憶されているデータがパック・データ・レジスタにコピーされたが、浮動小数点装置の状態は変更されていない。したがって、浮動小数点状態は依然として現在値である(たとえば、浮動小数点レジスタの小数部フィールドに記憶されているデータが、パック・データ・レジスタに記憶されているデータと等価であり、タグが変更されておらず、トップ・オブ・スタック表示が変更されていない)。これに続いてパック・データ命令を実行する場合、パック・データ・レジスタに記憶されているデータが変更され、浮動小数点状態はもはや現在値ではなくなる。このため、パック・データ・モードから浮動小数点モードへの遷移では、浮動小数点状態を更新する必要がある(たとえば、パック・データ・レジスタに記憶されているデータを、浮動小数点レジスタの小数部フィールドにコピーする必要があり、トップ・オブ・スタック表示を0に変更する必要があり、タグを空状態に変更する必要がある)。しかし、パック・データ命令を実行する前に浮動小数点命令の実行を試みる場合(浮動小数点モードからパック・データ・モードへの遷移を生じさせるパック・データ命令を実行する前にイベントが発生した場合、たとえば、パック・データ命令の実行を試みている間にメモリ障害が起こった場合に、こうなる可能性がある)、浮動小数点状態は、依然として現在値であるので更新する必要はない。この更新を回避することによって、パック・データ・モードから浮動小数点モードへの遷移に関するオーバヘッドが著しく低減される。このことを利用して、このステップで、スペキュラティブ表示は、浮動小数点装置からパック・データ装置への遷移がスペキュラティブであることを示すように変更される。浮動小数点状態は依然として現在値である。これに続いてパック・データ命令を実行する場合、スペキュラティブ表示は、上記で第7図のステップ738を参照して説明したように、遷移がもはやスペキュラティブではないことを示すように変更される。スペキュラティブ表示の使用については、図9を参照して詳しく説明する。スペキュラティブ表示を使用した一実施形態について説明したが、代替実施形態では、そのようなスペキュラティブ表示の実施を回避することができる。
ステップ812で、プロセッサが現在パック・データ・モードであることを示すようにモード表示が変更される。フローは、ステップ812からステップ736へ移る。
図9は、本発明の一実施形態による第7図のステップ728を実行する方法を示す流れ図である。前述のように、プロセッサはステップ728で、パック・データ・モードから浮動小数点モードへ遷移する。フローはステップ726からステップ900へ移る。
ステップ900で、パック・データ・モードへの遷移が依然としてスペキュラティブであることをスペキュラティブ表示が示しているかどうかが判定される。前述のように、スペキュラティブ表示を使用して、パック・データ・モードから浮動小数点モードへの遷移に関するオーバヘッドを低減することができる。ステップ900で、浮動小数点からパック・データへの遷移がスペキュラティブであると判定され、ステップ902ないしステップ912が回避され、フローが直接ステップ914に進み、遷移オーバヘッドが低減される。そうでない場合、フローはステップ902に進む。
ステップ902に示したように、最後のパック・データ命令がEMMS命令であったことをEMMS表示が示しているかどうかが判定される。そうである場合、フローはステップ904に進む。そうでない場合、フローはステップ906に進む。前述のように、パック・データ命令が独立の装置(すなわち、パック・データ装置)上で実行されるので、ある種の動作(たとえば、タグを変更すること)を実行するよりも、浮動小数点モードに戻る遷移時に、何を行わなければならないかを識別する表示(たとえば、EMMS表示)を記憶する方が効率的である。したがって、EMMS命令に応答してタグを変更するのでなく、EMMS表示が変更されている。その場合、浮動小数点モードに戻る遷移を実行する際、それに応じて、本明細書に示したようにタグが変更される。
ステップ904で、すべてのタグが空状態に変更され、フローはステップ908に進む。このように、タグは図4Bのステップ432と同様に変更される。
ステップ906で、すべてのタグが非空状態に変更され、フローはステップ908に進む。このように、タグは図4Bのステップ440と同様に変更される。
ステップ908に示したように、パック・データ・レジスタの内容が浮動小数点レジスタの小数部フィールドにコピーされ、フローがステップ910に進む。このように、パック・データ・レジスタに記憶されているデータを浮動小数点データとして処理することができる。さらに、既存のオペレーティング・システムが、マルチタスクを実行する際にすでに浮動小数点状態を記憶しているので、パック・データ状態は、浮動小数点状態の場合と同様に、様々なコンテキスト構造に記憶され、そのような構造から復元される。このように、物理パック・データ・レジスタは物理浮動小数点レジスタ上にエイリアス化され、プロセッサは論理的に、単一の論理レジスタ・ファイルを有するように見える。このため、この実施形態は、オペレーティング・システムを含め、ソフトウェアからは見えない。全エイリアス化を行う場合、すべてのパック・データ・レジスタに記憶されているデータが、対応する浮動小数点レジスタの小数部フィールドにコピーされる。これに対して、部分エイリアス化が実装される場合、接触されたパック・データ・レジスタのみに記憶されているデータが適切な対応する浮動小数点レジスタの小数部フィールドにコピーされるように実施形態を実装することができる。
ステップ910に示したように、トップ・オブ・スタックは初期設定値に変更される。一実施形態では、この値は零である。代替実施形態では、パック・データ命令を実行すると、トップ・オブ・スタック表示が初期設定値に設定される。フローはステップ910からステップ912へ移る。
ステップ912に示したように、対応するダーティ表示がダーティ状態である浮動小数点レジスタの符号フィールドおよび指数フィールドに1が格納される。このように、図4Bのステップ438が実行される。フローはステップ912からステップ914へ移る。
ステップ914で、プロセッサが浮動小数点モードで動作していることを示すようにモード表示が変更され、フローがステップ730に進む。このように、パック・データ・モードから浮動小数点モードへの遷移が実行される。
図10は、本発明の他の実施形態による、単一の物理レジスタ・ファイルを使用してパック・データ状態を浮動小数点状態上にエイリアス化する装置内のデータ・フローを示すブロック図である。図10に示した装置は、図5の命令セット装置560として使用することができる。一実施形態では、図10の装置は少なくとも命令セット580を実行することができる。図10は、復号装置1002と、名前変更装置1004と、リタイヤメント装置1006と、発行装置1008と、実行装置1010と、1組の状態レジスタ1012と、マイクロコードROM1014を示す。
復号装置1002は、プロセッサが受け取った命令を制御信号またはマイクロコード・エントリ・ポイント、あるいはその両方に復号するために使用される。このようなマイクロコード・エントリ・ポイントは、復号装置1002によってプロセッサ内の様々な装置へ送られるマイクロ演算(「uops」とも呼ぶ)のシーケンスを識別する。ある種のマイクロ演算は復号装置1002に記憶することができるが、一実施形態では、マイクロ演算の大部分がマイクロコードROM1014に記憶される。この実施形態では、復号装置1002はマイクロコード・エントリ・ポイントをマイクロコードROM1014へ送り、マイクロコードROMは、必要なマイクロ演算を復号装置1002へ送り返すことによって応答する。
復号装置1002が受け取る命令の大部分は、命令の演算を実行すべき1つまたは複数のオペランド(データ、レジスタ位置、メモリ内の位置のいずれか)を含む。レジスタを識別するオペランドは名前変更装置1004へ送られる。
名前変更装置1004およびリタイヤメント装置1006は、レジスタ名前変更を実施するために使用される。レジスタ名前変更技法は良く知られており、いくつかの異なる命令がレジスタなど限られた数の記憶位置を使用することを試みるために生じる記憶域競合を回避するために実行される。記憶域競合は、競合する命令どうしが他の点では独立しているにもかかわらず互いに干渉するときに起こると考えられている。記憶域競合は、レジスタと値との間の対応を再確立するために使用される追加レジスタ(本明細書ではバッファ・レジスタと呼ぶ)を設けることによって除去することができる。レジスタ名前変更を実施するために、プロセッサは通常、生成されるあらゆる新しい値、すなわちレジスタに書込みを行うあらゆる命令に対してそれぞれの異なるバッファ・レジスタを割り振る。値を読み取るために最初のレジスタを識別する命令はその代わりに、割り振られたバッファ・レジスタ内の値を得る。したがって、ハードウェアは、最初のレジスタの名前を変更して、命令を識別しバッファ・レジスタおよび正しい値を識別する。いくつかの異なる命令中の同じレジスタ識別子は、レジスタ割当てに対するレジスタ参照の位置に応じて、それぞれの異なるハードウェア・レジスタにアクセスすることができる。レジスタ名前変更の詳細な説明については、Johnson,Mike著「Superscalar Micro Processor Design」(1991年、PTR Prentice−Hall,Inc.、ニュージャージー)、「Flag Renaming and Flag Mask Within Register Alias Table」(米国特許出願第08/204521号、Colwell等)、「Integer and Floating Point Register Alias Table Within Processor Device」(米国特許出願第08/129678号、Clift等)、「Partial Width Stalls Within Register Alias Table」(米国特許出願第08/174841号、Colwell等)を参照されたい。ある命令が(未処置のままにされないイベントを発生せずに)実行を首尾良く完了すると、命令に割り振られたバッファ・レジスタが「リタイア」される。すなわち、値が、バッファ・レジスタから、命令中で識別される最初のレジスタへ転送される。代替実施形態では、インタロック、部分名前変更など記憶域競合を解消する任意の数の技法を利用することができる。
リタイヤメント装置1006は、1組のバッファ・レジスタ1020と、1組のFP/PDレジスタ1022と、1組の整数レジスタ1024とを含む。1組のバッファ・レジスタ1020は、レジスタ名前変更に使用される追加レジスタを備える。一実施形態では、1組のバッファ・レジスタ1020は40個のレジスタを含み、代替実施形態では、任意の数のレジスタを使用することができる。この実施形態では、1組のバッファ・レジスタ1020を順序変更バッファとして操作することができる。
一実施形態では、FP/PDレジスタ1022および整数レジスタ1024はソフトウェアから見える。すなわち、これらは命令中で識別されるレジスタであり、したがって、ソフトウェアからは、これらが浮動小数点データ、パック・データ、整数データを実行する唯一のレジスタであるように見える。これに対して、バッファ・レジスタ1020はソフトウェアから見えない。したがって、FP/PDレジスタ1022は、ソフトウェアから単一の論理レジスタ・ファイルとして見える単一の物理レジスタ・ファイルである。一実施形態では、1組のFP/PDレジスタ1022および1組の整数レジスタ1024はそれぞれ、既存のインテル・アーキテクチャ・ソフトウェアとの互換性を維持するために8つのレジスタを含む。しかし、代替実施形態では任意の数のレジスタを使用することができる。
名前変更装置1004は、FP/PDマッピング装置1030と、FP/PDマッピング・テーブル1032と、1組のタグ1034と、整数マッピング装置1040と、整数マッピング・テーブル1042とを含む。オペランドが名前変更装置1004によって受信されると、それが浮動小数点オペランドであるか、それともパック・データ・オペランドであるか、それとも整数オペランドであるかが判定される。
整数オペランドは整数マッピング装置1040によって受信される。整数マッピング装置1040は整数マッピング・テーブル1042を制御する。一実施形態では、整数マッピング・テーブル1042は、整数レジスタ1024内のレジスタと同じ数のエントリを含む。整数マッピング・テーブル1042内の各エントリはそれぞれの異なる整数レジスタ1024に対応する。図10では、エントリ1050は整数レジスタ1052に対応する。プロセッサに整数レジスタ(たとえば、整数レジスタ1052)への書込みを行わせる命令を受け取ると、整数マッピング装置1040は、1組のバッファ・レジスタ1020内の使用可能なレジスタ(たとえば、バッファ・レジスタ1054)を識別するポインタを、整数マッピング・テーブル1042内の整数レジスタの対応するエントリ(たとえば、エントリ1050)に格納することによって、1つのバッファ・レジスタ1020を割り振る。データは、選択されたバッファ・レジスタ(たとえば、バッファ・レジスタ1054)に書き込まれる。このオペランドを生成した命令の実行が割込みなしに(イベントを発生せずに)完了すると、リタイヤメント装置1006は、データを、選択されたバッファ・レジスタ(たとえば、バッファ・レジスタ1054)から適切な整数レジスタ(たとえば、整数レジスタ1052)にコピーすることによってこのデータを「コミット」し、整数マッピング装置1040に、このデータがエントリ(たとえば、エントリ1050)の対応する整数レジスタに記憶されたことを示すようにエントリの内容を更新させる。
プロセッサに整数レジスタを読み取らせる命令を受信すると、プロセッサは、整数マッピング装置1040を使用して、整数マッピング・テーブル1042内の整数レジスタの対応するエントリ(たとえば、エントリ1050)の内容にアクセスする。エントリがバッファ・レジスタ(たとえば、バッファ・レジスタ1054)へのポインタを含む場合、プロセッサはそのバッファ・レジスタの内容を読み取る。しかし、このエントリの対応する整数レジスタ(たとえば、整数レジスタ1052)にデータが記憶されていることをこのエントリの内容が示している場合、プロセッサは、エントリの対応する整数レジスタの内容を読み取る。したがって、本発明のこの実施形態では、整数レジスタ1024は固定レジスタ・ファイルとして実装される。
FP/PDマッピング装置1030は、FP/PDマッピング・テーブル1032およびタグ1034を制御する。前述のように、各タグは任意の数のビットを使用することができる。整数マッピング装置1040と同様に、FP/PDマッピング・テーブル1032は、FP/PDレジスタ1022内のレジスタと同じ数のエントリを含む。FP/PDマッピング・テーブル1032内の各エントリはそれぞれの異なるFP/PDレジスタ1022に対応する。浮動小数点オペランドおよびパック・データ・オペランドは、FP/PDマッピング装置1030が受け取り、バッファ・レジスタ1020にマップされ、FP/PDレジスタ1022にリタイアされる。したがって、浮動小数点状態およびパック・データ状態は、ユーザに見える単一のレジスタ・ファイル上にエイリアス化される。既存のオペレーティング・システムは、プロセッサにマルチタスク時に浮動小数点状態を記憶させるように実施されるので、この同じオペレーティング・システムは、プロセッサに、浮動小数点レジスタ上にエイリアス化されたパック・データ状態を記憶させる。
一実施形態では、パック・データ・オペランドは整数オペランドと同様に処理され、パック・データ・レジスタは固定レジスタ・ファイルとして実装される。したがって、プロセッサにFP/PDレジスタへの書込みを行わせるパック・データ命令を受け取ると、FP/PDマッピング装置1030は、1組のバッファ・レジスタ1020内の使用可能なレジスタを識別するポインタを、FP/PDマッピング・テーブル1032内のFP/PDレジスタの対応するエントリに格納することによって、1つのバッファ・レジスタ1020を割り振る。データは、選択されたバッファ・レジスタに書き込まれる。このオペランドを生成した命令の実行が割込みなしに(イベントを発生せずに)完了すると、リタイヤメント装置1006は、データを、選択されたバッファ・レジスタから適切なFP/PDレジスタ(FP/PDマッピング・テーブル1032内のエントリに対応するFP/PDレジスタ)にコピーすることによってこのデータを「コミット」し、FP/PDマッピング装置1030に、このデータがエントリの対応するFP/PDレジスタに記憶されたことを示すようにFP/PDマッピング・テーブル1032内のエントリを更新させる。
パック・データ命令を実行する際、レジスタは固定レジスタ・ファイルとして実現されるが、本発明の一実施形態では、浮動小数点命令を実行する際、レジスタは、(オペレーティング・システムを含め)既存のインテル・アーキテクチャ・ソフトウェアとの互換性を有するようにスタック参照レジスタ・ファイルとして実装される。このため、FP/PDマッピング装置1030はFP/PDマッピング・テーブル1032をパック・データ・オペランド用の固定レジスタ・ファイルと浮動小数点オペランド用のスタックの両方として操作できなければならない。この目的のために、FP/PDマッピング装置1030は、トップ・オブ・スタック・フィールド1072を有する浮動小数点状態レジスタ1070を含む。トップ・オブ・スタック・フィールド1072は、現在浮動小数点スタックの1番上に配置されているレジスタを表すFP/PDマッピング・テーブル1032内のエントリを識別するトップ・オブ・スタック表示を記憶するために使用される。もちろん、代替実施形態では、浮動小数点命令を実行する際にレジスタをフラット・レジスタ・ファイルとして操作することができる。
プロセッサにFP/PDレジスタへの書込みを行わせる浮動小数点命令を受け取ると、FP/PDマッピング装置1030は、トップ・オブ・スタック表示を変更し、1組のバッファ・レジスタ1020内の使用可能なレジスタを識別するポインタを、FP/PDマッピング・テーブル1032内のトップ・オブ・スタック・レジスタの対応するエントリに格納することによって、1つのバッファ・レジスタ1020を割り振る。データは、選択されたバッファ・レジスタに書き込まれる。このオペランドを生成した命令の実行が割込みなしに(イベントを発生せずに)完了すると、リタイヤメント装置1006は、データを、選択されたバッファ・レジスタから適切なFP/PDレジスタ(FP/PDマッピング・テーブル1032内のエントリに対応するFP/PDレジスタ)にコピーすることによってこのデータを「コミット」し、FP/PDマッピング装置1030に、このデータがエントリの対応するFP/PDレジスタに記憶されたことを示すようにFP/PDマッピング・テーブル1032内のエントリを更新させる。
プロセッサにFP/PDレジスタを読み取らせる浮動小数点命令を受信すると、プロセッサは、FP/PDマッピング・テーブル1032内のトップ・オブ・スタック・レジスタの対応するエントリの内容にアクセスし、それに応じてスタックを変更する。バッファ・レジスタを指し示すポインタがそのエントリに記憶されている場合、プロセッサはそのバッファ・レジスタの内容を読み取る。しかし、FP/PDレジスタ1022内のそのエントリの対応するFP/PDにデータが記憶されていることをエントリの内容が示している場合、プロセッサはそのFP/PDレジスタの内容を読み取る。
したがって、FP/PDマッピング装置1030が浮動小数点オペランドをスタック参照レジスタ・ファイル上にマップするので、スタックの1番上のレジスタを基準としてFP/PDマッピング・テーブル1032内のエントリにアクセスしなければならない。これに対して、FP/PDマッピング装置1030がパック・データ・オペランドを固定レジスタ・ファイル上にマップするので、レジスタR0を基準としてFP/PDマッピング・テーブル1032内のエントリにアクセスしなければならない。プロセッサに、レジスタR0を基準としてFP/PDマッピング・テーブルのエントリにアクセスさせるには、トップ・オブ・スタック表示をレジスタR0を示すように変更しなければならない。したがって、トップ・オブ・スタック表示は、プロセッサがパック・データ命令を実行している間はレジスタR0を示すように変更しなければならない。これは、浮動小数点モードからパック・データ・モードへの遷移時にはレジスタR0を示すようにトップ・オブ・スタック表示を変更し、パック・データ命令の実行時にはトップ・オブ・スタック表示を変更しないようにすることによって行うことができる。このように、浮動小数点スタックをマップするために使用されるのと同じ回路を使用して固定パック・データ・レジスタ・ファイルをマップすることができる。このため、図6Aを参照して説明した実施形態と比べて、回路の複雑さが低減され、ダイ面積が節約される。同じ回路を使用してパック・データ・オペランドと浮動小数点オペランドの両方をマップする一実施形態について説明したが、代替実施形態では別々の回路を使用することができる。
実行中の命令の種類にはかかわらず、一実施形態では、バッファ・レジスタの割振りと割振り解除が同様に処理される。リタイヤメント装置1006は、割振りフィールド1062とリタイヤメント・フィールド1064とを有する制御レジスタ1060を含む。割振りフィールド1062は、次に使用するバッファ・レジスタを識別する割振りポインタを格納する。FP/PDマッピング装置1030と整数マッピング装置1040のどちらかがレジスタを必要とするとき、現在の割振りポインタが適切なマッピング・テーブル(すなわち、FP/PDマッピング装置1030または整数マッピング・テーブル1042)に記憶され、割振りポインタが増分される。また、名前変更装置1004は、命令がパック・データ命令であるかどうかと、プロセッサがパック・データ・モードであるかどうかを示す信号をリタイヤメント装置1006へ送信する。
割り振られたバッファ・レジスタ内で、リタイヤメント装置1006は準備完了フィールド1082に準備完了表示を格納する。準備完了表示は最初、バッファ・レジスタがリタイアする準備が完了していないことを示すように変更される。しかし、バッファ・レジスタのデータ・フィールド1080にデータが書き込まれると、バッファ・レジスタの準備完了表示が、バッファ・レジスタがリタイアする準備が完了していることを示すように変更される。
制御レジスタ1060のリタイヤメント・フィールド1064は、次にリタイアするバッファ・レジスタを識別するリタイヤメント・ポインタを格納する。このバッファ・レジスタの準備完了表示が準備完了状態に変更されると、リタイヤメント装置1006は、このバッファ・レジスタ内のデータをコミットできるかどうかを判定しなければならない。以下で詳しく説明するように、リタイヤメント装置1006の一実施形態は、例外を発生させなければならない場合(たとえば、装置使用不能例外、未処理浮動小数点エラー例外、無効命令コード例外など)、あるいはパック・データ・モードと浮動小数点モードとの間の遷移が必要とされる場合にはデータをコミットしない。データをコミットできる場合、そのデータが適切なFP/PDレジスタまたは整数レジスタにコピーされ、リタイヤメント・ポインタが次のバッファ・レジスタに増分される。リタイヤメント・ポインタおよび割振りポインタを制御レジスタに記憶されるものとして説明したが、代替実施形態では、これらのポインタと、本明細書に記載のその他の情報(たとえば、EMMS表示やモード表示など)を1組のフリップフロップなどある種の順次要素の形で記憶することができる。
リタイヤメント装置1006が別々の3組のレジスタを含み、データがバッファ・レジスタからFP/PDレジスタまたは整数レジスタにコミットされる一実施形態について説明したが、代替実施形態は、任意の数の異なる組のレジスタを含むようにすることができる。たとえば、1つの代替実施形態には、1組のレジスタを含めることができる。この実施形態では、この1組のレジスタ内の各レジスタは、それに記憶されているデータがコミットされているかどうかを識別する表示を含む。
一実施形態では、プロセッサが浮動小数点モードとパック・データ・モードのどちらかである。プロセッサは、パック・データ・モードではない場合、パック・データ命令を適切に実行することはできず、この逆の場合も同様である。このため、リタイヤメント装置1006は、バッファ・レジスタに記憶されているデータをコミットする前に、データがパック・データであるかどうかと、プロセッサがパック・データ・モードであるかどうかを判定しておく。データがパック・データであり、プロセッサがパック・データ・モードではない場合、マイクロコードROM1014に含まれている遷移装置1036が呼び出され、パック・データ・モードへの遷移を実行する。一実施形態では、トップ・オブ・スタック表示が初期設定値に(たとえば、レジスタR0を示すように)変更されており、かつすべてのタグ1034が非空状態であるかどうかを判定することによってプロセッサがパック・データ・モードであるかどうかが判定される。
プロセッサに、トップ・オブ・スタック表示およびタグ1034をポーリングしてプロセッサがパック・データ・モードであるかどうかを判定させる、いくつかの技法がある。たとえば、前述のように、復号装置1002はマイクロコードROM1014からマイクロ演算にアクセスする。このようなマイクロ演算は、FP/PDマッピング装置1030が実行する適切なマッピング(たとえば、トップ・オブ・スタック表示を増分することや、トップ・オブ・スタック表示を減分することなど)を識別するコード化フィールドを含む。一実施形態には、パック・データ命令に関するマッピングを識別する少なくとも1つの追加コード化ビット・パターン(本明細書では「パック・データ・ビット・パターン」と呼ぶ)が含まれる。したがって、復号装置1002がパック・データ命令を受信しマイクロコードROM1014にアクセスする際、復号装置1002へ送信される少なくとも1つのマイクロ演算にはパック・データ・ビット・パターンが含まれる。
FP/PDマッピング装置1030は、パック・データ・ビット・パターンを含むマイクロ演算を受け取ると、1)タグ1034およびトップ・オブ・スタック表示の状態を判定し、2)パック・データ・モードへの遷移が必要であるかどうかを示す信号をリタイヤメント装置1006へ送信する(一実施形態では、プロセッサのモードおよび命令の種類が送信される)。これに応答して、リタイヤメント装置1006は、命令によって割り振られたバッファ・レジスタに遷移フィールド1084内の遷移表示を格納する(一実施形態では、遷移表示は、プロセッサのモードを示す第1のビットと命令の種類を示す第2のビットとを含む)。したがって、命令がパック・データ命令であり、プロセッサがパック・データ・モードではない場合、適切なバッファ・レジスタのモード表示が、遷移が必要であることを示すように変更される。そうでない場合、モード表示は、遷移が必要ではないことを示すように変更される。リタイヤメント・ポインタによって識別されるバッファ・レジスタの準備完了表示が準備完了状態に変更されると、リタイヤメント装置1006は遷移表示を検査する。遷移表示が、遷移が必要ではないことを示しており、データを他の方法でリタイアできる(たとえば、処理しなければならないイベントがない)場合、データがリタイアされる。逆に、遷移表示が、遷移が必要であることを示している場合、リタイヤメント装置1006は、遷移装置1036に関するマイクロコード・エントリ・ポイントをマイクロコードROM1014へ送信する。これに応答して、マイクロコードROM1014は、プロセッサをパック・データ・モードへ遷移させるのに必要なマイクロコード演算を送信する。
このように、パック・データ・モードへの遷移を組み込むには、複雑さをわずかに増大させるだけでよい。もちろん、代替実施形態では、1)復号装置1002に、名前変更装置1004にタグおよびトップ・オブ・スタック表示をポーリングさせるパック・データ命令を受け取ったときに特殊な信号を送信させることと、2)タグおよびトップ・オブ・スタックをポーリングすべきであるかどうかを示すビットをすべてのマイクロ演算に追加することと、3)FP/PDマッピング装置1030に、バッファ・レジスタが割り振られるたびにタグおよびトップ・オブ・スタック表示をポーリングさせることと、4)リタイヤメント装置1006に、パック・データ項目をコミットする準備が完了したときにそのことをFP/PDマッピング装置1030に示させ、FP/PDマッピング装置1030に、プロセッサがパック・データ・モードではない場合に遷移装置1036を呼び出させることとなどを含め、任意の数の方法でこの機能を実現することができる。一実施形態では、トップ・オブ・スタック表示およびタグ1034に基づいて、プロセッサがパック・データ・モードであるかどうかが判定されるが、代替実施形態では、前述のモード表示を含め、任意の数の技法を使用することができる。
前述のように、遷移装置1036は、プロセッサを浮動小数点モードからパック・データ・モードへ遷移させるために使用される。遷移装置1036は、プロセッサにトップ・オブ・スタック表示を初期設定値に変更させ、かつすべてのタグ1034を非空状態に変更させる。このように、名前変更装置1004は、パック・データ命令を実行できるように初期設定される。遷移が完了すると、浮動小数点モードからパック・データ・モードへの遷移を生じさせた命令がマイクロ再開される。このため、(オペレーティング・システム・イベント・ハンドラを含む)非マイクロコード・イベント・ハンドラは必要とされず、この実施形態はオペレーティング・システムから見えない。遷移装置1036はマイクロコードROM1014内に配置されているように示されているが、代替実施形態では、遷移装置1036をプロセッサ上の任意の位置に配置することができる。他の代替実施形態では、浮動小数点モードからパック・データ・モードへの遷移を実行するように遷移装置1036を構成することができる。この遷移時に、遷移装置1036は現在のトップ・オブ・スタック表示を記憶域に保存し、トップ・オブ・スタック表示を初期設定値に変更する。遷移装置1036は、浮動小数点モードへ遷移するために再び呼び出されると、前のトップ・オブ・スタック表示を復元する。さらに、代替実施形態では、遷移装置1036をハードウェア内に実装することも、あるいはプロセッサの外部に記憶された非マイクロコード・イベント・ハンドラとして実施することもできる。
上記で一実施形態を参照して説明したように、パック・データ命令の各群はEMMS命令で終わる。実行装置1010は、EMMS命令を実行したことに応答して、名前変更装置1004にタグ1034を空状態に変更させる。したがって、EMMS命令を実行した後、プロセッサは浮動小数点モードになる。すなわち、すべてのタグ1034が空状態になり、トップ・オブ・スタック表示が初期設定状態になる(前述のように、トップ・オブ・スタック表示は、パック・データ・モードへの遷移時に初期設定値に変更され、パック・データ命令の実行時には変更されていない)。このため、パック・データ・モードから浮動小数点モードへの遷移を実行するうえで遷移装置は必要とされない。これは、プロセッサを浮動小数点モードとパック・データ・モードとの間で遷移させるために呼び出さなければならない、図6Aを参照して説明した遷移装置とは異なる。また、浮動小数点状態およびパック・データ状態用に単一のエイリアス化レジスタ・ファイルが使用されるので、2つの別々のレジスタ・ファイル間でデータをコピーするときにこの遷移は必要とされない。このため、回路の複雑さが低減され、プロセッサ上のダイ面積が節約される。
代替実施形態では、タグおよびトップ・オブ・スタック表示の変更は、パック・データ命令の実行時に完全または部分的に実行される。たとえば、遷移装置は、1)EMMS命令ではない各パック・データ命令を実行させ、トップ・オブ・スタック表示を初期設定値に変更し、かつタグを非空状態に変更し、2)EMMS命令を実行させ、タグを空状態に変更することによって不要にすることができる。他の実施形態では、EMMS命令は実施されず、以下で図14を参照して説明するように浮動小数点命令を使用してエミュレートされる。
発行装置1008は、命令およびそのオペランドを記憶するバッファを表す。発行装置1008は、一連の予約ステーション、中央命令ウィンドウ、またはこの2つを混成させたものとすることができる。予約ステーションを使用する際、各機能装置(たとえば、ALU)は、命令とそれに対応するオペランドを識別する情報とを記憶する機能装置自体のバッファを有する。これに対して、中央命令ウィンドウを使用すると、すべての機能装置に共通する中央バッファを使用して、命令とそれに対応するオペランドを識別する情報とが記憶される。命令に対応するオペランドは、どんな情報が使用できるかに応じていくつかの異なる形式であってよい。実データが得られない場合、命令に対応するオペランドは、データの種類と、データがコミットされているかどうかに応じて、1組のFP/PDレジスタ1022内のレジスタと、1組の整数レジスタ1024内のレジスタと、1組のバッファ・レジスタ1020内のレジスタのいずれかを識別する。実データが得られるようになると、そのデータはバッファに記憶される。一実施形態では、発行装置1008は名前変更装置1004からの情報も受け取る。しかし、この情報は本発明を理解するうえでは必要とされない。発行装置1008は、必要な情報が得られたときに実行装置1010に命令を発行する。
実行装置1010は命令を実行する。実行装置1010は、前述のように、記憶しなければならないオペランド情報を記憶するためにリタイヤメント装置1006へ送信する。一実施形態では、オペランド情報がないために発行装置1008内で命令が遅延することがある。実行装置1010はまた、任意のオペランド情報を発行装置1008に送信する。このように、オペランド情報をリタイヤメント装置1006へ送信し、次いで発行装置1008へ送信することによって生じる追加遅延が回避される。実行装置1010は状態レジスタ1012に結合される。状態レジスタ1012は、実行装置1010が使用する制御情報を記憶する。前述のように、そのような制御情報には、EM表示とTS表示とを含めることができる。実行装置1010は、リタイヤメント装置1006からアクセスされる様々な種類のデータを整列させるデータ・アラインメント装置1090(「ロード/ストア変換装置」とも呼ぶ)を含む。データ・アラインメント装置の動作については、第12図および図13を参照して詳しく説明する。
タグ1034の変更は、任意の数の異なる機構を使用して実施することができる。たとえば、図10は、タグを変更するタグ修飾装置1092も含むFP/PDマッピング装置1030を示す。タグ修飾装置1092は、図6Bを参照して説明した方法を含め、任意の数の方法を利用することができる。
たとえば、一実施形態では、すべてのタグを一度に修正しなくても済むように浮動小数点命令を構成できるので、タグ修飾装置1092は、一度にすべてのタグを修正することができないようにされる(そのような1つの実施形態は、上記で図6Bを参照して説明したような実施形態である)。回路の複雑さを回避するには、この既存の機構を使用して、パック・データ状態への遷移に応答し、あるいはEMMS命令の実行に応答してタグのグローバル変更を実施することができる。なお、EMMS命令を実装するために、EMMS装置1094によって表される1組のマイクロコード命令をマイクロコードROM1014に記憶することができる。EMMS装置1094および遷移装置1036内のマイクロコード命令によって、復号装置1002は、8つのタグのそれぞれを変更するいくつかの既存のマイクロ演算を発行する。したがって、復号装置1002は、EMMS命令を受け取ったことに応答して、EMMS装置1094にアクセスし、いくつかの既存のマイクロ演算を発行する。タグ修飾装置1092は、これらのマイクロ演算のそれぞれに応答して、対応するタグを空状態に修正する。これに対して、復号装置1002は、遷移装置1036にアクセスしたことに応答して、タグ修飾装置1092に各タグを非空状態に変更させるいくつかの既存のマイクロ演算を発行する。そのような実施形態では、タグをグローバル変更するのに約4クロック・サイクルないし8クロック・サイクルが必要である。
遷移またはEMMS命令に応答してすべてのタグを変更する一実施形態について説明したが、代替実施形態では任意の数の機構を使用することができる。たとえば、すべてのタグの空状態または非空状態への変更は、新しいマイクロ演算を備え、タグ修飾装置1092を、新しいマイクロ演算に応答してタグをグローバルに変更できるようにする(タグ修飾装置1092のそのような1つの実施形態について図6Bを参照して説明する)ことによって単一のクロック・サイクルで完了することができる。この実施形態では、EMMS装置1094は、復号装置1002に、(いくつかの別々のマイクロ演算ではなく)単一のマイクロ演算を発行してすべてのタグを空状態に変更させるようにする。これに対して、遷移装置1036は、復号装置1002に、(いくつかの別々の既存のマイクロ演算ではなく)この単一のマイクロ演算を発行してすべてのタグを非空状態に変更させるようにする。他の例を挙げると、代替実施形態は、実行装置1010をタグ1034およびリタイヤメント装置1006に結合するバスを含むことができる。この代替実施形態は、EMMS命令に応答して、プロセッサが直列化され(これは名前変更装置1004によって実行することができる)、タグを変更させる信号がバス上で送信され(これは、実行装置1010によって実施することができる)、プロセッサが再び直列化される(これは名前変更装置1004によって実行することができる)ようにすることができる。このような実施形態は、すべてのタグを変更するのに約10クロック・サイクルないし20クロック・サイクルを必要とする。これに対して、この代替実施形態は、この事前直列化または事後直列化、あるいはその両方が別の装置によって実行され、あるいは不要になるようにすることができる。他の例を挙げると、復号装置1002は、タグ1034に結合することができ、かつEMMS命令を受け取ったことに応答してすべてのタグ1034を変更する追加ハードウェアを含むことができる。
したがって、図10に示した実施形態は、上記で図6Aを参照して説明したのとは異なり、別々の浮動小数点装置およびパック・データ装置ではなく、浮動小数点命令およびパック・データ命令を実行する1組のレジスタを使用する。また、図6Aの実施形態は、浮動小数点レジスタにスタックとしてアクセスしパック・データ・レジスタに固定レジスタ・ファイルとしてアクセスする別々の回路を必要とし、それに対して、FP/PDマッピング装置1030は同じ回路を使用する。さらに、プロセッサを浮動小数点モードとパック・データ・モードとの間で遷移させるために呼び出さなければならない、図6Aを参照して説明した遷移装置とは異なり、図10を参照して説明した遷移装置は、プロセッサを浮動小数点モードからパック・データ・モードへ遷移させるだけでよい。また、浮動小数点状態およびパック・データ状態用に単一のエイリアス化レジスタ・ファイルが使用されるので、2つの別々のレジスタ・ファイル間でデータをコピーするときにこの遷移は必要とされない。このため、図10に示した実施形態では、必要とされる回路の複雑さが低減され、プロセッサ上のダイ面積が節約される。
前述のように、浮動小数点演算およびパック・データ演算を実行する命令を含む一実施形態について説明しているが、代替実施形態は、プロセッサにいくつかの異なるデータ・タイプ演算を実行させる異なる数組の命令を用意することができる。たとえば、ある1組の命令は、プロセッサにスカラ演算(浮動小数点または整数、あるいはその両方)を実行させることができ、他の1組の命令は、プロセッサにパック演算(浮動小数点または整数、あるいはその両方)を実行させることができる。他の例を挙げると、ある1組の命令は、プロセッサに浮動小数点演算(スカラまたはパック、あるいはその両方)を実行させることができ、他の1組の命令は、プロセッサに整数演算(スカラまたはパック、あるいはその両方)を実行させることができる。他の例を挙げると、単一のエイリアス化レジスタ・ファイルをスタック参照レジスタ・ファイルおよびフラット・レジスタ・ファイルとして操作することができる。また、全エイリアス化を行う一実施形態について説明したが、単一の物理レジスタ・ファイルを有する代替実施形態を、部分エイリアス化されたものとして動作するようにすることができる。この場合、単一のエイリアス化物理レジスタ・ファイルにどんなデータを格納すべきかを追跡する何らかの機構(たとえば、テーブル)が必要である。
図11A、図11B、図11Cは、オペレーティング・システムから見えず、良好なプログラミング方法を推進し、図10のハードウェア構成を使用して実施することができるように、パック・データ命令および浮動小数点命令を単一のエイリアス化レジスタ・ファイル上で実行する、本発明の他の実施形態による方法を示す。この流れ図は、図4Aないし図4B、図7Aないし図7C、図9、図10を参照して説明した流れ図に類似している。これらの前述の流れ図を参照して、ステップが変更、移動、かつ/あるいは削除される多数の代替実施形態について説明した。前述の流れ図で実行されるステップと同様な、図11Aないし図11Cを参照して説明したステップを、そのような代替実施形態を使用して実施できることを理解されたい。この流れ図はステップ1100から開始する。フローは、ステップ1100からステップ1102へ移る。
ステップ1102に示したように、1組のビットが命令としてアクセスされ、フローはステップ1104に進む。この1組のビットは、命令によって実行される演算を識別する命令コードを含む。したがって、ステップ1102は、図4Aのステップ402に類似している。
一実施形態では、以下のステップはパイプラインの復号段で実行される。
ステップ1104で、命令コードが有効であるかどうかが判定される。命令コードが有効でない場合、フローはステップ1106に進む。そうでない場合、フローはステップ1108に進む。ステップ1104は、図4のステップ404に類似している。
ステップ1106で、無効命令コード例外を発生させるべきであることを示す1つまたは複数のイベント信号マイクロ演算が挿入される。イベント信号マイクロ演算は、パイプラインのリタイヤメント段までエラーの処理を回避するために使用される。命令がイベント信号マイクロ演算である場合、その命令は復号段、レジスタ名前変更段、実行段内を流れる。しかし、イベント信号マイクロ演算をリタイヤメント段で受け取ると、バッファ・レジスタの状態はコミットされず、適切なイベントが発生する。イベント信号マイクロ演算は、イベントを生じさせている命令の前に、あるいはその命令の代わりに挿入される。マイクロ演算の使用については、「Method and Apparatus for Signaling an Occurrence of an Event in a Processor」(米国特許出願第08/203790号、Darrel D.Boggs等)に詳しく説明されている。フローは、ステップ1106からステップ1108へ移る。
ステップ1108で、どんな種類の命令が受信されたかが判定される。命令が浮動小数点命令でも、あるいはパック・データ命令でもない場合、フローはステップ1110に進む。したがって、ステップ1106で1つまたは複数のイベント信号マイクロ演算が挿入された場合、フローはステップ1110に進む。しかし、命令が浮動小数点命令である場合、フローはステップ1112に進む。これに対して、命令がパック・データ命令である場合、フローはステップ1114に進む。したがって、ステップ1108は、図4Aのステップ408に類似している。
ステップ1110に示したように、プロセッサが命令を実行する。ステップ1106で、無効命令コード例外を発生させるべきであることを示す1つまたは複数のマイクロ演算が挿入された場合、マイクロ演算は復号段、レジスタ名前変更段、実行段内を流れる。しかし、イベント信号マイクロ演算がリタイヤメント段に達すると、バッファ・レジスタの状態はコミットされず、無効命令コード例外が発生する。上記で図2のステップ215を参照して説明したように、このイベント・ハンドラは、プロセッサにメッセージを表示させ、現在のタスクの実行を中止させ、次いで他のタスクを実行させるようにすることができる。もちろん、代替実施形態では、前述の任意の数の方法でこのハンドラを形成することができる。他の命令の実行は本発明を理解するうえで必要とされないので、本明細書ではこのことについては詳しく説明しない。
ステップ1112に示したように、EM表示が1に等しいかどうか(前述のソフトウェア規約によれば、浮動小数点装置をエミュレートすべきかどうか)と、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が行われたかどうか)が判定される。EM表示またはTS表示、あるいはその両方が1に等しい場合、フローはステップ1116に進む。そうでない場合、フローはステップ1120に進む。したがって、ステップ1112は図4Aのステップ412に類似している。
ステップ1116で、装置使用不能例外を発生させるべきであることを示す1つまたは複数のイベント信号マイクロ演算が挿入される。フローは、ステップ1116からステップ1120へ移る。
ステップ1114とステップ1120の両方に示したように、レジスタ名前変更が実行される。フローは、ステップ1120からステップ1122へ移る。これに対して、フローはステップ1114からステップ1134へ移る。一実施形態では、ステップ1114およびステップ1120はパイプラインの名前変更段で実行される。
一実施形態では、以下のステップがパイプラインの実行段で実行される。
ステップ1122に示したように、浮動小数点命令が実行される。ステップ1122は図4Bのステップ426に類似している。オペレーティング・システムから見えないようにするために、一実施形態ではまた、必要に応じてタグを変更し、このとき処理できる数値エラーを報告し、他の数値エラーを未処理のままにしておく。前述のように、タグを変更することによって、この実施形態は、対応するタグが非空状態を示す浮動小数点レジスタのみの内容を記憶するオペレーティング・システム技法からは見えないオペレーティング・システムのままとなるようにすることができる。しかし、代替実施形態は、ある種のとの互換性を有するようにすることができる。たとえば、既存のオペレーティング・システムがタグを使用しない場合、タグを実装していないプロセッサでもそのオペレーティング・システムとの互換性を有する。さらに、本発明では数値浮動小数点例外を未処理のままにしておく必要はなく、したがって、数値浮動小数点例外を未処理のままにしない代替実施形態は本発明の範囲内である。フローはステップ1122からステップ1124へ移る。
ステップ1134で、パック・データ命令がEMMS命令であるかどうかが判定される。したがって、ステップ1134は図4Bのステップ430に類似している。パック・データ命令がEMMS命令である場合、フローはステップ1136に進む。そうでない場合、フローはステップ1138に進む。前述のように、EMMS命令は、浮動小数点タグを初期設定状態に変更するために使用されるが、パック・データ命令を実行した後、または浮動小数点命令を実行してプロセッサを浮動小数点モードに遷移させる前、あるいはその両方に実行すべきである。
ステップ1136に示したように、すべてのタグは空状態に変更される。このように、タグは初期設定されており、浮動小数点命令を実行することが可能である。ステップ1136が完了した後、フローはステップ1144に進む。EMMS命令を実施しない実施形態では、ステップ1134およびステップ1136が存在せず、フローはステップ1114からステップ1138へ移る。
ステップ1138に示したように、パック・データ命令が実行される。このステップ中に、FPレジスタ、またはパック・データが書き込まれるFP/PDレジスタとして働くバッファ・レジスタの符号フィールドおよび指数フィールドに1が格納される。したがって、ステップ1138は図4Bのステップ434、436、438に類似している。そうすることにより、浮動小数点命令とパック・データ命令の分離を推進することによって良好なプログラミング技法が推進される。しかし、前述のように、代替実施形態ではこの機能の実施を回避することができる。一実施形態では符号フィールドおよび指数フィールドに1が書き込まれるが、代替実施形態では、NAN(非数値)または無限を表す値を使用することができる。また、このステップは数値例外を発生させずに実行される。パック・データ命令の実行を試みたためにメモリ・イベントが発生した場合、実行が割込みを受け、イベントが処理される。フローはステップ1138からステップ1144へ移る。
一実施形態では、以下のステップはパイプラインのリタイヤメント段で実行される。
ステップ1124で、命令が、装置使用不能例外を示すイベント信号マイクロ演算であるかどうかが判定される。そうである場合、ステップ1112で、TS表示とEM表示のどちらかまたは両方が1に等しいと判定されている。したがって、命令が、装置使用不能例外を示すイベント信号マイクロ演算である場合、フローはステップ1126に進む。そうでない場合、フローはステップ1128に進む。このように、レジスタ名前変更を使用するプロセッサに装置使用不能例外を組み込むことができる。
ステップ1126で、装置使用不能例外が発生し、対応するイベント・ハンドラが実行される。したがって、ステップ1126は図4Aのステップ416に類似している。前述のように、EM表示およびTS表示を使用して、浮動小数点命令をエミュレートすべきかどうか、あるいは部分コンテキスト切換が行われたかどうか、あるいはその両方を判定するように、このイベント・ハンドラを形成することができる。やはり前述のように、EM表示およびTS表示を使用することはソフトウェア規約であり、したがって、他の目的に使用することができる。
ステップ1144で、EM表示が1に等しいかどうかが判定される。したがって、ステップ1144は図4Aのステップ414に類似している。ステップ1144で、EM表示が1に等しいと判定された場合、フローはステップ1126ではなくステップ1146に進む。そうでない場合、フローはステップ1148に進む。
ステップ1146で、無効命令コード例外が発生し、適切なイベント・ハンドラが実行される。これは、図11Aのステップ1110を参照して説明したのと同じ無効命令コード例外である。無効命令コード例外の発生は、図4Aのステップ406で発生した無効命令コード例外に類似している。上記で図2のステップ215を参照して説明したように、このイベント・ハンドラは、プロセッサにメッセージを表示させ、現在のタスクの実行を中止させ、次いで他のタスクを実行させるように構成することができる。もちろん、代替実施形態では、前述の任意の数の方法でこのハンドラを構成することができる。EMが1に等しいときのパック・データ命令の実行の試みを無効命令コード例外に切り換えることによって、この実施形態はオペレーティング・システムからは見えない。
オペレーティング・システムから見えないようにEM表示を処理する一実施形態について説明したが、代替実施形態では他の技法を使用することができる。たとえば、代替実施形態では、EM表示が1に等しいときのパック・データ命令の実行の試みに応答して装置使用不能例外と、異なる既存のイベントと、新しいイベントのいずれかを発生させることができる。他の例を挙げると、代替実施形態では、パック・データ命令を実行するときにEM表示を無視することができる。
ステップ1148に示したように、TS表示が1に等しいかどうか(前述のソフトウェア規約によれば、部分コンテキスト切換が行われたかどうか)が判定される。部分コンテキスト切換が実行された場合、フローはステップ1126に進む。そうでない場合、フローはステップ1150に進む。
前述のように、ステップ1126で、装置使用不能例外が発生し、対応するイベント・ハンドラが実行される。したがって、このイベントに応答して、EM表示およびTS表示をポーリングするように、この対応するイベント・ハンドラを構成することができる。しかし、パック・データ命令を実行すると、フローがステップ1144に進み、EM表示が1に等しい状況が無効命令コード例外に切り換えられる。このため、パック・データ命令を実行中であり、ステップ1126に達したときに、EM表示は0に等しくなければならず、TS表示は1に等しくなければならない。TS表示が1に等しいので、イベント・ハンドラは、上記で部分コンテキスト切換に関して説明したように機能し、プロセッサに、ステップ1102で受け取った命令の実行を再開することによって実行を再開させる。パック・データ状態は浮動小数点状態上にエイリアス化されているので、このイベント・ハンドラは浮動小数点状態とパック・データ状態の両方のために働く。このため、この方法はオペレーティング・システムからは見えない。もちろん、代替実施形態ではこのイベント・ハンドラを前述の任意の数の方法で実行できるようにすることができる。オペレーティング・システムから見えないようにTS表示を処理する一実施形態について説明したが、代替実施形態では前述の他の技法を使用することができる。
前述のように、浮動小数点命令の実行時にある数値エラーが発生した場合、そのようなエラーは、次の浮動小数点命令の実行が試みられるまで未処理のままにされ、次の浮動小数点命令の実行に割り込みこのようなエラーを処理することができる。ステップ1128とステップ1150の両方に示したように、処理できるそのような未処理のエラーがあるかどうかが判定される。したがって、これらのステップは、図4Aのステップ420およびステップ422に類似している。そのような未処理のエラーがある場合、フローはステップ1128とステップ1150の両方からステップ1130へ移る。しかし、ステップ1128で、そのような未処理のエラーがないと判定された場合、フローはステップ1132に進む。逆に、ステップ1150で、そのような未処理のエラーがないと判定された場合、フローはステップ1152に進む。代替実施形態では、ステップ1150は実行されず、パック・データ命令を実行する間、浮動小数点エラーは未処理のままにされる。
ステップ1130で、未処理浮動小数点エラー・イベントが発生する。したがって、ステップ1130は図4Aのステップ424に類似している。上記で図2のステップ424を参照して説明したように、このイベントを内部イベントまたは外部イベントとみなし、それに応じて処理することができる。
ステップ1152に示したように、プロセッサがパック・データ・モードであるかどうかが判定される。プロセッサがパック・データ・モードである場合、パック・データ命令の実行は首尾良く完了しており、フローはステップ1132に進む。しかし、プロセッサがパック・データ・モードではない場合、パック・データ命令は浮動小数点モードで実行されている。このため、このパック・データ命令の実行は正確なものではない。これを補正するには、プロセッサを浮動小数点モードからパック・データ・モードに切り換え、パック・データ命令を再実行しなければならない。これを行うために、プロセッサがパック・データ・モードではない場合、フローはステップ1154に進む。ステップ1152の判定は任意の数の方法で行うことができる。たとえば、上記で図6Aを参照して説明したモード表示を使用することができる。他の例を挙げると、トップ・オブ・スタック表示およびタグをポーリングすることができる。トップ・オブ・スタック表示が初期設定状態であり、すべてのタグが非空状態である場合、プロセッサはパック・データ・モードである。しかし、トップ・オブ・スタック表示が初期設定状態ではなく、あるいはすべてのタグが非空状態であるわけではない場合、プロセッサはパック・データ・モードではない。
ステップ1154で、プロセッサは浮動小数点モードからパック・データ・モードへ遷移し、フローはステップ1156に進む。ステップ1154で、プロセッサは、すべてのタグを非空状態に変更し、トップ・オブ・スタック表示を初期設定値に変更することによって浮動小数点モードからパック・データ・モードへ遷移する。すべてのタグを非空状態に変更すると、浮動小数点命令とパック・データ命令が別々にグループ化されるので、良好なプログラミング技法が推進される。また、オペレーティング・システムとの互換性の点では、ある種のオペレーティング・システム技法は、対応するタグが非空状態を示す浮動小数点レジスタのみの内容を記憶する。したがって、パック・データ状態が浮動小数点状態上にエイリアス化される実施形態では、すべてのタグを非空状態に変更することによって、そのようなオペレーティング・システムは浮動小数点状態の場合と同様にパック・データ状態を保存する。代替実施形態は、このようなオペレーティング・システム技法のいくつかとの互換性を有するようにすることができる。たとえば、あるオペレーティング・システムがタグを使用しない場合、タグを実装しない実施形態でもそのオペレーティング・システムとの互換性を有する。トップ・オブ・スタック表示を零に変更することを利用して、前述のように効率的なプログラミング技法が行われる。また、トップ・オブ・スタック表示を初期設定値に変更し、パック・データ命令の実行時にはトップ・オブ・スタック表示を変更しないことにより、上記で図10を参照して説明したように、同じ回路を使用してFP/PDレジスタを浮動小数点スタックおよび固定レジスタ・ファイルとして操作することができる。浮動小数点状態およびパック・データ状態が単一のレジスタ・ファイル上にエイリアス化されるので、遷移時に、別々の浮動小数点レジスタ・ファイルとパック・データ・レジスタ・ファイルとの間でデータをコピーする必要はない。これにより、浮動小数点モードとパック・データ・モードとの間の遷移に必要な時間が短縮する。前述のように、浮動小数点からパック・データへの遷移はマイクロコード内に備えることができる。代替実施形態では、各パック・データ命令を実行することによって、トップ・オブ・スタック表示が初期設定値に変更される。
ステップ1156に示したように、マイクロ再開を実行することによって、ステップ1102で受け取った命令が再開される。マイクロ再開を使用するので、プロセッサの外部での処置を施さずに現在のタスクの実行を再開することができる。すなわち、非マイクロコード・イベント・ハンドラを実行する必要はない。このように、この実施形態は既存のオペレーティング・システムとの互換性を有する。代替実施形態は、より低い互換性を有するようにすることができる。たとえば、プロセッサに追加イベントを組み込むことができ、この遷移を実行する追加イベント・ハンドラをオペレーティング・システムに追加することができる。
ステップ1132で、バッファ・レジスタの状態が、バッファ・レジスタに対応するFP/PDレジスタまたは整数レジスタにコミットされる。ステップ1132が完了すると、プロセッサは実行を継続することができる。
したがって、既存のオペレーティング・システムとの互換性を有し、良好なプログラミング技法を推進するパック・データ命令を実行する方法について説明した。パック・データ状態は、浮動小数点状態上にエイリアス化されるので、浮動小数点状態の場合と同様に既存のオペレーティング・システムによって保存され復元される。さらに、パック・データ命令を実行することによって発生したイベントを既存のオペレーティング・システム・ハンドラによって処理することができるので、このようなイベント・ハンドラを修正する必要がなく、新しいイベント・ハンドラを追加する必要がない。このため、プロセッサは後方互換性を有し、更新時に、オペレーティング・システムを開発または修正するために必要なコストおよび時間が必要とされない。
そのうちのいくつかについて説明したこの実施形態の変形形態は、そのようなオペレーティング・システムとの全互換性または部分互換性を有し、かつ/あるいは良好なプログラミング技法を推進することができる。たとえば、代替実施形態では、この流れ図の1つまたは複数のステップを移動し、変更し、かつ/あるいは削除することができる。図11Aまたは図11Bまたは図11C、あるいはそれらの組合せからあるステップを削除する場合、図10中のあるハードウェアは必要とされない。たとえば、TS表示を使用しない場合、TS表示は必要とされない。もちろん、本発明は任意の数のシステム・アーキテクチャに有用であり、本明細書で説明するアーキテクチャに限らない。
図12A、図12B、図12Cは、図10を参照して説明した実施形態によって浮動小数点データ、パック・データ、整数データを記憶するための記憶フォーマットを示す。もちろん、代替実施形態では、浮動小数点データ、パック・データ、整数データを記憶するためにいくつかの異なる記憶フォーマットを使用することができる。
図12Aは、図10を参照して説明した本発明の一実施形態による浮動小数点記憶フォーマットを示す。図12Aは、ビット85からなる符号フィールド1202と、ビット[84:68]からなる指数フィールド1204と、ビット[67:3]からなる小数部フィールド1206と、ビット[2:0]からなる丸めフィールド1208とを含む浮動小数点記憶フォーマット1200を示す。前述のように、タスク切換を実行する際にメモリに浮動小数点状態を記憶するために使用されるのと同じ浮動小数点命令を使用して、浮動小数点レジスタ上にエイリアス化されたパック・データ状態も記憶しなければならない。一実施形態では、プロセッサは丸めビットを丸めフィールド1028には記憶しない。このため、パック・データは、浮動小数点記憶フォーマット1200の小数部フィールド1206内のどこかに記憶しなければならない。
図12Bは、図10を参照して説明した本発明の一実施形態によるパック・データ用の記憶フォーマットを示す。図12Bは、ビット[85:68]からなる符号/指数フィールド1212と、ビット[67]からなる第1の予約フィールド1214と、ビット[66:3]からなるパック・データ・フィールド1216と、ビット[2:0]からなる第2の予約フィールド1218とを含むパック・データ記憶フォーマット1210を示す。前述のように、パック・データがレジスタに書き込まれる際、符号/指数フィールド1212にすべて1が格納される。やはり前述のように、パック・データ・フィールド1216は、既存の浮動小数点命令によってパック・データ状態が記憶されるように小数部フィールド1206上にエイリアス化される。一実施形態では、パック・データがレジスタに書き込まれる際、第1および第2の予約フィールド1214および1218に零が書き込まれる。パック・データ記憶フォーマット1210のパック・データ・フィールド1216が浮動小数点記憶フォーマット1200の小数部フィールド1206と同じビット位置から始まる本発明の一実施形態について説明したが、代替実施形態では、この関係を変更することができる。
図12Cは、図10を参照して説明した本発明の実施形態による整数データ用の記憶フォーマットを示す。図12Cは、ビット[85:32]からなる予約フィールド1222と、ビット[31:0]からなる整数データ・フィールド1224とを含む整数データ記憶フォーマット1220を示す。整数データが32ビットとして記憶される一実施形態について説明したが、代替実施形態は、任意の数のビットを使用した1つまたは複数のフォーマットで整数データを記憶するようにすることができる。たとえば、代替実施形態では64ビット・フォーマットをサポートすることができる。一実施形態では、ソフトウェアから見える各整数レジスタ1024は32ビットのみを含む。このため、整数記憶フォーマット1220はバッファ・レジスタ1020でのみ使用される。
図13は、図12A、図12B、図12Cを参照して説明した記憶フォーマットが使用されたときに、図11Bのステップ1138を実行する、本発明の一実施形態による方法を示す。フローは、ステップ1134からステップ1300へ移る。
ステップ1300で、パック・データ命令が、FP/PDレジスタ、またはFP/PDレジスタとして働くバッファ・レジスタからパック・データを検索するかどうかが判定される。そうである場合、フローはステップ1302に進む。そうでない場合、フローはステップ1304に進む。
ステップ1302に示したように、エイリアス化バッファ・レジスタまたはFP/PDレジスタのビット[66:3]が検索され、フローはステップ1304に進む。このステップが必要であるのは、図12Bに示したように、パック・データがビット零からではなくビット3から記憶されるからである。このため、ビット[2:0]を破棄しなければならない。一実施形態では、このステップは図10のデータ・アラインメント装置1090によって実行される。この実施形態では、データは、図12Bに示したフォーマットで、リタイヤメント装置1006から発行装置1008を通して実行装置1010へ転送される。したがって、データは、実行装置1010によって、図12Bに示したフォーマットで受信され、データ・アラインメント装置1090がイネーブルされ、ビット[66:3]を抽出する。図10は単一のデータ・アラインメント装置を示しているが、一実施形態では、パック・データを処理する実行装置1010内の各機能単位が、ビット[63:3]を抽出するデータ・アラインメント装置を含む。データは実行装置1010内で整列するので、パック・データ・フォーマットの使用はプロセッサの残りの部分には透過的である。データ・アラインメント装置は、任意の数の技法を使用してビット[66:3]にアクセスするようにすることができる。たとえば、一実施形態では、データ・アラインメント装置は、FP/PDレジスタ、またはFP/PDレジスタとして働くバッファ・レジスタから検索されたすべてのパック・データを3ビットだけ右にシフトさせるように設計される。代替実施形態では、リタイヤメント装置または発行装置を、ビット[2:0]またはビット[85:67]、あるいはその両方を除去するようにすることができる。他の例を挙げると、パック・データがビット零から記憶されるように代替実施形態を構成することができる。
ステップ1304で、パック・データ命令が整数レジスタ、または整数レジスタとして働くバッファ・レジスタからパック・データを検索するかどうかが判定される。そうである場合、フローはステップ1306に進む。そうでない場合、フローはステップ1308に進む。
ステップ1306に示したように、エイリアス化バッファ・レジスタまたは整数レジスタのビット[31:0]が検索され、フローはステップ1308に進む。このステップが必要であるのは、データがビット零から記憶されるからである。前述のように、一実施形態では、このステップは図10のデータ・アラインメント装置1090によって実行される。この実施形態では、データはリタイヤメント装置1006から発行装置1008を通して実行装置1010へ転送される。データは、バッファ・レジスタ1020からアクセスされた場合は、実行装置1010によって、図12Cに示したフォーマットで受信され、データ・アラインメント装置がイネーブルされ、ビット[31:0]を抽出する。しかし、データは、整数レジスタ1024が32ビット・レジスタである実施形態で整数レジスタ1024からアクセスされる場合は、実行装置1010によって32ビット・フォーマットで受信される。いずれの場合も、32ビット・データを64ビットのパック・データ項目の一部とみることができる。たとえば、第1の移動命令を実施して整数レジスタの32ビットをパック・データ項目の上位ビットへ移動し、同時に、第2の移動命令を実施して整数レジスタの32ビットをパック・データ項目の下位32ビットへ移動することができる。
ステップ1308に示したように、命令が必要とする動作が実行され、フローはステップ1310に進む。
ステップ1310で、パック・データ命令によって、プロセッサが、FP/PDレジスタ、またはFP/PDレジスタとして働くバッファ・レジスタに書込みを行うかどうかが判定される。そうである場合、フローはステップ1312に進む。そうでない場合、フローはステップ1314に進む。
パック・データ命令によって、プロセッサが、FP/PDレジスタ、またはFP/PDレジスタとして働くバッファ・レジスタに書込みを行う場合、データを固有のフォーマットで記憶しなければならない。したがって、ステップ1312で、パック・データは、FP/PDレジスタまたはバッファ・レジスタのビット[66:3]に記憶される。一実施形態では、図10のデータ・アラインメント装置1090が再び使用される。この場合も、この機能を実行するいくつかの技法がある。たとえば、データを3ビットだけ左にシフトさせ、ビット[2:0]に零を埋め込み、ビット[67]に零を埋め込み、ビット[85:68]に1を記憶するように、データ・アラインメント装置を構成することができる。代替実施形態では、データをこのフォーマットで記憶するようにリタイヤメント装置を構成することができる。
ステップ1314で、パック・データ命令によって、プロセッサが、整数レジスタ、または整数レジスタとして働くバッファ・レジスタに書込みを行うかどうかが判定される。そうである場合、フローはステップ1316に進む。そうでない場合、フローはステップ1144に進む。
パック・データ命令によって、プロセッサが、整数レジスタ、または整数レジスタとして働くバッファ・レジスタに書込みを行う場合、パック・データを固有の整数記憶フォーマットで記憶しなければならない。したがって、ステップ1316で、データは、整数レジスタ内ではビット[31:0]として存在し、バッファ・レジスタ内では(実施態様に応じて)ビット[63:0]または[31:0]として存在する。64ビットのデータがあるので、32ビット分のデータをこれらのレジスタに記憶することができる。たとえば、第1の移動命令は、パック・データ項目の上位ビットを整数レジスタへ移動し、同時に、第2の移動命令を実施してパック・データ項目の下位32ビットを整数レジスタへ移動するように構成しても良い。一実施形態では、このステップはやはり図10のデータ・アラインメント装置1090によって実行される。もちろん、前述の技法を含め、任意の数の技法を使用してステップ1316を実施することができる。
このように、いくつかの異なる種類のデータによって使用される記憶フォーマットはプロセッサのレジスタ内で固有に整列される。一実施形態では、FP/PDレジスタ1022で使用されるバッファ・レジスタ1020と整数レジスタ1024で使用されるバッファ・レジスタ1020で同じ記憶フォーマットが使用される。もちろん、代替実施形態では、任意の数の異なる記憶フォーマットを使用することができ、したがって、そのような代替実施形態は依然として本発明の範囲内である。たとえば、一代替実施形態は、これらのデータ記憶フォーマットを1組のバッファ・レジスタ1020で使用し、ソフトウェアから見えるレジスタ(たとえば、FP/PDレジスタ1022および整数レジスタ1024)では異なるデータ記憶フォーマットを使用する。
前述のように、浮動小数点モードとパック・データ・モードとの間の遷移は時間がかかることがあり、効率的なプログラミング方法ではない。プログラマが多くのそのような遷移を実行するかどうかを判定するのを助けるには、異なる性能監視技法を使用することができる。たとえば、一実施形態では、性能モニタ・カウンタが使用される。性能モニタ・カウンタは、プログラマから見ることができ、プロセッサにおいていくつかの異なる条件が満たされる回数をカウントする。本発明の一実施形態では、これらの条件の1つは浮動小数点モードとパック・データ・モードとの間の遷移である。このように、プログラマはプログラムにいくつの遷移が必要であるかを知ることができる。プログラム・カウンタに関する詳細については、「Apparatus for Monitoring the Performance of a Processor」(米国特許出願第07/883845号、Robert S.Dreyer等)を参照されたい。
従来技術の浮動小数点プロセッサでは浮動小数点タグを直接処理することができないので、浮動小数点命令を使用したEMMS命令のエミュレーションを実行することができる。
図14は、本発明の一実施形態による、タグをクリアする方法を示す流れ図である。この流れ図は、ステップ1402で浮動小数点環境をメモリ内の所定の位置に記憶することによって開始する。これは、インテル・アーキテクチャ・プロセッサではFNSAVE命令またはFSAVE命令を使用して行われる。これを実行した後、ステップ1404で、環境が記憶された所定のメモリ位置のタグまたはTOS部分、あるいはその両方をその空状態に修正することができる。これは、このタグおよびTOSビットの適切なビット・パターンに関する即値オペランドを有するMOV命令を含め任意の数の従来型の命令を使用して行われる。所定のメモリ位置のタグおよびTOS部分を空状態に設定する他の適切な命令を使用することができる。これに続いてステップ1406で、修正された所定のメモリ位置から環境を再ロードすることができる。環境の他の部分(制御語、状態語など)は未修整のままにすべきであり、浮動小数点タグが修正されるに過ぎないので、環境の残りの部分は環境記憶動作1402から変わらない。さらに、予想されない割込みが行われるのを防止するために、割込みをディスエーブルする命令(たとえば、FNSTENV)の使用を含む既知の従来型の技法を使用してプロセスのこの実施形態を実行することができる。いずれにしても、この場合、FRSTORやFLDENVなど従来技術の技法を使用して環境を再ロードするので、環境には、空状態に修正された浮動小数点タグしか再ロードされていない。さらに、トップ・オブ・スタック・フィールド350に格納されたトップ・オブ・スタック表示を含む浮動小数点環境の部分をクリアする追加ステップをステップ1404に含めることができることに留意されたい。
他の代替実施形態では、すべてのタグ・ビットが空になるまで浮動小数点レジスタを十分な回数だけポップすることによってEMMS命令をエミュレートすることができる。いずれの場合も、EMMSは専用命令として実行することも、あるいはエミュレートすることもでき、どちらの方法も本開示の教示の範囲内である。
図15Aは、エイリアス化された別々の物理レジスタ・ファイルを更新することのできる時間間隔を示すために、パック・データ命令と浮動小数点命令とを含む実行ストリームを示している。図15Aは、浮動小数点命令1500と、その後に続く1組のパック・データ命令1510を示している。図15Aはさらに、浮動小数点命令1500が時間T1に実行され、それに対して、1組のパック・データ命令1510の実行が時間T2から開始することも示している。浮動小数点命令1500を実行すると、プロセッサは浮動小数点レジスタに値を書き込む。間隔1520は、この値をエイリアス化しなければならない時間T1と時間T2との間の時間を示す。たとえば、別々の物理レジスタ・ファイルを使用して浮動小数点命令とパック・データ命令が実行される、図6Aないし図9を参照して説明した一実施形態では、浮動小数点状態は、時間T2になって初めて、物理浮動小数点レジスタから対応する物理パック・データ・レジスタにコピーされる(時間T2よりも前に同じ浮動小数点レジスタに他の値が書き込まれることがないと仮定する)。これに対して、単一物理レジスタ・ファイルを使用すると(図10ないし図11Cを参照して説明した実施形態)、浮動小数点値は時間T1にエイリアス化レジスタに記憶される。
したがって、間隔1520の2つの極値について説明した。しかし、代替実施形態は、間隔1520中の任意の時間にレジスタをエイリアス化するようにすることができる。たとえば、別々の物理レジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する代替実施形態は、時間T1に、浮動小数点物理レジスタ・ファイルに書き込まれるデータがパック・データ物理レジスタ・ファイルにも書き込まれるようにすることができる。値を両方の物理レジスタ・ファイルに同時に(たとえば、時間T1に)書き込む一実施形態では、データを浮動小数点レジスタからパック・データ・レジスタにコピーする遷移の部分をハードウェアとして実施することができる(もちろん、代替実施形態はソフトウェア、またはファームウェア、またはハードウェア、あるいはそれらの組合せを使用することができる)。他の例を挙げると、別々の物理レジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する代替実施形態は、間隔1520中に(ただし、時間T2よりも前のある時点に)自由な処理時間があるときに、浮動小数点物理レジスタ・ファイルに書き込まれたデータがパック・データ物理レジスタ・ファイルに書き込まれるようにすることができる。このように、これらの実施形態は遷移時間を短縮させることができる。
図15Bは、エイリアス化された別々の物理レジスタ・ファイルを更新することのできる時間間隔を示すために、パック・データ命令と浮動小数点命令とを含む実行ストリームを示している。図15Aは、パック・データ命令1530の後に1組の浮動小数点命令1540が続くことを除いて図15Bに類似している。図15Bは、パック・データ命令1530が時間T1に実行され、それに対して、1組の浮動小数点命令1540の実行が時間T2から開始することを示している。パック・データ命令1530を実行すると、プロセッサはパック・データ・レジスタに値を書き込む。間隔1550は、この値をエイリアス化しなければならない時間T1と時間T2との間の時間を示す。(浮動小数点命令とその後に続くパック・データ命令に関して)図15Aを参照して説明したすべての代替実施形態を図15Bに関して(パック・データ命令とその後に続く浮動小数点命令に関して)実施することもできる。
本発明をいくつかの実施形態に関して説明したが、当業者には、本発明が前述の実施形態に限らないことが認識されよう。本発明の方法および装置は、添付の請求の範囲の趣旨および範囲内で修正および変更を加えて実施することができる。したがって、この説明は本発明を制限するものではなく例示的なものとみるべきである。
Pentiumプロセッサを使用した例示的なコンピュータ・システムを示すブロック図である。 Pentiumプロセッサによる命令の実行を示す流れ図である。 A:本発明の一実施形態によるパック・データ状態および浮動小数点状態のエイリアス化を示す機能図、BおよびC:物理浮動小数点レジスタおよびパック・データ・レジスタの論理浮動小数点レジスタに対するマッピングを示す図、D:パック・データ命令と浮動小数点命令とを含む実行ストリームを示す図である。 既存のソフトウェアとの互換性を有し、様々なオペレーティング・システム技法には見えず、効率的なプログラミング技法を推進するように、浮動小数点命令およびパック・データ命令を実行する、本発明の一実施形態による方法の一部を示す流れ図である。 図4Aに部分的に示した方法の残りの部分を示す流れ図である。 本発明の一実施形態による例示的なコンピュータ・システムを示すブロック図である。 本発明の一実施形態による、2つの物理レジスタ・ファイルを使用して浮動小数点状態上にパック・データ・レジスタ状態をエイリアス化する装置を示すブロック図である。 本発明の一実施形態による、図6Aの浮動小数点スタック参照ファイルの一部の拡大図を示すブロック図である。 既存のソフトウェアとの互換性を有し、様々なオペレーティング・システム技法には見えず、良好なプログラミング方法を推進し、図6Aのハードウェア構成を使用して実行することができるように、1組の浮動小数点レジスタ上にエイリアス化された1組のレジスタ上でパック・データ命令を実行するための、本発明の一実施形態による方法の一部を示す流れ図である。 図7Aに部分的に示した方法の他の部分を示す流れ図である。 図7Aおよび図7Bに部分的に示した方法の残りの部分を示す流れ図である。 本発明の一実施形態による、図7Cのステップ734を実行する方法を示す流れ図である。 本発明の一実施形態による、図7Bのステップ728を実行する方法を示す流れ図である。 本発明の他の実施形態による、単一のレジスタ・ファイルを使用して浮動小数点状態上にパック・データ状態をエイリアス化する装置内のデータ・フローを示すブロック図である。 既存のソフトウェアとの互換性を有し、様々なオペレーティング・システム技法には見えず、良好なプログラミング方法を推進し、図10のハードウェア構成を使用して実行することができるように、単一のエイリアス化レジスタ・ファイルに対してパック・データ命令および浮動小数点命令を実行するための、本発明の他の実施形態による方法の一部を示す図である。 図11Aに部分的に示した方法の他の部分を示す流れ図である。 図11Aおよび図11Bに部分的に示した方法の残りの部分を示す流れ図である。 A:図10を参照して説明する本発明の一実施形態による浮動小数点格納フォーマットを示す図、B:図10を参照して説明する本発明の一実施形態によるパック・データの格納フォーマットを示す図、C:図10を参照して説明する本発明の一実施形態による整数データの格納フォーマットである。 図12A、図12B、図12Cを参照して説明する格納フォーマットを実施する際に図11Bのステップ1138を実行する、本発明の一実施形態による方法を示す図である。 本発明の一実施形態による、タグをクリアする方法を示す流れ図である。 A:エイリアス化された別々の物理レジスタ・ファイルを更新することのできる時間間隔を示すために、パック・データ命令と浮動小数点命令とを含む実行ストリームを示す図で、B:エイリアス化された別々の物理レジスタ・ファイルを更新することのできる時間間隔を示すために、パック・データ命令と浮動小数点命令とを含む他の実行ストリームを示す図である。

Claims (26)

  1. データ処理装置で命令を実行する方法であって:
    少なくとも部分的にエイリアス化され、複数のタグが対応している単一の論理レジスタ・ファイルの内容に対してパック・データ命令のセットと浮動小数点命令のセットとを実行するステップであり、前記パック・データ命令のセットは前記浮動小数点命令のセットより前に実行されるステップであって、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに前記パック・データ命令のセットを実行するステップとスタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに前記浮動小数点命令のセットを実行するステップとを含むステップと、;
    前記パック・データ命令セットの第1の命令の実行を試みることと、前記浮動小数点命令セットの第1の命令の実行を完了することとの間のある時点に、少なくとも前記単一の論理レジスタ・ファイル中のエイリアス化したレジスタに対応する前記複数のタグを非空状態に変更するステップであって、前記複数のタグは、前記単一の論理レジスタ・ファイル中のレジスタが空であるか空でないかを識別するステップと
    を含むことを特徴とする方法。
  2. データ処理装置で命令を実行する方法であって:
    単一の論理レジスタ・ファイルの内容に対して第1の命令タイプの第1の命令セットを実行するステップであって、第1の命令タイプの命令は非スタック参照のやり方での演算を指示し、かつ、前記単一の論理レジスタ・ファイルは、前記第1の命令セットを実行する間はフラット・レジスタ・ファイルとして操作されるステップと;
    同様に前記単一の論理レジスタ・ファイルの内容に対して第2の命令タイプの第1の命令を実行するステップであって、第2の命令タイプの命令はスタック参照のやり方での演算を指示し、かつ、前記単一の論理レジスタ・ファイルは、前記第1の命令を実行する間はスタック参照レジスタ・ファイルとして操作されるステップと
    を含むことを特徴とする方法。
  3. フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに第1の命令セットを実行する前記ステップはさらに、パック・データに対する操作を実行することを含むことを特徴とする請求項2に記載の方法。
  4. スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに命令を実行する前記ステップは、スカラー・データに対して操作を実行させることを特徴とする請求項1または3のいずれか1項に記載の方法。
  5. 浮動小数点命令を実行するステップはさらに、スカラー浮動小数点演算を行うステップを含むことを特徴とする請求項1に記載の方法。
  6. パック・データ命令を実行するステップはさらに、パック浮動小数点演算を行うステップを含むことを特徴とする請求項1,4または5のいずれか1項に記載の方法。
  7. パック・データ命令を実行するステップはさらに、パック整数データに対して操作を行うステップを含むことを特徴とする請求項1,4または5のいずれか1項に記載の方法。
  8. 前記第2の命令タイプの前記第1の命令を実行する前記ステップはさらに、
    前記単一の論理レジスタ・ファイルに含まれるデータをメモリにコピーするステップ
    を含むことを特徴とする請求項2または3に記載の方法。
  9. フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに命令を実行する前記ステップの開始から、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに前記第1の命令を実行する前記ステップを完了するまでの間のある時点に、前記単一の論理レジスタ・ファイル中の1つのレジスタを現在のトップ・オブ・スタック・レジスタとして識別するトップ・オブ・スタック表示を初期設定値に変更するステップ
    をさらに含むことを特徴とする請求項1ないし8のいずれか1項に記載の方法。
  10. フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して命令を実行する前記ステップの開始から、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して前記第1の命令を実行する前記ステップを開始するまでのある時点に、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して命令を実行するステップ中に書き込みが行われる前記単一の論理レジスタ・ファイル中の各レジスタの符号および指数のフィールドに、非数値または無限を示す値を書き込むステップ
    をさらに含むことを特徴とする請求項1ないし9のいずれか1項に記載の方法。
  11. フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して命令を実行する前記ステップの開始から、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して前記第1の命令を実行する前記ステップの完了まで間のある時点に、前記単一の論理レジスタ・ファイルに対応し、前記単一の論理レジスタ・ファイル中のレジスタが空であるか、空でないかを識別する複数のタグを非空状態に変更するステップ
    をさらに含むことを特徴とする請求項1ないし10のいずれか1項に記載の方法。
  12. 前記タグを変更するステップは、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して、前記第1の命令の実行を試みることか、または前記命令の第1の命令を実行することに応答して実行されることを特徴とする請求項1または11に記載の方法。
  13. 前記タグを変更するステップは、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して前記命令の第1の命令の実行を試みることに応答して実行されることを特徴とする請求項1または11に記載の方法。
  14. 前記タグを変更するステップは、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して前記命令のそれぞれを実行することに応答して実行されることを特徴とする請求項1または11に記載の方法。
  15. 前記タグを変更するステップは、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して前記命令を実行する前記ステップと、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して前記第1の命令を実行するステップとの間に実行されることを特徴とする請求項1または11ないし14のいずれか1項に記載の方法。
  16. 請求項2ないし10のいずれか1項に記載の方法を実行するデータ処理装置であって:
    複数の物理レジスタと;
    前記複数の物理レジスタがソフトウェアには前記単一の論理レジスタ・ファイルとして見えるようにするメモリ装置と;
    請求項2ないし10のいずれか1項に記載の方法により、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して対して命令を実行し、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して対して命令を実行する復号/実行装置と
    を備えることを特徴とするデータ処理装置。
  17. 請求項1ないし15のいずれか1項に記載の方法を実行するデータ処理装置であって:
    複数の物理レジスタと;
    前記複数の物理レジスタが、ソフトウェアには、スカラー浮動小数点データを保存する前記単一の論理レジスタ・ファイルとして見えるようにするメモリ装置と;
    請求項1ないし15のいずれか1項に記載の方法に従って前記第1のレジスタの小数部フィールドに書き込まれる第1のパック・データ項目を、前記単一の論理レジスタ・ファイル中の第1のレジスタに書き込ませる第1のパック・データ命令を受け取る復号/実行装置と
    を備えることを特徴とするデータ処理装置。
  18. 請求項1ないし15のいずれか1項に記載の方法を実行するデータ処理装置であって:
    複数の物理レジスタと;
    前記複数の物理レジスタがソフトウェアには前記単一の論理レジスタ・ファイルとして見えるようにするメモリ装置と;
    請求項1ないし15のいずれか1項に記載の方法により、前記単一の論理レジスタ・ファイルの内容に対して命令を実行する復号/実行装置と;
    部分的なコンテキスト切り替えによる前記単一の論理レジスタ・ファイルの使用不可、または使用可能を判定するイベント処理装置であって、使用不可と判定されると、前記データ処理装置は第1のルーチンの実行に割り込み、第2のルーチンを実行して前記単一の論理レジスタ・ファイルの内容をメモリにコピーするイベント処理装置と
    を備えることを特徴とするデータ処理装置。
  19. エミュレーション状態を示すEMフィールドを含む少なくとも1つのステータス・レジスタをさらに含み、エミュレーション状態が示されると、前記プロセッサは前記第1のルーチンの実行に割り込むことを特徴とする請求項18に記載のデータ処理装置。
  20. 前記復号/実行装置は、前記EMフィールドがエミュレーション状態を示し、かつ前記復号/実行装置が前記第1のルーチンに属する第1のスカラー・データ命令を受け取った場合に、前記第2のルーチンを実行することを特徴とする請求項19に記載のデータ処理装置。
  21. 前記復号/実行装置は、前記EMフィールドがエミュレーション状態を示し、かつ前記復号/実行装置が前記第1のルーチンに属する第1のパック・データ命令を受け取った場合に、第3のルーチンを実行することを特徴とする請求項19または20に記載のデータ処理装置。
  22. 前記データ処理装置は、前記イベント処理装置が、前記ソフトウェアに対して可視の単一のレジスタ・ファイルが使用可能であると判断し、かつ前記復号/実行装置が、前記復号/実行装置に前記第1のパック・データ項目を前記単一の論理レジスタ・ファイルに対して書き込ませる前記第1のルーチンに属する命令を受け取った場合に、第1の小数部フィールドに第1のパック・データ項目を書き込み、前記単一の論理レジスタ・ファイル中の第1のレジスタの第1の符号および指数フィールドに、非数値または無限を表す第1の値を書き込むことを特徴とする請求項18ないし21のいずれか1項に記載のデータ処理装置。
  23. トップ・オブ・スタック・フィールドを有する少なくとも1つのステータス・レジスタをさらに備え、前記トップ・オブ・スタック・フィールドは、前記イベント処理装置が前記単一の論理レジスタ・ファイルが使用可能であると判定し、かつ
    前記復号/実行装置が、前記第1のルーチンに属する第1のパック・データ命令を受け取った;
    前記復号/実行装置が、前記第1のルーチンに属する第1のスカラー命令を受け取り、かつ、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する第2のスカラー命令よりも後に、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する第2のパック・データ命令を実行した;または
    前記復号/実行装置が、前記第1のルーチンに属する前記第1のパック・データ命令を受け取り、かつ、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する第3のパック・データ命令よりも後に、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する第3のスカラー命令を実行した
    ことからなる第1の条件セットの1つである第1の条件が存在する場合に、初期設定値に変更されることを特徴とする請求項18に記載のデータ処理装置。
  24. 請求項1または11ないし15のいずれか1項に記載の方法を実行するデータ処理装置であって、
    複数の物理レジスタと;
    前記複数の物理メモリがソフトウェアには前記単一の論理レジスタ・ファイルとして見えるようにするメモリ装置と;
    請求項1または11ないし15のいずれか1項に記載の方法により、前記単一の論理レジスタ・ファイルの内容に対して命令を実行する復号/実行装置と;
    請求項1または11ないし15のいずれか1項に記載の方法により、前記複数のタグのうちのタグを変更するタグ修飾装置と
    を備えることを特徴とするデータ処理装置。
  25. 部分的なコンテキスト切り替えによる前記単一の論理レジスタ・ファイルの使用不可、または使用可能を判定するイベント処理装置であって、使用不可と判定されると、前記データ処理装置は第1のルーチンの実行に割り込み、第2のルーチンを実行して前記単一の論理レジスタ・ファイルの内容をメモリにコピーするイベント処理装置と;
    タグ修飾装置であって、前記イベント処理装置が前記単一の論理レジスタ・ファイルが使用可能であると判断し、かつ、
    前記復号/実行装置が、前記第1のルーチンに属する非遷移パック・データ命令を受け取った;
    前記復号/実行装置が、前記第1のルーチンに属する第1のスカラー命令を受け取り、かつ、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する命令の1つより後に、かつ第1の遷移命令よりも後に、第1のパック・データ命令を実行した;または
    前記復号/実行装置が、前記第1のルーチンに属する第2のパック・データ命令を受け取り、かつ、フラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する命令の1つよりも後に、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する命令の1つを実行した;
    ことからなる第1の条件セットの1つである第1の条件が存在する場合に、前記単一の論理レジスタ・ファイル中の異なるレジスタに対応する前記複数のタグ中の各タグを非空状態に変更する前記タグ修飾装置と
    をさらに備えることを特徴とする請求項24に記載のデータ処理装置。
  26. 前記タグ修飾装置は、
    前記復号/実行装置が、前記第1のルーチンに属する遷移命令を受け取った;または
    前記復号/実行装置が、前記第1のルーチンに属する第2のスカラー命令を受け取り、かつ、スタック参照レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する命令の1つよりも後に、かつフラット・レジスタ・ファイルとしての前記単一の論理レジスタ・ファイルに対して作用する命令のどの他の命令よりも後に、前記遷移命令を実行した
    ことからなる第2の条件セットの1つである第2の条件が存在する場合に、前記複数のタグを空状態に変更することを特徴とする請求項24または25に記載のデータ処理装置。
JP2003417823A 1995-12-19 2003-12-16 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置 Expired - Lifetime JP3792696B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/574,719 US5852726A (en) 1995-12-19 1995-12-19 Method and apparatus for executing two types of instructions that specify registers of a shared logical register file in a stack and a non-stack referenced manner

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP52303097A Division JP3678427B2 (ja) 1995-12-19 1996-12-17 論理レジスタ・ファイルのレジスタ群を特定する2種類の命令を実行するための方法および装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2006009928A Division JP3868470B2 (ja) 1995-12-19 2006-01-18 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置

Publications (2)

Publication Number Publication Date
JP2004152318A JP2004152318A (ja) 2004-05-27
JP3792696B2 true JP3792696B2 (ja) 2006-07-05

Family

ID=24297335

Family Applications (5)

Application Number Title Priority Date Filing Date
JP52303097A Expired - Lifetime JP3678427B2 (ja) 1995-12-19 1996-12-17 論理レジスタ・ファイルのレジスタ群を特定する2種類の命令を実行するための方法および装置
JP2003417826A Expired - Lifetime JP3732197B2 (ja) 1995-12-19 2003-12-16 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
JP2003417830A Expired - Lifetime JP3679797B2 (ja) 1995-12-19 2003-12-16 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
JP2003417823A Expired - Lifetime JP3792696B2 (ja) 1995-12-19 2003-12-16 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
JP2006009928A Expired - Lifetime JP3868470B2 (ja) 1995-12-19 2006-01-18 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置

Family Applications Before (3)

Application Number Title Priority Date Filing Date
JP52303097A Expired - Lifetime JP3678427B2 (ja) 1995-12-19 1996-12-17 論理レジスタ・ファイルのレジスタ群を特定する2種類の命令を実行するための方法および装置
JP2003417826A Expired - Lifetime JP3732197B2 (ja) 1995-12-19 2003-12-16 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
JP2003417830A Expired - Lifetime JP3679797B2 (ja) 1995-12-19 2003-12-16 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2006009928A Expired - Lifetime JP3868470B2 (ja) 1995-12-19 2006-01-18 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置

Country Status (8)

Country Link
US (1) US5852726A (ja)
EP (2) EP1548576A3 (ja)
JP (5) JP3678427B2 (ja)
KR (1) KR100312092B1 (ja)
AU (1) AU1345597A (ja)
BR (1) BR9612189A (ja)
RU (1) RU2179331C2 (ja)
WO (1) WO1997022921A1 (ja)

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1094610C (zh) 1994-12-02 2002-11-20 英特尔公司 可以对复合操作数进行压缩操作和拆开操作的微处理器
US6385634B1 (en) 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5701508A (en) 1995-12-19 1997-12-23 Intel Corporation Executing different instructions that cause different data type operations to be performed on single logical register file
US5940859A (en) 1995-12-19 1999-08-17 Intel Corporation Emptying packed data state during execution of packed data instructions
US6792523B1 (en) 1995-12-19 2004-09-14 Intel Corporation Processor with instructions that operate on different data types stored in the same single logical register file
US6260137B1 (en) * 1997-09-12 2001-07-10 Siemens Aktiengesellschaft Data processing unit with digital signal processing capabilities
US6065114A (en) * 1998-04-21 2000-05-16 Idea Corporation Cover instruction and asynchronous backing store switch
US6009509A (en) * 1997-10-08 1999-12-28 International Business Machines Corporation Method and system for the temporary designation and utilization of a plurality of physical registers as a stack
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6112018A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Apparatus for exchanging two stack registers
FR2772944A1 (fr) * 1997-12-19 1999-06-25 Sgs Thomson Microelectronics Procede de gestion d'un circuit electronique et unite de gestion pour sa mise en oeuvre
US6192464B1 (en) * 1997-12-31 2001-02-20 Intel Corporation Method and apparatus for decoding one or more instructions after renaming destination registers
US5974531A (en) * 1998-02-17 1999-10-26 Industrial Technology Research Institute Methods and systems of stack renaming for superscalar stack-based data processors
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6233671B1 (en) 1998-03-31 2001-05-15 Intel Corporation Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions
US6122725A (en) * 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US6230257B1 (en) 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US6266769B1 (en) 1998-04-30 2001-07-24 Intel Corporation Conversion between packed floating point data and packed 32-bit integer data in different architectural registers
US6292815B1 (en) 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6247116B1 (en) * 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
US6282554B1 (en) 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US5995122A (en) * 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format
US6263426B1 (en) 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US6240507B1 (en) * 1998-10-08 2001-05-29 International Business Machines Corporation Mechanism for multiple register renaming and method therefor
US6256725B1 (en) * 1998-12-04 2001-07-03 Agere Systems Guardian Corp. Shared datapath processor utilizing stack-based and register-based storage spaces
US6292888B1 (en) * 1999-01-27 2001-09-18 Clearwater Networks, Inc. Register transfer unit for electronic processor
US7257814B1 (en) 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US7020879B1 (en) * 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
US7035997B1 (en) 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US7237093B1 (en) 1998-12-16 2007-06-26 Mips Technologies, Inc. Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US6321327B1 (en) * 1998-12-30 2001-11-20 Intel Corporation Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations
US6308252B1 (en) * 1999-02-04 2001-10-23 Kabushiki Kaisha Toshiba Processor method and apparatus for performing single operand operation and multiple parallel operand operation
US7242414B1 (en) 1999-07-30 2007-07-10 Mips Technologies, Inc. Processor having a compare extension of an instruction set architecture
US6732259B1 (en) 1999-07-30 2004-05-04 Mips Technologies, Inc. Processor having a conditional branch extension of an instruction set architecture
EP1163591B1 (en) * 1999-02-12 2017-08-16 ARM Finance Overseas Limited Processor having a compare extension of an instruction set architecture
US6912559B1 (en) 1999-07-30 2005-06-28 Mips Technologies, Inc. System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
US6714197B1 (en) 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US6631392B1 (en) 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
US7346643B1 (en) 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6697832B1 (en) 1999-07-30 2004-02-24 Mips Technologies, Inc. Floating-point processor with improved intermediate result handling
US7496734B1 (en) * 2000-04-28 2009-02-24 Stmicroelectronics, Inc. System and method for handling register dependency in a stack-based pipelined processor
US6631452B1 (en) * 2000-04-28 2003-10-07 Idea Corporation Register stack engine having speculative load/store modes
US6996596B1 (en) 2000-05-23 2006-02-07 Mips Technologies, Inc. Floating-point processor with operating mode having improved accuracy and high performance
US6725361B1 (en) * 2000-06-16 2004-04-20 Transmeta Corporation Method and apparatus for emulating a floating point stack in a translation process
JP2004518183A (ja) 2000-07-14 2004-06-17 クリアウオーター・ネツトワークス・インコーポレイテツド マルチスレッド・システムにおける命令のフェッチとディスパッチ
US6757807B1 (en) 2000-08-18 2004-06-29 Sun Microsystems, Inc. Explicitly clustered register file and execution unit architecture
US7206925B1 (en) 2000-08-18 2007-04-17 Sun Microsystems, Inc. Backing Register File for processors
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7181484B2 (en) 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7711763B2 (en) 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7203820B2 (en) * 2002-06-28 2007-04-10 Sun Microsystems, Inc. Extending a register file utilizing stack and queue techniques
EP1447742A1 (en) * 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US7613950B2 (en) * 2004-02-27 2009-11-03 Hewlett-Packard Development Company, L.P. Detecting floating point hardware failures
US9176741B2 (en) * 2005-08-29 2015-11-03 Invention Science Fund I, Llc Method and apparatus for segmented sequential storage
US8296550B2 (en) * 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US8275976B2 (en) * 2005-08-29 2012-09-25 The Invention Science Fund I, Llc Hierarchical instruction scheduler facilitating instruction replay
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US7644258B2 (en) 2005-08-29 2010-01-05 Searete, Llc Hybrid branch predictor using component predictors each having confidence and override signals
US20070061551A1 (en) * 2005-09-13 2007-03-15 Freescale Semiconductor, Inc. Computer Processor Architecture Comprising Operand Stack and Addressable Registers
EP2013723B1 (en) * 2006-05-03 2019-06-12 Sony Interactive Entertainment Inc. Register mapping in emulation of a target system on a host system
GB2447428A (en) * 2007-03-15 2008-09-17 Linear Algebra Technologies Lt Processor having a trivial operand register
US7882325B2 (en) * 2007-12-21 2011-02-01 Intel Corporation Method and apparatus for a double width load using a single width load port
CN101216756B (zh) * 2007-12-28 2011-03-23 中国科学院计算技术研究所 一种risc处理器装置及其模拟浮点栈操作的方法
US9798543B2 (en) * 2009-09-24 2017-10-24 Nvidia Corporation Fast mapping table register file allocation algorithm for SIMT processors
US20120191952A1 (en) * 2011-01-21 2012-07-26 Advanced Micro Devices, Inc. Processor implementing scalar code optimization
US8914615B2 (en) 2011-12-02 2014-12-16 Arm Limited Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format
US9405542B1 (en) * 2012-04-05 2016-08-02 Marvell International Ltd. Method and apparatus for updating a speculative rename table in a microprocessor
CN105993000B (zh) * 2013-10-27 2021-05-07 超威半导体公司 用于浮点寄存器混叠的处理器和方法
MA44821A (fr) * 2016-02-27 2019-01-02 Kinzinger Automation Gmbh Procédé d'allocation d'une pile de registres virtuels dans une machine à pile
CN111782269B (zh) * 2020-06-04 2023-12-12 珠海格力电器股份有限公司 一种中断处理方法及中断处理设备

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3711692A (en) * 1971-03-15 1973-01-16 Goodyear Aerospace Corp Determination of number of ones in a data field by addition
US3723715A (en) * 1971-08-25 1973-03-27 Ibm Fast modulo threshold operator binary adder for multi-number additions
US4161784A (en) * 1978-01-05 1979-07-17 Honeywell Information Systems, Inc. Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands
US4229801A (en) * 1978-12-11 1980-10-21 Data General Corporation Floating point processor having concurrent exponent/mantissa operation
US4418383A (en) * 1980-06-30 1983-11-29 International Business Machines Corporation Data flow component for processor and microprocessor systems
US4393468A (en) * 1981-03-26 1983-07-12 Advanced Micro Devices, Inc. Bit slice microprogrammable processor for signal processing applications
US4498177A (en) * 1982-08-30 1985-02-05 Sperry Corporation M Out of N code checker circuit
US4707800A (en) * 1985-03-04 1987-11-17 Raytheon Company Adder/substractor for variable length numbers
US4740893A (en) * 1985-08-07 1988-04-26 International Business Machines Corp. Method for reducing the time for switching between programs
JPS6297060A (ja) * 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US4992938A (en) * 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US4989168A (en) * 1987-11-30 1991-01-29 Fujitsu Limited Multiplying unit in a computer system, capable of population counting
US5008812A (en) * 1988-03-18 1991-04-16 Digital Equipment Corporation Context switching method and apparatus for use in a vector processing system
KR920007505B1 (ko) * 1989-02-02 1992-09-04 정호선 신경회로망을 이용한 곱셈기
US5127098A (en) * 1989-04-12 1992-06-30 Sun Microsystems, Inc. Method and apparatus for the context switching of devices
EP0510429A3 (en) * 1991-04-24 1993-12-01 Ibm Millicode register management system
US5187679A (en) * 1991-06-05 1993-02-16 International Business Machines Corporation Generalized 7/3 counters
US5493687A (en) * 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
US5522051A (en) * 1992-07-29 1996-05-28 Intel Corporation Method and apparatus for stack manipulation in a pipelined processor
US5519841A (en) * 1992-11-12 1996-05-21 Digital Equipment Corporation Multi instruction register mapper
KR0122528B1 (ko) * 1993-01-08 1997-11-20 윌리엄 티.엘리스 슈퍼스칼라 프로세서 시스템에서 중간 기억 버퍼의 할당을 인덱스하기 위한 방법 및 시스템
US5535397A (en) * 1993-06-30 1996-07-09 Intel Corporation Method and apparatus for providing a context switch in response to an interrupt in a computer process
US5499352A (en) * 1993-09-30 1996-03-12 Intel Corporation Floating point register alias table FXCH and retirement floating point register array
US5669013A (en) * 1993-10-05 1997-09-16 Fujitsu Limited System for transferring M elements X times and transferring N elements one time for an array that is X*M+N long responsive to vector type instructions
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices, Inc. Superskalarmikroprozessoren
US5546554A (en) * 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5481719A (en) * 1994-09-09 1996-01-02 International Business Machines Corporation Exception handling method and apparatus for a microkernel data processing system
US5507000A (en) * 1994-09-26 1996-04-09 Bull Hn Information Systems Inc. Sharing of register stack by two execution units in a central processor
US5537606A (en) * 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US5634118A (en) * 1995-04-10 1997-05-27 Exponential Technology, Inc. Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation
US5687336A (en) * 1996-01-11 1997-11-11 Exponential Technology, Inc. Stack push/pop tracking and pairing in a pipelined processor

Also Published As

Publication number Publication date
JP2000506639A (ja) 2000-05-30
JP2004145898A (ja) 2004-05-20
EP0868689A1 (en) 1998-10-07
JP2004152319A (ja) 2004-05-27
WO1997022921A1 (en) 1997-06-26
KR100312092B1 (ko) 2001-12-12
BR9612189A (pt) 1999-07-13
US5852726A (en) 1998-12-22
KR20000064488A (ko) 2000-11-06
JP2004152318A (ja) 2004-05-27
EP1548576A2 (en) 2005-06-29
JP3868470B2 (ja) 2007-01-17
RU2179331C2 (ru) 2002-02-10
JP3678427B2 (ja) 2005-08-03
AU1345597A (en) 1997-07-14
JP3732197B2 (ja) 2006-01-05
EP1548576A3 (en) 2017-04-19
JP3679797B2 (ja) 2005-08-03
JP2006185453A (ja) 2006-07-13
EP0868689A4 (en) 2000-02-16

Similar Documents

Publication Publication Date Title
JP3792696B2 (ja) 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
US5701508A (en) Executing different instructions that cause different data type operations to be performed on single logical register file
US5835748A (en) Method for executing different sets of instructions that cause a processor to perform different data type operations on different physical registers files that logically appear to software as a single aliased register file
US5940859A (en) Emptying packed data state during execution of packed data instructions
WO1997022924A9 (en) A method of performing different data type operations that is invisible to various operating system techniques
US6792523B1 (en) Processor with instructions that operate on different data types stored in the same single logical register file
US6230259B1 (en) Transparent extended state save
US6594754B1 (en) Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters
JP2006079652A (ja) 多重命令セットによるデータ処理
EP1446717A1 (en) Method and apparatus for interfacing a processor to a coprocessor
CA2123448C (en) Blackout logic for dual execution unit processor
US5857096A (en) Microarchitecture for implementing an instruction to clear the tags of a stack reference register file
KR100322725B1 (ko) 전문 갱신 및 분기 명령을 이용하는 밀리코드 플래그
US5784606A (en) Method and system in a superscalar data processing system for the efficient handling of exceptions

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050817

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050920

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051219

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060118

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20060125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060307

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060328

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060405

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20090414

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20100414

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110414

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120414

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120414

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130414

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130414

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140414

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term