(57)【要約】  サブルーチンリターン演算を行なうための方法および媒体である。テスト演算（８８、９０）は、リターン演算（９８）において他の演算（９２、９４）と並行して行なわれる。これらのテスト演算（８８、９０）およびリターン演算（９６、９８）は、単一の命令（８６）に応答して行なわれる。
2009508180.tif 000002
【特許請求の範囲】
【請求項１】
サブルーチンリターン演算を行なうための方法であって、前記方法は、
ａ）前記リターン演算を必要とする命令をフェッチするステップと、
ｂ）前記リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して、リターン値レジスタの内容に基づいて状態フラグをセットするステップとを備え、前記状態フラグは、
ｉ）リターンアドレスレジスタの内容がプログラムカウンタに移動されること、または、
ii）リターンアドレスがスタックから前記プログラムカウンタにポップされること
のうちの一方が起こる前にセットされる、方法。
【請求項２】
リターン条件が満たされているとテスト演算が判断したときのみ、前記リターンアドレスレジスタの前記内容が前記プログラムカウンタに移動されるか、またはリターンアドレスが前記スタックから前記プログラムカウンタにポップされる、請求項１に記載の方法。
【請求項３】
前記リターン演算は、前記リターン演算を行なうための一方のマイクロ演算と、テスト演算を行なうための他方のマイクロ演算という２つのマイクロ演算に分割される、請求項１に記載の方法。
【請求項４】
前記状態フラグは、マイクロプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項１に記載の方法。
【請求項５】
前記状態フラグは、制御信号をマイクロプロセッサのデータメモリに、前記マイクロプロセッサの算術演算論理装置を介してルーティングすることと並行してセットされる、請求項１に記載の方法。
【請求項６】
ステップａ）およびステップｂ）は、単一の命令に応答して行なわれる、請求項１に記載の方法。
【請求項７】
プロセッサにより実行されると、前記プロセッサにサブルーチンリターン演算を行なうための方法を行なわせる命令を格納したプロセッサ読取り可能な記憶媒体であって、前記方法は、
ａ）前記リターン演算を必要とする命令をフェッチするステップと、
ｂ）前記リターン命令を処理するために必要とされる少なくとも１つの他の演算と並行して、リターン値レジスタの内容に基づいて状態フラグをセットするステップとを備え、前記状態フラグは、
ｉ）リターンアドレスレジスタの内容がプログラムカウンタに移動されること、または、
ii）リターンアドレスがスタックから前記プログラムカウンタにポップされること
のうちの一方が起こる前にセットされる、プロセッサ読取り可能な記憶媒体。
【請求項８】
リターン条件が満たされているとテスト演算が判断したときのみ、前記リターンアドレスレジスタの前記内容が前記プログラムカウンタに移動されるか、またはリターンアドレスが前記スタックから前記プログラムカウンタにポップされる、請求項７に記載のプロセッサ読取り可能な記憶媒体。
【請求項９】
前記リターン演算は、前記リターン演算を行なうための一方のマイクロ演算と、テスト演算を行なうための他方のマイクロ演算という２つのマイクロ演算に分割される、請求項７に記載のプロセッサ読取り可能な記憶媒体。
【請求項１０】
前記状態フラグは、マイクロプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項７に記載のプロセッサ読取り可能な記憶媒体。
【請求項１１】
前記状態フラグは、制御信号をマイクロプロセッサのデータメモリに、前記マイクロプロセッサの算術演算論理装置を介してルーティングすることと並行してセットされる、請求項７に記載のプロセッサ読取り可能な記憶媒体。
【請求項１２】
前記方法は、前記リターンアドレスレジスタの前記内容または前記リターンアドレスが前記プログラムカウンタに書込まれる前にパイプラインをフラッシュするステップをさらに備える、請求項７に記載のプロセッサ読取り可能な記憶媒体。
【請求項１３】
ステップａ）およびステップｂ）は、単一の命令に応答して行なわれる、請求項７に記載のプロセッサ読取り可能な記憶媒体。
【請求項１４】
サブルーチンリターン演算を行なうための方法であって、
ａ）リターンアドレスをプログラムカウンタに置くステップと、
ｂ）リターン値レジスタに対してテスト演算を実行するステップとを備え、前記テスト演算は、リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して行なわれ、前記方法はさらに、
ｃ）プログラムのフローをターゲットアドレスに変更するステップと、
ｄ）単一の命令に応答してステップａ）、ステップｂ）およびステップｃ）を行なうステップとを備える、方法。
【請求項１５】
前記プログラムのフローを変更する前記ステップは、リターン条件が満たされていると前記テスト演算が判断したときのみ行なわれる、請求項１４に記載の方法。
【請求項１６】
前記サブルーチンリターン演算は、命令デコード段にもう１サイクル保持される、請求項１４に記載の方法。
【請求項１７】
前記テスト演算のための状態フラグは、マイクロプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項１４に記載の方法。
【請求項１８】
前記テスト演算のための状態フラグは、マイクロプロセッサの算術演算論理装置の下流に位置する前記マイクロプロセッサのデータメモリに制御信号をルーティングすることと並行してセットされる、請求項１４に記載の方法。
【請求項１９】
多数のレジスタをロードするステップをさらに備える、請求項１４に記載の方法。
【請求項２０】
リターン値レジスタにおいてリターン値をセットするステップをさらに備える、請求項１４に記載の方法。
【請求項２１】
プロセッサにより実行されると、前記プロセッサにサブルーチンリターン演算を行なうための方法を行なわせる命令を格納したプロセッサ読取り可能な記憶媒体であって、前記方法は、
ａ）リターンアドレスをプログラムカウンタに置くステップと、
ｂ）リターン値レジスタに対してテスト演算を実行するステップとを備え、前記テスト演算は、リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行し
て行なわれ、前記方法はさらに、
ｃ）プログラムのフローをターゲットアドレスに変更するステップと、
ｄ）単一の命令に応答してステップａ）、ステップｂ）およびステップｃ）を行なうステップとを備える、プロセッサ読取り可能な記憶媒体。
【請求項２２】
前記プログラムのフローを変更する前記ステップは、リターン条件が満たされていると前記テスト演算が判断したときのみ行なわれる、請求項２１に記載のプロセッサ読取り可能な記憶媒体。
【請求項２３】
前記リターン演算は、命令デコード段にもう１サイクル保持される、請求項２１に記載のプロセッサ読取り可能な記憶媒体。
【請求項２４】
前記テスト演算のための状態フラグは、マイクロプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項２１に記載のプロセッサ読取り可能な記憶媒体。
【請求項２５】
前記テスト演算のための状態フラグは、マイクロプロセッサの算術演算論理装置の下流に位置する前記マイクロプロセッサのデータメモリに制御信号をルーティングすることと並行してセットされる、請求項２１に記載のプロセッサ読取り可能な記憶媒体。
【請求項２６】
前記方法は、多数のレジスタをロードするステップをさらに備える、請求項２３に記載のプロセッサ読取り可能な記憶媒体。
【請求項２７】
前記方法は、リターン値レジスタにおいてリターン値をセットするステップをさらに備える、請求項２３に記載のプロセッサ読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マイクロプロセッサにおけるサブプログラムリターン演算に関する。
【背景技術】
【０００２】
発明の背景
プログラムは、ある特定のタスクを行なうサブルーチンを特徴として備えることが多い。タスクが行なわれた後で、プログラムフローはサブルーチンからメインプログラムに戻る。サブルーチンリターンを行なうための１つの一般的なメカニズムは、リターンアドレスレジスタの内容を条件付きでまたは無条件でプログラムカウンタに移動させてからプログラム実行を継続するということを伴う。また、ブール値を表わし得るリテラル定数を用いてリターン値レジスタが更新されてもよい。サブプログラムリターンへの別のアプローチは、リターンアドレスをスタックからプログラムカウンタに「ポップ」し、そこからプログラム実行を継続することである。この演算はまた、スプールアウトされたあらゆるレジスタファイル内容をスタックからレジスタファイルにポップしてもよい。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
サブルーチンリターンを行なうためのこれらの方法は、実行するのに数サイクルを要する。図１において、典型的なパイプライン化されたＣＰＵにおいて伝統的なリターン（「ＲＥＴ」）命令が実行される場合、その命令を実行するために５つのサイクル１０が必要とされる。図２において、典型的なパイプライン化されたＣＰＵは、プログラムカウンタ（「ＰＣ」）４２と命令メモリ４４とを含む。ＣＰＵは、異なるパイプライン段を隔てる４つの異なるパイプラインレジスタ４６、５２、５６および６０を有する。（レジスタ４６と５２との間の）命令デコード段は、現在の命令をデコードして制御信号を生成するための制御／デコード部（「ＣＵ」）４８と、レジスタファイル５０との双方を含む。（レジスタ５２と５６との間の）実行段は、算術演算論理装置（「ＡＬＵ」）５４を含む。（レジスタ５６と６０との間の）メモリ段は、データメモリ５８を含む。図１を引続き参照すると、サイクル１の最中、命令フェッチ（「ＩＦ」）段１２で、ＲＥＴ命令がフェッチされる（ブロック２２）。サイクル２において、命令デコード（「ＩＤ」）段１４で、正しい制御信号が生成され、レジスタファイルからリターンアドレスレジスタが読出される（ブロック２４）。サイクル３において、実行（「ＥＸ」）段１６で、リターンアドレスレジスタ内容が算術演算論理装置（「ＡＬＵ」）を介して変更なしで書込まれる（ブロック２６）。サイクル４の最中、メモリ（「ＭＥＭ」）段で、リターンアドレスレジスタ内容がデータメモリを介して書込まれる。最後に、サイクル５において、書戻し（「ＷＢ」）２０段で、リターンアドレスレジスタ内容がプログラムカウンタ（「ＰＣ」）に書込まれ、パイプラインがフラッシュされる（ブロック３０）。パイプラインが一旦フラッシュされると、リターンアドレスにおける命令がプログラムメモリから読出されるまで、パイプラインは命令をまったく含まない。したがって、パイプラインフラッシュプロセスにおいて数クロックサイクルが浪費される。
【０００４】
同様の問題が、メモリ内のスタックからリターンアドレスレジスタをポップするリターン命令（「ＲＥＴＭＥＭ」）について存在する。図３に示すように、サイクル１において、ＩＦ段で、ＲＥＴＭＥＭ命令がフェッチされる（ブロック３２）。サイクル２の最中、ＩＤ段で、正しい制御信号が生成される。サイクル３において、ＥＸ段の最中、データメモリへの制御信号がＡＬＵを介してルーティングされる（ブロック３６）。サイクル４において、ＭＥＭ段で、データメモリからリターンアドレスが読出される（ブロック３８）。最後に、サイクル５において、ＷＢ段で、メモリから読出されたリターンアドレスがＰ
Ｃに書込まれ、パイプラインがフラッシュされる（ブロック４０）。図１で説明したリターン命令と同様に、パイプラインフラッシュ後に数サイクルが浪費される。
【０００５】
より効率的なサブルーチンリターン演算を提供することが有利であろう。
【課題を解決するための手段】
【０００６】
発明の概要
例示的な一実施例では、リターン演算を必要とし、リターン値レジスタの内容に基づいて状態フラグをセットする命令がフェッチされる。状態フラグは、リターン命令を処理するために必要とされる少なくとも１つの他の演算と並行してセットされる。状態フラグは、ｉ）リターンアドレスレジスタの内容がプログラムカウンタに移動されること、または、ii）リターンアドレスがスタックからプログラムカウンタにポップされることのうちの一方が起こる前にセットされる。別の実施例では、プロセッサ読取り可能な記憶媒体が、プロセッサに、このサブルーチンリターン演算を行なわせる。
【０００７】
この発明のさらに別の例示的な実施例では、サブルーチンリターン演算は、リターンアドレスをプログラムカウンタに置く。リターン値レジスタに対してテスト演算が実行され、テスト演算は、リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して行なわれる。プログラムフローはターゲットアドレスに変更される。上述のステップの各々は、単一の命令に応答して行なわれる。一実施例では、プロセッサ読取り可能な記憶媒体は、プロセッサにこのサブルーチンリターン演算を行なわせる命令を格納する。
【発明を実施するための最良の形態】
【０００８】
発明の詳細な説明
サブルーチンリターン演算の最中、リターン値レジスタのテストに従って（プロセッサの状態レジスタにおいて）状態フラグが更新される、より効率的なサブルーチンリターン演算が提供される。（先行技術では、テスト演算、たとえばリターン値レジスタのテストは、別個の命令に応答して行なわれる。）一実施例では、状態フラグは、条件付きリターン命令などの単一の命令、およびリターン演算を取り入れた単一の命令を実行する演算と並行してセットされる。命令はプロセッサ読取り可能媒体に格納され、この媒体は、電子回路、半導体記憶装置、ＲＯＭ、フラッシュメモリ、フロッピー（登録商標）ディスケット、コンパクトディスク、光ディスクなどのような、情報を格納または転送可能なあらゆる媒体を含む。
【０００９】
これらの命令は既存のハードウェアによって実行され得る。図４において、これらの命令を実行するための例示的なＣＰＵは、ＰＣ６２と命令メモリ６４とを含む。ＣＰＵは、異なる段を隔てる４つのパイプラインレジスタ（ＩＦ／ＩＤ６６、ＩＤ／ＥＸ７０、ＥＸ／ＭＥＭ７４、およびＭＥＭ／ＷＢ７８）を含む。レジスタ６６と７０との間のＩＤ段は、現在の命令をデコードして正しい制御信号を生成するための制御／デコード部６８を含む。ＩＤ段はまた、レジスタファイル１３２も含む。レジスタ７０と７４との間のＥＸ段は、ＡＬＵ７２とフラグレジスタ８４とを含む。レジスタ７４と７８との間のＭＥＭ段は、データメモリ７６を含む。アドレスが（レジスタ７８の後の）ＷＢ段に到達すると、パイプラインはフラッシュされ、フェッチアドレスがＰＣ６２に書込まれる。マルチプレクサ１１８は、どのアドレスがレジスタファイルまたはプログラムカウンタに書込まれるかを判断する（これについては以下により詳細に説明する）。他の実施例では、プロセッサはデータ転送などの異なる特徴を有していてもよく、上述のように、図４で説明されたＣＰＵは例示的なものであり、ここに説明する、より効率的なサブルーチンリターン演算を実行可能な唯一のプロセッサではない。
【００１０】
この発明の一実施例では、当該より効率的なサブルーチンリターン演算を用いた命令の実行中、テスト演算は他の演算と並行して行なわれる。一実施例では、図５に示すように、リターン（「return_with_test」）命令が実行される場合、サイクル１の最中、ＩＦ段で、return_with_test命令がフェッチされる（ブロック８６）。サイクル２において、return_with_testはＩＤ段に入り、正しい制御信号が生成され、レジスタファイルからリターンアドレスレジスタが読出される（ブロック８８）。サイクル３において、return_with_testはＩＤ段にもう１サイクル保持される（一実施例では、これは、デコード段において、命令を２つの「マイクロ演算」に分割することによって行なわれてもよく、一方のマイクロ演算はテスト演算を行ない、他方のマイクロ演算はリターン演算を行なう）。この２回目のサイクルにおいて、レジスタファイルからリターン値レジスタが読出され、ＡＬＵにテスト演算を行なうよう命令する制御信号が生成される（ブロック９０）。サイクル３において、ＥＸ段で、リターンアドレス内容がＡＬＵを介して変更なしで書込まれる（ブロック９２）。サイクル４の最中、ＥＸ段で、ＡＬＵは、値レジスタのテストに対応するフラグをセットする（ブロック９４）。（この実施例では、状態フラグは、リターン値レジスタの内容とゼロとの比較に従ってセットされる。この実施例で用いられる状態フラグは、オーバフロー（「Ｖ」）、負の値（「Ｎ」）、ゼロ結果（「Ｚ」）、および算術または論理演算の後の繰上がり（「Ｃ」）を示す。他の実施例では異なる状態フラグが用いられてもよく、および／または、他の実施例では状態フラグは異なるようにセットされてもよい。）サイクル４の最中、ＭＥＭ段で、リターンアドレスレジスタ内容がデータメモリを介して書込まれる（ブロック９６）。サイクル５の最中、ＷＢ段で、リターンアドレスレジスタ内容がＰＣに書込まれ、パイプラインがフラッシュされる（ブロック９８）。パイプラインフラッシュのために使用されなかったであろうサイクルを使用して、テスト演算が行なわれている。
【００１１】
別の実施例では、メモリ内のスタックからリターンアドレスレジスタをポップするリターン命令（「pop_with_test」）の実行中に、テスト演算が行なわれてもよい。図６において、サイクル１において、ＩＦ段で、pop_with_test命令がフェッチされる（ブロック１００）。サイクル２の最中、ＩＤ段で、正しい制御信号が生成される（ブロック１０２）。サイクル３において、pop_with_testはＩＤにもう１サイクル保持される（一実施例では、命令はＩＤ段において２つのマイクロ演算（サブルーチンリターン演算およびテスト演算）にデコードされる）。レジスタファイルからリターン値レジスタが読出され、ＡＬＵにテスト演算を行なうよう命令する制御信号が生成される（ブロック１０４）。サイクル３において、ＥＸ段で、データメモリへの制御信号がＡＬＵを介してルーティングされる（ブロック１０６）。サイクル４において、ＥＸ段で、ＡＬＵは、リターン値レジスタのテストに対応するフラグをセットする（ブロック１０８）。同じサイクルの最中、ＭＥＭ段で、データメモリからリターンアドレスが読出される（ブロック１１０）。サイクル５において、ＷＢ段で、メモリから読出されたリターンアドレスがＰＣに書込まれ、パイプラインがフラッシュされる（ブロック１１２）。
【００１２】
この発明の他の実施例は、上述の実施例と異なっていてもよい。これらの実施例は、命令を実行するために、より少ない、または追加のクロックサイクルを必要としてもよい。他の実施例は、命令を実行するために、異なるハードウェアを必要としてもよい。さらに他の実施例は、異なるサブプログラムリターン演算および命令に取入れられてもよい。
【００１３】
図５および図６は、「return_with_test」命令および「pop_with_test」命令の例示的な実施例をそれぞれ示す。「return_with_test」命令では、「リターン」は、リターン値レジスタにおける値のテストとともに行なわれる。「テスト」は、特定されたレジスタをテストし、それに応じて条件コードフラグをセットする。「pop_with_test」命令は、リターン値レジスタにおける値のテストとともに、「ポップ」（スタックからのワードをある特定のレジスタまたはプログラムカウンタにロードすること；ＰＣへのポップはパイプ
ラインをフラッシュし、スタックからロードされたアドレスからの命令のフェッチを開始する）を行なう。
【００１４】
制御／デコード部からさまざまな信号が必要とされる。図４に戻り、一実施例において必要とされる信号を以下に挙げる。
【００１５】
pcmux_sel  １１４−プログラムカウンタが順次プログラムアドレスを用いて更新されるか、またはリターン命令によって与えられるアドレスを用いて更新されるかを選択するために使用されるセレクタ信号。
【００１６】
wbmux_sel  １１６−どのアドレスをレジスタファイルにまたはプログラムカウンタに書込むべきかを判断するために書戻し段によって使用されるセレクタ信号。信号が論理「０」である場合、アドレスはＥＸ／ＭＥＭパイプライン段からのＡＬＵ結果から生じる。信号が論理「１」である場合、アドレスはデータメモリから生じる。
【００１７】
as_ctrl  １２０−ＡＬＵ内の加算器がレジスタファイルからのオペランドに対して減算を行なうか、または加算を行なうかを選択するために使用される制御信号。
【００１８】
zeromux_sel  １２２−ＡＬＵへの入力オペランドＢを強制的に整数値ゼロにするために使用される信号。
【００１９】
readreg1  １２４−オペランド１についてのレジスタファイルレジスタ番号。
readreg2  １２６−オペランド２についてのレジスタファイルレジスタ。
【００２０】
loadflag  １２８−状態レジスタがフラグ設定を更新できるようにする制御信号。
writeaddr  １３０−結果が書戻されるレジスタについてのレジスタファイルレジスタ番号。
【００２１】
以下の表は、ＲＥＴ命令のサイクルにおける制御／デコード部からの例示的な出力を示している。この表において識別されたレジスタを以下に挙げる。
【００２２】
Ｒ１２−リターン値レジスタ。テスト演算はこのレジスタに対して行なわれる。
ＬＲ−リンクレジスタ。サブプログラムが完了した後で戻るべきアドレスを保持する。ＬＲはまた、リターンアドレスレジスタ（ＲＡＲ）とも呼ばれてもよい。
【００２３】
ＰＣ−プログラムカウンタ。現在実行中の命令のアドレスを保持する。
以下の表は、return_with_test命令のサイクルにおける制御／デコード部からの例示的な出力を示している。
【００２４】
【表１】
2009508180.tif 000003
【００２５】
以下の表は、pop_with_test命令のサイクルにおける制御／デコード部からの例示的な出力を示している。
【００２６】
【表２】
2009508180.tif 000004
【００２７】
「return_with_test」命令および「pop_with_test」命令は、他の命令の一部として実行可能である。たとえば、「return_with_test」命令は、ある特定の条件が真である場合にサブルーチンからのリターンがあるという条件付きリターン命令の一部として実行可能である。値はリターンレジスタに移動され、リターン値がテストされ、フラグがセットされる。この命令のある特定の例は、ＡＴＭＥＬ  ＡＶＲ３２命令セットにおける「ｒｅｔ｛ｃｏｎｄ４｝」命令である。以下の疑似コードはｒｅｔ｛ｃｏｎｄ４｝命令を説明している（ＳＰはスタックポインタレジスタである）。
【００２８】
演算：
【００２９】
【数１】
2009508180.tif 000005
【００３０】
シンタックス：
【００３１】
【数２】
2009508180.tif 000006
【００３２】
オペランド：
【００３３】
【数３】
2009508180.tif 000007
【００３４】
状態フラグ：
演算ＣＰ  Ｒ１２，０の結果、フラグがセットされる。
【００３５】
【数４】
2009508180.tif 000008
【００３６】
以下の表は、上に用いられた簡略記憶記号の一部、および以下の「多数のレジスタをロードする」命令についての疑似コードを説明している。
【００３７】
【表３】
2009508180.tif 000009
【００３８】
演算ＣＰ  Ｒ１２，０は、比較または演算を伴わない減算演算である。この特定の場合、演算結果＝Ｒ１２−０である。
【００３９】
「return_with_test」演算が採用され得る別の命令は、ＡＶＲ３２命令セットからの「多数のレジスタをロードする」命令である。この命令は、レジスタポインタによって指示された連続するワードを、命令で特定されたレジスタにロードする。ＰＣはロード可能であり、ロードされたターゲットアドレスへのジャンプをもたらす。ＰＣがロードされる場合、Ｒ１２におけるリターン値がテストされ、フラグが更新される。リターン値は−１、０または１に随意にセットされてもよい。以下の疑似コードはこの命令を説明している（ＳＰはスタックポインタである）。
【００４０】
【数５】
2009508180.tif 000010
【００４１】
シンタックス：
【００４２】
【数６】
2009508180.tif 000011
【００４３】
オペランド：
【００４４】
【数７】
2009508180.tif 000012
【００４５】
状態フラグ：
フラグは、Ｒｅｇｌｉｓｔ１６［ＰＣ］＝＝１である場合のみ更新される。
【００４６】
それらは、演算ＣＰ  Ｒ１２，０の結果、セットされる。
【００４７】
【数８】
2009508180.tif 000013
【００４８】
「pop_with_test」演算を採用する同様の命令が採用されてもよく、その場合、ＳＰによって指示されたワードは、命令で特定されたレジスタにロードされる。
【００４９】
「pop_with_test」演算が採用され得る命令は、ＡＶＲ３２命令セットからの「多数のレジスタをスタックからポップする」（「ＰＯＰＭ」）命令である。この命令は、ＳＰによって指示された連続するワードを、命令で特定されたレジスタにロードする。
【００５０】
サブルーチンリターン演算が異なる命令にどのように採用され得るかを示す特定の例が上述されてきたが、他の実施例はサブルーチン演算を異なる命令に取入れてもよい。
【００５１】
このより効率的なサブルーチンリターン演算の一利点は、コードサイズの減少である。なぜなら、テスト演算がリターン演算によって暗黙的に行なわれ得るため、明示的な「テストリターンレジスタ」命令が削除可能だからである。別の利点は、リターンレジスタテストが、プログラムが戻る先の命令のフェッチングと並行して行なわれるために、実行時間が短くなることである。
【００５２】
上述の命令および演算は、ＲＩＳＣマシンおよびＣＩＳＣマシンの双方において採用され得る。
【００５３】
この発明を特定の例示的な実施例について説明してきたが、変形およびこれらの実施例への追加がこの発明の原理から逸脱することなくなされ得ることを、当業者であれば認識するであろう。たとえば、リターン演算は実行されるためにより多いまたはより少ないサ
イクルを必要としてもよく、または、リターン演算は異なる命令の一部であってもよく、もしくは、リターン演算を実行するプロセッサは異なるアーキテクチャを有していてもよい。別の実施例では、リターン演算が１サイクルで完了され得るよう（すなわち、単一の命令に応答して行なわれる２つのマイクロ演算が１サイクルで完了されるよう）、より多くのハードウェアが追加されてもよい。
【図面の簡単な説明】
【００５４】
【図１】先行技術においてリターン命令がどのように実行されるかを示す図である。
【図２】先行技術におけるパイプライン化されたＣＰＵのブロック図である。
【図３】先行技術においてメモリ内のスタックからリターンアドレスレジスタをポップするリターン命令がどのように実行されるかを示す図である。
【図４】この発明の例示的な一実施例におけるパイプライン化されたＣＰＵのブロック図である。
【図５】この発明の一実施例におけるリターン命令の例示的な実行を示す図である。
【図６】この発明の一実施例において実行される、メモリ内のスタックからリターンアドレスレジスタをポップするリターン命令の例示的な実行を示す図である。
【図１】
2009508180.tif 000014
【図２】
2009508180.tif 000015
【図３】
2009508180.tif 000016
【図４】
2009508180.tif 000017
【図５】
2009508180.tif 000018
【図６】
2009508180.tif 000019
【手続補正書】
【提出日】平成19年9月26日(2007.9.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
単一のプロセッサベースのシステムにおいてサブルーチンリターン演算を行なうための方法であって、前記方法は、
ａ）前記リターン演算を必要とする命令をフェッチするステップと、
ｂ）前記リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して、リターン値レジスタの内容に基づいて状態フラグをセットするステップとを備え、前記状態フラグは、
ｉ）リターンアドレスレジスタの内容がプログラムカウンタに移動されること、または、
ii）リターンアドレスがスタックからポップされて前記プログラムカウンタに移動されること
のうちの一方が起こる前にセットされる、方法。
【請求項２】
リターン条件が満たされているとテスト演算が判断したときのみ、（ｉ）前記リターンアドレスレジスタの前記内容が前記プログラムカウンタに移動されるか、または（ii）リターンアドレスが前記スタックからポップされて前記プログラムカウンタに移動される、請求項１に記載の方法。
【請求項３】
前記リターン演算は、前記リターン演算を行なうための第１のマイクロ演算と、テスト演算を行なうための第２のマイクロ演算という２つのマイクロ演算に分割される、請求項１に記載の方法。
【請求項４】
前記状態フラグは、前記単一のプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項１に記載の方法。
【請求項５】
前記状態フラグは、制御信号が前記単一のプロセッサの算術演算論理装置を通過する際に前記制御信号を前記単一のプロセッサのデータメモリにルーティングすることと並行してセットされる、請求項１に記載の方法。
【請求項６】
単一のプロセッサにより実行されると、前記プロセッサにサブルーチンリターン演算を行なうための方法を行なわせる命令を格納したプロセッサ読取り可能な記憶媒体であって、前記方法は、
ａ）前記リターン演算を必要とする命令をフェッチするステップと、
ｂ）前記リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して、リターン値レジスタの内容に基づいて状態フラグをセットするステップとを備え、前記状態フラグは、
ｉ）リターンアドレスレジスタの内容がプログラムカウンタに移動されること、または、
ii）リターンアドレスがスタックからポップされて前記プログラムカウンタに移動されること
のうちの一方が起こる前にセットされる、プロセッサ読取り可能な記憶媒体。
【請求項７】
リターン条件が満たされているとテスト演算が判断したときのみ、（ｉ）前記リターンアドレスレジスタの前記内容が前記プログラムカウンタに移動されるか、または（ii）リターンアドレスが前記スタックからポップされて前記プログラムカウンタに移動される、請求項６に記載のプロセッサ読取り可能な記憶媒体。
【請求項８】
前記リターン演算は、前記リターン演算を行なうための第１のマイクロ演算と、テスト演算を行なうための第２のマイクロ演算という２つのマイクロ演算に分割される、請求項６に記載のプロセッサ読取り可能な記憶媒体。
【請求項９】
前記状態フラグは、前記単一のプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項６に記載のプロセッサ読取り可能な記憶媒体。
【請求項１０】
前記状態フラグは、制御信号が前記単一のプロセッサの算術演算論理装置を通過する際に前記制御信号を前記単一のプロセッサのデータメモリにルーティングすることと並行してセットされる、請求項６に記載のプロセッサ読取り可能な記憶媒体。
【請求項１１】
前記方法は、前記リターンアドレスレジスタの前記内容または前記リターンアドレスが前記プログラムカウンタに書込まれる前にパイプラインをフラッシュするステップをさらに備える、請求項６に記載のプロセッサ読取り可能な記憶媒体。
【請求項１２】
単一のプロセッサベースのシステムにおいてサブルーチンリターン演算を行なうための方法であって、
ａ）リターンアドレスをプログラムカウンタに置くステップと、
ｂ）リターン値レジスタに対してテスト演算を実行するステップとを備え、前記テスト演算は、リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して行なわれ、前記方法はさらに、
ｃ）プログラムのフローをターゲットアドレスに変更するステップと、
ｄ）単一の命令に応答してステップａ）、ステップｂ）およびステップｃ）を行なうステップとを備える、方法。
【請求項１３】
前記プログラムのフローを変更する前記ステップは、リターン条件が満たされていると前記テスト演算が判断したときのみ行なわれる、請求項１２に記載の方法。
【請求項１４】
前記サブルーチンリターン演算は、命令デコード段にもう１サイクル保持される、請求項１２に記載の方法。
【請求項１５】
前記テスト演算のための状態フラグは、前記単一のプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項１２に記載の方法。
【請求項１６】
前記テスト演算のための状態フラグは、前記単一のプロセッサの算術演算論理装置の下流に位置する前記単一のプロセッサのデータメモリに制御信号をルーティングすることと並行してセットされる、請求項１２に記載の方法。
【請求項１７】
多数のレジスタをロードするステップをさらに備える、請求項１２に記載の方法。
【請求項１８】
リターン値レジスタにおいてリターン値をセットするステップをさらに備える、請求項１２に記載の方法。
【請求項１９】
単一のプロセッサにより実行されると、前記プロセッサにサブルーチンリターン演算を行なうための方法を行なわせる命令を格納したプロセッサ読取り可能な記憶媒体であって、前記方法は、
ａ）リターンアドレスをプログラムカウンタに置くステップと、
ｂ）リターン値レジスタに対してテスト演算を実行するステップとを備え、前記テスト演算は、リターン演算を処理するために必要とされる少なくとも１つの他の演算と並行して行なわれ、前記方法はさらに、
ｃ）プログラムのフローをターゲットアドレスに変更するステップと、
ｄ）単一の命令に応答してステップａ）、ステップｂ）およびステップｃ）を行なうステップとを備える、プロセッサ読取り可能な記憶媒体。
【請求項２０】
前記プログラムのフローを変更する前記ステップは、リターン条件が満たされていると前記テスト演算が判断したときのみ行なわれる、請求項１９に記載のプロセッサ読取り可能な記憶媒体。
【請求項２１】
前記リターン演算は、命令デコード段にもう１サイクル保持される、請求項１９に記載のプロセッサ読取り可能な記憶媒体。
【請求項２２】
前記テスト演算のための状態フラグは、前記単一のプロセッサの算術演算論理装置を介してリターンアドレスレジスタの内容を書込むことと並行してセットされる、請求項１９に記載のプロセッサ読取り可能な記憶媒体。
【請求項２３】
前記テスト演算のための状態フラグは、前記単一のプロセッサの算術演算論理装置の下流に位置する前記単一のプロセッサのデータメモリに制御信号をルーティングすることと並行してセットされる、請求項１９に記載のプロセッサ読取り可能な記憶媒体。
【請求項２４】
前記方法は、多数のレジスタをロードするステップをさらに備える、請求項２１に記載のプロセッサ読取り可能な記憶媒体。
【請求項２５】
前記方法は、リターン値レジスタにおいてリターン値をセットするステップをさらに備える、請求項２１に記載のプロセッサ読取り可能な記憶媒体。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
サブルーチンリターンを行なうためのこれらの方法は、実行するのに数サイクルを要する。図１において、典型的なパイプライン化されたＣＰＵにおいて伝統的なリターン（「ＲＥＴ」）命令が実行される場合、その命令を実行するために５つのサイクル１０が必要とされる。図２において、典型的なパイプライン化されたＣＰＵは、プログラムカウンタ（「ＰＣ」）４２と命令メモリ４４とを含む。ＣＰＵは、異なるパイプライン段を隔てる４つの異なるパイプラインレジスタ４６、５２、５６および６０を有する。（レジスタ４６と５２との間の）命令デコード段は、現在の命令をデコードして制御信号を生成するための制御／デコード部（「ＣＵ」）４８と、レジスタファイル５０との双方を含む。（レジスタ５２と５６との間の）実行段は、算術演算論理装置（「ＡＬＵ」）５４を含む。（レジスタ５６と６０との間の）メモリ段は、データメモリ５８を含む。図１を引続き参照すると、サイクル１の最中、命令フェッチ（「ＩＦ」）段１２で、ＲＥＴ命令がフェッチされる（ブロック２２）。サイクル２において、命令デコード（「ＩＤ」）段１４で、正しい制御信号が生成され、レジスタファイルからリターンアドレスレジスタが読出される（ブロック２４）。サイクル３において、実行（「ＥＸ」）段１６で、リターンアドレスレジスタ内容が算術演算論理装置（「ＡＬＵ」）を介して変更なしで書込まれる（ブロック２６）。サイクル４の最中、メモリ（「ＭＥＭ」）段１８で、リターンアドレスレジスタ内容がデータメモリを介して書込まれる。最後に、サイクル５において、書戻し（「ＷＢ」）２０段で、リターンアドレスレジスタ内容がプログラムカウンタ（「ＰＣ」）に書込まれ、パイプラインがフラッシュされる（ブロック３０）。パイプラインが一旦フラッシュされると、リターンアドレスにおける命令がプログラムメモリから読出されるまで、パイプラインは命令をまったく含まない。したがって、パイプラインフラッシュプロセスにおいて数クロックサイクルが浪費される。
【国際調査報告】
2009508180.tif 000020