(57)【要約】      （修正有）【課題】処理時間と消費電力の増大を抑制するプロセッサを提供する。【解決手段】命令を記憶する命令メモリ１００と、実行する命令のアドレス３０３ｖを示すプログラムカウンタ３０３と、アドレス３０３ｖに、分岐命令の命令長を足した値を、命令メモリ１００の読出し単位長の倍数となるように、アライメントを取ってから、ＬＲ３０５に退避する退避部３０４と、退避した値を読み出し、読み出された当該値を、プログラムカウンタ３０３に格納する復帰部３０６とを備えるプロセッサ１０１を用いる。【選択図】図１
2012221180.tif 000002
【特許請求の範囲】
【請求項１】
命令を記憶する第１の記憶部と、
前記第１の記憶部における、実行する命令のアドレスの値を示すプログラムカウンタと、
前記プログラムカウンタが示す前記値に、分岐命令の命令長を足した値を、前記第１の記憶部の読出し単位長の倍数となるように、アライメントを取ってから、第２の記憶部に退避する退避部と、
前記退避部が前記第２の記憶部に退避した前記値を読み出し、読み出された当該値を、前記プログラムカウンタに格納する復帰部とを備えるプロセッサ。
【請求項２】
前記プログラムカウンタの前記値に、前記分岐命令の命令長を足した値が、前記読出し単位長の倍数の場合には、アライメントを取る処理をしないと判定し、
前記読出し単位長の倍数でない場合には、アライメントを取る前記処理をすると判定する判定部を備える請求項１記載のプロセッサ。
【請求項３】
前記退避部は、予め定められた制御フラグにより、前記命令長を足した前記値を退避することが指示される場合には、前記命令長を足した前記値を退避し、当該値とは異なる、アライメントが取った後の前記値を退避することが指示される場合にのみ、取った後の前記値を退避する請求項１または請求項２記載のプロセッサ。
【請求項４】
当該プロセッサにより実行されるプログラムは、前記分岐命令の後続命令が、前記読出し単位長の倍数となるアドレスに予め配置されたプログラムである請求項１〜３の何れかに記載のプロセッサ。
【請求項５】
請求項１記載のプロセッサと、
当該プロセッサにより実行されるプログラムであって、前記分岐命令の後続命令を、前記読出し単位長の倍数となるアドレスに予め配置したプログラムを生成する装置とを含んでなるシステム。
【請求項６】
請求項１記載のプロセッサにより実行されるプログラムであって、前記分岐命令の後続命令を、前記読出し単位長の倍数となるアドレスに予め配置したプログラムを生成する装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、中央演算処理装置（ＣＰＵ：Central Processing Unit）におけるサブルーチン分岐に関し、特に、アドレスの退避及び復帰に関する。
【背景技術】
【０００２】
ＣＰＵは、実行する命令のアドレスを示すプログラムカウンタ（ＰＣ：Program Counter）を有する。そして、逐次処理においては、実行した命令の命令長を、ＰＣ（プログラムカウンタ）の値に加算して、次の命令を実行する。
【０００３】
そして、メインプログラムから、サブルーチン分岐を行う場合においては、サブルーチンから復帰した時に実行する命令である、サブルーチン分岐命令の後続命令のアドレスを、復帰先アドレスとして保存する。そして、サブルーチンから復帰する時には、復帰先アドレスをＰＣに格納することで、復帰先アドレスに分岐して、サブルーチン分岐命令の後続命令を実行する。
【０００４】
ここで、ＣＰＵが実行する処理手順（が記録されたデータ）であるプログラムは、Ｃ言語をはじめとする高級言語や、アセンブラをはじめとする低級言語などのプログラム言語で記述される。コンパイラは、高級言語で記述したプログラムを、アセンブラ言語に翻訳する。そして、アセンブルでは、アセンブラ言語（によるプログラム）を、ＣＰＵが実行する命令コードに変換したオブジェクトファイルを生成する。また、更に、命令コードを配置するアドレスを決定する。
【０００５】
そして、上記の、アセンブラ言語を、命令コードへ変換する過程において、命令を配置するアドレスを制御することが可能な翻訳方法もある。
【０００６】
例えば、アライメント制御文といわれる制御文を、アセンブラ言語で記述したプログラムに挿入することで、それに続く命令コードを配置するアドレスを、特定の値の倍数に設定することが出来る。
【０００７】
次に、分岐先アドレスと、アライメントについて述べる。つまり、例えば、『データ処理装置の機械語命令配置方法（特開平１−１４０３３４号公報）』で述べられているように、分岐先アドレスのアライメントを取ることで、分岐後に実行する命令データの読み出しのオーバーヘッドを削減し、処理の高速化を図ることが出来る。
【０００８】
ここで、無条件分岐命令の後続命令は、必ず、その無条件分岐命令である分岐命令以外のその他の分岐命令の分岐先になる。このため、無条件分岐先命令の後続命令のアライメントを取ることで、処理の高速化を図ることが出来る。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１−１４０３３４号公報
【特許文献２】特開平１０−９１４４３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、サブルーチン分岐と、復帰先アドレスとについては、次の通りである。つまり、例えば、『情報処理回路、マイクロコンピュータおよび電子機器（特開平１０−９１４４３号公報）』で述べられているように、サブルーチン分岐命令を実行するときには、サブルーチンから戻るときに復帰する復帰先のアドレスである復帰先アドレスを退避する。そして、復帰先（復帰先アドレスの命令）は、サブルーチン分岐命令の後続命令であり、そのアドレスは、サブルーチン分岐命令のアドレスに、サブルーチン分岐命令の命令長を足したものである。つまり、サブルーチン１Ａ１ｂ（図１０）内の復帰命令（図１０では「ＲＥＴ」命令）を実行すると、上記復帰先アドレスに分岐し、サブルーチン分岐命令（図１０では「ＣＡＬＬ  ＳＵＢ」命令）の後続命令を実行する。
【００１１】
復帰命令（「ＲＥＴ」命令）の分岐先である、サブルーチン分岐命令の後続命令では、復帰後に実行する命令データ読み出しのオーバーヘッドが、先述された、無条件分岐先命令の後続命令のケースと同様に発生する。
【００１２】
サブルーチン分岐時に退避する復帰先アドレスは、サブルーチン分岐命令のアドレスに、サブルーチン分岐命令の命令長を足したものである。このため、アライメントを取ったアドレスを、復帰先アドレスにすることはできない。つまり、サブルーチン分岐命令のアドレスに対して、当該サブルーチン分岐命令の命令長を足したアドレスが退避され、このアドレスへの分岐（復帰）がされて、不適切なアドレスへの分岐がされてしまう。ここで、不適切なアドレスとは、サブルーチン分岐命令の後続命令のアドレスではないアドレスである。
【００１３】
このため、従来例の技術では、サブルーチンからの復帰において、復帰先アドレスのアライメントを取ることができず、オーバーヘッドが発生し、処理時間が増加するという問題がある。
【００１４】
また、これにより、命令メモリ読出し回数が増加して、消費電力や読み出し頻度が増大するという問題もある。
【００１５】
本発明の目的は、サブルーチン内の復帰命令による分岐での分岐先アドレス（サブルーチン分岐命令の後続命令（図１０）のアドレス）である復帰先アドレスについて、メモリ読出しアドレス単位にあわせる（以後、「アライメントを取る」と呼ぶ）ことによって、処理時間と消費電力の増大を抑制するプロセッサを提供することにある。
【課題を解決するための手段】
【００１６】
上記課題を解決するために、本発明に係るプロセッサ（例えば中央演算処理装置）は、命令を記憶する第１の記憶部と、前記第１の記憶部における、実行する命令（サブルーチン分岐命令など）のアドレスの値を示すプログラムカウンタと、前記プログラムカウンタが示す前記値（サブルーチン分岐命令のアドレス）に、分岐命令（サブルーチン分岐命令）の命令長を足した値を、前記第１の記憶部の読出し単位長の倍数となるように（倍数の値へと修正するように）、アライメントを取ってから、（修正がされた後の値を）第２の記憶部に退避する退避部と、（サブルーチン分岐命令が、実行を開始させたサブルーチンの処理が終了した場合に）、前記退避部が前記第２の記憶部に退避した前記値を読み出し、読み出された当該値を、前記プログラムカウンタに格納する復帰部とを備えるプロセッサである。
【００１７】
また、本発明に係るプロセッサは、前記プログラムカウンタの値に分岐命令の命令長を足したアドレス値が、前記第１の記憶手段の読出し単位長の倍数の場合には、アライメントを取る処理をいないと判定し、前記第１の記憶手段の読出し単位長の倍数でない場合には、アライメントを取ると判定することを特徴とする。
【００１８】
また、本発明に係るプロセッサは、前記制御フラグが無効ならば、前記退避手段は、前記プログラムカウンタの値に前記分岐命令の命令長を足したアドレス値を、前記第２の記憶手段に退避する、ことを特徴とする。
【００１９】
また、本発明に係るプロセッサは、前記分岐命令の後続命令を、前記第１の記憶手段の読出し単位長の倍数となるアドレスに、予め配置した処理手順を実行することを特徴とする。
【発明の効果】
【００２０】
以上のように、本発明に係るプロセッサでは、サブルーチンからの復帰先アドレスのアライメントを取ることを可能とすることで、サブルーチンからの復帰におけるオーバーヘッドを削減し、処理時間と消費電力を削減することができる。
【００２１】
プログラム（図１３のプログラム１ｍＰを参照）に含まれるサブルーチン分岐命令の個数が比較的多い場合などでも、プログラムの処理が高速にされ、確実に、処理が高速にできる。なお、同様にして、確実に、消費電力が小さくできる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施の形態１におけるＣＰＵのブロック図である。
【図２】本発明の実施の形態１における命令メモリのアドレスマップを示す図である。
【図３】本発明の実施の形態１におけるＣＰＵの動作を示すタイミング図である。
【図４】本発明の実施の形態１における命令メモリのアドレスマップを示す図である。
【図５】本発明の実施の形態１におけるＣＰＵの動作を示すタイミング図である。
【図６】本発明の実施の形態２におけるＣＰＵのブロック図である。
【図７Ａ】本発明の実施の形態２における、モード設定フラグとソフトウエアの対応を示す図である。
【図７Ｂ】本発明の実施の形態２における、モード設定フラグとソフトウエアの対応を示す図である。
【図８】本発明の実施の形態３におけるアセンブル手順を示す図である。
【図９】本発明の実施の形態３におけるプログラムを示す図である。
【図１０】従来のＣＰＵのサブルーチン分岐の処理を示す図である。
【図１１】退避処理のフローチャートである。
【図１２】アセンブルでの処理のフローチャートである。
【図１３】本システムの構成を示す図である。
【発明を実施するための形態】
【００２３】
実施形態に係るプロセッサ（例えば中央演算処理装置）は、命令を記憶する命令メモリ１００と、命令メモリ１００における、実行する命令のアドレスの値（アドレス３０３ｖ）を示すプログラムカウンタ３０３と、プログラムカウンタ３０３が示す値（例えば、サブルーチン分岐命令である第１の命令の第１のアドレス）に、分岐命令（第１の命令）の命令長（例えば図２では１）を足した値（図２では４００３番地）を、命令メモリ１００の読出し単位長の倍数での値（第３のアドレス）へと修正するように、ＬＲ３０５へと退避される値のアライメントを取ってから、アライメントが取られた後の値（図２の４００４番地参照、第３のアドレス）を、ＬＲ３０５に退避する退避部３０４と（図１１のＳｂ２ａ）、第１の命令であるサブルーチン分岐命令が、実行を開始させたサブルーチンの処理が終了した場合に、第２の命令（後述の後続命令）への分岐がされるのに際して、退避部３０４がＬＲ３０５に退避した値（図２の４００４番地、第３のアドレス）を読み出し、読み出された当該値を、プログラムカウンタ３０３に格納して、当該値のアドレスへの分岐をさせることにより、第２の命令（後続命令）への分岐をさせる復帰部３０６と（Ｓｂ２ａ）を備えるプロセッサ（ＣＰＵ）１０１である。
【００２４】
つまり、アドレスが退避されて、退避されたアドレスへの分岐がされることにより、第２の命令（後続命令）への分岐がされる。一方、分岐としては、その分岐の際の処理が比較的高速であるなどで、比較的適切である分岐がある（先述の説明を参照）。そして、このような比較的適切な分岐は、アライメントが取られてない第４のアドレス（後述）への分岐（Ｓｂ２ｂ参照）でなく、取られた後の第３のアドレスへの分岐（Ｓｂ２ａ参照）であるケース（Ｓｂ１：Ｎｏ参照）がある。そこで、このケース（Ｓｂ１：Ｎｏ参照）などにおいて、次の処理がされる。その処理とは、第４のアドレスが退避されて、第４のアドレスへの分岐がされる（Ｓｂ２ｂ）のでなく、第３のアドレスが退避されて、第３のアドレスへの分岐がされる（Ｓｂ２ａ）処理である。そして、第２の命令（後続命令）を含んだプログラム１ｍＰ（図１３）を生成するコンパイラ１ｍなどにより、第２の命令（後続命令）のアドレスは、第４のアドレスでなく、第３のアドレスにされる。これにより、第２の命令への分岐の際の処理が高速にされる。ひいては、プログラム１ｍＰに含まれるサブルーチン分岐命令の個数が多い場合などでも、高速な処理がされ、確実に、処理が高速にできる。
【００２５】
以下、詳しく説明される。
【００２６】
（実施の形態１）
以下、本発明の実施の形態１に係る中央演算処理装置（ＣＰＵ）について説明する。
【００２７】
図１は、実施の形態１に係るＣＰＵのブロック図である。
【００２８】
１００は命令メモリであり、ＣＰＵが実行する命令コードが格納されている。１０１はＣＰＵであり、３０２は制御部、３０３はプログラムカウンタ（ＰＣ）、３０４は退避部、３０５はリンクレジスタ（ＬＲ）、３０６は復帰部、３０７は命令バッファである。また、３０８はアライメント部であり、当該アライメント部３０８は、当該アライメント部３０８の構成要素として、アライメント判定部３０９、アライメント実施部３１０を有する。
【００２９】
制御部３０２は、ＰＣ３０３が指し示すアドレス（アドレス３０３ｖ）の命令コード（命令コード１００ｉ）を、命令メモリ１００から読み出して、読み出した命令コードを実行する。
【００３０】
命令バッファ３０７は、制御部３０２の構成要素であり、命令メモリ１００から読み出した命令コードを保持する。
【００３１】
制御部３０２がＣＡＬＬ命令（図１のＣＡＬＬ命令１００ｉＡ）を実行すると、退避部３０４は、復帰先アドレス（図１の復帰先アドレス（を示すデータ）３０４ａ）を、ＬＲ３０５に退避する。
【００３２】
そして、退避部３０４が、復帰先アドレスをＬＲ３０５に退避するときに、アライメント判定部３０９は、ＰＣの値（アドレス３０３ｖ）に、ＣＡＬＬ命令の命令長を足した値が、アライメントが取れている値であるか否かを判定する。
【００３３】
そして、アライメント判定部３０９が、アライメントを取れていないと判定した場合には（図１１のＳｂ１：Ｎｏ）、アライメント実施部３１０が、ＰＣ３０３の値（アドレス３０３ｖ）、ＣＡＬＬ命令１００ｉＡの命令長を足した値（第１のアドレス）のアライメントを取ってから、アライメントがとられた後の値（第２のアドレス）を、ＬＲ３０５に退避する（Ｓｂ２ａ）。
【００３４】
また、アライメント判定部３０９が、アライメントを取れていると判定した場合には（Ｓｂ１：Ｙｅｓ）、ＰＣ３０３の値に、ＣＡＬＬ命令１００ｉＡの命令長を足した値（第１のアドレス）を、ＬＲ３０５に退避する（Ｓｂ２ｂ）。
【００３５】
制御部３０２が、ＣＡＬＬ命令が実行されることによって実行されるサブルーチンに含まれるＲＴＮ（return）命令（図１の１００ｉＢ）を実行すると、復帰部３０６は、ＬＲ３０５の値を、ＰＣ３０３に復帰する。
【００３６】
以下では、具体例として、命令メモリ１００のアドレスマップが、図２のアドレスマップである場合について、詳しく説明する。
【００３７】
図２は、本発明の実施の形態１における命令メモリのアドレスマップを示す図である。
【００３８】
ＣＡＬＬ命令（図１２の１００ｉＡ）の後（直後）にある後続命令（１００ｉＭ）のアドレスを、４の倍数に設定するアライメント制御文（＿ＡＬＩＧＮ＿４）を（１００ｉＱ参照）、予め、メインプログラムＭＡＩＮ（プログラム１００Ｐａ）に挿入することで、命令Ａ（１００ｉＭ）を、４の倍数のアドレスに配置している。
【００３９】
図３は、サブルーチン分岐と復帰のタイミングなどを示すタイミングチャートである。
【００４０】
ＣＰＵ１０１は、メインプログラムＭＡＩＮ（図２の１００Ｐａ）の処理を行っている期間内における時刻ｔ０で、４００２番地の（図２）ＣＡＬＬ命令（１００ｉＡ）を実行する。
【００４１】
アライメント判定部３０９は、ＣＡＬＬ命令がある４００２番地（図３の値３０４ｐ）に対して、ＣＡＬＬ命令の命令長である１を加算した結果が、４００２＋１＝４００３であるため、アライメントを取れていないと判定する（図１１のＳｂ１：Ｎｏ）。
【００４２】
そしてアライメント実施部３１０は、加算された結果である上述の４００３のアライメントを取って、復帰先アドレス（データ３０４ａ）を、アライメントがとられて、メモリ読み出しアドレス単位にあわせられた値である４００４にする。退避部３０４は、この復帰先アドレスである、４００４（図３の値３０４ｉ）を、ＬＲ３０５に退避する（図１の３０４ａ、図１１のＳｂ２ａなどを参照）。なお、図３における図示は、説明の便宜上などのために、適宜、模式的に行われる。例えば、値３０４ｉの出力が開始されるタイミングは、図示されるようなタイミングとは異なるタイミングでもよいし、図示されるようなタイミングなどでもよい。
【００４３】
ＰＣ３０３の値３０３ｖは、ＣＡＬＬ命令で呼び出されるサブルーチン（図２のサブルーチンＳＵＢ（プログラム１００Ｐｂ）参照）の先頭のアドレス（図２では８０００）に書き換えられ、そのサブルーチンＳＵＢに分岐する。
【００４４】
以後、サブルーチンＳＵＢの処理を行う。
【００４５】
メインプログラムＭＡＩＮに復帰するために、時刻ｔ１で、ＲＴＮ命令（図２の１００ｉＢ）を実行すると、ＰＣ３０３の値３０３ｖは、先述された、退避がされた値である４００４になり、２サイクル後に、この４００４番地からの、４００７番地までの４ｂｙｔｅの命令コードを、命令メモリ１００から読み出し、命令バッファ３０７に格納する。
【００４６】
制御部３０２は、命令バッファ３０７に格納した、４００４番地からの命令コードを読み出して、命令Ａ、命令Ｂ、命令Ｃ、命令Ｄを順次実行する。
【００４７】
命令メモリ１００のアドレスマップが、図４の場合について説明する。
【００４８】
図４は、本発明の実施の形態１における命令メモリのアドレスマップを示す図である。
【００４９】
ＣＡＬＬ命令の後にある後続命令（１００ｉＭ）のアドレスを、４の倍数に設定するアライメント制御文（＿ＡＬＩＧＮ＿４：１００ｉＱ）を、予めメインプログラムＭＡＩＮに挿入しているが、ＣＡＬＬ命令のアドレス（４００３番地）に、ＣＡＬＬ命令の命令長１を加算した結果が４００４で、アライメントの調整がされなくても、すでに適切な値であるため、＿ＡＬＩＧＮ＿４による、アライメントの調整は行っていない。
【００５０】
図５は、サブルーチン分岐と復帰などのタイミングのタイミングチャートである。
【００５１】
時刻ｔ０で、上述された、４００３番地のＣＡＬＬ命令（図４）を実行する。
【００５２】
アライメント判定部３０９は、この４００３に、ＣＡＬＬ命令の命令長１を加算した結果が、４００３+１＝４００４であるため、アライメントを取れていると判定する（Ｓｂ１：Ｙｅｓ）。
【００５３】
そして、アライメント実施部３１０は、アライメントの処理をせず、退避部３０４は、復帰先アドレスである、この４００４（図５における値３０４ｈ）を、ＬＲ３０５に退避する（Ｓｂ２ｂ）。
【００５４】
ＰＣ３０３の値３０３ｖは、サブルーチン先頭のアドレス（図４では８０００番地）に書き換えられ、サブルーチンに分岐する。
【００５５】
時刻ｔ１で、ＲＴＮ命令（図４参照）を実行すると、ＰＣ３０３の値３０３ｖは、退避された、上述の４００４になり、２サイクル後に、４００４番地からの、４００７番地までの４ｂｙｔｅの命令コードを命令メモリ１００から読み出し、命令バッファ３０７に格納する。
【００５６】
制御部３０２は、命令バッファ３０７に格納した、４００４番地からの命令コードを読み出して、命令Ａ、命令Ｂ、命令Ｃ、命令Ｄを順次実行する。
【００５７】
以上の構成により、ＣＡＬＬ命令を配置したアドレス（図２の４００２番地、図４の４００３番地を参照）に、ＣＡＬＬ命令の命令長１を加算した結果（４００３、４００４）に関わらず、復帰先アドレスのアライメントを取ることが可能となる。
【００５８】
（実施の形態２）
以下、本発明の実施の形態２に係る中央演算処理装置（ＣＰＵ）について説明する。
【００５９】
図６は、実施の形態２に係るＣＰＵ２０１のブロック図である。
【００６０】
１００は命令メモリであり、ＣＰＵ２０１が実行する命令コードが格納されている。２０１はＣＰＵであり、３０２は制御部、３０３はＰＣ、３０４は退避部、３０５はリンクレジスタ（ＬＲ）、３０６は復帰部、３０７は命令バッファである。また、３０８はアライメント部であり、構成要素として、アライメント判定部３０９、アライメント実施部３１０を有する。３１１はモード設定フラグである。
【００６１】
なお、ＣＰＵ２０１の各構成要素のうちで、実施の形態１のＣＰＵ１０１における構成要素と同一の（対応する）構成要素については、図６中に、図１と同一の符号を、付しており、ここでは、詳しい説明を適宜、省略する。
【００６２】
モード設定フラグ３１１は、アライメント部３０８を制御するものである。
【００６３】
モード設定フラグ３１１がＯＮの時には、アライメント部３０８がアライメントを取り、ＯＦＦの時には、アライメント部３０８がアライメントを取らない。
【００６４】
つまり、モード設定フラグ３１１がＯＮのときにのみ、ＣＡＬＬ命令を実行すると、実施の形態１記載のＣＰＵ１０１と同一の動作となる。そして、モード設定フラグ３１１がＯＦＦのときには、ＣＡＬＬ命令を実行すると、従来のＣＡＬＬ命令での動作と同じ動作になる。モード設定フラグ３１１が設けられることにより、このようなことが可能となる。
【００６５】
本実施の形態１に係るＣＰＵ１０１においては、ＣＡＬＬ命令を実行すると、復帰先アドレスは、常時、アライメントを取ったアドレスになる。このため、このようなＣＰＵ１０１において、復帰先アドレスが、ＣＡＬＬ命令の命令長１を加算したアドレスである（つまり、アライメントを取ったアドレス以外の、取られてないアドレスになる）場合がある従来のソフトフェアを処理すると、次のケースが生じる。つまり、そのケースとは、アライメントを取ったアドレスである、ＣＰＵが復帰する復帰先アドレスと、取られてないアドレスである、ＣＡＬＬ命令の後続命令を配置したアドレスとが、互いに異なるケースである。このため、ＣＰＵ１０１では、従来のソフトフェアが正常に動作せず、ソフトフェアの互換性がなくなってしまう。
【００６６】
そこで、以上のように、モード設定フラグ３１１を用いて、ＣＡＬＬ命令の動作を切り替えることで、復帰先アドレスのアライメント実行のＯＮ／ＯＦＦを制御することができ、ソフトウエアの互換性を保持することが可能となる。
【００６７】
図７Ａ、図７Ｂのそれぞれは、本発明の実施の形態２における、モード設定フラグと、ソフトウエアとの対応を示す図である。
【００６８】
これら図７Ａ、図７Ｂで、ソフトウエアの構成と、制御フラグの状態について説明する。
【００６９】
図７Ａで、ＣＡＬＬ命令の後続命令が、ＣＡＬＬ命令の命令長１を加算したアドレスに配置しているソフトウエア（従来のソフトウエア）を、本実施の形態２に係るＣＰＵ２０１（図６）が処理する場合を説明する。
【００７０】
ＣＰＵ２０１は、ＣＡＬＬ命令の命令長１を加算したアドレス（第１のアドレス）に復帰しなければならないので、復帰先アドレスのアライメントを取らない。よって、モード設定フラグ３１１を０（オフ）に設定する。
【００７１】
図７Ｂで、ＣＡＬＬ命令の後続命令のアドレスを、４の倍数に設定するアライメント制御文（＿ＡＬＩＧＮ＿４）を、予めメインプログラムに挿入し、後続命令を、４の倍数のアドレスに配置しているソフトウエア（新しいソフトウエア：１Ｃ３１、１Ｃ３３）と、従来のソフトウエア（１Ｃ３２、１ｃ３４）が存在するソフトウエア（１Ｃ３）を、本実施の形態２に係るＣＰＵ２０１が処理する場合を説明する。
【００７２】
ＣＰＵ２０１が処理するソフトウエアに応じて、モード制御フラグ（モード設定フラグ３１１）がオフか、オンかを切り替えることで、ＣＰＵ２０１のＣＡＬＬ命令の動作を、ＣＰＵ２０１が処理するソフトウエアにあわせて切り替えることが出来る。
【００７３】
切り替えのタイミングは、新しいソフトウエアを呼び出す時に、モード制御フラグをＯＮに切り替え、従来のソフトウエアを呼び出す時に、モード制御フラグをＯＦＦに切り替えるタイミングである。
【００７４】
（実施の形態３）
以下、本発明の実施の形態３に係る中央演算処理装置（ＣＰＵ）のアセンブル手順について説明する。
【００７５】
図８は、アセンブラ言語で記述したプログラム（１Ｂ１１）を、ＣＰＵ１０１、ＣＰＵ２０１が実行する命令コードへとアセンブルする手順を示す図である。
【００７６】
Ｓａ１は、ＣＡＬＬ命令を検出するステップである。
【００７７】
Ｓａ２は、Ｓａ１でＣＡＬＬ命令が検出された場合に（Ｓａ１：検出）、検出されたＣＡＬＬ命令に後続する命令のアライメントを取るアライメント制御文（＿ＡＬＩＧＮ＿４）を挿入するステップである。
【００７８】
アセンブル（Ｓａ３）を行う前に、Ｓａ１およびＳａ２の処理をして、アセンブルを実行して、オブジェクトファイル（１Ｂ１３）を出力する。
【００７９】
図９は、メインプログラムＭＡＩＮを、例として示す図である。
【００８０】
Ｓａ１およびＳａ２の処理により、図９のメインプログラムＭＡＩＮに、アライメント制御文（＿ＡＬＩＧＮ＿４）を挿入すると、図２のメインプログラムＭＡＩＮが生成される。
【００８１】
オブジェクトファイルとしては、ＣＡＬＬ命令のアドレスに、ＣＡＬＬ命令の命令長１を足した結果が４００２で、アライメントが取れていない場合、図２のメインプログラムＭＡＩＮと、アドレスの対応であるオブジェクトファイルを出力する。
【００８２】
そして、ＣＡＬＬ命令のアドレスに、ＣＡＬＬ命令の命令長１を足した結果が、４００４で、アライメントが取れている場合、図４のメインプログラムＭＡＩＮとアドレスの対応であるオブジェクトファイルを出力する。
【００８３】
以上の手順により、アセンブラ言語で記述したプログラムに、ＣＡＬＬ命令が存在する場合には、自動的に、後続命令の配置先アドレス（つまり復帰先アドレス）のアライメントを取ることが可能となり、実施の形態１または２記載のように、予めアライメント制御文を記載する必要がなくなる。
【００８４】
（補足）
以上、本発明に係る中央演算装置の実施の形態１〜３について説明したが、以下に補足する。
【００８５】
命令メモリ１００のデータバス幅を４ｂｙｔｅとし、４の倍数のアドレス単位で読み出すものとして説明したが、４ｂｙｔｅ以外のデータバス幅で、４の倍数以外のアドレス単位の読出しであってもかまわない。
【００８６】
命令メモリ１００の読出しにかかるサイクル数を２として説明したが、２以外のサイクル数でもかまわない。
【００８７】
制御フラグ（モード設定フラグ３１１）は、専用のレジスタや、プロセッサ状態語（ＰＳＷ）、または外部端子に実装してもかまわない。
【００８８】
制御フラグ（モード設定フラグ３１１）の切り替えでは、予め、モード制御フラグ（モード設定フラグ）３１１をＯＦＦに設定し、新しいソフトウエア（図７Ｂ参照）を呼び出す時に、モード制御フラグ３１１をＯＮに切り替え、新しいソフトウエアの完了する時に、モード制御フラグをＯＦＦに切り替えてもよい。
【００８９】
制御フラグの切り替えでは、予め、モード制御フラグをＯＮに設定し、従来のソフトウエアを呼び出す時に、モード制御フラグをＯＦＦに切り替え、従来のソフトウエアの完了する時に、モード制御フラグをＯＮに切り替えてもよい。
【００９０】
実施の形態３では、アセンブルの前段階で＿ＡＬＩＧＮ＿４を挿入したが、高級言語のコンパイルの段階で挿入してもかまわない。
【００９１】
実施の形態３では、アセンブルの前段階で＿ＡＬＩＧＮ＿４を挿入したが、アセンブル処理中にＣＡＬＬ命令の後続命令を検出し、該当の命令コードを４の倍数のアドレスに配置してもよい。
【００９２】
このようにして、要するに、サブルーチン分岐の復帰先アドレスのアライメントを取ることによって、処理時間を抑制するＣＰＵを提供することができる。つまり、サブルーチン分岐命令を実行すると、復帰先アドレスをリンクレジスタ（ＬＲ）退避する。そして、退避するときに、プログラムカウンタ（ＰＣ）の値に、ＣＡＬＬ命令の命令長を足した値が、アライメントを取れていない値と判定した場合には、ＰＣの値に、ＣＡＬＬ命令の命令長を足した値のアライメントを取ってから、取られた後の値を、ＬＲに退避する。
【００９３】
また、モード設定フラグ３１１は、例えば、ＣＰＵ１０１の集積回路における端子の電圧が、５Ｖなどの所定電圧である場合にはオンである一方で、所定電圧でない場合にはオフであるフラグでもよい。
【００９４】
なお、こうして、命令が、ＣＡＬＬ命令の次の命令である場合に（図１２のＳｃ１：Ｙｅｓ）、その命令のアライメントを取らせて、その命令についてアライメントが取られたオブジェクトファイル１Ｂ１３（図８）を生成させる処理がされてもよい（図１２のＳｃ２）。
【００９５】
この処理は、例えば、上述された、アライメント制御文の挿入などである。
【００９６】
なお、このような、アセンブラ言語で記述したプログラム１Ｂ１１（図８）からの、オブジェクトファイル１Ｂ１３の生成の処理は、例えば、アセンブラ、コンパイラなどのソフトウエアにより行われてもよい。
【００９７】
このソフトウエアは、例えば、図１３で示されるコンパイラ１ｍである。
【００９８】
コンパイラ１ｍの機能が実現されるコンピュータ１ａは、例えば、ワークステーションなどでもよい。
【００９９】
なお、例えば、先述された図８におけるＳａ１の処理は、このコンパイラ１ｍが備えるＣＡＬＬ命令検出部１ｍ２により行われてもよい。そして、Ｓａ２の処理は、アライメント処理部１ｍ３により行われてもよい。
【０１００】
なお、これらＣＡＬＬ命令検出部１ｍ２等のそれぞれは、例えば、上述のソフトウエアに含まれるモジュールなどである。
【０１０１】
そして、例えば、このソフトウエアが実行される際に、コンパイルオプションなどの、コマンドライン引数等のデータに基づいた処理が行われてもよい。
【０１０２】
つまり、コンパイルオプション等により、上述された、図８のＳａ１〜Ｓａ２の処理を行うことが指示される場合にのみ（図８のＳａ０：Ｙｅｓ）、これらＳａ１〜Ｓａ２の処理を行わせ、指示されない場合には（Ｓａ０：Ｎｏ）、行わせない制御がされてもよい。
【０１０３】
この制御（Ｓａ０）は、例えば、図１３のコンパイルオプション処理部１ｍ１により行われてもよい。
【０１０４】
なお、こうして、例えば、上述された、コンパイラ１ｍの処理を行う第１のコンピュータ１ａと、図１のＣＰＵ１０１、命令メモリ１００などが設けられた第２のコンピュータ１ｂとが含まれたシステム１（図１３参照）が構成され、用いられてもよい。
【０１０５】
こうして、アセンブラ言語等によるプログラム１ｍ２Ｐ（図１３、図８の１Ｂ１１）から、第２のコンピュータ１ｂ（図１３）における、例えばＲＯＭ（Read Only Memory）などである命令メモリ１００（図１参照）により記憶されるプログラム１ｍＰが生成されてもよい（コンパイラ１ｍ）。
【０１０６】
そして、プログラム１ｍ２Ｐに含まれるＣＡＬＬ命令が検出されてもよい（ＣＡＬＬ命令検出部１ｍ２、Ｓａ１）。
【０１０７】
そして、検出されたＣＡＬＬ命令の処理を実行するサブルーチン分岐命令と、ＣＡＬＬ命令の次にある命令の処理を実行する、サブルーチン分岐命令の後続命令とが含まれるプログラム１ｍＰが、コンパイラ１ｍにより生成されてもよい。
【０１０８】
なお、生成されるプログラム１ｍＰは、例えば、図８におけるオブジェクトファイル１Ｂ１３でもよい。
【０１０９】
そして、上述された後続命令のアライメントが取られてもよい（アライメント処理部１ｍ３、Ｓａ２）。
【０１１０】
なお、プログラム１ｍＰにおける後続命令のアライメントが取られることは、適宜、プログラム１ｍ２Ｐにおける、上述された次の命令のアライメントを取ることとも呼ばれる。
【０１１１】
つまり、生成されるプログラム１ｍＰにおける、上述された後続命令のアドレスは、そのアドレスの命令への分岐がされるのが適切であるアドレスであり、適切ではないアドレスではなくてもよい。
【０１１２】
なお、先述のように、例えば、適切であるアドレスは、そのアドレスの命令への分岐がされる場合には、（大きな）遅延が生じず、処理速度が速くなるアドレスなどでもよい。そして、適切でないアドレスは、遅延が生じて、処理速度が遅くなるアドレスなどでもよい。
【０１１３】
すなわち、適切であるアドレスは、先述の例における、４の倍数のアドレスなどであり、適切でないアドレスは、その他のアドレスなどである。
【０１１４】
そして、記憶された、こうして生成されたプログラム１ｍＰが、例えば、第２のコンピュータ１ｂの命令メモリ１００により記憶されるなどして、ＣＰＵ（ＣＰＵ１０１等）により実行されてもよい。
【０１１５】
そして、その実行の際に、ＣＰＵにより、記憶されたプログラム１ｍＰの一部よりなるメインプログラムＭＡＩＮ（図２）に含まれる、先述のサブルーチン分岐命令が実行されてもよい。
【０１１６】
そして、このサブルーチン分岐命令が実行される際に、サブルーチンＳＵＢ（図２：サブルーチンのプログラム）が実行されてもよい。
【０１１７】
そして、サブルーチンＳＵＢに含まれる復帰命令（図２のＲＴＮ命令）が実行された場合には、メインプログラムＭＡＩＮにおける、上述の後続命令が実行されてもよい。
【０１１８】
こうして、復帰命令から後続命令への分岐が行われてもよい。
【０１１９】
しかしながら、サブルーチン分岐命令が実行される際には、アドレス３０４ａ（図１）を、退避先（ＬＲ３０５）へと退避させ、退避先で記憶させる制御が行われる（退避部３０４）。
【０１２０】
そして、復帰命令での分岐がされる際において、その分岐での分岐先の命令は、メインプログラムＭＡＩＮにおける、退避されたアドレス３０４ａの命令である。
【０１２１】
そこで、ある場合には（図１１のＳｂ１：Ｙｅｓを参照）、後続命令（例えば図４の命令Ａ）のアドレスは、サブルーチン分岐命令のアドレス（図４の４００３番地）に対して、サブルーチン分岐命令の命令長（長さ１）が足された第１のアドレス（４００３＋１＝４００４番地：図５のアドレス３０４ｈ参照）でもよい。
【０１２２】
そして、その場合（Ｓｂ１：Ｙｅｓ）には、退避されるアドレス３０４ａは、上述の第１のアドレス（アドレス３０４ｈ）でもよい（Ｓｂ２ｂ）。
【０１２３】
しかしながら、別の場合には（Ｓｂ１：Ｎｏ）、後続命令（例えば図２の命令Ａ）のアドレスは、上述のようにして、アライメントが取られて、上述された第１のアドレスではない第２のアドレス（図２における４００２＋２＝４００４番地、図３のアドレス３０４ｉを参照）であることもある。
【０１２４】
そこで、アライメントが取られた後の、後続命令のアドレスが、第１のアドレスである場合にのみ（Ｓｂ１：Ｙｅｓ）、第１のアドレス（例えばアドレス３０４ｈ）が退避され（Ｓｂ２ｂ）、別の第２のアドレスである場合には、第２のアドレス（例えばアドレス３０４ｉ）が退避されてもよい。
【０１２５】
これにより、復帰命令での分岐の分岐先（図５の命令Ａなど参照）のアドレスが、４の倍数などの適切なアドレスにされ、処理速度が速くできる。
【０１２６】
しかも、後続命令のアドレスが、先述された、サブルーチン分岐命令のアドレスに対して、命令長が足された第１のアドレス（図４の４００３＋１＝４００４番地など）でない第２のアドレス（図２の４００２＋２＝４００４番地）である場合にも、分岐先の命令として、上述の後続命令が実行され、適切な動作がされる。これにより、確実に、適切な動作ができる。
【０１２７】
これにより、適切な動作がされることが維持されることと、処理速度が速いこととが両立できる。
【０１２８】
しかも、その命令が実行される際における処理の処理速度が速くされる命令が、サブルーチン分岐命令の後続命令であり、他の命令ではない。これにより、サブルーチン分岐命令の個数が少ないケースではなく、多いケースでも、処理速度が速くできる。
【０１２９】
これにより、実行されるプログラム１ｍＰ（図１３）の種類などに関わらず、確実に、処理速度が速くできる。
【０１３０】
なお、コンパイラ１ｍ、および、本ＣＰＵ（ＣＰＵ１０１など）は、何れも、こられの効果を得るために用いられる、システム１（図１３）の一部をなす部品である点で共通し、単一の技術範囲に属する。
【０１３１】
なお、コンパイラ１ｍがなくてもよい。そして、プログラム１ｍＰは、コンパイラ１ｍにより生成されたプログラムではなく、プログラマなどにより、手作業等で作成されたプログラムなどでもよい。つまり、コンパイラ１ｍがなくても、本ＣＰＵのみよっても、上述の効果は得られる。
【０１３２】
ここで、知られる先行例においては、本ＣＰＵが備える複数の構成（制御部３０２、退避部３０４など）のうちの全部または一部を欠く。このため、先行例では、上述の効果は得られない。これに対して、本ＣＰＵでは、上述された複数の構成があり、上述された効果が得られる。本ＣＰＵは、これらの点で、先行例に対して、先進性を有する。
【０１３３】
なお、こうして、システム１（図１３など）において、コンピュータ１ａ（コンパイラ１ｍ）により、ＣＰＵ１０１により実行されるプログラム１ｍＰが生成されてもよい。
【０１３４】
生成されるプログラム１ｍＰは、第１の命令と、第２の命令とを含んでよい。
【０１３５】
第１の命令は、サブルーチン分岐命令などであり、その命令が実行される際に、第２の命令のアドレスを記憶させる制御が（退避部３０４によって）行われる命令（図１０の「ＣＡＬＬ  ＳＵＢ」命令を参照）でもよい。
【０１３６】
第２の命令は、第１の命令が実行を開始させるサブルーチン（図１０のサブルーチン１Ａ１ｂなどを参照）の処理が終了した場合に、記憶されたアドレスへの分岐をさせることにより、当該第２の命令への分岐をさせる制御が（復帰部３０６によって）行われる命令でもよい。
【０１３７】
しかしながら、第１の命令（「ＣＡＬＬ  ＳＵＢ」命令）のアドレスとしては、第１のアドレス（図２の４００２番地を参照）と、第２のアドレス（図４の４００３番地を参照）とがある。
【０１３８】
そして、第２の命令のアドレスとして比較的適切であるアドレスは、第１の命令のアドレスが、第１のアドレスである場合（図２）には、第３のアドレス（図２の例での、第１のアドレスに対して、値「２」などの、２〜３のうちの適切な値を足した番地など）でもよい。
【０１３９】
そして、適切であるアドレスは、第１の命令のアドレスが、第２のアドレスである場合（図４）には、第４のアドレス（図４での、第１のアドレスに対して、１を足した番地など）でもよい。
【０１４０】
ここで、比較的適切であるアドレスは、例えば、先述のように、そのアドレスの命令への分岐がされる場合には、分岐に際しての処理が、比較的高速であるアドレスなどをいう。
【０１４１】
なお、比較的適切であるアドレスは、そのアドレスへの分岐がされる場合には、分岐の処理での消費電力が比較的小さいアドレスなどでもよい。
【０１４２】
そこで、ＣＰＵ１０１において、プログラム１ｍＰに含まれる複数の命令のうちから、上述の第１の命令（「ＣＡＬＬ  ＳＵＢ」命令）を検出する検出部（制御部３０２のうちの一部または全部）が設けられてもよい。
【０１４３】
そして、検出された第１の命令のアドレスが、第１のアドレス（図２）であるか、第２のアドレス（図４）であるかを判定するアライメント判定部３０９（図１）が設けられてもよい。
【０１４４】
そして、次の制御を行うアライメント実施部３１０（図１）が設けられてもよい。
【０１４５】
つまり、その制御では、第１のアドレスと判定される場合には（図２、Ｓｂ：Ｎｏ）、検出された第１の命令が実行される際に、第３のアドレスを記憶させて、第１の命令が開始させた、サブルーチンの処理が終了した場合に、記憶された第３のアドレスへの分岐をさせてもよい（Ｓｂ２ａ）。
【０１４６】
そして、第２のアドレスと判定される場合には（図４、Ｓｂ１：Ｙｅｓ）、第４のアドレスを記憶させて、サブルーチンの処理が終了した場合に、その第４のアドレスへの分岐をさせてもよい（Ｓｂ２ｂ）。
【０１４７】
そして、コンピュータ１ａ（コンパイラ１ｍ）において、生成されるプログラム１ｍＰに含まれる複数の命令のうちから、上述の第１の命令を特定する特定部（ＣＡＬＬ命令検出部１ｍ２：図１３）が設けられてもよい。
【０１４８】
なお、例えば、プログラム１ｍＰへと変換される前のプログラム１ｍ２Ｐにおける、第１の命令へと変換される命令が特定されることにより、特定される命令から変換される命令が、第１の命令と特定されてもよい。
【０１４９】
そして、次の制御（図１２のＳｃ２）がアライメント処理部１ｍ３により行われてもよい。
【０１５０】
つまり、その制御では、特定される第１の命令のアドレスが、第１のアドレスである場合には、プログラム１ｍＰに含まれる第２の命令のアドレスを、第３のアドレスにさせてもよい。
【０１５１】
一方で、第２のアドレスである場合には、第２の命令のアドレスを、第４のアドレスにさせてもよい。
【０１５２】
これにより、第２の命令が、上述された、サブルーチン分岐命令の後続命令などであるにも関わらず、この第２の命令への分岐がされるのに際して、比較的高速な処理、比較的小さい消費電力での処理などの適切な処理ができる。
【０１５３】
ひいては、生成されるプログラム１ｍＰが、サブルーチン分岐命令を多く含む場合などでも、プログラム１ｍＰの実行の処理が、適切な処理にされ、確実に、適切な処理ができる。
【０１５４】
なお、本発明は、装置、システム、集積回路などとして実現できるだけでなく、その装置等を構成する処理手段をステップとする方法として実現したり、それらステップをコンピュータに実行させるプログラムとして実現したり、そのプログラムを記録したコンピュータ読み取り可能なＣＤ−ＲＯＭなどの記録媒体として実現したり、そのプログラムを示す情報、データ又は信号として実現したりすることもできる。そして、それらプログラム、情報、データ及び信号は、インターネット等の通信ネットワークを介して配信してもよい。
【０１５５】
なお、本発明について、実施の形態に基づいて説明したが、本発明は、上記の実施の形態に限定されるものではない。本発明の主旨を逸脱しない限り、当業者が思いつく各種変形を本実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の範囲内に含まれる。
【産業上の利用可能性】
【０１５６】
本発明は、同一の半導体チップ、もしくはパッケージにもしくは基板に設けられたＣＰＵと命令メモリのシステムの処理速度向上と消費電力削減および命令メモリのアクセス頻度削減に利用できる。
【０１５７】
サブルーチンからの復帰先アドレスのアライメントを取ることを可能とすることで、サブルーチンからの復帰におけるオーバーヘッドを削減し、処理時間と消費電力を削減することができる。
【符号の説明】
【０１５８】
１Ｃ１、１Ｃ３、１Ｃ３１〜１Ｃ３４  ソフトウェア
１Ｃ２、１Ｃ４  モード設定フラグの状態
１Ｃ４１〜１Ｃ４４  値
１００  命令メモリ
１００Ｐ、１００Ｐａ、１００Ｐｂ  プログラム
１００ｉＡ  ＣＡＬＬ命令
１００ｉＱ  アライメント制御文
１００ｉＭ  後続命令
１００ｉＢ  ＲＴＮ命令
１０１  プロセッサ
２０１  プロセッサ
３０２  制御部
３０２ａ  退避信号
３０２ｂ  復帰信号
３０３  プログラムカウンタ
３０３ｖ  アドレス
３０４  退避部
３０５  ＬＲ
３０６  復帰部
３０７  命令バッファ
３０８  アライメント部
３０９  アライメント判定部
３１０  アライメント実施部
３１１  モード設定フラグ
【図１】
2012221180.tif 000003
【図２】
2012221180.tif 000004
【図３】
2012221180.tif 000005
【図４】
2012221180.tif 000006
【図５】
2012221180.tif 000007
【図６】
2012221180.tif 000008
【図７Ａ】
2012221180.tif 000009
【図７Ｂ】
2012221180.tif 000010
【図８】
2012221180.tif 000011
【図９】
2012221180.tif 000012
【図１０】
2012221180.tif 000013
【図１１】
2012221180.tif 000014
【図１２】
2012221180.tif 000015
【図１３】
2012221180.tif 000016