図面 (/)

技術 マイクロプロセッサおよびレジスタ退避方法

出願人 富士通セミコンダクター株式会社
発明者 竹部好正
出願日 2007年5月8日 (13年7ヶ月経過) 出願番号 2007-123900
公開日 2008年11月20日 (12年1ヶ月経過) 公開番号 2008-282105
状態 特許登録済
技術分野 機械語命令の実行 マルチプログラミング
主要キーワード 退避制御 マップレジスタ 退避メモリ アセンブリコード 自動変数 種アドレス コメントアウト 命令実行処理
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2008年11月20日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (16)

課題

マイクロプロセッサにおいて、サブルーチンの呼び出しに伴うレジスタ退避復元高速に実行すると共に、プログラム規模の増大を抑制する。

解決手段

レジスタファイル20は、演算処理に用いるデータを格納する1以上のレジスタを備える。退避メモリ30は、レジスタから退避されたデータを格納する。退避制御部40は、サブルーチン内でのレジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを退避メモリ30に退避させる。また、退避制御部40は、サブルーチンからの復帰命令の実行時に、退避メモリ30に退避されたデータを対応するレジスタに書き戻す。

概要

背景

現在、一般的なマイクロプロセッサは、内部に多数のレジスタを備えている。レジスタには、外部メモリから読み込んだデータや演算処理の結果が一時的に格納される。また、外部メモリにアクセスする際に用いる各種アドレスも格納される。レジスタは外部メモリと比べて高速に動作するため、レジスタを活用することで演算処理を高速化できる。特に、プログラムから多目的に使用可能なレジスタは、汎用レジスタと呼ばれる。

ところで、マイクロプロセッサに実行させるプログラムでは、逐次的な命令の実行に加えて、サブルーチンの呼び出しが行われることも多い。サブルーチンは、呼び出し元の命令とはプログラム内で不連続であり、サブルーチンの中でのみ使用される変数自動変数)も存在する。このため、サブルーチンの呼び出し時には、サブルーチンが使用予定のレジスタに格納されているデータを退避する必要がある。また、サブルーチンからの復帰時には、退避したデータを元のレジスタに戻す必要がある。

このようなレジスタの退避・復元は、一般的には、プログラムが明示的にレジスタと外部メモリとの間でデータを移動させることで実現される。すなわち、プログラムはレジスタの退避時には、レジスタのデータを外部メモリ内のスタック領域に移動させると共に、これに併せてレジスタ内の各種アドレスを更新する。また、プログラムはレジスタの復元時には、スタック領域から元のレジスタにデータを移動させると共に、レジスタ内の各種アドレスを退避前の状態に戻す(例えば、特許文献1,2参照)。
特開平03−191426号公報
特開昭59−135551号公報

概要

マイクロプロセッサにおいて、サブルーチンの呼び出しに伴うレジスタの退避・復元を高速に実行すると共に、プログラムの規模の増大を抑制する。レジスタファイル20は、演算処理に用いるデータを格納する1以上のレジスタを備える。退避メモリ30は、レジスタから退避されたデータを格納する。退避制御部40は、サブルーチン内でのレジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを退避メモリ30に退避させる。また、退避制御部40は、サブルーチンからの復帰命令の実行時に、退避メモリ30に退避されたデータを対応するレジスタに書き戻す。

目的

本発明はこのような点に鑑みてなされたものであり、サブルーチンの呼び出しに伴うレジスタの退避・復元を高速に実行すると共に、プログラムの規模の増大を抑制できるマイクロプロセッサおよびそのようなマイクロプロセッサによるレジスタ退避方法を提供することを目的とする。

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

サブルーチンの呼び出しを含むプログラムを実行可能なマイクロプロセッサにおいて、演算処理に用いるデータを格納する1以上のレジスタを備えるレジスタファイルと、前記レジスタから退避されたデータを格納する退避メモリと、前記サブルーチン内での前記レジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを前記退避メモリに退避させると共に、前記サブルーチンからの復帰命令の実行時に、前記退避メモリに退避されたデータを対応するレジスタに書き戻す退避制御部と、を有することを特徴とするマイクロプロセッサ。

請求項2

前記退避制御部は、各レジスタの退避状態を示すマップデータを格納するマップ記憶部を有しており、前記レジスタのデータを退避させる際に前記マップデータを更新し、前記復帰命令の実行時には、前記マップデータに基づいて書き戻すデータを特定することを特徴とする請求項1記載のマイクロプロセッサ。

請求項3

前記退避制御部は、前記サブルーチンの呼び出し命令の実行時に、前記マップ記憶部に格納されている前記マップデータを前記退避メモリに退避させてから初期化すると共に、前記復帰命令の実行時に、退避されたデータを前記レジスタに書き戻した後に、退避された前記マップデータを前記マップ記憶部に書き戻すことを特徴とする請求項2記載のマイクロプロセッサ。

請求項4

前記退避制御部は、各レジスタを識別番号によって識別しており、前記レジスタのデータを退避させる際には、前記レジスタの識別番号に基づいて前記退避メモリ内のアドレスを生成し、生成したアドレスが示す位置にデータを格納することを特徴とする請求項2記載のマイクロプロセッサ。

請求項5

前記退避制御部は、前記レジスタのデータを退避させる際に退避の順序を前記マップデータに記録し、前記復帰命令の実行時には、前記マップデータに記録された順序に応じてデータを前記退避メモリから読み込んで対応するレジスタに書き戻すことを特徴とする請求項2記載のマイクロプロセッサ。

請求項6

前記退避制御部は、前記レジスタのデータを退避させる前に前記退避メモリの空き領域の不足を検知すると、前記退避メモリに格納されているデータを前記マイクロプロセッサに接続された外部メモリに移動させて空き領域を確保することを特徴とする請求項1記載のマイクロプロセッサ。

請求項7

演算処理に用いるデータを格納する1以上のレジスタを有し、サブルーチンの呼び出しを含むプログラムを実行可能なマイクロプロセッサによるレジスタ退避方法において、前記サブルーチン内での前記レジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを前記マイクロプロセッサが有する退避メモリに退避させ、前記サブルーチンからの復帰命令の実行時に、前記退避メモリに退避されたデータを対応するレジスタに書き戻す、ことを特徴とするレジスタ退避方法。

技術分野

0001

本発明はマイクロプロセッサおよびレジスタ退避方法に関し、特にサブルーチンの呼び出しを含むプログラムを実行可能なマイクロプロセッサおよびそのようなマイクロプロセッサによるレジスタ退避方法に関する。

背景技術

0002

現在、一般的なマイクロプロセッサは、内部に多数のレジスタを備えている。レジスタには、外部メモリから読み込んだデータや演算処理の結果が一時的に格納される。また、外部メモリにアクセスする際に用いる各種アドレスも格納される。レジスタは外部メモリと比べて高速に動作するため、レジスタを活用することで演算処理を高速化できる。特に、プログラムから多目的に使用可能なレジスタは、汎用レジスタと呼ばれる。

0003

ところで、マイクロプロセッサに実行させるプログラムでは、逐次的な命令の実行に加えて、サブルーチンの呼び出しが行われることも多い。サブルーチンは、呼び出し元の命令とはプログラム内で不連続であり、サブルーチンの中でのみ使用される変数自動変数)も存在する。このため、サブルーチンの呼び出し時には、サブルーチンが使用予定のレジスタに格納されているデータを退避する必要がある。また、サブルーチンからの復帰時には、退避したデータを元のレジスタに戻す必要がある。

0004

このようなレジスタの退避・復元は、一般的には、プログラムが明示的にレジスタと外部メモリとの間でデータを移動させることで実現される。すなわち、プログラムはレジスタの退避時には、レジスタのデータを外部メモリ内のスタック領域に移動させると共に、これに併せてレジスタ内の各種アドレスを更新する。また、プログラムはレジスタの復元時には、スタック領域から元のレジスタにデータを移動させると共に、レジスタ内の各種アドレスを退避前の状態に戻す(例えば、特許文献1,2参照)。
特開平03−191426号公報
特開昭59−135551号公報

発明が解決しようとする課題

0005

しかし、従来のレジスタの退避・復元方法では、サブルーチンが使用するレジスタの数に比例して、退避・復元のコストも大きくなるという問題がある。すなわち、プログラムが低速な外部メモリに逐次的にアクセスする必要があるため、退避・復元処理に要する時間が増大する。また、1つのレジスタのデータを移動させるために1つの命令が必要であるため、プログラムの規模が増大する。特に、マイクロプロセッサが備える汎用レジスタが増加し、より多くの汎用レジスタが演算処理に用いられる傾向にある近年では、この問題は顕著となる。

0006

本発明はこのような点に鑑みてなされたものであり、サブルーチンの呼び出しに伴うレジスタの退避・復元を高速に実行すると共に、プログラムの規模の増大を抑制できるマイクロプロセッサおよびそのようなマイクロプロセッサによるレジスタ退避方法を提供することを目的とする。

課題を解決するための手段

0007

本発明では上記課題を解決するために、図1に示すマイクロプロセッサが提供される。本発明に係るマイクロプロセッサは、サブルーチンの呼び出しを含むプログラムを実行可能なものである。マイクロプロセッサ1は、レジスタファイル20、退避メモリ30および退避制御部40を有する。レジスタファイル20は、演算処理に用いるデータを格納する1以上のレジスタを備える。退避メモリ30は、レジスタから退避されたデータを格納する。退避制御部40は、サブルーチン内でのレジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを退避メモリ30に退避させると共に、サブルーチンからの復帰命令の実行時に、退避メモリ30に退避されたデータを対応するレジスタに書き戻す。

0008

このようなマイクロプロセッサ1によれば、サブルーチン内でのレジスタへの書き込み命令の実行時に、退避制御部40により書き込み先のレジスタに格納されているデータが退避メモリ30に退避される。また、サブルーチンからの復帰命令の実行時に、退避制御部40により退避メモリ30に退避されたデータが対応するレジスタに書き戻される。

0009

また、上記課題を解決するために、演算処理に用いるデータを格納する1以上のレジスタを有し、サブルーチンの呼び出しを含むプログラムを実行可能なマイクロプロセッサによるレジスタ退避方法において、サブルーチン内でのレジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータをマイクロプロセッサが有する退避メモリに退避させ、サブルーチンからの復帰命令の実行時に、退避メモリに退避されたデータを対応するレジスタに書き戻すことを特徴とするレジスタ退避方法が提供される。

0010

このようなレジスタ退避方法によれば、サブルーチン内でのレジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータが退避メモリに退避される。また、サブルーチンからの復帰命令の実行時に、退避メモリに退避されたデータが対応するレジスタに書き戻される。

発明の効果

0011

本発明では、マイクロプロセッサ内に退避メモリを設け、サブルーチン内でのレジスタへの書き込み命令の実行時に自動的にデータを退避メモリに退避させ、サブルーチンからの復帰命令の実行時に自動的に退避メモリのデータをレジスタに書き戻すこととした。これにより、退避・復元処理に要する時間が大きく減少する。また、データを移動するための明示的な命令が不要となり、プログラムの規模が縮小する。

発明を実施するための最良の形態

0012

以下、本発明の実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、マイクロプロセッサの概要を示すブロック図である。図1に示すマイクロプロセッサ1は、サブルーチンの呼び出しを含むプログラムを実行可能なものである。マイクロプロセッサ1は、外部メモリ2と接続されている。外部メモリ2は、メインメモリキャッシュメモリとして機能するメモリであり、RAM(Random Access Memory)やフラッシュメモリなどである。マイクロプロセッサ1は、命令実行部10、レジスタファイル20、退避メモリ30および退避制御部40を有する。

0013

命令実行部10は、外部メモリ2から命令コードを順次読み込み、デコードする。そして、命令実行部10は、デコードの結果に応じて命令を実行する。命令としては、外部メモリ2からのデータの読み込み命令ストア命令)、外部メモリ2へのデータの書き込み命令(セーブ命令)、算術論理演算命令、サブルーチンの呼び出し命令コール命令)、サブルーチンからの復帰命令(リターン命令)などがある。命令実行部10は、レジスタファイル20の汎用レジスタに各種データを格納して利用する。

0014

レジスタファイル20は、1以上の汎用レジスタを備えている。汎用レジスタは、所定のデータ長のデータを保持することができる。個々の汎用レジスタは、一意識別番号によって識別される。本実施の形態では、レジスタファイル20は、32ビットのデータを格納する汎用レジスタを32個備えているものとする。また、本実施の形態では、3つの汎用レジスタからの読み出しと1つの汎用レジスタへの書き込みとが同時に実行可能であるとする。

0015

退避メモリ30には、レジスタファイル20の汎用レジスタから退避されたデータが格納される。なお、サブルーチンが階層的に呼び出された場合には、各階層における退避データが退避メモリ30に積み上げられる。

0016

退避制御部40は、命令実行部10からデコードされた命令の内容を取得する。ここで、命令がレジスタファイル20のいずれかの汎用レジスタにデータを書き込むものである場合には、退避制御部40は、命令の実行と並行して、書き込み先の汎用レジスタのデータを退避メモリ30に退避させる。また、命令がリターン命令である場合には、退避メモリ30に退避されているデータを、元の汎用レジスタに復元する。

0017

なお、退避制御部40は、レジスタの退避状態を示すマップデータを保持しておき、マップデータに基づいてデータの復元を行う。また、サブルーチンが階層的に呼び出されることで退避メモリ30の記憶領域が不足すると、退避制御部40は、退避メモリ30に格納されたデータを外部メモリ2に移動させ、記憶領域を確保する。

0018

図2は、マイクロプロセッサの回路構成例を示す図である。図2に示す回路構成は、命令実行部10および退避制御部40を詳細化したものである。命令実行部10は、命令デコーダ11、算術論理演算器ALU:Arithmetic and Logical Unit)12、セレクタ13a〜13dおよび遅延回路14a〜14eを有する。退避制御部40は、マップレジスタ41、デコーダ42、エンコーダ43、ポインタ44、加算器45、シーケンサ46、チェッカー47およびセレクタ48a〜48dを有する。なお、図2では、セレクタ13a〜13dおよびセレクタ48a〜48dを制御する回路の記載は省略している。

0019

命令デコーダ11は、外部メモリ2から読み込み済みの命令コードを、図示しない命令レジスタから取得してデコードする。そして、命令デコーダ11は、ALU12への指令(opc)、入力データが格納されている汎用レジスタの番号(rs1,rs2)および命令の実行結果を書き込む汎用レジスタの番号(rd)を出力する。ALU12への指令は、遅延回路14aに一時的に保持される。実行結果を書き込む汎用レジスタの番号は、遅延回路14bに一時的に保持される。汎用レジスタから読み出したデータは、遅延回路14c,14dに一時的に保持される。

0020

ALU12は、算術演算および論理演算を実行可能な演算回路である。ALU12は、命令デコーダ11が出力する指令に従って、レジスタファイル20の汎用レジスタから読み出されたデータに対して演算を行う。そして、指定された汎用レジスタに演算の結果を書き込む。

0021

マップレジスタ41は、マップデータを保持している。マップデータは、レジスタファイル20の汎用レジスタに1対1に対応するフラグの集合である。マップレジスタ41は、汎用レジスタへの書き込みの命令の実行時、すなわち、データの退避時に、マップデータ中のその汎用レジスタに対応するフラグを“1”に設定する。また、マップレジスタ41は、コール命令の実行時に、マップデータを退避メモリ30に退避させ、保持するマップデータを初期化する。その後、リターン命令時の実行時に、退避メモリ30に退避されたマップデータを取得して保持する。

0022

デコーダ42は、5ビットで表されるレジスタ番号を、いずれか1桁のみが“1”となる32ビットのビットパターンにデコードする。例えば、デコーダ42は、“00111”(7)を“00000000000000000000000010000000”にデコードする。デコーダ42がデコードしたビットパターンを用いて、マップレジスタ41が保持するマップデータが更新される。

0023

エンコーダ43は、マップレジスタ41が保持するマップデータにおいてフラグが“1”に設定されている汎用レジスタの番号を、番号の大きい順に順次出力する。このとき出力されるレジスタ番号は5ビットで表される。すなわち、エンコーダ43は、デコーダ42と逆の処理を行う。

0024

ポインタ44は、退避メモリ30内の位置を示すアドレスであって、現在実行中のサブルーチンのために確保した記憶領域の先頭を示すアドレスを保持している。ポインタ44は、コール命令の実行時に、呼び出されるサブルーチンのために確保した記憶領域の先頭を示すアドレスを設定する。その後、リターン命令時の実行時に、呼び出し元のサブルーチンまたはメインルーチンのために確保されている記憶領域の先頭を示すアドレスを設定する。

0025

また、ポインタ44は、退避メモリ30と外部メモリ2との間のデータの移動時には、アドレスを順次インクリメントすることで、次にアクセスすべき退避メモリ30内の位置を示すようにする。その後、データの移動が完了すると、現在実行中のサブルーチンのための記憶領域の先頭を示すアドレスを設定する。

0026

加算器45は、退避メモリ30へのアクセスに用いるアドレスを計算するための演算回路である。加算器45は、コール命令の実行時に、呼び出されるサブルーチンのために確保した記憶領域の先頭を示すアドレスを計算し、ポインタ44に供給する。

0027

また、加算器45は、汎用レジスタへの書き込みの命令の実行時に、ポインタ44が保持するアドレスと書き込み先を示すレジスタ番号とから、退避データを格納すべき位置を示すアドレスを計算し、退避メモリ30に供給する。また、加算器45は、リターン命令の実行時に、ポインタ44が保持するアドレスと復元すべき汎用レジスタの番号とから、退避データが格納されている位置を示すアドレスを計算し、退避メモリ30に供給する。

0028

シーケンサ46は、退避メモリ30と外部メモリ2との間のデータの移動時に、退避メモリ30の先頭から順次データを移動させるための制御の信号を加算器45に供給する。
チェッカー47は、加算器45から退避メモリ30へ供給されるアドレスを監視し、退避メモリ30の空き領域が不足していると判断すると、シーケンサ46にその旨を通知する。これにより、シーケンサ46の制御のもと、退避メモリ30から外部メモリ2にデータが移動される。また、チェッカー47は、退避メモリ30が空であると判断すると、シーケンサ46にその旨を通知する。これにより、シーケンサ46の制御のもと、外部メモリ2から退避メモリ30にデータが戻される。

0029

図3は、マップデータのデータ構造例を示す図である。マップデータ41aは、マップレジスタ41によって保持されている。マップデータ41aは、32ビットのビット列である。ビット列の最下位ビットが0番の汎用レジスタに対応し、最上位ビットが31番の汎用レジスタに対応する。マップデータ41aの全てのビットは、初期状態として“0”が設定されている。その後、汎用レジスタへの書き込みの命令が実行される毎に、書き込み先の汎用レジスタに対応するビットが“1”に設定される。

0030

図4は、第1の実施の形態の退避データのデータ構造例を示す図である。図4では、1行が32ビットのデータを表し、縦の数値行数を表している。図4に示すようなデータが退避メモリ30に格納される。

0031

退避メモリ30では、サブルーチンの呼び出し時に、レジスタファイル20の全ての汎用レジスタ分の記憶領域が確保される。すなわち、32ビット×32個分の記憶領域がサブルーチンの呼び出し毎に確保される。汎用レジスタからの退避時には、その汎用レジスタの番号に対応する位置に退避データが格納される。また、サブルーチンの呼び出し時には、マップレジスタ41が保持するマップデータも退避メモリ30に退避される。これにより、階層的なサブルーチンの呼び出しにも対応することができる。

0032

例えば、退避メモリ30の31行目まで使用されている状態でサブルーチンの呼び出しが行われると、まず、32行目に現在のマップデータが格納される。そして、33行目から64行目までに新たなサブルーチンのための記憶領域が確保される。このとき、ポインタ44の値は、確保された記憶領域の先頭である33行目を指し示している。これにより、0番の汎用レジスタの退避データが33行目に、31番の汎用レジスタの退避データが64行目に格納されることになる。

0033

次に、以上のような構成のマイクロプロセッサにおいて実行される処理の流れについて説明する。なお、以下に述べる処理の流れは、主に図2に示したセレクタ13a〜13dおよびセレクタ48a〜48dを制御することで実現できる。

0034

図5は、命令実行処理の手順を示すフローチャートである。以下、図5に示す処理をステップ番号に沿って説明する。
[ステップS11]命令実行部10は、外部メモリ2から読み込んだ命令コードをデコードする。そして、命令実行部10は、デコード結果を退避制御部40に通知する。

0035

[ステップS12]退避制御部40は、命令実行部10が実行しようとする命令がコール命令であるか否か判断する。コール命令である場合には、処理がステップS13に進められる。コール命令でない場合には、処理がステップS14に進められる。

0036

[ステップS13]退避制御部40は、マップデータを初期化する処理を実行する。初期化処理の詳細は後で説明する。なお、この処理はステップS18と同時に実行することができる。

0037

[ステップS14]退避制御部40は、命令実行部10が実行しようとする命令が汎用レジスタへの書き込みを伴う命令であるか否か判断する。書き込みを伴う命令である場合には、処理がステップS15に進められる。書き込みを伴う命令でない場合には、処理がステップS16に進められる。

0038

[ステップS15]退避制御部40は、書き込み先の汎用レジスタに格納されたデータを退避メモリ30に退避させる処理を実行する。退避処理の詳細は後で説明する。なお、この処理はステップS18と同時に実行することができる。

0039

[ステップS16]退避制御部40は、命令実行部10が実行しようとする命令がリターン命令であるか否か判断する。リターン命令である場合には、処理がステップS17に進められる。リターン命令でない場合には、処理がステップS18に進められる。

0040

[ステップS17]退避制御部40は、復帰前のサブルーチンにおいて退避メモリ30に退避されたデータを復元する処理を実行する。復元処理の詳細は後で説明する。なお、この処理はステップS18と同時に実行することができる。

0041

[ステップS18]命令実行部10は、ステップS11のデコード結果に従って、演算処理を実行する。
[ステップS19]命令実行部10は、プログラムに含まれる命令を最後まで実行したか否か判断する。最後まで実行した場合には、処理が終了する。最後まで実行していない場合には処理がステップS11に進められる。

0042

このようにして、退避制御部40は、コール命令、汎用レジスタへの書き込みを伴う命令、リターン命令を命令実行部10が実行する際に、所定の処理を自動的に実行する。以下、ステップS13の初期化処理、ステップS15の退避処理、ステップS17の復元処理の詳細について説明する。

0043

図6は、第1の実施の形態の初期化処理の手順を示すフローチャートである。以下、図6に示す処理をステップ番号に沿って説明する。
[ステップS21]退避制御部40は、マップデータおよび次のサブルーチンに対応する退避データを格納するための記憶領域が、退避メモリ30に不足しているか否か判断する。これは、チェッカー47からシーケンサ46に通知が送られているか否かに基づいて判断される。記憶領域が不足している場合には、処理がステップS22に進められる。不足していない場合には処理がステップS24に進められる。

0044

[ステップS22]退避制御部40は、退避メモリ30に格納されているデータを先頭から順に外部メモリ2に移動させる。これは、シーケンサ46による制御のもと、ポインタ44が保持するアドレスを順次インクリメントし、退避メモリ30に供給することで実現される。

0045

[ステップS23]退避制御部40は、ポインタ44が保持するアドレスを退避メモリ30の先頭、すなわち、“0”に初期化する。
[ステップS24]退避制御部40は、マップレジスタ41が保持するマップデータを、退避メモリ30に退避させる。

0046

[ステップS25]退避制御部40は、マップレジスタ41が保持するマップデータを初期化する。すなわち、マップデータの全てのビットを“0”に設定する。
[ステップS26]退避制御部40は、ポインタ44が保持するアドレスを0番の汎用レジスタの退避データを格納すべき位置のアドレスに設定する。

0047

このようにして、退避制御部40は、コール命令の実行時に、マップデータを退避メモリ30に退避させて初期化する。また、次のサブルーチンのための記憶領域の先頭にポインタの値を設定する。ここで、退避メモリ30の空き領域が不足していると、退避制御部40は、退避メモリ30のデータを外部メモリ2に移動させ、空き領域を確保する。

0048

図7は、第1の実施の形態の退避処理の手順を示すフローチャートである。以下、図7に示す処理をステップ番号に沿って説明する。
[ステップS31]退避制御部40は、マップデータ内の書き込み先の汎用レジスタに対応するビットを“1”に設定する。これは、デコーダ42によって得られる書き込み先の汎用レジスタの番号に対応するビットパターンと、現在のマップデータとの論理和を計算することで実現できる。

0049

[ステップS32]退避制御部40は、退避データを格納すべき退避メモリ30内のアドレスを計算する。これは、ポインタ44が保持するアドレスと書き込み先の汎用レジスタの番号とに基づいて、加算器45によって計算される。計算されたアドレスは、退避メモリ30に供給される。

0050

[ステップS33]退避制御部40は、汎用レジスタに格納されているデータを上書きされる前に読み出し、退避メモリ30に供給する。退避メモリ30は、ステップS32で供給されたアドレスで示される位置にこのデータを書き込む。

0051

このようにして、退避制御部40は、汎用レジスタへの書き込みを伴う命令の実行時に、格納されているデータを読み込んで退避メモリ30に退避させる。また、退避制御部40は、退避が行われたことをマップデータに記録する。

0052

図8は、第1の実施の形態の復元処理の手順を示すフローチャートである。以下、図8に示す処理をステップ番号に沿って説明する。
[ステップS41]退避制御部40は、マップレジスタ41が保持するマップデータに基づいて、退避が行われた汎用レジスタをレジスタ番号の大きい方から1つ選択する。

0053

[ステップS42]退避制御部40は、ステップS41で選択した汎用レジスタに対応する退避データが格納されている退避メモリ30内のアドレスを計算する。これは、ポインタ44が保持するアドレスと汎用レジスタの番号とに基づいて、加算器45によって計算される。計算されたアドレスは、退避メモリ30に供給される。

0054

[ステップS43]退避制御部40は、ステップS42で計算したアドレスに対応するデータを退避メモリ30から読み出す。そして、退避制御部40は、ステップS41で選択した汎用レジスタに読み出したデータを格納する。これは、エンコーダ43が汎用レジスタのレジスタ番号をレジスタファイル20に供給することで実現される。

0055

[ステップS44]退避制御部40は、退避が行われた全ての汎用レジスタをステップS41で選択したか否か判断する。全て選択した場合には、処理がステップS45に進められる。未選択の汎用レジスタがある場合には、処理がステップS41に進められる。

0056

[ステップS45]退避制御部40は、退避メモリ30に退避されている直前のマップデータを取得し、マップレジスタ41に供給する。
[ステップS46]退避制御部40は、退避メモリ30が空か否か判断する。これは、チェッカー47からシーケンサ46に通知が送られているか否かに基づいて判断される。退避メモリ30が空である場合には、処理がステップS47に進められる。空でない場合には、処理がステップS49に進められる。

0057

[ステップS47]退避制御部40は、外部メモリ2に退避メモリ30から移動させたデータが存在するか否か判断する。存在する場合には、処理がステップS48に進められる。存在しない場合には、処理がステップS49に進められる。

0058

[ステップS48]退避制御部40は、過去に移動させたデータを外部メモリ2から退避メモリ30に戻す。これは、シーケンサ46による制御のもと、ポインタ44が保持するアドレスを順次インクリメントし、退避メモリ30に供給することで実現される。

0059

[ステップS49]退避制御部40は、ポインタ44が保持するアドレスを0番の汎用レジスタの退避データを格納すべき位置のアドレスに設定する。
このようにして、退避制御部40は、リターン命令の実行時に、現在のマップデータに基づいて、退避メモリ30に退避されたデータを汎用レジスタに書き戻す。その後、退避メモリ30に退避された直前のマップデータも、マップレジスタ41に書き戻す。ここで、退避メモリ30が空になり、退避メモリ30から外部メモリ2に移動させたデータがある場合には、退避制御部40は、外部メモリ2から退避メモリ30にデータを戻す。

0060

次に、このようなマイクロプロセッサ1に実行させるプログラムについて説明する。
図9は、プログラムのソースコードの例を示す図である。図9に示すソースコード60は、プログラムの開発者が作成するものである。ソースコード60には、引数として入力される1000個の整数値の平均を求める関数“average”が記述されている。この関数に含まれる文は、コード範囲61〜64の4つの範囲に区分できる。

0061

コード範囲61には、整数型の変数“i”と“sum”とを宣言する文が記述されている。また、変数“sum”の初期値として“0”を設定する処理が記述されている。コード範囲62には、1000個の整数値の合計を計算する処理が記述されている。コード範囲63には、合計を個数で割ることで平均を計算する処理が記述されている。コード範囲64には、計算された平均を関数の戻り値として出力する処理が記述されている。

0062

図10は、プログラムのアセンブリコードの例を示す図である。図10に示すアセンブリコード70は、図9のソースコード60を、マイクロプロセッサ1に対応したコンパイラコンパイルすることによって得られるものである。アセンブリコード70には、関数“average”に対応するサブルーチンが記述されている。アセンブリコード70は、コード範囲71〜76の6つの範囲に区分できる。

0063

コード範囲71には、サブルーチン内で一時的に使用する汎用レジスタr12,r13,r14(レジスタファイル20の12番、13番、14番の汎用レジスタ)に格納されているデータを外部メモリ2のスタック領域に移動させる処理が記述されている。また、スタック領域のトップを示すスタックポインタの値を更新する処理が記述されている。

0064

ただし、コード範囲71のコードはコメントアウトされている。すなわち、マイクロプロセッサ1は、実際には、これらの処理を実行しない。マイクロプロセッサ1では、汎用レジスタの退避は自動的に行われ、プログラムによる明示の指示は不要だからである。なお、既存の一般的なマイクロプロセッサに同様の処理を実行させる場合は、これらのコードが必要となる。

0065

コード範囲72には、汎用レジスタr12,r13に初期値“0”を設定する処理が記載されている。コード範囲72は、ソースコード60のコード範囲61に対応する。ここで、汎用レジスタr12が変数“i”の値を保持し、汎用レジスタr13が変数“sum”の値を保持する。

0066

コード範囲73には、外部メモリ2から整数値を読み込み、汎用レジスタr13に加算することを1000回繰り返す処理が記述されている。コード範囲73は、ソースコード60のコード範囲62に対応する。これにより、汎用レジスタr13に1000個の整数値の合計が格納される。

0067

コード範囲74には、1000個の整数値の合計を1000で割ることで平均を計算する処理が記述されている。コード範囲74は、ソースコード60のコード範囲63に対応する。

0068

コード範囲75には、コード範囲71で退避した汎用レジスタr12,r13,r14のデータを、外部メモリ2のスタック領域から取得して書き戻す処理が記述されている。また、スタック領域のトップを示すスタックポインタの値を更新する処理が記述されている。

0069

ただし、コード範囲71と同様、コード範囲75のコードはコメントアウトされている。すなわち、マイクロプロセッサ1は、実際には、これらの処理を実行しない。マイクロプロセッサ1では、汎用レジスタの復元は自動的に行われ、プログラムによる明示の指示は不要だからである。なお、既存の一般的なマイクロプロセッサに同様の処理を実行させる場合は、これらのコードが必要となる。

0070

コード範囲76には、このサブルーチンから復帰するためのリターン命令が記述されている。コード範囲76は、ソースコード60のコード範囲64に対応する。
ここで、アセンブリコード70で示されるプログラムを命令実行部10が実行すると、退避制御部40は、レジスタファイル20の12番、13番、14番の汎用レジスタのデータを書き込み時に自動的に退避メモリ30に退避させる。また、退避制御部40は、リターン命令の実行時に、12番、13番、14番の汎用レジスタのデータを、自動的に退避メモリ30から書き戻す。

0071

なお、図10の例では、コード範囲71,75をコメントアウトしているが、これらのコードは完全に削除して構わない。これにより、プログラムの規模を圧縮できる。
このようなマイクロプロセッサを用いることで、演算処理と並行して退避・復元処理を実行することができ、処理効率を大きく向上させることができる。また、プログラム中にデータを移動するための明示的な命令を記述する必要がなくなり、プログラムの規模を大きく圧縮できる。

0072

また、退避データとマップデータとを退避メモリに積み上げるため、階層的なサブルーチンの呼び出しにも柔軟に対応することができる。また、退避メモリの空き領域が不足すると、自動的にデータが外部メモリに移動されるため、退避メモリは過度に大きな記憶容量を必要とすることがない。

0073

また、サブルーチンの呼び出し時に、各汎用レジスタに対応する退避メモリ内の退避位置が決定するため、退避・復元の制御が簡潔となり、回路構成が複雑化することを防止できる。

0074

[第2の実施の形態]
次に、第2の実施の形態について説明する。第2の実施の形態は、第1の実施の形態における退避メモリ内の退避データの管理方法を変更したものである。前述の第1の実施の形態との相違点を中心に説明し、同様の事項については説明を省略する。なお、第2の実施の形態のマイクロプロセッサの構成の概要は、図1に示した第1の実施の形態のものと同様であるため、以下、図1で用いた符号と同じ符号を用いて説明する。

0075

図11は、順序付きマップデータのデータ構造例を示す図である。図11に示す順序付きマップデータ41bは、退避制御部40が管理するデータであり、図3に示した第1の実施の形態のマップデータ41aに対応する。

0076

順序付きマップデータ41bは、32個の0以上の整数値の列である。列の最下位の値が0番の汎用レジスタに対応し、最上位の値が31番の汎用レジスタに対応する。順序付きマップデータ41bの全ての整数値は、初期状態として“0”が設定されている。その後、汎用レジスタへの書き込みの命令が実行される毎に、書き込み先の汎用レジスタに対応する欄に、そのサブルーチン内で退避が行われた順序を示す値が設定される。

0077

例えば、コール命令の実行後、最初に29番の汎用レジスタが退避され、次に1番の汎用レジスタが退避された場合、29番に対応する欄に“1”が設定され、1番に対応する欄に“2”が設定される。

0078

図12は、第2の実施の形態の退避データのデータ構造例を示す図である。図12に示すデータ構造は、図4に示した第1の実施の形態のデータ構造に対応するものである。すなわち、図12に示すようなデータが退避メモリ30に格納される。

0079

サブルーチンの呼び出し時には、退避制御部40が管理する現在の順序付きマップデータが退避メモリ30に退避される。そして、ポインタの値が、次にデータを書き込むべき位置、すなわち、空き領域の先頭を指し示す。ここで、ポインタの値が示す位置に退避データが書き込まれると、ポインタの値がインクリメントされる。また、退避したデータの復元時には、後に退避されたデータから順に復元が行われ、ポインタの値が順次デクリメントされる。

0080

第2の実施の形態の命令実行処理の全体的な流れは、図5に示した第1の実施の形態のものと同様である。以下、初期化処理、退避処理、復元処理の詳細について説明する。
図13は、第2の実施の形態の初期化処理の手順を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。

0081

[ステップS51]退避制御部40は、マップデータおよび次のサブルーチンに対応する退避データを格納するための記憶領域が、退避メモリ30に不足しているか否か判断する。記憶領域が不足している場合には、処理がステップS52に進められる。不足していない場合には処理がステップS54に進められる。

0082

[ステップS52]退避制御部40は、退避メモリ30に格納されているデータを先頭から順に外部メモリ2に移動させる。
[ステップS53]退避制御部40は、ポインタの値を退避メモリ30の先頭、すなわち、“0”に初期化する。

0083

[ステップS54]退避制御部40は、現在の順序付きマップデータを退避メモリ30に退避させる。
[ステップS55]退避制御部40は、現在の順序付きマップデータを初期化する。すなわち、順序付きマップデータの全ての欄の整数値を“0”に設定する。

0084

[ステップS56]退避制御部40は、ポインタの値を退避メモリ30内の次の書き込み位置、すなわち、空き領域の先頭のアドレスとする。
このようにして、退避制御部40は、コール命令の実行時に、順序付きマップデータを退避メモリ30に退避させて初期化する。また、退避メモリ30の空き領域の先頭にポインタの値を設定する。ここで、退避メモリ30の空き領域が不足していると、退避制御部40は、退避メモリ30のデータを外部メモリ2に移動させ、空き領域を確保する。

0085

図14は、第2の実施の形態の退避処理の手順を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
[ステップS61]退避制御部40は、順序付きマップデータ内の書き込み先の汎用レジスタに対応する欄に、退避順序を示す整数値を設定する。

0086

[ステップS62]退避制御部40は、汎用レジスタに格納されているデータを上書きされる前に読み出し、退避メモリ30に供給する。退避メモリ30は、ポインタが指し示す位置に、このデータを書き込む。

0087

[ステップS63]退避制御部40は、ポインタの値をインクリメントし、ポインタが退避メモリ30内の空き領域の先頭を指し示すようにする。
このようにして、退避制御部40は、汎用レジスタへの書き込みを伴う命令の実行時に、格納されているデータを読み込んで退避メモリ30に退避させる。また、退避制御部40は、そのサブルーチン内で退避が行われた順序を順序付きマップデータに記録する。

0088

図15は、第2の実施の形態の復元処理の手順を示すフローチャートである。以下、15に示す処理をステップ番号に沿って説明する。
[ステップS71]退避制御部40は、退避順序が遅い順、すなわち、順序付きマップデータの整数値が大きい順に汎用レジスタを1つ選択する。

0089

[ステップS72]退避制御部40は、ポインタの値をデクリメントし、最後に退避されたデータの格納位置をポインタが指し示すようにする。ポインタの値は、退避メモリ30に供給される。

0090

[ステップS73]退避制御部40は、ポインタが指し示す位置のデータを退避メモリ30から読み出す。そして、退避制御部40は、ステップS71で選択した汎用レジスタに読み出したデータを格納する。

0091

[ステップS74]退避制御部40は、退避が行われた全ての汎用レジスタをステップS71で選択したか否か判断する。全て選択した場合には、処理がステップS75に進められる。未選択の汎用レジスタがある場合には、処理がステップS71に進められる。

0092

[ステップS75]退避制御部40は、退避メモリ30に退避されている直前の順序付きマップデータを取得し、現在の順序付きマップデータとして保持する。
[ステップS76]退避制御部40は、退避メモリ30が空か否か判断する。退避メモリ30が空である場合には、処理がステップS77に進められる。空でない場合には、処理がステップS79に進められる。

0093

[ステップS77]退避制御部40は、外部メモリ2に退避メモリ30から移動させたデータが存在するか否か判断する。存在する場合には、処理がステップS78に進められる。存在しない場合には、処理がステップS79に進められる。

0094

[ステップS78]退避制御部40は、過去に移動させたデータを外部メモリ2から退避メモリ30に戻す。
[ステップS79]退避制御部40は、ポインタの値を退避メモリ30内の次の書き込み位置、すなわち、空き領域の先頭のアドレスとする。

0095

このようにして、退避制御部40は、リターン命令の実行時に、現在の順序付きマップデータに基づいて、退避メモリ30に退避されたデータを汎用レジスタに書き戻す。その後、退避メモリ30に退避された直前の順序付きマップデータを取得し、現在の順序付きマップレジスタとして保持する。ここで、退避メモリ30が空になり、退避メモリ30から外部メモリ2に移動させたデータがある場合には、退避制御部40は、外部メモリ2から退避メモリ30にデータを戻す。

0096

このようなマイクロプロセッサを用いることで、演算処理と並行して退避・復元処理を実行することができ、処理効率を大きく向上させることができる。また、プログラム中にデータを移動するための明示的な命令を記述する必要がなくなり、プログラムの規模を大きく圧縮できる。

0097

また、退避データとマップデータとを退避メモリに積み上げるため、階層的なサブルーチンの呼び出しにも柔軟に対応することができる。また、退避メモリの空き領域が不足すると、自動的にデータが外部メモリに移動されるため、退避メモリは過度に大きな記憶容量を必要とすることがない。

0098

また、退避メモリをスタックとして用いて退避データを順次積み上げるため、退避メモリの利用効率が向上し、空き領域が不足する確率を抑制できる。
なお、本実施の形態では、コール命令の実行時に退避メモリの空き領域の不足を検知することとしたが、常時監視するようにしてもよい。また、本実施の形態では、退避メモリと外部メモリとの間のデータの移動をハードウェアで行うこととしたが、OS(Operating System)上の割り込みを発生させ、ソフトウェアで行うようにしてもよい。

0099

以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
(付記1)サブルーチンの呼び出しを含むプログラムを実行可能なマイクロプロセッサにおいて、
演算処理に用いるデータを格納する1以上のレジスタを備えるレジスタファイルと、
前記レジスタから退避されたデータを格納する退避メモリと、
前記サブルーチン内での前記レジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを前記退避メモリに退避させると共に、前記サブルーチンからの復帰命令の実行時に、前記退避メモリに退避されたデータを対応するレジスタに書き戻す退避制御部と、
を有することを特徴とするマイクロプロセッサ。

0100

(付記2) 前記退避制御部は、各レジスタの退避状態を示すマップデータを格納するマップ記憶部を有しており、前記レジスタのデータを退避させる際に前記マップデータを更新し、前記復帰命令の実行時には、前記マップデータに基づいて書き戻すデータを特定することを特徴とする付記1記載のマイクロプロセッサ。

0101

(付記3) 前記退避制御部は、前記サブルーチンの呼び出し命令の実行時に、前記マップ記憶部に格納されている前記マップデータを前記退避メモリに退避させてから初期化すると共に、前記復帰命令の実行時に、退避されたデータを前記レジスタに書き戻した後に、退避された前記マップデータを前記マップ記憶部に書き戻すことを特徴とする付記2記載のマイクロプロセッサ。

0102

(付記4) 前記退避制御部は、各レジスタを識別番号によって識別しており、前記レジスタのデータを退避させる際には、前記レジスタの識別番号に基づいて前記退避メモリ内のアドレスを生成し、生成したアドレスが示す位置にデータを格納することを特徴とする付記2記載のマイクロプロセッサ。

0103

(付記5) 前記退避制御部は、前記レジスタのデータを退避させる際に退避の順序を前記マップデータに記録し、前記復帰命令の実行時には、前記マップデータに記録された順序に応じてデータを前記退避メモリから読み込んで対応するレジスタに書き戻すことを特徴とする付記2記載のマイクロプロセッサ。

0104

(付記6) 前記退避制御部は、前記レジスタのデータを退避させる前に前記退避メモリの空き領域の不足を検知すると、前記退避メモリに格納されているデータを前記マイクロプロセッサに接続された外部メモリに移動させて空き領域を確保することを特徴とする付記1記載のマイクロプロセッサ。

0105

(付記7)演算処理に用いるデータを格納する1以上のレジスタを有し、サブルーチンの呼び出しを含むプログラムを実行可能なマイクロプロセッサによるレジスタ退避方法において、
前記サブルーチン内での前記レジスタへの書き込み命令の実行時に、書き込み先のレジスタに格納されているデータを前記マイクロプロセッサが有する退避メモリに退避させ、
前記サブルーチンからの復帰命令の実行時に、前記退避メモリに退避されたデータを対応するレジスタに書き戻す、
ことを特徴とするレジスタ退避方法。

0106

(付記8) 前記レジスタのデータを退避させる際に、前記マイクロプロセッサが有するマップ記憶部に格納された、各レジスタの退避状態を示すマップデータを更新し、
前記復帰命令の実行時には、前記マップ記憶部に格納されている前記マップデータに基づいて書き戻すデータを特定する、
ことを特徴とする付記7記載のレジスタ退避方法。

0107

(付記9) 前記サブルーチンの呼び出し命令の実行時に、前記マップ記憶部に格納されている前記マップデータを前記退避メモリに退避させて初期化し、
前記復帰命令の実行時に、退避されたデータを前記レジスタに書き戻した後に、退避された前記マップデータを前記マップ記憶部に書き戻す、
ことを特徴とする付記8記載のレジスタ退避方法。

0108

(付記10) 前記レジスタのデータを退避させる際には、前記レジスタに予め対応付けられた識別番号に基づいて前記退避メモリ内のアドレスを生成し、生成したアドレスが示す位置にデータを格納することを特徴とする付記8記載のレジスタ退避方法。

0109

(付記11) 前記レジスタのデータを退避させる際に、退避の順序を前記マップデータに記録し、
前記復帰命令の実行時には、前記マップデータに記録された順序に応じてデータを前記退避メモリから読み込んで対応するレジスタに書き戻す、
ことを特徴とする付記8記載のレジスタ退避方法。

0110

(付記12) 前記レジスタのデータを退避させる前に前記退避メモリの空き領域の不足を検知すると、前記退避メモリに格納されているデータを前記マイクロプロセッサに接続された外部メモリに移動させて空き領域を確保することを特徴とする付記7記載のレジスタ退避方法。

図面の簡単な説明

0111

マイクロプロセッサの概要を示すブロック図である。
マイクロプロセッサの回路構成例を示す図である。
マップデータのデータ構造例を示す図である。
第1の実施の形態の退避データのデータ構造例を示す図である。
命令実行処理の手順を示すフローチャートである。
第1の実施の形態の初期化処理の手順を示すフローチャートである。
第1の実施の形態の退避処理の手順を示すフローチャートである。
第1の実施の形態の復元処理の手順を示すフローチャートである。
プログラムのソースコードの例を示す図である。
プログラムのアセンブリコードの例を示す図である。
順序付きマップデータのデータ構造例を示す図である。
第2の実施の形態の退避データのデータ構造例を示す図である。
第2の実施の形態の初期化処理の手順を示すフローチャートである。
第2の実施の形態の退避処理の手順を示すフローチャートである。
第2の実施の形態の復元処理の手順を示すフローチャートである。

符号の説明

0112

1マイクロプロセッサ
2外部メモリ
10命令実行部
11命令デコーダ
12算術論理演算器
20レジスタファイル
30退避メモリ
40退避制御部
41マップレジスタ
42デコーダ
43エンコーダ
44ポインタ
45加算器
46シーケンサ
47 チェッカー

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ