【誤訳訂正書】
【提出日】平成23年2月21日(2011.2.21)
【誤訳訂正１】
【訂正対象書類名】特許請求の範囲
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【特許請求の範囲】
【請求項１】
命令実行パイプラインにおいて、第１のメモリアクセスを実行するメモリアクセス命令を処理する方法であって、下記を具備する方法：
前記メモリアクセス命令のためにデータミスアラインメントを予測すること、及び、
前記メモリアクセス命令のための実効アドレス生成に先立って、前記予測に応答して前記パイプラインにおいて少なくとも１つのマイクロ操作を生成すること、前記マイクロ操作はミスアラインドデータに対する第２のメモリアクセスを実行する。
【請求項２】
前記パイプラインにおいて少なくとも１つのマイクロ操作を生成することは、命令復号パイプステージにおいて前記マイクロ操作を生成することを具備する、請求項１に記載の方法。
【請求項３】
少なくとも１つのマイクロ操作を生成することは、前記マイクロ操作にパイプライン制御資源を割り当てることを具備する、請求項１に記載の方法。
【請求項４】
前記パイプライン制御資源は、命令トラッキングＦＩＦＯにおいて少なくとも１つのエントリを含む、請求項３に記載の方法。
【請求項５】
前記パイプライン制御資源は、キャッシュミスキュー中に利用可能なスロットを含む、請求項３に記載の方法。
【請求項６】
前記メモリアクセス命令のためにデータミスアラインメントを予測することは、ミスアラインメント予測ビットが設定されている間、全メモリアクセス命令がミスアラインドとして予測されるように、制御レジスタにおいて前記ビットを設定することを具備する、請求項１に記載の方法。
【請求項７】
前記メモリアクセス命令のためにデータミスアラインメントを予測することは、１以上の属性が設定される場合に、対応するページの全メモリアクセス命令がミスアラインドとして予測されるように、前記メモリアクセス命令ページテーブルエントリに前記属性を設定することを具備する、請求項１に記載の方法。
【請求項８】
前記メモリアクセス命令のためにデータミスアラインメントを予測することは、スタックポインタがミスアラインドであるときデータミスアラインメントを予測すること、及び前記スタックポインタがアラインドであるときデータアラインメントを予測すること、を具備する、請求項１に記載の方法。
【請求項９】
前記メモリアクセス命令のためにデータミスアラインメントを予測することは、アラインメントヒストリーを保存すること、及び前記アラインメントヒストリーに応答してミスアラインメントを予測すること、を具備する、請求項１に記載の方法。
【請求項１０】
アラインメントヒストリーを保存することは、前記メモリアクセス命令に関連したアラインメントヒストリーを保存することを具備する、請求項９に記載の方法。
【請求項１１】
前記アラインメントヒストリーは前記メモリアクセス命令に関連した複数の命令アドレスビットによってインデックスされる、請求項１０に記載の方法。
【請求項１２】
前記アラインメントヒストリーは最も新しい前記メモリアクセス命令のアラインメントを指示するフラッグを具備する、請求項１１に記載の方法。
【請求項１３】
前記アラインメントヒストリーを保存することは、各前記メモリアクセス命令のアラインメントに応答して二重モード飽和カウンタをインクリメントもしくはデクリメントすることを具備し、
前記アラインメントヒストリーに応答してデータミスアラインメントを予測することは、前記二重モード飽和カウンタのＭＳＢを出力することを具備する、請求項１１に記載の方法。
【請求項１４】
前記アラインメントヒストリーを保存することは、各前記メモリアクセス命令のアラインメントに応答して二重モード飽和カウンタをインクリメントもしくはデクリメントすることを具備し、
前記アラインメントヒストリーに応答してデータミスアラインメントを予測することは、前記カウンタの複数のビットの符号化に基づいてデータミスアラインメント予測を出力することを具備する、請求項１１に記載の方法。
【請求項１５】
前記アラインメントヒストリーを保存することは、所定数の最も新しい前記メモリアクセス命令に関するアラインメントの複数の指示を保存することを具備し、
前記アラインメントヒストリーに応答してデータミスアラインメントを予測することは、複数の二重モードカウンタのテーブルをインデックスするために前記複数の指示を用いること、及び前記インデックスされた二重モードカウンタのＭＳＢを出力すること、を具備する、請求項１４に記載の方法。
【請求項１６】
アラインメントヒストリーを保存することは、全メモリアクセス命令と関連したアラインメントヒストリーを保存することを具備し、
前記アラインメントヒストリーに応答してミスアラインメントを予測することは、複数の二重モードカウンタのテーブルをインデックスするために前記アラインメントヒストリーを用いること、及び前記インデックスされた二重モードカウンタのＭＳＢを出力すること、を具備する、請求項９に記載の方法。
【請求項１７】
前記アラインメントヒストリーを用いて複数の二重モードカウンタの前記テーブルをインデックスすることは、前記メモリアクセス命令と関連づけられた複数のアドレスビットと連結された、請求項１６に記載の方法。
【請求項１８】
前記アラインメントヒストリーを用いて複数の二重モードカウンタの前記テーブルをインデックスすることは、前記メモリアクセス命令と関連づけられた複数のアドレスビットと排他的論理和演算された、請求項１６に記載の方法。
【請求項１９】
アラインメントヒストリーを保存することは：
各前記メモリアクセス命令の前記アラインメントに応答して独立の二重飽和カウンタをインクリメントあるいはデクリメントすること、及び、
全メモリアクセス命令と関連した包括的アラインメントヒストリーを保存すること、を具備し；
前記アラインメントヒストリーに応答してミスアラインメントを予測することは：
前記メモリアクセス命令と関連した前記二重モード飽和カウンタの前記ＭＳＢを具備する第１のプレディクタを生成すること、
前記メモリアクセス命令と関連した複数のアドレスビットと排他的論理和演算された前記包括的アラインメントヒストリーによってインデックスされたテーブルにおいて二重モードカウンタの前記ＭＳＢを具備する第２のプレディクタを生成すること、及び、
選択二重モード飽和カウンタの前記ＭＳＢを出力すること、ここにおいて前記選択二重モード飽和カウンタは、前記第１のプレディクタおよび前記第２のプレディクタが一致しないとき、前記第１及び第２のプレディクタのうち正確であったものに有利な方向に、更新される、
を具備する請求項９に記載の方法。
【請求項２０】
過去のアラインメント経験を保存することは、過去の複数のメモリアクセス命令のアラインメントの統計的平均を維持することを具備する、請求項９に記載の方法。
【請求項２１】
過去のアラインメント経験を保存することは、所定数の最も新しいメモリアクセス命令のアラインメントのローリング平均を維持することを具備する、請求項９に記載の方法。
【請求項２２】
過去のアラインメント経験を保存することは、アラインドと予測された複数のミスアラインドメモリアクセスのミスアラインメントキャッシュを維持することを具備し、前記アラインメントヒストリーに応答してミスアラインメントを予測することは前記ミスアラインメントキャッシュにおいてヒットすることを具備する、請求項９に記載の方法。
【請求項２３】
前記アラインメントヒストリーに応答してミスアラインメントを予測することは、前記メモリアクセス命令の復号に先立って前記ミスアラインメントキャッシュをインデックスすることを更に具備する、請求項２２に記載の方法。
【請求項２４】
ミスアラインドと予測された複数のアラインドメモリアクセスを前記キャッシュから取り除くことを更に具備する、請求項２２に記載の方法。
【請求項２５】
前記メモリアクセス命令のためにデータミスアラインメントを予測することは、前記メモリアクセス命令におけるフラッグに応答してデータミスアラインメントを予測することを具備する、請求項１に記載の方法。
【請求項２６】
前記メモリアクセス命令のためにデータミスアラインメントを予測することは、可能性のあるミスアラインドメモリアクセス命令を具備する前記メモリアクセス命令に応答してデータミスアラインメントを予測することを具備する、請求項１に記載の方法。
【請求項２７】
複数のパイプステージを具備する命令実行パイプラインと；
メモリアクセス命令がミスアラインドデータにアクセスするであろうという予測を生成するミスアラインメントプレディクタと；
前記メモリアクセス命令のために実効アドレスを生成することに先立って、追加のメモリアクセスを実行するために、前記予測に応答して、前記パイプラインにおいて追加のマイクロ操作を生成する制御論理とを具備する、パイプラインされたプロセッサ。
【請求項２８】
前記追加のマイクロ操作は命令復号パイプステージにおいて生成される、請求項２７に記載のプロセッサ。
【請求項２９】
前記マイクロ操作は少なくとも１つの前記パイプステージを占有する、請求項２７に記載のプロセッサ。
【請求項３０】
前記ミスアラインメントプレディクタは前記メモリアクセス命令アラインメントヒストリーを保存するメモリを含む、請求項２７に記載のプロセッサ。
【請求項３１】
命令実行ＦＩＦＯを更に具備し、前記制御論理は前記マイクロ操作に対応する前記命令実行ＦＩＦＯにおいてエントリを生成する、請求項２７に記載のプロセッサ。
【誤訳訂正２】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【発明の名称】非アラインドメモリアクセス予測
【技術分野】
【０００１】
本発明は一般的にはプロセッサの分野に関係し、特にパイプラインされた(pipelined)プロセッサにおける非アラインドメモリアクセスを予測することに関係する。
【背景技術】
【０００２】
携帯型電子機器は一般化してきている。携帯型電子機器における２つの動向は、向上した機能性と減少したサイズである。向上した機能性はより高速でより強力なプロセッサによって提供される向上した計算力によって促進される。
【０００３】
高度装備および高度機能性の提供に加えて、携帯型電子機器それ自体がサイズ及び重量の縮小を続けている。この縮小傾向の１つの影響は、その機器内のプロセッサおよび装置のその他の電子素子に電力を供給するために使用されるバッテリのサイズ縮小である。バッテリ技術における向上がその問題を部分的に相殺する一方で、バッテリのサイズ縮小は全ての携帯型電子機器電子装置に厳しい電力予算を課す。携帯型電子機器の電力予算のかなりの部分はプロセッサによって消費される電力である。
【０００４】
このように、性能を向上し、電力消費を減少させるプロセッサの改良は携帯型電子機器のような多くの用途にとって望ましい。一般に、現代のプロセッサは、夫々がマルチプルな(multiple)実行工程を有する逐次命令が実行中に重なりあう、パイプラインされたアーキテクチャを用いる。最高性能のために、それらの命令はパイプライン中を連続して流れなければならない。命令がパイプラインからフラッシュ(flush)され、その後に再始動される状況は、性能及び電力消費の双方に有害な影響を及ぼす可能性がある。
【０００５】
命令ステータス及びトラッキング(tracking)のキューロケーションのような、いくつかのパイプライン資源は、命令がパイプラインに入ると割り当てられる。１つの命令が元々割り当てられている資源より多くの資源を要求していることが、パイプラインにおいて後から発見されると、次の命令は、それらを必要とする命令に、これらの資源が再度割当られることを可能にするためにフラッシュされる必要がある。
【０００６】
メモリからあるいはメモリにミスアラインド(misaligned)データをロードあるいは保存するメモリアクセス命令は、それに元々割り当てられていたより多くのパイプライン資源を必要とする可能性のある命令の一例であり、それはパイプラインの奥深くにいたるまで分からない。ミスアラインドデータは、メモリに保存されているので、１ワードもしくは半ワード境界のような所定のメモリ境界を横切る(cross)データである。メモリが論理的に構成され、アドレスされ(addressed)、そしてメモリバスに物理的に結合される方法が原因で、メモリ境界を横切るデータは一般に、単一サイクルで読み書きされることができない。むしろ、境界の１つの側のデータを読むあるいは書くための１つと、もう一つは残りのデータを読むあるいは書くための別の一つの２つの連続するバスサイクルが必要とされる可能性がある。
【０００７】
非アラインドデータへのメモリアクセス命令、すなわちロードあるいは保存命令は、その非アラインドデータによって要求される追加のメモリアクセスを実行するために、パイプラインにおいて追加の命令工程、すなわちマイクロ操作を生成しなくてはならない。しかし、データのアラインメント(alignment)は、パイプラインの奥深くでしか分からない可能性のあるデータサイズ及びメモリアクセスの実効アドレスが実行段階において分かるまで決定されることができない。実効アドレスが生成されてデータのミスアラインメントが発見される時までに、第２のメモリアクセスを実行するためのマイクロ操作を生成するために利用可能なパイプライン制御資源は不充分である。このようなミスアラインメントの場合、パイプラインはそのような資源を解放するために、少なくとも全ての次の命令からフラッシュされなくてはならない。フラッシュされた命令はその後パイプラインにおいて再フェッチされて再実行されなくてはならず、プロセッサ性能を劣化させ、電力を無駄にする。
【発明の開示】
【０００８】
［発明の概要］
メモリアクセス命令に関するデータミスアラインメントは、命令の実効アドレス生成に先立って、パイプラインにおいて早期に予測される。第２のマイクロ操作を生成するためにパイプライン資源は割り当てられてもよく、そしてパイプラインは制御されてもよい。第２のマイクロ操作はミスアラインドデータによって要求される第２のメモリアクセスサイクルを実行するために使用される。
【０００９】
本発明は、１実施例において、命令実行パイプラインにおけるメモリアクセス命令を処理する方法に関するものである。メモリアクセス命令のためにミスアラインメントが予測され、メモリアクセス命令のための実効アドレス生成に先立って少なくとも１つのマイクロ操作が予測に応答してパイプラインにおいて生成され、前記マイクロ操作はミスアラインドデータに対する第２のメモリアクセスを実行する。
【００１０】
他の実施例において、本発明はパイプラインされたプロセッサに関する。プロセッサは、複数のパイプステージを具備する命令実行パイプラインと、メモリアクセス命令はミスアラインドデータにアクセスするであろうという予測を生成するミスアラインメントプレディクタ(predictor)とを含む。プロセッサは更に、メモリアクセス命令のための実効アドレスの生成に先立って、予測に応答してメモリアクセス命令のためにパイプラインにおいて追加のマイクロ操作を生成する制御論理を含む。
【００１１】
［発明の詳細な説明］
パイプラインすること(pipelining)は、マルチプルな命令が実行中に同時に重なり合わされるプロセッサ実施技術である。典型的アーキテクチャにおける各命令は、フェッチ、復号、１以上の実行工程、メモリアクセスおよびライトバック(Write-Back)のような複数の実行工程において典型的に実行される。プロセッサパイプラインは複数の「パイプステージ」を具備する。一般に論理と記憶領域とを具備する各パイプステージは命令の実行工程あるいは実行工程の一部を完全に行う。パイプステージは互いに結合してパイプラインを形成する。命令はパイプラインに入って、パイプステージにおいて連続的に処理される。追加の命令は、前の命令が実行を完了する前にパイプラインに入って、このようにマルチプルな命令は任意の与えられた時間にそのパイプライン内で処理されることができる。逐次命令ストリーム中の複数の命令の内の並行性(parallelism)を活用するこの能力は改良されたプロセッサ性能に非常に貢献する。理想的条件下で、および１サイクルで各パイプステージを完了するプロセッサにおいて、パイプラインを満たすという短時間の初期プロセスに続いて、命令はサイクル毎に実行を完了することができる。
【００１２】
このような理想的条件は、複数の命令間のデータ依存性（データハザード）や、複数のブランチ(branches)のような制御依存性（コントロールハザード）、プロセッサ資源割当衝突（構造ハザード）、割込み、キャッシュミスなどを含む様々な要因が原因で、実際には滅多に実現されない。加えて、いくつかの命令は１以上のパイプステージを介して１以上のパス(pass)を必要とする。この場合、プロセッサはその命令のためのマルチプルなマイクロ操作を生成する。ここにおいて用いられるように、１つのマイクロ操作は一時に１つのパイプステージを占領する論理エンティティであり、パイプライン中を流れる。理想的には、大部分の命令が（１サイクルごとに１命令の目標に近づくために）パイプライン中に単一のマイクロ操作を具備する。しかし、命令は２以上のマイクロ操作を具備してもよく、あるいは２以上に分割されてもよく、その各々はパイプライン中を逐次流れる。
【００１３】
構造的パイプラインハザードの１形態は、ミスアラインドメモリアクセスから生じる。多くのメモリアクセス命令は実行ステージ期間中に、実効メモリアドレス、すなわちデータがロードされるか、あるいはデータが保存されるアドレス、を計算する。しかし、プロセッサ資源、特にパイプステージを命令に割り当ててパイプラインを介して命令を追跡する(track)パイプライン制御資源は、復号ステージ期間中にロード又は保存命令に割り当てられる。ワード、半ワード(half-word)、あるいは他の所定のアドレス境界でアラインされたメモリアドレスの通常の場合、ロードあるいは保存操作は、（データがメモリから検索されている(retrieved)あいだにパイプラインが一時停止される可能性があるが、）単一のパイプステージにおいて実行されてもよい。
【００１４】
メモリアクセス命令が所定のアドレス境界を横切るデータに関するものである場合、２つのロードあるいは保存操作が要求され、パイプライン中の２つのマイクロ操作が実行することを要求する。しかし、最もあり得る一つのマイクロ操作だけが復号ステージにおいてロードあるいは保存に割り当てられた。パイプラインの実行ステージにおいて新たなマイクロ操作を生成する必要性は問題をはらむ。パイプライン資源が完全に割り当てられる場合において、新たなマイクロ操作の必要性は、必要なパイプライン制御資源を解放するためにパイプラインから全ての次の命令がフラッシュされることを要求する例外を発生させるであろう。
【００１５】
図１はプロセッサ１０の機能的ブロック図を示している。プロセッサ１０は、命令実行ＦＩＦＯ１５を含むことができる制御論理１４に従って、命令実行パイプライン１２において命令を実行する。パイプラインはパイプステージにおいて編成された多様なレジスタまたはラッチ１６と、１以上の演算論理ユニット（ＡＬＵ）１８とを含む。汎用レジスタ（ＧＰＲ）ファイル２０はメモリヒエラルキーの頂点を有するレジスタを備える。パイプラインは、命令サイド変換ルックアサイドバッファ(Instruction-side Translation Lookaside Buffer)（ＩＴＬＢ）２４によって管理されるメモリアドレシング(addressing)と許可を用いて、命令キャッシュ２２から命令を取り出す。データは、主変換ルックアサイドバッファ（ＴＬＢ）２８によって管理されるメモリアドレシングと許可を用いてデータキャッシュ２６からアクセスされる。様々な実施例において、ＩＴＬＢはＴＬＢの一部のコピーを具備してもよい。その代わり、ＩＴＬＢとＴＬＢとは統合されていてもよい。同様に、プロセッサ１０の様々な実施例において、Ｉキャッシュ２２とＤキャッシュ２６は統合されてもよく、すなわち一体化されていてもよい。Ｉキャッシュ２２および／またはＤキャッシュ２６におけるミスは、キャッシュミス処理キュー２９を含むことができる、メモリインターフェース３０の制御下で、主（オフチップ）メモリ３２へのアクセスを発生させる。プロセッサ１０は、様々な周辺機器３６へのアクセスを制御する入出力（Ｉ／Ｏ）インターフェース３４を含んでもよい。当業者は、プロセッサ１０の数多くの変形が可能であることを認識するであろう。例えば、プロセッサ１０はＩおよびＤキャッシュのいずれか一方あるいは両方のセカンド(second)レベル（Ｌ２）キャッシュを含んでもよい。加えて、プロセッサ１０の中に示されている機能的ブロックのうちの１以上は、特定の実施例から除去されることができる。
【００１６】
下の表１は代表的パイプライン操作のダイアグラムを示している。代表的アーキテクチャの命令は６工程で実行する：
ＩＦ−命令フェッチ
ＩＤ−命令復号
ＥＸ１−実行（メモリアクセス命令のフェッチアドレスオペランド）
ＥＸ２−実行（メモリアクセス命令の実効アドレス演算）
ＭＥＭ−メモリアクセス
ＷＢ−ライトバック
【表１】
2008530714.tif 000001
【００１７】
各パイプステージが１サイクルで実行し、且つクロック６〜１０からのパイプラインの機能停止(stall)、ハザード、あるいは割込みがない場合、１つの命令が各サイクルにおいて完了し、その結果のライトバックを実行する。クロックサイクル１〜４は、例えばリセット、コンテキスト(context)スイッチ、割込みあるいはパイプラインのその他のフラッシュに続いて実行される、パイプラインを満たす初期化工程を表す。更なる命令はｉ＋４番目のものに続くので、１サイクルごとに１命令の性能は理想的な場合に無期限に続く。表１のパイプライン構造は見本に過ぎない。任意の与えられたプロセッサ実施において、パイプラインは任意の命令工程について任意の数のパイプステージを含むことができる。
【００１８】
ロード（ＬＤ）および保存（ＳＴ）命令はそれぞれデータの読取りおよび書込みを行うためにメモリにアクセスする。メモリは一時に所定量のデータに同時にアクセスするよう編成されている。図２は、プロセッサ１０とバス３１とメモリ３２とを含む、電子機器の１つのメモリ構造のブロック図である。この例において、バス３１は３２ビット幅であり、（例えば、プロセッサあるいはオフチップＲＡＭにキャッシュメモリを有することのできる）メモリ３２はワード（３２ビット）境界でアラインされる。当業者に容易に明らかになるように、多数の異なるバス及びメモリアーキテクチャが、対応する異なるデータアラインメント境界を用いて、実施されることができる。
【００１９】
非アラインドメモリアクセスの一例として、図２は、０ｘ０Ａの実効開始バイトアドレス及び３バイトのサイズフィールドを有するＬＤ命令によって読取られるメモリを示している。ワードアラインドメモリ３２に関して、このデータは１つのバスサイクルでメモリから読取られることができない。むしろ、プロセッサ１０は最初に（バイト０ｘ０８及０ｘ０９をマスキング(masking out)する）０ｘ０８で始まる全ワードを読取り、その後（バイト０ｘ０Ｄから０ｘ０Ｆをマスキングする）０ｘ０Ｃで始まる全ワードを読取らなければならない。ダブルワードメモリアラインメント及び６４ビットバスを備えるシステムにおいて、このデータは１サイクル内に読取られることができる。しかし、０ｘ０７で始まる３バイトデータは不可能である。一般的に、リアルワード(real-world)バス３１及びメモリ３２構成は非アラインドメモリアクセスの問題を引き起こす可能性がある。
【００２０】
非アラインドデータは２つのバスサイクルを必要とするため、（ここにおいて「非アラインドメモリ命令」と呼ばれている）非アラインドデータへ向けられたメモリアクセス命令は、実行ステージにおいて２つのマイクロ操作を生じさせることになる。例えば、表１のｉ＋３番目の命令が非アラインドメモリアクセス命令であったなら、パイプラインは下記表２に示されているように実行する。  
【表２】
2008530714.tif 000002
【００２１】
メモリアクセス命令ｉ＋３のための実効アドレスはＥＸ２ステージ期間中にクロックサイクル７において決定される。実効メモリアクセスが非アラインドであり、すなわち所定のメモリ境界を横切るので、単一のバスサイクルでアクセスされることができないと、プロセッサ制御論理が決定できるのはこのポイントにおいてのみである。十分な資源が利用可能であるならば、プロセッサは（ｉ＋３）2と表されている、メモリアクセス命令のための追加のマイクロ操作（表２の「ｇｅｎ  μ―ｏｐ」）を生成する。最初に割り当てられたマイクロ操作および新たなマイクロ操作はその後、残りのパイプライン中を逐次進行する。
【００２２】
ＥＸ２で第１のメモリアクセスのアドレスを計算した元のマイクロ操作はその後、ＭＥＭにおいてアドレスされたデータの第１部分にアクセスし、ＷＢにおいてデータを書込む。新たに生成されたマイクロ操作はクロックサイクル８のＥＸ２において（例えば、１ワードオフセットを追加することによって）第２メモリアクセスのアドレスを計算し、その後、ＭＥＭにおいてアドレスされたデータの第２部分にアクセスしＷＢにおいてデータを書込む。
【００２３】
命令ｉ＋３に関するミスアラインドデータによって必要とされる追加のマイクロ操作により、命令ｉ＋４はクロックサイクル８において機能停止する。パイプラインにおいてこの機能停止を実施するために、ＥＸ１ラッチへのクロックはゲートされ(gated)なければならず、ＥＸ１ラッチへの出力はＥＸ１ラッチへの入力においてマルチプレクサにリサイクルされ(recycled)、あるいは、他の何らかのメカニズム(mechanism)はクロックサイクル７及び８の両方を通じてＥＸ１コンテンツを保持するために使用されなければならない。同様に、後に続く命令ｉ＋５はパイプライン全体においてＤＣＤラッチなどで機能停止する。特に機能停止の必要性がパイプラインの終わりの方でしか発見されないと、この機能停止制御を実施することにより設計問題(challenge)が生じる。更に、ＥＸ２のメモリアクセス命令とその前のパイプステージの他の命令との両者の、パイプステージを「リサイクルする」必要性は、機械サイクル時間を増加することにより性能を潜在的に低下させながら、１以上のクリティカルパス(critical paths)上にマルチプレクサ選択遅延を追加する。パイプライン機能停止を引き起こすことが出来るイベントを最小化することにより、性能は改善される。
【００２４】
ミスアラインドメモリアクセスはまた、命令パイプライン１２の一部の機能的ブロック図である、図３を参照してより詳しく説明される。パイプラインにおいて、ＬＤ命令は命令キャッシュ２２からフェッチされ、ＩＦラッチ４０にロードされる。命令は復号論理４２によって復号される。１実施例において、ＬＤは、第１のレジスタｒ１に位置するベースアドレスを、第２のレジスタｒ２に位置するオフセットに追加することによって実効アドレスを計算する。２つのレジスタｒ１及びｒ２のアドレス及びデータのサイズは命令から復号され、ＤＣＤラッチ４４においてラッチされる。その後これらのレジスタアドレスは、（ｒ１）、（ｒ２）と表わされた、レジスタのコンテンツを戻す、ＧＰＲファイル２０のようなレジスタファイルにインデックスをつけることができる。これらの値はＥＸ１ラッチ４６中に保存され、ＡＬＵ１８によって追加され、実効メモリアドレスはＥＸ２ラッチ４８中に保存される。メモリアクセスはその後５０において進行しデータキャッシュ２６にアクセスする。アクセスがデータキャッシュ２６において失敗すると、メモリアクセス操作５０は必要に応じてアドレス変換を行い、メモリアクセスが解決するまでパイプラインを機能停止する、オフチップメモリ３２にアクセスする。とにかく、メモリアクセス操作５０は、ＭＥＭラッチ５２に保存される、非アラインドデータの第１の部分を戻す。
【００２５】
（ｒ１）と（ｒ２）を追加することで４８において実効アドレスが生成されると、制御論理１４は実効アドレス及びサイズフィールドを検査し、メモリアクセスが非アラインドであることを初めて検出する。十分なプロセッサ資源が利用可能であるならば、実効アドレスは、矢印５４によって示されているように、ＥＸ２ラッチ４８で「リサイクル」される。そのアドレスは第２のメモリアクセスのための実効アドレスを生成するために１ワードオフセットを用いて更新される。このことは、一つのマイクロ操作をそのパイプラインに追加し、その後に続く命令はＥＸ２パイプステージに進むことを許されない。第２のワードは５０においてアクセスされ、第１のワードから抽出されたデータがパイプラインの下に進むとＭＥＭラッチ５２に保存される。データはその後ＧＰＲに連続的に書込まれ、あるいは適宜、組合せられその後書込まれる。
【００２６】
説明の為に、図３はそのステージにおいて関連するＬＤ命令工程を用いてパイプライン１２の各ステージを示していることを特筆する。実際には、関連するＬＤ命令工程がパイプステージにおいて完了し、対応するマイクロ操作が次のステージに進むと、もう一つの命令のマイクロ命令が処理のためにパイプステージにロードされる。このように、ＬＤ命令のための実効アドレスが４８においてラッチされるときまでに、その前の３つのパイプステージは、３つまでの異なる命令に相当する３つのマイクロ操作によりロードされる。ＥＸ２ラッチ４８における実効アドレスの生成のときまでに、５４で示されているようにアドレスをサイクルして(cycle)、第２のメモリアクセスを実行するための第２のマイクロ操作を生成するために利用可能なパイプライン制御資源が不充分であるならば、構造的ハザードが生じ、例外が発生するであろう。この場合、ミスアラインドＬＤ命令の後の全ての命令は、必要な制御資源を利用可能にするためにパイプラインからフラッシュされなければならない。これらの命令はあとで再フェッチおよび再処理をされなければならず、操作を二度行うことに関連する電力の無駄使い及び性能ペナルティの両方を招く。
【００２７】
ＥＸ２パイプステージのマイクロ操作の生成に利用可能でなければならないパイプライン制御資源は命令トラッキングＦＩＦＯ１５（図１）におけるエントリを含むことができる。命令トラッキングＦＩＦＯ１５はプログラム順に各送出された命令ごとに１つのエントリを含む。ＦＩＦＯ１５のエントリは、対応する命令が送出されると割り当てられ、パイプライン制御論理１４が、割込みを引き起こすかもしれない例外を命令が有しているかどうかを判断すると、数サイクル後に更新される。エントリは、それが「確認」され（すなわち、パイプライン制御装置が、命令が例外なく実行を完了するであろうと判断し）、「コミット(commit)」された（すなわち、パイプライン制御装置が、それとその先行するものの全てが確認されているので、その命令がパイプラインにおいて実行を完了することが明らかであると認識した）後にそれぞれ１つをポッピング(popping)して、順番に命令トラッキングＦＩＦＯ１５から取り除かれる。
【００２８】
命令トラッキングＦＩＦＯ１５の各エントリが単一のマイクロ操作に相当するならば、命令トラッキングＦＩＦＯ１５の構成及び制御は単純化される。他方において、非アラインドメモリアクセス命令が、例えばＥＸ２パイプステージのような、パイプラインの奥深くで追加のマイクロ操作の生成を引き起こす場合、命令トラッキングＦＩＦＯ１５中の各エントリはマルチプルな可能性のあるマイクロ操作を追跡できなければならず、各ＦＩＦＯエントリ毎のハードウエア資源及び制御複雑性を増加させる。この増加した複雑性とサイズは各ＦＩＦＯエントリごとに必要とされるが、しかし非アラインドメモリアクセス命令―遅延した(late)マルチプルなマイクロ操作トラッキングを要求するための命令だけ―、は比較的希少である。命令トラッキングＦＩＦＯ１５をエントリ毎のマルチプルなマイクロ操作を追跡するよう設計する代わりとして、各エントリは１つのマイクロ操作だけを追跡してもよい。この場合、遅延ミスアラインドメモリアクセス命令は、パイプライン（及び命令トラッキングＦＩＦＯ１５）がその後ろの全ての命令からフラッシュされ、２つのエントリが２つのマイクロ命令に相当する命令トラッキングＦＩＦＯ１５に割り当てられ、そして、後に続く全ての命令が再フェッチ・再送出されるようにする。このことは重大な性能的・電力的ペナルティを負わせる。
【００２９】
命令トラッキングＦＩＦＯ１５に加えて、パイプラインの終わりの方の利用不可能なミスアラインドメモリ命令に必要なもう一つの資源は、キャッシュミスキュー(cache miss queue)２９のエントリである。データアクセスがデータキャッシュにおいてミスすると、そのアクセスは外部バスの主たるメモリにアクセスするためにキュー２９に配置される。利用可能なキューエントリがない場合、パイプラインは機能停止しなければならない。メモリアクセス命令の場合、キャッシュミスキュー２９はＤＣＤステージ中にチェックされ、エントリが利用可能な場合、制御論理１４は、キャッシュミスがパイプライン１２を機能停止しないであろうことを知りながら、命令の進行を許す。しかし、非アラインドメモリアクセス命令が追加のメモリアクセスを実行するためにパイプの終りの方で追加のマイクロ操作を生成しなければならない場合、また、メモリアクセスがキャッシュにおいてミスする場合、第２のキャッシュミスキューエントリが必要とされる。ＤＣＤパイプステージには１つのみしか保存されていなかったので、利用可能なキュー資源は不充分であり、パイプライン１２を機能停止させる可能性がある。
【００３０】
本発明の１実施例によると、メモリアクセス命令のための実効アドレス生成の前に、メモリアクセス命令のデータのミスアラインメントが予測されマイクロ操作はその予測に応答して生成される。新たなマイクロ操作はミスアラインドデータにアクセスするために必要とされる第２のメモリアクセスを実行する。このことはパイプライン制御資源が、命令を復号するとすぐのような、パイプラインの早期に割り当てられることを可能にする。
【００３１】
図２を再び参照すると、ミスアラインメントプレディクタ５６は、命令が４２において復号されるとすぐにメモリアクセス命令を検出する。ＩＦラッチ４０において「リサイクル」されるＬＤ命令によって示されるように、ミスアラインメント予測に応答して、第２のマイクロ操作が直ちに生成される。第２のマイクロ操作はパイプラインを介して主(primary)ロード命令マイクロ操作に続き、データの予測されたミスアラインメントが正しければ第２のメモリアクセスサイクルを実行するために利用可能となる。メモリアクセスのアドレスは例えばワンワードオフセットを有するＬＤ命令のそれと同一であることがわかっているので、追加のマイクロ操作はＬＤ命令について上述したレジスタアクセス及びアドレス生成を実際に行う必要はない。５０におけるＬＤ命令による第１のメモリアクセスに続いて、ミスアラインメント予測が正しかったなら、第１のデータがＭＥＭラッチ５２に保存されるときに、ミスアラインドデータを読み取るために必要な第２のメモリアクセスのためのアドレスが計算され、ＥＸ２ラッチ４８に保存される。第２のメモリアクセスはその後実行され、第２のデータはキャッシュ２６またはメモリ３２から取得されてＭＥＭラッチ５２にロードされる。
【００３２】
ミスアラインメント予測が誤っていた場合、第２のメモリアクセスは実行されず、追加のマイクロ操作は放棄される。パイプライン機能停止の場合、第２のマイクロ操作に割り当てられた資源を消費し、パイプラインからそれを実効的に取り除きながら、ＬＤに続く命令は進む。
【００３３】
下の表３は、命令ｉ＋３が、ミスアラインメントが正しく予測されるミスアラインドメモリアクセス命令であるときのパイプラインを記載している。  
【表３】
2008530714.tif 000003
【００３４】
ＬＤとして命令を復号すること及びミスアラインメントを予測することに応答して、第２のマイクロ操作（ｉ＋３）２は復号パイプステージにおいてクロックサイクル５で生成される。ＬＤ命令の実効アドレスがクロックサイクル７のＥＸ２パイプステージにおいて計算される前の、マイクロ操作のこの早期生成は、十分なパイプライン制御資源がマイクロ操作（ｉ＋３）２に利用可能であるということを保証する。命令実行のタイミングは、そうでなければ、ＥＸ２パイプステージにおける第２のマイクロ操作（ｉ＋３）２の生成の十分な資源の利用可能性を仮定した表２のそれに類似する。１つの相違は、命令ｉ＋４は同一量によって機能停止されるが、マイクロ操作（ｉ＋３）２はパイプラインのより早期に生成されるので、その機能停止は実行シーケンスのより早期にくるということである。
【００３５】
ミスアラインメント予測が正しい場合、正しいパイプライン制御資源はミスアラインドメモリアクセスを実行するために正確に割り当てられ、そして次の命令はパイプラインにロードされ、それらがミスアラインメントのためにフラッシュされる恐れなく、実行されることができる。ミスアラインメント予測が誤っている場合、プロセッサの性能および電力管理は劣化する。しかし、性能における劣化は対称的ではない。下の表４はミスアラインメント予測正確さの見込みに関する相対的性能および電力影響を記載している。  
【表４】
2008530714.tif 000004
【００３６】
正しく予測された場合、命令を完全に実行するために必要とされるメモリアクセス命令に必要数のマイクロ操作を正確に割り当てることにより最適な性能が得られる。アラインドと予測されたけれど実際にはミスアラインドである誤予測の場合は上述されていて、データアラインメントは上述した例のＥＸ２パイプステージにおいて、実効アドレスがメモリアクセス命令のために生成されるまで、チェックされない。説明したように、十分なパイプライン制御資源が利用可能な場合、マイクロ操作は第２のメモリアクセス操作を実行するために生成されるので、性能劣化はメモリアクセス命令に続く命令の完了の増加した待ち時間だけである。しかし、十分なパイプライン制御資源が利用可能でない場合、例外が生じ、パイプライン１２は追加のマイクロ操作を生成および管理するために必要な資源を解放するために、そのメモリアクセス命令後にロードされた全ての命令からフラッシュされる。これは、性能および電力最適化の点で最悪の可能性である。
【００３７】
ミスアラインドと予測されたが実際にはアラインドであったという誤予測の場合、そのメモリアクセス命令に続いてパイプライン１２において余分なマイクロ操作または「バブル(bubble)」が生成される。メモリアクセス命令のための実効アドレスが生成されて、制御論理１４が、それが実際にアラインドであることを検出することができると、余分なマイクロ操作は放棄される。たとえば、メモリアクセス命令がキャッシュ２６においてミスし、オフチップメモリ３２へのアクセスを強要する場合、パイプライン１２はメモリアクセス操作の完了を未決のままにしながら機能停止されることとなる。生成されたマイクロ操作の後ろのもう一つの命令は、それがＥＸ１あるいはＥＸ２パイプステージにおいて何の障害にも遭遇しない場合、バブルを消滅させながらメモリアクセス命令の直後に進むことができる。この場合、マイクロ操作を生成・管理することにおいていくらかの電力が無駄遣いされるが、性能劣化は生じない。メモリアクセス命令がキャッシュ２６においてヒットする(hits)（及びパイプライン１２は、そうでなければ、機能停止しない）という、より可能性のあるケースにおいて、バブルはパイプライン１２を通って流れ、１サイクルの性能劣化（１パイプステージにつき１サイクルと仮定）を引き起こす。しかし、誤って予測されたミスアラインメントは例外を発生させず、あるいは必要な制御資源の欠乏が原因でパイプライン１２をフラッシュしない。
【００３８】
ミスアラインメント予測は様々な他の方法で実施されてもよく、そのなかのいくつかはここにおいて開示されている。しかし、本発明は開示されている特定のミスアラインメント予測アルゴリズムに限定されない。メモリアクセス命令のミスアラインメントをどうにかして予測すること、および、ミスアラインドデータにアクセスするために、その予測に応答して、命令の実効アドレス生成前にマイクロ操作を生成することは本発明の技術的範囲内である。
【００３９】
ミスアラインドデータアクセスが共通であるとき、妥当な取るに足りないミスアラインメント予測アルゴリズムは単純にミスアラインドとみなし、そしてメモリアクセス命令の実効アドレスを生成する前に追加のマイクロ操作を常に生成するためのものとなることができる。このことは、実際にアラインドなメモリアクセスにつき１サイクルの性能ヒットという犠牲を払って、ミスアラインメントによる例外なしあるいはパイプラインフラッシュなしを保証する。本発明の１実施例によると、「ミスアラインドを予測する(predict misaligned)」モードは制御レジスタのビットによって定義される。アプリケーションは、それが数多くのミスアラインドメモリアクセスを予期した場合、ビットを設定することによりそのモードを使用可能にすることができる。ビットが設定されている間、全メモリアクセスはミスアラインドと予測される。もう一つの実施例において、ミスアラインメント予測はメモリアクセス命令のページテーブルの属性によって制御されるため、単一のページからの命令による全メモリアクセスは同じように、すなわちアラインドあるいはミスアラインドと、予測される。
【００４０】
ほとんどのコードは、メモリのエリアまたはコードの特定のセグメント(segment)内であると非常に容易に特定されているミスアラインドメモリアクセスに遭遇しない可能性がある。したがって、より高性能なミスアラインメント予測方法が望ましい、すなわち、連続的に使用可能にされ得るが、しかし全メモリアクセス、または特定のページの全てを盲目的に予測するものではない予測は、ミスアラインドとされるであろう。例えば、１実施例において、ミスアラインメント予測はスタックポインタ(stack pointer)アラインメントに続くことができる。そのスタックポインタがミスアラインドであるならば、メモリアクセスはミスアラインドであると予測される。
【００４１】
条件付ブランチ命令の動作(behavior)の予測方法はよく知られており、多くのものはミスアラインメントを予測することに適用可能である。例えば、最近の過去メモリアクセスパターンは将来のメモリアクセスのアラインメントの良いインジケータとなり得る。ある実施例において、メモリアクセス命令のアドレスビットによってインデックス(index)される複数の１ビットフラッグは、例えばミスアラインドアクセスを指示する１およびアラインドアクセスを指示するゼロ（あるいは逆）のような、対応する命令で最も新しいメモリアクセスのアラインメントを指示する。ミスアラインメントフラッグは，予測の正確さを低下させる可能性のあるメモリアクセス命令間のミスアラインメントエイリアシング(aliasing)を防止するためにメモリアクセス命令アドレスの全てあるいはかなりの部分を比較するタグを含むことができる。その代わりに、資源を節約して使用する(conserve)ために、アドレスの最下位の数ビットのみがミスアラインメントフラッグをインデックスするために用いられてもよい。
【００４２】
メモリアクセス命令の実効アドレス生成に先立って、また、好ましくはできるだけ早く、対応するミスアラインメントフラッグがチェックされる。メモリアクセス命令の最も新しい実行がミスアラインドであった場合、パイプライン制御装置は係属中の(pending)アクセスもミスアラインドであろうと予測し、第２のメモリアクセスを実行するためにマイクロ操作を生成することができる。命令のタイプ（すなわち、メモリアクセス命令）は命令復号パイプステージにおいて最初に知られるので、マイクロ操作はそこで生成されるのが好ましい。しかし、マイクロ操作はパイプラインにおいて後から生成されてもよい。ミスアラインメント予測に応答した、メモリアクセス命令の実効アドレスの生成に先立つマイクロ操作の生成は本発明の技術的範囲内である。
【００４３】
１ビットミスアラインメントフラッグの結果、アラインドメモリアクセス命令のストリームにおける断片的な(odd)ミスアラインドメモリアクセス命令は、一度はミスアラインド命令が最初に遭遇されたとき、そして再び（そのミスアラインメントフラッグが設定される）命令の次のアラインド実行時の、二度、誤予測する。条件付ブランチ予測においても周知のこの問題の解決策は、メモリアクセス命令アドレスによってインデックスされた、２ビット飽和カウンタの表を具備する二重モード(bimodal)ミスアラインメントプレディクタである。各カウンタは４つの状態のうちの１つを有する：
１１−強くミスアラインド(Strongly misaligned)
１０−弱くミスアラインド(Weakly misaligned)
０１−弱くアラインド(Weakly aligned)
００−強くアラインド(Strongly aligned)
【００４４】
メモリアクセス命令のために実効アドレスが生成されると、対応するカウンタが更新される。ミスアラインドメモリアクセス命令は、強くミスアラインド(strongly misaligned)に向かって状態をインクリメントし、アラインドメモリアクセス命令は、強くアラインド(strongly aligned)に向かって状態をデクリメントする。このような二重モードカウンタは、ミスアラインドアクセスのストリームの始まりにおける二度の誤予測という犠牲を払って、アラインドアクセスのストリームにおける断片的ミスアラインドアクセスに関しては一度誤予測するだけである。
【００４５】
条件付ブランチ予測から借用されるもう一つのミスアラインメント予測アルゴリズムは局所的ミスアラインメントプレディクタである。局所的ミスアラインメントプレディクタは２つのテーブルを維持する。第１のテーブルは局所的ミスアラインメントヒストリーテーブルである。これはメモリアクセス命令の複数のアドレスビットによってインデックスされ、各メモリアクセス命令の最も新しいｎ個の実行のアラインド／ミスアラインドヒストリーを記録する。他方のテーブルはパターンヒストリーテーブルである。二重モードプレディクタのように、このテーブルは二重モードカウンタを含むが、そのインデックスは第１のテーブルのミスアラインメントヒストリーから生成される。アラインメントを予測するために、ミスアラインメントヒストリーは検索され(looked up)、そのヒストリーはその後、ミスアラインメント予測を行う二重モードカウンタを検索するために用いられる。
【００４６】
ミスアラインメントの予測の更なる他のオプションは、多くのメモリアクセスの動作が他の最近のメモリアクセスのヒストリーと強く相関していることを利用する、グローバル(global)ミスアラインメントプレディクタである。グローバルミスアラインメントプレディクタは単一のシフトレジスタを、実行されたあらゆる全てのメモリアクセス命令の最近のミスアラインメントヒストリーを用いて更新しつづけ、二重モードカウンタのテーブルにインデックスするためにこの値を用いる。
【００４７】
その代わりに、二重モードカウンタのテーブルは、ｇｓｅｌｅｃｔプレディクタとして知られる、メモリアクセス命令のアドレスの数ビットと連結された最近のミスアラインメントヒストリーを用いてインデックスされてもよい。ｇｓｅｌｅｃｔは小さいテーブルサイズに関して局所的予測よりも正確な結果をもたらすことができる。もう一つの代替として、メモリアクセス命令アドレスは、連結されたものではなく、ｇｓｈａｒｅプレディクタとして知られる、グローバル的ヒストリーを用いて排他的論理和演算されることができる。ｇｓｈａｒｅは大きいテーブルに関してｇｓｅｌｅｃｔよりも正確なミスアラインメント予測をもたらすことができる。ｇｓｅｌｅｃｔ及びｇｓｈａｒｅが局所的予測よりも正確でないとしても、それらは実施理由のために好ましいことがある。ｇｓｅｌｅｃｔ及びｇｓｈａｒｅはアラインメント予測ごとに１つのテーブル検索(lookup)を必要とし、そこにおいて局所的予測は連続して２つのテーブル検索を必要とする。
【００４８】
１９９３年、スコット・マックファーリング氏は、ここにおいてその全文が参考文献とされている、デジタルウエスタンリサーチラボラトリーテクニカルノートＴＮ３６「ブランチプレディクタの結合(Combining  Branch  Predicator)」において、ブランチプレディクタを結合することを提案した。マックファーリング氏が提案した技術は、ミスアラインドメモリアクセスの予測の問題に有益に適用可能であり、それによって、本発明による、メモリアクセス命令の実効アドレス生成に先立ってパイプラインマイクロ操作を生成する。
【００４９】
ある実施例において、結合されたミスアラインメント予測は３つのプレディクタ、すなわち、二重モード、ｇｓｈａｒｅ、およびメモリアクセスごとの命令(per-memory-access instruction)ベースで用いるために二重モードまたはｇｓｈａｒｅのどちらかを選ぶ二重モードのようなプレディクタを並列に用いる。選択プレディクタはさらに別の２ビットアップ／ダウン飽和カウンタであり、この場合、ＭＳＢは使用すべき予測を選択する。この場合、カウンタは、二重モード及びｇｓｈａｒｅの予測が一致しないときは常に、どちらのプレディクタでも正確であったものに有利である(favor)ように更新される。
【００５０】
もう一つの実施例において、ミスアラインメントプレディクタは、完全に連想型であってもよいしあるいは連想型に設定されてもよく、かつメモリアクセス命令アドレスの一部によって、あるいは上記のｇｓｅｌｅｃｔおよびｇｓｈａｒｅパラメータについてのような、他の最近のミスアラインメントヒストリーを用いて連結あるいは排他的論理和演算されたそのアドレスの一部によって、インデックスされてもよい、ミスアラインメントキャッシュを維持することができる。命令フェッチパイプステージ期間中（例えば、命令がメモリアクセス命令であると知られる前）のような、パイプラインの早期に、キャッシュはインデックスされてもよい。ミスアラインメントキャッシュがヒットする場合、そのメモリアクセスは最近ミスアラインドだったものであり、ミスアラインドと予測される可能性がある。このキャッシュアクセスがミスする場合、メモリアクセスはアラインドと予測される。エントリは予測されないミスアラインドメモリアクセス命令に関してはキャッシュに追加され、非アラインドと予測されたアラインドメモリアクセスに関してはキャッシュから取り除かれる。
【００５１】
様々な他のミスアラインド予測アルゴリズムが可能である。例えば、ミスアラインメントプレディクタはメモリアクセス命令のアラインメント動作の詳細な統計を維持し、そして命令毎にもしくはグローバルに、過去のアラインメント経験の統計学的平均に基づいてミスアラインメントを予測してもよい。同様に、ミスアラインメントプレディクタは最も新しいｎ個のメモリアクセス命令のアラインメントのローリング(rolling)平均を維持してもよい。
【００５２】
いくつかの命令設定アーキテクチャは、そのアプリケーションに関するプログラマーの特有の知識に基づいて、彼または彼女によって特定されることのできるオペレーションコード(opcode)において静的予測ビットを含む。例えば、ブランチが「ブランチ・オン・エラー(branch on error)」状況において使用され、エラーが比較的まれである場合、プログラマーはそれらのブランチを「取られていない」と静的に予測するかもしれない。同様に、プログラマーは特定のアプリケーションのメモリアラインメント動作を見抜くかもしれない。例えば、多くのデータ加工アプリケーションはうまく設計され秩序立ったデータ構成を用いており、非アラインドメモリアクセスがある場合、予期されるものはほとんどない。他方において、いくつかのアプリケーションは非常に多くの非アラインドデータアクセスを予期することができる。例には、共用チャネルの連続データストリームから特定のデータを抽出する通信プログラム、あるいは非同期トリガーに応答して連続出力からデータをロギング(logging)するデータ獲得アプリケーションが含まれる。このようなアプリケーションにおいて、ミスアラインメント予測を可能にすること、あるいは、その代わりに、より精力的な(aggressive)モードにミスアラインメント予測をバイアスすることは、プロセッサ性能および電力節約を向上させることができる。本発明の１実施例によると、プログラマーは１組の非アラインドメモリアクセス命令、あるいはメモリアクセス命令のフラッグによってプログラムのミスアラインメント予測動作に影響を及ぼすことができる。
【００５３】
１実施例において、ＬＤおよびＳＴ命令のようなメモリアクセス命令は、ミスアラインメント予測が実行されるべきであることを指示するパラメータリストにおいてフラッグを含む。その代わりに、命令セットは、可能性のあるミスアラインドロードおよび保存操作にそれぞれ関するＬＤＭＡＬおよびＳＴＭＡＬのような新たな命令を含んでもよい。このフラッグあるいは新たな命令は、メモリアラインメント予測を可能にするためのミスアラインメントプレディクタ５６への入力を提供し、非アラインドデータへアクセスするために追加のメモリアクセスサイクルを実行するために実効アドレス生成に先立ってマイクロ操作の早期生成を行う。
【００５４】
もう一つの実施例において、ミスアラインメント予測フラッグまたは命令タイプは、ミスアラインメントプレディクタ５６を、ミスアラインメント予測がフラッグなしよりも精力的なものになるモードにする。例えば、フラッグまたは命令タイプは、ミスアラインメントプレディクタを上記した２ビット二重モード飽和カウンタを使用するものから、８の状態のうち５ないし６が予測されたミスアラインメントの程度を指示する３ビット飽和カウンタを使用するものに切り替えることができる。このようなミスアラインメント予測フラッグまたは命令タイプの利点は、アプリケーション動作に関する知識のおかげでミスアラインメント予測がいつプロセッサ性能及び電力管理の向上になり得るかをより良好に予測することのできるプログラマーにミスアラインメント予測の制御を与えることである。
【００５５】
本発明はその特別な特徴、観点および実施例に関してここで記載されてきたが、多くの様々な変形、改良および他の実施例が本発明の広い技術的範囲内で可能であることは明らかである。従って、全ての様々な変形、改良および実施例は、本発明の技術的範囲内であるとみなされるべきである。従って、本実施例は全ての観点において例示的なものであって限定的なものではないと解釈され、添付の請求項の意味及び同義の範囲内の全ての変更はここに含まれるものである。
【図面の簡単な説明】
【００５６】
【図１】プロセッサの機能的ブロック図。
【図２】メモリ組織の概略図。
【図３】プロセッサパイプラインの一部の機能的ブロック図。