(57)【要約】【課題】  コードサイズが小さくプロセッサの命令実行時間への影響が少ない高速で高性能なプロセッサ及びコンテキスト切り替え方法を提供する。【解決手段】  プロセッサ１は、表レジスタ部１０ａ及び表レジスタ部と同構成の裏レジスタ部１０ｂとを備えるレジスタ装置１０と、データ記憶装置１４と、転送レジスタを備える転送装置１１と、表レジスタ部１０ａ中のコピーされた裏レジスタ部１０ｂの内容を所定の順序でデータ記憶装置１４に転送するストアレジスタ手段、裏レジスタ部１０ｂを表レジスタ部１０ａにコピーし、転送すべき裏レジスタ部１０ｂのデータがデータ記憶装置１４に残っていれば、裏レジスタ部１０ｂへ転送するロードレジスタ手段とを備え、データ転送はプロセッサがデータ記憶装置１４へのメモリアクセスを伴わない命令実行時にプロセッサの命令実行と並列に行う演算装置１２とを備える。【選択図】    図１
2005275703.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサによるプログラム実行時に用いる表レジスタ部及び前記表レジスタ部と同構成の裏レジスタ部とを備えるレジスタ装置と、
前記プログラム実行時にデータの記憶領域として使用するデータ記憶装置と、
前記表レジスタ部及び前記裏レジスタ部間におけるデータの転送にて使用する転送レジスタを備える転送装置と、
前記表レジスタ部中の命令オペランドで示されたレジスタを前記裏レジスタ部にコピーし、コピーされた裏レジスタ部の内容を所定の順序にしたがい前記データ記憶装置に転送するストアレジスタ手段、前記ストアレジスタ手段により前記裏レジスタ部にコピーしたレジスタを前記表レジスタ部にコピーし、転送すべき前記裏レジスタ部のデータが前記データ記憶装置に残っていれば、前記データ記憶装置から前記裏レジスタ部へ転送するロードレジスタ手段とを備え、前記表レジスタ部と前記裏レジスタ部間のコピーは１サイクルで行い、前記データ記憶装置と前記裏レジスタ部間のデータ転送は、前記プロセッサが前記データ記憶装置へのメモリアクセスを伴わない命令実行時に、前記プロセッサの命令実行と並列に行う演算装置
とを備えることを特徴とするプロセッサ。
【請求項２】
前記演算装置は、
前記表レジスタ部の内容をコピーした裏レジスタ部の内容を所定の順序にしたがい前記データ記憶装置に転送するストアレジスタ手段、転送すべき前記裏レジスタ部のデータが前記データ記憶装置に残っていれば、前記データ記憶装置から前記裏レジスタ部へ転送するロードレジスタ手段とを備え、前記表レジスタ部と前記裏レジスタ部間のコピーは１サイクルで行い、前記データ記憶装置と前記裏レジスタ部間のデータ転送は、前記プロセッサが前記データ記憶装置へのメモリアクセスを伴わない命令実行時に、前記プロセッサの命令実行と並列に行うことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記転送装置は、前記転送レジスタとして、
前記レジスタ装置と前記データ記憶装置間のデータ転送方向を示すディレクションフラグを格納する転送方向フラグ部と、
前記裏レジスタ部と前記データ記憶装置間のデータ転送開始を指示するとともに、転送状態を示すトランスファフラグを格納する転送要求フラグ部と、
前記表レジスタ部及び前記裏レジスタ部間のコピー若しくは前記裏レジスタ部と前記データ記憶装置間の転送をするか否かをレジスタ単位に制御するパターンフラグを格納する転送パターン部
とを備えることを特徴とする請求項１又は２に記載のプロセッサ。
【請求項４】
プロセッサによるプログラム実行時に用いる表レジスタ部中の命令オペランドで示されたレジスタを前記表レジスタ部と同構成の裏レジスタ部にコピーするステップと、
コピーされた前記裏レジスタ部の内容を所定の順序にしたがいデータ記憶装置に転送するステップと、
前記裏レジスタ部にコピーされているレジスタを前記表レジスタ部にコピーするステップと、
転送すべき前記裏レジスタ部のデータが前記データ記憶装置に残っていれば、前記プロセッサが前記データ記憶装置へのメモリアクセスを伴わない命令実行時に、前記プロセッサの命令実行と並列に、前記データ記憶装置から前記裏レジスタ部へ転送するステップ
とを有することを特徴とするコンテキスト切り替え方法。
【請求項５】
プロセッサによるプログラム実行時に用いる表レジスタ部中の命令オペランドで示されたレジスタをコピーされた裏レジスタ部の内容を所定の順序にしたがいデータ記憶装置に転送するステップと、
転送すべき前記裏レジスタ部のデータが前記データ記憶装置に残っていれば、前記プロセッサが前記データ記憶装置へのメモリアクセスを伴わない命令実行時に、前記プロセッサの命令実行と並列に、前記データ記憶装置から前記裏レジスタ部へ転送するステップ
とを有することを特徴とするコンテキスト切り替え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速な切り替え処理を行なうパイプライン構成のプロセッサ及びコンテキスト切り替え方法に関する。
【背景技術】
【０００２】
従来のプロセッサでは、複数のレジスタファイルを設け、それら複数のレジスタファイルの内容をシフトすることで割込み処理やマルチタスク処理で共通に必要な現在実行中のプログラムに関する情報の退避、復帰動作（コンテキストスイッチ）の高速化を実現する方法が知られている（例えば、特許文献１参照。）。
【０００３】
また、割込み処理中に、更なる割込み処理を受け付けるネスティング処理ができるように、コンテキストスイッチ動作後、シフトしたレジスタファイルの内容を外部メモリへ退避および復帰させる処理をＤＭＡ転送により行いレジスタファイルの数を増やすことなくコンテキストスイッチを高速化する方法が知られている（例えば、特許文献２参照。）。
【特許文献１】特開平６−８３６３９号公報
【特許文献２】特開平５−２８０９２号公報
【０００４】
しかしながらこれらの方法では、複数のレジスタからなるコンテキスト情報の退避、復帰毎に複数の命令を実行する必要があった。
【０００５】
又、プロセッサの動作クロック周波数を上げることなくコンテキストスイッチの高速化を実現するので、組込み機器や携帯用途のプロセッサでは消費電力を低減しなければならないが、動作する回路や回数が多い為、消費電力を効率よく削減することができなかった。
【０００６】
更に、保存が必要なものや不要なものを区別せずにデータ転送を行なうため、プロセッサの命令実行時間を延長させ、プロセッサの処理性能を低下させていた。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、上記問題点を解決する為になされたものであり、コードサイズが小さく高速な処理が実現でき、消費電力を削減することができ、更に、プロセッサの命令実行時間への影響が少ない高速で高性能なコンテキスト切り替え機能を実現できるプロセッサ及びコンテキスト切り替え方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記問題点を解決する為、本発明の第１の特徴は、（イ）プロセッサによるプログラム実行時に用いる表レジスタ部及び表レジスタ部と同構成の裏レジスタ部とを備えるレジスタ装置と、（ロ）プログラム実行時にデータの記憶領域として使用するデータ記憶装置と、（ハ）表レジスタ部及び裏レジスタ部間におけるデータの転送にて使用する転送レジスタを備える転送装置と、（ニ）表レジスタ部中の命令オペランドで示されたレジスタを裏レジスタ部にコピーし、コピーされた裏レジスタ部の内容を所定の順序にしたがいデータ記憶装置に転送するストアレジスタ手段、ストアレジスタ手段により裏レジスタ部にコピーしたレジスタを表レジスタ部にコピーし、転送すべき裏レジスタ部のデータがデータ記憶装置に残っていれば、データ記憶装置から裏レジスタ部へ転送するロードレジスタ手段とを備え、表レジスタ部と裏レジスタ部間のコピーは１サイクルで行い、データ記憶装置と裏レジスタ部間のデータ転送は、プロセッサがデータ記憶装置へのメモリアクセスを伴わない命令実行時に、プロセッサの命令実行と並列に行う演算装置とを備えるプロセッサであることを要旨とする。
【０００９】
更に、本発明の第１の特徴は、（ホ）演算装置は、表レジスタ部の内容をコピーした裏レジスタ部の内容を所定の順序にしたがいデータ記憶装置に転送するストアレジスタ手段、転送すべき裏レジスタ部のデータがデータ記憶装置に残っていれば、データ記憶装置から裏レジスタ部へ転送するロードレジスタ手段とを備え、表レジスタ部と裏レジスタ部間のコピーは１サイクルで行い、データ記憶装置と裏レジスタ部間のデータ転送は、プロセッサがデータ記憶装置へのメモリアクセスを伴わない命令実行時に、プロセッサの命令実行と並列に行うことと、（ヘ）転送装置は、転送レジスタとして、レジスタ装置とデータ記憶装置間のデータ転送方向を示すディレクションフラグを格納する転送方向フラグ部と、裏レジスタ部とデータ記憶装置間のデータ転送開始を指示するとともに、転送状態を示すトランスファフラグを格納する転送要求フラグ部と、表レジスタ部及び裏レジスタ部間のコピー若しくは裏レジスタ部とデータ記憶装置間の転送をするか否かをレジスタ単位に制御するパターンフラグを格納する転送パターン部とを備えることを加えても良い。
【００１０】
本発明の第２の特徴は、（イ）プロセッサによるプログラム実行時に用いる表レジスタ部中の命令オペランドで示されたレジスタを表レジスタ部と同構成の裏レジスタ部にコピーするステップと、（ロ）コピーされた裏レジスタ部の内容を所定の順序にしたがいデータ記憶装置に転送するステップと、（ハ）裏レジスタ部にコピーされているレジスタを表レジスタ部にコピーするステップと、（ニ）転送すべき裏レジスタ部のデータがデータ記憶装置に残っていれば、プロセッサがデータ記憶装置へのメモリアクセスを伴わない命令実行時に、プロセッサの命令実行と並列に、データ記憶装置から裏レジスタ部へ転送するステップとを有するコンテキスト切り替え方法であることを要旨とする。
【００１１】
本発明の第３の特徴は、（イ）プロセッサによるプログラム実行時に用いる表レジスタ部中の命令オペランドで示されたレジスタをコピーされた裏レジスタ部の内容を所定の順序にしたがいデータ記憶装置に転送するステップと、（ロ）転送すべき裏レジスタ部のデータがデータ記憶装置に残っていれば、プロセッサがデータ記憶装置へのメモリアクセスを伴わない命令実行時に、プロセッサの命令実行と並列に、データ記憶装置から裏レジスタ部へ転送するステップとを有するコンテキスト切り替え方法であることを要旨とする。
【発明の効果】
【００１２】
本発明のプロセッサ及びコンテキスト切り替え方法によると、複数のレジスタからなるコンテキスト情報の退避、復帰がそれぞれ１つの命令により実現できるので、割込み処理やタスク切り替え処理において通常必要なコンテキスト保存と復帰の処理プログラムが不要となり、コードサイズを小さくすることで高速なコンテキスト切り替え処理が実現できる。
【００１３】
また、退避すべきレジスタを退避命令のオペランドで指定するので、不要なレジスタの退避動作がなく、表レジスタ部１０ａと裏レジスタ部１０ｂへのコピー動作や転送ユニットによって裏レジスタ部１０ｂとメモリの間のデータ転送動作の所要回数が少なくなり、動作する回路や回数が減少するため消費電力が削減できる。
【００１４】
さらに、プロセッサの内部バスが開放されるタイミングでデータ転送するため、プロセッサの命令実行時間への影響が少なく、プロセッサの処理性能低下を少なくすることができる。
【発明を実施するための最良の形態】
【００１５】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００１６】
（実施の形態）
（プロセッサ）
本発明の実施の形態におけるプロセッサ１は、図１に示すように、レジスタ装置１０、転送装置１１、演算装置１２、記憶アクセス装置１３、データ記憶装置１４、デコーダ装置１５、フェッチ装置１６及び命令記憶装置１７等を備えている。
【００１７】
レジスタ装置１０は、表レジスタ部１０ａ及び裏レジスタ部１０ｂを備えている。表レジスタ部１０ａは、プロセッサ１のプログラム実行時に用いる汎用レジスタ（Ｒ０〜Ｒ１５）１８ａと、専用レジスタ（Ｈｉ：ハイ、Ｌｏ：ロウ、ＬＰ：リンクポインタ、ＰＳＷ：プロセッサステイタスワード、ＥＰＣ：エクセプションプログラムカウンタ）１９ａ等から構成される。裏レジスタ部１０ｂは、表レジスタ部１０ａと同様の汎用レジスタ１８ｂ及び専用レジスタ１９ｂを備えている。
【００１８】
データ記憶装置１４は、プロセッサ１の実行の際にデータの記憶領域として使用される主メモリ若しくは補助メモリ等を指す。データ記憶装置１４内の記憶領域は、メモリアドレスにて指定される。
【００１９】
転送装置１１は、レジスタ装置１０の内容を記憶アクセス装置１３に入出力する処理を行う。転送装置１１は、表レジスタ部１０ａ及び裏レジスタ部１０ｂ間において、両レジスタ内のデータ転送にて使用する転送レジスタを備える。転送レジスタとしては、ボトムポインタ部２１、トップポインタ部２２、転送パターン部２３、転送方向フラグ部２４及び転送要求フラグ部２５等がある。
【００２０】
トップポインタ部２２は、裏レジスタ部１０ｂとデータ記憶装置１４との間の転送のためのＴｏｐポインタを格納する。ボトムポインタ部２１は、裏レジスタ部１０ｂとデータ記憶装置１４との間の転送のためのＢｏｔｔｏｍポインタを格納する。
【００２１】
転送方向フラグ部２４は、レジスタ装置１０とデータ記憶装置１４の間のデータ転送方向を示すＤｉｒｅｃｔｉｏｎフラグを格納する。転送要求フラグ部２５は、裏レジスタ部１０ｂとデータ記憶装置１４の間のデータ転送開始を指示するとともに、転送中であるかどうかを示すＴｒａｎｓｆｅｒフラグを格納する。転送パターン部２３は、表レジスタ部１０ａ及び裏レジスタ部１０ｂの間のコピー、裏レジスタ部１０ｂとデータ記憶装置１４の間の転送するか否かをレジスタ単位に制御するＰａｔｔｅｒｎフラグを格納する。Ｐａｔｔｅｒｎフラグと表レジスタ部１０ａ若しくは裏レジスタ部１０ｂとの関係は図２に示すようになっている。尚、図２のＰａｔｔｅｒｎフラグは、指定したパラメータの最上位値の設定を行なうモストシグニフィカントビット（以下「ＭＳＢ」と記載）から、指定したパラメータの最下位値の設定を行なうリーストシグニフィカントビット（以下「ＬＳＢ」と記載）へ向かってサーチされる。
【００２２】
上記の５つの転送レジスタは、プログラムの命令実行時に制御動作に伴って自立的に変化するが、コンテキストの切り替え動作を柔軟に制御できるように、命令プログラムにより読み出し、設定等が可能なように構成される。
【００２３】
命令記憶装置１７は、演算装置１２が演算処理を行なう為の命令プログラムを複数格納しており、演算装置１２が適宜これらの命令プログラムを実行することによりプロセッサ１の処理が行なわれる。演算装置１２は、ストアレジスタ命令（以下「ｓｔｒｅｇｓ命令」と記載）と、ロードレジスタ命令（以下「ｌｄｒｅｇｓ命令」と記載）を備え、この他機械語にて使用される領域定義命令、ムーブ命令、加算命令、減算命令等のアセンブラ命令を備えている。
【００２４】
ｓｔｒｅｇｓ命令は、命令オペランドで示された表レジスタ部１０ａの中のレジスタのみを、裏レジスタ部１０ｂにコピーし、コピーした裏レジスタ部１０ｂの内容を順にデータ記憶装置１４にデータ転送する。
【００２５】
ｌｄｒｅｇｓ命令は、先に実行したｓｔｒｅｇｓ命令で裏レジスタ部１０ｂにコピーしたレジスタのみを表レジスタ部１０ａにコピーし、データ記憶装置１４に転送すべき裏レジスタ部１０ｂのデータが残っていれば、データ記憶装置１４から裏レジスタ部１０ｂへデータ転送する。
【００２６】
ｓｔｒｅｇｓ命令及びｌｄｒｅｇｓ命令による表レジスタ部１０ａ及び裏レジスタ部１０ｂ間のコピーは、１サイクルで行われ、データ記憶装置１４と裏レジスタ部１０ｂ間のデータ転送は、プロセッサ１がデータ記憶装置１４へのメモリアクセスを伴わない命令実行時に、プロセッサ１の命令実行と並列に行われる。
【００２７】
ｓｔｒｅｇｓ命令を実行し、データ記憶装置１４への転送が終了した後は、指定された裏レジスタ部１０ｂとデータ記憶装置１４のデータ構造ブロックは、図３に示すように、同一となる。Ｔｏｐポインタとボトムポインタは、図３のように構造ブロックのメモリアドレスを示している。なお最初のデータ構造ブロックの直前は、終端を示す「０」で初期化されている。
【００２８】
図４（ａ）は、データ構造ブロックが初期状態か、コンテキスト切り替えによる退避および対応する復帰動作が全て終了している状態を示す。図４（ｂ）は、割込み受付動作やサブルーチン呼び出し命令動作に伴って、割込み処理やサブプログラムの先頭で実行されたｓｔｒｅｇｓ命令によってコンテキスト切り替えが行われて退避された状態のデータ構造ブロックを示す。図４（ｃ）は、図４（ｂ）の状態で、再度許可された割込み受付動作やサブルーチン呼び出し命令動作に伴って（ネスティング）、それらの処理プログラムで実行されたｓｔｒｅｇｓ命令によってコンテキスト切り替えを行った状態のデータ構造ブロックを示す。
【００２９】
図５（ａ）は、２回のコンテキスト切り替えでデータ記憶装置１４にコンテキストが保存されている状態のデータ構造ブロックを示す。図５（ｂ）は図５（ａ）の状態でｌｄｒｅｇｓ命令を実行した状態のデータ構造ブロックを示す。図５（ｃ）は、図５（ｂ）の状態で再びｌｄｒｅｇｓ命令を実行してコンテキスト切り替えを行い、退避および対応する復帰動作が終了した状態のデータ構造ブロックを示す。
【００３０】
プロセッサ１は、演算、制御、その他の通常の命令実行時には表レジスタ部１０ａのみを用いて動作するが、ｓｔｒｅｇｓ命令とｌｄｒｅｇｓ命令の２つの命令実行時には、表レジスタ部１０ａ及び裏レジスタ部１０ｂを用いて、両レジスタ間のコピー動作、裏レジスタ部１０ｂとデータ記憶装置１４との間のデータ転送動作を行う。
【００３１】
記憶アクセス装置１３は、データ記憶装置１４に対してアドレスや読み書きのコントロール、データの入出力を行なう。データ記憶装置１４は、アービター部１３ａを備える。アービター部１３ａは、デコータ装置１５からの情報を使用し、演算装置１２の入出力と転送装置１１の入出力の調停を行なう。
【００３２】
デコーダ装置１５は、フェッチ装置１６より受信するコード信号を解読し、演算装置１２に送信する。又、レジスタ装置１０の汎用レジスタ１８ａからデータを読み込み、演算内容の指示に従うと共に、コード信号で指示されるレジスタ装置１０からのデータを読み込み、演算装置１２に送信する。コード信号の解読の際には、このコードがデータを読み込み、演算処理を行なうか、記憶アクセスを行なうか等を判断し、その情報を記憶アクセス装置１３に送信する。
【００３３】
フェッチ装置１６は、プログラムカウンタが示すメモリアドレスを基に、命令記憶装置１７よりプロセッサ実行に必要な命令を取得する。
【００３４】
（コンテキストの切り替え動作）
プロセッサ１によるコンテキスト切り替えの動作は、代表的に、割り込み要求発生時及び関数呼び出し時等に使用される。この２つのコンテキスト切り替えの動作について図面を参照して以下に説明する。
【００３５】
先ず、割り込み要求発生時の動作を図６のフローチャートを用いて説明する。
【００３６】
（ａ）ステップＳ１０１において、演算結果がエラーを起こした、周辺機器から処理要求が送られてくる等の理由により、演算装置１２の演算処理実行中に割り込みが発生すると、演算装置１２はこれまで実行していたコンテキストを保存する命令を実行する。尚、コンテキスト保存処理の詳細については後述する。次にステップＳ１０２において、演算装置１２は、割り込み原因の特定を行なう。又、割り込み原因が複数ある場合には、割り込みの優先順位を決定する。ステップＳ１０３において、割り込み原因が確定すると、図１２の演算装置はそれまで行なっていた処理を一時中断し、割り込み要因毎に、割り込みハンドラを実行し、割り込みハンドラの指示するサブルーチンへジャンプする。
【００３７】
（ｂ）ステップＳ１０４においては、割り込みハンドラの指示するサブルーチンを実行する為に、サブルーチンのコンテキストをレジスタ装置１０へ保存する命令を実行する。このコンテキスト保存命令の詳細については後述する。ステップＳ１０５においては、割り込みハンドラに予め設定されているプログラム処理を実行する。
【００３８】
（ｃ）ステップＳ１０６では、割り込みハンドラの処理が終了すると、演算装置１２は、コンテキストの復帰命令を実行する。ステップＳ１０７では、割り込みハンドラは、このサブルーチンを終了する。
【００３９】
（ｄ）割り込みハンドラの実行後、ステップＳ１０８において、演算装置１２は、割り込み処理を終了させるために、保存していたコンテキストの復帰命令を実行する。尚、コンテキスト復帰命令の詳細については後述する。最後にステップＳ１０９において、演算装置１２は、割り込みハンドラの終了命令を実行する。
【００４０】
次に、関数呼び出し時の動作を図７のフローチャートを用いて説明する。
【００４１】
（ａ）ステップＳ２０１において、関数呼び出し命令が読みだされると、演算装置１２は、サブルーチン実行の為にコンテキストの保存命令を実行する。コンテキスト保存命令の詳細については後述する。ステップＳ２０２において、サブルーチンとして、呼び出された関数の処理を実行する。
【００４２】
（ｂ）ステップＳ２０３において、呼び出し関数の処理が完了すると、演算装置１２は、サブルーチン終了の為のコンテキストの復帰命令を実行する。コンテキスト復帰命令の詳細については後述する。ステップＳ２０４では、演算装置１２は、関数呼び出しのサブルーチンを終了する。
【００４３】
（コンテキスト保存の動作）
次に、ｓｔｒｅｇｓ命令を実行する際のコンテキスト保存の為の切り替え動作について、図８のフローチャートを用いて説明する。尚、レジスタ装置１０のレジスタのＢｏｔｔｏｍポインタ及びＴｏｐポインタは初期状態として、図４（ａ）のようにコンテキスト保存領域を指しているものとする。
【００４４】
（ａ）ステップＳ３０１において、呼び出し関数実行開始時又は割り込みハンドラ実行開始時に、演算装置１２は、ｓｔｒｅｇｓ命令を実行し、表レジスタ部１０ａ内の指定されたデータだけを裏レジスタ部１０ｂにコピーする。コピーするレジスタの指定は命令オペランドで行なわれる。
【００４５】
（ｂ）ステップＳ３０２において、演算装置１２によりｓｔｒｅｇｓ命令が実行されると、命令オペランドで指定された表レジスタ部１０ａのみを、裏レジスタ部１０ｂにコピーする。更にステップＳ３０３において、コピーした裏レジスタ部１０ｂに対応する転送パターン部２３のＰａｔｔｅｒｎフラグ「１」を立て、転送必要とする。転送不要の場合は、フラグ「０」を立てる。ステップＳ３０４では、転送方向フラグ部２４のＤｉｒｅｃｔｉｏｎフラグを設定し、裏レジスタ部１０ｂからデータ記憶装置１４への転送方向を指示する。
【００４６】
（ｃ）ステップＳ３０５では、転送要求フラグ部２５のＴｒａｎｓｆｅｒフラグをＯＦＦ「０」からＯＮ「１」とし、データ記憶装置１４への転送動作を開始させる。ステップＳ３０６では、ボトムポインタ部２１にトップポインタ部２２の内容をコピーする。ステップＳ３０７では、図１の転送パターン部２３のＰａｔｔｅｒｎフラグをＭＳＢ側からＬＳＢ側に順に調べる。転送可の場合は、対応する裏レジスタ部１０ｂのデータを読み出し、Ｔｏｐポインタの指し示すメモリアドレスに図４（ｂ）のように書き込む。この後、再度ＰａｔｔｅｒｎフラグをＭＳＢ側からＬＳＢ側に順に調べ、転送を意味する「１」の位置を得たら、対応する裏レジスタ部１０ｂを設定し、転送を開始する。
【００４７】
（ｄ）ステップＳ３０８では、全てのＰａｔｔｅｒｎフラグのサーチが終了したか否かの判断を行い、サーチ終了と判断されるとステップＳ３１２へ進み、まだサーチを行なうと判断されるとステップＳ３０９へ進む。
【００４８】
ステップＳ３０９では、演算装置１２のＩＤステージを見て、演算命令等のデータ記憶装置１４へのアクセスを行わない命令の実行、つまり、データ記憶装置１４へのパスが空くのを待つ。ステップＳ３１０にてデータ記憶装置１４へのパスが空くと、選択したレジスタをＴｏｐポインタの指すメモリアドレスに格納する。ステップＳ３１１では、Ｔｏｐポインタを次にレジスタを格納するメモリアドレスに進める。実施の形態では、メモリアドレスがバイト単位に付与され、汎用レジスタ１８ａなどのデータ長が３２ビットであり一度に転送するデータ幅が３２ビットあるので、ポインタの内容は４増加する。この後、ステップＳ３０７へ戻り、再度同様に転送処理を行う。
【００４９】
（ｅ）ステップＳ３１２において、転送パターン部２３のＰａｔｔｅｒｎフラグの内容が読み出されて、裏レジスタ部１０ｂからデータ記憶装置１４への転送動作が終了すると、Ｔｏｐポインタの示すメモリアドレスに図４（ｃ）のように書き込まれる。ステップＳ３１３では、トップポインタ部２２のＴｏｐポインタの内容が、次に書き込むメモリアドレスを示すように４増加させる。ステップＳ３１４では、転送要求フラグ部２５のＴｒａｎｓｆｅｒフラグをＯＦＦ、つまり「０」にして、データ記憶装置１４への転送動作を終了する。
【００５０】
（コンテキスト復帰の動作）
次に、コンテキスト復帰を行なうｌｄｒｅｇｓ命令を実行する際のコンテキスト切り替え動作について、図９のフローチャートを用いて説明する。尚、レジスタ装置１０のレジスタのＢｏｔｔｏｍポインタ及びＴｏｐポインタは初期状態として、図５（ａ）の２回のコンテキスト切り替えでデータ記憶装置１４にコンテキストが保存されている状態を示しているものとする。
【００５１】
（ａ）先ず、ステップＳ４０１において、関数実行終了時又は割り込みハンドラ実行終了時に、演算装置１２は、ｌｄｒｅｇｓ命令を実行し、裏レジスタ部１０ｂの指定されたものだけ表レジスタ部１０ａにコピーする。尚、レジスタの指定は命令オペランドで行なわれる。ｌｄｒｅｇｓ命令が実行される際、転送要求フラグ部２５のＴｒａｎｓｆｅｒフラグがＯＮであれば、命令はストールされ、実行待機状態となる。転送要求フラグ部２５のＴｒａｎｓｆｅｒフラグがＯＦＦとなった次のサイクルから命令は実行される。
【００５２】
（ｂ）ステップＳ４０２において、ＴｒａｎｓｆｅｒフラグがＯＦＦとなると、演算装置１２は、命令オペランドで指定された裏レジスタ部１０ｂのみを表レジスタ部１０ａにコピーする。ステップＳ４０３において、トップポインタ部２２にボトムポインタ部２１の内容をコピーする。ステップＳ４０４において、転送方向フラグ部２４のＤｉｒｅｃｔｉｏｎフラグに、データ記憶装置１４からレジスタへの転送方向を設定する。ステップＳ４０５においては、転送要求フラグ部２５のＴｒａｎｓｆｅｒフラグをＯＦＦからＯＮとして、転送動作を開始させる。
【００５３】
（ｃ）転送開始が指示されると、ステップＳ４０５において、演算装置１２は、ボトムポインタ部２１のＢｏｔｔｏｍポインタを４減少させる。ステップＳ４０６では、ボトムポインタ部２１が示す内容がデータ記憶装置１４内から読み出される。ステップＳ４０７では、このボトムポインタ部２１の内容が「０」であれば、ステップＳ４１３へ進む。ボトムポインタ部２１の内容が「０」でなければステップＳ４０８へ進む。
【００５４】
（ｄ）ステップＳ４０８では、読み出したデータを転送パターン部２３に書き込み、ボトムポインタ部２１のレジスタの内容を４減少させる。ステップＳ４０９では、次に更新された転送パターン部２３のＰａｔｔｅｒｎフラグのフラグをＬＳＢ側から順に調べ、転送必要を示す「１」を得ると、Ｂｏｔｔｏｍポインタの示すメモリアドレスからデータを読み出し、転送必要のフラグに対応した裏レジスタ部１０ｂにデータを書き込むと共に、ボトムポインタ部２１のＢｏｔｔｏｍポインタを４減少させる。ステップＳ４１０では、転送パターン部２３のＰａｔｔｅｒｎフラグの調査をＬＳＢからＭＳＢへ向かって順に行い、全てのＰａｔｔｅｒｎフラグのサーチが終了したかの判定を行う。全てのサーチが終了した場合はＳ４１３へ進み処理を終了する。まだサーチを行なう場合は、ステップＳ４１１へ進む。
【００５５】
（ｅ）ステップＳ４１１では、演算装置１２のＩＤステージを見て、演算命令等のデータ記憶装置１４へのアクセスを行わない命令の実行、つまり、データ記憶装置１４へのパスが空くのを待つ。ステップＳ４１２にてデータ記憶装置１４へのパスが空くと、選択したレジスタをＢｏｔｔｏｍポインタの指すメモリアドレスに格納する。ステップＳ３１１では、Ｂｏｔｔｏｍポインタを次にレジスタを格納するメモリアドレスに進める。
【００５６】
（ｆ）このようにして全てのＰａｔｔｅｒｎフラグの処理が終了すると、ステップＳ４１３において、転送要求フラグ部２５のＴｒａｎｓｆｅｒフラグをＯＦＦとしてデータ記憶装置１４からレジスタへの転送動作を終了する。
【００５７】
本発明の実施の形態においては、表レジスタ部１０ａと裏レジスタ部１０ｂは１対１で接続されて、１サイクルでデータ転送が行われるが、裏レジスタ部１０ｂとデータ記憶装置１４の間のデータ転送は、ハードウェアの増加量を削減するためプロセッサ１の内部データメモリのバスを共有して行われる。
【００５８】
尚、割り込み発生時及び関数呼び出し時においてｓｔｒｅｇｓ命令とｌｄｒｅｇｓ命令を使用したソースコード例を図１２に示す。
【００５９】
本発明の実施の形態におけるプロセッサ１は、割込み処理時に、割込み処理プログラムやサブルーチンで呼び出されるプログラムで必要なコンテキスト保存とコンテキスト復帰の処理プログラムが、ｓｔｒｅｇｓ命令とｌｄｒｅｇｓ命令の２命令で実現でき、プログラムサイズを小さくすることができる。これによりコンテキスト切り替えの処理速度が向上するとともに、コンテキストをレジスタからデータ記憶装置１４に退避復帰させるデータ転送をプロセッサ１の命令実行と平行に実施してできるため転送時間が隠蔽され、高速なコンテキスト切り替えが実現できる。更に、不要なレジスタ装置１０のコピー動作やデータ記憶装置１４へのデータ転送動作が行われないため、動作する回路が減って、消費電力の低減が実現できる。
【００６０】
（変更例１）
本発明の実施の形態に係るコンテキスト切り替え操作は、通常の命令実行時には、表レジスタ部１０ａのみを用いて動作し、割込み受付時及びサブルーチン呼び出し命令実行時等は、ｓｔｒｅｇｓ命令を使用して、レジスタ部１０ａ→裏レジスタ部１０ｂ→データ記憶装置１４の流れで、若しくはｌｄｒｅｇｓ命令を使用して、データ記憶装置１４→裏レジスタ部１０ｂ→表レジスタ部１０ａの流れでレジスタ内容のコピー又はデータ転送を行なっていた。
【００６１】
しかし、表レジスタ部１０ａと裏レジスタ部１０ｂ間のコピーは、ｓｔｒｅｇｓ命令及びｌｄｒｅｇｓ命令に含まずに、別の命令を用いて行なってもコンテキスト切り替え操作は可能である。実施の形態において割り込み発生時及び関数呼び出し時においてｓｔｒｅｇｓ命令とｌｄｒｅｇｓ命令を使用したソースコード例は図１２のようになるが、変更１では、このソースコードの（*）の箇所の「レジスタの保存」及び「レジスタの復帰」のコードを省略することが可能となる。
【００６２】
この表レジスタ部１０ａと裏レジスタ部１０ｂ間のコピーを省略する場合の「レジスタの保存」の動作が図１０のフローチャートに示されている。ステップＳ５０１においては、ｓｔｒｅｇｓ命令の準備として、表レジスタ部１０ａから裏レジスタ部１０ｂへのコピー動作を行うようにする命令を新たに追加したり、ＰＳＷにコピーフラグを設けて、そのコピーフラグの状態でコピー動作を制御したりする。ＰＳＷを用いる場合は、新たな命令コードの追加が不要となる。
【００６３】
この準備処理の終了後、ステップＳ５０２〜ステップＳ５１３において、プロセッサ１はｓｔｒｅｇｓ命令を用いて、命令オペランドで示された裏レジスタ部１０ｂのみを、データ記憶装置１４にデータ転送する。尚、ステップＳ５０２〜ステップＳ５１３の動作は、実施の形態のステップＳ３０２〜ステップＳ３１４と同様である為説明を省略する。
【００６４】
又、表レジスタ部１０ａと裏レジスタ部１０ｂ間のコピーを省略する場合の「レジスタの復帰」の動作が図１１のフローチャートに示されている。ステップＳ６０１において、ｌｄｒｅｇｓ命令の準備として、裏レジスタ部１０ｂから表レジスタ部１０ａへのコピー動作を行うようにする命令を新たに追加したり、ＰＳＷを用いてコピー動作を制御したりする。
【００６５】
この準備処理の終了後、ステップＳ６０２〜ステップＳ６１３において、プロセッサ１はｌｄｒｅｇｓ命令を用いて、命令オペランドで示されたデータ記憶装置１４のみを、裏レジスタ部１０ｂにデータ転送する。尚、ステップＳ６０２〜ステップＳ６１３の動作は、実施の形態のステップＳ４０２〜ステップＳ４１３と同様である為説明を省略する。
【００６６】
データ記憶装置１４と裏レジスタ部１０ｂ間のデータ転送は、プロセッサのメモリアクセスを伴わない命令実行時に、プロセッサの命令実行と並列に行われる。
【００６７】
上記により、ｓｔｒｅｇｓ命令とｌｄｒｅｇｓ命令を使用するプログラムを作成する際の自由度を上げることができる。
【００６８】
（変形例２）
ｌｄｒｅｇｓ命令実行時に、裏レジスタ部１０ｂから表レジスタ部１０ａへ各レジスタの指定をコピーするが、このレジスタの指定は、命令オペランドではなく、転送パターン部２３のＰａｔｔｅｒｎフラグを用いて行うようにしてもよい。
【００６９】
上記のように、Ｐａｔｔｅｒｎフラグを用いることにより、レジスタを指定する命令オペランド部が不要となるため、ｌｄｒｅｇｓ命令のコードサイズを小さくすることができる。ひいては、プログラムサイズを小さくすることができ、処理速度の向上が図れる。
【００７０】
（変更例３）
転送パターン部２３のＰａｔｔｅｒｎフラグのフラグは、レジスタ毎に設ける必要はなく、複数のレジスタをグループとして扱い、グループ単位で指定するように構成してもよい。
【００７１】
グループとして扱うことにより、プロセッサ１のコンテキストが増大して、指定する汎用レジスタ１８ａ、１８ｂや専用レジスタ１９ａ、１９ｂの数が増加しても、ｓｔｒｅｇｓ命令やｌｄｒｅｇｓ命令の命令オペランドのサイズの増加を減らすことができる。ひいては、プログラムサイズの増加を抑制することができ、処理速度の低下を少なくすることができる。
【図面の簡単な説明】
【００７２】
【図１】本発明の実施の形態に係るプロセッサの構造図である。
【図２】転送ユニットの転送パターン部とレジスタの対応を示す図である。
【図３】データ記憶装置上の構造ブロックとトップポインタとボトムポインタの対応を示す図である。
【図４】ｓｔｒｅｇｓ命令実行時にデータ記憶装置上へコンテキストの退避が行われた際の状態を示す状態図である。
【図５】ｌｄｒｅｇｓ命令実行時にコンテキストがレジスタ上に復帰した際の状態を示す状態図である。
【図６】割り込み処理の手順を示すフローチャートである。
【図７】関数呼び出し処理の手順を示すフローチャートである。
【図８】コンテキスト保存処理の手順を示すフローチャートである。
【図９】コンテキスト復帰処理の手順を示すフローチャートである。
【図１０】コンテキスト保存処理の変更例の手順を示すフローチャートである。
【図１１】コンテキスト復帰処理の変更例の手順を示すフローチャートである。
【図１２】コンテキスト保存及び復帰処理を記述したソースコードである。
【符号の説明】
【００７３】
１…プロセッサ
１０…レジスタ装置
１０ａ…表レジスタ部
１０ｂ…裏レジスタ部
１１…転送装置
１２…演算装置
１３…記憶アクセス装置
１３ａ…アービター部
１４…データ記憶装置
１５…デコーダ装置
１６…フェッチ装置
１７…命令記憶装置
１８ａ、１８ｂ…汎用レジスタ
１９ａ、１９ｂ…専用レジスタ
２１…ボトムポインタ部
２２…トップポインタ部
２３…転送パターン部
２４…転送方向フラグ部
２５…転送要求フラグ部
【図１】
2005275703.tif 000003
【図２】
2005275703.tif 000004
【図３】
2005275703.tif 000005
【図４】
2005275703.tif 000006
【図５】
2005275703.tif 000007
【図６】
2005275703.tif 000008
【図７】
2005275703.tif 000009
【図８】
2005275703.tif 000010
【図９】
2005275703.tif 000011
【図１０】
2005275703.tif 000012
【図１１】
2005275703.tif 000013
【図１２】
2005275703.tif 000014