(57)【特許請求の範囲】
【請求項１】
データ処理システムを動作させる方法であって：
所定の第１条件が発生したことを示す第１信号を受信する段階；
スタック・ポインタ・レジスタから現在のアドレス値を検索する段階；
前記現在のアドレス値を、前記現在のアドレス値より低く、最も近い０−モジュロ−４アドレスに整合させる段階；および
メモリにフォーマット・フィールド値を記憶する段階であって、前記フォーマット・フィールドが、前記所定の第１条件が発生したことを示す前記第１信号の受信時に、前記現在のアドレス値が整合された方式(manner)を示す段階；
によって構成されることを特徴とする方法。
【請求項２】
複数のアドレス値および複数のデータ値を提供するバス手段；
例外動作がいつ発生したかを判定し、それに応答して例外処理信号を提供する制御手段；
前記例外動作が発生した場合、アクセスされる現在のアドレス値を示すレジスタ；
前記レジスタに結合され前記現在のアドレス値の第１部分を受信し、前記制御手段に結合され前記例外処理信号を受信する論理回路であって、前記現在のアドレス値を選択的に修正して調整されたアドレス値を形成する論理回路；および
前記レジスタに結合され前記現在のアドレス値の少なくとも前記第１部分を受信するフォーマット生成回路であって、前記現在のアドレス値の前記第１部分を修正してスタック整合値を生成し、前記例外動作が発生した場合に現在のアドレス値の整合を知らせるフォーマット生成回路；
によって構成されることを特徴とするデータ・プロセッサ。
【請求項３】
第１割込信号を生成する制御手段；
現在のアドレス値を記憶および提供するスタック・ポインタ・レジスタ；
前記制御手段に結合され前記第１割込信号を受信し、前記スタック・ポインタに結合され前記現在のアドレス値の第１部分を受信し、調整されたアドレス値を作成する論理回路；および
前記スタック・ポインタ・レジスタに結合され前記現在のアドレス値の第２部分を受信する変換器回路であって、前記調整されたアドレス値に加算されると前記現在のアドレス値を生成するフォーマット・フィールドを生成する変換器回路；
によって構成されることを特徴とするデータ・プロセッサ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、一般にデータ処理システムに関し、さらに詳しくは、データ処理システム内のスタック・ポインタに関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
データ処理システムにおいては、スタック・ポインタはプログラム変数および一時的格納のメモリ位置を定義するメモリ・アドレス・ポインタとして通常用いられるハードウェア・レジスタである。従来、プログラミング・モデル内の１つ以上のレジスタが、システム・スタック・ポインタとしてハードウェアにより用いられる。多くのシステムでは、スタック・ポインタは、ある一定の動作の実行中に、命令集合により暗示的に用いられる。一般に、このアドレス・レジスタは、データをメモリ・スタック上に「押し出す」ことにより、関数間でオペランドを伝えることのできる現在のスタック・フレームの最上位を定義する。この押し出し動作は、スタック・ポインタを減分する段階と、次にこのデータを新しいスタック・ポインタ・アドレスにより定義される位置にコピーする段階とによって構成される。データがルーチンにより用いられた後で、スタック・ポインタを増分するだけでデータの割当が取り消され、前の値に戻る。この過程は、スタックの「ポッピング」と呼ばれる。
【０００３】
一般に、これらのスタック・ポインタがメモリ・アドレスを定義するので、ユーザ・プログラムは、スタック最上位を定義するスタック・ポインタの内容を日常的に処理する。バイト，ワード，ロングワードなどの種々の寸法のオペランドがスタック上に押し出され、スタック最上位はいつでも任意の可能な整合(alignment) を指し示すことができる。任意のオペランド・アドレス整合に関して任意のオペランド寸法の自動的ハードウェア支援を行うプロセッサは、不整合に対応するといわれる。メモリ・アドレスがその本来の境界(boundary)に対応しない場合、オペランドは不整合状態(misalignment)にあるといわれる。本来の境界は、０−モジュロ−（オペランド寸法）のアドレスとして単純に定義される。たとえば、メモリ・バイト・アドレスが０−モジュロ−２の場合は、１６ビット・ワードのオペランドが整合され、メモリ・バイト・アドレスが０−モジュロ−４の場合は３２ビット・ロングワードが整合される。この定義に合わない整合は不整合オペランドとなる。
【０００４】
多くのプロセッサは、種々の例外処理に対するハードウェア支援を備える。障害とも呼ばれる、これらの例外には、通常、割込，システム呼出および演算エラー条件が含まれる。その他の例外も起こることがある。一般に、例外が検出されると、プロセッサは障害時に装置のステータスを詳細に示す特殊な例外フレームを、システム・スタック最上位に作成する。この例外スタック・フレームが作成されると、プロセッサは例外の種類により特定される命令アドレスに制御を転送することにより、特別例外処理ルーチンに制御を渡す。一般に、例外処理ルーチンは、ある種の修正動作を開始することなどにより、障害を処理して、例外時に実行していたアプリケーションに戻る。
【０００５】
多くのプロセッサは、ある種の特殊なエラー検出を採用して、他の例外処理の間に特定の破壊的障害条件が起こると、全体システム不良を生成して、プロセッサを停止させるだけにする。特定の境界におけるシステム・スタック・ポインタの整合は、この特殊な破壊的障害条件に含まれる。この確率を補償するために、従来技術によるシステムはいくつかの異なる解決法を実現してきたが、これらは大量のハードウェアを必要とする。たとえば、多くの従来技術による解決法は、オペランドが誤整合されないことを保障するハードウェア回路を必要とする。これらの解決法は、プロセッサの動作モードに基づいて複数のスタック・ポインタを組み込むのが普通である。この動作モードは、通常、実行プログラムに関する特権レベルを定義し、最も簡単な形では、２つのレベルの特権、すなわちスーパーバイザ（最高特権）とユーザ（最小特権）により構成されるのが普通である。スーパーバイザ・モードでの実行は、システムのすべての資源に対して完璧なアクセスが可能であり、ユーザ・モードの実行は、ある種のハードウェア資源に対するアクセスが拒否される。さらに、多くのプロセッサは、データ処理システム内のスタック・ポインタの必要な整合を強化するための専用ハードウェア回路構成を提供する。従来技術の解決法ではそれぞれ、専用ハードウェア回路構成とそれに相当する諸費用が必要となる点に留意すること。
【０００６】
このような高価なハードウェア回路構成を組み込むことができないデータ処理システムのために、ソフトウェアによる解決法が開発されている。このようなソフトウェアによる解決法を用いる際は、同時発生する例外は許されない。言い換えると、データ処理システムにある例外が取り込まれると、他の例外は許されないということである。この場合、他の例外が隠され、アサートされると、装置状況のステータスおよびプログラム・カウンタ情報が更新される。かくして、データ処理システムは最初の例外が処理される前の状態に戻ることができなくなる。この第２番目の種類の従来技術のシステムでは、データ処理システムはすべての例外を正しく有効に処理することができない。
【０００７】
現在ある従来の解決法は、例外がアサートされ処理された後で、データ処理システムを初期の状態に正しく回復するためには、大量の追加ハードウェア回路構成が必要になる。従って、データ処理システムの設計者がオペランドの誤整合(misalignment)に対するハードウェア支援を任意で備えることができ、しかもデータ処理システムがシステム・スタック・ポインタ整合に関わらずすべての例外を正しく処理して、例外処理の後で初期の状態を回復することができる解決法が必要である。
【０００８】
【実施例】
本発明は、データ・プロセッサと、単独のシステム・スタック・ポインタを用いて、システム・スタックおよびユーザ・スタック・オペランドの整合に対するハードウェア支援が任意(optional)の場合に、システム・スタック動作およびユーザ・スタック動作の両方の記録を作成するデータ処理システムの動作方法とを提供する。この単独のシステム・スタック・ポインタは、自己整合スタック・ポインタとして実現される。簡単にいうと、この自己整合スタック・ポインタは現在のアドレス設定より低い、最も近い０−モジュロ−４アドレスに自身を自動的に整合して、誤整合されたオペランドに対してハードウェア支援がなくても整合システム・エラーが起こらないようにする。自動整合が行われると、本発明のデータ・プロセッサは、例外スタック・フレーム内に４ビット・フォーマット・フィールドを記憶し、障害時のスタック・ポインタの整合に関する情報を知らせる。例外が処理されて、例外からの復帰（RTE ：return from exception ）命令が実行されると、プロセッサは、例外スタック・フレームに記憶された４ビット・フォーマット・フィールドを用いて、スタック・ポインタを例外時の当初の値に回復する。
【０００９】
本発明は、データ・プロセッサと、単独のスタック・ポインタを用いてデータ処理システムのスーパーバイザ・スタック・エリアおよびユーザ・スタック・エリアの両方を支援する動作方法とを提供する。さらに本発明においては、オペランドの誤整合専用のハードウェアを実現することもできるが、必須ではない。例外処理の間に、この単独のスタック・ポインタが自己整合を行うことができるので、データ・プロセッサは、スタック・ポインタの誤整合中に例外が起こっても、破滅的なエラーがデータ処理システムに起こらないようにすることができる。本発明の動作は、後で詳細に説明する。
【００１０】
以下には、本発明を実現するデータ処理システムの構成と動作を詳細に述べる。
【００１１】
以下の本発明の構成の説明においては、「バス」という用語は、データ，アドレス，制御またはステータスなど１つ以上の様々な種類の情報を転送するために用いられる複数の信号または導体を指す。「アサート」および「ネゲート」という用語は、信号，ステータス・ビットまたは同様の装置を論理的に真の状態、または論理的に偽の状態にすることをそれぞれ示す。論理的に真の状態が論理レベル１であれば、論理的に偽の状態は論理レベル０になる。論理的に真の状態が論理レベル０であれば、論理的に偽の状態は論理レベル０ということになる。
【００１２】
さらに、数字の前に「＄」という記号がつくと、その数値が１６進数または基底１６の形で表されることを示す。数字の前に「％」という記号がつくと、その数値が２進数（バイナリ値）または基底２の形で表されることを示す。
【００１３】
ここで図１を参照して、図１は、本発明のある実施例によるデータ処理システム５を示す。データ処理システム５は、データ・プロセッサ３および外部開発システム７によって構成される。データ・プロセッサ３は、システム・バス・コントローラ８，プロセッサ・コア９，スレーブ・モジュール１２，スレーブ・モジュール１３，マスタ・モジュール１４およびデバッグ・モジュール１０を備える。システム・バス・コントローラ８は、E バスを介して外部装置（ここでは図示せず）に結合される。システム・バス・コントローラ８は、S バスを介してスレーブ・モジュール１２およびスレーブ・モジュール１３に結合される。S バスはスレーブ・モジュール・バスである。システム・バス・コントローラ８は、プロセッサ・コア９とマスタ・モジュール１４とに、M バス２３を介して結合される。M バス２３はマスタ・モジュール・バスである。
【００１４】
プロセッサ・コア９は、中央処理装置（CPU: central processing unit）２，メモリ管理ユニット（MMU: memory management unit ）／コントローラ４およびメモリ６によって構成される。オペランド誤整合ユニット５は、プロセッサ・コア９に選択的に具備される。中央処理装置２，MMU ／コントローラ４，メモリ６およびデバッグ・モジュール１０はそれぞれ、K バス２５を介して互いに結合される。中央処理装置２およびメモリ６も両方とも、MMU ／コントローラ４にも直接的に接続される。MMU ／コントローラ４は、M バス２３を介してデータ処理システム５の残りの部分に情報を提供する。中央処理装置２は、デバッグ・モジュール１０に結合され、内部制御バスを提供する。CPU ２は、外部装置（ここでは図示せず）からのリセット信号も受信する。デバッグ・モジュール１０は、外部制御バスを用いて外部開発装置７と双方向に通信する。外部開発装置７は、データ処理システム５の外部にある任意の装置である。
【００１５】
図２は、CPU ２の部分をより詳細に図示する。CPU ２は、レジスタ２０８，命令取出パイプライン２１０，バッファ２１６，オペランド実行パイプライン２２０およびマルチプレクサ（MUX ）２２２を備える。命令取出パイプライン２１０は、命令アドレス生成回路２０２，命令取出回路２０４，FIFO命令バッファ２０６およびマルチプレクサ２１９によって構成される。また、オペランド実行パイプライン２２０は、オペランド取出回路２１２，アドレス生成／実行回路２１４およびパイプライン制御論理２１８によって構成される。
【００１６】
命令取出パイプライン２１０の命令アドレス生成回路２０２は、命令アドレス信号をマルチプレクサ２２２に提供する。マルチプレクサ２２２は、K バス２５上でのその後のトランザクションのために、命令取出パイプライン２１０からの命令アドレスとオペランド実行パイプライン２２０からのオペランド・アドレスとの間で選択を行う。レジスタ２０８は、KADDR （K バス・アドレス）信号を出力する。命令取出パイプライン２１０の命令取出回路２０４は、オペランド取出回路２１２とバッファ２１６とに結合され、バッファリングされたKRDATA信号を受信する。命令取出回路２０４はオペランド取出回路２１２に結合され、命令取出アドレスを提供する。命令取出回路２０４は、FIFO命令バッファ２０６およびマルチプレクサ２１９にも結合され、命令バッファ書込データ信号を提供する。FIFO命令バッファ２０６は、マルチプレクサ２１９に結合され、命令バッファ読出データ信号を提供する。マルチプレクサ２１９は、オペランド実行パイプライン２２０のオペランド取出回路２１２に結合され、命令信号を提供する。
【００１７】
オペランド実行パイプライン２２０のパイプライン制御論理２１８は、オペランド取出回路２１２に結合され、反転例外処理信号を提供する。パイプライン制御論理２１８は、アドレス生成／実行回路２１４にも結合され、制御バスを提供する。パイプライン制御論理２１８は、オペランド取出回路２１２とアドレス生成／実行回路２１４の両方に結合され、ベクトル信号を提供する。オペランド実行パイプライン２２０のアドレス生成／実行回路２１４は、マルチプレクサ２２２に結合され、オペランド・アドレス信号を提供する。同様に、アドレス生成／実行回路２１４は、バッファ２１６に結合され、オペランド書込データ信号を提供する。バッファ２１６は、KRDATA（K バス読出データ）信号とKWDATA（K バス書込データ）信号とを提供する。KRDATA，KWDATAおよびKADDR 信号は、それぞれK バス２５に送られる。
【００１８】
図３は、オペランド取出回路２１２をより詳細に図示する。オペランド取出回路２１２は、レジスタ２２４，マルチプレクサ１（MUX ）２２６，レジスタ・ファイル２２８，プログラム・カウンタ・レジスタ２２９，マルチプレクサ２（MUX ）２３０，マルチプレクサ２３１，マルチプレクサ３（MUX ）２３２，加算器２３３，レジスタA ３４およびレジスタB ２３６によって構成される。
【００１９】
命令信号が、図２のマルチプレクサ２１９からレジスタ２２４に送られる。図３のレジスタ２２４は、マルチプレクサ１−２２６の第１入力に結合され、ベクトル信号はマルチプレクサ１−２２６の第２入力に結合される。マルチプレクサ１−２２６は、レジスタ２２４に記憶された命令により特定されるように、定数と直接的オペランドとをマルチプレクサ２−２３０およびマルチプレクサ３−２３２に提供する。実行結果信号がレジスタ・ファイル２２８と、マルチプレクサ２−２３０およびマルチプレクサ３−２３２の各々とに結合される。レジスタ・ファイル２２８は、マルチプレクサ２−２３０に結合され、「A 」信号を提供し、マルチプレクサ３−２３２に結合されて「B 」信号を提供する。また、レジスタ・ファイル２２８は、SP(1:0) 信号を提供する。SP(1:0) 信号は、ビット０とレジスタ・ファイル２２８に記憶されたスタック・ポインタ値の１つを提供する。マルチプレクサ２−２３０はレジスタA ２３４に結合され、マルチプレクサ３−２３２はレジスタB ２３６に結合される。レジスタA ２３４は、RA信号を提供する。レジスタB ２３６はRB信号を提供する。RA信号およびRB信号は、登録された入力オペランドとしてアドレス生成／実行回路２１４に送られる。
【００２０】
命令取出アドレス信号がマルチプレクサ２３１の第１入力に送られる。マルチプレクサ２３１の出力はプログラム・カウンタ・レジスタ２２９に送られる。プログラム・カウンタ・レジスタは、出力としてPC（プログラム・カウンタ）信号を加算器２３３の入力に提供する。加算器２３３は、次の順次プログラム・カウンタ値をマルチプレクサ２３１の第２入力に接続された出力と共に計算するために用いられる。CPU ２が命令を実行すると、プログラム・カウンタ・レジスタ２２９の内容は、レジスタ２２４に記憶された命令の命令アドレスを表す。
【００２１】
図４は、レジスタ・ファイル２２８をより詳細に図示する。レジスタ・ファイル２２８は、一般に、CPU 内に組み込まれたすべてのプログラム可能汎用装置レジスタによって構成される。レジスタ・ファイル２２８は、通常は、レジスタ２４０，レジスタ２４２などの複数のレジスタ，スタック・ポインタ２４４，マルチプレクサ２４６，マルチプレクサ２４８，AND ゲート２７２およびAND ゲート２７４によって構成される。実行結果信号が、レジスタ２４０，レジスタ２４２およびスタック・ポインタ２４４の各々に送られる。レジスタ２４０，レジスタ２４２およびスタック・ポインタ２４４の各々の内容と、この図には特に図示されないがレジスタ・ファイル２２８に含まれるその他のレジスタの内容とが、マルチプレクサ２４６，２４８の各々に送られる。マルチプレクサ２４６は、「A 信号を、マルチプレクサ２４８は「B 」信号を提供する。
【００２２】
スタック・ポインタ２４４は、システム・スタック・ポインタにより定義されるプログラム可能レジスタであって、スタック・ポインタ・レジスタの内容の低次の２ビットをSP(1:0) として提供する。これらの低次ビットは、３２ビット幅のアドレス・スペース内のバイト・アドレスを定義する。SP(1) 信号は、レジスタ・ファイル２２８のスタック・ポインタ２４４内に記憶されたスタック・ポインタ値のビット１を提供する。同様に、SP(0) 信号は、レジスタ・ファイル２２８のスタック・ポインタ２４４内に記憶されたスタック・ポインタ値のビット０を提供する。SP(1) 信号はAND ゲート２７２の第１入力に送られ、反転例外処理信号がAND ゲート２７２の第２入力に送られる。AND ゲート２７２の出力はマルチプレクサ２４８の入力に結合される。またSP(0) 信号はAND ゲート２７４の第１入力に送られ、反転例外処理信号はAND ゲート２７４の第２入力に送られる。図５は、アドレス生成／実行回路２１４をさらに詳細に図示する。アドレス生成／実行回路２１４は、マルチプレクサ４−２５０，マルチプレクサ５−２５２，論理回路２５３，演算論理ユニット（ALU ：arithmetic logic unit ）２５４，その他の実行エンジン回路２５６，ステータス・レジスタ２５７およびマルチプレクサ６−２５８によって構成される。
【００２３】
オペランド取出回路２１２により提供されるRA信号はマルチプレクサ４−２５０，その他の実行エンジン回路２５６およびマルチプレクサ６−２５８に結合される。オペランド取出回路２１２により提供されるRB信号は、マルチプレクサ５−２５２，他の実行エンジン回路２５６およびマルチプレクサ６−２５８に結合される。マルチプレクサ４−２５０およびマルチプレクサ５−２５２は、それぞれALU ２５４に結合される。ALU ２５４は、マルチプレクサ６−２５８に結合され、実行結果信号を提供する。マルチプレクサ６−２５８は、オペランド・アドレス信号を提供する。ALU ２５４の出力は実行結果信号であり、マルチプレクサ６−２５８の入力に結合される。マルチプレクサ６−２５８は、次にオペランド・アドレス信号を提供する。論理回路２５３はステータス・レジスタ２５７に結合され、ステータス・レジスタ２５７はSR（ステータス・レジスタ）信号を提供する。これは、プロセッサの特権レベルと様々な制御機能とを定義するプログラム可能レジスタである。これは、他のアーキテクチャではプロセッサ・ステータス・ワードとも呼ばれる。また、SP(1:0) 信号，PC信号およびSR（ステータス・レジスタ）信号は、他の実行エンジン回路２５６に送られる。他の実行エンジン回路２５６は、オペランド書込データ信号および実行結果信号を提供する。
【００２４】
図６は、他の実行エンジン回路２５６をより詳細に図示する。他の実行エンジン回路２５６は、論理２５９，マルチプレクサ２６０，レジスタ２６１およびレジスタ２６２によって構成される。SP(1:0) 信号が論理２５９の入力に送られる。論理２５９の出力は、マルチプレクサ２６０に結合され、フォーマット信号を提供する。SR，PC，フォーマット，ベクトルおよびSP(1:0) 信号はマルチプレクサ２６０に送られる。マルチプレクサ２６０はレジスタ２６２に結合される。レジスタ２６２は、オペランド書込データ信号を提供する。また、RB信号がレジスタ２６１に送られる。レジスタ２６１は、被検索フォーマット信号を提供し、さらに実行結果信号も提供する。
【００２５】
データ処理システム５の動作中は、プロセッサ・コア９がK バス２５を用いてCPU ２，MMU ／コントローラ４およびメモリ６を接続する。さらに本発明においては、ユーザはオペランド誤整合ユニット５を具備することを選択することができる。オペランド誤整合ユニット５をデータ・プロセッサ３に含める場合は、K ス２５がそれをCPU ２，MMU ／コントローラ４およびメモリ６の各々と接続する。本発明のこの実施例においては、K バス２５は高速の単サイクル・アクセス・バスである。メモリ６は、ランダム・アクセス・メモリ（RAM ），読み取り専用メモリ（ROM ），キャッシュ・ブロックおよびこれらの任意の組み合わせを備えることができる。その他のすべてのシステム・モジュールおよび周辺機器は、M ス２３を介してプロセッサ・コア９に結合される。M バス２３は、内部多重マスタ・バスで、複数のバス・マスタの１つにより開始されるデータ転送を実行するために用いられる。システム・バス・コントローラ８は複数の機能を提供する。システム・バス・コントローラ８は、外部E バスがある場合は、内部M バス２３と外部E バスとの間のインターフェースとなる。さらに、システム・バス・コントローラ８は、S バス上のすべてのデータ転送を制御する焦点として機能する。S バスは、タイマなど簡単なスレーブ周辺モジュール（１２，１３）と、シリアル通信チャネルと、メモリとをデータ処理システム５内に接続するために用いられる。
【００２６】
本発明においては、データ・プロセッサ３は、数層のバス帯域幅を有し、データ転送のための対費用効果の良い機構を提供する。プロセッサ・コア９は、性能を最大限にするために、高速単サイクルK バス２５と相互接続される。この高速バスに直接結合されない転送については、M バス２３がプロセッサ・コア９およびマスタ・モジュール１４などの任意の内部バス・マスタからの帯域幅を提供する。システム・バス・コントローラ８は、内部M バス２３と外部E バス（ある場合）との間の接続を行い、さらにスレーブ・モジュール１２，１３などのスレーブ周辺モジュールのための低コストで低帯域幅のすべてのデータ転送に関する制御機能も提供する。デバッグ・モジュール１０はK バス２５に接続され、プロセッサにより開始されるすべてのメモリ・アクセスの、非侵入的観察を可能にする。デバッグ・モジュールは、任意の外部開発システム７に対する接続も行う。外部開発システム７は、通常は、システム統合試験中のプログラム・デバッグおよび開発の間に接続される。データ・プロセッサ３は、外部開発システム７に接続され、情報を通信する。外部開発システム７は、外部制御バスを介して、データ・プロセッサ３と通信する。
【００２７】
以下のデータ処理システム５の動作に関する説明の中では、データ・プロセッサ３のユーザが装置に関わる諸費用を削減すべきであると判断して、オペランド誤整合ユニット５を持たないデータ・プロセッサ３を組み込むことを選択したと想定する。オペランド誤整合ユニット５がデータ・プロセッサ３内に組み込まれると、オペランド誤整合ユニット５はCPU ２とK バス２５との間の論理回路構成を設け、それがCPU ２により出力される誤整合された参照を妨害する。この場合、オペランド誤整合ユニット５が誤整合された参照を一連の整合された参照に再設定する。しかし、本発明のこの実施例においては、ユーザはデータ・プロセッサ３内にオペランド誤整合ユニット５を内蔵しないことを前提とする。
【００２８】
前述のように、オペランド誤整合ユニット５を内蔵しないことにより、従来技術によるデータ・プロセッサは、誤整合されたオペランドに対して参照が試行されると例外を生成する。誤整合された参照が他の種類の障害に関する例外処理の一部として発生すると、破滅的な二重障害条件が起こる。多くのデータ処理システムに関して、このような二重例外は、破滅的不良として扱われ、結果として、システムがリセットされるまでデータ・プロセッサが停止されることが多い。前述のように、本発明は、この問題を認識しており、自己整合することにより、例外に応答してCPU ２により誤整合された参照が起こらないようにするスタック・ポインタを提供する。本発明のプロセッサ・コア９およびCPU ２の動作を、さらに詳細に説明する。
【００２９】
データ・プロセッサ３の動作中は、プロセッサ・コア９はプログラムの実行を制御し、外部割込に対して必要に応じて応答する。CPU ２は、命令取出パイプライン２１０およびオペランド実行パイプライン２２０を用いて迅速に効率的に命令を処理するために設けられる。本発明のこの実施例においては、命令取出パイプライン２１０およびオペランド実行パイプライン２２０は独立しており、分離されている。
【００３０】
動作中は、命令取出パイプライン２１０は、プロセッサ・コア９で実行するための命令を先取りする。命令アドレス生成回路２０２は、次の命令にアクセスする際に用いられる先取りアドレスを形成する。先取りアドレスは、マルチプレクサ２２２を介してレジスタ２０８に送られる。先取りアドレスは、KADDR 信号としてK バス２５に送られる。CPU ２は、KADDR により定義されるアドレスに位置する命令を取り出すために必要なK バス２５転送を開始する。所望の命令は、メモリ６，スレーブ・モジュール１２，スレーブ・モジュール１３または存在する場合はE バスに接続された装置内に位置することもある。所望の命令の位置に関わらず、データは結局はKRDATA（K バス読出データ）信号を介してCPU ２に戻される。KRDATA信号は、バッファ２１６に命令を提供する。その後でバッファ２１６は、取り出した命令を命令取出回路２０４に転送する。取り出された命令が命令取出回路２０４に送られると、命令取出回路２０４は、命令バッファ書込データ信号をFIFO命令バッファ２０６またはマルチプレクサ２１９のいずれか一方に提供する。オペランド実行パイプライン２２０が次の命令を待っているときは、FIFO命令バッファ２０６は迂回され、命令バッファ書込データ信号は直接マルチプレクサ２１９に送られる。そうでない場合は、命令バッファ書込データ信号は、FIFO命令バッファ２０６に送られ、次にマルチプレクサ２１９に送られる。
【００３１】
命令取出パイプライン２１０のマルチプレクサ２１９から、命令信号は、オペランド実行パイプライン２２０のパイプライン制御論理２１８とオペランド取出回路２１２の両方に送られる。また、命令取出パイプライン２１０の命令取出回路２０４は、命令取出アドレス信号をオペランド取出回路２１２に提供する。この命令取出アドレス信号は、分岐点など、流れの変更命令に応答して、新しいプログラム・カウンタ・レジスタ２２９を設定するために用いられる。レジスタ・オペランドを含む簡単な命令については、オペランド実行パイプラインは、２段階のパイプラインとして動作する。第１段階では、パイプライン制御論理２１８が命令を解読し、制御情報をオペランド取出回路２１２に提供する。それと平行して、オペランド取出回路２１２は、レジスタ・ファイル２２８に記憶された必要な値にアクセスする。第２段階で、パイプライン制御論理２１８は、アドレス生成／実行回路２１４に制御信号を提供し、ALU ２５４またはその他の実行エンジン２５６を用いて、登録された入力オペランドRA２３４，RA２３６に関して必要なデータ動作を実行する。結果のデータは、実行結果信号上に提供され、通常は装置サイクルの最後でレジスタ・ファイル２２８に書き込まれる。
【００３２】
本発明のこの実施例においては、パイプライン制御論理２１８は、反転例外処理信号をアサートして、例外が発生したことを知らせる。たとえば、例外は、外部割込要求に応答して生成されることがある。データ処理環境における例外の生成は当技術では周知であり、ここでは詳しい説明は行わない。例外が発生すると、データ・プロセッサ３は、通常の処理を実行しなくなる。むしろ、特殊な例外処理ルーチンにアクセスしてそれを実行しなければならない。通常の処理から例外処理への移行中には、データ・プロセッサ３のCPU ２が例外スタック・フレームを作成し、このスタック・フレームが現在のプロセッサの状況を詳細に表す情報をシステム・メモリ内にセーブする。実際のメモリ位置は、メモリ６，スレーブ・モジュール１２，スレーブ・モジュール１２またはE バスに接続された装置である。
【００３３】
例外スタック・フレームに記憶される現在のプロセッサ情報には、例外発生時に実行されていた命令の現在のアドレスが含まれる。この例外スタック・フレームは、システム・メモリ内に常駐する現行システム・スタックの「最上位」に配置される。前述のように、オペランドは任意のバイト境界に常駐するので、ハードウェア・スタック・ポインタは例外が検出されると任意のバイト境界を指し示すことがある。本発明のこの実施例においては、オペランド誤整合ユニットが組み込まれないので、スタック・ポインタが例外処理の始点に誤整合されると、例外スタック・フレームを作成しようと試みることにより、別の例外が生成され、破滅的な二重障害条件を起こし、システムの動作を停止してしまうことになる。例外検出時に誤整合されたスタック・ポインタによりシステム動作を停止しないようにするために、本発明はこのような状態を修正するための回路および方法を実現している。本発明で例外が起こると、データ・プロセッサ３のCPU ２がまず、スタック・ポインタ・レジスタ２４４の現在値を検証する。次にCPU ２は、現在値より低い０−モジュロ−４アドレスに最も近いところにスタック・ポインタ・レジスタ２４４を自動的に整合する。この調整が完了すると、CPU ２は例外の種類と位置とを含む８バイト・スタック・フレームをシステム・メモリ内に記憶する。このシステム・メモリは、メモリ６，スレーブ・モジュール１２，スレーブ・モジュール１３またはE バスに接続されたその他の装置とすることができる。８バイト・スタック・フレームには、例外時のスタック・ポインタの整合に関する情報を含む４ビット・フォーマット・フィールドが含まれる。この動作について、以下に詳述する。
【００３４】
例外が生成されると、パイプライン制御論理２１８は、反転例外処理信号をアサートし、それをオペランド取出回路２１２に提供する。さらに、パイプライン制御論理２１８は、平行して例外シーケンスを実行して、現在のプロセッサの状態をシステム・メモリにセーブする。このシステム・メモリは、メモリ６，スレーブ・モジュール１２，スレーブ・モジュール１３またはE バスに接続されたその他の装置とすることができる。この例外シーケンスの実行中に、パイプライン制御論理２１８は、オペランド取出回路２１２およびアドレス生成／実行回路２１４が、K バス２５上に書込サイクルを生成することができるようにする。書込サイクルは、上記のスタック・フレームを形成するために必要は情報をメモり６に書き込む。スタック・フレームという用語は、例外スタック・フレームという用語と相互に交換可能に用いられる点に留意されたい。
【００３５】
スタック・フレームを生成する際は、パイプライン制御論理２１８は、まず、制御情報を提供し、これによってレジスタ・ファイル２２８（図４に図示）のスタック・ポインタ・レジスタ２４４がマルチプレクサ２４６に対して「調整された」スタック・ポインタ値を出力することができるようになる。この調整過程には、低次の２ビットを強制的に０にすることにより、スタック・ポインタ・レジスタ２４４の現在値を最も近い０−モジュロ−４アドレスに切り捨てる段階が含まれる。この切り捨て動作は、AND ゲート２７２，２７４により実行される。通常の処理中には、反転例外処理信号がネゲートされるので、AND ゲート２７２，２７４は、スタック・ポインタ・レジスタ２４４の低次の２ビットSP(1:0) の現在値を単に渡すだけである。例外が検出されパイプライン制御論理２１８が反転例外処理信号をアサートすると、AND ゲート２７２，２７４の出力は強制的に０になり、それによって０−モジュロ４アドレスが作成される。また、スタック・ポインタ・レジスタ２４４は、低次の２ビットSP(1:0) を他の実行エンジン２５６に出力する。調整されたスタック・ポインタは、マルチプレクサ２４６に提供され、マルチプレクサ２４６がA 出力に関するこの値をマルチプレクサ２−２３０に渡し、次にこの値はレジスタA ２３４にロードされる。
【００３６】
調整されたスタック・ポインタ値がレジスタ・ファイル２２８からレジスタA ３４に転送されている間、マルチプレクサ２２６は「−４」の定数を生成する。定数−４は、次にマルチプレクサ２３２に転送され、その後レジスタB ２３６に記憶される。この時点で、調整されたスタック・ポインタ値はレジスタA ２３４に記憶され、定数−４はレジスタB ２３６に記憶される。調整されたスタック・ポインタ値は、図７に示される種々の例に図示される「X 」に対応する。
【００３７】
次に、レジスタA ２３４は、調整されたスタック・ポインタ値を、RA信号を介してアドレス生成／実行回路２１４のマルチプレクサ２５０に提供する。同様に、レジスタB ２３６は、定数−４を、RB信号を介してアドレス生成／実行回路２１４のマルチプレクサ２５２に提供する。次に、ALU ２５４が、この２つの値を加算して、調整されたスタック・ポインタ値（X ）プラス−４の定数、すなわち（X −４）の値を有する出力を提供する。ALU ２５４の出力は、実行結果信号を介してマルチプレクサ２５８に送られる。マルチプレクサ２５８から、X −４の値は、オペランド・アドレス信号としてマルチプレクサ２２２に送られる。マルチプレクサ２２２は、オペランド・アドレス信号をレジスタ２０８に提供する。このようにして、K バス２５サイクルが第１の３２ビット例外スタック・フレーム記憶を実行するためのオペランド・アドレスが生成される。
【００３８】
X −４アドレス値は、実行結果信号上をマルチプレクサ２３０にも送られ、次にレジスタA ２３４に送られる。次のタイミング・サイクルの始点で、レジスタA ２３４はX −４値を記憶し、レジスタB ２３６は定数−４を記憶する。ここでも、パイプライン制御論理２１８が制御情報を提供し、これによりレジスタA ２３４は、RA信号を介してアドレス生成／実行回路２１４のマルチプレクサ２５０にX −４値を提供することができる。同様にレジスタB ２３６は、RB信号を介してアドレス生成／実行回路２１４のマルチプレクサ２５２に定数−４を提供する。次にALU ２５４は、２つの値を加算して、現在のスタック・ポインタ値（X −４）プラス−４の定数、すなわち（X −８）の値を有する出力を提供する。ALU ５４の出力は、実行結果信号を介してマルチプレクサ２５８に送られる。マルチプレクサ２５８は、オペランド・アドレス信号をマルチプレクサ２２２に送り、次にレジスタ２０８に送る。このようにして、K バス２５サイクルが第２の３２ビット例外スタック・フレーム記憶を実行するためのオペランド・アドレスが生成される。また、実行結果信号上に送られたX −８の値は、スタック・ポインタ・レジスタ２４４に書き込まれて、例外スタック・フレーム書込の最後の、システム・スタックの最上位を示す。
【００３９】
データを書き込むために必要なアドレスが生成される間、例外スタック・フレームに記憶されるデータにもアクセスしなければならない。X −４アドレス値が形成されているので、PC値が他の実行エンジン２５６に送られる。PC値は、障害命令のプログラム・カウンタ値である。PCの値は、現在オペランド実行パイプライン２２０にある命令の命令アドレスを定義し、オペランド取出回路２１２からアクセスされる。
【００４０】
プログラム値が生成され、PC信号を介して他の実行エンジン２５６に送られると、PC値はステータス・レジスタ（SR）値，フォーマット（F ）値およびベクトル（V ）値と共にマルチプレクサ２６０に送られる。SR値は、アドレス生成／実行回路２１４のALU ２５４により生成される状態情報に応答して生成される。ALU ２５４が作成する状態情報は、実行結果信号を介して論理回路２５３に出力される。論理回路２５３は、状態情報を処理して、ステータス情報を提供し、この値がステータス・レジスタ２５７に記憶される。ステータス・レジスタ２５７は、次にステータス値を、SR値を介して他の実行エンジン２５６に提供する。
【００４１】
ベクトル値は、パイプライン制御論理２１８により生成され、現在の例外の種類を知らせる。次にこの値は、例外処理ソフトウェア・ルーチンの命令アドレスを定義するベクトルにアクセスするために用いられる。
【００４２】
フォーマット値は、例外がアサートされたときのスタック・ポインタの整合を定義する４ビット・フィールドである。フォーマット値は、例外時のスタック・ポインタ値すなわちSP(1:0) のビット１および０に応答して、論理２５９により生成される。以下の表は、スタック・ポインタ値と論理２５９により実施されるフォーマット値との関係を表す。
例外時の            例外ハンドラの                  フォーマット・
当初SP(1:0)         第１命令のSP                    フィールド
００                当初SP−８                        ０１００
０１                当初SP−９                        ０１０１
１０                当初SP−１０                      ０１１０
１１                当初SP−１１                      ０１１１
表１
従って、表１を参照して、SP(1:0) が％００のバイナリ値を有するとき、論理２５９は％０１００の対応するバイナリ値を有するフォーマット・フィールドを提供する。同様に、SP(1:0) が％０１のバイナリ値を有するとき、論理２５９は％０１０１のバイナリ値を有するフォーマット・フィールドを提供する。SP(1:0) が％１０のバイナリ値を有するとき、論理２５９は％０１１０の対応するバイナリ値を有するフォーマット・フィールドを提供する。またSP(1:0) が％１１のバイナリ値を有するとき、論理２５９は％０１１１のバイナリ値を有するフォーマット・フィールドを提供する。例外スタック・フレームのこのフォーマット・フィールドは、後にプロセッサにより用いられて、例外がハンドラ・ルーチンにより処理されると、スタック・ポインタ・レジスタ２４４を当初の値に回復させる。
【００４３】
例外が処理されているときは、パイプライン制御論理２１８は、制御情報（ここでは図示せず）を提供して、マルチプレクサ２６０が、レジスタ２６２にSR，PC，フォーマット（F ）およびベクトル（V ）値のいずれか１つを提供することができるようにする。まず、パイプライン制御論理２１８は、制御情報を提供し、この情報によりマルチプレクサ２６０はPC値を選択してレジスタ２６２に転送することができる。レジスタ２６２から、PC値はオペランド書込データ信号を介してバッファ２１６に送られる。次にバッファ２１６は、KWDATA（K バス書込データ）信号を介してK バス２５にPC値を送る。この後、PC値は第１タイミング・サイクルで平行して生成されたX −４値により定義されるメモリ位置に記憶される。
【００４４】
X −８アドレスが生成される第２タイミング・サイクル中に、パイプライン制御論理２１８は、制御情報を提供し、この情報によりマルチプレクサ２６０は、SR，フォーマット（F ）およびベクトル（V ）値を選択してレジスタ２６２に転送することができる。レジスタ２６２から、SR，フォーマット（F ）およびベクトル（V ）値が図７に示される順序につながれて、オペランド書込データ信号を介してバッファ２１６に送られる。バッファ２１６は、次に、連係された値をKWDATA（K バス書込データ）信号を介してK バス２５に送る。この後、フォーマット／ベクトル／ステータス・レジスタ値は、第２タイミング・サイクルで平行して生成されたX −８値により定義されるシステム・メモリ位置に記憶される。
【００４５】
例外スタック・フレームが生成され、PC，SR，フォーマットおよびベクトル値がシステム・メモリに記憶されると、次に例外はデータ・プロセッサ３により処理される。この時点で、パイプライン制御論理２１８により提供されたベクトル値は、オペランド取出回路２１２内のマルチプレクサ２２６に送られる。ベクトル値は、マルチプレクサ２２６からマルチプレクサ２３０に送られ、その後でレジスタA ２３４に記憶される。レジスタA ２３４から、ベクトル値はRA信号を介してマルチプレクサ２５０に送られる。ベクトル生成と平行して、ベクトル・ベース・レジスタ（VBR ）が他の実行エンジン２５６内に読み込まれ、実行結果信号を介してマルチプレクサ２３２に送られる。VBR は、システム・メモリ内で例外ベクトル・テーブルを「再配置」する能力を提供する。VBR 値は、マルチプレクサ２３２でゲート制御され、レジスタB ２３６内にロードされる。次にベクトル値はALU ２５４内でVBR 値と合算され、生成された例外に対応する命令アドレスを含むシステム・メモリ内の位置を定義するベクトル・アドレスを生成する。ALU ２５４により提供される合計値はマルチプレクサ２５８に送られる。パイプライン制御論理２１８により適切な制御がマルチプレクサ２５８に送られると、マルチプレクサ２５８はオペランド・アドレス信号としてベクトル・アドレスを提供する。オペランド・アドレス信号は、次にマルチプレクサ２２２に送られる。マルチプレクサ２２２から、ベクトル数はバッファ２０８によりKADDR 信号として出力される。KADDR 信号は、K バス２５により、所望の例外ベクトルを読むために用いられる。
【００４６】
検索されたベクトルは、KRDATA信号を介してバッファ２１６に転送される。被検索ベクトルは、バッファ２１６から、KRDATAバッファ信号によりオペランド取出回路２１２に送られる。KRDATAバッファ信号は、実行結果信号に接続されて被検索ベクトルを転送する。被検索ベクトルは、次にマルチプレクサ２３０に送られ、レジスタA ２３４に記憶される。被検索ベクトルは、レジスタA ２３４から、RA信号を介してマルチプレクサ２５０に送られる。マルチプレクサ２５０は、被検索ベクトルをALU ２５４に転送し、そこでこのベクトルは、パイプライン制御論理２１８の制御下でマルチプレクサ２５２により作成された０群と合算される。ALU ２５４は、基本的には、実行結果信号に被検索ベクトルを渡し、ここでマルチプレクサ２５８、次にマルチプレクサ２２２に対する入力が送られる。被検索ベクトルは、次にKADDR レジスタ２０８にロードされる。このアドレスは、例外処理プログラムのための開始命令の命令取出アドレスを表す。例外取出アドレスは、レジスタ２０８から、KADDR 信号を介してK バス２５に送られる。
【００４７】
例外処理のためのソフトウェア・プログラムの初期命令取出が行われ、データが検索されると、命令データはKRDATA信号を介してCPU ２に戻される。特に、KRDATA信号はバッファ２１６により命令取出回路２０４に送られる。取り出された命令は、次にマルチプレクサ２１９を通じてゲート処理され（オプションでFIFO命令バッファ２０６を用いて）、取り出された命令をオペランド実行パイプライン２２０内にロードする。上記に詳述された過程が、例外を処理するソフトウェア・プログラムを起動実行する。
【００４８】
例外処理のためのソフトウェア・プログラムが終了すると、データ・プロセッサ３は例外処理をやめて、通常の処理に戻る。通常の処理に戻るには、データ・プロセッサ３が例外が発生する前に動作していた状況を回復しなければならない。従って、プログラム・カウンタ，ステータス・レジスタおよびスタック・ポインタは、例外が発生する前の当初の値に回復しなければならない。例外時にスタック・ポインタの整合を定義するフォーマット・フィールドを記憶する例外スタック・フレームを独自に用いることは、データ・プロセッサ３を以前の状態に正しく効率的に回復させるために不可欠である。
【００４９】
例外を処理するソフトウェア・プログラムの最後の命令は、RTE （Return from Exeception：例外からの復帰）命令である。RTE 命令が実行されると、例外スタック・フレーム（図７に図示）上に記憶された２つのロングワード値が検索される。これらの値を検索するには、レジスタ・ファイル２２８のスタック・ポインタ・レジスタ２４４から現在のスタック・ポインタ値を検索する。ソフトウェア実行プログラムの始点では、スタック・ポインタの値がX −８であったことを思い出してほしい。例外処理プログラム実行中の一時格納場所として、スタック・エリアを用いることもできるが、RTE 命令が実行を開始すると、スタック・ポインタには、この場合もX −８の値が含まれねばならない。スタック・ポインタ値は、マルチプレクサ２４６に送られ、A 信号を介して通信される。A 信号は、マルチプレクサ２３０に送られ、次にレジスタA ２３４に転送される。同時に、マルチプレクサ２２６が＋４の一定値を生成する。定数４は、マルチプレクサ２２６からマルチプレクサ２３２に転送され、レジスタB ２３６に記憶される。
【００５０】
次のタイミング・サイクルで、レジスタA ２３４の内容、すなわちX −８値がRA信号によりマルチプレクサ２５８に送られる。次にマルチプレクサ２５８は、X −８値をオペランド・アドレス信号を介してマルチプレクサ２２２に提供する。マルチプレクサ２２２から、X −８値はレジスタ２０８に記憶される。次にX ８値はKADDR 信号を介してK バス２５に送られる。その後、X −８値により特定されるシステム・メモリ内のアドレス位置でデータがアクセスされる。
【００５１】
X −８をオペランド・アドレスとして形成するのと平行して、X −８値を含むレジスタA ２３４と、＋４値を含むレジスタB ２３６とが、それぞれマルチプレクサ２５０およびマルチプレクサ２５２に転送される。パイプライン制御論理２１８により行われる制御のもとで、マルチプレクサ２５０およびマルチプレクサ２５２は、X −８値および定数４をALU ２５４に転送する。ALU ２５４は、この２つの値を加算してX −４の結果を生成する。この結果は、実行結果信号に送られ、この信号がX −４値をマルチプレクサ２３０に転送する。マルチプレクサ２３０は、X −４値をレジスタA ２３４に提供する。
【００５２】
図７を参照して、X −８値により特定されるアドレス位置がアクセスされると、フォーマット（F ），ベクトル（V ）およびSR値がアクセスされる。フォーマット，ベクトルおよびSR値はKRDATA信号を介してバッファ２１６に送られる。バッファ２１６から、フォーマット，ベクトルおよびSR値は、バッファKRDATA信号および実行結果信号を介して、オペランド取出回路２１２のマルチプレクサ２３２に送られる。次にこれらの値はレジスタB ２３６でゲート制御を受ける。フォーマット，ベクトルおよびSR値は、レジスタB ２３６から、RB信号を介してマルチプレクサ２５２に送られる。この後、レジスタB ２３６の内容全体が、修正なしにALU ２５４に伝えられ、論理回路２５３により処理されて、ステータス値となる。次にこのステータス値は、ステータス・レジスタ２５７に記憶されて、例外が発生したときのデータ・プロセッサ３の動作状況を知らせる。同様に、フォーマット値は、レジスタB ２３６からRB信号を介して他の実行エンジン２５６に送られる。この後、フォーマット値はレジスタ２６１に記憶される。
【００５３】
次のタイミング・サイクルで、レジスタA ２３４に記憶されたX −４値がRA信号を介してマルチプレクサ２５８に送られる。RA信号はX −４値をマルチプレクサ２２２に、それからレジスタ２０８に転送する。その後で、X −４値はKADDR 号を介してK バス２５に送られる。次に、X −４値により特定されるシステム・メモリ内のアドレス位置でデータがアクセスされる。
【００５４】
再び図７を参照して、X −４値により特定されるアドレス位置がアクセスされると、プログラム・カウンタ（PC）値がアクセスされる。PC値は、KRDATA信号を介してバッファ２１６に送られる。PC値は、バッファ２１６からバッファKRDATA信号を介してオペランド取出回路２１２に送られる。PC値は、実行結果信号上にゲート制御され、マルチプレクサ２３２に送られる。そこで、PC値はレジスタB ３６に送られロードされる。この時点で、レジスタA ２３４はX −４値を含み、レジスタB ２３６は新規のプログラム・カウンタ・アドレスを含む。
【００５５】
次のタイミング・サイクルで、新規のプログラム・カウンタ・アドレスを含むレジスタB ２３６値は、マルチプレクサ２５８に転送される。次に、このアドレスがオペランド・アドレス信号を介してマルチプレクサ２２２に転送され、そこでレジスタ２０８にロードされる。このアドレスは、例外処理の後で実行を再開するための命令アドレスを定義する。次にKADDR レジスタ２０８が用いられて、プログラムの実行を再開するために、システム・メモリからの所望の命令をアクセスする。所望の命令はKRDATA上を返送され、バッファ２１６を介して命令取出回路２０４に伝えられる。
【００５６】
次のタイミング・サイクルで、実行結果信号を介してレジスタ２６１からフォーマット値が検索される。次にこの値はマルチプレクサ２３２に送られ、レジスタB ２３６にロードされる。このとき、レジスタA ２３４には依然としてX −４値が含まれ、レジスタB にはフォーマット・フィールドが含まれる。次のタイミング・サイクルで、両マルチプレクサ２５０，２５２の内容がALU ２５４に送られ、ALU ２５４はこの２つの値を加算して、X −４＋フォーマットとする。
【００５７】
この加算により、例外時の当初のスタック・ポインタ値が再度作成される。ALU 出力は、例外結果信号上にゲート制御され、レジスタ・ファイル２２８のスタック・ポインタ・レジスタ２４４内に現在のスタック・ポインタとして記憶される。
【００５８】
この時点で、データ・プロセッサ３は装置の状態を例外時の値に完全に回復させている。すなわち、命令取出パイプライン２１０が、回復されたプログラム・カウンタ値の命令を取り出しており、スタック・ポインタ・レジスタ２４４は例外時の値に回復されている。本発明の自己整合特性により、スタック・ポインタは、例外が受信されると現在のスタック・ポインタ設定より低い、最も近い０−モジュロ−４アドレスに自動的に整合することができる。例外処理が終わり、データ・プロセッサ３が通常の動作モードでの動作を開始しようとしている場合、スタック・ポインタは、例外が受信されたときにその値が誤整合されていても、当初の値に復帰しなければならない。フォーマット・フィールドをスタック・ポインタの暫定的X −４値に加算することにより、スタック・ポインタを当初値に復帰させるための独自の効率的な方法が提供される。
【００５９】
周知のベンチマークからとられた次の例を考える：
命令アドレス      演算コード
$00005064:       mov.b (a0),-(sp) ソースからスタックにバイトをコピー
$00005066        bra.b L%1 Ｌ％１で継続
アドレス＄００００５０６４で命令を実行する前のスタック・ポインタの内容は、＄００００６ｅｄ０である。アドレス＄００００５０６４のmov.b 演算コードは、レジスタａ０の内容により定義されるソース位置から、システム・スタック上に１バイトのデータ（データを＄ａａとする）をコピーし、スタック・ポインタを１だけ減分する。この命令の結果、スタック・ポインタ値は＄００００６ｅｃｆとなる。
【００６０】
割込要求が到着して、アドレス＄００００５０５６のアドレスの命令を延期して、割込要求に対応するものと仮定する。割込例外が処理されると、次のような例外スタック・フレームが作成される：
アドレス        データ
$00006ec4       $70780008   # フォーマット=$7 ，ベクトル=$078 ，ステータス=$0008
$00006ec8       $00005066   # 命令アドレス
$00006ecc       $----   #mov.l演算コードによりデータがコピーされる
ただし、例外処理ソフトウェア・プログラムの最初のスタック・ポインタ・レジスタ値は＄００００６ｅｃ４である。
【００６１】
割込要求が処理されると、例外ハンドラはRTE 命令を実行する。スタックの上位にある３２ビットのデータが取り出され、フォーマット，ベクトルおよびSRフィールドが前述のようにCPU ２により処理される。＄００００６ｅｃ８の暫定的X −４アドレスが形成され、レジスタA ２３４に一時的にセーブされる。＄００００５０６６の命令アドレスが＄００００６ｅｃ８位置から取り出され、新規の命令ストリームを設定するために用いられる。同時に、セーブされたフォーマット・フィールド（＄７）がALU ２５４内で、レジスタ２３４の内容（＄００００６ｅｃ８）と加算され、回復されたスタック・ポインタ（＄００００６ｅｃ８＋＄０００００００７＝＄００００６ｅｃｆ）を形成する。これがレジスタ・ファイル２２８のスタック・ポインタ・レジスタ２４４内にロードされる。次に、アドレス＄００００５０６６の命令の実行により制御が再開する。
【００６２】
要約すると、本発明は、データ・プロセッサと、単独のシステム・スタック・ポインタを用いて、スーパーバイザおよびユーザ・スタック・オペランドの整合に関するハードウェア支援が任意の場合に、両方のスタック動作の記録を作成することができるデータ処理システムの動作方法とを提供する。単独のシステム・スタック・ポインタは、現在のアドレス設定より低い、最も近い０−モジュロ−４アドレスに自身を自動的に整合する自己整合スタック・ポインタとして実現されるので、誤整合オペランドに対するハードウェア支援がない場合もシステム・エラーが起こらない。自動整合が行われると、本発明のデータ・プロセッサは例外スタック・フレーム内に４ビットのフォーマット・フィールドを記憶して、障害時のスタック・ポインタの整合に関する情報を知らせる。例外が処理され、例外からの復帰（RTE ）命令が実行されると、プロセッサは例外スタック・フレーム内に記憶された４ビット・フォーマット・フィールドを用いて、スタック・ポインタを例外時の当初の値に回復する。
【００６３】
本明細書で説明された本発明の実行例は、例として提供されたに過ぎず、ここで説明された機能を実行するために多くの他の実行例が存在する。たとえば、例外スタック・フレームのアドレスを作成するために生成および使用される定数は−４に限られず、データ処理システム５の設計者またはユーザが欲する任意の数値とすることができる。
【００６４】
本発明は特定の実施例を参照して図示および説明されたが、更なる改良および改善が当業者には可能であろう。従って、本発明は図示された特定の形態に限定されるものではない。
【図面の簡単な説明】
【図１】本発明のある実施例によるデータ処理システムのブロック図である。
【図２】図１に示されるデータ処理システムの中央処理装置の部分のブロック図である。
【図３】図２に示される中央プロセッサ装置のオペランド取出回路のブロック図である。
【図４】図３に示されるオペランド取出回路のレジスタ・ファイル回路のブロック図である。
【図５】図２に示される中央プロセッサ装置のアドレス生成／実行回路のブロック図である。
【図６】図５に示されるアドレス生成／実行回路の他の実行エンジンの部分のブロック図である。
【図７】複数のスタック・ポインタ（SP）レジスタ値のための例外スタック・フレームの構造のブロック図である。
【図８】４ビットのフォーマット・フィールドを含む例外スタック・フレームの構造のブロック図である。
【符号の説明】
２  中央処理装置（CPU ）
３  データ・プロセッサ
４  メモリ管理ユニット／コントローラ
５  データ処理システム
６  メモリ
７  外部開発システム
８  システム・バス・コントローラ
９  プロセッサ・コア
１０  デバッグ・モジュール
１２，１３  スレーブ・モジュール
１４  マスタ・モジュール
２５  K バス
【図１】
0003707581.tif 000002
【図２】
0003707581.tif 000003
【図３】
0003707581.tif 000004
【図４】
0003707581.tif 000005
【図５】
0003707581.tif 000006
【図６】
0003707581.tif 000007
【図７】
0003707581.tif 000008
【図８】
0003707581.tif 000009