(57)【要約】  処理回路（４）は、例外イベントを取り扱うための複数の例外状態ＥＬ０〜ＥＬ３を有し、例外状態は、基本レベルの例外状態ＥＬ０および少なくとも１つの更なるレベルの例外状態ＥＬ１〜ＥＬ３を含む。各例外状態は、対応するスタックデータストア（３５）のメモリ内の場所を示す対応するスタックポインタを有する。処理回路が基本レベルの例外状態ＥＬ０にある時、スタックポインタ選択回路（４０）は、処理回路（４）によって使用するための現在のスタックデータストアであることを示す現在のスタックポインタとして、基本レベルのスタックポインタを選択する。処理回路（４）が更なる例外状態である時、スタックポインタ選択回路（４０）は、現在のスタックポインタとして、基本レベルのスタックポインタ、または現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのいずれかを選択する。
2013522750.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
データを処理するように構成された処理回路であって、前記処理回路は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、処理回路と、
例外イベントを取り扱うことから戻るように、処理回路を制御するための例外戻りデータを記憶するための少なくとも１つの例外戻りレジスタであって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態にある時に、処理回路によって使用される専用の対応する例外戻りレジスタを有する、少なくとも１つの例外戻りレジスタと、
前記処理回路が前記例外状態のうちのいずれかにある時に使用するための、基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、基本レベルのスタックポインタレジスタと、
少なくとも１つの更なるレベルのスタックポインタを記憶するための少なくとも１つの更なるレベルのスタックポインタレジスタであって、各更なるレベルのスタックポインタは、前記処理回路が対応する更なるレベルの例外状態にある時の使用のための専用であり、対応する更なるレベルのスタックデータストアの前記メモリ内の前記場所を示す、少なくとも１つの更なるレベルのスタックポインタレジスタと、
現在のスタックポインタを選択して、データを処理する時に前記現在のスタックポインタによって示される現在のスタックデータストアを使用するように前記処理回路を制御するように構成されたスタックポインタ選択回路と、を備え、
前記処理回路が前記基本レベルの例外状態にある時、前記スタックポインタ選択回路は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、
前記処理回路が前記少なくとも１つの更なるレベルの例外状態のうちの１つにある時、前記スタックポインタ選択回路は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタのうちの少なくとも１つを、前記現在のスタックポインタとして選択するように構成され、前記処理回路は、前記現在のスタックポインタが前記基本レベルのスタックポインタであるかまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、データ処理装置。
【請求項２】
前記スタックポインタ選択回路は、ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記現在のスタックポインタとして、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタを選択する、請求項１に記載のデータ処理装置。
【請求項３】
前記処理回路は、前記例外イベントに応答して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理し、
前記スタックポインタ選択回路は、前記処理回路が前記例外取扱ルーチンの初期部分を完了した後に、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタから、前記基本レベルのスタックポインタへ前記現在のスタックポインタを切り替えるように制御される、請求項２に記載のデータ処理装置。
【請求項４】
前記例外取扱ルーチンは、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタから、前記基本レベルのスタックポインタへ前記現在のスタックポインタを切り替えるように、前記スタックポインタ選択回路を制御するための命令を含む、請求項３に記載のデータ処理装置。
【請求項５】
前記現在のスタックポインタが、前記基本レベルのスタックポインタであるか、または前記現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタであるかを示すスタックポインタ選択値を記憶するように構成された、スタックポインタ選択レジスタを備える、請求項１〜４のいずれかに記載のデータ処理装置。
【請求項６】
前記スタックポインタ選択回路は、前記処理回路が前記少なくとも１つの更なるレベルの例外状態のうちの１つにある時に、前記スタックポインタ選択値に依存して前記現在のスタックポインタを選択する、請求項５に記載のデータ処理装置。
【請求項７】
前記処理回路が前記少なくとも１つの更なるレベルの例外状態のうちの１つにある時、前記スタックポインタ選択回路は、
（ｉ）  前記スタックポインタ選択値が第１の値を有する場合、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択し、
（ｉｉ）  前記スタックポインタ選択値が第２の値を有する場合、前記現在のスタックポインタとして、前記現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタを選択するように構成される、請求項６に記載のデータ処理装置。
【請求項８】
前記処理回路は、スタックポインタ選択命令に応答して、更新されたスタックポインタ選択値を前記スタックポインタ選択レジスタに書き込む、請求項６および７のいずれかに記載のデータ処理装置。
【請求項９】
例外イベントに応答して、前記処理回路を制御して前記例外イベントに対応する例外取扱ルーチンを処理する例外コントローラを備え、少なくとも１つの例外イベントは、複数の対応する例外取扱ルーチンを有し、
前記少なくとも１つの例外イベントの発生時に、前記例外コントローラは、前記スタックポインタ選択値に依存して前記処理回路によって処理するために、前記複数の対応する例外取扱ルーチンのうちの１つを選択する、請求項５〜８のいずれか１項に記載のデータ処理装置。
【請求項１０】
前記複数の対応する例外取扱ルーチンは、前記少なくとも１つの更なるスタックデータストアのスタックオーバーフローを取り扱うためのスタックオーバーフロー取扱ルーチンを含み、前記例外コントローラは、前記少なくとも１つの例外イベントに関連するターゲットの更なるレベルの例外状態が、前記処理回路の前記現在の更なるレベルの例外状態と同一であり、かつ前記スタックポインタ選択値が、前記更なるレベルのスタックポインタが前記現在のスタックポインタであることを示す時に、前記少なくとも１つの例外イベントの発生時に、前記スタックオーバーフロー取扱ルーチンを処理するように前記処理回路を制御するように構成される、請求項９に記載のデータ処理装置。
【請求項１１】
前記メモリをさらに備える、請求項１〜１０のいずれか１項に記載のデータ処理装置。
【請求項１２】
データ処理装置であって、
データを処理するための処理手段であって、前記処理手段は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、処理手段と、
例外イベントを取り扱うことから戻るように、前記処理手段を制御するための例外戻りデータを記憶するための少なくとも１つの例外戻りレジスタ手段であって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態にある時に、前記処理手段によって使用するための専用の対応する例外戻りレジスタ手段を有する、少なくとも１つの例外戻りレジスタ手段と、
前記処理手段が前記例外状態のうちのいずれかにある時に使用するための、基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段であって、前記基本レベルのスタックポインタが、基本レベルのスタックデータストア手段のメモリ手段内の場所を示す、基本レベルのスタックポインタレジスタ手段と、
少なくとも１つの更なるレベルのスタックポインタを記憶するための、少なくとも１つの更なるレベルのスタックポインタレジスタ手段であって、各更なるレベルのスタックポインタは、前記処理手段が対応する更なるレベルの例外状態にある時に使用するための専用であり、対応する更なるレベルのスタックデータストア手段の前記メモリ手段内の場所を示す、少なくとも１つの更なるレベルのスタックポインタレジスタ手段と、
現在のスタックポインタを選択し、データを処理する時に前記現在のスタックポインタによって示された現在のスタックデータストア手段を使用するように前記処理手段を制御するための、スタックポインタ選択手段と、を備え、
前記処理手段が前記基本レベルの例外状態にある時、前記スタックポインタ選択手段は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、
前記処理手段が前記少なくとも１つの更なるレベルの例外状態のうちの１つにある時、前記スタックポインタ選択手段は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタのうちの１つを、前記現在のスタックポインタとして選択するように構成され、前記処理手段は、前記現在のスタックポインタが前記基本レベルのスタックポインタであるか、または前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する前記例外戻りレジスタ手段を使用することを継続する、データ処理装置。
【請求項１３】
データ処理の方法であって、
複数の例外状態のうちの１つにあるデータを処理するステップであって、前記例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、ステップと、
例外イベントに応答して、前記例外イベントを取り扱うことからの戻りを制御するための例外戻りデータを少なくとも１つの例外戻りレジスタに記憶するステップであって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態で処理する時に使用するための専用の対応する例外戻りレジスタを有する、ステップと、
前記処理するステップが前記例外状態のうちのいずれかにある時に使用するための基本レベルのスタックポインタを記憶するステップであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、ステップと、
少なくとも１つの更なるレベルのスタックポインタを記憶するステップであって、各更なるレベルのスタックポインタは、前記処理するステップが、対応する更なるレベルの例外状態にある時に使用するための専用であり、かつ対応する更なるレベルのスタックデータストアの前記メモリ内の前記場所を示す、ステップと、
現在のスタックポインタを選択し、データを処理する時に前記現在のスタックポインタによって示された現在のスタックデータストアを使用するように前記処理するステップを制御するステップと、を含み、
前記処理するステップが前記基本レベルの例外状態にあるデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択し、
前記処理するステップが前記少なくとも１つの更なるレベルの例外状態のうちの１つにあるデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタのうちの１つを選択し、前記処理するステップは、前記現在のスタックポインタが前記基本レベルのスタックポインタであるか、または前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、方法。
【請求項１４】
データ処理装置であって、
基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む複数の例外状態のうちの１つにあるデータを処理するように構成された処理回路と、
基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタと、
少なくとも１つの更なるレベルのスタックデータストアの前記メモリ内の前記場所を示す少なくとも１つの更なるレベルのスタックポインタを記憶するための、少なくとも１つの更なるレベルのスタックポインタレジスタであって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも１つの更なるレベルのスタックデータストアと、
ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記処理回路をトリガして、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタによって示された前記更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理する、例外コントローラと、を備え、
前記処理回路は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置。
【請求項１５】
データ処理装置であって、
基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、複数の例外状態のうちの１つにあるデータを処理するための処理手段と、
基本レベルのスタックデータストア手段のメモリ手段内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段と、
少なくとも１つの更なるレベルのスタックデータストア手段の前記メモリ手段内の前記場所を示す少なくとも１つの更なるレベルのスタックポインタを記憶するための、少なくとも１つの更なるレベルのスタックポインタレジスタ手段であって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも１つの更なるレベルのスタックポインタレジスタ手段と、
ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理するように、前記処理手段をトリガするための例外制御手段と、を備え、
前記処理手段は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置。
【請求項１６】
データ処理の方法であって、
基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、複数の例外状態のうちの１つにあるデータを処理するステップと、
基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するステップと、
少なくとも１つの更なるレベルのスタックデータストアの前記メモリ内の場所を示す少なくとも１つの更なるレベルのスタックポインタを記憶するステップであって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、ステップと、
ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する前記更なるレベルのスタックポインタによって示された前記更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンの処理をトリガするステップと、
前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するステップと、を含む、方法。
【請求項１７】
データ処理装置上で実行するコンピュータプログラムによって提供される仮想マシンであって、請求項１〜１１のいずれか１項に記載の装置に対応する命令実行環境を提供する、仮想マシン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関する。より具体的には、本発明は、例外イベントを取り扱うための装置および方法に関する。
【背景技術】
【０００２】
データ処理が実行されている間、例外イベントが発生し、例外取扱ルーチンが実施できるようにデータ処理が中断されなければならないことを示す場合がある。例外イベントは、例えば、処理結果が未定義であること、処理リソースがオーバーフローしたこと、または例外信号が外部デバイスから受信されたことを示す可能性がある。複数の例外状態にある例外イベントを処理することが可能である。各例外状態は、それに関連する異なる優先レベルおよび異なるリソースを有することができる。
【０００３】
例外状態の例外取扱ルーチンを処理する間、一時変数を記憶するための独自のスタックデータストアを各例外状態に提供することが有用である可能性がある。スタックデータストアは一般的にメモリの中に記憶され、先入れ先出し（ＦＩＦＯ）データ構造である。スタックデータストアは、それに割り当てられた既定量のメモリの空きを有する。スタック上に過多のデータが記憶されると、スタックはその割り当てられたメモリの空きを超える場合がある。スタックは、ページ境界をオーバーランする場合があり、メモリの次のページにアクセスするためのアクセス権利を有さない場合があるので、ひいてはメモリアボートをトリガする。また、プロセッサがスタック上で、スタック上に残っている空きよりも大きい変数を記憶しようとすると、これは、エラーを発生させる可能性がある。この種のエラーは、スタックオーバーフローとして知られる。一般に、スタックオーバーフローは、データ値がスタック上に記憶されることを阻止する、スタックの使用過剰に関連する任意のエラーである。
【０００４】
一般的に、例外イベント後に例外取扱ルーチンによって実施される最初のタスクのうちの１つは、いくつかの変数をスタック上にプッシュすることである。したがって、例外取扱ルーチンが問題なく開始できることを保証するために、例外の受け入れ時にスタック容量が例外取扱ルーチンに対して利用可能であることが重要である。スタックがオーバーフローすると、スタックオーバーフローはそれ自体、例外イベントをトリガし、別の例外取扱ルーチンに変数をスタック上にプッシュさせようとする場合があり、別のスタックオーバーフロー例外イベントを発生させるため、例外取扱ルーチンが正しく実行されることを阻止する可能性がある。これは、各々が変数をスタック上にロードしようとし、各々がスタックオーバーフローを現因として更なる例外イベントをトリガするという、例外イベントの無限ループとなる可能性があり、このような再帰的例外エントリのためにシステムをクラッシュさせる可能性がある。本技法は、そのようなクラッシュの発生確率を削減することを模索する。
【発明の概要】
【課題を解決するための手段】
【０００５】
一態様から見ると、本発明は、
データを処理するように構成される処理回路であって、前記処理回路は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、処理回路と、
例外イベントを取り扱うことから戻るように、処理回路を制御するための例外戻りデータを記憶するための少なくとも１つの例外戻りレジスタであって、少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態時に、処理回路によって使用するための専用の対応する例外戻りレジスタを有する、少なくとも１つの例外戻りレジスタと、
前記処理回路が前記例外状態のうちのいずれかにある時、使用するための基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、基本レベルのスタックポインタレジスタと、
少なくとも１つの更なるレベルのスタックポインタを記憶するための少なくとも１つの更なるレベルのスタックポインタレジスタであって、各更なるレベルのスタックポインタは、前記処理回路が対応する更なるレベルの例外状態にある時に使用するための専用であり、対応する更なるレベルのスタックデータストアの前記メモリ内の場所を示す、少なくとも１つの更なるレベルのスタックポインタレジスタと、
現在のスタックポインタを選択して、前記処理回路を制御して、データを処理する時に前記現在のスタックポインタによって示される現在のスタックデータストアを使用するように構成されるスタックポインタ選択回路と、を備え、
前記処理回路が前記基本レベルの例外状態にある時、前記スタックポインタ選択回路は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、
前記処理回路が、前記少なくとも１つの更なるレベルの例外状態のうちの１つにある時、前記スタックポインタ選択回路は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのうちの少なくとも１つを、前記現在のスタックポインタとして選択するように構成され、前記処理回路は、前記現在のスタックポインタが前記基本レベルのスタックポインタまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、データ処理装置を提供する。
【０００６】
複数の例外状態を有する処理回路を備える装置が提供される。例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む。一実施形態において、基本レベルの例外状態は、ユーザアプリケーションを処理するためのものであり、一方で、例外イベントは、例外取扱ルーチンが、更なるレベルの例外状態のうちのターゲットとされた１つにおいて処理されることになる（しかし、代替実施形態においては、例外イベントは、基本レベルの例外状態でターゲットとされる可能性もある）。少なくとも更なるレベルの例外状態は、例外イベントを取扱後に、前のプロセスに対する戻りを制御するための例外戻りデータを記憶するための対応する例外戻りレジスタを有する（基本レベルの例外状態が例外取扱ルーチンを処理するために使用される場合、基本レベルの例外状態もまた対応する例外戻りレジスタを有する場合がある）。
【０００７】
装置は、スタックポインタを記憶するためのレジスタも有し、例外イベントを取り扱い時に使用するために、処理回路によって使用されるための複数のスタックデータストアのメモリ内の場所を示す。処理回路が基本レベルの例外状態にある時、基本レベルのスタックポインタによって示される基本レベルのスタックデータストアは、一時的な変数を記憶するために使用される。再帰的例外エントリにつながるスタックオーバーフローのリスク（およびこのために、例外イベントが正しく取り扱われないというリスク）は、処理回路に対してアクセス可能な２つのスタックデータストアを提供することによって軽減される。任意の更なるレベルの例外状態で処理する時、１つは例外受け入れ直後の少量の処理のために使用されてもよく、もう１つは、例外状態内のより汎用処理のために使用される。各更なるレベルの例外状態は、基本レベルのスタックポインタ、および対応する更なるレベルの例外状態によって使用される専用の対応する更なるレベルのスタックポインタの両方に対するアクセスを有する。例外受け入れ直後の少量の処理中、基本レベルのスタックポインタの内容は（汎用目的レジスタの内容と共に）、メモリの中に保存され、新しい値が基本レベルのスタックポインタの中に配置され、より汎用目的処理に好適なスタックを示す。その例外状態でより汎用目的処理に好適なこのスタックは、その例外状態で使用された基本レベルのスタックデータストアとして参照される。その例外状態で使用された基本レベルのスタックデータストアの場所を示す基本レベルのスタックポインタと、処理回路が更なるレベルの例外状態のうちの１つにある時に更なるレベルのスタックデータストアの場所を示す更なるレベルのスタックポインタとの間を選択し、現在選択されたスタックポインタを使用して、メモリの中のスタックデータストアのうちの１つにアクセスするように処理回路を制御するために、選択回路が提供される。
【０００８】
各更なるレベルのスタックポインタは、特定の更なるレベルの例外状態によって使用するための専用であるため、各更なるレベルのスタックポインタは、比較的まれに使用され、このため、更なるレベルのスタックデータストア上には変数がほとんど記憶されることはない。すなわち、スタックオーバーフローのリスクが軽減され、対応する更なるレベルの例外状態の例外イベントを処理する時に、更なるレベルのスタックデータストアが、変数を記憶するために利用可能である可能性が高い。一方、基本レベルのスタックポインタは、共有スタックポインタであり、任意の例外状態において処理するために使用される。基本レベルのスタックポインタは、例えば、例外取扱ルーチンの安全な起動が既に発生している時、またはもはや重要ではない時に、専用の更なるレベルのスタックデータストアのリソースを節約するために、例外状態で使用された基本レベルのスタックデータストアをポイントするために使用することができる。可能である時に必ず基本レベルのスタックデータストアを使用することによって、更なるレベルのスタックデータストアのうちの１つがオーバーフローする確率が顕著に削減される。
【０００９】
更なるレベルの例外状態に対して２つの専用スタックポインタを提供することによって、スタックオーバーフローに対する保護が達成されたが、本技法は、各スタックポインタが使用される頻度が低くなり、このためハードウェアが無駄になることから、この手法が非効率であることを認識する。スタックオーバーフローに対する保護は、各例外状態に対応するスタックポインタを提供し、基本レベルのスタックポインタが例外状態の間で共有されることを可能にすることによって、より効率的な様式で達成することができるので、各更なるレベルの例外状態は、それ独自の基本レベルのスタックデータストアまたは更なるレベルのスタックデータストアのいずれかにアクセスすることができる。したがって、各更なるレベルの例外状態は、スタックオーバーフローに対する保護を提供するために、２つのスタックデータストアに対するアクセスを依然として有するが、例外状態に対して１つのスタックポインタだけが提供される。このように、各例外レベルに対して、例外エントリ直後に使用される１つと、汎用処理のための１つ（さらに再帰的例外エントリのリスクなしにオーバーフローすることが許可される可能性がある）という、使用される２つのスタックストアが存在することができる。
【００１０】
例外戻りレジスタおよびスタックポインタレジスタは、まとめて、例外イベントを取扱中に使用するためのコンテキストデータを記憶するために提供される例外コンテキストレジスタとして考えられる場合がある。各例外戻りレジスタは特定の例外状態による使用のための専用であるため、基本レベルのスタックポインタレジスタが例外状態のうちのいずれかにおいて使用するために提供されるスタックポインタレジスタとは対照的に、例外戻りレジスタは、スタックポインタレジスタに対して異なる様式でバンクされる。
【００１１】
スタックポインタ選択回路は、現在のスタックポインタとしてターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタを選択するように、ターゲットの更なるレベルの例外状態に関連する例外イベントに対して応答してもよい。すなわち、例外イベントの処理開始時、現在のスタックデータストアが、ターゲットの更なるレベルの例外状態に対応する、専用の更なるレベルのスタックデータストアになる。専用の更なるレベルのスタックデータストアのスタックオーバーフローのリスクは、その例外レベルで使用される基本レベルのスタックデータストアのオーバーフローのリスクよりも低い。したがって、例外エントリ時にターゲットの更なるレベルのスタックデータストアに切り替えることによって、例外イベントエントリが正しく取り扱われないというリスクを軽減する。エントリが行われた後、基本レベルのスタックポインタの中の新しい値によってポイントされたスタックを使用するようにスイッチバックが行われてもよい。
【００１２】
処理回路は、ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理するように例外イベントに応答してもよく、スタックポインタ選択回路は、処理回路が例外取扱ルーチンの初期部分を完了した後に、ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタから、基本レベルのスタックポインタに現在のスタックポインタを切り替えるように構成されてもよい。例外取扱ルーチンの初期部分が完了した後、これは例外処理が問題なく開始したことを示すので、更なるレベルのスタックポインタによって示される更なるレベルのスタックデータストアの使用はもはや必要なくなる。過多のデータが更なるレベルのスタックデータストア上にプッシュされることを回避するため、現在のスタックポインタは、基本レベルのスタックポインタに戻るように切り替えることができ、処理は、基本レベルのスタックポインタによって示されるように、例外状態で使用された基本レベルのスタックデータストアを使用して継続することができる。これによって、同一の更なるレベルの例外状態で別の例外イベントに対するエントリ時に更なるレベルのスタックがオーバーフローする確率を削減する。
【００１３】
例外取扱ルーチンの初期部分の終了を示すために多様な技法を使用することができる。例えば、例外取扱ルーチンの先頭から経過した処理サイクルの数、または例外取扱ルーチンが開始してから実行された命令の数をカウントするためのカウンタを提供することができ、初期部分は、カウンタが既定の閾値に到達した時に終了することが可能である。
【００１４】
しかしながら、例外取扱ルーチンの初期部分の終了を示す有用な様式は、スタックポインタ選択回路が、ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタから、基本レベルのスタックポインタに現在のスタックポインタを切り替えるように制御するために、例外取扱ルーチン内に命令を提供することによる。このため、例外取扱ルーチンを表現するソフトウェアはそれ自体、現在のスタックポインタが基本レベルのスタックポインタに切り替えられる点を定義することができる。ある例外取扱ルーチンは、他の例外取扱ルーチンよりもより安全性を重視する場合があるため、この命令を提供することによって、例外取扱ルーチンのプログラマが、基本レベルのスタックポインタに切り替えられる前に安全な更なるレベルのスタックポインタを使用すべき長さを特定の場合ごとの事例に基づいて決定することを可能にする。
【００１５】
装置は、現在のスタックポインタが基本レベルのスタックポインタであるか、または現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタであるかを示すスタックポインタ選択値を記憶するように構成されたスタックポインタ選択レジスタを備える場合がある。装置の他の部分は、その後、スタックポインタ選択レジスタに記憶された値を読み出すことによって、どのスタックポインタが現在使用されているかを判断することができる。
【００１６】
基本レベルのスタックポインタまたは更なるレベルのスタックポインタのうちのどちらが現在有効であるかを示すだけでなく、処理回路が更なるレベルの例外状態のうちの１つにある時、スタックポインタ選択レジスタは、スタックポインタ選択回路の動作を制御する場合もある。スタックポインタ選択回路は、スタックポインタ選択レジスタの中に記憶されたスタックポインタ選択値に依存して、現在のスタックポインタを選択するように構成される場合がある。このように、スタックポインタ選択レジスタの中に記憶された値を変更すると、メモリの中のスタックデータストアのうちのどれが処理回路によって使用されるかを変更する。
【００１７】
スタックポインタ選択回路は、処理回路が更なるレベルの例外状態のうちの１つにある時、スタックポインタ選択値が第１の値を有する場合には基本レベルのスタックポインタが現在のスタックポインタとして選択され、スタックポインタ選択値が第２の値を有する場合には、現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタが現在のスタックポインタとして選択されるように、構成される場合がある。例えば、スタックポインタ選択値は、第１の値（例えば、０または１）が現在のスタックポインタとして基本レベルのスタックポインタを選択するようにスタックポインタ選択回路を制御し、第２の値（０および１のうちのもう一方）が現在のスタックポインタとして現在の例外状態に対応する更なるスタックポインタを選択するようにスタックポインタ選択回路を制御する１ビット値となる可能性がある。
【００１８】
処理回路は、スタックポインタ選択命令に応答して、更新されたスタックポインタ選択値をスタックポインタ選択レジスタに書き込む場合がある。これによって、プログラムまたは例外取扱ルーチンのプログラマは、いつどのスタックを使用するかを制御することが可能になる。スタックポインタ選択命令を実行することによって、所望のスタックポインタを表す、更新されたスタックポインタ選択値は、スタックポインタ選択レジスタに書き込まれ、スタックポインタ選択回路は、次いで、現在のスタックポインタとして所望のスタックポインタを選択し、更新された現在のスタックポインタによって示されるスタックデータストアを使用するように処理回路を制御する。
【００１９】
装置は、特定の例外イベントに対応する複数の異なる例外取扱ルーチンのうちのどれが処理回路によって、実行するために選択されるかを制御するために、スタックポインタ選択レジスタの中に記憶されたスタックポインタ選択値に応答する例外コントローラを備える場合がある。スタックポインタ選択レジスタは、プロセッサの現在の状態（すなわち、共有の基本レベルのスタックポインタまたは専用の更なるレベルのスタックポインタが使用されているかどうか）を示すので、例外状態のために基本レベルのスタックデータストアが使用されている時、更なるレベルのスタックポインタが使用されている時に比較して、異なる例外取扱ルーチンが選択される場合がある。
【００２０】
例えば、複数の対応する例外取扱ルーチンが、少なくとも１つの更なるスタックデータストアのスタックオーバーフローを取り扱うためのスタックオーバーフロー取り扱いルーチンを含む場合、スタックポインタ選択値に依存して、対応する例外取扱ルーチンのうちの１つを選択することが有用である可能性がある。本技法は、更なるレベルの例外スタックデータストアのオーバーフローのリスクを軽減するが、依然として、例えば、ソフトウェアのエラーの結果のように、スタックオーバーフローの小さい確率が存在し、スタックオーバーフロー取扱ルーチンは、この稀な状況に対処するために提供される場合がある。例外イベントが、現在の更なるレベルの例外状態と同一であるターゲットの更なるレベルの例外状態をターゲットとし、かつスタックポインタ選択値が、更なるレベルのスタックポインタが現在のスタックポインタであることを示す時、これは、現在のレベルの例外状態に関連する更なるレベルのスタックのスタックオーバーフロー、すなわち、再帰的例外エントリのリスクがあることを示すことができる。スタックオーバーフローのリスクが存在するのは、更なるレベルのスタックポインタが現在のスタックポインタであることを示すスタックポインタ選択値が、その前に実行された例外取扱ルーチンが基本レベルのスタックデータストアが使用される時点に到達する前に、例外イベントが発行されたことを示すからであり、また、新しい例外イベントは、その前の例外状態と同一の例外状態をターゲットとしているために、新しい例外イベントの可能な発生原因は、更なるレベルのスタックデータストアのオーバーフローである。通常の例外取扱ルーチンに対するエントリは、したがって、無限のループをトリガする可能性があり、そのために例外が呼び出されるが、対応する例外取扱ルーチンは、スタックがオーバーフローしているために、実行することができない。この状況に対して防備するために、スタックオーバーフロー取扱ルーチンが選択される。
【００２１】
スタックデータストアを記憶するメモリは、処理装置の一部ではない、外部メモリの場合がある。この場合、装置によって処理されたスタックポインタは、外部メモリ内の対応するスタックデータストアの場所を示す。代替として、データ処理装置は、それ自体メモリを備える場合がある。メモリは、１つ以上のバンクのメモリ、または１つ以上の個別のメモリデバイスであってもよく、基本レベルのスタックデータストアおよび１つ以上の更なるレベルのスタックデータストアを集合的に記憶する、メモリデバイスの任意の群を含む場合がある。
【００２２】
別の態様から見ると、本発明は、
データを処理するための処理手段であって、前記処理手段は、複数の例外状態を有し、前記例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、処理手段と、
例外イベントを取り扱うことから戻るように、処理手段を制御するための例外戻りデータを記憶するための少なくとも１つの例外戻りレジスタ手段であって、少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態にある時に、処理手段によって使用するための専用の対応する例外戻りレジスタ手段を有する、少なくとも１つの例外戻りレジスタ手段と、
前記処理手段が前記例外状態のうちのいずれかにある時に使用するための基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段であって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストア手段のメモリ手段内の場所を示す、基本レベルのスタックポインタレジスタ手段と、
少なくとも１つの更なるレベルのスタックポインタを記憶するための少なくとも１つの更なるレベルのスタックポインタレジスタ手段であって、各更なるレベルのスタックポインタは、前記処理手段が対応する更なるレベルの例外状態にある時に使用するための専用であり、対応する更なるレベルのスタックデータストア手段の前記メモリ手段内の場所を示す、少なくとも１つの更なるレベルのスタックポインタレジスタ手段と、
現在のスタックポインタを選択し、データを処理する時に前記現在のスタックポインタによって示された現在のスタックデータストア手段を使用するように前記処理手段を制御するためのスタックポインタ選択手段と、を備え、
前記処理手段が前記基本レベルの例外状態にある時、前記スタックポインタ選択手段は、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択するように構成され、
前記処理手段が前記少なくとも１つの更なるレベルの例外状態のうちの１つにある時、前記スタックポインタ選択手段は、前記基本レベルのスタックポインタおよび現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのうちの１つを、前記現在のスタックポインタとして選択するように構成され、前記処理手段は、前記現在のスタックポインタが前記基本レベルのスタックポインタまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタ手段を使用することを継続する、データ処理装置を提供する。
【００２３】
更なる態様から見ると、本発明は、
複数の例外状態のうちの１つにあるデータを処理するステップであって、前記例外状態は、基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、ステップと、
例外イベントに応答して、例外イベントを取り扱うことからの戻りを制御するための例外戻りデータを少なくとも１つの例外戻りレジスタに記憶するステップであって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルの例外状態で処理する時の使用のための専用の対応する例外戻りレジスタを有する、ステップと、
前記処理するステップが前記例外状態のうちのいずれかにある時に使用するための基本レベルのスタックポインタを記憶するステップであって、前記基本レベルのスタックポインタは、基本レベルのスタックデータストアのメモリ内の場所を示す、ステップと、
少なくとも１つの更なるレベルのスタックポインタを記憶するステップであって、各更なるレベルのスタックポインタは、前記処理するステップが、対応する更なるレベルの例外状態にある時の使用のための専用であり、かつ対応する更なるレベルのスタックデータストアの前記メモリ内の場所を示す、ステップと、
現在のスタックポインタを選択し、データを処理する時に現在のスタックポインタによって示された現在のスタックデータストアを使用するように前記処理するステップを制御するステップと、を含み、
前記処理するステップが前記基本レベルの例外状態にあるデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタを選択し、
前記処理するステップが前記少なくとも１つの更なるレベルの例外状態のうちの１つの中のデータを処理する時、前記選択するステップは、前記現在のスタックポインタとして、前記基本レベルのスタックポインタ、および現在の更なるレベルの例外状態に対応する更なるレベルのスタックポインタのうちの１つを選択し、前記処理するステップは、前記現在のスタックポインタが前記基本レベルのスタックポインタであるかまたは前記更なるレベルのスタックポインタであるかに関わらず、前記現在の更なるレベルの例外状態に対応する例外戻りレジスタを使用することを継続する、データ処理の方法を提供する。
【００２４】
更なる態様から見ると、本発明は、
基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む複数の例外状態のうちの１つにあるデータを処理するように構成された処理回路と、
基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタと、
少なくとも１つの更なるレベルのスタックデータストアの前記メモリ内の場所を示す少なくとも１つの更なるレベルのスタックポインタを記憶するための少なくとも１つの更なるレベルのスタックポインタレジスタであって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも１つの更なるレベルのスタックデータストアと、
ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記処理回路をトリガして、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理する、例外コントローラと、を備え、
前記処理回路は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置を提供する。
【００２５】
ターゲットの更なるレベルの例外状態へのエントリに続いて更なるレベルのスタックポインタを使用することによって、対応する例外取扱ルーチンには、専用の頻繁に使用されないスタックが提供されて、例外取扱ルーチンが安全に開始されることを保証する。例外取扱ルーチンの初期部分が完了した後、例外取扱ルーチンの残りの部分は、基本レベルのスタックポインタによって示されるように、その例外レベルのための基本レベルのスタックデータストアを使用して、ターゲットの更なるレベルの例外状態で処理される。例外取扱ルーチンが安全に開始した後に基本レベルのスタックポインタを使用することによって、専用の更なるレベルのスタックデータストアの過剰使用が回避され、更なるレベルのスタックデータストアのオーバーフローの確率を削減する。
【００２６】
また別の態様から見ると、本発明は、
基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、複数の例外状態のうちの１つにあるデータを処理するための処理手段と、
基本レベルのスタックデータストア手段のメモリ手段内の場所を示す基本レベルのスタックポインタを記憶するための基本レベルのスタックポインタレジスタ手段と、
少なくとも１つの更なるレベルのスタックデータストア手段の前記メモリ手段内の場所を示す少なくとも１つの更なるレベルのスタックポインタを記憶するための少なくとも１つの更なるレベルのスタックポインタレジスタ手段であって、前記少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、少なくとも１つの更なるレベルのスタックポインタレジスタ手段と、
ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンを処理するように、前記処理手段をトリガするための例外制御手段と、を備え、
前記処理手段は、前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストア手段を使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するように構成される、データ処理装置を提供する。
【００２７】
別の態様から見ると、本発明は、
基本レベルの例外状態と、少なくとも１つの更なるレベルの例外状態とを含む、複数の例外状態のうちの１つにあるデータを処理するステップと、
基本レベルのスタックデータストアのメモリ内の場所を示す基本レベルのスタックポインタを記憶するステップと、
少なくとも１つの更なるレベルのスタックデータストアの前記メモリ内の場所を示す少なくとも１つの更なるレベルのスタックポインタを記憶するステップであって、少なくとも１つの更なるレベルの例外状態は各々、対応する更なるレベルのスタックポインタを有する、ステップと、
ターゲットの更なるレベルの例外状態に関連する例外イベントに応答して、前記ターゲットの更なるレベルの例外状態に対応する更なるレベルのスタックポインタによって示された更なるレベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の例外取扱ルーチンの処理をトリガするステップと、
前記例外取扱ルーチンの初期部分を処理した後に、前記基本レベルのスタックポインタによって示された前記基本レベルのスタックデータストアを使用して、前記ターゲットの更なるレベルの例外状態の前記例外取扱ルーチンの残りの部分を処理するステップと、を含む、データ処理方法を提供する。
以下、本技法の実施形態を、添付の図面を参照して、例示として説明する。
【図面の簡単な説明】
【００２８】
【図１】例外イベントを取り扱うための例外取扱リソースを有するデータ処理装置を模式的に例示する。
【図２】処理装置の複数の例外状態を例示する。
【図３】基本レベルのスタックポインタおよび少なくとも１つの更なるレベルのスタックポインタから現在のスタックポインタを選択するための技法を例示する。
【図４】スタックポインタ選択命令を例示する。
【図５】スタックポインタ選択命令を含む例外取扱ルーチンを例示する。
【図６】例外取扱ルーチンにアクセスするためのそれぞれのアドレスオフセットを示す例外ベクトルテーブルを例示する。
【図７】例外イベントに応答するための方法を例示する。
【図８】例外イベントに応答して、例外状態の間の切り替えを模式的に例示する。
【図９】スタックオーバーフロー取扱ルーチンの処理を模式的に例示する。
【図１０】仮想マシン実装を模式的に例示する。
【発明を実施するための形態】
【００２９】
図１は、例外取扱リソースを有するデータ処理装置２を示す。データ処理装置２は、メモリシステム８からロードされた命令の制御下で、レジスタ６またはメモリシステム８の中に記憶されたデータを処理するための処理パイプライン４を備える。処理パイプライン４は、メモリシステム８から命令をフェッチするためのフェッチパイプライン段階１０、フェッチした命令を解読するための解読パイプライン段階１２、例外に対する命令を発行するための発行段階１４（発行段階１４は、処理サイクルあたり１つの命令または複数の命令を発行する場合があり、順番にまたは順番に関係なく命令を発行する場合がある）、発行した命令を実行するための実行段階１６、および処理結果をレジスタ６に書き戻すための書き戻し段階１８等、多様なパイプライン段階を含む場合がある。処理パイプライン４は、これらの段階に限定されず、例えば、命令の中で指定されたレジスタ指定子の名前を変更するための名前変更段階等、他の段階を含む場合がある。
【００３０】
装置２は、１つ以上の種類の例外イベントに応答して、例外取扱ルーチンを処理するように処理パイプライン４を制御する、例外コントローラ２０を備える。処理パイプライン４は、例外イベントを取り扱うための複数の例外状態を有する。各例外状態は、異なる特性を有する。例えば、図２に示される例示的実施形態では、基本レベルの例外状態ＥＬ０は、ユーザレベルの例外状態であり、第１の更なるレベルの例外状態ＥＬ１は、オペレーティングシステムレベルの例外状態であり、第２の更なるレベルの例外状態ＥＬ２は、ハイパーバイザレベルの例外状態であり、第３の更なるレベルの例外状態ＥＬ３は、セキュア監視レベルの例外状態である。各例外状態の内には、図２に示されるように非セキュアモードおよびセキュアモード等、複数のモードが存在する場合がある。全ての例外状態が両方のモードで利用可能である必要はない。例えば、図２において、更なるレベルの例外状態ＥＬ２は、非セキュア状態のみで利用可能であるが、更なるレベルの例外状態ＥＬ３は、セキュア状態のみで利用可能である。図２の例外状態図は、例示的な実施形態に過ぎず、例外状態の他の番号および構成が可能である。
【００３１】
各例外イベントは、更なるレベルの例外状態ＥＬ１〜ＥＬ３のうちの特定の１つでターゲットとされる。例えば、特定の例外イベントは、オペレーティングシステムレベルの例外状態ＥＬ１またはハイパーバイザレベルの例外状態ＥＬ２での処理を必要とする場合があり、適切なレベルでターゲットとすることができる。例外コントローラ２０は、次いで、処理パイプライン４が、ターゲットレベルの例外状態の対応する例外取扱ルーチンを処理するように制御する。例外イベントは優先度が決定される場合があるので、現在またはより上位の例外状態をターゲットとした例外イベントは、所与の例外状態での実行を先手をうって阻止または中断し、ターゲットの例外状態での実行を発生させる場合がある。下位例外状態をターゲットとした例外が、所与の例外状態での実行を使用して発生するという稀な事態では、これらの例外は、そうすることが安全である場合には無視されるか、または実行を先手をうって阻止して現在の例外レベルでハンドラの実行を発生させる。現在のレベルの例外状態と同一のレベルの例外状態をターゲットとした例外イベントは、通常、現在のプロセスを中断しないが、例外イベントが現在のプロセスを停止させた問題によって直接発生した場合には受け入れられる可能性がある。
【００３２】
図１をもう一度参照すると、装置２は、例外イベントを取り扱う時に使用された例外コンテキストデータを記憶するために、いくつかのコンテキストレジスタ２４を備える。コンテキストレジスタ２４は、例外リンクレジスタ（ＥＬＲ）２６および処理状態保存レジスタ（ＳＰＳＲ）２８を含むいくつかの例外戻りレジスタを含む。少なくとも更なるレベルの例外状態（すなわち、基本レベルの例外状態ＥＬ０以外の全ての例外状態）は、対応する例外戻りレジスタを有する（例外リンクレジスタ２６および処理状態保存レジスタ２８はまとめて、例外戻りレジスタを表すと考えることができる）。各例外リンクレジスタ２６は、対応する更なるレベルの例外状態で処理されている例外取扱ルーチンが完了した後、処理される命令を示す例外戻りアドレスを記憶する。各処理状態保存レジスタ２８は、対応する更なるレベルの例外状態で例外取扱ルーチンを処理する時に使用するために、中断マスク、フラグ、または実行マスク等の多様なコンテキスト状態データを記憶する。図１の実施形態において、基本レベルの例外状態ＥＬ０は、例外イベントが更なるレベルの例外状態のうちの１つをターゲットとすることが予測されるため、対応する例外リンクレジスタ２６または処理状態保存レジスタ２８を有しない。しかしながら、例外イベントが基本レベルの例外状態でも取り扱われる可能性がある実施形態においては、基本レベルの例外状態ＥＬ０は、対応する例外リンクレジスタ２６または処理状態保存レジスタ２８を有することもできる。
【００３３】
コンテキストレジスタ２４はまた、スタックポインタレジスタ３０も含む。例外状態の各々は、対応するスタックデータストア３５のメモリシステム８内の場所を示す対応するスタックポインタレジスタ３０を有する。基本レベルのスタックポインタレジスタ３０−０は、基本レベルのスタックデータストア、３５−０、３５−０’、３５−０’’および３５−０’’’のメモリシステム８内の場所を識別し、この場所は、処理パイプライン４が例外状態ＥＬ０〜ＥＬ３のうちのいずれかにある時にアクセス可能である。対照的に、更なるレベルのスタックポインタレジスタ３０−１、３０−２、３０−３は、メモリシステム８の中の対応する更なるレベルのスタックデータストア３５−１、３５−２、３５−３を識別し、各々、処理パイプライン４が対応する更なるレベルの例外状態ＥＬ１、ＥＬ２、ＥＬ３にある時に使用するための専用である。
【００３４】
当業者は、基本レベルのスタックデータストア３５−０・・・３５−０’’’は、基本レベルのスタックデータストアとして参照されるが、例外状態で使用された基本レベルのスタックデータストアは、より下位の例外状態での実行にアクセス可能であることが適切ではないことを理解するであろう。
【００３５】
スタックポインタ選択回路４０は、スタックポインタ３０のうちのどれが現在使用中であるかを選択するために提供される。処理パイプライン４が基本レベルの例外状態ＥＬ０にある時、基本レベルのスタックポインタレジスタ３０−０の中に記憶された基本レベルのスタックポインタが選択され、選択回路４０によって制御される処理パイプライン４は、変数を記憶するために基本レベルのスタック３５−０を使用する。
【００３６】
処理パイプライン４が更なるレベルの例外状態ＥＬ１〜ＥＬ３のうちの１つにある時、スタックポインタ選択回路４０は、スタックポインタ選択レジスタ４２の中に記憶されたスタックポインタ選択値に応答して、基本レベルのスタックポインタレジスタ３０−０の中に記憶され、基本レベルのスタックデータストア３５−０’、３５−０’’、および３５−０’’’のそれぞれ１つに対応する、基本レベルのスタックポインタ、または処理パイプライン４の現在の例外状態に対応する、スタックポインタレジスタ３０−１、３０−２、３０−３のうちの１つに記憶された更なるレベルのスタックポインタのいずれかを選択する。スタックポインタ選択回路４０は、処理パイプライン４の現在の例外状態を示す、例外コントローラ２０からの信号を受信する場合がある。代替として、処理パイプライン４は、その現在の例外状態をスタックポインタ選択回路４０に通知することができる。スタックポインタ選択レジスタ４２の中に記憶された値および現在の例外状態に依存して、現在のスタックポインタが選択され、処理パイプライン４は、スタックポインタ選択回路４０によって制御されて、現在のスタックポインタを使用して、スタックデータストア３５のうちの対応する１つにアクセスする。
【００３７】
各更なるレベルの例外状態に２つの異なるスタック（基本レベルのスタック３５−０’、３５−０’’または３５−０’’’のうちの１つ、および更なるレベルのスタック３５−１、３５−２、３５−３のうちの１つ）へのアクセスを提供することによって、その例外状態の中で稼動している例外ハンドラが、スタックをオーバーフローするリスクを生じることなく安全に初期化されることを可能にするために、各更なるレベルの例外状態に対して安全な専用スタックが提供され、一方、それぞれの基本レベルのスタック３５−０’、３５−０’’または３５−０’’’は、その例外レベルの汎用処理のために使用することができる。可能である場合は必ず、基本レベル（汎用目的）のスタック３５−０’、３５−０’’または３５−０’’’は、専用スタックの負担過多を回避するために使用され、例外ハンドラに対するエントリに関して自由に使用するための余地を専用スタック上に残す。
【００３８】
スタックポインタ選択レジスタ４２は、２つの可能な値を有する、スタックポインタ選択値を記憶してもよい。スタックポインタ選択値が第１の値（例えば、０の値）を有する場合、スタックポインタ選択回路は、現在のスタックポインタとして、基本レベルのスタックポインタレジスタ３０−０の中に記憶された基本レベルのスタックポインタを選択することができる。一方、スタックポインタ選択値が第２の値（例えば、１の値）を有する場合、スタックポインタ選択回路４０は、現在のスタックポインタとして、現在の更なるレベルの例外状態に関連する更なるレベルのスタックポインタを選択することができる。図３は、このスタックポインタ選択値のマッピングが使用される場合のスタックポインタ選択回路４０の動作の例を示す。処理の開始後、ステップ５０で、スタックポインタ選択回路４０は、処理パイプライン４の現在の例外状態を確認する。上述のように、これは、例外コントローラ２０から提供された例外レベル信号の手段による可能性がある。ステップ５０で、現在の例外状態が、基本レベルの例外状態ＥＬ０であると判定される場合、方法は、ステップ５２に進み、スタックポインタ選択回路４０は、現在のスタックポインタとして、基本レベルのスタックポインタレジスタ３０−０の中に記憶された基本レベルのスタックポインタを選択する。処理パイプライン４は、次いで、現在のスタックデータストアとして、基本レベルのスタック３５−０を使用するように制御される。例外状態に例外を受け入れる時、ＳＰＳｅｌは、専用の例外スタックポインタを選択するように配設される。
【００３９】
一方、ステップ５０で、スタックポインタ選択回路４０が、現在の例外状態が更なるレベルの例外状態ＥＬｘ（ｘは、１以上の任意の整数）のうちの１つであると判定する場合、方法はステップ５４に進み、スタックポインタ選択回路４０は、スタックポインタ選択レジスタ４２の中に記憶されたスタックポインタ選択値を読み出す。この実施形態において、スタックポインタ選択値がゼロの場合、方法はステップ５６に進み、基本レベルのスタックポインタが現在のスタックポインタになるように選択され、処理パイプライン４は、基本レベルのスタック３５−０を使用するように制御される。一方、ステップ５４で、スタックポインタ選択値が１の値を有する場合、方法はステップ５８に進み、現在の更なるレベルの例外状態ＥＬｘに対応するスタックポインタＳＰｘが、現在のスタックポインタとして選択され、処理パイプライン４は、現在のスタックデータストアとして、現在の例外状態に対応するスタックデータストア３５−ｘを使用するように制御される。
【００４０】
これ以降、処理パイプライン４がスタックポインタを必要とする場合、スタックポインタ選択回路４０は、（現在のスタックポインタに対応するスタックポインタ値、または現在のスタックポインタを記憶するスタックポインタレジスタ３０のうちの１つに対する参照のいずれかとして）処理パイプライン４に現在のスタックポインタを提供する。
【００４１】
どちらの場合もスタックポインタは現在のスタックポインタであり、例外によって阻止されない限り、各命令の処理を継続する。
【００４２】
図３に示されるように、処理パイプライン４が更なるレベルの例外状態のうちの１つにある場合、スタックポインタ選択レジスタ４２は、どのスタックポインタが現在のスタックポインタであるかを制御する。スタックポインタ選択レジスタ４２の中に記憶された値は、処理パイプライン４によって実行されるスタックポインタ選択命令によって変更することができる。図４は、スタックポインタ選択命令の例示的構文を示す。スタックポインタ選択命令は、スタックポインタ選択レジスタ４２の場所を特定するレジスタ特定子ＳＰＳｅｌおよびスタックポインタ選択レジスタ４２に書き込まれる即値を特定する即値＃Ｉｍｍ１を含む。例えば、即値が０の場合、これは、現在のスタックポインタとして基本レベルのスタックポインタを選択するようにスタックポインタ選択回路４０を制御するようにスタックポインタ選択レジスタ４２を設定することができるが、即値が１の場合、これは、現在のスタックポインタとして更なるレベルのスタックポインタのうちの１つを選択するようにスタックポインタ選択回路４２を制御するようにスタックポインタ選択レジスタ４２を制御することができる。いうまでもなく、値０および値１と、基本レベルおよび更なるレベルのスタックポインタとの間のマッピングは、逆である可能性がある。スタックポインタ選択命令は、即値がレジスタバンク６に書き込まれることなく、スタックポインタ選択レジスタ４２を直接変更する場合がある。代替として、スタックポインタ選択命令は、即値がスタックポインタ選択レジスタ４２に書き込まれる前に、即値がレジスタバンク６に書き込まれることを必要とする場合がある。
【００４３】
図４に示されるスタックポインタ選択命令を提供することによって、プログラマは、例外取扱ルーチンの中にスタックポインタ選択命令を含めて、現在のスタックデータストアが、更なるレベルのスタックデータストア３５−１、３５−２、３５−３から、例外レベルに対するそれぞれの基本レベルのスタックデータストア３５−０’、３５−０’’または３５−０’’’に切り替えられる点を制御することが可能である。図５に示されるように、そのような例外取扱ルーチンは、更なるレベルのスタックデータストア３５−１、３５−２、３５−３のうちの１つが現在のスタックデータストアとして使用される初期部分、および基本レベルのスタックデータストア３５−０が現在のスタックデータストアとして使用される残りの部分を含む。スタックポインタ選択命令の例外取扱ルーチン内の場所は、初期部分および残りの部分の相対的サイズを決定し、例外イベントを安全に処理するために専用スタックが必要とされる程度に依存して、必要に応じて変えることができる。例外取扱ルーチンの初期部分は、例外取扱ルーチンの処理を開始するために、安全な専用スタックストレージを提供するために、更なるレベルのスタックデータストアを使用し、一方、例外取扱ルーチンの残りの部分は、その例外レベルに関係する基本レベルのスタックデータストアを使用して、専用スタックの負担過多を回避する。
【００４４】
スタックポインタ選択レジスタ４２はまた、特定の例外イベントを取り扱うために、複数の対応する例外ハンドラのうちのどれを使用すべきかを選択する際にも有用である可能性がある。例外コントローラ２０は、例外レベルを処理するための多様な例外取扱ルーチンのメモリシステム８内の場所を示す例外ベクトルテーブルを含む場合がある。例外ベクトルテーブルの例は、図６に示される。異なるタイプの例外イベント（例えば、ＡＲＭプロセッサアーキテクチャ同期で知られるように、ＩＲＱ（通常中断）、ＦＩＱ（高速中断）、またはエラー例外イベント）に対して、複数の異なる例外取扱ルーチンは、異なるアドレスオフセット値によって識別される。例外取扱ルーチンは、次いで、例外ハンドラの基本アドレスレジスタの中に記憶された基本アドレスに、対応するアドレスオフセットを追加することによって取得されたメモリアドレスにアクセスすることができる。異なる例外ハンドラは、異なる状況に対処するために提供することができる（例えば、異なるシステムモードは、異なる例外取扱ルーチンを必要とする場合がある）。
【００４５】
例外イベントが現在のレベルの例外状態と同一のレベルの例外状態をターゲットとする場合、例外イベントが発生する時に現在のスタックポインタが、基本レベルのスタックポインタ、または更なるレベルのスタックポインタのうちの１つであるかに依存して選択される、複数の異なる種類の例外ハンドラ（少なくとも１つのスタックオーバーフロー例外ハンドラを含む）を提供することが有用である可能性がある。これは、図６に示され、ここでは、現在のスタックポインタが更なるレベルのスタックポインタのうちの１つである場合、また現在のスタックポインタが基本レベルのスタックポインタである場合それぞれの状況で異なる例外取扱ルーチンを識別するために、異なるアドレスオフセットが提供される。このように、例外コントローラ２０は、スタックポインタ選択レジスタ４２の現在の値に応答して、例外ハンドラのうちのどれが処理されるかを選択することができる。これは、新しい例外イベントが現在の例外状態と同一の例外状態をターゲットとする時、以前に処理された例外取扱ルーチンによって発生したのではなく、現在の例外状態と同一レベルをターゲットとした例外イベントは、以前に処理された例外取扱ルーチンを中断することはないので、以前に処理された例外取扱ルーチンの実行中に問題が発生したことを示すために有用である可能性がある。さらに、スタックポインタ選択レジスタが、現在のスタックポインタが更なるレベルのスタックポインタのうちの１つであることを示す場合、これは、問題が、現在のスタックポインタが基本レベルのスタックポインタに切り替えられた前、すなわち、以前に処理された例外取扱ルーチンの初期部分中に発生したことを示す。したがって、例外イベントの可能性のある理由として、現在使用中の更なるレベルのスタック３５−１、３５−２または３５−３のオーバーフローの可能性がある。通常の例外ハンドラが次いでロードされると、このハンドラは、既にオーバーフローしているスタックに変数をプッシュしようとする場合があり、これは、また別の例外をトリガする可能性があり、このために自身がスタック上に変数をロードしようとする場合があり、すなわち、システムを再帰的例外エントリにさせてしまう。そのような例外イベントの再帰的呼び出しを回避するために、スタックオーバーフローの稀な事例に対処するために、スタックオーバーフロー例外ハンドラが提供され、この例外ハンドラは、ターゲットの例外イベントと同一の例外レベルから例外イベントが呼び出された場合に呼び出され、スタックポインタ選択レジスタ４２は、現在のスタックポインタが更なるレベルのスタックポインタのうちの１つであることを示す。このように、この状況は、レジスタを使用する通常の様式は、スタック上のそれらのレジスタの中の旧値を保存することになり、このために再帰的状態につながる可能性があるので、レジスタを一切使用する必要性がなく、基本スタックポインタを使用していた例外状態内の例外とは区別することができる。したがって、スタックオーバーフロー例外取扱ルーチンがスタックを修正できない場合であっても、プロセッサに再帰的例外エントリの無限ループを繰り返させるのではなく、エラー状況の完全な診断情報およびより明確な取り扱いを達成することができる。
【００４６】
図７は、例外イベントを取り扱う方法を示す。最初に、ステップ１００で、処理パイプライン４は、例外状態ＥＬｍ（ｍは、０以上の整数である）のうちの１つでデータを処理している。すなわち、パイプライン４は、例外状態のうちのいずれかでデータを処理している。次いで、ステップ１０２で、特定の更なるレベルの例外状態ＥＬｎ（ｎは１以上の整数であり、さらにｎは、ｍ以上でもある（ｎがｍより小さい場合、例外イベントは現在の処理を中断することはない））をターゲットとする、例外イベントが発生する。ステップ１０４で、例外コントローラ２０は、処理パイプライン４を例外状態ＥＬｎに入れ（または、ｎ＝ｍの場合、処理パイプライン４を以前と同一の例外状態に維持する）、ターゲット例外状態ＥＬｎに対応する例外戻りデータを例外リンクレジスタ２６および処理状態保存レジスタ２８に記憶する。記憶された例外戻りデータは、システムが、例外イベントの処理が完了した後、初期の処理に戻ることを可能にするためのデータである。
【００４７】
ステップ１０６で、例外コントローラ２０は、例外イベントの発生時の例外状態ＥＬｍが、ターゲットの例外状態ＥＬｎと同一であるかを判定する。初期およびターゲットの例外状態が同一ではない場合、ステップ１０８で、スタックポインタ選択レジスタ４２は、１の値に設定され、ターゲットの例外状態ＳＰｎに関連するスタックポインタが現在のスタックポインタであることを示す。例外コントローラ２０は、次いで、ステップ１１０で例外イベントに対応する例外取扱ルーチンを選択し、処理パイプライン４を制御して、例外取扱ルーチンの実行を開始する。処理パイプライン４は、次いで、ターゲットの例外状態ＥＬｎに関連するスタック３５−ｎを使用して、例外取扱ルーチンの処理を継続する。
【００４８】
例外取扱ルーチンの処理は、次いでステップ１１２まで継続し、ここで、例外取扱ルーチンの初期部分が完了したことが判定される。例外取扱ルーチンの初期部分がいつ完了したかを判定する１つの様式は、図４に示されるスタックポインタ選択命令を提供することによる。代替として、スタックポインタ選択回路４０内にカウンタを提供することができ、例外取扱ルーチンの開始から処理サイクルまたは命令の既定数をカウントし、カウンタが既定値に到達すると、初期部分の終了をトリガする。基本レベルのスタックポインタの内容は次いで、基本レベルのスタックポインタを使用するように切り替える前に、この例外レベルで使用された基本レベルのスタックデータストアをポイントするように変更される。例外取扱ルーチンの初期部分が完了すると、ステップ１１４で、スタックポインタ選択レジスタ４２に記憶されたスタックポインタ選択値が０に設定され、したがって、現在のスタックポインタは、基本レベルのスタックポインタ０になる。例外取扱ルーチンの残りの部分は、次いで、現在のスタックとしてそれぞれの基本レベルのスタックデータストア３５−０’、３５−０’’または３５−０’’’を使用して処理される。処理は、次いで、例外取扱ルーチンがステップ１１６で終了するまで継続する。次いで、ステップ１１８で、例外戻りデータは、ターゲットの例外状態ＥＬｎに対応する例外リンクレジスタ２６および処理状態保存レジスタ２８からロードされ、処理パイプライン４は、次いで、初期例外状態ＥＬｍに戻される。処理は、次いでステップ１２０で、例外状態Ｅｌｍで継続する。方法は、次いで終了する。
【００４９】
ステップ１０６で、初期例外状態ＥＬｍが例外イベントに関連するターゲットの例外状態ＥＬｎと同一である場合、ステップ１２２で、スタックポインタ選択レジスタ４２に記憶されたスタックポインタ選択値が１であるか０であるかが判定される（図７は、０が基本レベルのスタックポインタが使用されていることを示し、１が更なるレベルのスタックポインタが使用されていることを示す実施形態を示すが、０および１の意味は逆にすることができることが明らかである）。スタックポインタ選択値が０の場合、処理はステップ１０８〜１２０に継続する。ｍおよびｎが等しい場合に中断コントローラ１２０によって選択された特定の例外取扱ルーチンは、ｍおよびｎが等しくない場合に選択された例外取扱ルーチンとは異なる場合があるが（これは、中断コントローラのベクトルテーブルに設定されたアドレスオフセットに依存する）、ステップ１０８〜１２０に示されるスタックポインタ処理は同一である。
【００５０】
一方、ステップ１２２で、スタックポインタ選択値が１に等しい場合、ステップ１２４で、例外コントローラ２０は、スタックオーバーフロー取扱ルーチンに対応する例外ベクトルを選択し、処理パイプライン４を制御して、スタックオーバーフローを処理するためにスタックオーバーフロー取扱ルーチンを実行する。これは、スタック３５−ｎのスタックオーバーフローのリスクが存在するためである。スタックオーバーフロー取扱ルーチンは、少なくとも、（いくつかのコンテキストデータを記憶して、そのデータが失われることを防ぐことによって）リセットに対してシステムを準備することが可能である。ステップ１２６で、スタックオーバーフロー例外がリカバリしたかが判定される。リカバリが達成され、処理が通常に継続できる場合、方法はステップ１０８に進み、通常の例外取扱ルーチンが、スタックポインタ選択値がゼロの場合と同じ様式で実行される。しかしながら、リカバリが達成されていない場合、処理は終了する。
【００５１】
このように、図７に示された技法は、例外取扱ルーチンが安全に開始されることを確保するように、例外取扱ルーチンの初期部分のために安全な専用スタックが使用されることを可能にする。これによって、共有スタックのオーバーフローに起因して例外取扱ルーチンが開始に失敗することを回避する。例外取扱ルーチンの初期部分が完了後、処理は、専用の安全なスタックのリソースを節約するために、基本レベルのスタックを使用して継続する。オーバーフローが発生してしまった可能性がある、起こる可能性が低い事象の場合、この状況は、現在の例外状態をターゲットとした例外が、現在のスタックが更なるレベルのスタックのうちの１つであることをスタックポインタ選択値が示す時点で発行されているという事実によって識別することができ、この場合、スタックが実際にオーバーフローしているか、していないかに関わらず、スタックオーバーフローに対して防御するために、緊急スタックオーバーフロー取扱ルーチンを実行することができる。
【００５２】
図７の処理中のどの時点であっても、更なる例外イベントが発生し、例外コントローラ２０の判定が、現在の処理を中断するのに十分高い例外レベルである場合、図７の方法は、ステップ１００で実施された処理である、その前に実行された処理、およびステップ１０２で発生している例外イベントである、更なる例外イベントから再開する。例えば、例外イベントが図７のステップ１０８と１００との間で発生し、現在の例外状態と同一の例外状態をターゲットとする場合、これは、スタックポインタ選択値が、まだ現在のスタックポインタが更なるレベルのスタックポインタであることを示す１に設定されるであろうために、ステップ１０６および１２２〜１２６の処理をトリガすることができる可能性がある。
【００５３】
図８は、図７の方法に従う例外イベントの処理の例を示す。例えば、図８のステップ１で、処理は、基本レベルのスタックポインタＳＰ０を使用して、基本レベルの例外状態ＥＬ０で実行される。図８のステップ２で、更なるレベルの例外状態ＥＬ２をターゲットとした例外イベントが、例外コントローラ２０によって検出される。システムは、次いで、更なるレベルの例外状態ＥＬ２に切り替えられ、例外戻りデータは、例外状態ＥＬ２に関連する例外戻りレジスタ２６、２８に記憶される（図７のステップ１０４による）。図８のステップ３で、次いで、スタックポインタレジスタ３０−２に記憶されたスタックポインタＳＰ２が選択され、例外取扱ルーチンは、その場所がスタックポインタＳＰ２によって示されたスタック３５−２を使用して処理される。図８のステップ４では、スタックポインタ選択命令は、例外取扱ルーチン内部で遭遇するので、これによって、現在のスタックポインタを、基本レベルのスタックポインタレジスタ３０−０の中に記憶された基本レベルのスタックポインタＳＰ０に切り替える（図７のステップ１１４による）。図８のステップ５で、例外取扱ルーチンは、基本レベルのスタックデータストア３５−０を使用して継続する。図８のステップ６で、例外取扱ルーチンは終了し、処理は、例外状態ＥＬ２に対応する例外戻りレジスタ２６、２８の中に記憶された例外戻りデータを使用して、基本レベルの例外状態ＥＬ０での本来の処理に戻る。図８のステップ７で、処理は、基本レベルのスタックポインタＳＰ０によって示された基本レベルのスタック３５−０を使用して、基本レベルの例外状態ＥＬ０で継続する。
【００５４】
図９は、スタックオーバーフロー取扱ルーチンが必要な場合、図７の方法に従い、例外イベントを処理する時に例外状態を切り替える別の例を示す。図９のステップ１で、処理は、基本レベルのスタックポインタＳＰ０を使用して、基本レベルの例外状態ＥＬ０で実行される。図９のステップ２で、更なるレベルの例外状態ＥＬ１をターゲットとした例外イベントが受信される。図７のステップ１０４によると、システムは、更なるレベルの例外状態ＥＬ１に切り替えられ、例外戻りデータは、更なるレベルの例外状態ＥＬ１に関連する例外戻りレジスタ２６、２８の中に記憶される。例外コントローラ２０は、次いで、例外イベントに関連する例外取扱ルーチンを選択し、例外状態ＥＬ１に関連するスタックポインタレジスタ３０−１の中に記憶された更なるレベルのスタックポインタＳＰ１を使用して、選択された例外取扱ルーチンを処理する。しかしながら、例外取扱ルーチンの初期部分が完了する前に、別の例外イベントが、これも同一の例外状態ＥＬ１をターゲットとして発生する。このように、図７の方法が再開され、図７のステップ１０６および１２２で、現在の例外状態ＥＬ１およびターゲットの例外状態ＥＬ１は同一であり、スタックポインタ選択レジスタ４２の中に記憶されたスタックポインタ選択値は、現在のスタックポインタが更なるレベルのスタックポインタＳＰ１であることを示すことが判定される。すなわち、図９のステップ５で（および図７のステップ１２４に従って）、スタックオーバーフロー取扱ルーチンは、図９のステップ４で発生した例外イベントが、現在の例外状態に関連するスタック３５−１のオーバーフローを示したという場合に備えて実行される。スタックオーバーフロー取扱ルーチンは、次いで、スタック３５−１を修復するか、または、少なくとも、システムを、多量のデータを失うことなく処理を停止することができる状態に入れるか、のいずれかを実行する。必要な場合、一方で図９のステップ６（図７のステップ１２６）で適切な診断情報を提供する間に、処理は中止される。一方、処理が継続できる場合は、本来の例外ハンドラは、更なるレベルのスタックポインタＳＰ１を使用して、図９のステップ７で、更なるレベルの例外状態ＥＬ１で処理される。例外取扱ルーチンの初期部分が完了した後、図９のステップ８で、現在のスタックポインタは、基本レベルのスタックポインタＳＰ０に切り替えられる。次いで例外取扱ルーチンの最後に、図９のステップ９で、処理は例外戻りレジスタ２６、２８からロードされた例外戻りデータを使用して、基本レベルの例外状態に戻る。処理は、次いで、基本レベルのスタックポインタＳＰ０を使用して、基本レベルの例外状態で継続する。
【００５５】
図１０は、使用されてもよい仮想マシン実装を例示する。前述の実施形態は、対象の技法をサポートする特定の処理ハードウェアを動作するための装置および方法という面で本発明を実装するが、ハードウェアデバイスのいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム５１０をサポートするホストオペレーティングシステム５２０を稼動するホストプロセッサ５３０上で稼動する。一般的に、妥当な速度で実行する仮想マシン実装を提供するには、大型の強力なプロセッサが必要であるが、そのような手法は、互換性または再使用を理由として、別のプロセッサにネイティブなコードを稼動することが所望される場合等、一定の条件において正当化される場合がある。仮想マシンプログラム５１０は、仮想マシンプログラム５１０によってモデル化されているデバイスである、実際のハードウェアによって提供されることになるアプリケーションプログラムインターフェースと同一である、アプリケーションプログラム５００に対してアプリケーションプログラムインターフェースを提供する。このように、上記のメモリアクセスの制御を含めて、プログラム命令は、それらの仮想マシンハードウェアとの相互作用をモデル化するように、仮想マシンプログラム５１０を使用して、アプリケーションプログラム５００内部から実行される場合がある。
【００５６】
本発明の例示的な実施形態が、添付の図面を参照しながら本明細書に詳細に説明されたが、本発明はこれらの正確な実施形態に限定されないこと、また、添付の特許請求の範囲により定義される本発明の範囲から離れることなく、当業者によって多様な変更および変形を行うことができることが理解される。
【符号の説明】
【００５７】
１０  フェッチパイプライン段階
１２  解読パイプライン段階
１４  発行段階
１６  実行段階
１８  書き戻し段階
２０  例外コントローラ
２４  コンテキストレジスタ
２６  例外リンクレジスタ（ＥＬＲ）
２８  処理状態保存レジスタ（ＳＰＳＲ）
３０  スタックポインタレジスタ
３５  スタックデータストア
４０  スタックポインタ選択回路
４２  スタックポインタ選択レジスタ
１２０  中断コントローラ
５００  アプリケーションプログラム
５１０  仮想マシンプログラム
５２０  ホストオペレーティングシステム
５３０  ホストプロセッサ
【図１】
2013522750.tif 000003
【図２】
2013522750.tif 000004
【図３】
2013522750.tif 000005
【図４】
2013522750.tif 000006
【図５】
2013522750.tif 000007
【図６】
2013522750.tif 000008
【図７】
2013522750.tif 000009
【図８】
2013522750.tif 000010
【図９】
2013522750.tif 000011
【図１０】
2013522750.tif 000012
【国際調査報告】
2013522750.tif 000013
2013522750.tif 000014