(57)【要約】  装置２が、宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス回路１５を有する。タグ保護されたメモリ・アクセス動作は、宛先アドレスに関連付けられたアドレス・タグ４０を、宛先アドレスによって識別された、アドレス指定された位置４４を含む１つ又は複数のメモリ位置のブロック３０に関連してメモリ・システム１６〜１８に記憶されたガード・タグ３２と比較するステップと、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成するステップとを含む。命令デコーダ６は、メモリ・アクセスをトリガして、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられたガード・タグを更新するようにメモリ・アクセス回路１５を制御するために複数ガード・タグ設定命令を復号する。
2021511565.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス回路であって、前記タグ保護されたメモリ・アクセス動作が、
前記宛先アドレスに関連付けられたアドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較すること、及び
前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかの指示を生成することを含む、メモリ・アクセス回路と、
少なくとも１つのメモリ・アクセスをトリガして、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられた前記ガード・タグを更新するように前記メモリ・アクセス回路を制御するために複数ガード・タグ設定命令を復号する命令デコーダとを備える、装置。
【請求項２】
前記タグ保護されたメモリ・アクセス動作が、前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかに応じて前記アドレス指定された位置へのメモリ・アクセスが許可されるかどうかを制御するステップを含む、請求項１に記載の装置。
【請求項３】
前記タグ保護されたメモリ・アクセス動作が、前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかにかかわらず前記アドレス指定された位置へのメモリ・アクセスを実施するステップを含む、請求項１に記載の装置。
【請求項４】
前記タグ保護されたメモリ・アクセス動作が、前記ガード・タグと前記アドレス・タグとの不一致が検出されたときに障害状態をシグナリングするステップを含む、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
前記タグ保護されたメモリ動作において、前記メモリ・アクセス回路が、前記宛先アドレスの１つ又は複数の選択されたビットの関数として前記アドレス・タグを決定するように構成される、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記タグ保護されたメモリ・アクセス動作において、前記メモリ・アクセス回路が、前記アドレス・タグから独立した前記アドレス指定された位置を選択するように構成される、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
長さレジスタを識別する前記複数ガード・タグ設定命令のレジスタ長指定バリアントに応答して、前記命令デコーダが、
前記長さレジスタに記憶された長さパラメータによって識別されるブロックの最大数以下の所与の数の連続したブロックに関連付けられた前記ガード・タグを更新するべく、前記メモリ・アクセス回路を、及び
前記長さレジスタに記憶された前記長さパラメータを前記所与の数に比例した量だけデクリメントするべく、処理回路を
制御するように構成される、請求項１から６までのいずれか一項に記載の装置。
【請求項８】
即値パラメータを識別する前記複数ガード・タグ設定命令の即値長指定バリアントに応答して、前記命令デコーダが、前記即値パラメータによって指定された、いくつかの連続したブロックに関連付けられた前記ガード・タグを更新するべく前記メモリ・アクセス回路を制御するように構成される、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
前記複数ガード・タグ設定命令が、前記少なくとも２つの連続したブロックを識別するタグ更新宛先アドレスを指定する、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
前記少なくとも２つの連続したブロックが、前記タグ更新宛先アドレスによって識別されたメモリ位置を含んだ前記ブロックと、１つ又は複数のメモリ位置の少なくとも１つの後続のブロックとを含む、請求項９に記載の装置。
【請求項１１】
前記複数ガード・タグ設定命令が、前記少なくとも２つの連続したブロックを識別するタグ更新宛先アドレスを決定するアドレス決定値を記憶するためのアドレス・レジスタを指定し、
前記複数ガード・タグ設定命令に応答して、前記命令デコーダが、前記ガード・タグが前記複数ガード・タグ設定命令に応答して更新されるメモリ位置のブロックの数に対応するオフセットだけ前記アドレス・レジスタに記憶された前記アドレス決定値をインクリメント又はデクリメントするべく処理回路を制御するように構成される、請求項９又は１０に記載の装置。
【請求項１２】
前記複数ガード・タグ設定命令に応答して、前記命令デコーダが、メモリ・アクセスをトリガして、前記少なくとも２つの連続したブロックに関連付けられた前記ガード・タグを、前記タグ更新宛先アドレスの１つ又は複数の選択されたビットの関数として決定される、更新されたタグ値に更新するべく前記メモリ・アクセス回路を制御するように構成される、請求項９から１１までのいずれか一項に記載の装置。
【請求項１３】
前記複数ガード・タグ設定命令に応答して、前記命令デコーダが、メモリ・アクセスをトリガして、前記少なくとも２つの連続したブロックに関連付けられた前記ガード・タグを、前記タグ更新宛先アドレスから独立した前記複数ガード・タグ設定命令によって指定されたタグ値レジスタに記憶された値の関数として決定される、更新されたタグ値に更新するべく前記メモリ・アクセス回路を制御するように構成される、請求項７から９までのいずれか一項に記載の装置。
【請求項１４】
前記複数ガード・タグ設定命令のデータ・クリアリング・バリアントに応答して、前記命令デコーダが、１つ又は複数のメモリ位置の前記少なくとも２つの連続したブロックに記憶された前記データ値を、前記少なくとも２つの連続したブロックの前の内容に無相関のクリアされた値に設定するためにメモリ・アクセスをトリガするべく前記メモリ・アクセス回路を制御するように構成される、請求項１から１３のいずれか一項に記載の装置。
【請求項１５】
各クリアされた値が、
所定の値と、
ゼロと、
ランダム値と
のうちの１つを含む、請求項１４に記載の装置。
【請求項１６】
方法であって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するステップであって、前記タグ保護されたメモリ・アクセス動作が、
前記宛先アドレスに関連付けられたアドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかの指示を生成するステップ、を含む、実施するステップと、
複数ガード・タグ設定命令の復号に応答して、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられた前記ガード・タグを更新するために少なくとも１つのメモリ・アクセスをトリガするステップとを含む、方法。
【請求項１７】
目的プログラム・コードの命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するコンピュータ・プログラムであって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス・プログラム論理であって、前記タグ保護されたメモリ・アクセス動作が、
前記宛先アドレスに関連付けられたアドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかの指示を生成するステップを含む、メモリ・アクセス・プログラム論理と、
少なくとも１つのメモリ・アクセスをトリガして、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられた前記ガード・タグを更新するために前記目的プログラム・コードの複数ガード・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラム。
【請求項１８】
請求項１７に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。
【背景技術】
【０００２】
データ処理装置によって実行されるソフトウェアは、典型的には、高水準プログラミング言語で書き、次いで、ソフトウェアが実行されることになっている装置によってサポートされる命令セット・アーキテクチャに従ってコードにコンパイルすることができる。例えば、ソフトウェアは、最初はＪａｖａ、Ｃ、Ｃ＋＋などのより高い水準の言語で書き、次いで、ｘ８６やＡｒｍ（Ｒ）などのネイティブにサポートされる命令セット・アーキテクチャにコンパイルすることができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【発明が解決しようとする課題】
【０００４】
Ｊａｖａなどのいくつかの、より高い水準のプログラミング言語は、それらがメモリ・アクセスに関連したあるエラーの有無をチェックするためのラン・タイム・エラー検出チェックを含むので、メモリ安全な言語であるとみなされる。対照的に、ＣやＣ＋＋などのメモリ安全でない言語は、そのようなラン・タイム・エラー・チェックを含まない。メモリ安全でない言語の使用が持続的に広がることは、所与の命令セット・アーキテクチャによるコンパイル済みコードに、攻撃者又は他の悪意のある当事者による利用に脆弱な恐れがある多数のメモリ関連エラーがある可能性があることを意味する。そのようなエラーは、
・  コードによって供給される配列の添え字が配列の正当な境界の外側にある、境界違反、
・  メモリ位置へのアクセスが、そのメモリ位置がすでに割当てを解除され又は解放されてしまった後に行われる、解放済みメモリ使用エラー、
・  関数内で使用された変数（スタック上の値などの）に関連付けられたアドレスへのメモリ・アクセスがすでに関数から復帰した後に行われる、復帰後の使用、
・  変数がそれらの宣言された範囲外でアクセスされる、範囲外使用エラー、及び
・  変数に関連付けられたメモリ・アドレスが、変数が初期化されてしまう前にアクセスされる、初期化前使用エラー
を含み得る。
【０００５】
これらは、結果として予測不可能な挙動となり、攻撃者が利用する手段を潜在的に提供することがあるメモリ関連エラーのほんのいくつかの実例に過ぎない。したがって、あるクラスのメモリ・エラーのラン・タイム検出を手助けするために、所与の処理装置によってサポートされる命令セット・アーキテクチャ内にアーキテクチャ・サポートを提供することが望ましい可能性がある。
【課題を解決するための手段】
【０００６】
少なくともいくつかの実例は、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス回路であって、
宛先アドレスに関連付けられたアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較すること、及び
ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成することを含む、タグ保護されたメモリ・アクセス動作と、
少なくとも１つのメモリ・アクセスをトリガして、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられたガード・タグを更新するようにメモリ・アクセス回路を制御するために複数ガード・タグ設定命令を復号する命令デコーダとを備える装置を提供する。
【０００７】
少なくともいくつかの実例は、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するステップであって、タグ保護されたメモリ・アクセス動作が、
宛先アドレスに関連付けられたアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成するステップとを含む、実施するステップと、
複数ガード・タグ設定命令の復号に応答して、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられたガード・タグを更新するために少なくとも１つのメモリ・アクセスをトリガするステップとを含む、方法を提供する。
【０００８】
少なくともいくつかの実例は、目的プログラム・コードの命令を実行するための命令実行環境を提供するためにホスト・データ処理装置を制御するコンピュータ・プログラムであって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス・プログラム論理であって、タグ保護されたメモリ・アクセス動作が、
宛先アドレスに関連付けられたアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成するステップを含む、メモリ・アクセス・プログラム論理と、
少なくとも１つのメモリ・アクセスをトリガして、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられたガード・タグを更新するために目的プログラム・コードの複数ガード・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラムを提供する。
【０００９】
記憶媒体が、上記に説明したコンピュータ・プログラムを記憶することができる。記憶媒体は非一時的記憶媒体でもよい。
【００１０】
本技法の他の態様、特徴及び利点は、添付の図面と併せて読まれるものとする、以下の実例の説明から明らかであろう。
【図面の簡単な説明】
【００１１】
【図１】データ処理装置の実例を概略的に示す図である。
【図２】アドレス・タグがガード・タグに一致するかどうかをチェックするステップを含む、タグ保護されたメモリ・アクセス動作の実例を示す図である。
【図３】タグ保護されたメモリ・アクセス動作を実施する方法を示す流れ図である。
【図４】複数ガード・タグ設定命令のレジスタ長指定バリアントを示す図である。
【図５】図４の命令を処理する方法を示す流れ図である。
【図６】異なる数のタグを更新する同じ複数ガード・タグ設定命令に応答する異なるマイクロアーキテクチャ実装形態の実例を示す図である。
【図７】いくつのタグがキャッシュ・ライン・アラインメントに基づいて更新されるのかを変動させる柔軟性を有するマイクロアーキテクチャの実例を示す図である。
【図８】複数ガード・タグ設定命令の即値長指定バリアントを示す図である。
【図９】図６の命令を処理する方法を示す流れ図である。
【図１０】更新されたタグ値が、タグ更新されたアドレスに別個のレジスタを使用して指定される、図４の命令の代替バリアントを示す図である。
【図１１】複数ガード・タグ設定命令のデータ・クリアリング・バリアントを示す図である。
【図１２】複数ガード・タグ設定命令をサポートするシミュレータの実例を示す図である。
【発明を実施するための形態】
【００１２】
上記に論じた種類の、あるメモリ使用エラーに対して保護する１つの方式は、１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されるガード・タグを提供することである可能性がある。タグ保護されたメモリ・アクセス動作がメモリ・システムにおける特定のアドレス指定された位置を識別する宛先アドレスに基づいて要求されたとき、メモリ・アクセス回路は、宛先アドレスに関連付けられているアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されているガード・タグと比較することができる。メモリ・アクセス回路は、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成することができる。この指示は、メモリ・アクセスが成功するように許可されているのかどうか、又は後続の動作が成功することができるのかどうか、又はメモリ・アクセスが正常であるものとして継続することを許可しながら単に報告することができるのかどうかを制御するのに使用することができる。
【００１３】
これは、例えば、ＣやＣ＋＋などのメモリ安全でない言語に基づいてコードをコンパイルするコンパイラが、メモリの領域を初期化するとき、コードがアクセスすることが予想されるメモリのブロックのガード・タグを特定の値に設定するので有用であり得、対応するアドレス・タグ値をそれらのブロックを指し示す宛先アドレスに関連付けることができる。メモリ使用エラーが起きた場合、例えば、アドレス・ポインタが範囲外で使用され、又は初期化された有効範囲の境界の外に及ぶ場合、アドレス指定された位置に関連付けられたガード・タグは、宛先アドレスに関連付けられたアドレス・タグに一致しない可能性がありそうである場合があり、次いで、この場合、一致が検出されたかどうかの指示は、いくつかのエラー処理応答又はエラー報告機構をトリガするのに使用することができる。取られる特定の応答は、実行されるソフトウェアの特定の必要性に、又はアーキテクチャの特定のマイクロアーキテクチャ実装形態に依存することができる。したがって、高水準言語がメモリ・アクセス・エラーに対して保護するためにラン・タイム・エラー・チェックを実施する手段を有さなくても、コンパイル済みコードに使用されるＩＳＡは、そのようなチェックを実施するためのアーキテクチャの特徴を含むことができる。
【００１４】
しかし、そのようなガード・タグの使用は、メモリの特定のブロックに関連付けられているガード・タグを設定する際にいくつかのオーバーヘッドを伴う場合がある。メモリ位置のブロックに関連付けられたガード・タグを設定するプロセスは、ガード・タグを設定することに関連付けられた任意の遅延が、実施される現実のソフトウェア機能の後続の処理を遅延させる場合もあるので、相対的に高速である必要がある場合がある。以下に論じる装置は、少なくとも１つのメモリ・アクセスをトリガして、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに関連付けられたガード・タグを更新するようにメモリ・アクセス制御回路を制御するために複数ガード・タグ設定命令を復号する命令デコーダを有する。メモリ位置の連続したブロックの範囲に関連付けられたガード・タグが、例えば、メモリの領域を初期化すると同時に、同じタグ値に設定されるのは相対的に一般的である可能性がある。単一の命令に応答して、メモリ・ブロックの範囲全体に関連付けられたガード・タグを更新することを必要とする１つ又は複数のメモリ・アクセスをトリガすることができる複数ガード・タグ設定命令を提供することによって、これはタグの設定を加速し、したがって、性能を改善することができる。また、より少ない命令を有するよりきついループがメモリの所与の領域に対してタグの設定を制御することができるので、この命令はコード密度を低減するのに役立ち、メモリに及び任意のキャッシュに命令を記憶するのに、より少ない空間を必要とする。
【００１５】
ガード・タグとアドレス・タグとの一致が検出されたかどうかの、生成された指示の特定の形態は、実装形態によって異なる場合がある。場合によっては、タグ保護されたメモリ・アクセス動作は、アドレス指定された位置へのメモリ・アクセスが、ガード・タグとアドレス・タグとの一致が検出されたかどうかに応じて許可されるかどうかを制御するステップを含むことができる。しかし、他の実例において、タグ保護されたメモリ・アクセスは、ガード・タグとアドレス・タグとの一致が検出されたかどうかにかかわらず、アドレス指定された位置へのメモリ・アクセスを実施するステップを含むことができる。例えば、メモリ位置の所与のブロックに関連付けられたガード・タグは、メモリ・システム内のメモリ位置の異なるブロックに記憶することができ、したがって、ガード・タグにアクセスするステップは、別個の読取り動作を必要とする可能性がある。したがって、ガード・タグとアドレス・タグとが比較されてしまうまでメモリ・アクセスが遅延される場合、それは実際のメモリ・アクセスの処理を遅延させる場合があり、したがって、ガード・タグが利用可能である前に、及びガード・タグとアドレス・タグとの任意の一致が検出されたかどうかにかかわらず、アドレス指定された位置へのメモリ・アクセスを実施し、次いで、ガード・タグが取得され、アドレス・タグと比較されると、一致が検出されたかどうかの別個の指示を生成することが望ましい場合がある。
【００１６】
１つの実例において、一致が検出されたかどうかの指示は、ガード・タグとアドレス・タグとの不一致が検出されたとき生成される障害状態を表す信号でもよい。例えば、メモリ・アクセス回路は、アクセス許可に違反した場合、又はマッピングされていないアドレスにアクセスした場合に生成される障害と同様のメモリ障害をシグナリングすることができ、或いは異なる種類の障害状態を指示することができる。障害信号は、検出された障害に応答するために処理回路をトリガして、例外処理ルーチンを実行することができる。
【００１７】
代替案として、状態指示は、装置の処理回路にアクセス可能な制御レジスタ内に記録して、ガード・タグとアドレス・タグとの比較において一致又は不一致が検出されたどうかを指示することができる。次いで、状態情報は、メモリ・アクセスが有効であったかどうかをチェックするために、後続の命令によって読み取ることができる。
【００１８】
アドレス・タグとガード・タグとが一致したのかどうか、又は不一致であったのかどうかを報告する別の選択肢は、コードの実行された部分に関連付けられたエラー・ログに情報を記録することであり得、それはコードの部分の全体を通して検出された任意のガード・タグ・エラーを追跡する。例えば、不一致のガード・タグとアドレス・タグとに応答して、不一致をトリガした宛先アドレス、又は不一致のメモリ・アクセスをトリガした命令の命令アドレスをエラー・ログに記録することができる。この場合、コードの動作を妨げる任意の具体的な処置を実施するのではなく、エラーを単純にエラー・ログに記録することができる。次いでエラー・ログは、後続のソフトウェアのバージョンにおけるエラーを除去することでプロバイダを手助けするためにコードのソフトウェア・プロバイダに利用可能にすることができる。
【００１９】
したがって、ガード・タグの一致／不一致の指示をメモリ・アクセス回路によって生成することができる、様々なやり方があることが理解されよう。
【００２０】
いくつかの実施例において、対応するガード・タグを有するメモリ位置のブロックは、それぞれ単一のメモリ位置を含むことができる。この場合、各個々のメモリ位置は、異なるガード・タグを有することができ、それは、より大きな範囲のメモリ・エラーを検出することができるようにガード・タグを設定する微細な粒度を提供することができる。
【００２１】
しかし、実際には、各アドレス指定された位置に対して個々のガード・タグを設定するオーバーヘッドは、高すぎる場合があり、各ガード・タグを複数のメモリ位置のブロックに関連付けることが、より効率的であることがある。この場合、いくつかの隣接したメモリ位置は、同じガード・タグを共有することができ、それは、メモリ関連エラーの一般的な形態を検出するのには十分であり得る。
【００２２】
メモリ位置の所与のブロックに関連付けられているガード・タグは、メモリ・システム内の任意の他のメモリ位置において記憶することができる。メモリ・システムにおけるガード・タグの位置が選択される特定のやり方は、実装形態によって又はラン・タイムにおいて大幅に異なる場合がある。いくつかの実例において、ガード・タグを記憶する位置は、処理回路によってアーキテクチャ的にアクセス可能であり得、すなわち、ガード・タグ記憶位置は、アドレス指定された位置と同じアドレス空間の一部にマッピングされた位置でもよい。この場合、アドレス指定された位置それ自体と、対応するタグ記憶位置のアドレスとの間のマッピングは、固定し又は配線で接続することができ、又は変数であり得、例えば、メモリ・アクセス回路によって維持される追跡テーブルにおいて、又はトランスレーション・ルックアサイド・バッファにおいて追跡することができる。代替案として、他の実装形態は、所与のアドレス指定された位置に関連付けられたガード・タグを、処理回路にアーキテクチャ的にアクセス可能ではない、他の記憶位置、例えば、処理回路によって実行される命令によってアドレス指定することができるアドレス空間にマッピングされないマイクロアーキテクチャに用意された追加の記憶装置に記憶することができる。この場合、メモリ・アクセス回路は、アドレス指定された位置のアドレスに基づいて、対応するタグ記憶位置を参照するのに使用される特定の内部アドレスを決定し、タグ・データをタグ記憶位置から読み取るのに必要とされる任意の追加のメモリ・アクセスをトリガすることができる。タグ記憶位置が処理回路にアーキテクチャ的にアクセス可能であるかどうかにかかわらず、タグ値は、より高速のアクセスのためにキャッシュ内で、データ値に使用される同じキャッシュ内か、又は専用タグ・キャッシュにおいてかのいずれかでキャッシュすることもできる。
【００２３】
場合によっては、ガード・タグは、相対的に小さくてもよく、例えば、４又は８ビットでもよく、したがって、それぞれメモリ位置の異なるブロックに関連付けられた複数のガード・タグは、同じメモリ位置内に収まることができる。したがって、複数のガード・タグを複数ガード・タグ設定命令に応答して更新することができるが、場合によっては、複数のガード・タグは、それらが、すべて、メモリ・アクセス回路による単一の書込み動作によって書き込むことができる、単一の位置内に記憶される場合、単一のメモリ・アクセスにおいて更新することができる。代替案として、他の実装形態は、複数の独立した書込みをトリガして、複数ガード・タグ設定命令に応答して設定されるガード・タグの異なるサブセットを設定することを必要とする場合がある。したがって、命令が、ガード・タグを設定するために単一のメモリ・アクセス又は複数のメモリ・アクセスのいずれかをトリガすることができることが可能である。
【００２４】
アドレス・タグは、異なるやり方で宛先アドレスに関連付けることができる。場合によっては、アドレス・タグは、例えば、タグ保護されたメモリ・アクセス動作をトリガする、タグ保護されたメモリ・アクセス命令によって指定された別個のレジスタを使用して、宛先アドレスとは別個に指定することができる。しかし、他の実例において、アドレス・タグは、宛先アドレスの１つ又は複数の選択されたビットの関数として決定することができる。すなわち、アドレス・タグは、宛先アドレスそれ自体の一部分から導き出された情報を含むことができる。しばしば、命令セット・アーキテクチャが、あるビット数（例えば、６４ビット）を有するアドレスをサポートすることができるが、所与のハードウェア・デバイスは、実際にはそのビット数を使用して表すことができるすべての可能なアドレスをそれが使用するだけのメモリ容量を必要としない可能性がある。例えば、デバイス使用における現在の傾向の場合、２６４の個々のアドレス指定可能な位置を提供する必要性はまだ何もない。したがって、しばしば、メモリ・アドレスのいくつかのビットは、効果的に未使用にする可能性があり、常に同じ値を有するか、又は最上位の「実」アドレス・ビットの符号拡張として設定されるかのいずれかである可能性がある（したがって、未使用部分はすべて０又はすべて１に設定される）。したがって、この未使用部分は、アドレスがレジスタ間で操作され、又はレジスタ間を移動するとき、アドレス・タグを当然アドレスと一緒に輸送することができるので、アドレス・タグ又はアドレス・タグを導き出すための値を表すために、アドレス・タグを取得するために別個のレジスタにアクセスすることを必要とすることを回避するために、また、アドレスと、対応するアドレス・タグとの一致を追跡することをより容易にするために、再使用することができる。
【００２５】
アドレス・タグを決定するために宛先アドレスの一部分を使用する実施例において、このアドレス・タグは、宛先アドレスによって識別された、アドレス指定された位置からの情報がキャッシュ内に記憶されたかどうかを決定するためにキャッシュによって使用することができる宛先アドレスのタグ部分と異なることに留意されたい。多くのキャッシング・スキームは、キャッシュ内のそのデータと並行してキャッシュされたデータの部分のアドレスのタグ部分を記憶することができ、したがって、キャッシュされたデータが、必要とされるアドレスに実際に対応するかどうかを決定するために、所与のアドレスがないかキャッシュを検索すると同時に、アドレスの一部を、キャッシュされたデータと並行して記憶されたタグと比較することができる。しかし、この場合、キャッシュ内のタグと比較されるアドレスのタグ部分は、データが必要とされる特定のアドレス指定された位置を実際に識別するアドレスの一部分の一部であり、すなわち、アドレスのキャッシュ・タグ部分を変更することは、当然、結果としてメモリ・システム内の異なるアドレス指定された位置を指し示すアドレスとなる。対照的に、タグ保護されたメモリ動作に使用されるアドレス・タグの場合、メモリ・アクセス回路は、アドレス・タグから独立してデータが必要とされるアドレス指定された位置を選択することができる。すなわち、アドレス・タグが異なる値を有する場合でも、宛先アドレスによって参照されるアドレス指定された位置は、アドレス指定された位置の選択が宛先アドレスの他の部分だけに依存するので、依然として同じである可能性がある。これにより、コンパイラが、特定のアドレスに関連付けられたアドレス・タグを、メモリ・システム内のデータの関連ブロックに割り当てられた、対応するガード・タグ値に一致する任意の値に設定する自由が得られる。また、キャッシュの場合、タグ値の記憶装置をキャッシュ内にタグ付けすることは、キャッシュ・コントローラによって制御することができ、命令デコーダによって復号されるタグ設定命令によって明確に命令されなくてもよく、典型的には、所与のアドレス指定された位置へのメモリ・アクセスに応答して、単一のキャッシュ・タグだけが新たな値に設定されることを必要とする（所与のアドレス指定された位置に関連付けられたデータをキャッシュするのに使用されるキャッシュ・エントリに関連付けられたキャッシュ・タグ）。対照的に、複数ガード・タグ設定命令の場合、命令デコーダは、メモリ内の異なるアドレス指定された位置に関連付けられた複数のガード・タグの設定を命令するための具体的な命令をサポートする。
【００２６】
いくつかの実装形態において、命令デコーダは、メモリ・アクセス命令の別個のタグ保護されていない及びタグ保護されたバリアントをサポートすることができる。この場合、タグ保護されたメモリ・アクセス動作は、メモリ・アクセス命令のタグ保護されたバリアントに応答してトリガすることができる。対照的に、タグ保護されていないメモリ・アクセス命令は、単純に、ガード・タグを取得することを必要とせずに、又はアドレス・タグとガード・タグとの任意の比較を実施することを必要とせずに、その命令によって指定された宛先アドレスによって識別された、アドレス指定された位置へのアクセスをトリガすることができる。
【００２７】
しかし、他の実装形態において、すべてのメモリ・アクセスは、タグ保護されたメモリ・アクセスであるとみなすことができる。したがって、場合によっては、任意のメモリ・アクセス命令は、上記に論じたように、タグ保護されたメモリ・アクセス動作を実施するために、メモリ・アクセス回路をトリガするとみなすことができる。
【００２８】
しかし、たとえすべてのメモリ・アクセス命令がタグ保護されたメモリ・アクセス命令と解釈されたとしても、命令セット・アーキテクチャがある動作に対するガード・タグ比較を選択的に無効にすることをサポートすることができる他のやり方が依然としてある可能性がある。例えば、処理装置の制御レジスタ内の制御パラメータが、タグ比較を選択的に無効にすることができる。別の選択肢は、アドレス・タグのある値を特別なやり方で解釈し、したがって、アドレス・タグがガード・タグの任意の可能な値に対して一致するとみなすはずであることをそれらが示し、この場合も、タグ比較の効果を効果的に無効にし、したがって、アドレス・タグがガード・タグに一致するかどうかにかかわらず、エラーが何も報告されないことである。
【００２９】
複数ガード・タグ設定命令は、異なるやり方で実装することができる。１つの特定の有用なバリアントは、長さレジスタを識別する、複数ガード・タグ設定命令のレジスタ長指定バリアントを提供することである。このバリアントに応答して、命令デコーダは、長さレジスタに記憶された長さパラメータによって識別されたブロックの最大数以下の所与の数の連続したブロックに関連付けられたガード・タグを更新するべくメモリ・アクセス回路を制御し、長さレジスタに記憶された長さパラメータを所与の数に比例した量だけデクリメントするべく処理回路を制御することができる。したがって、ガード・タグが更新されることになっているブロックの絶対数を指定するのではなく、長さレジスタは、対応するガード・タグが命令に応答して更新されることが許可されているブロックの最大数を指定する。所与の数の連続したブロック（それに対して、ガード・タグが更新されることになっている）として選択された特定の数は、実装形態ごとに選択することができ、又はラン・タイムにおいて変動することができる。これはマイクロアーキテクチャ設計における柔軟性を提供するのに有用であることができるが、依然として同じシーケンスの命令が様々なマイクロアーキテクチャ間の予想されるアーキテクチャ挙動を用いて実行されることを可能にする。したがって、実装形態に依存しないソフトウェア・ルーチンを、命令のレジスタ長指定バリアントを使用して実行することができ、実装形態が特定の粒度のタグ設定を決定することが可能になる。
【００３０】
この複数ガード・タグ設定命令の形態は、単一の命令に応答してメモリの広範な領域に対するすべての更新動作を実施することにメモリ・アクセス回路をコミットすることは望ましくない場合があるので、極めて有用であることができる。例えば、多数の異なるガード・タグを更新するためにメモリ・アクセスがコミットされた場合、これは、他の動作を処理するための資源をブロックすることがあり、メモリ・アクセス動作を順序付けして、効率を改善することをより困難にすることがある。したがって、マイクロアーキテクチャ設計者によっては、いくつのガード・タグを１つの命令によって更新することができるかということを抑制することを好む可能性がある。１つの命令に応答して許可されるガード・タグ更新の数は、実装形態によって異なる場合がある。例えば、異なる実装形態は、メモリ・システムに異なるキャッシュ・ライン・サイズを実装することができる。より大きなキャッシュ・ライン・サイズを有する実装形態は、より小さなキャッシュ・ライン・サイズを使用する実装形態よりも多くの数のガード・タグを１つの命令に応答して設定することができる可能性がある。また、特定のマイクロアーキテクチャ実装形態内でも、時には、１つの命令に応答して効率的に設定することができるガード・タグの数は、キャッシュ・ライン内の宛先アドレスの相対位置に依存する可能性がある。例えば、キャッシュ・ライン境界にアラインされたメモリ・アクセスを実施することは、より効率的であることができ、したがって、更新されるタグ値がキャッシュ・ラインの途中で開始した場合、次のキャッシュ・ラインに続くのではなく、キャッシュ・ラインの終わりまでに及ぶガード・タグを更新だけすることは、より効率的である可能性があり、したがって、複数ガード・タグ設定命令の後続のインスタンスは、次いで、アラインされたアドレスから開始し、メモリ・アクセスをより効率的にすることができる。
【００３１】
したがって、いくつかの理由から、いくつのメモリ位置のブロックがそれらのガード・タグを複数ガード・タグ設定命令に応答して更新させるのかということを変更する柔軟性をメモリ・アクセス回路に与えることは有用である可能性がある。長さレジスタにおける長さパラメータによって指定されたブロックの最大数は、更新を抑制し、したがって、ガード・タグは、ガード・タグが設定されることを必要とする範囲の終わりを超えて更新されない。命令が処理回路をトリガして、ガード・タグが更新された所与の数のブロックに基づいて長さパラメータをデクリメントするので、これは、複数ガード・タグ設定命令を含む命令のループが、ガード・タグが長さレジスタにおいて更新されることになっている必要な数のブロックを最初に指定するように定義することができ、次いで、ループは、複数ガード・タグ設定命令の複数のインスタンスを反復することができることを意味し、各反復は、タグが更新されてしまったブロックの数に比例した量だけ長さパラメータをデクリメントし、長さパラメータがゼロまでデクリメントされてしまうと、ループを終了させることができ、その時点において、必要な数のタグが設定されている。これにより、いくつのブロックが実際に与えられ、単一のインスタンス命令に応答してガード・タグ値として更新されたかにかかわらず、まったく同じループが様々な異なるマイクロアーキテクチャにより実行することが可能になる。
【００３２】
いくつかの実例において、長さパラメータは、タグが更新されることになっている正確な数のブロックを指定することができる。この場合、長さパラメータがデクリメントされる量は、所与の数それ自体に等しい可能性がある。
【００３３】
代替案として、いくつかの実装形態において、長さパラメータがデクリメントされる量は、ガード・タグが更新されるブロックの数よりも大きいか又はそれよりも小さいが、ガード・タグが更新されるブロックの数に比例することができる。
【００３４】
例えば、いくつかの実装形態では、長さパラメータは、ガード・タグが設定されることになっているメモリのバイト数として指定することができる。マイクロアーキテクチャは、長さパラメータにおいて定義された最大以下の特定のバイト数を選択し、選択されたメモリのバイト数にガード・タグを設定することができる。各ガード・タグがメモリの複数のバイトに対応することができるので、これは、長さパラメータがデクリメントされる量が、命令に応答して更新されるタグの数に比例するが、それよりも大きい可能性があることを意味することができる。
【００３５】
他の実例において、長さパラメータは、いくつかの基本粒度のブロックの倍数を単位として長さパラメータを定義することができる。この場合、長さパラメータは、ブロックのいくつの倍数が更新されることになるかを指定することができ、したがって、長さパラメータがデクリメントされる量は、実際に更新されるガード・タグの数に比例するが、それ未満であることができる。例えば、いくつかのマイクロアーキテクチャでは、１つのガード・メモリ位置に収まるガード・タグの数、又は１つのデータ・メモリ位置に関連付けられるガード・タグの数の粒度でガード・タグを更新することがより効率的であり得る。この場合、長さパラメータに必要なビット数を低減するために、長さパラメータは、ガード・タグの絶対数ではなく、対応するタグが更新されることになっているデータ／ガード・メモリ位置の数を実際に指定することができる。したがって、タグ設定命令は、ガード・タグが更新されることが許可される基本粒度に対応するガード・タグの数によって割られた更新されたガード・タグの数に対応する量だけデクリメントされるように長さパラメータをトリガすることができる。
【００３６】
それにもかかわらず、レジスタ長指定バリアントは異なるマイクロアーキテクチャをサポートする、極めて柔軟なアーキテクチャを提供することができるが、他の実例において、複数ガード・タグ設定命令の即値長指定バリアントを提供することができ、その場合、命令のコード化において指定された即値パラメータが、メモリ・システムのいくつのブロックが、更新されたガード・タグ値を与えられることになっているのかを識別する。即値長指定バリアントに応答して、命令デコーダは、即値パラメータによって指定された連続したブロックの数に関連付けられたガード・タグを更新するようにメモリ・アクセス回路を制御することができる。したがって、この場合、マイクロアーキテクチャは、いくつのブロックがそれらのガード・ブロックを更新させることになっているのかにおいて選択の余地がない可能性があるが、即値パラメータによって示されたガード・タグの数を単純に更新することができる。
【００３７】
ガード・タグが更新されることになっているブロックの絶対数を示す長さレジスタを指定するレジスタ・ベースのバリアントを提供することも可能であり、それは、即値長指定バリアントと同様のやり方で挙動することができ、したがって、レジスタ内の長さパラメータは、上記に論じたレジスタ長指定バリアントと同様に、ブロックの最大数ではなく、タグが更新されることになっているブロックの正確な数を指定することができる。
【００３８】
複数ガード・タグ設定命令は、ガード・タグが更新されることになっているメモリの連続したブロックを識別するタグ更新宛先アドレスを指定することができる。概して、複数ガード・タグ設定命令によって目標とされる少なくとも２つの連続したブロックは、タグ更新宛先アドレスによって実際に識別されるメモリ位置と、タグ更新宛先アドレスによって識別されたメモリ位置に連続するメモリ位置の少なくとも１つの後続ブロックとを含むことができる。複数ガード・タグ設定命令によってトリガされた１つ又は複数のメモリ・アクセスは、タグ更新宛先アドレスそれ自体に対する又はタグ更新宛先アドレスによって識別されたメモリ位置に続く後続のメモリ位置のブロックに対する書込みではないことに留意されたい。代わりに、複数ガード・タグ設定命令によってトリガされた１つ又は複数のメモリ書込みは、タグ更新アドレスによって識別されたメモリの連続したブロックに対応するガード・タグが記憶される記憶位置を目標とすることができる。
【００３９】
複数ガード・タグ設定命令は、タグ更新宛先アドレスを定義するためにアドレス・レジスタを使用することができる。アドレス・レジスタは、ガード・タグが更新されることになっている少なくとも２つの連続したブロックを識別するタグ更新宛先アドレスを決定するアドレス決定値を記憶することができる。例えば、アドレス・レジスタは、タグ更新宛先アドレスに対応する絶対アドレスを指定することができ、又はタグ更新宛先アドレスを取得するためにベース・アドレスに追加されることになっているオフセットを指定することができる。ベース・アドレスは、別個のレジスタにおいて指定することができ、又は黙示的であることができ、例えば、いくつかの命令のバリアントは、プログラム・カウンタ相対アドレス指定を使用することができ、したがって、ベース・アドレスは、プログラム実行中に到達した現在のアドレスを示すプログラム・カウンタを含むことができる。
【００４０】
概して、複数ガード・タグ設定命令に応答して、上記に論じたレジスタ長指定バリアント又は即値長指定バリアントが使用されるかどうかにかかわらず、命令デコーダは、ガード・タグが複数ガード・タグ設定命令に応答して更新されるメモリ位置におけるブロックの数に対応するオフセットによってアドレス・レジスタに記憶されたアドレス決定値をインクリメント又はデクリメントするように処理回路を制御することができる。これは、複数ガード・タグ設定命令がループ内に提供されたとき、アドレス・レジスタが、ガード・タグが更新されたメモリ位置の最後のブロックの後の次のアドレスを指し示すように自動的に更新され、したがって、アドレス・レジスタを操作するための追加の命令を含む必要がないことを意味する。これはコード密度及び性能を改善するのに役立つ。命令のループは、最下位アドレスから最上位アドレスまで（毎回、アドレス・レジスタ内のアドレスをオフセットだけインクリメントする）又は最上位アドレスから最下位アドレスまで（毎回、アドレスをオフセットだけデクリメントする）所与のメモリ領域を横断することができる。
【００４１】
ガード・タグを更新するのに使用される更新されたタグ値は、異なるやり方で複数ガード・タグ設定命令から導き出すことができる。場合によっては、更新されたタグ値は、タグ保護されたメモリ・アクセスのアドレス・タグを宛先アドレスの一部分内に表すことができるやり方と同様のやり方でタグ更新宛先アドレスの１つ又は複数の選択されたビットを使用して表すことができる。したがって、いくつかの実例において、複数ガード・タグ設定命令に応答して、命令デコーダは、メモリ・アクセスをトリガして、少なくとも２つの連続したブロックに関連付けられたガード・タグを、タグ更新宛先アドレスの１つ又は複数の選択されたビットの関数として決定される更新されたタグ値に更新するようにメモリ・アクセス回路を制御することができる。
【００４２】
代替案として、いくつかの命令の形態は、タグ更新宛先アドレスを識別するのに使用される任意のレジスタと別個の、更新されたタグ値を識別するタグ値レジスタを指定することができる。この場合、複数ガード・タグ設定命令に応答して、命令デコーダは、メモリ・アクセスをトリガして、少なくとも２つの連続したブロックに関連付けられたガード・タグを、タグ更新宛先アドレスから独立した複数ガード・タグ設定命令によって指定されたタグ値レジスタに記憶された値の関数として決定される、更新されたタグ値に更新するべくメモリ・アクセス回路を制御することができる。
【００４３】
これらの２つの方式のどちらが採用されるのかは、複数ガード・タグ設定命令内のコード化オーバーヘッドと、更新されたタグ値を所与の命令に対して設定する際の予想オーバーヘッドとの得失評価に基づいて決定することができる。更新宛先アドレス内の更新されたガード・タグを表す最初の方式は、命令コード化内に他のレジスタ識別子を提供する必要性を回避し、他の目的に利用可能なより多くのコード化空間を残すことができ、それは、コード化空間がしばしば命令セット・アーキテクチャ内で貴重であるので有用であり得る。他方、更新されたタグ値が別個のタグ値レジスタに記憶された場合、これにより、コード密度を低減することがある、複数ガード・タグ設定命令を実行する前に、別個の命令が所望の更新されたタグ値をタグ更新宛先アドレスの一部分に書き込む必要性が回避される。両方の選択肢を使用することができる。
【００４４】
複数ガード・タグ設定命令のデータ・クリアリング・バリアントを提供することもできる。このバリアントに応答して、命令デコーダは、１つ又は複数のメモリ位置の少なくとも２つの連続したブロックに記憶されたデータ値を、クリアされた値に設定するためにメモリ・アクセスもトリガするように、更新されたガード・タグを設定することに加えて、メモリ・アクセス回路を制御することができる。クリアされた値は、データ値の前の値に無相関である任意の値でもよい。例えば、クリアされた値は、ゼロなどの所定の値、又はランダムに生成された値であり得る。これは、しばしば、ガード・タグ設定がメモリのブロックを初期化するプロセスの一部として実施することができるので有用であることがあり、同時に、初期化されたメモリのブロックの内容をある所定の値にクリアして、引き続いて実行されたコードに可視であるそのアドレス空間の領域に前に記憶されたデータを回避することも所望される場合がある。複数ガード・タグ設定命令のデータ・クリアリング・バリアントを提供することによって、これにより、ガード・タグ設定とデータ・クリアリングを、両方とも、単一の命令に応答して実施することができるので、データをクリアするもうひとつの命令を実行する必要性が回避される。上記に説明した複数ガード・タグ設定命令の種類のいずれかには、追加のデータ・クリアリング・バリアントも提供することができ、したがって、複数ガード・タグ設定命令の同じ形態の非データ・クリアリング・バリアントとデータ・クリアリング・バリアントの両方を提供することができる。代替案として、いくつかの実装形態において、すべての複数ガード・タグ設定命令バリアントは、当然、データ・クリアリング・バリアントであり得、したがって、いくつかの実装形態は、複数のガード及びタグ設定命令の任意の非データ・クリアリング・バリアントをサポートしない可能性がある。
【００４５】
上記に説明した複数ガード・タグ設定命令のバリアントのすべては、そのパラメータの少なくともいくつかの値（レジスタ指定パラメータ又は即値パラメータのいずれか）に対して、メモリ・アクセス回路をトリガして、少なくとも２つの連続したメモリ位置のブロックに関連付けられたガード・タグを更新することができる命令であってもよい。しかし、同じ種類の命令は、パラメータの他の値に対して、単一のガード・タグだけの更新をトリガすることができ、又はいくつかのインスタンスにおいて、任意のガード・タグへの更新はまったくトリガしないことができる。例えば、レジスタ長指定バリアントの長さレジスタにおいて指定された長さパラメータがゼロである場合、命令は、任意のガード・タグを更新されるようにトリガしない可能性がある。同様に、長さパラメータが１を指定した場合、命令に応答して更新されるガード・タグの最大数は１でもよい。したがって、いくつかの命令オペコードは、命令によって指定されたパラメータに応じて、複数ガード・タグ設定命令として機能するときもあり、また、単一のガード・タグ設定命令として機能するときもあることが理解されよう。概して、上記に説明した複数ガード・タグ設定命令は、そのパラメータの少なくともいくつかの値に対して、メモリ位置の２つ以上の連続したブロックをトリガして、それらのガード・タグを更新された値に設定させることができる任意の命令でもよい。
【００４６】
複数ガード・タグ設定命令又は上記に論じた種類に加えて、命令デコーダ及び処理回路によってサポートされる命令セット・アーキテクチャは、単一のガード・タグ設定命令も含むことができ、それに応答して、命令デコーダは、単一のメモリ位置のブロックに関連付けられたガード・タグを、更新された値に設定するようにメモリ・アクセス回路を制御する。例えば、単一のガード・タグ設定命令は、複数ガード・タグ設定命令と異なるオペコードを有することができ、メモリ・アクセス回路をトリガして、１つよりも多くのガード・タグを更新することができない可能性がある。
【００４７】
図１は、データ処理装置２の実例を概略的に示す。これは、単純に装置の構成要素のサブセットの高水準表現であり、装置は、例示していない他の多くの構成要素を含むことができることが理解されよう。装置２は、命令デコーダ６によって復号された命令に応答してデータ処理を実施する処理回路４を備える。命令デコーダ６は、命令によって表された対応する処理動作を実施するように処理回路４を制御する制御信号１０を生成するために命令キャッシュ８から取り出された命令を復号する。処理回路４は、レジスタ１４に記憶された値に対して演算を実施して、レジスタに書き戻される結果値を生成する１つ又は複数の実行ユニットを含むことができる。例えば、実行ユニットは、算術演算又は論理演算を実行する算術演算／論理演算装置（ＡＬＵ）、浮動小数点オペランドを使用して動作を実行する浮動小数点ユニット及び／又は複数の独立したデータ要素を含むオペランドに対してベクトル演算を実施するベクトル処理ユニットを含むことができる。処理回路は、レジスタ１４とメモリ・システムとの間のデータの転送を制御するメモリ・アクセス・ユニット（又はロード／ストア・ユニット）１５も含む。この実例において、メモリ・システムは、命令キャッシュ８と、レベル１データ・キャッシュ１６と、データと命令との間で共有されるレベル２キャッシュ１７と、メイン・メモリ１８とを含む。他のキャッシュ階層も可能であり、これはほんの１つの実例に過ぎないことが理解されよう。メモリ管理ユニット（ＭＭＵ：ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）２０が、ロード／ストア・ユニット１５によってトリガされたメモリ・アクセスをサポートするアドレス変換機能を提供するために設けられる。メモリ管理ユニット（ＭＭＵ）は、メモリ・システム１６、１７、１８に記憶されたページ・テーブルからエントリのサブセットをキャッシュするトランスレーション・ルックアサイド・バッファ（ＴＬＢ）２２を有する。各ページ・テーブル・エントリは、対応するアドレスのページのアドレス変換マッピングを提供することができ、ページが読取り専用領域なのかどうか、又は読取り可能及び書込み可能の両方であるのかどうかを指定するアクセス許可、又はどの特権レベルがページにアクセスできるのかを指定するアクセス許可などのアクセス制御パラメータを指定することもできる。
【００４８】
図２は、タグ保護されたメモリ・アクセスの概念を概略的に示す。メモリ・システム内のメモリ位置を参照するのに使用される物理アドレス空間は、それぞれ、ある数のアドレス指定可能な位置を含むいくつかのブロック３０に論理的に分割することができる。簡潔にするために、図２の実例において、各ブロック３０は、４つのメモリ位置を含むが、他のブロック・サイズも使用することができる。各ブロック３０は、対応するガード・タグ３２に関連付けられる。ある数のブロック３０に関連付けられたガード・タグは、物理アドレス空間内の異なる、アーキテクチャ的にアクセス可能なメモリ位置３４内か、又はアーキテクチャ的にアクセス可能でない（同じ物理アドレス空間にマッピングされない）メイン・メモリ１８に設けられた追加の記憶位置内のいずれかに集め、記憶することができる。別個の非アーキテクチャ的にアクセス可能な記憶装置の使用は、場合によっては、ガード・タグ値をキャッシュするためのデータ・キャッシュ１６、１７における空間を使い尽くすことを回避するのに好ましいことがあるが、それは、通常のコードの性能に影響を与えることがあり、コヒーレンス管理をより複雑にすることがある。追加のタグ・キャッシュ１９は、タグがメイン・メモリ１８からアクセスされなければならない場合よりも高速にアクセスするために、非アーキテクチャ的にアクセス可能な記憶装置からのタグ値をキャッシュするためにマイクロアーキテクチャに設けることができる。どのタグ記憶位置３４が各ブロック３０に対応するかの特定のマッピングは、ロード／ストア・ユニット１５によって制御することができ、及び配線で接続することができ、又はプログラム可能であることができる。図２において、各タグ３２は物理アドレスのブロックに関連付けられる一方、仮想メモリ・アドレス空間における仮想メモリ位置に関連付けられたガード・タグ３２を設けることも可能であるが、これは各メモリ・アクセスに対していくつかの追加のアドレス変換を必要とする場合がある。したがって、ガード・タグ３２を物理メモリ位置に関連付けることによって、これは性能を改善することができる。概して、ガード・タグ３２を物理アドレス空間の対応するブロック３０に正確にどのように関連付けられるのかは特定のマイクロアーキテクチャ実装形態の選択である。概して、必要なのは所与のメモリのブロックに関連付けられたガード・タグ３２にアクセスし、それを比較することができることだけである。
【００４９】
したがって、タグ保護されたメモリ・アクセスが必要とされるとき、アドレス・タグ４０（アクセスされるアドレス指定された位置４４を識別する宛先アドレス４２に関連付けられる）は、アドレス指定された位置４４を含むメモリ位置のブロック３０に関連付けられるガード・タグ３２に対して比較される。例えば、図２において、宛先アドレス４２は、図２のアドレス空間において４４と記された、メモリ内のある位置Ｂ１を指し示す。したがって、位置Ｂ１を含む位置Ｂのブロックに関連付けられるガード・タグＢは、宛先アドレス４２に関連付けられたアドレス・タグ４０に対して比較される。図２の最上部に示すように、アドレス・タグ４は、宛先アドレスそれ自体の選択されたビットの関数として決定することができる。具体的には、アドレス・タグは、アドレス指定された位置４４として選択されることになっている具体的なメモリ位置を示すために未使用である宛先アドレスの一部分内のビットから決定することができる。例えば、いくつかのアーキテクチャにおいて、宛先アドレスのビットの最上部分は、符号拡張などのある固定値（すべて０又はすべて１）を常に有することができ、したがって、アドレスは、これらの未使用ビットを任意のタグ値で上書きすることによって、アドレス・タグ４０でタグ付けすることができる。特定のアドレス・タグ値は、例えば、プログラマ又はコンパイラによって選択することができる。アドレス・タグ及びガード・タグ３２は、相対的に少ないビット数、例えば、４ビットであることができ、したがって、メモリ内及び宛先アドレス内の大きな空間を占有しなくてもよい。タグ空間の４ビット、すなわち、タグの１６個の可能な値を提供することは、しばしば、多くの共通の種類のメモリ・アクセス・エラーを検出するのに十分であり得る。
【００５０】
したがって、タグ保護されたメモリ・アクセスが実施されたとき、ロード／ストア・ユニット１５は、アドレス・タグ４０と、アドレス指定された位置４４を含むブロック３０に関連付けられたガード・タグ３２とを比較し、それらが一致するかどうかを決定する。ロード／ストア・ユニット１５は、アドレス・タグ４０とガード・タグ３２とが一致したかどうかを示す一致指示を生成する。例えば、この一致指示は、アドレス・タグ４０とガード・タグ３２との不一致がある場合生成される障害信号６０であり得、又は一致があったかどうか、又はエラーが検出されたアドレス及び／又はエラーをトリガした命令の命令アドレスを示すエラー・レポートに追加されたエントリがあったどうかを示す状態レジスタに配置された指示であり得る。
【００５１】
図３は、タグ保護されたメモリ・アクセスを処理する流れ図を示す。メモリ・アクセスをトリガする命令は、アドレス・タグ及び宛先アドレスを指定することができる。図２に示すように、場合によっては、アドレス・タグは、実際には、宛先アドレスそれ自体のビットのサブセットから導き出すことができるが、他の実例において、それは別個のレジスタに指定することができる。ステップ５０において、タグ保護されたメモリ・アクセスをトリガする命令に直面される。それに応答して、ステップ５２において、メモリ・アクセス回路１５が、宛先アドレスによって識別された、アドレス指定された位置４４へのメモリ・アクセスをトリガする。また、ステップ５４において、メモリ・アクセス回路１５が、宛先アドレスによって識別された、アドレス指定された位置４４を含むメモリ位置のブロック３０に関連してメモリ・システムに記憶されるガード・タグ３２を取得する。ステップ５６において、メモリ・アクセス回路１５が、アドレス・タグ４０を、ステップ５４において取得したガード・タグ３２と比較する。ステップ５８において、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示が、メモリ・アクセス回路１５によって生成される（例えば、上記に説明した指示を報告する一致／不一致の種類のいずれか）。任意の不一致を報告するのに使用される正確な指示は、実装形態によって異なる場合がある。
【００５２】
図４は、複数ガード・タグ設定命令のレジスタ長指定バリアントの実例を示す。命令は、そのパラメータとして、タグ更新宛先アドレス７０を指定するアドレス・レジスタＸｍを指定し、アドレス・レジスタＸｍは、アドレスのビットのサブセットを使用して指定された、更新されたタグ値７２も含む。命令は、命令に応答して更新されるブロックの最大数７４Ｎｍａｘを指定する長さレジスタＸｎも指定する。
【００５３】
図５は、図１の装置２による図４の命令の処理を示す流れ図である。ステップ８０において、複数ガード・タグ設定命令が、命令デコーダ６によって復号される。それに応答して、命令デコーダ６が、図５の後続のステップを実施するように処理回路４とロード／ストア・ユニット１５とを制御する制御信号を生成する。ステップ８２において、ロード／ストア・ユニット１５が、メモリ・システムがメモリ位置のＸブロックに関連付けられたガード・タグを、アドレス・レジスタＸｍから導き出された、更新されたタグ７２によって指定された、更新されたタグ値に設定するために少なくとも１つのメモリ・アクセスを実施するように要求する信号を生成する。更新されるブロックの数Ｘは、Ｎｍａｘ、長さレジスタＸｎに指定されたブロックの最大数７４以下の任意の数でもよい。Ｘの特定の値は、実装形態固有でもよい。すなわち、図４の命令を含む命令セット・アーキテクチャは、Ｘのどんな特定の値が選択される必要があるのかを指定しない。所与のプロセッサ実装形態は、その特定のマイクロアーキテクチャ実装形態に都合がよいＸの任意の値を自由に選択することができる。Ｘが２以上である場合、ガード・タグが更新されるメモリのＸブロック３０は、タグ更新宛先アドレス７０によって識別されるブロックと、タグ更新宛先アドレスによって識別されたブロックから連続して続くＸ−１後続のブロックとを含む。Ｘ＝１である場合、タグ更新宛先アドレスによって識別されたブロックだけが、そのガード・タグを更新させる。長さレジスタＸｎが、Ｎｍａｘ＝０を指定した場合起こり得るＸ＝０である場合、メモリのブロック３０はそれらの対応するガード・タグ３２を更新させない。
【００５４】
ステップ８４において、命令デコーダ６によって生成された制御信号が、アドレス・レジスタＸｍに指定されたタグ更新宛先アドレス７０を、メモリのＸブロックに対応するアドレス・オフセットだけインクリメントするように処理回路４を制御する。すなわち、アドレス・オフセットは、１つのメモリ・ブロック３０のサイズのＸ倍に対応することができ、その場合、ブロック・サイズは、ガード・タグ３２がメモリ位置に割り当てられる特定の粒度（実装形態依存パラメータとして選択することができる）に依存する。したがって、Ｘｍ’＝Ｘｍ＋Ｘ＊（ブロック・サイズ）である。他の実例において、レジスタＸｍにおけるアドレスは、Ｘ＊（ブロック・サイズ）だけデクリメントすることができる。
【００５５】
また、ステップ８６において、制御信号は、長さレジスタＸｎを、ガード・タグが命令に応答して更新されたブロックの数Ｘに比例した量だけデクリメントするように処理回路４を制御する。図６の実例において、Ｘｎ’＝Ｘｎ−Ｘである。
【００５６】
他の実例において、長さレジスタＸｎは、タグが更新されることになっている実際のブロックの最大数を表す代わりに、ブロックのいくつかのある倍数を単位として又はガード・タグが設定されることになっているアドレス範囲のサイズのバイト数を単位として長さを表すことができ、その場合、ＸｎはＸ未満又はＸ超だけデクリメントすることができる。例えば、タグを更新することができる基本粒度がＧである場合、長さレジスタＸｎは、更新されるＧタグの倍数の数を示す長さパラメータＮＧ、すなわち、Ｎｍａｘ＝ＮＧ＊Ｇを指定することができる。この場合、ステップ８２において、マイクロアーキテクチャ実装形態が、Ｇの倍数であるＸの値を選択することを抑制される可能性があり、ステップ８６において、長さパラメータＮＧは、Ｘの代わりにＸ／Ｇだけデクリメントすることができる。別の実例において、長さパラメータが、対応するガード・タグが更新されることになっているメモリの最大バイト数を示す最大値Ｂを指定し、各ガード・タグが、メモリ位置のＫバイトのブロックに関連付けられる場合、アドレス・レジスタは、Ｘｍ’＝Ｘｍ±Ｘにインクリメント／デクリメントすることができ、その場合、ＸはＢ以下のＫの倍数であり、長さレジスタＸｎは、Ｘｎ’＝Ｘｎ−（Ｘ＊Ｋ）にデクリメントすることができる。例えば、各タグがメモリの１６バイトに関連付けられており（Ｋ＝１６）、マイクロアーキテクチャが、例えば、命令のインスタンス当たり２つのタグ（Ｘ＝２）を更新することを選択した場合、長さパラメータｘ１＝１２８及び開始アドレスｘ２＝０ｘ８０００であるＳｅｔＴａｇＲａｎｇｅｘ１，［ｘ２］！は、処理回路をトリガして、２つのタグを設定し、次いで、ｘ１を１２８−２＊１６＝９６にデクリメントし、ｘ２を０ｘ８０２０にインクリメントすることができる。
【００５７】
図６は、所与のマイクロアーキテクチャ実装形態に使用されるタグ設定の特定の粒度にかかわらず、ソフトウェアが実装形態に依存しないルーチンを使用することが可能になるために、この命令の形態がどうして特に有用であり得るのかを示す。例えば、ループは、以下のように、実行されるコードにおいて定義することができる。
Ｘ０＝ベース・アドレス
Ｘ１＝長さ
ループ：
ＳｅｔＴａｇｓ［Ｘ０］！，Ｘ１
ＣＢＮＺ  Ｘ１，ループ；Ｘ１をゼロと比較し、そうでない場合は‘ループ’に分岐する
【００５８】
図６は、ベース・アドレスがアドレス＃ａとして、及び長さが７２に指定される実例を示す。このアーキテクチャの１つの可能性のあるプロセッサ実装形態は、１６バイトのキャッシュ・ラインを使用することができ、したがって、一実装形態において、各ガード・タグ３２が、４ビットを含む場合、３２のタグが単一のキャッシュ・ラインに記憶される空間がある。キャッシュ・ラインは、メモリ・システムによって１つの要求において読み取り／書き込むことができるメモリの単位である。しばしば、１つのキャッシュ・ラインの粒度で動作を実行することは、より効率的であることがある。したがって、実装形態１において、図４の複数ガード・タグ設定命令に応答して３２のタグを更新することは好ましい可能性がある。この場合、実装形態１に対して命令を実行することは、結果としてそれらのガード・タグを更新させるメモリの７２のうちの３２のブロックとなる可能性があり、したがって、Ｎｍａｘを提供するレジスタＸ１は７２−３２＝４０に低減され、レジスタＸ０におけるタグ更新宛先アドレスは、アドレス＃ａ＋３２＊（ブロック・サイズ）にインクリメントされ、したがって、それは、ここでブロック３２を指し示す。次いで、ループの次の反復は、最終ブロック７１がそのタグを更新させてしまうまで次の３２のメモリのブロックに対して新たなタグ値を設定するなどし、次いで、Ｘ１がゼロにデクリメントされたので、条件付き分岐命令ＣＢＮＺがループから出る。
【００５９】
対照的に、３２バイトのキャッシュ・ラインを使用する、異なるマイクロアーキテクチャ実装形態２では、６４のタグが１つのキャッシュ・ラインに収まることができ、この場合、タグ設定命令のインスタンス当たり、より多くのタグを更新することは好ましい可能性がある。この場合、命令の１つの実行は、６４のタグを設定することができ、すなわち、図５に示す所与の数Ｘは６４である。図６において、Ｎｍａｘは、ループの最初の反復で７２−６４＝８にデクリメントされ、アドレスは、アドレス＃ａ＋６４＊（ブロック・サイズ）においてブロック６４を指し示すように更新される。最終の８つのタグは、ループの２番目の反復に設定される。
【００６０】
他の実装形態の実例において、ガード・タグは、それらが保護しているデータに隣接したキャッシュに記憶することができる。例えば、所与のサイズのキャッシュ・ライン（例えば、６４バイトのキャッシュ・ライン）は、それぞれキャッシュ・ラインのある部分に対応するある数のガード・タグを用いて拡張することができる。例えば、各タグがキャッシュ・ラインの１６バイトに対応する場合、４４ビットのタグを各キャッシュ・ラインに関連付けることができる。この場合、そのようなマイクロアーキテクチャは、タグ設定命令のインスタンス当たり４つのガード・タグを設定することに限定することを選ぶことができる。この場合も、上記のループは、依然としてそのようなマイクロアーキテクチャに対して機能することができるが、図６に示す２つの実装形態に比較して、ガード・タグのすべてが設定されてしまうまでにループのより多くの反復を必要とする。
【００６１】
したがって、異なる実装形態は、１つの命令当たり異なる数のタグを設定することができるが、それにもかかわらず、同じプログラム・ループを実行することができる。いくつかの実装形態が、必要とされるタグを設定するのに他の実装形態よりも多くのループの反復を必要とする場合があるが、各実装形態は、最終的には、長さレジスタＸｍにおける値がゼロに低減されてしまうと、ループから分岐する。
【００６２】
図７は、マイクロアーキテクチャ実装形態に、異なる数のタグを更新する柔軟性を与えるのに有用である可能性がある別の理由を示す。供給されたアドレス＃ａのアラインメントに応じ、更新されるタグは、キャッシュ・ラインの途中から開始することができる。この場合、命令がキャッシュ・ラインの残りにおけるタグだけを更新することが好ましい可能性があり、したがって、次のループの反復は、キャッシュ・ライン境界にアラインされたタグを更新することを開始し、後続のアクセスをより効率的にすることができる。対照的に、命令に応答して常に同じ数のタグを更新する実装形態は、そのようなマイクロアーキテクチャ最適化を使用することができない。
【００６３】
図８は、更新されたタグ値７２にガード・タグが設定されることになっているメモリの範囲の長さを指定するために即値＃ｉｍｍを使用する複数ガード・タグ設定命令の代替形態を示す。タグ更新宛先アドレス７０及び更新されたタグ値７２は、依然として図４の場合と同じくアドレス・レジスタＸｍに指定することができるが、今度は、命令コード化に指定された即値＃ｉｍｍが、タグ値が更新されることになっているブロックの正確な数を示す絶対長さ指示Ｌを指定する。
【００６４】
図９は、図８に示すこの種類の命令の処理を制御する方法を示す流れ図を示す。ステップ１００において、命令デコーダ６は、図８に示すガード・タグ設定命令の即値長指定バリアントを復号する。それに応答して、命令デコーダが、ステップ１０２においてメモリ・アクセス回路１５を制御する制御信号を生成して、メモリ位置のＬブロックに関連付けられるガード・タグを、更新されたタグ値７２に設定する。この場合も、Ｌが２以上であるとき、Ｌブロックは、タグ更新宛先アドレス７０によって識別されたブロックを含み、Ｌ−１後続ブロックが、タグ更新宛先アドレスによって識別されたブロックから連続して後に続く。Ｌ＝１である場合、タグ更新宛先アドレスによって識別されたブロックに関連付けられたタグだけが更新される。Ｌ＝０である場合、ガード・タグは何も更新されない。ステップ１０４において、命令デコーダ６によって生成された制御信号が、アドレス・レジスタＸｍを更新して、アドレスを、Ｌブロックに対応するオフセットだけ、すなわち、Ｘｍ’＝Ｘｍ＋Ｌ＊（ブロック・サイズ）にインクリメントするように処理回路４も制御する。
【００６５】
図１０は、図４に示す命令の変形を示し、その場合、更新されたタグ値７２が、アドレス・レジスタＸｍに指定されるタグ更新アドレス７０と別個の第３のレジスタＸｔに指定される。そうでない場合、この命令の挙動は、図４及び５に示すものとまったく同じである。図８に示す即値指定命令の同様のバリアントを提供することができ、更新タグ値７２は、タグ更新アドレス７０から独立して指定されることが理解されよう。
【００６６】
図１１は、図４の命令のデータ・クリアリング・バリアントを示す。アドレス・レジスタＸｍ及び長さレジスタＸｎが、図４に示すものと同じパラメータを指定する。この命令に応答して、ステップ８０〜８６が、図５に示すものと同じやり方で実施される。しかし、命令のデータ・クリアリング・バリアントに応答して、追加のステップ８８が実施される。ステップ８８において、命令デコーダ６が、メモリのＸブロックにおけるデータ値を、それらのデータ値の前の値と無相関のクリアされた値に（例えば、０などの所定の値に、又はランダム値に）設定するために追加のメモリ・アクセスを生成するようにメモリ・アクセス回路１５を制御する。これにより、タグ設定命令に加えてデータ値をクリアする別個の命令の必要性が回避され、よりきついループ及びより小さいコード密度が可能になる。図１１は、図４に示す命令の形態に適用されたデータ・クリアリング・バリアントの実例を示すが、同様のデータ・クリアリング・バリアントを、上記に説明した、他の種類の複数のタグ設定命令のうちのいずれかに対して実装することもできる。
【００６７】
図１２は、使用される可能性があるシミュレータ実装形態を示す。先に説明した実施例は、該当する技法をサポートする具体的な処理ハードウェアを動作させる装置及び方法の観点から本発明を実装するが、コンピュータ・プログラムの使用を通じて実装される、本明細書に説明する実施例に従って命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、ハードウェア・アーキテクチャのソフトウェア・ベースの実装形態を提供する限りにおいて、しばしば、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムが、ダイナミック・バイナリ変換機を含めて、エミュレータ、仮想マシン、モデル、及びバイナリ変換機を含む。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム１２０を実行するホスト・プロセッサ１３０上で実行し、シミュレータ・プログラム１１０をサポートすることができる。いくつかの構成において、ハードウェア、用意された命令実行環境、及び／又は同じホスト・プロセッサ上に用意された複数の明確な命令実行環境の間に複数のシミュレーションの層がある可能性がある。歴史的に、強力なプロセッサが、妥当な速度で実行するシミュレータ実装形態を提供するのに必要とされてきたが、そのような方式は、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが所望されるときなど、ある状況において正当化される可能性がある。例えば、シミュレータ実装形態は、命令実行環境に、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を提供し、又は典型的には異なるハードウェア・アーキテクチャに関連付けられた命令実行環境を提供することができる。シミュレーションの概要は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に説明されている。
【００６８】
シミュレーションした実施例において、実施例が特定のハードウェアの構成又は特徴を参照してこれまで説明してきた限りでは、等価の機能を適切なソフトウェアの構成又は特徴によって提供することができる。例えば、特定の回路をコンピュータ・プログラム論理としてシミュレーションした実施例に実装することができる。同様に、レジスタやキャッシュなどのメモリ・ハードウェアをシミュレーションした実施例にソフトウェア・データ構成として実装することができる。これまでに説明した実施例において参照したハードウェア要素の１つ又は複数がホスト・ハードウェア（例えば、ホスト・プロセッサ１３０）上に存在する配置において、適切な場合、いくつかのシミュレーションした実施例がホスト・ハードウェアを利用することができる。
【００６９】
シミュレータ・プログラム１１０は、コンピュータ可読記憶媒体１１２（非一時的媒体でもよい）上に記憶することができ、プログラム・インターフェース（命令実行環境）を、シミュレータ・プログラム１１０によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである目的コード１００（アプリケーション、オペレーティング・システム及びハイパーバイザを含むことができる）に提供する。したがって、上記に説明した複数ガード・タグ設定命令を含めて目的コード１００のプログラム命令は、シミュレータ・プログラム１１０を使用して命令実行環境内から実行することができ、したがって、上記に論じた装置２のハードウェア上の特徴を実際には有さないホスト・コンピュータ１３０は、これらの特徴をエミュレートすることができる。例えば、シミュレータ・プログラム１１０は、目的コード１００の命令によってメモリへのアクセスを制御するメモリ・アクセス・プログラム論理１１４を含むことができる。例えば、メモリ・アクセス・プログラム論理１１４は、ガード・タグとアドレス・タグとの比較を実施し、ガード・タグとアドレス・タグとのいずれかの不一致が検出されたどうかを報告する命令を含むことができる。また、シミュレータ・プログラム１１０は、タグ設定プログラム論理１１６を含むことができ、タグ設定プログラム論理１１６は、目的コード１００に含まれる複数ガード・タグ設定命令に応答して、ハードウェア実施例がタグを設定するやり方に対応するやり方でガード・タグを設定するために１つ又は複数のメモリ・アクセスをトリガする命令を含む。シミュレータ方式において、複数ガード・タグ設定命令のレジスタ長指定バリアントに応答して設定されたタグＸの数は、シミュレータ・プログラム１１０によって選択することができる。
【００７０】
本出願においては、「ように構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ．．．）」という単語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するのに使用される。この文脈では、「構成（ｃｏｎｆｉｇｕｒａｔｉｏｎ）」は、ハードウェア又はソフトウェアの相互接続の配置又はやり方を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有することができ、又はプロセッサ若しくは他の処理デバイスは、機能を実施するようにプログラムすることができる。「ように構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ）」は、装置要素が、定義された動作を提供するために任意のやり方で変更される必要があることを意味しない。
【００７１】
本発明の例示的な実施例を添付の図面を参照して本明細書に詳細に説明してきたが、本発明がそれらの正確な実施例に限定されないこと、及び添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、本発明の様々な変更形態及び修正形態を当業者によって実施できることを理解されたい。
【図１】
2021511565.tif 000003
【図２】
2021511565.tif 000004
【図３】
2021511565.tif 000005
【図４】
2021511565.tif 000006
【図５】
2021511565.tif 000007
【図６】
2021511565.tif 000008
【図７】
2021511565.tif 000009
【図８】
2021511565.tif 000010
【図９】
2021511565.tif 000011
【図１０】
2021511565.tif 000012
【図１１】
2021511565.tif 000013
【図１２】
2021511565.tif 000014
【国際調査報告】
2021511565.tif 000015
2021511565.tif 000016