(57)【特許請求の範囲】
【請求項１】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコータとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令のバージョンにマッピングされ、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールド、オペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペレーション（ＲｅｇＯｐ）クラスを含み、
前記ＲｅｇＯｐクラスは、特殊レジスタ読み出しおよび書き込みオペレーションをさらに含み、条件付き移動命令のための条件コードを指定し、前記特殊レジスタ読み出しおよび書き込みオペレーションによって読み出しおよび書き込みされる特殊レジスタを指定するための拡張ビットフィールドを含む定義された用途のビットフィールドを有する、
マイクロプロセッサ。
【請求項２】
前記ＲｅｇＯｐクラスは、１以上のステータスフラグを変更するオペレーションをさらに含み、前記ＲｅｇＯｐクラスがさらに有する定義された用途のビットフィールドは、
前記オペレーションによって変更される１以上のステータスフラグを指定するための拡張ビットフィールドと、
前記拡張ビットフィールドに従って、前記オペレーションにステータスフラグを変更させるためのセットステータスビットフィールドとを含む、請求項１記載のマイクロプロセッサ。
【請求項３】
オペレーションのＲｅｇＯｐクラスがプロセッサ実行の転送のためにプログラムカウンタの書き込みを行うオペレーションを含む、請求項１記載のマイクロプロセッサ。
【請求項４】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールド、オペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペレーション（ＲｅｇＯｐ）クラスを含み、
前記ＲｅｇＯｐクラスは、オペレーションを実行するための実行ユニットを指定するビットフィールドを含む、定義された用途のビットフィールドをさらに有する、
マイクロプロセッサ。
【請求項５】
前記ＲｅｇＯｐクラスは、１以上のステータスフラグを変更するオペレーションをさらに含み、前記ＲｅｇＯｐクラスがさらに有する定義された用途のビットフィールドは、
前記オペレーションによって変更される１以上のステータスフラグを指定するための拡張ビットフィールドと、
前記拡張ビットフィールドに従って、前記オペレーションにステータスフラグを変更させるためのセットステータスビットフィールドとを含む、請求項４記載のマイクロプロセッサ。
【請求項６】
オペレーションのＲｅｇＯｐクラスがプロセッサ実行の転送のためにプログラムカウンタの書き込みを行うオペレーションを含む、請求項４記載のマイクロプロセッサ。
【請求項７】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールド、オペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペレーション（ＲｅｇＯｐ）クラスを含み、
オペレーションの前記ＲｅｇＯｐクラスは、もし許可が得られた場合に、アクセス許可のためのメモリセグメントセレクタのチェックと、前記セレクタのロードとを同時に実行するためのチェックセレクタオペレーションを含む、
マイクロプロセッサ。
【請求項８】
前記ＲｅｇＯｐクラスは、１以上のステータスフラグを変更するオペレーションをさらに含み、前記ＲｅｇＯｐクラスがさらに有する定義された用途のビットフィールドは、
前記オペレーションによって変更される１以上のステータスフラグを指定するための拡張ビットフィールドと、
前記拡張ビットフィールドに従って、前記オペレーションにステータスフラグを変更させるためのセットステータスビットフィールドとを含む、請求項７記載のマイクロプロセッサ。
【請求項９】
オペレーションのＲｅｇＯｐクラスがプロセッサ実行の転送のためにプログラムカウンタの書き込みを行うオペレーションを含む、請求項７記載のマイクロプロセッサ。
【請求項１０】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールド、オペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペレーション（ＲｅｇＯｐ）クラスを含み、
オペレーションの前記ＲｅｇＯｐクラスは、リアルモード方式でセグメントレジスタをロードする書き込みディスクリプタリアル（ＷＲＤＲ）オペレーションと、ハードウェアプリミティブのエミュレーションコードシーケンスとしてデータセグメントおよびＩ／Ｏアドレス空間をチェックするためにチェックオペレーションのシーケンスを実行する書き込みディスクリプタプロテクトモードハイ（ＷＲＤＨ）オペレーションおよび書き込みディスクリプタプロテクトモードロー（ＷＲＤＬ）オペレーションを含む、
マイクロプロセッサ。
【請求項１１】
前記ＲｅｇＯｐクラスは、１以上のステータスフラグを変更するオペレーションをさらに含み、前記ＲｅｇＯｐクラスがさらに有する定義された用途のビットフィールドは、
前記オペレーションによって変更される１以上のステータスフラグを指定するための拡張ビットフィールドと、
前記拡張ビットフィールドに従って、前記オペレーションにステータスフラグを変更させるためのセットステータスビットフィールドとを含む、請求項１０記載のマイクロプロセッサ。
【請求項１２】
オペレーションのＲｅｇＯｐクラスがプロセッサ実行の転送のためにプログラムカウンタの書き込みを行うオペレーションを含む、請求項１０記載のマイクロプロセッサ。
【請求項１３】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行時に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、
前記間接指定子は、オペレーティングレジスタ、データサイズおよびアドレスサイズを含むパラメータから選択された命令パラメータを指定する、
マイクロプロセッサ。
【請求項１４】
前記命令クラスが、
ロードオペレーションを含み、オペレーションタイプフィールド、メモリ中のソースアドレスを指定する複数のビットフィールド、メモリ中の前記ソースアドレスからデータを受信するためにディスティネーションレジスタを指定するビットフィールド、および前記ソースディスティネーションデータのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するロードオペレーション（ＬｄＯｐ）クラスを含む、請求項１３記載のマイクロプロセッサ。
【請求項１５】
前記命令クラスが、
オペレーションタイプフィールド、メモリ中のストアアドレスを指定する複数のビットフィールド、ストアレジスタからデータを供給するためにデータソースレジスタを指定するビットフィールド、および前記ソースディスティネーションデータのデータサイズを指定するビットフィールドを含む、定義された用途のビットフィールドを有するストアオペレーションを含むストアオペレーション（ＳｔＯｐ）クラスを含む、請求項１３記載のマイクロプロセッサ。
【請求項１６】
前記命令クラスが、
即値データ値を指定するための即値データハイ（ＩｍｍＨｉ）ビットフィールドおよび即値データロー（ＩｍｍＬｏ）ビットフィールドと、
メモリ中の前記ロードストアアドレスからデータを受信するためにデータディスティネーションレジスタを指定するビットフィールドとを含む、定義された用途のビットフィールドを有するロード即値オペレーションクラス（ＬＩＭＭＯｐ）クラスをさらに含む、請求項１３記載のマイクロプロセッサ。
【請求項１７】
前記命令クラスが、
条件付き分岐オペレーション、セットデフォルトフォールトハンドラアドレスオペレーション、セットオルタネートフォールトハンドラアドレスオペレーションおよび無条件フォールトオペレーションを含み、
条件コードを指定するためのビットフィールドと、符号付き即値データ値を指定するためのデータビットフィールドとを含む定義された用途ビットフィールドを有する特殊オペレーションクラス（ＳｐｅｃＯｐ）をさらに含む、請求項１３記載のマイクロプロセッサ。
【請求項１８】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、
前記命令クラスは、
ロードおよびストアオペレーションを含み、オペレーションタイプフィールド、メモリ中のロード・ストアアドレスを指定する複数のビットフィールド、メモリ中の前記ロード・ストアアドレスからデータを供給・受信するためにデータソースディスティネーションレジスタを指定するビットフィールド、および前記ソースディスティネーションデータのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するロード・ストアオペレーション（ＬｄＳｔＯｐ）クラスを含み、
前記ＬｄＳｔＯｐクラス内のメモリ中のロード・ストアアドレスを指定する複数のビットフィールドは、
前記ロード・ストアアドレスのメモリセグメントを指定するセグメントレジスタと、ロード・ストアメモリアドレスのベースを指定するベースレジスタと、メモリインデックスを指定するインデックスレジスタと、インデックススケールファクターを指定するインデックススケールファクタービットフィールドとを含む、
マイクロプロセッサ。
【請求項１９】
オペレーションの前記ＬｄＳｔＯｐクラスは、チェックデータ実効アドレス（ＣＤＡ）オペレーションを含む、請求項１８記載のマイクロプロセッサ。
【請求項２０】
オペレーションの前記ＬｄＳｔＯｐクラスは、チェック命令実効アドレス（ＣＩＡ）オペレーションを含む、請求項１８記載のマイクロプロセッサ。
【請求項２１】
オペレーションの前記ＬｄＳｔＯｐクラスは、ベースレジスタ更新（ＳＴＵＰＤ）オペレーションとともにストア整数データを含む、請求項１８記載のマイクロプロセッサ。
【請求項２２】
オペレーションの前記ＬｄＳｔＯｐクラスは、ＴＬＢアドレス（ＴＩＡ）を無効化するオペレーションを含む、請求項１８記載のマイクロプロセッサ。
【請求項２３】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるスーパースカラマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、命令クラスの各コードは定義された用途のビットフィールドの相互に矛盾しない定義を持ち、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールド、オペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペレーション（ＲｅｇＯｐ）クラスと、
ロードおよびストアオペレーションを含み、オペレーションタイプフィールド、メモリ中のロード・ストアアドレスを指定する複数のビットフィールド、メモリ中の前記ロード・ストアアドレスからデータを供給・受信するためにデータソースディスティネーションレジスタを指定するビットフィールド、および前記ソースディスティネーションデータのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するロード・ストアオペレーション（ＬｄＳｔＯｐ）クラスと、
即値データ値を指定するための即値データハイ（ＩｍｍＨｉ）ビットフィールドおよび即値データロー（ＩｍｍＬｏ）ビットフィールドと、
メモリ中の前記ロード・ストアアドレスからデータを受信するためにデータディスティネーションレジスタを指定するビットフィールドとを含む、定義された用途のビットフィールドを有するロード即値オペレーションクラス（ＬＩＭＭＯｐ）クラスとを含む、
スーパースカラマイクロプロセッサ。
【請求項２４】
前記命令セットＲｅｇＯｐクラスは、１以上のステータスフラグを変更するオペレーションをさらに含み、前記ＲｅｇＯｐクラスがさらに有する定義された用途のビットフィールドは、
前記オペレーションによって変更される１以上のステータスフラグを指定するための拡張ビットフィールドと、
前記拡張ビットフィールドに従って、前記オペレーションにステータスフラグを変更させるためのセットステータスビットフィールドとを含む、請求項２３記載のスーパースカラマイクロプロセッサ。
【請求項２５】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行時に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるスーパースカラマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、命令クラスの各コードは定義された用途のビットフィールドの相互に矛盾しない定義を持ち、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールドオペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペランド（ＲｅｇＯｐ）クラスと、
ロードおよびストアオペレーションを含み、オペレーションタイプフィールド、メモリ中のロード・ストアアドレスを指定する複数のビットフィールド、メモリ中の前記ロード・ストアアドレスからデータを供給・受信するためにデータソースディスティネーションレジスタを指定するビットフィールド、および前記ソースディスティネーションデータのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するロード・ストアオペレーション（ＬｄＳｔＯｐ）クラスと、
条件付き分岐オペレーション、セットデフォルトフォールトハンドラアドレスオペレーション、セットオルタネートフォールトハンドラアドレスオペレーションおよび無条件フォールトオペレーションを含み、
条件コードを指定するためのビットフィールドと、符号付き即値データ値を指定するためのデータ即値ビットフィールドとを含む定義された用途ビットフィールドを有する特殊オペレーションクラス（ＳｐｅｃＯｐ）とを含む、
スーパースカラマイクロプロセッサ。
【請求項２６】
前記命令セットＲｅｇＯｐクラスは、１以上のステータスフラグを変更するオペレーションをさらに含み、前記ＲｅｇＯｐクラスがさらに有する定義された用途のビットフィールドは、
前記オペレーションによって変更される１以上のステータスフラグを指定するための拡張ビットフィールドと、
前記拡張ビットフィールドに従って、前記オペレーションにステータスフラグを変更させるためのセットステータスビットフィールドとを含む、請求項２５記載のスーパースカラマイクロプロセッサ。
【請求項２７】
データおよび命令をストアするメモリサブシステムと、
前記メモリサブシステムにストアされたデータおよび命令にアクセスするために動作可能に結合されたプロセッサとを備え、前記プロセッサは、
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備え、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、命令クラスの各コードは定義された用途のビットフィールドの相互に矛盾しない定義を持ち、
前記命令クラスは、
算術演算、シフトオペレーション、および移動オペレーションを含み、オペレーションタイプフィールド、第１ソースオペランド、第２ソースオペランド、およびディスティネーションオペランドを表す３つのオペランドビットフィールド、オペランドのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するレジスタオペレーション（ＲｅｇＯｐ）クラスと、
ロードおよびストアオペレーションを含み、オペレーションタイプフィールド、メモリ中のロード・ストアアドレスを指定する複数のビットフィールド、メモリ中の前記ロード・ストアアドレスからデータを供給・受信するためにデータソースディスティネーションレジスタを指定するビットフィールド、および前記ソースディスティネーションデータのデータサイズを指定するビットフィールドを含む定義された用途のビットフィールドを有するロード・ストアオペレーション（ＬｄＳｔＯｐ）クラスと、
即値データ値を指定するための即値データハイ（ＩｍｍＨｉ）ビットフィールドおよび即値データロー（ＩｍｍＬｏ）ビットフィールドと、
メモリ中の前記ロード・ストアアドレスからデータを受信するためにデータ目的レジスタを指定するビットフィールドとを含む、定義された用途のビットフィールドを有するロード即値オペレーションクラス（ＬＩＭＭＯｐ）クラス、または、
条件付き分岐オペレーション、セットデフォルトフォールトハンドラアドレスオペレーション、セットオルタネートフォールトハンドラアドレスオペレーションおよび無条件フォールトオペレーションを含み、条件コードを指定するためのビットフィールドと、符号付き即値データ値を指定するためのデータ即値ビットフィールドとを含む定義された用途ビットフィールドを有する特殊オペレーションクラス（ＳｐｅｃＯｐ）のうちの少なくとも一つとを含む、
コンピュータシステム。
【請求項２８】
前記プロセッサおよび前記メモリサブシステムはマザーボードの部品である、請求項２７記載のコンピュータシステム。
【請求項２９】
前記マザーボードは前記プロセッサに動作可能に結合された背面バスをさらに備え、前記マザーボードに前記背面バスを介して接続されたカード上の１以上のデバイスをさらに備える、請求項２８記載のコンピュータシステム。
【請求項３０】
前記プロセッサに動作可能に結合されたパラレルデバイスインターフェイスをさらに備える、請求項２７記載のコンピュータシステム。
【請求項３１】
前記パラレルインターフェイスを介して、前記プロセッサに接続されたプリンタをさらに備える、請求項３０記載のコンピュータシステム。
【請求項３２】
前記プロセッサに動作可能に結合されたシリアルデバイスインターフェイスをさらに備える、請求項２７記載のコンピュータシステム。
【請求項３３】
前記シリアルデバイスインターフェイスを介して前記プロセッサに接続されるモデムをさらに備える、請求項３２記載のコンピュータシステム。
【請求項３４】
前記プロセッサに動作可能に結合されるグラフィックアダプタをさらに備える、請求項２７記載のコンピュータシステム。
【請求項３５】
前記グラフィックアダプタを介して前記プロセッサに接続されるビデオディスプレイをさらに備える、請求項３４記載のコンピュータシステム。
【請求項３６】
前記プロセッサに動作可能に結合されたローカルエリアネットワークアダプタをさらに備える、請求項２７記載のコンピュータシステム。
【請求項３７】
前記ローカルエリアネットワークアダプタを介して前記プロセッサに接続されるデバイスのネットワークをさらに含む、請求項３６記載のコンピュータシステム。
【請求項３８】
前記プロセッサに動作可能に結合されるディスクコントローラをさらに備える、請求項２７記載のコンピュータシステム。
【請求項３９】
前記ディスクコントローラを介して前記プロセッサに接続されるハードディスクをさらに備える、請求項３８記載のコンピュータシステム。
【請求項４０】
前記ディスクコントローラを介して前記プロセッサに接続されるフロッピーディスクをさらに備える、請求項３８記載のコンピュータシステム。
【請求項４１】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定コードを用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令子は複数の命令バージョンにマッピングされ、
前記命令クラスは、
条件付き分岐オペレーション、セットデフォルトフォールトハンドラアドレスオペレーション、セットオルタネートフォールトハンドラアドレスオペレーションおよび無条件フォールトオペレーションを含み、
条件コードを指定するためのビットフィールドと、符号付き即値データ値を指定するためのデータ即値ビットフィールドとを含む定義された用途のビットフィールドを有する特殊オペレーションクラス（ＳｐｅｃＯｐ）を含み、オペレーションの前記ＳｐｅｃＯｐクラスは定数をロードするためのオペレーション（ＬＤＫ）を含む、マイクロプロセッサ。
【請求項４２】
前記特殊オペレーションクラス（ＳｐｅｃＯｐ）は、ロード定数オペレーションをさらに含み、前記定義された用途のビットフィールドは、データ目的レジスタを指定するビットフィールドと、定数データのデータサイズを指定するビットフィールドとをさらに含む、請求項４１記載のマイクロプロセッサ。
【請求項４３】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、
前記命令クラスは、
条件付き分岐オペレーション、セットデフォルトフォールトハンドラアドレスオペレーション、セットオルタネートフォールトハンドラアドレスオペレーションおよび無条件フォールトオペレーションを含み、
条件コードを指定するためのビットフィールドと、符号付き即値データ値を指定するためのデータ即値ビットフィールドとを含む定義された用途のビットフィールドを有する特殊オペレーションクラス（ＳｐｅｃＯｐ）を含み、オペレーションの前記ＳｐｅｃＯｐクラスはロード定数データ（ＬＤＫＤ）オペレーションを含む、マイクロプロセッサ。
【請求項４４】
ＣＩＳＣ風命令のソースと、
複数のＲＩＳＣ風オペレーションを同時並行的に実行するためのＲＩＳＣ風プロセッサコアと、
前記ＣＩＳＣ風命令のソースを前記ＲＩＳＣ風プロセッサコアに結合し、ＣＩＳＣ風命令をＲＩＳＣ風命令セットのオペレーションに変換するデコーダとを備えるマイクロプロセッサであって、
前記ＲＩＳＣ風命令セットが、
複数の相互に均一なビット長の命令コードを含み、各コードは複数の定義された用途のビットフィールドに分割され、前記コードは複数の命令クラスに分類され、定義された用途のビットフィールドの相互に矛盾しない定義を持つ一つの命令クラスのコードは間接指定子を用いてマッピングされるビットフィールドを含み、それによって、相互に均一なビット長の一つの命令コードは複数の命令バージョンにマッピングされ、一つのオペレーションの定義された用途のビットフィールドは前記プロセッサのエミュレーション環境によって決定される代替値によって指定される、
マイクロプロセッサ。
【請求項４５】
前記特殊オペレーションクラス（ＳｐｅｃＯｐ）は、ロード定数オペレーションをさらに含み、前記定義された用途のビットフィールドは、データディスティネーションレジスタを指定するビットフィールドと、定数データのデータサイズを指定するビットフィールドとをさらに含む、請求項４３記載のマイクロプロセッサ。
【発明の詳細な説明】
技術分野
本発明はプロセッサに関する。特に本発明はｘ８６命令を、ＲＩＳＣ型コア上で実行されるＲＩＳＣ型オペレーションに変換するプロセッサに関する。
背景技術
ＥＰ−Ａ−０  ６５１  ３２０には、ＲＩＳＣスーパースケーラコアを有するスーパースケーラＣＩＳＣプロセッサが開示されている。ＩＥＥＥ  Ｍｉｃｒｏ，ｖｏｌ  １４，Ｎｏ．５，１  Ｏｃｔｏｂｅｒ  １９９７，ｐａｇｅｓ  ３０−４１，ＸＰ０００４７６６７８には、関連の従来技術について説明したＤｉｅｆｅｎｄｏｒｆｆ等による“Ｔｈｅ  ｐｏｗｅｒ  ＰＣ  ｕｓｅｒ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ”なる名称の論文が記載されている。
Ｐ６クラスｘ８６プロセッサのような高性能のプロセッサは、共通の機能群によって特徴づけられる。このような機能群には、スーパースケーラアーキテクチャ及びスーパースケーラ処理能力、１クロックサイクルあたりの多数のｘ８６命令のコーディング、及び多数のｘ８６命令のＲＩＳＣ風（RISC-like）オペレーションへの変換などがある。ＲＩＳＣ風オペレーションはデコーディングから分離されたＲＩＳＣ型コアにおいてＯＵＴ−ＯＦ−ＯＲＤＥＲ実行される。これら高性能のマイクロプロセッサは命令の実行順序を並べ替えたり、メモリ参照の順番を変える多くの命令ウィンドウを支援している。
ＣＩＳＣ風（CISC-like）命令のＲＩＳＣ風命令への変換又は翻訳は、通常多くのＣＩＳＣ風又はＣＩＳＣ型命令、例えば多種多様なＡＤＤ命令を１又は２以上の一般的命令にマッピングする。更に、ある特定の命令の非常に多数のアドレシングモードまたはアドレス指定方式は、メモリへのアクセスを行うロード／ストアオペレーションと共にレジスタ−レジスタ間転送オペレーションに変換される。実行のためＣＩＳＣ風命令をＲＩＳＣ風命令に変換するマイクロプロセッサの性能は、主として１つのＣＩＳＣ風命令から生成されるＲＩＳＣ風オペレーションの数によって決まる。
解読（またはデコード）速度を含む高性能スーパースケーラマイクロプロセッサの性能は、１クロックサイクル当たりの解読されるｘ８６命令の数を含む解読性能、及び分岐予測能力及び分岐予測処理にも依存している。高性能スーパースケーラマイクロプロセッサにおける命令デコーダは、ｘ８６命令がハードウェアロジックによる翻訳で解読される１又は２以上のデコード経路と、１つのｘ８６命令に対応するＲＩＳＣオペレーションシーケンスをフェッチするためにＲＯＭメモリを用いる別のデコード経路を有する。一般に、ハードウェアロジックにより翻訳されるｘ８６命令は、単純なｘ８６命令である。より複雑なｘ８６命令の解読のためには参照用ＲＯＭが用いられる。
ｘ８６命令の解読のために参照用ＲＯＭを用いることの問題点の１つは、マイクロプログラム制御記憶装置へのアクセスの距離が、ハードワイヤードロジックによる命令の翻訳より元々遅く効率が低いことである。参照用ＲＯＭよるｘ８６命令の解読において生ずる他の問題は、そのｘ８６プロセッサに対して標準の非常に数多くの異なるＣＩＳＣ風命令である。非常に数多くの命令が実行されることから、この命令のＲＩＳＣオペレーションへの変換のためにプロセッサチップ上に大きなＲＯＭ回路が必要となる。実行される命令の数の増加は、ＲＯＭに対するポインタを派生し、その派生されたＲＯＭに対するポインタを用いるために回路の複雑さが増すことになる。このように回路の複雑さが増すことは命令のデコード速度を低下させるオーバヘッドの増加に直接繋がる。大きな参照用ＲＯＭを備えることはプロセッサ集積回路のサイズも大きくなることであり、この結果回路の製造時の歩留まりが低下し製造コストが増加する。
多数のＣＩＳＣ型命令から少ない数のＲＩＳＣ型オペレーションの翻訳を容易にする内部命令フォーマットが必要とされている。このほか必要なのは、ＣＩＳＣ型命令を最小の数のＲＩＳＣ型オペレーションに変換することを容易にする内部命令フォーマットである。更に必要なのは、参照用ＲＯＭによる変換と比較してより多くの数の共通ＣＩＳＣ型命令をハードワイヤードロジックを用いて変換できるようにする内部命令フォーマットである。
発明の開示
本発明によれば、内部ＲＩＳＣ型命令構造が複数のオペレーション（Ｏｐ）フォーマット（形式）のための複数の定義されたビットフィールドを含む固定ビット長テンプレートを提供する。レジスタ−レジスタ間オペレーションを指定するフォーマットの１つは、１つの命令型ビットフィールド、２つのソース−オペランドビットフィールド、及び１つのディスティネーション−オペランドビットフィールドを含む。別のフォーマットは、ロード−ストアオペレーションのフォーマットで、命令型ビットフィールド、それぞれがロード／ストアオペレーションのためのソースレジスタ及びディスティネーションレジスタの指定子、及びアドレスのセグメント、ベース、及びインデックスパラメータを指定し、インデックススケーリングファクタ（桁移動子）及び変位を指定するビットフィールドを含む。
本発明の第１実施例によれば、ＲＩＳＣ風内部命令セットがスーパースケーラプロセッサのＲＩＳＣ風コア上で実行される。ＲＩＳＣ風内部命令セットはＣＩＳＣ風外部命令セットの命令から翻訳される。この命令セットは、固定ビット長構造に配置された複数の命令コードを含む。この構造は複数の使用目的が定義されたビットフィールドに分割される。この命令コードは複数の使用目的が定義されたビットフィールドの複数のオペレーション（Ｏｐ）フォーマットを有する。１つのＯｐフォーマットは、第１レジスタＯｐフォーマットコードとしての命令コードを表すフォーマットビットフィールド、レジスタ命令のタイプ（型）を表すタイプビットフィールド、第１ソースオペランドを指定する第１ソースオペランドビットフィールド、第２ソースオペランドを指定する第２ソースオペランドビットフィールド、ディスティネーションオペランドを表すディスティネーションビットフィールド、およびオペランドバイトサイズを表すオペランドサイズビットフィールドを含む第１レジスタＯｐフォーマットである。第２Ｏｐフォーマットは、ロード−ストアＯｐフォーマットコードとしての命令コードを表すフォーマットビットフィールド、ロード−ストア命令のタイプを表すタイプビットフィールド、ロード−ストアオペレーションのディスティネーション−ソースを指定するデータビットフィールド、インデックススケールファクタを表すインデックススケールファクタビットフィールド、セグメントレジスタを表すセグメントビットフィールド、ロード−ストアベースアドレスを表すベースビットフィールド、ロード−ストア変位を表す変位ビットフィールド、ロード−ストアアドレスインデックスを表すインデックスビットフィールドを有するロード−ストアＯｐフォーマットである。命令コードの様々なビットフィールドはプロセッサコンテキストのファンクションとして決定された置換ビットフィールドを有するＯｐフォーマットに置き換えたものである。
ここに開示する命令セット及び命令セットフォーマットにより多くの利点が得られる。大きな利点の１つは、ここに開示する命令セットがＲＩＳＣオペレーションの固定長及びフォーマットとの一致度が高いという点である。これと比較すると従来のｘ８６命令は全く異なる命令長及びフォーマットを有する、一致度が著しく低いものである。一致度の高いデータ構造により、回路の複雑さやサイズを小さくすることができ、実際に効率が高くなる。別の利点は、デコードによるオペレーションの効率的なマッピングのための拡張機能（extension）が含まれている点である。この拡張機能は、ｘ８６命令の直接のデコード（解読）及びエミュレーション、又はマッピングをサポートする。別の利点は、ここに開示する命令セットがｘ８６命令において共通の多数の命令群に対するオペレーション構造を再利用しているため、小さなＲＯＭメモリサイズで実行される点である。この命令セットを用いることによりＣＩＳＣ機能のエンコーディングと共に参照用ＲＯＭのサイズを小さくすることができ、これによりプロセッサ集積回路のサイズを小さくして製造コストを低減できるという利点が得られる。
【図面の簡単な説明】
この新規な発明の特徴は、特に請求の範囲において記載されている。しかし、この発明自体、即ちその構造及び動作の形態については、以下の実施例の説明を添付の図面と共に参照することによりより良く理解されよう。
第１図は、本発明の１実施例によるコンピュータシステムを表すブロック図である。
第２図は、第１図に示すコンピュータシステムにおいて使用されるプロセッサの１実施例を示すブロック図である。
第３図は、第２図に示すプロセッサの実施例におけるパイプライン処理を示すタイミング図である。
第４図は第２図に示すプロセッサにおいて使用される命令デコーダの１実施例を示す概略的なブロック図である。
第５図は、第４図に示す命令デコーダのエミュレーションコードシーケンサおよびエミュレーションコードメモリの構造を示す概略的なブロック図である。
第６Ａ図〜第６Ｅ図は、第４図に示す命令デコーダにより生成される複数のオペレーション（Ｏｐ）フォーマットを示す図である。
第７図は、第５図に示すエミュレーションコードメモリにおいて使用されるＯｐＳｅｑフィールドフォーマットを示す図である。
第８図は、命令置換処理の一例を示す図である。
第９図は、スケジューラの一実施例を示す概略的なブロック図である。
第１０図は、本発明の実施例による、ＲＩＳＣ８６命令セットを実行する命令デコーダを有するプロセッサを組み込んだパーソナルコンピュータのブロック図である。
発明の実施の形態
第１図には、パーソナルコンピュータを含む様々な用途において用いられるコンピュータシステム１００が示されたいる。コンピュータシステム１００は本発明の実施例によるプロセッサ１２０を含むコンピュータマザーボード１１０を備えている。プロセッサ１２０は、複雑な命令セットを実行する一体型集積回路であり、このためプロセッサ１２０はＣＩＳＣ型プロセッサと呼ばれている。ＣＩＳＣ型命令セットの例は、良く知られている８０８６プロセッサファミリにおいて実行されるｘ８６命令セットがある。プロセッサ１２０はレベル２（Ｌ２）キャッシュ１２２、メモリコントローラ１２４及びローカルバスコントローラ１２６及び１２８に接続されている。メモリコントローラ１２４は主メモリ１３０に接続されこのためメモリコントローラ１２４はプロセッサ１２０と主メモリ１３０との間のインタフェースを形成する。ローカルバスコントローラ１２６及び１２８はＰＣＩバス１３２及びＩＳＡバス１３４を含むバスに接続されており、このためローカルバスコントローラ１２６及び１２８はＰＣＩバス１３２ＩＳＡバス１３４との間のインタフェースを形成している。
第２図には、プロセッサ１２０の１実施例のブロック図が示されている。プロセッサ１２０のコアはＲＩＳＣスーバースケーラプロセシングエンジンである。通常のｘ８６は、命令デコードハードウェアにより内部ＲＩＳＣ８６命令セットにおけるオペレーションに変換される。他のｘ８６で、例外処理、及び他の種々雑多な機能は、オンチップＲＯＭに格納されたＲＩＳＣ８６オペレーションシーケンスとして実行される。プロセッサ１２０はシステムインタフェース２１０及びＬ２キャッシュコントロールロジック２１２を含むインタフェースを有する。システムインタフェース２１０はプロセッサ１２０と他のコンピュータシステム１００のブロックとを接続する。プロセッサ１２０は種メモリ１３０及びローカルバス１３２及び１３４上のデバイスを含むコンピュータシステム１００のアドレス空間に、システムインタフェース２１０を介して呼び出し及び書き込みを行うことによりアクセスする。Ｌ２機種コントロールロジック２１２はＬ２キャッシュ１２２のような外部キャッシュとプロセッサ１２０との間のインタフェースを形成する。総術すると、Ｌ２キャッシュコントロールロジック２１２はＬ２キャッシュ１２２をプロセッサ１２０の命令キャッシュ２１４及びデータキャッシュ２１６にインタフェースする。命令キャッシュ２１４及びデータキャッシュ２１６はＬ２キャッシュ１２２を通してコンピュータシステム１００のアドレス空間に接続された１次キャッシュ（Ｌ１キャッシユ）である、
主メモリ１３０からの命令は、先行的な実行のためのプリデコーダ２７０を介して命令キャッシュ２１４にロードされる。プリデコーダ２７０は予備デコードビットまたはプリデコードビット（predecode bit）を発生し、このプリデコードビットは命令ビットと共に命令キャッシュ２１４に格納される。例えば３ビットであるプリデコードビットは関連する命令バイト（８ビット）と共にフェッチされ、多数の命令のデコードを容易にし、デコード時間を短くするために用いられる。命令バイトは４つの８バイトデータのバースト転送として１度に３２バイト命令キャッシュ２１４にロードされる。プリデコーダ２７０のロジックは、キャッシュラインにおいて４回使用するために８回分反復されており、全ての８つの命令バイトに対するプリデコーダビットは命令キャッシュ２１４に書き込まれる直前に同時に計算される。１バイト上でのプリデコードオペレーションは、通常１バイト、２バイト、又は３バイトの情報に基づいており、プリデコード情報は８バイト単位より長いものに延ばすことができる。従って、２つの８バイトグループにオーバーラップするプリデコード情報の場合は、一つの８バイトグループの後ろの２バイトが、その次の８バイトグループと共に処理するためにセーブされる。命令キャッシュ２１４に格納された命令はマクロ命令とも称されるＣＩＳＣ命令である。命令デコーダ２２０は命令キャッシユ２１４からのＣＩＳＣ命令を実行エンジン２２２上での実行のためのＲＩＳＣアーキテクチャ命令セットのオペレーションに変換する。命令キャッシュ２１４からの１つのマクロ命令は実行エンジン２２２用の１又は複数のオペレーションにデコードされる。
命令デコーダ２２０は命令キャッシュ２１４及び命令設置コントロール回路２１８（第４図参照）へ接続するインタフェースを有する。命令デコーダ２２０は大抵のマクロ命令をデコードするためのマクロ命令デコーダ２３０、ＣＩＳＣ命令のような命令のセブセットをデコードするためエミュレーションＲＯＭ２３２を有する命令エミュレーション回路２３１、分岐予測及び分岐処理を行うための分岐ユニット２３４を有する。マクロ命令はそのマクロ命令が変換されるオペレーションの一般的な型によって分類される。このオペレーションの一般的な型は、レジスタオペレーション（ＲｅｇＯｐｓ）、ロード−ストアオペレーション（ＬｄＳｔＯｐｓ）、即値ロードオペレーション（ＬＩＭＭＯｐｓ）、特殊オペレーション（ＳｅｐｃＯｐｓ）、及び浮動小数点演算（ＦｐＯｐｓ）である。
実行エンジン２２２はスケジューラ２６０およびロードユニット２４０、ストアユニット２４２、第１レジスタユニット２４４、第２レジスタユニット２４６、浮動小数点ユニット２４８、及びマルチメディアユニット２５０を含む６つの実行ユニットを有する。スケジューラ２６０はオペレーションを適当な実行ユニットに分配し、実行ユニットは同時並行的に動作する。各実行ユニットは特定のタイプのオペレーションを実行する。特に、ロードユット２４０及びストアユニット２４２は、ロード／ストアオペレーション（ＬｄＳｔＯｐ）の実行中にデータキャッシュ２１６（Ｌ１データキャッシュ）、Ｌ２キャッシュ１２２、及び主メモリ１３０へのデータのロード（読みだし）
又はデータの格納（書き込み）を行う。格納待ち行列２６２は、ストアユニット２４２からデータを一時的に格納し、ストアユニット２４２及びロードユニット２４０がデータキャッシュ２１６へのアクセスについてコンフリクトを起こさずに同時並行的に動作できることになる。レジスタユニット２４４及び２４６はレジスタファイル２９０へのアクセスのためのレジスタオペレーション（ＲｅｇＯｐｓ）を実行する。浮動小数点ユニット２４８は浮動小数点演算（ＦｐＯｐｓ）を実行する。マルチメディアユニット２５０はマルチメディアアプリケーション用の算術演算を実行する。
スケジューラ２６０は複数の、例えば２４このエントリに分割される。各エントリはストレージ及びロジックを含んでいる。この２４このエントリは、それぞれ４つのエントリからなる６つのグループにグループ化され、各グループはＯｐクワドと称される。エントリのストレージに格納された情報は、その実行が待ち状態にあるか或いは実行の終了したオペレーションを記述したものである。スケジューラは、エントリをモニタし、エントリからその情報が指定する実行ユニットへの情報の割り当てを行う。
第３図には、プロセッサ１２０の５及び６段階の基本的なバイブライン処理のタイミングが示されている。命令デコーダ２２０は１つのクロックサイクルに２つの命令をデコードする。第１段階３１０において、命令フェッチコントロール回路２１８はＣＩＳＣ命令を取り出し、即ちフェッチして命令キャッシュ２１４に入れる。段階１１０においてＣＩＳＣ命令をプリデコードすることにより、後続のデコード時間が短くなる。第２段階３２０において、命令デコーダ２２０は命令キャッシュ２１４からの命令をデコードし、Ｏｐクワドをロードしてスケジューラ２６０に入れる。第３段階３３０において、スケジューラ２６０はエントリをスキャンし実行ユニットのそれぞれのタイプに対するオペレーションが実行できる場合対応する実行ユニット２４０−２５２らオペレーションを出す。段階３３０において発せられたオペレーションに対するオペランドは、第４段階３４０において実行ユニットにフォアーディングされる。レジスタオペレーションＲｅｇＯｐの場合には、オペレーションは段階３５０に相当する次のクロックサイクルにおいて概ね終了するが、ロード−ストアオペレーションＬｄＳｔＯｐｓの実行には、アドレス計算３５２、データアクセス、及び計算結果の転送３６２のためにより多くの時間が必要である。
分岐オペレーションの場合は、命令デコーダ２２０が分岐オペレーションの初めのデコード時に分岐予測３２４を実行する。分岐ユニット２５２は、後の段階３６４において分岐のための条件を評価し、分岐予測３２４が正しかったか否かを判定する。２つのレベルの分岐予測アルゴリズムにより、条件分岐の向きが予測され、段階３１０におけるＣＩＳＣ命令のフェッチ及び段階３２０におけるＣＩＳＣ命令のデコードは、予測された分岐の方向に進む。スケジュラ２６０は、分岐評価に必要な全ての条件コードが平行になった時を決定し、分岐ユニット２５２に分岐命令の評価を行わせる。分岐予測が正しくなかった場合には、実行されるべきではなかったスケジューラ２６０におけるオペレーションがクリアされ、デコーダ２２０が分岐の後正しいアドレスからの新たなＯｐクワドのローディングを開始する。正しい分岐に対する命令がフェッチされると時間的ペナルティを被ることになる。命令デコーダ２２０は以前に格納され予測されたアドレスの呼び出しか、平行なアダーの組を用いたアドレスの計算の何れかを行う。以前に予測されたアドレスが格納されている場合には、予測アドレスはステージ３２６においてフェッチされ、予測アドレスにある命令が段階３２８においてアダー利用による時間の遅延を起こすことなくフェッチされる。そうでない場合には、平行なアダーが接続されたアドレスの計算を行う。
分岐評価段階３６４において、分岐ユニット２５２は予測された分岐の方向が正しいか否かを判定する。予測された分岐の方法が正しい場合には、フェッチ、デコード、及び命令実行ステップが割り込まれることなく続行される。予測が異なる場合には、スケジューラ２６０がフラッシュされ、命令デコーダ２２０が分岐の後に正しいプログラムカウンタからマクロ命令のデコードを開始する。
第４図には、主メモリ１３０に接続された命令準備回路４００の実施例を表す概略的なブロック図が示されている。この命令準備回路４００は、プリデコーダ２７０を介して主メモリ１３０に接続された命令キャッシュ２１４を備えている。命令デコーダ２２０は３つの異なるソース、命令キャッシュ２１４、分岐ターゲットバッファ（ＢＴＢ）４５６、及び命令バッファ４０６に接続され、ここから命令バイト及びプリデコードビットを受け取る。命令バイト及びプリデコードビットは複数のローテータ（rotator）４３０、４３２、および４３４を通し、命令レジスタ４５０、４５２、及び４５４を介して命令デコーダ２２０に供給される。マクロ命令デコーダ２３０は、命令キャッシュ２１４及び命令フェッチコントロール回路２１８に接続され、命令バイト及びそれに関連するプリデコード情報を受け取る。マクロ命令デコーダ２３０は、フェッチされた命令バイトを命令フェッチコントロール回路２１８に接続された命令バッファ４０８にバッファリングする。命令バッファ４０８は、１６バイトバッファであり、命令キャッシュ２１４から命令バッファ４０８の空いている空間の大きさに見合う大きさのデータをローディングすることにより、最大１６バイト又は位置合わせされた４つのワードを受け取り、それをバッファリングする。命令バッファ４０８は次にデコードされる命令バイトを保持し、古いバイトがマクロ命令デコーダ２３０によって処理されたとき続けて新たな命令バイトをリロードする。命令キャッシュ２１４に格納された命令も命令バッファ４０８に格納された命令も、メモリビット（８）及びプリデコードビット（５）の双方を含む「拡張」バイトで保持され、それぞれが位置合わせされた形で保持されている。プリデコードビットはマクロ命令デコーダ２３０が１クロックサイクル内に複数の命令をデコードするのを助ける。
デコードプログラムカウンタ（ＰＣ）４２０、４２２、又は４２４を用いてアドレス指定された命令バイトは、命令バッファ４０８からマクロ命令デコーダ２３０に転送される。命令バッファ４０８はマクロ命令デコーダ２３０のデコーダによりバイト単位でアクセスされる。しかし、各デコードサイクルにおいて、命令バッファ４０８はトラッキングのためにワード単位で管理される。即ち命令バッファ４０８における最初のワードは有効であるものが追跡され、命令キャッシュ２１４から新たなバイトと共にリロードされる。命令バイトが有効であるか否かの表示は、命令バイトがデコードされるとき維持されている。無効な命令バイトの場合は、マクロ命令デコーダ２３０に接続されたデコーダ妥当性検証ロジック（図示せず）は、「バイト無効」信号をセットする。現在フェッチプログラムカウンタ４２６の交信の制御は、命令バッファ４０８の命令バイトの検証及び命令デコーダ２２０による命令バイトの使用とほぼ同期されている。
マクロ命令デコーダ２３０はフェッチサイクルの終わりの時点で命令フェッチコントロール回路２１１からフェッチされた最大１６バイト、又は４つの位置合わせされた命令バイトのワードを受け取る。命令キャッシュ２１４からの命令バイトはロードされて１６バイト命令バッファ４０８に入れられる。命令バッファ４０８は、命令バイトと共に命令バイトのそれぞれに関連するブリデコード情報を、命令バイトがフェッチされるかデコードされるか、又はその両方を成されたときにバッファリングする。命令バッファ４０８は、命令バッファ４０８の空いている空間に入れることはできる大きさの命令バイトを受け取り、次にデコードされる命令バイトを保持し、且つ以前の命令バイトがマクロ命令デコーダ２３０内の個別のデコーダに転送された時新たな命令バイトを続けてリロードする。命令プリデコーダ２０７は、命令バイトが命令キャッシュ２１４に転送された時、ブリデコード情報ビットに命令バイトを加える。従って、命令キャッシュ２１４に格納され転送される命令バイトは、拡張バイトと称される。各拡張バイトは、８このメモリビットに５つのプリデコードビットを有する。この５つのプリデコードビットは、命令長をコード化する３つのビット、命令長がＤビット依存であるか否かを示す１つのＤビット、及び命令コードがｍｏｄｒ／ｍフィールドを含んでいるか否かを示すＨａｓＭｏｄＲＭビットを有する。１３ビットは命令バッファ４０８に格納され、そこを通ってマクロ命令デコーダ２３０に送られる。命令バッファ４０８は５つのプリデコードビットのセットのそれぞれを６つのプリデコードビットに拡張する。プリデコードビットにより、デコーダが１クロックサイクルにおいて多数の命令のデコードを高速で行うことが可能となる。
命令バッファ４０８は命令キャッシュ２１４に格納されたメモリ上で位置合わせされたワード単位で命令キャッシュ２１４からの命令バイトを受け取り、従って命令はワード単位の細分性でロードされたり置換されたりする。従って、命令バッファ４０８のバイトロケーション０は、常にメモリにおけるアドレス０（ｍｏｄ１６）にアドレス指定されたバイトを保持している。
命令バイトはバイト単位の細分性をもって命令バッファ４０８からマクロ命令デコーダ２３０に転送される。各デコードサイクルにおいて、関連する暗黙ワード有効ビットを含む命令バッファ４０８内の１６の拡張された命令バイトは、マクロ命令デコーダ２３０内の複数のデコーダに転送される。命令バイトの命令キャッシュ２１４からマクロ命令デコーダ２３０への命令バッファ４０８を介しての転送のメソッドは、命令が逐次デコードされる限り各デコードサイクル毎に反復される。例えば分岐オペレーションを行ったため、制御の転送が生じた場合には、命令バッファ４０８はクリアされメソッドが再開される。
現在デコードプログラムカウンタは、命令バッファ４０８が１６バイトの容量を有するが、ワードの４つの全てのバイトが使用される４バイトワード単位で管理されるという点で任意バイトの位置合わせが成されている。前記ワードの全ての４つのバイトは、消費された後除去され、命令バッファ４０８にある新たな４つのバイトを有するワードで置き換えられる。１つの命令は１〜１１バイトの長さを有し、多数のバイトがデコードされる。これにより命令バッファ４０８における命令の位置合わせは任意となる。命令バイトが命令バッファ４０８からマクロ命令デコーダ２３０に転送されたとき、命令バッファ４０８は命令キャッシュ２１４からリロードされる。
命令バイトは命令バッファ４０８に、マクロ命令デコーダ２３０に対する連続した命令バイトの供給のために適切な連続的なバイトの位置合わせでなく、メモリ上で位置合わせされた命令バッファ４０８に格納される。従って、バイトデータ４３０、４３２、及び４３４の組は、命令バッファ４０８とマクロ命令デコーダ２３０の各デコーダとの間に配置される。４つの命令デコーダ、即ち３つのショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、又はＳＤｅｃ２  ４１４、及び１つの結合式ロングベクタリング（vectoring）デコーダ４１８は、バイトローテータ４３０、４３２、及び４３４を共用する。特に、ショートデコーダＳＤｅｃ０  ４１０及び結合式ロングベクタリングデコーダ４１８は、バイトローテータ４３０を共有する。ショートデコーダＳＤｅｃ１  ４１２は、バイトローテータ４３２と連携し、ショートデコーダＳＤｅｃ２  ４１４はバイトローテータ４３４と連携する。
複数のパイプラインレジスタ、具体的には命令レジスタ４５０、４５２、及び４５４は、バイトローテータ４３０、４３２、及び４３４と、命令デコーダ２２０との間に配置され、命令バイト、プリデコードビット、及び他の情報を一時的に保持し、これによってデコードタイミングサイクルを短縮化している。命令レジスタ４０５、４５２、及び４５４に保持される他の情報には、命令のデコードを助ける様々な情報が含まれており、この中にはプリフィクス（例えば０Ｆ）ステータス、測地サイズ（８ビット又は３２ビット）、変位及びロングデコード可能長指定がある。
３つのローテータ及び３つのショートデコーダを用いる回路が例示されているが、別の実施例においては、異なる数の回路素子を用いて良い。例えば、１つの回路に２つのローテータと２つのショートデコーダが含まれた形態でも良い。
命令は命令を合わせる体裁ではなくメモリ内で位置合わせされた形態で命令キャッシュ２１４、分岐ターゲットバッファ（ＢＴＢ）４５６、及び命令バッファ４０８に格納され、従って第１命令バイトの位置はわからない。バイトローテータ４３０、４３２、及び４３４が命令の第１バイトを見つけるのである。
マクロ命令デコーダ２３０も様々な命令の解読及び例外解読オペレーションを実行するが、その中には解読オペレーションの確認や異なるタイプの解読オペレーションの選択も含まれる。デコードオペレーションの間に実行される関数には、プリフィクスバイト処理、命令のエミュレーションのため、及び分岐ユニット２３４オペレーションのためのエミュレーションコードＲＯＭ２３２のベクタリング（vectoring：ベクトルアドレスの指定）のためのサポート、分岐ユニットのインタフェーシング、及びアドレス予測のリターンが含まれる。命令バイト及びこれに関連する情報に基づき、マクロ命令デコーダ２３０はＯｐクワドに対応する４つのオペレーションのグループオペレーション情報を発生する。マクロ命令デコーダ２３０も命令ベクタリングコントロール情報及びエミュレーションコードコントロール情報を発生する。マクロ命令デコーダ２３０はまた、スケジューラ２６０及びエミュレーションＲＯＭ２３２に接続された、Ｏｐクワド情報、命令ベクタリングコントロール情報、及びエミュレーションコードコントロール情報を出力する出力端を有する。マクロ命令デコーダ２３０は、スケジューラ２６０がＯｐクワドを受け取ることができない場合、またはエミュレーションコードＲＯＭ２３２からＯｐクワドを受け取っている間には、命令の解読は行わない。
マクロ命令デコーダ２３０は５つの個別のデコーダを有し、そこには３つの「ショート」デコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４が含まれ、これらは全体としてｘ８６命令セットの単純な命令のサブセット内で定義される最大３つの「ショート」解読オペレーションの命令を解読する役目を果たす。一般に、単純な命令は３つのオペレーションより少ない数のオペレーションに翻訳される命令である。ショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４は、それぞれ通常１または２個のオペレーションを発生するが、０オペレーションはプリフィクスデコードのような特定の場合において発生される。従って、これら３つのショートデコードオペレーションの場合には、１つのデコードタイトルにおいて２から６のオペレーションが生成される。３つのショートデコーダからのこの２乃至６のオペレーションは、次いでオペレーションパッキングロジック４３８により１つのＯｐクワドにパッキングされるが、これは４つのオペレーションの最大４つが有効だからである。詳述すると、３つのショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４は、それぞれ２つのオペレーションを解読しようとし、６つのオペレーションを発生する可能性がある。一度に発生されるオペレーションは４つだけなので、５つ以上のオペレーションが生成された場合には、ショートデコーダＳＤｅｃ２  ４１４からのオペレーションは無効にされる。３つのデコーダは、１つの「ロング」デコーダ４１６及び１つの「ベクタリング」デコーダ４１８を含む。このロングデコーダ４１６は、命令またはより複雑なアドレスモードフォームを有する命令の形態を解読し、これにより３つ以上のオペレーションが生成され、ショートデコード処理は使用できないことになる。ベクタリングデコーダ４１８は、ショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４、若しくはロングデコーダ４１６では取り扱うことのできない命令を取り扱う。ベクタリングデコーダ４１８は実際に命令を解読することはしないが、命令のエミュレーションのためにエミュレーションＲＯＭ２３２のある位置にベクタリングする。マクロ命令デコーダ２３０により検出される様々な例外条件も、ベクタリングデコードオペレーションの特別な形態として取り扱われる。ロングデコーダ４１６及びベクタリングデコーダ４１８のそれぞれは、それが作動させられたとき完全なＯｐクワドを発生する。ショートデコーダのＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４により生成された１つのＯｐクワドは、ロングデコーダ４１６及びベクタリングデコーダ４１８によって生成されたＯｐクワドと同じ形式を有するショートデコーダ及びロングデコーダのＯｐクワドはＯｐＳｅｑフィールドを含んでいない。マクロ命令デコーダ２３０はショートデコーダ４１０、４１２、及び４１４から形成されたＯｐクワドかロングレコーダ４１６またはベクタリングデコーダ４１８により生成されたＯｐクワドの何れかをマクロ命令デコーダ２３０が各デコードサイクルにおいて生成したＯｐクワドとして選択する。ショートデコーダオペレー���ョン、ロングデコーダオペレーション及びベクタリングデコーダオペレーションはそれぞれ個別に並行して機能を発揮するが、一度に使われる演算結果は１つのデコーダのものだけである。
ショートデコーダ４１０、４１２、及び４１４のそれぞれは、第１バイトがオペレーションコード（ｏｐｃｏｄｅ）バイトであり、命令がショートデコード命令であるという仮定のもとに最大７つの命令バイトを解読する。２つのオペレーション（Ｏｐｓ）が採用する有効ビットと共に生成される。有効アドレスサイズ、有効データサイズ、現在ｘ８６標準Ｂビット及び任意の指定変更オペランドセグメントレジスタに対する適当な装置は、これらのパラメータに依存するオペレーションの生成のために供給される。次に解読される「逐次」命令の論理アドレスは、ＣＡＬＬ命令に対するオペレーションの生成において使用するために供給される。ワードの列が引用符に配置され、これが逐次アドレスが通常指定する現在命令の直前の命令を指定しているが、「逐次」アドレスは、アドレス指定された位置にセットされ得るということを表していることに注意されたい。現在分岐予測は、条件転送コントロール命令に対するオペレーションの生成において使用するために供給される。ショートデコードは、転送コントロール命令（例えばＪｃｃ、ＬＯＯＰ、ＪＭＰ、ＣＡＬＬ）、無条件転送コントロール命令（例えばＪＭＰ、ＣＡＬＬ）、ＣＡＬＬ命令、プリフィクスバイト、ｃｃ依存ＲｅｇＯｐ、及び命令長がアドレスまたはデータサイズ依存であるか否かを表わす表示を含むコントロール信号を生成する。通常１または２つのオペレーションが有効であるがプリフィクスバイト及びＪＭＰデコード群は有効なＯｐを生成しない。無効なオペレーションはＯｐクワドを埋めるための効ＮＯＯＰオペレーションとして現れる。
第１ショートデコーダ４１０の生成は命令バイトの解読だけに基づいているわけではない。第１ショートデコーダ４１０は、デコードサイクルの前にデコードされるプリフィクスバイトの存在の判定も行う。プリフィクスバイトには、０Ｆ、アドレスサイズ指定変更、オペランドサイズ指定変更、６セグメント指定変更バイト、ＲＥＰ／ＲＥＰＥ、ＲＥＰＮＥ及びＬＯＣＫバイトが含まれる。各プリフィクスバイトは、定義された形で後続の命令デコードに影響を与える。プリフィクスバイトのカウント及び後続のプリフィクスバイトのカウントは配属時に累算され、第１ショートデコーダＳＤｅｃ０  ４１０及びロングデコーダ４１６に供給される。後続のプリフィクスバイトカウントは、配属される命令が長すぎないかどうかをチェックするために使用される。プリフィクスバイトカウント情報は、命令特異的な例外条件のタイプの存在をチェックする処理を含む後続の解読サイクルの制御を行うためにも使用される。プリフィクスカウントは、次の命令のプリフィクス及びＯｐｃｏｄｅバイトを解読する準備段階において、うまくいった非プリフィクスデコードサイクルのそれぞれの終わりにリセットまたは初期化される。プリフィクスカウントは、マクロ命令デコーダ２３０が分岐条件、命令ポインタ書き込み（Ｗ  ＩＰ）オペレーションのデコードの際にも再度初期化される。
プリフィクスバイトは、１バイトのショートデコード命令と同様に第１ショートデコーダ４１０により処理される。多くの場合、１回のデコードサイクルに１つのプリフィクスバイトが解読され、そのときプリフィクスバイトのデコードの後の全てのショートデコードを無効にすることにより容易にされる条件の下でこの処理は行われる。実行アドレスサイズ、データサイズ、オペランドセグメントレジスタ値、及び現在Ｂビットは、第１ショートデコーダ４１０に供給されるが、変更するＯｐｃｏｄｅと共に解読を行うことができる。
アドレスサイズプリフィクスは、生成されるオペレーションが有効アドレスサイズに依存している命令の解読、及びｍｏｄｒ／ｍ命令の命令長及びアドレス指定方式の解読の双方のための後続の命令の解読に影響を与える。デフォルトのアドレスサイズは、現在指定されているＤビットにより特定されるが、このＤビットは、１または２以上のアドレスサイズプリフィクスの指定により効果的に切り替えられる。
オペランドサイズプリフィクスも生成されるオペレーションが有効データサイズに依存している命令の配属及び命令長の解読の双方のための後続の命令の解読に影響を与える。デフォルトのオペランドサイズは、現在特定されたｘ８６標準Ｄビットにより特定されるが、このＤビットは１または２以上のオペランドサイズプリフィクスの発生により効果的に切り替えられる。
セグメント指定変更プリフィクスはロード／ストアオペレーション（ＬｄＳｔＯｐｓ）が両方の有効オペランドセグメントに依存している場合にのみ後続の命令のデコードに影響を与える。デフォルトのセグメントは関連する一般的なアドレス指定方式によりＤＳかＳＳの何れかであり、最終セグメント指定変更プリフィクスにより指定されたセグメントにより置き換えられる。
ＲＥＰ／ＲＥＰＥ及びＲＥＰＮＥプリフィクスは、後続の命令の解読に影響を与えない。エミュレーションコードＲＯＭ２３２ではなくマクロ命令デコーダ２３０により命令が解読される場合は、任意の後続のＲＥＰプリフィクスは無視される。しかし、命令がベクタリングされる場合、ベクトルアドレスの発生は、いくつかの場合に修飾される。詳述すると、ストリング命令または特定の隣接したｏｐｃｏｄｅがベクタリングされると、１または２以上のＲＥＰプリフィクスの発生の指定、及び最終ＲＥＰプリフィクスのところにきたことの表示がベクトルアドレスに含まれることになる。他の全ての命令に対しては、ベクトルアドレスは修飾されずＲＥＰプリフィクスは無視される。
ＬＯＣＫプリフィクスはプリフィクスバイトの解読の場合を覗いて全てのショートデコーディング及びロングデコーディングを止めて、調整的に後続のベクタリングされる命令に進ませる。この後続の命令のベクトルデコードサイクルが達成したとき、後続の命令がプリフィクスがないかぎり、ｏｐｃｏｄｅバイトは、命令が「ロック可能な」命令のサブセットの中に入っているようにチェックされる。この命令がロック可能でない場合には、例外条件が認識され、ベクタリングデコーダ４１８により生成されたベクトルアドレスが例外エントリポイントアドレスにより置き換えられる。
第２及び第３ショートデコーダ４１２及び４１４によりデコードされた命令は、プリフィクスバイトを含んでおらず、デコーダ４１２及び４１４はアドレスサイズ、データサイズ、及びオペランドセグメントレジスタ値を推定する。
一般に、３つのショートデコーダは４つまたはそれ以下のオペレーションを生成するが、これは３つの連続したショートデコードが、必ずしも行われず、命令がただ１つのオペレーションにショートデコードされることが多いからである。しかし、仮に４つ以上の有効オペレーションが生成されることがあり、この場合にはオペレーションパッキングロジック４３８が、第３ショートデコーダ４１４を動作を止めるか無効なものとし、ただ２つの命令だけがうまく解読され、最大４つのオペレーションがＯｐクワドに確認するために生成されることになる。
第１ショートデコーダ４１０が解読をうまく行えない場合、第２及び第３ショートデコーダ４１２及び４１４の動作が無効なものとされる。第２ショートデコーダ４１２がうまく解読を行えない場合、第３ショートデコーダ４１４の機能が無効化される。第１ショートデコーダが無効な場合でも、デコードサイクルはロングまたはベクタリングデコードサイクルとなる。一般に、マクロ命令デコーダ２３０が１または２以上のショートデコードを行うとし、このようなショートデコーダがうまく行われなかった場合には、１つのロングデコードを行おうとする。このロングデコードがうまく行われなかった場合には、マクロ命令デコーダ２３０がベクタリングデコードを実行する。複数の条件によりショートデコーダ４１０、４１２及び４１４が無効なものとされる。多くの場合、ショートデコードは命令オペレーションコード（ｏｐｃｏｄｅ）またはｍｏｄｒ／ｍ命令のアドレス指定方式が定義されたショートデコードまたは「単純な」命令のサブセットの中に入っていない場合にはショートデコードが無効化される。この条件は、一般にショートデコード命令を２またはそれ以下のオペレーションを生成するオペレーションに限定する。ショートデコードは、解読される命令のための命令バッファ４０８に格納されたバイトの中に無効なものがある場合にも無効化される。また、「ｃｃ依存」オペレーション、即ちステータスフラグに依存するオペレーションは、第１ショートデコーダ４１０によってのみ形成され、これらのオペレーション後に「．ｃｃ」、「ＲｅｇＯｐｓ」がこないようにする。ショートデコードはショートデコードの直前に転送コントロール命令のデコードがあるときどの方向に制御が進むかに関わらず第２の２つの連続するショートデコードのために無効化される。ショートデコードは第１ショートデコードがプリフィクスバイトのレコードであった場合第２の２つり連続するショートデコードのために無効化される。一般に、プリフィクスコードまたは転送コントロールコードは１つのデコードサイクルにおいて更にデコード処理を行うことを止める。
更に、１６個以下の命令バイトがマクロ命令デコーダ２３０によって使用されるが、これは命令バッファ４０８が一度に１６バイトしか保持できないからである。また、最大４つのオペレーションが１つのＯｐクワドにパッキングされる。これらの制約は、第３ショートデコーダ４１４にしか影響を与えない。というのはショートデコードされる命令のそれぞれの長さは、最大７バイトで、４を越えるオペレーションが生成されるのは第３ショートデコーダ４１４だけだからである。
関連する制約条件として、現在Ｄビット値は１６ビットアドレス及びデータサイズのデフォルトを指定する場合、アドレスかデータまたは両方に依存する長さを有する命令は、第１ショートデコーダ４１０しかできない。というのは変更情報が間違っている可能性があるからである。また、多数の命令解読ができないとき、第１ショートデコーダのみが命令及びプリフィクスバイトの解読をうまく行うことができるようにされる。
妥当性検査はマクロ命令デコーダ２３０におけるショートデコーダ妥当性検査ロジック（図示せず）によって制御され、ショートデコーダ４１０、４１２、及び４１４と無関係である。しかし、ショートデコーダ４１０、４１２、及び４１４が解読されるオペレーションの数に応じて０、１または２個の有効ビットを決定しない。これらの有効ビット、３つのショートデコーダ４１０、４１２、及び４１４に対して前部で３つの有効ビットは、オペレーションパッキングロジック４３８がどのオペレーションがＯｐクワドにパッキングされたか否かを判定し、無効オペレーションをＮＯＯＰ（ノーオペレーション）オペレーションとして現れるために用いられる。このオペレーションパッキングロジック４３８は、ショートデコーダ妥当性検査情報がなくても動作する。というのは、有効ショートデコード及びそれに関連するオペレーションは、他の有効ショートデコード及び関連するオペレーションにのみ先行しているからである。
ショートデコーダ４１０、４１２、及び４１４は、様々な特別なｏｐｃｏｄｅまたはｍｏｄｒ／ｍアドレス指定方式のデコードを表す複数の信号も発生する。これらの信号は、ある種の命令の形態が命令デコーダ２２０により現在デコードされているか否かを示す。これらの信号は、ショートデコード妥当性検査ロジックがショートデコード妥当性の状態を取り扱うために使用される。
命令バッファ４０１に位置合わせされていない形態で格納されている命令バイトは、バイトローテータ４３０、４３２及び４３４により命令バイトはデコーダ４１０〜４１８に転送されるときに位置合わせされる。第１ショートデコーダＳＤｅｃ０  ４１０、ロングデコーダ４１０及びベクタリングデコーダ４１８は、第１バイトローテータ４３０を共通に使用する。第２及び第３ショートデコーダをＳＤｅｃ１  ４１２及びＳＤｅｃ２  ４１４は、それぞれ第２バイトローテータ４３４を使用する。各デコードサイクルの間、３つのショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４は、３つの独立して動作する並列に設けられたバイトローテータ４３０、４３２及び４３４を用いて最も効果的にショートデコードオペレーションである解読処理を行う。命令バッファ４０８の適切なバイトのバイトローテータ４３０、４３２、及び４３４によるデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４への多重化は概念的には変更命令解読オペレーションに依存しているが、命令長先読みロジック４３６は変更ビットを使用して各デコーダが概ね動じ並行的に動作できるようにする。
ロングデコーダ４１６及びベクタリングデコーダ４１８は、協働して１１個の命令バイトの２つの同時に並行的なデコードを実行し、第１バイトをｏｐｃｏｄｅバイトとして使用し、ロング命令デコーダＯｐクワドまたはベクタリングデコードＯｐクワドの何れかを生成する。ロングデコーダ４１６及びベクタリングデコーダ４１８によって分析された情報には、実行アドレスサイズ、実効データサイズ、現在Ｂビット及びＤＦビット、及び指定変更オペランドセグメントレジスタ、及び次にデコードされる「後続」マーケット命令のロングアドレスが含まれる。ロングデコーダ４１６及びベクタリングデコーダ４１８は、デコード信号を発生するが、このデコード信号には、変更プリフィクスビットを覗いた命令長、命令がロングデコードサブセットの範囲に入っているか否かを指定する用法、ＲＥＴ命令、及び実行オペランドセグメントレジスタなどがあり、信号の発生にあたってはｍｏｄｒ／ｍアドレス指定方式＋任意のセグメントオーバーライドにより定義されたデフォルトに基づいている。
ショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、ＳＤｅｃ２  ４１４の何れもがショート命令をうまくデコードできないデコードサイクルにおいては、マクロ命令デコーダ２３０はロングデコーダ４１０を用いてロングデコードを実行しようとする。ロングデコードが実行できない場合は、ベクタリングデコードが実行される。実施例によっては、ロングデコーダ４１６及びベクタリングデコーダ４１８は概念的に識別され独立したデコーダでありロングデコーダ４１６及びベクタリングデコーダ４１８とショートレコーダ４１０が、４１２及び４１４とが区別され独立しているのと同様である。しかし、物理的にはロングデコーダ４１６及びベクタリングデコーダ４１８は多くの論理回路を共有しており、類似したＯｐクワドを出力する。ロングデコーダ４１６によって解読される命令は、通常命令のショートデコードサブセットの中に含まれているが、アドレス指定方式の制約、例えば命令長が７バイトより大きいため、またはアドレスが変位を取り扱うための第３のオペレーションの生成に必要な大きな変位を有しているためにショートデコーダにより解読され得ない点が異なっている。ロングデコーダ４１６は、ショートデコードサブセットではないが、ハードウェアによる解読を補償するだけの十分な共通性を有している追加のｍｏｄｒ／ｍ命令の解読も行う。ロングデコーダ４１６により使用または解読するための命令バイトは第１バイトローテータ４３０により命令バッファ４０８から供給され、同じ命令マルチプレクサが、第１ショートデコーダＳＤｅｃ０  ４１０に命令バイトを供給する。しかし、第１ショートデコーダＳＤｅｃ０  ４１０は７つのバイトのみを受け取る一方、ロングデコーダ４１６は、プリフィクスバイトを除いたｍｏｄｒ／ｍ命令の最大長さに対応する１１個の連続した命令バイトを受け取ることができる。従って、第１バイトローテータ４３０は、１１バイトの幅を有しているが、初めの７バイトは第１ショートデコーダＳＤｅｃ０  ４１０に接続されている。ロングデコーダ４１６は、１度に１つの命令しか解読せず、命令バッファ４０８内の関連するプリデコード情報は使用されず、通常無効である。
第１バイトローテータ４３０の第１バイトは、ｏｐｃｏｄｅバイトとして完全にデコードされ、ｍｏｄｒ／ｍ命令の場合には、第２命令バイト及び場合によっては第３命令バイトも、ｍｏｄｒ／ｍ及びｓｉｂバイトとしてそれぞれ完全に解読される。０Ｆプリフィクスはｏｐｃｏｄｅバイトの解読の際に存在すると考えられる。この０Ｆプリフィクスバイトは、ショートデコード命令の全てが非０Ｆまたは「１バイト」ｏｐｃｏｄｅであることから、全てのショートデコーディングを抑止する。全てのプリフィクスバイトは「１バイト」ｏｐｃｏｄｅ空間内に存在しているため、０Ｆプリフィクスの解読により、次のデコードサイクルは２バイトｏｐｃｏｄｅ命令、例えばロングコードまたはベクタリングデコード命令となる。ｍｏｄｒ／ｍ及びｓｉｂバイトの解読に基づくオペレーションを発生することに加えて、第１バイトローテータ４３０は、様々なプログラムカウンタにより使用するための命令長の設定も行うが、このような命令はロングデコーダを抑止または無効化するためのｍｏｄｒ／ｍ命令であるかの判定、及びこの命令がオペレーションコード（ｏｐｃｏｄｅ）のロングデコードサブセットの命令であるか否かの判定も行う。ロングデコーダ４１６は、常に４つのオペレーションを生成し、ショートデコーダ４１０、４１２、及び４１４のように、ＯｐＳｅｑフィールドを排除したエミュレーションコード風Ｏｐクワドの形態でオペレーションを提供する。ロングデコーダ４１６は、比較的単純なｍｏｄｒ／ｍ命令のみを取り扱う。ロングデコードＯｐクワドは、第３オペレーションがロードオペレーション（ＬｄＯｐ）またはストアオペレーション（ＳｔＯｐ）の何れかである点、及び第４オペレータがＲｅｇＯｐがＮＯＯＰの何れかであるという点のみが異なっている２つの可能な形態を有する。第１ロングデコードＯｐクワドは以下のようなフォームを有する。
0003714962.tif 000002
第２ロングロングデコードＯｐクワドは以下のようなフォームを有する。
0003714962.tif 000003
＠（＜ｇａｍ＞）アドレス指定は、命令のｍｏｄｒ／ｍ及び／またはｓｉｂバイトによって指定される、例えば＠（ＡＸ＋ＢＸ＊４＋ＬＤ）に対応するアドレス計算を表す。＜ｉｍｍ３２＞及び＜ｄｉｓｐ３２＞値は解読された命令がこのような値を含むとき即値及び変位命令バイトを含む４つのバイト値である。
第１ショートデコーダ４１０に類似するロングデコーダ４１６は、変更デコードサイクルの間にショートデコーダにより解読されたプリフィクスバイトの存在を考慮に入れてオペレーションを生成する。実行アドレスサイズ、データサイズ、オペランドセグメントレジスタ値、及び現在Ｂビットは、ロングデコーダ４１６に供給され、オペレーションを生成するのに用いられる。ロングデコーダ４１６によって生成される最終オペレーションには間接サイズまたはセグメントレジスタスペースは含まれていない。
ロングデコードがうまく行えない条件はごくわずかしかない。このような条件の１つは、命令オペレーションコード（ｏｐｃｏｄｅ）が、命令のロングデコードサブセットに含まれていない場合である。このような条件の第２のものは、解読された命令に対する命令バッファ４０８バイトの中に有効でないものがある場合である。
ベクタリングデコーダ４１８は、ショートデコーダかロングデコーダ４１６によって解読されない命令を取り扱う。ベクタリングデコードは、ショートデコーディングもロングデコーディングも不可能で、十分な有効バイトが使用できない場合のデフォルトの処理である。通常、ベクタリングデコーダ４１８により処理される命令は、ショートデコードまたはロングデコードサブセットの何れにも含まれないがデコーディングが不可能だったり、例外条件の検出のような他の条件によっても生ずる。通常のオペレーションの間、非ショート命令及び非ロング命令のみがベクタリングされる。しかし、全ての命令がベクタリングされてもよい。定義されていないｏｐｃｏｄｅは常にベクタリングされる。プリフィクスバイトのみは常に解読される。プリフィクスバイトは、常にショートデコーダ４１０、４１２、及び４１４によって解読される。
デコードサイクルの間に例外条件が検出された場合には、ベクタリングデコードが調整され、通常解読された命令の命令バイトの有効性とは無関係に他のデコードの形態をオーバーライドする。検出された例外条件がベクタリングデコードサイクルを調整するとき、生成されたＯｐクワドが定義されておらず、スケジューラ２６０に対して提供されるＯｐクワド有効ビットは強制的に０にされる。Ｏｐクワド有効ビットは、スケジューラ２６０にそこにロードされるオペレーションがないことを伝える。この結果、Ｏｐクワドは例外ベクタリングデコードサイクルの間にはスケジューラ２６０にＯｐクワドはロードされない。
ベクタリングデコードを抑止したり、無効化する条件はほとんどない。このような条件の１つは命令バッファ４０にあるバイトの中に有効でないものがある場合である。
命令がベクタリングされたとき、制御はエミュレーションコードエントリポイントに移される。エミュレーションコードエントリポイントは内部エミュレーションコードＲＯＭ２３２か外部エミュレーションコードＲＡＭ２３６の何れかである。エントリポイントアドレスから始まるエミュレーションコードはそれをエミュレートするか、適当な例外処理を初期化する。
ベクタリングデコードサイクルはマクロ命令デコーダ２３０デコードサイクルと全く同じものと考えることができる。ベクタリングデコードの場合、マクロ命令デコーダ２３０は、ベクタリングクワドを生成し、かつエミュレーションコードアドレスを発生してエミュレーションコードＲＯＭ２３２に入れる。最初のベクタリングデコードサイクルの後、マクロ命令デコーダ２３０は、命令がエミュレーションコードＲＯＭ２３２またはエミュレーションコードＲＡＭ２３６で生成されている間、エミュレーション（ＥＲＥＴ）ＯｐＳｅｑからのリターンが生ずるまでイナクティブ状態に維持される。エミュレーションからの戻り（ＥＲＥＴ）の連続した動作は、マクロ命令デコーダ２３０による解読に戻る。初めのベクタリングデコードサイクルの後のデコードサイクルの間、マクロ命令デコーダ２３０は稼動していない状態にされるが、継続的に次の「連続した」命令の解読を行おうとしており、即ちマクロ命令デコーダがＥＲＥＴが発生するまで反復的に無効化されるデコードサイクルを有する。つまり次の「連続的」命令の解読をするためのデフォルトを待っているのである。
ベクタリングデコーダ４１８を用いてデコードするための命令バイトは第１バイトローテータ４３０により命令バッファ４０８に供給されるが、この第１バイトローテータ４３０は第１ショートデコーダＳＤｅｃ０  ４１０及びロングデコーダ４１６に命令バイトを供給する同じ命令マルチプレクサである。ベクタリングデコーダ４１８は、最大１１の連続した命令バイトを受け取るが、この１１の命令バイトはプリフィクスバイトを除いたｍｏｄｒ／ｍ命令の最大長さに一致する。従って、第１バイトローテータ４３０に最大の１１バイトの幅は、ロングデコーダ４１６ベクタリングデコーダ４１の双方に分配される。命令バッファ４０８内のプレデコード情報をベクタリングデコーダ４１８は使用しない。
ロングデコーダ４１６の場合には、第１バイトローテータ４３０の第１バイトはＯｐコードバイトとして完全に解読され、ｍｏｄｒ／ｍ命令の場合においては、第２命令バイト及び場合によっては第３がそれぞれｍｏｄｒ／ｍ及びｓｉｂバイトとして完全に解読される。ベクタリングデコーダ４１８は変更するデコードサイクルの間にショートデコーダにより解読されたプリフィクスバイトの存在を考慮に入れてオペレーションを発生する。ｏｐｃｏｄｅバイトの解読においては０Ｆプリフィクスが存在するものと考えられる。ｍｏｄｒ／ｍ及びｓｉｂバイトの解読に基づいてオペレーションを生成することに加えて、第１バイトローテータ４３０は、様々なプログラムカウンタにより使用される命令の長さ、その命令がロングレコーダを抑止または無効化するｍｏｆｒ／ｍ命令であるか否か、及びその命令かオペレーション（ｏｐｃｏｄｅ）のロングデコードサブセットの中の命令であるか否かを判定することも行う。そうでない場合には、ベクタリングデコーダは開始されない。実行アドレスサイズ、データサイズ、及びオペランドセグメントレジスタ値は、ベクタリングデコーダ４１３に供給され、オペレーションを生成するために使用される。ベクタリングデコーダ４１８によって生成される最終オペレーションの中には間接サイズまたはセグメントレジスタスペースは含まれない。
ベクタリングデコードサイクルの間、ベクタリングデコーダ４１８はベクタリングＯｐクワドを生成し、エミュレーションコードエントリカウントまたはベクトルアドレスを生成し、かつエミュレーション環境を初期化する。ベクタリングＯｐクワドは、エミュレーション環境スクラッチレジスタを初期化すべく様々な情報を渡すように指定されている。
エミュレーションコードエントリポイントまたはベクトルアドレスの値が、例えばｏｐｃｏｄｅ及びｍｏｄｒ／ｍバイトのような第１及び第２命令バイト＋０Ｆプリフィクス、ＲＥＰプリフィクス等の存在のような他の用法のデコードに基づいている。例外条件により行われるベクタリングの場合には、エントリポイントまたはベクトルアドレスは、単純なコード化された例外指定子に基づいている。
エミュレーション環境は、環境依存性の解決のために格納される。全てのショートデコーダ４１０、４１２及び４１４及びロングデコーダ４１６は、直接環境依存性、例えば実行アドレス及びデータサイズ依存性を、オペレーションが生成され、これらのオペレーションが間接サイズまたはレジスタ指定子を含んでいないときに解決する。しかし、エミュレーションコードオペレーションは、エミュレートされる命令の特定のインスタンスの実行アドレス及びデータサイズ値のようなものを参照する。エミュレーション環境は、ベクタリングされる特定の命令に関する追加の情報を使用するために使用される。この情報には、汎用レジスタの番号、実行アドレス及びデータサイズ、実行オペランドセグメントレジスタ番号、プリフィクスバイトカウント、及びＬＯＣＫ歩プリフィクスの存在の記録等がある。エミュレーション環境は、ｍｏｄｒ／ｍ  ｒｅｇフィールドもロードし、ｍｏｄｒ／ｍ  ｒｇｍフィールドは、Ｒｅｇ及びＲｅｇｍレジスタにロードされる。エミュレーション環境は、平行したベクタリングデコードサイクルの終わりに初期化され、エミュレーションコードによる命令のエミュレーションの間ＥＲＥＴコードが発生するまで初期状態に維持される。
ベクタリングデコーダ４１８は４つのフォームの１つでＯｐクワドの４つのオペレーションを生成する。全ての４つのフォームには、３つのＬＩＭＭオペレーションが含まれる。４つのフォームはＬＩＭＭオペレーションにおける即値及び第３オペレーションがＬＥＡオペレーションであるかＮＯＯＰオペレーションであるかという点のみが異なっている。
第１ベクタリングデコードＯｐクワドは以下のようなフォームを有する。
0003714962.tif 000004
第２ベクタリングデコードＯｐクワドは以下のようなフォームを有する。
0003714962.tif 000005
第３ベクタリングデコードＯｐクワドは以下のようなフォームを有する。
0003714962.tif 000006
第４ベクタリングデコードＯｐクワドは以下のようなフォームを有する。
0003714962.tif 000007
ベクタリングＯｐクワドの第１の２つのフォームは、大抵のｏｐｃｏｄｅに適用される。第１フォームはメモリ参照ｍｏｄｒ／ｍ命令のために使用されるが、このメモリ参照ｍｏｄｒ／ｍ命令に対して、ＬＥＡオペレーションが用いられて汎用アドレス指定方式の有効オペランドアドレスが計算され、これがスクラッチレジスタに入れられる。第２フォームは非ｍｏｄｒ／ｍ及びレジスタ参照ｍｏｄｒ／ｍ命令のために使用される。第２フォームを有する命令の場合には、アドレスを計算する必要はないが、＜ｉｍｍ３２＞及び＜ｄｉｓｐ３２＞値が、ｏｐｃｏｄｅバイトの後に命令バイトを含むときそれまでと同様に使用することができる。ベクタリングＯｐクワドの第３フォームは、全てのストリング命令＋いくつかの近くにある非ｍｏｄｒ／ｍ命令のために用いられる。ベクタリングＯｐクワドの第４フォームは、特別なベクタリング及び近くのＲＥＴ命令のために必要なエミュレーションをサポートしている。
マクロ命令デコーダ２３０が、４つのプログラムカウンタを有し、この中には３つのデコードプログラムカウンタ４２０、４２２、及び４２４と、１つの設置プログラムカウンタ４２６が含まれる。第１デコードプログラムカウンタは、命令ＰＣ４２０と称され、デコードされる現在命令か、現在解読されていない命令がない場合にはデコードされる次の命令のプリフィクスバイトを含む第１バイトの論理アドレスである。デコードオペレーションが多数の命令デコードである場合には、命令ＰＣ４２０はデコードされる多数の命令の第１命令を指定する。命令ＰＣ４２０は命令のアーキテクチュラルアドレスに一致し、例外処理用の命令フォルトプログラムカウンタを達成するために用いられる。命令ＰＣ４２０は、スケジューラ２６０に対応するＯｐクワドを渡し、例外処理中にセーブされる命令誤りプログラムカウンタを生成するためにオペレーションコミットユニット（ＯＣＵ）（第９図の９７０参照）により用いられる。Ｏｐクワドがマクロ命令デコーダ２３０により生成されたとき、現在命令ＰＣ４２０値は、Ｏｐクワドにタグを付けられ、スケジューラ２６０にＯｐクワドエントリをＯｐクワドと共にロードする。第２デコードプログラムカウンタは、論理デコードＰＣ４２２と称され、デコードされる次の命令バイトの論理アドレス及びＯｐコードバイトまたはプリフィクスバイトの何れかのアドレスである。第３デコードプログラムカウンタはリニアデコードＰＣ４２４と称され、デコードされる次の命令バイトのリニアアドレス及びＯｐコードバイトかプリフィクスバイトの何れかのアドレスである。論理デコードＰＣ４２２及びリニアデコードＰＣ４２４は同じ命令バイトを指定する。リニアデコードＰＣ４２４は第１バイトローテータ４３０に現在存在する命令バイトのアドレスを生成する。
マクロ命令デコーダ２３０における様々なデコーダは、プリフィクスが概ね１つのバイト命令の１つとして取り扱われるようにプリフィクスバイトか、または命令全体からプリフィクスを引いたものを用いることがデコーディングに基づいて機能を発揮する。従って、命令とプリフィクスバイトデコードとのアドレス境界は、命令環境そのものより流用性が高い。つまり、各デコードサイクルのはじめに、次にデコードされる命令バイトは必ずしも命令の真の始まりでなくても良いということになる。
デコードサイクルの初めに、論理デコードＰＣ４２２及びリニアデコードＰＣ４２４は、次にデコードされる命令の論理アドレス及びリニアアドレス、命令またはプリフィクスバイトの何れかを含む。リニアデコードＰＣ４２４は、命令バッファ４０８にアクセスするためのデコード処理の間に用いられる主なプログラムカウンタ値である。リニアデコードＰＣ４２４は、そのサイクルのデコードの開始点を表し、具体的には命令バッファ４０８から第１ショートデコーダ４１０及びロングデコーダ４１６及びベクタリングデコーダ４１８へのバイトを供給するバイトローテータを制御する。リニアデコードＰＣ４２４は、任意のショートデコード命令またはプリフィクスバイトの命令アドレスの設定のための参照点でもあって、バイトローテータが第２ショートデコーダ及び第３ショートデコーダ４１４へ供給を行うための制御信号を発生する。
リニアデコードＰＣ４２４は、新たな命令の第１デコードサイクルの間にブレークポイントマッチのチェックを行い、プリフィクスバイトがデコードされる前に、成功した命令デコードサイクルの間マクロ命令デコーダ２３０によるコードセグメントのオーバーランの存在をチェックする役目をを二次的に果たす。
論理デコードＰＣ４２２は、ＣＡＬＬ命令を含むプログラムカウンタに関連する転送コントロール命令のために用いられる。論理デコードＰＣ４２２は、ＰＣ相対的コントロール命令の定義値と合計されて分岐ターゲットアドレスを計算する分岐ユニット２３４に供給される。論理デコードＰＣ４２２は、命令のエミュレーションコードのエミュレーションもサポートしている。次の逐次論理デコードプログラムカウンタ（ＰＣ）４２２は、汎用のベクタリングＯｐクワドにより一次レジスタに格納されたコードのエミュレーションに使用できる。例えば、次の逐次論理デコードＰＣ４２２は、ＣＡＬＬ命令をスタックに押し込むリターンアドレスを供給するために用いられる。
次の論理デコードＰＣ４２８は、次の逐次論理デコードプログラムカウンタ値に設定され、論理デコードＰＣ４２２を越える機能を発揮する。次の論理デコードＰＣ４２８は、マクロ命令デコーダ２３０によりデコードされるＣＡＬＬ命令のためのリターンアドレスを直接供給する。次の論理デコードＰＣ４２８は、ベクタリングＯｐクワド内のオペレーションの１つを介してベクタリングデコードサイクルの間にエミュレーションコードロジックにも渡される。
デコードサイクルの間、リニアデコードＰＣ４２４は、デコードされる次の命令バイトを指定する。リニアデコードＰＣ４２４の４つの最下位ビットは、命令バッファ４０８内の第１命令バイトを指定し、これにより命令キャッシュ２１４における第１の及び後続の命令バイトに位置合わせするのに必要なバイトローテーションの大きさを示すことになる。第１バイトローテータ４３０は命令マルチプレクサであり、詳述するとリニアデコードＰＣ４２４の大きさよりオフセットされた命令バッファ４０８内のバイトにアクセスするための１６：１バイトマルチプレクサである。第１バイトローテータ４３０は、第１ショートデコーダＳＤｅｃ０  ４１０のための７バイトの幅を有し、ロングデコーダ４１６及びベクタリングデコーダ４１８用の１１バイトの幅を有する。第１ショートデコーダＳＤｅｃ０  ４１０、ロングデコーダ４１６、及びベクタリングデコーダ４１８における共通のロジックは、第１命令のための第１命令長値Ｉｌｅｎ０を有する。第２及び第３バイトローテータ４３２及び４３４は、７バイトの幅の命令マルチプレクサであり、詳述すると、１６：１バイトのマルチプレクサである。第２バイトローテータ４３２は、リニアデコードＰＣ４２４の大きさと第１命令長Ｉｌｅｎ０（モジュロ１６）の分だけオフセットされた命令バッファ４０８内のバイトにアクセスする。第２ショートデコーダＳＤｅｃ０  ４１２におけるロジックは、第２命令用の第２命令長値Ｉｌｅｎ１を生成する。第３バイトローテータ４３４は、リニアデコードＰＣ４２４の大きさ及び第１及び第２命令長Ｉｌｅｎ０及びＩｌｅｎ１の間の分だけオフセットされた命令バッファ４０８内のバイトにアクセスする。バイトローテータ４３０、４３２、及び４３４は、命令バイトを多重化するプリデコードビットは多重化しない。バイトローテータ４３０、４３２、及び４３４は、第１Ｏｐコードバイトに関連するプリデコードビットを含むプリデコード情報を用い制御されるか、または第１命令の第１バイトが第２ローテータ４３２を直接コントロールする。第２命令の第１バイトは第３のローテータ４３４を直接制御する。プリデコードコードのそれぞれは、命令長を暗示するが、次のローテータに与えられるものはポインタである。このポインタは現在の命令でのプログラムカウンタの４つの最下位ビット＋長さを用いて誘導され次の命令のプログラムカウンタが得られる。
マクロ命令デコーダ２３０における全てのプログラムカウンタ４２０、４２２、４２４、及び４２８は、命令及び例外処理の間に初期化される。複数の信号源がこの初期化を開始させる。第１に、分岐ユニット２３４がＰＣ相対的転送コントロール命令がデコードされ、予測が行われたときターゲット分岐アドレスを供給する。第２に、リターンアドレススタック（図示せず）が近くのＲＥＴ命令がデコードされたとき予測リターンターゲットアドレスを供給する。第３に、スケジューラ２６０がマクロ命令デコーダ２３０がプロセッサ１２０内の他の回路と共に誤り予測分岐条件（ＢＲＣＯＮＤ）オペレーションによってスケジューラ２６０により再始動させられたとき正しい別の分岐アドレスを生成する。第４に、レジスタユニット２４４、即ち主たるＲｅｇＯｐ実行ユニットがＷＲＩＰ  ＲｅｇＯｐが実行されたとき新たなデコードアドレスを供給する。ＷＲＩＰ  ＲｅｇＯｐ実行により、エミュレーションコードが明示的に命令の解読を転送することが可能となる。全ての４つの場合において、論理アドレスは３つのデコードプログラムカウンタ４２０、４２２、及び４２４を同時に再初期化するために供給され用いられる。リニアデコードＰＣ４２４の場合には、リニアアドレス値は、供給された論理アドレスに現在のコードセグメントベースアドレスを加え、リニアデコードＰＣ４２４にローディングするための対応するリニアアドレスを生成することによりリニアアドレス値が供給される。論理アドレスは現在命令ＰＣ４２０及び論理デコードＰＣ４２２にロードされる。次の再初期化までの各デコードサイクルにおいては、マクロ命令デコーダ２３０は、命令バイトがマクロ命令デコーダ２３０の各デコーダによりうまく解読され利用されたとき、現在命令ＰＣ４２０、論理デコードＰＣ４２２、及びリニアデコードＰＣ４２４を逐次同期を取りつつ更新する。
命令長Ｉｌｅｎ０及びＩｌｅｎ１の生成は逐次行われる。並行オペレーションをエミュレートすることによってこの逐次処理をより速めるべく、命令長ルックアヘッドロジック４３６が命令バッファ４０８における各命令バイトの長さを特定する４つのプリデコードビットを用いて命令長Ｉｌｅｎ０及びＩｌｅｎ１を素早く判定する。命令バッファ４０８の第１命令バイトのｏｐｃｏｄｅバイト（第１命令バイトは第１ショートデコーダＳＤｅｃ０  ４１０に対して多量化される）に関連するプリデコードビットは、命令バッファ４０８の第２命令バイトのｏｐｃｏｄｅバイトのバイトインデックスを直接指定する。命令バッファ４０８の第２命令バイトのｏｐｃｏｄｅバイト（第２命令バイトは第２ショートデコードＳＤｅｃ１  ４１２に多重化される）に関連するプリデコードビットは、命令バッファ４０８の第３命令バイトのｏｐｃｏｄｅバイトのバイトインデックスを直接指定する。命令長ルックアヘッドロジック４３６は、命令バッファ４０８の第２及び第３命令バイトのｏｐｃｏｄｅバイトのバイトインデックスを生成するための２つの４ビット幅の１６：１マルチプレクサを備えている。
命令ルックアヘッドロジック４３６もプリデコードビットの組の有効性を判定するためのロジックを備えている。プリデコードビットは、関連する命令バイトが有効ショートデコード命令の始まりのバイトであるとき有効である。具体的には、命令ルックアヘッドロジック４３６が命令バッファ４０８の所定のバイトに対するプリデコードビットが同じバイトを指定しているか否か、即ちこのバイトにおいて命令がスタートするように０の命令長を有しているか否かを判定する。そのような場合には、このバイトはショートデコード命令の始まりではなく、ショートデコードはこれ以上行うことができない。そうでない場合には、ロードデコードオペレーションが可能であり、プリデコードビットは次の命令の開始点を指定している。
主メモリ１３０と命令キャッシュ２１４との間に接続されたプリデコーダ２７０は、８つのロジックユニットを有し、それぞれのロジックユニットはこれに関連する命令バイト（）の検証、及び場合によってはこれに続く１または２以上の命令バイトを検証する。第１命令バイトがｏｐｃｏｄｅバイトとして解読され、第２及び第３命令バイトがｍｏｄｒ／ｍ及びｓｉｂバイトとして解読される（ｏｐｃｏｄｅバイトがｍｏｄｒ／ｍ  ｏｐｃｏｄｅである場合）。これらの３つのバイトに基づいて、命令の長さ及びその命令がショート命令に分類されるか否かが判定される。命令の長さに１６個のロジックユニットに関連するロジックユニットの位置に対応する４ビットの一定の値が加えられ、命令長ルックアヘッドロジック４３６によって使用されるバイトインデックスが決定される。このバイトインデックスは、命令がショート命令の基準内に収まっている場合にはプリデコードビットの値として設定される。命令バイトはショート命令基準を満たさない場合には、プリデコードビットは、命令長０を表すまでインクリメントされずに、１６個のロジックユニットの位置に対応する４ビットの一定値に設定される。命令長０は、この命令がショート命令でないことを示している。プリデコードビットは、４ビットから３に切り捨てられる。これはショートデコード命令が７バイト未満の長さであり、最上位ビットが、３つのプリデコードビット及び関連する固定バイトアドレスから容易に再構成されるからである。３つから４つへのプリデコードビットの拡張は、命令キャッシュ２１４の１６個の命令バイトに対応する１６個のロジックユニットを有するプリデコード拡張ロジック４４０により実行される。プリデコード拡張ロジック４４０の１６個のロジックユニットは、命令バイトが命令キャッシュ２１４から命令バッファ４０８に設置されるとき、プリデコードビットに対して個別に同時並行的に動作する。
プリデコードされ、かつ命令キャッシュ２１４にロードされた３２命令バイトの最後の２つは、プリデコーダ２７０によって検証されるバイトを１または２しか有していない。ｍｏｄｒ／ｍ  ｏｐｃｏｄｅに対しては、全命令長を決定することができない。従って、プリデコーダ２７０におけるバイト１４及び１５に対するロジックユニットは、バイト０〜１３に対するロジックユニットを変えたものである。命令バイト１５に対しては、プリデコーダ２７０のロジックユニット１５が全てのｍｏｄｒ／ｍ  ｏｐｃｏｄｅ及び非ショートデコード命令に対して命令長０を設定する。命令バイト１４に対しては、ｍｏｄｒ／ｍ  ｏｐｃｏｄｅに対して実効命令長０が設定され、ｓｉｂバイトの検証に必要なアドレス指定方式を与えて、確実に命令長を非ショート命令と共に決定する。
各デコードサイクルの間に、マクロ命令デコーダ２３０は命令ブレイクポイント、ペンディング非マスク可能割り込み（pending nonmaskable interupt）（ＮＭＩ）、ペンディング割り込み（ＩＮＴＲ）、コードセグメントオーバーラン、命令フェッチページフォールト、命令長が１６バイトより長いか否か、ＬＯＣＫプリフィクスを備えたロック不可能な命令、浮動小数点使用可能条件、及びペンディング浮動小数点フォルト条件を含むいくつかの例外条件のチェックを行う。条件の中には並行したデコードサイクルの間にのみ評価されるものもあり、サイクル中の解読処理とは無関係に評価されるものもある。アクティブな例外条件が検出されたとき、ショート、ロング、及びベクタリングデコードサイクルを含む全ての命令デコードサイクルが抑止され、「例外」ベクタリングデコードが例外検出の後デコードサイクルに入れられる。例外条件の認識は、例えばショート及びロングまたはベクタリングデコーダＯｐクワドではなくエミュレーションコードＯｐクワドがスケジューラ２６０に受け取られたとき、マクロ命令デコーダ２３０の動作が停止することにより抑止されるかオーバーライドされる。実際、例外条件の認識及び処理は、ＥＲＥＴ  Ｏｐ  ｓｅｑが制御をマクロ命令デコーダ２３０に戻すまで遅延される。
例外ベクタリングを強制するデコードサイクルの間、特別なエミュレーションコードベクトルアドレスが通常の命令ベクトルアドレスの代わりに生成される。ロングデコーダ４１６及びベクタリングデコーダ４１８により生成されるベクタリングＯｐクワドは定義されない。例外ベクトルアドレスは、認識され処理される特定の例外条件を指定するための下位ビットを除いて固定値である。多数の例外条件が同時に検出された場合には、例外が優先順位に従って順序付けられ、優先順位が最も高い例外が認識される。
命令ブレイクポイント例外、即ち最も優先順位の高い例外条件は、リニアデコードＰＣ４２４がプリフィクスを含む命令の第１バイトを指定しているとき認識され、リニアデコードＰＣ４２４は命令ブレイクポイントとしてイネーブルにされるブレイクポイントアドレスに一致し、命令ブレイクポイントマスクフラグは何れもがクリアされない。マスクフラグ（ＲＦ）は特に命令ブレイクポイントの認識をマスクする。別のマスクフラグ（ＢＮＴＦ）は、一時的にＮＭＩリクエスト及び命令ブレイクポイントをマスクする。
ペンディングＮＭＩ例外、即ち後ろから２番目の優先順位の例外は、ＮＭＩリクエストがペンディングされ、ＮＭＩマスクフラグがどれもクリアされない場合に認識される。マスクの１つ（ＮＦ）は、特別にマスク不可能な割り込みをマスクする。別のマスクフラグ（ＢＮＴＦ）は、ＮＭＩリクエスト及び命令ブレイクポイントを一時的にマスクする。
ペンディングＩＮＴＲ例外、即ちペンディングＮＭＩ例外の後の優先順位の例外は、ＩＮＴＲリクエストがペンディングされ、割り込みフラグ（ＩＦ）及び一次割り込みフラグ（ＩＴＦ）がクリアされたときに認識される。
コードセグメントオーバーラン例外、即ちペンディングＩＮＴＲ例外の次の優先順位の例外は、マクロ命令デコーダ２３０が現在コードセグメントの限界を超えて命令のセットをうまく解読しようとする場合に認識される。
命令フェッチページ誤り例外は、コードセグメントオーバーラン例外の次に低い優先順位を有し、別の命令またはプリフィクスバイトの解読が可能となり、命令翻訳ルックアサイドバッファ（ＩＴＢ）信号、即ちページ誤りが現在命令フェッチ時に発生したことを示す信号の前に命令バッファ４０８から追加の有効命令バイトを供給したとき認識される。命令フェッチコントロール回路２１８の誤り条件は反復的に調べられ、ページ誤りがマクロ命令デコーダ２３０によって認識され、後続の例外処理が停止し、命令の新たなアドレスへのフェッチングが再度指令されるまでページ誤りを連続して報告することになる。ＩＴＢからの誤りの報告は、命令キャッシュ２１４から命令がロードされるのと同じタイミングを有し、即ち後続のデコードサイクルにおいて登録される。ＩＴＢは、連続した命令フェッチ思考における誤りを表す信号を送出する必要はなく、マクロ命令デコーダ２３０はフェッチングが新たな命令アドレスに転送されるまで誤りの指示を保持する。ページ誤りの認識時に、追加の誤り情報が特別なレジスタフィールドにロードされる。
１６バイト例外より長い命令長は、命令フェッチページ誤り例外の次の優先順位を有し、マクロ命令デコーダ２３０が１５バイトより長いプリフィクスバイトを含めた全長さを有する指定された命令をうまく解読しようとする場合に認識される。１６バイトより長い命令長の例外が実際の命令が解読されデコード時の命令の残りの長さが計算される前にプリフィクスバイトの数をカウントすることにより検出される。プリフィクスバイトと残りの命令長との合計が１６バイトより大きい場合には、エラーが認識される。
ＬＯＣＫプリフィクスを備えたロック不可能な命令例外は、命令長例外の次の優先順位を有し、マクロ命令デコーダ２３０がＬＯＣＫプリフィクスを有する命令をうまくデコードしようとするとき認識される。この場合命令はＬＯＣＫ可能な命令のサブセットに含まれない。ロック不可能なＬＯＣＫ命令例外は、０Ｆプリフィクスの存在及びｏｐｃｏｄｅバイトの解読に基づいて検出される。ロック不可能なＬＯＣＫ命令例外は、ＬＯＣＫプリフィクスがショートデコード及びロングデコードを抑止することから、ベクタリングデコードサイクルにおいてのみ発生する。
浮動小数点利用不可能な例外は、次の優先順位を有し、マクロ命令デコーダ２３０がＷＡＩＴ命令またはプロセッサ制御から外されるＥＳＣ命令をうまく解読しようとする場合に認識され、浮動小数点誤りの報告がペンディングされる。マクロ命令デコーダ２３０は、浮動小数点利用不可能例外の検出を、０Ｆプリフィクスの存在に加えてｏｐｃｏｄｅ及びｍｏｄｒ／ｍバイトの解読に基づいて行う。
各デコードサイクルの間に、マクロ命令デコーダ２３０は、１または複数のショートデコード、１つのロングデコード、または命令ベクタリングデコードの実行を続ける。時折、アクティブ例外条件の検出、命令バッファ４０８に有効バイトが十分な数だけない場合、またはマクロ命令デコーダ２３０が外部的な理由により動作しない場合を含む３つのタイプの条件のために成功しないことがある。
アクティブ例外条件が検出されるとき、命令デコードの全てのフォームは抑止され、例外条件の検出の後の第２デコードサイクルの間、例外ベクタリングデコードサイクルが挿入され、無効Ｏｐクワドが生成される。
命令バッファ４０８内の有効バイトの数が不十分である場合、有効バイトが命令バッファ４０８に保持されていないか、あるいは少なくとも第１ｏｐｃｏｄｅが有効で、デコーダの１つが命令を解読するが、解読された命令長が命令バッファ４０８におけるその時点で使用不可能なものが含まれる有効バイトを更に要求する。
外部的な理由によりマクロ命令デコーダ２３０が動作を継続できない場合は、スケジューラ２６０が実際より、デコードサイクルの間に追加のＯｐクワドを受け入れることが不可能となるか、またはスケジューラ２６０が現在エミュレーションＯｐクワドを受け取っている最中で、マクロ命令デコーダ２３０が解読処理に戻るまで待機している状態である。
後者の２つの場合には、マクロ命令デコーダ２３０のデコード状態は、先に進まないようにストップされ、マクロ命令デコーダ２３０は次のデコードサイクルにおいて単に同じデコードを繰り返す。マクロ命令デコーダ２３０の抑止の制御は、各度コーダに対応する信号を含むデコード有効信号の組を発生することによって行われる。各デコーダに対しては、このデコーダが解読をうまく実行できるか否かを決定するためのデコーダ有効信号に結びつけられる様々な理由がある。全てのデコーダに対するデコーダ有効信号は、モニタされ、実行されるべきデコードサイクルのタイプが判定される。デコードサイクルのタイプは、デコードを実行する特定のデコーダを指定するものである。外部の要因も選択されたデコードサイクルのタイプが正しいか否かを判定するために評価される。選択されたデコードサイクルのタイプを表す信号は、異なるデコーダにより生成されるマクロデコーダ２３０に対する様々な信号の中から選択されるが、このような信号には交代される（alternate）次のデコードＰＣ値があり、これもショートデコーダ、ロングデコーダ４１６及びベクタリングデコーダ４１により生成されるＯｐクワドの中からスケジューラ２６０に供給される入力Ｏｐクワドを選択するＯｐクワドマルチプレクサ４４４を制御するために供給される。
ベクタリングデコーダサイクルの場合には、マクロ命令デコーダ２３０が内部エミュレーションコードＲＯＭ２３２または外部エミュレーションコードＲＡＭ２３６の何れかのエントリポイントにベクタリングを開始する信号を生成する。マクロ命令デコーダ２３０は、次いでエミュレーションコードのエッチング及びスケジューラ２６０へのローディングのアクティブ時間をモニタする。
命令デコーダ２２０は分岐予測を行いオペレーションが投機的に実行されるようにするための分岐ユニット（図示せず）を備えている。アウトオブオーデープロセッサの性能は、分岐が迅速かつ正確に処理され、パイプラインから排出される方向の予測誤りが回避されている場合により高性能となる。プロセッサ１２０は２レベルの分岐予測アルゴリズムを備えており、その詳細はCONFIGURABLE BRANCH PREDICTION FOR A PROCESSOR PERFORMING SPECULATIVE EXECUTIONなる名称の米国特許第５，４５４，１１７号（Puziol等に１９９５年９月２６日に付与）、TWO-LEVEL BRANCH PREDICTION CACHEなる名称の米国特許第５，３２７，５４７号（Stiles等に１９９４年７月５日に付与）、TWO-LEVEL BRANCH PREDICTION CACHEなる名称の米国特許第５，１６３，１４０号（Stiles等に１９９２年１１月１０日に付与）及びINTEGRATED SINGLE SURUCTURE BRANCH PREDICTION CACHEなる名称の米国特許第５，０９３，７７８号（Favor等に１９９３年３月３日に付与）に記載されている。プロセッサ１２０は８１９２エントリの分岐履歴バッファ（ＢＨＴ）（図示せず）を備えており、この分岐履歴バッファはグローバルな分岐履歴の９ビットとプログラムカウンタの４ビットを結合することによりインデックス化される。各ＢＨＴエントリは２つの履歴ビットを含む。ＢＨＴは２重ポートＲＡＭであり、見出し／参照アクセス及び書き込み／更新アクセスの双方が可能である。ＢＴＨの参照及び更新は、クロックサイクルの異なる半分の段階においてそれぞれが発生するために同時に発生することはない。ＢＨＴの多数のエントリは、ＢＨＴが条件付き分岐の方向を予測するだけであり、エントリがタグ付けされたり予測分岐ターゲットアドレスが１６エントリリターンアドレススタック（図示せず）を除いて格納されないことから適当な集積回路上の領域に供給される。従って、ＢＨＴへのアクセスは、ＢＨＴがＢＨＴにおけるエントリへのアクセスを行えるようにインデックス付けされ、アクセスされたエントリが分岐命令と推定されるキャッシュ様構造への直接マッピングに類似したものである。リターン以外の分岐に対しては、ターゲットアドレスはデコードサイクルの間に計算される。分岐命令の位置が分かる前に全ての可能なターゲットアドレスを計算する複数の並列アダー（図示せず）を用いてターゲットアドレスは十分速い速度で計算される。デコードサイクルの終わりまでに、分岐ユニット２３４はもしあればどのターゲットアドレスが有効であるかを判定する。
分岐が予測された場合、ターゲットアドレスはすぐに分かるが、ターゲット構造は以下のサイクルにおいてフェッチされ、フェッチサイクル分岐ペナルティが生ずる。分岐ペナルティは、分岐ターゲットバッファ（ＢＴＢ）４５６を用いることにより回避される。ＢＴＢ４５６は、１６個のエントリを含み、各エントリは１６個の命令バイト及び関連するプリデコードビットを有する。ＢＴＢ４５６はブランチアドレスによりインデックス付けされ、デコードサイクルの間にアクセスされる。ＢＨＴが分岐を予測したときＢＴＢ４５６のキャッシュビットに対してＢＴＢ４５６からの情報は命令デコーダ２２０に送られ、分岐ペナルティが除去される。各デコードサイクルの間に、リニアデコードＰＣ４２４がＢＴＢ４５６に直接マップ方式でアドレス指定するために用いられる。ＢＴＢエントリに対するヒットが生じた場合それはデコードサイクルが終わる前に実現され、ＰＣ相対的条件転送コントロール命令が、ショートデコーダによりデコードされ、コントロール転送は予測されて、２つの操作が発生する。第１に、命令キャッシュ２１４が指定する開始ターゲットリニアフェッチアドレスが、実際のターゲットアドレスから、ＢＴＢエントリに含まれる有効ターゲットバイトの後続の命令バイトを指定する値に変えられる。修飾されたフェッチアドレスは、ＢＴＢエントリに含められ、ＢＴＢエントリから直接アクセスされる。第２に、エントリからの命令バイト及びプリデコード情報がデコードサイクルの終わりに命令バッファ４０８にロードされる。ＰＣ相対的条件転送コントロール命令は、ショートデコーダによりデコードされ、コントロール転送が予測されるが、誤りが発生し、新たなＢＴＢエントリがターゲット命令フェッチの結果と共に生成される。詳述すると、ターゲット命令バイトの命令キャッシュ２１４から命令バッファ４０８への初めのローディングが成功すると同時に、同じ情報が選択されたＢＴＢエントリにロードされ、以前の内容に戻される。これが起こらない場合には、ターゲットフェッチ及び命令バッファ４０８のロードは通常通り行われる。
各エントリはタグ部分及びデータ部分を有する。データ部分はメモリバイト及び３つの関連するプリデコードビットを含む１６個の拡張命令バイトを保持している。メモリバイトの位置合わせは、対応する命令バッファ４０８の位置に対応してメモリ内で位置合わせされている。ＢＴＢエントリのタグ部分は、きゃっシュされたターゲットを有する転送コントロール命令に関連する３２ビットリニアデコードＰＣ４２４、ビット［４：１］、エントリ有効ビット、及び３０ビットの修飾された初期ターゲットリニア命令フェッチアドレスを含む３０ビットのタグを保持している。明示的な命令ワード有効ビットが用いられないが、これは真のターゲットアドレスと修飾されたターゲットアドレスとの間の距離がＢＴＢ４５６内における有効命令ワードの数及び表示を直接表す。
ＢＴＢ４５６の目的は、ループ入れ子ループが実行される期間、小さいサイズから中程度のサイズまでのループ内に、分岐ターゲットを納めることである。この目的に従って、可能性を最小限に押さえた不一致が検出された場合には、ＢＴＢ全体が無効化されクリアされる。ＢＴＢ４５６が命令キャッシュ２１４のミスが生じたとき、命令キャッシュ２１４の無効化の形態、ＩＴＢミス、または任意の形態のＩＴＢ無効化が生じたときに無効化されクリアされる。履歴の中にないまたは空間的局所参照性のない分岐ターゲットは効果的にキャッシュされない。一般に、ＢＴＢ４５６はわずかな数のエントリのみを含んでおり、複雑さが低減され、理想的な分岐ターゲットキャッシング能力が達成される。
ＰＣ相対的分岐ターゲットアドレスの計算ロジックは、ターゲットアドレスの計算を行う。分岐ターゲットアドレス計算ロジックは、ＰＣ相対的転送コントロール命令のためにのみ用いられ、前記命令はショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１４、またはＳＤｅｃ２  ４１６により解読される。詳述すると、分岐ターゲットアドレス計算ロジックは、ショートデコード分岐命令のために用いられるが、このような命令にはＪｃｃ  ｄｉｓｐ８、ＬＯＯＰ  ｄｉｓｐ８、ＪＭＰ  ｄｉｓｐ８、ＪＭＰ  ｄｉｓｐ１６／３２、及びＣＡＬＬＬ  ｄｉｓｐ１６／３２が含まれる。各ショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１  ４１２、及びＳＤｅｃ２  ４１４は、論理またはリニアの分岐ターゲットアドレス計算ロジック（図示せず）を備えている。論理及びリニア分岐ターゲットアドレス計算ロジックの３つのセットの全ては、同時並行的に動作し、ショートデコーダ４１０、４１２、及び４１４は、オペレーションがＰＣ相対的ショートデコード分岐命令であるか否かを判定する。論理及びリニア分岐ターゲットアドレス計算ロジックは、分岐の論理プログラムカウンタ、分岐命令の長さ、及び分岐命令の符号拡張変位及び合計値の上位１６ビットの条件マスクを、計算のサイズに応じて合計し、論理ターゲットアドレスを生成する。論理およびリニア分岐ターゲットアドレス計算ロジックは、論理ターゲットアドレスと現在コードセグメントベースアドレスとを合計してリニアターゲットアドレスを生成する。無条件か予測された分岐が行われた場合には、解読されたショートデコード分岐命令に対応する計算されたアドレスが、論理デコードＰＣ４２２及びリニアデコードＰＣ４２４を再度初期化するために用いられる。分岐が予測されなかった場合には、論理アドレスが関連するショートデコード分岐命令（ＢＲＣＯＮＤ  Ｏｐ）と共にスケジューラ２６０Ｏｐクワドエントリに格納される。論理ターゲットアドレスは現在コードセグメント限界値と比較され、限界値を超えていることがモニタされる。
論理及びリニア分岐ターゲットアドレス計算ロジックは、リミットバイオレーション、分岐が予測されているかいなかを検出した場合、リミットバイオレーションを表す空間的タグビットが、分岐命令から生成されたオペレーションを保持するスケジューラ２６０のＯｐクワドエントリに設定される。これに続いて、スケジューラ２６０のオペレーション画定ユニット（ＯＣＵ）９７０がこのＯｐクワドを画定しようとするとき、このＯｐクワドは誤りを含むものとして処理され、アボートされる。マクロ命令デコーダ２３０は、エミューションコードＲＯＭ２３２におけるフォルトハンドラーにベクタリングを開始する信号を発生する。このフォルトハンドラーはショートデコーダ及びロングデコーダによる解読を一時的に中止し、誤りのＯｐクワドに関連する破壊的な命令の誤りＰＣアドレスにジャンプする。最終的に、分岐命令は、再度解読され命令エミュレーションコードにベクタリングされる。分岐が実際に行われた場合、リミットバイオレーションを認識し、そのバイオレーションを適当に処理する。
プロセッサ１２０はエミュレーションコードＲＯＭ２３２における特定のフォルトハンドラーにベクタリングすることによりフォルト条件に応答する。フォルトハンドラーはディスク８６命令セットの範囲内で定義されたオペレーションを含み、このオペレーションは誤りの元を判定するルーチン、フォルトに対する適切な応答、適当な応答を開始するステップを実行するオペレーションである。別の場合には、プロセッサ１２０が「ロードオルタネートフォルトハンドラー（load alternate fault handler）」命令と称される命令を含み、これは特別なフォルト応答を開始する。ロードアルタネートフォルトハンドラー命令は、命令デコーダ２２０のパイプラインに、他の全ての命令と同様にされるが、異なるベクトル命令ＲＯＭエントリポイントを呼び出す例外条件を発生させる。アルタネートフォルトハンドラーは、現在マクロ命令の実行が終了したとき動作を停止する。アルタネートフォルトハンドラーは、フォルトが生じた場合にのみ空間的なフォルト処理を行い、フォルトが生じた場合の空間的セットアップ処理を待機できるという利点をもたらす。
オルタネートフォルトハンドラーの利点の１つは、例えば反復されるムーブストリング命令（ＲＥＰ  ＭＯＶｓ）に関連してもたらされる。多数の命令を拘束で実行するべく、オペレーションのシーケンスの順番を変更する能力は重要である。オペレーションのシーケンスは、一般に第１のポインタに指定されたアドレスをロードし、第２のポインタに指定されたアドレスに格納し、ロード及びストアが行われた場合には、第１及び第２ポインタをインクリメントし、カウンタをデクリメントするという一連の処理である。更に効率的にするために、ポインタのインクリメントとカウンタのデクリメントは、ストアオペレーションが終了する前に行われる。しかし、フォルトまたは例外なオペレーションの最中に発生した場合には、このシーケンスはアボートされ、カウンタ及びポインタが違った状態になる。例えば、アーキテクチャのＸ８６  ＳＩ、ＤＩ、及びＣＸレジスタは、正しい値を有していない状態となる。アルタネートフォルトハンドラーが用いられるのは、シーケンスの前に反復的なムーブフォルトの後、クリーンアップ処理を行うオルタネートフォルトハンドラーが特定された場合である。このシーケンスはポインタやカウンタを追跡するための中間的な命令のオーバーヘッドなく続行する。エラーが生じない場合には、オルタネートフォルトハンドラーは効果を発揮することなく稼動を停止する。しかし、エラーが生じた場合には、アルタネートフォルトハンドラーが呼び出される。このアルタネートフォルトハンドラーは、特定のオペレーションのシーケンスに対して特別に設けられているものであり、デフォルトのフォルトハンドラーにジャンプする。これによって生じる利点は、高度に効率的なコードにより、エラーが生じエラーがアドレス指定されるときまでにアルタネートフォルトハンドラーからの妨げなく高速の処理速度をが得られるという点である。
分岐履歴テーブル（ＢＨＴ）は直近の履歴情報、特に分岐方向情報、即ち過去に経験した条件付き転送コントロール命令に関する情報が格納されている。分岐が反復されたとき、格納されたその分岐に関する情報が分析されてその分岐の現在の方向が予測される。これに続き、格納された情報は実際に進んだ分岐の方向に基づいて更新される。格納された情報は最近経験した特定の分岐の方向、特定の分岐の最近の方向の履歴、及び他の分岐の最近の方向の履歴に基づいたものである。格納された情報は、複数の２ビットステートマシンの組に基づいており、最後の９つの分岐実行の履歴、即ち特定の分岐または他の分岐に関する最後の９つの分岐実行の履歴の方向にも基づいている。特定の新たに経験した分岐の命令のアドレスを用いて、複数のデビットステートマシンのセットから１つが選択される。最後の７回の分岐実行の方向の履歴を用いて選択されたステートマシンの組における特定の２ビットステートマシンが選択される。各ステートマシンはこの特定のステートマシンにアクセスした最近の数回の分岐によりとられた岐方向をカウントするために２ビットで飽和するカウンタである。一般に特定のステートマシンは、他の分岐が同じステートマシンにアクセスし得る場合でも、同じ静的分岐によりアクセスされる。より大きいステートマシン値は、この分岐がより多く発生することを表している。ステートマシンの値は小さい場合は、この分岐が起こりにくいことを示している。ステートマシンの選択時に、ステートマシンにアクセスが行われる。現在の全カウントが「より大きい」場合には、分岐予測が行われる。現在の全カウントは「小さい」場合には、分岐予測は行われない。最も直近の９回の分岐実行の方向の履歴は、９ビットのシフトレジスタに保持され、このレジスタは、クロックパルスを与えられるか分岐命令がうまく解読されるごとにシフトされる。今予測されたばかりの分岐方向が新たな方向ヒストリ値であり、これがシフトレジスタにシフトされる。履歴ビット値が１であることは分岐が行われることを表す。履歴ビット値が０であることは分岐が行われないことを表す。
デコードサイクルの間、リニアデコードＰＣ４２４はＢＨＴテーブル参照を実行するために用いられる。ＰＣ相対分岐命令がデコードされた場合には、アクセスされたステートマシンが即座に分岐方向を予測するが、逐次フェッチされたデコードされる実命令がマクロ命令デコーダ２３０により判定されるのはデコードサイクルの終わりである。これに続き、条件分岐命令のデコードにより生成された分岐条件（ＢＲＣＯＮＤ）オペレーションはスケジューラ２６０のロジックにより解決され、この時点でステートマシンが更新される。分岐が実際に行われた場合には、ステートマシンは最大値の（３）に達していない限りデクリメントされる。この分岐が実際に行われない場合には、ステートマシンはその値が既に最小値０になっていない限りインクリメントされる。従って、ステートマシン値の０値及び１は分岐が行われない予測の強弱を表す。ステートマシン値の２及び３はそれぞれ分岐が行われた場合の分岐の弱い強いを表す。ＢＴエントリの更新をサポートするべく、ＢＨＴへのアクセスのための方向履歴ビット及び分岐アドレスのコピー及びステートマシン値のコピーが分析条件（ＢＲＣＯＮＤ）オペレーションに伴ってスケジューラ６０に渡される。１つのＢＲＣＯＮＤの最大値は、Ｏｐクワドに含まれているため、ＢＨＴサポート情報はスケジューラ２６０に供給されるＯｐクワドにタグ付けされる。ＢＨＴがキャッシュ構造に一般的に存在するエントリタグ（デコードされた条件分岐に関連するリニアデコードＰＣ４２４のアドレス）を含まないのが、回路サイズ及び複雑さを小さくするという利点をもたらす。ＢＨＴが数多くのエントリを有し競合する率が低いのも有利な点である。
スケジューラ２６０にセーブされる情報、Ｏｐクワド及び関連するＢＲＣＯＮＤオペレーションは、４つの分岐アドレスビット、９の現在履歴ビット、及び即座にアクセスされる１つのステートマシンビットを含む１５ビットの幅を有し、２つのステートマシンビットは、その上側ビットがエミュレート分岐のための予測方向を表している。第１の１５ビットは、必要なときＢＨＴに再度アクセスし、ステートマシン値を更新するために使用される。最後の２ビットは、修飾されて新たなステートマシン値を生成する。
分岐の予測が間違っていた場合には、９ビット分岐履歴シフトレジスタにおける履歴の値の設定が分岐が実際に行われた方向を反映するように修正される。更に、シフトレジスタが予測ミスの分岐のところに対応するまでシフトバックされ、実際の分岐方向と予測された分岐の方向がどちらであったかに基づいて更新される。
リターンアドレススタック（ＲＡＳ）（図示せず）は、リターン（ＲＥＴ）伝送コントロール命令のためのターゲットアドレスキャッシュである。ＲＡＳは１つの３ビットポインタを用いる循環式バッファとして管理される８エントリ、３２ビット幅、シングルポート式ＲＡＭである。１アクセスにおける各クロックサイクルの間、ＲＥＴデコードのための呼び出しアクセスか、またはＣＡＬＬデコードのための書き込みアクセスの何れかが実行される。ＲＡＳはＲＥＴリターンアドレスをキャッシュし、ターゲットアドレスを間接的に指定するリターンアドレスを予測するが、これに対し他の転送コントロール命令はターゲットアドレスの直接の指定を含む。ＲＡＳは特定のＲＥＴ命令が異なる命令の実行の間でターゲットアドレスを変えることが多いためそれを使用することが有利である。ＲＡＳはＣＡＬＬ命令によりセーブされ、即ちスタックに押し込まれたリターンアドレスをモニタすることにより各ＲＥＴ命令の実行に対するターゲットアドレスを発見し予測する。対応するＣＡＬＬ及びＲＥＴ命令は、対になって他のＣＡＬＬ及びＲＥＴ命令の対に関連して後入れ先出しＬＩＦＯの順番で発生するのが一般的である。
ＣＡＬＬ命令がうまくデコードされる度に、ＣＡＬＬ命令の理論リターンアドレスはＬＩＦＯスタックとして管理される循環バッファにセーブ（プッシュ）される。ＲＥＴ命令がうまくデコードされる度に、ＲＡＳの一番上にあるリターンアドレス値がＲＥＴに対する予測ターゲットアドレスとして用いられ、その値がＲＡＳからポップされる。ＲＡＳにより高い予測レートが達成できるが、ＣＡＬＬ及びＲＥＴが必ずしも入れ子の対として発生せず、近いＣＡＬＬ及びＲＥＴがサポートされ、遠いＣＡＬＬとＲＥＴはサポートされていないことから予測ミスが発生する。また予測ミスはＲＡＳの深さが人間であることに起因して発生する。条件分岐予測ミスが発生したとき、ＲＡＳはＣＡＬＬ及びＲＥＴ命令が投機的にデコードされ、これによりスタックポインタのトップが変更されることから、スタックポインタのトップを以前の条件に設定することにより、予測ミスの前に状態を再格納しておこうとする。予測ミスが発生する前に元のポインタが再格納される。予測ミスの後の再格納は、スケジューラ２６０によりサポートされる。スケジューラ２６０Ｏｐクワドのそれぞれは、そのＯｐクワドが発生されたデコードサイクルの間にその時点の初期のスタックポインタのトップの値でタグを付けられる。条件分岐命令に対して生成されたＢＲＣＯＮＤ  Ｏｐが解析され、予測ミスが発見されたとき、スケジューラＯｐクワドに対してタグ付けされたスタックポインタのトップは、スケジューラ２６０により生成された再スタートサイクルの間にＲＡＳに供給される。ＲＡＳは現在のスタックのトップの値を、スケジューラＯｐクワドスタックポインタのトップのタグで置き換える。
第５図には、模式的なブロック図が示されており、このブロック図には命令デコーダエミュレーション回路２３１が示されており、この回路２３１は命令レジスタ５１２、エントリポイント回路５１４、エミュレーションコードシーケンサ５１０、エミュレーションコードシーケンサ５１０、エミュレーションコードメモリ５２０及びＯｐ置換回路５２２が含まれている。命令デコーダエミュレーション回路５００は命令デコーダ２２０内部の回路である。命令デコーダエミュレーション回路２３１は命令フェッチコントロール回路２１８、ＢＴＢ４５６、または命令キャッシュ２１４に接続された命令バッファから命令バイト及びそれに関連するプリデコード情報を受け取る。命令バッファ４０８は命令レジスタ５１２に接続されておりそこにｘ８６命令を供給する。命令レジスタ５１２はエミュレーションコードＲＯＭエントリポイントを供給するエントリポイント回路５１４に接続されている。エントリポイント回路５１４は、ｘ８６命令を受け取り、ｘ８６命令オペレーションコード（ｏｐｃｏｄｅ）から、エントリポイントアドレスを生成し、開始アドレスはエミュレーションコードメモリ５２０を指定している。このようにして、エミュレーションコードメモリ５２０における命令のアドレスは、ｘ８６命令のｏｐｃｏｄｅから合成される。ｘ８６命令バイト、特にｘ８６命令の第１バイト及び第２バイト、そしてメモリバイト、プリフィクスＲＥＰ及びＲＥＰＥ、保護モードビット及び実効データサイズビットＤＳｚのような情報からこのアドレスが求められる。一般に、深い関係のあるｘ８６命令は、類似した符号化されたビットフィールドを有する。例えば、命令タイプを表すビットフィールドは、近縁なｘ８６命令の中で同じであり、エミュレーションコードメモリ５２０における１つのエントリがいくつかのｘ８６命令に対応している。エントリポイントは、ｘ８６命令を読み出し、エントリポイントアドレスのビットを特定のｘ８６命令ビットフィールドの値に基づいて割り当てることにより合成される。命令レジスタ５１２はエミュレーションコードシーケンサ５１０に接続されており、このシーケンサ５１０は更にエミュレーションコードメモリ５２０に接続されている。エミュレーションコードシーケンサ５１０はエントリポイントをエミュレーションコードメモリ５２０に供給し、エミュレーションコードメモリ５２０から順序付け情報を受け取る。エミュレーションコードシーケンサ５１０は、命令の順序付けの制御、若しくは新たな順序が開始されたときエントリポイントをエミュレーションコードメモリ５２０に供給することの何れかを行う。エミュレーションコードメモリ５２０においてコード化されたオペレーション（Ｏｐｓ）は、エミュレーションコードメモリ５２０によりＯｐクワドまたはＯｐユニットとしてＯｐ置換回路に出力される。Ｏｐはディスク型ｘ８６オペレーションのためのテンプレートに対応している。このテンプレートはコードが選択的に置換される複数のフィールドを含む。エミュレーションコードメモリ５２０はＯｐ置換回路５２２に接続されており、このＯｐ置換回路５２２は様々なＯｐフィールドが選択的に置換されたＯｐを供給する。機能的に、エントリポイント回路５１４はエントリポイントを計算し、それをエミュレーションコードＲＯＭ２３２またはエミュレーションコードＲＡＭ２３６に供給する。エミュレーションコードＲＯＭ２３２における順序付けは、命令の機能性を決定する。
エミュレーションコードメモリ５２０はオンチップエミュレーションコードＲＯＭ２３２及び外部エミュレーションコードＲＡＭ２３６を有する。エミュレーションコードメモリ５２０はプロセッサ１２０がどのように機能し、どのようにｘ８６命令が実行されるかを決定するように制御するコード化されたオペレーションを含む、エミュレーションコードＲＯＭ２３２及びＲＡＭ２３６の双方は、複数のオペレーション（Ｏｐ）命令をコード化したものを含み、これはＲＯＭ２３２及びＲＡＭ２３６において同じＯｐコーディングフォーマットを有する。例えば、エミュレーションコードＲＯＭ２３２の一実施例においては、４Ｋ６４ビットワードの収容能力を有する。Ｏｐコーディングフォーマットは通常例えば３０〜４０ビットにおいて定義されたフォーマットである。一実施例においては、第６Ａ図〜第６Ｅ図に示されているような３８ビットフォーマットが定義される。エミュレーション空間内でのエミュレーションコードＲＯＭ２３２ベースアドレスロケーションは固定される。外部エミュレーションコードＲＡＭ２３６はキャッシュ可能なメモリ内の標準的なメモリアドレス空間に存在する。エミュレーション空間内のエミュレーションコードＲＡＭ２３６ベースアドレスロケーションは固定される。３２ビットエミュレーションコードＲＡＭ２３６アドレスは、最上位１５ビット［３１：１７］を供給するエミュレーションコードＲＡＭ２３６の固定ベースアドレス、及びベースアドレスビットに連結された１４ビット［１６：３］を供給するＯｐアドレスにより形成される。エミュレーションコードＲＡＭ２３６アドレスの２つの最下位ビット［１：０］は０に設定される。エミュレーションコードＲＡＭ２３６における１４ビットＯｐアドレスは、エミュレーションコードＲＯＭ２３２におけるＯｐアドレスと同じである。オペレーション（Ｏｐｓ）は、例えば３８ビットのＯｐコーディングフォーマットで、外部エミュレーションコードＲＡＭ２３６に６４ビットワードで格納される。６４ビットワードのＯｐコーディングフォーマットビットの過剰なビットは、コントロールトランスファ（ＯｐＳｅｑ）情報に格納するために用いられる。外部エミュレーションコードＲＭＡ２３６は、通常テストまたはデバッグのために用いられ、エミュレーションコードＲＯＭ２３２でコード化された命令を実施することや、システム管理モード（ＳＭＭ）のような特別な機能を実行することを可能にしている。例えば、エミュレーションコードＲＯＭ２３２における命令が機能を正しく発揮していないことが発見された場合、外部エミュレーションコードＲＡＭ２３６は、エミュレーションコードＲＯＭ２３２における不適切に機能を発揮していることを表す固定符号を置きかえるために、一時的あるいは継続的にアクセスされる。外部エミュレーションコードＲＡＭ２３６へのアクセスは、２つの技術の１つを利用して行われる。第１の技術においては、エミュレーションコードメモリ５２０のエレメントのＯｐＳｅｑフィールドにおける１ビットフィールドが、命令をフェッチするための次のアドレスが外部エミュレーションコードＲＡＭ２３６に位置することを表す。この第１技術においては、オンチップエミュレーションコードＲＯＭ２３２が外部エミュレーションコードＲＡＭ２３６の実行を開始する。第２技術においては、ベクトルアドレスがエミュレーションコードＲＡＭ２３６におけるエントリポイントにベクタリングするため供給されるのみである。
命令キャッシュ２１４、命令フェッチコントロール回路２１８、及び命令デコーダ、２２０は、３つの命令フェッチ及びデコードモードで機能する。第１モードにおいては、命令デコーダ２２０がオンチップエミュレーションコードＲＯＭ２３２からエミュレーションコードＯｐクワドをフェッチする。各Ｏｐクワドは４つのオペレーション（Ｏｐｓ）＋コントロール転送情報（ＯｐＳｅｑ）を有しており、フェッチ及びデコード機能の次のサイクルを決定する。第２モードにおいては、命令フェッチコントロール回路２１８がオンチップＬ１命令キャッシュ２１４の一部である命令キャッシュ２１４の一部である命令キャッシュ２１４のｘ８６マクロ命令バイトのフェッチを制御する。ｘ８６マクロ命令は、マクロ命令デコーダ２３０によりデコードされ、このマクロ命令デコーダ２３０は４つのオペレーション（Ｏｐｓ）を発生する。４つのＯｐｓ＋ＯｐＳｅｑフィールドは、完全なＯｐクワドを形成する。命令デコーダ２２０は、分岐ユニット２３４及びマクロ命令デコーダ２３０のベクタリング機能性を用いて任意のコード化されたコントロールの転送を実行する。第３モードにおいては、命令フェッチコントロール回路２１８が、命令キャッシュ２１４からのＯｐコーディングフォーマットでのエミュレーションコードを含む６４ビットワードを、サイクルに１個の６４ビットワードの速度でフェッチすることを制御する。各６４ビットワードは、１つのオペレーション（Ｏｐ）に対応する。他の実施例においては、１サイクルに複数の６４ビットワードがアクセスされ得る。４つの６４ビットワードがアクセスされる実施例においては、エミュレーションコードＲＡＭ２３６がオンチップオンチップエミュレーションコードＲＯＭ２３２の場合と同様に完全なＯｐクワドを供給し、非常に効率的な完全に再プログラム可能なプロセッサが達成される。完全に再プログラム可能なプロセッサは、非常に異なる機能のプロセッサをソフトに実現できるという利点を有する。例えば、ｘ８６プロセッサをＰｏｗｅｒＰＣ（商標）を１つのハードウェア上に実現できる。
第１及び第３オペレーティングモードにおいては、コントロール転送情報が、Ｏｐクワドのオペレーション順序付け（Ｏｐｓｅｑ）フィールドに形式化される。無条件コントロール転送、例えば分岐（ＢＲ）及びエミュレーションからのリターン（ＥＲＥＴ）オペレーションは、Ｏｐｓｅｑコントロール転送情報を用いて完全に制御される。条件転送、例えば条件分岐（ＢＲｃｃ）は、Ｏｐｓｅｑフィールド及び分岐条件（ＢＲＣＯＮＤ）オペレーションの組み合わせを用いて制御される。ＯｐＳｅｑフィールドの形式は、第７図に示されている。１６ビットのＯｐＳｅｑフィールド７００は、２ビットの順序付けアクション（ＡＣＴ）フィールド７１０、１ビットの外部ｅｍｃｏｄｅフィールド７１２、及び１３ビットのオペレーション（Ｏｐ）アドレスフィールド７１４を有する。ＡＣＴフィールド７１０における他の順序付けアクションは以下のようにコード化される。
0003714962.tif 000008
ＯｐＳｅｑの順序付けアクションが無条件か条件付きかは、Ｏｐクワドのどこかに分岐条件（ＢＲＣＯＮＤ）Ｏｐが存在するか存在しないかに応じて決まる。Ｏｐクワド内のＢＲＣＯＮＤ  Ｏｐは、テストされる条件及び周りのエミュレーションコードターゲットアドレスを指定する。明示的なスタティック分岐方向予測ビットは存在しない。代わりに予測アクション及び次のアドレスは常にＯｐＳｅｑフィールド７００により指定され、「予測されない」次のアドレスは、常にＢＲＣＯＮＤ  Ｏｐにより指定される。ＢＲＣＯＮＤ  Ｏｐは、常に無条件呼び出しを含むＢＳＲ順序付けアクションと対になっている。無条件及び条件付き「予測実行」呼び出しについては、ＢＲＣＯＮＤ  Ｏｐがセーブされるリターンアドレスを指定する。
外部ｅｍｃｏｄｅフィールド７１２は、実行されるエミュレーションコードが外部エミュレーションコードＲＡＭ２３６に存在する場合に１に設定される。外部ｅｍｃｏｄｅフィールド７１２は、実行されるエミュレーションコードが内部エミュレーションコードＲＯＭ２３２に存在する場合に０に設定される。Ｏｐアドレスフィールド７１４は、非エントリポイントＯｐクワド内のターゲットＯｐのアドレスを表す。
Ｏｐｓｅｑコントロール転送情報は、Ｏｐクワドまたは６４ビットメモリワードがフェッチされ、「即時解読」されるとき、無条件コントロール転送を制御する。次に解読される命令の指定は、Ｏｐｓｅｑフィールドのみにより制御される。Ｏｐｓｅｑフィールドは、３つの異なる動作（action）の１つを指定する。第１に、ＯｐｓｅｑフィールドはエミュレーションコードＲＯＭ２３２からエミュレーションコードを指定された１４ビットの１つのオペレーションワードアドレスにフェッチするようにし、従ってエミュレーションコードＲＯＭ２３２Ｏｐクワドがフェッチされる。第２に、Ｏｐｓｅｑフィールドは、エミュレーションコードＲＡＭ２３６からのエミュレーションコードの指定された１４ビットの１つのオペレーションワードアドレスにフェッチするようにし、従ってエミュレーションコードＲＡＭ２３２６４ビットメモリワードがフェッチされる。第３に、Ｏｐｓｅｑフィールドは、エミュレーションからのリターン（ＥＲＥＴ）指示を含み、これは、命令デコーダ２３０にｘ８６マイクロ命令デコーディングを戻すようにするものである。
エミュレーションコードＲＯＭ２３２からフェッチされたエミュレーションコードは、Ｏｐクワドと位置合わせされた形態でフェッチされる。Ｏｐクワド内での即値位置への分岐により、Ｏｐクワド内での先行のオペレーションは、その先行オペレーションの代わりにＮＯＯＰをフェッチすることにより無効なものとして処理される。
１６ビットメモリワードをエミュレーションコードＲＡＭ２３６からフェッチするためのバイトメモリアドレスは、指定された１４ビットオペレーションアドレスと、既に設定された３つの最上位ビットとを結合することにより生成され、これにより位置合わせされた８ビットアドレスが生成される。１６ビットメモリワードをフェッチするためのバイトメモリアドレスは、８ビットの位置合わせされたアドレスであり、従ってメモリＯｐデコーディング及びフェッチ／デコードの進行を首尾一貫させ単純なものとすることができる。
Ｏｐｓｅｑコントロール転送情報、条件付きコントロール転送のために次にデコードされる命令表示の制御も行う。分岐条件（ＢＲＣＯＮＤ）オペレーションは、テストされ評価される条件コードを指定し、代わりの（alternate）１４ビットエミュレーションコードフェッチ及びデコードアドレスを指定する。従って、条件付きコントロール転送のためのＯｐｓｅｑコントロール転送情報は、条件分岐の予測経路を効果的に指定する。ＢＲＣＯＮＤアドレスは、通常１４ビットターゲットＯｐワードアドレスであるか、次の「順次」オペレーション（Ｏｐ）の１４ビットＯｐワードアドレスの何れかである。更に一般的には、ＢＲＣＯＮＤアドレスは、一般的な２ウェイ（２方向の）条件分岐全体を指定し得る。条件付きＥＲＥＴオペレーションは、ＥＲＥＴオペレーションを指定するようにＯｐｓｅｑフィールドを設定し、条件付きＥＲＥＴが予測されるようにすることにより実行される。次いでＥＲＥＴオペレーションが予測ミスであることが分かった場合には、ＥＲＥＴによるｘ８６マクロ命令ストリームがアボート（abort：中断）され、ＢＲＣＯＮＤにオペレーションにより指定された連続的なマクロ命令ストリームが再スタートされる。
ＢＲＣＯＮＤオペレーションは、実行されない状態でスケジューラ２６０にロードされる。ＢＲＣＯＮＤオペレーションはスケジューラ２６０の分岐分析ユニットにより順番に評価される。分岐が適切に予測された場合には、分岐は完全にマークされる。そうでない場合には、ＢＲＣＯＮＤ状態が、未発行状態のままにされ、Ｏｐ画定ユニットにより検出されたとき分岐アボート信号がトリガされる。
エミュレーションコードメモリ５２０は、シングルレベル（入れ子のない）サブルーチンの機能性をサポートしており、この機能性においてはＯｐｓｅｑフィールドがエミュレーションコードのフェッチングのためのオルタナティブ（alternative）を指定するように設定される。このオルタナティブは、典型的な２ウェイ条件付き分岐として構成されているが、ＯｐクワドまたはメモリＯｐ内のＢＲＣＯＮＤ  Ｏｐの即値フィールドからの１４ビットＯｐワードアドレスが、サブルーチンリターンアドレスレジスタにロードされる点が異なっている。このサブルーチンリターンアドレスレジスタは、１４ビットＯｐワードアドレス及びリターンアドレスが、エミュレーションコードＲＯＭ２３２かＲＡＭ２３６の何れに存在するかを表す１ビットを格納する。このＢＲＣＯＮＤ  Ｏｐにより指定された条件コードは、ＴＲＵＥを含むオルタナティブであり、無条件及び条件付き（予測が行われる）サブルーチンの双方が指定されることになる。しかし、ＢＲＣＯＮＤ  Ｏｐはサブルーチンリターンアドレスレジスタに未定義の値をロードすることが回避されるように指定されなければならない。
全てのエミュレーションコードサブルーチンのサポート及びリターンアドレスレジスタの管理は、パイプラインの前にあるエミュレーションコードシーケンサ５１０により実行される。従って、リターンアドレスレジスタのローディング及び使用は、標準的なデコーダのタイミングと完全に同期されており、遅延が生じないことになる。
２ウェイミュレーションコード分岐
エミュレーションコードＲＯＭ２３２は、複数のオペレーション（Ｏｐｓ）シーケンス用のストレージ（記憶機構）である。オペレーションシーケンスは、定義されたエントリポイントにおいて始まり、エミュレーションコードＲＯＭ２３２にハード符号化（hardcoded）され、オペレーションシーケンスの終わりのエミュレーションコード（ＥＲＥＴ）Ｏｐｓｅｑ宣言からのリターンに拡張している。１つのシーケンスにおけるオペレーションの数は、通常様々な異なる機能を実行するために適切な数に変えることができる。単純なｘ８６命令は、エミュレーションコードＲＯＭ２３２に１つのＯｐエントリしか有していないが、これらの命令はＯｐクワドの細分性（granularity）をもってフェッチされる。より複雑なｘ８６命令は、多くの成分オペレーションを使用する。エミュレーションコードＲＯＭ２３２ストレージは、固定ＲＯＭアドレス空間にプログラムされた複数のＯｐクワドとして構成される。各Ｏｐクワドは４つのＲＩＳＣ  Ｏｐフィールド及び１つのＯｐｓｅｑフィールドを有する。オペレーションシーケンスは、通常Ｏｐクワド内で位置合わせされておらず、従ってエミュレーションコードＲＯＭ２３２内の分散した位置に分岐させるためのいくつかの技術が用いられず、エミュレーションコードＲＯＭ２３２内の多くのＲＯＭユニットが使用不可能であり、集積回路空間を無駄に使用することになる。更に、エミュレーションコードＲＯＭ７３２における命令のエントリポイントアドレスが、ｘ８６命令のｏｐｃｏｄｅから合成されることから、エントリポイントアドレスは、ＲＯＭアドレス空間全体に間隔をおいて固定された位置に広がるようになり、これがＲＯＭ内の使用されない部位を増やすことになる。エントリポイントを介したアクセスが行われないＲＯＭ内の位置は、自由に他の用途に供することができるが、アクセス可能な領域が連続したものとならないという欠点がある。Ｏｐｓｅｑフィールドは、このような間隔をおいた位置への分岐のための技術を提供するものであり、これによりメモリ空間内の無駄が概ね除去されることになる。
Ｏｐクワドの４つのＲＩＳＣ  Ｏｐフィールドのそれぞれは、単純なＲＩＳＣ風オペレーションを格納する。Ｏｐｓｅｑフィールドは、エミュレーションコードシーケンサ５１０とやりとりし、エミュレーションコードシーケンサ５１０にエミュレーションコードＲＯＭ２３２内の次の位置への分岐をなさしめるコントロールコードを格納する。エミュレーションコードＲＯＭ２３２における４つのＲＩＳＣ  Ｏｐフィールドのそれぞれは、条件付きまたは無条件の分岐オペレーションを格納し、これによりターゲットアドレスを指定して複数の分岐がそのＯｐクワド内にコード化されることになる。命令エミュレーション回路２３１の他の実施例では、ＯｐクワドがＯｐｓｅｑフィールドと共にＯｐを順序付けする１個の分岐オペレーションしか有していない。４つのＲＩＳＣ  Ｏｐフィールドの１つにおける条件付き分岐ＯｐとＯｐクワドにおけるＯｐｓｅｑフィールドの組み合わせにより、２つの可能なターゲットまたは次のアドレスを有するＯｐクワドが生成される。
複数のターゲットアドレスを有するＯｐクワドの場合は、エミュレーションコードシーケンサ５１０は、符号化された予測ターゲットアドレスを選択することによりオペレーションのシーケンスを制御する。従って、条件分岐を含むＯｐクワドの場合は、エミュレーションコードシーケンサ５１０が、条件分岐に対する選好（preference）において、ハード符号化されたＯｐｓｅｑターゲットアドレスを選択する。条件分岐は、プロセッサ１２０の分岐予測機能に基づいて続けて処理され、２ウェイミュレーションコード分岐の実現により、追加の分岐処理オーバーヘッドが発生することがなくなる。
エミュレーションマイクロコードは、Ｏｐクワドの３つの位置の１つにＢＲＣＯＮＤ  Ｏｐが配置されるように書かれる。従って、ＯｐクワドにおけるＢＲＣＯＮＤ  Ｏｐに続くＯｐｓは、分岐が最終的に行われるか否かではなく予測された方向に基づいて実行される。分岐が最終的に正しく予測されていることが分かった場合には、Ｏｐクワドの全てのＯｐｓ及び後続のＯｐクワドの全てのＯｐｓは、スケジューラ２６０にコミットされる。この分岐が最終的に誤り予測であることが分かった場合には、ＢＲＣＯＮＤ  Ｏｐに続く全てのＯｐｓ＋全ての後続のＯｐクワドがアボートされる。エミュレーションコードは、分岐条件、ターゲットアドレス、「予測」アドレス、及び分岐条件の予測も含む形で供給される。
大抵の命令においては、Ｏｐｓｅｑフィールドのみが次のフェッチアドレス即ちベクトルアドレスかＥＲＥＴリターンの何れかを供給する。これは制御用のハードウェアを単純化し、条件分岐または分岐予測の分析なしにオペレーションのフェッチングを制御できる高速で単純なコントロールロジックを与えられるという点で有益である。条件分岐命令の場合には、Ｏｐｓｅｑフィールドが予測分岐アドレスを供給し、クワドにおけるＢＲＣＯＮＤオペレーションが、評価されるべき条件コードを指定し、予測ミスの場合にそのフェッチアドレスを指定する。エミュレーションコード処理（handling）により、いくつかに制限された少ない数のプログラムにより命令コントロールシーケンスが選択されるという非逐次的なＯｐクワドフェッチングの柔軟性が利点として得られる。従って、Ｏｐｓｅｑフィールドは、エミュレーションコードＲＯＭ２３２における使用されない位置に効率的にＯｐシーケンスを当てはめるために利用されるという点で有益である。このエミュレーションコード処理により、条件分岐の場合に所望に応じて２ウェイの分岐を行える柔軟性も得られ、また呼び出し命令の後の命令に戻さなければいけないという制約を加えるのではなく後続の任意の位置に戻すようにされるサブルーチン呼び出しの場合にも、所望に応じた２ウェイ分岐の柔軟性が得られる。ターゲットアドレスで分岐するＯｐｓｅｑフィールドのこのように利用することにより、時間的またはサイクルのペナルティを引き起こすことなく無条件分岐が達成できるという利点が得られる。
エミュレーション環境置換
エミュレーションコードシーケンサ５１０は様々なエミュレーション環境置換を制御して、事実上エミュレーションコードＲＯＭ２３２におけるオペレーションエントリの数より多い数の符号化されたオペレーションへの拡張を行うことができる。エミュレーションコードシーケンサ５１０は、Ｏｐフィールドの特定の、典型的には専用のエンコーディングを分析し、いつ置換が行われ、どの置換が実行されたかを判定するロジック回路を備えている。たいていのエンコーディングは直接フィールドの値を指定する。他のエンコーディングはエミュレーション環境置換を介して間接的にフィールドの値を指定する。エミュレーションモードの置換を用いることにより、エミュレーションコードＲＯＭ２３２のサイズを小さくする共にＣＩＳＣ機能の符号化を達成することができ、またプロセッサの集積回路のサイズ及び製造コストを低減できるという利点が得られる。レジスタフィールド及びいくつかのサイズフィールドを含むＯｐフィールドは、レジスタを直接指定するか、またはＡＸまたはＴ１のような間接レジスタ指定子を指定する。同様にフィールドは、直接レジスタ指定子であるＲｅｇＭも選択し得る。Ｏｐ置換ロジックは、間接レジスタ指定子に対するコーディングを分析して、レジスタコーディングを定義し、レジスタコーディングを現在レジスタに置換する。サイズフィールドは、１バイト、２バイト、または４バイトの中から選択するか、Ｄサイズを選択して、現在の実効データサイズをもとのエンコーディングに戻す。ＨＲｅｇのような記号は、例えばＴ２に対するエンコーディングを表すシンボルＨＲｅｇ＿Ｔ２のように表して特定のエンコーディングを表す。このようなシンボルにはＨＲｅｇ、ＨＤＳｚ、ＨＡＳｚ、ＨＳｅｇＤｅｓｃｒ、ＨＳｐｅｃＯｐＴｙｐｅ等がある。
以下の擬似ＲＴＬコードはエミュレーション環境置換オペレーションを記述したものである。
0003714962.tif 000009
0003714962.tif 000010
0003714962.tif 000011
0003714962.tif 000012
0003714962.tif 000013
エミュレーションコードシーケンサ５１０は、エミュレーションコードＲＯＭ２３２における次のエントリポイントに順序付けをし、４つのオペレーション（Ｏｐｓ）及びＯｐｓｅｑフィールドを含むＯｐクワドを生成する。Ｏｐクワドにおける４つのオペレーションのそれぞれに対して、様々な置換が行われ、置換のタイプは５つの汎用オペレーションタイプの特定のオペレーションタイプによって決まる。５つのオペレーションタイプには、レジスタオペレーション（ＲｅｇＯｐｓ）、ロード−ストアオペレーション（ＬｄＳｔＯｐｓ）、ロード即値オペレーション（ＬＩＭＭＯｐｓ）、特殊オペレーション（ＳｐｅｃＯｐｓ）、及び浮動小数点演算（ＦｐＯｐｓ）が含まれる。５つのオペレーションタイプに対するＯｐフォーマットは第６Ａ図〜第６Ｅ図に示されている。
エミュレーションコードＲＯＭ２３２によって生成されるＯｐｓはもともと一般的なものである。特に、このＯｐｓはｘ８６命令と正確に一致していない。その代わりに、エミュレーションコードＲＯＭ２３２からのＯｐｓはｘ８６命令様の構造を形成する。Ｏｐテンプレート内の様々なビットフィールドはエミュレーションコードシーケンサ５１０により実行される置換ファンクションを用いて置換される。簡単に説明すると、置換ファンクションはＯｐのいくつかのビットをその選択されたビットで置き換える。
ｘ８６命令は、ｍｏｄｒ／ｍバイトが後続するＯｐコードを含んでいるのが普通である。ｍｏｄｒ／ｍバイトは、命令において使用されるインデクシングタイプまたはレジスタ番号を表す。ｍｏｄｒ／ｍバイトは、２ビット（ＭＳＢ）モードフィールド、３ビット（中間）ｒｅｇフィールド、及び３ビット（ＬＳＢ）ｒ／ｍフィールドを含む３つのフィールドを有する。モードフィールドはｒ／ｍフィールドと結合して、８つのレジスタ及び２４個のインデクシングモードを表す４２個の可能な値を形成する。ｒｅｇフィールドは、レジスタ番号またはＯｐコード情報の更なる３ビットを指定する。ｒ／ｍフィールドは、オペランドのロケーションしてレジスタを指定するか、またはモードフィールドと共に用いられてレジスタ及びインデクシングモードを定義する。
第６Ａ図は、ＲｅｇＯｐフォーマットの様々なフィールドを示すレジスタオペレーション（ＲｅｇＯｐ）フィールドエンコーディングの図である。ＲｅｇＯｐフィールド６１０においては、最上位ビット３６及び３７がクリアされて、オペレーションをＲｅｇＯｐとして表す。ＲｅｇＯｐフィールド６１０は、ロケーション［３５：３０］に６ビットオペレーションタイプ（ＴＹＰＥ）フィールド６１２、ビットロケーション［２９：２６］に４ビット拡張（ＥＸＴ）フィールド６１４、ビットロケーション［２５］にＲＵ１−ｏｎｌｙ（Ｒ１）ビット６１６、ビットロケーション［２４：２２］に３ビットオペレーション／データサイズ（ＤＳｚ）フィールド６１８、ビットロケーション［２１：１７］に５ビットデスティネーション（ＤＥＳＴ）汎用レジスタフィールド６２０、及びビットロケーション［１６：１２］に５ビットソース１（ＳＲＣ１）汎用レジスタフィールド６２２を有する。ＲｅｇＯｐフィールド６１０は、ビットロケーション［９］にシングルビットセットステータス（ＳＳ）フィールド６２４、ビットロケーション［８］にシングルビット即値ソース２（Ｉ）フィールド６２６、ビットロケーション［７：０］にソース２オペランド（ＩＭＭ８／ＳＲＣ２）フィールド６２８用の８ビット即値データまたは汎用レジスタを有する。ＲｅｇＯｐエンコーディングのＴＹＰＥフィールド６１２は以下のようなものを含む。
0003714962.tif 000014
0003714962.tif 000015
0003714962.tif 000016
いくつかのＲｅｇＯｐエンコーディング、特にｘｘ０１ｘエンコーディングは、条件コード依存性を指定する。シフトＯｐｓのローテート及びシフトは、異なるｓｔａｔｍｏｄビットがアサートされる点を除いて機能的に等価である。
５ビット条件コードを指定するＭＯＶｃｃオペレーションのために、エクステンションフィールド（ＥＸＴ）６１４がＴＹＰＥフィールド６１２のビット＜０＞と共に用いられる。エクステンションフィールド（ＥＸＴ）６１４は、ビットの特殊レジスタ番号を特定するＲＤｘｘｘ／ＷＲｘｘｘオペレーションのためにも使用される。セットステータス（ＳＳ）フィールド６２４は、ＥＸＴフィールド６１４と共に、オペレーションによる影響を受けるステータスフラグを指定するために使用される。セットステータス（ＳＳ）フィールド６２４が１に設定される、即ちこのＯｐがフラグを変更するようなＯｐｓの場合は、エクステンションフィールド（ＥＸＴ）６１４が、Ｏｐにより修飾されるフラグのグループを指定する４つのステータス修飾ビットを特定する。ＲＤＳＥＧ  Ｏｐｓの場合には、ＥＸＴフィールド６１４が、４ビットセグメント（セレクタ）レジスタを指定する。ＷＲＦＬＧ条件付きＯｐの場合には、特殊レジスタエンコーディングがＳＳフィールドが設定されている場合のための所望のＳｔａｔＭｏｄ値に一致する。セットステータス（ＳＳ）フィールド６２４及びＥＸＴフィールド６１４は、ＲｅｇＯｐフィールドである。
条件コードは、５つのビットに付加され、５ビット条件コードフィールドのビット＜０＞は、条件またはその相補的な条件が捨てられるか若しくはアサートされるようにテストされるべきか否かを指定する。例えばＣＣ＜０＞が１の場合は、条件が反転される。５ビット条件コードＣＣフィールドのビット＜４：１＞、評価されるべき条件を以下のように指定する。
0003714962.tif 000017
ビットｃｃ［０］は、条件または条件の反転が真に評価されたか否かを指定する。
定義として、符号“〜”は、ＮＯＴオペレーションを表し、“．”はＡＮＤオペレーションを表し、“＋”はＯＲオペレーションを表し、“＾”はＸＯＲオペレーションを表す。ＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦ、及びＣＦは、標準ｘ８６ステータスビットである。ＥＺＦ及びＥＣＦは、エミュレーション０フラグ及びエミュレーションキャリーフラグ（emulation carry flag）であり、これらはアーキテクチャの０フラグＺＦ及びキャリーフラグＣＦが変化されないときｘ８６命令を実行するシーケンスにおいてエミュレーションコードが使用する。ＩＰ、ＤＴＦ、ＳＳＴＦは、割り込みがペンディング、デバッグトラップフラグ、及びシングルステップトラップフラグであることをそれぞれ示す信号である。
分岐条件ＳＴＲＺ及びＭＳＴＲＣは、論理的に同一であり、ムーブストリング命令ＭＯＶＳのようなｘ８６命令を実行する場合に用いられる。これらのｘ８６命令においては、エミュレーションコードがレジスタにおけるインデックスを格納し、ＢＲＣＯＮＤで終わるループを生成する。各ループの反復により、データのブロックが移動され、インデックスがデクリメントされる。分岐予測は、初めにＢＲＣＯＮＤがループの初めに分岐することを予測する。条件ＭＳＴＲＣは分岐評価ロジックが、インデックスがｘ８６命令の終わりに近い予測された点に近づいたとき、命令デコーダに信号を送る。次いでデコーダはスケジューラにロードされＢＲＣＯＮＤのための分岐予測を変化させる。従って、予測ミス分岐及びそれに関連するアボートはループが終了したとき開示される。プロセッサの効率はこのようにして改善される。
ＥＸＴフィールド６１４は、ｘ８６フラグ及び２つのエミュレーションフラグに対応する４つのフラグを含む条件フラグを更新するために使用される。８つのフラグはフラグのグループ毎にステップのステータス修飾ビットを用いて８つのグループに分割される。ＥＸＴフィールド６１４は事実上ＴＹＰＥ６１２仕様（specification）から独立した様々な条件コードフラグの更新を定め、機能的に関連性を有するフラグは、制御されグループとして更新される。関連するフラグのグループとしての更新は、コントロールロジックを保存するという利点がある。ＥＸＴフィールド６１４は特定の命令に対して更新されるフラグを決定するビットセットを定義する。独立のＴＹＰＥ６１２及びセットステータス（ＳＳ）フィールド６２４を用いて、オペレーションタイプから条件コード処理を切り離すことにより、いくつかのオペレーションをフラグを更新しないものとして定義することができる。従って、条件フラグの更新が不要なこのような条件の下では、フラグの更新をディスエーブルして、不必要な以前のフラグ値に対する依存性を取り除くことができるという利点が得られる。
ＲＵ１ｏｎｌｙフィールド６１６は、第１レジスタユニット２４４に対して実行され、第２レジスタユニット２４６に対しては発効されないＯｐｓを表し、従ってＲ１フィールド６１６は実行ユニットの仕様のハード符号化のためのビットである。従って、ＲＵ１ｏｎｌｙフィールド６１６は、特殊実行ユニットのみがそのユニット上で実現される機能を組み込んでいることから、特殊実行ユニット上でのみ実行される特定のオペレーションを表す。セットステータス（ＳＳ）フィールド６２４はＥＸＴフィールド６１４の設定に従ってフラグを変更する。このＩフィールド６２６は、ソース２オペランドが即値であるか汎用レジスタであるかを指定する。ＩＭＭ８／ＳＲＣ２フィールド６２８は、Ｉフィールド６２６が０である場合、５ビット汎用レジスタを指定する。ＩＭＭ８／ＳＲＣ２フィールド６２８は、Ｉフィールド６２６が０の場合、ＤＳｚフィールドサイズにより指定されたオペレーションのサイズを拡張した符号付き即値を規定する。
レジスタオペレーション（ＲｅｇＯｐ）置換の場合は、Ｏｐクワドからのオペレーション（Ｏｐ）がレジスタオペレーション（ＲｅｇＯｐ）である。命令レジスタ５１２はベクタリングデコーダ４１８により解読される命令バイトを保持する。ベクタリング命令デコーダコードの間、ベクタリングデコーダ４１８は初期ベクタリングクワド及びエントリポイントアドレスを命令レジスタ５１２の内容に基づいて発生する。同時に、ベクタリングデコーダ４１８はエミュレーション環境変数を初期化し、命令レジスタ５１２のフィールド及び他の情報に基づいて様々な情報からエミュレーション環境レジスタ５１６の呼び出しを行う。エミュレーション環境レジスタ５１６からの情報は、置換オペレーションを実行するＯｐ置換ロジックに供給される。
ＲｅｇＯｐ置換の場合は、様々な置換が第６Ａ図に示すＲｅｇＯｐフォーマット６１０のフィールドに対して行われる。ＲｅｇＯｐオペレーションのデスティネーション（ＤＥＳＴ）６２０及びソース１（ＳＲＣ１）６２２フィールドの場合は、５ビットのレジスタエンコーディングが直接レジスタ指定子０−１５、または間接レジスタ指定子（Ｒｅｇ及びＲｅｇＭ）を用いてレジスタを指定する。直接レジスタ指定子は１６個のレジスタの１つを直接指定する。間接指定子Ｒｅｇ及びＲｅｇＭは、エミュレーション環境レジスタ５１６からの現在レジスタ数（０〜１５）によりＯｐデコード時間において置換される。置換は命令デコーダ２３０が命令をデコードし、エミュレーションコードＲＯＭ２３２におけるエミュレーションコードシーケンスにベクタリングし、及び他の情報から様々なフィールドを備えたエミュレーション環境レジスタ５１６を初期化するときに行われる。エミュレーションコードシーケンスのオペレーションの間、このシーケンスのＯｐｓは間接レジスタフィールド及びサイズデータフィールドのような様々なフィールドを有しており、これらはエミュレーション環境レジスタ５１６の現在値に基づいて置換される。Ｏｐ置換ロジックは、フィールドに対するエンコーディングが置換されたフィールドを表しているか否かを判定する。そのフィールドに対するエンコーディングが他のフィールドが置換されたことを示していることもあり得る。例えば、ｄｅｓｔ６２０及びｓｒｃ１６２２フィールドにおける間接指定子Ｒｅｇ及びＲｅｇＭのコーディングが、ＤＳｚフィールド６１８に置換されたことを示している。
ＤＳｚフィールド６１８に関しては、ｘ８６命令セットは、プロセッサ１２０の現在のデフォルト条件に応じて８ビット、１６ビット、または３２ビットデータについて作用する命令である。ＤＳｚフィールド６１８は、１バイト、２バイト、または３バイトのデータサイズを示す３つのビットを有している。データサイズの置換を指定する命令については、間接サイズ指定子がＡサイズ、Ｄサイズ、またはＳサイズを指定する。データサイズ置換は、Ｂビット及びＤビットにより決定される。Ｂビットは現在スタックセグメントレジスタ（ＳＳ）により指定される。Ｄビットは、コードセグメントレジスタ（ＣＳ）により指定される。間接サイズ指定子の場合は、ＳサイズがＢビットにより決定される。実効アドレス（Ａ）サイズ及び実効データ（Ｄ）サイズは、Ｄビットにより決定され、アドレスまたはデータサイズオーバーライトプリフィクスによりオーバーライドすることができ、エミュレーション環境レジスタ５１６に保持される。一般に、Ａサイズ、Ｄサイズ、及びＳサイズの間接指定子は、バイトまたは４バイトの絶対エンコーディングにより置換される。例えば、Ｄサイズが選択される場合には、データサイズはエミュレーション環境レジスタ５１６におけるビットによって指定された実効データサイズに基づいて２バイトまたは４バイトに分解される。同様に、間接サイズ指定子がＡサイズをコード化する場合には、実効データサイズはエミュレーション環境レジスタ５１６におけるビットにより２バイトか４バイトの何れかに指定される。間接指定子はＳサイズを選択する場合には、Ｂビットが２バイトが置換されるか４バイトが置換されるかを決定する。
Ｉｍｍ８／Ｓｒｃ２フィールド６２８の置換は、ソース２（ｓｒｃ２）オペランドが即値ではなく間接レジスタ指定子である場合にのみ実行される。Ｏｐ置換ロジックは、即値（Ｉ）フィールド６２６に対するエンコーディングがＩｍｍ８／Ｓｒｃ２フィールド６２８における置換を表しているか否かを、Ｉフィールド６２６にアクセスすることにより判定する。間接レジスタ指定子が選択されている場合には、レジスタの汎用レジスタ指定をＲｅｇＯｐフォーマット６１０のＩｍｍ８／Ｓｃｒ２フィールド６２８に置換する。メモリのインデックスを付されたアドレス指定フォームを用いるレジスタに格納されたｓｒｃ２オペランドの場合には、置換は行われずＲｅｇＯｐフォーマット６１０のＩｍｍ８／Ｓｒｃ２フィールド６２８がインデックス値と共にロードされる。ＲｅｇＯｐフォーマット６１０はＳｒｃ１フィールド６２２、Ｉｍｍ８／Ｓｒｃ２フィールド６２８、及びｄｅｓｔフィールド６２０を含むＲＩＳＣ型の３つの（２つのソースで１つがデスティネーション）オペランドフォーマットである。標準ｘ８６フォーマットは非オペランドフォーマットである。ｉフィールド６２６により、ソース２オペランドが即値か汎用レジスタの何れかのフォームを利用できる柔軟性を持つようにできるという点で有益である。
ＲｅｇＯｐフィールド６１０は符号付き乗算（ＭＵＬ１Ｓ）、符号付き乗算（ＭＵＬ１Ｕ）、符号付き乗算（ＭＵＬＥＨ）、上位データの乗算（ＭＵＬＥＨ）及び下位データの乗算（ＭＵＬＥＬ）オペレーションを含む特定のＯｐｓのグループを定義する。これらのＯｐｓは乗算及びアンローディングオペレーションの一部を実行し、即ち複数のこれらの特定の乗算Ｏｐｓから乗算命令が成り立っていることになる。除算オペレーションは、同様に複数の特定の単純な除算Ｏｐｓ、即ち１または２のビット除算（ＤＩＶ１）、ステップ除算（ＤＩＶ２）、除算アンロード剰余（ＤＩＶＥＲ）及び除算アンロード商（ＤＩＶＥＱ）Ｏｐｓの組み合わせにより実行され、例えば除算における２ビット反復（two-bit iteration on a divide）が実行される。
ＷＲＩＰ  ＯＰは、それが交代したとき実行アドレスが変更するｘ８６プログラムカウンタ（ＰＣ）を書き込み、所望のアドレスにおける命令のフェッチを再開する。ＷＲＩＰ  Ｏｐは、命令長のデコードが困難または不可能な様々な命令の場合、即ちロジックが複雑になるのを回避するべく、インクリメントされたロジックは正しく命令長をデコードできない場合に特に有用である。この命令は、命令フェッチオペレーションのシリアル化や分岐のエミュレートにおいても有益である。ロジックが命令長を正しくデコードしなくてもよく、ロジックはＷＲＩＰ  Ｏｐを用いてプログラムカウンタを実現できるようにし、前記正しくないデコード命令長を無視するようにすることによって効率が上がる。
チェックセレクタ（ＣＨＫＳ）Ｏｐは、ｘ８６命令セットセグメントデスクリプタ及びセレクタのために使用される。ＣＨＫＳ  Ｏｐは、ｎｕｌｌセレクタのチェックやデスクリプタテーブルへのアドレスオフセットの発生のオペレーションを含むセグメントレジスタのローディングのプロセスを開始する。
いくつかの書き込みデスクリプタＯｐｓ（ＷＲＤＨ、ＷＲＤＬ、ＷＲＤＲ）が、従来のｘ８６オペレーションに関連してコンピューティング技術においてよく知られているリアルモード（ＷＲＤＲ）及びプロテクトモード（ＷＲＤＨ／ＷＲＤＬ）セグメントレジスタのロードを実行するように定義される。書き込みデスクリプタリアル（ＷＲＤＲ）Ｏｐは、リアルモード形式でセグメントレジスタをロードする。書き込みデスクリプタプロテクトモードハイアンドロー（ＷＲＤＨ／ＷＲＤＬ）Ｏｐｓは、プロテクトモードでのオペレーションのチェックのシーケンスを実行する。従来のｘ８６アーキテクチャにおいては、命令コード及びデータセグメント、及びＩ／Ｏアドレススペーサに対するタスクのアクセスが自動的にプロセッサのハードウェア、典型的にはステートマシンとして動作する機構によりチェックされる。ここに開示するプロセッサでは、従来型のプロテクトモードのチェックや、ハードウェアプリミティブのエミュレーションコードシーケンスとしてオペレーションのシーケンスを代わりに実行する。
第６Ｂ図は、ロード−ストアオペレーション（ＬｄＳｔＯｐ）フィールドエンコーディングの図であり、ＬｄＳｔＯｐフォーマットの様々なフィールドが示されている。ＬｄＳｔＯｐフィールド６３０においては、最上位ビット３６及び３７がそれぞれ１及び０に設定され、ＬｄＳｔＯｐとして動作することを示している。ＬｄＳｔＯｐフィールド６３０はビットロケーション［３５：３２］に４ビットオペレーションタイプ（ＴＹＰＥ）フィールド６３２、及びビットロケーション［３１：３０］に２ビットのインデックススケールファクタ（ＩＳＦ）フィールド６３４を有し、これは１ｘ、２ｘ、４ｘ及び８の係数を表している。ＬｄＳｔＯｐフィールド６３０は、ビットロケーション［２９：２６］に４ビットのセグメントレジスタ（ＳＥＧ）フィールド６３６、及びビットロケーション［２５：２４］に２ビットのアドレス計算サイズ（ＡＳｚ）フィールド６３８を有し、後者はＡサイズ、Ｓサイズ、Ｄサイズ及び４つのバイトの間の選択を指定する。実効データ及びアドレスサイズは、ＲｅｇＯｐ置換と同様にＬｄＳｔＯｐｓの代わりに置き換えられる。ＬｄＳｔＯｐフィールド６３０は、ビットロケーション［２３：２２］において２ビットのデータサイズ（ＤＳｚ）フィールド６４０を有し、ビットロケーション［２１：１７］に５ビットのデータソース／デスティネーション（ＤＡＴＡ）汎用レジスタフィールド６４２を有し、ビットロケーション［１６］にシングルビットの大きい変位（ＬＤ）を有する。ＤＳｚは、整数用のサイズ（１、２、４及びＤサイズを）及び浮動小数点用のサイズ（２、４、及び８バイト）を指定し、ＬＤは先行のＯｐからのＤｉｓｐ８変位を用いて大きな変位を指定するものである。ＬＤビット６４４は、Ｏｐｓが３８ビットの幅、３２ビットの変位全部をオペレーションに指定するには不十分な命令フォーマットであることから有用である。８ビットに符号化された変位のみが１つのＬｄＳｔＯｐフィールド６３０で可能である。ＬＤビット６４４は、アサートされたとき、３２ビット変位全体を供給するオペレーションに先行する即値を示す。ＬｄＳｔＯｐフィールド６３０は、ビットロケーション［１５：１２］において４ビットベース（ＢＡＳＥ）の汎用レジスタフィールド６４６を有する。ＬｄＳｔＯｐフィールド６３０は、ビットロケーション［１１：４］における８ビット符号付き変位（ＤＩＳＰ８）フィールド６８４、及びビットロケーション［３：０］に４ビットインデックス（ＩＮＤＥＸ）汎用レジスタ６４９を有する。ＬｄＳｔＯｐエンコーディングのＴＹＰＥフィールド６３２は以下のようなものである。
0003714962.tif 000018
ロード／ストアオペレーション（ＬｄＳｔＯｐ）置換の場合は、エミュレーションコードシーケンサ５１０がＬＯＣＫプリフィクスがエミュレーション環境のセットアップの間に確認されたか否かを判定する。指定されたＬｄＳｔＯｐオペレーションがストアチェックを有するロード整数（ＬＤＳＴ）であり、ＬＯＣＫプリフィクスが確認された場合には、エミュレーションコードシーケンサ５１０は、ストアチェックを有するロード整数のロックされた（ＬＤＳＴＬ）ｏｐｃｏｄｅをＬＤＳＴｏｐｃｏｄｅの代わりに用いる。
ＬｄＳｔＯｐ置換の場合は、様々な置換が第６Ｂ図に示すＬｄＳｔＯｐフォーマット６３０のフィールドにおいてなされる。ＬｄＳｔＯｐオペレーションのデータレジスタ（ＤａｔａＲｅｇ）フィールド６４２の場合は、５ビットのレジスタエンコーディングが直接レジスタ指定子（０〜１５）または間接レジスタ指定子（Ｒｅｇ及びＲｅｇＭ）を用いてレジスタを指定する。直接レジスタ指定子は、１６個のレジスタの１つを直接指定する。間接レジスタ指定子（Ｒｅｇ及びＲｅｇＭ）は、Ｏｐデコードの時間に、エミュレーション環境レジスタ５１６からの現在レジスタ数（０〜１５）で置き換えられる。命令デコーダが命令をデコードし、エミュレーションコードＲＯＭ２３２におけるエミュレーションコードシーケンスをベクトル指定し、エミュレーション環境レジスタ５１６を命令及び他の情報からの様々なフィールドと共に初期化する。エミュレーションコードシーケンスのオペレーションの間、シーケンス内のＯｐｓは、複数のフィールド、例えば間接レジスタ指定子フィールド、及びサイズデータフィールドを有し、これらはエミュレーション環境レジスタ５１６の現在値に基づいて置換される。Ｏｐ置換ロジックは、１つのフィールドに対するエンコーディングは置換されたフィールドを指定しているか否かを判定する。一つのフィールドに対するエンコーディングが他のフィールドが置換されたことを指定している場合もあり得る。特定の置換はデータレジスタ（ＤａｔａＲｅｇ）６４２をレジスタアドレシングまたはメモリインデックストアドレシングを用いてアドレス指定されるか否かに依存している。レジスタアドレシングフォームが指定されている場合には、ＬｄＳｔＯｐフォーマット６３０のＤａｔａＲｅｇフィールド６４２が間接指定子Ｒｅｇにより決定される。メモリインデックストアドレシングが指定されている場合には、ＬｄＳｔＯｐフォーマット６３０のＤａｔａＲｅｇフィールド６４２が間接指定子ＲｅｇＭにより定められる。
ＡＳｚフィールド６３８及びＤＳｚフィールド６４０については、ｘ８６命令セット命令がプロセッサ１２０の現在のデフォルト条件に応じて８ビット、１６ビット、または３２ビットデータ上に対して作用する。ＡＳｚフィールド６３８及びＤＳｚフィールド６４０はそれぞれ１バイト、２バイト、または３バイトのデータサイズを示す２つのビットを有する。データサイズの置換を指定する命令の場合は、間接サイズ指定子がＡサイズ、Ｄサイズ、またはＳサイズを指定する。データサイズ置換は、Ｂビット及びＤビットにより定められる。Ｂビットは現在スタックセグメントレジスタ（ＳＳ）により指定される。Ｄビットは、コードセグメントレジスタ（ＣＳ）により指定される。間接サイズ指定子の場合は、ＳサイズがＢビットにより定められる。実効アドレス（Ａ）サイズ及び実効データ（Ｄ）サイズは、Ｄビットにより定められ、アドレスまたはデータサイズオーバーライトプリフィクスによりオーバーライドされ、エミュレーション環境レジスタ５１６に保持される。実際に、Ａサイズ、Ｄサイズ、及びＳサイズの間接指定子は、バイトまたは４バイトの代わりに絶対エンコーディングにより置換または置き換えられる。例えば、Ｄサイズが選択された場合、データサイズはエミュレーション環境レジスタ５１６におけるビットにより指定された実効データサイズに基づいて２バイトまたは４バイトに展開される。同様に、間接サイズ指定子がＡサイズをコード化する場合、実効アドレスサイズは２バイトまたは４バイトの何れかであるエミュレーション環境レジスタ５１６におけるビットによって指定される。間接サイズ指定子がＳサイズを選択した場合、Ｂビットが２バイトまたは８バイトが置換されたか否かを判定する。
ＬｄＳｔＯｐオペレーションが４ビットセグメントレジスタフィールド６３６が置換されるべきか否かを判定するべくチェックされる。エミュレーション環境がセットアップされたとき、セグメントオーバーライドプリフィクスがモニタされる。セグメントオーバーライドプリフィクスがＬｄＳｔＯｐの生成が命令の実行オペランドセグメントに依存するとき、後続の命令のデコードに影響を与える。デフォルトセグメントは関連する汎用アドレスモードに応じてＤＳかＳＳであり、最終セグメントオーバーライドプリフィクスにより指定されるセグメントで置き換えられる。セグメントレジスタアドレス空間は、従来型のｘ８６仕様から４ビットに拡張され、追加の特殊セグメントレジスタのサポートを可能にする。セグメントレジスタは以下のように符号化される。
0003714962.tif 000019
Ｏｐデコード時間において、エミュレーションコードシーケンサ５１０は「ＯＳ」セグメントレジスタをエミュレーション環境からの現在の３ビットセグメントレジスタの数で置き換える。従って、セグメントレジスタは特殊セグメントレジスタにおいて交代的にハード符号化されるか、またはセグメントＯＳに設定され、このセグメントＯＳは現在の実効データセグメントレジスタを指定するが、セグメントオーバーライドでオーバーライドされ得ない。
エミュレーションメモリセグメントレジスタ（ＭＳ）は、エミュレーション環境において使用するための特殊エミュレーションメモリのアクセスを表す。デスクリプタテーブルＳｅｇＲｅｇ  ＴＳが、グローバルなディスクリプタテーブル（ＧＤＴ）またはローカルなディスクリプタテーブル（ＬＤＴ）の何れかのアクセスを探す。
第６Ｃ図は、ロード即値オペレーション（ＬＩＭＭＯＰ）フィールドエンコーディングの図であり、ＬＩＭＭＯＰフォーマットにおける様々なフィールドが示されている。ＬＩＭＭＯＰフィールド６５０において、上位ビット３６及び３７は、双方共に１に設定され、これはＬＩＭＭＯＰとしてのオペレーションを表す。ＬＩＭＭＯＰフィールド６５０は、ビットロケーション［３５：２０］に１６ビットの即値上位部分（ＩｍｍＨｉ）６５２、ビットロケーション［１９：１６］の位置に５ビットのデスティネーション（ＤＥＳＴ）汎用レジスタフィールド６５４、ビットロケーション［１５：０］の位置に１６ビットの即値下位部分（ＩｍｍＬｏ）６５６を有する。ＩｍｍＨｉ６５２及びＩｍｍＬｏ６５６は、両者組み合わせて、ＤＥＳＴフィールド６５４により指定されたレジスタにロードされる３２ビットの値を指定する。
第６Ｄ図は、ＳｐｅｃＯｐフォーマットの様々なフィールドを示す特殊オペレーション（ＳｐｅｃＯｐ）フィールドをコードするシーケンスの図である。ＳｐｅｃＯｐフィールド６６０において、上位ビット３５〜３７は、それぞれ１０１に設定され、これはＳｐｅｃＯｐとしてのオペレーションを表す。ＳｐｅｃＯｐフィールド６６０はビットロケーション［３４：３１］の位置に４ビットのオペレーションタイプ（ＴＹＰＥ）フィールド６６２、ビットロケーション［３０：２６］の位置に５ビットの条件コード（ＣＣ）フィールド６６４、及びビットロケーション［３０：２６］の位置に２ビットのデータサイズ（ＤＳｚ）フィールド６６６（これは１、４、及びＤサイズバイトのサイズを表す）を有している。ＳｐｅｃＯｐフィールド６６０は、ビットロケーション［２１：１７］の位置に５ビットのデスティネーション汎用レジスタ（ＤＥＳＴ）フィールド６６８、ビットロケーション［１６：０］の位置に１７ビットの即値定数（Ｉｍｍ１７）フィールド６７０を有する。Ｉｍｍ１７フィールド６７０は１７ビットの符号付き即値か１４ビットのＯｐアドレスの何れかを保持する。ＣＣフィールド６６４はＢＲＣＯＮＤ  Ｏｐｓによってのみ使用される。ＤＳｚフィールド６６６及びＤＥＳＴフィールド６６８は、ＬＤＫｘｘ  Ｏｐｓによってのみ使用される。標準的なＮＯＰ  Ｏｐは、“ＬＩＭＭ  ｔ０，＜ｕｎｄｅｆｉｎｅｄ＞”と定義される。ＳｐｅｃＯｐエンコーディングのＴＹＰＥフィールド６６２は以下のようなコードを含む。
0003714962.tif 000020
特殊オペレーション（ＳｐｅｃＯｐ）置換の場合においては、ＳｐｅｃＯｐがチェックされ、レジスタアドレシングまたはメモリインデックストアドレシングについて、デスティネーション汎用レジスタ（ＤｅｓｔＲｅｇ）がアドレス指定されたか否かが判定される。レジスタアドレシングフォームが指定された場合、エミュレーションコードシーケンサ５１０はＲｅｇレジスタから第６Ｄ図に示すＳｐｅｃＯｐフォーマット６６０のＤｅｓｔＲｅｇフィールド６６８、既に格納されたｍｏｄｒ／ｍ  ｒｅｇを置換する。メモリインデックストアドレシングフォームが指定された場合には、エミュレーションコードシーケンサ５１０は、ＲｅｇｍレジスタからＳｐｅｃＯｐフォーマットのＤｅｓｔＲｅｇフィールド６６８へ以前に格納されたｍｏｄｒ／ｍ  ｒｅｇｍを置換する。ＤｅｓｔＲｅｇフィールド６６８はＬＤＫまたはＬＤＫＤなるオペレーションのデスティネーションである５ビットのレジスタの数を保持する。
ＳｐｅｃＯｐは、データサイズ（ＤＳｚ）フィールド６６６が置換されるべきか否かを決定するためにチェックされる。ＤＳｚフィールドの代わりに置換される値は、エミュレーション環境がオペランドサイズオーバーライドによりオーバーライドされたときの現在セグメントデフォルト情報に基づいて定義されたとき、エミュレーションコードシーケンサ５１０により、Ｏｐ処理の前に決定される。ＤＳｚフィールド６６６は１バイト、４バイトのサイズまたはロード定数オペレーションＬＤＫ及びに対する代わりの定義されたＤサイズに設定される。エミュレーションコードシーケンサ５１０は、ＳｐｅｃＯｐフォーマット６６６のＤＳｚフィールド６６６に指定された置換値を置き換える。
ＳｐｅｃＯｐがロード定数、即ちデータ（ＬＤＫＤ）オペレーションである場合、エミュレーションコードシーケンサ５１０はデータサイズ（ＤＳｚ）フィールド６６６により指定された現在実効データサイズに基づいて１７ビット即値（Ｉｍｍ１７）フィールド６７０におけるデータを調節またはスケールする。１７ビット即値（Ｉｍｍ１７）フィールドは、１７ビットの定数、１７ビットの符号付き即値または１４ビットのＯｐアドレスを含む。
レジスタアドレス空間及びエミュレーションインタフェース
プロセッサ１２０は従来型のｘ８６レジスタアドレス空間と比較して拡張されたレジスタアドレス空間を実現している。プロセッサ１２０レジスタアドレス空間は、５ビットでアドレス指定され、即ち２5または３２個のレジスタが定義されうる。８個のレジスタがｘ８６アーキテクチャのレジスタに対応する。１６個の追加の一次レジスタが追加されている。データサイズ（ＤＳｚ）フィールドは直接または間接にオペレーションのデータサイズを指定する。１バイトのオペレーションに対しては、レジスタエンコーディングフィールドにより指定されたレジスタが同じレジスタエンコーディングフィールドにより指定された２バイトまたは４バイトのレジスタとは異なったものとなる。オペレーションのデータサイズは、オペレーションＲｅｇＯｐｓ、ＳｐｅＯｐｓ、及びＬｄＳｔＯｐｓのデータフィールド６４２に対して１バイト（１B）または２／４バイト（２B／４B）の何れかである。このデータサイズはＬｄＳｔＯｐｓのインデックス６４９及びベース６４６フィールドに対しては常に２／４バイト（２B／４B）である。
プロセッサ１２０レジしスタフィールドエンコーディングは以下の通りである。
0003714962.tif 000021
0003714962.tif 000022
0003714962.tif 000023
ニーモニック“ｔ０”及び“＿”は１つのレジスタに対して同義であり、書き込まれ得るが常に読み出し時に０を戻す。“＿”は、オペランドまたは得られた値が「無視」される場合、使用される。
２４個の汎用レジスタが供給される。初めの８個のレジスタはｘ８６汎用レジスタＡＸ〜ＤＩに対応する。残りの１６個のレジスタは、ＣＩＳＣ命令を実行する多数のオペレーションシーケンス内で用いられる一次レジスタまたはスクラッチレジスタである。５ビットレジスタ番号を用いるオペレーションは３２個のレジスタにアクセスし、整数レジスタ用に使用されない残りのレジスタ番号は、エミュレーション環境変数置換用のプレースホルダまたはマルチメディアレジスタとして使用される。
ｘ８６整数レジスタセットは、半分のレジスタ（ＡＸ、ＣＸ、ＤＸ、及びＢＸ）の下位の２バイトの何れかのバイトオペレーションに対するアドレス指定をサポートしている。レジスタサイズ仕様に基づき、ｘ８６命令内の３ビットレジスタ番号は、上位／下位バイトレジスタまたはｗｏｒｄ／ｄｗｏｒｄレジスタの何れかとして翻訳される。動作の点からいえば、このサイズはオペレーションのＡＳｚまたはＤＳｚフィールドの何れかによって指定される（ＬｄＳｔＯｐｓのインデックスレジスタに対するＡＳｚ、及びｄａｔａ／ｄｅｓｔ、ｓｒｃ１、及びｓｒｃ２レジスタに対するＤＳｚ）。スクラッチ整数レジスタセットは半分のレジスタ（ｔ１〜ｔ４及びｔ８〜ｔ１１）の下位２バイトのアドレス指定に類似したものをサポートしている。
即値データ一次レジスタは、値の差またはリトルエンディアン桁（little-endian significance）の順番でｔ８から始めて使用される。“ｒｅｇ”及び“ｒｅｇｍ”レジスタ番号は、Ｏｐデコード時に、Ｒｅｇ／ＲｅｇＭを“００ｘｘｘ”で置換することによりエミュレーション環境からの現在３ビットレジスタ番号により置き換えられる。この３ビットは、第１の８個のレジスタ（ＡＸ〜ＤＩ）の中から１つのレジスタを指定する。
Ｏｐフォーマットの生成及び拡張レジスタアドレス空間は、プロセッサ１２０の柔軟な内部マイクロアーキテクチャの状態を定義する。ｘ８６アーキテクチャ状態は、プロセッサ１２０のマイクロアーキテクチャの状態のサブセットであることもある。拡張レジスタアドレス空間は、ｘ８６レジスタアドレス空間と比較して拡張された数の一次レジスタを備えている。２４個のレジスタがプロセッサ１２０の拡張レジスタアドレス空間により与えられ、これらのレジスタのうち８つだけがｘ８６アーキテクチャのレジスタに対応し、１６個の一次レジスタが追加されたものである。同様に、プロセッサ１２０は拡張された数のフラグレジスタを備えており、これらのうちいくつかがｘ８６ステータスフラグに対応している。
例えば、プロセッサ１２０の一実施例においては、エミュレーションキャリーフラグが従来型のキャリーフラグ及び関連するエミュレーション環境に追加されて定義されている。従って、従来のａｄｄ命令は、キャリーフラグを設定し、プロセッサ１２０の持続的なアーキテクチャの状態を変化させるものとして定義される。エミュレーションａｄｄオペレーションは、エミュレーションキャリーフラグをセットし、従来型のキャリーフラグはセットしないように定義される。様々な命令がエミュレーションキャリーフラグに基づく分岐を行うように定義されているが、他の命令は従来型のキャリーフラグに基づいて分岐する。従って、プロセッサ１２０は従来型のマイクロアーキテクチャ状態とエミュレーションマイクロアーキテクチャ状態と双方において同時に動作する。このエミュレーション環境における動作により、プロセッサ１２０はエミュレーションマイクロシーケンスを実行すると共に目に見える（visible）マイクロアーキテクチャの状態を変化させないようにすることができる。
第８図には、特定の実施例により代替技術が説明されている。ｘ８６命令セットのＡＤＤレジスタ命令は、ｍｏｄｒ／ｍバイトに先行するｏｐｃｏｄｅとしてコード化される。ＡＤＤ命令の８ビットｏｐｃｏｄｅフィールドは、命令がレジスタ命令であるｍｏｄｒ／ｍバイトにおける使用と共に、エミュレーションコードＲＯＭ２３２にＡＤＤ  ＲｅｇＭ〜Ｒｅｇオペレーションに対するＯｐを生成させる特定のＲＯＭエントリポイントを誘導するために用いられる。命令レジスタ５１２におけるｒｅｇ及びｒｅｇｍフィールドは、ｒｅｇがＡＸになり、ｒｅｇｍがＢＸになるように指定する。ｒｅｇ及びｒｅｇｍフィールドは、命令レジスタ５１２からＯｐ置換回路５２２に供給され、それにより置換が行われる。オペレーションコードＲＯＭ２３２は、限られた数のＯｐｓのみに対するテンプレートを有し、Ｏｐ置換回路５２２は、このテンプレートを埋め、複数の異なるＯｐｓを生成する。
リストされたプロセッサ１２０のレジスタフィールドエンコーディングでは、レジスタＡＸがｒｅｇコード０００００によりハード的に特定されている。この他、４つの可能なｒｅｇエンコーディング、即ち１１０ｘｘが、レジスタの置換を指定する。この置換はエミュレートされる特定の命令、及び現在エミュレーション環境を含むプロセッサ１２０現在の状態に基づいてなされる。一般に、オペレーションの置換及び実行は、（１）Ｒｅｇに対するエンコーディングをｄｅｓｔフィールド６２０に入れ、（２）レジスタＲｅｇに対するエンコーディングをｓｒｃ１フィールド６２２に入れ、（３）ＲｅｇＭに対するエンコーディングをＩｍｍ８／Ｓｅｃ２フィールド６２８に入れ、（４）０を即値（Ｉ）フィールド６２６に入れ、（５）データサイズにより指定された１、２、または４バイトをＤＳｚフィールド６１８に入れることにより行われる。
第９図には、スケジューラ２６０の一例が示されている。スケジューラ２６０は、最大２４個のオペレーションと関連を有する２４個のエントリを有する。各エントリは、スケジューリングリザーバ９４０及びエントリに関連するロジック９３１〜９３６の部分にストレージエレメント（名目上フリップフロップ）のセットを有する。このストレージロケーションは、実行を待機している、実行中の、または実行が終了したオペレーション（Ｏｐ）に関連する情報が格納されている。大抵のストレージエレメントは、命令デコーダ２２０が新たなオペレーションをスケジューラリザーバ９４０にロードしたとき、ロード／初期化される。ストレージエレメントの中には、例えばオペレーションが実行を終えたとき、後でロードまたはリロードされるものがある。オペレーションがスケジューリングリザーバ９４０にロードされたときからオペレーションがスケジューラ２６０から退くまでの時間に値を保持するストレージフィールドは、ここでは「スタティックフィールド」と称する。新しい値でロードされ得るフィールドはここでは「ダイナミックフィールド」と称する。
個々のストレージエレメントエントリは、イネーブル状態のフリップフロップと考えられる。これと共に、スケジューラ２６０に関連して複数のストレージエレメント、４エントリの幅及び６行の（Ｏｐクワドエントリ）深さであるシフトレジスタである。ダイナミックフィールドに関連するストレージエレメントはデータソースから先行するストレージエレメントからロードされる。データはストレージエレメントにロードされ、同時に独立して異なるストレージエレメントにシフトされる。
スケジューラ２６０は、レジスタユニット２４４及び２４６、ロードユニット２４０、及びストアユニット２４２によって生成されたＲＵ、ＬＵ、及びＳＵパイプラインを制御する。各ＲＵパイプラインは、発行段階、オペランドフェッチ段階、または段階０、及び段階１と称される３つの段階を有する。ＬＵ及びＳＵパイプラインは、発行段階、オペランドフェッチ段階または段階０、段階１及び段階２と称される４つの段階を有する。上述のように、状態フィールドは、関連するオペレーションの現在のパイプライン段階を示す、若しくはオペレーションがこのパイプラインを終了したことを示す「それらのシフト／増加フィールド（shifting/increasing field of ones）」エンコーディングを用いて５つの状態を表す。
スタティックフィールドは、以下のように定義され、全ての値はアクティブハイである。
Ｔｙｐｅ［２：０］はオペレーションのタイプ、特に発行選択についての指定を行う。例えば、ＬｄＯｐｓはＬＵのみの発行に対して選択される。Ｔｙｐｅ［２：０］は以下のような３つのビットにデコードされる。
０００  特殊オペレーションが実際に実行されていない
０１０＝ＬＵ  ロードユニットにより実行されるＬｄＯｐ
１０ｘ＝ＳＵ  ストアユニットにより実行されるＬｄＯｐ
１０１＝ＳＴ  メモリを参照するまたは少なくとも誤りである可能性のある（faultable）アドレス（即ちＬＥＡオペレーションではない）を生成するＳｔＯｐ
１１ｘ＝ＲＵ  ＲＵＸまたは場合によってはＲＵＹにより実行されるＲｅｇＯｐ
１１０＝ＲＵＸ  ＲＵＸによりＯＮＬＹが実行可能なＲｅｇＯｐ
１１１＝ＲＵＹ  ＲＵＸまたはＲＵＹにより実行可能なＲｅｇＯｐ
ＬＤ＿Ｉｍｍ  ＬｄＳｔＯｐの場合、このオペレーションは大きな変位（このエントリ内に収まる小さな（８ビット）の変位に対して）を用いる。このオペレーションがＲｅｇＯｐの場合は、即値がＳｒｃ２オペランドである。
Ｓｒｃ１Ｒｅｇ［４：０］  ソース１オペランドレジスタ番号
Ｓｒｃ２Ｒｅｇ［４：０］  ソース２オペランドレジスタ番号
ＤｅｓｔＲｅｇ［４：０］  デスティネーションレジスタ番号
ＳｒｃＳｔＲｅｇ［４：０］  ストアデータのためのソースレジスタ番号
Ｓｒｃ１ＢＭ［１：０］、Ｓｒｃ２ＢＭ［１：０］、及びＳｒｃ１２ＢＭ［２］はオペレーションの実行のために有効でなければならないＳｒｃ１Ｒｅｇ及びＳｒｃ２Ｒｅｇのバイトを表すバイトマークである。Ｂｉｔｓ［２］、［１］、及び［０］は、それぞれＲｅｇ［３１：１６］、Ｒｅｇ［１５：８］、及びＲｅｇ［７：０］に対応する。Ｓｒｃ１２ＢＭ［２］は、Ｓｒｃ１Ｒｅｇ及びＳｒｃ２Ｒｅｇの双方に与えられる。
ＳｒｃＳｔＢＭ［２：０］バイトは、Ｓｔｏｒｅ  Ｄａｔａレジスタを特定するためにＳｔＯｐによって使用される場合、ＳｙＯｐの実行及び実行の完了のために必要なＤｅｓｔＲｅｇのバイトを表すバイトマークである。このビットの対応はＳｒｃ１ＢＭ［１：０］の場合と同じである。
ＯｐＩｎｆｏ［１２：０］は、このオペレーションが実行可能であるか否かに応じて実行ユニットまたはオペレーション特定ユニット（ＯＣＵ）９７０によってのみ使用される追加の情報である。スケジューラはそうでない場合にはこの情報を使用しない。ＯｐＩｎｆｏが、ＯｐがＲｅｇＯｐ、ＬｄＳｔＯｐ、またはＳｐｅｃＯｐの何れかであるかに応じて、３つの可能なフィールド定義に合併集合演算（union）である。
ＲｅｇＯｐに対しては、
Ｔｙｐｅ［５：０］  元のＯｐ  Ｔｙｐｅフィールドのコピー
Ｅｘｔ［３：０］  元のＯｐ  Ｅｘｔフィールドのコピー
Ｒ１  Ｏｐ  元のＲ１フィールドのコピー
ＤａｔａＳｚ［１：０］  このオペレーションに対する実効データサイズ（１、２、４バイト）
ＬｄＳｔＯｐに対しては、
Ｔｙｐｅ［３：０］  元のＯｐ  Ｔｙｐｅフィールドのコピー
ＩＳＦ［１：０］  元のＯｐ  ＩＳＦフィールドのコピー
Ｓｅｇ［３：０］  元のＯｐ  Ｓｅｇフィールドのコピー
ＤａｔａＳｚ［１：０］  メモリ転送のための実効データサイズ
ＡｄｄｒＳｚ  アドレス計算のための実行アドレスサイズ（３２／１６ビット）
ＳｐｅｃＯｐに対しては、
Ｔｙｐｅ［３：０］  元のＯｐ  Ｔｙｐｅフィールドのコピー
ＣＣ［４：０］  元のＯｐ  ｃｃフィールドのコピー
ダイナミックフィールドは以下のように定義され全ての値はアクティブハイである。
Ｓｔａｔｅ［３：０］は、オペレーションの現在の実行状態を示すものである。（Ｓ３、Ｓ２、Ｓ１、Ｓ０はＳｔａｔｅ［３：０］に対する別の信号のネームである。）５個の可能な状態が４ビットのシフティングフィールドによってコード化される。
００００  発行されない
０００１  段階０
００１１  段階１
０１１１  段階２
１１１１  完了
中間の状態はＯｐの現在実行段階に対応する。このビットはオペレーションが早く発行されるか、段階が進んだときに更新（効果的にシフトされる）、いくつかのオペレーション（例えばＬＤＫ）は、初期状態１１１１を以てスケジューラにロードされ、従って常に「終了」している。Ｓｔａｔｅ［３：０］も、アボートサイクルの間に１１１１にセットされる。
0003714962.tif 000024
0003714962.tif 000025
Ｅｘｅｃ１  このオペレーションがＲｅｇＯｐである場合、ＲＵＸ（ＲＵＹでない）はこのオペレーションを実行する。Ｅｘｅｃ１は、このオペレーションがうまく発行されたときにロードされる。
0003714962.tif 000026
ＤｅｓｔＢＭ［２：０］  そのＯｐが修飾するＤｅｓｔＲｅｇのバイトを指定するバイトマーク。ビット（２、１、０）は、それぞれＤｅｓｔＲｅｇ［３１：１６］、Ｒｅｇ［１５：８］、及びＲｅｇ［７：０］に対応する。ＤｅｓｔＢＭは、アボートサイクルにおいてクリアされる。
0003714962.tif 000027
ＤｅｓｔＶａｌ［３１：０］  ＤｅｓｔＶａｌは、ＤｅｓｔＲｅｇに痛くされるＯｐの実行から得られたレジスタの数値である。ＤｅｓｔＢＭは、Ｏｐの実行の後、バイトが有効となっていることを示す。ＤｅｓｔＶａｌは、Ｏｐが、Ｏｐのタイプに応じて実行段階１または２を完了したときにロードされる。ＬＤＫのような実行されないＯｐｓの場合は、ＤｅｓｔＶａｌは適当なレジスタの値で初期化される。その代わりにＤｅｓｔＶａｌは、ＲｅｇＯｐｓ及びＬｄＳｔＯｐｓに対して大きな即値及び変位値を保持し、かつ、ＢＲＣＯＮＤ  Ｏｐに関連する代わりの（連続したまたはターゲットの）分岐ＰＣを保持する。
0003714962.tif 000028
ＳｔａｔＭｏｄ［３：０］  ステータスビットのどのグループをＯｐが修飾したかを示すステータスグループマークである。ビット（３、２、１、０）は、それぞれ｛ＥＺＦ，ＥＣＦ｝、ＯＦ、｛ＳＦ、ＺＦ、ＡＦ、ＰＦ｝及びＣＦに対応する。ＳｔａｔＭｏｄは、非ＲｅｇＯｐｓに対して常に０であり、アボートサイクルの間にクリアされる。
0003714962.tif 000029
ＳｔａｔＶａｌ［７：０］  ＳｔａｔＶａｌは、このＯｐの実行から得られたステータス値であり、ＥＦｌａｇｓにコミットされる。ＳｔａｔＭｏｄは、Ｏｐ実行の後、有効ビットを示す。ＳｔａｔＶａｌは、全ての非ＲｅｇＯｐｓに対するＳｔａｔＭｏｄの０値によって反映されるように、ＲｅｇＯｐｓに対してのみ有意である。ＳｔａｔＶａｌは、ＲｅｇＯｐが実行段階１を完了したときロードされる。
0003714962.tif 000030
追加のストレージエレメントは、２つのロジックの段階の間で果たされる遷移情報を格納するために用いられる。これはよりグローバルな有意性の情報とは異なるものである。ストレージエレメントは、上述のものと物理的には同じものであり、単に完了したことに対してリストされる。追加のストレージエレメントには、各処理パイプラインにおいて発行段階から段階０へ情報を渡す、または場合によってはＳＵの段階１から段階２へ情報を渡すことから、ストレージエレメント値は、ＸＸＸＡｄｖ０（またはＳＵＡｄｖ２）グローバル信号により制御される。
0003714962.tif 000031
ＤＢＮ［３：０］  ＬｄＳｔＯｐに対する４つのＢｎ（ｎ＝０〜３）データブレークポイントステータス。このフィールドは、初めに０にされ、次いでこの位置にあるＬｄＳｔＯｐが実行し、適当なユニットからのブレークポイントビットが後に行われるトラッピングのために記録される。
0003714962.tif 000032
スケジューラＯｐクワドエントリ定義
２４個のエントリは、一端（トップ）にロードされた新たなオペレーションと共にＦＩＦＯ形式で管理され、他の末端（ボトム）にシフトダウンされ、スケジューリングリザーバ９４０のボトムから退却またはアンロードされる。制御を単純化するため、スケジューラ２６０はＯｐクワドベースでリザーバ９４０を管理する。オペレーションは４つのグループでロードされ、シフトされリザーバ９４０から退却させられる。これは、デコーダ２２０におけるｅｍｃｏｄｅ  ＲＯＭ及びＭａｃＤｅｃの双方によりＯｐクワドのフォームでオペレーションをフェッチし生成することに一致している。
スケジューリングリザーバ９４０は、Ｏｐクワドを含む６つのエントリシフトレジスタにみなすことができる。各Ｏｐクワドエントリは、４つのエントリ、プラスＯｐクワド全体に関連する追加の情報を含む。以下に追加のＯｐクワドフィールドを列挙し、各フィールドがショート機能性記述を提供する。全ての値はアクティブハイに定義される。大抵のフィールドはスタティックである。ダイナミックフィールドの記述は、ＤＡＴＡを生成するロジックの擬似ＲＴＬ定義を含み、これらのフィールドを保持するストレージエレメントの入力をイネーブルにする。
Ｅｍｃｏｄｅ：これがｅｍｃｏｄｅ  ＲＯＭからのｅｍｃｏｄｅ  Ｏｐクワドがあるか、ＭａｃＤｅｃにより生成されたＯｐクワドであるかを表すインデックス。
Ｅｒｅｔ：これがｅｍｃｏｄｅ  Ｏｐクワドであり、ＥＲＥＴ（ｅｍｃｏｄｅ  ＲＯＭからのリターン）を含むことを表すインデックス。
ＦａｕｌｔＰＣ［３１：０］  Ｏｐクワドエントリにおけるオペレーションに関連する論理的マクロ命令（ｍＩ）フォルトプログラムカウンタ値。任意のオペレーションにおけるフォルト例外を管理する際にオペレーション画定ユニット（ＯＣＵ）９７０により使用される。
ＢＰＴＩｎｆｏ［１４：０］  Ｏｐクワドが生成されたときからの分岐予測テーブル関連の情報。このフィールドは、ＢＲＣＯＮＤオペレーションを含むＭａｃＤｅｃにより生成されたＯｐクワドに対してのみ定義される。
ＲＡＳＰｔｒ［２：０］  Ｏｐクワドが生成されたときのリターンアドレススタックのスタックトップ（ＴＯＳ）の値。このフィールドは、ＢＲＣＯＮＤオペレーションを含むＭａｃＤｅｃにより生成されたＯｐクワドに対してのみ生成される。
ＬｉｍＶｉｏｌ  Ｏｐクワドは、コードセグメントリミット違反がターゲットアドレス上で検出された場合に対する転送制御命令のデコードであることを示すインデックス。大抵のＯｐクワドに対しては、このフィールドはスタティックである。第１レジスタＯｐクワドエントリに対しては、このフィールドは以下の擬似ＲＴＬ記述により要約されるようにロードされうる。
0003714962.tif 000033
ＯｐＱＶ  Ｏｐクワドエントリが有効Ｏｐクワドを含み、エントリのシフトを制御するロジックにより使用されることを表すインデックス。「無効」Ｏｐクワドエントリに対するものの中に含まれるエントリは、更に定義され、アボートされたエントリとして同じ状態を維持する。
0003714962.tif 000034
Ｏｐ１Ｉ、Ｏｐ２Ｉ、Ｏｐ３Ｉ  このＯｐクワド（１、２、または３）により提供されるマクロ命令（ｍＩ）の数のカウント。退却した命令のカウントを維持するために用いられる。
Ｉｌｅｎ０、Ｉｌｅｎ１  第１の、そして（存在するならば）第２のＯｐクワドにより提供されたマクロ命令のバイト長。フォルトが発生した命令アドレスを決定するために用いられる。
0003714962.tif 000035
第１の及び（Ｏｐクワド内に１ページを越える命令が存在する場合は）第２のＯｐクワドにおけるオペレーションによりカバーされたアドレス。自己修飾コードを検出するために用いられる。
ＯｐＤｅｃ定義
命令デコーダ２２０は、Ｏｐ置換回路５２２を備えており、これは命令デコーダ２２０のマクロ命令デコーダ２３０及びエミュレーションコードＲＯＭ２３２をスケジューラ２６０に接続している。Ｏｐ置換回路５２２は、ＲＩＳＣ命令をスケジューラリザーバ９４０のトップ、Ｏｐクワドエントリ０にロードされるフィールド値に拡張するものである。Ｏｐクワドを生成するために、Ｏｐ置換回路５２２は、いくつかのフィールドを、他のフィールドに基づいてＲＩＳＣ命令から修飾し、既存のものから新たなフィールドを誘導し、物理的に異なるフィールドを有するいくつかのフィールドを置換し、２，３のフィールドを変更せずに渡す。これが必要なｅｍｃｏｄｅオペレーションの代わりの環境変数置換、及び中心にジャンプされるｅｍｃｏｄｅ  ｏｐクワド内のオペレーションのヌル化が双方ともにＯｐＤｅｃ（即ちＥｍＤｅｃ）に先行するロジックにおいて実行される。
以下の擬似ＲＴＬ式は、入力されたＲＩＳＣ命令のフィールドからスケジューラエントリの各フィールドを生成することを記述したものである。ｘｘｘＯｐ．ｙｙｙなる表記は、命令の実際のタイプとは無関係に、命令のタイプｘｘｘＯｐに対して定義されたｙｙｙを表している。例えば、ＲｅｇＯｐ．Ｓｒｃ１は、ＲｅｇＯｐのＳｒｃ１フィールドと同じ位置にある命令のビットを表している。第６Ａ図から第６Ｅ図は、ＲｅｇＯｐ、ＬｄＳｔＯｐ、ＬＩＭＭＯｐ、ＳｐｅｃＯｐ、及びＦｐＯｐに対するフィールド定義の例である。
0003714962.tif 000036
0003714962.tif 000037
0003714962.tif 000038
0003714962.tif 000039
0003714962.tif 000040
以下の擬似ＲＴＬコードは、全ての特定のオペレーションではなくＯｐクワドに関連する各Ｏｐクワドエントリフィールドの生成について記述したものである。
0003714962.tif 000041
0003714962.tif 000042
発行選択
サイクルの初めの全てのエントリのＳｔａｔｅ［３：０］フィールドに基づく各サイクルにおいてスケジューラ２６０は、対応する処理パイプラインＬＵ、ＳＵ、ＲＵＸ、及びＲＵＹに対して発行されるＬｄＯｐ、ＳｔＯｐ、及び２つのＲｅｇＯｐｓを選択する。スケジューラ２６０は、スケジューリングリザーバ９４０における古いものから新たなオペレーションへ「順番に」選択される各エントリ内のＳｔａｔｅ及びＴｙｐｅフィールドに基づいて発行のためのオペレーションを選択する。発行選択ではレジスタステータスは考慮せず、及び／または比較的古いオペレーションに対して各オペレーションが有するメモリ依存性も考慮しない。
スケジューラ２６０は、４つの処理パイプラインのそれぞれに対して同時且つ個別に発行選択を実行する。４つのパイプラインに対する選択アルゴリズムは類似したものである。次の未発行オペレーション（そのＳｔａｔｅフィールドにより示されたもの）で所与のタイプのものが選択される。つまり、次の未発行ＬｄＯｐは、ロードユニット２４０に対して選択され、次の未発行ＳｔＯｐはストアユニット２４２に対して選択され、次の２つの未発行ＲｅｇＯｐｓはレジスタユニットＸ及びレジスタユニットＹ（第１はＲＵＸ、第２はＲＵＹ）に対して発行される。概念的には、ＲＵＹに対する発行選択は、ＲＵＸに依存しているが、ＲＵＸに対する発行選択と並行して実行される。後に更に説明するように、いくつかのＲｅｇＯｐｓは、ＲＵＸに対してのみ発行可能であり、ＲＵＹへの発行のために選択されたオペレーションは、ＲＵＹに対して発行可能な次のＲｅｇＯｐである。
各スケジューラエントリは４つのビット（即ち信号）Ｉｓｓｕａｂｌｅ  ｔｏ  ｘｘｘを生成するが、これはそのオペレーションがパイプラインｘｘｘ（ＬＵ、ＳＵ、ＲＵＸまたはＲＵＹ）に対する発行選択について現在的確であるかを示すものである。
0003714962.tif 000043
Ｉｓｓｕａｂｌｅ  ｔｏ  ｘｘｘにある信号は、エントリのＳｔａｔｅ及びＴｙｐｅビットから生成される。詳述すると、実行パイプラインＬＵ／ＳＵ／ＲＵＸ／ＲＵＹのそれぞれに対してＳｔａｔｅ＝Ｕｎｉｓｓｕｅｄ＝〜ＳＯ及びＥｘｅｃｕｔａｂｌｅ  ｂｙ  ｘｘｘが対応する。パイプラインｘｘｘに対する選択プロセスは、最も古いスケジューラエントリから最も若いスケジューラエントリまでビットＩｓｓｕａｂｌｅ  ｔｏ  ｘｘｘセットを持つものがスキャンされる。パイプラインＬＵ、ＳＵ、及びＲＵＸに対しては、ビットセットを有するものとして見つけられた第１オペレーションが発行すべく選択されたものである。パイプラインＲＵＹに対する発行選択は、パイプラインＲＵＸに対して選択されたオペレーションの後このようなオペレーションの初めのものが選択される。
スケジューラにロードされた直後の発行選択に対してオペレーションが的確である、即ちオペレーションはスケジューラ内に存在するその第１サイクルの間に発行され得る。このような場合においては、Ｔｙｐｅビット及びビットＳ０だけがサイクルの初めに有効であることが必要である。他の全てのエントリ内のフィールドは、発行選択フェーズの間に生成され、処理パイプラインの次のフェーズのためにスケジューラエントリ内で有効であることが必要なだけである。
発行のために選択されたオペレーションが段階０に進まない場合は、そのオペレーションはうまく発行されなかったことになる。次のクロックサイクルの間に、このオペレーションのＳｔａｔｅフィールドは、そのオペレーションが未発行であること、及びそのオペレーションが発行について競合しており、また選択される可能性があることを示すようになる。
本発明の一実施例においては、スケジューラ２６０がエントリの論理回路から形成されたスキャンチェーンを用いてオペレーションをスキャンする。各スキャンチェーンは高速アダーにおいて使用されるようなキャリーチェーンに類似したものである。ロードユニット、ストアユニット、またはレジスタユニットＸに対して発行されるオペレーションのスキャンの場合には、最も古いエントリに対するエントリへのキャリービットＣｉｎ入力が、セットされ、エントリの１つのロジックがスキャンビットを殺すまでスキャンチェーンを通して伝えられる。エントリはスキャンされるタイプのオペレーション（即ちＩｓｓｕａｂｌｅ  ｔｏ  ｘｘｘ）に対応する場合には、エントリがキャリービットを殺す。レジスタユニットＹに対して発行されるオペレーションのスキャンのためには、キャリービットがレジスタユニットＸに対して発行されるオペレーションに関連するエントリにより生成され、そのキャリービットはレジスタユニットＹに対して発行され得るオペレーションに関連するエントリにより殺されるまで伝えられる。
変位フォワーディング
オペランドフォワードフェーズの間、スケジューラ２６０は、これらのユニットに対するレジスタオペランドに加えてＬＵ及びＳＵ処理パイプラインに対する変位オペランドをフェッチしフォワーディングする。このＬＵ及びＳＵのそれぞれは、２つのレジスタオペランド及び１つの変位オペランドを備えた３つの入力オペランドバス９５２を有している。変位オペランドは３２ビット量であるが、いくつかのバイトは定義されていなくてもよい。実行ユニットは修正オペレーションの間には定義されていない変位バイトしか使用しない。
スケジューラ２６０はオペレーションレジスタ結果値に類似した方法で変位を取り扱う。この変位は、エントリの３２ビットＤｅｓｔＶａｌフィールド内で使用されるまで格納され、変位バス９５０、ＬＵ／ＳＵ段階１のオペランドフォワードフェーズの間の適当なときに送られる。変位は常にスケジューラ２６０内の即値であり、レジスタファイル２６４からのフォワードディング変位値は発生しないことになる。フィールドＤｅｓｔＶａｌは、ＬｄＯｐｓ及びＬｄＳｔＯｐのＳｔＯｐｓから得られた値に対しても用いられるが、これら２つは結果値が変位値の使用された後まで、即ち段階０が終わりまでスケジューラエントリにロードされないことから使用のコンフリクトが起こらない。
オペレーション内で指定される小さい（８ビット）変位は、大きな（１６／３２ビット）変位とは異なる形で取り扱われる。Ｏｐ置換回路５２２は小さい変位を関連するＬｄＳｔＯｐを保持するエントリのＤｅｓｔＶａｌフィールドにロードされる前に小さい変位を拡張する。大きな変位は、変位を用いるＬｄＳｔＯｐ直前のエントリのＤｅｓｔＶａｌフィールドに格納されているものと推定される。一般に、先行するエントリはＬＩＭＭ  ｔ０，（ｄｉｓｐ）オペレーションを保持する。
各サイクルの間に変位バス９５０に送るためのＤｅｓｔＶａｌ値の選択には、スケジューラエントリのスキャンは不要である。代わりに、各エントリがそのＳｔａｔｅ及びＴｙｐｅフィールドから、ＤｅｓｔＶａｌフィールド値を適当な変位バス９５０にアサートするための先行するエントリにおけるそれ自身のドライバをイネーブルにするか否かを決定する。以下の式は、各エントリ内の変位バスドライバのイネーブル処理を要約したものである。
0003714962.tif 000044
値ｔｈｉｓＯｐ及びｎｅｘｔＯｐは、そこから以下の最小項のリテラルＬＵ、Ｓ１、Ｓ０、及びＬＤが作る物理的エントリを特定する。また、第１のまたは最も若いスケジューラ２６０内のエントリの場合は、ＮｅｘｔＯｐ最小項は０である。
即値フォワーディング
実行エンジン２２２に対するＲＩＳＣ命令のフォーマットの例示によれば、即値はＲｅｇＯｐｓのｓｒｃ２オペランドのみである。スケジューラ２６０は変位と同様の方法で即値を取り扱うが、レジスタオペランドフォワーディング機構の一部として取り扱う。変位値と同様に、即値はエントリのＤｅｓｔＶａｌフィールドに格納される。しかし、レジスタオペランドと同様に、即値はレジスタオペランドバス９５２（具体的にはＲＵＸｓｒｃ２及びＲＵＹｓｒｃ２オペランドバス）を通してフォワードされる。
例示したＲＩＳＣ命令セットは、ＲｅｇＯｐｓにおける小さい（８ビット）即値のみを使用し、その即値をＲｅｇＯｐを保持するエントリのフィールドＤｅｓｔＶａｌに格納する。Ｓｒｃ２オペランド即値は、レジスタ値の代わりに、段階０のオペランドフォワードフェーズの間にうまくレジスタ実行ユニットにフォワードされる。レジスタ値ソース（即ちスケジューラエントリまたはレジスタファイル）の選択は抑止され、問題のエントリは直接そのＤｅｓｔＶａｌフィールドの適当なｓｒｃ２オペランドバス９５２におくる。
任意のＲＵＸ／ＲＵＹｓｒｃ２オペランド選択の抑止は、そのオペランドがフェッチされるＲｅｇＯｐを保持するエントリにより通常アサートされる新合成性のマスキングを通してオペランド選択フェーズの間に実行される。これは、ＲＵＸｓｒｃ２及びＲＵＹｓｒｃ２に対するものとは独立して個別に行われ、ＲＵＸ／Ｙｓｒｃ２スキャンチェーンによるエントリの選択、及びデフォルトオペランドソースとしてのレジスタファイルの選択を防止する。以前のオペランド選択スキャンチェーンの式は、抑止を示す。
各サイクルの間にＲＵＸｓｒｃ２及びＲＵＹｓｒｃ２オペランドバスに送られる「即値」ＤｅｓｔＶａｌ値の選択には、スケジューラエントリのスキャンは不要である。代わりに、各エントリは単にそのＳｔａｔｅ及び関連のビットに基づいて、適当なオペランドバスへのそのＤｅｓｔＶａｌフィールドのドライバをイネーブルにする。通常のレジスタ値フォワーディングのために用いられる同じドライバが存在する。また即値オペランドの取り扱いのための各イネーブル式に単に追加のファイルが加われている。以下は、各エントリ内の別のバスドライバをイネーブルにする各式としてのタームを要約したものである。
0003714962.tif 000045
エントリがオペランドバス９５２即値を送ったとき、エントリは、関連するオペランドステータスバス９５４にも送る。通常のオペランド用の同じバスドライバ及びドライバインプット値は、即値用に使用される。即ち、イネーブル式は単に追加のタームが存在する（同じ追加のタームは表記されている）。以下は、個別のバスドライバをイネーブルする個別の式としてのこれらのタームを要約したものである。
0003714962.tif 000046
データオペランドフェッチ
ＳｔＯｐｓは、３つのレジスタソースオペランドを有しレジスタデスティネーションは有していない。これは他のオペレーションが最大２つのソースオペランドと１つのデスティネーションを有しているのと対照的である。ＳｔＯｐに対する概算のソースオペランドは、格納されるデータを供給し、ここではデータオペランドと称することもある。このデータオペランドは、実行を開始するのには必要ではないが、ＳｔＯｐ完了のためには必要である。ＳｔＯｐオペランド値のフェッチングは、他のソースオペランドのフェッチングと同様に実行されるが、ＳＵ段階２と同期されている。「通常の」オペランドフェッチプロセスがオペレーション処理の段階０及び発行段階において生ずるのに対し、データオペランドフェッチプロセスは、ＳＵ段階１及び２において生ずる。スケジューラ２６０はＳＵステージ２の間に使用すことができなくなったデータオペランドを検出し、段階２において関連するＳｔＯｐを保持する。
このデータオペランドフェッチプロセスは、主な相違点が２つあることを除いて上述の発行及びオペランドフェッチ段階と概ね同じである。第１の違いは、ＳＵ段階１におけるＳｔＯｐに対するオペランド選択フェーズが発行選択フェーズに取って変わっており、複数の候補の中からの選択を行うためのスケジューラエントリのスキャンを行わない点である。その代わりに、ＳＵ段階１においてＳｔａｔｅに関連するエントリが、Ｓｔａｔｅ及びＴｙｐｅフィールドからそれ自身を特定する。第２の相違点は、データオペランドのためのブロードキャスト段階において、ＳｔＯｐのＯｐＩｎｆｏフィールドが（再度）読み出される必要が内という点である。その代わりに、ストアユニット２４２がＳｔＯｐが発行されたとき、読み出されたＯｐＩｎｆｏ値を保持し、後続の段階の間にそのＯｐＩｎｆｏフィールドを使用する。ＳＵ発行段階に読み出されるＯｐＩｎｆｏ値は、ＳＵパイプラインの段階０、１、及び２を通じてオペレーションに受け渡される。
以下の式はデータオペランドフェッチのために生成される信号を記述したものである。
ＳＵ段階１：オペレーション選択フェーズ
0003714962.tif 000047
ＳＵ段階１：データオペランド一斉送信（broadcast）フェーズ
0003714962.tif 000048
マッチ信号は、次いで各エントリ内のパイプラインレジスタビットにマッチされる。
0003714962.tif 000049
ＳＵ段階２：データオペランド選択フェーズ
0003714962.tif 000050
グループレベルスキャン式は、以下のオペランド選択スキャンチェーンと同じものである。
0003714962.tif 000051
ＳＵ段階２：オペランドフォワードフェーズ
各スケジューラエントリ内のドライバに対するイネーブル：
0003714962.tif 000052
バス５５５を通して転送されるデータオペランドＯｐｒｎｄ＿ＳＵｓｒｃＳｔは、ストアユニット２４２の入力のところでパイプラインレジスタに捕捉される。このフェーズの間に、コントロールロジック（図示せず）は読み出されたオペランドステータス値を使用する。
ＲＥＧＯＰの押出し（バンプ）処理
「通常」、所定のプロセシング実行ユニットに発行されたオペレーションは、そのパイプラインに発行された他のオペレーションについて順序を変えずにパイプライン内を進んでいく。例えば、オペレーションが段階０において取り上げられたとき、このパイプに発行するために同時に選択されたオペレーションも、取り上げられる。というのは、処理パイプライン内で両オペレーションが互いに追い越すことができないからである。スケジューラ２６０は、順番通りの発行選択及び処理に基づいて処理パイプラインを管理するのが普通である。
１つの例外がなされる。ＲｅｇＯｐの１または２以上の使用不可能なオペランド値のためにレジスタユニットの何れかの段階０において取り上げられたとき、ＲｅｇＯｐは、処理パイプから押し出され、即ちバンプアウトされ、未発行状態に戻る。これは、ＲｅｇＯｐのＳｔａｔｅフィールドをｂ００００に戻すことになる。ＲＵ段階０からＲｅｇＯｐはバンプアウトされたとき、そのレジスタユニットに向けて殺されるべく選択された後続のＲｅｇＯｐは、段階０に進み、即座にバンプされたＲｅｇＯｐに取って代わる。同時に、バンプされたＲｅｇＯｐは、レジスタユニットに再発行するものとして的確なものとなるが、この場合レジスタユニットは同じレジスタユニットである必要はない。
バンプ処理は全てのＲｅｇＯｐｓに対して適用可能であり、以下の制御を受ける。第１に、ＲＵＸ−ｏｎｌｙ  ＲｅｇＯｐ（ＲＵＸ段階０）は、ＲＵＸ−ｏｎｌｙ  ＲｅｇＯｐがＲＵＸに対する発行のために随意選択されている場合にはバンプされ得ない。この理由は、バンピングがＲＵＸ−ｏｎｌｙ  ＲｅｇＯｐｓは互いに順番を変えずに実行されることを補償できなくするからである。第２に、ＲｅｇＯｐは、それが１サイクル以上に亘って機能停止される場合にのみバンプされるべきであり、そうでない場合は、ＲｅｇＯｐを段階１に進めるのを待機させた状態で段階０に止めておくほうがよい。エントリのＳ１  Ｓｔａｔｅビットを示す上述の式は、ＲｅｇＯｐバンピングをインクリメントする。更に、グローバルコントロールロジック（図示せず）は、グローバルバンプ信号（ＢｕｍｐＲＵＸ及びＢｕｍｐＲＵＹ）を生成し、これは、ＲＵＸａｄｖ０及びＲＵＹＡｄｖ０信号のアサートを生成する。
ステータスフラグ処理
ステータスフラグ、即ちｘ８６アーキテクチャのフラグ及びマイクロアーキテクチャのフラグの双方の処理及び使用には、４つの機能性領域が関与する。この領域とは即ち、ｃｃ−ｄｅｐ  ＲｅｇＯｐｓに対するステータスフラグオペランド値のフェッチング、ＢＲＣＯＮＤオペレーションの分析のためのステータスフラグ値のフェッチング、及び先行するＢＲＣＯＮＤオペレーションと非アボート可能なＲｅｇＯｐｓの同期である。レジスタオペランド及びＬｄＯｐ−ＳｔＯｐ順序付けのためのロジック（図示せず）とは異なり、ステータスフラグファンクションをサポートするロジック（図示せず）は、スケジューラエントリ全体に広がっていない。関連するオペレーションのためのステータスフラグの処理は、ステータスフラグにアクセスするオペレーションがあるＯｐクワドエントリ内にある間に発生する。ｃｃ−ｄｅｐ  ＲｅｇＯｐｓは、ステータスオペランドフェッチングが生じたとき（即ちＲＵＸ段階０）のサイクルの間、Ｏｐクワドエントリ３、スケジューリングリザーバ９４０からの中央Ｏｐクワドエントリの中になければならない。ＢＲＣＯＮＤオペレーション及び非アボート可能なＲｅｇＯｐｓは、分岐ユニット２５２による分解、及びＲＵＸ段階０のそれぞれの間にＯｐクワドエントリ４にいなければならない。
ｃｃ−ｄｅｐ及び非アボート可能なＲｅｇＯｐｓは、それらがそれぞれＯｐクワドエントリ３及び４にシフトダウンされていない場合はＲＵＸ段階０において取り出される。逆に、スケジューラＯｐクワドのシフトは、例のオペレーションがＲＵＸ段階１にうまく進めるようになるまで抑止される。これらの制約により、ロジック５３５はより単純で小型のものとなる。例えば、ｃｃ−ｄｅｐ  ＲｅｇＯｐｓ及びＢＲＣＯＮＤオペレーションのための適当なステータスフラグ値のフェッチングは、一番下の４つのスケジューラＯｐクワドエントリに亘って発生するのみであり、オペレーションの４つのＳｔａｔＭｏｄビットに対応するステータスフラグの４つのグループのそれぞれに対して独立実行される。ロジックはｃｃ−ｄｅｐ  ＲｅｇＯｐステータスオペランドフェッチングとＢＲＣＯＮＤオペレーション分析の双方に対して共有または利用することができる、非アボート可能なＲｅｇＯｐｓ及びＢＲＣＯＮＤオペレーションの間の同期が簡単になる。
更に、ステータスフラグ値のＲｅｇＯｐ実行ユニットの何れかからＲＵＸ実行ユニットに入るｃｃ−ｄｅｐ  ＲｅｇＯｐに直接渡すことはサポートされていない。この結果、“．ｃｃ”ＲｅｇＯｐの後続のｃｃ依存ＲｅｇＯｐとの間のサイクルの待ち時間が最小限に押さえられる。この待ち時間の統計的な性能の衝撃は最小限である。というのは、ｃｃ依存ＲｅｇＯｐｓは連続した順番で発生することは滅多にないからである。更に、連続したｃｃ依存ＲｅｇＯｐｓを除去するためのｅｍｃｏｄｅ及びＭａｃＤｅｃ順序付けオペレーションにより、あらゆる衝突が除去され得る。
ロジックの単純化及び小型化を更に助けるべく、ｃｃ依存ＲｅｇＯｐｓ、ＢＲＣＯＮＤオペレーション及び非アボート可能なＲｅｇＯｐｓがＯｐクワド内で互いに競合して発生し得るような場所に多数の制約が入れられる。通常ｅｍｃｏｄｅコーディングルールに制約されるが、場合によっては、１サイクルにおける多数のｍＩのＭａｃＤｅｃデコーディングを制約するものもある。特に、制約は以下のものがある。
（１）ＢＲＣＯＮＤオペレーションの後、．ｃｃ  ＲｅｇＯｐｓがない。
（２）．ｃｃ  ＲｅｇＯｐｓの後、ｃｃ依存ＲｅｇＯｐｓがない。
（３）ＢＲＣＯＮＤ  Ｏｐを有するクワドにおいて非アボート可能なＲｅｇＯｐｓはない。
（４）１つのＯｐクワド内にｃｃ依存ＲｅｇＯｐは１つだけである。
（５）１つのＯｐクワド内にＢＲＣＯＮＤオペレーションは１つだけである。
（６）１つのＯｐクワド内に非アボート可能なＲｅｇＯｐは１つだけである。
ＣＣ-ＤＥＰ（依存）ＲＥＧＯＰＳへのステータスフォワーディング
各サイクルにおいて、Ｏｐクワドエントリ３内の４つのオペレーションは、検定されて、その中にｃｃ依存ＲｅｇＯｐがアルか否かが判定される。１つがそうである場合は、ＲｅｇＯｐの特定のタイプがデコードされて、Ｓｔａｔｕｓフラグのどのグループが必要であるかが決定され、またＳｔａｔｕｓ  Ｖビットがチェックされてこれらのグループの全てが実際に有効であるかが決定される。同時に、Ｓｔａｔｕｓ［７：０］がそのままＲＵＸ実行ユニットに渡される。
全ての必要なフラグのグループが同時に有効である場合には、少なくともステータスオペランドフェッチが関係している限りにおいてＲＵＸ段階１に進行できるようになる。しかし、ＲｅｇＯｐは即時に段階１に進めない場合は、Ｏｐクワドエントリ３〜６のシフトが抑止される。必要なフラググループの何れかが同時に有効でない場合は、ＲｅｇＯｐはＲＵＸ段階１との進行を止められて、スケジューラＯｐクワドエントリ３乃至６のシフトが抑止される。
Ｏｐクワドエントリ３〜６に実行されないｃｃ依存ＲｅｇＯｐはないが、ＲＵＸ段階０にｃｃ依存ＲｅｇＯｐは存在する場合には、このＲｅｇＯＰは段階０に無条件に止められる。Ｏｐクワドエントリ３のｃｃ依存ＲｅｇＯｐはまだ実行されていないが、ＲＵＸ段階０にｃｃ依存ＲｅｇＯｐがないか、あるいはＯｐクワドエントリ４〜６に未実行のｃｃ依存ＲｅｇＯｐは存在する場合には、Ｏｐクワドエントリ３〜６のシフトが抑止される。
そこで実行されるオペレーションがステータスフラグを修飾しないことを示すＲＵＸユニットからの追加のインプット（ＲＵＸ＿ＮｏＳｔａｔＭｏｄ）が存在する。ＮｏＳｔａｔＭｏｄと称されるサイクル遅延バージョンはいくつかの条件において有用である。以下の式はこのロジックを記述したものである。
0003714962.tif 000053
0003714962.tif 000054
ＢＲＣＯＮＤオペレーション分解
各サイクルにおいて、Ｏｐクワドエントリ４はＢＲＣＯＮＤオペレーションと所在がチェックされる。それを１つ見つかった場合には、そのエントリの条件コード（ｃｃ）フィールドがデコードされて３２個の条件値の組み合わせ及び関連する有効ビットの１つが選択される。その値及び選択された条件の有効性は、クワドエントリ４〜６のスケジューラによるシフトを抑止すること、及び／または必要ならばパイプライン最下位信号をアサートするために用いられる。
ＢＲＣＯＮＤオペレーションが誤り予測されていること（及びパイプラインの再スタートが必要なこと）が分かった場合には、ＢＲＣＯＮＤオペレーションがＭａｃＤｅｃであるか、またはｅｍｃｏｄｅオペレーションであるかということ、及びそれは内部ｅｍｃｏｄｅに由来するか、外部ｅｍｃｏｄｅに由来するかということに基づいて再スタート信号がアサートされる。更に、適当なｘ８６マクロ命令またはｅｍｃｏｄｅベクターアドレス及び関連するリターンアドレススタックＴＯＳ値が生成される。
非アボート可能なＲｅｇＯｐｓと先行するＢＲＣＯＮＤオペレーションとの間の同期を処理するロジックの利点を次のセクションに記述する。これについては、誤り予測されたＢＲＣＯＮＤオペレーションの発生の記録が、それが有意な間（即ちアボートサイクルが発生するまで）維持される。更に、顕著な誤り予測されたＢＲＣＯＮＤオペレーションの存在は、アボートサイクルが生起するまで、（「再開された」ＭａｃＤｅｃからの）新たなＯｐクワドのローディングを中止するために使用される。
ＢＲＣＯＮＤオペレーションが正しく予測されていた場合には、ＢＲＣＯＮＤオペレーションが完了したことを示すためにＢＲＣＯＮＤオペレーションのＳｔａｔｅビットＳ３がセットされるのみである。
以下の式はこれらのロジックの全てを記述している。以下のＤＴＦ及びＳＳＴＦ信号を参照されたい。これらの信号はブレークポイント及びシングルステップとラップをそれぞれ表している。ＭＤＤと称される信号も存在し、これは一度にスケジューラに１以上のマクロ命令が挿入されるのを防止するためのデバッグ用に用いられ得る多重デコードディスエーブルのための信号である。
0003714962.tif 000055
0003714962.tif 000056
0003714962.tif 000057
0003714962.tif 000058
0003714962.tif 000059
0003714962.tif 000060
うまく分解されるＢＲＣＯＮＤオペレーションは、Ｏｐクワドエントリ４に１サイクル以上存在する。というのは、Ｏｐクワドエントリ５及び６はシフトできず、従ってＯｐクワドエントリ４がシフトダウンすることを防止するからである。この時間Ｓｃ＿Ｒｅｓｏｌｖｅ＝１の間、バス５５７条の信号の一つＢｒＶｅｃ２ＸＸＸは、（５個のサイクルに対する）時間全体にアサートされた状態が持続する。命令デコーダ２２０が、信号ＢｒＶｅｃ２ＸＸＸがデアサートされるまで各サイクルを再スタートしつづけるため、これは問題なく行われる。ベクトルアドレスのような他の全ての関係する信号は、この時間全体にわたって適当な値を維持している。
非アボート（打ち切り）可能ＲｅｇＯｐ同期
各サイクルにおいて、Ｏｐクワドエントリ４は、非打ち切り可能ＲｅｇＯｐの所在がチェックされる。それを１つ見つかった場合には、スケジューラ２６０が先行する誤り予測されたＢＲＣＯＮＤオペレーションの存在をチェックする。ｅｍｃｏｄｅコーディングの制約のために、先行するＢＲＣＯＮＤオペレーションは下位のＯｐクワドエントリになければならず、従って全てが解析されていなければならない。更に、同時に解析されたＢＲＣＯＮＤオペレーションは、非打ち切り可能ＲｅｇＯｐの後に来ていることが補償されており、従って無関係である。
このような誤り予測されたＢＲＣＯＮＤオペレーションが存在しない場合には、ＲｅｇＯｐはＲＵＸ段階１に進むことができる。ＲｅｇＯｐがすぐに段階１に進まない場合には、それはＯｐクワドエントリ４からシフトアウトすることができる。
Ｏｐクワドエントリ４または５が、未実行の非打ち切り可能ＲｅｇＯｐを含んでいないが、ＲＵＸ段階０において非打ち切り可能ＲｅｇＯｐが存在する場合には、この非打ち切り可能ＲｅｇＯｐは段階０に無条件に止められて、非打ち切り可能ＲｅｇＯｐはＯｐクワドエントリ４に達する。まだ実行されていない非打ち切り可能ＲｅｇＯｐはＯｐクワドエントリ４に存在するが、ＲＵＸ段階０に非打ち切り可能ＲｅｇＯｐが存在しないか、または未実行の非打ち切り可能ＲｅｇＯｐがＯｐクワドエントリ５に存在する場合には、Ｏｐクワドエントリ４及び５のシフトが抑止される。
以下の式はこのロジックを記述したものである。
0003714962.tif 000061
スーパースケーラプロセッサ１２０は幅広く様々なシステムコンフィギュレーションに組み込まれ得るが、このようなシステムコンフィギュレーションには、例えばスタンドアローンのネットワークに接続されたパーソナルコンピュータシステム、ワークステーションシステム、マルチメディアシステム、ネットワークサーバシステム、マルチプロセッサシステム、埋め込み型システム、統合型電話システム、ビデオ会議システム等がある。第１０図には、スーパースケーラプロセッサ１２０のようなＲＩＳＣ８６命令セットを実行する命令デコーダを有するプロセッサのために適切なシステムコンフィギュレーションのセットが例示されている。特に、第１０図は適当なバスコンフィギュレーション、メモリ階層及びキャッシュコンフィギュレーション、Ｉ／Ｏインタフェース、コントローラ、デバイス、及び周辺装置と共にＲＩＳＣ８６命令を実行する命令デコーダを備えたスーパースケーラプロセッサの適切な場所が示されている。
本発明について様々な実施例を取り上げて説明したが、これらの実施例は例示であり、本発明の範囲をこれらに限定するものではないということは理解されよう。ここに開示した実施例の様々な変更、追加、及び改良が可能である。更に、実施例の中でハードウェアとして実現された構造及び機能性は、別の実施例ではソフトウェア、ファームウェア、またはマイクロコードとして実現され得る。例えば、本明細書においては、３つのローテータ４３０、４３２、及び４３４、３つの命令レジスタ４５０、４５２、及び４５４、及び３つのショートデコーダＳＤｅｃ０  ４１０、ＳＤｅｃ１１４１２、ＳＤｅｃ２  ４１４を備えたショートデコード回路を有するマクロ命令デコーダが開示されているが、他の実施例では、異なる数のショートデコーダ経路が採用される。２つのデコード経路を採用したデコーダは非常に適切なものである。これらの実施例及び他の実施例の変更、修正、追加、及び改良は、請求の範囲に記載の本発明の範囲内に収まり得るものである。
【図１】
0003714962.tif 000062
【図２】
0003714962.tif 000063
【図３】
0003714962.tif 000064
【図４】
0003714962.tif 000065
【図５】
0003714962.tif 000066
【図６Ａ】
0003714962.tif 000067
【図６Ｂ】
0003714962.tif 000068
【図６Ｃ】
0003714962.tif 000069
【図６Ｄ】
0003714962.tif 000070
【図６Ｅ】
0003714962.tif 000071
【図７】
0003714962.tif 000072
【図８】
0003714962.tif 000073
【図９】
0003714962.tif 000074
【図１０】
0003714962.tif 000075