(57)【特許請求の範囲】
【請求項１】
装置であって、
それぞれがポインタを記憶する有界ポインタ記憶要素のセットであって、前記ポインタが前記ポインタを使用するときに許容されるアドレスの範囲を示す関連範囲情報をもつ、有界ポインタ記憶要素のセットと、
データ値を記憶するデータレジスタのセットと、
命令のシーケンスを実行する処理回路と、
現在命令コンテキストを記憶する制御記憶要素とを備え、
少なくとも第１の値のサブセット内にある、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の少なくとも１つの命令の実行に応答して、前記処理回路が、
前記現在命令コンテキストがデフォルト状態を特定しているときは、前記ポインタリファレンスを使用して、前記データレジスタのうち、そこに記憶されているデータ値が前記必要なポインタを形成するものを１つ特定し、
前記現在命令コンテキストが有界ポインタ状態を特定しているときは、前記ポインタリファレンスを使用して、前記有界ポインタ記憶要素のうち、そこに記憶されているポインタが前記必要なポインタを形成するものを１つ特定する、装置。
【請求項２】
前記処理回路が、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の前記少なくとも１つの命令の実行に応答して、前記必要なポインタからアドレスを決定するように、そして、前記現在命令コンテキストが前記有界ポインタ状態を特定しているときは、前記決定したアドレスが前記有界ポインタ記憶要素のうちの１つの前記関連範囲情報により示される前記許容アドレス範囲の中に収まるかチェックするために、境界チェック動作を行うようにさらに設計される、請求項１に記載の装置。
【請求項３】
前記現在命令コンテキストが前記デフォルト状態を特定しているときは、前記決定されたアドレスがデフォルトの許容アドレス範囲内にあるかチェックするデフォルトの境界チェック動作を行うように、前記処理回路が設計される、請求項２に記載の装置。
【請求項４】
前記デフォルトの許容アドレス範囲を示す範囲情報を記憶するデフォルト範囲記憶要素をさらに備える、請求項３に記載の装置。
【請求項５】
前記境界チェック動作を行うときに、前記処理回路が、すべてのデータ値が確実に前記許容アドレス範囲に入るように、前記決定したアドレスにあるアクセス対象のデータ値のサイズを考慮に入れる、請求項２から４のいずれかに記載の装置。
【請求項６】
前記処理回路が、前記シーケンス内の少なくとも１つのさらなる命令の実行に応答して、前記制御記憶要素に記憶されている前記現在命令コンテキストを更新する、
請求項１から５のいずれかに記載の装置。
【請求項７】
前記有界ポインタ記憶要素のうち少なくとも１つが、命令コンテキスト値を指定する飛び先命令コンテキストフィールドを含み、
前記少なくとも１つのさらなる命令が、指定された有界ポインタ記憶要素として前記有界ポインタ記憶要素のうち少なくとも１つを有する分岐命令であり、
前記処理回路が、前記分岐命令の実行に応答して、前記指定された有界ポインタ記憶要素から取得した前記命令コンテキスト値を前記制御記憶要素に記憶させることによって前記現在命令コンテキストを更新する、
請求項６に記載の装置。
【請求項８】
プログラムカウンタポインタであって、前記プログラムカウンタポインタから決定されるプログラムカウンタの許容範囲を示す関連範囲情報をもつプログラムカウンタポインタを記憶する有界プログラムカウンタ記憶要素をさらに含み、
前記処理回路がさらに、前記分岐命令の実行に応答して、前記指定された有界ポインタ記憶要素の前記ポインタおよび関連範囲情報を使用して、前記有界プログラムカウンタ記憶要素を更新する、
請求項７に記載の装置。
【請求項９】
前記デフォルト状態と前記有界ポインタ状態の間で切り替わることができるように、前記分岐命令が前記処理回路によって前記デフォルト状態と前記有界ポインタ状態の両方で実行される、請求項７または８に記載の装置。
【請求項１０】
前記有界ポインタ記憶要素のセットが、戻り先アドレスを特定するために使用されるポインタをもつ有界リンク記憶要素を含み、前記有界リンク記憶要素が戻り先命令コンテキストをさらに特定し、
前記分岐命令が前記有界リンク記憶要素を指定し、前記処理回路によって実行されて、以前の分岐から戻り、前記有界リンク記憶要素内に指定された前記戻り先命令コンテキストを前記制御記憶要素に記憶させることによって前記現在命令コンテキストを更新する、
請求項９に記載の装置。
【請求項１１】
前記少なくとも１つのさらなる命令が更新命令を含み、前記更新命令が前記現在命令コンテキストを更新するために、前記更新命令によって指定される更新値を前記制御記憶要素に書き込む、請求項６に記載の装置。
【請求項１２】
前記更新命令が前記データレジスタのうち１つを特定し、そこに記憶されているデータ値を使用して前記現在命令コンテキストが更新される、請求項１１に記載の装置。
【請求項１３】
前記更新命令が、前記命令コンテキストを更新するために使用されるイミディエート値を指定する、請求項１１に記載の装置。
【請求項１４】
必要なポインタのポインタリファレンスを指定する、前記シーケンス内の前記少なくとも１つの命令が、ロード命令とストア命令のうち少なくとも１つである、請求項１から１３のいずれかに記載の装置。
【請求項１５】
前記処理回路が命令セットからの命令を実行するように構成され、前記命令セットが、前記現在命令コンテキストに実行挙動が依存しない第１の命令サブセットと、前記現在命令コンテキストに実行挙動が依存する第２の命令サブセットとを含み、前記第２の命令サブセットが、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の前記少なくとも１つの命令を含む、請求項１から１４のいずれかに記載の装置。
【請求項１６】
前記命令セットが、必要なポインタのポインタリファレンスを指定する少なくとも１つの追加の命令を含み、前記少なくとも１つの追加の命令を実行すると、前記現在命令コンテキストが前記有界ポインタ状態と前記デフォルト状態のどちらを特定するかに関わりなく、前記処理回路が前記ポインタリファレンスを使用して、前記有界ポインタ記憶要素のうち、そこに記憶されたポインタが前記必要なポインタを形成するものを１つ特定するように設計される、請求項１５に記載の装置。
【請求項１７】
前記命令セットが、必要なポインタのポインタリファレンスを指定する少なくとも１つの逆状態挙動命令を含み、前記少なくとも１つの逆状態挙動命令を実行するとき、前記処理回路が、
前記現在命令コンテキストが有界ポインタ状態を特定しているときは、前記ポインタリファレンスを使用して、前記データレジスタのうち、そこに記憶されているデータ値が前記必要なポインタを形成するものを１つ特定し、
前記現在命令コンテキストがデフォルト状態を特定しているときは、前記ポインタリファレンスを使用して、前記有界ポインタ記憶要素のうち、そこに記憶されているポインタが前記必要なポインタを形成するものを１つ特定するように構成される、
請求項１５または１６に記載の装置。
【請求項１８】
前記有界ポインタ記憶要素のセットが、有界ポインタ記憶レジスタのセットを含む、請求項１から１７のいずれかに記載の装置。
【請求項１９】
前記有界ポインタ記憶要素のそれぞれが、前記ポインタおよび前記関連範囲情報を記憶するように構成される、請求項１から１８のいずれかに記載の装置。
【請求項２０】
対応する有界ポインタ記憶要素に記憶されている前記ポインタの前記関連範囲情報を記憶するための、さらに別の記憶要素を含む、請求項１から１８のいずれかに記載の装置。
【請求項２１】
前記範囲情報が、許容されるアドレスの下側境界および上側境界を特定する、請求項１から２０のいずれかに記載の装置。
【請求項２２】
前記範囲情報が、許容されるアドレス範囲の下側境界と上側境界のうち１つ、および許容されるアドレス範囲のサイズを特定する、請求項１から２０のいずれかに記載の装置。
【請求項２３】
前記処理回路が、前記シーケンス内の前記少なくとも１つの命令の実行に応答して、前記ポインタリファレンスの値に関わらず、
前記現在命令コンテキストが前記デフォルト状態を特定しているときは、前記ポインタリファレンスを使用して、前記データレジスタのうち、そこに記憶されているデータ値が前記必要なポインタを形成するものを１つ特定し、
前記現在命令コンテキストが前記有界ポインタ状態を特定しているときは、前記ポインタリファレンスを使用して、前記有界ポインタ記憶要素のうち、そこに記憶されているポインタが前記必要なポインタを形成するものを１つ特定する、
請求項１から２２のいずれかに記載の装置。
【請求項２４】
前記処理回路が前記シーケンス内の前記少なくとも１つの命令の実行に応答して、前記ポインタリファレンスが前記第１のサブセットとは異なる第２の値のサブセット内にある場合には、前記現在命令コンテキストが前記デフォルト状態と前記有界ポインタ状態のどちらを特定するかに関わらず、前記ポインタリファレンスを使用して、前記データレジスタのうち、そこに記憶されたデータが前記必要なポインタを形成するものを１つ特定する、請求項１から２２のいずれかに記載の装置。
【請求項２５】
前記制御記憶要素が、少なくとも１つのさらに別の現在命令コンテキストを記憶するように構成され、
前記処理回路が、前記少なくとも１つの命令により指定される前記ポインタリファレンスが前記第１の値のサブセット内にある場合は前記現在命令コンテキストを参照するように構成され、前記少なくとも１つの命令により指定される前記ポインタリファレンスが少なくとも１つのさらに別の値のサブセット内にある場合は前記少なくとも１つのさらに別の現在命令コンテキストを参照するように構成されて、
前記ポインタリファレンスを使用して、データレジスタまたは有界ポインタ記憶要素のどちらかが、前記ポインタリファレンスの値に応じた現在命令コンテキストに依存して特定されるようになる、
請求項１から２２のいずれかに記載の装置。
【請求項２６】
それぞれがポインタを記憶する有界ポインタ記憶要素のセットであって、前記ポインタが前記ポインタを使用するときに許容される関連範囲情報をもつ、有界ポインタ記憶要素のセットと、
それぞれがデータ値を記憶するデータレジスタのセットと
をもつ装置内で、命令実行挙動を制御する方法であって、
制御記憶要素に現在命令コンテキストを記憶するステップと、
少なくとも第１の値のサブセット内にある、必要なポインタのポインタリファレンスを指定する、少なくとも１つの命令を実行するときに、
前記現在命令コンテキストがデフォルト状態を特定しているときは、前記ポインタリファレンスを使用して、前記データレジスタのうち、そこに記憶されているデータ値が前記必要なポインタを形成するものを１つ特定するステップと、
前記現在命令コンテキストが有界ポインタ状態を特定しているときは、前記ポインタリファレンスを使用して、前記有界ポインタ記憶要素のうち、そこに記憶されているポインタが必要なポインタを形成する有界ポインタ記憶要素を１つ特定するステップとを含む、
方法。
【請求項２７】
装置であって、
それぞれがポインタを記憶する有界ポインタ記憶手段であって、前記ポインタが前記ポインタを使用するときに許容されるアドレスの範囲を示す関連範囲情報をもつ、有界ポインタ記憶手段のセットと、
データ値を記憶するためのデータレジスタ手段のセットと、
命令のシーケンスを実行するための処理手段と、
現在命令コンテキストを記憶するための制御記憶手段とを備え、
少なくとも第１の値のサブセット内にある、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の少なくとも１つの命令の実行に前記処理手段が応答して、
前記現在命令コンテキストがデフォルト状態を特定しているときは、前記ポインタリファレンスを使用して、前記データレジスタ手段のうち、そこに記憶されているデータ値が前記必要なポインタを形成するものを１つ特定し、
前記現在命令コンテキストが有界ポインタ状態を特定しているときは、前記ポインタリファレンスを使用して、前記有界ポインタ記憶手段のうち、そこに記憶されているポインタが前記必要なポインタを形成するものを１つ特定する、
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の技法はデータ処理の分野に関する。
【背景技術】
【０００２】
命令を実行するとき、ポインタを使用してメモリ内のアドレスを特定する一定の命令を実行することが知られている。そのような命令の例には、メモリ内のあるアドレスからあるレジスタへデータをロードするため、または、あるレジスタからメモリ内のあるアドレスへデータ値をストアするために使用されるロード命令とストア命令がある。そのようなロード命令とストア命令は、メモリアドレスを決定するために使用されるポインタ値を収容するレジスタを、汎用レジスタのセットの中から特定するように符号化することができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】『Ｃａｐａｂｉｌｉｔｙ  Ｈａｒｄｗａｒｅ  Ｅｎｈａｎｃｅｄ  ＲＩＳＣ  Ｉｎｓｔｒｕｃｔｉｏｎｓ：ＣＨＥＲＩ  Ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ』、ケンブリッジ大学コンピュータ研究所、Ｒ．Ｗａｔｓｏｎら、テクニカルレポート番号８５０、ＵＣＡＭ−ＣＬ−ＴＲ−８５０、ＩＳＳＮ  １４７６−２９８６
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ただし、いくつかのデータ処理装置では、有界ポインタの使用がサポートされていることがあり、その場合、ある特定のアドレスを示すポインタは、そのポインタに許容されるアドレスの範囲を示す範囲情報に関連付けられている。例えば、そのようなポインタは、「ファットポインタ」と呼ばれることがある。そのような有界ポインタを記憶するために、有界ポインタ記憶要素のセットが提供されることがある。汎用レジスタ内のデータ値を使用してポインタを提供する命令を実行する能力をサポートしながらも、そのような有界ポインタを使用して動作する命令を命令セットの中に提供することは有用であろう。
【課題を解決するための手段】
【０００５】
一構成例によれば、装置が提供され、この装置は、それぞれがポインタを記憶する有界ポインタ記憶要素のセットであって、前記ポインタが前記ポインタを使用するときに許容されるアドレスの範囲を示す関連範囲情報をもつ、有界ポインタ記憶要素のセットと、データ値を記憶するデータレジスタのセットと、命令のシーケンスを実行する処理回路と、現在命令コンテキストを記憶する制御記憶要素とを備えており、少なくとも第１の値のサブセット内にある、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の少なくとも１つの命令の実行に応答して、処理回路が、現在命令コンテキストがデフォルト状態を特定しているときは、そのポインタリファレンスを使用して、データレジスタのうち、そこに記憶されているデータ値が必要なポインタを形成するデータレジスタを１つ特定し、現在命令コンテキストが有界ポインタ状態を特定しているときは、そのポインタリファレンスを使用して、有界ポインタ記憶要素のうち、そこに記憶されているポインタが必要なポインタを形成する有界ポインタ記憶要素を１つ特定する。
【０００６】
別の構成例では、ある装置内で命令実行挙動を制御する方法が提供され、その装置は有界ポインタ記憶要素のセットと、データ値を記憶するデータレジスタのセットとをもち、それぞれの有界ポインタ記憶要素は、関連範囲情報をもつポインタを記憶するために使用され、その範囲情報はそのポインタを使用するときに許容されるアドレスの範囲を示し、この方法は、制御記憶要素に現在命令コンテキストを記憶するステップと、少なくとも第１の値のサブセット内にある、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の少なくとも１つの命令を実行するときに、現在命令コンテキストがデフォルト状態を特定しているときは、そのポインタリファレンスを使用して、データレジスタのうち、そこに記憶されているデータ値が必要なポインタを形成するデータレジスタを１つ特定するステップと、現在命令コンテキストが有界ポインタ状態を特定しているときは、そのポインタリファレンスを使用して、有界ポインタ記憶要素のうち、そこに記憶されているポインタが必要なポインタを形成する有界ポインタ記憶要素を１つ特定するステップとを含む。
【０００７】
さらに別の構成例によれば、装置が提供され、この装置は、それぞれがポインタを記憶する有界ポインタ記憶手段であって、前記ポインタが前記ポインタを使用するときに許容されるアドレスの範囲を示す関連範囲情報をもつ、有界ポインタ記憶手段のセットと、データ値を記憶するためのデータレジスタ手段のセットと、命令のシーケンスを実行するための処理手段と、現在命令コンテキストを記憶するための制御記憶手段とを備え、少なくとも第１の値のサブセット内にある、必要なポインタのポインタリファレンスを指定する、前記シーケンス内の少なくとも１つの命令の実行に処理手段が応答して、現在命令コンテキストがデフォルト状態を特定しているときは、そのポインタリファレンスを使用して、データレジスタ手段のうち、そこに記憶されているデータ値が必要なポインタを形成するものを１つ特定し、現在命令コンテキストが有界ポインタ状態を特定しているときは、そのポインタリファレンスを使用して、有界ポインタ記憶手段のうち、そこに記憶されているポインタが必要なポインタを形成するものを１つ特定する。
【０００８】
本技法について、添付図面に示される実施形態を参照しながら、単に例として、さらに詳細に説明する。
【図面の簡単な説明】
【０００９】
【図１】一実施形態による装置のブロック図である。
【図２】有界ポインタ記憶要素のセットの中のポインタ値を設定またはアクセスしようとしたときに、そのポインタ値を使用して指定されるアドレスが、関連範囲情報によって指定される範囲の外にある場合に、エラーがトリガされるタイプの命令の例を示す図である。
【図３】一実施形態による、命令セット内に備えられてもよいさまざまなタイプの命令の概略図である。
【図４Ａ】一実施形態により、ロード命令の挙動を現在命令コンテキストに依存して変更する様子を示す図である。
【図４Ｂ】一実施形態により、ロード命令の挙動を現在命令コンテキストに依存して変更する様子を示す図である。
【図５】一実施形態による、異なる命令コンテキスト状態の間で切り替わるために行われてもよい処理を示すフロー線図である。
【図６Ａ】一実施形態による、分岐命令を使用してケイパビリティベースの状態とデフォルト状態の間でどのように移行してもよいかを示す図である。
【図６Ｂ】一実施形態による、分岐命令を使用してケイパビリティベースの状態とデフォルト状態の間でどのように移行してもよいかを示す図である。
【図７】代替実施形態による、命令コンテキスト間の切り換えの機構を示すフロー線図である。
【図８】図７の方法を使用する技法の特定の一例を示す図である。
【図９】現在命令コンテキストに関わらず常にケイパビリティレジスタからポインタを取得する、一実施形態で提供されてもよい別のロード命令を示す図である。
【図１０Ａ】一実施形態で提供されてもよい、逆状態挙動命令を示す図である。
【図１０Ｂ】一実施形態で提供されてもよい、逆状態挙動命令を示す図である。
【発明を実施するための形態】
【００１０】
添付図面を参照しながら実施形態について説明する前に、実施形態について下記の説明を提供する。
【００１１】
いくつかの処理装置では、有界ポインタの使用がサポートされてもよい。例えば、アクセスすべきデータ値または実行すべき命令のアドレスを指すため、またはそのアドレスを決定するために、ポインタそのものが使用されてもよい。ただし、ポインタはさらに、そのポインタを使用するときに許容されるアドレスの範囲を示す関連範囲情報をもっていてもよい。このことは、例えば、そのポインタから決定されるアドレスが一定の境界内に確実に収まるようにして挙動の安全性または機能的な正確さを維持するために役立つ可能性がある。例えば、ケイパビリティベースのアーキテクチャへの関心が高まってきていおり、このアーキテクチャでは、所与の処理に対して一定のケイパビリティが定められ、定められたケイパビリティの外で動作を行おうとするとエラーがトリガされる。有界ポインタの範囲情報は、そのようなアーキテクチャのために定められたケイパビリティ情報の一部であってもよい。あるいは、有界ポインタを定めることが可能な、非ケイパビリティベースのアーキテクチャが存在してもよい。
【００１２】
よって、ある装置が、ポインタを記憶する少なくとも１つの有界ポインタ記憶要素をもち、そのポインタが、そのポインタを使用するときに許容されるアドレスの範囲を示す関連範囲情報をもっていてもよい。それぞれの有界ポインタ記憶要素は、例えば、レジスタまたは、スタックメモリ上の場所であることもできる。
【００１３】
一定の命令を使用して、そのような有界ポインタ記憶要素を参照してポインタを取得し、次にそのポインタを使用して、その命令の動作中に必要なメモリ内のアドレスを導出することができる。ポインタを直接使用してメモリアドレスが特定されてもよいし、または、例えばポインタ値にオフセットを加えることによってメモリアドレスが導出されてもよい。
【００１４】
しかし、そのような有界ポインタを参照せずに、例えば汎用レジスタに記憶されているデータ値を参照するなどのデフォルトの手法でポインタを取得する命令を提供することもまた、望ましい。前述したケイパビリティベースのアーキテクチャの例について考えると、このことによって、ケイパビリティを意識しないコード（例えば、ポインタが汎用レジスタ内の値から導出されるコード）を実行するために使用されるように命令セットを設定する一方で、前述した有界ポインタ記憶要素の内容からポインタが導出される、ケイパビリティを意識するコードの実行もまたサポートすることが可能になるだろう。しかし、現代の処理システムには、命令セット空間に対する厳しい重圧があり、それにより、命令セット内に指定できる命令の数は非常に制限される。
【００１５】
一実施形態では装置が提供され、その装置は、有界ポインタ記憶要素のセットと、データ値を記憶するデータレジスタのセットとをもち、それぞれの有界ポインタ記憶要素は、関連範囲情報をもつポインタを記憶するために使用され、その範囲情報はそのポインタを使用するときに許容されるアドレスの範囲を示す。さらに、現在命令コンテキストを記憶する制御記憶要素も備わる。処理回路を使用して命令のシーケンスが実行される。また、少なくとも第１の値のサブセットの中にある、必要なポインタのポインタリファレンスを指定する、そのシーケンスの中の少なくとも１つの命令の実行に応答して、処理回路が現在命令コンテキストに依存して命令の実行挙動を変更する。具体的には、現在命令コンテキストがデフォルト状態を特定しているときは、処理回路はその命令により指定されるポインタリファレンスを使用して、データレジスタのうち、そこに記憶されているデータ値が必要なポインタを形成するものを１つ特定する。しかし、現在命令コンテキストが有界ポインタ状態を特定しているときは、処理回路はそのポインタリファレンスを使用して、有界ポインタ記憶要素のうち、そこに記憶されているポインタが必要なポインタを形成するものを１つ特定する。よって、そのような手法によって、同じ命令を、現在命令コンテキストに依存して異なる挙動をとるように、具体的には、必要なポインタを取得するためのポインタリファレンスの使用法が現在命令コンテキストに依存するように、設計することができる。そのような手法によって、前述した命令セット空間に対する重圧を考慮しながら、ケイパビリティを意識しないコードとケイパビリティを意識するコードの両方に同じ命令セットが使用されるようにすることができる。
【００１６】
一実施形態では、ポインタリファレンスの値に関わらず、上記の挙動を採用することができる。よって、現在命令コンテキストがデフォルト状態を特定しているときには必ず、その命令によって指定されるポインタリファレンスからデータレジスタが特定され、現在命令コンテキストが有界ポインタ状態を特定しているときには必ず、その命令によって指定されるポインタリファレンスから有界ポインタ記憶要素が特定される。
【００１７】
ただし、代替実施形態では、上記の挙動を特定範囲のポインタリファレンス値に制限することができる。よって、例として、ポインタリファレンスが第１のサブセットとは異なる第２の値のサブセットの中にある場合には、処理回路は、現在命令コンテキスト識別子がデフォルト状態と有界ポインタ状態のどちらを特定するかに関わらず、ポインタリファレンスからデータレジスタを特定するように設計されてもよい。このことは、例えば、考え得るポインタリファレンスの値の数が、特定の実装によって提供される有界ポインタ記憶要素の数を超える場合に有益であることもある。純粋に例として、ポインタリファレンスの指定に５ビットフィールドが使用され、３２の異なる値（例えば、０から３１の値）を指定できる状況を考えるとき、データレジスタは３２個存在するが、有界ポインタ記憶要素が３２より少ないということもある。例えば、有界ポインタ記憶要素が１６個である場合、ポインタリファレンスの値が０から１５の間であれば、現在命令コンテキストに依存してデータレジスタと有界ポインタ記憶要素の間で選択を行うために上記の挙動が行われるが、ポインタリファレンスの値が１６から３１の間であれば、現在命令コンテキストに関わらず、その値は必ずデータレジスタにマッピングされるように装置を設計することもできる。
【００１８】
さらに別の代替実施形態では、現在命令コンテキストの値を、特定範囲のポインタリファレンス値に対して指定することもできる。よって、ポインタリファレンスが第１の値のサブセットの中にあるときには前述した現在命令コンテキストを使用する一方で、さらに１つまたは複数の、別の現在命令コンテキストを複数指定し、それぞれを、さらに別の範囲のポインタリファレンス値に関連付けることもできる。これにより、特定のポインタリファレンス値をデータレジスタと有界ポインタ記憶要素のどちらにマッピングするかを、その特定のポインタリファレンス値に関連する現在命令コンテキストに依存して制御し、上記の挙動を、よりきめ細かい様式で、特定のポインタリファレンス値に適用することができるだろう。
【００１９】
一実施形態では、上記の命令のうち、必要なポインタのためのポインタリファレンスを指定する命令を実行するとき、処理回路が、必要なポインタからアドレスを決定するように、そして、現在命令コンテキストが有界ポインタ状態を特定していれば、決定したアドレスが当該の有界ポインタ記憶要素の関連範囲情報により示される許容アドレス範囲の中に収まるかチェックするために、境界チェック動作を行うようにさらに設計される。よって、これにより、現在命令コンテキストが境界ポインタ状態を特定している状況で、そのような命令を実行するときに、挙動の安全性または機能的正確さを維持することが可能になる。
【００２０】
一実施形態では、装置は、現在命令コンテキストがデフォルト状態を特定しているときに境界チェック動作が行われないように動作するように設計されてもよく、したがって、装置内に何らかの既存の安全策が備わることを条件として、処理回路は、命令が実行されたときに、データレジスタから取得したポインタから導出したアドレスにアクセスすることが許可される。ただし、代替の実施形態では、現在命令コンテキストがデフォルト状態を特定しているとき、処理回路はデフォルトの境界チェック動作を行って、決定されたアドレスがデフォルトの許容アドレス範囲内にあるかチェックするように設計されてもよい。
【００２１】
そのようなデフォルト範囲はいくつかの様式で指定し得るが、一実施形態では、装置は、デフォルトの許容範囲を示す範囲情報を記憶するデフォルト範囲記憶要素をさらに備える。このことにより、ケイパビリティを意識するシステムの中で、例えば、望まれる場合に、例えば既存のソフトウェアライブラリからとられたケイパビリティを意識しないコードへシステムが切り換わり、そのケイパビリティを意識しない既存コードをデフォルト状態で実行させながら、ケイパビリティを意識するシステムによって設定されてもよいデフォルトアドレス範囲へのアクセスを制限し、それによって、ケイパビリティを意識するシステムが、ケイパビリティを意識しないコードからアクセスできるアドレス範囲を制御することができるだろう。
【００２２】
一実施形態では、境界チェック動作を行うとき（有界ポインタ状態にあるとき、または、デフォルト状態でデフォルト境界チェック動作を行うとき）、処理回路は、すべてのデータ値が確実に許容アドレス範囲に入るように、決定したアドレスにあるアクセスされるデータ値のサイズを考慮に入れてもよい。これにより、アクセスされるデータ値のどの部分も許容範囲の外にないことが保証される。
【００２３】
どの時点においても、通常、装置は、有界ポインタを意識するコードか有界ポインタを意識しないコードのどちらかを実行しており、有界ポインタを意識するコードではポインタが必要になると有界ポインタ記憶要素のセットを利用し、有界ポインタを意識しないコードでは必要なポインタを決定するときに標準データレジスタを使用するが、この２つの異なるタイプのコードの間で適度に細かく切り替わるための機構を提供することは有益であろう。一実施形態では、このことは、制御記憶要素に記憶されている現在命令コンテキストを更新する、少なくとも１つのさらに別の命令に応答するように処理回路を設計し、よって、その命令の実行により、現在命令コンテキストを有界ポインタ状態とデフォルト状態の間で、どちらの方向にでも切り換えられるようにすることにより実現する。
【００２４】
そのような命令は、いくつかの様式により、現在命令コンテキストを更新するように定めることができる。一実施形態では、有界ポインタ記憶要素のうち少なくとも１つが、命令コンテキスト値を指定する飛び先命令コンテキストのフィールドを含むように設計される。そうすると、現在命令コンテキストを更新するために使用される命令を、そのような有界ポインタ記憶要素の１つを参照して飛び先命令コンテキストのフィールドから命令コンテキスト値を取得し、取得した値を使用して、制御記憶要素に記憶されている現在命令コンテキストを更新するように設計することができる。
【００２５】
ある特定の例では、この目的で処理回路によって実行される命令は、そのような飛び先命令コンテキストのフィールドを含む有界ポインタ記憶要素のうち１つを指定する分岐命令である。そうすると、処理回路は、その分岐命令の実行に応答して、指定された有界ポインタ記憶要素から取得した命令コンテキスト値を制御記憶要素に記憶させることによって、現在命令コンテキストを更新する。
【００２６】
これにより、有界ポインタを意識するコードと有界ポインタを意識しないコードの間で移行するためには通常、どんな場合でも分岐命令が実行されることが必要になり、この実施形態では、実際には、分岐命令を実行するために行われる一連のステップの中に現在命令コンテキストの更新が組み込まれるので、特に効率的な実装が得られる。
【００２７】
命令は通常、プログラムカウンタ値／ポインタを使用してメモリからフェッチされ、分岐動作の間に、そのプログラムカウンタが、分岐先のコード内の最初の命令のアドレスを指すように更新される。一実施形態では、装置はプログラムカウンタポインタを記憶する有界プログラムカウンタ記憶要素をさらに含み、このプログラムカウンタポインタは、そのプログラムカウンタポインタから決定されるプログラムカウンタの許容範囲を示す関連範囲情報をもつ。よって、これにより命令が確実に、有界プログラムカウンタ記憶要素の内容に関係する、許容されるアドレスからフェッチされるように境界チェックを行うことが可能になる。
【００２８】
そのような実施形態の１つでは、処理回路はさらに、分岐命令の実行に応答して、その分岐命令によって指定される有界ポインタ記憶要素から取得したポインタおよび関連範囲情報を使用して、有界プログラムカウンタ記憶要素を更新する。これにより、分岐命令の実行を介した分岐先の目標コードに適するようにプログラムカウンタ範囲情報を更新するための効率的な機構が得られる。
【００２９】
一実施形態では、有界ポインタ記憶要素を使用する上記のタイプの分岐命令は、デフォルト状態と有界ポインタ状態の間を両方向に切り替わることができるように、デフォルト状態と有界ポインタ状態の両方で処理回路によって実行されてもよい。よって、そのような分岐命令の挙動は現在命令コンテキストには依存せず、したがって、具体的には、現在命令コンテキストがデフォルト状態か有界ポインタ状態かに関わらず、指定された有界ポインタ記憶要素を参照して、同様に動作する。
【００３０】
一実施形態では、有界ポインタ記憶要素のセットには、戻り先アドレスを特定するために使用されるポインタをもつ有界リンク記憶要素が含まれ、そのような有界リンク記憶要素は戻り先命令コンテキストをさらに特定する。その結果、ある命令が実行されて現在のコードから何らかの目標コードへ分岐する場合、実行が目標コードに切り替わるときに、有界リンク記憶要素を現在のコードの戻り先アドレスに更新して、目標コードの実行が終わったときに有界リンク記憶要素が戻り先に関する情報を提供するようにすることができる。
【００３１】
その次に、有界ポインタ記憶要素を参照する前述したタイプの分岐命令を使用して、その分岐命令に上記の有界リンク記憶要素を指定させることにより、元のコードへの戻り動作を行うことができる。具体的には、分岐命令が実行されると、これにより、処理回路は、有界リンク記憶要素内の戻り先アドレスにより指定される命令アドレスへ戻り、そして、有界リンク記憶要素内に指定された戻り先命令コンテキストを制御記憶要素に記憶させることによって現在命令コンテキストを更新する。このことにより、元のコードの実行を、適切なアドレスから、そのコードに適した正しい命令コンテキストで再開することが可能になる。
【００３２】
上記の例では、分岐命令を必要な機能により補って現在命令コンテキストを更新することができるが、別の実施形態では、別の更新命令が備わってもよく、それを実行すると、その更新命令によって指定された更新値が制御記憶要素に書き込まれて、現在命令コンテキストが更新されてもよい。
【００３３】
そのような手法では、飛び先命令コンテキスト情報を有界ポインタ記憶要素に含める必要がなくなるが、分岐命令そのものは現在命令コンテキストを更新しないので、追加の命令を実行することが必要になる。
【００３４】
更新命令は該当する更新値を指定するように、さまざまな様式で設計することができる。一実施形態では、更新命令がデータレジスタのうち１つを特定して、そこに記憶されているデータ値を使用して現在命令コンテキストが更新されてもよい。あるいは、更新命令がイミディエート値を指定して、どのデータレジスタを参照することもなく、直接その値を使用して現在命令コンテキストが更新されてもよい。
【００３５】
前述した、必要なポインタのポインタリファレンスを指定し、かつ、その挙動が現在命令コンテキストに依存して変化する命令は、さまざまな形をとることができるが、一実施形態では、そのような命令は、命令セット内に備わるロード命令とストア命令のうち少なくともいくつかを含む。加えて、所望により、ポインタリファレンスを指定する他の命令もまた、その挙動が現在命令コンテキストに依存して変更されるようにすることが可能である。例えば、所望により、命令セットによって指定される分岐命令のうち１つまたは複数を、その挙動が現在命令コンテキストに依存して変更されるように設計してもよい。
【００３６】
そのような命令を含む命令セットは、さまざまな形をとることができる。一実施形態では、命令セットは、現在命令コンテキストに実行挙動が依存しない第１の命令サブセットと、現在命令コンテキストに実行挙動が依存する第２の命令サブセットを含む。第２のサブセットは通常、例えば前述したロード命令とストア命令などの、ポインタリファレンスを指定する命令を少なくともいくつか含む。
【００３７】
さらに、命令の第２のサブセットの実行挙動が現在命令コンテキストに依存する装置に所望の機能を追加するために、さらに別の１つまたは複数の命令を命令セットに含ませることもできる。
【００３８】
例えば、一実施形態では、命令セットは、必要なポインタのポインタリファレンスを指定する少なくとも１つの追加の命令を含んでもよく、前記少なくとも１つの追加の命令を実行すると、処理回路は、現在命令コンテキストが有界ポインタ状態とデフォルト状態のどちらを特定するかに関わりなく、そのポインタリファレンスを使用して、有界ポインタ記憶要素のうち、そこに記憶されたポインタが必要なポインタを形成するものを１つ特定するように設計される。そのような命令の一例は、前述した、有界ポインタ記憶要素の１つを参照し、かつ現在命令コンテキストに関わりなく実行可能な分岐命令である。
【００３９】
追加することもできる追加の命令の別の一例は、必要なポインタのポインタリファレンスを指定する逆状態挙動命令であり、少なくとも１つのその逆状態挙動命令を実行すると、処理回路は、ポインタリファレンスを使用して、現在命令コンテキストが有界ポインタ状態を特定しているときには、データレジスタのうち、そこに記憶されているデータ値が必要なポインタを形成するものを１つ特定し、現在命令コンテキストがデフォルト状態を特定しているときには、有界ポインタ記憶要素のうち、そこに記憶されているポインタが必要なポインタを形成するものを１つ特定するように構成される。そのような逆状態挙動命令を備えることにより、有界ポインタを意識するコードと有界ポインタを意識しないコードの間の効率的な連係動作が可能になる。
【００４０】
有界ポインタ記憶要素はさまざまな形をとることができるが、一実施形態では、有界ポインタ記憶レジスタのセットを含む。さらに、有界ポインタ記憶要素はポインタに加えて関連範囲情報を直接記憶するように設計されてもよいし、あるいは、対応する有界ポインタ記憶要素に記憶されているポインタの関連範囲情報を記憶するために、さらに別の記憶要素が備わってもよい。
【００４１】
範囲情報はいくつかの様式で指定することができるが、一実施形態では、範囲情報は許容されるアドレス範囲の上側境界と下側境界を特定し、また、代替実施形態では、範囲情報は許容されるアドレス範囲を特定するために使用されるサイズ情報と共に、上側境界と下側境界のうち１つを特定する。
【００４２】
ここで、特定の実施形態について図面を参照しながら説明する。
【００４３】
図１は、命令を処理するための処理パイプライン４を備えるデータプロセッサ装置２の例を概略的に示す。この例では、処理パイプライン４は、いくつかのパイプライン段を含み、それらにはフェッチ段６、デコード段８、発行段１０、実行段１２、およびライトバック段１４が含まれるが、他のタイプまたは組み合わせの段が備わってもよいことが理解される。例えば、いくつかの実施形態では、レジスタリネームを行うためにリネーム段を含むこともできる。処理される命令は段から段へ移動し、ある命令がパイプライン４の１つの段でペンディングしている間に、異なる段で別の命令がペンディングしていてもよい。
【００４４】
フェッチ段６は、レベル１（Ｌ１）命令キャッシュ２０から命令をフェッチする。フェッチ段６は通常、連続した命令アドレスから連続的に命令をフェッチする。ただし、フェッチ段はさらに、分岐命令の結果を予測するための分岐予測器２２を有してもよく、フェッチ段６は、分岐が行われると予測されると、（連続していない）分岐目標アドレスから命令をフェッチし、分岐が行われないと予測されると、連続した次のアドレスから命令をフェッチすることができる。分岐予測器２２は、一定の分岐が行われるか否か予測するための情報を記憶するために１つまたは複数の分岐履歴テーブルを含んでもよい。例えば、分岐履歴テーブルは、それ以前に実行された分岐の実際の結果を追跡するか、分岐に対して行われる予測の確実性を表すカウンタを含んでもよい。分岐予測器２２は、さらに、以前の分岐命令の目標アドレスをキャッシュして、その後、同じ分岐命令に遭遇したときに目標アドレスを予測できるようにするために、分岐目標アドレスキャッシュ（ＢＴＡＣ）２４を含んでもよい。
【００４５】
フェッチされた命令はデコード段８へ渡され、この段で命令がデコードされて、デコード済み命令が生成される。デコード済み命令は、適切な処理動作を行うように実行段１２を制御するための制御情報を含んでもよい。キャッシュ２０からフェッチされる命令がより複雑な場合には、デコード段８が、それらの命令を、マイクロオペレーション（μｏｐｓまたはｕｏｐｓ）と呼ばれる複数のデコード済み命令にマッピングすることがある。よって、Ｌ１命令キャッシュ２０からフェッチされる命令と、パイプラインのその後の段に現れる命令の間の関係は、１対１ではないことがある。一般に、本出願において「命令」への言及は、マイクロオペレーションを含むと解釈されるべきである。
【００４６】
デコード済みの命令は発行段１０に渡され、ここでは、その命令の実行に必要なオペランドが利用可能であるか判断され、オペランドが利用可能であれば、その命令が、実行されるように発行される。いくつかの実施形態では、Ｌ１命令キャッシュ２０からフェッチされたプログラム順序に沿った順序で実行されるように命令を発行するために、インオーダー処理がサポートされてもよい。他の実施形態では、プログラム順序とは異なる順序で実行段１２に命令を発行できるように、アウトオフオーダー実行がサポートされてもよい。アウトオブオーダー処理では、前の命令がオペランドを待って停止している間に、プログラム順序では後ろにある、オペランドが利用可能になっている命令を先に実行することができるので、パフォーマンスを向上させるために有用である可能性がある。
【００４７】
発行段１０は実行段１２に命令を発行し、この段で命令が実行されて、さまざまなデータ処理動作を行う。例えば、実行段はいくつかの実行ユニット３０、３２、３４を含んでもよく、これらは、整数値に算術演算または論理演算を行うための算術／論理ユニット（ＡＬＵ）３０、浮動小数点形式で表現された値に演算を行うための浮動小数点（ＦＰ）ユニット３２、およびレベル１（Ｌ１）データキャッシュ３６からレジスタ４０へデータ値をロードするためのロード命令またはレジスタ４０からＬ１データキャッシュ３６へデータ値をストアするためのストア命令を行うためのロード／ストアユニット３４を含む。これらのユニットが、提供されてもよいタイプの実行ユニットのいくつかの例に過ぎないこと、また、他の種類もまた提供されてもよいことが理解される。処理動作を行うために、実行ユニット１２はレジスタのセット４０からデータ値を読み込んでもよい。実行した命令の結果が次に、ライトバック段１４によってレジスタ４０にライトバックされてもよい。
【００４８】
Ｌ１命令キャッシュ２０とＬ１データキャッシュ３６は、複数レベルのキャッシュを含むキャッシュ階層の一部であってもよい。例えば、さらにレベル２（Ｌ２）キャッシュ４４が備わってもよいし、任意選択で、さらなるレベルのキャッシュを備えることもできる。この例では、Ｌ２キャッシュ４４はＬ１命令キャッシュ２０とＬ１データキャッシュ３６の間で共有されるが、他の例では、別のＬ２命令キャッシュとデータキャッシュがあってもよい。フェッチすべき命令がＬ１命令キャッシュ２０にない場合にはＬ２キャッシュ４４からフェッチすることができ、同様に、その命令がＬ２キャッシュ４４にない場合は、メインメモリ５０からフェッチすることができる。同様に、ロード命令に応答して、データがＬ１データキャッシュ３６にない場合にはＬ２キャッシュ４４からフェッチすることができ、必要ならメモリ５０からフェッチすることができる。キャッシュ階層を管理するために、知られているどのような手法を使用してもよい。
【００４９】
パイプライン４によって使用されるアドレスはプログラム命令を参照し、そのデータ値は仮想アドレスであってもよいが、少なくともメインメモリ５０は物理アドレス指定され、さらに任意選択として、キャッシュ階層の少なくともいくつかのレベルが物理アドレス指定されてもよい。したがって、パイプライン４が使用する仮想アドレスを、キャッシュまたはメモリをアクセスするために使用される物理アドレスに変換するために、変換ルックアサイドバッファ５２（ＴＬＢ）が備わってもよい。例えば、ＴＬＢ５２が複数のエントリを含んでもよく、そのそれぞれが、仮想アドレス空間の対応するページの仮想ページアドレスおよび、その仮想ページアドレスをマッピングするべき物理ページアドレスを指定してもよい。例えば、仮想アドレスを物理アドレスにマッピングするときに、仮想ページアドレスと物理ページアドレスが、対応する仮想アドレスと物理アドレスの大部分には対応しており、残りの少しの部分が変更されないままであってもよい。アドレス変換情報にならび、各ＴＬＢエントリには、さらに、一定のアドレスページがパイプライン４の一定のモードでアクセス可能であるかを示す情報などの、アクセス許可を指定するいくつかの情報が含まれでもよい。いくつかの実施形態では、ＴＬＢエントリはさらに、対応するアドレスページのその他の属性を定めることもでき、それらは、読み出しまたは書き込み動作に応答してキャッシュ階層のどのレベルが更新されるか（例えば、キャッシュがライトバックモードとライトスルーモードのどちらで動作すべきか）を定めるキャッシュポリシー情報、または、対応するページ内のアドレスへのデータアクセスの順序を、メモリシステムによって、パイプライン４がデータアクセスを発行した順序に比較して並べ替えることができるかを定める情報などである。
【００５０】
図１には単一レベルのＴＬＢ５２が示されているが、ＴＬＢに階層を備えて、最近アクセスされたいくつかのページ内のアドレスを変換するためのＴＬＢエントリをレベル１（Ｌ１）ＴＬＢ５２が含み、さらに多くのページに対するエントリをレベル２（Ｌ２）ＴＬＢが記憶するようにしてもよい。必要なエントリがＬ１のＴＬＢにない場合には、Ｌ２のＴＬＢから、または、階層内のさらに別のＴＬＢからフェッチすることができる。アクセスすべきページに必要なエントリが、どのＴＬＢにもない場合には、ページテーブルウォークを行ってメモリ５０内のページテーブルにアクセスすることができる。本技術には、知られているどのようなＴＬＢ管理手法を使用することもできる。
【００５１】
さらに、いくつかのシステムでは、複数レベルのアドレス変換をサポートしてもよく、例えば、第１のＴＬＢ（またはＴＬＢの階層）を使用して仮想アドレスを中間アドレスに変換し、次に、１つまたは複数のさらに別のＴＬＢを使用する第２のレベルのアドレス変換により、中間アドレスを、キャッシュまたはメモリへのアクセスに使用される物理アドレスに変換してもよい。これは仮想化をサポートするために役立つ可能性があり、仮想化では、例えば、第１のレベルのアドレス変換がオペレーティングシステムによって管理され、第２のレベルのアドレス変換がハイパーバイザによって管理されてもよい。
【００５２】
図１に示されるように、装置２には、有界ポインタレジスタのセット６０があってもよい。図１に示される有界ポインタレジスタのセットは汎用データレジスタのセット４０と物理的に分かれて示されているが、一実施形態では、同じ物理ストレージを使用して汎用データレジスタと有界ポインタレジスタが提供されてもよい。
【００５３】
各有界ポインタレジスタ６０は、アクセスすべきデータ値のアドレスを決定するために使用されてもよいポインタ値６２と、対応するポインタ６２を使用するときに許可されるアドレス範囲を指定する範囲情報６４とを含む。任意選択として、有界レジスタ６０はさらに他の制約情報６６を含んでもよく、この情報は、そのポインタを使用する際の１つまたは複数の制約を定めてもよい。例えば、制約６６を使用して、ポインタ６２を使用してもよい命令のタイプまたは、そのポインタを使用できるパイプライン４のモードを制限することもできる。したがって、範囲情報６４と制約情報６６がケイパビリティを定め、そのケイパビリティの中でポインタ６２の使用が許可されると考えることもできる。定められたケイパビリティの外でポインタ６２の使用が試みられたとき、エラーをトリガすることができる。範囲情報６４は、例えば、ポインタを一定の知られている境界内に確実に維持し、機密情報またはセキュリティ情報を収容していることのある、メモリアドレス空間の他の領域に出て行かないようにするために役立つ可能性がある。汎用データレジスタと有界ポインタレジスタの両方に同じ物理ストレージを使用する一実施形態では、ある実施形態において、ポインタ値６２が、例えば、対応する汎用レジスタに使用されるのと同じストレージ位置に記憶されてもよい。
【００５４】
図２は、データまたは命令への無許可のアクセスを、許容範囲を使用して防ぐタイプの命令の例を示す。図２の上部に示されるように、特定の有界ポインタレジスタＰＲ１は所与のポインタ値６２と範囲情報６４を含み、この例では、範囲情報は許容範囲の下側境界を定める下側境界アドレス６８と許容範囲の上側境界を定める上側境界アドレス６９を使用して指定される。例えば、境界６８、６９は、アドレス８００００から８１０００の範囲を定めるように設定される。一定の命令が有界ポインタレジスタＰＲ１を参照したときに、ポインタ６２によって決定されるアドレスがこの範囲の外にあれば、エラーがトリガされてもよい。
【００５５】
例えば、図２のパートＡに示されるように、いくつかのシステムでは、ポインタレジスタ６０の中のポインタ６２の値を、範囲情報６４によって指定される範囲外の値に設定しようとすると、エラーがトリガされてもよい（ここでは、ポインタが直接アドレスを指定すると仮定する）。これにより、ポインタ６２が指定された範囲外の値をとることが回避され、このポインタを使用するどのようなアクセスも、確実に許容範囲内に収まるようになる。あるいは、図２のパートＢに示されるように、ある命令が、ポインタ６２のアドレスによって特定される位置へのアクセスを試みたときに、そのアドレスが指定された範囲外にあれば、エラーがトリガされてもよい。したがって、ポインタ６２を指定された範囲外にセットすることは許可されるが、そのポインタアドレス（またはそのポインタから導出されたアドレス）にデータアクセスが試みられたときに、そのアドレスが許容範囲外にあれば、エラーがトリガされてもよい。他のシステムでは、図２のパートＡとパートＢの両方に示されるタイプの命令に応答してエラーをトリガしてもよい。
【００５６】
範囲情報６４は、さまざまな様式で設定されることもできる。例えば、所与のポインタに許容される範囲を、セキュアなコード、またはオペレーティングシステムもしくはハイパーバイザが指定してもよい。例えば、命令セットのアーキテクチャが、所与のポインタ６２の範囲情報６４を設定または変更するためのいくつかの命令を含み、それらの命令の実行が特定のソフトウェアまたは、プロセッサ４の一定のモードもしくは例外状態に制限されてもよい。範囲情報６４を設定または変更するために、知られているどのような技法を使用することもできる。
【００５７】
あるポインタを参照する一定の命令を実行するときに実行段１２で使用されてもよい有界ポインタ記憶要素のセット６０に加えて、レベル１命令キャッシュ２０から命令がフェッチされるときにフェッチ段６で同様の機能を提供するために、プログラムカウンタケイパビリティ（ＰＣＣ）レジスタ８０がさらに使用されてもよい。具体的には、ＰＣＣ８０には、フィールド８２にプログラムカウンタポインタが記憶されてもよく、さらに、有界ポインタ記憶要素のセット６０内の各ポインタに与えられる範囲および制約情報と同様に、範囲情報８４および、制約情報８６があればそれが、与えられる。
【００５８】
一実施形態では、装置２で使用される命令セットを使用して、有界ポインタを意識する（本明細書では、ケイパビリティを意識する、とも称する）アプリケーションプログラム、つまり、ポインタを使用してメモリアドレスを指定するときに有界ポインタ記憶要素６０を使用するアプリケーションプログラムが記述され、さらに、有界ポインタを意識しない（本明細書では、ケイパビリティを意識しない、とも称する）アプリケーションプログラム、つまり、汎用レジスタ４０内のデータ値を使用してポインタ値を指定することのあるアプリケーションプラグラムもまた記述される。一実施形態では、装置の動作を制御するために使用されるさまざまな制御レジスタ７０内に、現在命令コンテキストの制御レジスタ７２が備わり、その現在命令コンテキストレジスタにより示される現在の状態に依存して、装置により実行される一定の命令の挙動が変更される。
【００５９】
具体的には、図３に概略的に示されるように、命令セットには、現在命令コンテキストに挙動が依存しない、命令の第１のサブセット１００が含まれてもよい。その例には、ＡＬＵ内で実行される一定の算術論理命令、さらに言えば、ＦＰＵ３２内で実行される浮動小数点命令などがあろう。しかし、それに加えて、命令の第２の命令サブセット１０５があり、その挙動は現在命令コンテキストに依存して変更される。第２のサブセットには通常、例えば命令セットにより指定されるロード命令および／またはストア命令の少なくとも一部分などの、汎用命令のうち少なくともいくつかが入る。図３に示されるように、そのようなロード命令またはストア命令は通常、ベースレジスタＲｂと転送レジスタＲｔを指定し、ベースレジスタＲｂの内容を使用してポインタが指定され、転送レジスタＲｔは、ロード動作の宛先レジスタ（すなわち、ロードされるデータ値が記憶されるレジスタ）またはストア動作のソースレジスタ（すなわち、メモリにストアされるソースデータを記憶するレジスタ）を形成する。一実施形態によれば、転送レジスタは常にセット４０内の汎用レジスタの１つにマッピングされてもよいが、指定されたベースレジスタが何にマッピングされるかは、現在命令コンテキストに依存して変動する。具体的には、現在命令コンテキストがデフォルト状態を示しているときは、ベースレジスタは汎用レジスタ４０のうち１つにマッピングされる。しかし、現在命令コンテキストがケイパビリティ状態を示しているときには、ベースレジスタはケイパビリティレジスタ６０のうち１つにマッピングされる。よって、ロード命令またはストア命令によって使用されるポインタ情報の情報源は、現在命令コンテキストレジスタ７２内に記憶されている現在命令コンテキストに依存する。
【００６０】
一定のロード命令またはストア命令に加えて、ポインタを参照する１つまたは複数のその他の命令が第２のサブセット１０５に含まれてもよい。例えば、所望により、命令セットによって指定される１つまたは複数の分岐命令が、現在命令コンテキストに依存して挙動するように、第２のサブセット１０５にさらに含まれてもよい。具体的には、これにより、その分岐命令に必要なベースレジスタが、ケイパビリティレジスタ６０のうち１つと汎用レジスタ４０のうち１つのどちらから取得されるかが現在命令コンテキストに依存して決まるであろう。そのような手法を使用して、データリンクレジスタとケイパビリティリンクレジスタのどちらを使用して戻り先アドレス情報（ケイパビリティリンクレジスタを使用する場合は、戻り先の命令コンテキストも併せて）を取得するかを決定することもできる。
【００６１】
後に詳細に考察するように、命令セットには、さらに、命令の第２のサブセット１０５の挙動が現在命令コンテキストに依存するシステムを全体的にサポートするための機能を追加する、いくつかの追加の命令１１０が含まれてもよい。例えば、現在命令コンテキストをケイパビリティ状態へ移行させるために、デフォルト状態でケイパビリティレジスタを使用する１つまたは複数の命令が指定されてもよい。また、状態に関わりなく常にケイパビリティレジスタを使用する１つまたは複数の別の命令があってもよいし、さらに言えば、現在命令コンテキストが現在命令コンテキストレジスタ７２によって実際に示されている状態とは逆の状態にあるかのように振る舞う１つまたは複数の命令があってもよい。
【００６２】
前述したように、現在命令コンテキストがデフォルト状態を示しているときには、第２のサブセット１０５内のどの命令についても、ポインタを指定するために使用されるベースレジスタは汎用レジスタ４０のうち１つにマッピングされ、その汎用レジスタ内のデータ値がポインタとして使用される。これにより、原則的には、そのような命令を実行しているコードは、装置内に他のセキュリティ手段が配備されている場合はそれに従いながら、メモリ内の任意のアドレスにアクセスすることができる。
【００６３】
しかし、一実施形態では、デフォルト状態で行われるアクセスをさらに制限するためにデフォルトデータケイパビリティ（ＤＤＣ）レジスタ９０が備わってもよく、このレジスタは、どのケイパビリティレジスタにも含まれる範囲および制限の情報と同様に、範囲情報９２および、制約データ９４がある場合はその制約データの両方を指定する。第２のサブセット１０５内のある命令がデフォルト状態で実行され、よってポインタを汎用レジスタ４０のうち１つから取得すると、そのポインタから導出されたアドレスに基づいて、ＤＤＣレジスタ９０に保持された範囲および制限の情報に関して境界チェック動作が行われる。そのような手法により、ケイパビリティを意識するコードが、既存のソフトウェアライブラリの中のケイパビリティを意識しないコードを利用しようとする場合に、ＤＤＣレジスタ９０をセットして、そのケイパビリティを意識しないコードを実行しているときの、汎用レジスタ４０からとられたポインタの使用について制限を設定することが可能である。具体的には、そのようなケイパビリティを意識しないコードを実行しているときにアクセス可能なアドレス範囲を、範囲情報を使用して制限することができる。
【００６４】
図４Ａおよび４Ｂは、命令セットの第２のサブセット１０５を形成する命令のうちの１つであるロード命令の挙動が、現在命令コンテキストに依存して変更される様子を示す。具体的には、図４Ａは、現在命令コンテキストがデフォルト状態を示している状況を示す。したがって、転送レジスタ指定子だけでなく、ベースレジスタ指定子もまた、汎用レジスタ４０にマッピングされる。図４Ａに示されるように、汎用レジスタ（本明細書ではＸレジスタとも称する）のうち１つにアクセスすることにより初期アドレスが取得され、その汎用レジスタの選択は、ロード命令で指定されるベースレジスタに依存する。この例では、次に初期アドレスにオフセットが加えられて、実際にロードアドレスとして使用される更新済みアドレスを特定する。その後、ＤＤＣレジスタ９０の内容を使用して境界チェック動作が行われる。図４Ａに、その動作の説明が下に向かって示されている。一実施形態では、境界チェック動作は計算されたアドレス（オフセットを含む）に直接行われるが、別の代替実施形態では、アドレスは、境界チェック動作を行う前に、ＤＤＣレジスタ９０内の範囲情報の中に含まれるアドレスのうち１つであるＤＤＣベースアドレスを加えることによって修正されてもよい。
【００６５】
境界チェック動作はそのアドレスおよび、ロード命令によってアクセスされるデータのサイズを考慮して、そのアドレスがＤＤＣベースアドレスより小さいか、または、サイズ情報を加えたアドレスが、ＤＤＣレジスタ９０の中の他方の範囲境界を特定するＤＤＣ限界アドレスを超えるか、判断する。この条件のどちらかが存在する場合は、ロードが中止される。それ以外の場合は、指定されたアドレスへのメモリアクセスを行うことによりデータが取得され、ロード命令の中の転送レジスタ指定子により決定される汎用レジスタ４０内の宛先レジスタＸ［Ｒｔ］の中に、戻されたデータが記憶される。したがって、図４Ａの説明から、デフォルト状態では、ロード／ストアユニット３４内でロード命令を処理するときにケイパビリティレジスタ６０が使用されないことが明らかである。
【００６６】
しかし、図４Ｂに示されるように、現在命令コンテキストがケイパビリティ状態であれば、それらのケイパビリティレジスタが使用される。具体的には、転送レジスタ指定子は依然として汎用レジスタの１つにマッピングされるが、ベースレジスタ指定子はポインタにアクセスするために使用されるので、ベースレジスタ指定子はケイパビリティレジスタのうち１つにマッピングされる。よって、ケイパビリティレジスタ（本明細書ではＣレジスタと称する）のうち、ベースレジスタ指定子Ｒｂに基づいて決定される１つのケイパビリティレジスタからケイパビリティポインタが取得される。次に、ケイパビリティポインタにオフセットを加えることによってアドレスポインタが決定され、その後、特定されたケイパビリティレジスタ内の情報を使用して境界チェックが行われる。具体的には、図４Ｂの下部に示されるように、そのアドレスポインタがケイパビリティベース値より小さいか、または、データサイズ情報と組み合わせたアドレスポインタがケイパビリティ限界情報を超えるか、判断される。そのどちらかであれば、ロードが中止される。それ以外の場合は、そのアドレスポインタによって与えられるメモリアドレスからデータが取得され、宛先レジスタＸ［Ｒｔ］の中に記憶される。
【００６７】
一実施形態ではストア命令も同様に取り扱われ、その場合、転送レジスタは、メモリの、決定されたメモリアドレスにストアする必要のあるデータを特定するために使用される。
【００６８】
上記の手法により、必要な命令の数を増やすことなく、したがって命令符号化空間に大きな制約を課すことなく、ケイパビリティを意識するコードとケイパビリティを意識しないコードの両方を単一の命令セットの中でサポートするための非常に効率的な機構が得られる。このことは、ロード命令とストア命令に関して非常に有益である。その理由は、現実には、命令空間内にはすでに複数の異なるタイプのロード命令とストア命令が符号化されており、それらのロード命令とストア命令のすべてについてケイパビリティを意識するバージョンをさらに作り出すためには空間が不足すると思われるからである。その代わりに、本明細書に記載される実施形態によれば、そのような追加のロード命令とストア命令は必要なく、既存のロード命令とストア命令の挙動を現在命令コンテキストに依存して変更して、ケイパビリティを意識するバージョンとケイパビリティを意識しないバージョンの両方のロード命令とストア命令を実装することができる。
【００６９】
例えば、装置がケイパビリティを意識する既存のコードとケイパビリティを意識しないコードの間でどちらの方向にも切り替わることができるように、現在命令コンテキストレジスタ７２の中の現在命令コンテキストを効率的に更新するための機構を備えることが望ましい。一実施形態では、そのような切り換えをサポートするために、ケイパビリティレジスタ６０のうち１つまたは複数（一実施形態ではすべて）に、飛び先の命令コンテキストを提供する追加のフィールド６８が備わる。加えて、ケイパビリティレジスタ６０の１つを参照する一定の分岐命令が定められ、その命令はケイパビリティ状態とデフォルト状態の両方で実行して、そのようなケイパビリティレジスタにアクセスすることができる。要求された分岐命令を行うとき、アクセスしたケイパビリティレジスタ６０の内容を使用してＰＣＣレジスタ８０が更新されて、目標コード内の実行すべき最初の命令に該当するプログラムカウンタポインタが、関連範囲と制約の情報と共に特定される。加えて、該当するケイパビリティレジスタのフィールド６８を使用して現在命令コンテキストレジスタ７２の内容が更新され、よって、その内容は目標／飛び先のコードの正しい現在命令コンテキストを特定する。その処理を図５に概略的に示す。
【００７０】
特に、本明細書で使用するとき、ケイパビリティ分岐命令という用語は、ケイパビリティレジスタを参照する分岐命令を指す。そのようなケイパビリティ分岐命令は、その挙動が現在命令コンテキストに依存しないので、命令セットの第２のサブセット１０５内にあるのではなく、そのようなケイパビリティ分岐命令は、命令セットに新しく追加されたケイパビリティ命令１１０の１つと考えることができる。
【００７１】
ステップ２００で、ケイパビリティ分岐命令を実行する必要があるかが検知され、その必要があれば処理はステップ２０５に進み、現在のケイパビリティ分岐命令がリンク付き分岐命令であるか判断される。リンク付き分岐命令であれば、ステップ２１０で、ＰＣＣレジスタ８０の現在の内容と共に現在命令コンテキストが、ケイパビリティレジスタのセット６０内のレジスタの１つであるケイパビリティリンクレジスタ内に記憶される。よって、ケイパビリティリンクレジスタは、所定の過程の中でリンク付き分岐命令からの戻り動作が行われたときにＰＣＣレジスタをどのように更新すべきかを特定し、さらに、そのリンク付き分岐命令の前に行われていた元のコードへのそのような戻り動作に続いて現在命令コンテキストレジスタ７２に記憶させるべき適切な現在命令コンテキストもまた、特定する。
【００７２】
ステップ２０５で、その分岐命令がリンク付き分岐命令ではないと判断された場合、すなわち、単に通常の分岐であると判断された場合は、ステップ２１０は必要なく、処理は直接ステップ２１５に進む。ケイパビリティリターン命令を備えることもでき、この命令は実質的にはケイパビリティ分岐命令であり、参照されるケイパビリティレジスタがケイパビリティリンクレジスタであることに留意されたい。よって、ケイパビリティリターン命令は、２０５からＮｏ分岐に沿って直接ステップ２１５へ進むであろう。
【００７３】
ステップ２１５で、ＰＣＣレジスタ８０の現在の内容が、分岐命令によって特定されるケイパビリティレジスタの内容に書き換えられる。したがって、これにより、ＰＣＣレジスタ８０に記憶された新しいポインタを介して、目標コード内の実行すべき命令の最初のアドレスが、目標コードの命令をフェッチするときに使用される適切な範囲と制約の情報と共に特定される。
【００７４】
ステップ２２０で、ケイパビリティレジスタ内の飛び先命令コンテキストがセットされているか判断される。この例では、「セットされている」状態とはケイパビリティ状態を示し、「セットされていない」とはデフォルト状態を示す。したがって、飛び先命令コンテキストがセットされていれば、ステップ２２５で、現在命令コンテキストレジスタ７２の内容が、ケイパビリティ状態を特定するように更新される。逆に、飛び先命令コンテキストがセットされていないときは、ステップ２３０で、現在命令コンテキストレジスタ７２が、デフォルト状態を示すように更新される。ある場合にはステップ２２５または２３０の実行により現在命令コンテキストの状態が実際に切り替わるが、他の場合には、更新操作の結果、現在命令コンテキストが変化しないこともある（例えば、飛び先命令コンテキストがケイパビリティ状態を示しているが現在命令コンテキストがすでにケイパビリティ状態であるため、または、飛び先命令コンテキストがデフォルト状態を示しており、現在命令コンテキストがすでにデフォルト状態にあるため）ことに留意されたい。
【００７５】
図６Ａは、図５の処理を実装するコードシーケンスの例を示す。具体的には、図６Ａに示されるように、このコードは当初はケイパビリティ状態で実行しており、アドレス８０００でケイパビリティレジスタＣ１を指定するリンク付き分岐が実行されると仮定される。この例では、Ｃ１内のポインタはアドレス０ｘ１００００、すなわち目標コードの最初のアドレスを特定すると仮定される。さらに、ケイパビリティレジスタＣ１内に指定された飛び先命令コンテキストが論理１値にあると仮定され、論理１値は前述した「セットされていない」状態に対応すると仮定されるので、デフォルト状態を特定する。したがって、このリンク付き分岐命令を実行するとき、ケイパビリティリンクレジスタ（この例ではレジスタＣ３０）は、そのリンク付き分岐命令の次のアドレス、すなわち０ｘ８００４に更新され、さらに、その飛び先命令コンテキストは論理０値にセットされて、ケイパビリティ状態を示している。次に、ＰＣＣレジスタ８０が、ケイパビリティレジスタＣ１の内容で更新されて、範囲と制約の情報と共にアドレス０ｘ１００００を特定する。加えて、現在命令コンテキストレジスタ７２が、ケイパビリティレジスタＣ１内に記憶された値１で更新され、それにより状態がデフォルト状態に移行する。
【００７６】
図６ＢはケイパビリティレジスタＣ１の内容を示し、その内容は、ポインタ２７２、範囲情報２７４、制約情報２７６、および飛び先命令コンテキストフィールド２７８を含む。上記のとおり、この例では、飛び先命令コンテキストフィールド内の論理１値はデフォルト状態を示し、論理０値はケイパビリティ状態を示す。
【００７７】
図６Ａに戻ると、リンク付き分岐命令の実行に続いて、アドレス１００００から始めて、デフォルト状態で命令が実行される。どこかの点で、ＲＥＴＣ命令、すなわちケイパビリティリターン命令に遭遇し、この命令は、前述したとおり、ケイパビリティレジスタとしてケイパビリティリンクレジスタＣ３０を指定する分岐命令と考えられる。図５の考察から明らかなように、ＲＥＴＣ命令を実行するときは、ステップ２０５からＮｏ分岐に進み、ステップ２１５でＰＣＣレジスタ８０がケイパビリティリンクレジスタの内容で更新され、次のアドレス８００４を特定する。さらに、この処理の間に現在命令コンテキストレジスタ７２が論理０に更新されてケイパビリティ状態を特定するので、アドレス８００４から開始する命令が実行された後に、ケイパビリティ状態への移行が引き起こされる。
【００７８】
上記の例では、現在命令コンテキストは、制御レジスタ８０の１つを形成する現在命令コンテキストレジスタ７２の中に記憶されると仮定されるが、別の実施形態では、現在命令コンテキストが実際にはＰＣＣ８０の権限ビットとして記憶されることも可能であろう。そうすると、それらのＰＣＣレジスタ７０の内容を使用してフェッチユニット６によってフェッチされる、命令セットの第２のサブセット１０５内のどのような命令の挙動にも、この権限ビット値を使用して影響が与えられることになる。リンク付き分岐命令を実行するときに、ＰＣＣの現在の内容がケイパビリティリンクレジスタＣ３０に記憶され、その結果、ケイパビリティリンクレジスタＣ３０もまた、後に所定の過程の中で元のコードへ戻るときに使用するために現在命令コンテキストを取得することになる。
【００７９】
図５を参照しながら考察した例では、分岐動作の間に現在命令コンテキストレジスタ７２を更新するために、ケイパビリティ分岐命令が使用されると仮定する。ただし、代替実施例では、別の命令を使用して現在命令コンテキストを更新することができる。そのような実施形態の１つにより行われる処理を、図７に示す。図７で、「呼び出し元コード」という用語は、分岐の前にもともと実行していたコードを指し、「呼び出し先コード」という用語は、分岐に続いて実行され、その後、そこから戻る、目標コードを指す。さらに、移行シーケンスはケイパビリティ状態からデフォルト状態への分岐で、その後、デフォルト状態からケイパビリティ状態へ戻ると仮定される。
【００８０】
したがって、呼び出し元コードは当初はケイパビリティ状態で実行しており、ステップ３００で、デフォルト状態への切り換えが要求されていると判断する。具体的には、既存のソフトウェアライブラリ内の何らかの既存の機能を使用するために、何らかのケイパビリティを意識しないコードへの分岐が所望されてもよい。ステップ３０５で、現在命令コンテキストを明示的にデフォルト状態に切り換えるために１つまたは複数の命令が実行される。後に図８の例を参照しながら考察するように、この切り換えには、一実施形態では、汎用レジスタ４０に関するムーブ命令に続いて、汎用レジスタのうち１つからシステム制御レジスタ７０のうちの１つ、具体的には、この例では、現在命令コンテキスト（ＣＩＣ）レジスタ７２に内容を移動するタイプの別のムーブ命令の実行が伴ってもよい。あるいは、単純に、その命令によって指定されるイミディエート値をＣＩＣレジスタ７２にロードする命令を実行できてもよい。
【００８１】
要求された命令をステップ３０５で実行した後に、呼び出し先コードへ分岐するためにステップ３１０で分岐命令が実行される。次にステップ３１５で、呼び出し先コードがデフォルトモードで実行され、その後、どこかの点で、呼び出し先コードによりリターン命令が実行され、ステップ３２０で呼び出し元コードへ戻る。
【００８２】
この時点で、制御はすでに呼び出し元コードに戻っているが、現在命令コンテキストはデフォルト状態のままである。したがって、ステップ３２５で、呼び出し元コードは、現在命令コンテキストを明示的にケイパビリティ状態に変えるために１つまたは複数の命令を実行し、その後、ステップ３３０で、呼び出し元コードはケイパビリティ状態で実行を継続する。
【００８３】
図７の処理について、図８を参照しながら、一例として概略的に説明する。コードは当初、ケイパビリティ状態で実行しており、アドレス８０００でロード命令が実行されて、ケイパビリティレジスタＣ０内のポインタにより特定されるメモリアドレスで見つかったデータが、汎用レジスタＸ１にロードされると仮定する。後に明らかになるように、汎用レジスタＸ１にロードされるこのデータは、実際には、続く分岐動作を介した移行先の目標コード内で実行される、最初の命令のアドレスとして使用される。したがって、ケイパビリティ状態でロード命令を実行することは、汎用レジスタのうち１つの中に、呼び出し先コードの最初の命令の目標アドレスをセットする役割を果たす。
【００８４】
次に、アドレスがインクリメントされてアドレス８００４となり、ここでムーブ命令が実行されて、汎用レジスタＸ２の中に値１が記憶される。その次の命令はＭＳＲ命令で、この命令は汎用レジスタＸ２の内容を現在命令コンテキストレジスタ７２へ移動させる。したがって、ＣＩＣレジスタ７２に論理１値が書き込まれることになり、矢印３５０で示されるように、これによってデフォルト状態への移行が引き起こされる。
【００８５】
この時点で、まだ呼び出し元コードは実行しているが、デフォルト状態になっている。よって、呼び出し元コードで実行される次の命令はアドレス８００Ｃにあり、汎用レジスタＸ１の内容をポインタとして使用するリンク付き分岐命令である。前述したように、この時点で、レジスタＸ１の内容は呼び出し先コードの最初のアドレスを特定しており、この例ではアドレス１００００と仮定される。よって、このリンク付き分岐命令を実行すると、セット４０内の汎用リンクレジスタが戻りアドレスに更新され、この例ではアドレス８０１０である（すなわち、呼び出し元コードのＢＬＲ命令の次の命令を特定する）。その後、プログラムカウンタがアドレス１００００に更新される。よって、その後、命令はアドレス１００００で実行を開始して、要求された呼び出し先コードを実行する。呼び出し先コードの実行におけるどこかの点で、リターン命令が実行されて、呼び出し元コードへ戻る。この時点で、ＰＣ値がアドレス８０１０に更新されて、呼び出し元コードの次の命令を特定する。
【００８６】
この時点で実行は呼び出し元コードに戻っているが、現在命令コンテキストはデフォルト状態のままであることに留意されたい。よって、戻った後に、呼び出し元コードによって実行される最初の命令を使用して、ケイパビリティ状態へ戻る移行が引き起こされる。具体的には、ムーブ命令が実行されて汎用レジスタＸ２に論理０値が記憶された後に、その論理０値がＭＳＲ命令を使用してＣＩＣレジスタ７２に記憶され、それによって、図８の矢印３６０で示されるように、ケイパビリティ状態へ戻る移行が引き起こされる。
【００８７】
図７および８を参照しながら考察した手法を採用するときは、ケイパビリティレジスタ６０を飛び先命令コンテキストフィールド６８で拡張する必要はない。ただし、レジスタ７２内の現在命令コンテキストを更新するために特定の追加の命令を実行する必要がある。図５の手法がとられるか図７の手法がとられるかには関わらず、現在命令コンテキストレジスタ７２に現在命令コンテキストを含ませることにより、例外が発生した場合に、例外から戻ったときに復旧できるように、有効な現在命令コンテキストを確実に、該当する例外レジスタに自然に保存することができる。
【００８８】
図３の考察で述べたように、現在命令コンテキストに挙動が依存する、命令セットの第２のサブセット１０５が存在していることを考慮しながら、一定数の新しいケイパビリティ命令１１０を命令セットに追加して、機能を拡張することができる。そのような新しいケイパビリティ命令の一例に、図５を参照しながら考察した、前述のケイパビリティ分岐命令がある。また、ポインタを参照するが、現在命令コンテキストがデフォルト状態かケイパビリティ状態かに関わらず挙動が同じである、１つまたは複数の他の命令を備えることも可能であろう。その一例として、図９でＬＤＲＡＬＴ命令について説明する。この命令は、第２のサブセット１０５に含まれない代替のロード命令である。図９と図４Ｂの比較から明らかになるように、ＬＤＲＡＬＴ命令は、現在命令コンテキストがケイパビリティ状態であるなら、図４Ｂのロード命令と全く同様に動作するだろう。しかし、図４Ｂで説明したＬＤＲ命令と異なり、ＬＤＲＡＬＴ命令は、現在命令コンテキストがデフォルト状態であるときも、全く同様に動作する。そのような代替ロード命令（さらに言えば、代替ストア命令も）は例えば、デフォルト状態の間、ケイパビリティを意識する薄いラッパーの中に既存のデフォルトコードをラップしたい場合など、さまざまな状況で有用であり得る。これにより、既存のデフォルトコードおよび関連するラッパーをデフォルト状態で実行しながら、ケイパビリティレジスタ内のケイパビリティを何らかの形で使用することが可能になるだろう。
【００８９】
図１０Ａおよび１０Ｂは、命令セットに追加されてもよい別のタイプの追加の命令１１０を示し、これらの命令は、現在命令コンテキストが、現在命令コンテキストレジスタ７２内に実際に示された状態と逆の状態にあるかのように動作するので、逆状態挙動命令と呼ばれる。よって、図１０Ａと図４Ａの比較および、図１０Ｂと図４Ｂの比較から明らかになるように、指定されたＬＤＲＯＳＢ（ここでＯＳＢは、逆状態の挙動を意味する）命令は、現在命令コンテキストがケイパビリティ状態にあるときに、現在命令コンテキストがデフォルト状態にあるとすれば命令の第２のサブセット１０５内のロード命令が行うであろう動作と同様に動作するように設計される。同様に、図１０Ｂに示されるように、ＬＤＲＯＳＢ命令は、現在命令コンテキストがデフォルト状態にあるときに、現在命令コンテキストがケイパビリティ状態にあるとすれば第２のサブセット１０５内のロード命令が行うであろう動作と全く同様に動作するように設計される。そのような逆状態挙動命令を使用すると、ケイパビリティを意識するコードとケイパビリティを意識しないコードの間で効率的な相互作用が可能になるので、有用な機能拡張が得られる。例えば、ケイパビリティを意識するコードで、ポインタを、ケイパビリティレジスタの１つの中の実際のケイパビリティに変換することなく「そのまま」使用したい状況では、ケイパビリティを意識しないコードがケイパビリティを意識するコードにポインタリファレンスを返すことが望ましいことがある。そうではなく、全体的なＤＤＣ制約を使用してポインタの使用法を管理しながら、そのポインタをケイパビリティ状態で処理することも可能である。
【００９０】
前述した実施形態から、これらの実施形態により、命令セット内の必要な命令の数を増やすことなく、したがって命令セットに加えることのできる追加の命令の数が命令符号化空間によって厳しく制限されている状況に著しい利益をもたらしながら、ケイパビリティを意識するコードとケイパビリティを意識しないコードの両方を記述するために単一の命令セットを使用できるようにするための効率的な機構が得られることが理解される。ケイパビリティベースのアーキテクチャが数多く出現してきており、前述した技法により、それらのケイパビリティベースのアーキテクチャを、例えばケイパビリティを意識していなかったデフォルト命令セットなどの既存のデフォルト命令の中に組み込むことができるだろう。そのようなケイパビリティを意識するアーキテクチャの特定の一例にＣＨＥＲＩアーキテクチャがあり、その詳細が、ケンブリッジ大学コンピュータ研究所のＲ．Ｗａｔｓｏｎらによる、『Ｃａｐａｂｉｌｉｔｙ  Ｈａｒｄｗａｒｅ  Ｅｎｈａｎｃｅｄ  ＲＩＳＣ  Ｉｎｓｔｒｕｃｔｉｏｎｓ：ＣＨＥＲＩ  Ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ』と題するテクニカルレポート番号８５０、ＵＣＡＭ−ＣＬ−ＴＲ−８５０、ＩＳＳＮ  １４７６−２９８６に記載されている。
【００９１】
本明細書に記載される実施形態の技法により、ソフトウェアが、そのようなケイパビリティを意識するアーキテクチャによりサポートされるとおりのきめ細かなメモリ保護を効率的に実装しながら、ケイパビリティを意識しないコードを記述するためにも同じ命令セットを使用できるようにすることが可能になる。一実施形態では、そのようなケイパビリティを意識しないコードを、例えば前述したＤＤＣレジスタの内容を使用して、ケイパビリティの暗黙のデフォルトセットを使用してメモリアクセスを制御するように設計することができる。上記の技法により、ケイパビリティを意識するコードとケイパビリティを意識しないコードの間で効率的できめ細かな相互作用が可能になり、既存のアプリケーションを、ケイパビリティを意識するライブラリと再結合させることができ、また、新しいアプリケーションを従来のケイパビリティを意識しないライブラリに結合させることができる前述の手法は、ケイパビリティを意識しないコードのための既存の未修正のロード／ストア命令をサポートしながら、ケイパビリティを意識するコードのためのロード／ストア命令の同程度に豊富なセットをサポートするが、命令符号化空間に大きな制約をさらに課すことはない。
【００９２】
本出願において、「〜ように構成される」という表記は、装置の要素が、定められた動作を行うことが可能な構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または様式を意味する。例えば、装置が定められた動作を提供する専用のハードウェアを有してもよいし、または、プロセッサもしくは他の処理デバイスがその機能を行うようにプログラムされてもよい。「〜ように構成される」とは、定められた動作を提供するために、その装置の要素を変更する必要が一切ないことを暗に示す。
【００９３】
本明細書では本発明の説明的な実施形態について、添付の図面を参照しながら詳しく説明してきたが、本発明がそれらの厳密な実施形態に制限されず、当業者によって、添付の特許請求の範囲によって定められる本発明の範囲および趣旨を逸脱することなく、さまざまな変更、追加、修正がそこに加えられてもよいことが理解される。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴のさまざまな組み合わせが独立請求項の特徴と共に作成されることもできる。
【図１】
0006803376.tif 000002
【図２】
0006803376.tif 000003
【図３】
0006803376.tif 000004
【図４Ａ】
0006803376.tif 000005
【図４Ｂ】
0006803376.tif 000006
【図５】
0006803376.tif 000007
【図６Ａ】
0006803376.tif 000008
【図６Ｂ】
0006803376.tif 000009
【図７】
0006803376.tif 000010
【図８】
0006803376.tif 000011
【図９】
0006803376.tif 000012
【図１０Ａ】
0006803376.tif 000013
【図１０Ｂ】
0006803376.tif 000014