下記の説明では、本発明を完全に理解していただくために多数の特定の詳細について述べる。しかし、本発明がこれらの特定の詳細なしに実施できるものであることを理解されたい。他の例では、本発明を曖昧にしないように、周知の回路、構造、技法については詳しく示していない。
本発明の一実施形態によれば、本出願は、様々なオペレーティング・システム技法には見えず、良好なプログラミング方法を推進し、既存のソフトウェアには見えないように、それぞれの異なるデータ・タイプ演算をプロセッサに実行させる、いくつかの異なる数組の命令を実行する方法および装置について説明するものである。これを達成するには、少なくとも論理的にはソフトウェアから単一のエイリアス化レジスタ・ファイルとして見えるものに対して、いくつかの異なるデータ・タイプ演算をプロセッサに実行させる異なる数組の命令を実行する。異なる数組の命令を実行した結果として実行されるデータ・タイプ演算はどんなタイプの演算でもよい。たとえば、ある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を参照して示す。
図のように、EMMSを除くパック・データ命令では、タグ320が非空状態(00)に設定される。EMMSによって浮動小数点タグ・レジスタは空(11)に設定される。また、EMMSを含むパック・データ命令では、トップ・オブ・スタック・フィールド350に記憶されているトップ・オブ・スタック表示も0にリセットされる。
インテル・アーキテクチャ・プロセッサ内の制御ワードや状況ワード(TOSを除く)など残りの環境レジスタは変更されない。パック・データ読取りまたはEMMSでは、浮動小数点レジスタ300の小数部および指数部は変更されない。しかし、一実施形態では、エイリアス化機構のためのパック・データ・レジスタへのパック・データ書込みでは、対応する浮動小数点レジスタの小数部が、実行中の演算に応じて修正される。さらに、この実施形態では、パック・データ・レジスタ310を修正することによって浮動小数点レジスタの小数部にデータが書き込まれると、浮動小数点レジスタ300の符号部および指数部中のすべてのビットが1に設定される。パック・データ命令は浮動小数点レジスタの符号部および指数部を使用しないので(浮動小数点レジスタの符号部および指数部においてパック・データ・レジスタはエイリアス化されない)、これはパック・データ命令には影響を与えない。前述のように、代替実施形態では、浮動小数点状態の任意の部分上にパック・データ状態をエイリアス化することができる。また、代替実施形態では、他の値を書き込むこともでき、また、レジスタの符号部または指数部、あるいはその両方を変更しなくてもよい。
パック・データ命令の実行をさらに示すために、書き込まれる浮動小数点レジスタの符号部および指数部がすべて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に示したように、EMM表示は、最後のパック・データ命令がEMM命令でなかったことを示すように変更される。ステップ750の完了時に、システムは次の命令を実行することができる。もちろん、EMMS命令を使用しない実施形態はステップ740、ステップ742、ステップ744を必要としない。
したがって、(ワシントン州レッドモンドのマイクロソフト社(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に関して(パック・データ命令とその後に続く浮動小数点命令に関して)実施することもできる。
本発明をいくつかの実施形態に関して説明したが、当業者には、本発明が前述の実施形態に限らないことが認識されよう。本発明の方法および装置は、添付の請求の範囲の趣旨および範囲内で修正および変更を加えて実施することができる。したがって、この説明は本発明を制限するものではなく例示的なものとみるべきである。