(57)【要約】      （修正有）【課題】ハードウェアの複雑性を増加させることなく、命令セットを拡張するための効果的な方法を提供する。【解決手段】可変長命令セットの命令をデコードするための方法と装置とシステムが開示される。前記命令は、新しいエスケープコードの値を使用する新しい形式の命令のセットのうちの１つであり、それは２バイトの長さであって、第３のオペコードのバイトが新しい命令のための命令特有のオペコードを含むことを示す。新しいエスケープ・オペコードの値のうちの１つのオペコードのマップの各命令の長さが同じセットの入力を使用して定められ得るように、新しい命令が規定され、それぞれの入力が新しいオペコードのマップの各命令の長さを定めることに関連する。少なくとも１つの実施例において、新しい命令のうちの１つの長さは、命令特有のオペコードを評価せずに定められる。【選択図】図２
2005025741.tif 000002
【特許請求の範囲】
【請求項１】
可変長の命令セットの命令コードがエスケープ・オペコードの値を含むか否かを判断し、
前記命令コードが前記エスケープ・オペコードの値を含む場合に、前記命令コードの命令特有のオペコードの値を評価せずに、前記命令コードの長さを定めることを有する方法。
【請求項２】
請求項１に記載の方法であって、
前記命令特有のオペコードのフィールドの値に応じて動作を実行することを更に有する方法。
【請求項３】
請求項１に記載の方法であって、
前記命令コードがプレフィックスコードを含むか否かを判断し、
前記命令コードが前記プレフィックスコードを含み、前記命令コードが前記エスケープ・オペコードを含む場合に、前記命令コードに応じて、第１のデコードされた命令コードを作ることを更に有する方法。
【請求項４】
請求項３に記載の方法であって、
前記命令コードが前記プレフィックスコードを含まず、前記命令コードが前記エスケープ・オペコードを含む場合に、前記命令コードに応じて、第２のデコードされた命令コードを作ることを更に有する方法。
【請求項５】
請求項３に記載の方法であって、
前記プレフィックスコードが０ｘ６６である方法。
【請求項６】
請求項１に記載の方法であって、
前記エスケープ・オペコードが命令セットのために規定された複数のエスケープ・オペコードの値のうちの１つである方法。
【請求項７】
請求項６に記載の方法であって、
前記複数のエスケープ・オペコードの値が、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ及び０ｘ０Ｆ３Ｂを含む方法。
【請求項８】
請求項３に記載の方法であって、
前記第１のデコードされた命令コードが、少なくとも１つの拡張された長さのレジスタを示す方法。
【請求項９】
請求項４に記載の方法であって、
前記第２のデコードされた命令コードが、少なくとも１つの標準の長さのレジスタを示す方法。
【請求項１０】
命令コードがエスケープ・オペコードの値を含むか否かを判断するエスケープ検出器と、
前記命令コードの長さを定める命令長デコーダと
を有する装置であって、
前記命令コードが前記エスケープ・オペコードの値を含む場合に、前記命令長デコーダが、命令特有のオペコードを評価せずに、前記命令コードの長さを定める装置。
【請求項１１】
請求項１０に記載の装置であって、
前記命令特有のオペコードのフィールドの内容に応じて、命令を表す制御信号を作るオペコード・デコーダを更に有する装置。
【請求項１２】
請求項１０に記載の装置であって、
前記命令コードがプレフィックスコードを含むか否かを判断するプレフィックス検出器を更に有する装置。
【請求項１３】
請求項１２に記載の装置であって、
前記命令コードが前記プレフィックスコードを含み、前記命令コードが前記エスケープ・オペコードを含む場合に、前記命令特有のオペコードのフィールドの内容に応じて、第１のデコードされた命令コードを作るオペコード・デコーダを更に有する装置。
【請求項１４】
請求項１３に記載の装置であって、
前記命令コードが前記プレフィックスコードを含まず、前記命令コードが前記エスケープ・オペコードを含む場合に、前記オペコード・デコーダが、前記命令特有のオペコードのフィールドの内容に応じて、第２のデコードされた命令コードを更に変換する装置。
【請求項１５】
請求項１２に記載の装置であって、
前記プレフィックスコードが０ｘ６６である装置。
【請求項１６】
請求項１０に記載の装置であって、
前記エスケープ・オペコードが命令セットのために規定された複数のエスケープ・オペコードの値のうちの１つである装置。
【請求項１７】
請求項１６に記載の装置であって、
前記複数のエスケープ・オペコードの値が、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ及び０ｘ０Ｆ３Ｂを含む装置。
【請求項１８】
請求項１３に記載の装置であって、
前記第１のデコードされた命令コードが、少なくとも１つの拡張された長さのレジスタを示す装置。
【請求項１９】
請求項１４に記載の装置であって、
前記２のデコードされた命令コードが、少なくとも１つの標準の長さのレジスタを示す装置。
【請求項２０】
命令特有のオペコードとエスケープコードを有する命令を保存するメモリであって、前記エスケープコードが第２バイトの値と連続的な第１バイトの値を含み、前記命令特有のオペコードが前記エスケープコードと連続的であるメモリと、
前記メモリから前記命令コードを取り込む取り込みロジックと、
前記取り込まれた命令コードに応じて、１つ以上の制御信号を作るデコードユニットと
を有するシステム。
【請求項２１】
請求項２０に記載のシステムであって、
前記デコーダユニットが、固定のセットの入力を受け取る長さ判定ロジックを更に含み、
前記固定のセットの入力の各入力が、複数の命令コードのそれぞれの長さを定めることに関連し、
前記複数の命令コードのそれぞれが、前記エスケープコードの値を含むシステム。
【請求項２２】
請求項２０に記載のシステムであって、
エスケープコードが複数の所定のエスケープコードの値のうちの１つであるか否かを判断するエスケープ検出器を更に有するシステム。
【請求項２３】
請求項２２に記載のシステムであって、
前記複数の所定のエスケープコードの値が、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ及び０ｘ０Ｆ３Ｂを含むシステム。
【請求項２４】
請求項２０に記載のシステムであって、
前記第１の命令コードがプレフィックスの値を含むか否かを判断するプレフィックス検出器を更に有するシステム。
【請求項２５】
請求項２１に記載のシステムであって、
前記固定のセットの入力が、ｍｏｄＲ／Ｍのフィールドの内容を含むシステム。
【請求項２６】
請求項２１に記載のシステムであって、
前記固定のセットの入力が、ＳＩＢのフィールドの内容の少なくとも一部を含むシステム。
【請求項２７】
請求項２０に記載のシステムであって、
前記デコーダユニットが、前記命令コードのサブセットに基づいて前記命令の長さを定める長さデコーダを有し、
前記サブセットが、前記命令特有のオペコードを除外するシステム。
【請求項２８】
請求項２７に記載のシステムであって、
前記サブセットが、前記エスケープコードの第１バイトと第２バイトの値と、アドレス指定形式の値とを含むシステム。
【請求項２９】
請求項２８に記載のシステムであって、
前記サブセットが、オプションのベースのフィールドの内容の一部を更に含むシステム。
【請求項３０】
請求項２０に記載のシステムであって、
前記デコーダユニットが、前記命令特有のオペコードに応じて１つ以上の制御信号を作るオペコード・デコーダを更に有し、
前記命令特有のオペコードの内容が動作を特定するシステム。
【請求項３１】
請求項２０に記載のシステムであって、
前記制御信号に応じて、動作を実行する実行ロジックを更に有するシステム。
【請求項３２】
請求項２０に記載のシステムであって、
前記命令コードがプレフィックスの値を更に含むシステム。
【請求項３３】
可変長の命令フォーマットの命令コードをメモリから取り込むステップであって、前記命令フォーマットが第１バイトの要素と第２バイトの要素とを含む複数のバイトの要素を有するエスケープのフィールドを含み、前記命令フォーマットがアドレス指定形式のフィールドと、前記エスケープのフィールドと前記アドレス指定形式のフィールドとの間の命令特有のオペコードのフィールドとを更に含むステップと、
前記命令特有のオペコードの値に応じて動作を開始するステップと
を有する方法。
【請求項３４】
請求項３３に記載の方法であって、
動作を開始することが、前記命令特有のオペコードの値に少なくとも一部基づいて、制御信号を作ることを更に含む方法。
【請求項３５】
請求項３３に記載の方法であって、
動作を開始することが、パックされたデータで動作を開始することを更に含む方法。
【請求項３６】
請求項３３に記載の方法であって、
前記命令コードの長さを定めることが、前記命令の前記エスケープのフィールドと、前記アドレス指定形式のフィールドと、プレフィックスフィールドとの内容に長さの判定を完全に基づかせることを更に有する方法。
【請求項３７】
請求項３３に記載の方法であって、
前記命令コードの長さを定めることを更に有し、
長さの判定が、前記エスケープのフィールドと、前記アドレス指定形式のフィールドとの内容に完全に基づく方法。
【請求項３８】
請求項３３に記載の方法であって、
前記命令コードの長さを定めることを更に有し、
長さの判定が、前記エスケープのフィールドと、前記アドレス指定のフィールドとの内容と、前記オプションのベースのフィールドの内容の一部とに完全に基づき、
前記命令フォーマットが、前記オプションのベースのフィールドを更に含む方法。
【請求項３９】
可変長命令フォーマットの命令コードに応じて制御信号を作るデコーダであって、前記命令コードが少なくとも第１バイトと第２バイトの要素を含む複数のバイトの要素を有するエスケープのフィールドと、アドレス指定形式のフィールドと、前記エスケープのフィールドと前記アドレス指定モードのフィールドとの間の命令特有のオペコードのフィールドとを有するデコーダと、
前記制御信号に応じて動作を実行する実行ユニットと
を有する装置。
【請求項４０】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が、前記命令コードの長さの制限を示す装置。
【請求項４１】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“００”である場合に、前記実行ユニットがパックされたバイトをシャッフルする装置。
【請求項４２】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０１”である場合に、前記実行ユニットが水平にパックされたワード長の数字の加算を実行する装置。
【請求項４３】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０２”である場合に、前記実行ユニットが水平にパックされたダブルワード長の数字の加算を実行する装置。
【請求項４４】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０３”である場合に、前記実行ユニットが飽和した水平にパックされた数字の加算を実行する装置。
【請求項４５】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０４”である場合に、前記実行ユニットがパックされた符号付及び符号なし数字を更に乗算して加算する装置。
【請求項４６】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０５”である場合に、前記実行ユニットが水平にパックされた符号付ワードの減算を実行する装置。
【請求項４７】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０６”である場合に、前記実行ユニットが水平にパックされた符号付ダブルワードの減算を実行する装置。
【請求項４８】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０７”である場合に、前記実行ユニットが水平にパックされた符号付ワードの減算を実行する装置。
【請求項４９】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０８”である場合に、前記実行ユニットがパックされた符号付バイトの符号を判断する装置。
【請求項５０】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０９”である場合に、前記実行ユニットがパックされた符号付ワードの符号を判断する装置。
【請求項５１】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０Ａ”である場合に、前記実行ユニットがパックされた符号付ダブルワードの符号を判断する装置。
【請求項５２】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０Ｂ”である場合に、前記実行ユニットがラウンドとスケーリングでパック・マルチプライ・ハイ（ｐａｃｋｅｄ  ｍｕｌｔｉｐｌｙ  ｈｉｇｈ  ｗｉｔｈ  ｒｏｕｎｄ  ａｎｄ  ｓｃａｌｉｎｇ）を実行する装置。
【請求項５３】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“１Ｃ”である場合に、前記実行ユニットがパックされたバイトのオペランドの絶対値を判断する装置。
【請求項５４】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“１Ｄ”である場合に、前記実行ユニットがパックされたワードのオペランドの絶対値を判断する装置。
【請求項５５】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“１Ｅ”である場合に、前記実行ユニットがパックされたダブルワードのオペランドの絶対値を判断する装置。
【請求項５６】
請求項３９に記載の装置であって、
前記エスケープのフィールドの内容が１６進数の値の“０Ｆ３８”であり、前記命令特有のオペコードのフィールドの内容が、１６進数の値の“０Ｆ”である場合に、前記実行ユニットがパックされたオペランドを右シフトしてマージ（ｓｈｉｆｔ  ｒｉｇｈｔ  ａｎｄ  ｍｅｒｇｅ）する装置。
【請求項５７】
プロセッサの設計を保存する機械アクセス可能な媒体であって、
前記プロセッサが、
可変長の命令セットの命令コードを取り込む取り込みロジックであって、前記命令コードが命令特有のオペコードの値に隣接した複数バイトのエスケープコードの値を含む取り込みロジックと、
前記取り込まれた命令コードに応じて、１つ以上の制御信号を作るデコードユニットと
を有する機械アクセス可能な媒体。
【請求項５８】
請求項５７に記載の機械アクセス可能な媒体であって、
前記プロセッサが、前記命令コードにおけるビットのサブセットの評価に完全に基づいて、前記命令コードの長さを定める長さのデコーダを更に有し、
前記ビットのサブセットが、前記命令特有のオペコードの値を除外する機械アクセス可能な媒体。
【請求項５９】
請求項５７に記載の機械アクセス可能な媒体であって、
前記プロセッサが、前記制御信号に応じて動作を実行する実行ロジックを更に有する機械アクセス可能な媒体。
【請求項６０】
請求項５９に記載の機械アクセス可能な媒体であって、
前記実行ロジックが、パックされたデータで動作を更に実行する機械アクセス可能な媒体。
【請求項６１】
請求項５７に記載の機械アクセス可能な媒体であって、
前記命令コードのプレフィックスのフィールドが所定の値を保持する場合に、前記デコードユニットが第１の制御信号を更に作る機械アクセス可能な媒体。
【請求項６２】
請求項６１に記載の機械アクセス可能な媒体であって、
前記所定の値が０ｘ６６である機械アクセス可能な媒体。
【請求項６３】
請求項６１に記載の機械アクセス可能な媒体であって、
前記プレフィックスのフィールドが前記所定の値を保持しない場合に、前記デコードユニットが第２の制御信号を更に作る機械アクセス可能な媒体。
【請求項６４】
可変長の命令フォーマットの命令コードをメモリから取り込むための手段であって、前記命令フォーマットが第１バイトの要素と第２バイトの要素とを含む複数のバイトの要素を有するエスケープのフィールドを含み、前記命令フォーマットがアドレス指定形式のフィールドと、前記エスケープのフィールドと前記アドレス指定形式のフィールドとの間の命令特有のオペコードのフィールドとを更に含む手段と、
前記命令特有のオペコードの値に応じて動作を開始する手段と
を有する装置。
【請求項６５】
請求項６４に記載の装置であって、
動作を開始するための手段が、前記命令特有のオペコードの値に少なくとも一部基づいて、制御信号を作るための手段を更に含む装置。
【請求項６６】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータで動作を開始するための手段を更に含む装置。
【請求項６７】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータで加算動作を開始するための手段を更に有する装置。
【請求項６８】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータで減算動作を開始するための手段を更に有する装置。
【請求項６９】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータでシャッフル動作を開始するための手段を更に有する装置。
【請求項７０】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータで乗算動作を開始するための手段を更に有する装置。
【請求項７１】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータでシフト動作を開始するための手段を更に有する装置。
【請求項７２】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータで絶対値動作を開始するための手段を更に有する装置。
【請求項７３】
請求項６４に記載の装置であって、
動作を開始するための手段が、パックされたデータで符号判定動作を開始するための手段を更に有する装置。
【請求項７４】
請求項６４に記載の装置であって、
前記命令コードの長さを定めるための手段を更に有し、
長さの判定が、前記エスケープのフィールドと、前記アドレス指定形式のフィールドと、オプションのプレフィックスフィールドとの内容に完全に基づき、
前記命令コードが前記プレフィックスフィールドをオプションで更に含む装置。
【請求項７５】
請求項６４に記載の装置であって、
前記命令コードの長さを定めるための手段を更に有し、
長さの判定が、前記エスケープのフィールドと、前記アドレス指定形式のフィールドとの内容に完全に基づく装置。
【請求項７６】
請求項６４に記載の装置であって、
前記命令コードの長さを定めるための手段を更に有し、
長さの判定が、前記エスケープのフィールドと、前記アドレス指定のフィールドとの内容と、前記オプションのベースのフィールドの内容の一部とに完全に基づき、
前記命令フォーマットが、前記オプションのベースのフィールドを更に含む装置。
【請求項７７】
エスケープコードの値と命令特有のオペコードの値とを含む命令コードを作ることを有する方法であって、
前記エスケープコードの値が、少なくとも２バイトの長さであり、拡張されたオペコードのマップを特定し、
前記命令コードが、前記命令コードに応じて実行ユニットで実行される動作を表す方法。
【請求項７８】
請求項７７に記載の方法であって、
命令コードを作ることが、プレフィックスの値を更に含む命令コードを作ることを更に有する方法。
【請求項７９】
請求項７８に記載の方法であって、
前記命令コードが第２の動作を表す方法。
【請求項８０】
請求項７７に記載の方法であって、
前記命令コードを作ることが、可変長の命令セットのための所定のセットのエスケープコードの値から前記エスケープコードの値を選択することを更に有する方法。
【請求項８１】
請求項８０に記載の方法であって、
前記所定のセットのエスケープコードの値が、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ及び０ｘ０Ｆ３Ｂを含む方法。
【請求項８２】
請求項８０に記載の方法であって、
前記所定のエスケープコードの値のそれぞれが、特定のセットの命令を示す方法。
【請求項８３】
請求項７８に記載の方法であって、
前記プレフィックスの値が０ｘ６６である方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサシステムに関するものである。特に、本発明は、オペコードのフィールドで３バイトのエスケープ・オペコードの値を使用した命令セットの拡張に関するものである。
【背景技術】
【０００２】
マイクロプロセッサ技術は、数年にかけて急速に進化している。コンピュータアーキテクチャとセミコンダクタ技術の進歩は、新しいプロセッサを設計する多数の機会を作っている。一般的に新しいプロセッサを設計する２つのオプションが存在する。すなわち、（１）完全に新しいアーキテクチャを規定することと、（２）現在のアーキテクチャを拡張して新しい機能に対応することである。それぞれのオプションが利点と欠点の双方を有する。しかし、プロセッサが優位な市場区分を取得している場合には、オプション（２）が多数の魅力的な利点を提供する。現在のアーキテクチャを拡張する主な利点は、現在と以前のモデルとの互換性にある。欠点には、以前の設計によって強いられる制約を免れるという問題が含まれる。
【０００３】
新しいプロセッサは、ハードウェアとソフトウェアの双方で新しい機能を有する。既存の設計に基づく新しいプロセッサは、一般的に新しいハードウェア設計を利用し得る追加の命令のセットを有する。しかし、新しい命令のセットを追加することにより命令セットを拡張することは、命令のコード化の制約のため、挑戦的な問題である。従って、ハードウェアの複雑性を増加させることなく、命令セットを拡張するための効果的な方法を提供する技術の必要性が存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ハードウェアの複雑性を増加させることなく、命令セットを拡張するための効果的な方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
３バイトのエスケープ・オペコードを使用して命令セットを拡張するための方法と装置とシステムの実施例が開示される。開示された実施例は、プレフィックスを使用して３バイトのエスケープ・オペコードを含む命令を限定することにより、３バイトのエスケープ・オペコードを使用した命令セットを拡張することを提供する。開示された方法は、新しい命令のセットを規定するために既存の命令のフィールドのセットを使用し、新しい命令セットをデコードする効果的な機構を提供する。
【０００６】
ここで使用される“３バイトのエスケープ・オペコード”という用語は、所定の命令のオペコードが３バイト（３バイトのエスケープ・オペコードの２バイトに１バイトの命令特有のオペコードを加えたもの）を有することをデコーダのロジックに指示する２バイトの値を参照する。少なくとも１つの実施例において、３バイトのエスケープ・オペコードのフィールドにおける２バイトの値は、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ又は０ｘ０Ｆ３Ｂの値のうちの１つである。
【発明の効果】
【０００７】
ハードウェアの複雑性を増加させることなく、命令セットを拡張するための効果的な方法を提供する。
【発明を実施するための最良の形態】
【０００８】
以下の説明において、本発明の完全な理解を提供するために、説明の目的で、プロセッサの形式や、命令のフォーマットや、ロジックゲートの形式や、エスケープ・オペコードの値のような多数の特定の詳細が示されている。しかし、前記特定の詳細は、本発明を実行するために必要でないことが当業者に明らかである。他の場合において、本発明をあいまいにしないように、周知の構成と回路がブロック図の形式で示されている。以下の説明において、記号０ｘは、それに続く数字が１６進法のフォーマットであることを示す。
【０００９】
図１を参照すると、開示された技術を利用し得る処理システム１００の少なくとも１つの実施例が示されている。システム１００は、例えば新しい形式０の命令と新しい形式１の形式の命令とをデコードして実行するために使用されることがある。この開示のため、処理システムは、例えばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）又はマイクロプロセッサのような、プロセッサ１１０を備えたシステムを有する。プロセッサ１１０は、複雑な命令セットを備えたコンピュータ（ＣＩＳＣ）、縮小命令セットのコンピュータ（ＲＩＳＣ）、超長命令語（ＶＬＩＷ）アーキテクチャ、マルチスレッドアーキテクチャ又はハイブリッドアーキテクチャのうちの何らかの形式であることがある。システム１００は、Ｐｅｎｔｉｕｍ（商標）、Ｐｅｎｔｉｕｍ（商標）Ｐｒｏ、Ｐｅｎｔｉｕｍ（商標）ＩＩ、Ｐｅｎｔｉｕｍ（商標）ＩＩＩ、Ｐｅｎｔｉｕｍ（商標）４マイクロプロセッサと同様に、Ｉｔａｎｉｕｍ（商標）及びＩｔａｎｉｕｍ（商標）ＩＩマイクロプロセッサに基づく処理システムを表し、その全てがＩｎｔｅｌ社から利用可能である。他のシステム（他のマイクロプロセッサを備えたパーソナルコンピュータ（ＰＣ）と、エンジニアリング・ワークステーションと、個人情報端末と、他のハンドヘルド装置と、セットトップボックスと、それと同様のものを含む）もまた使用されることがある。１つの実施例において、システム１００は、Ｍｉｃｒｏｓｏｆｔ社から利用可能なＷｉｎｄｏｗｓ（商標）オペレーティングシステムのバージョンを実行可能であることがあるが、例えば他のオペレーティングシステムとグラフィカル・ユーザ・インタフェースも使用されることがある。
【００１０】
図１は、命令を実行するために、プロセッサ１１０がデコードユニット１１６と、レジスタのセット１１４と、少なくとも１つの実行ユニット１１２と、少なくとも１つの内部バス１１１とを有することを示している。当然ながら、プロセッサ１１０は、本発明の理解に必要ではない更なる回路を含む。デコードユニット１１６とレジスタ１１４と実行ユニット１１２は、１つ以上の内部バス１１１で相互に結合されている。デコードユニット１１６は、プロセッサ１１０で受け取った命令を制御信号及び／又はマイクロコードのエントリーポイントにデコードするために使用される。命令は、命令バッファ（例えば図３の３１０）によりデコードユニット１１６に供給されることがある。前記制御信号及び／又はマイクロコードのエントリーポイントに応じて、実行ユニット１１２が適切な動作を実行する。デコードユニット１１６は、複数の異なる機構（例えば参照テーブル、ハードウェア実装、プログラマブル・ロジック・アレー（ＰＬＡ）等）を使用して実装されることがある。
【００１１】
デコードユニット１１６は、拡張命令セット１１８で規定されたフォーマットに従う命令１０６をデコードすることが可能であるように示されている。命令セット１１８は、既存の命令セット１１８ａと新しい命令セット１１８ｂとを有する。命令セット１１８は、スカラ及びパックのデータで動作を実行するための命令を有する。前記動作のための数値フォーマットは、単精度数字、２倍精度数字、浮動小数点数字、符号付き整数、符号なし整数、及び非数字データを含む何らかの便宜的なフォーマットであることがある。少なくとも１つの実施例において、命令セット１１８に規定された命令は、他の命令と長さが変わることがある。
【００１２】
命令セット１１８で示されたフォーマットに従う命令１０６は、メモリシステム１０２に保存されることがある。メモリシステム１０２は、メモリ又はメモリ階層の一般化された表現として意図され、ハードドライブや、ＣＤ−ＲＯＭや、ランダムアクセスメモリ（ＲＡＭ）や、ダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）、スタティック・ランダムアクセスメモリ（ＳＲＡＭ）や、フラッシュメモリや、関連する回路のような、多様な形式のメモリを有することがある。メモリシステム１０２は、命令１０６に加えて、プロセッサ１１０により実行されることがあるデータ信号で表されたデータ１０４を保存することがある。
［命令のフォーマット］
図２は、本発明の１つの実施例による命令２００のフォーマットを示した図である。命令フォーマット２００は、プレフィックスのフィールド２１０と、オペコードのフィールド２２０と、オペランド指示子のフィールド（例えば、ｍｏｄＲ／Ｍ、スケール・インデックス・ベース（ｓｃａｌｅ−ｉｎｄｅｘ−ｂａｓｅ）、ディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）、イミディエイト（ｉｍｍｅｄｉａｔｅ）等）とを有する。オペランド指示子のフィールドはオプションであり、ｍｏｄＲ／Ｍのフィールド２３０と、ＳＩＢのフィールド２４０と、ディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）のフィールド２５０と、イミディエイト（ｉｍｍｅｄｉａｔｅ）のフィールド２６０とを有する。
【００１３】
ｍｏｄＲ／Ｍのフィールド２３０の内容は、アドレス指定形式を示す。ｍｏｄＲ／Ｍのフィールドは、レジスタとアドレス指定モードを特定することがある。
【００１４】
ｍｏｄＲ／Ｍのフィールド２３０の情報の特定のコード化は、アドレス指定情報の第２バイトがＳＩＢ（スケール・インデックス・ベース（Ｓｃａｌｅ／Ｉｎｄｅｘ／Ｂａｓｅ）のフィールド２４０に存在し、命令コードのアドレス指定形式を完全に特定することを示すことがある。例えば、ベース・プラス・インデックス（ｂａｓｅ−ｐｌｕｓ−ｉｎｄｅｘ）のアドレス形式とスケール・プラス・インデックス（ｓｃａｌｅ−ｐｌｕｓ−ｉｎｄｅｘ）のアドレス形式はそれぞれ、ＳＩＢのフィールド２４０にスケール要素、インデックスのレジスタ番号及び／又はベースレジスタのレジスタ番号のような情報を有することがある。
【００１５】
図２に示されるフォーマットは説明のためであり、命令コード内の他のデータの構成が開示された実施例で利用されることがあることを当業者は認識するであろう。例えば、フィールド２１０、２２０、２３０、２４０、２５０、２６０は、示された順に構成される必要はなく、相互に他の位置に再構成されることがあり、連続的である必要もない。また、ここで説明されたフィールド長は限定的に捉えられるべきではない。特定のバイト数であるとして説明されたフィールドは、他の実施例において、より長い又はより短いフィールドとして実装されることがある。また、“バイト”という用語は、ここでは８ビットのグループを参照するが、他の実施例において４ビットと１６ビットと３２ビットとを含むその他の大きさのグループとして実装されることがある。
【００１６】
ここで使用されるとおり、命令（図１に示された命令１０６のうちの１つ等）は、図２に示された命令フォーマット２００のフィールドの特定の値を有する。そのような命令は、場合によって“有効命令”と称される。有効命令のビット値は、場合によってひとまとめにして“命令コード”と称される。
【００１７】
有効命令の許容範囲のバイト値は、命令セット１１８（図１）で特定される。命令フォーマット２００のフィールド毎の許容範囲のバイト値は、命令長デコーダ３０６（図３）やデコードユニット１１６（図１）のようなデコードのロジックが認識して動作し、デコードされた命令コードを生成するような値である。命令コード毎に、対応するデコードされた命令コードは、命令コードに応じて実行ユニット１１２（図１）で実行される動作を一意に表す。デコードされた命令コードは、１つ以上のマイクロ操作を有することがある。
【００１８】
図２に示されるプレフィックスのフィールド２１０は、複数のプレフィックスのフィールドを有することがある。１つの実施例において、プレフィックスのフィールド２１０は、それぞれのプレフィックスが１バイトを備えた４つまでのプレフィックスを有する。ここで説明される拡張の新しい命令セットにおいて、プレフィックスのフィールドは、３バイトのエスケープ・オペコードの命令空間を拡張するために使用される。
【００１９】
オペコードのフィールド２２０の内容は、動作を特定する。少なくとも１つの実施例において、前述の通り、ここで説明される新しい命令セット１１８ｂのオペコードのフィールドは３バイトの長さである。少なくとも１つの実施例において、拡張命令セット１１８のオペコードのフィールド２２０は、１バイト、２バイト又は３バイトの情報を有することがある。ここで説明される拡張された新しい命令セット（形式１の命令）の新しい命令のいくつかについて、オペコードのフィールド２２０の２バイトのフィールド１１８ｃにおける３バイトのエスケープコードが、オペコードのフィールド２２０の第３バイト２２５の内容と組み合わされ、動作を特定する。前記第３バイト２２５は、ここでは命令特有のオペコードと参照される。ここで説明される拡張された新しい命令セット（形式１の命令）の新しい命令の他のものについては、オペコードのフィールド２２０の２バイトのフィールド１１８ｃにおける３バイトのエスケープコードが、プレフィックスのフィールド２１０の内容及びオペコードのフィールド２２０の命令特有のオペコードのフィールド２２５の内容と組み合わされ、動作を特定する。
【００２０】
一般的に、プレフィックスのフィールド２１０とオペコードのフィールド２２０の組み合わせは、複数の異なる形式の命令を作る。説明の目的のため、図２は７つのみの形式の命令（標準の１バイトの命令２１２と、限定子としてプレフィックスを備えた標準の命令２１４と、標準のエスケープ命令２１６と、第１の拡張命令の形式２２２と、第２の拡張命令の形式２２４と、第１の新しい命令の形式２２６と、第２の新しい命令の形式２２８）を示している。当業者にわかるとおり、他の形式の命令も同様に規定され得る。
【００２１】
標準の１バイトの命令２１２は、オペコードのフィールド２２０に１バイトの命令特有のオペコードを備えた標準の命令を有する。限定子としてプレフィックスを備えた標準の命令２１４は、オペコードの限定子としてプレフィックスを使用する標準の命令を有する。例えば、文字列の命令はＲＥＰＥＡＴのプレフィックス値を使用し、計算レジスタで指定された回数だけ、又は特定の条件が合致するまで、文字列の命令を繰り返すことがある。命令２１４で使用されるプレフィックス値は、オペコードのフィールド２２０に続くオペコードの値に完全に新しい意味を追加しない。その代わりに、プレフィックス値は、単に追加の条件でオペコードを限定する限定子として使用される。後述するが、命令２１４のプレフィックスの使用は、第２の拡張命令の形式２２４及び第２の新しい命令の形式２２８のものと顕著に異なる。
【００２２】
標準のエスケープ命令２１６は、オペコードのフィールド２２０の第１のフィールド２１５のエスケープ・オペコードを利用し、オペコードのフィールド２２０の第２のフィールド２１７の命令特有のオペコードが命令を規定するために使用されることをデコーダのハードウェアに指示する標準の命令である。例えば、１つの実施例において、オペコードのフィールド２２０の第１バイト２１５における浮動小数点コプロセッサのエスケープコードの値０ｘＤ８から０ｘＤＦは、オペコードのフィールド２２０の第２バイト２１７に続くオペコードの値が、コプロセッサの命令として解釈され、実行のためにコプロセッサのハードウェアに向けられるべきであることを示す。
【００２３】
第１の拡張命令の形式２２２は、オペコードのフィールド２２０の第１のフィールド２２１に所定のエスケープコード値０ｘ０Ｆを含むように規定された特定の形式のエスケープ命令である。エスケープ・オペコード０ｘ０Ｆは、オペコードのフィールド２２０の第２のフィールド２２３における命令特有のオペコードの値が命令を規定するために使用されることをデコーダのハードウェアに指示する。第１の拡張命令の形式２２２の命令は、第２のオペコードのバイト値（及びある場合にはｍｏｄＲ／Ｆのフィールド２３０の３ビットの値）に応じて、長さが変化することがある。例えば、拡張命令の形式２２２の２つの命令（パック・シフト・レフト・ロジカル（Ｐａｃｋｅｄ  Ｓｈｉｆｔ  Ｌｅｆｔ  Ｌｏｇｉｃａｌ））は、それぞれ以下の命令のフィールド値を有することがある。
ＰＳＬＬＷ（レジスタのシフト値）：０Ｆ：Ｆ１：１ｂ“１１ｘｘｘｙｙｙ”（ｘｘｘは第１のレジスタを規定し、ｙｙｙは第２のレジスタを規定する）
ＰＳＬＬＷ（イミディエイト（ｉｍｍｅｄｉａｔｅ）値によるシフト）０Ｆ：７１：１ｂ“１１１１０ｘｘｘ”：イミディエイト・データ（ｉｍｍｅｄｉａｔｅ  ｄａｔａ）（８ビット）（ｘｘｘはレジスタを規定する）
示されたＰＳＳＬＷ命令のそれぞれにおいて、オペコードのフィールド２２０の第１のワードはエスケープ値０ｘ０Ｆを有する。第１の命令は３バイトの長さであるが、第２の命令はイミディエイト・データ（ｉｍｍｅｄｉａｔｅ  ｄａｔａ）を有するため４バイトである。従って、拡張命令の形式２２２において、デコーダのハードウェア（例えば図３の命令長デコーダ３０６等）は、オペコードのフィールド２２０の第１のフィールド２２１におけるエスケープ・オペコードの値０ｘ０Ｆと、２バイトのオペコードのフィールド２２０の第２バイト２２３の値と、ｍｏｄＲ／Ｍのフィールド２３０の値とを利用し、命令の長さをデコードする。
【００２４】
第１の新しい命令の形式２２６は（“新しい命令の形式０”とも称される）、既存の標準の命令セット１１８ａ（図１）に加えられる新しい命令セット１１８ｂ（図１）の一部である新しい命令の形式である。新しい命令セット１１８ｂの命令のフォーマットは、３バイトのエスケープ・オペコードのフィールド１１８ｃと、命令特有のオペコードのフィールド２２５とを有する。少なくとも１つの実施例において、３バイトのエスケープ・オペコードのフィールド１１８ｃは２バイトの長さである。新しい命令の形式０は、３バイトのエスケープ・オペコードと呼ばれる４つの特定のエスケープ・オペコードのうちの１つを使用する。３バイトのエスケープ・オペコードは２バイトの長さであり、それは命令がオペコードのフィールド２２０の第３バイトを利用して命令を規定することをデコーダのハードウェアに指示する。３バイトのエスケープ・オペコードのフィールド１１８ｃは、命令のオペコード内のどこにでも存在することがあり、必ずしも命令の最上位又は最下位のフィールドにある必要はない。
【００２５】
少なくとも１つの実施例において、４つの新しい３バイトのエスケープ・オペコードの値は０ｘ０Ｆ３ｙとして規定され、ｙは０ｘ８、０ｘ９、０ｘＡ又は０ｘＢである。命令２２６の場合、オペコードのフィールド２２０の命令特有のオペコードのフィールド２２５は、新しい命令としてデコードされるべきである。
［命令のプレフィックスとエスケープ・オペコードの例］
第２の拡張命令の形式２２４と第２の新しい命令の形式２２８（場合によっては“新しい命令の形式１”と称される）との双方は、オペコードの一部としてプレフィックスのフィールド２１０の値を使用する。プレフィックスが続きのオペコードを単に限定するプレフィックスの限定子を備えた標準の命令２１４と異なり、第２の拡張命令の形式２２４と新しい命令の形式１  ２２８の双方がプレフィックスを使用して、完全に新しい命令を規定する。
【００２６】
命令のプレフィックスは、もともとは命令のセットを拡張するために開発された。例えば、繰り返しのプレフィックスは、文字列の命令を繰り返すために開発されている。繰り返しのプレフィックスのコードは、０ｘＦ３（ＲＥＰ、ＲＥＰＥ）と０ｘＦ２（ＲＥＰＮＥ）である。そのように使用されるプレフィックスは、続きのオペコードに新しい意味を規定しない。それは、単にオペコードの追加の動作条件を規定するにすぎない。
【００２７】
エスケープ・オペコードは、命令セットに拡張を提供する。例えば、エスケープ・オペコード０ｘＤ８から０ｘＤＦは、第２のオペコードのバイト２１７が浮動小数点ユニット用の命令を規定する値を含むことを示すために使用される。デコーダは、オペコードを浮動小数点デコーダに渡す。
【００２８】
ここで説明される拡張命令セットの少なくとも１つの実施例において、３バイトのエスケープ・オペコードは、０ｘ０Ｆ３ｙの値を有する２バイトのエンティティであり、ｙは０ｘ８、０ｘ９、０ｘＡ又は０ｘＢである。３バイトのエスケープコードのフィールド１１８ｃの３バイトのエスケープ・オペコードの値は、オペコードのフィールド２００の第３バイト２２５における命令特有のオペコードの値が新しい命令セットの命令を示していることを、デコーダに指示する。
【００２９】
第１の拡張命令の形式２２２に関連して前述した２バイトのエスケープ・オペコードとは対照的に、３バイトのエスケープ・オペコードのフィールド１１８ｃの値は、規定された形式０の命令の長さを定めるために使用される方法をデコーダに指示する。すなわち、３バイトのエスケープ・オペコードのそれぞれの値は、特定の３バイトのエスケープコードに対応するマップの各命令の命令長を定めるために使用される特定の方法に関連付けられる。例えば、３バイトのエスケープ・オペコードのフィールド１１８ｃの値０ｘ０Ｆ３８は、関連したオペコードのマップに関連付けられる。０ｘ０Ｆ３８のオペコードのマップにおける各命令の長さは、０ｘ０Ｆ３８のオペコードのマップの他の命令の長さを定めるために使用される同じ長さ判定方法を使用して計算されることがある。
【００３０】
同様に、残りの３バイトのエスケープ・オペコードの値（０ｘ０ｆＦ３９、０ｘ０Ｆ３Ａ、０ｘ０Ｆ３Ｂ）に関連するそれぞれのオペコードのマップの各命令の長さが、それぞれのオペコードのマップの他の命令の長さを定めるために使用される同じ長さ判定ロジックで計算されることがある。
【００３１】
１つの新しいオペコードのマップの各命令の命令長を定めるために使用される長さ判定ロジックは、オペコードのマップの各命令の長さを定めるために同じセットの入力項目が評価されるように簡略化される。そのような長さ判定ロジックは、ここでは“固定入力”ロジック又は方法と称される。すなわち、マップの１つの命令の長さを定めるために評価された各入力項目が、マップのその他の命令の長さの判定にも関連する。評価される固定のセットの項目はオペコードのマップ毎に異なることがある。評価されるセットの入力項目がオペコードのマップの間で異なることがあるが、命令長を定めるために評価される入力項目は、所定の３バイトのオペコードのマップの全ての命令で同じである。
【００３２】
プレフィックスとエスケープ・オペコードとの組み合わせは、プロセッサのオペコードのテーブルの有意な拡張を提供し、更なる新しい命令セットを可能にする。この組み合わせは、エスケープ・オペコードで作られた命令セットに加えて、既存のプレフィックスのコードを使用して新しいセットの命令を規定する。既存のプレフィックスのコードを使用することにより、既存の命令セットのためのデコード回路は、相対的に変更されないままで、新しい命令１１８ｃ（図１）のデコードに対応することがある。
【００３３】
新しい命令のうちのいくつか又は全ての命令特有のオペコードの値（オペコードのフィールド２２０の第３バイト２２５）は、既存の命令のオペコードと同じことがある。プレフィックスとエスケープ・オペコードと同じオペコードを使用して新しいセットの命令を規定することにより、デコード回路が新しい命令セットのための完全に新しいセットのオペコードを有するより複雑でなくなることがある。
【００３４】
１つの実施例において、プレフィックス値０ｘ６６が新しい命令を規定するために使用される。他のプレフィックスも同様に使用され得る。更に、プレフィックスがある動作条件のもとでオペコードを拡張し、又はオペコードを限定するという従来の役割で使用され得る。
【００３５】
以下の表１は、プレフィックスと３バイトのエスケープ・オペコードを使用した新しい命令セットの例を示したものである。
【００３６】
【表１】
2005025741.tif 000003
2005025741.tif 000004
2005025741.tif 000005
前記の例において、プレフィックス０ｘ６６を備えた命令が１つ以上の拡張サイズのレジスタ（１２８ビットのレジスタのサイズ等）を利用する命令に関係し、プレフィックス０ｘ６６のない命令が１つ以上の小さいサイズのレジスタ（６４ビットのレジスタのサイズ等）を利用する命令に関係する。小さいサイズのレジスタは、ここでは“標準の長さ”のレジスタと称される。当業者にわかるとおり、プレフィックスの正確なコードは実装依存であり、前述の０ｘ６６のプレフィックスは単に説明の目的のためである。
［３バイトのエスケープ・オペコードを使用した命令のデコード］
図３は、可変長の命令をデコードするロジック３００を示した図である。デコードのロジック３００は、命令長デコーダ３０６と、命令回転器３０８と、命令バッファ３１０と、プレフィックス及びエスケープ検出器３２０と、デコーダ許可回路３３０と、オペコード・デコーダ３４０とを有することがある。プレフィックス及びエスケープ検出器３２０と、デコーダ許可回路３３０と、オペコード・デコーダ３４０とは、図１に示されたデコードユニットの全て又は一部を形成する。単一のエンティティとして図示されているが、プレフィックス及びエスケープコード検出器３２０は、別個のエスケープ検出器とプレフィックス検出器のブロックとして実装されることがある。
【００３７】
命令長デコーダ３０６は、外部メモリ（例えば図２のメモリ１０２等）から取り込まれた実際の命令コードの長さを定める。説明の目的のため、命令コードは５バイトまで有すると仮定され、第１バイトはＩＮからＩＮ＋７に対応し、第２バイトはＩＫからＩＫ＋７に対応し、第３バイトはＩＬからＩＬ＋７に対応し、第４バイトはＩＭからＩＭ＋７に対応し、第５バイトはＩＰからＩＰ＋７に対応し、ＩＮからＩＮ＋７、ＩＫからＩＫ＋７、ＩＭからＩＭ＋７、ＩＬからＩＬ＋７及びＩＰからＩＰ＋７は命令コードのビット位置を参照する。しかし、現実には実際の命令はその命令コードに５バイト以上を有することがある。同様に、実際の命令がその命令コードに５バイト未満を有することがある。
【００３８】
少なくとも１つの実施例において、Ｋ＝Ｎ＋８、Ｌ＝Ｋ＋８かつＬ＝Ｎ＋１６、Ｍ＝Ｌ＋８かつＭ＝Ｋ＋１６かつＭ＝Ｋ＋２４、以下同様のように、命令コードの５つの図示されたバイトは連続的である。しかし、図２に関連して前述したとおり、図２に示されたフォーマット２００のフィールドは、示された位置を占有する必要がない。従って、ここで説明される命令コードの例示的な５バイトは、何らかの順番であることがあり、連続的である必要がない。
【００３９】
命令長デコーダ３０６のロジックが、可変長の命令に対応するシステムにおいて相当に複雑な長さのデコード方法を実施することがあることを当業者は認識するであろう。このことは、異なる入力項目を評価して、同じオペコードのマップ内の命令の命令長を定める異なる方法を必要とするシステムにおいて特に当てはまる。後述する通り、本発明の実施例は、オペコードのマップ内の各命令の長さが単一の固定入力の長さ判定ロジックで定められることを提供することにより、簡略化した長さのデコード処理を提供する。
【００４０】
回転器３０８は、デコードされる第１バイトが最初の位置になるように、未加工の命令バイトを回転する。従って、回転器３０８はデコードされる命令バイトの始まりを特定する。回転器３０８はプレフィックスバイトのような命令の第１バイトを特定することがあるが、必ずしも第１バイトが特定される必要はないことに留意すべきである。少なくとも１つの実施例において、例えば回転器３０８はオペコードの最小位バイトを特定し、それを命令の開始位置に回転する。少なくとも１つの他の実施例において、回転器３０８はオペコードの最上位バイトを特定し、それを命令の開始位置に回転する。
【００４１】
命令バッファ３１０は、外部メモリから取り込まれた命令を受け取り、保存する。少なくとも１つの実施例において、命令バッファ３１０で受け取られる前に命令が長さのデコードをされ、回転される。少なくとも１つの実施例において、命令バッファ３１０は命令キャッシュとして実装される。
【００４２】
プレフィックス及びエスケープ検出器３２０は、命令ビットＩＮからＩＮ＋７、ＩＫからＩＫ＋７、ＩＬからＩＬ＋７を受け取り、新しい命令セットの一部として使用される所定のプレフィックス及び／又はエスケープ・オペコードの１つ以上のセットの存在を検出する。プレフィックス値は、標準の命令セットで使用されるプレフィックスと同じであるように選択されることがある。デコーダ許可回路３３０は、プレフィックス及びエスケープ検出器３２０の結果を利用して、個々のオペコード・デコーダに対して許可信号又は選択信号を生成する。オペコード・デコーダ４４０は、命令ビットＩＮからＩＮ＋７、ＩＫからＩＫ＋７、ＩＭからＩＭ＋７、ＩＬからＩＬ＋７及びＩＰからＩＰ＋７を受け取り、個々の命令コードを所期の命令を特定するデコードされた命令コードに変換する。
【００４３】
図４は、新しい形式０の命令をデコードするデコーダ回路４４０の少なくとも１つの実施例を示したブロック図である。デコーダ回路４４０は、図３に示されるプレフィックス及びエスケープ検出器３２０のような、プレフィックス及びエスケープ検出器の一部として実装されることがある。図４を説明する上での説明の目的のため、回転器（図３の３０８）が命令オペコードの第１バイトを示したと仮定する。
【００４４】
図４は、命令の第５バイト（命令ビットＩＮからＩＮ＋７）が２バイトのエスケープ・オペコードの値０ｘ０Ｆに照合したか否かを判断するＡＮＤゲート４５０をデコーダ４４０が有することを示している。命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコード０ｘ０Ｆを表す場合に、信号ＥＳＣ２がアサートされる。
【００４５】
デコーダ４４０はまた、ＡＮＤゲート４０２、４０４、４０６、４０８を有する。ＡＮＤゲート４０２は、３バイトのエスケープ・オペコードの値０ｘ３８と命令ビットＩＫからＩＫ＋７を照合し、信号ＥＳ３８を作る。命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３８を表す場合に、信号ＥＳ３８がアサートされる。
【００４６】
命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコード０ｘ０Ｆを表し、命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３８を表す場合、その命令は新しい形式０の命令２２６である。ＥＳＣ２とＥＳ３８の双方がアサートされる場合、ＡＮＤゲート４０３は真であると評価し、ロジック４１２を有効にする。命令特有のオペコードのフィールド２２５（図２）の値をデコードするために、ロジック４１２は３バイトのエスケープコード値０ｘ３８を有する命令のための３バイトのオペコードのマップを選択する。
【００４７】
ＡＮＤゲート４０４は３バイトのエスケープ・オペコードの値０ｘ３９と命令ビットＩＫからＩＫ＋７を照合し、信号ＥＳ３９を作る。命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３９を表す場合に、信号ＥＳ３９がアサートされる。命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコード０ｘ０Ｆを表し、命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３９を表す場合、その命令は新しい形式０の命令２２６である。ＥＳＣ２とＥＳ３９の双方がアサートされる場合、ＡＮＤゲート４０５は真であると評価し、ロジック４１４を有効にする。命令特有のオペコードのフィールド２２５（図２）の値をデコードするために、ロジック４１４は３バイトのエスケープコード値０ｘ３９を有する命令のための３バイトのオペコードのマップを選択する。
【００４８】
ＡＮＤゲート４０６は３バイトのエスケープ・オペコードの値０ｘ３Ａと命令ビットＩＫからＩＫ＋７を照合し、信号ＥＳ３Ａを作る。命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３Ａを表す場合に、信号ＥＳ３Ａがアサートされる。命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコード０ｘ０Ｆを表し、命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３Ａを表す場合、その命令は新しい形式０の命令２２６である。ＥＳＣ２とＥＳ３Ａの双方がアサートされる場合、ＡＮＤゲート４０５は真であると評価し、ロジック４１６を有効にする。命令特有のオペコードのフィールド２２５（図２）の値をデコードするために、ロジック４１６は３バイトのエスケープコード値０ｘ３Ａを有する命令のための３バイトのオペコードのマップを選択する。
【００４９】
ＡＮＤゲート４０８は３バイトのエスケープ・オペコードの値０ｘ３Ｂと命令ビットＩＫからＩＫ＋７を照合し、信号ＥＳ３Ｂを作る。命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３Ｂを表す場合に、信号ＥＳ３Ｂがアサートされる。命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコード０ｘ０Ｆを表し、命令ビットＩＫからＩＫ＋７が３バイトのエスケープ・オペコード０ｘ３Ｂを表す場合、その命令は新しい形式０の命令２２６である。ＥＳＣ２とＥＳ３Ｂの双方がアサートされる場合、ＡＮＤゲート４０９は真であると評価し、ロジック４１８を有効にする。命令特有のオペコードのフィールド２２５（図２）の値をデコードするために、ロジック４１８は３バイトのエスケープコード値０ｘ３Ｂを有する命令のための３バイトのオペコードのマップを選択する。
【００５０】
図５は、図３に示されたオペコード・デコーダ３４０のようなデコーダの更なる詳細と、プレフィックス及びエスケープ検出器３２０とデコーダ許可回路３３０の更なる詳細とを示した図である。
【００５１】
説明の目的のため、例示的な命令セットについて、１つの０ｘ６６のプレフィックスと３つのエスケープ・オペコード（標準のエスケープ・オペコード０ｘＤ８−０ｘＤＦと、２バイトのエスケープ・オペコード０ｘ０Ｆと、３バイトのエスケープ・オペコード０ｘ０Ｆ３８−０ｘ０Ｆ３Ｂ）が存在することを仮定する。
【００５２】
説明の目的のため、回転器（図３の３０８）がプレフィックスであることがある命令コードの第１バイトを示したことを仮定する。しかし、実際には、命令がオペコードの最小位バイトのような他のバイトに回転されることがあり、それに応じて図５に示される機能が変更されることがあることがわかる。
【００５３】
図５は、図３に示されたものに加えて、命令の更なるバイトが特定の個々のデコーダ５３０、５３２、５３４、５３６、５３８、４４０、５４２に経路選択されることがあることを示している。例えば、図５は、命令ワードＩＭからＩＭ＋７とＩＰからＩＰ＋７が新しい命令の形式１のためのデコーダ５４２に経路選択されることがあることを示している。図５に示される回路の特定の機能は、図面を簡単にするために、及び選択された実施例の機能をあいまいにすることを回避するために、意図的に除外されている。しかし、図５に示されるものに加えて、他のバイトの命令ワードが他のデコーダ５３０、５３２、５３４、５３６、５３８、４４０に経路選択されることがあることを、当業者は認識するであろう。
【００５４】
プレフィックス及びエスケープ検出器３２０は、５つのＡＮＤゲート５１０、５１２、５１４、５１６、５１８、５２０を有する。一般的にＡＮＤゲート５１０、５１２、５１４は、命令ビットＩＮからＩＮ＋７を対応するプレフィックスコードとエスケープ・オペコードと照合する。
【００５５】
ＡＮＤゲート５１０は、命令ビットＩＮからＩＮ＋７をプレフィックスコード０ｘ６６と照合し、信号ＰＲＦＸを作る。命令ビットＩＮからＩＮ＋７がプレフィックス０ｘ６６を表す場合に、信号ＰＲＦＸがアサートされる。
【００５６】
ＡＮＤゲート５１２は、命令ビットＩＮからＩＮ＋７をエスケープ・オペコード０ｘＤ８−０ｘＤＦと照合し、信号ＥＳＣ１を作る。命令ビットＩＮからＩＮ＋７がエスケープ・オペコード０ｘＤ８から０ｘＤＦのうちの何らかを表す場合に、信号ＥＳＣ１がアサートされる。
【００５７】
ＡＮＤゲート５１４は、命令ビットＩＮからＩＮ＋７を２バイトのエスケープ・オペコード０ｘ０Ｆと照合し、信号ＥＳＣ２Ａを作る。命令ビットＩＮからＩＮ＋７がエスケープ・オペコード０ｘ０Ｆを表す場合に、信号ＥＳＣ２Ａがアサートされる。命令ビットＩＮからＩＮ＋７がエスケープ・オペコード０ｘ０Ｆを表す場合、その命令は、拡張された形式０の命令２２２又は新しい形式０の命令２２８のいずれかであることがある。従って、後述される通り、更なるＡＮＤゲート５１８は第３のセットのビットＩＬからＩＬ＋７を評価し、３バイトのオペコードの後半が存在するか否かを判断する。
【００５８】
前述の方法で、プレフィックス及びエスケープ検出器３２０は、命令オペコードの第１のセットのビットＩＮからＩＮ＋７がプレフィックス値０ｘ６６又はエスケープ・オペコードの値のうちの１つを有するか否かを判断する。第１のセットのビットがプレフィックス値を有する場合、その命令は拡張された形式１の命令２２４又は新しい形式１の命令２２８であることがある。従って、第２のセットのビットＩＫからＩＫ＋７が評価され、それが値０ｘ０Ｆを含むか否を判断する（含まない場合、プレフィックスは命令のオペコードの一部ではなく、従来のプレフィックスであると仮定される）。
【００５９】
従って、ＡＮＤゲート５１６は命令ビットＩＫからＩＫ＋７を２バイトのエスケープ・オペコード０ｘ０Ｆと照合し、信号ＥＳＣ２Ｂを作る。命令ビットＩＫからＩＫ＋７がエスケープ・オペコード０ｘ０Ｆを表す場合に、信号ＥＳＣ２Ｂがアサートされる。
【００６０】
更に、ＡＮＤゲート５１８は命令ビットＩＫからＩＫ＋７を評価し、３バイトのオペコードの後半がそのビットに存在するか否かを判断する。そのような評価は、第１のセットのビットＩＮからＩＮ＋７が値０ｘ０Ｆを含む場合に有益である。ＡＮＤゲート５１８は、命令ビットＩＫからＩＫ＋７を３バイトのエスケープ・オペコードの後半と照合し、信号ＥＳＣ３Ａを作る。命令ビットＩＫからＩＫ＋７が値０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂを含む場合に、信号ＥＳＣ３Ａがアサートされる。
【００６１】
前述の方法で、プレフィックス及びエスケープ検出回路３２０は、命令オペコードの第２のセットのビットＩＫからＩＫ＋７がエスケープ・オペコードの値のうちの１つを有するか否かを判断する。第２のセットのビットＩＫからＩＫ＋７が３バイトのオペコードの値の後半を有する場合、その命令は新しい形式０の命令２２６であることがある。しかし、第２のセットのビットＩＫからＩＫ＋７が値０ｘ０Ｆを含む場合、その命令は拡張された形式１の命令２２４又は新しい形式１の命令２２８のいずれかであることがある。従って、第３のセットのビットＩＬからＩＬ＋７が評価され、それが３バイトのエスケープ・オペコードのうちの１つの後半を含むか否を判断する。すなわち、第３のセットのビットＩＫからＩＫ＋７が評価され、それが値０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂを含むか否かが判断される。
【００６２】
従って、図５は、ＡＮＤゲート５１９が命令ビットＬＫからＬＫ＋７を３バイトのエスケープ・オペコードの第２バイト０ｘ３８−０ｘ３Ｂと照合し、信号ＥＳＣ３Ｂを作ることを示している。命令ビットＩＬからＩ＋＋７が３バイトのエスケープ・オペコード値０ｘ０Ｆ３８から０ｘ０Ｆ３Ｂのうちの何らかの第２バイトを表す場合に、信号ＥＳＣ３Ｂがアサートされる。
【００６３】
当業者にわかる通り、命令ビットＩＮからＩＮ＋７、ＩＫからＩＫ＋７及びＩＬからＩＬ＋７の照合又はデコードを実行するために、他の論理ゲートが使用され得る。
【００６４】
デコーダ許可回路３３０は、ＰＲＦＸ、ＥＳＣ１、ＥＳＣ２Ａ、ＥＳＣ２Ｂ、ＥＳＣ３Ａ及びＥＳＣ３Ｂの信号を受け取り、個々のデコーダに許可信号を作る。デコーダ許可回路３３０は、ＮＯＲゲート５２０と、ＡＮＤゲート５２２、５２６、５２７、５２８及び５２９とを有する。個々のデコーダの全て又は一部がプログラマブル・ロジック・アレーのような単一の装置に合わせて実装されることがあることを当業者は認識するであろう。
【００６５】
ＰＲＦＸとＥＳＣ１とＥＳＣ２Ａの全てがネゲートされると、ＮＯＲゲート５２０はＥＮ１信号をアサートする。この条件は、命令ビットＩＮからＩＮ＋７が、プレフィックスと、浮動小数点のエスケープ・オペコードと、２バイトのエスケープ・オペコードとのいずれにも照合しない条件に対応する。従って、命令ビットＩＮからＩＮ＋７は１バイトの標準の命令のオペコードに対応する。
【００６６】
ＰＲＦＸ信号がアサートされ、ＥＳＣ２Ｂがネゲートされると、ＡＮＤゲート５２２はＥＮ２信号をアサートする。ＥＮ２信号のアサートは、命令ビットＩＮからＩＮ＋７がプレフィックスコードに照合するが、命令ビットＩＫからＩＫ＋７が２バイトのエスケープ・オペコードに照合しない条件に対応する。従って、この条件は、標準の命令の限定子としてプレフィックスを使用するオペコードに対応する。
【００６７】
ＥＳＣ１信号は、ＥＮ３信号として使用される。命令ビットＩＮからＩＮ＋７が浮動小数点のエスケープ・オペコードに照合する場合に、この信号がアサートされる。従って、この条件は、標準の命令の浮動小数点オペコードに対応する。
【００６８】
ＥＳＣ２Ａ信号がアサートされ、ＥＳＣ３Ｂ信号がネゲートされると、ＡＮＤゲート５２８はＥＮ４信号をアサートする。ＥＮ４信号のアサートは、命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコードに照合し、命令ビットＩＬからＩＬ＋７が３バイトのエスケープ・オペコードのうちの後半に全く照合しない条件に対応する。従って、この条件は、拡張命令の形式０のオペコードに対応する。
【００６９】
ＰＲＦＸ信号とＥＳＣ２Ｂ信号がアサートされ、ＥＳＣ３Ｂ信号がアサートされない場合に、ＡＮＤゲート５２６はＥＮ５信号をアサートする。この条件は、命令ビットＩＮからＩＮ＋７がプレフィックスコードに照合し、命令ビットＩＫからＩＫ＋７が２バイトのエスケープ・オペコードに照合するが、命令ビットＩＬからＩＬ＋７が３バイトのエスケープ・オペコードのうちの後半に全く照合しない条件に対応する。従って、この条件は、拡張命令の形式１のオペコードに対応する。
【００７０】
ＥＳＣ２Ａ信号とＥＳＣ３Ｂ信号の双方がアサートされると、ＡＮＤゲート５２７はＥＮ６信号をアサートする。ＥＮ６信号のアサートは、命令ビットＩＮからＩＮ＋７が２バイトのエスケープ・オペコードに照合し、命令ビットＩＬからＩＬ＋７が３バイトのエスケープ・オペコードのうちの１つの後半に照合する条件に対応する。従って、この条件は、新しい命令の形式０のオペコードに対応する。
【００７１】
ＰＲＦＸ信号とＥＳＣ２Ｂ信号とＥＳＣ３Ｂ信号とがアサートされると、ＡＮＤゲート５２９はＥＮ７信号をアサートする。ＥＮ７信号のアサートは、命令ビットＩＮからＩＮ＋７がプレフィックスコードに照合し、命令ビットＩＫからＩＫ＋７が２バイトのエスケープ・オペコードに照合し、命令ビットＩＬからＩＬ＋７が３バイトのエスケープ・オペコードのうちの１つの後半に照合する条件に対応する。従って、この条件は、新しい命令の形式１のオペコードに対応する。
【００７２】
オペコード・デコーダ３４０は、標準の１バイトのデコーダ５３０と、標準のプレフィックス・デコーダ５３２と、標準のエスケープ・デコーダ５３４と、拡張命令の形式０のデコーダ５３６と、拡張命令の形式１のデコーダ５３８と、新しい命令の形式０のデコーダ４４０と、新しい形式１のデコーダ５４２とを有する。前記デコーダ５３０、５３２、５３４、５３６、５３８、４４０、５４２は別個のブロックで示されているが、実際には前記命令のデコードは組み合わされることがある。
【００７３】
図６は、命令セットに規定されたフォーマットの命令の命令デコードを実行する方法６００を示したフローチャートであり、前記命令セットは３バイトのエスケープ・オペコードを使用してコード化された命令を含む。図６に示された処理ブロック６０２−６３６は、図示された順に実行される必要がないことを当業者は認識するであろう。前記処理ブロック６０２−６３６は異なる順序で実行されることがある。例えば、有効なプレフィックスの判断６０２は、２バイトのエスケープ・オペコードの判断６０４、６１０の後に実行されることがある。その他、図６に示された処理ブロックのいくつか又は全ては、他のブロックの処理と同時に実行されることがある。
【００７４】
図６は、方法６００が“開始”で始まり、処理がブロック６０２に進むことを示している。ブロック６０２において、方法６００は第１バイト（命令ビットＩＮからＩＮ＋７）がプレフィックスコード０ｘ６６と照合するか否かを判断する。照合しない場合には、処理がブロック６０４に進む。その他の場合には、処理がブロック６１０に進む。
【００７５】
ブロック６１０において、方法６００は命令の第２バイト（命令ビットＩＮからＩＮ＋７）が２バイトのエスケープ・オペコード値０ｘ０Ｆと照合するか否かを判断する。少なくとも１つの実施例において、２バイトのエスケープ・オペコードの値は０ｘ０Ｆである。エスケープ・オペコードの検査６１０が“偽”であると評価されると、処理はブロック６２４に進む。ブロック６２４において、第１バイト（命令ビットＩＮからＩＮ＋７）がプレフィックスコード０ｘ６６と照合し（ブロック６０２参照）、第２バイト（命令ビットＩＫからＩＫ＋７）が２バイトのエスケープ・オペコードと照合しない（ブロック６１０参照）ことが判断されている。従って、ブロック６２４において、命令の第２バイト（命令ビットＩＫからＩＫ＋７）は、プレフィックスの限定子を備えた標準の命令のオペコードとしてデコードされる。
【００７６】
エスケープ・オペコードの検査６１０が“真”であると評価されると、処理がブロック６２８に進み、命令が新しい形式１の命令であるか否かを判断する。ブロック６２８において、前記方法は、命令の第３バイト（命令ビットＩＬからＩＬ＋７）が３バイトのエスケープ・オペコード値の後半に照合するか否かを判断する。少なくとも１つの実施例において、３バイトのエスケープ・オペコードの値は、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ及び０ｘ０Ｆ３Ｂである。従って、ブロック６２８において、命令の第３バイト（命令ビットＩＬからＩＬ＋７）が０ｘ０３８、０ｘ０３９、０ｘ０３又は０ｘ０３Ｂの値に照合するか否かが判断される。照合しない場合には、処理ブロックはブロック６３２に進む。しかし、３バイトのエスケープ・オペコードの検査６２８が真であると評価すると、処理がブロック６３４に進む。ブロック６３４において、命令の第４バイト（命令ビットＩＭからＩＭ＋７）は、新しい形式１の命令のオペコードとしてデコードされる。その後、処理が終了する。
【００７７】
ブロック６３２において、命令の第３バイト（命令ビットＩＬからＩＬ＋７）は、命令の第１バイトに値０ｘ６６、及び命令の第２バイトに２バイトのエスケープコード値０ｘ０Ｆを有する拡張された形式１の命令のオペコードとしてデコードされる。その後、処理が終了する。
【００７８】
ブロック６０２で命令の第１バイト（命令ビットＩＫからＩＫ＋７）がプレフィックス値０ｘ６６に照合しないことが判断されると、ブロック６０４で処理が継続する。ブロック６０４において、命令の第１バイト（命令ビットＩＫからＩＫ＋７）が２バイトのエスケープ値に照合するか否かが判断される。照合しない場合には、処理はブロック６０６に進む。しかし、２バイトのエスケープ・オペコードの評価６０４が“真”であると評価すると、処理がブロック６２０に進み、命令が新しい形式０の命令であるか否かを判断する。
【００７９】
ブロック６２０において、前記方法は、命令の第２バイト（命令ビットＩＫからＩＫ＋７）が３バイトのエスケープ・オペコード値の後半に照合するか否かを判断する。少なくとも１つの実施例において、３バイトのエスケープ・オペコードの値は、０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ及び０ｘ０Ｆ３Ｂである。従って、ブロック６２０において、命令の第２バイト（命令ビットＩＫからＩＫ＋７）が０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂの値に照合するか否かが判断される。照合しない場合には、処理ブロックはブロック６２２に進む。しかし、３バイトのエスケープ・オペコードの検査６２０が真であると評価すると、処理がブロック６３０に進む。ブロック６３０において、命令の第３バイト（命令ビットＩＬからＩＬ＋７）は、新しい形式０の命令のオペコードとしてデコードされる。その後、処理が終了する。
【００８０】
３バイトのエスケープ・オペコードの検査６２０が“偽”であると評価すると、処理がブロック６２２に進む。ブロック６２２において、命令の第３バイト（命令ビットＩＬからＩＬ＋７）は、その第１バイトにプレフィックス値０ｘ６６、及びその第２バイトに２バイトのオペコード値０ｘ０Ｆを有する拡張された形式０の命令のオペコードとしてデコードされる。
【００８１】
ブロック６０４で命令の第１バイト（命令ビットＩＫからＩＫ＋７）が２バイトのエスケープ・オペコード値に照合しないことが判断されると、ブロック６０６で処理が継続する。ブロック６０６において、方法６００は、第１バイトが他のエスケープ・オペコード（例えば浮動小数点のエスケープ・オペコード０ｘＤ８から０ｘＤＦ）に照合するか否かを判断する。照合しない場合には、処理はブロック６３６に進み、第１バイトを１バイトの標準の命令としてデコードする。その後、処理が終了する。
【００８２】
しかし、他のエスケープコードの評価６０６が“真”であると評価すると、処理がブロック６２６に進み、そこで第２バイトが他の標準の命令（例えば浮動少数点の命令）としてデコードされる。その後、処理が終了する。
【００８３】
図７は、メモリから取り込まれた命令の長さを定めるための方法７００を示したものである。少なくとも１つの実施例において、方法７００は命令長デコーダ（例えば図３の３０６等）で実行される。
【００８４】
図７は、処理が“開始”で始まり、ブロック７０２に進むことを示している。ブロック７０２において、現在の命令バイトがプレフィックスバイトであるか否かが判断される。方法７００の最初の経路では、現在のバイトは命令の第１バイトである。現在のバイトが命令セットに規定されたプレフィックス値を含むとブロック７０２で判断されると、ブロック７１２でプレフィックスが処理され、次のバイトが処理のために取り出される。
【００８５】
次に、ブロック７１２で取り出された新しい現在のバイトがプレフィックス値を含むか否かを判断するために、処理がブロック７０２に戻る。このように、方法７００は複数のプレフィックスバイトを含む命令の長さをデコードすることを提供する。少なくとも１つの実施例において、前述したように、命令が４つまでのプレフィックスバイトを含むことがある。
【００８６】
ブロック７０２において、命令の現在のバイトがプレフィックス値を含まないと判断されると、処理がブロック７０４に進む。ブロック７０４において、命令の現在のバイトが０ｘ０Ｆのような２バイトのエスケープコードを含むか否かが判断される。含まない場合、処理がブロック７１４に進み、それは以下に詳細に説明される。
【００８７】
ブロック７０４で命令の現在のバイトが２バイトのエスケープコード値を含むと判断されると、その命令は新しい形式０又は新しい形式１の命令であることがある。従って、ブロック７０５において命令の次のバイトが取得され、ブロック７０６において新たに取得されたバイトが３バイトのエスケープコード値のうちの１つを含むか否かが判断される。含む場合には、命令が新しい形式０又は形式１の命令であると判断される。
【００８８】
新しい形式０又は新しい形式１の命令の長さを定めるために、ｍｏｄＲ／Ｍのフィールド２３０の内容が評価される。従って、現在の命令コードのｍｏｄＲ／Ｍバイトの内容がブロック７０７で取り出される。ブロック７０８において、ＳＩＢ値が現在の命令コードから取り出されるべきであることをｍｏｄＲ／Ｍの値が示すか否かが判断される。そうである場合には、ＳＩＢのフィールド２４０（図２）の内容の全て又は一部が取り出され、処理がブロック７１０に進む。そうでない場合は、処理がブロック７１０に進む。注目すべきは、ここで開示された簡略化された長さのデコード方法（ブロック７１０参照）のため、新しい形式０又は新しい形式１の命令の長さをデコードする際に、命令特有のオペコードのフィールド２２５の内容を評価する必要がない。従って、ブロック７０７において、そのようなバイトが取り出されず、“スキップ”される。
【００８９】
ブロック７１０において、命令の開始と終了の位置を定めるために、新しい形式１及び新しい形式０の命令の長さが定められる。命令の長さを定めるために、ブロック７１０は、命令の少なくとも３バイトの内容を評価する。当然ながら、新しい形式１及び新しい形式０の命令以外の命令の長さを定めるために、より大きい又は小さいバイトが評価されることがあることを当業者は認識するであろう。
【００９０】
ブロック７１０において、第１の命令バイトと第２の命令バイトと第４の命令バイトが評価され、新しい形式０の命令の長さを定める。更に、ＳＩＢの値が存在する場合には、第５の命令バイトの少なくともいくつかのビットが評価される。すなわち、新しい形式０において、ＳＩＢのフィールドの値が存在する場合には、命令ブロック７１０は３バイトのエスケープ・オペコードのフィールド１１８ｃ（図２）と、ｍｏｄＲ／Ｍのフィールド（図２の２３０）と、ＳＩＢフィールドの３ビット（図２の２４０）の内容を評価する。長さは以下のように定められる。
【００９１】
（（バイト１＝＝０ｘ０Ｆ）かつ（バイト２＝＝０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂ）かつ（バイト４＝ｍｏｄＲ／Ｍバイトがディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）を有さず、ＳＩＢが必要ない））の場合、命令長＝４
その他、（（バイト１＝＝０ｘ０Ｆ）かつ（バイト２＝＝０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂ）かつ（バイト４＝ｍｏｄＲ／Ｍバイトがディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）を有し、又はＳＩＢが必要である）の場合、命令長は、ｍｏｄＲ／Ｍのフィールド（図２の２３０）の値と、ＳＩＢのフィールド（図２の２４０）の３ビットの値に基づいて計算される。
【００９２】
従って、新しい形式０の命令のための長さのデコードブロック７１０は、命令の長さを定めるために第３のオペコードバイトを評価する必要がない。また、オペコードのマップ毎に、対応する長さ判定ロジックは同じセットの固定入力を受け取り、それぞれのマップの各命令の長さを評価する。例えば、０ｘ０Ｆ３８のオペコードのマップについて、ブロック７０８で長さ判定ロジックがｍｏｄＲ／Ｍバイトを評価する。ＳＩＢバイトが現在の命令コードに存在しないことをｍｏｄＲ／Ｍバイトの値が示すと、ＳＩＢバイトを評価せずに命令長がデコードされる７１０。
【００９３】
他方、ＳＩＢ値が存在する場合、命令コードの長さを定める７１０ために、ＳＩＢのフィールド２４０（図２）の１つ以上のビットが評価される。命令特有のオペコードのフィールド２２５（図２）の値は、０ｘ０Ｆ３８のオペコードのマップの命令の長さを定めるために評価されない。ｍｏｄＲ／ＭとＳＩＢの値（示された場合）以外の入力項目の全てもまた、オペコードのマップの命令のために評価されない。従って、固定のセットの入力項目が所定のオペコードのマップの命令の長さを定めるために評価され、各入力がオペコードのマップの各命令の長さを定めることに関連する。
【００９４】
１つ以上の他の入力項目の値が与えられ、特定の入力項目が命令コードの長さを定めるために使用される場合、特定の入力項目は、命令コードの長さを定めることに“関連”する。例えば、マップの命令毎にＳＩＢの値が評価され、ｍｏｄＲ／Ｍの値に応じて長さを定めるため、ＳＩＢの値は０ｘ０Ｆ３８のオペコードのマップの各命令と関連する。対照的に、命令特有のオペコード２２５（図２）の値は、他の入力項目の値に関わらず長さを定めるために評価されないため、０ｘＦ３８のオペコードのマップの命令の長さの判定に関連しない。同様に、ディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）のフィールド２５０（図２）の値のような他の入力項目は、他の関連する入力項目の値の何らかの組み合わせのもとで命令長を評価するために使用されない場合には、命令長を定めることに関係しない。
【００９５】
このように、新しい形式０のデコードロジックが相対的に簡単に保持される。少なくとも１つの実施例において、どの長さのデコードロジックが拡張された形式０の命令に使用されるかを判断するために評価されるバイトの数に対して、どの長さのデコードロジックが新しい形式０の命令に使用されるかを判断するために、更なるバイトは評価されない。同じ方法が所定のオペコードのマップの各命令の長さを定めることに適用されるため、新しいオペコードのマップの全ての命令について、この簡潔さが維持される。
【００９６】
ここで使用されるように、オペコードのマップは、命令バイトにおける値の特定の組み合わせで特定された命令のグループを参照する。例えば、０Ｆ：３８：１ｂ“ｘｘｘｘｘｘｘｘ”と６６：０Ｆ：３８：１ｂ“ｘｘｘｘｘｘｘｘ”で特定された全ての命令は、０Ｆ：３８の３バイトのエスケープコード値のためのオペコードのマップの一部と考えられる。同様に、０Ｆ：３９のオペコードのマップは、０Ｆ：３９：１ｂ“ｘｘｘｘｘｘｘｘ”と６６：０Ｆ：３９：１ｂ“ｘｘｘｘｘｘｘｘ”で特定された命令のグループを参照し、０Ｆ：３Ａのオペコードのマップは、０Ｆ：３Ａ：１ｂ“ｘｘｘｘｘｘｘｘ”と６６：０Ｆ：３Ａ：１ｂ“ｘｘｘｘｘｘｘｘ”で特定された命令のグループを参照し、０Ｆ：３Ｂのオペコードのマップは、０Ｆ：３Ｂ：１ｂ“ｘｘｘｘｘｘｘｘ”と６６：０Ｆ：３Ｂ：１ｂ“ｘｘｘｘｘｘｘｘ”で特定された命令のグループを参照し、１ｂ“ｘｘｘｘｘｘｘｘ”は、特定されたオペコードのマップの規定のオペコードである。
【００９７】
ブロック７１０において、第２の命令バイトと第３の命令バイトと第５の命令バイトが評価され、新しい形式１の命令の長さを定める。更に、ＳＩＢの値が存在する場合には、第６の命令バイトの少なくともいくつかのビットが評価される。新しい形式０の命令のための処理と同様に、ＳＩＢのフィールドの値が存在する場合には、ブロック６２２は３バイトのエスケープ・オペコードのフィールド値１１８ｃ（図２）を保持する２バイトと、ｍｏｄＲ／Ｍのフィールド（図２の２３０）と、ＳＩＢフィールドの３ビット（図２の２４０）とを評価する。長さは以下のように定められる。
【００９８】
（（バイト２＝＝０ｘ０Ｆ）かつ（バイト３＝＝０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂ）かつ（バイト５＝ｍｏｄＲ／Ｍバイトがディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）を有さず、ＳＩＢが必要ない））の場合、命令長＝４
その他、（（バイト１＝＝０ｘ０Ｆ）かつ（バイト２＝＝０ｘ３８、０ｘ３９、０ｘ３Ａ又は０ｘ３Ｂ）かつ（バイト４＝ｍｏｄＲ／Ｍバイトがディスプレイスメント（ｄｉｓｐｌａｃｅｍｅｎｔ）を有し、又はＳＩＢが必要である）の場合、命令長は、ｍｏｄＲ／Ｍのフィールド（図２の２３０）の値と、ＳＩＢのフィールド（図２の２４０）の３ビットの値に基づいて計算される。
【００９９】
従って、新しい形式１の命令のための長さのデコードブロック７１０は、命令の長さを定めるために第３のオペコードバイトを評価する必要がない。このように、新しい形式１の命令のデコードロジックが相対的に簡単に保持される。少なくとも１つの実施例において、どの長さのデコードロジックが拡張された形式１の命令に使用されるかを判断するために評価されるバイトの数に対して、どの長さのデコードロジックが新しい形式１の命令に使用されるかを判断するために、更なるバイトは評価されない。
【０１００】
前述の通り、単一の固定入力の長さ判定がそれぞれのオペコードのマップの各命令の長さを定めるために使用されるように、オペコードのマップとそれに対応する長さ判定ロジックを規定することで、新しい形式０と新しい形式１の命令のための長さのデコード処理７１０の簡潔さが保たれる。従って、特定の３バイトのオペコードのマップの各命令の長さは、３バイトのオペコード値を有する他の全ての命令と同じ方法で定められる。すなわち、各３バイトのオペコード値（０ｘ０Ｆ３８、０ｘ０Ｆ３９、０ｘ０Ｆ３Ａ、０ｘ０Ｆ３Ｂ）はオペコードのマップに関連付けられ、オペコードの各命令の長さは同じ固定入力の方法で定められる。
【０１０１】
例えば、少なくとも１つの実施例において、３バイトのエスケープ・オペコードの値０ｘ０Ｆ３８（前記の表１参照）に関連する全ての命令は、同じ４バイトの命令を評価することにより定められる。前記４バイトには、３バイトのエスケープ・オペコード値（０ｘ０Ｆ３８）を含む２バイトと、オペコード値（前記の表１参照）を保持する１バイトのオペコードのフィールドと、１バイトのｍｏｄＲ／Ｍのフィールドが含まれる。ｍｏｄＲ／Ｍのフィールドの値に応じて、ＳＩＢのフィールの更なる３ビットがまた、０ｘ０Ｆ３８のオペコードのマップの命令の命令長を定めるために評価されることがある。０ｘ０Ｆ３８のオペコードのマップの命令にイミディエイト・データ（ｉｍｍｅｄｉａｔｅ  ｄａｔａ）は含まれない。
【０１０２】
同様に、少なくとも１つの実施例において、３バイトのオペコードの値０ｘ０Ｆ３Ａ（前記の表１参照）に関連する全ての命令が、同じ方法で定められる。前記方法は、３バイトのエスケープ・オペコード値（０ｘ０Ｆ３８）を含む２バイトと、オペコード値（前記の表１参照）を保持する１バイトのオペコードのフィールドと、１バイトのｍｏｄＲ／Ｍのフィールドと、イミディエイト・データ（ｉｍｍｅｄｉａｔｅ  ｄａｔａ）を保持する１バイトのフィールドとを評価する。ｍｏｄＲ／Ｍのフィールドの値に応じて、ＳＩＢのフィールドの更なる３ビットがまた、０ｘ０Ｆ３８のオペコードのマップの命令の命令長を定めるために評価されることがある。
【０１０３】
２バイトのエスケープ・オペコード値０ｘ０Ｆを含むバイトに続く命令のバイトが３バイトのエスケープ・オペコードの値のうちの１つを含まないことがブロック７０６で判断されると、処理がブロック７２２に進むことを図７は示している。
【０１０４】
ブロック７１４、７１６、７１８、７１９、７２０と、ブロック７２２、７２４、７２６、７２７、７２８は、それぞれ同様の処理を実行する。前者のセットのブロックは、命令が２バイトのエスケープ・オペコード値０ｘ０Ｆを含まないことをブロック７０４が判断した場合に実行される。他方、ブロック７２２、７２４、７２６、７２７、７２８は、先行するバイトが２バイトのエスケープ・オペコード値０ｘ０Ｆを含むが、現在のバイトが３バイトのエスケープ・オペコードの値を含まないことをブロック７０６で判断された場合に実行される。
【０１０５】
それぞれの場合について、現在の命令がｍｏｄＲ／Ｍの値を有するか否かが、それぞれブロック７１４と７２２で判断される。有する場合には、処理がそれぞれブロック７１８と７２６に進み、そこでｍｏｄＲ／Ｍの値が取得される。ＳＩＢの値が取り出されるべきであることをｍｏｄＲ／Ｍの値が示すと、それぞれブロック７１９と７２７でＳＩＢの値が取り出される。ｍｏｄＲ／Ｍの値と、示されている場合にはＳＩＢのフィールドからの１つ以上のビットとを利用して、それぞれブロック７２０と７２８で命令の長さが定められる。その後、処理が終了する。
【０１０６】
現在の命令がｍｏｄＲ／Ｍの値を有する場合、処理がそれぞれブロック７１６と７２４に進み、そこでｍｏｄＲ／Ｍの値を考慮せずに命令の長さがデコードされる。その後、処理が終了する。
【０１０７】
前述の説明の通り、ここに記載された装置と方法の実施例は、既存のプレフィックスの値とともに３バイトのエスケープ・オペコードを使用して新しい命令セットをデコードする効果的な機構を提供する。新しい命令セットは、命令のデコーダを過度に複雑化することなく、既存の命令セットを拡張する。
【０１０８】
前述の説明は、可変長の命令セットを有するプロセッサのためのオペコードのマップの規定を説明したものであり、オペコードのマップの各命令は固定入力の長さ判定ロジックを使用して長さのデコードが行われ得る。前述の説明は、３バイトのエスケープ・オペコードのマップの命令の長さを定める単一の方法に関して説明された。しかし、他の実施例において、単一の固定入力の長さ判定ロジックがオペコードのマップの各命令の長さをデコードするために適用され得るように、１バイトのエスケープ・オペコードのマップが規定され得る。そのような命令について、命令特有のオペコードが、例えば０ｘＤ６又は０ｘＦ１のような特定の値を含むエスケープバイトに続く。前記の１バイトのエスケープ・オペコードのマップの各命令の長さは、同じ固定入力の長さ判定ロジックを使用してデコードされることがある。
【０１０９】
同様に、他の実施例において、２バイトのエスケープ・オペコードのマップの全て又は一部もまた、ここで説明されたように規定されることがある。前記の実施例において、同じ固定入力の長さ判定ロジックが、新しい２バイトのエスケープ・オペコードのマップの各命令の長さをデコードするために適用されることがある。例えば、単一の固定入力の長さ判定ロジックが前記のオペコードのマップの各命令の長さを定めるために使用されることがあるように、２バイトのエスケープ・オペコードのマップ内の命令のブロックが規定されることがある。少なくとも１つの実施例において、新しいエスケープコードのマップは、命令特有のオペコードがエスケープコードに続くように規定される。エスケープコードは、例えば０ｘ０Ｆ３Ｃから０ｘ０Ｆ３Ｙのうちの何らか又は全てであることがある。
【０１１０】
本発明の特定の実施例が示され、説明されたが、広い態様において本発明から逸脱することなく変更態様と変形態様が作られ得ることが、当業者に明らかである。特許請求の範囲は、本発明の真の範囲にあるそのような変更態様と変形態様を含むものである。
【図面の簡単な説明】
【０１１１】
【図１】開示された技術を利用し得る処理システムの少なくとも１つの実施例を示したブロック図である。
【図２】命令のフォーマットの少なくとも１つの実施例を示したブロック図である。
【図３】命令をデコードするロジックの少なくとも１つの実施例を示したブロック図である。
【図４】新しい形式１の命令をデコードする回路の少なくとも１つの実施例を示した図である。
【図５】本発明の少なくとも１つの実施例によるプレフィックス及びエスケープ検出器と、デコーダ許可回路と、オペコード検出器とを示した図である。
【図６】本発明の少なくとも１つの実施例によるプレフィックスを使用した命令のデコードを実行する処理を示したフローチャートである。
【図７】命令長をデコードするための方法の少なくとも１つの実施例を示したフローチャートである。
【符号の説明】
【０１１２】
１０２  メモリシステム
１０４  データ
１０６  命令
１１０  プロセッサ
１１１  内部バス
１１２  実行ユニット
１１４  レジスタのセット
１１６  デコードユニット
１１８  命令セット
１１８ａ  既存の命令
１１８ｂ  新しい命令
【図１】
2005025741.tif 000006
【図２】
2005025741.tif 000007
【図３】
2005025741.tif 000008
【図４】
2005025741.tif 000009
【図５】
2005025741.tif 000010
【図６】
2005025741.tif 000011
【図７】
2005025741.tif 000012