(57)【要約】可変長命令セットからの命令を実行するプロセッサでは、プレロード命令は、命令キャッシュラインに対応するデータブロックメモリから読み出し、データブロックにおいて可変長命令セットからの命令をプレデコードし、命令キャッシュの中へ命令およびプレデコード情報をロードする。命令実行部は、プレデコーダに第１有効命令のデータブロック内の位置を指示する。プレデコーダは、各命令の長さおよびその結果命令境界を連続的に決定する。第１有効命令の位置を識別する命令キャッシュラインオフセット指標が生成されてもよく、様々な方法におけるプレデコーダに提供されてもよい。
2010524088.tif 000002
【特許請求の範囲】
【請求項１】
命令キャッシュラインに対応するデータブロックへ、第１有効命令のオフセットを識別する命令キャッシュラインオフセット指標を設定し、
可変長命令セットからの少なくとも１つの命令を含むデータブロックをメモリから読み出し、前記命令キャッシュの中に前記命令をロードするプレロード命令を実行し、
前記命令キャッシュラインオフセット指標に応じて第１命令で始まる前記データブロックにおける前記命令を連続的にプレデコードすることを具備する命令キャッシュの中に可変長命令セットからの命令をプレロードする方法。
【請求項２】
命令長さ指標に基づいて前記データブロックにおいて連続する命令の命令境界を決定することをさらに具備する請求項１の方法。
【請求項３】
命令長さ指標は、命令操作コードのビットフィールドを具備する請求項２の方法。
【請求項４】
前記命令キャッシュラインオフセット指標は、前記プレロード命令のターゲットアドレスの複数のビットを具備する請求項１の方法。
【請求項５】
前記命令キャッシュラインオフセット指標は、ター
ゲットアドレスビット［４：１］を具備する請求項４の方法。
【請求項６】
前記命令キャッシュラインオフセット指標は、前記プレロード命令の前記操作コードにおいて１以上のビットを具備する請求項１の方法。
【請求項７】
命令キャッシュラインオフセット指標を設定することおよびプレロード命令を実行することは、異なる命令キャッシュラインオフセット指標を含むプレロード命令ごとに、複数のプレロード命令のうちの１つを実行することを具備とする請求項１の方法。
【請求項８】
前記複数のプレロード命令は、前記データブロックへの可能な命令オフセットごとに対応するプレロード命令を含む請求項７の方法。
【請求項９】
命令キャッシュラインオフセット指標を設定することは、前記プレロード命令を実行することより前にレジスタにおいて１以上のビットを設定することを具備する請求項１の方法。
【請求項１０】
前記命令キャッシュラインオフセット指標により指示されるような第１有効命令より前に前記データブロックにおいて任意のデータをプレデコードすることをさらに具備する請求項１の方法。
【請求項１１】
前記命令キャッシュへ少なくとも命令長さを指示するプレデコード情報および前記命令を書き込むことをさらに具備する請求項１の方法。
【請求項１２】
メモリインターフェースと、
可変長命令セットおよびプレデコード情報から命令を記憶する命令キャッシュと、
前記命令キャッシュの中にロードされるデータブロックにおいて第１有効命令の位置を識別する命令キャッシュラインオフセット指標を生成する命令実行部と、
前記命令キャッシュと前記メモリインターフェースとの間に置かれ、プレロード命令の実行時に前記命令キャッシュラインオフセット指標に応じて、第１有効命令で始まるデータブロックにおいて命令を連続的にプレデコードするプレデコーダと、を具備するプロセッサ。
【請求項１３】
前記命令実行部は、前記プレロード命令のターゲットアドレスの１以上のビットを設定することにより、前記命令キャッシュラインオフセット指標を生成する請求項１２のプロセッサ。
【請求項１４】
前記ターゲットアドレスは前記プレロード命令によって読み取られる汎用レジスタに書き込まれる請求項１３のプロセッサ。
【請求項１５】
前記命令実行部は、前記プレロード命令の前記操作コードにおける１以上のビットに応じて前記命令キャッシュラインオフセット指標を生成する請求項１２のプロセッサ。
【請求項１６】
前記命令実行部は、異なる命令キャッシュラインオフセット指標を特定するプレロード命令ごとに、複数のプレロード命令のうちの１つを実行する請求項１２のプロセッサ。
【請求項１７】
前記複数のプレロード命令は、前記データブロックへの可能な命令オフセットごとに対応するプレロード命令を含む請求項１６に記載のプロセッサ。
【請求項１８】
レジスタをさらに具備し、
前記命令実行部は、前記レジスタにおいて１以上の予め決定されたビットを設定することにより前記命令キャッシュラインオフセット指標を生成する請求項１２のプロセッサ。
【請求項１９】
前記命令キャッシュと前記メモリインターフェースとの間に置かれる第２キャッシュメモリをさらに具備し、
前記プレデコーダは前記命令キャッシュと前記第２キャッシュメモリとの間に置かれる請求項１２のプロセッサ。
【請求項２０】
前記プレデコーダは、命令キャッシュラインオフセット指標により指示される第１有効命令より前に前記データブロックにおいて任意のデータをプレデコードすることをさらに具備する請求項１２のプロセッサ。
【請求項２１】
可変長命令セットにおけるプレロード命令を少なくとも格納し、
前記命令はプロセッサに命令キャッシュへ複数の命令をプレロードさせ、
前記複数の命令は命令キャッシュラインオフセット指標により第１有効命令における先頭をプレデコードさせるコンピュータ読み取り可能な媒体。
【請求項２２】
前記命令キャッシュラインオフセット指標は、前記プレロード命令のターゲットアドレスの１以上のビットを具備する請求項２１のコンピュータ読み取り可能な媒体。
【請求項２３】
前記プレロード命令操作コードは、命令キャッシュラインオフセット指標ビットフィールドを含む請求項２１のコンピュータ読み取り可能な媒体。
【請求項２４】
前記命令キャッシュラインオフセット指標は、前記プレロード命令の実行より前にレジスタへ記憶される請求項２１のコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にプロセッサの分野に関し、特に可変長命令セットから命令キャッシュの中へ命令をプレロードし、正確に命令をプレデコードするシステム、方法およびソフトウェアに関する。
【背景技術】
【０００２】
マイクロプロセッサは、幅広い種類のアプリケーションの計算のタスクを行う。改善されたプロセッサ性能は、ソフトウェア拡張を通じて機能性を増加させ、および／またはより高速動作を可能にさせることが、ほとんどの場合好まれる。ＲＩＳＣ構造のような構造上の進歩および半導体技術での進歩の両方を利用することによって、多くの最新のプロセッサは、ＤＲＡＭとＳＤＲＡＭのようにメモリチップよりはるかに高いクロック速度で実行する。比較的低速なメモリアクセスの不利益を最小化するために、これらのプロセッサは、最近アクセスされたことのあるおよび／またはプロセッサが近い将来に（ソフトウェア経由で）アクセスすることを見込む命令およびデータのローカルコピーを記憶する高速のオンチップキャッシュメモリを備えた、階層的メモリ構造を利用する。
【０００３】
命令キャッシュへの見込んでいるロードの一例は、プレロード命令（例えば、ＡＲＭ命令ＰＬＩ）である。プレロード命令は、それらの実行の前に命令キャッシュの中へ命令をロードする。プログラマは、対象への既知または（サブルーチン呼出しのような）見込まれたブランチより少し先に、コードの中へプレロード命令を挿入してもよい。  
プレロード命令は、ブランチが実行する場合、対象に対する命令が即時実行用のキャッシュにおいて利用可能であるように、対象に対する命令を命令キャッシュの中へロードする。
【０００４】
ごく最近のプロセッサは、連続する命令が全体のプロセッサスループットを増加させるための実行においてオーバラップされる、パイプライン方式を採用する。パイプラインを通して円滑な実行を維持することは、高性能を実現するために重要である。ある既知のパイプライン最適化手法は、プレデコーディング命令である。命令がメモリから読み出され、部分的に復号されるように、命令が分析され、（プレデコード情報として知られる）命令に関するいくつかの情報は、関連する命令と共に命令キャッシュへ記憶される。命令がキャッシュからパイプラインの中へのちに取り出されるとき、プレデコード情報も取り出され、命令を完全に復号することに役立つ。  
プレデコード情報は例えば、ブランチおよび浮動小数点命令、またはパイプラインにおいて命令を実行するのに役立つ他の情報を識別してもよい。
【０００５】
いくつかの命令セットは、異なる長さを有する命令を含む。例えば、プロセッサは３２ビットの命令セットを有してもよく、加えてＪａｖａ（登録商標）バイトコードを実行する能力を含んでもよい。別の例として、ＡＲＭプロセッサ構造のいくつかのバージョンは、Ｔｈｕｍｂ−２として知られる命令セットから命令を実行する。Ｔｈｕｍｂ−２命令は長さ１６ビットまたは３２ビットかもしれない。  
一般に、コンパイラは、最もコンパクトな符号を実現するためにＴｈｕｍｂ−２命令を選択し、１６ビットおよび３２ビット命令は、Ｔｈｕｍｂ−２コードのセグメント内で任意の順に混ぜ合わされてもよい。その上、一般にメモリにおける命令の配列上に制約はない。
【０００６】
可変長命令セットプロセッサにおけるプレデコーダの１つの有用な機能は、命令キャッシュラインにおける各命令の長さを指示しおよび確認することである。すなわち、プレデコード情報は、例えば命令操作コードの検査によって決定されるかもしれない命令境界を識別してもよい。実行のためにパイプラインの中から命令を取り出す際に、この情報はパイプライン取り出しおよび復号段階を支援する。
【０００７】
可変長命令セットからの命令をプレロードし、命令境界を指示するために命令をプレデコードする際に直面する１つの問題は、命令がメモリにおいて必ずしも配列されないので、命令が命令キャッシュライン境界に沿って配列しないかもしれないということである。その結果として、メモリから読み出されたキャッシュラインサイズデータブロックにおける第１データ（例えば、ハーフワード）は、完全な命令（例えば、１６ビットの命令）または同じキャッシュライン（例えば３２ビット命令の最初の１６ビット）において連続する命令の一部かもしれず、そのどちらかはプレデコーダによって検出される。  
しかし、第１データは、データブロック（例えば、３２ビット命令の最後の１６ビット）より前に始まった命令の一部でもよいし、変数、即値データなどのような非命令データを具備してもよい。後の２つのケース（部分的な命令またはデータ）のどちらかでは、第１データは、完全な命令または命令の最初の部分として不正確にプレデコードされるかもしれない。
【０００８】
データブロックにおける長さおよびそれに従う他の命令の境界が連続して決定されるので、第１データを不正確にプレデコードすることは、データブロックにおける全ての命令を不正確にプレデコードし、命令キャッシュへその命令で書き込まれる不正確なプレデコード情報を引き起こす可能性がある。命令がパイプラインの中へキャッシュから続けて取り出され、プレデコード情報が誤っていると決定されるとき、キャッシュラインは破棄されなければならず、命令はメモリから再び取り出し、正しい命令境界を決定するためにプレデコードされる。それはプロセッサの性能および電力消費の両方に悪影響を与える。
【発明の概要】
【０００９】
ここに開示され要求される１以上の実施形態に従って、可変長命令セットから命令を実行するプロセッサにおいて、プリロード命令は命令キャッシュラインに対応するデータブロックをメモリから読み出し、データブロックにおいて命令をプリデコードし、命令キャッシュの中へプリデコード情報および命令をロードする。命令実行部は、プレデコーダに第１有効命令のデータブロック内の位置を指示する。プレデコーダは、連続的に各命令の長さおよびそれに従う命令境界を決定する。第１有効命令の位置を識別する命令キャッシュラインオフセット指標は生成され、様々な方法においてプレデコーダに提供されてもよい。
【００１０】
一実施形態は、命令キャッシュの中への可変長命令セットからの命令をプレロードする方法に関する。命令キャッシュラインに対応するデータブロックの中へ第１有効命令のオフセットを識別する命令キャッシュラインオフセット指標が設定される。可変長命令セットから少なくとも１つの命令を含むデータブロックをメモリから読み出し、命令キャッシュの中へ命令をロードするプレロード命令が実行される。命令キャッシュラインオフセット指標に応じて、データブロックにおける命令は第１命令での先頭から連続的にプリデコードされる。
【００１１】
別の実施形態はプロセッサに関する。プロセッサは、メモリインターフェース、および可変長命令セットおよびそれらに対応するプレデコード情報からの命令を記憶する命令キャッシュを含む。プロセッサはまた、命令キャッシュの中へロードされるデータブロックにおいて第１有効命令を識別する命令キャッシュラインオフセット指標を生成する命令実行部を含む。プロセッサは、命令キャッシュとメモリインターフェースとの間に置かれ、プレロード命令の実行時に命令キャッシュラインオフセット指標に応じて、第１有効命令で始まるデータブロックにおいて命令を連続的にプレデコードするプレデコーダを含む。
【００１２】
さらに別の実施形態は、可変長命令セットに少なくとも１つのプレロード命令を記憶するコンピュータ読み取り可能な媒体に関し、命令は、プロセッサに命令キャッシュの中へ命令をプレロードさせ、プレロードされた命令は第１有効命令における先頭をプレデコードさせる。
【図面の簡単な説明】
【００１３】
【図１】可変長命令セットからプレロードされた命令を正確にプレデコードするプロセッサの機能ブロック図。
【図２】３つの代表的なデータブロックにおける可変長命令セットからの命令の配列を示すブロック図。
【図３】可変長命令セットからの命令をプレロードすることの方法のフローチャート。
【発明を実施するための形態】
【００１４】
図１は、少なくとも１つの可変長命令セットからの命令を実行するプロセッサ１１０の機能ブロック図を示す。特に、プロセッサ１１０は、可変長命令セットからプレロードされた命令を正確にプレデコードする。プロセッサ１１０は、算術論理演算ユニット（ＡＬＵ）（図示せず）のような論理的なおよび計算の回路と同様に、パイプ段階において組織された複数のレジスタまたはラッチ１１６を具備しているパイプライン１１４を含む命令実行部１１２において命令を実行する。パイプラインは制御ロジック１１８に従って命令を実行する。示されるように、パイプライン１１４はスーパースカラ（a superscalar）設計でもよい。
【００１５】
汎用レジスタ（ＧＰＲ）ファイル１２０は、記憶階層のトップを具備するレジスタを提供する。一実施形態において、命令実行部は、ここでさらに説明されるように、第１命令が配置される命令キャッシュラインの中へオフセットを指示してもよい。命令実行部１１２はまた、Ｌ２キャッシュメモリ１３６または主メモリ１３８から取り出されたデータおよび命令の特性を追跡するＬ２処理ロジック１２４を含む。
【００１６】
パイプライン１１４は、命令側トランスレーションルックアサイドバッファ（ＩＴＬＢ）１２８により管理されたパーミッションおよびメモリアドレッシングで、命令キャッシュ１２６からの命令を取り出す。プレデコーダ１３０は、Ｌ２キャッシュ１３６（あるいは主メモリ１３８）から取り出された命令をプレデコードし、命令キャッシュ１２６の中へ命令およびプレデコード情報を置く。１以上の実施形態では、プレデコード情報は、命令キャッシュラインに命令の長さを含む。ここにより詳細に説明されるように、プレデコーダ１３０は、第１命令のキャッシュライン内の位置を識別する命令実行部１１２からの命令キャッシュラインオフセット指標（ＩＣＯＩ）に応じて命令の長さを正確に決定する。
【００１７】
データは、メイントランスレーションルックアサイドバッファ（ＴＬＢ）１３４によって管理されたパーミッションおよびメモリアドレッシングによって、データキャッシュ１３２からアクセスされる。様々な実施形態では、ＩＴＬＢ １２８は、ＴＬＢ １３４の一部のコピーを具備してもよい。その代わりに、ＩＴＬＢ １２８およびＴＬＢ １３４は統合されてもよい。同様に、プロセッサ１１０の様々な実施形態では、命令キャッシュ１２６およびデータキャッシュ１３２は一体化されてもよい。
【００１８】
命令キャッシュ１２６およびデータキャッシュ１３２におけるミスは、図１に示された実施形態において統合されたレベル２（Ｌ２）キャッシュメモリ１３６へアクセスを引き起こす。Ｌ２キャッシュ１３６におけるミスは、メモリインターフェース１４２の管理下で、システムバス１４０上のメイン（オフチップ）メモリ１３８にアクセスを引き起こす。
【００１９】
プロセッサ１１０は、周辺バス１５０を介して様々な周辺機器１４６、１４８へのアクセスを制御する、入出力（Ｉ／Ｏ）インタフェース１４４を含んでもよい。  
技術的に知られるように、プロセッサ１１０は、周辺の１４６および１４８によって読まれる磁気または光学の媒体、またはメモリ１３６のようなコンピュータ読み取り可能な媒体から読み出された命令を実行する。
【００２０】
当業者は、プロセッサ１１０は多数のバリエーションが可能であることを認識するだろう。例えば、プロセッサ１１０は、レベル３（Ｌ３）または追加キャッシュを含んでもよく、および／または分離Ｌ２キャッシュ１３６は、命令キャッシュ１２６およびデータキャッシュ１３２のそれぞれのために設けられてもよい。加えて、プロセッサ１１０に示された機能ブロックの１以上は、特定の実施形態から省略されてもよい。
【００２１】
プロセッサ１１０は、少なくとも１つの可変長命令セットからの命令を実行する。様々な実施形態では、プロセッサ１１０は、固定長命令セット（例えば、３２ビットのＡＲＭ命令セット）および１以上の可変長命令セット（例えば、３２ビットおよび１６ビットＴｈｕｍｂ−２の命令セット）の両方から、または２つ以上の可変長命令セットからの命令を実行してもよい。これらの実施形態では、現在のプロセッサ命令セットモードは、状態レジスタ１２２のようなレジスタにおける１以上のビットによって指示されてもよい。
【００２２】
別の実施形態では、プロセッサ１１０は、単一の可変長命令セットのみから命令を実行する。
【００２３】
プロセッサ１１０によって実行された可変長命令セットは、命令の実行に先立つ命令キャッシュ１２６の中へ命令をロードするための、少なくとも１つのプレロード命令を含む。
【００２４】
プレロード命令は、１以上の命令を含む命令キャッシュラインサイズのデータのブロックをＬ２キャッシュ１３６およびメモリ１３８から読み出す。データブロックは、命令長および他のプレデコード情報を決定するために、プレデコーダ１３０によってプレデコードされる。命令およびプレデコード情報はその後、命令キャッシュ１２６に書き込まれる。
【００２５】
図２は、可変長命令セットにおけるプレロード命令によってキャッシュラインの中へプレロードされたデータブロックにおけるいくつかの可能なデータおよび命令の分布を示す。図２に示された実施形態では、キャッシュラインは１６のハーフワードである。明確さのために、データブロックの半分より下位だけが詳細に示される。図２に示される実施形態におけるプロセッサ１１０は、１６ビットおよび３２ビット命令（例えば、Ｔｈｕｍｂー２）の両方を有する命令セットからの命令を実行する。キャッシュラインの中へプレロードされるべき第１仮想データブロック２０２は、３２ビット命令である命令Ａにより始まり、１６ビット命令ＢおよびＣ、３２ビット命令Ｄ、および１６ビット命令ＥおよびＦが続く。  
プレデコーダ１３０は、命令Ａに関連した命令長さ指標を検査し、それが３２ビットの命令であることを決定する。一実施形態では、命令長さ指標は命令操作コードのビットフィールドである。例えば、Ｔｈｕｍｂー２命令セットにおいて、ビット［１５：１１］が‘ｂ１１１０１、‘ｂ１１１１０、または‘ｂ１１１１１を持っている場合、その命令は長さ３２ビットである。任意の他の符号化は、１６ビット命令を指示する。
【００２６】
ハーフワード０を占有する命令が（ハーフワード０および１を占有する）３２ビットの命令であることは決定しているので、プレデコーダ１３０は、ハーフワード２でビットパターンを検査し、命令Ｂが長さ１６ビットであることを決定する。このように、プレデコーダ１３０は、各命令の長さおよびその結果次の命令の先頭位置を決定して、プレロードされたデータブロックを連続的に下がって作動する。他のプレデコード情報とともに命令の長さは、命令キャッシュ１２６の中に書き込まれる。命令Ａがデータブロック２０２の先頭に配列されたので、データブロック２０２は適切にプレデコードされる。
【００２７】
プレロード命令は、Ｌ２キャッシュ１３６またはメモリ１３８から、命令キャッシュラインのサイズと等しいデータ２０２、２０４、２０６の固定サイズブロックを読み出す。ほとんどの実装では、キャッシュラインサイズが２ｎバイトである場合、データブロック２０２、２０４、２０６は最下位のｎアドレスビットをマスクオフすること（ｍａｓｋｉｎｇ ｏｆｆ）によりメモリにおいて配列される。（ターゲット命令が、図２における命令Ａのように、データブロック２０２、２０４、２０６においてたまたま第１命令である場合を除いて）特定、個別の命令のターゲットアドレスを有するプレロード命令は、ターゲット命令で始まるメモリのブロックではなく、ターゲット命令を含む配列されたデータブロック２０２、２０４、２０６をメモリから読み出す。従って、プレロード命令によってメモリから読み出されたデータブロック２０２、２０４、２０６の第１データ（例えば、ハーフワード）は、必ずしも命令または命令の先頭ではない。
【００２８】
例えば、データブロック２０４はハーフワード０−３に対応する位置において非命令データを含む。このデータはどんなビットパターンを含んでもよいので、それは命令として誤ってプレデコードされるかもしれない。例えば、従来のプレデコーダは、ハーフワード０で１６ビット命令として、ハーフワード１−２で３２ビット命令として、およびハーフワード３−４で別の３２ビット命令としてデータを解釈するかもしれない。この場合、命令Ｇが入っているハーフワード位置に関するプレデコード情報は誤っている。
【００２９】
別の例として、データブロック２０６は、最初の１６ビットが別のデータブロックにある命令Ｊの後半から始まる。しかし、従来のプレデコーダは、ハーフワード０−１を占有する３２ビット命令として命令Ｊを解釈するかもしれず、その結果として命令Ｋをスキップするかもしれない。関連のある命令がパイプラインの中の命令キャッシュから後に取り出されるときに、データブロック２０４、２０６およびそれに対応する誤ったプレデコード情報が命令キャッシュに書き込まれる場合、命令は破棄されなければならず、正しいプレデコード情報を得るために再び取りだされなければならない。  
これは、パイプラインがＬ２キャッシュ１３６またはメモリ１３８アクセスを待ち受けるために失速しなければならないので、プロセッサの性能に悪影響を及ぼす。同じデータブロック２０４、２０６を２回、読み出してプレデコードしなければならないので、電力消費も増加する。
【００３０】
正しいプレデコードで可変長命令セットから命令のプレローディングを許可するために、命令実行部１１２は、第１有効命令の先頭または第１有効命令のデータブロック２０２、２０４、２０６内での位置を識別する命令キャッシュラインオフセット指標（ＩＣＯＩ）を生成する。命令実行部１１２は、プレロード命令を実行している間にプレデコーダ１３０へＩＣＯＩを提供する。ＩＣＯＩのビットサイズは、命令キャッシュラインのサイズおよび命令セットにおける最短命令に依存する。  
図２に示された実施形態では、例えば、最短命令は１６ビット、またはハーフワードであり、命令キャッシュラインは１６個のハーフワードを含む。従って、この実施形態におけるＩＣＯＩは４ビットを必要とする。一般に、ＩＣＯＩはｍビットを具備し、命令キャッシュ１２６のラインサイズは最短命令の２ｍ倍である。ＩＣＯＩは、様々な方法で生成され、プレデコーダ１３０に通信されてもよい。
【００３１】
一実施形態において、プレロード命令ターゲットアドレスの１以上の未使用アドレスビットは、ＩＣＯＩとして符号化される。プレロード命令（例えば、ＰＬＩ）は、オペランドとしてターゲット命令のアドレスを取る。ターゲット命令アドレスは、例えばタグ、セット番号およびキャッシュラインインデックスに分解されてもよい。  
例えば、３２ビット命令仮想アドレスＶＡ［３１：０］については、命令キャッシュ１２６のＣＡＭ構造において記憶されたタグと比較されるタグは、ＶＡ［３１：１１］を具備してもよい。ｐ方法セット連想キャッシュでは、タグが一致すれば、セット番号は戻ってきたｐ個の結果の中から選択する。セット番号はＶＡ［１０：５］を具備してもよい。インデックスＶＡ［４：０］は、キャッシュラインの個別のバイトに対処し、すなわち命令キャッシュ１２６のＲＡＭ構造において記憶されるデータである。データは、命令およびプレデコード情報を具備する。
【００３２】
一実施形態によれば、例えばＶＡ［４：０］であるキャッシュラインインデックスの全部またはいくつかは、命令キャッシュラインオフセット指標（ＩＣＯＩ）を符号化するために用いられる。図２に示された実施形態では、５つのインデックスビットＶＡ［４：０］のうちの４つだけがＩＣＯＩ用に必要である。一実施形態において、プレロードターゲット命令アドレスビットＶＡ［４：１］は、（例えば、プレデコードする動作を行うために、２つの異なる命令セット符号化の間で選択するためのように）別のフラグ用として空いているＶＡ［０］を残している、ＩＣＯＩを保持してもよい。もし命令セットが８ビット命令を含んでいれば、全キャッシュラインインデックスＶＡ［４：０］は、ＩＣＯＩを記憶することを要求されるだろう。
【００３３】
アドレスが決定され、関連するプレロード命令の実行に備えてコンパイラ指定のＧＰＲに書き込まれるとき、ＩＣＯＩは、プレロードターゲットアドレスのキャッシュラインインデックスの一部の中へ符号化される。プレロード命令が実行するとき、指定されたＧＰＲレジスタからターゲット命令アドレスを読む。  
ターゲットアドレスが命令キャッシュ１２６にヒットする場合、プレロード命令実行は完了する。ターゲットアドレスが命令キャッシュ１２６で外した場合、Ｌ２処理ロジック１２４のような命令実行部１１２内のロジックは、１以上のターゲット命令を含むデータブロック２０２、２０４、２０６のようなデータブロックを読み出すために、ミス処理を行い、Ｌ２キャッシュ１３６にアクセスし、必要ならば主メモリ１３８にアクセスする。データブロック２０２、２０４、２０６は、他の情報の中からブロック２０２、２０４、２０６における各有効命令の長さを決定するためにプレデコードされる。
【００３４】
命令を含んでいるデータ２０２、２０４、２０６のブロックがプレデコーダ１３０へロードされる場合、Ｌ２処理ロジック１２４はプレデコーダ１３０にＩＣＯＩを提示する。ＩＣＯＩに応じて、プレデコーダ１３０は、第１有効命令の先頭または第１有効命令の位置に対応するＩＣＯＩによって指定されたオフセットで始まる命令をプレデコードする。図２の実施形態では、ＩＣＯＩは、データブロック２０２に対して‘ｂ００００、データブロック２０４に対して‘ｂ０１００、およびデータブロック２０６に対して‘ｂ０００１であろう。
【００３５】
プレデコーダ１３０は、命令操作コードの検査によるような第１命令の長さ（および他のプレデコード情報）を決定し、第１命令の長さから第２命令の先頭を決定する。データブロック２０２、２０４、２０６における命令ごとの長さ（および他のプレデコード情報）が決定されるまで、プレデコーダ１３０はその後、第２命令の長さなどを決定する。プレデコーダ１３０はその後、正しいプレデコード情報に加えて、命令キャッシュ１２６へ命令を書き込む。一実施形態において、データが１以上の命令を含んでもよいかもしれないので、プレデコーダ１３０は、ＩＣＯＩによって指示されるように第１有効命令に先行するデータをさらに推論的にプレデコードする。
【００３６】
一実施形態において、命令キャッシュラインオフセット指標（ＩＣＯＩ）は、状態レジスタ１２２のようなレジスタにおいてビットフィールドを具備する。この実施形態では、ＩＣＯＩビットは、プレロード命令の実行より前に明示的に設定される。プレロード命令の実行に際して、プレデコーダ１３０は、状態レジスタ１２２または他のレジスタにおけるＩＣＯＩビットを検査し、指示された第１有効命令で始まるデータブロック２０２、２０４、２０６を正確にプレデコードする。命令およびプレデコード情報はその後、命令キャッシュ１２６に書き込まれる。
【００３７】
一実施形態において、命令キャッシュラインオフセット指標（ＩＣＯＩ）は、プレロード命令の操作コードにおいて１以上のビットを具備する。プレロード命令操作コードのビットフィールドは、ＩＣＯＩ用に定義されてもよく、コンパイラは、コードでのプログラマの命令または指令に従ってＩＣＯＩビットフィールドを設定してもよい。プレロード命令の実行に際して、ＩＣＯＩビットフィールドは、Ｌ２処理ロジック１２４によるようにプレデコーダ１３０に提示され、プレデコーダ１３０は、指示された第１有効命令で始まるデータブロック２０２、２０４、２０６をプレデコードする。命令およびプレデコード情報はその後、命令キャッシュ１２６に書き込まれる。
【００３８】
一実施形態において、可変長命令セットは、異なる命令キャッシュラインオフセット指標（ＩＣＯＩ）をそれぞれ指定する複数のプレロード命令を含む。例えば、図２に示される実施形態では、１６個の異なるプレロード命令が、データブロック２０２、２０４、２０６における命令をプレデコードするために、異なるＩＣＯＩをそれぞれ指定する。  
プログラマまたはコンパイラは、プレデコードされるべき第１命令のアドレスおよび既知のメモリ配列に基づいて、プレロードされたデータブロック２０２、２０４、２０６の中へ既知のオフセットのための適切なプレロード命令を指定してもよい。
【００３９】
当業者は、上述された実施形態が相互排他的ではないことを認識するだろう。例えば、特定の実装において、操作コードにおいてＩＣＯＩビットフィールドを有するプレロード命令は、状態レジスタ１２２のようなレジスタの中へＩＣＯＩをラッチすることにより、またはプレロードターゲットアドレスにおける１以上の未使用のアドレスビットの中へＩＣＯＩを代入することにより、プレデコーダ１３０へＩＣＯＩを提示してもよい。一般に、本開示の教示を仮定すると、当業者は、プレデコーダ１３０に第１有効命令が配置されるデータブロック２０２、２０４、２０６の中へオフセットを通信するための最良の解決法を究明してもよい。
【００４０】
図３は、命令をプレロードする方法３００を示す。方法は、命令キャッシュラインオフセット指標（ＩＣＯＩ）を設定することにより始まる（ブロック３０２）。  
ＩＣＯＩは、キャッシュラインまたはデータブロック２０２、２０４、２０６内の第１有効命令の位置を識別する。様々な実施形態では、ＩＣＯＩは、プレロード命令ターゲットアドレスを変更すること、状態レジスタ１２２のようなレジスタにおいてＩＣＯＩビットを設定すること、プレロード命令操作コードにおいてＩＣＯＩビットフィールドを設定することにより設定されてもよい。プレロード命令は実行される（ブロック３０４）。プレロード命令は、Ｌ２キャッシュ１３６またはメモリ１３８から少なくとも１つのターゲット命令を含むデータブロック２０２、２０４、２０６を読み出し、プレデコーダ１３０にデータブロック２０２、２０４、２０６を提供するために作用する。  
ＩＣＯＩに応じて、プレデコーダ１３０は、データブロック２０２、２０４、２０６に第１有効命令を探し（ブロック３０６）、第１命令の長さを決定する（ブロック３０８）。
【００４１】
データブロック２０２、２０４、２０６の終わりに達していない場合（ブロック３１０）、プレデコーダ１３０は別の命令の先頭を決定するためにブロック３０８において決定された命令長さを用い（ブロック３１２）、その長さを決定する別の命令を検査する（ブロック３０８）。データブロック２０２、２０４、２０６の終わりに達するまで、このプロセスは継続する（ブロック３１０）。
【００４２】
一実施形態において、プレデコーダ１３０は、第１命令に先行するデータをプレデコードしてもよい（ブロック３１４）。データがランダムデータ（データブロック２０４に示されたように）または命令の継続（データブロック２０６に示されたように）である場合、生成されたプレデコード情報はおそらく誤っているだろう。  
しかし、第１命令に先行するデータがデータブロック２０２、２０４、２０６の先頭と合わされた有効命令を具備する場合、プレデコード情報は正しだろうし、パイプライン１１４を支援するかもしれない。他の実施形態では、第１命令に先行するデータはプレデコードされない。
【００４３】
プレデコーダ１３０は、命令キャッシュ１２６に命令およびプレデコード情報を書き込む（ブロック３１６）。当業者は、ある方法ステップが図３に示された順序とは異なる順序で行われてもよいことを即座に認識するだろう。例えば、第１命令より前にあるデータは、有効命令をプレデコードすることより前にプレデコードされてもよい（ブロック３１４）。  
加えて、プレデコーダ１３０は、データブロック２０２、２０４、２０６における各命令がプレデコードされるように、命令キャッシュ１２６へ命令およびプレデコード情報を徐々に書き込んでもよい。
【００４４】
ここで説明され主張された１以上の実施形態に従って、命令または命令の先頭が命令キャッシュラインの先頭とそろわないとき、プロセッサ１１０は、可変長命令セットから命令キャッシュ１２６の中へ命令をプレロードし、命令を正確にプレデコードしてもよい。これは、不正確にプレデコードされた命令が命令キャッシュ１２６から取り出され、かつ、破棄され、再び取り出され、再びプレデコードされなければならないときに被る性能および電力消費の劣化を回避するかもしれない。第１有効命令を識別する命令キャッシュラインオフセット指標（ＩＣＯＩ）のプレデコーダ１３０への通信は、様々な方法で実装されてもよい。
【００４５】
本発明は特定の特徴、態様およびそれらの実施形態に関してここに記述されているが、多数のバリエーション、修正および他の実施形態が本発明の広い範囲内で可能であることは明白であり、従って、全てのバリエーション、修正および実施形態はこの発明の範囲内として見なされる。  
従って、本実施形態は、実例となりおよび非制限的な全ての態様において理解されることになり、添付された特許請求の範囲の等しい範囲および意味内に生じる全ての変更は、そこに包含されるように意図される。
【図１】
2010524088.tif 000003
【図２】
2010524088.tif 000004
【図３】
2010524088.tif 000005
【国際調査報告】
2010524088.tif 000006
2010524088.tif 000007