IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-28
(45)【発行日】2024-03-07
(54)【発明の名称】命令の実行を制御する装置および方法
(51)【国際特許分類】
   G06F 9/34 20180101AFI20240229BHJP
   G06F 9/30 20180101ALI20240229BHJP
   G06F 9/32 20180101ALI20240229BHJP
【FI】
G06F9/34 350A
G06F9/30 310A
G06F9/30 350A
G06F9/32 320B
【請求項の数】 22
(21)【出願番号】P 2019572021
(86)(22)【出願日】2018-06-20
(65)【公表番号】
(43)【公表日】2020-08-27
(86)【国際出願番号】 GB2018051717
(87)【国際公開番号】W WO2019008324
(87)【国際公開日】2019-01-10
【審査請求日】2021-06-11
(31)【優先権主張番号】1710733.5
(32)【優先日】2017-07-04
(33)【優先権主張国・地域又は機関】GB
【前置審査】
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】バーンズ、グレイム ピーター
【審査官】三坂 敏夫
(56)【参考文献】
【文献】国際公開第2017/032969(WO,A1)
【文献】国際公開第2017/093708(WO,A1)
【文献】国際公開第2017/081438(WO,A1)
【文献】国際公開第2017/019287(WO,A1)
【文献】80286 AND 80287 PROGRAMMER'S REFERENCE MANUAL,米国,Intel Corporation,1987年,5-1~5-3,6-1~6-13,10-4~10-6,B-73~B-74,[令和4年11月18日検索],インターネット<URL:http://bitsavers.trailing-edge.com/components/intel/80286/210498-005_80286_and_80287_Programmers_Reference_Manual_1987.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30-9/355
(57)【特許請求の範囲】
【請求項1】
命令のシーケンスを実行する処理回路と、
前記処理回路によるアクセスのための整数値を記憶する整数記憶素子と、
前記処理回路によるアクセスのための機能を記憶する機能記憶素子と、
機能使用情報を記憶する機能使用ストレージと、
を備える装置であって、
前記処理回路は、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として前記機能記憶素子を選択することによって、
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先記憶素子として前記整数記憶素子を選択することによって、
前記機能使用情報は前記機能状態と前記非機能状態の2つの状態を相互に変更可能であり、該機能使用情報に応じて、前記宛先記憶素子に記憶される前記結果を生成するための命令のシーケンスのうちの少なくとも1つの命令の実行に応答し、
前記少なくとも1つの命令は、ソースオペランドとして即値を指定する命令を備える、装置。
【請求項2】
前記整数記憶素子は、複数の整数記憶素子のうちの選択された整数記憶素子、プログラムカウンタ記憶素子、およびリンク記憶素子のうちの1つである、請求項1に記載の装置。
【請求項3】
前記機能記憶素子は、複数の機能記憶素子のうちの選択された機能記憶素子、プログラムカウンタ機能記憶素子、および機能リンク記憶素子のうちの1つである、請求項1または2に記載の装置。
【請求項4】
前記少なくとも1つの命令は、さらなるソースオペランドとしてプログラムカウンタ情報を使用するように配置された命令を備える、請求項1から3のいずれか一項に記載の装置。
【請求項5】
生成された前記結果はアドレス情報である、請求項1から4のいずれか一項に記載の装置。
【請求項6】
前記少なくとも1つの命令は、プログラムカウンタ情報を更新するために使用される分岐命令である、請求項1から5のいずれか一項に記載の装置。
【請求項7】
前記処理回路は、前記分岐命令に応答して、少なくとも1つの結果として、更新されたプログラムカウンタ情報を生成するように配置され、前記処理回路は、前記機能状態に応じて、プログラムカウンタ機能記憶素子に記憶するためのプログラムカウンタ機能として前記更新されたプログラムカウンタ情報を生成するように、またはプログラムカウンタ記憶素子内に記憶するためのプログラムカウンタ値として前記更新されたプログラムカウンタ情報を生成するように、配置されている、請求項6に記載の装置。
【請求項8】
前記処理回路は、前記分岐命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによって前記更新されたプログラムカウンタ情報を生成するように配置されている、請求項7に記載の装置。
【請求項9】
前記プログラムカウンタ記憶素子は、前記プログラムカウンタ機能記憶素子内のフィールドによって形成されている、請求項7または8に記載の装置。
【請求項10】
前記分岐命令はリンク付き分岐命令であり、前記処理回路は、少なくとも1つの結果として、現在のプログラムカウンタ情報から導出されるリターンアドレス情報を生成するように配置されており、前記処理回路は、前記機能状態に応じて、機能リンク記憶素子内に記憶するためのリターンアドレス機能として前記リターンアドレス情報を生成するように、またはリンク記憶素子内に記憶するためのリターンアドレス値として前記リターンアドレス情報を生成するように、配置されている、請求項6から9のいずれか一項に記載の装置。
【請求項11】
前記処理回路は、現在のプログラムカウンタ値を修正することによって前記リターンアドレス情報を生成するように配置されている、請求項10に記載の装置。
【請求項12】
前記リンク記憶素子は、前記機能リンク記憶素子内のフィールドによって形成されている、請求項10または11に記載の装置。
【請求項13】
前記少なくとも1つの命令は、前記結果として、プログラムカウンタ情報から導出されるアドレス情報を生成するために使用されるアドレス生成命令である、請求項1から5のいずれか一項に記載の装置。
【請求項14】
前記処理回路は、前記アドレス生成命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによって前記アドレス情報を生成するように配置されている、請求項13に記載の装置。
【請求項15】
前記アドレス生成命令は宛先識別子を提供し、前記処理回路は、前記機能使用情報が前記機能状態を識別するときには複数の機能記憶素子の選択された機能記憶素子にその宛先識別子をマッピングし、前記機能使用情報が前記非機能状態を識別するときには複数の整数記憶素子のうちの選択された整数記憶素子にその宛先識別子をマッピングするように、配置されている、請求項13または14に記載の装置。
【請求項16】
前記整数記憶素子は、前記機能記憶素子内のフィールドによって形成され、前記整数値が前記機能の代わりに前記結果として記憶されるとき、前記機能記憶素子の少なくとも1つの残りのフィールドはデフォルト値に設定される、
請求項1から15のいずれか一項に記載の装置。
【請求項17】
前記機能は境界ポインタを備える、請求項1から16のいずれか一項に記載の装置。
【請求項18】
前記機能使用情報は、複数の例外レベルの各々についての機能構成情報であり、各例外レベルは異なるソフトウェア実行特権を有し、各例外レベルについて前記機能構成情報は少なくとも、その例外レベルで命令を実行するときに前記処理回路によって行われる動作が機能によって制限されるか否かを識別する、請求項1から17のいずれか一項に記載の装置。
【請求項19】
命令のシーケンスを実行する処理回路と、前記処理回路によるアクセスのための整数値を記憶する整数記憶素子と、前記処理回路によるアクセスのための機能を記憶する機能記憶素子と、機能使用情報を記憶する機能使用ストレージと、を有する装置内の命令の実行を制御する方法であって、前記方法は、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として前記機能記憶素子を選択することによって、および
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先記憶素子として前記整数記憶素子を選択することによって、
前記機能使用情報は前記機能状態と前記非機能状態の2つの状態を相互に変更可能であり、該機能使用情報に応じて、前記命令のシーケンスのうちの少なくとも1つの命令の実行に応答して、前記宛先記憶素子に記憶される前記結果を生成するステップ
を備え、
前記少なくとも1つの命令は、ソースオペランドとして即値を指定する命令を備える、方法。
【請求項20】
命令のシーケンスを実行する処理手段と、
前記処理手段によるアクセスのための整数値を記憶する整数記憶素子手段と、
前記処理手段によるアクセスのための機能を記憶する機能記憶素子手段と、
機能使用情報を記憶する機能使用記憶手段と、
を備える装置であって、
前記処理手段は、前記命令のシーケンスのうちの少なくとも1つの命令の実行に応答して、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子手段として前記機能記憶素子手段を選択することによって、および
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先記憶素子手段として前記整数記憶素子手段を選択することによって、
前記機能使用情報は前記機能状態と前記非機能状態の2つの状態を相互に変更可能であり、該機能使用情報に応じて、前記宛先記憶素子手段に記憶される前記結果を生成するためのものであり、
前記少なくとも1つの命令は、ソースオペランドとして即値を指定する命令を備える、装置。
【請求項21】
命令のシーケンスを実行する処理プログラムロジックと、
前記処理プログラムロジックによるアクセスのための整数値を記憶する整数データ構造と、
前記処理プログラムロジックによるアクセスのための機能を記憶する機能データ構造と、
機能使用情報を記憶する機能使用データ構造と、
を備える命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
前記処理プログラムロジックは、
前記機能使用情報が機能状態を識別するときには機能として結果を生成して宛先データ構造として前記機能データ構造を選択することによって、および
前記機能使用情報が非機能状態を識別するときには整数値として前記結果を生成して前記宛先データ構造として前記整数データ構造を選択することによって、
前記機能使用情報は前記機能状態と前記非機能状態の2つの状態を相互に変更可能であり、該機能使用情報に応じて、前記宛先データ構造に記憶される前記結果を生成するための前記命令のシーケンスのうちの少なくとも1つの命令の実行に応答する、コンピュータプログラムであって、
前記少なくとも1つの命令は、ソースオペランドとして即値を指定する命令を備える、コンピュータプログラム。
【請求項22】
請求項21による前記コンピュータプログラムを記憶する、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、命令の実行を制御する装置および方法に関する。
【0002】
所与のプロセスについて特定の機能が定義されている機能ベースのアーキテクチャへの関心が高まっており、定義された機能以外の動作を実行する試みがあると、エラーがトリガされる可能性がある。機能は様々な形態を取り得るが、機能の1つのタイプは境界ポインタである(「fatポインタ」とも呼ばれ得る)。境界ポインタでは、ポインタ値は、たとえば、アクセスすべきデータ値のアドレス、または実行すべき命令を識別するか、または決定するために使用され得る。しかしながら、ポインタ値はまた、ポインタ値を使用するときにアドレスの許容範囲を示す関連範囲情報を有してもよく、これに関連付けられた許可/制限情報を追加で有してもよい。境界ポインタの範囲情報および任意の許可/制限情報は、機能情報と呼ばれてもよく、機能ベースのアーキテクチャ内では、(その関連機能情報を含む)このような境界ポインタは、機能と呼ばれてもよい。
【0003】
命令セット内では、命令を実行した結果として機能を生成することができるこれらの命令を指定することが望ましい。しかしながら、下位互換性のために、結果として機能を生成するバージョンと本質的に同じ動作を識別するが、代わりに機能ではなく結果として公称データ値を生成する命令を指定することもまた、望ましいだろう。
【発明の概要】
【0004】
しかしながら、命令符号化空間は重要であることが多く、したがって、命令を生成する機能および命令を生成する非機能を定義できるようにするために命令セットアーキテクチャ内に十分な空間を提供することは困難であり得る。
【0005】
第1の例示的構成では、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、機能使用情報を記憶する機能使用ストレージと、を備える装置であって、処理回路は、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として機能記憶素子を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先記憶素子として整数記憶素子を選択することによって、機能使用情報に応じて、宛先記憶素子に記憶される結果を生成するための命令のシーケンスのうちの少なくとも1つの命令の実行に応答する、装置が提供される。
【0006】
別の例示的構成では、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、機能使用情報を記憶する機能使用ストレージと、を有する装置内の命令の実行を制御する方法であって、方法は、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子として機能記憶素子を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先記憶素子として整数記憶素子を選択することによって、機能使用情報に応じて、命令のシーケンスのうちの少なくとも1つの命令の実行に応答して、宛先記憶素子に記憶される結果を生成するステップを備える方法が提供される。
【0007】
さらなる例示的構成では、命令のシーケンスを実行する処理手段と、処理手段によるアクセスのための整数値を記憶する整数記憶素子手段と、処理手段によるアクセスのための機能を記憶する機能記憶素子手段と、機能使用情報を記憶する機能使用記憶手段と、を備える装置であって、処理手段は、命令のシーケンスのうちの少なくとも1つの命令の実行に応答して、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先記憶素子手段として機能記憶素子手段を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先記憶素子手段として整数記憶素子手段を選択することによって、機能使用情報に応じて、宛先記憶素子手段に記憶される結果を生成するためのものである、装置が提供される。
【0008】
さらに別の例示的構成では、命令のシーケンスを実行する処理プログラムロジックと、処理プログラムロジックによるアクセスのための整数値を記憶する整数データ構造と、処理プログラムロジックによるアクセスのための機能を記憶する機能データ構造と、機能使用情報を記憶する機能使用データ構造と、を備える命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、処理プログラムロジックは、機能使用情報が機能状態を識別するときには機能として結果を生成して宛先データ構造として機能データ構造を選択することによって、機能使用情報が非機能状態を識別するときには整数値として結果を生成して宛先データ構造として整数データ構造を選択することによって、機能使用情報に応じて、宛先データ構造に記憶される結果を生成するための命令のシーケンスのうちの少なくとも1つの命令の実行に応答する、コンピュータプログラムが提供される。
【0009】
さらなる例示的構成では、上述の第1の例示的構成の装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するプログラム命令を備える仮想マシンコンピュータプログラムが提供される。
【0010】
一実施形態では、コンピュータプログラムを記憶するためのコンピュータ可読記憶媒体が提供され得る。
【0011】
本技術は、以下の添付図面に示されるその実施形態を参照して、例示のみによってさらに説明される。
【図面の簡単な説明】
【0012】
図1】一実施形態による、装置のブロック図である。
図2】境界ポインタ記憶素子のセット内にポインタ値を設定またはポインタ値にアクセスしようとする試みがある場合にエラーがトリガされ得る命令のタイプの例を示す図であり、そのポインタ値は、関連範囲情報によって示される範囲の外側のアドレスを指定するために使用される。
図3】一実施形態による、境界ポインタに関連付けられたタグビットの使用を示す図である。
図4】一実施形態によって複数の例外レベルがどのように提供され得るかを示す図である。
図5】一実施形態によって提供され得る例外レベルごとの機能構成情報の一形態を示す図である。
図6】一実施形態による、2つの異なる例外レベルの機能構成情報の可能な選択肢を示す表である。
図7A】一実施形態による、例外エントリ動作中に処理回路の実行状態がどのように管理されるかを示すフロー図である。
図7B】一実施形態による、例外エントリ動作中に処理回路の実行状態がどのように管理されるかを示すフロー図である。
図8】一実施形態による、例外復帰動作中に処理回路の実行状態がどのように管理されるかを示すフロー図である。
図9】一実施形態による、命令の実行が機能使用情報に応じてどのように制御され得るかを示すフロー図である。
図10A】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを識別するかに応じて分岐命令の実行がどのように制御され得るかを示す図である。
図10B】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを識別するかに応じて分岐命令の実行がどのように制御され得るかを示す図である。
図11A】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてリンク付き分岐命令の実行がどのように制御され得るかを示す図である。
図11B】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてリンク付き分岐命令の実行がどのように制御され得るかを示す図である。
図12A】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてアドレス生成命令の実行がどのように制御され得るかを示す図である。
図12B】一実施形態による、機能使用情報が機能状態または非機能状態のどちらを示すかに応じてアドレス生成命令の実行がどのように制御され得るかを示す図である。
図13】使用され得るシミュレータの実装を示す図である。
【0013】
添付図面を参照して実施形態を論じる前に、実施形態の以下の説明が提供される。
【0014】
先に述べられたように、所与のプロセスについて特定の機能が定義されている機能ベースのアーキテクチャへの関心が高まっており、定義された機能以外の動作を実行する試みがあると、エラーがトリガされる可能性がある。様々なタイプの機能が定義され得るが、1つのタイプの機能は境界ポインタである(一実施形態では、ポインタ値および関連範囲および許可情報の両方を組み込む)。このような機能ベースのアーキテクチャを採用する装置は通常、機能を記憶するために使用される記憶素子(本明細書では境界ポインタ記憶素子、または一般的には機能記憶素子とも呼ばれる)を有する。記憶素子は、レジスタ(本明細書では、境界ポインタレジスタまたは機能レジスタとも呼ばれる)であってもよく、かつ/または汎用メモリ内のメモリ位置、たとえばスタックメモリ上の位置であってもよい。所望の機能にアクセスするためにこのような記憶素子を参照し、その機能に依存する動作を実行するために、特定の命令が使用され得る。たとえば、境界ポインタを考慮すると、このような命令の実行により、境界ポインタを回収することができ、その中のポインタ値はその後、命令の実行中に必要とされるメモリ内のアドレスを導出するために使用することができる。ポインタ値は、メモリアドレスを識別するために直接使用されてもよく、またはたとえばポインタ値にオフセットを加えることによって、メモリアドレスを導出するために使用されてもよい。メモリアドレスが範囲情報によって指定された範囲内にあり、許可情報内で指定された任意の許可が満たされていれば、動作はその後も続行できる。
【0015】
加えて、少なくともいくつかの命令が、これらの命令を実行するときに行われる動作の結果として機能を生成することが、望ましい。さらに、これらの命令のうちの少なくとも一部では、たとえば下位互換性をサポートするように、非機能結果を生じる命令のバージョンを提供することが、依然として望ましいだろう。
【0016】
しかしながら、一方は結果として機能を生成し、他方は結果として公称データ値を生成する、本質的に同じ動作を実行する2つの別個の命令を指定するには、これらの異なる命令を定義するための命令セットアーキテクチャ内に十分な命令符号化空間が必要である。しかしながら、命令符号化空間は、通常、厳しく制限されており、命令セットアーキテクチャ内で望ましい全ての異なるタイプの命令を符号化することは困難であり得る。
【0017】
本明細書に記載される実施形態は、命令符号化空間に対する圧力を軽減するメカニズムを提供する。
【0018】
特に、一実施形態では、命令のシーケンスを実行する処理回路と、処理回路によるアクセスのための整数データ値を記憶する整数記憶素子と、処理回路によるアクセスのための機能を記憶する機能記憶素子と、を備える装置が提供される。さらに、機能使用情報を記憶するための機能使用ストレージが提供される。
【0019】
命令のシーケンス内の少なくとも1つの命令では、処理回路は、機能使用情報に応じて、宛先記憶素子に記憶される結果を生成する命令の実行に応答する。特に、機能使用情報が機能状態を識別するときには、処理回路は、機能として結果を生成し、宛先記憶素子として機能記憶素子を選択する。反対に、機能使用情報が非機能状態を識別するときには、処理回路は、整数値として結果を生成し、宛先記憶素子として整数記憶素子を選択する。
【0020】
このようなアプローチによって、命令セット内の単一の命令は、結果としての機能または結果としての整数値のいずれかを生成するように、実行中に構成可能に配置され、さらに、結果の宛先もまた、機能または整数値のどちらが生成されているかに応じて構成可能に選択され得る。特に、命令の実行中に、処理回路は、機能使用情報を参照でき、機能が命令の実行の結果として生成されるか整数値が代わりに生成されるかを制御するために、現在の機能使用情報を使用することができる。これにより、命令の機能変数および非機能変数の両方を実行することができるが、これらの変数は命令セット内で個別に符号化される必要がない。
【0021】
整数記憶素子は、様々な形態を取ることができるが、一実施形態では、複数の整数記憶素子のうちの選択された整数記憶素子、プログラムカウンタ記憶素子、およびリンク記憶素子のうちの1つである。同様に、機能記憶素子もまた様々な形態を取ることができるが、一実施形態では、複数の機能記憶素子のうちの選択された機能記憶素子、プログラムカウンタ機能記憶素子、および機能リンク記憶素子のうちの1つである。
【0022】
整数記憶素子および機能記憶素子は物理的に別個の構造であってもよいが、一実施形態では、整数記憶素子を機能記憶素子内のフィールドで表すことができ、こうして装置の全体的な記憶要件を低減することができる。
【0023】
機能使用情報に応じて、生成された結果が機能または整数値となるように、処理回路によって上記の方法で処理された命令は、様々な形態を取ることができる。しかしながら、一実施形態では、少なくとも1つのこのような命令は、ソースオペランドとして即値を指定する命令である。即値は、命令の利用可能な符号化空間内でかなりの量のビットを消費する可能性があり、したがって、上記の技術は、命令の2つの別個の変数を提供するには不十分な符号化空間しか残らないので、ソースオペランドとして即値を指定する命令に関連して使用されるときには特に有益であり得る。
【0024】
しかしながら、別の実施形態では、この技術は、ソースオペランドとして即値を指定しない命令、したがって、たとえば汎用レジスタを参照してソースオペランドを指定する可能性のある命令と共に使用されることも、可能である。
【0025】
一実施形態では、上記の方法で処理回路が実行する少なくとも1つの命令は、さらなるソースオペランドとしてプログラムカウンタ情報を使用するように配置された命令である。機能または整数値のいずれかである結果を生成できることが望ましい場合に、ソースオペランドとしてプログラムカウンタ情報を使用する命令は数多くあり、したがって上記の技術は、このような各命令の複数の異なる変数を具体的に定義する必要性を回避することによって、このような命令を符号化する非常に効率的な方法を提供する。
【0026】
前記少なくとも1つの命令を実行するときに処理回路によって生成された結果は、様々な形態を取ることができるが、一実施形態では、生成された結果はアドレス情報である。機能ベースのアーキテクチャでは、そのアドレス情報がその後どのように使用されるかを厳しく制限するように、機能の形態のアドレス情報を生成することが有益であり得る。しかしながら、下位互換性では、整数値の形態のアドレス情報を生成できることが依然として望ましい場合が多く、上記の技術は、これらの変数に別個の命令を指定する必要性を伴わずに両方の変数をサポートするために、特に効率的なメカニズムを提供する。
【0027】
少なくとも1つの命令は、様々な形態を取ることができるが、一実施形態では、プログラムカウンタ情報を更新するために使用される分岐命令である。
【0028】
特に、一実施形態では、処理回路は、分岐命令に応答して、少なくとも1つの結果として、更新されたプログラムカウンタ情報を生成するように配置され、処理回路は、機能状態に応じて、プログラムカウンタ機能記憶素子に記憶するためのプログラムカウンタ機能として更新されたプログラムカウンタ情報を生成するように、またはプログラムカウンタ記憶素子内に記憶するためのプログラムカウンタ値として更新されたプログラムカウンタ情報を生成するように、配置されている。
【0029】
更新されたプログラムカウンタ情報が生成され得る方法は多数あるが、一実施形態では、これは、分岐命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによって生成される。先に述べられたように、即値は命令符号化空間内でかなりの量のビットを消費することができ、したがって、ソースオペランドとして即値を指定する分岐命令に関連付けられた上記の技術を使用することは、特に有益であり得る。しかしながら、代替実施形態では、即値は指定されない場合があり、代わりに分岐命令は、絶対分岐先を指定するためにレジスタの内容を使用してもよく、またはプログラムカウンタ相対分岐先を提供するためにプログラムカウンタと組み合わせて使用されるオフセットを使用してもよい。
【0030】
一実施形態では、プログラムカウンタ記憶素子は、プログラムカウンタ機能記憶素子とは物理的に分離され得るが、一実施形態では、プログラムカウンタ記憶素子は、プログラムカウンタ機能記憶素子内のフィールドによって形成される。
【0031】
一例示的配置では、分岐命令はリンク付き分岐命令であってもよく、処理回路は、少なくとも1つの結果として、現在のプログラムカウンタ情報から導出されるリターンアドレス情報を生成するように配置されてもよく、処理回路は、機能状態に応じて、機能リンク記憶素子内に記憶するためのリターンアドレス機能としてリターンアドレス情報を生成するように、またはリンク記憶素子内に記憶するためのリターンアドレス値としてリターンアドレス情報を生成するように、配置されている。したがって、このような例では、機能使用情報に応じて、更新されたプログラムカウンタ情報およびリターンアドレス情報の両方が、機能または整数値のいずれかとして生成され得る。
【0032】
一実施形態では、処理回路は、たとえば現在のプログラムカウンタ値にオフセットを加えることによって、現在のプログラムカウンタ値を修正することでリターンアドレス情報を生成するように配置されてもよい。
【0033】
リンク記憶素子は、機能リンク記憶素子とは物理的に分離され得るが、一実施形態では、機能リンク記憶素子内のフィールドによって形成されてもよい。
【0034】
分岐命令について上記の構成可能な結果生成を実行する代わりに、またはこれに加えて、処理回路はまた、他のタイプの命令に対して類似のステップを取るように配置されてもよい。たとえば、少なくとも1つの命令は、結果として、プログラムカウンタ情報から導出されるアドレス情報を生成するために使用されるアドレス生成命令であってもよい。やはり、このようなアドレス生成命令は機能としてアドレス情報を生成できることが有用であるが、下位互換性のために、整数値としてそのアドレス情報の生成をサポートできることもまた有用である。
【0035】
特定の一例示的配置では、処理回路は、アドレス生成命令によって指定された即値に応じて現在のプログラムカウンタ値を調整することによってアドレス情報を生成するように配置されてもよい。しかしながら、分岐命令に関する先の説明と同様に、即値を使用しない別の変数もまた、本明細書で説明される構成可能な実行挙動を利用するように配置され得る。
【0036】
アドレス生成命令の実行によって生成された結果を記憶するために使用される宛先が決定され得る方法は多数ある。一実施形態では、アドレス生成命令は宛先識別子を提供し、処理回路は、機能使用情報が機能状態を識別するときには複数の機能記憶素子の選択された機能記憶素子にその宛先識別子をマッピングし、機能使用情報が非機能状態を識別するときには複数の整数記憶素子のうちの選択された整数記憶素子にその宛先識別子をマッピングするように、配置されている。
【0037】
本技術が適用される命令のタイプに関係なく、整数記憶素子が機能記憶素子内のフィールドによって形成されるときには、機能の代わりに結果として整数値が記憶されていることを識別するように機能記憶素子の内容にフラグが立てられる方法が多数ある。一実施形態では、機能の代わりに結果として整数値が記憶されているとき、機能記憶素子の少なくとも1つの残りのフィールドがデフォルト値に設定される。特に、一実施形態では、(たとえば、範囲および制限情報を指定し得る)残りのフィールドは、いかなる機能制限も効果的にオフにするように、最大機能を識別するように設定される。しかしながら、代替実施形態では、最大機能を識別するように範囲および制限情報を設定する必要がないかも知れない。たとえば、ハードウェアは、装置が非機能状態で動作しており、したがって実行される処理動作が機能の影響を受けないとき、機能記憶素子内の範囲および制限情報を無視するように、配置されてもよい。このような状況では、代わりに範囲および制限情報は、必要に応じて変更しないままにするか、またはクリアしてもよい。さらなる代替として、タグビットが各機能記憶素子に関連付けられてもよく、これは内容が機能を含むことを識別するように設定されており、内容が有効な機能を表していないことを識別するためにクリアされる。したがって、機能記憶素子が整数値を記憶するとき、タグビットは、内容が有効な機能を表していないことを識別するためにクリアされ得る。
【0038】
結果として記憶された機能は、様々な形態を取ることができるが、一実施形態では、境界ポインタを備える。
【0039】
前記少なくとも1つの命令を実行しているときに処理回路によって参照される機能使用情報は、様々な形態を取ることができる。しかしながら、一実施形態では、機能使用情報は、複数の例外レベルの各々についての機能構成情報であり、各例外レベルは異なるソフトウェア実行特権を有し、各例外レベルについて機能構成情報は少なくとも、その例外レベルで命令を実行するときに処理回路によって行われる動作が機能によって制限されるか否かを識別する。したがって、これは、必要に応じて、少なくとも1つの例外レベルのソフトウェアを機能によって制限しない柔軟性を提供する。具体例として、高い例外レベルで実行する信頼性の高いソフトウェアは、機能によって制限されずに動作できる場合がある。これにより、このようなソフトウェアの機能チェックルーチンを行う必要性を回避することによる性能利点をもたらすことができる。これはまた、機能ベースのアーキテクチャと互換性を持たせるようにこのようなソフトウェアを修正する必要がある範囲を減少させることもできる。しかしながら、このような柔軟性は例外レベルベースで管理され得るので、このようなメカニズムは、例外レベルのうちの1つ以上で実行するソフトウェアに対して機能の全制約が課されることを保証するために、依然として使用され得る。
【0040】
さらに、上記の技術によれば、この情報は、命令の結果が機能または整数値として構成可能に形成され得るように、さらにその結果を記憶するために使用される宛先が機能記憶素子または整数記憶素子として構成可能に選択されるように、1つ以上の命令を実行するときに再使用されることが可能である。
【0041】
ここで、図面を参照して、特定の実施形態が記載される。
【0042】
図1は、命令を処理するための処理パイプライン4を備えるデータ処理装置2の例を概略的に示している。この例では、処理パイプライン4は、フェッチステージ6、復号ステージ8、発行ステージ10、実行ステージ12、および書き戻しステージ14を含む、多数のパイプラインステージを含むが、他のタイプまたは組み合わせのステージが提供され得ることは、理解されるだろう。たとえば、レジスタ名変更を実行するための名前変更ステージが、いくつかの実施形態に含まれ得る。処理される命令はステージからステージに移動し、あるステージで命令が保留されている間、パイプライン4の別のステージで別の命令が保留されてもよい。
【0043】
フェッチステージ6は、レベル1(L1)命令キャッシュ20から命令をフェッチする。フェッチステージ6は通常、連続する命令アドレスから順次命令をフェッチし得る。しかしながら、フェッチステージはまた、分岐命令の結果を予測するための分岐予測器22も有することができ、フェッチステージ6は、分岐が取られると予測される場合には(非連続的な)分岐ターゲットアドレスから、または分岐が取られないと予測される場合には次の連続アドレスから、命令をフェッチする。分岐予測器22は、特定の分岐が取られる可能性が高いか否かを予測するための情報を記憶するための1つ以上の分岐履歴テーブルを含んでもよい。たとえば、分岐履歴テーブルは、先に実行された分岐の実際の結果を追跡するため、または分岐に対してなされた予測の信頼性を表すための、カウンタを含んでもよい。分岐予測器22はまた、後に同じ分岐命令に遭遇したときにこれらが予測され得るように、分岐命令の以前のターゲットアドレスをキャッシュするための分岐ターゲットアドレスキャッシュ(BTAC)24を含んでもよい。
【0044】
フェッチされた命令は、復号済み命令を生成する命令を複合する復号ステージ8に渡される。復号済み命令は、適切な処理動作を実行するように実行ステージ12を制御するための制御情報を含んでもよい。キャッシュ20からフェッチされたいくつかのより複雑な命令では、復号ステージ8はこれらの命令を複数の復号済み命令にマッピングしてもよく、これはマイクロ操作(μopまたはuop)としても知られる。したがって、L1命令キャッシュ20からフェッチされた命令とパイプラインの後のステージで見られるような命令との間には1対1の関係がないかも知れない。一般に、本出願における「命令」の言及は、マイクロ操作を含むものとして解釈されるべきである。
【0045】
復号済み命令は発行ステージ10に渡され、ここで命令の実行に必要なオペランドが利用可能か否かを判断し、オペランドが利用可能なときに実行用の命令を発行する。いくつかの実施形態は、L1命令キャッシュ20から命令がフェッチされたプログラム順に対応する順序で実行するために命令が発行されるように、インオーダー処理をサポートしてもよい。別の実施形態は、プログラム順とは異なる順序で実行ステージ12に命令が発行され得るように、アウトオブオーダー実行をサポートしてもよい。アウトオブオーダー処理は、オペランドを待っている間に先の命令が停止している間、オペランドが利用可能なプログラム順で後の命令が先に実行できるので、性能を向上させるのに有益であり得る。
【0046】
発行ステージ10は、様々なデータ処理動作を行うために命令が実行される実行ステージ12に命令を発行する。たとえば、実行ステージは、整数値に対して算術または論理演算を実行するための算術/論理ユニット(ALU)30と、浮動小数点の形態で表される値に対して演算を実行するための浮動小数点(FP)ユニット32と、レベル1(L1)データキャッシュ36からレジスタ40にデータ値をロードするためのロード操作、またはレジスタ40からL1データキャッシュ36にデータ値を記憶させるための記憶操作を実行するためのロード/ストアユニット34とを含む、多数の実行ユニット30、32、34を含んでもよい。これらは提供され得る実行ユニットのタイプのいくつかの例に過ぎず、その他多くの種類も提供され得ることは、理解されるだろう。処理動作を実行するために、実行ステージ12は、レジスタ40のセットからデータ値を読み取ってもよい。実行された命令の結果はその後、書き戻しステージ14によってレジスタ40に書き戻されてもよい。
【0047】
L1命令キャッシュ20およびL1データキャッシュ36は、複数レベルのキャッシュを含むキャッシュ階層の一部であり得る。たとえば、レベル2(L2)キャッシュ44もまた提供されてもよく、任意選択的に、さらなるレベルのキャッシュが提供されることも可能である。この例では、L2キャッシュ44はL1命令キャッシュ20とL1データキャッシュ36との間で共有されるが、他の例は別個のL2命令およびデータキャッシュを有してもよい。フェッチすべき命令がL1命令キャッシュ20内にないときには、L2キャッシュ44からフェッチされることが可能であり、同様に、命令がL2キャッシュ44内にない場合には、メインメモリ50からフェッチされることが可能である。同様に、ロード命令に応答して、L1データキャッシュ36内になければデータはL2キャッシュ44からフェッチされ、必要であればメモリ50からフェッチされることが可能である。キャッシュ階層を管理するために、あらゆる既知のスキームが使用され得る。
【0048】
プログラム命令およびデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメインメモリ50、および任意選択的にキャッシュ階層の少なくともいくつかのレベルも、物理的にアドレス指定され得る。したがって、パイプライン4によって使用される仮想アドレスを、キャッシュまたはメモリにアクセスするために使用される物理アドレスに変換するために、変換ルックアサイドバッファ52(TLB)が提供され得る。たとえば、TLB52は、仮想アドレス空間の対応するページの仮想ページアドレスおよび対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされる対応する物理ページアドレスを各々が指定する、多数のエントリを含んでもよい。たとえば、仮想および物理ページアドレスは、対応する仮想および物理アドレスの最も重要な部分に対応してもよく、残りの最も重要ではない部分は、仮想アドレスを物理アドレスにマッピングするときに変更されないままである。アドレス変換情報だけでなく、各TLBエントリはまた、アドレスの特定のページがパイプライン4の特定モードにおいてアクセス可能であるか否かを示すなど、アクセス許可を指定する何らかの情報も含み得る。いくつかの実施形態では、TLBエントリはまた、キャッシュ階層のどのレベルが読み取りまたは書き込み動作に応答して更新されるか(たとえばキャッシュはモードを通じて書き戻しまたは書き込みのどちらで動作すべきか)を定義するキャッシュポリシー情報、またはデータアクセスがパイプライン4によって発行された順序と比較して、対応するページ内でアドレス指定するためのデータアクセスがメモリシステムによって記録され得るか否かを定義する情報など、アドレスの対応するページの他の特性を定義することもできる。
【0049】
図1は単一レベルのTLB52を示すが、レベル1(L1)TLB52が最近アクセスされた多くのページにおけるアドレスを変換するためのTLBエントリを含むことができ、より多くのページのエントリを記憶するためにレベル2(L2)TLBが提供され得るように、TLBの階層が設けられてもよいことは、理解されるだろう。必要なエントリがL1TLB内に存在しないときには、L2TLBから、または階層内のさらなるTLBから、フェッチされることが可能である。ページにアクセスするために必要なエントリがTLBのいずれにもないときには、メモリ50内のページテーブルにアクセスするためにページテーブルウォークが実行され得る。本技術では、あらゆる既知のTLB管理スキームが使用され得る。
【0050】
また、いくつかのシステムは、たとえば、第1のTLB(またはTLBの階層)が仮想アドレスを中間アドレスに変換するために使用されることが可能となり、その後1つ以上のさらなるTLBを使用する第2のレベルのアドレス変換が中間アドレスをキャッシュまたはメモリにアクセスするために使用される物理アドレスに変換し得るように、複数レベルのアドレス変換をサポートしてもよいことが理解されるであろう。これは、たとえば、第1のレベルのアドレス変換がオペレーティングシステムによって管理され、第2のレベルのアドレス変換がハイパーバイザによって管理される仮想化をサポートするのに有益であり得る。
【0051】
図1に示されるように、装置2は、境界ポインタレジスタ60のセットを有してもよい。境界ポインタレジスタのセットは汎用データレジスタ40のセットとは物理的に別個のものとして図1に示されているが、一実施形態では、汎用データレジスタおよび境界ポインタレジスタの両方を提供するために、同じ物理ストレージが使用されてもよい。
【0052】
各境界ポインタレジスタ60は、アクセスされるデータ値のアドレスを決定するために使用され得るポインタ値62と、対応するポインタ62を使用するときにアドレスの許容範囲を指定する範囲情報64とを含む。境界ポインタレジスタ60はまた、ポインタの使用に対する1つ以上の制限/許可を定義し得る、制限情報66(本明細書では許可情報とも呼ばれる)も含み得る。たとえば、制限66は、ポインタ62を使用し得るタイプの命令、またはポインタが使用可能なパイプライン4のモードを制限するために使用され得る。したがって、範囲情報64および制限情報66は、その中でポインタ62を使用することができる機能を定義すると見なされてもよい。定義された機能以外でポインタ62を使用しようとすると、エラーがトリガされ得る。範囲情報64はたとえば、ポインタが特定の既知の境界内に留まり、機密のまたは安全な情報を含む可能性のあるメモリアドレス空間の別の領域に迷い込まないことを保証するために、有益であり得る。同じ物理ストレージが汎用データレジスタおよび境界ポインタレジスタの両方に使用される実施形態では、一実施形態において、ポインタ値62はたとえば、対応する汎用レジスタに使用されたのと同じ記憶場所に記憶されてもよい。
【0053】
図2は、データまたは命令への不正アクセスを防止するために許容範囲が使用される命令のタイプの例を示している。図2の上部に示されるように、特定の境界ポインタレジスタPR1は、所与のポインタ値62および範囲情報64を含み、これはこの例では、許容範囲の下限を定義する下限アドレス68および許容範囲の上限を定義する上限アドレス69を使用して指定される。たとえば、境界68、69は、アドレス80000から81000の範囲を定義するように設定されている。特定の命令が境界ポインタレジスタPR1を参照し、ポインタ62から決定されたアドレスがこの範囲外にあるときに、エラーがトリガされる可能性がある。
【0054】
たとえば、図2のパートAに示されるように、いくつかのシステムでは、ポインタレジスタ60のポインタ62の値を範囲情報64によって指定された範囲外の値に設定しようとするときに、エラーがトリガされる可能性がある(ここでは、ポインタがアドレスを直接指定すると仮定する)。これにより、ポインタを使用する任意のアクセスが安全に範囲内にあると保証され得るように、ポインタ62が指定された範囲外のいかなる値を取ることも回避する。あるいは、図2のパートBに示されるように、そのアドレスが指定された範囲外にあるときにポインタ62のアドレスによって識別された場所に命令がアクセスしようとするときに、エラーがトリガされ得る。したがって、指定された範囲外の値にポインタ62を設定することは依然として許容範囲内であり得るが、ポインタアドレス(またはポインタから導出されるアドレス)におけるデータアクセスが一旦試行されると、アドレスが許容範囲外にある場合にエラーがトリガされる可能性がある。他のシステムは、図2のパートAおよびBに示される両方のタイプの命令に応答してエラーをトリガし得る。
【0055】
範囲情報64は、様々な方法で設定され得る。たとえば、セキュアコード、またはオペレーティングシステムまたはハイパーバイザは、所与のポインタに許可される範囲を指定できる。たとえば、命令セットアーキテクチャは、所与のポインタ62の範囲情報64を設定または修正するための多数の命令を含んでもよく、これらの命令の実行は、特定のソフトウェアまたは特定のモードまたはプロセッサ4の例外レベルに制限され得る。範囲情報64を設定または修正するための任意の既知の技術が使用され得る。
【0056】
ポインタを参照する特定の命令を実行するときに実行状態12で使用され得る境界ポインタ記憶素子60のセットに加えて、プログラムカウンタ機能(PCC)レジスタ80もまた、レベル1命令キャッシュ20から命令がフェッチされているときにフェッチステージ6で類似の機能性を提供するために使用されてもよい。特に、プログラムカウンタポインタがフィールド82に記憶されてもよく、PCC80はまた、境界ポインタ記憶素子60のセット内にポインタの各々が設けられた範囲および制限情報と類似の、範囲情報84および任意の適切な制限情報86を提供する。
【0057】
さらに、一実施形態では、非境界ポインタもまた、汎用レジスタ40内で指定され、メモリアクセスを実行するときに使用されてもよい。このような非境界ポインタを使用してアクセスされ得るメモリアドレスを制限するために、機能レジスタのいずれかに含まれる範囲および制限情報と類似の、範囲情報92および任意の制限データ94の両方を指定するデフォルトデータ機能(DDC)レジスタ90が設けられてもよい。次いで、汎用レジスタ40内の非境界ポインタを参照してメモリアドレスを識別するメモリアクセス命令が実行されると、境界ポインタに関して実行された境界チェック動作と類似の境界チェック動作は、その非境界ポインタから導出された任意のアドレスに基づいて、しかしこの事例ではDDCレジスタ90内に保持された範囲および制限情報を考慮して、依然として実行可能である。このようなアプローチにより、たとえば、既存のソフトウェアライブラリ内で何らかの機能非認識コードを利用したい機能認識コードは、その機能非認識コードを実行するときに汎用レジスタ40からポインタがどのようにアクセスされるかが使用されることに対して制約を課すようにDDCレジスタ90を設定することが可能である。特に、このような機能非認識コードを実行するときにアクセスされ得るアドレス範囲を限定するために、範囲情報が使用され得る。
【0058】
境界ポインタレジスタ内で境界ポインタによって識別されたメモリアドレスのいずれの特定の範囲も、データ、命令、および/またはその他の機能(すなわち、他の境界ポインタ)を含み得る。したがって、いずれかの時点で、メモリにアクセスする処理回路の機能は、境界ポインタレジスタ内で識別された機能およびこれらの境界ポインタレジスタ内に保持される機能を介してアクセス可能な任意のさらなる機能を含む機能のセットによって定義されることが理解され、この機能のセットは本明細書では、機能領域と呼ばれる。
【0059】
PCCレジスタ80またはDDCレジスタ90内で指定された範囲情報および任意の関連する制限は、様々な方法で設定され得る。しかしながら、一実施形態では、この情報は、現在の機能領域について識別されたメモリアドレス範囲外に常駐するPCCまたはDDCベースの境界チェックを使用してメモリアドレスにアクセスできないように、現在の機能領域内で処理回路が利用可能な境界ポインタの1つ以上を使用して決定される。
【0060】
図3は、それらのデータブロックが機能(すなわち境界ポインタおよび関連する制限情報)を表すか正常データを表すかを識別するために個々のデータブロックに関連してタグビットがどのように使用されるかを、概略的に示す。特に、メモリアドレス空間110は一連のデータブロック115を格納し、これは通常、指定されたサイズを有する。純粋に説明のために、この例では、各データブロックは128ビットを有すると仮定する。各データブロック115に関連して、タグフィールド120が提供され、これは一実施形態では、タグビットと呼ばれる単一ビットフィールドであり、関連データブロックが機能を表すことを識別するように設定され、関連データブロックが正常データを表すことを示すためにクリアされ、したがって機能として扱うことはできない。セットまたはクリア状態に関連する実際の値は実施形態によって異なる可能性があると理解されるが、純粋に説明として、一実施形態では、タグビットが1の値を有する場合には関連データブロックが機能であることを示し、0の値を有する場合には関連データブロックが正常データを含むことを示す
【0061】
機能が、図3に示される機能レジスタ100などの境界ポインタレジスタ60(本明細書では機能レジスタとも呼ばれる)の1つにロードされるときには、タグビットは機能情報と共に移動する。したがって、機能が機能レジスタ100にロードされると、ポインタ102、範囲情報104、および制限情報106(以下、許可情報と呼ばれる)が機能レジスタにロードされる。加えて、この機能レジスタに関連して、またはその中の特定のビットフィールドとして、タグビット108は、内容が機能を表すことを識別するように設定される。同様に、機能がメモリに戻されると、関連するタグビット120は、機能が格納されたデータブロックに関連して設定される。このようなアプローチにより、機能と正常データとの間で区別し、正常データが機能として使用不可能であると保証することが、可能である。
【0062】
図示される実施形態では、装置は異なる例外レベルで動作するように配置されており、各例外レベルは異なるソフトウェア実行特権を有する。さらに、複数の例外レベル間の遷移に、例外メカニズムが使用される。特に、例外エントリまたは例外終了の間、ソース例外レベルからターゲット例外レベルに切り替えるために切替動作が行われ得る。図1に示されるように、装置10は、その動作中に処理回路によって参照される様々な制御および状態情報を記憶する様々な制御/状態レジスタ70へのアクセスを有し、制御/状態レジスタ70は、上述の切替動作の実行中に使用される様々なレジスタを含む。
【0063】
図1に示されるように、プロセッサの現在の動作に関する様々な実行状態情報を取得するために、現在のプロセス状態74は制御/状態レジスタ70内に維持される。単一のボックス74として図示されているが、現在のプロセス状態は必ずしも単一のレジスタ内に全て格納されるわけではなく、利用可能な制御/状態レジスタ70内の多数の制御および状態レジスタ内に格納されてもよい。
【0064】
動作中、たとえば割り込み、システム呼び出し、故障など、様々な異なるメカニズムによって例外がトリガされる可能性がある。一実施形態によれば、例外が取られると、切替動作の一部として例外エントリメカニズムがトリガされ、このプロセス中に現在のプロセス状態74は保存済みプロセス状態72として取得される。やはり、保存済みプロセス状態72は単一のレジスタ内に、または複数のレジスタ内に、格納され得る。次いで、例外を処理するために、処理回路によって例外処理動作が実行される。処理回路が後に例外から復帰すると、保存済みプロセス状態が現在のプロセス状態に復元され、処理回路は、例外が取られる前に実行していた動作を続行できる。
【0065】
処理回路の実行状態を複数の例外レベルで維持できるようにするために、必要に応じて別個の保存済みプロセス状態レジスタ(SPSR)72および現在のプロセス状態レジスタ(CPSR)74が複数の例外レベルで維持され得る。
【0066】
図4は、一実施形態における様々な例外レベル間の相互関係を示している。例外レベルEL0は最も低いソフトウェア実行特権を有し、EL0での実行は非特権実行と呼ばれる。1から3まで増加するnの値は、ソフトウェア実行特権の増加を示す。EL2例外レベルは、プロセッサ仮想化のサポートを提供する。一方、EL3ステージは、2つのセキュリティ状態、すなわちセキュア状態および非セキュア状態のサポートを提供する。
【0067】
これは、図4に示される一般的なツリー構造をもたらす。特に、図4に示されるEL3 200などのEL3例外レベルが提供された場合、これはセキュア状態で実行される。非セキュア状態では、必要に応じて仮想化をサポートすることができ、したがって、EL2例外レベル205は非セキュア状態で提供され得る。セキュア状態では、一実施形態において、EL2レベルは提供されず、代わりにEL1レベル230がセキュア状態で提供されてもよく、その下で多くの異なるEL0レベル240、242が提供され得る。
【0068】
非セキュア状態では、EL2レベル205が提供された場合、その下で複数のEL1レベル210、212、214をサポートしてもよく、これらのEL1レベルの各々は、参照番号220、222で概略的に示されるように、1つ以上のEL0レベルをサポートしてもよい。
【0069】
様々な例外レベル間の遷移は、例外を取ることで行われる。しかしながら、全ての例外が例外レベルを変化させるわけではない。たとえば、一実施形態では、EL0からの例外は通常、EL1で取られる(ただし、いくつかの構成ではEL2)。EL1以上からの例外は、一実施形態では、一般的に同じ例外レベルで取られ得る。しかしながら、EL1からEL2/EL3までおよびEL2からEL3までの様々な例外もまた提供されてもよく、類似の目的に使用されることが可能である。EL3での例外は、一実施形態では、常にEL3で取られる。図4に示されるように、例外レベルの各々に関連して、保存済みプロセス状態レジスタが提供され得る。EL0からの例外がEL1で取られるケースが常である場合には、EL0レベルに関連して別個のSPSRの必要はない。しかしながら、一実施形態では、EL0からの特定の例外がEL0レベルで取られ得る配置であってもよく、その場合、EL0の別個のSPSRレジスタが提供され得る。
【0070】
残りの図を参照して記載されるように、本明細書に記載される実施形態では、複数の例外レベルでの動作を可能にするタイプの処理回路で使用するために、機能の使用を管理する柔軟な技術が開発された。
【0071】
特に、図1に示されるように、制御/状態レジスタ70は、各例外レベルの機能構成情報を格納するための例外レベルごと機能構成レジスタ76を含む。機能構成情報は、様々な異なるタイプの情報を取得することができるが、一実施形態では、少なくとも、その例外レベルで命令を実行するときに処理回路によって実行される動作が機能によって制限されるか否かを識別する。
【0072】
このような機能構成情報を例外レベルごとに指定できることにより、必要に応じて、少なくとも1つの例外レベルのソフトウェアを機能によって制限しない柔軟性を提供する。したがって、たとえば、高い例外レベルで実行している信頼性の高いソフトウェアは、機能によって制限されずに動作することができ、これにより、このようなソフトウェアの機能チェックルーチンを実行する必要性を回避することによる性能利点をもたらすことができる。これはまた、機能ベースのアーキテクチャと互換性を持たせるようにこのようなソフトウェアを修正する必要がある範囲を減少させることもできる。実際、いくつかの実施形態では、このメカニズムは、レガシ、機能非認識、ソフトウェアを少なくとも1つの例外レベルで実行できるようにする。
【0073】
図5は、一実施形態による、レジスタ76内で取得された例外レベルごとの機能構成情報を概略的に示す表である。この実施形態では、レジスタ300は、各例外レベルについて2ビットフィールドを備えてもよい。最初のフィールド305は、関連する例外レベルが機能の影響を受けるか否かを識別することができ、このフィールドは、本明細書では「A」ビットとも呼ばれる。したがって、このビットは、ソフトウェアが関連する例外レベルを実行しているときに、そのソフトウェアが機能によって制限されているか否かを識別する。図5に示される例では、「0」の値は、ソフトウェアが機能によって制限されていないことを示し、「1」の値は機能によって制限されていることを示す。しかしながら、別の実施形態では、必要に応じて論理ゼロ値と論理1値の意味が逆転され得ることは、理解されるだろう。
【0074】
一実施形態では、例外レベルごとの機能構成情報はフィールド305のみを備えてもよいが、代替実施形態では、関連する例外レベルで実行するソフトウェアが、1つ以上のより低い例外レベルで処理回路によって実行される動作を制限するために後に使用される機能を管理できるか否かを識別するために、追加のフィールド310が提供される。任意選択的に、この情報はまた、特定の例外レベルで実行しているソフトウェアが、同じ例外レベルで処理回路によって実行される動作を制限するために使用される機能も管理できるか否かを識別してもよい。たとえば、一実施形態では、特定の例外レベルで実行するソフトウェアが異なる「コンパートメント」内で実行されるように配置することができ、1つのコンパートメントで実行するソフトウェアは、別のコンパートメントで実行するソフトウェアによって行われる動作を制限するために後に使用される機能を管理することができる。具体例として、特定の例外レベルで実行するソフトウェアは監視状態または制限状態で動作することができ、監視状態で1つのコンパートメントを実行するソフトウェアは、同じ例外レベルの別のコンパートメントで実行するソフトウェアを制限するために後に使用される機能を管理することができる。
【0075】
図5に示されるように、機能を管理するために特定の例外レベルで実行するソフトウェアの機能に関する情報を取得するために使用されるフィールド310は、一実施形態では、「M」ビットと呼ばれてもよい。
【0076】
図5に示されるように、AビットおよびMビットの両方がクリアされた場合には、そのソフトウェアが機能の影響を受けないだけでなく、機能を管理することもできず、したがって装置の機能ベースのアーキテクチャを考慮するように修正される必要もないので、これは関連する例外レベルで実行するソフトウェアがレガシソフトウェアであることを意味する。
【0077】
やはり図5に示されるように、別の任意選択的な状態は、AビットはクリアされるがMビットは設定される状態である。これは、関連する例外レベルで実行するソフトウェアが、機能自体の影響は受けないが、より低い例外レベルで実行するソフトウェアによって行われる動作を制限するために後に使用される機能を管理するために使用され得ることを、意味する。
【0078】
別の選択肢として、AビットおよびMビットの両方が設定され得る。これは、関連する例外レベルで実行するソフトウェアが、機能自体の影響を受け、機能を管理することもできることを意味する。先に述べられたように、Mビットが設定されたとき、これは一実施形態において、関連する例外レベルで実行するソフトウェアが、より低い例外レベルでソフトウェアによって行われる動作を制限するために後に使用される機能を管理できることを示し得るが、ソフトウェアは同じ例外レベルでは機能を管理できない可能性がある。しかしながら、代替実施形態では、いくつかの状況において、同じ例外レベルに関連する機能を管理することもできるかも知れない。
【0079】
一実施形態では、図5に示される最初の3セットのエントリのみが、AビットおよびMビットの有効な状態である。しかしながら、代替実施形態では、たとえば最も低い例外レベルEL0に関連するいくつかの事例において、表300の最後のエントリによって示されるような状態のさらなるセットが利用可能であり得る。特に、この状態に関連して、Mビットはクリアされるが、Aビットは設定される。これは、その例外レベルで実行するソフトウェアは機能を管理できないが、機能によって制限される可能性があることを意味する。これは、それ以上低い管理すべき例外レベルがない、最も低い例外レベルEL0を可能にする適切な構成であり得る。特定の具体例として、これにより、通常はこれらの機能がより高い例外レベルによって設定された後で、EL0で実行するソフトウェアは、プログラムカウンタ機能80およびDDC90などの機能によって制限され得る。
【0080】
一実施形態では、例外レベルごと機能構成レジスタ76は複数のレジスタで形成されると見なされることが可能であり、各レジスタは、関連する例外レベルによって「所有」され、その例外レベルのAビットおよびMビットを含む。これらのレジスタは明確にアクセスされ、より高い例外レベルはそのレベル以下のレジスタへのアクセスを有する。たとえば、EL2例外レベルは、EL2、EL1、およびEL0に影響する機能構成レジスタへのアクセスを有する。特定の一実施形態では、EL0の機能構成自体は、EL1またはEL2のいずれかによって所有されるレジスタによって構成可能に制御される。
【0081】
一実施形態では、各例外レベルによる機能構成レジスタへのアクセスは、いずれか適切なメカニズムによって制御され得る。特定の例外レベルにアクセス可能な機能構成レジスタに記憶された値はその後、一実施形態において、動作中、たとえばそれぞれ機能認識および機能非認識のVMゲストの間で切り替えるときに、動的に変更され得る。
【0082】
図6は、より高い構成レベルに関連付けられた機能構成が、より低い例外レベルで利用可能な機能構成にどのように影響を及ぼし得るかを示す、表320である。この表では、より高い例外レベルPのMビット値およびAビット値はフィールド325、330によって示され、対応するより低い例外レベルQのMビットおよびAビットはフィールド335、340によって示されている。この実施形態では、例外レベルPでMビットがクリアされた場合には(すなわち、論理ゼロ値)、これは、より高い例外レベルは機能による影響を受けることが不可能であり、その一方でより低い例外レベルで機能を構成することが不可能なので、例外レベルPは機能の影響を受けることが不可能であることを意味する(すなわち、実際の値に関係なく、そのAビットもまたクリアされるものとして扱われる)。より高い例外レベルが機能を管理できない場合には、より低い例外レベルは機能を管理することができないので、例外レベルPについてフィールド325内のMビットをクリアすることはまた、例外レベルQのMビットがクリアされなければならないこと(すなわち、ゼロ)を意味する。例外レベルPと同様に、例外レベルQのフィールド335内のMビットをクリアすることは、フィールド340の値を読み取る以外の全ての目的のために、フィールド340内のAビットもまたクリアとして扱われることを意味する。
【0083】
次の3つのエントリは、例外レベルPが機能を管理できるが、機能による影響は受けない状況を示している。このような配置では、図5の表300に示される上位3つのエントリの各々が、例外レベルQに関連して利用可能である。さらに、図5を参照して先に述べられたように、一実施形態では、例外レベルQが最も低い例外レベルである場合、例外レベルQが機能によって制限されるが機能を管理することはできないように、Mビットフィールド335がクリアされてAビットフィールド340が設定されることが可能である。
【0084】
図6の最後の3つのエントリは、MビットおよびAビットの両方が例外レベルPのために設定されている状況を示している。やはり、図5の表300に示される上位3つのエントリは、例外レベルQに利用可能である。さらに、先に述べられたように、例外レベルQが最も低い例外レベルであるとき、MビットはクリアされるがAビットは設定されることもまた可能である。
【0085】
先に述べられたように、例外エントリまたは例外終了/復帰の際に、ソース例外レベルからターゲット例外レベルに切り替えるために切替動作が行われ得る。記載される実施形態によれば、機能の効果は例外レベルごとに変更し得るので、装置はまた、切替動作の一部として、ソース例外レベルとターゲット例外レベルとの間で機能の効果が異なる可能性を考慮するメカニズムも提供する。特に、ソース例外レベルからターゲット例外レベルへの切替動作中に、ソース例外レベルおよび宛先例外レベルのうちの少なくとも1つに関する機能構成ストレージ内の機能構成情報は、処理回路の実行状態が切替動作中にどのように管理されるかを決定するために使用される。このプロセスは、図7A図7B、および図8を参照して、より詳細に説明される。
【0086】
図7Aは、ソース例外レベルXのどの実行状態が保存されるべきかを決定するために、例外レベルXから例外レベルYまでの例外エントリに対して実行されるステップを示す。ステップ400において、Aビットがソース例外レベルXのために設定されるか否か、すなわち例外レベルXが機能による影響を受けるか否かが判断される。そうである場合には、プロセスはステップ405に進み、例外レベルXの機能状態が取得される。先に説明されたように、これは、例外レベルXの現在のプロセス状態レジスタ(CPSR)の内容が、例外レベルYにアクセス可能な保存済みプロセス状態レジスタ(SPSR)72内に保存されることを意味する。しかしながら、加えて、PCCレジスタ80内に格納された現在のプログラムカウンタ機能は、ソース例外レベルXの優先リターンアドレス機能を識別するために使用される必要がある。優先リターンアドレスは、例外のタイプに依存するが、典型的にはプログラムカウンタ値、またはプログラムカウンタ値プラス4である(バイトサイズのアドレス指定および32ビット命令を想定)。優先リターンアドレスに加えて、現在のプログラムカウンタ機能からの残りの機能情報も、PCCから生成されたリターンアドレス機能にコピーされる。一実施形態では、このようにして生成されたリターンアドレス機能は、専用リターンアドレス機能レジスタ内に格納され、特定の一実施形態では、これは機能例外リンクレジスタ(CELR)78)である。
【0087】
しかしながら、ステップ400においてAビットが設定されていないと判断された場合、これはソース例外レベルで実行するソフトウェアが機能による影響を受けないことを意味するので、例外レベルXの現在のプロセス状態74が保存済みプロセス状態72に保存されたままであるが、リターンアドレス情報を形成するための機能を保存する必要はない。代わりに、優先リターンアドレスがプログラムカウンタ値82から計算され、適切なリターンアドレス記憶素子内に保存されることが可能であり、一実施形態では、これは例外リンクレジスタ(ELR)である。しかしながら、例外レベルXで実行するソフトウェアは、その命令フェッチが機能によって制限されないので、PCCレジスタ80から機能情報が抽出される必要はない。
【0088】
一実施形態では、別個のCELRレジスタ78および別個のELRレジスタが提供され得るが、代替実施形態では、いずれの場合も同じ物理構造78が使用され得る。ソース例外レベルXが機能によって制限されないために図7Aに示されるプロセスがステップ410に進むと、PC値から導出された優先リターンアドレスはCELRのアドレスフィールド内に記憶されることが可能であり、一実施形態では、残りのフィールドの少なくとも1つが最初のデフォルト値に設定される。たとえば、図3を参照して説明された前述のタグビットを参照すると、CELRレジスタ78に関連付けられたタグビットはこのような事例において、CELRが有効な機能を格納していないことを識別するためにクリアされてもよく、ハードウェアはその後、例外復帰に関する情報を後者が回収するときにリターンアドレス情報を記憶するCELRの部分を単に参照する。代替実施形態では、CELRレジスタ78内の残りのフィールドの全てが、たとえばステップ410でCELRレジスタ78内に格納された優先リターンアドレスをゼロ拡張することによって、クリアされ得る。
【0089】
ソース例外レベルXのどの実行状態が例外エントリに保存される必要があるかの判断に加えて、宛先例外レベルYに適した実行状態を決定することも必要であり、特にPCCレジスタ80に格納すべき初期プログラムカウンタ機能または値を決定することが必要である。このプロセスは、図7Bに概略的に示されている。
【0090】
図示されるように、ステップ420において、Aビットが宛先例外レベルYに設定されるか否か、すなわち宛先例外レベルが機能による影響を受けるか否かが判断される。そうである場合には、プロセスはステップ425に進み、プログラムカウンタ機能レジスタ80は、図1に示される機能制御記憶素子79に記憶された例外エントリアドレス機能情報を使用して更新される。特に、レジスタ79は、例外エントリ上で使用される適切なアドレスに関する情報、ならびにPCCレジスタ80内に格納されるプログラムカウンタ機能を形成するためにそのアドレスに加えて提供される関連する機能情報も、格納する。レジスタ79内の例外エントリアドレス情報は、様々な形態を取ることができるが、一実施形態では、レジスタ79は、機能ベクトルベースアドレスレジスタ(CVBAR)の形態を取る。このレジスタは、例外エントリのベースアドレスを提供し、例外は、例外タイプに応じてこのベースアドレスからのオフセットを決定する。したがって、例外のタイプに関する情報は、PCCレジスタ80内にロードされるプログラムカウンタ機能を形成するために使用される適切なアドレスを識別するために使用され、PCCレジスタの機能情報の残りの部分は、CVBAR内の機能の対応する部分から形成される。
【0091】
Aビットが宛先例外レベルYのために設定されている場合、これは、例外レベルYが機能による影響を受けておらず、したがってプログラムカウンタ機能は必要とされないことを、意味する。代わりに、PCCレジスタ80のフィールド82内にロードされる初期プログラムカウンタ値を形成するだけでよい。したがって、一実施形態では、ステップ430によって示されるように、このシナリオにおいて、PCCレジスタ80のフィールド84、86内の範囲および制限情報は最大機能を識別するように設定され、PCポインタ値82は例外エントリアドレスレジスタ79から得られた情報を使用して更新される。この例では、非機能例外エントリアドレスレジスタが参照されるが、これは一実施形態において、ベクトルベースアドレスレジスタ(VBAR)であってもよい。特定の一実施形態では、VBARレジスタは、CVBARレジスタの下位64ビットに形成され、CVBARおよびVBARレジスタの両方が同じ物理ストレージ構造を共有できるようにする。
【0092】
しかしながら、代替実施形態では、最大機能を識別するようにPCCレジスタ80内に範囲および制限情報を設定する必要がないかも知れない。たとえば、現在の例外レベルが機能による影響を受けないときにPCCレジスタ80内の範囲および制限情報84、86を無視するように、ハードウェアが配置されている場合には、必要に応じて、範囲および制限情報は代わりに変更されないままであるか、またはクリアされてもよい。しかしながら、最大機能を識別するように範囲および制限情報を設定することによって、全ての状況においてPCCレジスタ80全体が参照される実施形態では、これにより、宛先例外レベルで実行するソフトウェアが機能によって制限されないことを保証する。
【0093】
図8は、例外からの復帰中に取られるステップを示すフロー図である。この事例では、ソース例外レベルは例外レベルYであり、宛先例外レベルは例外レベルXであると想定される。ステップ450において、Aビットが宛先例外レベルXに設定されるか否かが判断される。そうである場合には、プロセスはステップ460に進み、機能状態が宛先例外レベルのために復元される。これは、CELRレジスタ78の内容をPCCレジスタ80内に復元し、SPSRレジスタ72の内容を例外レベルX用のCPSRレジスタ74内に復元することによって、図7Aのステップ405で取られるステップを本質的に逆転させる。
【0094】
しかしながら、Aビットが宛先例外レベルXに設定されていないと判断された場合には、例外レベルXは機能による影響を受けないことを意味するので、プロセスはステップ455に進む。ここで、(非機能)状態が例外レベルXのために復元される。一実施形態では、これはやはり、例外レベルXのためにSPSR内容がCPSR内容に復元されることを伴う。しかしながら、PCCレジスタ80に関して、一実施形態では、範囲および制限情報は最大機能を識別するように設定され、ポインタ値フィールド82はELRからの情報を使用して取り込まれる。図7Bのステップ430に関連して先に説明されたのとほとんど同じように、いくつかの実施形態では、現在の例外レベルが機能の影響を受けていない状況でハードウェアがその情報を参照しないならば、最大機能を識別するように範囲および制限情報を設定する代わりとして、範囲および制限情報を「そのまま」にするか、またはその情報をクリアするだけでよい。
【0095】
以下に記載される実施形態では、例外レベルごと機能構成レジスタ76内に記憶された前述の機能構成情報は、特に特定のタイプの命令を実行するときに生成される結果の形態に影響を及ぼすためなど、追加の目的にも使用され得る。特に、一実施形態では、前述のAビットは機能使用情報として使用されることが可能であり、特定のタイプの命令が処理回路によって実行されると、生成される結果が機能または整数値のどちらとして生成されるべきかを判断するために、処理回路はその機能使用情報を参照する。特に、一実施形態では、関連する例外レベルが機能の影響を受けることをAビットが示す場合には、特定のタイプの命令が実行されると、処理回路は、機能の形態で結果を生成させる。反対に、関連する例外レベルが機能の影響を受けないとAビットが示す場合には、このような命令を実行すると、処理回路は整数値の形態で結果を生成する。
【0096】
以下の説明のために、Aビット情報は機能使用情報として使用されると想定されるが、代替実施形態では、この目的のために他の情報が維持されてもよい。たとえば、機能使用情報を形成するために別個の専用制御ビットが提供され得るが、これは機能状態または非機能状態をそれぞれ示すために設定またはクリアされることが可能である。あるいは、機能使用情報、特に処理回路が機能状態または非機能状態のどちらで動作しているかを導出するために、既存のビットの組み合わせが使用されてもよい。
【0097】
機能使用情報がどのように形成されるかに関係なく、特定の命令がどのように実行されるか、特にその命令がその結果として機能または整数値のどちらを生成するかに影響を及ぼすためにこのような情報を使用することで、単一の命令の構成可能な実行を可能にし、必要な動作に機能命令および非機能命令の両方を提供する必要性を回避することが、理解されるだろう。これは、命令セット符号化空間が既に頻繁に使用され、したがって命令の機能変数および非機能変数の両方を符号化するのに十分な空間を解放するのが困難な状況において、非常に有用であり得る。
【0098】
図9は、一実施形態による、命令を実行するときに処理回路によって実行される動作を示すフロー図である。ステップ500において、実行すべき新しい命令があると判断され、その後ステップ505において、その命令が、機能使用情報を参照して結果タイプの判定を行う必要があるタイプであるか否かが判断される。特に、命令を実行した結果が機能または整数値のどちらの形態で得られるかについての判断がなされる技術は、必要に応じて特定のタイプの命令に制限される可能性がある。一実施形態では、この技術が使用され得る命令のタイプの例は、結果として何らかの形態のアドレスを生成する命令である。機能ベースのアーキテクチャでは、これは後にそのアドレス情報がどのように使用されるかを厳しく制限するために使用され得るので、このようなアドレス情報は機能として生成されることが望ましい。しかしながら、下位互換性では、命令が整数値としてアドレス情報を生成できるようにすることが依然として有用であり、本明細書に記載される技術は、同じ命令が両方の目的に使用されることを可能にし、機能使用情報は、命令が実行されるときに、結果が機能または整数値のどちらとして生成されるかを構成するように配置される。
【0099】
ステップ505において、命令が結果タイプの判定を行う必要のあるタイプではないと判断された場合には、プロセスはステップ510に進み、命令が通常通りに実行される。しかしながら、ステップ505において、結果タイプの判定が行われる必要のあるタイプであると判断された場合には、ステップ515において、その機能使用情報が機能状態であるか非機能状態であるかを判断するために、処理回路によって機能使用情報が参照される。先に述べられたように、Aビットが機能使用情報として使用される一実施形態では、現在の例外レベルが機能による影響を受けることを識別するようにAビットが設定されるとき、これは機能状態を示す。反対に、現在の例外レベルが機能による影響を受けないことを示すためにAビットがクリアされる場合には、これは非機能状態を示す。
【0100】
ステップ515において、機能使用情報が機能状態を示すと判断された場合には、ステップ520において、結果として機能を生成するような方法で命令が実行される。次いでステップ525において、結果は機能記憶素子に記憶される。
【0101】
ステップ515において機能使用情報が機能状態を示さない場合には、代わりにプロセスはステップ530に進み、結果として整数値を生成するような方法で命令が実行される。次いで、ステップ535において、この結果は整数記憶素子に記憶される。
【0102】
機能または整数値をそれぞれ記憶するために記憶素子として選択された機能記憶素子または整数記憶素子は、実行される命令のタイプに依存する。たとえば、いくつかの実施形態では、結果は更新されたプログラムカウンタとして生成され、これは、機能使用情報が機能状態を示すときにはPCCレジスタ80内にプログラムカウンタ機能として格納されることが可能であり、あるいは機能使用情報が非機能状態を示すときにはプログラムカウンタ記憶素子内にプログラムカウンタ値として格納されることが可能である。一実施形態では、機能レジスタは、プログラムカウンタ機能レジスタ80内のフィールド、たとえばプログラムカウンタポインタ値を記憶するフィールド82として形成され得る。
【0103】
別の実施形態では、結果は汎用レジスタ内に記憶されてもよく、したがって、結果が機能であるときには機能レジスタ60の1つに格納されてもよく、結果が整数値として生成されるときには汎用レジスタ40の1つに格納されることが可能である。図1に関連して先に説明されたように、一実施形態では、汎用レジスタ40および機能レジスタ60の両方を提供するために同じ物理ストレージが使用されてもよく、したがって汎用レジスタは、関連する機能レジスタ内のフィールド、たとえばフィールド62によって形成され得る。
【0104】
図9の上記の技術は、様々な異なる命令に適用可能である。図10Aおよび図10Bは、命令が分岐即値命令である一例を示している。このような命令は、ソースオペランドとして、命令のビット符号化空間内で直接符号化された即値を指定する。このような即値は命令符号化空間の大部分を専有する可能性があり、したがって、結果として機能を生成するバージョンと、結果として整数値を生成するバージョンとで、2回命令を複製する必要がないことが望ましい。図9の技術を使用することによって、これが回避される。
【0105】
特に、図10Aに示されるように、分岐即値命令が実行されると、機能使用情報が機能状態を示すか否かが判断され、これは先に説明されたように、一実施形態においてAビットが設定される場合である。そうである場合には、現在のプログラムカウンタ機能600は、新しいプログラムカウンタ機能620を生成するように修正される。特に、元のポインタ値602は、新しいポインタ値622を生成するために、たとえば追加610を実行することによって、即値と論理的に組み合わせられる。一実施形態では、元のプログラムカウンタ機能内の範囲および許可情報604、606は、フィールド624および626によって示されるように、新しいプログラムカウンタ機能620内で複製される。
【0106】
しかしながら、図10Bに示されるように、同じ命令が実行されると、機能使用情報は非機能状態を示し、これは特定の一実施形態において、Aビットがクリアされている場合であり、その後結果は、プログラムカウンタ機能ではなくプログラムカウンタ値(すなわち整数値)として生成される。図示される特定の実施形態では、プログラムカウンタ整数値は依然としてプログラムカウンタ機能レジスタ80内に、特に図1に示されるフィールド82内に格納されていると想定される。したがって、元のプログラムカウンタ値はPCCレジスタ内容630内のフィールド632によって与えられる。この値は、更新されたPCCレジスタ内容650のフィールド652に格納された新しいポインタ値を生成するために、たとえば加算640など、即値と組み合わせた論理演算を受ける。元のプログラムカウンタ機能内容630内の残りのフィールド634は、残りのフィールド654によって示されるように、新しいプログラムカウンタ機能内容650内で単に複製されてもよく、あるいは図10Bの要素645によって示されるように、何らかの任意選択的な修正を受けてもよい。たとえば、一実施形態では、残りのフィールド654は、新しいプログラムカウンタ値が機能によって効果的に制限されないように、最大機能を表すように設定されてもよい。あるいは、図3に関連して説明された前述のタグビットは、プログラムカウンタ機能レジスタの内容が有効な機能を格納しないことを識別するように、クリアされてもよい。一実施形態では、その場合、フィールド652内のポインタ値が依然として有効なプログラムカウンタ整数値を表すと仮定することができる。
【0107】
しかしながら、代替実施形態では、このようなステップを取る必要がないかも知れない。たとえば、現在の例外レベルが機能による影響を受けないときにPCCレジスタ80内の範囲および制限情報を無視するように、ハードウェアが配置されている場合には、必要に応じて、(たとえばこれら残りのフィールド内へのゼロ拡張によって)範囲および制限情報は代わりに変更されないままであるか、またはクリアされてもよい。
【0108】
図11Aおよび図11Bは、別のタイプの分岐命令、すなわちリンク付き分岐即値命令の構成可能な実行を示している。このような命令の実行は、図10Aおよび図10Bを参照して先に説明された機能の性能をもたらすが、リンクレジスタにリターンアドレスも取り込み、これは一実施形態において、機能使用情報に応じてリターンアドレス機能またはリターンアドレス整数値となるように構成され得る。
【0109】
図11Aおよび図11Bでは、図10Aおよび図10Bと共通の要素を指すために同じ参照番号が使用されている。したがって、図11Aを参照すると、図10Aを参照して先に説明されたのとまったく同じ方法で、新しいプログラムカウンタ機能620が生成されることがわかる。加えて、機能リンクレジスタ(CLR)内に格納するために、機能リターンアドレスが生成される。一実施形態では、機能リンクレジスタは、1つの特定の実施形態C30において、図1を参照して説明された機能レジスタ60の特定の1つであってもよい。図11Aに示されるように、フィールド662内に格納するためのリターンアドレスは、命令が実行される前に存在していたプログラムカウンタ機能内の現在のポインタ値602にオフセットを加えることによって生成される。一実施形態では、リターンアドレスが、リンク付き分岐命令に続く次の命令を効果的に指すように、ポインタ値に命令長が追加される。これは、図11Aの追加ボックス670によって示される。やはり図11Aに示されるように、一実施形態では、元のプログラムカウンタ機能のフィールド604、606内の範囲および許可情報は、リターンアドレス機能660を保持する機能リンクレジスタのフィールド664、666内で複製される。
【0110】
しかしながら、Aビットがクリアされており、非機能状態を示す場合には、実行される処理は、図11Bに示されるとおりである。新しいプログラムカウンタ値は、図10Bを参照して先に説明されたのとまったく同じ方法で生成される。加えて、追加要素670によって示されるように、ポインタ値632に命令長を追加することによって、リターンアドレス682が生成される。これはリンクレジスタ内に格納されることが可能であり、リンクレジスタは、機能リンクレジスタとは物理的に別個であり、一実施形態では、汎用レジスタ40の1つであってもよい。あるいは、リンクレジスタは、機能リンクレジスタ680内のフィールド(実質的にフィールド682)によって提供されてもよく、これは追加のフィールド684も含む。これら残りのフィールドは元のプログラムカウンタ機能630からの残りのフィールドデータ634を使用して直接取り込まれることが可能であり、または要素675によって示されるように、いくつかの任意選択的な修正を受けてもよい。これらの任意選択的な修正は、プログラムカウンタの残りのフィールドに関して実行され得る任意選択的な修正645について先に説明されたのと本質的に同じである。したがって、これらは最大機能を識別するように設定可能であり、タグビットは、機能リンクレジスタが有効な機能を格納していないことを示すためにクリアされてもよい。さらなる代替として、ハードウェアがいかなる場合もこれらのフィールド内の値を無視する場合には、これらのフィールドはゼロ拡張されるかまたはそのままにされてもよい。
【0111】
図12Aおよび図12Bは、命令が分岐命令ではなくアドレス生成命令である、さらに別の代替実施形態を示す。この例では、アドレス生成命令は、結果が書き込まれる宛先の識別子と、ソースオペランドとして使用される即値とを指定する。
【0112】
図12Aに示されるように、Aビットが設定されている間に命令が実行される場合には、これにより、生成されたアドレス情報は、宛先機能レジスタC内に格納された機能の形態を取り、この機能レジスタは宛先IDに基づいて選択される。通常、機能レジスタは、図1を参照して先に説明された汎用機能レジスタ60の1つとなる。
【0113】
この例では、現在のプログラムカウンタ機能700内のポインタ値702は、アドレス値722を生成するために、指定された即値を使用して論理演算710を受ける。範囲および許可情報704、706は、一実施形態において、結果機能720のフィールド724、726内で複製されてもよい。論理演算710の形態は、アドレス生成命令のタイプに依存する。単純なケースでは、単にポインタ値702にオフセットとしての即値を追加することを伴ってもよい。
【0114】
図12Bは、Aビットがクリアされている場合のアドレス生成命令の実行を示す。この事例では、現在のプログラムカウンタ機能730内のポインタ値732は、即値を使用して論理演算740を受け、結果のアドレス値750はその後、整数レジスタXの1つ(典型的には汎用レジスタ40の1つ)内に格納され、選択された特定のレジスタは、アドレス生成命令内で指定された宛先IDに基づいて選択される。プログラムカウンタ機能730の残りのフィールド734は、この事例においてアドレス生成命令の実行中には使用されない。
【0115】
図12Aおよび図12Bの上記説明より、アドレス生成命令は、機能使用情報に応じて、アドレス機能またはアドレス整数値のいずれかを生成するために実行され得ることが、理解されるだろう。
【0116】
アドレス生成命令は様々な形態を取り得るが、特定の一実施形態では、英国ケンブリッジのARM Limitedによって設計されたプロセッサで使用されるARM命令セットにおいて指定されたADRまたはADRP命令のいずれかの形態を取り得る。
【0117】
図10Aから図12Bの例では、例として与えられた命令は、ソースオペランドとして即値を取る形態の全てであるが、記載された技術は、ソースオペランドとして即値を使用しない命令に関連しても使用され得ることに、注意すべきである。特に、整数レジスタおよび即値の両方を取る変数と同様に、整数レジスタ内の絶対またはPC(C)相対分岐先を取る分岐変数および整数レジスタ内の絶対またはPC(C)相対分岐先を取るアドレス生成変数もまた、可能である。
【0118】
たとえば、以下のタイプの命令実行がサポートされ得る。
【0119】
実施例1
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;
(上記実施例1の命令の翻訳はつぎのとおり)
分岐レジスタ(ビット(5)n、ブールリンク)
ビット(64)addr=X[n];
機能イネーブル()の場合には
リンクの場合には
CLR=PCC+4;
PCC=PCCアドレス付き(addr);
そうでなければ
リンクの場合には
LR=PC+4;
PC=addr;
【0120】
上記の実施例1は、「BranchRegister(分岐レジスタ)」形態によって示されるように、整数レジスタから絶対分岐先を取る分岐変数を識別する。値「ビット(5)n」は、整数ソースレジスタを識別するために使用されるレジスタインデックスを指定し、「ブールリンク」フィールドは、命令がリンク変数を有する分岐であるか否かを識別する1ビット値である。64ビットアドレスはその後、レジスタインデックスによって識別された整数レジスタXから決定される。機能がイネーブルされたことを機能使用情報が示す場合には、PCC内のポインタ値が整数レジスタXから得られた64ビットアドレスになるように、プログラムカウンタ機能が更新され、残りのフィールドは、前のプログラムカウンタ機能から形成される。命令がリンク付き分岐命令である場合には、現在のプログラムカウンタ機能に命令長(この場合は4バイト)を加えることによって、機能リンクレジスタが更新される。反対に、機能がイネーブルされていないことを機能使用情報が示す場合には、整数レジスタXから得られたアドレス値によって新しいプログラムカウンタ値が形成される。命令がリンク付き分岐命令である場合には、現在のプログラムカウンタ値に命令長を加えることによって、リンクレジスタが更新される。
【0121】
実施例2
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;
(上記実施例2の命令の翻訳はつぎのとおり)
分岐レジスタ相対(ビット(5)n)
ビット(64)オフセット=X[n];
機能イネーブル()の場合には
PCC=PCC+オフセット;//オフセットをPCCのアドレスフィールドに追加
そうでなければPC=PC+オフセット;
【0122】
実施例2は、「BranchRegisterRelative(分岐レジスタ相対)」形態によって示されるように、整数レジスタからPC(C)相対分岐先を取る分岐変数を識別する。やはり、値「ビット(5)n」は、整数ソースレジスタを識別するために使用されるレジスタインデックスを指定する。この場合、命令の「リンク付き」変数はないと想定される。64ビットアドレスはその後、レジスタインデックスによって識別された整数レジスタXから決定される。機能がイネーブルされたことを機能使用情報が示す場合には、更新されたポインタ値を生成するために、PCC内のポインタ値が整数レジスタXから加えられた整数値を有するように、プログラムカウンタ機能が更新され、残りのフィールドは、前のプログラムカウンタ機能から形成される。反対に、機能がイネーブルされていないことを機能使用情報が示す場合には、整数レジスタXからの整数値をオフセットとして現在のPC値に加えることによって、新しいプログラムカウンタ値が形成される。
【0123】
上記の実施形態より、このような実施形態は、特定の命令の機能生成バージョンおよび整数値生成バージョンの両方をサポートするための効率的なメカニズムを提供することがわかるが、命令符号化空間内でこれら2つの異なる変数を別々に符号化する必要はない。これは、機能として結果を生成する命令の実行をサポートするための非常に効率的なメカニズムを提供するが、代わりに、整数値として結果を生成するために同じ命令が実行され得る下位互換性を可能にする。
【0124】
図13は、使用され得るシミュレータの実装を示す。先に記載された実施形態は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、コンピュータプログラムの使用を通じて実施される本明細書に記載の実施形態にしたがって命令実行環境を提供することも、可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実施を提供する限りにおいて、しばしばシミュレータと呼ばれる。シミュレータコンピュータプログラムの種類としては、エミュレータ、仮想マシン、モデル、および動的バイナリトランスレータを含むバイナリトランスレータを含む。通常、シミュレータの実装はホストプロセッサ830上で実行され、任意選択的に、シミュレータプログラム810をサポートするホストオペレーティングシステム820を実行する。いくつかの配置では、ハードウェアと提供された命令実行環境、および/または同じホストプロセッサ上に提供された複数の異なる命令実行環境の間に、複数のシミュレーション層があってもよい。歴史的に、合理的な速度で実行するシミュレータの実装を提供するために強力なプロセッサが必要であったが、このようなアプローチは、互換性または再利用のために別のプロセッサにネイティブなコードを実行したいときなど、特定の状況において正当化され得る。たとえば、シミュレータの実装は、ホストプロセッサハードウェアによってサポートされない追加の機能性を命令実行環境に提供してもよく、または典型的に異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」,Robert Bedichek,Winter 1990 USENIX Conference,53~63ページに記載されている。
【0125】
特定のハードウェア構造または特長を参照してこれまでに実施形態が記載されてきた範囲で、シミュレートした実施形態において、適切なソフトウェア構造または機能によって同等の機能性が提供され得る。たとえば、特定の回路は、コンピュータプログラム論理としてシミュレートした実施形態に実装され得る。同様に、レジスタまたはキャッシュなどのメモリハードウェアは、ソフトウェアデータ構造としてシミュレートした実施形態に実装され得る。先に説明された実施形態で言及されたハードウェア要素の1つ以上がホストハードウェア(たとえば、ホストプロセッサ830)上に存在する配置では、いくつかのシミュレートした実施形態は、適切であれば、ホストハードウェアを利用してもよい。
【0126】
シミュレータプログラム810は、コンピュータ可読記憶媒体(非一時的媒体であってもよい)上に記憶されてもよく、シミュレータプログラム810によってモデリングされているハードウェアアーキテクチャのアプリケーション・プログラム・インターフェースと同じであるターゲットコード800(アプリケーション、オペレーティングシステム、およびハイパーバイザを含み得る)にプログラムインターフェース(命令実行環境)を提供する。したがって、実行が機能使用情報の影響を受ける上記の命令を含む、ターゲットコード800のプログラム命令は、上記で説明された装置2のハードウェア機能を実際には有していないホストコンピュータ830がこれらの機能をエミュレートできるように、シミュレータプログラム810を使用して命令実行環境の中から実行され得る。
【0127】
本出願において、「~するように構成された」という用語は、装置の要素が定義された動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの配置または相互接続方法を意味する。たとえば、装置は、所定の動作を提供する専用ハードウェアを有してもよく、あるいはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「構成された」は、所定の動作を提供するために装置要素が多少なりとも変更されなければならないことを示唆するものではない。
【0128】
以上、添付図面を参照して本発明の例示的な実施形態を本明細書で詳細に説明したが、本発明はこれらの厳密な実施形態に限定されるものではなく、添付の特許請求によって規定される本発明の範囲および趣旨から逸脱することなく、様々な変更、追加、および修正が当業者によって実施され得ることが、理解されるべきである。たとえば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴と一緒になされ得る。
図1
図2
図3
図4
図5
図6
図7A
図7B
図8
図9
図10A
図10B
図11A
図11B
図12A
図12B
図13