(57)【特許請求の範囲】
【請求項１】
自己修飾コード処理システムを有するスーパースケーラプロセッサが組み込まれたネットワークサーバコンピュータシステムであって、
前記スーパースケーラプロセッサは、命令取り出しから結果コミットメントまでのオペレーションを表すオペレーションエントリと、メモリ内の目標アドレスにストアオペランドを記憶させるストアパイプとを備え、
前記自己修飾コード処理システムは、
各々がオペレーションエントリの第１グループに関連しており、関連するオペレーションエントリに対応する命令のメモリ内における第１アドレスを表す複数の第１タグストアと、
前記複数の第１タグストア及び前記ストアパイプに接続されており、前記ストアパイプによって実行されるストアオペレーションのための目標アドレスと前記第１タグストアに表されるいずれかの第１アドレスとの整合に応じて、自己修飾コード表示を供給する第１比較ロジックと、
前記第１比較ロジック及び前記オペレーションエントリに接続されており、前記自己修飾コード表示に応じたオペレーションエントリの実行されていないものをフラッシュする制御ロジックと、を備えており、
前記オペレーションエントリの前記第１グループは、スケジューラに表されるＯｐグループに編成された複数のＯｐエントリを備えており、
前記第１タグストアの各々は、関連するＯｐグループのＯｐエントリが復号する命令グループのためのメモリアドレスをカバーする一対のタグフィールドを含み、
前記一対のタグフィールドは、前記命令グループがキャッシュライン境界と交差するとき、当該キャッシュライン境界のいずれかの側のメモリアドレスをカバーするように構成されている、
ネットワークサーバコンピュータシステム。
【請求項２】
命令取り出しから結果コミットメントまでのオペレーションを表すオペレーションエントリ、及びメモリ内の目標アドレスにストアオペランドを記憶させるストアパイプを有するコンピュータに用いられる自己修飾コード処理システムであって、
各々がオペレーションエントリの第１グループに関連しており、関連するオペレーションエントリに対応する命令のメモリ内における第１アドレスを表す複数の第１タグストアと、
前記複数の第１タグストア及び前記ストアパイプに接続されており、前記ストアパイプによって実行されるストアオペレーションのための目標アドレスと前記第１タグストアに表されるいずれかの第１アドレスとの整合に応じて、自己修飾コード表示を供給する第１比較ロジックと、
前記第１比較ロジック及び前記オペレーションエントリに接続されており、前記自己修飾コード表示に応答してオペレーションエントリの実行されていないものをフラッシュする制御ロジックとを備えており、
前記オペレーションエントリの前記第１グループは、スケジューラに表されるＯｐグループに編成された複数のＯｐエントリを備えており、
前記第１タグストアの各々は、関連するＯｐグループのＯｐエントリが復号する命令グループのためのメモリアドレスをカバーする一対のタグフィールドを含み、
前記一対のタグフィールドは、前記命令グループがキャッシュライン境界と交差するとき、当該キャッシュライン境界のいずれかの側のメモリアドレスをカバーするように構成されている、
自己修飾コード処理システム。
【請求項３】
前記ストアパイプに接続されて、連続ストアオペレーションのための目標アドレスを受け取るとともに、メモリサブシステムからのストア確認応答に応じてクリアされるアドレスストアと、
前記アドレスストアに接続され、現取り出しアドレスと前記アドレスストアに格納された目標アドレスとの整合に応じて、前記現取り出しアドレスからの命令取り出しを無効にする取り出し制御ロジックと、をさらに備える、
請求項２記載の自己修飾コード処理システム。
【請求項４】
命令デコーダと前記メモリサブシステムとの間に接続される命令キャッシュと、
前記ストアパイプと前記メモリサブシステムとの間に接続されるデータキャッシュと、
前記命令キャッシュ及び前記データキャッシュの両方にキャッシュラインが同時に存在することを防止する命令／データキャッシュ制御ロジックと、をさらに備える、
請求項３記載の自己修飾コード処理システム。
【請求項５】
前記命令キャッシュは、前記メモリサブシステムからのスヌープを処理する間、前記命令デコーダからの取り出しが禁止されるように構成されている、
請求項４記載の自己修飾コード処理システム。
【請求項６】
前記一対のタグフィールドにより表される第１アドレスが複数の部分的アドレスであり、
前記第１比較ロジックは、タグフィールドにより表される前記複数の部分的アドレスのいずれかと、前記ストアパイプにより実行されるストアオペレーションのための目標アドレスの対象部分との整合に応じて自己修飾コード表示を供給するように構成されている、
請求項２記載の自己修飾コード処理システム。
【請求項７】
前記タグフィールドにより表される前記部分的アドレスと、前記ストアパイプにより実行されるストアオペレーションのための目標アドレスの前記対象部分とは、それぞれ個別のアドレスにビット５乃至１９を含む
請求項６記載の自己修飾コード処理システム。
【請求項８】
前記Ｏｐエントリは、Ｏｐクアッドとして構成される、
請求項２記載の自己修飾コード処理システム。
【請求項９】
オペレーションエントリの前記第１グループと第２グループとが、それぞれスケジューラと命令デコーダとに関連付けられており、
各々が前記オペレーションエントリの第２グループに関連しており、関連する前記オペレーションエントリに対応する命令のメモリ内における第２アドレスを表す複数の第２タグストアと、
前記第２タグストア、前記ストアパイプ、及び前記制御ロジックに接続されており、前記ストアパイプによって実行されるストアオペレーションのための目標ターゲットと前記第２タグストアに表されるアドレスとの整合に応じて、自己修飾コード表示を供給する第２比較ロジックと、をさらに備え、
前記制御ロジックは、自己修飾コード表示に応答してオペレーションエントリの第２グループとオペレーションエントリの第１グループの完了されていないものとをフラッシュするように構成される、
請求項２記載の自己修飾コード処理システム。
【請求項１０】
前記オペレーションエントリの前記第１グループは、スケジューラに表されるＯｐグループに編成された複数のＯｐエントリを備えており、
前記第１タグストアの各々は、関連するＯｐグループのＯｐエントリが復号する命令グループのためのメモリアドレスをカバーする一対のタグフィールドを含み、
前記一対のタグフィールドは、前記命令グループがキャッシュライン境界と交差するときに、当該キャッシュライン境界のいずれかの側のメモリアドレスをカバーするものであり、
前記オペレーションエントリの第２グループは、前記命令デコーダ内の命令バッファとして構成されており、各々がキャッシュラインに対応する複数の命令エントリを備えており、
前記第２アドレスが前記キャッシュラインをカバーするように構成されている、
請求項９記載の自己修飾コード処理システム。
【請求項１１】
前記第１アドレス及び第２アドレスは複数の部分的アドレスであり、
前記第１比較ロジックは、前記タグフィールドに表される前記複数の部分的アドレスのいずれかと前記目標アドレスの対象部分との整合に応じて自己修飾コード表示を供給するように構成されており、
前記第２比較ロジックは、第２タグストアに表される前記複数の部分的アドレスのいずれかと前記目標アドレスの対象部分との整合に応じて自己修飾コード表示を供給するように構成されている、
請求項１０記載の自己修飾コード処理システム。
【請求項１２】
前記部分的アドレスは、個々の全アドレスのビット５乃至１９を含む、
請求項１１記載の自己修飾コード処理システム。
【請求項１３】
前記Ｏｐエントリは、Ｏｐクアッドとして構成される、
請求項１０記載の自己修飾コード処理システム。
【請求項１４】
自己修飾コード処理システムを備えるプロセッサが組み込まれたマルチメディアコンピュータシステムであって、
マルチメディア機能デバイスと、
前記マルチメディア機能デバイス及びマルチメディア信号取得デバイスに接続されており、マルチメディア信号を合成及びサンプリングするための信号変換インタフェースを有するマルチメディアアダプタと、
前記マルチメディアアダプタに接続され、マルチメディアデータの転送を行うための入力／出力バスと、
マルチメディアデータを処理するとともに、前記マルチメディアアダプタとの間でマルチメディアデータの転送を行うために前記入力／出力バスに接続されており、命令取り出しから結果コミットメントまでのオペレーションを表すオペレーションエントリ、メモリ内の目標アドレスにストアオペランドを記憶させるストアパイプ、及び前記自己修飾コード処理システムを有するスーパースケーラプロセッサと、を備え、
前記自己修飾コード処理システムは、
各々が前記オペレーションエントリの第１グループに関連しており、関連するオペレーションエントリに対応する命令のメモリ内における第１アドレスを表す複数の第１タグストアと、
前記複数の第１タグストア及び前記ストアパイプに接続されており、前記ストアパイプによって実行されるストアオペレーションのための目標アドレスと前記第１タグストアよりに表されるいずれかの前記第１アドレスとの整合に応じて、自己修飾コード表示を供給する第１比較ロジックと、
前記第１比較ロジック及び前記オペレーションエントリに接続されており、前記自己修飾コード表示に応じたオペレーションエントリの実行されていないものをフラッシュする制御ロジックと、を備え、
前記オペレーションエントリの前記第１グループは、スケジューラに表されるＯｐグループに編成された複数のＯｐエントリを備えており、
前記第１タグストアの各々は、関連するＯｐグループのＯｐエントリが復号する命令グループのためのメモリアドレスをカバーする一対のタグフィールドを含み、
前記一対のタグフィールドは、前記命令グループがキャッシュライン境界と交差するとき、当該キャッシュライン境界のいずれかの側のメモリアドレスをカバーするように構成されている、
マルチメディアコンピュータシステム。
【請求項１５】
マルチメディア信号取得デバイスをさらに備える、
請求項１４記載のマルチメディアコンピュータシステム。
【請求項１６】
前記入力／出力バスに接続されるＬＡＮアダプタをさらに備える、
請求項１４記載のマルチメディアコンピュータシステム。
【請求項１７】
メモリサブシステムと、
前記メモリサブシステムに接続される命令キャッシュ及びデータキャッシュと、
前記データキャッシュに接続されてストアオペレーションの結果を前記メモリサブシステムに記録するとともに、ストアオペレーション結果の記録に関するストアオペレーション目標アドレス表示を供給するストアパイプ、を備える複数の実行ユニットと、
命令から復号されたＯｐｓのために配列された複数のＯｐエントリ、及び命令のためのメモリアドレスをカバーする複数の第１アドレスタグを含むスケジューラと、
前記ストアパイプ及び前記第１アドレスタグに接続されて、ストアオペレーション目標アドレスといずれか１つの第１アドレスタグとの間の整合に応じて、自己修飾コードフォールト処理手段をトリッガするように接続される第１比較ロジックと、
前記命令キャッシュと前記スケジューラとの間に接続されて、複数の命令バッファエントリ及び命令バッファエントリの各々に関連する複数の第２アドレスタグを有する命令デコーダと、
前記ストアパイプ及び前記第２アドレスタグに接続され、ストアオペレーション目標アドレスといずれか１つの第２アドレスタグとの間の整合に応じて、自己修飾コードフォールト処理手段をトリッガするように接続される第２比較ロジックと、を備える、
装置。
【請求項１８】
前記自己修飾コードフォールト処理手段は、
第１比較ロジック、第２比較ロジック、スケジューラ、及び命令デコーダに接続されて、第１比較ロジック又は第２比較ロジックのいずれかからの自己修飾コードフォールト表示に応じて、ＯｐエントリからのＯｐの実行していないものと、命令バッファからの命令とをフラッシュする制御ロジックを備えている、
請求項１７記載の装置。
【請求項１９】
前記自己修飾コードフォールト処理手段は、
トリッガするストアオペレーションと同一の命令に関連したＯｐｓを実行する過程と、
トリッガするストアオペレーションのための命令ポインタを得る過程と、
前記メモリサブシステムによってトリッガされるストアオペレーションが確認応答されるまで待機する過程と、
命令ストリーム内の、トリッガするストアオペレーションに関連する命令の直後の命令にジャンプして戻る過程と、を実行するように構成されている、
請求項１８記載の装置。
【請求項２０】
前記自己修飾コードフォールト処理手段は、
前記ストアパイプに接続されて、連続ストアオペレーションのための目標アドレスを受け取り、前記メモリサブシステムからのストアオペレーションの確認応答に応じてクリアされるアドレスストアと、
前記アドレスストアに接続され、現取り出しアドレスと前記アドレスストアに格納された目標アドレスとの整合に応じて、前記現取り出しアドレスからの命令取り出しを無効にする取り出し制御ロジックと、をさらに備える、
請求項１８記載の装置。
【請求項２１】
前記命令キャッシュ及び前記データキャッシュの両方にキャッシュラインが同時に存在することを防止する命令／データキャッシュ制御ロジックをさらに備える、
請求項１８記載の自己修飾コード処理システム。
【請求項２２】
データ及び命令を記憶するメモリサブシステムと、
前記メモリサブシステムに記憶される前記データ及び命令にアクセス可能に接続され、命令取り出しから結果コミットメントまでのオペレーションを表すオペレーションエントリ、メモリ内の目標アドレスにストアオペランドを記憶させるストアパイプ、及び自己修飾コード処理システムを有するプロセッサとを備え、
前記自己修飾コード処理システムは、
各々がオペレーションエントリの第１グループに関連しており、関連するオペレーションエントリに対応する命令のメモリ内の第１アドレスを表す複数の第１タグストアと、
前記複数の第１タグストア及び前記ストアパイプに接続されており、前記ストアパイプによって実行されるストアオペレーションのための目標アドレスと前記第１タグストアに表されるいずれかの第１アドレスとの整合に応じて、自己修飾コード表示を供給する第１比較ロジックと、
前記第１比較ロジック及び前記オペレーションエントリに接続されており、前記自己修飾コード表示に応じたオペレーションエントリの実行されていないものをフラッシュする制御ロジックと、を備え、
前記オペレーションエントリの前記第１グループは、スケジューラに表されるＯｐグループに編成された複数のＯｐエントリを備えており、
前記第１タグストアの各々は、関連するＯｐグループのＯｐエントリが復号する命令グループのためのメモリアドレスをカバーする一対のタグフィールドを含み、
前記一対のタグフィールドは、前記命令グループがキャッシュライン境界と交差するとき、当該キャッシュライン境界のいずれかの側のメモリアドレスをカバーするように構成されている、
コンピュータシステム。
【請求項２３】
前記プロセッサ及び前記メモリサブシステムは、マザーボードの構成部品である、
請求項２２記載のコンピュータシステム。
【請求項２４】
前記プロセッサに動作可能に接続されたパラレルインタフェースをさらに備える、
請求項２２記載のコンピュータシステム。
【請求項２５】
前記パラレルインタフェースを介して前記プロセッサに接続されるプリンタをさらに備える、
請求項２４記載のコンピュータシステム。
【請求項２６】
前記プロセッサの動作可能に接続されたシリアルインタフェースをさらに備える、
請求項２２記載のコンピュータシステム。
【請求項２７】
前記シリアルインタフェースを介して前記プロセッサに接続されるモデムをさらに備える、
請求項２６記載のコンピュータシステム。
【請求項２８】
前記プロセッサに動作可能に接続されたグラフィックアダプタをさらに備える、
請求項２２記載のコンピュータシステム。
【請求項２９】
前記グラフィックアダプタを介して前記プロセッサに接続されるビデオディスプレイをさらに備える、
請求項２８記載のコンピュータシステム。
【請求項３０】
前記プロセッサに動作可能に接続されたＬＡＮアダプタをさらに備える、
請求項２２記載のコンピュータシステム。
【請求項３１】
前記ＬＡＮアダプタを介して前記プロセッサに接続されるネットワークデバイスをさらに備える、
請求項３０記載のコンピュータシステム。
【請求項３２】
前記プロセッサに動作可能に接続されたディスクコントローラをさらに備える、
請求項２２記載のコンピュータシステム。
【請求項３３】
前記ディスクコントローラを介して前記プロセッサに接続されるハードディスクをさらに備える、
請求項３２記載のコンピュータシステム。
【請求項３４】
前記ディスクコントローラを介して前記プロセッサに接続されるフレキシブルディスクをさらに備える、
請求項３２記載のコンピュータシステム。
【請求項３５】
自己修飾コード処理システムを有するプロセッサが組み込まれたネットワークサーバコンピュータシステムであって、
ＬＡＮアダプタと、
前記LANアダプタとの間で処理するデータの送受を行うために当該LANアダプタに接続され、命令取り出しから結果コミットメントまでのオペレーションを表すオペレーションエントリ、メモリ内の目標アドレスにストアオペランドを記憶させるストアパイプ、及び自己修飾コード処理システムを有するスーパースケーラプロセッサとを備え、
前記自己修飾コード処理システムは、
各々がオペレーションエントリの第１グループに関連しており、関連するオペレーションエントリに対応する命令のメモリ内における第１アドレスを表す複数の第１タグストアと、
前記複数の第１タグストア及び前記ストアパイプに接続されており、前記ストアパイプによって実行されるストアオペレーションのための目標アドレスと前記第１タグストアに表されるいずれかの第１アドレスとの整合に応じて、自己修飾コード表示を供給する第１比較ロジックと、
前記第１比較ロジック及び前記オペレーションエントリに接続されており、前記自己修飾コード表示に応じたオペレーションエントリの実行されていないものをフラッシュする制御ロジックと、を備え、
前記オペレーションエントリの前記第１グループは、スケジューラに表されるＯｐグループに編成された複数のＯｐエントリを備えており、
前記第１タグストアの各々は、関連するＯｐグループのＯｐエントリが復号する命令グループのためのメモリアドレスをカバーする一対のタグフィールドを含み、
前記一対のタグフィールドは、前記命令グループがキャッシュライン境界と交差するとき、当該キャッシュライン境界のいずれかの側のメモリアドレスをカバーするように構成されている、
ネットワークサーバコンピュータシステム。
【請求項３６】
前記スーパースケーラプロセッサに接続されるハードディスクをさらに備えている、
請求項３５記載のネットワークサーバ。
【請求項３７】
前記スーパースケーラプロセッサに接続されるテープユニットをさらに備えている、
請求項３５記載のネットワークサーバ。
【請求項３８】
前記スーパースケーラプロセッサに接続されるＣＤ−ＲＯＭをさらに備えている、
請求項３５記載のネットワークサーバ。
【請求項３９】
前記スーパースケーラープロセッサに接続されるジュークボックスをさらに備えている、
請求項３５記載のネットワークサーバ。
【請求項４０】
前記スーパースケーラプロセッサに接続されるＲＡＩＤをさらに備えている、
請求項３５に記載のネットワークサーバ。
【請求項４１】
前記スーパースケーラプロセッサに接続されるフラッシュメモリをさらに備えている、
請求項３５記載のネットワークサーバ。
【請求項４２】
前記スーパースケーラプロセッサに接続されるモデムをさらに備えている、
請求項３５記載のネットワークサーバ。
【請求項４３】
メモリサブシステムと、
前記メモリサブシステムに接続される命令キャッシュ及びデータキャッシュと、
前記データキャッシュに接続され、ストアオペレーションの結果を前記メモリサブシステムの目標アドレスに記憶させるストアパイプを備える複数の実行ユニットと、
第１命令アドレスによりメモリ内に表される関連命令により復号されたＯｐｓのための配列された複数のＯｐエントリを含むスケジューラと、
前記目標アドレスと前記第１命令アドレスとの第１符号を検出し、前記ストアパイプ及び前記スケジューラに接続され、前記第１符号を検出すると自己修飾コードフォールトをトリッガする第１符号検出手段と、
前記命令キャッシュと前記スケジューラとの間に接続され、各第２命令アドレスによりメモリ内に表される命令のための複数の命令バッファエントリを有する命令デコーダと、
前記目標アドレスと前記第２命令アドレスとの第２符号を検出し、前記ストアパイプ及び前記スケジューラに接続され、前記第２符号を検出すると自己修正コードフォールトをトリッガする第２符号検出手段と、を備える、
装置。
【発明の詳細な説明】
技術分野
この発明はプロセッサ、特にパイプライン処理装置における自己修飾コード処理装置に関する。
背景技術
ＥＰ−Ａ−０  １５９  ７１２はＣＰＵとメモリシステムを含むコンピューターシステムを開示するが、このＣＰＵはキャッシュメモリを含み、このメモリにおいてＣＰＵはパイプラインプロトコールに基づいて操作される。このコンピュータシステムは、このようなシステムにおいてパイプライン中の競合命令の実施を開始するべくデータフローを制御する制御装置を含む。
ＵＳ−Ａ−５  ４３４  ９８７はバッファストアに依拠する自己修飾コードシーケンス命令の不適正取り出しを防止する方法及び装置に関する。
コンピュータプログラムは生ずる目的コードが逐次的順序によって実行されるという単純化された仮定により典型的には設計され、コード化されそしてコンパイルされている。しかしながら、この仮定にも関わらず、最新プロセッサ設計技術は、機械命令の並行実行の可能性、即ち命令並列法の開発を目指している。コンピュータ処理能力を最大とするために、パイプライン技術を利用して単一機能ユニットまたは実行パスの多重段に命令並行配列をマップすることができる。これとは対照的に、ｏｕｔ−ｏｆ−ｏｒｄｅｒ命令発行、ｏｕｔ−ｏｆ−ｏｒｄｅｒ命令完了、及び命令の投機的実行を含むスーパースケーラ技術では命令並行配列を多重機能ユニットまたは実行パスにマップする。最新プロセッサ設計ではパイプライン技術とスーパースケーラ技術の両者が頻繁に開発されている。
Ｏｕｔ−ｏｆ−ｏｒｄｅｒ命令発行は実行ユニットへの命令の発行を含むが、実行コード内での命令の実際の順序に関してはあまり考慮されていない。ｏｕｔ−ｏｆ−ｏｒｄｅｒ発行を利用するスーパースケーラプロセッサは、命令タスク指名シーケンスの作成において与えられた命令の出力（結果）と後続命令の入力（オペランド）との間の従属性に拘束されることのみが必要である。一方、ｏｕｔ−ｏｆ−ｏｒｄｅｒ完了は、そのプログラムシーケンスに先行する命令の完了前に与えられた命令が完了（例えばその結果の格納）することを可能とする技術である。最後に、投機的実行は予測された結果（例えば、ブランチの）に基づく命令シーケンスの実行を含み、ブランチ状態が実際に評価されのを待つことなくプロセッサが命令を実行することを可能とする。ブランチがそうでない場合よりもより頻繁に正確に予測されるものと仮定し、かつ不適正予測の結果を中止する正当に有効な方法が利用可能であると仮定すると、命令並行配列（即ち、並列実行のために利用可能な命令の数）は投機的実行によって典型的に増加されると考えられる（分析のためジョンソン著、「スーパースケーラ  プロセッサ  デザイン」ニュー  ジャージー州  プレンティスホール  インコーポレイテッド刊、１９９１、ｐｐ．６３−７７参照）。
スーパースケーラ技術は主に命令セット及び他のアーキテクチャ特徴から独立のプロセッサ構造に関係する。即ち、スーパースケーラ技術の魅力の１つは、例えばｘ８６プロセッサアーキテクチャである既存のプロセッサアーキテクチャとの間にコード互換性を有するプロセッサを開発し得る可能性を備えることである。多くのスーパースケーラ技術はＲＩＳＣ又はＣＩＳＣアーキテクチャの何れに対しても同程度に適正に適用する。しかしながら、ＲＩＳＣアーキテクチャの多くのものでの規則性の故に、スーパースケーラ技術はまず最初にＲＩＳＣプロセッサ設計に適用されている。特に、３オペランド・ロード／ストア・アーキテクチャ、固定命令長、限定アドレスモード、及びＲＩＳＣアーキテクチャと命令セットに関係する固定幅レジスタとが多重実行ユニットに仕事を安定的に供給するに必要な多重命令の単一サイクルデコーディングを可能とする。
ｘ８６アーキテクチャとのコード互換性のあるスーパースケーラプロセッサを開発する１つの方法は、ｘ８６命令をＲＩＳＣ命令またはオペレーションに動的に変換することであり、変換された命令またはオペレーションはＲＩＳＣコアまたは実行エンジンによって実行され得る。そのようなスーパースケーラＲＩＳＣプロセッサの設計技術はジョンソン著の「スーパースケーラ  プロセッサ  デザイン」中に記述されている。
逐次的順序外での命令の実行、即ち逐次的順序外での命令の発行と完了は、スーパースケーラプロセッサでの多重実行ユニットの並列作動の維持を可能とすることによってスーパースケーラプロセッサの性能を向上し、これにより処理能力を改善することができる。従って、スーパースケーラプロセッサ用のスケジューラは順序外（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）に実行可能な命令を決定し、これらの命令を適当な実行ユニットに提供し即ちタスク指名することによって全体的な性能を改善することができる。スーパースケーラプロセッサ用のスケジューラはまた中断及びトラップを処理しなければならない。ｘ８６プロセッサアーキテクチャを含む多くのプロセッサアーキテクチャでは、命令がエラー、中断またはトラップを発生した直前または直後にアーキテクチャ状態が確認されることが必要である。これは逐次的順序外に命令が実行された場合の困難を表している。即ち、スケジューラはあたかも命令が逐次的順序に実行されたかのように命令を取り消し、かつシステム状態を復元することができなけれならない。
自己修飾コードはより一層の複雑さを表している。ｘ８６プロセッサアーキテクチャに適合するものを含むあるアーキテクチャの場合においては、実行プログラムの一部が同一プログラムの他の部分を修飾する。そして修飾された命令シーケンス部分が実行される。
ｘ８６プログラムアーキテクチャを含む、プログラム自身での修飾を可能とするある種類のＣＩＳＣアーキテクチャのためには、既存ソフトウェア資産の適切な部分内にこの型の課題プログラム作成用例が確立している。その結果、互換性維持のため新規プロセッサの具体化においてはしばしばアーキテクチャの命令セットの直接的セマンティクスの実現のみが必要なのではなく、予測される２次的セマンティク作動を維持することもまた必要である。高性能パイプラインスーパースケーラの具体化の場合には、このことが重要でかつ潜在的に困難な充足要件となりうる。
命令ストリーム内への格納が完了された後にメモリサブシステムから命令が取り出される限りにおいて問題は存在しない。しかしながら、パイプラインスーパースケーラプロセッサの各種パイプライン段または機能ユニット内に命令の非修飾表現が存在する場合には一貫性の問題が存在する。一貫性の維持は従来のデータ／命令キャッシュ一貫性のみならずメモリ格納命令の後すぐに実行される他の命令を修飾するメモリ格納命令に関する一貫性をも包含する。
この一貫性の問題は、メモリ書き込みが関係するキャッシュエントリの何れかの状態及び／又は内容に適当に反映するに違いない高性能プロセッサに使用されるより慣用的なデータ／命令キャッシュ構造において遭遇するものと類似する。しかしながら、自己修飾コードの問題の範囲はより一層厳しい。極端なストア・イントゥ・インストラクション・ストリームの場合、修飾命令には直ちにブランチ及びその後の修飾目標命令が続く。特に高度のパイプライン化のためには、アーキテクチャ標準プロセッサ（ｘ８６プロセッサのような）の構成と同一の実行パスを保証する高性能プロセッサ設計は追加的ハードウェア回路及び設計の複雑性の見地から困難で高価であることを検証できる。
パイプライン化、特にＣＩＳＣアーキテクチャの高性能実現に共通な密度の濃いパイプライン化は大きな命令処理待ち時間を結果し、かつ連続命令処理間の高率な重複を結果する。一方メモリ書き込みの実行はそのようなパイプラインの中において遅れて行われる。結果として、メモリまたはキャッシュから命令を取り出しかつ実行パイプラインに命令を投機的にタスク指名するような動作は、実行シーケンス内にて取り出された又はタスク指名された命令に先行するメモリ書き込みの完了前に容易に生起し得る。
発明の開示
プロセッサのパイプライン段を通って進む命令のメモリアドレスを示すタグを含み、かつ記憶目標アドレスバッファを有する命令デコーダを含むプロセッサは、自己修飾コード支援ロジックが命令ストリーム内へのストアオペレーション書き込みを検知し、かつ自己修飾コードフォールト（ｆａｕｌｔ）をトリッガすることを可能とする。
この発明の一実施例においては、命令取り出しから結果コミットメントまでの段のオペレーションを表すオペレーションエントリを有し、かつメモリ内の目標アドレスに記憶オペランドを完遂するためのストアパイプを有するコンピュータ用の自己修飾コード処理装置は第１のタグストア、第１の比較ロジック、及び制御ロジックを含む。第１のタグストアは各々オペレーションエントリの第１のグループと関係し、関連するオペレーションエントリに符合する命令のメモリ内の第１のアドレスを表現する。第１の比較ロジックは第１のタグストア及びストアパイプに接続する。第１の比較ロジックはストアパイプによって完遂されるストアオペレーション用の目標アドレスと第１のタグストアに表された第１のアドレスの何れかとの間の整合に応答して自己修飾コード表示を供給する。制御ロジックは第１の比較ロジック及びオペレーションエントリに接続される。制御ロジックは自己修飾コード表示に応答してオペレーションエントリの完遂されていないものをフラッシュする。
この発明の他の実施例において、装置はメモリサブシステム、メモリサブシステムに接続した命令及びデータキャッシュ、実行ユニット、スケジューラ、第１及び第２の比較ロジック、及び命令デコーダを含む。実行ユニットの１つはＳｔＯｐの結果をメモリサブシステムに完遂するためのデータキャッシュに接続されたストアパイプを含む。ストアパイプはＳｔＯｐの結果のコミットメントの際にＳｔＯｐ目標アドレス表示を供給する。スケジューラは命令から解読されたＯｐｓのための指定されたＯｐエントリを含みかつその命令のためのメモリアドレスを対象とする符合した第１のアドレスタグを含む。第１の比較ロジックは、ＳｔＯｐ目標アドレスと第１のアドレスタグの間の整合に応答して自己修飾コードフォールト処理手段がトリッガされるようにストアパイプに接続されかつ第１のアドレスタグに接続される。命令デコーダは命令キャッシュとスケジューラの間に接続される。命令デコーダは命令緩衝域エントリ及び命令緩衝域エントリに関連した第２のアドレスタグを含む。第２の比較ロジックは、ＳｔＯｐ目標アドレスと第２のアドレスタグの間の整合に応答して自己修飾コードフォールト処理手段がトリッガされるようにストアパイプに接続されかつ第２のアドレスタグに接続される。
【図面の簡単な説明】
この発明は添付図面を参照することによって当業者においてよりよく理解され種々の目的、特徴及び利点が明白となる。
図１はこの発明の一実施例に従いｏｕｔ−ｏｆ−ｏｒｄｅｒ実行制御を提供するスーパースケーラコンピュータプロセッサのブロック線図である。
図２はこの発明の実施例に従って製作されたスケジューラのブロック線図である。
図３はこの発明の実施例に従う命令実行のアーキテクチャ段を図解するパイプライン段線図である。
図４はこの発明の実施例に従うｏｕｔ−ｏｆ−ｏｒｄｅｒロード及びストア実行制御部のブロック線図である。
図５はこの発明の実施例に従うｏｕｔ−ｏｆ−ｏｒｄｅｒロード／ストア実行制御を提供するプロセッサと結合するコンピュータシステムのブロック線図である。異なる図面中での同一の参照符号の使用は同一又は類似の項目であることを示す。
発明実施のための態様
図１はこの発明のスーパースケーラプロセッサ実施例を示す。スーパースケーラプロセッサ１００は限定命令セット計算（ＲＩＳＣ）アーキテクチャを実施する実行エンジン１５０、命令デコーダ１４０、キャッシュ、及びメモリサブシステム１２２に表現されるアドレス空間へのアクセス及びローカルバス（図示しない）上のデバイスへのアクセスを提供するシステムインターフェース１２０を含む。
スーパースケーラプロセッサ１００は、ここに記載の実施例においては別個のデータ及び命令部として構成されたキャッシュを含む。データキャッシュ１７０及び命令キャッシュ１３０は、主メモリを含みかつオプションとして例証的にはＬ２キャッシュである追加的レベルのキャッシュを含むメモリサブシステム１２２に表されるアドレス空間に（キャッシュ制御ロジック１６０を介してかつシステムインターフェース１２０によって）接続される。Ｌ２レベルキャッシュへのアクセス、即ちＬ２キャッシュ制御ロジック及びＬ２データ部（図示しない）へのアクセスはシステムインターフェース１２０を介して提供される。代替的には、Ｌ２キャッシュ制御ロジックは（Ｌ１のための）キャッシュ制御ロジック１６０とシステムインターフェース１２０の間に介装することができる。
キャッシュシステム設計は当業界において周知である。特に、分割、ハーバードアーキテクチャ命令及びデータキャッシュ（符号１７０及び１３０のような）、並びに多重レベルキャッシュ階層構造を実現する適当な設計がキャッシュ技術分野において周知である。多くの点において、スーパースケーラプロセッサ１００のキャッシュサブシステム（即ちデータキャッシュ１７０、命令キャッシュ１３０、キャッシュ制御ロジック１６０、及びオプションであるＬ２キャッシュ）はそのような適当な設計の何れかである。しかしながら、そのキャッシュ性能からは別個の理由により命令キャッシュ１３０はプレデコードロジック（図示しない）と一体にされている。そのように一体化されたプレデコードロジックは取り出された命令ストリーム内のｘ８６命令境界を識別し、命令デコーダ１４０による命令の迅速なデコーディングを促進する。
図１を再び参照するに、命令シーケンスは実行エンジン１５０により予想される実行のためにメモリサブシステムから命令キャッシュ１３０へとロードされる。図１に示されるプロセッサ１００の実施例に従い、命令キャッシュ１３０内の命令はｘ８６プロセッサアーキテクチャに適合するプロセッサによって実施されるｘ８６命令のような複合命令セットから選択されたＣＩＳＣ命令である。命令デコーダ１４０は命令キャッシュ１３０から受け取ったＣＩＳＣ命令を実行エンジン１５０での実行のためのオペレーションへと変換する。図１の実施例において、これらのオペレーションはＲＩＳＣ類似オペレーション（以下「ＯＰｓ」と言う）であり、命令キャッシュ１３０からの単一ｘ８６命令は実行エンジン１５０のための１以上のＯＰｓに復号する。個々のＯＰｓはレジスタオペレーション（ＲｅｇＯｐｓ）、ロード−ストアオペレーション（ＬｄＳｔＯｐｓ）、ロード即値オペレーション（ＬＩＭＭＯｐｓ）、特殊オペレーション（ＳｐｅｃＯｐｓ）、及び浮動小数点オペレーション（ＦｐＯｐｓ）を含む数種の型のグループの１つの分かれる。代替的実施例では異なる命令セットを解読して実行のために異なるオペレーション形式を供給してもよい。
命令デコーダ１４０はブランチ予測ロジック１４３と共にハードウェア変換部ＭａｃＤｅｃ１４１及びＲＯＭベース変換部１４２である２個の命令変換部を含む。最も共通的なｘ８６命令はハードウェア変換部１４１内に含まれる多重並列ハードウェアデコーダを使用する１乃至４のＯＰｓの短いシーケンスに変換される。ハードウェア変換部１４１は命令キャッシュ１３０から受け取ったこれらの共通的なｘ８６命令を短いシーケンスに解読しこれは次にスケジューラ１８０に供給される。あまり共通的でないｘ８６命令及び４ＯＰｓよりも長いＯＰシーケンスに変換するこれらのｘ８６命令は変換されるべき特定ｘ８６命令に符合したＯＰｓの変換シーケンスを（ＲＯＭから）取り出すＲＯＭベース変換部１４２によって変換される。何れかのソースからの変換されたＯＰシーケンスは、ハードウェアデコーダによって生成されたかＲＯＭから取り出されたかに係わりなく、実行エンジン１５０による実行のためにスケジューラ１８０に供給される。
図１を再度参照するに、実行エンジン１５０はスケジューラ１８０、レジスタファイル１９０及びスケジューラ１８０によってディスパッチされたＯＰｓを受取り実行する多重実行ユニットを含む。代替的実施例においては実行ユニットのセットに追加しまたはこれから差し引くことが可能であるが、図１の実施例においては実行エンジン１５０はロードユニット１５２、ストアユニット１５３、レジスタユニット１５４及び１５５、浮動小数点ユニット１５６、マルチメディアユニット１５７、並びにブランチユニット１５８である７つの実行ユニットを含む。例示的実施例においては、浮動小数点ユニット１５６とマルチメディアユニット１５７を省略する。実行エンジン１５０はまたストアユニット１５３とデータキャッシュ１７０の間に介装されるストアキュー１５９を含む。
スケジューラ１８０は記憶エントリとこれに接続するロジックブロックの指定されたアレイとして構成され、この記憶エントリとロジックブロックは協働してＯｐｓの実行ユニットへのｏｕｔ−ｏｆ−ｏｒｄｅｒディスパッチのため且つＯｐ結果の１以上の実行ユニットへの転送のための支援を提供する。記憶エントリとロジックブロックの指定されたアレイはまた再命令バッファを実施し、レジスタファイル１９０内に形成されたアーキテクチャレジスタの再命名を提供し、投機的実行の回復を提供する。命令デコーダ１４０はスケジューラ１８０に命令ストリームから解読された新規のＯｐｓを供給する。次に、スケジューラ１８０は受け取った新規の各Ｏｐに関連したデータを（記憶エントリ内に）格納し保持する。このようにして、Ｏｐが実行ユニットに発行されかつ実行ユニットによって実行されるに伴いスケジューラ１８０が各Ｏｐの状態とその関連するデータを追跡調査する。与えられたＯｐが完全に実行されかつデータ従属性が明瞭になった後に、それは退避（ｒｅｔｉｒｅ）されそして符合するスケジューラエントリは解除される。
スケジューラ１８０はバス１８９として一括して示される一群のバス及び制御線を介して実行ユニット（即ち、ロードユニット１５２、ストアユニット１５３、レジスタユニット１５４及び１５５、浮動小数点ユニット１５６、マルチメディアユニット１５７並びにブランチユニット１５８）に接続される。スケジューラ１８０は実行ユニットＯｐｓ、レジスタオペランド及び制御信号を供給し、例証的にはバス１８９を介して実行ユニットから戻される結果値及び状態表示を受け取る。もちろん、全てのバスと制御線とは完全に接合している必要はなく、バス１８９は実行ユニットに対するスケジューラ１８０の双方向接続の単なる例示である。
ロードユニット１５２とストアユニット１５３は、それぞれアドレス可能なメモリからのロードしたデータとアドレス可能なメモリへの格納したデータであるＬｄＳｔＯｐｓ（即ちＬｄＯｐｓとＳｔＯｐｓ）を実行する。特定のメモリアドレスのキャッシュ状態に依拠して、ＬｄＳｔＯｐはＬ１データキャッシュ１７０、Ｌ２キャッシュ（図示しない）、主メモリ（図示しない）のいずれかにおいて完了する。ストアキュー１５９はストアユニット１５３からのデータを一時的に格納しストアユニット１５３とロードユニット１５２とはデータキャッシュ１７０へのアクセス競合無しに並行して演算することができる。レジスタユニット１５４と１５５はＲｅｇＯｐｓを実行しこのＲｅｇＯｐｓはレジスタファイル１９０のアーキテクチャレジスタに関連したデータに基づいて演算する。
スケジューラの概観
図２は２４個のエントリ（列として示す）を有するスケジューラ１８０の例示的実施例であって、各エントリが継続中のＯｐと関連している例示的実施例を示す。各エントリは継続中のＯｐに関連する静的及び動的データを表すためのスケジューラレザバ２４０として一括して示される一連のフィールドを含む。付け加えるに、スケジューラ１８０は継続中のＯｐｓに関連したデータを受け取るためにスケジュールレザバ２４０のエントリに接続された制御ロジック２３０として一括して示される一連の特殊ロジックブロックを提供する。制御ロジック２３０の特殊ロジックブロック（桁２３１、２３２、２３３、２３５及び２３６として示す）はＯｐ実行並びに実行ユニットへのオペランドの供給と実行ユニットからの結果の分配の順序付けを制御する信号を供給する。制御ロジック２３０は発行選択ロジック２３１、オペランド選択ロジック２３２、ロード・ストア命令ロジック２３４、状態フラグ処理ロジック２３５、及び自己修飾コード支援ロジック５３５を含む。
発行選択ロジック２３１は各サイクルの間有効な実効ユニットへの発行のためスケジュールレザバ２４０からのＯｐｓの選択を制御する。オペランド選択ロジック２３２は実行ユニットに対して発行されたＯｐｓに必要とされるオペランドデータのための適当なソースを識別する。データ従属性と実行エンジン１５０内のＯｐｓの順序付けに依拠して適当なソースはレジスタファイル１９０であり、他の継続中のＯｐエントリ（スケジューラエントリのための行先値フィールドは２５０として一括して示される）に関連する行先値フィールドまたは結果バス（結果バス２７２として一括して示される）の１つに供給される完了Ｏｐの結果がある。発行選択ロジック２３１とオペランド選択ロジック２３２によって供給される制御信号はスケジューラ１８０がスケジュールレザバ２４０より有効実行ユニットへＯｐｓを発行しかつ発行された各Ｏｐのための適当なオペランドソースを選択するのを可能とする。
スケジューラ１８０はＯｐｓ  ｏｕｔ−ｏｆ−ｏｒｄｅｒを発行し、実行ユニット（例えば、ロードユニット１５２、ストアユニット１５３、レジスタユニットＸ１５４、レジスタユニットＹ１５５、及びブランチユニット１５８）はＯｐｓ  ｏｕｔ−ｏｆ−ｏｒｄｅｒを実行するが、あるＯｐの対は相互に対して順序通りに完了されなければならない。例えば、同一の実メモリ位置から読まれかつ同一のメモリに書き込まれるＬｄＯｐｓとＳｔＯｐｓは順序通りにメモリにアクセスしなければならない。ロード・ストア命令ロジック２３４はＬｄＯｐｓとＳｔＯｐｓの間のそのような実行順序を維持する。
自己修飾コード支援ロジック２３６に関しては、下記により詳細に説明するが、この自己修飾コード支援ロジック２３６は、ストアキュー１５９及び実アドレスタグフィールド２４３からの表示に応答して自己修飾コードフォールトをトリッガする。ストアキュー１５９は、ストアキュー１５９が完遂を準備するStOpsのための目標リニアアドレス及び実アドレスの数ビットを提供する。自己修飾コード支援ロジック２３６は、これらのアドレスビットを各Opクワッドのための実アドレスタグフィールド２４３として格納された命令アドレス（命令が異なるページからの場合には複数のアドレス）と比較する。いずれかのクワッドが整合すると、常に取り出され、現にオペレーションとして（復号して）存在する命令に対する書き込みとなる。従って、自己修飾コード支援ロジック２３６は、スケジューラ１８０をフラッシュするために包括的制御ロジック２６０に信号を送り、最終完遂命令に続く命令（すなわち、命令ストリームを修飾する命令に続く命令）からフェッチ／デコードプロセスが再始動する。スケジューラ１８０は、自己修飾コードの検知をトラップ又はフォールト（ｆａｕｌｔ）として処理する（すなわち、トラップペンディング内の要素に入れる）。
スケジューラ１８０は、各スケジューラエントリに関連した行先値フィールドを含む。これらの行先値フィールドは２５０として一括的に示されている。オペランド選択ロジック２３２との関係に於いて、行先値フィールド２５０は、リオーダバッファと暗黙レジスタの再命名を実施する。レジスタファイル１９０のアーキテクチュアレジスタに関連するオペランド値は、行先値フィールド２５０内に表され、典型的には、オペランドバス２７１を介してレジスタオペランド値として実行ユニットに供給される。しかしながら、行先値フィールド２５０のいずれもより現時点に近いレジスタ状態を表していない場合（すなわち、未だ完遂されていないレジスタ状態）には、これに代えてオペランド値をレジスタファイル１９０から供給する事ができる。完了したＯｐｓの結果は結果バス２７２を介して完了したＯｐに関連するスケジューラエントリの行先値フィールドに供給される。付け加えるに、これらの結果は、また継続中のOpsのためのオペランドとして実行ユニットに供給することができる。結果は、結果バス２７２を介して転送される。
スケジュールレザバエントリ（例証的にはスケジュールレザバエントリ２４０．１）のフィールドは、実行を待っているか、実行される過程にあるか、または完了されたか、であるオペレーション（Ｏp）に関する情報を含んでいる。スケジュールレザバエントリのフィールドの大部分は、命令デコーダ１３０が新規のOpをスケジュールレザバ２４０にロードしたときに初期化される。しかしながら、他のフィールドは、後にロードされ又は更新される。例えば、状態フィールド（各エントリに対してフィールド２４２として示される）は符合するOpが実行パイプラインの段を通って進むのに伴って更新される。Opがスケジュールレザバ２４０内にロードされる時からスケジューラ１８０から退避される時までの値を保持する記憶フィールドは「静的フィールド」として言及される。新規の値によって更新されることのできるフィールドは「動的フィールド」として言及される。静的フィールドデータ及び動的フィールドの初期データ値は命令デコーダ１４０によって供給される。
各スケジュールレザバエントリ（図２中タイプフィールド２４１として示される）の３ビットフィールド、タイプ〔２：０〕は、スケジュールレザバエントリに関連したOpのタイプを特定する。Opのタイプは発行選択目的のために特に重要である（例えば、LｄOpsは１５０の様なロードユニットに発行しなければならない）；しかしながら、ロード／ストア命令制御はまたタイプフィールド２４１も利用する。下記の信号は、タイプフィールド２４１から解読したものである：
0003720370.tif 000002
各スケジュールレザバエントリ（図中タイプフィールド２４２として示されている）の４ビットフィールド、状態［３：０］はＯｐ（Ｓ３，Ｓ２，Ｓ１及びＳ０は状態［３：０］の交番信号名である）の現実行状態を示す。タイプフィールド２４２の５つの可能状態は以下の様なシフトフィールドによって符号化される：
００００  Ｕｎｉｓｓｕｅｄ
０００１  Ｓｔａｇｅ  ０
００１１  Ｓｔａｇｅ  １
０１１１  Ｓｔａｇｅ  ２
１１１１  Ｃｏｍｐｌｅｔｅｄ
即時の状態は、タイプフィールドが現れるエントリに符合したＯｐのための現実行段に符合する。ビットは、Ｏｐが段の外で支障なく発行され進むのに伴って更新される（実際的には左シフトによって）。状態［３：０］はまた中止サイクルの間に１１１１に設定される。
スケジューラＯｐクワッド構成
スケジューラ１８０はスケジューラレザバ２４０内の２４個のエントリと、ＦＩＦＯとして扱われる行先値フィールド２５０を含む。新規のｏｐｓに符号するデータは、最上部にロードされ実行の進行に伴って最下位に向かってシフトされ、スケジューラレザバ２４０の最下位から退避される。制御の単純化のためにスケジューラ１８０は、スケジュールレザバ２４０と行先値フィールド２５０をＯｐクワッドに基づいて処理する。Ｏｐｓは、４つのグループにてスケジュールレザバ２４０にロードされ、スケジュールレザバ２４０を通してシフトされ、且つスケジュールレザバ２４０から退避される。このようにして、スケジューラの細分性が命令デコーダ１４０のエンコードＲＯＭ１４２およびＮａｃＤｅｃ１４１の両者のデコード帯域幅に適合する。スケジューラ１８０は、したがって深さ６幅４のＦＩＦＯ内の６個のＯｐクワッドエントリとして２４個のＯｐエントリを処理する。
結果的にスケジュールレザバ２４０は、Ｏｐクワッドを含む６エントリシフトレジスタとして観察することができる。各Ｏｐクワッドは、４個のＯｐエントリを含み全体としてＯｐクワッドとして関連する追加的フィールドを加えたものである。これらのＯｐクワッドフィールド、例えば実アドレスタグフィールド２４３は、命令デコーダ１４０によって供給される。
実アドレスタグフィールド２４３は、Ｓｍｃ１ｓｔＡｄｄｒ，Ｓｍｃ１ｓｔＰｔ，Ｓｍｃ２ｎｄＡｄｄｒ及びＳｍｃ２ｎｄＰｇフィールドを含む。Ｏｐクワッド有効フィールドと、ＯｐＱＶと共にこれらの実アドレスタグフィールド２４３．１と自己修飾コード支援ロジックコード２３６．１は、スケジューラ１８０のＯｐクワッドに符合する。Ｓｍｃ１ｓｔＡｄｄｒとＳｍｃ１ｓｔＰｇは、それから関連するＯｐクワッドのＯｐ（Ｏｐｓ）が解読されるＣＩＳＣ命令のための第１実メモリアドレスの部分を表わす。例示的な実施例において、実アドレスタグフィールド２４３のＳｍｃ１ｓｔＰｇとＳｍｃ１ｓｔＡｄｄｒとはＯｐクワッドの第１のＯｐに関連するＣＩＳＣ命令のための実メモリアドレスのビット１９：１２及び１１：５を（各々）符号化する。ＯｐクワッドのＯｐｓのＣＩＳＣ命令先駆は、キャッシュライン境界と交差するので第２の実メモリアドレスにおいてはＯｐクワッドをその関連するＣＩＳＣ命令のアドレスによって完全にタグされる必要がある。そのような場合、Smc2ndAddr及びSmc２ndPgは、それから関連するOpクワッドのOp（又はOps）が解読されたCISC命令のための第２実のメモリアドレスの部分を表す。例示的な実施例に於いては実アドレスタグフィールド２４３のSmc2ndPgとSmc2ndAddrは、Opクワッドの後続Op（またはOps）に関連する交差キャッシュラインCISC命令のための実メモリアドレスのビット１９：１２及び１１：５（各々）を符号化する。命令デコーダ１４０は、スケジュールレザバ２４０に実アドレスタグフィールド２４３のSmc1stAddr及びSmc1stPg（更に、Opクワッドに表される１つの実メモリページ以上のものからCISC命令がある場合には、Smc2ndAddr及びSmc2ndPg）を供給する。
オペレーション（Op）時限及び実行段
スケジューラレザバ２４０の各エントリは、未定のOpsを記述するフィールドを含む。これらのフィールドは、命令デコーダ１４０によって取り出され又は解読されたOpsから生来的に得られた静的状態情報及びOp実行から結果し、又は、与えられたOpの実行パイプライン状態を特徴づける動的状態情報を格納する。
プロセッサ制御の概観からスケジューラ１８０は、関連する制御ロジック２３０を備えたOp状態情報（スケジュールレザバ２４０）の命令順序指定アレイであって制御ロジック２３０は、アレイから各実行ユニットへの発行Ops、パイプライン段のシーケンスを介する制御Op実行及び最終的にはスケジューラからの退避Opsに対し、制御信号を発生する。図２に示すように、制御ロジック２３０は、制御ロジックの５つの特殊ブロック（発行選択ロジック２３１、オペランド選択ロジック２３２、ロード・ストア命令ロジック２３４、状態フラグ処理ロジック２３５及び自己修飾コード支援ロジック２３６）を含み、その各々は、スケジューラレザバ２４０の符合するエントリから情報を受け取る部分（ロード・ストア命令ロジック２３４の例証的部分２３４．３）を有する。制御ロジックブロックは、実行ユニットに制御信号を供給する。例えば、ロード・ストア命令ロジック２３４は、２７３として一括して表される制御線を介してロードユニット１５２とストアユニット１５３に制御信号を供給する。
スケジュールレザバ２４０の制御ロジックブロックによって供給される特定制御信号はOpエントリ内のフィールドの状態に依存する。詳細には、ステート〔３：０〕フィールドは、関連オペレーションの実行の進行を表わす。ロジックの概観からスケジューラ内の全ての状態順序付けは性質上単一サイクルである。状態遷移決定はそのサイクルの間の機械状態に基づいて各サイクルごとに行われる。スケジューラ１８０の構成はOp実行のパイプライン特性を反映する。スケジューラ１８０（及び符合する各エントリ）は、その各々がオペレーション又は実行パイプラインの与えられたタイプの特定進行段に直接関連する多数の別個の、より正確には独立のロジック部に分割することができる。
実行エンジン１５０のパイプラインステージンクすなわち段配置構成がここで図３を参照して記述される。Opが一旦実行エンジン１５０内にロードされると、そのOpは、３又は４段パイプラインを通り符号的にそのOpに関連するスケジューラエントリ内のフィールドステート〔３：０〕によって表される４又は５状態の間の遷移を通る。命令取り出し及び解読は実行エンジン１５０の前に遂行される。従って、第１のスケジューラに関連するパイプライン段は発行段である。図３は、RegOps及びLdStObsのためのパイプラインステージングを示す。
スケジューラ１８０は、発行段及びオペランド取り出し段３３０及び３４０の間実行パイプライン上に基本的な制御を加える。発行段３３０内及びオペランド取り出し段３４０内の処理は段ごとに２個の相に分割することができ、各相は、公式的には半クロックサイクルを占める。発行段３３０は、発行選択相とブロードキャスト相を含み、一方オペランド取り出し段３４０は、オペランド選択相とオペランド送り相を含む。
発行段
発行段３３０の発行選択相３３０．１の間に於いて、スケジューラ１８０は、ロードユニット１５２、ストアユニット１５３，レジスタユニットX１５４、及びレジスタユニットY１５５に関連したパイプラインに入れるための次のOpsを選択する（４つのOp選択が一時に生起する）。発行段３３０のブロードキャスト相３３０．２の間に於いて、各選択されたOpのためのレジスタオペランドの各々に関する情報が全てのスケジューラエントリ及び外部ロジック（レジスタファイル１９０及び実行ユニットを含む）に同報的に送られる。このようにして、ブロードキャスト相３３０．２は、スケジューラ１８０の行先値フィールド２５０の１つ又はレジスタフアイル１９０に存在するオペランド値又は結果バス２７２に生成する結果に符合するオペランド値を実行ユニット（例えばロードユニット１５２、ストアユニット１５３又はレジスタユニット１５４と１５５）の１つに位置づけるように設定する。
オペランド取り出し段
オペランド取り出し段３４０のオペランド選択相３４０．１の間に於いてスケジューラ１８０は、８までのオペランド値（４Ops＊２オペランド／Op）を位置づけ、そして各オペランド値の状態、すなわち指定されたソースからの有効値が実際に利用可能であるかどうかを決定する。この情報に基づいてスケジューラ１８０は、オペランド取り出し段０（段３４０）のどのOpsがオペランド送り相に続いて例えば段１（段３５０）であるそれらの各々の実行パイプ内に進むかを決定する。進めることの決定は、各Opのために独立して行われ、オペレーションが実際に実行される順序がオペランド従属性によって拘束されることのみが必要である。そのようなデータ従属性が無い場合には異なる実行ユニットに発行するOpsは一般的に他の実行ユニットに割り当てられたこれらのOpsに関する任意の順序にてそれらの各々のパイプラインを通って処理される。この一般的ルールに対する１つの例外はロード及びストアの個別的指定（すなわちLdOpsとStOps）を含みこれは以下に詳細に説明される。
LdStOp実行段
第１の２個のスケジューラ関連段であるオペランド発行段３３０とオペランド取り出し段３４０は、RegOps及びLdStOpsに共通である。後続段は、実行段である。RegOpsは、全てのRegOpsが単一サイクルにて実行するので単一実行段３５０で更に、一旦RegOpが実行段に入るとそれは常に支障なく完了し、そのクロックサイクルの終わりに於いて段３５０を出る。一方LdStOpsは、２個の実行段３５２及び３６０をこの間に於いてアドレス計算、区分及びページ変換（及び記憶保護チェック）並びに（LdOpsの場合に）データキャッシュアクセスの全てが行われる。RegOpsとは異なり、LdStOpsは、任意の長さの時間に亘って段３６０又は３７０のいずれかに持続せしめることができる。この持続の大部分は、第２の段３７０に於いてである。最も共通的には段３７０の持続は、データキャッシュ１７０の失敗、データTLB１７１の欠落及びページフォールトから結果する。段３６０での持続は、メモリ引用の非整合から結果しまた完了へと進まないLdStOpによって占拠されブロックされた段３７０から結果する。
オペランド取り出し段３４０のオペランド送り相３４０．２の間において、スケジューラ１８０は指定されたソースからのオペランド値を図２においてバス２７１と２７２として一括して示されるオペランドバス及び／または結果バスを介してロードユニット１５２、ストアユニット１５３、レジスタユニットＸ１５４及びレジスタユニットＹ１５５のような実行ユニットへ転送する。例示的実施例は９個のオペランドバス２７１を含みそのうち８個は段０でのオペレーションのためのオペランド値を提供する。例示的実施例においてはまた、値が有効であるか否かに関わりなくオペランド転送が生じ、これによって制御ロジックが単純化される。オペランド値が無効の場合には、スケジューラ１８０が関連するオペレーションを段１へ進めないのでこれは各実行ユニットによって無視される。ＲｅｇＯｐｓのための即値は上述のレジスタオペランドを送る機構の一部として処理される。そのような場合、即値はそのＯｐに関連したスケジューラ１８０エントリの行先値フィールド２５０の特定の１つから直接送られる。
オペランド送り相３４０．２の間において変位値もまた変位バス１８９．４を介してロードユニット１５２とストアユニット１５３（各ユニットに独立値）に転送される。これらの変位値は３２ビット値であり常にスケジューラ１８０のエントリから来る。ソースエントリの選択はオペランド選択相３４０．１の間に生起する。ＬｄＯｐまたはＳｔＯｐが段１に入った場合にはロードユニット１５２とストアユニット１５３が関連する変位値及びオペランド値をラッチする。
スケジューラ１８０はアドレスオペランドと変位を提供するために（上述したように）４相制御機構を実施するが、ＳｔＯｐｓはアドレスオペランド及び変位値に加えるにストアデータオペランドを必要とする。スケジューラ１８０はＳｔＯｐのためのストアデータを得るために４相プロセスを遂行する。ＳｔＯｐデータを取得するプロセスは上述したものと類似するが、そのストアデータは実行段２（３７０）の間に得られる。ストアデータを提供するプロセスはＳｔＯｐの段１及び２に同期され、実行段１においてＳｔＯｐを識別する選択相３９０．１、データオペランドのソースを記述する情報を伝送するブロードキャスト相３９０．２、データオペランド選択相３９０．３及びデータオペランド送り相３９０．４を含む。ストアデータはＳｔＯｐ実行により並列に取り出され、実際のデータ値はＳｔＯｐ処理の完了の際に取得されストアキュー１５９に提供される。有効ストアデータ値が利用できない場合にはＳｔＯｐが段２に持続される。
Ｏｐ完了段
例示的実施例においてＲｅｇＯｐｓ及びＬｄＯｐｓはスケジューラ１８０の行先値フィールド２５０の１つへの結果の格納によって完了する。行先値フィールド２５０の各々はＯｐエントリと関連し、終局的にＯＣＵ２６５によってレジスタファイル１９０に完遂される値のための一時的記憶装置（リオーダバッファ）として利用される。ＳｔＯｐｓのためのメモリへの完遂前での符合する一時的記憶装置はストアキュー１５９である。ストアキュー１５９は第１の完遂段においてＯＣＵ２６５がメモリ書き込みを第２の完遂段に放出するまでＳｔＯｐに関連したメモリ書き込みを緩衝する。
Ｏｐコミットメント及びリタイアメント
完了Ｏｐｓに関連するレジスタ、フラッグ及びメモリ状態の変化はＯＣＵ（オペレーション完遂ユニット）２６５によって完遂（または恒久化）される。次にＯＣＵ２６５はスケジューラ１８０から符合するＯｐエントリを退避する。Ｏｐの実行から数種のタイプの状態変化が結果し得る。状態変化の基本的なタイプは打ち切ることができ、全体的レジスタ変化、状態フラッグ変化及びメモリ書き込みを含む。全体的レジスタ変化は全てのＲｅｇＯｐｓ、ＬｄＯｐｓ、ＬＩＭＭ  Ｏｐ、ＬＤＫｘｘオペレーション及びＳＴＵＰＤ  ＳｔＯｐｓから結果する。状態フラッグ変化は「．ｃｃ」ＲｅｇＯｐｓから結果し、メモリ書き込みはＳＴｘｘｘ  ＳｔＯｐｓから結果する。スケジューラ１８０とストアキュー１５９はスケジューラ１８０の行先値フィールド２５０とスケジュールレザバ２４０内の状態結果及び一時的記憶レジスタの全般的技術を介して且つストアキュー１５９内にメモリ書き込みデータを格納することによって打ち切ることが可能な状態変化を支援する。一時的（または投機的）レジスタ値、状態値、及びメモリ書き込み値は関連するＯｐｓがＯＣＵ２６５によって完遂され且つ退避されるまで保持される。スケジューラ１８０は必要なようにレジスタ値、状態値、及びスケジュールレザバ２４０とストアキュー１５９内に存在するメモリ書き込み値を、投機的に、従属するＯｐｓに供給する。しかしながら、レジスタファイル１９０及びメモリアドレス空間に対する恒久的状態変化（データキャッシュ１７０、命令キャッシュ１３０、Ｌ２、及び主メモリの間に分配される）はＯｐコミットメントの間に行われる。
各サイクルの間、ＯＣＵ２６５は最下位Ｏｐクワッドエントリ内のＯｐエントリの各々を検査し、可能な限り多数のこれらのオペレーションの結果の完遂を試みる。Ｏｐクワッドの４個のＯｐｓに関連した状態変化は１サイクルにてまたは数サイクルに亘って完遂される。Ｏｐクワッドの全てのＯｐｓが完遂されまたは支障なく完遂されつつある場合には、そのＯｐクワッドは現サイクルの終わりにおいてスケジューラ１８０から退避される。そうでない場合には、可能な限り多くの状態変化が完遂され、この過程は連続サイクルの間全ての状態変化が完遂されるまで繰り返される。
レジスタ結果、状態結果、及びメモリ書き込みのコミットメントは独立して遂行される。多重結果（例えば、レジスタ結果と状態結果の両者を伴うＲｅｇＯｐ、またはレジスタ結果とメモリ書き込みの両者を伴うＳＴＵＰＤオペレーション）を有するＯｐｓのために、多種の結果が同時的に完遂されることは必要ではない。しかし、状態変化の１つのタイプのコミットメントは他のものから独立である。Ｏｐの全体的なコミットメントは最後の結果が完遂された時に生ずる。一般的には、Ｏｐの結果は下記の場合において初めて完遂される：
１．ＯｐエントリのＯｐ実行状態（ステート［３：０］）がＯｐが完了したことを示す：
２．先行の何れかのフォールト可能なオペレーションのステート［３：０］、即ち先行する何れかのＬｄＳｔＯｐｓが完了され、オペレーションがフォールトの影響を受けないことを意味する；及び
３．先行する何れかのＢＲＣＯＮＤオペレーションのステート［３：０］が完了し、これがＢＲＣＯＮＤが正確に予測されたことを意味する。
メモリ書き込みを発生するＳｔＯｐｓに関する追加的な拘束は１サイクルにてストアキュー１５９からデータキャッシュ１７０に完遂されえるのは１書き込みに限定されることである。ＯＣＵ２６５は１サイクルにつき４レジスタ及び４状態結果及び１メモリ書き込みまでの完遂が可能であり、典型的にはサイクルごとにスケジューラ１８０からのＯｐクワッドを完遂し且つ退避する。Ｏｐクワッドが多重メモリ書き込みＳｔＯｐｓを含有する場合またはＯｐクワッド内のオペレーションの１つが関連するステート［３：０］フィールド２４２が未だ完了したと記録されていない実行において十分に遅延した場合にのみＯｐクワッドは１サイクル以上に亘ってスケジューラ１８０の最下位に退避されないものとして残留することができる。
ＯＣＵ２６５はＳｔＯｐｓに関連したメモリ書き込みデータ値のメモリアドレス空間、即ちＬ１キャッシュ（データキャッシュ１７０及び命令キャッシュ１３０）、Ｌ２キャッシュ、及び主メモリ内の位置に対するコミットメントの処理及び制御を行う。メモリ書き込みコミットメントは関連するストアキュー１５９エントリを含み、ＯＣＵ２６５によって完遂されるメモリ書き込みはせいぜい１サイクルにつき一回である。ＯＣＵ２６５は最下位の２個のＯｐクワッド内のＯｐエントリに関しスケジュールレザバ２４０フィールド値をスキャンし、完遂するメモリ書き込みによってＳｔＯｐｓを識別する。
ＳｔＯｐがストアユニット１５３内の実行を完了した時に、関連する目標メモリアドレス及び記憶データがストアキュー１５９に入れられる。後に、ＳｔＯｐのためのメモリ書き込みが実際に完遂された時に、このエントリは読み出されストアキュー１５９から退避される。ＳｔＯｐｓは順序通りに実行され且つ順序通りに完遂されるので、ストアキュー１５９は単なるＦＩＦＯとして扱われる。結果として、ストアキュー１５９エントリのスケジューラ１８０内の関連ＳｔＯｐｓとの整合は直進的である。
各サイクルの間において、ＯＣＵ２６５のメモリ書き込み完遂ロジックは次の／最も古いの未完遂メモリ書き込みＳｔＯｐ（即ち次のＳｔＯｐ及び試し且つ完遂する関連するストアキュー１５９）のためにスケジューラ１８０の最下位の２個のＯｐクワッドエントリをサーチする。スケジューラ１８０とストアキュー１５９の両者はＦＩＦＯとして扱われるので、ＯＣＵ２６５によって選択されるＯｐエントリはストアキュー１５９の最下位の／最も古いエントリに関係させられなければならない。
ＳｔＯｐ（メモリ書き込み）コミットメントプロセスは二段完遂パイプラインとして実施される。第１の完遂段の間には、制御決定は行われない。しかし、ＯＣＵ２６５はスケジューラ１８０内の次の／最も古い未完遂メモリ書き込みＳｔＯｐに関連したストアキュー１５９エントリに対するデータキャッシュタグルックアップをトリッガする。アクセスされたタグデータは第２の完遂段の間において検査のために単純にラッチされる。データキャッシュ１７０タグルックアップは盲目的に、即ち関連するＳｔＯｐが現在的に完遂可能であるか否かを考慮することなく遂行される。例示的実施例において、ＯＣＵ２６５はスケジューラ１８０からのＯｐエントリを選択し、ストアキュー１５９は同時的に関連するストアキュー１５９エントリのためのメモリ書き込みアドレスをデータキャッシュ１７０に示す（即ち、タグルックアップを開始する）。
書き込み完遂はその段が空であるかそれとも書き込みのコミットメントが支障なく完了した場合に完遂段２へと進めることができる。ストアキュー１５９からのメモリ書き込みが完遂段２へ入った時に、関連するＳｔＯｐはスケジューラ１８０から退避される。ＯＣＵ２６５は選択されたＳｔＯｐが完遂可能であるかどうか、即ち：
１．ＯｐエントリのＯｐ実行状態（ステート［３：０］）が選択されたＳｔＯｐが完了されていることを示し：
２．先行する何れかのフォールト可能なオペレーションのステート［３：０］が完了され、そして
３．先行する何れかのＢＲＣＯＮＤオペレーションのステート［３：０］が完了しているか否かを決定する。
もしも選択されたＳｔＯｐが完遂可能であり、且つ書き込み完遂を第２の書き込み完遂段に進めることが可能であるならば、ＯＣＵ２６５はＳｔＯｐが完遂されたものとみなす。次のサイクルにおいて、ＯＣＵ２６５は次のメモリ書き込みＳｔＯｐをサーチし且つこの上に移動し、完遂プロセスの残部はＯＣＵ２６５及びスケジューラ１８０に同期せずに進行する。
ストアキュー１５９の書き込み完遂パイプラインは書き込みの広いものであり従って１サイクルにつきただ１つのメモリ書き込みＳｔＯｐのコミットメントを支援する。１よりも多くのメモリ書き込みＳｔＯｐを含まないＯｐクワッドに関しては、１サイクルにつき可能な１個のＯｐクワッドのコミットメントとリタイアメント（完遂と退避）を可能とする。しかしながら、そのようなＳｔＯｐｓの２、３、または４個を含有するＯｐクワッドに関しては、Ｏｐクワッドの各ＳｔＯｐエントリを完遂するために符合した最小サイクル数が必要である。結果としてそのようなＯｐクワッドはスケジューラ１８０の最下位に少なくとも符合するサイクル数に亘ってとどまる。
処理能力の不適合は最も古いのものから２番目のＯｐクワッド（Ｏｐクワッド４）内のＳｔＯｐｓに関連したメモリ書き込みを完遂するためのＯＣＵ２６５支援によって部分的に緩和される。メモリ書き込みは順番通りに完遂されるので、このことは、最下位のＯｐクワッドが持続された（そうでなければ未完遂メモリ書き込みは空）時またはそれが単にいかなるＳｔＯｐｓをも含有しない時に多重書き込みＯｐクワッド上にＯＣＵ２６５がヘッドスタート（ｈｅａｄ  ｓｔａｒｔ）をとるのを可能とする。このことがＯＣＵ２６５の１サイクルにつき一回の書き込みのコミットメント率を１Ｏｐクワッドにつき１よりも小さなＯｐクワッドごとのメモリ書き込みの平均数によりよく適合させることを助ける。
ＳｔＯｐのメモリ参照が位置合わせ境界（現例では８バイト）と交差し且つストアユニット１５３によってストアキュー１５９内の２個の関連するエントリを有する２個のメモリ書き込みに分割された時に特別な状況が生起する。そのような状況においては、ＯＣＵ２６５はストアキュー１５９の２個のエントリを退避するために２回のサイクルを用い、第２サイクルまではＳｔＯｐを公式的には完遂しない。そのＳｔＯｐがフォールトの場合には、ストアキュー１５９のいずれのエントリの退避もないままそれは打ち切られる。
下記の疑似ＲＴＬ記述はＯＣＵ２６５の書き込み完遂ロジックの機能性を要約する。ＯＰ０は最も古いＯｐであり、ＯＰ３はスケジューラ１８０の最下位の／最も古いＯｐクワッド内の最も若いＯｐである。同様に、ＯＰ４−ＯＰ７はスケジューラ１８０の最も古いＯｐクワッドに対し２番目に古いものに符合したＯｐｓであり、ＯＰ８−ＯＰ１１はスケジューラ１８０の最も古いＯｐクワッドに対し３番目に古いものに符合したＯｐｓである。ＯＣＵ２６５のオペレーションはメモリ書き込みＳｔＯｐｓの完遂において最後の２のＯｐクワッドからのＯＣＵ２６５の進みを表すマスクビット（ＣｍｔＭａｓｋ［７：０］）のセットに基礎づけられる。
演算において、ＣｍｔＭａｓｋ［７：０］の最初のＮビット（ビット０より開始する）はＯＣＵ２６５がいずれのＳｔＯｐｓをも完遂されるべき次のＳｔＯｐを含有する第Ｎ番目のそのようなＯｐ位置へと完遂したことを明白に示している。ＣｍｔＭａｓｋ［７：０］の残りのマスクビットのセットに符合する全てのＯｐｓは完遂可能なＳｔＯｐｓのために検査されなければならない。ＯＣＵ２６５はまたどのＯｐ位置が未完遂メモリ書き込みＳｔＯｐｓを含有するかを示すビットのセット（ＵｎｃｍｔＳｔＯｐ［７：０］）を維持する。
各サイクルの間、ＯＣＵ２６５は次の未完遂ＳｔＯｐを選択されたＳｔＯｐの位置に基礎付けられた新規なマスクビットのセットを発生する。選択されたＳｔＯｐが現在的に完遂可能であるか又は打ち切りサイクルが開始されることが必要であるかを決定するためにアンマスクＯｐｓが検査される。前者の場合、選択されたＳｔＯｐが完遂可能であり且つ完遂パイプの段２がサイクルの終わりにおいて新規な書き込み完遂を受入れることが可能な場合には、ＯＣＵ２６５はＳｔＯｐを完遂し、ＵｎｃｍｔＳｔＯｐビットを更新する。ＯＣＵ２６５はまた最後の２個のＯｐクワッドの何れのシフトにも適合するようにＵｍｃｍｔＳｔＯｐのビットをシフトする。
0003720370.tif 000003
自己修飾コード処理ロジック
メモリ書き込みはＬｄＳｔＯｐコミットメント段３８２の相２即ち３８２．２においてそのアドレス空間（即ちデーチキャッシュ１７０、命令キャッシュ１３０、Ｌ２キャッシュ及び／又は主メモリ）へ完遂される。ロード・ストア命令ロジック２３４は同一のメモリアドレスにアクセスするＬｄＯｐｓとＳｔＯｐｓの間で実行順序を強制するので、若い方のロードによる直前に完遂されたメモリ書き込みデータの復帰は保証される。しかしながら、ＬｄＳｔＯｐコミットメント段３８２の相２即ち３８２．２内に完遂されたメモリ書き込みが命令ストリーム内に格納されると、多数のパイプライン段（即ち、ｘ８６命令取り出し段３１０、ｘ８６命令解読段３２０、発行段３３０、オペランド取り出し段３４０、実行段３５１、３５２及び３６０）内のより若いＯｐｓ（及びそれらの先駆ｘ８６命令）を古い（ｓｔａｌｅ）命令バイトによって基礎付けることができる。完了されたＯＣＵ２６５によるコミットメントを待期しているＯｐｓも古い命令バイトに基礎付けることができる。スケジューラ１８０の自己修飾コード処理部及び命令デコーダ１４０のトラップは下記に記載のように古いデータをフラッシュするために命令ストリーム内に格納する。
図４を参照するに、ＳｔＯｐはストアキュー１５９の段２即ち４６０によってアドレス空間に完遂される。符合するＯｐクワッドは、そのＯｐクワッドのエントリの各々が完了された場合（又は完遂される過程において）ＯＣＵ２６５によってスケジューラ１８０から退避される。ストアキュー１５９の段１即ち４５９はストアキュー１５９が段２即ち４６０に完遂するべく準備しているメモリ書き込みデータのためのリニアアドレス及び実アドレス（即ちＳｔＯｐアドレス）の部分を提供する。詳細には、ストアキュー１５９の段１即ち４５９はリニアアドレスＳＴＱ＿ＬｉｎＡｄｄｒ（１１，５）のビット１１−５と実アドレスＳＴＱ＿Ｐｈｙｓａｄｄｒ（１９，１２）のビット１９−１２を提供する。スケジューラ１８０の自己修飾コード支援ロジック２３６はＳｔＯｐアドレスを受取り、これをスケジュールレザバ２４０のＯｐクワッドフィールド４４３．１、４４３．２、４４３．３及び４４３．４内に格納された各実アドレスタグＳｍｃ１ｓｔＡｄｄｒ，Ｓｍｃ１ｓｔＰｇ，Ｓｍｃ２ｎｄＡｄｄｒ及びＳｍｃ２ｎｄＰｇに対して比較する。この比較に基づいて、自己修飾コード支援ロジック２３６はストアキュー１５９によって完遂されたＳｔＯｐがスケジューラ１８０内のいずれかのＯｐクワッドによって対象とされたアドレスに書き込むか否かを決定する。その場合には、自己修飾コード支援ロジック２３６は自己修飾コード（ＳＭＣ）トラップをトリッガする。包括的制御ロジック２６０はスケジューラ１８０をフラッシュし、フェッチ／でコードプロセスが最後に完遂された命令に続く命令（即ちその命令ストリームを修飾する命令に続く命令）から再始動される。
既述のように、Ｏｐｓがスケジューラ１８０に発行されるのに伴い、命令デコーダ１４０はＯｐｓクワッドフィールド４４３．１、４４３．２、４４３．３及び４４３．４（図中、実アドレスタグフィールド２４３として一括的に示される）を供給する。Ｏｐクワッドフィールド内に格納された実アドレスタグＳｍｃ１ｓｔＡｄｄｒ，Ｓｍｃ１ｓｔＰｇ，Ｓｍｃ２ｎｄＡｄｄｒ，及びＳｍｃ２ｎｄＰｇはそれから符合するＯｐクワッドのＯｐｓが解読されるｘ８６命令用の第１及び第２実メモリアドレスのビット１９−５を表わす。符合するＯｐクワッドがキャッシュライン境界と交差するｘ８６命令から解読される場合には２個の実メモリアドレスが必要である。下記の擬似ＲＴＬは自己修飾コード支援ロジック２３６の設計と演算を更に記述する：
0003720370.tif 000004
命令デコーダ１４０はまた実アドレスタグを使用する自己修飾コードをトラップする。詳細には命令デコーダ１４０のアドレス整合ロジック４４４と取り出し制御ロジック４４７はストアキュー１５９が段２即ち４６０において完遂するべく準備しているメモリ書き込みに対するリニア及び実アドレス（即ちＳｔＯｐアドレス）の部分を受け取る。従前のように、ストアキュー１５９の段１即ち４５９はリニアアドレスＳＴＱ＿ＰｈｙｓＡｄｄｒ（１１，５）のビット１１−５及び実アドレスＳＴＱ＿ＰｈｙｓＡｄｄｒ（１９，１２）のビット１９−１２を提供する。アドレス整合ロジック４４４はＳｔＯｐアドレスを各々が命令バッファ４４５内のエントリに関連するアドレスタグ４４６に対して比較する。整合が発見された場合には、アドレス整合ロジック４４４はＳＭＣトラップをトリッガする。包括的制御ロジック２６０は命令デコーダ１４０をフラッシュし、フェッチ／デコードプロセスが最後に完遂された命令から再始動される。
例示的実施例において、ＳＭＣトラップは以下のように処理される。トリッガするＳｔＯｐに関連する全てのＯｐｓが完遂された後（即ち、どちらが大きいかに係わりなくトリッガするＳｔＯｐを成員とする全Ｏｐクワッドとして同一のｘ８６命令から解読されたＯｐｓのセット）、後続ｘ８６命令に関連するＯｐｓは打ち切られる。例示的な実施例において、下記のエムコード（ｅｍｃｏｄｅ）がＳＭＣトラップを実現する。
0003720370.tif 000005
ＳＭＣトラップエムコードは上述の打ち切られた命令の拡張命令ポインタ（ＥＩＰ）を達成する。次にＳＭＣトラップエムコードはトリッガするＳｔＯｐがメモリサブシステムによって応答されるときまで待期する。データキャッシュ１７０と主メモリの間に介装されたＬ２キャッシュを含む代替的実施例において、トリッガするＳｔＯｐは上述とは異なりＬ２キャッシュによって応答される。何れの場合においても、そのような肯定応答は命令キャッシュ１３０に対するスヌープ信号（ｓｎｏｏｐ）が既に発行されていることを意味する。ＳＭＣトラップエムコードがトリッガするＳｔＯｐに関連するメモリ書き込みに同期化した後、それは命令ストリーム内の次のｘ８６命令を取り出すためにジャンプして戻る（ＷｒＩｐを実行する）。この時点において主メモリ（又は代替的にはＬ２キャッシュ）から取り出された次のバイトを更新することが保証される。
SMCトラップをトリッガしないＳｔＯｐでさえも関連するメモリ書き込みが完遂された後でスヌープ信号が命令キャッシュ１３０に発行される前に時間ウィンドウを作成し、その間に於いて命令デコーダ１４０によって取り出された新規な命令バイトは、いずれも潜在的に古い（ｓｔａｌｅ）。このことを克服するために、命令デコーダ１４０の取り出し制御ロジック４４７は、完遂メモリ書き込みに関連した実アドレス（即ちStOpアドレス）のコピーを格納する命令デコーダ１４０が命令キャッシュ１３０から新規の命令バイトを取り出す時には常に取り出し制御ロジック４４７は、最後に完遂されたメモリ書き込みのためのSpOtアドレスのその格納されたコピーに対して現取り出しアドレスを照合する。現取り出しアドレスがそのSpＯｐアドレスの格納されたコピーに整合する場合には、取り出し制御ロジック４４７がその取り出しを無効にする。命令デコーダ１４０の取り出し制御ロジック４４７は、完遂されたStOpがメモリサブシステムによって応答されるまで同一の取り出しアドレスへの再発行を継続する。取り出し制御ロジック４４７がメモリサブシステムから肯定応答を受け取ったときには、それはそのStOpアドレス記憶をクリアする。データキャッシュ１７０と主メモリの間に介装されたL2キャッシュを含む代替的実施例に於いては、肯定応答は、L2キャッシュによって供給されることができる。
例示的実施例に於いてそのStOp肯定応答の前、又は（最終的には）それと同時にメモリサブシステムは命令キャッシュ１３０にスヌープ信号を発行する。命令キャッシュ１３０はスヌープ信号を処理する一方命令デコーダ１４０からの取り出しの処理を禁止する。スヌープ信号処理の間の取り出しの禁止により命令キャッシュ１３０はその間に命令取り出しが潜在的に古いバイトに復帰し得る第２の短いウインドウを閉鎖する。
スケジューラ１８０の各Opクワッドは、命令キャッシュ１３０の２個のラインにまたがる解読されたx８６命令のバイトを含有する。同様に、命令バッファ４４５のエントリは、命令キャッシュ１３０の２個のラインにまたがる。例示的実施例に於いて、命令デコーダ１４０の１ラインは、３２バイトである。このことはスケジューラ１８０の各Opクワッドエントリ及び命令バッファ４４５の各エントリに関連する実アドレスタグは、可能な両方の３２バイトキャッシュラインのためにアドレスを符号化する必要があることを意味する。アドレスタグ４４６と実アドレスタグフィールド２４３の１実施例に於いて一対の完了実アドレス（ビット３１：５）がスケジューラ１８０の各Opクワッドのためにかつ命令バッファ４４５の各エントリのために格納される。しかしながらハードウエアを削減するために一方において不適正な整合の頻発を回避すると同時に、アドレスタグ４４６と実アドレスタグフィールド２４３の例示的実施例は、その各々が関連するｘ８６命令の実メモリアドレスのビット１９：５を含有する部分的実アドレスを格納する。
例示的実施例はメモリに対する書き込み単一サイクル処理能力を支援する。データキャッシュ１７０はライトバックキャッシュである。StOpに関連するメモリ書き込みコミットメントがデータキャッシュ１７０にヒットし且つそのラインが占有され（Ｏｗｎｅｄ）又は、汚染（Ｄｉｒｔｙ）されていることが確認されると、１サイクルにつき１の率で書き込みを進めることができる。この状況は、占有された／汚染されたラインがデータキャッシュ１７０と命令キャッシュ１３０の両者の中に存在することが許される場合には、自己修飾コードの処理に関して、いささかの困難を呈する。一実施例に於いて、命令キャッシュ１３０は、完遂されたStOpによって即時に検査されなければならず競合発行がアクセス命令キャッシュ１３０タグRAMに生起することからこのことにより複雑性が増加する。付け加えるに、専用アドレスバス（図示しない）はデータキャッシュ１７０から命令キャッシュ１３０へと送られなければならない。この複雑性を最小限とするため命令キャッシュ１３０とデータキャッシュ１７０間の相互排除関係は維持する一方例示的実施例に於いてキャッシュ制御ロジック１６０によってキャッシュラインが両方のキャッシュ内に同時的に存在することを防止する。この制限による性能的評価での影響は無視し得る。
この構造設計によって付加される拘束は、書き込みStOp及びStOpが修飾されたバイトに対してより古いので修飾されたバイトが同一のOpクワッドエントリ内に復号された場合には、StOpが命令ストりーム内への書き込みが不可能となることである。しかしながらx８６プロセッサアーキテクチュアに合致するプロセッサは、修飾された命令ストリームからの実行を開始する前に制御仕様を転送しなければならない。インテル社のペンティアム  プロセッサ  ソフトウエア  レファレンス  マニュアル参照。例示的実施例に於いてこの要件は、（もし続くならば）命令ストリーム内に格納するStOpとそれを書き込みバイトがスケジューラ１８０の同一のOpクワッド内に存在する可能性を取り除く。
各種の実施例に関連してこの発明の説明が行われたが、これらの実施例は例示的なものであり、この発明の範囲はそれらに限定されないことを理解されたい。説明された実施例の各種の変形、修正、追加、及び改良が可能である。例えばOpクワッドとしてのスケジューラ１８０内のOpエントリの構成は単に例示的なものである。代替的実施例は多重及び／又はパイプライン実行ユニットを有するコンピュータ内の演算の特性及び状態を表す他の構造及び／又は方法と組み合わせることが可能である。更に代替的実施例は、メモリ及び例えばL1及びＬ２キャッシュの別の階層構造と組み合わせることができる。そのような代替的実施例に於いては、ストア肯定応答は、L2キャッシュによって提供することができる。
代替的実施例に於いては、スケジューラ１８０、ストアユニット１５３，ストアキュー１５９、及び命令デコーダ１４０の間のタグ表現及び比較構造を含む構成及び機能の異なる配置を提供することができる。付け加えるに例示的実施例内に於いて、ハードウエアとして表現された構造及び機能は、代替的実施例中のソフトウエア、ファームウエア又はマイクロコードとして実施することができる。本願発明に従った自己修飾コード処理を具体化する広範なコンピュータシステム構造が着想される。例えば、この発明に従って自己修飾コード処理を行うプロセッサ１００（例えばRAM１０２０）、ディスプレスアダプタ１０１０、ディスクコントラーラ／アダプタ１０３０、各種入力／出力インターフェースとアダプタ（例えば並列インターフェース１００９、直列インターフェース１００８、LANアダプタ１００７等）、及び符号する外部装置（例えばディスプレイ装置１００１、プリンタ１００２、モデム１００３、キーボード１００６及び記憶装置）を含むコンピュータ装置（１０００）。記憶装置には、ハードディスク１０３２、フロッピー（登録商標）ディスク１０３１，テープ装置、CD/ROM、ジュークボックス、RAID、フラッシュメモリ等が含まれる。これらの及び他の変形、修正、追加及び改良は請求の範囲に記載のこの発明の範囲に含まれる。
【図１】
0003720370.tif 000006
【図２】
0003720370.tif 000007
【図３】
0003720370.tif 000008
【図４】
0003720370.tif 000009
【図５】
0003720370.tif 000010