データ処理装置であって、データを処理するように構成された処理回路であって、前記処理回路は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、処理回路と、例外イベントを取り扱うことから戻るように、処理回路を制御するための例外戻りデータを記憶するための少なくとも1つの例外戻りレジスタであって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態にある時に、処理回路によって使用される専用の対応する例外戻りレジスタを有する、少なくとも1つの例外戻りレジスタと、前記処理回路が前記例外状態のうちのいずれかにある時に使用するための、基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、基本レベルのスタックポインタレジスタと、少なくとも1つの更なるレベルのスタックポインタを記憶するための少なくとも1つの更なるレベルのスタックポインタレジスタであって、各更なるレベルのスタックポインタは、前記処理回路が対応する更なるレベルの例外状態にある時の使用のための専用であり、対応する更なるレベルのスタックデータストアの前記メモリ内の前記場所を示す、少なくとも1つの更なるレベルのスタックポインタレジスタと、現在のスタックポインタを選択して、データを処理する時に前記現在のスタックポインタによって示される現在のスタックデータストアを使用するように前記処理回路を制御するように構成されたスタックポインタ選択回路と、を備え、前記処理回路が前記基本レベルの例外状態にある時、前記スタックポインタ選択回路は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、前記処理回路が前記少なくとも1つの更なるレベルの例外状態のうちの1つにある時、前記スタックポインタ選択回路は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタのうちの少なくとも1つを、前記現在のスタックポインタとして選択するように構成され、前記処理回路は、前記現在のスタックポインタが前記基本レベルのスタックポインタであるかまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、データ処理装置。前記スタックポインタ選択回路は、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記現在のスタックポインタとして、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタを選択する、請求項1に記載のデータ処理装置。前記処理回路は、前記例外イベントに応答して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理し、前記スタックポインタ選択回路は、前記処理回路が前記例外取扱ルーチンの初期部分を完了した後に、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタから、前記基本レベルのスタックポインタへ前記現在のスタックポインタを切り替えるように制御される、請求項2に記載のデータ処理装置。前記例外取扱ルーチンは、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタから、前記基本レベルのスタックポインタへ前記現在のスタックポインタを切り替えるように、前記スタックポインタ選択回路を制御するための命令を含む、請求項3に記載のデータ処理装置。前記現在のスタックポインタが、前記基本レベルのスタックポインタであるか、または前記現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタであるかを示すスタックポインタ選択値を記憶するように構成された、スタックポインタ選択レジスタを備える、請求項1~4のいずれかに記載のデータ処理装置。前記スタックポインタ選択回路は、前記処理回路が前記少なくとも1つの更なるレベルの例外状態のうちの1つにある時に、前記スタックポインタ選択値に依存して前記現在のスタックポインタを選択する、請求項5に記載のデータ処理装置。前記処理回路が前記少なくとも1つの更なるレベルの例外状態のうちの1つにある時、前記スタックポインタ選択回路は、i前記スタックポインタ選択値が第1の値を有する場合、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択し、ii前記スタックポインタ選択値が第2の値を有する場合、前記現在のスタックポインタとして、前記現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタを選択するように構成される、請求項6に記載のデータ処理装置。前記処理回路は、スタックポインタ選択命令に応答して、更新されたスタックポインタ選択値を前記スタックポインタ選択レジスタに書き込む、請求項6および7のいずれかに記載のデータ処理装置。例外イベントに応答して、前記処理回路を制御して前記例外イベントに対応する例外取扱ルーチンを処理する例外コントローラを備え、少なくとも1つの例外イベントは、複数の対応する例外取扱ルーチンを有し、前記少なくとも1つの例外イベントの発生時に、前記例外コントローラは、前記スタックポインタ選択値に依存して前記処理回路によって処理するために、前記複数の対応する例外取扱ルーチンのうちの1つを選択する、請求項5~8のいずれか1項に記載のデータ処理装置。前記複数の対応する例外取扱ルーチンは、前記少なくとも1つの更なるスタックデータストアのスタックオーバーフローを取り扱うためのスタックオーバーフロー取扱ルーチンを含み、前記例外コントローラは、前記少なくとも1つの例外イベントに関連するターゲットの更なるレベルの例外状態が、前記処理回路の前記現在の更なるレベルの例外状態と同一であり、かつ前記スタックポインタ選択値が、前記更なるレベルのスタックポインタが前記現在のスタックポインタであることを示す時に、前記少なくとも1つの例外イベントの発生時に、前記スタックオーバーフロー取扱ルーチンを処理するように前記処理回路を制御するように構成される、請求項9に記載のデータ処理装置。前記メモリをさらに備える、請求項1~10のいずれか1項に記載のデータ処理装置。データ処理装置であって、データを処理するための処理手段であって、前記処理手段は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、処理手段と、例外イベントを取り扱うことから戻るように、前記処理手段を制御するための例外戻りデータを記憶するための少なくとも1つの例外戻りレジスタ手段であって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態にある時に、前記処理手段によって使用するための専用の対応する例外戻りレジスタ手段を有する、少なくとも1つの例外戻りレジスタ手段と、前記処理手段が前記例外状態のうちのいずれかにある時に使用するための、基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段であって、前記基本レベルのスタックポインタが、基本レベルのスタックデータストア手段のメモリ手段内の場所を示す、基本レベルのスタックポインタレジスタ手段と、少なくとも1つの更なるレベルのスタックポインタを記憶するための、少なくとも1つの更なるレベルのスタックポインタレジスタ手段であって、各更なるレベルのスタックポインタは、前記処理手段が対応する更なるレベルの例外状態にある時に使用するための専用であり、対応する更なるレベルのスタックデータストア手段の前記メモリ手段内の場所を示す、少なくとも1つの更なるレベルのスタックポインタレジスタ手段と、現在のスタックポインタを選択し、データを処理する時に前記現在のスタックポインタによって示された現在のスタックデータストア手段を使用するように前記処理手段を制御するための、スタックポインタ選択手段と、を備え、前記処理手段が前記基本レベルの例外状態にある時、前記スタックポインタ選択手段は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、前記処理手段が前記少なくとも1つの更なるレベルの例外状態のうちの1つにある時、前記スタックポインタ選択手段は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタのうちの1つを、前記現在のスタックポインタとして選択するように構成され、前記処理手段は、前記現在のスタックポインタが前記基本レベルのスタックポインタであるか、または前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する前記例外戻りレジスタ手段を使用することを継続する、データ処理装置。データ処理の方法であって、複数の例外状態のうちの1つにあるデータを処理するステップであって、前記例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、ステップと、例外イベントに応答して、前記例外イベントを取り扱うことからの戻りを制御するための例外戻りデータを少なくとも1つの例外戻りレジスタに記憶するステップであって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態で処理する時に使用するための専用の対応する例外戻りレジスタを有する、ステップと、前記処理するステップが前記例外状態のうちのいずれかにある時に使用するための基本レベルのスタックポインタを記憶するステップであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、ステップと、少なくとも1つの更なるレベルのスタックポインタを記憶するステップであって、各更なるレベルのスタックポインタは、前記処理するステップが、対応する更なるレベルの例外状態にある時に使用するための専用であり、かつ対応する更なるレベルのスタックデータストアの前記メモリ内の前記場所を示す、ステップと、現在のスタックポインタを選択し、データを処理する時に前記現在のスタックポインタによって示された現在のスタックデータストアを使用するように前記処理するステップを制御するステップと、を含み、前記処理するステップが前記基本レベルの例外状態にあるデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択し、前記処理するステップが前記少なくとも1つの更なるレベルの例外状態のうちの1つにあるデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタのうちの1つを選択し、前記処理するステップは、前記現在のスタックポインタが前記基本レベルのスタックポインタであるか、または前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、方法。データ処理装置であって、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む複数の例外状態のうちの1つにあるデータを処理するように構成された処理回路と、基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタと、少なくとも1つの更なるレベルのスタックデータストアの前記メモリ内の前記場所を示す少なくとも1つの更なるレベルのスタックポインタを記憶するための、少なくとも1つの更なるレベルのスタックポインタレジスタであって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも1つの更なるレベルのスタックデータストアと、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記処理回路をトリガして、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタによって示された前記更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理する、例外コントローラと、を備え、前記処理回路は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置。データ処理装置であって、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、複数の例外状態のうちの1つにあるデータを処理するための処理手段と、基本レベルのスタックデータストア手段のメモリ手段内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段と、少なくとも1つの更なるレベルのスタックデータストア手段の前記メモリ手段内の前記場所を示す少なくとも1つの更なるレベルのスタックポインタを記憶するための、少なくとも1つの更なるレベルのスタックポインタレジスタ手段であって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも1つの更なるレベルのスタックポインタレジスタ手段と、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理するように、前記処理手段をトリガするための例外制御手段と、を備え、前記処理手段は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置。データ処理の方法であって、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、複数の例外状態のうちの1つにあるデータを処理するステップと、基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するステップと、少なくとも1つの更なるレベルのスタックデータストアの前記メモリ内の場所を示す少なくとも1つの更なるレベルのスタックポインタを記憶するステップであって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、ステップと、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタによって示された前記更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンの処理をトリガするステップと、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するステップと、を含む、方法。データ処理装置上で実行するコンピュータプログラムによって提供される仮想マシンであって、請求項1~11のいずれか1項に記載の装置に対応する命令実行環境を提供する、仮想マシン。一態様から見ると、本発明は、データを処理するように構成される処理回路であって、前記処理回路は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、処理回路と、例外イベントを取り扱うことから戻るように、処理回路を制御するための例外戻りデータを記憶するための少なくとも1つの例外戻りレジスタであって、少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態時に、処理回路によって使用するための専用の対応する例外戻りレジスタを有する、少なくとも1つの例外戻りレジスタと、前記処理回路が前記例外状態のうちのいずれかにある時、使用するための基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、基本レベルのスタックポインタレジスタと、少なくとも1つの更なるレベルのスタックポインタを記憶するための少なくとも1つの更なるレベルのスタックポインタレジスタであって、各更なるレベルのスタックポインタは、前記処理回路が対応する更なるレベルの例外状態にある時に使用するための専用であり、対応する更なるレベルのスタックデータストアの前記メモリ内の場所を示す、少なくとも1つの更なるレベルのスタックポインタレジスタと、現在のスタックポインタを選択して、前記処理回路を制御して、データを処理する時に前記現在のスタックポインタによって示される現在のスタックデータストアを使用するように構成されるスタックポインタ選択回路と、を備え、前記処理回路が前記基本レベルの例外状態にある時、前記スタックポインタ選択回路は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、前記処理回路が、前記少なくとも1つの更なるレベルの例外状態のうちの1つにある時、前記スタックポインタ選択回路は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのうちの少なくとも1つを、前記現在のスタックポインタとして選択するように構成され、前記処理回路は、前記現在のスタックポインタが前記基本レベルのスタックポインタまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、データ処理装置を提供する。複数の例外状態を有する処理回路を備える装置が提供される。例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む。一実施形態において、基本レベルの例外状態は、ユーザアプリケーションを処理するためのものであり、一方で、例外イベントは、例外取扱ルーチンが、更なるレベルの例外状態のうちのターゲットとされた1つにおいて処理されることになるしかし、代替実施形態においては、例外イベントは、基本レベルの例外状態でターゲットとされる可能性もある。少なくとも更なるレベルの例外状態は、例外イベントを取扱後に、前のプロセスに対する戻りを制御するための例外戻りデータを記憶するための対応する例外戻りレジスタを有する基本レベルの例外状態が例外取扱ルーチンを処理するために使用される場合、基本レベルの例外状態もまた対応する例外戻りレジスタを有する場合がある。装置は、スタックポインタを記憶するためのレジスタも有し、例外イベントを取り扱い時に使用するために、処理回路によって使用されるための複数のスタックデータストアのメモリ内の場所を示す。処理回路が基本レベルの例外状態にある時、基本レベルのスタックポインタによって示される基本レベルのスタックデータストアは、一時的な変数を記憶するために使用される。再帰的例外エントリにつながるスタックオーバーフローのリスクおよびこのために、例外イベントが正しく取り扱われないというリスクは、処理回路に対してアクセス可能な2つのスタックデータストアを提供することによって軽減される。任意の更なるレベルの例外状態で処理する時、1つは例外受け入れ直後の少量の処理のために使用されてもよく、もう1つは、例外状態内のより汎用処理のために使用される。各更なるレベルの例外状態は、基本レベルのスタックポインタ、および対応する更なるレベルの例外状態によって使用される専用の対応する更なるレベルのスタックポインタの両方に対するアクセスを有する。例外受け入れ直後の少量の処理中、基本レベルのスタックポインタの内容は汎用目的レジスタの内容と共に、メモリの中に保存され、新しい値が基本レベルのスタックポインタの中に配置され、より汎用目的処理に好適なスタックを示す。その例外状態でより汎用目的処理に好適なこのスタックは、その例外状態で使用された基本レベルのスタックデータストアとして参照される。その例外状態で使用された基本レベルのスタックデータストアの場所を示す基本レベルのスタックポインタと、処理回路が更なるレベルの例外状態のうちの1つにある時に更なるレベルのスタックデータストアの場所を示す更なるレベルのスタックポインタとの間を選択し、現在選択されたスタックポインタを使用して、メモリの中のスタックデータストアのうちの1つにアクセスするように処理回路を制御するために、選択回路が提供される。各更なるレベルのスタックポインタは、特定の更なるレベルの例外状態によって使用するための専用であるため、各更なるレベルのスタックポインタは、比較的まれに使用され、このため、更なるレベルのスタックデータストア上には変数がほとんど記憶されることはない。すなわち、スタックオーバーフローのリスクが軽減され、対応する更なるレベルの例外状態の例外イベントを処理する時に、更なるレベルのスタックデータストアが、変数を記憶するために利用可能である可能性が高い。一方、基本レベルのスタックポインタは、共有スタックポインタであり、任意の例外状態において処理するために使用される。基本レベルのスタックポインタは、例えば、例外取扱ルーチンの安全な起動が既に発生している時、またはもはや重要ではない時に、専用の更なるレベルのスタックデータストアのリソースを節約するために、例外状態で使用された基本レベルのスタックデータストアをポイントするために使用することができる。可能である時に必ず基本レベルのスタックデータストアを使用することによって、更なるレベルのスタックデータストアのうちの1つがオーバーフローする確率が顕著に削減される。更なるレベルの例外状態に対して2つの専用スタックポインタを提供することによって、スタックオーバーフローに対する保護が達成されたが、本技法は、各スタックポインタが使用される頻度が低くなり、このためハードウェアが無駄になることから、この手法が非効率であることを認識する。スタックオーバーフローに対する保護は、各例外状態に対応するスタックポインタを提供し、基本レベルのスタックポインタが例外状態の間で共有されることを可能にすることによって、より効率的な様式で達成することができるので、各更なるレベルの例外状態は、それ独自の基本レベルのスタックデータストアまたは更なるレベルのスタックデータストアのいずれかにアクセスすることができる。したがって、各更なるレベルの例外状態は、スタックオーバーフローに対する保護を提供するために、2つのスタックデータストアに対するアクセスを依然として有するが、例外状態に対して1つのスタックポインタだけが提供される。このように、各例外レベルに対して、例外エントリ直後に使用される1つと、汎用処理のための1つさらに再帰的例外エントリのリスクなしにオーバーフローすることが許可される可能性があるという、使用される2つのスタックストアが存在することができる。例外戻りレジスタおよびスタックポインタレジスタは、まとめて、例外イベントを取扱中に使用するためのコンテキストデータを記憶するために提供される例外コンテキストレジスタとして考えられる場合がある。各例外戻りレジスタは特定の例外状態による使用のための専用であるため、基本レベルのスタックポインタレジスタが例外状態のうちのいずれかにおいて使用するために提供されるスタックポインタレジスタとは対照的に、例外戻りレジスタは、スタックポインタレジスタに対して異なる様式でバンクされる。スタックポインタ選択回路は、現在のスタックポインタとしてターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタを選択するように、ターゲットの更なるレベルの例外状態に関連する例外イベントに対して応答してもよい。すなわち、例外イベントの処理開始時、現在のスタックデータストアが、ターゲットの更なるレベルの例外状態に対応する、専用の更なるレベルのスタックデータストアになる。専用の更なるレベルのスタックデータストアのスタックオーバーフローのリスクは、その例外レベルで使用される基本レベルのスタックデータストアのオーバーフローのリスクよりも低い。したがって、例外エントリ時にターゲットの更なるレベルのスタックデータストアに切り替えることによって、例外イベントエントリが正しく取り扱われないというリスクを軽減する。エントリが行われた後、基本レベルのスタックポインタの中の新しい値によってポイントされたスタックを使用するようにスイッチバックが行われてもよい。処理回路は、ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理するように例外イベントに応答してもよく、スタックポインタ選択回路は、処理回路が例外取扱ルーチンの初期部分を完了した後に、ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタから、基本レベルのスタックポインタに現在のスタックポインタを切り替えるように構成されてもよい。例外取扱ルーチンの初期部分が完了した後、これは例外処理が問題なく開始したことを示すので、更なるレベルのスタックポインタによって示される更なるレベルのスタックデータストアの使用はもはや必要なくなる。過多のデータが更なるレベルのスタックデータストア上にプッシュされることを回避するため、現在のスタックポインタは、基本レベルのスタックポインタに戻るように切り替えることができ、処理は、基本レベルのスタックポインタによって示されるように、例外状態で使用された基本レベルのスタックデータストアを使用して継続することができる。これによって、同一の更なるレベルの例外状態で別の例外イベントに対するエントリ時に更なるレベルのスタックがオーバーフローする確率を削減する。例外取扱ルーチンの初期部分の終了を示すために多様な技法を使用することができる。例えば、例外取扱ルーチンの先頭から経過した処理サイクルの数、または例外取扱ルーチンが開始してから実行された命令の数をカウントするためのカウンタを提供することができ、初期部分は、カウンタが既定の閾値に到達した時に終了することが可能である。しかしながら、例外取扱ルーチンの初期部分の終了を示す有用な様式は、スタックポインタ選択回路が、ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタから、基本レベルのスタックポインタに現在のスタックポインタを切り替えるように制御するために、例外取扱ルーチン内に命令を提供することによる。このため、例外取扱ルーチンを表現するソフトウェアはそれ自体、現在のスタックポインタが基本レベルのスタックポインタに切り替えられる点を定義することができる。ある例外取扱ルーチンは、他の例外取扱ルーチンよりもより安全性を重視する場合があるため、この命令を提供することによって、例外取扱ルーチンのプログラマが、基本レベルのスタックポインタに切り替えられる前に安全な更なるレベルのスタックポインタを使用すべき長さを特定の場合ごとの事例に基づいて決定することを可能にする。装置は、現在のスタックポインタが基本レベルのスタックポインタであるか、または現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタであるかを示すスタックポインタ選択値を記憶するように構成されたスタックポインタ選択レジスタを備える場合がある。装置の他の部分は、その後、スタックポインタ選択レジスタに記憶された値を読み出すことによって、どのスタックポインタが現在使用されているかを判断することができる。基本レベルのスタックポインタまたは更なるレベルのスタックポインタのうちのどちらが現在有効であるかを示すだけでなく、処理回路が更なるレベルの例外状態のうちの1つにある時、スタックポインタ選択レジスタは、スタックポインタ選択回路の動作を制御する場合もある。スタックポインタ選択回路は、スタックポインタ選択レジスタの中に記憶されたスタックポインタ選択値に依存して、現在のスタックポインタを選択するように構成される場合がある。このように、スタックポインタ選択レジスタの中に記憶された値を変更すると、メモリの中のスタックデータストアのうちのどれが処理回路によって使用されるかを変更する。スタックポインタ選択回路は、処理回路が更なるレベルの例外状態のうちの1つにある時、スタックポインタ選択値が第1の値を有する場合には基本レベルのスタックポインタが現在のスタックポインタとして選択され、スタックポインタ選択値が第2の値を有する場合には、現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタが現在のスタックポインタとして選択されるように、構成される場合がある。例えば、スタックポインタ選択値は、第1の値例えば、0または1が現在のスタックポインタとして基本レベルのスタックポインタを選択するようにスタックポインタ選択回路を制御し、第2の値0および1のうちのもう一方が現在のスタックポインタとして現在の例外状態に対応する更なるスタックポインタを選択するようにスタックポインタ選択回路を制御する1ビット値となる可能性がある。処理回路は、スタックポインタ選択命令に応答して、更新されたスタックポインタ選択値をスタックポインタ選択レジスタに書き込む場合がある。これによって、プログラムまたは例外取扱ルーチンのプログラマは、いつどのスタックを使用するかを制御することが可能になる。スタックポインタ選択命令を実行することによって、所望のスタックポインタを表す、更新されたスタックポインタ選択値は、スタックポインタ選択レジスタに書き込まれ、スタックポインタ選択回路は、次いで、現在のスタックポインタとして所望のスタックポインタを選択し、更新された現在のスタックポインタによって示されるスタックデータストアを使用するように処理回路を制御する。装置は、特定の例外イベントに対応する複数の異なる例外取扱ルーチンのうちのどれが処理回路によって、実行するために選択されるかを制御するために、スタックポインタ選択レジスタの中に記憶されたスタックポインタ選択値に応答する例外コントローラを備える場合がある。スタックポインタ選択レジスタは、プロセッサの現在の状態すなわち、共有の基本レベルのスタックポインタまたは専用の更なるレベルのスタックポインタが使用されているかどうかを示すので、例外状態のために基本レベルのスタックデータストアが使用されている時、更なるレベルのスタックポインタが使用されている時に比較して、異なる例外取扱ルーチンが選択される場合がある。例えば、複数の対応する例外取扱ルーチンが、少なくとも1つの更なるスタックデータストアのスタックオーバーフローを取り扱うためのスタックオーバーフロー取り扱いルーチンを含む場合、スタックポインタ選択値に依存して、対応する例外取扱ルーチンのうちの1つを選択することが有用である可能性がある。本技法は、更なるレベルの例外スタックデータストアのオーバーフローのリスクを軽減するが、依然として、例えば、ソフトウェアのエラーの結果のように、スタックオーバーフローの小さい確率が存在し、スタックオーバーフロー取扱ルーチンは、この稀な状況に対処するために提供される場合がある。例外イベントが、現在の更なるレベルの例外状態と同一であるターゲットの更なるレベルの例外状態をターゲットとし、かつスタックポインタ選択値が、更なるレベルのスタックポインタが現在のスタックポインタであることを示す時、これは、現在のレベルの例外状態に関連する更なるレベルのスタックのスタックオーバーフロー、すなわち、再帰的例外エントリのリスクがあることを示すことができる。スタックオーバーフローのリスクが存在するのは、更なるレベルのスタックポインタが現在のスタックポインタであることを示すスタックポインタ選択値が、その前に実行された例外取扱ルーチンが基本レベルのスタックデータストアが使用される時点に到達する前に、例外イベントが発行されたことを示すからであり、また、新しい例外イベントは、その前の例外状態と同一の例外状態をターゲットとしているために、新しい例外イベントの可能な発生原因は、更なるレベルのスタックデータストアのオーバーフローである。通常の例外取扱ルーチンに対するエントリは、したがって、無限のループをトリガする可能性があり、そのために例外が呼び出されるが、対応する例外取扱ルーチンは、スタックがオーバーフローしているために、実行することができない。この状況に対して防備するために、スタックオーバーフロー取扱ルーチンが選択される。スタックデータストアを記憶するメモリは、処理装置の一部ではない、外部メモリの場合がある。この場合、装置によって処理されたスタックポインタは、外部メモリ内の対応するスタックデータストアの場所を示す。代替として、データ処理装置は、それ自体メモリを備える場合がある。メモリは、1つ以上のバンクのメモリ、または1つ以上の個別のメモリデバイスであってもよく、基本レベルのスタックデータストアおよび1つ以上の更なるレベルのスタックデータストアを集合的に記憶する、メモリデバイスの任意の群を含む場合がある。別の態様から見ると、本発明は、データを処理するための処理手段であって、前記処理手段は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、処理手段と、例外イベントを取り扱うことから戻るように、処理手段を制御するための例外戻りデータを記憶するための少なくとも1つの例外戻りレジスタ手段であって、少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態にある時に、処理手段によって使用するための専用の対応する例外戻りレジスタ手段を有する、少なくとも1つの例外戻りレジスタ手段と、前記処理手段が前記例外状態のうちのいずれかにある時に使用するための基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段であって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストア手段のメモリ手段内の場所を示す、基本レベルのスタックポインタレジスタ手段と、少なくとも1つの更なるレベルのスタックポインタを記憶するための少なくとも1つの更なるレベルのスタックポインタレジスタ手段であって、各更なるレベルのスタックポインタは、前記処理手段が対応する更なるレベルの例外状態にある時に使用するための専用であり、対応する更なるレベルのスタックデータストア手段の前記メモリ手段内の場所を示す、少なくとも1つの更なるレベルのスタックポインタレジスタ手段と、現在のスタックポインタを選択し、データを処理する時に前記現在のスタックポインタによって示された現在のスタックデータストア手段を使用するように前記処理手段を制御するためのスタックポインタ選択手段と、を備え、前記処理手段が前記基本レベルの例外状態にある時、前記スタックポインタ選択手段は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、前記処理手段が前記少なくとも1つの更なるレベルの例外状態のうちの1つにある時、前記スタックポインタ選択手段は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのうちの1つを、前記現在のスタックポインタとして選択するように構成され、前記処理手段は、前記現在のスタックポインタが前記基本レベルのスタックポインタまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタ手段を使用することを継続する、データ処理装置を提供する。更なる態様から見ると、本発明は、複数の例外状態のうちの1つにあるデータを処理するステップであって、前記例外状態は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、ステップと、例外イベントに応答して、例外イベントを取り扱うことからの戻りを制御するための例外戻りデータを少なくとも1つの例外戻りレジスタに記憶するステップであって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態で処理する時の使用のための専用の対応する例外戻りレジスタを有する、ステップと、前記処理するステップが前記例外状態のうちのいずれかにある時に使用するための基本レベルのスタックポインタを記憶するステップであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、ステップと、少なくとも1つの更なるレベルのスタックポインタを記憶するステップであって、各更なるレベルのスタックポインタは、前記処理するステップが、対応する更なるレベルの例外状態にある時の使用のための専用であり、かつ対応する更なるレベルのスタックデータストアの前記メモリ内の場所を示す、ステップと、現在のスタックポインタを選択し、データを処理する時に現在のスタックポインタによって示された現在のスタックデータストアを使用するように前記処理するステップを制御するステップと、を含み、前記処理するステップが前記基本レベルの例外状態にあるデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択し、前記処理するステップが前記少なくとも1つの更なるレベルの例外状態のうちの1つの中のデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタ、および現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのうちの1つを選択し、前記処理するステップは、前記現在のスタックポインタが前記基本レベルのスタックポインタであるかまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、データ処理の方法を提供する。更なる態様から見ると、本発明は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む複数の例外状態のうちの1つにあるデータを処理するように構成された処理回路と、基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタと、少なくとも1つの更なるレベルのスタックデータストアの前記メモリ内の場所を示す少なくとも1つの更なるレベルのスタックポインタを記憶するための少なくとも1つの更なるレベルのスタックポインタレジスタであって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも1つの更なるレベルのスタックデータストアと、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記処理回路をトリガして、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理する、例外コントローラと、を備え、前記処理回路は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置を提供する。ターゲットの更なるレベルの例外状態へのエントリに続いて更なるレベルのスタックポインタを使用することによって、対応する例外取扱ルーチンには、専用の頻繁に使用されないスタックが提供されて、例外取扱ルーチンが安全に開始されることを保証する。例外取扱ルーチンの初期部分が完了した後、例外取扱ルーチンの残りの部分は、基本レベルのスタックポインタによって示されるように、その例外レベルのための基本レベルのスタックデータストアを使用して、ターゲットの更なるレベルの例外状態で処理される。例外取扱ルーチンが安全に開始した後に基本レベルのスタックポインタを使用することによって、専用の更なるレベルのスタックデータストアの過剰使用が回避され、更なるレベルのスタックデータストアのオーバーフローの確率を削減する。また別の態様から見ると、本発明は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、複数の例外状態のうちの1つにあるデータを処理するための処理手段と、基本レベルのスタックデータストア手段のメモリ手段内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段と、少なくとも1つの更なるレベルのスタックデータストア手段の前記メモリ手段内の場所を示す少なくとも1つの更なるレベルのスタックポインタを記憶するための少なくとも1つの更なるレベルのスタックポインタレジスタ手段であって、前記少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも1つの更なるレベルのスタックポインタレジスタ手段と、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理するように、前記処理手段をトリガするための例外制御手段と、を備え、前記処理手段は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置を提供する。別の態様から見ると、本発明は、基本レベルの例外状態と、少なくとも1つの更なるレベルの例外状態とを含む、複数の例外状態のうちの1つにあるデータを処理するステップと、基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するステップと、少なくとも1つの更なるレベルのスタックデータストアの前記メモリ内の場所を示す少なくとも1つの更なるレベルのスタックポインタを記憶するステップであって、少なくとも1つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、ステップと、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンの処理をトリガするステップと、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するステップと、を含む、データ処理方法を提供する。以下、本技法の実施形態を、添付の図面を参照して、例示として説明する。図1は、例外取扱リソースを有するデータ処理装置2を示す。データ処理装置2は、メモリシステム8からロードされた命令の制御下で、レジスタ6またはメモリシステム8の中に記憶されたデータを処理するための処理パイプライン4を備える。処理パイプライン4は、メモリシステム8から命令をフェッチするためのフェッチパイプライン段階10、フェッチした命令を解読するための解読パイプライン段階12、例外に対する命令を発行するための発行段階14発行段階14は、処理サイクルあたり1つの命令または複数の命令を発行する場合があり、順番にまたは順番に関係なく命令を発行する場合がある、発行した命令を実行するための実行段階16、および処理結果をレジスタ6に書き戻すための書き戻し段階18等、多様なパイプライン段階を含む場合がある。処理パイプライン4は、これらの段階に限定されず、例えば、命令の中で指定されたレジスタ指定子の名前を変更するための名前変更段階等、他の段階を含む場合がある。装置2は、1つ以上の種類の例外イベントに応答して、例外取扱ルーチンを処理するように処理パイプライン4を制御する、例外コントローラ20を備える。処理パイプライン4は、例外イベントを取り扱うための複数の例外状態を有する。各例外状態は、異なる特性を有する。例えば、図2に示される例示的実施形態では、基本レベルの例外状態EL0は、ユーザレベルの例外状態であり、第1の更なるレベルの例外状態EL1は、オペレーティングシステムレベルの例外状態であり、第2の更なるレベルの例外状態EL2は、ハイパーバイザレベルの例外状態であり、第3の更なるレベルの例外状態EL3は、セキュア監視レベルの例外状態である。各例外状態の内には、図2に示されるように非セキュアモードおよびセキュアモード等、複数のモードが存在する場合がある。全ての例外状態が両方のモードで利用可能である必要はない。例えば、図2において、更なるレベルの例外状態EL2は、非セキュア状態のみで利用可能であるが、更なるレベルの例外状態EL3は、セキュア状態のみで利用可能である。図2の例外状態図は、例示的な実施形態に過ぎず、例外状態の他の番号および構成が可能である。各例外イベントは、更なるレベルの例外状態EL1~EL3のうちの特定の1つでターゲットとされる。例えば、特定の例外イベントは、オペレーティングシステムレベルの例外状態EL1またはハイパーバイザレベルの例外状態EL2での処理を必要とする場合があり、適切なレベルでターゲットとすることができる。例外コントローラ20は、次いで、処理パイプライン4が、ターゲットレベルの例外状態の対応する例外取扱ルーチンを処理するように制御する。例外イベントは優先度が決定される場合があるので、現在またはより上位の例外状態をターゲットとした例外イベントは、所与の例外状態での実行を先手をうって阻止または中断し、ターゲットの例外状態での実行を発生させる場合がある。下位例外状態をターゲットとした例外が、所与の例外状態での実行を使用して発生するという稀な事態では、これらの例外は、そうすることが安全である場合には無視されるか、または実行を先手をうって阻止して現在の例外レベルでハンドラの実行を発生させる。現在のレベルの例外状態と同一のレベルの例外状態をターゲットとした例外イベントは、通常、現在のプロセスを中断しないが、例外イベントが現在のプロセスを停止させた問題によって直接発生した場合には受け入れられる可能性がある。図1をもう一度参照すると、装置2は、例外イベントを取り扱う時に使用された例外コンテキストデータを記憶するために、いくつかのコンテキストレジスタ24を備える。コンテキストレジスタ24は、例外リンクレジスタELR26および処理状態保存レジスタSPSR28を含むいくつかの例外戻りレジスタを含む。少なくとも更なるレベルの例外状態すなわち、基本レベルの例外状態EL0以外の全ての例外状態は、対応する例外戻りレジスタを有する例外リンクレジスタ26および処理状態保存レジスタ28はまとめて、例外戻りレジスタを表すと考えることができる。各例外リンクレジスタ26は、対応する更なるレベルの例外状態で処理されている例外取扱ルーチンが完了した後、処理される命令を示す例外戻りアドレスを記憶する。各処理状態保存レジスタ28は、対応する更なるレベルの例外状態で例外取扱ルーチンを処理する時に使用するために、中断マスク、フラグ、または実行マスク等の多様なコンテキスト状態データを記憶する。図1の実施形態において、基本レベルの例外状態EL0は、例外イベントが更なるレベルの例外状態のうちの1つをターゲットとすることが予測されるため、対応する例外リンクレジスタ26または処理状態保存レジスタ28を有しない。しかしながら、例外イベントが基本レベルの例外状態でも取り扱われる可能性がある実施形態においては、基本レベルの例外状態EL0は、対応する例外リンクレジスタ26または処理状態保存レジスタ28を有することもできる。コンテキストレジスタ24はまた、スタックポインタレジスタ30も含む。例外状態の各々は、対応するスタックデータストア35のメモリシステム8内の場所を示す対応するスタックポインタレジスタ30を有する。基本レベルのスタックポインタレジスタ30-0は、基本レベルのスタックデータストア、35-0、35-0’、35-0’’および35-0’’’のメモリシステム8内の場所を識別し、この場所は、処理パイプライン4が例外状態EL0~EL3のうちのいずれかにある時にアクセス可能である。対照的に、更なるレベルのスタックポインタレジスタ30-1、30-2、30-3は、メモリシステム8の中の対応する更なるレベルのスタックデータストア35-1、35-2、35-3を識別し、各々、処理パイプライン4が対応する更なるレベルの例外状態EL1、EL2、EL3にある時に使用するための専用である。当業者は、基本レベルのスタックデータストア35-035-0’’’は、基本レベルのスタックデータストアとして参照されるが、例外状態で使用された基本レベルのスタックデータストアは、より下位の例外状態での実行にアクセス可能であることが適切ではないことを理解するであろう。スタックポインタ選択回路40は、スタックポインタ30のうちのどれが現在使用中であるかを選択するために提供される。処理パイプライン4が基本レベルの例外状態EL0にある時、基本レベルのスタックポインタレジスタ30-0の中に記憶された基本レベルのスタックポインタが選択され、選択回路40によって制御される処理パイプライン4は、変数を記憶するために基本レベルのスタック35-0を使用する。処理パイプライン4が更なるレベルの例外状態EL1~EL3のうちの1つにある時、スタックポインタ選択回路40は、スタックポインタ選択レジスタ42の中に記憶されたスタックポインタ選択値に応答して、基本レベルのスタックポインタレジスタ30-0の中に記憶され、基本レベルのスタックデータストア35-0’、35-0’’、および35-0’’’のそれぞれ1つに対応する、基本レベルのスタックポインタ、または処理パイプライン4の現在の例外状態に対応する、スタックポインタレジスタ30-1、30-2、30-3のうちの1つに記憶された更なるレベルのスタックポインタのいずれかを選択する。スタックポインタ選択回路40は、処理パイプライン4の現在の例外状態を示す、例外コントローラ20からの信号を受信する場合がある。代替として、処理パイプライン4は、その現在の例外状態をスタックポインタ選択回路40に通知することができる。スタックポインタ選択レジスタ42の中に記憶された値および現在の例外状態に依存して、現在のスタックポインタが選択され、処理パイプライン4は、スタックポインタ選択回路40によって制御されて、現在のスタックポインタを使用して、スタックデータストア35のうちの対応する1つにアクセスする。各更なるレベルの例外状態に2つの異なるスタック基本レベルのスタック35-0’、35-0’’または35-0’’’のうちの1つ、および更なるレベルのスタック35-1、35-2、35-3のうちの1つへのアクセスを提供することによって、その例外状態の中で稼動している例外ハンドラが、スタックをオーバーフローするリスクを生じることなく安全に初期化されることを可能にするために、各更なるレベルの例外状態に対して安全な専用スタックが提供され、一方、それぞれの基本レベルのスタック35-0’、35-0’’または35-0’’’は、その例外レベルの汎用処理のために使用することができる。可能である場合は必ず、基本レベル汎用目的のスタック35-0’、35-0’’または35-0’’’は、専用スタックの負担過多を回避するために使用され、例外ハンドラに対するエントリに関して自由に使用するための余地を専用スタック上に残す。スタックポインタ選択レジスタ42は、2つの可能な値を有する、スタックポインタ選択値を記憶してもよい。スタックポインタ選択値が第1の値例えば、0の値を有する場合、スタックポインタ選択回路は、現在のスタックポインタとして、基本レベルのスタックポインタレジスタ30-0の中に記憶された基本レベルのスタックポインタを選択することができる。一方、スタックポインタ選択値が第2の値例えば、1の値を有する場合、スタックポインタ選択回路40は、現在のスタックポインタとして、現在の更なるレベルの例外状態に関連する更なるレベルのスタックポインタを選択することができる。図3は、このスタックポインタ選択値のマッピングが使用される場合のスタックポインタ選択回路40の動作の例を示す。処理の開始後、ステップ50で、スタックポインタ選択回路40は、処理パイプライン4の現在の例外状態を確認する。上述のように、これは、例外コントローラ20から提供された例外レベル信号の手段による可能性がある。ステップ50で、現在の例外状態が、基本レベルの例外状態EL0であると判定される場合、方法は、ステップ52に進み、スタックポインタ選択回路40は、現在のスタックポインタとして、基本レベルのスタックポインタレジスタ30-0の中に記憶された基本レベルのスタックポインタを選択する。処理パイプライン4は、次いで、現在のスタックデータストアとして、基本レベルのスタック35-0を使用するように制御される。例外状態に例外を受け入れる時、SPSelは、専用の例外スタックポインタを選択するように配設される。一方、ステップ50で、スタックポインタ選択回路40が、現在の例外状態が更なるレベルの例外状態ELxxは、1以上の任意の整数のうちの1つであると判定する場合、方法はステップ54に進み、スタックポインタ選択回路40は、スタックポインタ選択レジスタ42の中に記憶されたスタックポインタ選択値を読み出す。この実施形態において、スタックポインタ選択値がゼロの場合、方法はステップ56に進み、基本レベルのスタックポインタが現在のスタックポインタになるように選択され、処理パイプライン4は、基本レベルのスタック35-0を使用するように制御される。一方、ステップ54で、スタックポインタ選択値が1の値を有する場合、方法はステップ58に進み、現在の更なるレベルの例外状態ELxに対応するスタックポインタSPxが、現在のスタックポインタとして選択され、処理パイプライン4は、現在のスタックデータストアとして、現在の例外状態に対応するスタックデータストア35-xを使用するように制御される。これ以降、処理パイプライン4がスタックポインタを必要とする場合、スタックポインタ選択回路40は、現在のスタックポインタに対応するスタックポインタ値、または現在のスタックポインタを記憶するスタックポインタレジスタ30のうちの1つに対する参照のいずれかとして処理パイプライン4に現在のスタックポインタを提供する。どちらの場合もスタックポインタは現在のスタックポインタであり、例外によって阻止されない限り、各命令の処理を継続する。図3に示されるように、処理パイプライン4が更なるレベルの例外状態のうちの1つにある場合、スタックポインタ選択レジスタ42は、どのスタックポインタが現在のスタックポインタであるかを制御する。スタックポインタ選択レジスタ42の中に記憶された値は、処理パイプライン4によって実行されるスタックポインタ選択命令によって変更することができる。図4は、スタックポインタ選択命令の例示的構文を示す。スタックポインタ選択命令は、スタックポインタ選択レジスタ42の場所を特定するレジスタ特定子SPSelおよびスタックポインタ選択レジスタ42に書き込まれる即値を特定する即値Imm1を含む。例えば、即値が0の場合、これは、現在のスタックポインタとして基本レベルのスタックポインタを選択するようにスタックポインタ選択回路40を制御するようにスタックポインタ選択レジスタ42を設定することができるが、即値が1の場合、これは、現在のスタックポインタとして更なるレベルのスタックポインタのうちの1つを選択するようにスタックポインタ選択回路42を制御するようにスタックポインタ選択レジスタ42を制御することができる。いうまでもなく、値0および値1と、基本レベルおよび更なるレベルのスタックポインタとの間のマッピングは、逆である可能性がある。スタックポインタ選択命令は、即値がレジスタバンク6に書き込まれることなく、スタックポインタ選択レジスタ42を直接変更する場合がある。代替として、スタックポインタ選択命令は、即値がスタックポインタ選択レジスタ42に書き込まれる前に、即値がレジスタバンク6に書き込まれることを必要とする場合がある。図4に示されるスタックポインタ選択命令を提供することによって、プログラマは、例外取扱ルーチンの中にスタックポインタ選択命令を含めて、現在のスタックデータストアが、更なるレベルのスタックデータストア35-1、35-2、35-3から、例外レベルに対するそれぞれの基本レベルのスタックデータストア35-0’、35-0’’または35-0’’’に切り替えられる点を制御することが可能である。図5に示されるように、そのような例外取扱ルーチンは、更なるレベルのスタックデータストア35-1、35-2、35-3のうちの1つが現在のスタックデータストアとして使用される初期部分、および基本レベルのスタックデータストア35-0が現在のスタックデータストアとして使用される残りの部分を含む。スタックポインタ選択命令の例外取扱ルーチン内の場所は、初期部分および残りの部分の相対的サイズを決定し、例外イベントを安全に処理するために専用スタックが必要とされる程度に依存して、必要に応じて変えることができる。例外取扱ルーチンの初期部分は、例外取扱ルーチンの処理を開始するために、安全な専用スタックストレージを提供するために、更なるレベルのスタックデータストアを使用し、一方、例外取扱ルーチンの残りの部分は、その例外レベルに関係する基本レベルのスタックデータストアを使用して、専用スタックの負担過多を回避する。スタックポインタ選択レジスタ42はまた、特定の例外イベントを取り扱うために、複数の対応する例外ハンドラのうちのどれを使用すべきかを選択する際にも有用である可能性がある。例外コントローラ20は、例外レベルを処理するための多様な例外取扱ルーチンのメモリシステム8内の場所を示す例外ベクトルテーブルを含む場合がある。例外ベクトルテーブルの例は、図6に示される。異なるタイプの例外イベント例えば、ARMプロセッサアーキテクチャ同期で知られるように、IRQ通常中断、FIQ高速中断、またはエラー例外イベントに対して、複数の異なる例外取扱ルーチンは、異なるアドレスオフセット値によって識別される。例外取扱ルーチンは、次いで、例外ハンドラの基本アドレスレジスタの中に記憶された基本アドレスに、対応するアドレスオフセットを追加することによって取得されたメモリアドレスにアクセスすることができる。異なる例外ハンドラは、異なる状況に対処するために提供することができる例えば、異なるシステムモードは、異なる例外取扱ルーチンを必要とする場合がある。例外イベントが現在のレベルの例外状態と同一のレベルの例外状態をターゲットとする場合、例外イベントが発生する時に現在のスタックポインタが、基本レベルのスタックポインタ、または更なるレベルのスタックポインタのうちの1つであるかに依存して選択される、複数の異なる種類の例外ハンドラ少なくとも1つのスタックオーバーフロー例外ハンドラを含むを提供することが有用である可能性がある。これは、図6に示され、ここでは、現在のスタックポインタが更なるレベルのスタックポインタのうちの1つである場合、また現在のスタックポインタが基本レベルのスタックポインタである場合それぞれの状況で異なる例外取扱ルーチンを識別するために、異なるアドレスオフセットが提供される。このように、例外コントローラ20は、スタックポインタ選択レジスタ42の現在の値に応答して、例外ハンドラのうちのどれが処理されるかを選択することができる。これは、新しい例外イベントが現在の例外状態と同一の例外状態をターゲットとする時、以前に処理された例外取扱ルーチンによって発生したのではなく、現在の例外状態と同一レベルをターゲットとした例外イベントは、以前に処理された例外取扱ルーチンを中断することはないので、以前に処理された例外取扱ルーチンの実行中に問題が発生したことを示すために有用である可能性がある。さらに、スタックポインタ選択レジスタが、現在のスタックポインタが更なるレベルのスタックポインタのうちの1つであることを示す場合、これは、問題が、現在のスタックポインタが基本レベルのスタックポインタに切り替えられた前、すなわち、以前に処理された例外取扱ルーチンの初期部分中に発生したことを示す。したがって、例外イベントの可能性のある理由として、現在使用中の更なるレベルのスタック35-1、35-2または35-3のオーバーフローの可能性がある。通常の例外ハンドラが次いでロードされると、このハンドラは、既にオーバーフローしているスタックに変数をプッシュしようとする場合があり、これは、また別の例外をトリガする可能性があり、このために自身がスタック上に変数をロードしようとする場合があり、すなわち、システムを再帰的例外エントリにさせてしまう。そのような例外イベントの再帰的呼び出しを回避するために、スタックオーバーフローの稀な事例に対処するために、スタックオーバーフロー例外ハンドラが提供され、この例外ハンドラは、ターゲットの例外イベントと同一の例外レベルから例外イベントが呼び出された場合に呼び出され、スタックポインタ選択レジスタ42は、現在のスタックポインタが更なるレベルのスタックポインタのうちの1つであることを示す。このように、この状況は、レジスタを使用する通常の様式は、スタック上のそれらのレジスタの中の旧値を保存することになり、このために再帰的状態につながる可能性があるので、レジスタを一切使用する必要性がなく、基本スタックポインタを使用していた例外状態内の例外とは区別することができる。したがって、スタックオーバーフロー例外取扱ルーチンがスタックを修正できない場合であっても、プロセッサに再帰的例外エントリの無限ループを繰り返させるのではなく、エラー状況の完全な診断情報およびより明確な取り扱いを達成することができる。図7は、例外イベントを取り扱う方法を示す。最初に、ステップ100で、処理パイプライン4は、例外状態ELmmは、0以上の整数であるのうちの1つでデータを処理している。すなわち、パイプライン4は、例外状態のうちのいずれかでデータを処理している。次いで、ステップ102で、特定の更なるレベルの例外状態ELnnは1以上の整数であり、さらにnは、m以上でもあるnがmより小さい場合、例外イベントは現在の処理を中断することはないをターゲットとする、例外イベントが発生する。ステップ104で、例外コントローラ20は、処理パイプライン4を例外状態ELnに入れまたは、n=mの場合、処理パイプライン4を以前と同一の例外状態に維持する、ターゲット例外状態ELnに対応する例外戻りデータを例外リンクレジスタ26および処理状態保存レジスタ28に記憶する。記憶された例外戻りデータは、システムが、例外イベントの処理が完了した後、初期の処理に戻ることを可能にするためのデータである。ステップ106で、例外コントローラ20は、例外イベントの発生時の例外状態ELmが、ターゲットの例外状態ELnと同一であるかを判定する。初期およびターゲットの例外状態が同一ではない場合、ステップ108で、スタックポインタ選択レジスタ42は、1の値に設定され、ターゲットの例外状態SPnに関連するスタックポインタが現在のスタックポインタであることを示す。例外コントローラ20は、次いで、ステップ110で例外イベントに対応する例外取扱ルーチンを選択し、処理パイプライン4を制御して、例外取扱ルーチンの実行を開始する。処理パイプライン4は、次いで、ターゲットの例外状態ELnに関連するスタック35-nを使用して、例外取扱ルーチンの処理を継続する。例外取扱ルーチンの処理は、次いでステップ112まで継続し、ここで、例外取扱ルーチンの初期部分が完了したことが判定される。例外取扱ルーチンの初期部分がいつ完了したかを判定する1つの様式は、図4に示されるスタックポインタ選択命令を提供することによる。代替として、スタックポインタ選択回路40内にカウンタを提供することができ、例外取扱ルーチンの開始から処理サイクルまたは命令の既定数をカウントし、カウンタが既定値に到達すると、初期部分の終了をトリガする。基本レベルのスタックポインタの内容は次いで、基本レベルのスタックポインタを使用するように切り替える前に、この例外レベルで使用された基本レベルのスタックデータストアをポイントするように変更される。例外取扱ルーチンの初期部分が完了すると、ステップ114で、スタックポインタ選択レジスタ42に記憶されたスタックポインタ選択値が0に設定され、したがって、現在のスタックポインタは、基本レベルのスタックポインタ0になる。例外取扱ルーチンの残りの部分は、次いで、現在のスタックとしてそれぞれの基本レベルのスタックデータストア35-0’、35-0’’または35-0’’’を使用して処理される。処理は、次いで、例外取扱ルーチンがステップ116で終了するまで継続する。次いで、ステップ118で、例外戻りデータは、ターゲットの例外状態ELnに対応する例外リンクレジスタ26および処理状態保存レジスタ28からロードされ、処理パイプライン4は、次いで、初期例外状態ELmに戻される。処理は、次いでステップ120で、例外状態Elmで継続する。方法は、次いで終了する。ステップ106で、初期例外状態ELmが例外イベントに関連するターゲットの例外状態ELnと同一である場合、ステップ122で、スタックポインタ選択レジスタ42に記憶されたスタックポインタ選択値が1であるか0であるかが判定される図7は、0が基本レベルのスタックポインタが使用されていることを示し、1が更なるレベルのスタックポインタが使用されていることを示す実施形態を示すが、0および1の意味は逆にすることができることが明らかである。スタックポインタ選択値が0の場合、処理はステップ108~120に継続する。mおよびnが等しい場合に中断コントローラ120によって選択された特定の例外取扱ルーチンは、mおよびnが等しくない場合に選択された例外取扱ルーチンとは異なる場合があるがこれは、中断コントローラのベクトルテーブルに設定されたアドレスオフセットに依存する、ステップ108~120に示されるスタックポインタ処理は同一である。一方、ステップ122で、スタックポインタ選択値が1に等しい場合、ステップ124で、例外コントローラ20は、スタックオーバーフロー取扱ルーチンに対応する例外ベクトルを選択し、処理パイプライン4を制御して、スタックオーバーフローを処理するためにスタックオーバーフロー取扱ルーチンを実行する。これは、スタック35-nのスタックオーバーフローのリスクが存在するためである。スタックオーバーフロー取扱ルーチンは、少なくとも、いくつかのコンテキストデータを記憶して、そのデータが失われることを防ぐことによってリセットに対してシステムを準備することが可能である。ステップ126で、スタックオーバーフロー例外がリカバリしたかが判定される。リカバリが達成され、処理が通常に継続できる場合、方法はステップ108に進み、通常の例外取扱ルーチンが、スタックポインタ選択値がゼロの場合と同じ様式で実行される。しかしながら、リカバリが達成されていない場合、処理は終了する。このように、図7に示された技法は、例外取扱ルーチンが安全に開始されることを確保するように、例外取扱ルーチンの初期部分のために安全な専用スタックが使用されることを可能にする。これによって、共有スタックのオーバーフローに起因して例外取扱ルーチンが開始に失敗することを回避する。例外取扱ルーチンの初期部分が完了後、処理は、専用の安全なスタックのリソースを節約するために、基本レベルのスタックを使用して継続する。オーバーフローが発生してしまった可能性がある、起こる可能性が低い事象の場合、この状況は、現在の例外状態をターゲットとした例外が、現在のスタックが更なるレベルのスタックのうちの1つであることをスタックポインタ選択値が示す時点で発行されているという事実によって識別することができ、この場合、スタックが実際にオーバーフローしているか、していないかに関わらず、スタックオーバーフローに対して防御するために、緊急スタックオーバーフロー取扱ルーチンを実行することができる。図7の処理中のどの時点であっても、更なる例外イベントが発生し、例外コントローラ20の判定が、現在の処理を中断するのに十分高い例外レベルである場合、図7の方法は、ステップ100で実施された処理である、その前に実行された処理、およびステップ102で発生している例外イベントである、更なる例外イベントから再開する。例えば、例外イベントが図7のステップ108と100との間で発生し、現在の例外状態と同一の例外状態をターゲットとする場合、これは、スタックポインタ選択値が、まだ現在のスタックポインタが更なるレベルのスタックポインタであることを示す1に設定されるであろうために、ステップ106および122~126の処理をトリガすることができる可能性がある。図8は、図7の方法に従う例外イベントの処理の例を示す。例えば、図8のステップ1で、処理は、基本レベルのスタックポインタSP0を使用して、基本レベルの例外状態EL0で実行される。図8のステップ2で、更なるレベルの例外状態EL2をターゲットとした例外イベントが、例外コントローラ20によって検出される。システムは、次いで、更なるレベルの例外状態EL2に切り替えられ、例外戻りデータは、例外状態EL2に関連する例外戻りレジスタ26、28に記憶される図7のステップ104による。図8のステップ3で、次いで、スタックポインタレジスタ30-2に記憶されたスタックポインタSP2が選択され、例外取扱ルーチンは、その場所がスタックポインタSP2によって示されたスタック35-2を使用して処理される。図8のステップ4では、スタックポインタ選択命令は、例外取扱ルーチン内部で遭遇するので、これによって、現在のスタックポインタを、基本レベルのスタックポインタレジスタ30-0の中に記憶された基本レベルのスタックポインタSP0に切り替える図7のステップ114による。図8のステップ5で、例外取扱ルーチンは、基本レベルのスタックデータストア35-0を使用して継続する。図8のステップ6で、例外取扱ルーチンは終了し、処理は、例外状態EL2に対応する例外戻りレジスタ26、28の中に記憶された例外戻りデータを使用して、基本レベルの例外状態EL0での本来の処理に戻る。図8のステップ7で、処理は、基本レベルのスタックポインタSP0によって示された基本レベルのスタック35-0を使用して、基本レベルの例外状態EL0で継続する。図9は、スタックオーバーフロー取扱ルーチンが必要な場合、図7の方法に従い、例外イベントを処理する時に例外状態を切り替える別の例を示す。図9のステップ1で、処理は、基本レベルのスタックポインタSP0を使用して、基本レベルの例外状態EL0で実行される。図9のステップ2で、更なるレベルの例外状態EL1をターゲットとした例外イベントが受信される。図7のステップ104によると、システムは、更なるレベルの例外状態EL1に切り替えられ、例外戻りデータは、更なるレベルの例外状態EL1に関連する例外戻りレジスタ26、28の中に記憶される。例外コントローラ20は、次いで、例外イベントに関連する例外取扱ルーチンを選択し、例外状態EL1に関連するスタックポインタレジスタ30-1の中に記憶された更なるレベルのスタックポインタSP1を使用して、選択された例外取扱ルーチンを処理する。しかしながら、例外取扱ルーチンの初期部分が完了する前に、別の例外イベントが、これも同一の例外状態EL1をターゲットとして発生する。このように、図7の方法が再開され、図7のステップ106および122で、現在の例外状態EL1およびターゲットの例外状態EL1は同一であり、スタックポインタ選択レジスタ42の中に記憶されたスタックポインタ選択値は、現在のスタックポインタが更なるレベルのスタックポインタSP1であることを示すことが判定される。すなわち、図9のステップ5でおよび図7のステップ124に従って、スタックオーバーフロー取扱ルーチンは、図9のステップ4で発生した例外イベントが、現在の例外状態に関連するスタック35-1のオーバーフローを示したという場合に備えて実行される。スタックオーバーフロー取扱ルーチンは、次いで、スタック35-1を修復するか、または、少なくとも、システムを、多量のデータを失うことなく処理を停止することができる状態に入れるか、のいずれかを実行する。必要な場合、一方で図9のステップ6図7のステップ126で適切な診断情報を提供する間に、処理は中止される。一方、処理が継続できる場合は、本来の例外ハンドラは、更なるレベルのスタックポインタSP1を使用して、図9のステップ7で、更なるレベルの例外状態EL1で処理される。例外取扱ルーチンの初期部分が完了した後、図9のステップ8で、現在のスタックポインタは、基本レベルのスタックポインタSP0に切り替えられる。次いで例外取扱ルーチンの最後に、図9のステップ9で、処理は例外戻りレジスタ26、28からロードされた例外戻りデータを使用して、基本レベルの例外状態に戻る。処理は、次いで、基本レベルのスタックポインタSP0を使用して、基本レベルの例外状態で継続する。図10は、使用されてもよい仮想マシン実装を例示する。前述の実施形態は、対象の技法をサポートする特定の処理ハードウェアを動作するための装置および方法という面で本発明を実装するが、ハードウェアデバイスのいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム510をサポートするホストオペレーティングシステム520を稼動するホストプロセッサ530上で稼動する。一般的に、妥当な速度で実行する仮想マシン実装を提供するには、大型の強力なプロセッサが必要であるが、そのような手法は、互換性または再使用を理由として、別のプロセッサにネイティブなコードを稼動することが所望される場合等、一定の条件において正当化される場合がある。仮想マシンプログラム510は、仮想マシンプログラム510によってモデル化されているデバイスである、実際のハードウェアによって提供されることになるアプリケーションプログラムインターフェースと同一である、アプリケーションプログラム500に対してアプリケーションプログラムインターフェースを提供する。このように、上記のメモリアクセスの制御を含めて、プログラム命令は、それらの仮想マシンハードウェアとの相互作用をモデル化するように、仮想マシンプログラム510を使用して、アプリケーションプログラム500内部から実行される場合がある。本発明の例示的な実施形態が、添付の図面を参照しながら本明細書に詳細に説明されたが、本発明はこれらの正確な実施形態に限定されないこと、また、添付の特許請求の範囲により定義される本発明の範囲から離れることなく、当業者によって多様な変更および変形を行うことができることが理解される。