(57)【要約】  特定の命令の実行を制御する装置および方法が提供される。装置は、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、を有する。次いで、機能使用情報を記憶するために、機能使用ストレージが使用される。処理回路は、機能使用情報に応じて、宛先記憶素子に記憶される結果を生成するための命令のシーケンスのうちの少なくとも１つの命令の実行に応答する。特に、機能使用情報が機能状態を識別するときには、結果は機能として生成され、宛先記憶素子として機能記憶素子が選択される。反対に、機能使用情報が非機能状態を識別するときには、結果は整数値として生成され、宛先記憶素子として整数記憶素子が選択される。これにより、命令セット内に別個の命令が提供される必要性を伴わずに、機能および非機能の両方が指定される命令の変数を生成できる。
2020525934.tif 000002
【特許請求の範囲】
【請求項１】
命令のシーケンスを実行する処理回路と、
前記処理回路によるアクセスのための整数値を記憶する整数記憶素子と、
前記処理回路によるアクセスのための機能を記憶する機能記憶素子と、
機能使用情報を記憶する機能使用ストレージと、
を備える装置であって、
前記処理回路は、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として前記機能記憶素子を選択することによって、
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先記憶素子として前記整数記憶素子を選択することによって、
前記機能使用情報に応じて、前記宛先記憶素子に記憶される前記結果を生成するための命令のシーケンスのうちの少なくとも１つの命令の実行に応答する、装置。
【請求項２】
前記整数記憶素子は、複数の整数記憶素子のうちの選択された整数記憶素子、プログラムカウンタ記憶素子、およびリンク記憶素子のうちの１つである、請求項１に記載の装置。
【請求項３】
前記機能記憶素子は、複数の機能記憶素子のうちの選択された機能記憶素子、プログラムカウンタ機能記憶素子、および機能リンク記憶素子のうちの１つである、請求項１または２に記載の装置。
【請求項４】
前記少なくとも１つの命令は、ソースオペランドとして即値を指定する命令を備える、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記少なくとも１つの命令は、さらなるソースオペランドとしてプログラムカウンタ情報を使用するように配置された命令を備える、請求項４に記載の装置。
【請求項６】
生成された前記結果はアドレス情報である、請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記少なくとも１つの命令は、プログラムカウンタ情報を更新するために使用される分岐命令である、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記処理回路は、前記分岐命令に応答して、少なくとも１つの結果として、更新されたプログラムカウンタ情報を生成するように配置され、前記処理回路は、前記機能状態に応じて、プログラムカウンタ機能記憶素子に記憶するためのプログラムカウンタ機能として前記更新されたプログラムカウンタ情報を生成するように、またはプログラムカウンタ記憶素子内に記憶するためのプログラムカウンタ値として前記更新されたプログラムカウンタ情報を生成するように、配置されている、請求項７に記載の装置。
【請求項９】
前記処理回路は、前記分岐命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによって前記更新されたプログラムカウンタ情報を生成するように配置されている、請求項８に記載の装置。
【請求項１０】
前記プログラムカウンタ記憶素子は、前記プログラムカウンタ機能記憶素子内のフィールドによって形成されている、請求項８または９に記載の装置。
【請求項１１】
前記分岐命令はリンク付き分岐命令であり、前記処理回路は、少なくとも１つの結果として、現在のプログラムカウンタ情報から導出されるリターンアドレス情報を生成するように配置されており、前記処理回路は、前記機能状態に応じて、機能リンク記憶素子内に記憶するためのリターンアドレス機能として前記リターンアドレス情報を生成するように、またはリンク記憶素子内に記憶するためのリターンアドレス値として前記リターンアドレス情報を生成するように、配置されている、請求項７から１０のいずれか一項に記載の装置。
【請求項１２】
前記処理回路は、現在のプログラムカウンタ値を修正することによって前記リターンアドレス情報を生成するように配置されている、請求項１１に記載の装置。
【請求項１３】
前記リンク記憶素子は、前記機能リンク記憶素子内のフィールドによって形成されている、請求項１１または１２に記載の装置。
【請求項１４】
前記少なくとも１つの命令は、前記結果として、プログラムカウンタ情報から導出されるアドレス情報を生成するために使用されるアドレス生成命令である、請求項１から６のいずれか一項に記載の装置。
【請求項１５】
前記処理回路は、前記アドレス生成命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによって前記アドレス情報を生成するように配置されている、請求項１４に記載の装置。
【請求項１６】
前記アドレス生成命令は宛先識別子を提供し、前記処理回路は、前記機能使用情報が前記機能状態を識別するときには複数の機能記憶素子の選択された機能記憶素子にその宛先識別子をマッピングし、前記機能使用情報が前記非機能状態を識別するときには複数の整数記憶素子のうちの選択された整数記憶素子にその宛先識別子をマッピングするように、配置されている、請求項１４または１５に記載の装置。
【請求項１７】
前記整数記憶素子は、前記機能記憶素子内のフィールドによって形成され、前記整数値が前記機能の代わりに前記結果として記憶されるとき、前記機能記憶素子の少なくとも１つの残りのフィールドはデフォルト値に設定される、
請求項１から１６のいずれか一項に記載の装置。
【請求項１８】
前記機能は境界ポインタを備える、請求項１から１７のいずれか一項に記載の装置。
【請求項１９】
前記機能使用情報は、複数の例外レベルの各々についての機能構成情報であり、各例外レベルは異なるソフトウェア実行特権を有し、各例外レベルについて前記機能構成情報は少なくとも、その例外レベルで命令を実行するときに前記処理回路によって行われる動作が機能によって制限されるか否かを識別する、請求項１から１８のいずれか一項に記載の装置。
【請求項２０】
命令のシーケンスを実行する処理回路と、前記処理回路によるアクセスのための整数値を記憶する整数記憶素子と、前記処理回路によるアクセスのための機能を記憶する機能記憶素子と、機能使用情報を記憶する機能使用ストレージと、を有する装置内の命令の実行を制御する方法であって、前記方法は、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として前記機能記憶素子を選択することによって、および
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先記憶素子として前記整数記憶素子を選択することによって、
前記機能使用情報に応じて、前記命令のシーケンスのうちの少なくとも１つの命令の実行に応答して、前記宛先記憶素子に記憶される前記結果を生成するステップ
を備える方法。
【請求項２１】
命令のシーケンスを実行する処理手段と、
前記処理手段によるアクセスのための整数値を記憶する整数記憶素子手段と、
前記処理手段によるアクセスのための機能を記憶する機能記憶素子手段と、
機能使用情報を記憶する機能使用記憶手段と、
を備える装置であって、
前記処理手段は、前記命令のシーケンスのうちの少なくとも１つの命令の実行に応答して、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子手段として前記機能記憶素子手段を選択することによって、および
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先記憶素子手段として前記整数記憶素子手段を選択することによって、
前記機能使用情報に応じて、前記宛先記憶素子手段に記憶される前記結果を生成するためのものである、装置。
【請求項２２】
命令のシーケンスを実行する処理プログラムロジックと、
前記処理プログラムロジックによるアクセスのための整数値を記憶する整数データ構造と、
前記処理プログラムロジックによるアクセスのための機能を記憶する機能データ構造と、
機能使用情報を記憶する機能使用データ構造と、
を備える命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
前記処理プログラムロジックは、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先データ構造として前記機能データ構造を選択することによって、および
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先データ構造として前記整数データ構造を選択することによって、
前記機能使用情報に応じて、前記宛先データ構造に記憶される前記結果を生成するための前記命令のシーケンスのうちの少なくとも１つの命令の実行に応答する、コンピュータプログラム。
【請求項２３】
請求項２２による前記コンピュータプログラムを記憶する、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、命令の実行を制御する装置および方法に関する。
【０００２】
所与のプロセスについて特定の機能が定義されている機能ベースのアーキテクチャへの関心が高まっており、定義された機能以外の動作を実行する試みがあると、エラーがトリガされる可能性がある。機能は様々な形態を取り得るが、機能の１つのタイプは境界ポインタである（「ｆａｔポインタ」とも呼ばれ得る）。境界ポインタでは、ポインタ値は、たとえば、アクセスすべきデータ値のアドレス、または実行すべき命令を識別するか、または決定するために使用され得る。しかしながら、ポインタ値はまた、ポインタ値を使用するときにアドレスの許容範囲を示す関連範囲情報を有してもよく、これに関連付けられた許可／制限情報を追加で有してもよい。境界ポインタの範囲情報および任意の許可／制限情報は、機能情報と呼ばれてもよく、機能ベースのアーキテクチャ内では、（その関連機能情報を含む）このような境界ポインタは、機能と呼ばれてもよい。
【０００３】
命令セット内では、命令を実行した結果として機能を生成することができるこれらの命令を指定することが望ましい。しかしながら、下位互換性のために、結果として機能を生成するバージョンと本質的に同じ動作を識別するが、代わりに機能ではなく結果として公称データ値を生成する命令を指定することもまた、望ましいだろう。
【発明の概要】
【０００４】
しかしながら、命令符号化空間は重要であることが多く、したがって、命令を生成する機能および命令を生成する非機能を定義できるようにするために命令セットアーキテクチャ内に十分な空間を提供することは困難であり得る。
【０００５】
第１の例示的構成では、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、機能使用情報を記憶する機能使用ストレージと、を備える装置であって、処理回路は、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として機能記憶素子を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先記憶素子として整数記憶素子を選択することによって、機能使用情報に応じて、宛先記憶素子に記憶される結果を生成するための命令のシーケンスのうちの少なくとも１つの命令の実行に応答する、装置が提供される。
【０００６】
別の例示的構成では、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、機能使用情報を記憶する機能使用ストレージと、を有する装置内の命令の実行を制御する方法であって、方法は、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として機能記憶素子を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先記憶素子として整数記憶素子を選択することによって、機能使用情報に応じて、命令のシーケンスのうちの少なくとも１つの命令の実行に応答して、宛先記憶素子に記憶される結果を生成するステップを備える方法が提供される。
【０００７】
さらなる例示的構成では、命令のシーケンスを実行する処理手段と、処理手段によるアクセスのための整数値を記憶する整数記憶素子手段と、処理手段によるアクセスのための機能を記憶する機能記憶素子手段と、機能使用情報を記憶する機能使用記憶手段と、を備える装置であって、処理手段は、命令のシーケンスのうちの少なくとも１つの命令の実行に応答して、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子手段として機能記憶素子手段を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先記憶素子手段として整数記憶素子手段を選択することによって、機能使用情報に応じて、宛先記憶素子手段に記憶される結果を生成するためのものである、装置が提供される。
【０００８】
さらに別の例示的構成では、命令のシーケンスを実行する処理プログラムロジックと、処理プログラムロジックによるアクセスのための整数値を記憶する整数データ構造と、処理プログラムロジックによるアクセスのための機能を記憶する機能データ構造と、機能使用情報を記憶する機能使用データ構造と、を備える命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、処理プログラムロジックは、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先データ構造として機能データ構造を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先データ構造として整数データ構造を選択することによって、機能使用情報に応じて、宛先データ構造に記憶される結果を生成するための命令のシーケンスのうちの少なくとも１つの命令の実行に応答する、コンピュータプログラムが提供される。
【０００９】
さらなる例示的構成では、上述の第１の例示的構成の装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するプログラム命令を備える仮想マシンコンピュータプログラムが提供される。
【００１０】
一実施形態では、コンピュータプログラムを記憶するためのコンピュータ可読記憶媒体が提供され得る。
【００１１】
本技術は、以下の添付図面に示されるその実施形態を参照して、例示のみによってさらに説明される。
【図面の簡単な説明】
【００１２】
【図１】一実施形態による、装置のブロック図である。
【図２】境界ポインタ記憶素子のセット内にポインタ値を設定またはポインタ値にアクセスしようとする試みがある場合にエラーがトリガされ得る命令のタイプの例を示す図であり、そのポインタ値は、関連範囲情報によって示される範囲の外側のアドレスを指定するために使用される。
【図３】一実施形態による、境界ポインタに関連付けられたタグビットの使用を示す図である。
【図４】一実施形態によって複数の例外レベルがどのように提供され得るかを示す図である。
【図５】一実施形態によって提供され得る例外レベルごとの機能構成情報の一形態を示す図である。
【図６】一実施形態による、２つの異なる例外レベルの機能構成情報の可能な選択肢を示す表である。
【図７Ａ】一実施形態による、例外エントリ動作中に処理回路の実行状態がどのように管理されるかを示すフロー図である。
【図７Ｂ】一実施形態による、例外エントリ動作中に処理回路の実行状態がどのように管理されるかを示すフロー図である。
【図８】一実施形態による、例外復帰動作中に処理回路の実行状態がどのように管理されるかを示すフロー図である。
【図９】一実施形態による、命令の実行が機能使用情報に応じてどのように制御され得るかを示すフロー図である。
【図１０Ａ】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを識別するかに応じて分岐命令の実行がどのように制御され得るかを示す図である。
【図１０Ｂ】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを識別するかに応じて分岐命令の実行がどのように制御され得るかを示す図である。
【図１１Ａ】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてリンク付き分岐命令の実行がどのように制御され得るかを示す図である。
【図１１Ｂ】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてリンク付き分岐命令の実行がどのように制御され得るかを示す図である。
【図１２Ａ】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてアドレス生成命令の実行がどのように制御され得るかを示す図である。
【図１２Ｂ】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてアドレス生成命令の実行がどのように制御され得るかを示す図である。
【図１３】使用され得るシミュレータの実装を示す図である。
【００１３】
添付図面を参照して実施形態を論じる前に、実施形態の以下の説明が提供される。
【００１４】
先に述べられたように、所与のプロセスについて特定の機能が定義されている機能ベースのアーキテクチャへの関心が高まっており、定義された機能以外の動作を実行する試みがあると、エラーがトリガされる可能性がある。様々なタイプの機能が定義され得るが、１つのタイプの機能は境界ポインタである（一実施形態では、ポインタ値および関連範囲および許可情報の両方を組み込む）。このような機能ベースのアーキテクチャを採用する装置は通常、機能を記憶するために使用される記憶素子（本明細書では境界ポインタ記憶素子、または一般的には機能記憶素子とも呼ばれる）を有する。記憶素子は、レジスタ（本明細書では、境界ポインタレジスタまたは機能レジスタとも呼ばれる）であってもよく、かつ／または汎用メモリ内のメモリ位置、たとえばスタックメモリ上の位置であってもよい。所望の機能にアクセスするためにこのような記憶素子を参照し、その機能に依存する動作を実行するために、特定の命令が使用され得る。たとえば、境界ポインタを考慮すると、このような命令の実行により、境界ポインタを回収することができ、その中のポインタ値はその後、命令の実行中に必要とされるメモリ内のアドレスを導出するために使用することができる。ポインタ値は、メモリアドレスを識別するために直接使用されてもよく、またはたとえばポインタ値にオフセットを加えることによって、メモリアドレスを導出するために使用されてもよい。メモリアドレスが範囲情報によって指定された範囲内にあり、許可情報内で指定された任意の許可が満たされていれば、動作はその後も続行できる。
【００１５】
加えて、少なくともいくつかの命令が、これらの命令を実行するときに行われる動作の結果として機能を生成することが、望ましい。さらに、これらの命令のうちの少なくとも一部では、たとえば下位互換性をサポートするように、非機能結果を生じる命令のバージョンを提供することが、依然として望ましいだろう。
【００１６】
しかしながら、一方は結果として機能を生成し、他方は結果として公称データ値を生成する、本質的に同じ動作を実行する２つの別個の命令を指定するには、これらの異なる命令を定義するための命令セットアーキテクチャ内に十分な命令符号化空間が必要である。しかしながら、命令符号化空間は、通常、厳しく制限されており、命令セットアーキテクチャ内で望ましい全ての異なるタイプの命令を符号化することは困難であり得る。
【００１７】
本明細書に記載される実施形態は、命令符号化空間に対する圧力を軽減するメカニズムを提供する。
【００１８】
特に、一実施形態では、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数データ値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、を備える装置が提供される。さらに、機能使用情報を記憶するための機能使用ストレージが提供される。
【００１９】
命令のシーケンス内の少なくとも１つの命令では、処理回路は、機能使用情報に応じて、宛先記憶素子に記憶される結果を生成する命令の実行に応答する。特に、機能使用情報が機能状態を識別するときには、処理回路は、機能として結果を生成し、宛先記憶素子として機能記憶素子を選択する。反対に、機能使用情報が非機能状態を識別するときには、処理回路は、整数値として結果を生成し、宛先記憶素子として整数記憶素子を選択する。
【００２０】
このようなアプローチによって、命令セット内の単一の命令は、結果としての機能または結果としての整数値のいずれかを生成するように、実行中に構成可能に配置され、さらに、結果の宛先もまた、機能または整数値のどちらが生成されているかに応じて構成可能に選択され得る。特に、命令の実行中に、処理回路は、機能使用情報を参照でき、機能が命令の実行の結果として生成されるか整数値が代わりに生成されるかを制御するために、現在の機能使用情報を使用することができる。これにより、命令の機能変数および非機能変数の両方を実行することができるが、これらの変数は命令セット内で個別に符号化される必要がない。
【００２１】
整数記憶素子は、様々な形態を取ることができるが、一実施形態では、複数の整数記憶素子のうちの選択された整数記憶素子、プログラムカウンタ記憶素子、およびリンク記憶素子のうちの１つである。同様に、機能記憶素子もまた様々な形態を取ることができるが、一実施形態では、複数の機能記憶素子のうちの選択された機能記憶素子、プログラムカウンタ機能記憶素子、および機能リンク記憶素子のうちの１つである。
【００２２】
整数記憶素子および機能記憶素子は物理的に別個の構造であってもよいが、一実施形態では、整数記憶素子を機能記憶素子内のフィールドで表すことができ、こうして装置の全体的な記憶要件を低減することができる。
【００２３】
機能使用情報に応じて、生成された結果が機能または整数値となるように、処理回路によって上記の方法で処理された命令は、様々な形態を取ることができる。しかしながら、一実施形態では、少なくとも１つのこのような命令は、ソースオペランドとして即値を指定する命令である。即値は、命令の利用可能な符号化空間内でかなりの量のビットを消費する可能性があり、したがって、上記の技術は、命令の２つの別個の変数を提供するには不十分な符号化空間しか残らないので、ソースオペランドとして即値を指定する命令に関連して使用されるときには特に有益であり得る。
【００２４】
しかしながら、別の実施形態では、この技術は、ソースオペランドとして即値を指定しない命令、したがって、たとえば汎用レジスタを参照してソースオペランドを指定する可能性のある命令と共に使用されることも、可能である。
【００２５】
一実施形態では、上記の方法で処理回路が実行する少なくとも１つの命令は、さらなるソースオペランドとしてプログラムカウンタ情報を使用するように配置された命令である。機能または整数値のいずれかである結果を生成できることが望ましい場合に、ソースオペランドとしてプログラムカウンタ情報を使用する命令は数多くあり、したがって上記の技術は、このような各命令の複数の異なる変数を具体的に定義する必要性を回避することによって、このような命令を符号化する非常に効率的な方法を提供する。
【００２６】
前記少なくとも１つの命令を実行するときに処理回路によって生成された結果は、様々な形態を取ることができるが、一実施形態では、生成された結果はアドレス情報である。機能ベースのアーキテクチャでは、そのアドレス情報がその後どのように使用されるかを厳しく制限するように、機能の形態のアドレス情報を生成することが有益であり得る。しかしながら、下位互換性では、整数値の形態のアドレス情報を生成できることが依然として望ましい場合が多く、上記の技術は、これらの変数に別個の命令を指定する必要性を伴わずに両方の変数をサポートするために、特に効率的なメカニズムを提供する。
【００２７】
少なくとも１つの命令は、様々な形態を取ることができるが、一実施形態では、プログラムカウンタ情報を更新するために使用される分岐命令である。
【００２８】
特に、一実施形態では、処理回路は、分岐命令に応答して、少なくとも１つの結果として、更新されたプログラムカウンタ情報を生成するように配置され、処理回路は、機能状態に応じて、プログラムカウンタ機能記憶素子に記憶するためのプログラムカウンタ機能として更新されたプログラムカウンタ情報を生成するように、またはプログラムカウンタ記憶素子内に記憶するためのプログラムカウンタ値として更新されたプログラムカウンタ情報を生成するように、配置されている。
【００２９】
更新されたプログラムカウンタ情報が生成され得る方法は多数あるが、一実施形態では、これは、分岐命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによって生成される。先に述べられたように、即値は命令符号化空間内でかなりの量のビットを消費することができ、したがって、ソースオペランドとして即値を指定する分岐命令に関連付けられた上記の技術を使用することは、特に有益であり得る。しかしながら、代替実施形態では、即値は指定されない場合があり、代わりに分岐命令は、絶対分岐先を指定するためにレジスタの内容を使用してもよく、またはプログラムカウンタ相対分岐先を提供するためにプログラムカウンタと組み合わせて使用されるオフセットを使用してもよい。
【００３０】
一実施形態では、プログラムカウンタ記憶素子は、プログラムカウンタ機能記憶素子とは物理的に分離され得るが、一実施形態では、プログラムカウンタ記憶素子は、プログラムカウンタ機能記憶素子内のフィールドによって形成される。
【００３１】
一例示的配置では、分岐命令はリンク付き分岐命令であってもよく、処理回路は、少なくとも１つの結果として、現在のプログラムカウンタ情報から導出されるリターンアドレス情報を生成するように配置されてもよく、処理回路は、機能状態に応じて、機能リンク記憶素子内に記憶するためのリターンアドレス機能としてリターンアドレス情報を生成するように、またはリンク記憶素子内に記憶するためのリターンアドレス値としてリターンアドレス情報を生成するように、配置されている。したがって、このような例では、機能使用情報に応じて、更新されたプログラムカウンタ情報およびリターンアドレス情報の両方が、機能または整数値のいずれかとして生成され得る。
【００３２】
一実施形態では、処理回路は、たとえば現在のプログラムカウンタ値にオフセットを加えることによって、現在のプログラムカウンタ値を修正することでリターンアドレス情報を生成するように配置されてもよい。
【００３３】
リンク記憶素子は、機能リンク記憶素子とは物理的に分離され得るが、一実施形態では、機能リンク記憶素子内のフィールドによって形成されてもよい。
【００３４】
分岐命令について上記の構成可能な結果生成を実行する代わりに、またはこれに加えて、処理回路はまた、他のタイプの命令に対して類似のステップを取るように配置されてもよい。たとえば、少なくとも１つの命令は、結果として、プログラムカウンタ情報から導出されるアドレス情報を生成するために使用されるアドレス生成命令であってもよい。やはり、このようなアドレス生成命令は機能としてアドレス情報を生成できることが有用であるが、下位互換性のために、整数値としてそのアドレス情報の生成をサポートできることもまた有用である。
【００３５】
特定の一例示的配置では、処理回路は、アドレス生成命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによってアドレス情報を生成するように配置されてもよい。しかしながら、分岐命令に関する先の説明と同様に、即値を使用しない別の変数もまた、本明細書で説明される構成可能な実行挙動を利用するように配置され得る。
【００３６】
アドレス生成命令の実行によって生成された結果を記憶するために使用される宛先が決定され得る方法は多数ある。一実施形態では、アドレス生成命令は宛先識別子を提供し、処理回路は、機能使用情報が機能状態を識別するときには複数の機能記憶素子の選択された機能記憶素子にその宛先識別子をマッピングし、機能使用情報が非機能状態を識別するときには複数の整数記憶素子のうちの選択された整数記憶素子にその宛先識別子をマッピングするように、配置されている。
【００３７】
本技術が適用される命令のタイプに関係なく、整数記憶素子が機能記憶素子内のフィールドによって形成されるときには、機能の代わりに結果として整数値が記憶されていることを識別するように機能記憶素子の内容にフラグが立てられる方法が多数ある。一実施形態では、機能の代わりに結果として整数値が記憶されているとき、機能記憶素子の少なくとも１つの残りのフィールドがデフォルト値に設定される。特に、一実施形態では、（たとえば、範囲および制限情報を指定し得る）残りのフィールドは、いかなる機能制限も効果的にオフにするように、最大機能を識別するように設定される。しかしながら、代替実施形態では、最大機能を識別するように範囲および制限情報を設定する必要がないかも知れない。たとえば、ハードウェアは、装置が非機能状態で動作しており、したがって実行される処理動作が機能の影響を受けないとき、機能記憶素子内の範囲および制限情報を無視するように、配置されてもよい。このような状況では、代わりに範囲および制限情報は、必要に応じて変更しないままにするか、またはクリアしてもよい。さらなる代替として、タグビットが各機能記憶素子に関連付けられてもよく、これは内容が機能を含むことを識別するように設定されており、内容が有効な機能を表していないことを識別するためにクリアされる。したがって、機能記憶素子が整数値を記憶するとき、タグビットは、内容が有効な機能を表していないことを識別するためにクリアされ得る。
【００３８】
結果として記憶された機能は、様々な形態を取ることができるが、一実施形態では、境界ポインタを備える。
【００３９】
前記少なくとも１つの命令を実行しているときに処理回路によって参照される機能使用情報は、様々な形態を取ることができる。しかしながら、一実施形態では、機能使用情報は、複数の例外レベルの各々についての機能構成情報であり、各例外レベルは異なるソフトウェア実行特権を有し、各例外レベルについて機能構成情報は少なくとも、その例外レベルで命令を実行するときに処理回路によって行われる動作が機能によって制限されるか否かを識別する。したがって、これは、必要に応じて、少なくとも１つの例外レベルのソフトウェアを機能によって制限しない柔軟性を提供する。具体例として、高い例外レベルで実行する信頼性の高いソフトウェアは、機能によって制限されずに動作できる場合がある。これにより、このようなソフトウェアの機能チェックルーチンを行う必要性を回避することによる性能利点をもたらすことができる。これはまた、機能ベースのアーキテクチャと互換性を持たせるようにこのようなソフトウェアを修正する必要がある範囲を減少させることもできる。しかしながら、このような柔軟性は例外レベルベースで管理され得るので、このようなメカニズムは、例外レベルのうちの１つ以上で実行するソフトウェアに対して機能の全制約が課されることを保証するために、依然として使用され得る。
【００４０】
さらに、上記の技術によれば、この情報は、命令の結果が機能または整数値として構成可能に形成され得るように、さらにその結果を記憶するために使用される宛先が機能記憶素子または整数記憶素子として構成可能に選択されるように、１つ以上の命令を実行するときに再使用されることが可能である。
【００４１】
ここで、図面を参照して、特定の実施形態が記載される。
【００４２】
図１は、命令を処理するための処理パイプライン４を備えるデータ処理装置２の例を概略的に示している。この例では、処理パイプライン４は、フェッチステージ６、復号ステージ８、発行ステージ１０、実行ステージ１２、および書き戻しステージ１４を含む、多数のパイプラインステージを含むが、他のタイプまたは組み合わせのステージが提供され得ることは、理解されるだろう。たとえば、レジスタ名変更を実行するための名前変更ステージが、いくつかの実施形態に含まれ得る。処理される命令はステージからステージに移動し、あるステージで命令が保留されている間、パイプライン４の別のステージで別の命令が保留されてもよい。
【００４３】
フェッチステージ６は、レベル１（Ｌ１）命令キャッシュ２０から命令をフェッチする。フェッチステージ６は通常、連続する命令アドレスから順次命令をフェッチし得る。しかしながら、フェッチステージはまた、分岐命令の結果を予測するための分岐予測器２２も有することができ、フェッチステージ６は、分岐が取られると予測される場合には（非連続的な）分岐ターゲットアドレスから、または分岐が取られないと予測される場合には次の連続アドレスから、命令をフェッチする。分岐予測器２２は、特定の分岐が取られる可能性が高いか否かを予測するための情報を記憶するための１つ以上の分岐履歴テーブルを含んでもよい。たとえば、分岐履歴テーブルは、先に実行された分岐の実際の結果を追跡するため、または分岐に対してなされた予測の信頼性を表すための、カウンタを含んでもよい。分岐予測器２２はまた、後に同じ分岐命令に遭遇したときにこれらが予測され得るように、分岐命令の以前のターゲットアドレスをキャッシュするための分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）２４を含んでもよい。
【００４４】
フェッチされた命令は、復号済み命令を生成する命令を複合する復号ステージ８に渡される。復号済み命令は、適切な処理動作を実行するように実行ステージ１２を制御するための制御情報を含んでもよい。キャッシュ２０からフェッチされたいくつかのより複雑な命令では、復号ステージ８はこれらの命令を複数の復号済み命令にマッピングしてもよく、これはマイクロ操作（μｏｐまたはｕｏｐ）としても知られる。したがって、Ｌ１命令キャッシュ２０からフェッチされた命令とパイプラインの後のステージで見られるような命令との間には１対１の関係がないかも知れない。一般に、本出願における「命令」の言及は、マイクロ操作を含むものとして解釈されるべきである。
【００４５】
復号済み命令は発行ステージ１０に渡され、ここで命令の実行に必要なオペランドが利用可能か否かを判断し、オペランドが利用可能なときに実行用の命令を発行する。いくつかの実施形態は、Ｌ１命令キャッシュ２０から命令がフェッチされたプログラム順に対応する順序で実行するために命令が発行されるように、インオーダー処理をサポートしてもよい。別の実施形態は、プログラム順とは異なる順序で実行ステージ１２に命令が発行され得るように、アウトオブオーダー実行をサポートしてもよい。アウトオブオーダー処理は、オペランドを待っている間に先の命令が停止している間、オペランドが利用可能なプログラム順で後の命令が先に実行できるので、性能を向上させるのに有益であり得る。
【００４６】
発行ステージ１０は、様々なデータ処理動作を行うために命令が実行される実行ステージ１２に命令を発行する。たとえば、実行ステージは、整数値に対して算術または論理演算を実行するための算術／論理ユニット（ＡＬＵ）３０と、浮動小数点の形態で表される値に対して演算を実行するための浮動小数点（ＦＰ）ユニット３２と、レベル１（Ｌ１）データキャッシュ３６からレジスタ４０にデータ値をロードするためのロード操作、またはレジスタ４０からＬ１データキャッシュ３６にデータ値を記憶させるための記憶操作を実行するためのロード／ストアユニット３４とを含む、多数の実行ユニット３０、３２、３４を含んでもよい。これらは提供され得る実行ユニットのタイプのいくつかの例に過ぎず、その他多くの種類も提供され得ることは、理解されるだろう。処理動作を実行するために、実行ステージ１２は、レジスタ４０のセットからデータ値を読み取ってもよい。実行された命令の結果はその後、書き戻しステージ１４によってレジスタ４０に書き戻されてもよい。
【００４７】
Ｌ１命令キャッシュ２０およびＬ１データキャッシュ３６は、複数レベルのキャッシュを含むキャッシュ階層の一部であり得る。たとえば、レベル２（Ｌ２）キャッシュ４４もまた提供されてもよく、任意選択的に、さらなるレベルのキャッシュが提供されることも可能である。この例では、Ｌ２キャッシュ４４はＬ１命令キャッシュ２０とＬ１データキャッシュ３６との間で共有されるが、他の例は別個のＬ２命令およびデータキャッシュを有してもよい。フェッチすべき命令がＬ１命令キャッシュ２０内にないときには、Ｌ２キャッシュ４４からフェッチされることが可能であり、同様に、命令がＬ２キャッシュ４４内にない場合には、メインメモリ５０からフェッチされることが可能である。同様に、ロード命令に応答して、Ｌ１データキャッシュ３６内になければデータはＬ２キャッシュ４４からフェッチされ、必要であればメモリ５０からフェッチされることが可能である。キャッシュ階層を管理するために、あらゆる既知のスキームが使用され得る。
【００４８】
プログラム命令およびデータ値を参照するためにパイプライン４によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメインメモリ５０、および任意選択的にキャッシュ階層の少なくともいくつかのレベルも、物理的にアドレス指定され得る。したがって、パイプライン４によって使用される仮想アドレスを、キャッシュまたはメモリにアクセスするために使用される物理アドレスに変換するために、変換ルックアサイドバッファ５２（ＴＬＢ）が提供され得る。たとえば、ＴＬＢ５２は、仮想アドレス空間の対応するページの仮想ページアドレスおよび対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされる対応する物理ページアドレスを各々が指定する、多数のエントリを含んでもよい。たとえば、仮想および物理ページアドレスは、対応する仮想および物理アドレスの最も重要な部分に対応してもよく、残りの最も重要ではない部分は、仮想アドレスを物理アドレスにマッピングするときに変更されないままである。アドレス変換情報だけでなく、各ＴＬＢエントリはまた、アドレスの特定のページがパイプライン４の特定モードにおいてアクセス可能であるか否かを示すなど、アクセス許可を指定する何らかの情報も含み得る。いくつかの実施形態では、ＴＬＢエントリはまた、キャッシュ階層のどのレベルが読み取りまたは書き込み動作に応答して更新されるか（たとえばキャッシュはモードを通じて書き戻しまたは書き込みのどちらで動作すべきか）を定義するキャッシュポリシー情報、またはデータアクセスがパイプライン４によって発行された順序と比較して、対応するページ内でアドレス指定するためのデータアクセスがメモリシステムによって記録され得るか否かを定義する情報など、アドレスの対応するページの他の特性を定義することもできる。
【００４９】
図１は単一レベルのＴＬＢ５２を示すが、レベル１（Ｌ１）ＴＬＢ５２が最近アクセスされた多くのページにおけるアドレスを変換するためのＴＬＢエントリを含むことができ、より多くのページのエントリを記憶するためにレベル２（Ｌ２）ＴＬＢが提供され得るように、ＴＬＢの階層が設けられてもよいことは、理解されるだろう。必要なエントリがＬ１ＴＬＢ内に存在しないときには、Ｌ２ＴＬＢから、または階層内のさらなるＴＬＢから、フェッチされることが可能である。ページにアクセスするために必要なエントリがＴＬＢのいずれにもないときには、メモリ５０内のページテーブルにアクセスするためにページテーブルウォークが実行され得る。本技術では、あらゆる既知のＴＬＢ管理スキームが使用され得る。
【００５０】
また、いくつかのシステムは、たとえば、第１のＴＬＢ（またはＴＬＢの階層）が仮想アドレスを中間アドレスに変換するために使用されることが可能となり、その後１つ以上のさらなるＴＬＢを使用する第２のレベルのアドレス変換が中間アドレスをキャッシュまたはメモリにアクセスするために使用される物理アドレスに変換し得るように、複数レベルのアドレス変換をサポートしてもよいことが理解されるであろう。これは、たとえば、第１のレベルのアドレス変換がオペレーティングシステムによって管理され、第２のレベルのアドレス変換がハイパーバイザによって管理される仮想化をサポートするのに有益であり得る。
【００５１】
図１に示されるように、装置２は、境界ポインタレジスタ６０のセットを有してもよい。境界ポインタレジスタのセットは汎用データレジスタ４０のセットとは物理的に別個のものとして図１に示されているが、一実施形態では、汎用データレジスタおよび境界ポインタレジスタの両方を提供するために、同じ物理ストレージが使用されてもよい。
【００５２】
各境界ポインタレジスタ６０は、アクセスされるデータ値のアドレスを決定するために使用され得るポインタ値６２と、対応するポインタ６２を使用するときにアドレスの許容範囲を指定する範囲情報６４とを含む。境界ポインタレジスタ６０はまた、ポインタの使用に対する１つ以上の制限／許可を定義し得る、制限情報６６（本明細書では許可情報とも呼ばれる）も含み得る。たとえば、制限６６は、ポインタ６２を使用し得るタイプの命令、またはポインタが使用可能なパイプライン４のモードを制限するために使用され得る。したがって、範囲情報６４および制限情報６６は、その中でポインタ６２を使用することができる機能を定義すると見なされてもよい。定義された機能以外でポインタ６２を使用しようとすると、エラーがトリガされ得る。範囲情報６４はたとえば、ポインタが特定の既知の境界内に留まり、機密のまたは安全な情報を含む可能性のあるメモリアドレス空間の別の領域に迷い込まないことを保証するために、有益であり得る。同じ物理ストレージが汎用データレジスタおよび境界ポインタレジスタの両方に使用される実施形態では、一実施形態において、ポインタ値６２はたとえば、対応する汎用レジスタに使用されたのと同じ記憶場所に記憶されてもよい。
【００５３】
図２は、データまたは命令への不正アクセスを防止するために許容範囲が使用される命令のタイプの例を示している。図２の上部に示されるように、特定の境界ポインタレジスタＰＲ１は、所与のポインタ値６２および範囲情報６４を含み、これはこの例では、許容範囲の下限を定義する下限アドレス６８および許容範囲の上限を定義する上限アドレス６９を使用して指定される。たとえば、境界６８、６９は、アドレス８００００から８１０００の範囲を定義するように設定されている。特定の命令が境界ポインタレジスタＰＲ１を参照し、ポインタ６２から決定されたアドレスがこの範囲外にあるときに、エラーがトリガされる可能性がある。
【００５４】
たとえば、図２のパートＡに示されるように、いくつかのシステムでは、ポインタレジスタ６０のポインタ６２の値を範囲情報６４によって指定された範囲外の値に設定しようとするときに、エラーがトリガされる可能性がある（ここでは、ポインタがアドレスを直接指定すると仮定する）。これにより、ポインタを使用する任意のアクセスが安全に範囲内にあると保証され得るように、ポインタ６２が指定された範囲外のいかなる値を取ることも回避する。あるいは、図２のパートＢに示されるように、そのアドレスが指定された範囲外にあるときにポインタ６２のアドレスによって識別された場所に命令がアクセスしようとするときに、エラーがトリガされ得る。したがって、指定された範囲外の値にポインタ６２を設定することは依然として許容範囲内であり得るが、ポインタアドレス（またはポインタから導出されるアドレス）におけるデータアクセスが一旦試行されると、アドレスが許容範囲外にある場合にエラーがトリガされる可能性がある。他のシステムは、図２のパートＡおよびＢに示される両方のタイプの命令に応答してエラーをトリガし得る。
【００５５】
範囲情報６４は、様々な方法で設定され得る。たとえば、セキュアコード、またはオペレーティングシステムまたはハイパーバイザは、所与のポインタに許可される範囲を指定できる。たとえば、命令セットアーキテクチャは、所与のポインタ６２の範囲情報６４を設定または修正するための多数の命令を含んでもよく、これらの命令の実行は、特定のソフトウェアまたは特定のモードまたはプロセッサ４の例外レベルに制限され得る。範囲情報６４を設定または修正するための任意の既知の技術が使用され得る。
【００５６】
ポインタを参照する特定の命令を実行するときに実行状態１２で使用され得る境界ポインタ記憶素子６０のセットに加えて、プログラムカウンタ機能（ＰＣＣ）レジスタ８０もまた、レベル１命令キャッシュ２０から命令がフェッチされているときにフェッチステージ６で類似の機能性を提供するために使用されてもよい。特に、プログラムカウンタポインタがフィールド８２に記憶されてもよく、ＰＣＣ８０はまた、境界ポインタ記憶素子６０のセット内にポインタの各々が設けられた範囲および制限情報と類似の、範囲情報８４および任意の適切な制限情報８６を提供する。
【００５７】
さらに、一実施形態では、非境界ポインタもまた、汎用レジスタ４０内で指定され、メモリアクセスを実行するときに使用されてもよい。このような非境界ポインタを使用してアクセスされ得るメモリアドレスを制限するために、機能レジスタのいずれかに含まれる範囲および制限情報と類似の、範囲情報９２および任意の制限データ９４の両方を指定するデフォルトデータ機能（ＤＤＣ）レジスタ９０が設けられてもよい。次いで、汎用レジスタ４０内の非境界ポインタを参照してメモリアドレスを識別するメモリアクセス命令が実行されると、境界ポインタに関して実行された境界チェック動作と類似の境界チェック動作は、その非境界ポインタから導出された任意のアドレスに基づいて、しかしこの事例ではＤＤＣレジスタ９０内に保持された範囲および制限情報を考慮して、依然として実行可能である。このようなアプローチにより、たとえば、既存のソフトウェアライブラリ内で何らかの機能非認識コードを利用したい機能認識コードは、その機能非認識コードを実行するときに汎用レジスタ４０からポインタがどのようにアクセスされるかが使用されることに対して制約を課すようにＤＤＣレジスタ９０を設定することが可能である。特に、このような機能非認識コードを実行するときにアクセスされ得るアドレス範囲を限定するために、範囲情報が使用され得る。
【００５８】
境界ポインタレジスタ内で境界ポインタによって識別されたメモリアドレスのいずれの特定の範囲も、データ、命令、および／またはその他の機能（すなわち、他の境界ポインタ）を含み得る。したがって、いずれかの時点で、メモリにアクセスする処理回路の機能は、境界ポインタレジスタ内で識別された機能およびこれらの境界ポインタレジスタ内に保持される機能を介してアクセス可能な任意のさらなる機能を含む機能のセットによって定義されることが理解され、この機能のセットは本明細書では、機能領域と呼ばれる。
【００５９】
ＰＣＣレジスタ８０またはＤＤＣレジスタ９０内で指定された範囲情報および任意の関連する制限は、様々な方法で設定され得る。しかしながら、一実施形態では、この情報は、現在の機能領域について識別されたメモリアドレス範囲外に常駐するＰＣＣまたはＤＤＣベースの境界チェックを使用してメモリアドレスにアクセスできないように、現在の機能領域内で処理回路が利用可能な境界ポインタの１つ以上を使用して決定される。
【００６０】
図３は、それらのデータブロックが機能（すなわち境界ポインタおよび関連する制限情報）を表すか正常データを表すかを識別するために個々のデータブロックに関連してタグビットがどのように使用されるかを、概略的に示す。特に、メモリアドレス空間１１０は一連のデータブロック１１５を格納し、これは通常、指定されたサイズを有する。純粋に説明のために、この例では、各データブロックは１２８ビットを有すると仮定する。各データブロック１１５に関連して、タグフィールド１２０が提供され、これは一実施形態では、タグビットと呼ばれる単一ビットフィールドであり、関連データブロックが機能を表すことを識別するように設定され、関連データブロックが正常データを表すことを示すためにクリアされ、したがって機能として扱うことはできない。セットまたはクリア状態に関連する実際の値は実施形態によって異なる可能性があると理解されるが、純粋に説明として、一実施形態では、タグビットが１の値を有する場合には関連データブロックが機能であることを示し、０の値を有する場合には関連データブロックが正常データを含むことを示す
【００６１】
機能が、図３に示される機能レジスタ１００などの境界ポインタレジスタ６０（本明細書では機能レジスタとも呼ばれる）の１つにロードされるときには、タグビットは機能情報と共に移動する。したがって、機能が機能レジスタ１００にロードされると、ポインタ１０２、範囲情報１０４、および制限情報１０６（以下、許可情報と呼ばれる）が機能レジスタにロードされる。加えて、この機能レジスタに関連して、またはその中の特定のビットフィールドとして、タグビット１０８は、内容が機能を表すことを識別するように設定される。同様に、機能がメモリに戻されると、関連するタグビット１２０は、機能が格納されたデータブロックに関連して設定される。このようなアプローチにより、機能と正常データとの間で区別し、正常データが機能として使用不可能であると保証することが、可能である。
【００６２】
図示される実施形態では、装置は異なる例外レベルで動作するように配置されており、各例外レベルは異なるソフトウェア実行特権を有する。さらに、複数の例外レベル間の遷移に、例外メカニズムが使用される。特に、例外エントリまたは例外終了の間、ソース例外レベルからターゲット例外レベルに切り替えるために切替動作が行われ得る。図１に示されるように、装置１０は、その動作中に処理回路によって参照される様々な制御および状態情報を記憶する様々な制御／状態レジスタ７０へのアクセスを有し、制御／状態レジスタ７０は、上述の切替動作の実行中に使用される様々なレジスタを含む。
【００６３】
図１に示されるように、プロセッサの現在の動作に関する様々な実行状態情報を取得するために、現在のプロセス状態７４は制御／状態レジスタ７０内に維持される。単一のボックス７４として図示されているが、現在のプロセス状態は必ずしも単一のレジスタ内に全て格納されるわけではなく、利用可能な制御／状態レジスタ７０内の多数の制御および状態レジスタ内に格納されてもよい。
【００６４】
動作中、たとえば割り込み、システム呼び出し、故障など、様々な異なるメカニズムによって例外がトリガされる可能性がある。一実施形態によれば、例外が取られると、切替動作の一部として例外エントリメカニズムがトリガされ、このプロセス中に現在のプロセス状態７４は保存済みプロセス状態７２として取得される。やはり、保存済みプロセス状態７２は単一のレジスタ内に、または複数のレジスタ内に、格納され得る。次いで、例外を処理するために、処理回路によって例外処理動作が実行される。処理回路が後に例外から復帰すると、保存済みプロセス状態が現在のプロセス状態に復元され、処理回路は、例外が取られる前に実行していた動作を続行できる。
【００６５】
処理回路の実行状態を複数の例外レベルで維持できるようにするために、必要に応じて別個の保存済みプロセス状態レジスタ（ＳＰＳＲ）７２および現在のプロセス状態レジスタ（ＣＰＳＲ）７４が複数の例外レベルで維持され得る。
【００６６】
図４は、一実施形態における様々な例外レベル間の相互関係を示している。例外レベルＥＬ０は最も低いソフトウェア実行特権を有し、ＥＬ０での実行は非特権実行と呼ばれる。１から３まで増加するｎの値は、ソフトウェア実行特権の増加を示す。ＥＬ２例外レベルは、プロセッサ仮想化のサポートを提供する。一方、ＥＬ３ステージは、２つのセキュリティ状態、すなわちセキュア状態および非セキュア状態のサポートを提供する。
【００６７】
これは、図４に示される一般的なツリー構造をもたらす。特に、図４に示されるＥＬ３  ２００などのＥＬ３例外レベルが提供された場合、これはセキュア状態で実行される。非セキュア状態では、必要に応じて仮想化をサポートすることができ、したがって、ＥＬ２例外レベル２０５は非セキュア状態で提供され得る。セキュア状態では、一実施形態において、ＥＬ２レベルは提供されず、代わりにＥＬ１レベル２３０がセキュア状態で提供されてもよく、その下で多くの異なるＥＬ０レベル２４０、２４２が提供され得る。
【００６８】
非セキュア状態では、ＥＬ２レベル２０５が提供された場合、その下で複数のＥＬ１レベル２１０、２１２、２１４をサポートしてもよく、これらのＥＬ１レベルの各々は、参照番号２２０、２２２で概略的に示されるように、１つ以上のＥＬ０レベルをサポートしてもよい。
【００６９】
様々な例外レベル間の遷移は、例外を取ることで行われる。しかしながら、全ての例外が例外レベルを変化させるわけではない。たとえば、一実施形態では、ＥＬ０からの例外は通常、ＥＬ１で取られる（ただし、いくつかの構成ではＥＬ２）。ＥＬ１以上からの例外は、一実施形態では、一般的に同じ例外レベルで取られ得る。しかしながら、ＥＬ１からＥＬ２／ＥＬ３までおよびＥＬ２からＥＬ３までの様々な例外もまた提供されてもよく、類似の目的に使用されることが可能である。ＥＬ３での例外は、一実施形態では、常にＥＬ３で取られる。図４に示されるように、例外レベルの各々に関連して、保存済みプロセス状態レジスタが提供され得る。ＥＬ０からの例外がＥＬ１で取られるケースが常である場合には、ＥＬ０レベルに関連して別個のＳＰＳＲの必要はない。しかしながら、一実施形態では、ＥＬ０からの特定の例外がＥＬ０レベルで取られ得る配置であってもよく、その場合、ＥＬ０の別個のＳＰＳＲレジスタが提供され得る。
【００７０】
残りの図を参照して記載されるように、本明細書に記載される実施形態では、複数の例外レベルでの動作を可能にするタイプの処理回路で使用するために、機能の使用を管理する柔軟な技術が開発された。
【００７１】
特に、図１に示されるように、制御／状態レジスタ７０は、各例外レベルの機能構成情報を格納するための例外レベルごと機能構成レジスタ７６を含む。機能構成情報は、様々な異なるタイプの情報を取得することができるが、一実施形態では、少なくとも、その例外レベルで命令を実行するときに処理回路によって実行される動作が機能によって制限されるか否かを識別する。
【００７２】
このような機能構成情報を例外レベルごとに指定できることにより、必要に応じて、少なくとも１つの例外レベルのソフトウェアを機能によって制限しない柔軟性を提供する。したがって、たとえば、高い例外レベルで実行している信頼性の高いソフトウェアは、機能によって制限されずに動作することができ、これにより、このようなソフトウェアの機能チェックルーチンを実行する必要性を回避することによる性能利点をもたらすことができる。これはまた、機能ベースのアーキテクチャと互換性を持たせるようにこのようなソフトウェアを修正する必要がある範囲を減少させることもできる。実際、いくつかの実施形態では、このメカニズムは、レガシ、機能非認識、ソフトウェアを少なくとも１つの例外レベルで実行できるようにする。
【００７３】
図５は、一実施形態による、レジスタ７６内で取得された例外レベルごとの機能構成情報を概略的に示す表である。この実施形態では、レジスタ３００は、各例外レベルについて２ビットフィールドを備えてもよい。最初のフィールド３０５は、関連する例外レベルが機能の影響を受けるか否かを識別することができ、このフィールドは、本明細書では「Ａ」ビットとも呼ばれる。したがって、このビットは、ソフトウェアが関連する例外レベルを実行しているときに、そのソフトウェアが機能によって制限されているか否かを識別する。図５に示される例では、「０」の値は、ソフトウェアが機能によって制限されていないことを示し、「１」の値は機能によって制限されていることを示す。しかしながら、別の実施形態では、必要に応じて論理ゼロ値と論理１値の意味が逆転され得ることは、理解されるだろう。
【００７４】
一実施形態では、例外レベルごとの機能構成情報はフィールド３０５のみを備えてもよいが、代替実施形態では、関連する例外レベルで実行するソフトウェアが、１つ以上のより低い例外レベルで処理回路によって実行される動作を制限するために後に使用される機能を管理できるか否かを識別するために、追加のフィールド３１０が提供される。任意選択的に、この情報はまた、特定の例外レベルで実行しているソフトウェアが、同じ例外レベルで処理回路によって実行される動作を制限するために使用される機能も管理できるか否かを識別してもよい。たとえば、一実施形態では、特定の例外レベルで実行するソフトウェアが異なる「コンパートメント」内で実行されるように配置することができ、１つのコンパートメントで実行するソフトウェアは、別のコンパートメントで実行するソフトウェアによって行われる動作を制限するために後に使用される機能を管理することができる。具体例として、特定の例外レベルで実行するソフトウェアは監視状態または制限状態で動作することができ、監視状態で１つのコンパートメントを実行するソフトウェアは、同じ例外レベルの別のコンパートメントで実行するソフトウェアを制限するために後に使用される機能を管理することができる。
【００７５】
図５に示されるように、機能を管理するために特定の例外レベルで実行するソフトウェアの機能に関する情報を取得するために使用されるフィールド３１０は、一実施形態では、「Ｍ」ビットと呼ばれてもよい。
【００７６】
図５に示されるように、ＡビットおよびＭビットの両方がクリアされた場合には、そのソフトウェアが機能の影響を受けないだけでなく、機能を管理することもできず、したがって装置の機能ベースのアーキテクチャを考慮するように修正される必要もないので、これは関連する例外レベルで実行するソフトウェアがレガシソフトウェアであることを意味する。
【００７７】
やはり図５に示されるように、別の任意選択的な状態は、ＡビットはクリアされるがＭビットは設定される状態である。これは、関連する例外レベルで実行するソフトウェアが、機能自体の影響は受けないが、より低い例外レベルで実行するソフトウェアによって行われる動作を制限するために後に使用される機能を管理するために使用され得ることを、意味する。
【００７８】
別の選択肢として、ＡビットおよびＭビットの両方が設定され得る。これは、関連する例外レベルで実行するソフトウェアが、機能自体の影響を受け、機能を管理することもできることを意味する。先に述べられたように、Ｍビットが設定されたとき、これは一実施形態において、関連する例外レベルで実行するソフトウェアが、より低い例外レベルでソフトウェアによって行われる動作を制限するために後に使用される機能を管理できることを示し得るが、ソフトウェアは同じ例外レベルでは機能を管理できない可能性がある。しかしながら、代替実施形態では、いくつかの状況において、同じ例外レベルに関連する機能を管理することもできるかも知れない。
【００７９】
一実施形態では、図５に示される最初の３セットのエントリのみが、ＡビットおよびＭビットの有効な状態である。しかしながら、代替実施形態では、たとえば最も低い例外レベルＥＬ０に関連するいくつかの事例において、表３００の最後のエントリによって示されるような状態のさらなるセットが利用可能であり得る。特に、この状態に関連して、Ｍビットはクリアされるが、Ａビットは設定される。これは、その例外レベルで実行するソフトウェアは機能を管理できないが、機能によって制限される可能性があることを意味する。これは、それ以上低い管理すべき例外レベルがない、最も低い例外レベルＥＬ０を可能にする適切な構成であり得る。特定の具体例として、これにより、通常はこれらの機能がより高い例外レベルによって設定された後で、ＥＬ０で実行するソフトウェアは、プログラムカウンタ機能８０およびＤＤＣ９０などの機能によって制限され得る。
【００８０】
一実施形態では、例外レベルごと機能構成レジスタ７６は複数のレジスタで形成されると見なされることが可能であり、各レジスタは、関連する例外レベルによって「所有」され、その例外レベルのＡビットおよびＭビットを含む。これらのレジスタは明確にアクセスされ、より高い例外レベルはそのレベル以下のレジスタへのアクセスを有する。たとえば、ＥＬ２例外レベルは、ＥＬ２、ＥＬ１、およびＥＬ０に影響する機能構成レジスタへのアクセスを有する。特定の一実施形態では、ＥＬ０の機能構成自体は、ＥＬ１またはＥＬ２のいずれかによって所有されるレジスタによって構成可能に制御される。
【００８１】
一実施形態では、各例外レベルによる機能構成レジスタへのアクセスは、いずれか適切なメカニズムによって制御され得る。特定の例外レベルにアクセス可能な機能構成レジスタに記憶された値はその後、一実施形態において、動作中、たとえばそれぞれ機能認識および機能非認識のＶＭゲストの間で切り替えるときに、動的に変更され得る。
【００８２】
図６は、より高い構成レベルに関連付けられた機能構成が、より低い例外レベルで利用可能な機能構成にどのように影響を及ぼし得るかを示す、表３２０である。この表では、より高い例外レベルＰのＭビット値およびＡビット値はフィールド３２５、３３０によって示され、対応するより低い例外レベルＱのＭビットおよびＡビットはフィールド３３５、３４０によって示されている。この実施形態では、例外レベルＰでＭビットがクリアされた場合には（すなわち、論理ゼロ値）、これは、より高い例外レベルは機能による影響を受けることが不可能であり、その一方でより低い例外レベルで機能を構成することが不可能なので、例外レベルＰは機能の影響を受けることが不可能であることを意味する（すなわち、実際の値に関係なく、そのＡビットもまたクリアされるものとして扱われる）。より高い例外レベルが機能を管理できない場合には、より低い例外レベルは機能を管理することができないので、例外レベルＰについてフィールド３２５内のＭビットをクリアすることはまた、例外レベルＱのＭビットがクリアされなければならないこと（すなわち、ゼロ）を意味する。例外レベルＰと同様に、例外レベルＱのフィールド３３５内のＭビットをクリアすることは、フィールド３４０の値を読み取る以外の全ての目的のために、フィールド３４０内のＡビットもまたクリアとして扱われることを意味する。
【００８３】
次の３つのエントリは、例外レベルＰが機能を管理できるが、機能による影響は受けない状況を示している。このような配置では、図５の表３００に示される上位３つのエントリの各々が、例外レベルＱに関連して利用可能である。さらに、図５を参照して先に述べられたように、一実施形態では、例外レベルＱが最も低い例外レベルである場合、例外レベルＱが機能によって制限されるが機能を管理することはできないように、Ｍビットフィールド３３５がクリアされてＡビットフィールド３４０が設定されることが可能である。
【００８４】
図６の最後の３つのエントリは、ＭビットおよびＡビットの両方が例外レベルＰのために設定されている状況を示している。やはり、図５の表３００に示される上位３つのエントリは、例外レベルＱに利用可能である。さらに、先に述べられたように、例外レベルＱが最も低い例外レベルであるとき、ＭビットはクリアされるがＡビットは設定されることもまた可能である。
【００８５】
先に述べられたように、例外エントリまたは例外終了／復帰の際に、ソース例外レベルからターゲット例外レベルに切り替えるために切替動作が行われ得る。記載される実施形態によれば、機能の効果は例外レベルごとに変更し得るので、装置はまた、切替動作の一部として、ソース例外レベルとターゲット例外レベルとの間で機能の効果が異なる可能性を考慮するメカニズムも提供する。特に、ソース例外レベルからターゲット例外レベルへの切替動作中に、ソース例外レベルおよび宛先例外レベルのうちの少なくとも１つに関する機能構成ストレージ内の機能構成情報は、処理回路の実行状態が切替動作中にどのように管理されるかを決定するために使用される。このプロセスは、図７Ａ、図７Ｂ、および図８を参照して、より詳細に説明される。
【００８６】
図７Ａは、ソース例外レベルＸのどの実行状態が保存されるべきかを決定するために、例外レベルＸから例外レベルＹまでの例外エントリに対して実行されるステップを示す。ステップ４００において、Ａビットがソース例外レベルＸのために設定されるか否か、すなわち例外レベルＸが機能による影響を受けるか否かが判断される。そうである場合には、プロセスはステップ４０５に進み、例外レベルＸの機能状態が取得される。先に説明されたように、これは、例外レベルＸの現在のプロセス状態レジスタ（ＣＰＳＲ）の内容が、例外レベルＹにアクセス可能な保存済みプロセス状態レジスタ（ＳＰＳＲ）７２内に保存されることを意味する。しかしながら、加えて、ＰＣＣレジスタ８０内に格納された現在のプログラムカウンタ機能は、ソース例外レベルＸの優先リターンアドレス機能を識別するために使用される必要がある。優先リターンアドレスは、例外のタイプに依存するが、典型的にはプログラムカウンタ値、またはプログラムカウンタ値プラス４である（バイトサイズのアドレス指定および３２ビット命令を想定）。優先リターンアドレスに加えて、現在のプログラムカウンタ機能からの残りの機能情報も、ＰＣＣから生成されたリターンアドレス機能にコピーされる。一実施形態では、このようにして生成されたリターンアドレス機能は、専用リターンアドレス機能レジスタ内に格納され、特定の一実施形態では、これは機能例外リンクレジスタ（ＣＥＬＲ）７８）である。
【００８７】
しかしながら、ステップ４００においてＡビットが設定されていないと判断された場合、これはソース例外レベルで実行するソフトウェアが機能による影響を受けないことを意味するので、例外レベルＸの現在のプロセス状態７４が保存済みプロセス状態７２に保存されたままであるが、リターンアドレス情報を形成するための機能を保存する必要はない。代わりに、優先リターンアドレスがプログラムカウンタ値８２から計算され、適切なリターンアドレス記憶素子内に保存されることが可能であり、一実施形態では、これは例外リンクレジスタ（ＥＬＲ）である。しかしながら、例外レベルＸで実行するソフトウェアは、その命令フェッチが機能によって制限されないので、ＰＣＣレジスタ８０から機能情報が抽出される必要はない。
【００８８】
一実施形態では、別個のＣＥＬＲレジスタ７８および別個のＥＬＲレジスタが提供され得るが、代替実施形態では、いずれの場合も同じ物理構造７８が使用され得る。ソース例外レベルＸが機能によって制限されないために図７Ａに示されるプロセスがステップ４１０に進むと、ＰＣ値から導出された優先リターンアドレスはＣＥＬＲのアドレスフィールド内に記憶されることが可能であり、一実施形態では、残りのフィールドの少なくとも１つが最初のデフォルト値に設定される。たとえば、図３を参照して説明された前述のタグビットを参照すると、ＣＥＬＲレジスタ７８に関連付けられたタグビットはこのような事例において、ＣＥＬＲが有効な機能を格納していないことを識別するためにクリアされてもよく、ハードウェアはその後、例外復帰に関する情報を後者が回収するときにリターンアドレス情報を記憶するＣＥＬＲの部分を単に参照する。代替実施形態では、ＣＥＬＲレジスタ７８内の残りのフィールドの全てが、たとえばステップ４１０でＣＥＬＲレジスタ７８内に格納された優先リターンアドレスをゼロ拡張することによって、クリアされ得る。
【００８９】
ソース例外レベルＸのどの実行状態が例外エントリに保存される必要があるかの判断に加えて、宛先例外レベルＹに適した実行状態を決定することも必要であり、特にＰＣＣレジスタ８０に格納すべき初期プログラムカウンタ機能または値を決定することが必要である。このプロセスは、図７Ｂに概略的に示されている。
【００９０】
図示されるように、ステップ４２０において、Ａビットが宛先例外レベルＹに設定されるか否か、すなわち宛先例外レベルが機能による影響を受けるか否かが判断される。そうである場合には、プロセスはステップ４２５に進み、プログラムカウンタ機能レジスタ８０は、図１に示される機能制御記憶素子７９に記憶された例外エントリアドレス機能情報を使用して更新される。特に、レジスタ７９は、例外エントリ上で使用される適切なアドレスに関する情報、ならびにＰＣＣレジスタ８０内に格納されるプログラムカウンタ機能を形成するためにそのアドレスに加えて提供される関連する機能情報も、格納する。レジスタ７９内の例外エントリアドレス情報は、様々な形態を取ることができるが、一実施形態では、レジスタ７９は、機能ベクトルベースアドレスレジスタ（ＣＶＢＡＲ）の形態を取る。このレジスタは、例外エントリのベースアドレスを提供し、例外は、例外タイプに応じてこのベースアドレスからのオフセットを決定する。したがって、例外のタイプに関する情報は、ＰＣＣレジスタ８０内にロードされるプログラムカウンタ機能を形成するために使用される適切なアドレスを識別するために使用され、ＰＣＣレジスタの機能情報の残りの部分は、ＣＶＢＡＲ内の機能の対応する部分から形成される。
【００９１】
Ａビットが宛先例外レベルＹのために設定されている場合、これは、例外レベルＹが機能による影響を受けておらず、したがってプログラムカウンタ機能は必要とされないことを、意味する。代わりに、ＰＣＣレジスタ８０のフィールド８２内にロードされる初期プログラムカウンタ値を形成するだけでよい。したがって、一実施形態では、ステップ４３０によって示されるように、このシナリオにおいて、ＰＣＣレジスタ８０のフィールド８４、８６内の範囲および制限情報は最大機能を識別するように設定され、ＰＣポインタ値８２は例外エントリアドレスレジスタ７９から得られた情報を使用して更新される。この例では、非機能例外エントリアドレスレジスタが参照されるが、これは一実施形態において、ベクトルベースアドレスレジスタ（ＶＢＡＲ）であってもよい。特定の一実施形態では、ＶＢＡＲレジスタは、ＣＶＢＡＲレジスタの下位６４ビットに形成され、ＣＶＢＡＲおよびＶＢＡＲレジスタの両方が同じ物理ストレージ構造を共有できるようにする。
【００９２】
しかしながら、代替実施形態では、最大機能を識別するようにＰＣＣレジスタ８０内に範囲および制限情報を設定する必要がないかも知れない。たとえば、現在の例外レベルが機能による影響を受けないときにＰＣＣレジスタ８０内の範囲および制限情報８４、８６を無視するように、ハードウェアが配置されている場合には、必要に応じて、範囲および制限情報は代わりに変更されないままであるか、またはクリアされてもよい。しかしながら、最大機能を識別するように範囲および制限情報を設定することによって、全ての状況においてＰＣＣレジスタ８０全体が参照される実施形態では、これにより、宛先例外レベルで実行するソフトウェアが機能によって制限されないことを保証する。
【００９３】
図８は、例外からの復帰中に取られるステップを示すフロー図である。この事例では、ソース例外レベルは例外レベルＹであり、宛先例外レベルは例外レベルＸであると想定される。ステップ４５０において、Ａビットが宛先例外レベルＸに設定されるか否かが判断される。そうである場合には、プロセスはステップ４６０に進み、機能状態が宛先例外レベルのために復元される。これは、ＣＥＬＲレジスタ７８の内容をＰＣＣレジスタ８０内に復元し、ＳＰＳＲレジスタ７２の内容を例外レベルＸ用のＣＰＳＲレジスタ７４内に復元することによって、図７Ａのステップ４０５で取られるステップを本質的に逆転させる。
【００９４】
しかしながら、Ａビットが宛先例外レベルＸに設定されていないと判断された場合には、例外レベルＸは機能による影響を受けないことを意味するので、プロセスはステップ４５５に進む。ここで、（非機能）状態が例外レベルＸのために復元される。一実施形態では、これはやはり、例外レベルＸのためにＳＰＳＲ内容がＣＰＳＲ内容に復元されることを伴う。しかしながら、ＰＣＣレジスタ８０に関して、一実施形態では、範囲および制限情報は最大機能を識別するように設定され、ポインタ値フィールド８２はＥＬＲからの情報を使用して取り込まれる。図７Ｂのステップ４３０に関連して先に説明されたのとほとんど同じように、いくつかの実施形態では、現在の例外レベルが機能の影響を受けていない状況でハードウェアがその情報を参照しないならば、最大機能を識別するように範囲および制限情報を設定する代わりとして、範囲および制限情報を「そのまま」にするか、またはその情報をクリアするだけでよい。
【００９５】
以下に記載される実施形態では、例外レベルごと機能構成レジスタ７６内に記憶された前述の機能構成情報は、特に特定のタイプの命令を実行するときに生成される結果の形態に影響を及ぼすためなど、追加の目的にも使用され得る。特に、一実施形態では、前述のＡビットは機能使用情報として使用されることが可能であり、特定のタイプの命令が処理回路によって実行されると、生成される結果が機能または整数値のどちらとして生成されるべきかを判断するために、処理回路はその機能使用情報を参照する。特に、一実施形態では、関連する例外レベルが機能の影響を受けることをＡビットが示す場合には、特定のタイプの命令が実行されると、処理回路は、機能の形態で結果を生成させる。反対に、関連する例外レベルが機能の影響を受けないとＡビットが示す場合には、このような命令を実行すると、処理回路は整数値の形態で結果を生成する。
【００９６】
以下の説明のために、Ａビット情報は機能使用情報として使用されると想定されるが、代替実施形態では、この目的のために他の情報が維持されてもよい。たとえば、機能使用情報を形成するために別個の専用制御ビットが提供され得るが、これは機能状態または非機能状態をそれぞれ示すために設定またはクリアされることが可能である。あるいは、機能使用情報、特に処理回路が機能状態または非機能状態のどちらで動作しているかを導出するために、既存のビットの組み合わせが使用されてもよい。
【００９７】
機能使用情報がどのように形成されるかに関係なく、特定の命令がどのように実行されるか、特にその命令がその結果として機能または整数値のどちらを生成するかに影響を及ぼすためにこのような情報を使用することで、単一の命令の構成可能な実行を可能にし、必要な動作に機能命令および非機能命令の両方を提供する必要性を回避することが、理解されるだろう。これは、命令セット符号化空間が既に頻繁に使用され、したがって命令の機能変数および非機能変数の両方を符号化するのに十分な空間を解放するのが困難な状況において、非常に有用であり得る。
【００９８】
図９は、一実施形態による、命令を実行するときに処理回路によって実行される動作を示すフロー図である。ステップ５００において、実行すべき新しい命令があると判断され、その後ステップ５０５において、その命令が、機能使用情報を参照して結果タイプの判定を行う必要があるタイプであるか否かが判断される。特に、命令を実行した結果が機能または整数値のどちらの形態で得られるかについての判断がなされる技術は、必要に応じて特定のタイプの命令に制限される可能性がある。一実施形態では、この技術が使用され得る命令のタイプの例は、結果として何らかの形態のアドレスを生成する命令である。機能ベースのアーキテクチャでは、これは後にそのアドレス情報がどのように使用されるかを厳しく制限するために使用され得るので、このようなアドレス情報は機能として生成されることが望ましい。しかしながら、下位互換性では、命令が整数値としてアドレス情報を生成できるようにすることが依然として有用であり、本明細書に記載される技術は、同じ命令が両方の目的に使用されることを可能にし、機能使用情報は、命令が実行されるときに、結果が機能または整数値のどちらとして生成されるかを構成するように配置される。
【００９９】
ステップ５０５において、命令が結果タイプの判定を行う必要のあるタイプではないと判断された場合には、プロセスはステップ５１０に進み、命令が通常通りに実行される。しかしながら、ステップ５０５において、結果タイプの判定が行われる必要のあるタイプであると判断された場合には、ステップ５１５において、その機能使用情報が機能状態であるか非機能状態であるかを判断するために、処理回路によって機能使用情報が参照される。先に述べられたように、Ａビットが機能使用情報として使用される一実施形態では、現在の例外レベルが機能による影響を受けることを識別するようにＡビットが設定されるとき、これは機能状態を示す。反対に、現在の例外レベルが機能による影響を受けないことを示すためにＡビットがクリアされる場合には、これは非機能状態を示す。
【０１００】
ステップ５１５において、機能使用情報が機能状態を示すと判断された場合には、ステップ５２０において、結果として機能を生成するような方法で命令が実行される。次いでステップ５２５において、結果は機能記憶素子に記憶される。
【０１０１】
ステップ５１５において機能使用情報が機能状態を示さない場合には、代わりにプロセスはステップ５３０に進み、結果として整数値を生成するような方法で命令が実行される。次いで、ステップ５３５において、この結果は整数記憶素子に記憶される。
【０１０２】
機能または整数値をそれぞれ記憶するために記憶素子として選択された機能記憶素子または整数記憶素子は、実行される命令のタイプに依存する。たとえば、いくつかの実施形態では、結果は更新されたプログラムカウンタとして生成され、これは、機能使用情報が機能状態を示すときにはＰＣＣレジスタ８０内にプログラムカウンタ機能として格納されることが可能であり、あるいは機能使用情報が非機能状態を示すときにはプログラムカウンタ記憶素子内にプログラムカウンタ値として格納されることが可能である。一実施形態では、機能レジスタは、プログラムカウンタ機能レジスタ８０内のフィールド、たとえばプログラムカウンタポインタ値を記憶するフィールド８２として形成され得る。
【０１０３】
別の実施形態では、結果は汎用レジスタ内に記憶されてもよく、したがって、結果が機能であるときには機能レジスタ６０の１つに格納されてもよく、結果が整数値として生成されるときには汎用レジスタ４０の１つに格納されることが可能である。図１に関連して先に説明されたように、一実施形態では、汎用レジスタ４０および機能レジスタ６０の両方を提供するために同じ物理ストレージが使用されてもよく、したがって汎用レジスタは、関連する機能レジスタ内のフィールド、たとえばフィールド６２によって形成され得る。
【０１０４】
図９の上記の技術は、様々な異なる命令に適用可能である。図１０Ａおよび図１０Ｂは、命令が分岐即値命令である一例を示している。このような命令は、ソースオペランドとして、命令のビット符号化空間内で直接符号化された即値を指定する。このような即値は命令符号化空間の大部分を専有する可能性があり、したがって、結果として機能を生成するバージョンと、結果として整数値を生成するバージョンとで、２回命令を複製する必要がないことが望ましい。図９の技術を使用することによって、これが回避される。
【０１０５】
特に、図１０Ａに示されるように、分岐即値命令が実行されると、機能使用情報が機能状態を示すか否かが判断され、これは先に説明されたように、一実施形態においてＡビットが設定される場合である。そうである場合には、現在のプログラムカウンタ機能６００は、新しいプログラムカウンタ機能６２０を生成するように修正される。特に、元のポインタ値６０２は、新しいポインタ値６２２を生成するために、たとえば追加６１０を実行することによって、即値と論理的に組み合わせられる。一実施形態では、元のプログラムカウンタ機能内の範囲および許可情報６０４、６０６は、フィールド６２４および６２６によって示されるように、新しいプログラムカウンタ機能６２０内で複製される。
【０１０６】
しかしながら、図１０Ｂに示されるように、同じ命令が実行されると、機能使用情報は非機能状態を示し、これは特定の一実施形態において、Ａビットがクリアされている場合であり、その後結果は、プログラムカウンタ機能ではなくプログラムカウンタ値（すなわち整数値）として生成される。図示される特定の実施形態では、プログラムカウンタ整数値は依然としてプログラムカウンタ機能レジスタ８０内に、特に図１に示されるフィールド８２内に格納されていると想定される。したがって、元のプログラムカウンタ値はＰＣＣレジスタ内容６３０内のフィールド６３２によって与えられる。この値は、更新されたＰＣＣレジスタ内容６５０のフィールド６５２に格納された新しいポインタ値を生成するために、たとえば加算６４０など、即値と組み合わせた論理演算を受ける。元のプログラムカウンタ機能内容６３０内の残りのフィールド６３４は、残りのフィールド６５４によって示されるように、新しいプログラムカウンタ機能内容６５０内で単に複製されてもよく、あるいは図１０Ｂの要素６４５によって示されるように、何らかの任意選択的な修正を受けてもよい。たとえば、一実施形態では、残りのフィールド６５４は、新しいプログラムカウンタ値が機能によって効果的に制限されないように、最大機能を表すように設定されてもよい。あるいは、図３に関連して説明された前述のタグビットは、プログラムカウンタ機能レジスタの内容が有効な機能を格納しないことを識別するように、クリアされてもよい。一実施形態では、その場合、フィールド６５２内のポインタ値が依然として有効なプログラムカウンタ整数値を表すと仮定することができる。
【０１０７】
しかしながら、代替実施形態では、このようなステップを取る必要がないかも知れない。たとえば、現在の例外レベルが機能による影響を受けないときにＰＣＣレジスタ８０内の範囲および制限情報を無視するように、ハードウェアが配置されている場合には、必要に応じて、（たとえばこれら残りのフィールド内へのゼロ拡張によって）範囲および制限情報は代わりに変更されないままであるか、またはクリアされてもよい。
【０１０８】
図１１Ａおよび図１１Ｂは、別のタイプの分岐命令、すなわちリンク付き分岐即値命令の構成可能な実行を示している。このような命令の実行は、図１０Ａおよび図１０Ｂを参照して先に説明された機能の性能をもたらすが、リンクレジスタにリターンアドレスも取り込み、これは一実施形態において、機能使用情報に応じてリターンアドレス機能またはリターンアドレス整数値となるように構成され得る。
【０１０９】
図１１Ａおよび図１１Ｂでは、図１０Ａおよび図１０Ｂと共通の要素を指すために同じ参照番号が使用されている。したがって、図１１Ａを参照すると、図１０Ａを参照して先に説明されたのとまったく同じ方法で、新しいプログラムカウンタ機能６２０が生成されることがわかる。加えて、機能リンクレジスタ（ＣＬＲ）内に格納するために、機能リターンアドレスが生成される。一実施形態では、機能リンクレジスタは、１つの特定の実施形態Ｃ３０において、図１を参照して説明された機能レジスタ６０の特定の１つであってもよい。図１１Ａに示されるように、フィールド６６２内に格納するためのリターンアドレスは、命令が実行される前に存在していたプログラムカウンタ機能内の現在のポインタ値６０２にオフセットを加えることによって生成される。一実施形態では、リターンアドレスが、リンク付き分岐命令に続く次の命令を効果的に指すように、ポインタ値に命令長が追加される。これは、図１１Ａの追加ボックス６７０によって示される。やはり図１１Ａに示されるように、一実施形態では、元のプログラムカウンタ機能のフィールド６０４、６０６内の範囲および許可情報は、リターンアドレス機能６６０を保持する機能リンクレジスタのフィールド６６４、６６６内で複製される。
【０１１０】
しかしながら、Ａビットがクリアされており、非機能状態を示す場合には、実行される処理は、図１１Ｂに示されるとおりである。新しいプログラムカウンタ値は、図１０Ｂを参照して先に説明されたのとまったく同じ方法で生成される。加えて、追加要素６７０によって示されるように、ポインタ値６３２に命令長を追加することによって、リターンアドレス６８２が生成される。これはリンクレジスタ内に格納されることが可能であり、リンクレジスタは、機能リンクレジスタとは物理的に別個であり、一実施形態では、汎用レジスタ４０の１つであってもよい。あるいは、リンクレジスタは、機能リンクレジスタ６８０内のフィールド（実質的にフィールド６８２）によって提供されてもよく、これは追加のフィールド６８４も含む。これら残りのフィールドは元のプログラムカウンタ機能６３０からの残りのフィールドデータ６３４を使用して直接取り込まれることが可能であり、または要素６７５によって示されるように、いくつかの任意選択的な修正を受けてもよい。これらの任意選択的な修正は、プログラムカウンタの残りのフィールドに関して実行され得る任意選択的な修正６４５について先に説明されたのと本質的に同じである。したがって、これらは最大機能を識別するように設定可能であり、タグビットは、機能リンクレジスタが有効な機能を格納していないことを示すためにクリアされてもよい。さらなる代替として、ハードウェアがいかなる場合もこれらのフィールド内の値を無視する場合には、これらのフィールドはゼロ拡張されるかまたはそのままにされてもよい。
【０１１１】
図１２Ａおよび図１２Ｂは、命令が分岐命令ではなくアドレス生成命令である、さらに別の代替実施形態を示す。この例では、アドレス生成命令は、結果が書き込まれる宛先の識別子と、ソースオペランドとして使用される即値とを指定する。
【０１１２】
図１２Ａに示されるように、Ａビットが設定されている間に命令が実行される場合には、これにより、生成されたアドレス情報は、宛先機能レジスタＣＮ内に格納された機能の形態を取り、この機能レジスタは宛先ＩＤに基づいて選択される。通常、機能レジスタは、図１を参照して先に説明された汎用機能レジスタ６０の１つとなる。
【０１１３】
この例では、現在のプログラムカウンタ機能７００内のポインタ値７０２は、アドレス値７２２を生成するために、指定された即値を使用して論理演算７１０を受ける。範囲および許可情報７０４、７０６は、一実施形態において、結果機能７２０のフィールド７２４、７２６内で複製されてもよい。論理演算７１０の形態は、アドレス生成命令のタイプに依存する。単純なケースでは、単にポインタ値７０２にオフセットとしての即値を追加することを伴ってもよい。
【０１１４】
図１２Ｂは、Ａビットがクリアされている場合のアドレス生成命令の実行を示す。この事例では、現在のプログラムカウンタ機能７３０内のポインタ値７３２は、即値を使用して論理演算７４０を受け、結果のアドレス値７５０はその後、整数レジスタＸＮの１つ（典型的には汎用レジスタ４０の１つ）内に格納され、選択された特定のレジスタは、アドレス生成命令内で指定された宛先ＩＤに基づいて選択される。プログラムカウンタ機能７３０の残りのフィールド７３４は、この事例においてアドレス生成命令の実行中には使用されない。
【０１１５】
図１２Ａおよび図１２Ｂの上記説明より、アドレス生成命令は、機能使用情報に応じて、アドレス機能またはアドレス整数値のいずれかを生成するために実行され得ることが、理解されるだろう。
【０１１６】
アドレス生成命令は様々な形態を取り得るが、特定の一実施形態では、英国ケンブリッジのＡＲＭ  Ｌｉｍｉｔｅｄによって設計されたプロセッサで使用されるＡＲＭ命令セットにおいて指定されたＡＤＲまたはＡＤＲＰ命令のいずれかの形態を取り得る。
【０１１７】
図１０Ａから図１２Ｂの例では、例として与えられた命令は、ソースオペランドとして即値を取る形態の全てであるが、記載された技術は、ソースオペランドとして即値を使用しない命令に関連しても使用され得ることに、注意すべきである。特に、整数レジスタおよび即値の両方を取る変数と同様に、整数レジスタ内の絶対またはＰＣ（Ｃ）相対分岐先を取る分岐変数および整数レジスタ内の絶対またはＰＣ（Ｃ）相対分岐先を取るアドレス生成変数もまた、可能である。
【０１１８】
たとえば、以下のタイプの命令実行がサポートされ得る。
【０１１９】
実施例１
BranchRegister(bits(5) n, boolean link)
Bits(64) addr = X[n];
if CapabilitiesEnabled() then
if link then
CLR = PCC + 4;
PCC = PCCWithAddress(addr);
Else
if link then
LR = PC + 4;
PC = addr;
(上記実施例１の命令の翻訳はつぎのとおり）
分岐レジスタ（ビット（５）ｎ、ブールリンク）
ビット（６４）ａｄｄｒ＝Ｘ［ｎ］；
機能イネーブル（）の場合には
リンクの場合には
ＣＬＲ＝ＰＣＣ＋４；
ＰＣＣ＝ＰＣＣアドレス付き（ａｄｄｒ）；
そうでなければ
リンクの場合には
ＬＲ＝ＰＣ＋４；
ＰＣ＝ａｄｄｒ；
【０１２０】
上記の実施例１は、「BranchRegister（分岐レジスタ）」形態によって示されるように、整数レジスタから絶対分岐先を取る分岐変数を識別する。値「ビット（５）ｎ」は、整数ソースレジスタを識別するために使用されるレジスタインデックスを指定し、「ブールリンク」フィールドは、命令がリンク変数を有する分岐であるか否かを識別する１ビット値である。６４ビットアドレスはその後、レジスタインデックスによって識別された整数レジスタＸから決定される。機能がイネーブルされたことを機能使用情報が示す場合には、ＰＣＣ内のポインタ値が整数レジスタＸから得られた６４ビットアドレスになるように、プログラムカウンタ機能が更新され、残りのフィールドは、前のプログラムカウンタ機能から形成される。命令がリンク付き分岐命令である場合には、現在のプログラムカウンタ機能に命令長（この場合は４バイト）を加えることによって、機能リンクレジスタが更新される。反対に、機能がイネーブルされていないことを機能使用情報が示す場合には、整数レジスタＸから得られたアドレス値によって新しいプログラムカウンタ値が形成される。命令がリンク付き分岐命令である場合には、現在のプログラムカウンタ値に命令長を加えることによって、リンクレジスタが更新される。
【０１２１】
実施例２
BranchRegisterRelative(bits(5) n)
Bits(64) offset = X[n];
if CapabilitiesEnabled() then
PCC = PCC + offset; // adds offset to the address field in PCC 
else PC = PC + offset;
(上記実施例２の命令の翻訳はつぎのとおり）
分岐レジスタ相対（ビット（５）ｎ）
ビット（６４）オフセット＝Ｘ［ｎ］；
機能イネーブル（）の場合には
ＰＣＣ＝ＰＣＣ＋オフセット；／／オフセットをＰＣＣのアドレスフィールドに追加
そうでなければＰＣ＝ＰＣ＋オフセット；
【０１２２】
実施例２は、「BranchRegisterRelative（分岐レジスタ相対）」形態によって示されるように、整数レジスタからＰＣ（Ｃ）相対分岐先を取る分岐変数を識別する。やはり、値「ビット（５）ｎ」は、整数ソースレジスタを識別するために使用されるレジスタインデックスを指定する。この場合、命令の「リンク付き」変数はないと想定される。６４ビットアドレスはその後、レジスタインデックスによって識別された整数レジスタＸから決定される。機能がイネーブルされたことを機能使用情報が示す場合には、更新されたポインタ値を生成するために、ＰＣＣ内のポインタ値が整数レジスタＸから加えられた整数値を有するように、プログラムカウンタ機能が更新され、残りのフィールドは、前のプログラムカウンタ機能から形成される。反対に、機能がイネーブルされていないことを機能使用情報が示す場合には、整数レジスタＸからの整数値をオフセットとして現在のＰＣ値に加えることによって、新しいプログラムカウンタ値が形成される。
【０１２３】
上記の実施形態より、このような実施形態は、特定の命令の機能生成バージョンおよび整数値生成バージョンの両方をサポートするための効率的なメカニズムを提供することがわかるが、命令符号化空間内でこれら２つの異なる変数を別々に符号化する必要はない。これは、機能として結果を生成する命令の実行をサポートするための非常に効率的なメカニズムを提供するが、代わりに、整数値として結果を生成するために同じ命令が実行され得る下位互換性を可能にする。
【０１２４】
図１３は、使用され得るシミュレータの実装を示す。先に記載された実施形態は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、コンピュータプログラムの使用を通じて実施される本明細書に記載の実施形態にしたがって命令実行環境を提供することも、可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実施を提供する限りにおいて、しばしばシミュレータと呼ばれる。シミュレータコンピュータプログラムの種類としては、エミュレータ、仮想マシン、モデル、および動的バイナリトランスレータを含むバイナリトランスレータを含む。通常、シミュレータの実装はホストプロセッサ８３０上で実行され、任意選択的に、シミュレータプログラム８１０をサポートするホストオペレーティングシステム８２０を実行する。いくつかの配置では、ハードウェアと提供された命令実行環境、および／または同じホストプロセッサ上に提供された複数の異なる命令実行環境の間に、複数のシミュレーション層があってもよい。歴史的に、合理的な速度で実行するシミュレータの実装を提供するために強力なプロセッサが必要であったが、このようなアプローチは、互換性または再利用のために別のプロセッサにネイティブなコードを実行したいときなど、特定の状況において正当化され得る。たとえば、シミュレータの実装は、ホストプロセッサハードウェアによってサポートされない追加の機能性を命令実行環境に提供してもよく、または典型的に異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」，Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ，Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ，５３〜６３ページに記載されている。
【０１２５】
特定のハードウェア構造または特長を参照してこれまでに実施形態が記載されてきた範囲で、シミュレートした実施形態において、適切なソフトウェア構造または機能によって同等の機能性が提供され得る。たとえば、特定の回路は、コンピュータプログラム論理としてシミュレートした実施形態に実装され得る。同様に、レジスタまたはキャッシュなどのメモリハードウェアは、ソフトウェアデータ構造としてシミュレートした実施形態に実装され得る。先に説明された実施形態で言及されたハードウェア要素の１つ以上がホストハードウェア（たとえば、ホストプロセッサ８３０）上に存在する配置では、いくつかのシミュレートした実施形態は、適切であれば、ホストハードウェアを利用してもよい。
【０１２６】
シミュレータプログラム８１０は、コンピュータ可読記憶媒体（非一時的媒体であってもよい）上に記憶されてもよく、シミュレータプログラム８１０によってモデリングされているハードウェアアーキテクチャのアプリケーション・プログラム・インターフェースと同じであるターゲットコード８００（アプリケーション、オペレーティングシステム、およびハイパーバイザを含み得る）にプログラムインターフェース（命令実行環境）を提供する。したがって、実行が機能使用情報の影響を受ける上記の命令を含む、ターゲットコード８００のプログラム命令は、上記で説明された装置２のハードウェア機能を実際には有していないホストコンピュータ８３０がこれらの機能をエミュレートできるように、シミュレータプログラム８１０を使用して命令実行環境の中から実行され得る。
【０１２７】
本出願において、「〜するように構成された」という用語は、装置の要素が定義された動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの配置または相互接続方法を意味する。たとえば、装置は、所定の動作を提供する専用ハードウェアを有してもよく、あるいはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「構成された」は、所定の動作を提供するために装置要素が多少なりとも変更されなければならないことを示唆するものではない。
【０１２８】
以上、添付図面を参照して本発明の例示的な実施形態を本明細書で詳細に説明したが、本発明はこれらの厳密な実施形態に限定されるものではなく、添付の特許請求によって規定される本発明の範囲および趣旨から逸脱することなく、様々な変更、追加、および修正が当業者によって実施され得ることが、理解されるべきである。たとえば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴と一緒になされ得る。
【図１】
2020525934.tif 000003
【図２】
2020525934.tif 000004
【図３】
2020525934.tif 000005
【図４】
2020525934.tif 000006
【図５】
2020525934.tif 000007
【図６】
2020525934.tif 000008
【図７Ａ】
2020525934.tif 000009
【図７Ｂ】
2020525934.tif 000010
【図８】
2020525934.tif 000011
【図９】
2020525934.tif 000012
【図１０Ａ】
2020525934.tif 000013
【図１０Ｂ】
2020525934.tif 000014
【図１１Ａ】
2020525934.tif 000015
【図１１Ｂ】
2020525934.tif 000016
【図１２Ａ】
2020525934.tif 000017
【図１２Ｂ】
2020525934.tif 000018
【図１３】
2020525934.tif 000019
【国際調査報告】
2020525934.tif 000020
2020525934.tif 000021
2020525934.tif 000022