(57)【要約】【課題】コードサイズを小さくするとともに、実行サイクル数を低減可能な命令を有するプロセッサを提供することを目的とする。【解決手段】本発明に係るプロセッサは、リターンサブルーチン処理と、スタックフレーム解放処理とを演算処理装置に実行させる命令を有するプロセッサである。リターンサブルーチン処理は、スタック１０に記憶された戻り先番地１に分岐して、サブルーチン処理から復帰する。スタックフレーム解放処理は、スタック１０のアドレスを指すスタックポインタ５に、サブルーチン処理で用いたスタックフレーム２のサイズを加算または減算することにより、当該スタックフレーム２を解放する。そして、リターンサブルーチン処理とスタックフレーム解放処理とを一命令で処理する。【選択図】図１
2009282671.tif 000002
【特許請求の範囲】
【請求項１】
スタックに記憶された戻り先番地に分岐して、サブルーチン処理から復帰するリターンサブルーチン処理と、
前記スタックのアドレスを指すスタックポインタに、前記サブルーチン処理で用いたスタックフレームのサイズを加算または減算することにより、当該スタックフレームを解放するスタックフレーム解放処理と、
を行う命令を有するプロセッサであって、
前記リターンサブルーチン処理と前記スタックフレーム解放処理とを一命令で処理する、
プロセッサ。
【請求項２】
スタックに記憶された戻り先番地に分岐して、サブルーチン処理から復帰するリターンサブルーチン処理と、
前記スタックのアドレスを指すスタックポインタに、前記サブルーチン処理で用いたスタックフレームのサイズを加算または減算することにより、当該スタックフレームを解放するスタックフレーム解放処理と、
前記スタックに記憶されたレジスタの値を復帰するレジスタ復帰処理と、
を行う命令を有するプロセッサであって、
前記リターンサブルーチン処理と前記スタックフレーム解放処理と前記レジスタ復帰処理とを一命令で処理する、
プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する発明である。
【背景技術】
【０００２】
従来、ＣＰＵ（Central Processing Unit）などの演算処理装置の処理を規定する演算処理プログラムでは、サブルーチン処理を行う場合に、戻り先番地（ＰＣ：Program Counter）と、サブルーチン処理で用いる自動変数とを、スタックに記憶させる。サブルーチン処理で用いる自動変数が記憶されたスタックの領域は、スタックフレームと呼ばれる。スタックに上述の戻り先番地、自動変数領域を確保した後には、サブルーチン処理が行われる。
【０００３】
サブルーチン処理の終期には、スタックに記憶された戻り先番地に分岐して、サブルーチン処理から復帰するリターンサブルーチン処理（ＲＴＳ：ReTurn from Subroutine）が行われる。このような処理を行うものとして、特許文献１に記載の発明がある。これら演算処理プログラムのうち、リターンサブルーチン処理と、スタックに退避させたレジスタの値を復帰するレジスタ復帰処理とを、一命令で行うものが提案されている。
【０００４】
一方、一般的な演算処理プログラムでは、リターンサブルーチン処理前後に、スタックフレームを解放するスタックフレーム解放処理を行うことが多い。スタックフレーム解放処理では、スタックのアドレスを指すスタックポインタに、スタックフレームのサイズを加算または減算する。
【０００５】
【特許文献１】特開２００２−３２８８３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のプロセッサでは、リターンサブルーチン処理とスタックフレーム解放処理とを別命令で処理するため、コードサイズが大きくなるという問題があった。また、これらの処理を別命令で行う場合には、リターンサブルーチン処理とスタックフレーム解放処理とを並行して処理することが全くできない。そのため、ＣＰＵの内部リソース、例えば、加算器、減算器を効率よく動作させることができず、実行サイクル数が多いという問題があった。
【０００７】
本発明は、上記のような問題点を解決するためになされたものであり、コードサイズを小さくするとともに、実行サイクル数を低減可能な命令を有するプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施の形態に係るプロセッサは、リターンサブルーチン処理と、スタックフレーム解放処理とを演算処理装置に実行させる命令を有するプロセッサである。前記リターンサブルーチン処理は、スタックに記憶された戻り先番地に分岐して、サブルーチン処理から復帰する。前記スタックフレーム解放処理は、前記スタックのアドレスを指すスタックポインタに、前記サブルーチン処理で用いたスタックフレームのサイズを加算または減算することにより、当該スタックフレームを解放する。プロセッサは、前記リターンサブルーチン処理と前記スタックフレーム解放処理とを一命令で処理する。
【発明の効果】
【０００９】
本発明のプロセッサによれば、リターンサブルーチン処理とスタックフレーム解放処理とを一命令で処理するため、コードサイズを小さくすることができる。また、リターンサブルーチン処理とスタックフレーム解放処理とを並行して処理することが可能になるため、実行サイクル数を少なくすることができる。
【発明を実施するための最良の形態】
【００１０】
＜実施の形態１＞
本実施の形態に係るプロセッサは、リターンサブルーチン処理と、スタックフレーム解放処理とを演算処理装置に実行させる命令を有するプロセッサである。本実施の形態に係る演算処理装置は、ＣＰＵであるものとする。図１は、ＣＰＵにより処理が行われるスタック１０を示す図である。本実施の形態では、図の上側から下側（図の白抜き矢印の向き）に向かうにつれて、スタック１０のアドレスは増加するものとする。図１（ａ）は、本実施の形態に係るプロセッサがＲＴＳＤを実行する前のスタック１０の記憶状態を示し、図１（ｂ）は、ＲＴＳＤを実行した後のスタック１０の記憶状態を示す。以下、簡単のため、本実施の形態に係るプロセッサが有するリターンサブルーチン処理と、スタックフレーム解放処理とを演算処理装置に実行させる命令を、ＲＴＳＤ（ReTurn from Subroutine and Deallocate stack frame）と記すこともある。
【００１１】
図１（ａ）に示すように、ＲＴＳＤが実行される前のスタック１０には、関数の引数と、戻り先番地（ＰＣ）と、自動変数とが記憶されている。サブルーチン処理に用いる自動変数が記憶されたスタック１０の領域は、スタックフレーム２と呼ばれる。本実施の形態では、コンパイラにより、戻り先番地１のサイズは４バイト、スタックフレーム２のサイズは４×ｓｒｃバイトで規定されるものとする。ここで、ｓｒｃは、ＲＴＳＤで用いられる即値であり、例えば、０〜２５５の値をとる。
【００１２】
図１（ａ）に示されるスタックポインタ５（以下、ＳＰ５と記すこともある）は、スタック１０の使用可能な領域のアドレスを指す。このスタックポインタ５は、スタック１０にスタックフレーム２などのデータが記憶されるたびに減算される。つまり、データが記憶されるたびに、ＳＰ５は、図の上側にシフトする。図１（ａ）では、ＳＰ５は、スタックフレーム２終端のアドレスを指している。上述したように、戻り先番地１のサイズは４バイト、スタックフレーム２のサイズは４×ｓｒｃバイトである。そのため、ＳＰ５に指されているスタックフレーム２終端のアドレスは、関数の引数終端のアドレスから、戻り先番地１およびスタックフレーム２のサイズ（（４＋４×ｓｒｃ）バイト）だけ減算したアドレスとなる。
【００１３】
次に、本実施の形態に係るＲＴＳＤの処理について説明する。図２は、本実施の形態に係るＲＴＳＤのコードを示す。１行目では、ＲＴＳＤのニーモニックを行う。２行目では、スタック１０のアドレスを指すスタックポインタ５に、サブルーチン処理で用いたスタックフレーム２のサイズ（４×ｓｒｃバイト）を加算することにより、サブルーチン処理で用いたスタックフレーム２を解放するスタックフレーム解放処理を行う。この処理により、ＳＰ５は、図１（ｂ）の破線矢印に示すように図の下側にシフトし、戻り先番地１終端のアドレスを指す。
【００１４】
３行目では、スタックポインタ５が指すスタック１０に記憶された戻り先番地に分岐して、サブルーチン処理から復帰するリターンサブルーチン処理を行う。４行目では、ＳＰ５に、戻り先番地１のサイズ（４バイト）を加算することにより、戻り先番地１を解放する処理を行う。この処理により、ＳＰ５は、図１（ｂ）の実線矢印に示すように図の下側にシフトして、関数の引数終端のアドレスを指す。本実施の形態に係るＲＴＳＤは、上述のリターンサブルーチン処理と上述のスタックフレーム解放処理とを一命令で処理する。以上のような本実施の形態に係るＲＴＳＤで規定されるＣＰＵの動作により、図１（ａ）に示すスタック１０の記憶状態は、図１（ｂ）に示すスタック１０の記憶状態となる。
【００１５】
本実施の形態に係るＲＴＳＤでは、上述したように、リターンサブルーチン処理とスタックフレーム解放処理とを一命令で処理する。そのため、コードサイズを小さくすることができる。また、これらの処理を一命令で行うため、リターンサブルーチン処理とスタックフレーム解放処理とを並行して処理することが可能になり、実行サイクル数を少なくすることができる。
【００１６】
なお、本実施の形態では、スタック１０に記憶するたびにＳＰ５が減算され、図１の上側にシフトするものとしたが、その代わりに、加算されるものであってもよい。この場合、スタックフレーム解放処理において、ＳＰ５に、スタックフレーム２のサイズを加算する代わりに減算すれば、上述と同様の効果を得ることができる。
【００１７】
＜実施の形態２＞
実施の形態１では、レジスタの値を退避する必要がない場合を想定している。しかしながら、使用可能なレジスタがない場合には、レジスタの値を退避する必要がある。そこで、本実施の形態では、使用可能なレジスタがなく、レジスタの値を退避する必要がある場合を想定する。本実施の形態に係るプロセッサは、リターンサブルーチン処理と、スタックフレーム解放処理と、後述するレジスタ復帰処理とを演算処理装置に実行させる命令を有するプロセッサである。本実施の形態に係る演算処理装置は、ＣＰＵであるものとする。また、実施の形態１と同様、本実施の形態に係るプロセッサが有するリターンサブルーチン処理と、スタックフレーム解放処理と、後述するレジスタ復帰処理とを演算処理装置に実行させる命令をＲＴＳＤと記し、以下で新たに説明しない構成、処理については、実施の形態１と同じであるものとする。
【００１８】
図３は、ＣＰＵにより処理が行われるスタック１０を示す図である。図３（ａ）は、本実施の形態に係るプロセッサがＲＴＳＤを実行する前のスタック１０の記憶状態を示し、図３（ｂ）は、ＲＴＳＤを実行した後のスタック１０の記憶状態を示す。図３（ａ）に示さすように、ＲＴＳＤが実行される前のスタック１０には、関数の引数と、戻り先番地（ＰＣ）と、自動変数に加えて、複数のレジスタの値が記憶されている。この図では、複数のレジスタの値が記憶されたスタック１０の領域をまとめて、レジスタ領域３と示している。
【００１９】
スタック１０に記憶されるレジスタの値の個数（以下、レジスタ数と記すこともある）は、例えば、ｄｅｓｔ２−ｄｅｓｔ＋１（ｄｅｓｔ＜ｄｅｓｔ２）の式において、ｄｅｓｔとｄｅｓｔ２に値を与えることにより定まる。以下、簡単のため、この式の値はｎ、つまり、レジスタ領域３に記憶されるレジスタ数はｎであるとして説明する。本実施の形態では、コンパイラにより、１個のレジスタのサイズは４バイトで規定される。そのため、本実施の形態では、ｎ個のレジスタからなるレジスタ領域３のサイズは、４×ｎバイトとなる。また、本実施の形態では、コンパイラにより、戻り先番地１のサイズは、実施の形態１と同様、４バイトで規定されるが、スタックフレーム２のサイズは、実施の形態１と異なり、（４×ｓｒｃ−４×ｎ）バイトで規定されるものとする。
【００２０】
スタック１０のアドレスを指すスタックポインタ５は、図３（ａ）では、スタックフレーム２終端のアドレスを指している。そのため、ＳＰ５に指されているスタックフレーム２終端のアドレスは、関数の引数終端のアドレスから、戻り先番地１およびスタックフレーム２およびレジスタ領域３のサイズ（（４＋４×ｓｒｃ）バイト）だけ減算したアドレスとなる。
【００２１】
次に、本実施の形態に係るＲＴＳＤの処理について説明する。図４は、本実施の形態に係るＲＴＳＤのコードを示す。１行目では、ＲＴＳＤのニーモニックを行う。２行目では、スタック１０のアドレスを指すスタックポインタ５に、サブルーチン処理で用いたスタックフレーム２のサイズ（（４×ｓｒｃ−４×ｎ）バイト）を加算することにより、サブルーチン処理で用いたスタックフレーム２を解放するスタックフレーム解放処理を行う。この処理により、ＳＰ５は、図３（ｂ）の上側の破線矢印に示すようにシフトし、レジスタ領域３終端のアドレスを指す。
【００２２】
３行目では、スタック１０に記憶された各レジスタに対して、４〜６行目の処理を記憶されたレジスタの個数と同じ回数だけ繰り返して行うことを規定している。４行目では、スタック１０に記憶された１個のレジスタの値を復帰するレジスタ復帰処理を行う。５行目では、ＳＰ５に、１個分のレジスタのサイズ（４バイト）を加算することにより、１個分のレジスタのレジスタ領域３を解放する処理を行う。この処理を、３行目の命令により、ｎ個のレジスタ全てに対して行う。これにより、ＳＰ５は、図３（ｂ）の下側の破線矢印に示すようにシフトして、戻り先番地１終端のアドレスを指す。
【００２３】
７行目では、スタックポインタ５が指すスタック１０に記憶された戻り先番地に分岐して、サブルーチン処理から復帰するリターンサブルーチン処理を行う。８行目では、ＳＰ５に、戻り先番地１のサイズ（４バイト）を加算することにより、戻り先番地１を解放する処理を行う。この処理により、ＳＰ５は、図３（ｂ）の実線矢印に示すようにシフトして、関数の引数終端のアドレスを指す。本実施の形態に係るＲＴＳＤは、上述のリターンサブルーチン処理と上述のスタックフレーム解放処理と上述のレジスタ復帰処理とを一命令で処理する。以上のような本実施の形態に係るＲＴＳＤによるＣＰＵの動作により、図３（ａ）のスタック１０の記憶状態は、図３（ｂ）のスタック１０の記憶状態となる。
【００２４】
本実施の形態に係るＲＴＳＤでは、上述したように、リターンサブルーチン処理とスタックフレーム解放処理とレジスタ復帰処理とを一命令で処理する。そのため、コードサイズをさらに小さくすることができる。また、これらの処理を一命令で行うため、リターンサブルーチン処理とスタックフレーム解放処理とレジスタ復帰処理とを並行して処理することが可能になり、実行サイクル数をさらに少なくすることができる。
【図面の簡単な説明】
【００２５】
【図１】実施の形態１に係るＲＴＳＤ実行前後のスタックの状態を示す図である。
【図２】実施の形態１に係るＲＴＳＤのニーモニックと動作を示す図である。
【図３】実施の形態２に係るＲＴＳＤ実行前後のスタックの状態を示す図である。
【図４】実施の形態２に係るＲＴＳＤのニーモニックと動作を示す図である。
【符号の説明】
【００２６】
１  戻り先番地、２  スタックフレーム、３  レジスタ領域、５  スタックポインタ、１０  スタック。
【図１】
2009282671.tif 000003
【図２】
2009282671.tif 000004
【図３】
2009282671.tif 000005
【図４】
2009282671.tif 000006