説明

圧縮命令処理装置及び圧縮命令生成装置

【課題】命令を圧縮することによりプログラムメモリの容量を削減し、圧縮した命令を小さな回路規模で伸張することができる圧縮命令処理装置を提供することを課題とする。
【解決手段】圧縮命令処理装置は、圧縮対象の命令コードと参照命令コードとの差分コードを含む圧縮命令コードを伸張し、伸張した命令コードを出力する圧縮命令伸張回路(103)と、前記圧縮命令伸張回路により伸張された命令コードを記憶する命令バッファ(104)と、前記圧縮命令伸張回路により伸張された命令コードを実行する実行部(109)とを有し、前記圧縮命令伸張回路は、前記命令バッファ内の命令コードを前記参照命令コードとして入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することにより、前記伸張した命令コードを出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、圧縮命令処理装置及び圧縮命令生成装置に関する。
【背景技術】
【0002】
プログラムメモリ容量の削減と、プログラムのフェッチによるバスアクセスの低減のため、CPUが実行するプログラムをコード圧縮してメモリに格納し、CPUが命令実行時に圧縮されたプログラムを動的に展開(伸張)する多くの取り組みが行われている。プログラム圧縮の手法には、大きく統計的な手法を用いたものと、辞書式な手法を用いたものがある。前者には、ハフマン符号を用いてキャッシュライン単位で圧縮を掛けるもの等があり、後者には、複数の命令を1命令に置き換えるもの等がある。
【0003】
統計的な手法を用いたものは、キャッシュライン単位でビットデータを扱うため各ラインの圧縮解除は独立して可能であり、またキャッシュには固定長コードが展開されるためCPUはコード圧縮を意識しないでよい等のメリットがある反面、可変長コードを復号するために辞書式な手法より時間が掛かる点や、キャッシュラインが固定長であるのに対してメモリには可変長コードが格納されているため、アドレス変換のための索引テーブルが必要になる点がデメリットとなる。辞書式な手法では、辞書テーブルに登録する命令数の多さがネックとなる。
【0004】
また、マイクロプロセッサの処理対象であるプログラムを構成する命令を保持する記憶装置を備え、この記憶装置は、複数ステップの命令を各命令に対応したインデックスを用いて1つの命令に多重化した圧縮命令を保持可能とされ、さらに、圧縮命令の各々のインデックスともとの展開命令との関係を示す命令対応表と、記憶装置から圧縮命令を取得したときに命令対応表を用いてインデックスから展開命令への伸長を行うとともに、その圧縮命令の処理中は記憶装置への電力供給の停止制御を行う手段とを備えたマイクロプロセッサにおける命令供給装置が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001−142696号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
圧縮命令を伸張する際に、辞書テーブル又は命令対応表を用いると、回路規模が大きくなってしまう。
【0007】
本発明の目的は、命令を圧縮することによりプログラムメモリの容量を削減し、圧縮した命令を小さな回路規模で伸張することができる圧縮命令処理装置及び圧縮命令生成装置を提供することである。
【課題を解決するための手段】
【0008】
圧縮命令処理装置は、圧縮対象の命令コードと参照命令コードとの差分コードを含む圧縮命令コードを伸張し、伸張した命令コードを出力する圧縮命令伸張回路と、前記圧縮命令伸張回路により伸張された命令コードを記憶する命令バッファと、前記圧縮命令伸張回路により伸張された命令コードを実行する実行部とを有し、前記圧縮命令伸張回路は、前記命令バッファ内の命令コードを前記参照命令コードとして入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することにより、前記伸張した命令コードを出力する。
【0009】
また、圧縮命令生成装置は、命令コードを記憶するための命令FIFOと、圧縮対象の命令コードを前記命令FIFOに順次格納し、前記圧縮対象の命令コードを圧縮するために、前記命令FIFO内の命令コードのうちの1個を参照命令コードとして選択する選択部と、前記圧縮対象の命令コードと前記選択部により選択された参照命令コードとの差分の情報を含む圧縮命令コードを生成する生成部とを有する。
【発明の効果】
【0010】
命令を圧縮することによりプログラムメモリの容量を削減することができる。また、圧縮した命令を小さな回路規模で伸張することができる。
【図面の簡単な説明】
【0011】
【図1】第1の実施形態による圧縮命令処理装置の構成例を示す図である。
【図2】第2の実施形態による圧縮命令処理装置の構成例を示す図である。
【図3】図3(A)〜(G)は圧縮命令コードの生成方法を説明するための図である。
【図4】図4(A)〜(C)は図3(G)の圧縮命令コードの具体的な生成方法を示す図である。
【図5】圧縮命令伸張回路の構成例を示す図である。
【図6】第3の実施形態による圧縮命令生成装置のハードウェア構成例を示す図である。
【図7】圧縮命令生成装置による圧縮命令コードの生成方法を示すフローチャートである。
【図8】命令圧縮処理部の処理を示すフローチャートである。
【発明を実施するための形態】
【0012】
(第1の実施形態)
図1は、第1の実施形態による圧縮命令処理装置の構成例を示す図である。圧縮命令処理装置は、命令メモリ101、第1の命令バッファ102、圧縮命令伸張回路103、第2の命令バッファ104、セレクタ105〜107、インバータ108及び実行部109を有する。命令メモリ101は、例えば命令キャッシュメモリであり、圧縮命令コードを記憶する。第1の命令バッファ102は、命令メモリ101から読み出された圧縮命令コードS111をバッファリングし、圧縮命令コードS112を出力する。圧縮命令伸張回路103は、圧縮命令コードS112を伸張し、伸張した命令コードS113を出力する。ライトイネーブル信号WEが「1」になると、第2のバッファ104には命令コードS113が書き込まれる。第2の命令バッファ104は、命令コードS113をバッファリングし、セレクタ106を介して命令コードS115を出力する。セレクタ107は、非同期処理信号S117が「1」のときには命令コードS113を選択し、非同期処理信号S117が「0」のときには命令コードS115を選択し、命令コードS116を出力する。実行部S116は、命令コードS116を実行し、次に実行する命令コードが非同期処理であるときには非同期処理信号S117を「1」にし、次に実行する命令コードが同期処理であるときには非同期処理信号S117を「0」にする。非同期処理は、非同期に発生する命令コードであり、例えば、割り込み処理、トラップ処理、例外処理及び条件分岐処理等である。同期処理は、非同期処理以外の通常の処理であり、順次実行される命令である。インバータ108は、非同期処理信号S117を論理反転し、ライトイネーブル信号WEを出力する。圧縮命令伸張回路103は、圧縮命令コードS112に応じて、選択信号SELを出力する。セレクタ105は、選択信号SELに応じて、第2の命令バッファ104内の命令コードを選択し、命令コードS114を圧縮命令伸張回路103に出力する。圧縮命令伸張回路103は、命令コードS114を参照し、圧縮命令コードS112を伸張する。
【0013】
圧縮命令コードS111は、圧縮対象の命令コードと参照する命令コードS114との差分を取ることにより生成される。本実施形態では、第2の命令バッファ104に蓄積された先行命令コードS114と圧縮対象の命令コードとの差分により、圧縮命令コードS111を生成する。
【0014】
第2の命令バッファ104は、複数の命令コードS113を記憶する複数のエントリを有する。例えば、第2の命令バッファ104が8個のエントリを有する場合では、圧縮したい命令の前に実行される命令を8個まで第2の命令バッファ104に蓄積しておく。そして、圧縮したい命令が第1の命令バッファ102に格納された次のサイクルで、圧縮命令伸張回路103は、第2の命令バッファ104内の選択された命令コードS114を参照し、圧縮命令コードS112を伸張し、伸張された命令コードS113を出力する。
【0015】
非同期に発生する割り込み処理、トラップ処理、及び例外処理等の発生時には、プログラムシーケンスは割り込みハンドラに遷移する。この場合は、非同期処理信号S117が「1」になり、第2の命令バッファ104の内容は保持され、セレクタ107は、命令コードS113を選択し、実行部107へ命令コードS113を直接供給する。
【0016】
図3(A)〜(G)は、圧縮命令コードS111の生成方法を説明するための図である。図3(A)の非圧縮命令コードを圧縮することにより、図3(C)の圧縮命令コードを生成する。
【0017】
図3(A)は非圧縮命令コード(圧縮対象の命令コード)のフォーマット例を示す。非圧縮命令コードは、例えば、8ビットのオペレーションコード(オペコード)301、4ビットの第1のオペランド302及び4ビットの第2のオペランド303の3個のフィールドを有する。
【0018】
図3(B)は命令コードのアセンブラ、オペコード301、及びオペレーションを示す。ここでは、同期処理の命令コードを示す。例えば、アセンブラの「add a,b」の場合、オペレコード301が「add」であり、第1のオペランドが「a」であり、第2のオペランド303が「b」である。「add」のオペコード301は「00000000」で表わされ、オペレーションは「a=b+c」の演算を行う。
【0019】
図3(C)は、圧縮命令コードS111のフォーマット例を示す図である。圧縮命令コードS111は、圧縮命令識別ビット(圧縮命令識別情報)311、オペコード差分コード312、第1のオペランド差分コード313、第2のオペランド差分コード314、及び命令バッファエントリ番号コード315を有する。オペコード差分コード312、第1のオペランド差分コード313及び第2のオペランド差分コード314は、省略されることがある。
【0020】
図3(D)は、圧縮命令識別ビット311を説明するための図である。圧縮命令識別ビット311は、0が非圧縮命令コードであることを示し、1が圧縮命令コードであることを示す。圧縮命令識別ビット311の「1」は、命令コードが圧縮されていることを示す圧縮命令識別情報である。
【0021】
図3(E)は、オペコード差分コード312、第1のオペランド差分コード313及び第2のオペランド差分コード314を説明するための図である。オペコード差分コード312、第1のオペランド差分コード313及び第2のオペランド差分コード314は、圧縮対象の命令コードのフィールド毎の差分コード(差分情報)であり、圧縮対象の命令コードと参照命令コードS114との間におけるオペコード301、第1のオペランド302及び第2のオペランド303の差分を示す。差分コード312〜314は、それぞれ差分値が0、1、−1、2、−2のときの差分コードを示し、差分値が0のときには省略できる。差分コード312〜314は、最終ビットが0になるので、各フィールドの終わりを識別することができる。
【0022】
図3(F)は、命令バッファエントリ番号コード315を説明するための図である。第2の命令バッファ104は、例えば8個のエントリを有し、8個のエントリの番号を0〜7で表す。圧縮対象の命令コードは、第2の命令バッファ104の中で自己の命令コードに最も近い命令コードを参照命令コードS114として選択することができる。その参照命令コードS114が格納されている第2の命令バッファ104内のエントリの番号が、命令バッファエントリ番号コード315となる。
【0023】
図3(G)は、圧縮前の命令コード(非圧縮命令コード)321及び圧縮後の圧縮命令コード322の例を示す図である。1番目の命令コード「mov 0,@4」は、第2の命令バッファ104が空であるので、圧縮前の命令コード321を圧縮せずにそのまま圧縮後の命令コード322にする。この場合、非圧縮であるため、命令コード322の先頭の圧縮命令識別ビット311は0になる。すなわち、命令コードが圧縮されていることを示す圧縮命令識別ビット311の「1」が存在しない。
【0024】
2番目の命令コード「mov 1,@5」は、第2の命令バッファ104内の1番目の命令コード「mov 0,@4」を参照命令コードS114として圧縮する。この場合、圧縮を行うので、圧縮命令識別ビット311が「1」になる。すなわち、命令コードが圧縮されていることを示す圧縮命令識別ビット311の「1」が存在する。圧縮対象の命令コード「mov 1,@5」のオペコード301が「00010001」であり、参照命令コード「mov 0,@4」のオペコード301が「00010000」であるので、オペコード差分コード312は両者の差分値が1であるので「110」になる。また、圧縮対象の命令コード「mov 1,@5」の第1のオペランド302が「0100」であり、参照命令コード「mov 0,@4」の第1のオペランド302が「0100」であるので、第1のオペランド差分コード313は両者の差分値が0であるので省略される。また、圧縮対象の命令コード「mov 1,@5」の第2のオペランド303が「0000」であり、参照命令コード「mov 0,@4」の第2のオペランド303が「0000」であるので、第2のオペランド差分コード314は両者の差分値が0であるので省略される。また、参照命令コード「mov 0,@4」は、第2の命令バッファ104内のエントリ番号=0に格納されているので、命令バッファエントリ番号コード315は「0000」になる。
【0025】
同様に、3番目の命令コード「add 0,1」は、第2の命令バッファ104内の類似の命令コードがないため、圧縮前の命令コード321を圧縮せずにそのまま圧縮後の命令コード322にする。この場合、非圧縮であるため、命令コード322の先頭の圧縮命令識別ビット311は0になる。
【0026】
同様に、4番目の命令コード「mov @6,0」は、第2の命令バッファ104内の2番目の命令コード「mov 1,@5」を参照命令コードS114として圧縮する。この場合、圧縮を行うので、圧縮命令識別ビット311が「1」になる。オペコード差分コード312は、両者の差分値が1であるので「110」になる。第1のオペランド差分コード313は、両者の差分値が2であるので「11110」になる。第2のオペランド差分コード314は、両者の差分値が0であるので省略される。また、参照命令コード「mov 1,@5」は、第2の命令バッファ104内のエントリ番号=1に格納されているので、命令バッファエントリ番号コード315は「0001」になる。
【0027】
図4(A)〜(C)は、図3(G)の圧縮命令コードの具体的な生成方法を示す図である。図4(A)は、図3(G)と同じ命令(1)〜(4)についての圧縮前の命令コード401及び圧縮後の命令コード402を示す。図4(B)は命令(1)〜(4)についての第1の命令バッファ102及び第2の命令バッファ104の時間推移を示す。ここで、バッファB1−nは第1の命令バッファ102のエントリ番号nを表し、バッファB2−nは第2の命令バッファ104のエントリ番号nを表す。図4(C)は、各時刻の命令(1)〜(4)の圧縮処理を示す。
【0028】
圧縮命令(1)〜(4)は、図1に示すように、順番に命令メモリ101から第1の命令バッファ102にフェッチされ、第2の命令バッファ104に順次送られるため、圧縮命令コードの生成過程においても、このシーケンスを模倣する。
【0029】
時刻t1では、命令(1)が第1の命令バッファ102のエントリ番号1(B1-1)に格納され、命令(2)が第1の命令バッファ102のエントリ番号0(B1-0)に格納されるものとし、このとき第2の命令バッファ104にはまだ命令が格納されていないものとする。時刻t1では、第2の命令バッファ104が空であるため、命令(1)が参照できる命令は無く、圧縮後の命令コード402は、非圧縮の命令コードのままとする。
【0030】
時刻t2では、命令(2)が第1の命令バッファ102のエントリ番号1(B1−1)に格納され、命令(1)が第2の命令バッファ104のエントリ番号0(B2−0)に格納されるため、命令(2)は命令(1)を参照命令候補にできる。命令(1)を参照命令コードとした場合の圧縮命令コードは圧縮前の命令コードを基に圧縮可能であることから、圧縮後の命令コードは、命令(1)を参照命令コードとして生成する。命令(2)の圧縮方法は、図3(G)と同じである。
【0031】
時刻t3では、命令(3)が第1の命令バッファ102のエントリ番号1(B1−1)に格納され、第2の命令バッファ104には、命令(1)及び命令(2)が入ることになるため、命令(3)は命令(2)及び命令(1)を参照命令候補にできる。これらの参照命令候補を使用した圧縮後の命令コードは、圧縮前の命令コードよりビット数が多くなってしまうため、圧縮命令コードとしては、圧縮せずに元の命令コードを採用する。
【0032】
時刻t4では、命令(4)が第1の命令バッファ102のエントリ番号1(B1−1)に格納され、第2の命令バッファ104には、命令(1)、命令(2)及び命令(3)が入ることになるため、命令(4)は命令(3)、命令(2)及び命令(1)を参照命令候補にできる。命令(2)を参照命令コードとした場合、命令(4)の圧縮率が最も高くなるため、命令(2)を参照命令コードとして命令(4)を圧縮する。命令(4)の圧縮方法は、図3(G)と同じである。
【0033】
以下、順次このように図1のハードウェアの動作を模倣しながら、圧縮命令コードの生成を行えばよい。
【0034】
次に、図1の圧縮命令処理装置の動作を説明する。命令メモリ101は、圧縮命令コード及び非圧縮命令コードを記憶する。第1の命令バッファ102は、命令メモリ101から読み出された命令コードS111をバッファリングし、命令コードS112を出力する。圧縮命令伸張回路103は、参照命令コードS114を参照し、圧縮命令コードS112を伸張し、伸張した命令コードS113を出力する。
【0035】
図5は、圧縮命令伸張回路103の構成例を示す図である。デコーダ501は、命令コードS112の図3(C)の各フィールドを解読し、圧縮命令識別ビット311、オペコード差分コード312、第1のオペランド差分コード313、第2のオペランド差分コード314、及び命令バッファエントリ番号コード315を出力する。
【0036】
命令バッファエントリ番号コード315は、選択信号SELとして図1のセレクタ105に出力される。図1において、セレクタ105は、選択信号SELが示す第2の命令バッファ104のエントリ番号に格納されている命令コードS114を圧縮命令伸張回路103に出力する。
【0037】
図5に示すように、参照命令コードS114は、オペコード301、第1のオペランド302及び第2のオペランド303に分離される。加算器502は、参照命令コードS114のオペコード301及び圧縮命令コードS112のオペコード差分コード312を加算し、伸張後のオペコードS531を出力する。加算器503は、参照命令コードS114の第1のオペランド302及び圧縮命令コードS112の第1のオペランド差分コード313を加算し、伸張後の第1のオペランドS532を出力する。加算器504は、参照命令コードS114の第2のオペランド303及び圧縮命令コードS112の第2のオペランド差分コード314を加算し、伸張後の第2のオペランドS533を出力する。セレクタ505は、入力した命令コードS112の圧縮命令識別ビット311が「1」のときには、オペコードS531、第1のオペランドS532及び第2のオペランドS533を伸張後の命令コードS113として出力する。伸張後の命令コードS113は、圧縮前の命令コードと同じである。また、セレクタ505は、入力した命令コードS112の圧縮命令識別ビット311が「0」のときには、命令コードS112が非圧縮命令コードであることを示すので、入力した非圧縮の命令コードS112をそのまま命令コードS113として出力する。
【0038】
図1において、実行部109は、次に実行する命令が非同期処理である場合には、非同期で発生する命令を処理するために「1」の非同期処理信号S117を出力し、次に実行する命令が同期処理である場合には、第2の命令バッファ104にフェッチされている命令を処理するために「0」の非同期処理信号S117を出力する。非同期処理は、例えば、割り込み処理、トラップ処理、例外処理及び条件分岐処理等であり、非同期で命令が発生するため、次に実行する命令が予測できないため、実行部109は、第2の命令バッファ104内の命令コードをクリアする。また、そのような理由で、非同期処理の場合、命令コードを圧縮しないで命令メモリ101に格納しておく。すなわち、非同期処理の場合は、図3(C)の圧縮命令識別ビット311が0になり、非圧縮命令コードが命令メモリ101に格納される。非同期処理の場合、実行部109が「1」の非同期処理信号S117を出力し、セレクタ107は、命令コードS113を選択し、命令コードS116を実行部109に出力する。
【0039】
インバータ108は、非同期処理信号S117を論理反転し、ライトイネーブル信号WEを出力する。ライトイネーブル信号WEが「1」のときに第2の命令バッファ104に命令コードS113が書き込まれ、ライトイネーブル信号WEが「0」のときには第2の命令バッファ104に命令コードS113が書き込まれない。すなわち、非同期処理信号S117が「0」のときにライトイネーブル信号WEが「1」になり、第2の命令バッファ104に命令コードS113が書き込まれる。実行部109は、次に実行する命令が非同期処理であるときには、非同期処理信号S117を「1」にし、命令コードS113を第2の命令バッファ104に書き込む処理を禁止する。セレクタ106は、第2の命令バッファ104にフェッチされた次に実行する命令コードを選択し、命令コードS116を出力する。セレクタ107は、非同期処理信号S117が「0」のときには命令コードS115を選択し、非同期処理信号S117が「1」のときには命令コードS113を選択し、命令コードS116を実行部109に出力する。実行部109は、入力された命令コードS116を実行し、次に実行する命令が非同期処理の場合には「1」の非同期処理信号S117を出力し、次に実行する命令が同期処理の場合には「0」の非同期処理信号S117を出力する。
【0040】
(第2の実施形態)
図2は、第2の実施形態による圧縮命令処理装置の構成例を示す図である。本実施形態(図2)は、第1の実施形態(図1)に対して、圧縮命令伸張回路103が出力する命令コードS113のパスが異なる。以下、本実施形態が第1の実施形態と異なる点を説明する。実行部109は、非同期処理信号S117に関係なく、命令コードS113を実行し、非同期処理信号S117を出力する。ライトイネーブル信号WEが「1」のとき、第2の命令バッファ104に命令コードS113が書き込まれる。
【0041】
本実施形態では、実行部109は、第2の命令バッファ104を介さないで、圧縮命令伸張回路103の命令コードS113を直接入力し、実行する。そのため、第2の命令バッファ104の内容を更新する契機は様々に考えることができる。例えば、命令コードを実行するタイミングで、第2の命令バッファ104内で最も参照されていない命令コードのエントリに命令コードS113を上書きしても良い。また、すべての圧縮命令コードS111の中に、書き込むべき第2の命令バッファ104のエントリ番号を入れておき、そのエントリ番号に各命令コードS113を書き込むようにしてもよい。非同期処理信号S117が「1」の場合には、第1の実施形態と同様に、第2の命令バッファ104の内容は保持される。
【0042】
本実施形態では、第1の実施形態に対して、命令メモリ101及び実行部109間のパスにおける命令バッファ段数が少ないため、命令メモリ101のアクセスレイテンシが存在する系では不利である。しかし、本実施形態は、第2の命令バッファ104内で参照できる命令が命令の実行順に強く依存する第1の実施形態に比べて、参照する命令の選択自由度が高いために、高い圧縮率を期待できる。
【0043】
第1及び第2の実施形態のいずれも、コンパイラは、分岐命令により実行命令順が変化することを考慮する必要がある。第2の実施形態では、第2の命令バッファ104を命令内の書き込みエントリ番号で明示的に更新する場合を除き、プログラムの命令列の格納順において、分岐先、又は分岐元の命令を跨いで命令を参照することは、ループや無条件ジャンプ等の命令の実行順序が保証できる場合を除いて禁止する必要がある。命令内の書き込みエントリ番号で明示的に更新する場合でも、コンパイラが圧縮命令コードを生成する段階では、分岐命令による実行シーケンスの変化を意識して、圧縮命令コードが伸張される時点での第2の命令バッファ104に格納される命令コードを正確に予測する必要がある。
【0044】
第1の実施形態では、第2の命令バッファ104はFIFO(ファーストインファーストアウト)であるため、第2の命令バッファ104に格納する命令数が第2の命令バッファ104のエントリ数を超えた場合、格納順の古い命令から順に削除(上書き)していくことになる。これに対し、第2の実施形態は、この限りではなく、例えばどの命令が参照されたかどうかの履歴を取り、参照順の古い(最も参照された時刻が早い)命令から順に削除(上書き)していくアルゴリズムを採用したり、任意のエントリに上書きするようにしたりする等して、圧縮率を更に向上させることができる。
【0045】
(第3の実施形態)
図6は、第3の実施形態による圧縮命令生成装置のハードウェア構成例を示す図である。圧縮命令生成装置は、例えばパーソナルコンピュータ(PC)であり、上記の圧縮命令コードを生成する。バス601には、中央処理装置(CPU)602、ROM603、RAM604、ネットワークインタフェース605、入力装置606、出力装置607及び外部記憶装置608が接続されている。CPU602は、データの処理又は演算を行うと共に、バス601を介して接続された各種構成要素を制御するものである。ROM603には、予めCPU602の制御手順(コンピュータプログラム)を記憶させておき、このコンピュータプログラムをCPU602が実行することにより、起動する。外部記憶装置608にコンピュータプログラムが記憶されており、そのコンピュータプログラムがRAM604にコピーされてCPU602により実行される。RAM604は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置608は、例えばハードディスク記憶装置やCD−ROM等であり、電源を切っても記憶内容が消えない。CPU602は、RAM604内のコンピュータプログラムを実行することにより、後述の図7及び図8の処理を行う。ネットワークインタフェース605は、インターネット等のネットワークに接続するためのインタフェースである。入力装置606は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置607は、ディスプレイ及びプリンタ等である。
【0046】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
【0047】
図7は、図6の圧縮命令生成装置による圧縮命令コードの生成方法を示すフローチャートである。命令圧縮の対象は、ユーザープログラム701である。ユーザープログラム701は、図1又は図2の圧縮命令処理装置に実行させるための高級言語のプログラムである。ステップ702では、コンパイラは、高級言語のユーザープログラム701をコンパイルし、マシン語のオブジェクトコード(命令コード)703を生成する。コンパイラは、図6の圧縮命令生成装置がコンパイラのプログラムを実行することにより実現される。ステップ704では、命令圧縮処理部は、オブジェクトコード703を圧縮し、圧縮オブジェクトコード(圧縮命令コード)705を生成する。その詳細は、後に図8を参照しながら説明する。命令圧縮処理部は、図6の圧縮命令生成装置が命令圧縮処理部のプログラムを実行することにより実現される。例えば、命令圧縮処理部は、図3(G)の命令コード321を圧縮し、命令コード322を生成する。
【0048】
これに対し、割り込みや例外等の非同期処理の命令は、ドライバ706として用意される。ドライバ706は、命令圧縮の対象外である。ステップ707では、コンパイラは、高級言語のドライバ706をコンパイルし、マシン語の非圧縮のオブジェクトコード(命令コード)708を生成する。
【0049】
ステップ709では、リンカは、圧縮オブジェクトコード705及びオブジェクトコード708をリンクし、実行バイナリコード(命令コード)710を生成する。リンカは、図6の圧縮命令生成装置がリンカのプログラムを実行することにより実現される。実行バイナリコード710は、図1又は図2の命令メモリ101に格納され、図1又は図2の圧縮命令処理装置により上記の処理が行われる。
【0050】
図8は、図7のステップ704の命令圧縮処理部の処理を示すフローチャートである。命令圧縮処理部802は、図6の圧縮命令生成装置(パーソナルコンピュータ)が実行する命令圧縮処理部のプログラムの処理を示す。メモリ801は、図6のRAM604及び/又は外部記憶装置608に対応し、命令圧縮処理部802で用いられる各種記憶領域が用意される。
【0051】
オブジェクトコード703は、図7の圧縮前のオブジェクトコード(圧縮対象の命令コード)703であり、メモリ801に格納される。ステップ821では、命令圧縮処理部802は、命令コード列のオブジェクトコード703から1命令コードずつ順次読み込む。次に、ステップ822では、命令圧縮処理部802の格納部は、読み込んだ命令をメモリ801上の命令FIFO812に1つずつ順次格納する。命令FIFO812は、図1又は図2のハードウェアの第2の命令バッファ104を模倣したものであり、命令FIFO812に格納された命令のみが、参照命令コードS114の候補となり得る。命令FIFO812は、複数の命令コードを記憶する複数のエントリを有する。命令FIFO812は、第2の命令バッファ104と同じエントリ数を持ち、命令格納時にフル(満杯)だった場合のみ、最も古い命令コードを捨てる。なお、命令圧縮処理部802は、図1又は図2の圧縮命令処理装置と同様に、圧縮対象の命令が分岐命令であった場合には、命令FIFO812の内容をクリアする。但し、無条件分岐の場合はその限りではない。
【0052】
次に、ステップ823では、命令圧縮処理部802の選択部は、上記で読み込んだ現在の命令コードと命令FIFO812内の命令コードとを比較し、図3(A)〜(G)の圧縮(符号化)ルールに則り、最も圧縮効率の高い命令FIFO812内の命令コードを参照命令コードS114として選択する。すなわち、選択部は、圧縮対象の命令コードを圧縮するために、命令FIFO812内の命令コードのうちの1個を参照命令コードS114として選択する。
【0053】
次に、ステップ824では、命令圧縮処理部802の生成部は、図3(A)〜(G)の圧縮ルールに則り、選択した参照命令コードS114を基に、上記の読み込んだ現在の命令コードを圧縮し、圧縮命令コードを仮オブジェクトコード813として生成し、一旦メモリ801に格納しておく。仮オブジェクトコード813は、圧縮命令コードであり、図3(C)のフォーマットを有し、現在の圧縮対象の命令コードと参照命令コードS114との差分コードを含む。同時に、命令圧縮処理部802の記録部は、圧縮前の命令コードのアドレスと圧縮後の命令コードのアドレスが分かっているため、圧縮前の命令コードのアドレス(先頭アドレス)で圧縮後の命令コードのアドレス(先頭アドレス)が引けるように、その両方のアドレス(先頭アドレス)を圧縮前後命令アドレスデータ814としてメモリ801に記録しておく。圧縮前後命令アドレスデータ814は、圧縮前(圧縮対象)の命令コードのアドレスと圧縮後の命令コード(圧縮命令コード)のアドレスとの対応関係を有するデータである。
【0054】
次に、ステップ825では、命令圧縮処理部802の取得部は、このようにして一旦全てのオブジェクトコードを圧縮した後、圧縮前のオブジェクトコード703及び圧縮後の仮オブジェクトコード813の先頭から分岐命令をトレースする。この時、トレースされた分岐命令の分岐先アドレスは、まだ圧縮前の状態のオブジェクトコードのアドレスである。命令圧縮処理部802は、圧縮前後命令アドレスデータ814を参照し、圧縮前の命令コードの分岐先アドレスから圧縮後の命令コードの分岐先アドレスを取得する。
【0055】
次に、ステップ826では、命令圧縮処理部802の変換部は、圧縮後の命令コードが分岐命令であるときには分岐命令の分岐先アドレスを、圧縮前の命令コードのアドレスから圧縮後の命令コードのアドレスに変換し、最終的な圧縮後のオブジェクトコード705を生成する。
【0056】
以上のように、第1〜第3の実施形態によれば、圧縮命令コードを命令メモリ(キャッシュメモリ)101に格納することにより、命令メモリ101の容量の削減又は命令メモリ101のキャッシュヒット率の向上に寄与する。また、図1又は図2の圧縮命令処理装置は、大きなアドレス変換用の検索テーブル又は辞書テーブルを必要としないため、回路規模を小さくすることができる。
【0057】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【0058】
101 命令メモリ
102 第1の命令バッファ
103 圧縮命令伸張回路
104 第2の命令バッファ
105〜107 セレクタ
108 インバータ
109 実行部

【特許請求の範囲】
【請求項1】
圧縮対象の命令コードと参照命令コードとの差分コードを含む圧縮命令コードを伸張し、伸張した命令コードを出力する圧縮命令伸張回路と、
前記圧縮命令伸張回路により伸張された命令コードを記憶する命令バッファと、
前記圧縮命令伸張回路により伸張された命令コードを実行する実行部とを有し、
前記圧縮命令伸張回路は、前記命令バッファ内の命令コードを前記参照命令コードとして入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することにより、前記伸張した命令コードを出力することを特徴とする圧縮命令処理装置。
【請求項2】
前記命令バッファは、複数の命令コードを記憶する複数のエントリを有し、
前記圧縮命令コードは、前記参照命令コードが格納されている前記命令バッファ内のエントリの番号を含み、
前記圧縮命令伸張回路は、前記圧縮命令コード内の前記エントリの番号が示す前記命令バッファのエントリから前記参照命令コードを入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することを特徴とする請求項1記載の圧縮命令処理装置。
【請求項3】
前記圧縮命令コードは、前記圧縮対象の命令コードのフィールド毎の差分コードを含み、
前記圧縮命令伸張回路は、前記フィールド毎に前記加算を行うことを特徴とする請求項1又は2記載の圧縮命令処理装置。
【請求項4】
前記実行部は、次に実行する命令が非同期処理であるときには、前記圧縮命令伸張回路により伸張された命令コードを前記命令バッファに書き込む処理を禁止することを特徴とする請求項1〜3のいずれか1項に記載の圧縮命令処理装置。
【請求項5】
前記圧縮命令コードは、命令コードが圧縮されていることを示す圧縮命令識別情報を含み、
前記圧縮命令伸張回路は、入力された命令コード内に前記圧縮命令識別情報が存在するときには前記伸張された命令コードを出力し、入力された命令コード内に前記圧縮命令識別情報が存在しないときには前記入力された非圧縮の命令コードをそのまま出力することを特徴とする請求項1〜4のいずれか1項に記載の圧縮命令処理装置。
【請求項6】
前記実行部は、前記命令バッファを介して、前記圧縮命令伸張回路により伸張された命令コードを実行することを特徴とする請求項1〜5のいずれか1項に記載の圧縮命令処理装置。
【請求項7】
前記実行部は、前記命令バッファを介さずに、前記圧縮命令伸張回路により伸張された命令コードを実行することを特徴とする請求項1〜5のいずれか1項に記載の圧縮命令処理装置。
【請求項8】
命令コードを記憶するための命令FIFOと、
圧縮対象の命令コードを前記命令FIFOに順次格納し、前記圧縮対象の命令コードを圧縮するために、前記命令FIFO内の命令コードのうちの1個を参照命令コードとして選択する選択部と、
前記圧縮対象の命令コードと前記選択部により選択された参照命令コードとの差分の情報を含む圧縮命令コードを生成する生成部と
を有することを特徴とする圧縮命令生成装置。
【請求項9】
さらに、前記圧縮対象の命令コードのアドレスと前記圧縮命令コードのアドレスとの対応関係を記録し、前記圧縮命令コードが分岐命令であるときには前記分岐命令の分岐先アドレスを、前記圧縮対象の命令コードのアドレスから前記圧縮命令コードのアドレスに変換する変換部を有することを特徴とする請求項8記載の圧縮命令生成装置。
【請求項10】
前記命令FIFOは、複数の命令コードを記憶する複数のエントリを有し、
前記生成部は、前記参照命令コードが格納されている前記命令FIFO内のエントリの番号を含む前記圧縮命令コードを生成することを特徴とする請求項8又は9記載の圧縮命令生成装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate