(57)【要約】可変命令長プロセッサにおけるプリデコーダは、命令と共に命令キャッシュに格納されたプリデコードビットで命令の属性を表示する。１の長さ命令と関連付けられたプリデコードビットの全符号化が定義されるとき、その長さの命令の属性は、異なる長さの命令をエミュレートするために命令を変更し、異なる長さの命令と関連付けられたプリデコードビットの属性を符号化することによって表示される。そのように表示される属性の１つの例は未定義命令である。【選択図】    図３
2009535744.tif 000002
【特許請求の範囲】
【請求項１】
第１の命令の属性を識別することと、
第２の命令をエミュレートするために前記第１の命令を変更することと、
前記第１の命令の前記属性を識別する前記第２の命令のプリデコードビットを生成することと、
を備えた、プロセッサの命令をプリデコーディングする方法。
【請求項２】
前記第１の命令は、例外を引き起こすこととなる命令である、請求項１に記載の方法。
【請求項３】
前記第１の命令は未定義の命令である、請求項２に記載の方法。
【請求項４】
前記プロセッサの命令セットは可変長命令セットであり、前記第１および第２の命令は異なる長さを有する、請求項１に記載の方法。
【請求項５】
各定義された命令長は、その長さの命令と関連付けられた異なる数のプリデコードビットを有する、請求項４に記載の方法。
【請求項６】
前記第１の命令の長さの命令と関連付けられたプリデコードビットの不充分な符号化は、前記第１の命令の前記属性を符号化するために使用可能である、請求項５に記載の方法。
【請求項７】
前記第２の命令の長さの命令と関連付けられた前記プリデコードビットの少なくとも１つの符号化は、前記第１の命令の前記属性を符号化するために使用可能である、請求項６に記載の方法。
【請求項８】
前記第１の命令は、それと関連付けられた２つのプリデコードビットを有する１６ビット命令である、請求項１に記載の方法。
【請求項９】
前記第２の命令は、それと関連付けられた４つのプリデコードビットを有する３２ビット命令である、請求項８に記載の方法。
【請求項１０】
３２ビット命令と関連付けられた前記プリデコードビットの前記１６の符号化のうちの１つは、前記関連付けられた３２ビット命令を１６ビット未定義命令として識別する、請求項９に記載の方法。
【請求項１１】
メモリから読み出される命令と各命令と関連付けられたプリデコードビットとを格納する命令キャッシュメモリと、
前記メモリと前記命令キャッシュとの間に介在されたプリデコーダと、
を備え、前記プリデコーダは、
第１の命令の属性を識別し、
第２の命令をエミュレートするために前記第１の命令を変更し、
前記第１の命令の前記属性を識別する前記第２の命令のプリデコードビットを生成し、
前記第２の命令の前記プリデコードビットを前記命令キャッシュに書きこむ動作をする、メモリから命令を読み出すプロセッサ。
【請求項１２】
メモリから読み出される前記命令は可変長命令セットからの命令である、請求項１１に記載のプロセッサ。
【請求項１３】
前記命令キャッシュは最短命令の長さに対応する複数の命令格納位置を備え、予め決められた数のプリデコードビットが前記格納位置のそれぞれと関連付けられる、請求項１２に記載のプロセッサ。
【請求項１４】
前記命令キャッシュは最短命令より長い命令を正数倍の格納位置に格納し、各格納位置と関連付けられた前記プリデコードビットを各命令と関連付ける、請求項１３に記載のプロセッサ。
【請求項１５】
前記第１の命令は、それに関連付けられた２つのプリデコードビットを有する１６ビット命令である、請求項１３に記載のプロセッサ。
【請求項１６】
前記第２の命令は、それに関連付けられた４つのプリデコードビットを有する３２ビット命令である、請求項１５に記載のプロセッサ。
【請求項１７】
３２ビット命令と関連付けられた前記プリデコードビットの前記１６の符号化のうちの１つは、前記３２ビット命令を１６ビット未定義命令であると識別する、請求項１６に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般的にはプロセッサの分野に関し、特に、例えば未定義の命令を識別するためのような、可変長命令をプリデコーディング(pre-decoding)する方法に関する。
【背景技術】
【０００２】
可変長命令セットアーキテクチャは当該技術分野において周知である。例えばＴｈｕｍｂ（１６ビット）拡張がＡＲＭ（３２ビット）命令セットに追加されるとき、もたらされる混合物は可変長命令セットと考えられる。他の例として、実行可能なＪａｖａ（登録商標）コードは各命令が２〜２５６バイト長の間にある一連のバイトコードから成る。一般的に可変長命令セットは基本サイズ(base size)の命令と、基本サイズの整数倍であるより長い命令とから成る。
【０００３】
プロセッサアーキテクチャおよび命令セットは時間と共に進化する。特に、機能性は、かつてはそれを達成するために大規模なソフトウエアルーチンが要求されていたものが、半導体技術の進歩につれてハードウエアで達成可能となる。進歩したハードウエア構成を効率的に活用するために、新たな命令が命令セットに追加される。しかし安定したプロセッサアーキテクチャの１つの特性は後方互換性である。すなわち、プロセッサアーキテクチャ用に書かれたソフトウエアはたとえ最新の機能を実行しなくても、あるいは最新の命令を直接実行しなくても、そのアーキテクチャに合致する、より旧式のプロセッサで実行可能であるべきである。従って共通のプロセッサアーキテクチャは例外を生成する「未定義の」命令(“undefined”instruction)を含み、未定義の命令と関連付けられた機能がソフトウエアにおいて実行される。
【０００４】
命令デコーディングを最適化するために従来の高性能プロセッサによってとられる１つの共通のアプローチはプリデコーディング(pre-decoding)である。プリデコーダは、命令キャッシュ（Ｉキャッシュ）に命令を格納する前にメモリから取り出される命令を検査して部分的にデコーディングする論理回路である。プリデコーダはＩキャッシュに各命令と共に格納される少数のプリデコードビットを生成する。キャッシュから命令を取り出すと、パイプラインデコーダは命令デコーディングタスクを単純化するためにプリデコードビットを使用する。プリデコードビットは、例えば、分岐命令を識別したり、可変長命令アーキテクチャの命令長を識別したりする。プリデコードビットは未定義命令を識別するためにも用いられる。
【０００５】
プリデコーディングを実施する可変長命令セットプロセッサにおいて、少数のプリデコードビットは最短、すなわち基本命令長(base instruction length)と関連付けられる。既知の命令キャッシュの実施は、この数のプリデコードビットを（それぞれが基本命令長に対応する）各Ｉキャッシュ格納位置と関連付けることである。Ｉキャッシュ格納位置の整数倍を占めるより長い命令は、より大きい数のプリデコードビットと対応して関連付けられる。命令と関連付けられるプリデコードビットに符号化が可能な個別の属性(property)の数は、従って、基本命令長に対して最小である。基本命令長の利用可能なプリデコードビット符号化の全てが違うように定義されると、未定義の基本長命令を識別するためにプリデコードビットを使用することは、基本命令長と関連付けられたプリデコードビットの数を増加する必要がある。この技術は、全ての格納位置に加えてＩキャッシュに格納されるプリデコードビットの数を次々に増加する。未定義命令の発生は稀で、また基本長より長い命令は豊富なプリデコードビット符号化スペースを有するため、未定義基本長命令を識別するためにプリデコードビットを追加することは高価なＩキャッシュ格納スペースを無駄遣いする可能性がある。
【発明の開示】
【発明の概要】
【０００６】
ここに記載した１つ以上の実施例によると、その命令長と関連付けられたプリデコードビット符号化スペースが完全に定義されているとき、プリデコーダは命令の属性を表示(indicate)する。異なる長さの命令をエミュレートするために命令を変更することにより、プリデコーダは異なる長さの命令と関連付けられたプリデコードビットの利用可能な符号化を利用して属性を表示する。
【０００７】
１つの実施例はプロセッサの命令をプリデコーディングする方法に関する。第１の命令の属性が識別される。第１の命令は第２の命令をエミュレートするために変更される。第１の命令の属性を識別する第２の命令のプリデコードビットが生成される。
【０００８】
他の実施例はメモリから命令を読み出す動作をするプロセッサに関する。プロセッサは、メモリから読み出される命令、および、各命令と関連付けられたプリデコードビットを格納する命令キャッシュメモリを含む。プロセッサは更にメモリと命令キャッシュとの間に置かれるプリデコーダを含み、プリデコーダは第１の命令の属性を識別し、第２の命令をエミュレートするために第１の命令を変更し、第１の命令の属性を識別する第２の命令のプリデコードビットを生成し、命令キャッシュに第２の命令のプリデコードビットを書き込む動作をする。
【詳細な説明】
【０００９】
図１はプロセッサ１０の機能ブロックダイアグラムである。プロセッサ１０は制御ロジック１４に従って命令実行パイプライン１２の命令を実行する。パイプライン１２は、１２ａおよび１２ｂのような複数の平行パイプラインを有するスーパースカラーデザインである。各パイプライン１２ａ、１２ｂはパイプステージに配置された様々なレジスタもしくはラッチ１６と、１つ以上の算術論理演算ユニット（ＡＬＵ）１８とを含む。パイプステージレジスタもしくはラッチ１６とＡＬＵ１８とは汎用レジスタファイル２８のレジスタからオペランドを読み出し、および／または汎用レジスタファイル２８のレジスタに結果を書き込む。
【００１０】
パイプライン１２ａ、１２ｂは、命令サイド変換索引バッファ(Instruction-side Translation Lookaside Buffer)（ＩＴＬＢ）２２により管理されるメモリアドレス指定および許可と共に、命令キャッシュ（ＩキャッシュもしくはＩ＄）２０から命令を取り出す。データは、主たる変換索引バッファ（ＴＬＢ）２６により管理されるメモリアドレス指定および許可と共に、データキャッシュ（ＤキャッシュもしくはＤ＄）からアクセスされる。様々な実施例において、ＩＴＬＢ２２はＴＬＢ２６の一部のコピーを備える。あるいは、ＩＴＬＢ２２およびＴＬＢ２６は一体化していてもよい。同様にプロセッサ１０の様々な実施例において、Ｉキャッシュ２０およびＤキャッシュ２４は一体化すなわち統合されてもよい。Ｉキャッシュ２０および／またはＤキャッシュ２４における誤りは、メモリインターフェース３４の制御の下で主たる（オフチップ）メモリ３６へのアクセスの原因となる。
【００１１】
メモリから取り出された命令はＩキャッシュ２０に格納される前にプリデコーダ回路３７において処理される。プリデコーダ３７は命令を部分的に復号し、Ｉキャッシュ２０の命令と一緒に格納されるプリデコードビットを追加する。命令がＩキャッシュ２０から取り出されるとき、プリデコードビットは、命令をよりすばやくおよび／またはより効率的に復号するためにパイプライン１２ａ、１２ｂ内のデコードパイプステージで使用される各命令に関する情報を提供する。例えばプリデコードビットは可変長命令セットアーキテクチャの命令の長さを識別したり、分岐命令を識別したりする。
【００１２】
プロセッサ１０は様々な周辺機器４０、４２へのアクセスを制御する入力／出力（Ｉ／Ｏ）インターフェース３８を含む。当業者はプロセッサ１０の多くのバリエーションが可能であることを認識するであろう。例えばプロセッサ１０はＩおよびＤキャッシュの一方または双方のために第２レベル（Ｌ２）キャッシュを含んでもよい。加えて、プロセッサ１０中に描かれる機能ブロックの１つ以上は、特定の実施例から省略されてもよい。
【００１３】
図２は、例示的で非限定的な一実施例に関する、プリデコーダ３７を介してメモリ３６からＩキャッシュ２０の１ラインに命令のマッピングを描く機能ブロックダイアグラムである。命令Ａは１６ビットの命令（この例の基本命令長）である。命令Ａがメモリから取り出されると、プリデコーダ３７はＩキャッシュ２０に命令Ａと共に格納される２つのプリデコードビットＰＡを付加する。命令ＢはＢ０、Ｂ１としてメモリ３６に格納された３２ビット命令である。プリデコーダ３７はＰＢ０、ＰＢ１としてＩキャッシュ２０に格納される４つのプリデコードビットを付加する。命令Ｃは１６ビット命令であり、２つのプリデコードビットＰＣと共にＩキャッシュ２０に格納される。
【００１４】
図２の表に示されるように、２つのプリデコードビットをそれぞれ有する命令ＡおよびＣは４つのプリデコードビット符号化スペースを有する。すなわち、命令長、命令が分岐であるかなどのような４つの個別の属性が命令ＡおよびＣのプリデコードビットに符号化される。４つのプリデコードビットを有する命令Ｂは１６のプリデコードビット符号化スペースを有する。もしアーキテクチャによってサポートされるなら、４８ビット命令は６つのプリデコードビット、６４の符号化スペースを有するなどとなる。
【００１５】
ある実施においてＡおよびＣのような１６ビット命令の４つのプリデコードビット符号化の全てが定義されると仮定すると、追加のプリデコードビットがＩキャッシュ２０の各１６ビット格納位置に追加され、プリデコードビットを使用して未定義の１６ビット命令を表示する。このことはＩキャッシュ２０の各格納位置が３つの関連するプリデコードビットを有するという結果になる。１６ビット命令は、従って、８つのプリデコード符号化スペースを有し、そのうち５つのみが使用される。加えて、３２ビット命令は６４のプリデコード符号化スペースを有し、４８ビット命令は５１２のプリデコード符号化スペースを有する。これはプリデコーダが表示することができる命令についてのそれぞれの属性の数との大きな隔たりとなるため、１６ビット命令長のプリデコードビット数の増加は高価なＩキャッシュ２０格納の大きな無駄遣いとなる。
【００１６】
一実施例によると、この例における未定義の１６ビット命令は、３２ビット命令をエミュレートするために変更される。命令が実際には１６ビット未定義命令であるという属性は、３２ビット命令と関連付けられた１６のプレコード符号化のうちの１つに符号化される。図３において、命令Ｄは１６ビット未定義命令である。命令ＤをＩキャッシュ２０に書きこむと、命令Ｄは、Ｄ０およびＤ１を備える３２ビット命令をエミュレートするために変更される。命令Ｄが実際は１６ビット未定義命令であるということを表示するプリデコードビットＰＤ０およびＰＤ１が書きこまれる。
【００１７】
一実施例においては、１６ビット未定義命令だけがパイプライン１２によって要求される場合、プリデコーダ３７は、命令Ｄを捨てて、プリデコードビットＰＤ０およびＰＤ１のみをＩキャッシュ２０に書きこむ。他の実施例においては、命令のビットフィールド内のデータが共通あるいはソフトウエアトラップを誘導(vector)するために役立つような場合、命令Ｄは、Ｉキャッシュ２０に書きこまれるプリデコードビットＰＤ０およびＰＤ１だけでなく、Ｄ０およびＤ１のいずれか一方もしくは双方に書き込まれる。さらに他の実施例においては、プリデコーダ３７は命令ＤをＤ０あるいはＤ１のうちのいずれかに書きこみ、また、プリデコードビットＰＤ０およびＰＤ１を書きこむだけでなく、追加の情報を他の１６ビットＩキャッシュ２０格納位置に書きこむ。いずれにしても、３２ビット命令をエミュレートし（そのため全プリデコードビットが読まれる）、命令が実際には１６ビット未定義命令であることを表示するのはプリデコードビットＰＤ０およびＰＤ１である。このようにプリデコーダ３７は基本サイズ命令と関連付けられたプリデコードビットを拡張することなく基本サイズ未定義命令を表示することができ、従って非能率的なメモリの使用を避けることができる。
【００１８】
図３に描かれる実施例において、命令ＥもＦもプリデコードされず、Ｉキャッシュ２０にロードもされない。ラインの命令の実際の長さがメモリ３６とＩキャッシュ２０との間で変更されるので、キャッシュラインの残りは対応するメモリスペース（例えばＥおよびＦの双方）に残りの命令の全てを含むことができない。プリデコーダ３７はキャッシュラインの残りを不使用あるいは無効と記録し、もしくは適切なビット位置に無効あるいは未定義プリデコードビットを単純に挿入する。正常な実行においては、プロセッサは、未定義命令が生じるとソフトウエアにトラップし、キャッシュラインは取りかえられる可能性がある。未定義命令により生じるトラップに対処するためにソフトウエア例外処理装置を使用することは、プロセッサ１０のようなプロセッサがシリコンあるいは他の半導体材料に固定されるときに意図されなかった命令を、ソフトウエアがエミュレートすることを可能にする。もし他のコードがキャッシュラインに分岐すると、不正確なプリデコードに遭遇し、および／または予期された命令を認識せず、キャッシュラインにリロードさせ、あるいは例外を生じる恐れがある。未定義命令は滅多に生じないと想定されるので、異なる長さの命令をエミュレートする変更された未定義命令が原因で破損したＩキャッシュラインの性能インパクトは大きな問題ではない。
【００１９】
上述した通り、ここに開示される方法は基本命令長の未定義命令に限定されない。一般的に、通常はプリデコードビットを介して表示されるが、関連する命令長のプリデコードビット符号化スペースが完全に定義されている命令属性については、属性は、異なる長さの命令をエミュレートするために命令を変更して異なる長さ命令の使用可能なプリデコードビット符号化を用いることによって表示される。例えば、先の例においては３２ビット命令と関連付けられている４つのプリデコードビットの全１６符号化が定義されているが、１６ビット命令と関連付けられている２つのプリデコードの４の符号化のうち３つ以下だけが定義されていると仮定する。この場合、３２ビット命令プリデコードビットにおいて定義されていない３２ビット命令の特定の属性は、１６ビット命令をエミュレートするために３２ビット命令を変更して１６ビット命令と関連付けられている２のプリデコードビットの使用可能なプリデコードビット符号化における関連属性を符号化することにより表示される。この場合、３２ビット命令ビットフィールドの半分は失われ、符号化されている属性は（そのように表示される唯一の性能ではないが、命令は未定義であるという事実のような）命令ビットフィールドに依存しないものであることが好ましい。
【００２０】
図４は、一実施例に従った、命令をプリデコーディングする方法を描写する。Ｉキャッシュ２０におけるミスがあると、メモリインターフェース３４はメモリ３６から少なくとも第１の命令を取り出す（ブロック５０）。プリデコーダ３７は第１の命令を検査して、第１の命令は未定義であるというような第１の命令の属性を識別する（ブロック５２）。プリデコーダ３７は、異なる長さの第２の命令のような、第２の命令をエミュレートするために、第１の命令を変更する（ブロック５４）。プリデコーダ３７は更に、第１の命令の属性を識別する、第２の命令のプリデコードビットを生成する（ブロック５６）。すなわち、第２の命令長と関連付けられたプリデコードビットの利用可能な符号化のうち１つが第１の命令の関係属性(relevant property)に割り当てられる。プリデコーダ３７は第２の命令と関連プリデコードビットとをＩキャッシュ２０に書きこむ（ブロック５８）。パイプライン１２がＩキャッシュ２０から第２の命令とそのプリデコードビットとを取り出すとき、デコードパイプステージのロジックは、第１の命令が未定義であるというような第１の命令の属性を識別するために、プリデコードビットを検査する（ブロック６０）。パイプライン１２はその後、例えばソフトウエアの未定義命令を対処するために例外を引き起こすというような、適切な行動をとる。
【００２１】
ここに記載された１つ以上の実施例によると、その命令長と関連付けられているプリデコードビット符号化スペースが完全に定義されているとき、プリデコーダ３７は命令の属性を表示する。異なる長さの命令をエミュレートするために命令を変更することによって、プリデコーダ３７は属性を表示するために異なる長さの命令と関連付けられたプリデコードビットの利用可能な符号化を使用する。より短い命令の属性がより長い命令のプリデコードビット符号化において表示されるときは、１以上の命令あるいは命令の部分はＩキャッシュラインから退去される。より長い命令の属性がより短い命令のプリデコードビット符号化において表示されるとき、命令ビットフィールドのいくつかは失われる。従って、ここに記載の命令属性表示技術は、命令が未定義であるというような（このようなケースに限定されないが）、例外を生じる命令属性を表示するために共通して使用される。
【００２２】
本発明は特定の特徴、態様および実施例に関してここで説明されてきたが、多くの変形、変更および他の実施例が本発明の広い範囲内で可能であることは明らかであり、従って、あらゆる変形、変更および実施例は本発明の範囲内にあるとみなされるべきである。本実施例は、従って、全ての態様において説明的なものであって限定的ではないと解釈されるべきであり、添付の請求項の意味および均等物の範囲内にあるあらゆる変更は、ここに包含されるよう意図される。
【図面の簡単な説明】
【００２３】
【図１】図１は、本発明のプロセッサの機能ブロックダイアグラム。
【図２】図２は、本発明のメモリから命令キャッシュへの可変長命令のマッピングを図示した機能ブロックダイアグラム。
【図３】図３は、本発明のメモリから命令キャッシュへの未定義命令のマッピングを図示した機能ブロックダイアグラム。
【図４】図４は、本発明の１の実施例による、命令をプリデコーディングする方法を示す図。
【図１】
2009535744.tif 000003
【図２】
2009535744.tif 000004
【図３】
2009535744.tif 000005
【図４】
2009535744.tif 000006
【国際調査報告】
2009535744.tif 000007
2009535744.tif 000008
2009535744.tif 000009