(57)【特許請求の範囲】
【請求項１】
ロードおよびストア命令を実行するよう構成されたロード／ストアユニット（２２２）を含み、前記ロード／ストアユニットは未処理のストア命令および関連のストアデータをストアするよう構成された第１の複数の記憶場所（２５１）を含み、かつ前記複数の記憶場所の各々はさらにチェックされたビットをストアするよう構成され、さらに、
前記ロード／ストアユニットに結合されたデータキャッシュ（２２４）を含み、前記データキャッシュはキャッシュラインをストアするよう構成された第２の複数の記憶場所を含み、前記データキャッシュは前記第２の複数の記憶場所内にストアされたキャッシュラインをロックするよう構成されて、それにより、少なくとも前記ロックがリリースされるクロックサイクルまで前記複数の記憶場所内に前記キャッシュラインがストアされたままとなるようにし、かつ前記第１の複数の記憶場所のうち１つ内にストアされた前記チェックされたビットは、ロード命令が前記第１の記憶場所のうち前記１つ内にストアされたストア命令に関連するアドレスと同じキャッシュラインにあるロードアドレスで前記データキャッシュにアクセスするときにセットされ、前記チェックされたビットは、前記ロードアドレスが前記データキャッシュにヒットすることがわかるとセットされ、
前記データキャッシュは前記データキャッシュにおけるロードアドレスによってヒットされるように前記キャッシュラインをロックするように構成され、前記ロード／ストアユニットは、前記第１の複数の記憶場所のうち１つ内にストアされたストアデータを前記データキャッシュに書き込むとき、前記チェックされたビットがセットされれば、キャッシュのヒットをチェックすることなくストアデータを書き込むように構成され、前記データキャッシュは、前記データキャッシュに書き込まれているストアデータに応答して前記ロックを前記キャッシュライン上でリリースするように構成される、データメモリユニット。
【請求項２】
前記データキャッシュはさらに、複数の前記キャッシュラインを同時にロックするよう構成される、請求項１に記載のデータメモリユニット。
【請求項３】
前記ロード／ストアユニット内の前記第１の複数の記憶場所の各々はウェイ値をストアするよう構成される、請求項１に記載のデータメモリユニット。
【請求項４】
前記第１の複数の記憶場所のうち１つ内にストアされた前記ウェイ値は、ロード命令が前記第１の複数の記憶場所のうち前記１つ内にストアされたストア命令に関連するアドレスと同じキャッシュライン内に存在するロードアドレスで前記データキャッシュにアクセスするときに提供され、かつ前記ウェイ値は前記データキャッシュの、前記ロードアドレスがその中でヒットすることがわかったウェイである、請求項３に記載のデータメモリユニット。
【請求項５】
前記データキャッシュは、ロックされるべき前記キャッシュラインに関連するロックビットをセットするよう構成される、前掲の請求項のいずれかに記載のデータメモリユニット。
【請求項６】
前記ロックビットは前記データキャッシュによってセットされ、かつ前記ロックビットは前記ロードアドレスが前記データキャッシュをヒットするとわかった場合にセットされる、請求項５に記載のデータメモリユニット。
【請求項７】
前記ロックビットはロード-op-ストア命令がキャンセルされるとクリアされる、請求項５または６に記載のデータメモリユニット。
【請求項８】
前記チェックされたビットは、ロード-op-ストア命令がキャンセルされるとクリアされる、請求項１に記載のデータメモリユニット。
【請求項９】
前記データキャッシュはさらに、前記ストアデータに関連する前記チェックされたビットがセットされると、前記データキャッシュ内の前記第２の複数の記憶場所内にストアされた受信用キャッシュライン内に前記ストアデータを転送するよう構成され、前記受信用キャッシュラインは前記ストアデータに関連するアドレスおよび前記アドレスに関連するウェイ値によって識別される、請求項１に記載のデータメモリユニット。
【請求項１０】
前記ストアデータ、前記ストアデータに関連する前記アドレス、および前記ウェイ値は前記ロード／ストアユニットによって提供され、前記ストアデータ、前記ストアデータに関連する前記アドレス、および前記ウェイ値は前記ロード／ストアユニット内の前記第１の複数の記憶場所のうち１つ内にストアされる、請求項９に記載のデータメモリユニット。
【請求項１１】
前記ロード／ストアバッファ内の前記第１の複数の記憶場所はさらに、前記ロード／ストアユニット内の前記第１の複数の記憶場所が１つの統合されたロード／ストアバッファを形成するように、未処理のロード命令をストアするよう構成される、請求項１に記載のデータメモリユニット。
【請求項１２】
ストアデータをデータキャッシュ内に、前記データキャッシュが前記ストアデータに関連するアドレス上でヒットするかどうかを最初に検査する必要なく、ストアするための方法であって、前記方法は、チェックされたビットを前記ストアデータに関連付けるステップと、前記データキャッシュが前記ストアデータに関連するアドレス上でヒットするかどうかを検査することなく前記チェックされたビットがセットされた場合に前記ストアデータを前記データキャッシュ内にストアするステップと、前記ストアデータに関連する前記アドレスと同じキャッシュライン内にロードアドレスを有するロード命令が前記データキャッシュにアクセスして前記データキャッシュにヒットすることがわかるクロックサイクル中に、前記チェックされたビットをセットするステップと、前記クロックサイクル中に前記キャッシュラインに関連するロックビットをセットするステップとを含む、方法。
【請求項１３】
前記クロックサイクル中に前記キャッシュラインに関連するウェイ値を前記ストアデータに関連する記憶場所内にストアするステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
ロード-op-ストアタイプの命令がその中でキャンセルされる後続のクロックサイクル中に、前記ロックビットをクリアするステップをさらに含む、請求項１２または１３に記載の方法。
【請求項１５】
前記後続のクロックサイクル中に前記チェックビットをクリアするステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
ストア命令が前記キャッシュラインに対して実行されるクロックサイクル中に、前記キャッシュラインに関連する前記ロックビットをクリアするステップをさらに含む、請求項１４に記載の方法。
【発明の詳細な説明】
発明の背景
１．発明の分野
本発明は、スーパースカラマイクロプロセッサの分野に関し、より特定的には、スーパースカラマイクロプロセッサ内のロード／ストアユニットおよびデータキャッシュに関する。
２．関連技術の説明
スーパースカラマイクロプロセッサは、１クロックサイクル内で複数の命令を同時に実行することにより、かつその設計に合致する可能な限り最も短いクロックサイクルを特定することによって、高性能を達成する。ここで使用する用語「クロックサイクル」とは、その間にマイクロプロセッサのパイプライン段が所定の機能を行なう、時間間隔を表わす。クロックサイクルの終端で、結果として得られた値が次のパイプライン段に送られる。
スーパースカラマイクロプロセッサが１クロックサイクル当たり複数の命令を実行しかつそのクロックサイクルが短いために、スーパースカラマイクロプロセッサに命令およびデータを提供するには、高帯域幅メモリシステム（すなわち、短い時間期間に多数のバイトを提供することができるメモリシステム）が必要とされる。高帯域幅のメモリシステムが使用されなければ、マイクロプロセッサは命令またはデータが提供されるのを待ちながら多数のクロックサイクルを浪費することとなり、その後、受取った命令および／または受取ったデータに応じた命令を比較的少数のクロックサイクルで実行することとなる。全体としての性能はしたがって、多数のアイドルクロックサイクルによって劣化する。しかし、スーパースカラマイクロプロセッサは通常、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）セルからなる大容量メインメモリとともにコンピュータシステム内に構成される。ＤＲＡＭセルは、現代のスーパースカラマイクロプロセッサのクロックサイクルよりもはるかに長いアクセスタイムによって特徴付けられる。また、ＤＲＡＭセルは典型的に、比較的細い出力バスを介して、ストアされたバイトをスーパースカラマイクロプロセッサへと伝送する。したがって、ＤＲＡＭセルが提供するのは、比較的長い時間期間で比較的少数のバイトを提供するメモリシステムであって、高帯域幅のメモリシステムを形成することはできない。
スーパースカラマイクロプロセッサは通常、命令およびデータを連続して提供するのに十分な帯域幅を有するメモリシステムとともにコンピュータシステム内に構成されることはないため、スーパースカラマイクロプロセッサはしばしば、キャッシュとともに構成される。キャッシュとは、記憶場所の複数のブロックであって、マイクロプロセッサと同じシリコン基板上に構成されるかまたはその近辺に結合される。記憶場所のそれらブロックは、先にフェッチされた命令またはデータバイトを保持するのに使用される。これらのバイトはキャッシュから宛先（レジスタまたは命令処理パイプライン）へと素早く転送することが可能である。このとき通常１または２のクロックサイクルが必要とされるが、これは、ＤＲＡＭメインメモリからバイトを転送するのに多数のクロックサイクルが必要とされるのとは対照的である。
キャッシュは、「アソシアティブ」構造へと構成され得る。アソシアティブ構造においては、記憶場所のブロックは、行および列を有する二次元アレイとしてアクセスされる。あるアドレスに存在するバイトを探すのにキャッシュをサーチする場合、そのアドレスからの多数のビットがそのキャッシュへの「インデックス」として使用される。このインデックスは、二次元アレイ内の特定の行を選択する。したがって、インデックスに必要とされるアドレスビットの数は、キャッシュ内に構成される行の数によって決定される。ある行の複数のブロック内にストアされたバイトに関連するアドレスを調べて、その行内にストアされたいずれかのアドレスが要求されたアドレスに一致するかどうかを判定する。一致が見つかれば、そのアクセスは「ヒット」と呼ばれ、キャッシュが関連するバイトを提供する。一致が発見されなければ、そのアクセスは「ミス」と呼ばれる。ミスが検出されると、それらのバイトはメモリシステムからキャッシュ内へと転送される。キャッシュ内にストアされたバイトに関連するアドレスもまたストアされる。これらのストアされたアドレスは、「タグ」または「タグアドレス」と称される。
ある行内に構成されたメモリのブロックは、その行の列を形成する。メモリの各ブロックは「ウェイ（way）」と呼ばれ、複数のウェイが行を構成する。ウェイは、ウェイ値をキャッシュに提供することによって選択される。ウェイ値は、ある行についてタグを調べて、それらタグのうちの１つと要求されたアドレスとの間に一致を発見することによって決定される。１行当たり１ウェイで設計されたキャッシュは、「ダイレクトマップ方式のキャッシュ」と称される。ダイレクトマップ方式のキャッシュにおいては、タグを調べて、アクセスがヒットであるかどうかを判定しなければならないが、このタグの検査は、どのバイトをキャッシュの出力に転送するかを選択するのには必要とされない。
ダイレクトマップ方式のキャッシュもアソシアティブ方式のキャッシュも、高い周波数（すなわち短いクロックサイクル）のスーパースカラマイクロプロセッサにおいて使用される。どちらの種類のキャッシュについても、そのキャッシュが単一ポートで構成されている場合には、１クロックサイクル内で１つの読出または１つの書込を行なうことが可能である。キャッシュが複数ポートで構成されている場合にも、通常はメモリの同じブロックの読出および書込を同じクロックサイクル内で行なうことはできない。キャッシュは、キャッシュアレイの大容量および他の周知の特性により、通常は１つの読出または１つの書込を実行するのに１クロックサイクルの（すべてではないにしても）大半を必要とする、大型の構造を有する。さらに、１クロックサイクル内にメモリの同じ場所の読出と書込を行なうには、アレイを非常に大きくかつ遅くする必要があり、したがって、クロックサイクル時間およびスーパースカラマイクロプロセッサのシリコン領域に多大な悪影響を及ぼす。
あるキャッシュのメモリ場所を同じクロックサイクル内で読出しかつ書込むことができないという要件のために、ストア命令を達成するのに２つのキャッシュアクセスが必要となる。第１のキャッシュアクセスにおいては、キャッシュを読出して、そのストア命令に関連するアドレスがヒットするかどうかが検査される。もしアドレスがヒットすれば、第２のサイクルを使用してそのストアデータがキャッシュ内に書込まれる。もしアドレスがミスすれば、そのアドレスに関連するバイトがキャッシュ内に転送される。バイトが転送された後、そのストア命令は再びキャッシュにアクセスして、キャッシュ内にストアデータを書込む。少なくとも２つのキャッシュアクセスサイクルを必要とするストア命令の問題に対する解決策が望まれる。
発明の概要
上述のような問題は、本発明に従ったロード／ストアユニットおよびデータキャッシュを用いるデータメモリユニットによって、大部分が解決される。ロード／ストアユニットは、各バッファ記憶場所につき１つのウェイフィールドおよびチェックされたビットを有するロード／ストアバッファで構成される。ロード-op-ストア命令について、命令のロード部分がデータキャッシュにアクセスしかつヒットした場合に、その命令のストア部分をストアする記憶場所のチェックされたビットがセットされる。また、記憶場所のウェイフィールドは、ロード部分がその中でヒットしたデータキャッシュのウェイにセットされる。データキャッシュは、データキャッシュ内にストアされた各キャッシュラインに対してロッキングメカニズムを有するよう構成される。ロード-op-ストア命令のロード部分が実行されると、関連するラインは、そのラインがストア命令が実行されるまでそのデータキャッシュ内に留まるようにロックされる。このようにして、ロード-op-ストア命令のストア部分は、そのストア部分に関連するウェイフィールドによって示されたウェイにおいて、確実にデータキャッシュをヒットするようになる。
このロード／ストアユニットおよびデータキャッシュは、ロード-op-ストア命令のストア部分をデータキャッシュアクセスの２クロックサイクルからデータキャッシュアクセスの１クロックサイクルへと有利に低減することを可能にする。このようなデータメモリユニットを用いるスーパースカラマイクロプロセッサの性能は、ロード-op-ストア命令が実行される所与のクロックサイクルの組においてより多くのデータキャッシュアクセスを可能にすることによって、改善することが可能である。
概して、本発明はロード／ストアユニットおよびデータキャッシュを含むデータメモリユニットに関する。ロード／ストアユニットは、ロードおよびストア命令を実行するように構成され、かつ、未処理の（outstanding）ストア命令および関連するストアデータをストアするよう構成された第１の複数の記憶場所を含む。上記複数の記憶場所の各々は、チェックされたビットをストアするよう構成される。データキャッシュは、ロード／ストアユニットに結合されて、キャッシュラインをストアするよう構成された第２の複数の記憶場所を含む。データキャッシュは上記第２の複数の記憶場所内にストアされたキャッシュラインをロックして、それにより、キャッシュラインが少なくともロックがリリースされるクロックサイクルまでは上記複数の記憶場所内にストアされたままとなるように構成される。
本発明はさらに、データキャッシュがストアデータに関連するアドレスにヒットするかどうかを最初にチェックする必要なく、データキャッシュ内にストアデータをストアするための方法に関する。この方法は、そのストアデータに関連するチェックされたビットがその間にセットされる第１のクロックサイクル中に、ストアデータをデータキャッシュ内にストアするステップを含む。
【図面の簡単な説明】
本発明の他の目的および利点は、添付の図面を参照して以下の詳細な説明を読むことによって明らかとなろう。図中：
図１は、本発明に従ったロード／ストアユニットおよびデータキャッシュを含むスーパースカラマイクロプロセッサのブロック図である。
図２は、本発明に従ったロード／ストアバッファを含むロード／ストアユニットの、内部構成要素の一部を示す図である。
図３は、図２に示したロード／ストアバッファの記憶場所のビットフィールドを示す。
図４Ａは、本発明に従ったデータキャッシュのタグエントリを示す。
図４Ｂは、図４Ａに示したタグエントリを含むデータキャッシュタグアレイを示し、これは、タグエントリのロックビットに対するクリアリングメカニズムを含む。
本発明に関してはさまざまな修正例および変形例が考えられるが、本発明の特定の実施例を例示の目的で図面に示しかつ以下に詳細に説明する。但し、それら図面および詳細な説明は本発明をその開示した特定の形に限定することを意図するものではなく、反対に、本発明は添付の請求の範囲で規定される本発明の精神および範囲内に含まれるすべての修正例、等価物および変形例を網羅するものである。
発明の詳細な説明
ここで図１を参照して、本発明に従ったロード／ストアユニット２２２およびデータキャッシュ２２４を含むスーパースカラマイクロプロセッサ２００のブロック図が示される。図１の実施例において示されるように、スーパースカラマイクロプロセッサ２００は、命令キャッシュ２０４に結合されたプリフェッチ／プリデコードユニット２０２および分岐予測ユニット２２０を含む。命令整列ユニット２０６は、命令キャッシュ２０４と複数のデコードユニット２８０Ａ〜２０８Ｆ（集合的にデコードユニット２０８と称される）に結合される。各デコードユニット２０８Ａ〜２０８Ｆは、それぞれのリザベーションステーションユニット２１０Ａ〜２１０Ｆ（集合的にリザベーションステーション２１０と称される）に結合され、各リザベーションステーション２１０Ａ〜２１０Ｆは、それぞれの機能ユニット２１２Ａ〜２１２Ｆ（集合的に機能ユニット２１２と称される）に結合される。デコードユニット２０８、リザベーションステーション２１０、および機能ユニット２１２はさらに、リオーダバッファ２１６、レジスタファイル２１８およびロード／ストアユニット２２２に結合される。最後に、データキャッシュ２２４はロード／ストアユニット２２２に結合するよう示され、ＭＲＯＭユニット２０９は命令整列ユニット２０６に結合するよう示される。
一般に、命令キャッシュ２０４は、命令がデコードユニット２０８にディスパッチされるのに先立ってそれら命令を一時的にストアするよう提供された高速のキャッシュメモリである。一実施例においては、命令キャッシュ２０４は、各々が１６バイト（ただし、各バイトは８ビットを含む）のラインで編成された、最高３２キロバイトの命令コードをキャッシュするよう構成されている。動作中、命令コードはプリフェッチ／プリデコードユニット２０２を介してメインメモリ（図示せず）からコードをプリフェッチすることによって、命令キャッシュ２０４に提供される。なお、命令キャッシュ２０４はセットアソシアティブ構成、フルアソシアティブ構成、またはダイレクトマップ構成として実装することが可能である。
プリフェッチ／プリデコードユニット２０２は、メインメモリから命令コードをプリフェッチして、命令キャッシュ２０４内にストアするよう提供される。一実施例においては、プリフェッチ／プリデコードユニット２０２はメインメモリから命令キャッシュ２０４内へと、６４ビット幅のコードをバーストするよう構成される。なお、プリフェッチ／プリデコードユニット２０２では、さまざまな種類のコードプリフェッチ技術およびアルゴリズムが使用され得る。
プリフェッチ／プリデコードユニット２０２は、メインメモリから命令をプリフェッチする際に、命令コードの各バイトに関連する以下の３つのプリデコードビットを生成する。すなわち：開始ビット、終了ビット、および「機能」ビットである。プリデコードビットは、各命令の境界を示すタグを形成する。プリデコードタグもまた、所与の命令がデコードユニット２０８によって直接デコードすることが可能であるか、または、命令がＭＲＯＭユニット２０９によって制御されるマイクロコード手順を呼出すことによって実行されねばならないか等の、付加的な情報を伝送することが可能である。これについては、以下により詳細に説明する。
表１は、プリデコードタグのエンコードの１例を示す。表に示すように、所与のバイトが命令の第１のバイトであった場合、そのバイトに対して開始ビットがセットされる。バイトが命令の最後のバイトであった場合、そのバイトに対して終了ビットがセットされる。特定の命令がデコードユニット２０８によって直接デコードすることが不可能な場合、命令の第１のバイトに関連する機能ビットがセットされる。これに対し、もし命令がデコードユニット２０８によって直接デコードすることが可能である場合には、命令の第１のビットに関連する機能ビットはクリアされる。特定の命令の第２のビットに対する機能ビットは、オペレーションコード（ｏｐｃｏｄｅ）が第１のバイトである場合にクリアされ、ｏｐｃｏｄｅが第２のバイトである場合にはセットされる。但し、ｏｐｃｏｄｅが第２のバイトである状況においては、第１のバイトはプレフィックスバイトである。命令バイト数３〜８に対する機能ビット値は、そのバイトがＭＯＤＲＭもしくはＳＩＢバイトであるか、または、そのバイトが変位データもしくは即値データを含むかどうかを示す。
0003824657.tif 000002
上述のように、一実施例においては、ｘ８６命令セット内のある命令はデコードユニット２０８によって直接デコードすることが可能である。これらの命令は、「高速経路（fast path）」命令と称される。ｘ８６命令セットにおける残りの命令は「ＭＲＯＭ命令」と称される。ＭＲＯＭ命令は、ＭＲＯＭユニット２０９を呼出すことによって実行される。より特定的には、ＭＲＯＭ命令に出会うと、ＭＲＯＭユニット２０９はその命令を構文解析しかつ規定された高速経路命令のサブセットへと逐次化して、所望の動作を達成する。高速経路命令と分類された例示的なｘ８６命令、ならびに、高速経路命令およびＭＲＯＭ命令の双方を処理する方法に関する説明は、さらに以下に提供される。
命令整列ユニット２０６は、命令キャッシュ２０４からの可変バイト長命令を、デコードユニット２０８Ａ〜２０８Ｆによって形成される固定の発行位置へとチャンネル分けするよう提供される。命令整列ユニット２０６は、命令キャッシュ２０４によって提供された命令バイトの３つのグループから、独立してかつ並列に命令を選択し、それらのバイトを予備発行位置の３つのグループへと配列する。発行位置の各グループは、命令バイトのそれら３つのグループのうち１つのグループに関連する。予備発行位置はその後合併されて、最終的な発行位置が形成される。それらの各々は、デコードユニット２０８のうち１つのユニットに結合される。
ロード／ストアユニット２２２およびデータキャッシュ２２４の詳細な説明を続ける前に、図１に示す例示的なスーパースカラマイクロプロセッサ２００内で用いられる他のサブシステムに関する概観について説明する。図１に示した実施例について、デコードユニット２０８の各々は、上に記載した予め定められた高速経路命令を復号化するためのデコード回路を含む。さらに、各デコードユニット２０８Ａ〜２０８Ｆは変位データおよび即値データを、対応するリザベーションステーションユニット２１０Ａ〜２１０Ｆに経路付ける。デコードユニット２０８からの出力信号は、機能ユニットのためのビットコード化実行命令および、オペランドアドレス情報、即値データおよび/または変位データを含む。
図１のスーパースカラマイクロプロセッサは追い越し実行を支持する。したがってこのスーパースカラマイクロプロセッサは、リオーダバッファ２１６を用いてレジスタの読出および書込動作に関するオリジナルプログラムシーケンスの監視を続けて、レジスタのリネームを行ない、投機的な命令の実行および分岐の誤予測回復を可能にすることによって、精密な例外処理を容易にする。当業者には理解されるように、リオーダバッファ２１６内の一時的な記憶場所は、レジスタの更新に関連する命令のデコード時にリザーブされ、それにより、投機的なレジスタ状態をストアする。リオーダバッファ２１６は先入れ先出し構成で実現されてもよく、ここで、投機的な結論はそれらが確証されかつレジスタファイルに書込まれる間に、バッファの「最後部」へと移動し、したがって、バッファの「頭部」には新しいエントリのために空きがつくられる。リオーダバッファ２１６は他の特定の構成もまた可能であり、これをさらに以下に説明する。分岐予測が正しくない場合、誤予測された経路に沿った投機的に実行された命令の結果は、それらがレジスタファイル２１８に書込まれるまでにバッファ内で無効とすることができる。
デコードユニット２０８Ａ〜２０８Ｆの出力に提供された即値データおよびビットコード化実行命令は、それぞれのリザベーションステーションユニット２１０Ａ〜２１０Ｆに直接経路付けされる。一実施例においては、各リザベーションステーションユニット２１０Ａ〜２１０Ｆは対応する機能ユニットへの発行を待つ最高３つの未決の（pending）命令について、命令情報（すなわち、ビットコード化実行ビットならびにオペランド値、オペランドタグおよび/または即値データ）を保持することが可能である。但し、図１の実施例に関しては、各デコードユニット２０８Ａ〜２０８Ｆは専用のリザベーションステーションユニット２１０Ａ〜２１０Ｆに関連し、各リザベーションステーションユニット２１０Ａ〜２１０Ｆは同様に、専用の機能ユニット２１２Ａ〜２１２Ｆに関連する。したがって、６つの専用の「発行位置」が、デコードユニット２０８、リザベーションステーションユニット２１０および機能ユニットによって形成されることになる。整列されかつデコードユニット２０８Ａを介して発行位置０にディスパッチされた命令は、リザベーションステーションユニット２１０Ａに渡されて、その後、機能ユニット２１２Ａに渡されて実行される。同様に、整列されかつデコードユニット２０８Ｂにディスパッチされた命令は、リザベーションステーションユニット２１０Ｂにかつその後機能ユニット２１２Ｂに渡される、等である。
特定の命令のデコード時、もし要求されるオペランドがレジスタのロケーションである場合、レジスタアドレス情報はリオーダバッファ２１６およびレジスタファイル２１８に同時に経路付けされる。当業者には、ｘ８６レジスタファイルが８個の３２ビットリアルレジスタ（すなわち典型的に、ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＤＰ、ＥＳＩ、ＥＤＩおよびＥＳＰと称される）を含むことが理解されるであろう。リオーダバッファ２１６は、これらのレジスタの内容を変更しかつしたがって追い越し実行を可能にする、結果のための一時的な記憶場所を含む。リオーダバッファ２１６の一時的な記憶場所は、各命令についてリザーブされ、これがデコード時に、リアルレジスタのうち１つの内容を修正するよう決定される。したがって、特定のプログラムの実行中さまざまな時点において、リオーダバッファ２１６は所与のレジスタの投機的に実行された内容を含む、１または複数の場所を有し得る。もし所与の命令のデコードに続いて、リオーダバッファ２１６が所与の命令内でオペランドとして使用されたレジスタに割当てられた先行する１または複数の位置を有すると判定された場合、リオーダバッファ２１６は対応するリザベーションステーションを、１）最も新しく割当てられた場所の値か、または２）その値が先行する命令を実際に実行する機能ユニットによって未だ生成されていない場合には最も新しく割当てられた場所に対するタグに送る。もしリオーダバッファが所与のレジスタに対してリザーブされた場所を有する場合には、そのオペランド値（またはタグ）が、レジスタファイル２１８からではなくリオーダバッファ２１６から提供される。リオーダバッファ２１６の要求されるレジスタに対してリザーブされている場所がない場合には、その値はレジスタファイル２１８から直接とられる。もしオペランドがメモリ場所に対応する場合、そのオペランド値はロード／ストアユニット２２２を介してリザベーションステーションユニットに提供される。
最適なリオーダバッファの実現に関する詳細は、マイク・ジョンソン（Mike Johnson）による「スーパースカラマイクロプロセッサの設計（“Superscalar Microprocessor Design”）」、Prentice-Hall，Englewood Cliffs，New Jersey，1991内に、および、ウイット（Witt）等によって１９９３年１０月２９日に出願された、「高性能スーパースカラマイクロプロセッサ（“High Performance Superscalar Microprocessor”）」と題され、同時継続中の共通に譲渡された米国特許出願連続番号第０８／１４６，３８２号内に記載されている。これらの文献はその全体が、ここに引用により援用される。
リザベーションステーションユニット２１０Ａ〜２１０Ｆは、対応する機能ユニット２１２Ａ〜２１２Ｆによって投機的に実行されるべき命令情報を一時的にストアするよう提供される。上述のように、各リザベーションステーションユニット２１０Ａ〜２１０Ｆは、最高３つの未決の命令に関して命令情報をストアすることが可能である。６個のリザベーションステーション２１０Ａ〜２１０Ｆの各々は、対応する機能ユニットによって投機的に実行されるべきビットコード化実行命令およびオペランドの値をストアする場所を有する。もし特定のオペランドが利用できない場合、そのオペランドに対するタグがリオーダバッファ２１６から提供されて、その結果が生成されるまで（すなわち、先行する命令の実行の完了まで）対応するリザベーションステーション内にストアされる。但し、機能ユニット２１２Ａ〜２１２Ｆのうち１つによって命令が実行されると、その命令の結果はその命令を待ついずれかのリザベーションステーションユニット２１０Ａ〜２１０Ｆに直接渡され、同時にその結果はリオーダバッファ２１６を更新するよう渡される（この技術は一般に、「結果前送り（result forwarding）」と称される）。要求されるオペランドのいずれかの値が利用可能となった後に、命令が機能ユニットに発行されて実行される。すなわち、もしリザベーションステーションユニット２１０Ａ〜２１０Ｆのうち１つ内の未決の命令に関連するオペランドに、リオーダバッファ２１６内の先行する結果値の場所のタグが付けられており、これがその要求されるオペランドを修正する命令に対応している場合には、その命令は、その先行する命令に対するオペランド結果が得られるまで、対応の機能ユニット２１２には発行されない。したがって、命令が実行される順序は、オリジナルのプログラム命令のシーケンスの順序と同じでない場合があり得る。リオーダバッファ２１６は、リードアフタライト依存が生じる状況においても、データの一貫性が確実に保たれるようにする。
一実施例においては、機能ユニット２１２の各々は、加算および減算の整数算術演算および、シフト、回転、論理演算、ならびに分岐演算を実行するよう構成される。但し、浮動小数点演算に対処するために浮動小数点ユニット（図示せず）もまた用いられてもよい。
機能ユニット２１２の各々はまた、条件付き分岐命令の実行に関する情報を分岐予測ユニット２２０に提供する。もし分岐予測が正しくない場合、分岐予測ユニット２２０は誤予測された分岐に続いて命令処理パイプラインに入った命令をフラッシュして、プリフェッチ／プリデコードユニット２０２が命令キャッシュ２０４またはメインメモリから必要な命令をフェッチするようにする。但し、このような状況においては、オリジナルのプログラムシーケンス内の命令であって誤予測された分岐命令の後に生じる結果は、投機的に実行されてロード／ストアユニット２２２およびリオーダバッファ２１６内に一時的にストアされた結果を含め、廃棄される。最適な分岐予測メカニズムの構成例は周知である。
機能ユニット２１２によって生成された結果は、レジスタ値が更新されていればリオーダバッファ２１６に送られ、メモリ場所の内容が変更されていればロード／ストアユニット２２２に送られる。もしその結果がレジスタ内にストアされるべきである場合には、リオーダバッファ２１６はその命令がデコードされた際にレジスタの値に対してリザーブされていた場所にその結果をストアする。結果は、上述のように、未決の命令が、要求されるオペランド値を得るために先行する命令実行の結果を待っている場合には、リザベーションステーションユニット２１０Ａ〜２１０Ｆにも送られる。
一般的に、ロード／ストアユニット２２２は機能ユニット２１２Ａ〜２１２Ｆとデータキャッシュ２２４との間にインターフェイスを提供する。一実施例においては、ロード／ストアユニット２２２は未決のロードまたはストオのためのデータおよびアドレス情報に対して１６個の記憶場所を備えたロード／ストアバッファを有して構成される。デコードユニット２０８は、ロード／ストアユニット２２２へのアクセスを調停する。バッファが一杯である（full）場合、デコードユニットはロード／ストアユニット２２２に未決のロードまたはストア要求情報のための空きができるまで待たなければならない。機能ユニット２１２はロード／ストアユニット２２２に対してロード／ストア命令ならびに関連するアドレスおよびデータ情報を提供する。ロード／ストアユニット２２２は、データキャッシュ２２４にアクセスして、非投機的ロード／ストア命令がキャッシュをミスした際にデータキャッシュ２２４がメインメモリからラインをフェッチするようにすることによって、ロード／ストア命令を実行する。ロード／ストアユニット２２２はロード命令に必要なデータをリオーダバッファ２１６に、および、そのデータを待っているであろうリザベーションステーション２１０に戻す。ストアデータはロード／ストアユニット２２２によってデータキャッシュ２２４内にストアされる。ロード／ストアユニット２２２はまた、未決のストア命令に対するロード命令の依存性のチェックを行なって、確実にデータの一貫性が保たれるようにする。
データキャッシュ２２４は、ロード／ストアユニット２２２とメインメモリサブシステムとの間で転送されるデータを一時的にストアするよう提供される、高速のキャッシュメモリである。一実施例においては、データキャッシュ２２４は３２本のバイトラインを有する８個のウェイのセットアソシアティブ構造内に最高で３２キロバイトのデータをストアする容量を有する。但し、データキャッシュ２２４は、セットアソシアティブ構成を含む、さまざまな具体的なメモリ構成で実現することが可能である。
ここで図２に移って、本発明の一実施例を用いるロード／ストアユニット２２２のいくつかの重要な構成要素を描いた図が示される。ロード／ストアユニット２２２は、機能ユニット２１２に結合されてロード／ストア命令、アドレスおよびデータ情報を提供するための入力バス２５０を有する。入力バス２５０は、情報をロード／ストアバッファ２５１に伝達する。ロード／ストアバッファ２５１は、未処理のロード／ストア命令に関連する情報をストアする。リクエストバス２５３は、出力制御回路２５５の制御下、マルチプレクサ回路２５４によって選択されたとおり、データキャッシュ２２４にロード／ストア要求を伝達する。データキャッシュから戻るのがヒット／ウェイバス２５６であって、これはロード／ストアバッファ２５１に結合される。ヒット／ウェイバス５６上で、ロード／ストアユニット２２２はデータキャッシュ２２４のヒット／ミス情報およびウェイ値を受取る。データキャッシュ２２４において、ヒットはリクエストバス２５３上で伝達されたリクエストについて検出される。リオーダバッファ２１６からのクリア信号ライン２５７は、ロード／ストアバッファ２５１に関連する回路を制御するよう結合される。
通常、ロード／ストアユニット２２２はロードまたはストアメモリリクエストを選択して、リクエストバス２５３上でデータキャッシュ２２４に伝送する。関連するバッファ記憶場所内の「チェックされたビット」は、現時点におけるリクエストがデータキャッシュ２２４をヒットする場合にセットされる。チェックされたビットは、その命令が有効であってクリア信号ライン２５７にクリア信号がアサートされない限り、セットされたままである。また、現時点におけるリクエストアドレスがヒットするウェイを示すデータキャッシュ２２４からのウェイ値は、ウェイフィールド内の関連するバッファ記憶場所内にストアされる。現時点のリクエストに関連するキャッシュ情報で現時点のリクエストのロード／ストアバッファ記憶場所を更新するのは、以下の３つの目的のためである。すなわち：１）データキャッシュをミスするロード命令を、そのミス情報で更新する、２）ストア命令を、書込がその間に発生する第２のサイクルアクセスのためのヒットおよびウェイで更新する、および３）「ロード-op-ストア」命令の一部分であるストア命令を、関連するロード命令のウェイおよびヒット値で更新する。これにより、そのストアがデータキャッシュ２２４への１回のみのアクセスで実行できるようになる。
ロード-op-ストア命令は、メモリ場所をソースおよびターゲットの双方として使用する、ｘ８６命令である。換言すれば、ロード-op-ストア命令のオペランドのうち１つはメモリ場所であって、ロード-op-ストア命令の結果は、そのメモリ場所内に記憶される。ロード-op-ストア命令は、スーパースカラマイクロプロセッサ２００上で実行される際には、ロードおよびストア命令の双方としてロード／ストアユニット２２２にディスパッチされる。ここで、同じリオーダバッファタグがそれら双方に関連する。ロードおよびストア命令は、ロード／ストアバッファ２５１内の同じ記憶場所に記憶される。キャッシュのヒットおよびウェイ情報が、ロード-op-ストア命令のロード部分が実行される際にそのストア部分のために記録され、通常の２クロックサイクルストアアクセスの第１のクロックサイクルを排除することが可能となる。ロード-op-ストア命令のロード部分の実行とストア部分の実行との間のクロックサイクルにおいて、関連するデータキャッシュラインがそのデータキャッシュ内にストアされたままであることが重要である。この機能は、以下により詳細に説明するロックビットの使用によって実現される。
図２の実施例に示されるように、ロード／ストアバッファ２５１は、ロード／ストア命令に関連する。リオーダバッファタグ（図２においてはＴＡＧフィールドと示される）と、チェックされたビット（Ｃフィールド）と、ウェイフィールド（Ｗフィールド）とを含む、記憶場所の線形アレイである。一実施例においては、ロード／ストアバッファ２５１は１６個の記憶場所で構成される。他の情報は各ロード／ストアバッファエントリ内に記憶されるが、これは以下により詳細に説明する。論理回路のブロックは各記憶場所に関連し、チェックされたビットを各クロックサイクルで更新する。
１エントリに関連する論理回路の実施例を、ＡＮＤゲート２５８、２５９および２６１、ならびにＯＲゲート２６０として図２に示す。ロード／ストアバッファ２５１内の各記憶場所について、同様の回路が作成される。ＡＮＤゲート２６１はリクエストバス２５３上のリクエストのバッファエントリをデコードする。もしこのバッファエントリが論理回路のこのグループに関連するバッファエントリと合致する場合、これは更新が可能である。ＡＮＤゲート２６１の出力は、エントリが更新可能である場合にハイとなる。ＡＮＤゲート２５８は、ＡＮＤゲート２６１の出力およびキャッシュからのヒットビットを受ける。ＡＮＤゲート２５８はＯＲゲート２６０への入力のうち１つを形成し、これが記憶場所内のチェックされたビットをセットまたはクリアする。したがって、もしこのバッファエントリが現時点においてデータキャッシュ２２４にアクセスしておりかつそのアクセスがヒットする場合に、ＡＮＤゲート２５８（かつしたがってＯＲゲート２６０）の出力は論理１であり、チェックされたビットがセットされる。ＡＮＤゲート２５９は、チェックされたビットの現時点における状態およびリオーダバッファ２１６からのクリア信号ライン２５７を受ける。クリア信号ライン２５７上で伝達されるクリア信号は、命令のフローを予測された経路から変更されるような例外、分岐誤予測または他の事象が起きる度に、リオーダバッファ２１６によってアサートされる。この種の事象が起こった場合、ロード／ストアバッファ内の命令のうちいくつかをロード／ストアユニット２２２とリオーダバッファ２１６（図示せず）との間のメカニズムを介してキャンセルすることが必要となる場合がある。したがって、チェックされたビットは、ロックビットがデータキャッシュ２２４内でクリアされるために、ロード／ストアバッファ２５１内でクリアされる（以下に詳細に説明する）。ＡＮＤゲート２５９はこのような機能を提供する。チェックされたビットは、クリア信号がアサートされない限りセットされたままであるが、アサートされた場合にはチェックされたビットはクリアされる。
マルチプレクサ２５４および出力制御ユニット２５５は、所与のクロックサイクルにおいてデータキャッシュ２２４へのアクセス要求を選択するのに使用される。一実施例においては、最高２つのリクエストが各クロックサイクルで選択される。本実施例においては、出力制御ユニット２５５はロード／ストアバッファ２５１から動作を選択するのに、優先度方式を実行する。ここで、もはや投機的ではないストア命令および、もはや投機的ではなくかつデータキャッシュをミスしたロード命令には高い優先順位が与えられ、投機的であるロード命令には低い優先順位が与えられる。但し、マルチプレクサ回路２５４が、リクエストバス２５３上に転送されるリクエストを生成する複数のマルチプレクサ回路として実装されてもよい。リクエストバス２５３は、リクエストがロードタイプであれストアタイプであれそのリクエストに関連する少なくともアドレスと、ウェイ値と、チェックされたビットと、ストアリクエストのためのストアデータとを伝達する。データキャッシュ２２４は、チェックされたビットがセットされていれば、関連するウェイ値によって選択されかつリクエストアドレスによってインデックスされたキャッシュライン内にデータを記憶するよう構成される。もしチェックされたビットがセットされていない場合、データキャッシュ２２４はキャッシュのインデックスされたラインを読出して、そのリクエストアドレスに関してキャッシュヒットをチェックする。一実施例においては、ロード-op-ストアビットはロードリクエストに対して伝達される（これについては以下に説明する）。
ロード／ストアバッファ２５１は、実施例によってそのエントリの数が変化し得る。さらに、ロード／ストアバッファ２５１は、別個のロードバッファおよびストアバッファとして構成されてもよく、この場合にはロードバッファはすべてのロード命令を記憶しかつストアバッファはすべてのストア命令を記憶する。さらに、リクエストバス２５３上では１クロックサイクル当たり２つ以上のリクエストが転送されてもよい。
別の実施例においては、データキャッシュ２２４にアクセスするアドレスは、ロード／ストアバッファ２５１内に記憶されたアドレスと比較される。この実施例は、２サイクルアクセスを排除することが可能なストア命令がロード-op-ストア命令のストア部分ではなくともよいという点において、先の実施例よりもより一般的である。しかし、キャッシュのロッキングはより複雑である。アクセスされたキャッシュラインに関連するロックビットは、チェックされたビットがキャッシュアクセスによってセットされている場合にはセットされる必要がある。これは、ロードがロード-op-ストア命令の一部分であるという事実に基づいたロッキングとは異なる。この実施例では通常、アクセスがその間に行なわれるクロックサイクルに続くクロックサイクル内で、キャッシュラインがロックされる。
ここで図３に移って、ロード／ストアバッファ２５１の一実施例について、ロード／ストアバッファ記憶場所内のビットフィールドの図が示される。フィールド３００は、その記憶場所のためのリオーダバッファタグと、セットされている場合にその記憶場所が現時点において有効なロードまたはストア命令を記憶していることを示す有効ビットを含む。フィールド３０１は、機能ユニット２１２によって提供される、ロードまたはストア命令に関連するアドレスを記憶する。フィールド３０１にも有効ビットが含まれ、これはセットされている場合には、アドレスが有効であることを示す。出力制御ユニット２５５は、このアドレス有効ビットがセットされるまでデータキャッシュ２２４にアクセスするためのロード／ストア命令を選択することはない。フィールド３０２は、ストア命令に関連するデータおよび、セットされている場合にそのデータフィールドが有効であることを示す有効ビットを含む。ビット３０３は上述のチェックされたビットであって、フィールド３０４は上に記載したウェイフィールドである。ビット３０５は、セットされている場合にロード命令がロード-op-ストア命令のロード部分であることを示す、ロード命令のために使用されるビットである。このビットは、以下に説明するように、関連するキャッシュラインに対してロックビットをセットすべきかどうかを判定するのに使用される。但し、ロード／ストアユニット２２２の種々の実施例によって、他のビットが記憶場所に付加されてもよい。たとえば、命令がデータキャッシュミスであることを示すミスビット、および、命令がロード／ストアバッファ内の別の記憶場所に存在するストア命令に依存することを示す依存ビット等が付加されてもよい。
ここで図４Ａに移って、一実施例におけるデータキャッシュタグユニット内のビットフィールドの図が示される。タグエントリは、関連するキャッシュラインの状態を示す状態フィールド４０１を有して構成される。一実施例においては、状態フィールド４０１は２ビット幅であって、キャッシュラインのためのＭＥＳＩ状態をエンコードする。当業者には理解されるように、ＭＥＳＩ状態は、以下の状態をエンコードする。すなわち：修正されたまたは「汚損（dirty）」状態、この場合、キャッシュラインはメインメモリ内の関連するアドレスにストアされた内容に対して修正されており、したがって、そのキャッシュラインはデータキャッシュ２２４から取除かれる際にメインメモリへと書き戻されなければならない；排他状態、この場合、キャッシュラインはデータキャッシュ２２４内に記憶され、スーパースカラマイクロプロセッサ２００を有するシステム内に構成された他のスーパースカラマイクロプロセッサ内にそのキャッシュラインの他のコピーが存在することはない；共有状態、この場合、キャッシュラインはデータキャッシュ２２４内に記憶されており、そのキャッシュラインの他のコピーが、スーパースカラマイクロプロセッサ２００を有するシステム内に構成された他のスーパースカラマイクロプロセッサ内にストアされている可能性がある；および、無効状態、これは、関連するキャッシュラインが有効ではなくその中にストアされたバイトが使用されてはならないことを示す。
タグエントリのフィールド４０２は、エントリのタグを含む。上述のように、タグとは、メインメモリからのどのバイトがキャッシュライン内に記憶されているかを一意に識別するアドレスの部分である。一実施例においては、フィールド４０２は２０ビット幅であって、キャッシュライン内に記憶されたバイトに関連するアドレスの２０個の最上位ビットを含む。ビット４０３は上述のロックビットである。ビット４０３がセットされている場合、関連のキャッシュラインは、新しいキャッシュラインがメインメモリからフェッチされてもデータキャッシュ２２４から取除くことはできない。代わりにその行内の別のキャッシュラインが取除かれることになる。ロックビット４０３は、それに対応するロード-op-ストアビットセットを有するロード命令が関連のキャッシュラインにアクセスしてヒットすることがわかった際にセットされる。各タグエントリはロックビットを有して構成されているため、データキャッシュタグアレイ４０４は同時に複数のキャッシュラインについてロックを維持することが可能である。ロックビット４０３は、ストア命令が関連のキャッシュラインに実行される場合、または、クリア信号ライン２５７上で伝達されたクリア信号がリオーダバッファ２１６からアサートされた場合に、クリアされる（以下により詳細に説明する）。
特に注意を払うべきシナリオは、ロード-op-ストア命令のロード部分が、ロックビットがその中に既にセットされているキャッシュラインにアクセスする場合である。ロックビットがセットされているということは、先行するロード-op-ストア命令がそのロード部分でそのキャッシュラインにアクセスしたが、そのストア部分はまだ実行されていないことを示す。その先行するロード-op-ストア命令のストア部分がキャッシュラインにストアされると、上述のようにロックビットはクリアされる。したがって、ロックビットは、現時点におけるロード-op-ストア命令のストア部分がデータキャッシュ２２４にアクセスする前にクリアされ、関連するラインはキャッシュから取除くことが可能となる。ロード／ストアユニット２２２内の依存性チェックは、ロード部分がキャッシュにアクセスすることを防ぐ（図５〜７０に関連して以下により詳細に説明する）。ロードデータは代わりに、ロード／ストアバッファ２５１によって提供される。一実施例においては、チェックされたビットは関連のストア部分に対してセットされることはない。したがって、ロード-op-ストア命令のストア部分は、このシナリオを完成するのに２つのデータキャッシュアクセスを必要とする。別の実施例においては、チェックされたビットが関連のストア部分に対してセットされ、かつ、１ビットがそのストア命令のためにセットされる。これは、ロード部分のためのデータ、すなわち、それがデータキャッシュ２２４にアクセスする際にロックビットをリセットしてはならないことを示すデータを提供する。この実施例においては、双方のストアがキャッシュへの単一のアクセス内で完了する。
ここで図４Ｂに移って、データキャッシュ２２４に関連するデータキャッシュタグアレイ４０４がブロック図で示される。一実施例においては、データキャッシュ２２４はセットアソシアティブ方式の８つのウェイであり、したがって、データキャッシュタグアレイ４０４の各行が図４Ａに示した種類の８つのエントリを含む。キャッシュタグアレイ４０４はまた、クリア信号ライン２５７に結合され、それにより、クリア信号がアサートされるクロックサイクル中に、データキャッシュタグアレイ４０４内の各ロックビットがクリアされるようにする。クリア信号は、リオーダバッファ２１６がロード-op-ストア命令がキャンセルされたことを検出した際に、ロックビットがクリアされるようにする。キャンセルの理由は一例として、ロード-op-ストア命令に先立った分岐命令の分岐誤予測、および、ロード-op-ストア命令に先立った命令に関連する例外、等を含む。このようなキャンセルは、１クロックサイクル内で、ロード-op-ストア命令のロード部分の実行とその命令のストア部分との間に生じ得る。もし、ロックビットがロード-op-ストア命令によってセットされ、その命令が後にキャンセルされた場合、ロックビットがクリアされなければ、そのラインはデータキャッシュ２２４内にいつまでも残ったままとなる（これは、ロックビットをクリアするようストア命令がそのラインにストアされることがないためである）。したがって、ロード-op-ストア命令のロード部分の実行の後にその命令がキャンセルされた場合には、すべてのロックビットがクリアされる。上述のクリアが行われるときにキャンセルされなかったロード-op-ストア命令のストア部分がロード／ストアバッファ２５１（図２に示す）内に未だ存在する場合には、それらのストアはチェックされたビットがクリアされており（ＡＮＤゲート２５９と共に図２に示す）、その実行には２サイクルかかることになる。クリア信号がアサートされるようにする事象はスーパースカラマイクロプロセッサ内では比較的稀であり、したがって、殆どのロード-op-ストア命令は単一のサイクルストアの恩恵を被る。
なお、データキャッシュタグアレイ４０４は、データバイトを記憶するデータキャッシュアレイ２２４の一部として実装されてもよく、または、物理的に別個のアレイとして実装されてもよい。さらに、実施例によってデータキャッシュ２２４のアソシアティブ方式は異なる。データキャッシュ２２４がダイレクトマップ方式である実施例の場合、ロード／ストアバッファ２５１の記憶場所内のウェイフィールドは使用されない場合がある。
以上の開示に従って、スーパースカラマイクロプロセッサのためのロード／ストアユニットおよびデータキャッシュを説明した。ロード／ストアユニットとデータキャッシュとの組合せは、ロード-op-ストア命令のストア部分がデータキャッシュへの単一クロックサイクルのアクセスで実行することができるようにする。これは、ストアによって典型的に関連のキャッシュラインをサーチするためにおよびデータをストアするためにそれぞれ使用される、２つのクロックサイクルとは対照的である。したがって、殆どのロード-op-ストア命令から１データキャッシュアクセスサイクルを取除くことによって、より高い性能が達成されるようになる。
以上の開示が完全に理解されれば、当業者には種々の変形および修正例が明らかとなろう。以下の請求の範囲は、そのようなすべての修正例および変形例を包含するものと解釈されたい。
【図１】
0003824657.tif 000003
【図２】
0003824657.tif 000004
【図３】
0003824657.tif 000005
【図４Ａ】
0003824657.tif 000006
【図４Ｂ】
0003824657.tif 000007