(57)【特許請求の範囲】
【請求項１】
複数の命令を実行中に、マイクロプロセッサによって必要数のノップ（動作なし）命令を自動的に挿入する方法であって、該複数の命令が少なくとも１つの多重サイクル命令を含み、遅延スロットの総数が該少なくとも１つの多重サイクル命令に必要であり、該方法が、
（ａ）該少なくとも１つの多重サイクル命令に関連した、挿入された遅延スロット命令（ＩＤＳＩ）数を判定する工程と、
（ｂ）該遅延スロットの総数から該ＩＤＳＩ数を減算することによって、該マイクロプロセッサによって該ノップ命令の必要数を計算する工程と、
（ｃ）該マイクロプロセッサによって該必要数のノップ命令を実行する工程と
を包含する方法。
【請求項２】
前記少なくとも１つの多重サイクル命令に必要な前記遅延スロットの総数が、ハードウェア依存である、請求項１に記載の方法。
【請求項３】
前記複数の命令を受け取るアセンブラを提供し、該複数の命令を前記マイクロプロセッサによる実行のために準備する工程をさらに包含し、該アセンブラを提供する工程が工程（ａ）が実行される前に実行され、工程（ａ）が、
（ｉ）該アセンブラによって前記ＩＤＳＩ数をカウントする工程と、
（ｉｉ）該ＩＤＳＩ数を該マイクロプロセッサに伝達する工程と
をさらに包含する、請求項１に記載の方法。
【請求項４】
前記ＩＤＳＩ数を前記マイクロプロセッサに伝達する工程が、
（Ｉ）前記少なくとも１つの多重サイクル命令内に遅延スロットフィールドを提供する工程と、
（ＩＩ）前記アセンブラによって該ＩＤＳＩ数を該遅延スロットフィールドに入れる工程と、
（ＩＩＩ）該マイクロプロセッサによって該ＩＤＳＩ数を該遅延スロットフィールドから取り出す工程と
をさらに包含する、請求項３に記載の方法。
【請求項５】
複数の命令を実行中に、マイクロプロセッサによって必要数のノップ命令を自動的に挿入する方法であって、該複数の命令が、少なくとも１つの多重サイクル命令を含み、該方法は、
（ａ）該複数の命令を受け取るアセンブラを提供する工程と、
（ｂ）該マイクロプロセッサに、該少なくとも１つの多重サイクル命令に必要な遅延スロットの総数を提供する工程と、
（ｃ）前記アセンブラによって、該少なくとも１つの多重サイクル命令に関連したＩＤＳＩ数を判定する工程と、
（ｄ）該ＩＤＳＩ数を該マイクロプロセッサに伝達する工程と、
（ｅ）該遅延スロットの総数から該ＩＤＳＩ数を減算することによって、該マイクロプロセッサによって該ノップ命令の必要数を計算する工程と、
（ｆ）該マイクロプロセッサによって該必要数のノップ命令を実行する工程と
を包含する方法。
【請求項６】
前記少なくとも１つの多重サイクル命令に必要な前記遅延スロットの総数が、ハードウェア依存である、請求項５に記載の方法。
【請求項７】
工程（ａ）が、
（ｉ）前記アセンブラによって前記ＩＤＳＩ数をカウントする工程
をさらに包含する、請求項５に記載の方法。
【請求項８】
前記ＩＤＳＩ数を前記マイクロプロセッサに伝達する工程が、
（ｉ）前記少なくとも１つの多重サイクル命令内に遅延スロットフィールドを提供する工程と、
（ｉｉ）前記アセンブラによって該ＩＤＳＩ数を該遅延スロットフィールドに入れる工程と、
（ｉｉｉ）該マイクロプロセッサによって該ＩＤＳＩ数を該遅延スロットフィールドから取り出す工程と
をさらに包含する、請求項７に記載の方法。
【発明の詳細な説明】
【０００１】
（発明の分野および背景）
本発明は、種々の数の有用な命令を遅延スロットに挿入する方法に関し、具体的には、有用な命令が遅延スロットに入れられることを可能にしながら、実質的には実際のノップ（ｎｏｐ）（動作なし）命令をプログラム自体に入れることなしに、多重サイクル命令を実行するために、自動的且つ様々に遅延スロットに挿入されるべき追加のノップ命令数を判定する方法に関する。本発明の方法は、フェッチ動作数が減少するため、消費電力を節約すると共に、プログラムを格納するのに必要なメモリ内の空間の量を減らす。これらの利点は、依然遅延スロットが使用されることを可能にしながら達成される。
【０００２】
マイクロプロセッサは、約２５年前に導入されて、多くの異なるタイプの技術において急速に増加してきた。リアルタイムのマイクロプロセッサ技術の進歩は、特に通信産業においては、携帯電話、留守番電話およびオーディオシステムなどの高度なデバイスの大量生産を後押ししてきた。開発および生産のコストを下げながら、技術の性能を上げるために、これらのデバイスの生産のより効率的な方法が、継続的に追求されている。
【０００３】
マイクロプロセッサは、人間のプログラマまたはコードジェネレータによって書かれるプログラムコードから得られる機械コード命令を実行する。現代のマイクロプロセッサの命令のほとんどは、シングルクロックサイクル内で実行される。しかしながら、いくつかの命令は、実行するために１より多いクロックサイクルを必要とし、多重サイクル命令と呼ばれる。典型的な多重サイクル命令は、条件付きブランチ命令、およびその他のプログラムフロー命令を含む。多重サイクル命令が効力を発する前に経過するクロックサイクルが浪費される。これらのクロックサイクルは、遅延スロットと呼ばれる。
【０００４】
図１は、多重サイクル命令１４に必要な３つの空のサイクル１２を挿入することによって浪費される時間を示す、従来技術のプログラムの命令シーケンス１０を示す。各空のサイクル１２は、シングルサイクル命令１６を実行するという結果をもたらさず、多重サイクル命令１４の実行を可能にするためにのみ挿入される。明らかに、命令シーケンス１０は、多重サイクル命令１４の実行を可能にする、相対的に非能率的な方法を表す。
【０００５】
マイクロプロセッサのパイプラインアーキテクチャは、より高い効率のためにより多い命令を平行して実行するように開発された。パイプライン化されたマイクロプロセッサは、いくつかの命令を同時に実行することが可能であるため、マイクロプロセッサが空のタイムスロット中にアイドル状態になるということがない。多重サイクル命令の実行に必要な、以前には浪費されていた時間を使用するために、他の命令が人間のプログラマによって遅延スロットに挿入され得る。マイクロプロセッサは、遅延スロット中にこれらの遅延スロット命令を個々にフェッチし、これらの命令をパイプにロードし、次いで命令を同時に実行する。これらの挿入された命令は通常、遅延スロットが元々生成された多重サイクル命令に関係しない。代わりに、これらの命令は、制御という仕事、続く命令のロードの登録など、その他のタスクを実行する。
【０００６】
図２は、従来技術によるパイプライン化されたアーキテクチャを有するマイクロプロセッサによって実行されるように書き換えられた、図１のプログラムを示す。ここで、プログラムの命令シーケンス１８は、多重サイクル命令１４用の遅延スロット中に、サイクル４、５、６において実行される３つの命令２０を特徴とする。それゆえ、図２のプログラムは、図１のプログラムに比べ、より効率的に実行される。
【０００７】
しかしながら、現在パイプライン化されているマイクロプロセッサアーキテクチャは、多数の弱点を有している。例えば、有用な命令が遅延スロットに挿入されない場合には、時間とプログラムを保持するメモリ空間の双方が、多重サイクル命令によって浪費される。すべてではなく一部の遅延スロットのみが有用な命令によって満たされる場合には、現在使用されていない遅延スロットがノップ（動作なし）命令をロードされる必要がある。ノップ命令は、メモリ空間を必要とするが、いかなる有用な機能をも実行しない。このようなノップ命令が頻繁に必要とされるため、遅延スロットの問題は単に減少するのみであり、解決はされない。それゆえ、追加のメモリ空間の必要性と浪費される時間量との間のバランスという問題がある。
【０００８】
浪費される時間とメモリ空間の問題に加えて、プログラマの必要性もまた考慮されなければならない。プログラマは、性能を最適化するために、できるだけ多くの遅延スロットを有用な命令で満たすべきであるが、有用な命令を見つけることが簡単であることはほとんどない。有用な命令をすべての遅延スロットに挿入するプロセスは、時間がかかるものであり、文書化および維持することが困難である。プログラマは、多くの時間を、有用な命令を探して遅延スロットに入れることに費やす。さらに、Ｃコンパイラなどの高水準言語コンパイラもまた、遅延スロットを有用な命令で満たそうと試みる必要がある。最適化アルゴリズムをもってしても、このようなコンパイラは、しばしばすべての遅延スロットを使用することができず、それゆえにプログラムを格納するために必要な追加の空間を浪費している。
【０００９】
プログラムフロー命令は、このような多重サイクル命令の１例であって、典型的な通信用途において、平均、１８シングルサイクル命令ごとに、１プログラムフロー命令の割合で起こる。この割合は、平均的なプログラムフロー命令が、以下の式１によって、３つの必要なノップ命令を生成することを知りながら、予測される浪費されるメモリ量を計算するために使用され得る。
【００１０】
【数１】
0003639557.tif 000002
式１は、例えば、サイズが１８Ｋｂであるプログラムが、他のタイプの多重サイクル命令によって浪費されるメモリを含まずに、３Ｋｂのメモリを浪費していることを示す。このようなメモリの浪費は、生産コストを増加させるとともに、関連のデバイスの動作の効率を下げる。それゆえ、多重サイクル命令は、時間およびプログラムメモリを浪費すること、および遅延スロットを命令に使用しようとする際に、プログラマによって要求される時間量を増やすことを含め、３股の問題をもたらす。
【００１１】
多重サイクル命令が起こる相対的に高い割合は、パイプライン化されたマイクロプロセッサアーキテクチャの欠点を強調させる。現在、多重サイクル命令を処理する２つの異なる方法が、従来技術において利用可能である。第１の方法は、いかなる遅延スロットをも使用せず、それゆえに時間を浪費するがメモリを節約することを含む。これはマイクロプロセッサが、プログラムにノップ命令を明示的に含ませることなしに、ノップ命令を実行し得るからである。第２の方法は、実際の命令またはノップ命令を挿入することにより、すべての遅延スロットが使用されることを必要とする。ノップ命令が挿入される場合には、必要とされるメモリ空間が増加する。しかしながら、実際の命令が効率的に挿入される場合、プログラムを実行するのに必要な時間量が減少する。
【００１２】
第１の従来技術の方法は、プログラムの実行に高度な性能（時間に関して）が必要とされない場合に、選択される。プログラムの実行の性能、そしてそれゆえにプログラムが実行されるのに必要な時間量ではなく、メモリの節約とプログラマによるプログラミングの容易さが優先される。第２の従来技術の方法は、効率的に実行される必要がある、高度な性能のアプリケーション向けに設計される。したがって、プログラムの急速で効率的な実行に興味のあるプログラマは、有用な命令をすべての遅延スロットに挿入する必要がある。このタスクは、長ったらしく退屈なタスクであるが、高い実行効率を得る可能性がある。したがって、このタスクは、すべての遅延スロットが使用される場合には、プログラムを実行するのに必要な時間量を減少させ得、すべての遅延スロットが有用に使用されるわけではない場合には、プログラムを格納するのに必要なメモリ量が増大するという不利益を生じさせ得る。遅延スロットのすべてを使用することに失敗した場合、ノップ命令が残りの使用されていない遅延スロットのすべてに挿入されることになる。それゆえ、多重サイクル命令を処理する従来技術の方法のうち、３つすべての利点、すなわちスピード、メモリの経済的且つ効率的な使用、およびプログラミングの容易さを提供するものはない。
【００１３】
それ故に、人間のプログラマまたは高水準言語コンパイラによって、有用な命令のみを明示的に遅延スロットに挿入させることで、遅延スロットをより効率的に処理する方法であって、同時に、性能を改善し、開発時間およびコストを下げ、このような有用な命令を保持する追加のメモリ空間の必要性とプログラム実行中にこのような内在的なノップ命令によって浪費される時間量との最適なバランスを提供する方法が必要とされ、それを有することが有用である。これらの方法を用いて、内在的なノップ命令が、マイクロプロセッサの動作中に実質的に自動のプロセスに残っている遅延スロット数を補完するために挿入され、かつマイクロプロセッサに関連付けられたメモリ空間がより効果的に使用される。
【００１４】
（発明の要旨）
本発明は、動作中のマイクロプロセッサによって、動的な数の内在的なノップ命令を挿入する方法に関する。内在的なノップ命令は、プログラム自体に実際のノップ命令を入れることなしに、マイクロプロセッサによって実行される動作なし命令である。本発明の方法は、適切な数の内在的なノップ命令が、多重サイクル命令が起こるごとに、自動的に計算および実行されることを可能にする。以下、ノップ命令という用語は、プログラマまたはコードジェネレータの直接的な介入なしに起こるプロセスを自動的に示す。適切な内在的なノップ命令数は、必要な遅延スロットの総数から、挿入された遅延スロット命令（ＩＤＳＩ）数を減算することによって、自動的にマイクロプロセッサによって計算される。
【００１５】
本発明の方法は、プログラムを格納するのに必要なメモリ内の空間量を減少させると共に、フェッチ動作数が減少するために、消費電力を節約するという利点を有する。さらに、本発明は、このような有用な命令を保持する追加のメモリ空間の必要性と、プログラム実行中に浪費される時間量との最適なバランス、およびノップ命令の挿入と、人間のプログラマが有用な遅延スロット命令を挿入するのに必要な追加の時間とのバランスを提供する。挿入された遅延スロット命令数は、好適にはアセンブラによってカウントされ、次いでマイクロプロセッサにとって利用可能となる。より好適には、この数は、アセンブラによってコード化された命令内の遅延スロットフィールド内に入れられ、次いでマイクロプロセッサによって遅延スロットフィールドから取り出される。それゆえに、本発明の方法によって、マイクロプロセッサは、図１の従来技術とは対照的に、追加のメモリリソースを必要とせず、そしてプログラマまたは高水準言語コンパイラなどのコードジェネレータに、使用されていない遅延スロットの各々にノップ命令を挿入させることを強制することなしに、自動的に必要数の内在的なノップ命令を挿入し、多重サイクル命令が効力を発するのに必要なサイクルを満たすことが可能になる。多重サイクル命令用に挿入された遅延スロット命令（ＩＤＳＩ）は、内在的か内在的でないかに関わらず、ノップ命令ではないという点で有用な命令である。
【００１６】
本発明によると、複数の命令を実行中に、マイクロプロセッサによって必要数のノップ（動作なし）命令を自動的に挿入する方法が提供される。複数の命令は、少なくとも１つの多重サイクル命令を含み、遅延スロットの総数が、少なくとも１つの多重サイクル命令に必要である。本方法は、（ａ）少なくとも１つの多重サイクル命令に関連した、挿入された遅延スロット命令（ＩＤＳＩ）数を判定する工程と、（ｂ）遅延スロットの総数からＩＤＳＩ数を、マイクロプロセッサによって減算することによって、必要数のノップ命令を計算する工程と、（ｃ）マイクロプロセッサによって必要数のノップ命令を実行する工程とを含む。
【００１７】
好適には、少なくとも１つの多重サイクル命令に必要な遅延スロットの総数は、ハードウェア依存型である。また好適には、本方法は、複数の命令を受け取るアセンブラを提供し、複数の命令をマイクロプロセッサによる実行のために準備する工程をさらに含み、アセンブラを提供する工程が工程（ａ）が実行される前に実行され、工程（ａ）は、（ｉ）アセンブラによってＩＤＳＩ数をカウントする工程と、（ｉｉ）ＩＤＳＩ数をマイクロプロセッサに伝達する工程とをさらに含む。より好適には、ＩＤＳＩ数をマイクロプロセッサに伝達する伝達する工程が、（Ｉ）少なくとも１つの多重サイクル命令内に遅延スロットフィールドを提供する工程と、（ＩＩ）アセンブラによってＩＤＳＩ数を遅延スロットフィールドに入れる工程と、（ＩＩＩ）マイクロプロセッサによってＩＤＳＩ数を遅延スロットフィールドから取り出す工程とをさらに含む。
【００１８】
本発明の別の実施形態によると、複数の命令を実行中に、マイクロプロセッサによって、必要数のノップ命令を自動的に挿入する方法が提供される。複数の命令は、少なくとも１つの多重サイクル命令を含み、本方法は、（ａ）複数の命令を受け取るアセンブラを提供する工程と、（ｂ）マイクロプロセッサに、少なくとも１つの多重サイクル命令に必要な遅延スロットの総数を提供する工程と、（ｃ）アセンブラによって、少なくとも１つの多重サイクル命令に関連したＩＤＳＩ数を判定する工程と、（ｄ）ＩＤＳＩ数をマイクロプロセッサに伝達する工程と、（ｅ）遅延スロットの総数からＩＤＳＩ数を、マイクロプロセッサによって減算することによって、必要数のノップ命令を計算する工程と、（ｆ）マイクロプロセッサによって必要数のノップ命令を実行する工程とを含む。以下、高水準言語コンパイラという用語は、アセンブリプログラミング言語よりハイレベルな、ＣまたはＣ++などのプログラミング言語のためのコンパイラを示す。
【００１９】
上述およびその他の目的、局面、利点は、図面を参照しながら、以下の本発明の好適な実施形態の詳細な説明から、よりよく理解される。
【００２０】
（発明の詳細な説明）
本発明は、動作中のマイクロプロセッサによって、動的な数の内在的なノップ命令を挿入する方法に関する。内在的なノップ命令は、プログラム自体に実際のノップ命令を入れることなしに、マイクロプロセッサによって実行される動作なし命令である。本発明の方法は、適切な数の内在的なノップ命令が、多重サイクル命令が起こるごとに、自動的に計算および実行されることを可能にする。以下、ノップ命令という用語は、プログラマまたは高水準言語コンパイラの直接的な介入なしに自動的に起こるプロセスを示す。適切な内在的なノップ命令数は、必要な遅延スロットの総数から、挿入された遅延スロット命令（ＩＤＳＩ）数を減算することによって、自動的にマイクロプロセッサによって計算される。
【００２１】
ＩＤＳＩ数は好適にはアセンブラによってカウントされ、次いでマイクロプロセッサにとって利用可能となる。より好適には、この数は、アセンブラによってコード化された命令内の遅延スロットフィールド内に入れられ、次いでマイクロプロセッサによって遅延スロットフィールドから取り出される。それゆえに、本発明の方法によって、マイクロプロセッサは、追加のメモリリソースを必要とせず、そしてプログラマまたは高水準言語コンパイラに、使用されていない遅延スロットの各々にノップ命令を挿入させることを強制することなしに、自動的に必要数の内在的なノップ命令を挿入することが可能になる。
【００２２】
本発明による、効率的な遅延スロット使用方法の原理および動作は、図面および添付の記載を参照してよりよく理解され得る。これらの図面は、説明の目的のみに提示され、発明を限定するものではないことが理解されるべきである。
【００２３】
ここで図面を参照すると、図３は、本発明による、効率的な遅延スロットを使用する例示的な方法の模式的ブロック図である。図示されるように、プログラムの少なくとも一部を表す、例示的な命令シーケンス２２は、多重サイクル命令２４を特徴とする。命令シーケンス２２は、多重サイクル命令２４の遅延スロット中に実行されるただ１つの挿入された遅延スロット命令（ＩＤＳＩ）２６を特徴とする。残りの遅延スロットは、動的な数の内在的なノップ命令で満たされる。内在的なノップ命令は、プログラム内に入れられないノップ命令であり、ゆえに、使用されていない遅延スロットは、ノップ命令をメモリ内に挿入することを必要としない。内在的なノップ命令数は、使用されていない遅延スロット数と同等になるように様々に変化する。それ故に、人間のプログラマまたは高水準言語コンパイラは、ＩＤＳＩまたはノップ命令ですべての遅延スロットを満たすように強制されない。
【００２４】
動的な数の内在的なノップ命令を挿入する利点は、所望するだけ多くの有用な遅延スロット命令のみを挿入し、それにより、浪費されるサイクルを最小化させる一方、プログラムに必要なメモリ量を減少させる能力を含む。その上、人間のプログラマは、より速やかに且つ効率的に命令をプログラム且つデバッグすることが可能である。なぜならば、有用な遅延スロット命令は遅延スロットの一部しか使用せず、それにより特定の製品を開発するために必要な開発時間量および人時間量が減少するからである。
【００２５】
対照的に、このような多重サイクル命令を実行する現在利用可能な従来技術の方法は、著しく効率が劣る。例えば、図４は、従来技術による模式的ブロック図であり、図３の命令を示しているが、本発明の方法を実施してはいない。図示されるように、例示的命令シーケンス２８は、再度多重サイクル命令２４および１つの遅延スロット命令２６を特徴とする。しかしながら、従来技術の方法は、多重サイクル命令２４のための遅延スロットの所定の数を満たすために、２つのノップ命令３０の挿入を必要とし、それゆえに２つの遅延スロットを浪費する。そのため、明らかに図４の従来技術の方法は、本発明の方法ほど効率がよくない。
【００２６】
図５Ａは、マイクロプロセッサによる動作のための、本発明の方法の１例を説明するフローチャートである。マイクロプロセッサが多重サイクル命令を実行するには、マイクロプロセッサは、遅延スロットごとに遅延スロット命令またはノップ命令を挿入する必要がある。本発明において、ノップ命令は様々に決定された数の内在的なノップ命令であって、図５Ａに示される方法によって決定される。
【００２７】
簡単に言えば、多重サイクル命令に必要な遅延スロット（ＴＤＳ）の総数が、ステップ１に示されるように、マイクロプロセッサにとって利用可能である。必要な遅延スロットの総数は、ハードウェア依存型である。ステップ２において、アセンブラは、多重サイクル命令用に挿入された遅延スロット命令（ＩＤＳＩ）数を判定する。これらは、内在的か内在的でないかに関わらず、ノップ命令ではないという点で有用な命令である。内在的なノップ命令の目的は、多重サイクル命令実行中に、ＩＤＳＩに使用されない時間を満たすことである。
【００２８】
好適には、アセンブラは、多重サイクル命令用に挿入された有用な各遅延スロット命令をカウントすることによって、挿入された遅延スロット命令数（ＩＤＳＩ数）を判定する。
【００２９】
ステップ３において、好適には、アセンブラは、ＩＤＳＩ数（使用された遅延スロット数）をコード化された多重サイクル命令内の遅延スロットフィールド内に入れる。命令の遅延スロットフィールドは、ＩＤＳＩ数を格納する追加の好適なフィールドであり、典型的には（必ずしもそうではないが）２〜３ビット長である。
【００３０】
ステップ４において、多重サイクル命令のＩＤＳＩ数は、アセンブラによってマイクロプロセッサに与えられる。好適には、マイクロプロセッサは、動作中に、コード化された命令の遅延スロットフィールドを調査することによってＩＤＳＩ数を取得し、必要な内在的なノップ命令数（使用されていない遅延スロット数であるＵＵＤＳ数）を計算する。
【００３１】
ステップ５において、マイクロプロセッサは、式２：
ＵＵＤＳ＝ＴＤＳ−ＩＤＳＩ
に示されるように、ＴＤＳ数（必要な遅延スロットの総数）からＩＤＳＩ数（挿入された遅延スロット命令数）を減算することによってＵＵＤＳ数を計算する。
【００３２】
ステップ６において、マイクロプロセッサは、多重サイクル命令の実行中に、必要数の内在的なノップ命令を挿入する。
【００３３】
図５Ａの方法を動作する１例は、図５Ｂを参照して記載される。図５Ｂは、メインプログラム３４およびルーチン３６を備えたプログラム３２の一部を示す。複数のシングルスロット命令３８もまた示される。ｒｏｕｔｉｎｅ＿ｎａｍｅという名前を有するルーチン３６（第２のプログラム）を引き起こす、コール命令４０が示されている。ルーチン３６の動作は、リターン命令４２によって終了する。例えば、分岐する前に現在の環境を格納するコール命令４０は、コール命令４０が効力を発する前に４つのクロックサイクルを必要とする。１つのクロックサイクルが、コール命令４０のコードに必要であり、３つのクロックサイクルが３つの遅延スロットに必要である。メインプログラム３４が制御を再開する前に、環境を回復する必要があるリターン命令４２は、例えば６つのクロックサイクルを必要とする。１つのクロックサイクルが、リターン命令４２のコードに必要であり、５つのクロックサイクルが５つの遅延スロットに必要である。それゆえに、コール命令４０およびリターン命令４２の双方が、多重サイクル命令である。
【００３４】
コール命令４０およびリターン命令４２の動作に必要な内在的なノップ命令数を計算するには、マイクロプロセッサは、多重サイクル命令が起こるごとに遅延スロットに挿入されてきた遅延スロット命令数を知る必要がある。図５Ａに関して記載されるように、マイクロプロセッサは、コード化された命令の遅延スロットフィールドからこの数を取り出す。
【００３５】
この例において、１つの有用な遅延スロット命令（ＩＤＳＩ）４４は、プログラマによって、３つの必要な遅延スロットのうちの、コール命令４０用に挿入されている。２つの有用な遅延スロット命令４４は、５つの必要な遅延スロットのうちのリターン命令４２用に挿入されている。
【００３６】
コンパイルするプログラム３２のプロセス中において、アセンブラはコール命令４０用に挿入された遅延スロット命令４４の数をカウントする。これはこの例においては番号１である。したがって、アセンブラは、番号１をコール命令４０の遅延スロットフィールドにロードする。この情報は、実行中にマイクロプロセッサとの通信のためにメモリにロードされる。３つの遅延スロットが必要であるため、マイクロプロセッサは、図５Ａに関して記載されるように、２つの内在的なノップ命令を実行する。
【００３７】
同様に、アセンブラはまた、リターン命令４２用に挿入された遅延スロット命令４４の数をカウントする。これはこの例においては番号２である。したがって、アセンブラは、番号２をリターン命令４２の遅延スロットフィールドにロードする。５つの遅延スロットが必要であるため、マイクロプロセッサは、ここでも図５Ａに関して記載されるように、３つの内在的なノップ命令を実行する。
【００３８】
それゆえに、本発明の遅延スロット制御メカニズムの方法は、以下の利点を有する。第１に、本発明の方法は、プログラムの性能とプログラムに必要なメモリ空間量をトレードオフする。代わりに、本発明は、このような有用な命令を保持する追加のメモリ空間の必要性と、プログラム動作中に浪費される時間量との最適なバランス、およびノップ命令の挿入と、人間のプログラマが有用な遅延スロット命令を挿入するのに必要な追加の時間とのバランスを提供する。
【００３９】
第２に、本発明の方法は、人間のプログラマ、高水準言語コンパイラまたはその他の自動機械語コードプログラミングツールが、有用な遅延スロット命令を含まない遅延スロットごとに、ノップ命令を挿入する必要性の不利益を避け、それによりプログラマは、プログラムに必要なだけ、有用な遅延スロット命令を挿入し得る。それゆえに、ＩＤＳＩですべての遅延スロットを満たさない不利益を避けることと、同時にＩＤＳＩに利用可能な遅延スロットの少なくとも一部を使用する利益を受けることとのバランスが維持される。
【００４０】
上記の記載は例としてのみ与えられ、多くの別の実施形態が本発明の精神および範囲内で可能であることが理解される。
【図面の簡単な説明】
【図１】    図１は、遅延スロットなしに、多重サイクル命令を処理する第１の例示的な従来技術の方法の模式的ブロック図である。
【図２】  図２は、遅延スロットなしに、多重サイクル命令を処理する第２の例示的な従来技術の方法の模式的ブロック図である。
【図３】  図３は、本発明による、効率的な遅延スロット使用の例示的な方法の模式的ブロック図である。
【図４】  図４は、図２に示されるアーキテクチャに類似のアーキテクチャを介して、すべての遅延スロットを使用せずに、図３の命令を実行する、効率が劣る従来技術の方法の模式的ブロック図である。
【図５Ａ】  図５Ａは、本発明による、ノップ遅延スロットを挿入する例示的な方法のフローチャートである。
【図５Ｂ】  図５Ｂは、図５Ａに示される方法による構築された例示的なプログラムの一部の表示である。
【図１】
0003639557.tif 000003
【図２】
0003639557.tif 000004
【図３】
0003639557.tif 000005
【図４】
0003639557.tif 000006
【図５Ａ】
0003639557.tif 000007
【図５Ｂ】
0003639557.tif 000008