JP2005149297A - プロセッサおよびそのアセンブラ - Google Patents

プロセッサおよびそのアセンブラ Download PDF

Info

Publication number
JP2005149297A
JP2005149297A JP2003388130A JP2003388130A JP2005149297A JP 2005149297 A JP2005149297 A JP 2005149297A JP 2003388130 A JP2003388130 A JP 2003388130A JP 2003388130 A JP2003388130 A JP 2003388130A JP 2005149297 A JP2005149297 A JP 2005149297A
Authority
JP
Japan
Prior art keywords
instruction
nop
branch
flag
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2003388130A
Other languages
English (en)
Other versions
JP2005149297A5 (ja
Inventor
Junko Obara
淳子 小原
Hiroyuki Kawai
浩行 河合
Hiroyuki Morinaka
浩之 森中
Yoshitsugu Inoue
喜嗣 井上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Technology Corp
Original Assignee
Renesas Technology Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Technology Corp filed Critical Renesas Technology Corp
Priority to JP2003388130A priority Critical patent/JP2005149297A/ja
Priority to US10/841,467 priority patent/US20050108698A1/en
Priority to DE102004036293A priority patent/DE102004036293A1/de
Publication of JP2005149297A publication Critical patent/JP2005149297A/ja
Publication of JP2005149297A5 publication Critical patent/JP2005149297A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】 オブジェクトコードのサイズを削減することが可能なアセンブラを提供すること。
【解決手段】 命令解析部23は、プログラム入力部12に入力されたプログラムの命令を順次解析する。NOP命令解析部24は、連続するNOP命令を1つの連続NOP命令にエンコードする。そして、命令コード出力部14は、命令解析部23によってエンコードされた命令をオブジェクトコードとして出力する。したがって、オブジェクトコードのサイズを削減することが可能となる。
【選択図】 図4

Description

本発明は、ニーモニックで記述されたプログラムを機械語のオブジェクトコードに変換するアセンブラおよびそのオブジェクトコードを実行するプロセッサに関し、特に、オブジェクトコードのサイズを削減することを可能にしたアセンブラおよびそのオブジェクトコードを実行するプロセッサに関する。
プログラム制御方式プロセッサコアにおいては、ロード命令、分岐命令、演算命令など、それらの命令の実行が完了するまで複数サイクルを要する場合、待ち時間が発生する。そのため、これらの命令の結果を使用する命令を実行するためには、NOP命令を挿入して、プログラムが正しく実行されることを保証する必要がある。これに関連する技術として、特開平4−275603号公報および特開平2−12429号公報に開示された発明がある。
特開平4−275603号公報に開示されたプログラマブル・コントローラにおいては、NOP命令に付加されているNOP実行回数データNを内蔵の減算カウンタにセットし、プログラムカウンタを停止させる。そして、処理タイミング毎に減算カウンタのデクリメントを行ない、そのデクリメント後のカウント値が「1」となったときに、プログラムカウンタのカウントを再開させる。
また、特開平2−12429号公報に開示されたディレイド・ジャンプ対応機能付情報処理装置においては、「NOP挿入モード」でジャンプ命令または条件ジャンプ命令が実行されると、ジャンプ命令検出信号が真になる。このときモードビットが「NOP挿入モード」であると、命令レジスタの入力は命令バッファでなく、NOPコード発生回路に切替えられる。また、プログラムカウンタの入力には、通常のインクリメンタの出力ではなく、現在のプログラムカウンタの値がフィードバックされる。これによって、次クロックにはプリフェッチされた命令ではなく、NOPコード発生回路からNOPコードが命令レジスタにロードされる。
特開平4−275603号公報 特開平2−12429号公報
上述した特開平4−275603号公報に開示されたプログラマブル・コントローラにおいては、NOP命令に付加されているNOP実行回数データNに応じて、NOP命令を実行するものである。一般に、分岐命令の直後の連続NOP命令(NOPを連続して実行する命令)は、連続NOP命令の直後の命令が原因となる資源の競合を防ぐために挿入されることが多い。したがって、分岐命令の分岐が成立する場合に、連続NOP命令を実行してしまうと、不要なNOPが実行されてしまい性能の低下を引き起こすといった問題点があった。
また、特開平2−12429号公報に開示されたディレイド・ジャンプ対応機能付情報処理装置においては、「NOP挿入モード」でジャンプ命令または条件ジャンプ命令が実行されると、プログラムカウンタの更新が停止されるため、分岐条件が不成立の場合にも不要なNOP命令が自動的に挿入されるといった問題点があった。
本発明は、上記問題点を解決するためになされたものであり、第1の目的は、オブジェクトコードのサイズを削減することが可能なアセンブラを提供することである。
本発明の第2の目的は、不要なNOP命令が挿入されるのを防止したプロセッサを提供することである。
本発明のある局面に従えば、アセンブラは、入力されたプログラムの命令を順次解析し、連続する複数個のノーオペレーション命令を、複数個のノーオペレーション命令の個数を指定するオペランドをもつ連続ノーオペレーション命令にエンコードする命令解析手段と、命令解析手段によってエンコードされた命令をオブジェクトコードとして出力する出力手段とを含む。
本発明の別の局面に従えば、プロセッサは、フェッチすべき命令のアドレスを生成するアドレス生成手段と、アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、命令デコード手段は、デコードする命令が、オペランド指定フィールドを有する連続ノーオペレーション命令である場合、そのオペランド指定フィールドで指定された個数分だけ連続したノーオペレーション命令として処理することができ、その連続ノーオペレーション命令の直前にフェッチされた命令が分岐命令であり、かつこの分岐命令による分岐が生じるときには、オペランド指定フィールドには依存しない個数のノーオペレーション命令として処理する。
本発明のさらに別の局面に従えば、プロセッサは、フェッチすべき命令のアドレスを生成するアドレス生成手段と、アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、命令デコード手段は、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が成立する場合にはノーオペレーション命令をノーオペレーション付分岐命令の後に挿入し、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が不成立の場合にはノーオペレーション命令を挿入しない。
本発明のある局面によれば、命令解析手段が、入力されたプログラムの命令を順次解析し、連続するノーオペレーション命令を1つの連続ノーオペレーション命令にエンコードするので、オブジェクトコードのサイズを削減することが可能となった。
本発明の別の局面によれば、命令デコード手段は、デコードした命令が連続ノーオペレーション命令のとき、連続ノーオペレーション命令の直前の命令が分岐命令であり、かつ分岐条件が成立する場合には、連続ノーオペレーション命令を通常のノーオペレーション命令として処理するので、不要なノーオペレーション命令が挿入されるのを防止することが可能となった。
本発明のさらに別の局面によれば、命令デコード手段は、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が成立する場合にはノーオペレーション命令を挿入し、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が不成立の場合にはノーオペレーション命令を挿入しないので、不要なノーオペレーション命令が挿入されるのを防止することが可能となった。
(第1の実施の形態)
まず、一般的なアセンブラの動作について説明する。図1は、一般的なアセンブラの機能的構成を示すブロック図である。このアセンブラ11は、ニーモニックで記述されたプログラム(以下、単にプログラムと呼ぶ。)10が入力されるプログラム入力部12と、プログラム入力部12に入力されたプログラムの命令コードを1つずつ解析し、エンコードされた命令を出力する命令解析部13と、命令解析部13から出力されたエンコードされた命令をオブジェクトコード15として出力する命令コード出力部14とを含む。
図2は、図1に示すアセンブラに入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。図2(a)に示すプログラムがプログラム入力部12に入力されると、命令解析部13は図2(a)に示すプログラムの命令を1つずつ解析し、エンコードされた命令を出力する。その結果、命令コード出力部14は、図2(b)に示すようなオブジェクトコード15を出力する。図2(b)に示すように、それぞれのNOP命令はそのままエンコードされて機械語に変換される。1つの命令コードは、32ビットによって構成される。なお、ADDは加算命令を示し、SUBは減算命令を示す。
図3は、本発明の第1の実施の形態におけるアセンブラ装置の構成例を示すブロック図である。このアセンブラ装置は、コンピュータ本体61、ディスプレイ装置62、FD(Flexible Disk)64が装着されるFDドライブ63、キーボード65、マウス66、CD−ROM(Compact Disc-Read Only Memory)68が装着されるCD−ROM装置67、およびネットワーク通信装置69を含む。
アセンブリプログラムは、FD64またはCD−ROM68等の記録媒体によって供給される。アセンブリプログラムがコンピュータ本体61によって実行されることによって、ニーモニックで記述されたプログラムからオブジェクトコードが生成される。また、アセンブリプログラムは他のコンピュータよりネットワーク通信装置69を経由し、コンピュータ本体61に供給されてもよい。
図3に示すコンピュータ本体61は、CPU(Central Processing Unit)70、ROM(Read Only Memory)71、RAM(Random Access Memory)72およびハードディスク73を含む。CPU70は、ディスプレイ装置62、FDドライブ63、キーボード65、マウス66、CD−ROM装置67、ネットワーク通信装置69、ROM71、RAM72またはハードディスク73との間でデータを入出力しながら処理を行う。
FD64またはCD−ROM68に記録されたアセンブリプログラムは、CPU70によりFDドライブ63またはCD−ROM装置67を介してハードディスク73に格納される。CPU70は、ハードディスク73から適宜アセンブリプログラムをRAM72にロードして実行することによって、ニーモニックで記述されたプログラムからオブジェクトコードが生成される。
図4は、本発明の第1の実施の形態におけるアセンブラの機能的構成を示すブロック図である。このアセンブラは、図1に示すアセンブラと比較して、命令解析部23の構成および機能のみが異なる。命令解析部23は、命令コードがNOP命令である場合に、当該NOP命令の解析を行なうNOP命令解析部24を含む。
図5は、本発明の第1の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。まず、命令解析部23は、プログラム入力部12に保持される最後の命令の処理が終わったか否かを判定する(S1)。最後の命令コードの処理が終わっていなければ(S1,No)、命令解析部23は、命令を1つ抽出し、当該命令がNOP命令であるか否かを判定する(S2)。
命令がNOP命令であれば(S2,Yes)、NOP命令解析部24は、当該NOP命令がラベル付NOP命令または引数付NOP命令であるか否かを判定する(S3)。ここで、引数付NOP命令とは、NOP<n>(<n>は、1以上の整数)のように記述された命令を指し、<n>はNOP命令の処理回数を示している。通常、NOP命令を1回だけ実行する場合には引数なしのNOP命令を使用すればよいが、自動的に前後のNOP命令と併せて1つの命令にしたくない場合には明示的に“NOP 1”と指定するようにする。
また、ラベル付NOP命令においても、分岐命令によって分岐先アドレスとして当該ラベルが指定される場合には、前後のNOP命令と併せて1つの命令にしないようにする。
NOP命令がラベル付NOP命令または引数付NOP命令であれば(S3,Yes)、NOP命令解析部24は、NOPフラグがセットされているか否かを判定する(S4)。NOPフラグがセットされていれば(S4,Yes)、NOP命令解析部24は、カウンタの値を引数とする引数付NOP命令をエンコードし、NOPフラグおよびカウンタをリセットする(S5)。そして、命令解析部23は、対象命令をエンコードし(S6)、ステップS1に戻って以降の処理を繰返す。
また、NOP命令がラベル付NOP命令および引数付NOP命令のいずれでもない場合には(S3,No)、NOP命令解析部24は、NOPフラグがセットされているか否かを判定する(S7)。NOPフラグがセットされていれば(S7,Yes)、NOP命令解析部24はカウンタの値をインクリメントし(S8)、ステップS1に戻って以降の処理を繰返す。
また、NOPフラグがセットされていなければ(S7,No)、NOP命令解析部24はNOPフラグをセットしてカウンタをリセットし(S9)、ステップS1に戻って以降の処理を繰返す。
ステップS1において、命令解析部23が最後の命令の処理が終了したと判断した場合には(S1,Yes)、NOPフラグがセットされているか否かを判定する(S10)。NOPフラグがセットされていれば(S10,Yes)、NOP命令解析部24は、カウンタの値を引数とする連続NOP命令をエンコードし(S11)、処理を終了する。また、NOPフラグがセットされていなければ(S10,No)、そのまま処理を終了する。以上の処理によって生成されたオブジェクトコード15が、命令コード出力部14から出力される。
図6は、プログラム入力部12に入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。図6(a)に示すプログラムがアセンブラ11によってどのようにアセンブルされるかを、図5に示すフローチャートを用いて説明する。
まず、命令解析部23が最初の命令であるADD命令を抽出する。この命令はNOP命令ではなく(S2,No)、NOPフラグがセットされていないので(S4,No)、命令解析部23はこのADD命令をエンコードして(S6)、ステップS1に処理が戻る。
次に、命令解析部23が2番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令および引数付NOP命令のいずれでもなく(S3,No)、NOPフラグがセットされていないので(S7,No)、NOP命令解析部24はNOPフラグをセットし、カウンタを“0”にリセットする(S9)。そして、ステップS1に処理が戻る。
次に、命令解析部23が3番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令および引数付NOP命令のいずれでもなく(S3,No)、NOPフラグがセットされているので(S7,Yes)、NOP命令解析部24はカウンタをインクリメントする(S8)。そして、ステップS1に処理が戻る。
次に、命令解析部23が4番目の命令であるSUB命令を抽出する。この命令はNOP命令ではなく(S2,No)、NOPフラグがセットされているので(S4,Yes)、NOP命令解析部24はカウンタの値を引数とする連続NOP命令(NOP2)をエンコードし、NOPフラグおよびカウンタをリセットする(S5)。そして、命令解析部23は、対象命令であるSUB命令をエンコードして(S6)、ステップS1に処理が戻る。
ステップS1において、最後の命令の処理が終了しており(S1,Yes)、NOPフラグがセットされていないので(S10,No)、命令コード出力部14は生成されたオブジェクトコード15を出力し、処理を終了する。図6(b)は、このようにして生成されたオブジェクトコードを示している。
図7は、本発明の第1の実施の形態における命令コードの一例を示す図である。本発明の第1の実施の形態におけるプロセッサでサポートされる命令の命令コードは、すべて32ビット固定長とする。図7に示すように、オペコードとして命令コードのMSB(Most Significant Bit)側8ビットがすべてゼロである場合に、連続NOP命令が特定される。そして、LSB(Least Significant Bit)側4ビットが連続NOP命令のオペランドとして指定されるオペランド指定フィールドである。オペランド指定フィールドにより、連続して挿入されるNOP命令数が指定される。したがって、連続NOP命令により最大16個のNOP命令数が指定可能である。図5のステップS5で連続NOP命令をエンコードする際に、このオペランド指定フィールドにそのときのカウンタの値が設定される。なお、連続NOP命令の残りの20ビットは未定義領域である。
図8は、本発明の第1の実施の形態におけるアセンブラによってアセンブルされるラベル付NOP命令および引数付NOP命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。図8(a)に示すプログラムがアセンブラ11によってどのようにアセンブルされるかを、図5に示すフローチャートを用いて説明する。
まず、命令解析部23が最初の命令であるJMP命令を抽出する。この命令はNOP命令ではなく(S2,No)、NOPフラグがセットされていないので(S4,No)、命令解析部23はこのJMP命令をエンコードして(S6)、ステップS1に処理が戻る。
次に、命令解析部23が2番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、引数付NOP命令であり(S3,Yes)、NOPフラグがセットされていないので(S4,No)、NOP命令解析部24は対象命令であるNOP命令をエンコードする(S6)。そして、ステップS1に処理が戻る。
次に、命令解析部23が3番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令および引数付NOP命令のいずれでもなく(S3,No)、NOPフラグがセットされていないので(S7,No)、NOP命令解析部24はNOPフラグをセットし、カウンタを“0”にリセットする(S9)。そして、ステップS1に処理が戻る。
次に、命令解析部23が4番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令および引数付NOP命令のいずれでもなく(S3,No)、NOPフラグがセットされているので(S7,Yes)、NOP命令解析部24はカウンタの値をインクリメントする(S8)。そして、ステップS1に処理が戻る。
次に、命令解析部23が5番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令であり(S3,Yes)、NOPフラグがセットされているので(S4,Yes)、NOP命令解析部24はカウンタの値を引数とする連続NOP命令(NOP2)をエンコードし、NOPフラグおよびカウンタをリセットする(S5)。そして、NOP命令解析部24は、対象命令であるNOP命令をエンコードして(S6)、ステップS1に処理が戻る。
次に、命令解析部23が6番目の命令であるSUB命令を抽出する。この命令はNOP命令ではなく(S2,No)、NOPフラグがセットされていないので(S4,No)、命令解析部23は対象命令であるSUB命令をエンコードして(S6)、ステップS1に処理が戻る。
ステップS1において、最後の命令の処理が終了しており(S1,Yes)、NOPフラグがセットされていないので(S10,No)、命令コード出力部14は生成されたオブジェクトコード15を出力し、処理を終了する。図8(b)は、このようにして生成されたオブジェクトコードを示している。
以上説明したように、本実施の形態におけるアセンブラによれば、連続するNOP命令を1つの命令にエンコードするようにしたので、オブジェクトコードのサイズを削減することが可能となった。
また、対象命令がラベル付NOP命令または引数付NOP命令の場合には、1つの命令にエンコードしないようにしたので、命令が格納されるアドレスを固定する必要がある場合にも対応することができ、余計なNOP命令が実行されるといった不具合を防止することが可能となった。
さらには、従来のエディタなどで生成されたプログラムであっても、同様にアセンブルすることができ、オブジェクトコードのサイズを削減することが可能となった。
(第2の実施の形態)
本発明の第2の実施の形態におけるアセンブラ装置の構成例は、図3に示す本発明の第1の実施の形態におけるアセンブラ装置の構成例と同様である。また、本発明の第2の実施の形態におけるアセンブラの機能的構成は、図4に示す本発明の第1の実施の形態におけるアセンブラの機能的構成と同様である。したがって、重複する構成および機能の詳細な説明は繰返さない。
図9は、本発明の第2の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。図5に示す本発明の第1の実施の形態におけるアセンブラの処理手順と比較して、ステップS3がステップS13に置換されている点のみが異なる。したがって、重複する処理手順の詳細な説明は繰返さない。
ステップS13において、NOP命令解析部24は、当該NOP命令がラベル付NOP命令であるか否かを判定する(S13)。命令がラベル付NOP命令であれば(S13,Yes)、NOP命令解析部24は、NOPフラグがセットされているか否かを判定する(S4)。NOPフラグがセットされていれば(S4,Yes)、NOP命令解析部24は、カウンタの値を引数とする引数付NOP命令をエンコードし、NOPフラグおよびカウンタをリセットする(S5)。そして、命令解析部23は、対象命令をエンコードし(S6)、ステップS1に戻って以降の処理を繰返す。
また、NOP命令がラベル付NOP命令でない場合には(S13,No)、命令解析部23は、NOPフラグがセットされているか否かを判定する(S7)。NOPフラグがセットされていれば(S7,Yes)、NOP命令解析部24はカウンタの値をインクリメントし(S8)、ステップS1に戻って以降の処理を繰返す。
図10は、本発明の第2の実施の形態におけるアセンブラによってアセンブルされるラベル付NOP命令および引数付NOP命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。図10(a)に示すプログラムがアセンブラ11によってどのようにアセンブルされるかを、図9に示すフローチャートを用いて説明する。
まず、命令解析部23が最初の命令であるJMP命令を抽出する。この命令はNOP命令ではなく(S2,No)、NOPフラグがセットされていないので(S4,No)、命令解析部23はこのJMP命令をエンコードして(S6)、ステップS1に処理が戻る。
次に、命令解析部23が2番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令ではなく(S13,No)、NOPフラグがセットされていないので(S7,No)、NOP命令解析部24はNOPフラグをセットし、カウンタを“0”にリセットする(S9)。そして、ステップS1に処理が戻る。
次に、命令解析部23が3番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令ではなく(S13,No)、NOPフラグがセットされているので(S7,Yes)、NOP命令解析部24はカウンタの値をインクリメントする(S8)。そして、ステップS1に処理が戻る。
次に、命令解析部23が4番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令ではなく(S13,No)、NOPフラグがセットされているので(S7,Yes)、NOP命令解析部24はカウンタの値をインクリメントする(S8)。そして、ステップS1に処理が戻る。
次に、命令解析部23が5番目の命令であるNOP命令を抽出する。この命令はNOP命令であり(S2,Yes)、ラベル付NOP命令であり(S3,Yes)、NOPフラグがセットされているので(S4,Yes)、NOP命令解析部24はカウンタの値を引数とする連続NOP命令(NOP3)をエンコードし、NOPフラグおよびカウンタをリセットする(S5)。そして、NOP命令解析部24は、対象命令であるNOP命令をエンコードして(S6)、ステップS1に処理が戻る。
次に、命令解析部23が6番目の命令であるSUB命令を抽出する。この命令はNOP命令ではなく(S2,No)、NOPフラグがセットされていないので(S4,No)、命令解析部23は対象命令であるSUB命令をエンコードして(S6)、ステップS1に処理が戻る。
ステップS1において、最後の命令の処理が終了しており(S1,Yes)、NOPフラグがセットされていないので(S10,No)、命令コード出力部14は生成されたオブジェクトコード15を出力し、処理を終了する。図10(b)は、このようにして生成されたオブジェクトコードを示している。
以上説明したように、本実施の形態におけるアセンブラによれば、命令を格納するアドレスを固定する必要がない場合には、引数付NOP命令を含んだ複数のNOP命令を連続NOP命令としてエンコードするようにしたので、第1の実施の形態において説明した効果に加えて、さらにオブジェクトコードのサイズを削減することが可能となった。
(第3の実施の形態)
図11は、本発明の第3の実施の形態におけるプロセッサの概略構成を示すブロック図である。このプロセッサは、フェッチする命令のアドレスを生成するプログラムアドレス生成部30と、プログラムアドレス生成部30によって生成されたアドレスに応じて命令をフェッチする命令フェッチ部31と、命令フェッチ部31によってフェッチされた命令をデコードする命令デコード部32と、命令デコード部32によるデコード結果に応じてメモリやレジスタからデータを読出すデータ読出し部33と、データ読出し部33によって読出されたデータをソースとして整数演算や浮動小数点演算などを行なう演算処理部34と、演算処理部34による演算結果をメモリやレジスタに書込むデータ書込み部35とを含む。
プログラムアドレス生成部30は、ゼロを初期値としてプログラムアドレスを生成し、通常動作時においては各サイクル毎にプログラムアドレスをインクリメントする。また、後述する連続NOP命令フラグが設定されている場合、プログラムアドレス生成部30は、プログラムアドレスを更新しない。また、分岐命令において分岐条件が成立する場合、プログラムアドレス生成部30は、分岐先アドレスをプログラムアドレスに設定する。
命令フェッチ部31は、プログラムアドレス生成部30によって生成されたプログラムアドレスに応じて、図示しない命令メモリから命令をフェッチし、その命令を命令デコード部32へ出力する。
図12は、図11に示す命令デコード部32をさらに詳細に説明するためのブロック図である。この命令デコード部32は、命令フェッチ部31によってフェッチされた命令を格納するバッファ39と、命令レジスタ40と、バッファ39に格納された命令およびNOP命令のいずれかを選択して命令レジスタ40に設定する命令レジスタ選択部36と、命令レジスタ40に設定された命令が連続NOP命令であるか否かを判定するNOP命令解析部37と、命令レジスタ40に設定された命令が分岐命令であるか否かを判定する分岐命令解析部38と、NOP命令および分岐命令以外の命令を解析し、そのデコード結果をデータ読出部33へ与える命令解析部41と、連続して挿入されるNOP命令をカウントするNOPカウンタ42と、NOP命令解析部37によって設定される連続NOPフラグが格納されるNOPフラグレジスタ43と、分岐命令解析部38によって設定される分岐命令フラグが格納される分岐フラグレジスタ44とを含む。
命令レジスタ選択部36は、NOPフラグレジスタ43に連続NOP命令フラグがセットされていれば、命令フェッチ部31によってフェッチされた命令をバッファ39に格納し、命令レジスタ40にNOP命令を格納する。また、NOPフラグレジスタ43に連続NOP命令フラグがセットされていなければ、命令フェッチ部31によってフェッチされた命令を命令レジスタ40に格納する。
NOP命令解析部37は、NOP命令(連続NOP命令も含む)をデコードしてプロセッサ各部(図示されているデータ読出部33、アドレス生成部30も含む)に対していわゆるNOP制御(ノーオペレーション制御)を行なう。
NOP命令解析部37は、命令レジスタ選択部36によって格納された命令レジスタ40の内容が連続NOP命令であるか否かを判定する。命令レジスタ40の内容が連続NOP命令であり、かつ分岐フラグレジスタ44に分岐命令フラグがセットされていない場合、すなわち直前の命令が分岐命令でない場合には、NOP命令解析部37はNOPフラグレジスタ43に連続NOP命令フラグをセットする。このとき、NOP命令解析部37は、連続NOP命令の引数(N)として指定された連続NOP命令のオペランド指定フィールドの値(N−1)をNOPカウンタ42にそのままセットすると共に、nop_flagをセットする。
なお、第1および第2の実施の形態におけるアセンブラにおいて、N個の連続するNOP命令を1つの連続NOP命令にエンコードするときに、カウンタの初期値を“1”にリセットして連続NOP命令のオペランド指定フィールドに(N)を書込む場合には、連続NOP命令のオペランド指定フィールドで指定されたNOP実行回数を1つ引いてからNOPカウンタ42にセットするようにしてもよい。
NOP命令解析部37は、NOPフラグレジスタ43に連続NOP命令フラグがセットされ、かつNOPカウンタ42の値がゼロでない場合には、命令レジスタ40に格納されるNOP命令を読出してデコードする。また、NOPフラグレジスタ43に連続NOP命令フラグがセットされ、かつNOPカウンタ42の値nop_cntがゼロの場合には、NOP命令解析部37は、NOPフラグレジスタ43に格納される連続NOP命令フラグをリセットし、バッファ39に格納される命令が読出されて命令レジスタ40に設定される。
それ以外のとき、すなわちjmp_flag_regがセットされているか、または命令レジスタ40の命令が連続NOP命令でない通常のNOP命令のとき、NOP命令解析部37は、nop_flagをリセットのままとする。
分岐命令解析部38は、命令レジスタ40の内容が分岐命令であるか否かを判定すると共に、分岐条件を満たすか否かを判定する。命令レジスタ40の内容が分岐命令であり、かつ分岐条件を満たす場合には、分岐命令解析部38はjmp_flagをセットし、分岐フラグレジスタ44にその値を設定する。また、命令レジスタ40の内容が分岐命令でない場合、または分岐命令であっても分岐条件を満たさない場合には、分岐命令解析部38はjmp_flagをリセットし、分岐フラグレジスタ44にその値を設定する。なお、命令レジスタ40に格納される命令が無条件分岐命令の場合も、分岐条件を満たすとしてjmp_flagがセットされる。
分岐命令解析部38は、分岐命令の分岐先アドレスを示すアドレス情報を出力する。アドレス生成部30は、分岐命令解析部38から出力されるjmp_flagがセットされていた場合に、このアドレス情報に基づいて分岐先アドレスを計算し、read_addrとして出力する。
命令フェッチ部31は、プログラムカウンタ(PC)を有して、read_addrを保持し、read_addr_regとして出力する。なお、アドレス生成部30は、分岐命令による分岐が生じないときにはPCに保持された値をインクリメントして、そのインクリメントした値でPCの内容を更新する。
命令解析部41は、分岐命令、NOP命令(連続NOP命令も含む)以外の命令をデコードしてデコード結果をデータ読出部33に与える。
図13は、本発明の第3の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図13(a)に示すプログラムを参照しながら、以下に、図13(b)に示すタイミングチャートの説明を行なう。
サイクルT0において、req信号にハイレベル(以下、Hレベルと略す。)が出力されると、プログラムアドレス生成部30はread_addr信号にプログラムアドレスA0を出力する。req信号は、命令デコード部32から出力される信号であり、Hレベルのときに命令のフェッチを指示する信号である。連続NOP命令が実行されるときには、req信号にロウレベル(以下、Lレベルと略す。)が出力される。
サイクルT1において、命令フェッチ部31内のプログラムカウンタ45にプログラムアドレスA0が設定されてread_addr_regに出力されると共に、命令フェッチ部31がプログラムアドレスA0に対応した命令D0(ADD)をフェッチして、read_data信号に出力する。このサイクルにおいて、プログラムアドレス生成部30は、プログラムカウンタ45をインクリメントして、read_addr信号にプログラムアドレスA1を出力する。
サイクルT2において、NOPフラグレジスタ43から出力されるnop_flag_regがセットされていないので、命令レジスタ40に命令D0が設定されてinstregに出力される。命令解析部41は、命令D0のデコードを行なう。このとき、命令フェッチ部31は、プログラムアドレスA1に対応した命令D1(SUB)をフェッチする。また、プログラムアドレス生成部30は、read_addrにプログラムアドレスA2を出力する。
サイクルT3において、データ読出し部33は、命令D0に対応したデータを読出す。命令解析部41は、命令D1のデコードを行なう。このとき、命令フェッチ部31は、プログラムアドレスA2に対応した命令D2(NOP 4)をフェッチする。また、プログラムアドレス生成部30は、read_addr信号にプログラムアドレスA3を出力する。
サイクルT4において、演算処理部34は、命令D0(ADD)に対応した演算を行なう。このとき、命令レジスタ選択部36は、NOPフラグレジスタ43に連続NOP命令フラグがセットされていないので、命令レジスタ40に命令D2(NOP 4)を設定する。また、命令D2は連続NOP命令であるので、NOP命令解析部37は、nop_flagをセットしてNOPフラグレジスタ43に連続NOP命令フラグを設定し、NOPカウンタ43に3(4−1)を設定する。なお、命令レジスタ40には分岐命令が格納されていないので、分岐フラグレジスタ44に分岐命令フラグはセットされない。また、命令フェッチ部31は、プログラムアドレスA3に対応した命令D3(ADD)をフェッチする。また、プログラムアドレス生成部30は、read_addr信号にプログラムアドレスA4を出力する。
サイクルT5において、命令レジスタ選択部36は、NOPフラグレジスタ43に連続NOP命令フラグがセットされているので、命令レジスタ40にNOP命令を設定する。命令フェッチ部31によってフェッチされた命令D3はバッファ39にb0として保持される。NOP命令解析部37は、連続NOP命令フラグがセットされているので、NOPカウンタ42の値をデクリメントする(nop_cnt=2)。
サイクルT6において、命令レジスタ選択部36は、NOPフラグレジスタ43に連続NOP命令フラグが設定されているので、命令レジスタ40にNOP命令を設定する。命令フェッチ部31によってフェッチされた命令D4(JAN 10)はバッファ39にb1として保持される。NOP命令解析部37は、NOPフラグレジスタ43に連続NOP命令フラグがセットされているので、NOPカウンタ42の値をデクリメントする(nop_cnt=1)。
サイクルT7において、命令レジスタ選択部36は、NOPフラグレジスタ43に連続NOP命令フラグがセットされているので、命令レジスタ40にNOP命令を設定する。NOP命令解析部37は、NOPフラグレジスタ43に連続NOP命令フラグがセットされているので、NOPカウンタ42の値をデクリメントする(nop_cnt=0)。このとき、NOPカウンタ42の値が0となるので、NOP命令解析部37はNOPフラグレジスタ43に格納される連続NOP命令フラグをリセットする。
サイクルT8において、命令レジスタ選択部36は、NOPカウンタ42の値が0となっているので、バッファ39にb0として保持されている命令D3を命令レジスタ40に設定する。NOP命令解析部37は、命令レジスタ40に設定された命令がNOP命令ではないので、NOPフラグレジスタ43に格納される連続NOP命令フラグをそのままとする。また、プログラムアドレス生成部30は、req信号が再びHレベルとなるので、プログラムアドレスをインクリメントし、read_addrにアドレスA5を出力する。
サイクルT9において、命令デコード部32は、命令D4をデコードする。命令D4(JA 10)は10番地に無条件で分岐する分岐命令であるので、分岐命令解析部38は、分岐フラグレジスタ44に分岐命令フラグをセットする。また、プログラムアドレス生成部30は、read_addr信号に分岐先アドレスA10を出力する。
サイクルT10において、命令レジスタ選択部36は、NOPフラグレジスタ43に連続NOP命令フラグが設定されていないので、命令レジスタ40にD5(NOP 5)を設定する。また、命令D5は連続NOP命令であるが、分岐フラグレジスタ44に分岐命令フラグが設定されているので、NOP命令解析部37は、NOPフラグレジスタ43に連続NOP命令フラグを設定しない。命令フェッチ部31は、アドレスA10に対応する命令D10(ADD)をフェッチする。
サイクルT11において、NOPフラグレジスタ43に連続NOP命令フラグが設定されていないので、命令レジスタ選択部36は、命令レジスタ40に命令D10を設定する。命令解析部41は、命令D10をデコードする。
なお、サイクルT10において、“JA 10”の分岐成立に対応して“NOP 5”には依存しない1個のNOPが挿入されているが、命令のフェッチサイクルに応じて2個以上のNOPが挿入されるようにしてもよい。
図14(a)は、本発明の第3の実施の形態におけるプロセッサによって実行される条件付分岐命令JACCを含んだプログラムの一例を示す図である。条件分岐命令“JACC 103”は、分岐条件を満たせば指定先の103番地の命令へ分岐し、分岐条件を満たさなければ分岐せずに、次の101番地の命令の処理に移る命令である。
図14(b)は、分岐条件を満たす場合のパイプライン処理を説明するための図である。サイクル1において、条件分岐命令“JACC 103”がフェッチされる。
サイクル2において、JACC命令がデコードされると共に、次の命令“NOP 4”がフェッチされる。このJACCの命令デコードステージにおいて、分岐条件を満たしているか否かが判定される。
サイクル3において、分岐条件が成立しているため、“NOP 4”がデコードされるが、分岐先の103番地のSUB命令がフェッチされる。
サイクル4において、SUB命令がデコードされる。そして、以降のサイクルで、このSUB命令およびそれに続く命令の処理が行なわれる。
図14(c)は、分岐条件を満たさない場合のパイプライン処理を説明するための図である。サイクル2までは、図14(b)に示す処理と同様である。サイクル3において、分岐条件が成立しないため、“NOP 4”命令がデコードされる。
サイクル4〜6において、3つのNOPが挿入される。また、サイクル6において、続くADD命令がフェッチされる。そして、以降のサイクルで、ADD命令およびそれに続く命令の処理が行なわれる。
以上説明したように、本実施の形態におけるプロセッサによれば、連続NOP命令の処理中は、命令フェッチ部31が命令メモリにアクセスしないようにしたので、消費電力の削減を図ることが可能となった。また、複数のNOP命令が1つの連続NOP命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
また、一般に、条件分岐命令の実行時において、分岐する条件が成立した時と不成立の時とでは処理内容が異なるため、資源の競合や条件なども異なる。本実施の形態においては、分岐命令の直後にある連続NOP命令を、条件が不成立の場合(分岐しない場合)に必要となるNOPの数を規定していると見なし、条件が成立した場合(分岐する場合)には通常のNOP命令として処理するようしたので、条件分岐命令の実行時に不要なNOPが挿入されるのを防止することが可能となった。
(第4の実施の形態)
本発明の第3の実施の形態においては、図13(b)に示すように、分岐命令がフェッチされてから実際に分岐先アドレスに分岐するまでの間において、分岐命令のフェッチステージとデコードステージとの差のサイクル数の命令が処理されてしまう。一般には、これらの命令は、NOP命令に置換されることが多い。したがって、分岐命令の後に必ずNOP命令を挿入しなければならず、オブジェクトコードのサイズが増大することになる。本実施の形態においては、必要なNOP実行回数だけNOP命令を含んだNOP付分岐命令を実行するプロセッサに関する。
図15は、本発明の第4の実施の形態におけるプロセッサの処理を説明するための図である。図15(a)は、JA命令の後にNOP命令が挿入されている場合のプログラムの一例を示す図である。
図15(b)は、図15(a)に示すプログラムを実行するときのパイプライン処理を示す図である。まず、0番地の命令(JA)がフェッチされる。次のサイクルで、JA命令がデコードされると共に、1番地の命令(NOP)がフェッチされる。さらに次のサイクルで、NOP命令がデコードされると共に、分岐先である10番地の命令(ADD)がフェッチされる。
図15(c)は、図15(a)に示すJA命令およびそれに続くNOP命令が、1つのNOP付分岐命令であるJAN命令に置換されている場合のプログラムの一例を示す図である。このように、JA命令およびNOP命令をNOP付分岐命令(JAN)に置換することによって、オブジェクトコードのサイズを削減することができる。
図16は、NOP付分岐命令の種類を説明するための図である。これらの全てについてNOP命令付分岐命令をサポートするが、分岐命令の後にNOP命令を挿入しなくてもよい場合には、NOP命令を含まない通常の分岐命令もサポートするものとする。
図16において、デクリメント分岐命令は、予め設定されたループカウンタの値を命令が実行される毎にデクリメントし、ループカウンタの値が0となったときに指定されたアドレスへ分岐する命令である。
無条件分岐命令は、無条件に指定されたアドレスに分岐する命令である。条件分岐命令は、演算結果などに基づいて指定された条件式が成立する場合に、指定されたアドレスに分岐する命令である。
ビットテスト条件分岐命令は、あるレジスタの値の指定された特定ビットが、0/1のいずれかの場合に、指定されたアドレスに分岐する命令である。なお、0/1のいずれを真とするかは指定可能である。
サブルーチン無条件分岐命令は、無条件に指定されたアドレスに分岐し、サブルーチンリターン命令によって分岐した直後のアドレスに戻る命令である。
サブルーチン条件分岐命令は、演算結果などに基づいて指定された条件式が成立する場合に、指定されたアドレスに分岐し、サブルーチンリターン命令によって分岐した直後の命令に戻る命令である。
サブルーチンビットテスト条件分岐命令は、ビットテストを行なって条件が成立したときに指定されたアドレスに分岐し、サブルーチンリターン命令によって分岐した直後のアドレスに戻る命令である。
サブルーチンリターン命令は、直前に実行されたサブルーチン命令の直後のアドレスに戻る命令である。
本発明の第4の実施の形態におけるプロセッサの概略構成は、図11に示す第3の実施の形態におけるプロセッサの概略構成と比較して、命令デコード部の構成が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令デコード部の参照符号を52として説明する。
図17は、命令デコード部52の詳細を説明するためのブロック図である。この命令デコード部52は、命令レジスタ40と、命令解析部41と、分岐フラグレジスタ44と、命令レジスタ選択部46と、分岐命令解析部47と、NOP命令解析部48とを含む。なお、図12に示す命令デコード部32と同様の機能を有する部分については同じ参照符号を付すものとする。
分岐命令解析部47は、NOP付きであるか否かにかかわらず、図16に示す分岐命令を解析する。また、分岐命令解析部47は、分岐命令がNOP付きであるか否かにかかわらず、命令レジスタ40に格納される命令が分岐命令であり、かつその分岐条件を満たしている場合に、jmp_flagをセットする。それ以外の場合には、jmp_flagをリセットする。
特に、分岐命令解析部47は、命令レジスタ40に格納される命令がNOP付分岐命令であり、かつその分岐条件を満たしている場合に、nopjmp_flagをセットし、分岐フラグレジスタ44に設定する。それ以外の場合には、nopjmp_flagをリセットし、分岐フラグレジスタ44に設定する。
命令レジスタ選択部46は、分岐フラグレジスタ44から出力されるnopjmp_flag_regがセットされていれば、命令レジスタ40にNOP命令を格納する。また、分岐フラグレジスタ44から出力されるnopjmp_flag_regがリセットされていれば、命令フェッチ部31によってフェッチされた命令を命令レジスタ40に格納する。
NOP命令解析部48は、命令レジスタ40に格納される命令がNOP命令のときに、プロセッサの各部にNOP制御を行なう指令を出力する。
図18は、本発明の第4の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図18(a)に示すプログラムを参照しながら、以下に、図18(b)に示すタイミングチャートの説明を行なう。
サイクルT0において、req信号にHレベルが出力されると、プログラムアドレス生成部30はread_addr信号にプログラムアドレスA0を出力する。
サイクルT1において、プログラムカウンタ45にプログラムアドレスA0が設定されると共に、命令フェッチ部31がプログラムアドレスA0に対応した命令D0(JAN)をフェッチし、その命令をread_data信号に出力する。このサイクルにおいて、プログラムアドレス生成部30は、プログラムアドレスをインクリメントして、read_addr信号にプログラムアドレスA1を出力する。
サイクルT2において、分岐フラグレジスタ44から出力されるnopjmp_flag_reg信号がセットされていないので、命令レジスタ40に命令D0が設定される。分岐命令解析部47は、命令D0のデコードを行なう。命令D0はNOP付分岐命令であり、かつ無条件分岐命令であるので、NOP付分岐命令解析部47は、nopjmp_flagをセットする。このとき、命令フェッチ部31は、プログラムアドレスA1に対応した命令D1(OR)をフェッチする。また、プログラムアドレス生成部30は、read_addr信号に分岐先アドレスであるA10を出力する。なお、“JAN 10”は10番地へのNOP付無条件分岐命令を示す。
サイクルT3において、分岐フラグレジスタ44から出力されるnopjmp_flag_regがセットされているので、命令レジスタ選択部46は命令レジスタ40にNOP命令を設定する。また、分岐命令解析部47は、命令レジスタ40の内容がNOP付分岐命令ではないので、nopjmp_flagをリセットする。
サイクルT4において、命令解析部41は、プログラムアドレスA10に対応した命令D10(ADD)をデコードする。また、命令フェッチ部31は、プログラムアドレスA11に対応した命令D11(JSR 20)をフェッチする。なお、“JSR 20”は、サブルーチン無条件分岐命令を示す。
サイクルT5において、分岐命令解析部47は、プログラムアドレスA11に対応した命令D11をデコードする。また、命令フェッチ部31は、プログラムアドレスA12に対応した命令D12(SUB)をフェッチする。
サイクルT6において、命令解析部41は、プログラムアドレスA12に対応した命令D12をデコードする。また、命令フェッチ部31は、分岐先アドレスであるA20に対応した命令D20(LDR)をフェッチする。なお、“LDR”は、レジスタへのデータロード命令を示す。
サイクルT7において、命令解析部41は、プログラムアドレスA20に対応した命令D20をデコードする。
図19(a)は、本発明の第4の実施の形態におけるプロセッサによって実行されるNOP付条件分岐命令JACCNを含んだプログラムの一例を示す図である。NOP付条件分岐命令“JACCN 103”は、分岐条件を満たせば指定先の103番地の命令へ分岐し、分岐条件を満たさなければ分岐せずに、次の101番地の命令の処理に移る命令である。
図19(b)は、分岐条件を満たす場合のパイプライン処理を説明するための図である。サイクル1において、NOP付条件分岐命令“JACCN 103”がフェッチされる。
サイクル2において、JACCN命令がデコードされると共に、次のADD命令がフェッチされる。このJACCNの命令デコードステージにおいて、分岐条件を満たしているか否かが判定される。
サイクル3において、分岐条件が成立しているため、ADDのデコードステージがキャンセルされ、代わりにNOP命令のデコードステージが挿入される。このサイクルで、分岐先の103番地のSUB命令がフェッチされる。
サイクル4において、SUB命令がデコードされる。そして、以降のサイクルで、このSUB命令およびそれに続く命令の処理が行なわれる。
図19(c)は、分岐条件を満たさない場合のパイプライン処理を説明するための図である。サイクル2までは、図19(b)に示す処理と同様である。サイクル3において、分岐条件が成立しないため、ADDがデコードされる。このサイクルで、次の102番地のOR命令がフェッチされる。
サイクル4において、ADD命令のオペランドが読出され、OR命令がデコードされると共に、SUB命令がフェッチされる。そして、以降のサイクルで、これらの命令の処理が行なわれる。なお、“OR”はOR論理演算命令を示す。
以上説明したように、本実施の形態におけるプロセッサによれば、NOP付分岐命令をサポートするようにしたので、オブジェクトコードのサイズを削減することが可能となった。
また、分岐命令に付加されたNOP命令の処理中は、命令フェッチ部31が命令メモリにアクセスしないようにしたので消費電力の削減を図ることが可能となった。また、NOP命令がNOP付分岐命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
(第5の実施の形態)
本発明の第5の実施の形態におけるプロセッサは、図11に示す第3の実施の形態におけるプロセッサの概略構成と比較して、命令フェッチ部の構成が異なる点のみが異なる。また、本発明の第5の実施の形態における命令デコード部の構成は、図17に示す第4の実施の形態における命令デコード部の構成と同様である。したがって、重複する構成および機能の詳細な説明は繰返さない。
図20は、本発明の第5の実施の形態における命令フェッチ部の構成を示すブロック図である。この命令フェッチ部31は、プログラムカウンタ45と、レジスタ49とを含む。レジスタ49は、プログラムカウンタ45から出力されるread_addr_preregを1クロックだけ遅延して、read_addr_regとして出力する。
本実施の形態のプロセッサにおいては、NOP付分岐命令が命令レジスタ40に設定され、かつ分岐条件が成立したときに、分岐命令解析部47は、nopjmp_flagをセットし、フェッチサイクル数をカウンタの値としてセットする。このフェッチサイクル数は、予め設定されているものとする。
分岐命令解析部47は、分岐命令フラグレジスタ44から出力されるjmp_flag_regがセットされていれば、サイクルに合わせてカウンタの値をデクリメントし、カウンタの値が0となるまでnopjmp_flagをセットする。カウンタの値が0となったときに、分岐命令解析部47は、nopjmp_flagをリセットする。これによって、フェッチサイクルが1よりも大きい場合であっても、必要となるNOPが挿入されるようになる。
図21は、本発明の第5の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図21(a)に示すプログラムを参照しながら、以下に、図21(b)に示すタイミングチャートの説明を行なう。
サイクルT0において、req信号にHレベルが出力されると、プログラムアドレス生成部30はread_addr信号にプログラムアドレスA0を出力する。
サイクルT1において、命令フェッチ部31内のプログラムカウンタ45にプログラムアドレスA0が設定される。
サイクルT2において、命令フェッチ部31内のレジスタ49がread_addr_regにプログラムアドレスA0を出力すると共に、命令フェッチ部31がread_data信号を介してプログラムアドレスA0に対応した命令D0(JAN)をフェッチする。
サイクルT3において、分岐フラグレジスタ44は、nopjmp_flag_regをセットしていないので、命令レジスタ40に命令D0が設定される。分岐命令解析部47は、命令D0のデコードを行なう。命令D0はNOP付分岐命令であり、かつ無条件分岐命令であるので、分岐命令解析部47は、nopjmp_flag_regをセットし、カウンタに2を設定する。このとき、プログラムアドレス生成部30は、read_addr信号に分岐先アドレスであるA10を出力する。
サイクルT4において、分岐フラグレジスタ44から出力されるnopjmp_flag_regがセットされているので、命令レジスタ選択部46は命令レジスタにNOP命令を設定する。また、分岐命令解析部47は、カウンタの値が0ではないので、カウンタの値をデクリメントする。
サイクルT5において、命令レジスタ選択部46は、分岐フラグレジスタ44から出力されるnopjmp_flag_regがセットされているので、命令レジスタ40にNOP命令を設定する。また、分岐命令解析部47は、カウンタの値が0であるので、nopjmp_flagをリセットする。
サイクルT6において、命令解析部41は、プログラムアドレスA10に対応した命令D10(ADD)をデコードする。また、命令フェッチ部31は、プログラムアドレスA11に対応した命令D11(JSR 20)をフェッチする。
サイクルT7において、分岐命令解析部47は、プログラムアドレスA11に対応した命令D11をデコードする。また、命令フェッチ部31は、プログラムアドレスA12に対応した命令D12(SUB)をフェッチする。
サイクルT8において、命令解析部41は、プログラムアドレスA12に対応した命令D12をデコードする。また、命令フェッチ部31は、プログラムアドレスA13に対応した命令D13(MV)をフェッチする。なお、MVは、データ転送命令を示している。
サイクルT9において、命令解析部41は、プログラムアドレスA13に対応した命令D13をデコードする。また、命令フェッチ部31は、分岐先アドレスであるA20に対応した命令D20(LDR)をフェッチする。
サイクルT10において、命令解析部41は、プログラムアドレスA20に対応した命令D20をデコードする。
以上説明したように、本実施の形態におけるプロセッサによれば、複数のNOP命令を含んだNOP付分岐命令をサポートするようにしたので、オブジェクトコードのサイズをさらに削減することが可能となった。
また、分岐命令に付加された複数のNOP命令の処理中は、命令フェッチ部31が命令メモリにアクセスしないようにしたので消費電力の削減を図ることが可能となった。また、NOP命令がNOP付分岐命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
さらには、NOP付分岐命令を実行する場合でも、プログラムカウンタの更新は通常の命令の場合と同様に行なわれるので、分岐が不成立の場合でも分岐命令の直後の命令が遅延なく実行される。
(第6の実施の形態)
本発明の第6の実施の形態におけるプロセッサの概略構成は、図11に示す第3の実施の形態におけるプロセッサの概略構成と比較して、命令デコード部の構成が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令デコード部の参照符号を53として説明する。
図22は、命令デコード部53の詳細を説明するためのブロック図である。この命令デコード部53は、命令レジスタ選択部36と、NOP命令解析部37と、バッファ39と、命令レジスタ40と、命令解析部41と、NOPカウンタ42と、NOPフラグレジスタ43と、分岐フラグレジスタ44および63と、分岐命令解析部55と、OR回路56とを含む。なお、図12に示す命令デコード部32と同様の機能を有する部分については同じ参照符号を付すものとする。
分岐命令解析部53は、命令レジスタ40の内容が分岐命令であるか否かを判定する。命令レジスタ40の内容が分岐命令の場合には、分岐命令解析部55はjmp_flagをセットし、分岐フラグレジスタ44にその値を設定する。また、命令レジスタ40の内容が分岐命令でない場合には、分岐命令解析部55はjmp_flagをリセットし、分岐フラグレジスタ44にその値を設定する。
また、分岐命令解析部55は、命令レジスタ40に格納される命令がNOP付分岐命令であり、かつその分岐条件を満たしている場合に、nopjmp_flagをセットし、分岐フラグレジスタ54にその値を設定する。それ以外の場合には、nopjmp_flagをリセットし、分岐フラグレジスタ54にその値を設定する。
OR回路56は、NOPフラグレジスタ43および54から出力される値の論理和を演算し、その演算結果を命令レジスタ選択部36へ出力する。
図23は、本発明の第6の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図23(a)に示すプログラムを参照しながら、以下に、図23(b)に示すタイミングチャートの説明を行なう。なお、図13に示す第3の実施の形態におけるプロセッサのタイミングチャートと比較して、サイクルT0〜T8の動作は同様である。したがって、重複する動作の説明は繰返さない。
サイクルT9において、分岐命令解析部55は、命令D4をデコードする。命令D4は分岐命令であるので、分岐命令解析部55は、jmp_flagをセットする。また、命令D4はNOP付分岐命令であるので、分岐命令解析部55は、nopjmp_flagをセットする。また、プログラムアドレス生成部30は、read_addr信号に分岐先アドレスA10を出力する。
サイクルT10において、命令レジスタ選択部36は、OR回路56からHレベルが出力されているので、命令レジスタ40にNOPを設定する。また、命令レジスタ40にNOPが設定されているので、jmp_flagおよびnopjmp_flagがリセットされる。命令フェッチ部31は、アドレスA10に対応する命令D10(ADD)をフェッチする。
サイクルT11において、OR回路56からLレベルが出力されているので、命令レジスタ選択部36は、命令レジスタ40に命令D10を設定する。命令解析部41は、命令D10をデコードする。
以上説明したように、本実施の形態におけるプロセッサによれば、連続NOP命令またはNOP付分岐命令に付加されたNOP命令の処理中は、命令フェッチ部31が命令メモリにアクセスしないようにしたので、消費電力の削減を図ることが可能となった。また、NOP命令が1つの連続NOP命令またはNOP付分岐命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
また、条件が成立した場合(分岐する場合)には分岐命令の直後にある連続NOP命令を、通常のNOP命令として処理するようしたので、条件分岐命令の実行時に不要なNOPが挿入されるのを防止することが可能となった。
さらには、NOP付分岐命令を実行する場合でも、プログラムカウンタの更新は通常の命令の場合と同様に行なわれるので、分岐が不成立の場合でも分岐命令の直後の命令が遅延なく実行される。
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
一般的なアセンブラの機能的構成を示すブロック図である。 図1に示すアセンブラに入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。 本発明の第1の実施の形態におけるアセンブラ装置の構成例を示すブロック図である。 本発明の第1の実施の形態におけるアセンブラの機能的構成を示すブロック図である。 本発明の第1の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。 プログラム入力部12に入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。 本発明の第1の実施の形態における命令コードの一例を示す図である。 本発明の第1の実施の形態におけるアセンブラによってアセンブルされるラベル付NOP命令および引数付NOP命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。 本発明の第2の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。 本発明の第2の実施の形態におけるアセンブラによってアセンブルされるラベル付NOP命令および引数付NOP命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。 本発明の第3の実施の形態におけるプロセッサの概略構成を示すブロック図である。 図11に示す命令デコード部32をさらに詳細に説明するためのブロック図である。 本発明の第3の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。 本発明の第3の実施の形態におけるプロセッサによって実行されるNOP付条件分岐命令JACCNを含んだプログラムおよびそのときのパイプライン処理を示す図である。 本発明の第4の実施の形態におけるプロセッサの処理を説明するための図である。 NOP付分岐命令の種類を説明するための図である。 本発明の第4の実施の形態における命令デコード部52の構成を示すブロック図である。 本発明の第4の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。 本発明の第4の実施の形態におけるプロセッサによって実行される条件付分岐命令JACCを含んだプログラムおよびそのときのパイプライン処理の一例を示す図である。 本発明の第5の実施の形態における命令フェッチ部の構成を示すブロック図である。 本発明の第5の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。 本発明の第6の実施の形態における命令デコード部62の詳細を説明するためのブロック図である。 本発明の第6の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。
符号の説明
10 プログラム、11 アセンブラ、12 プログラム入力部、13,23 命令解析部、14 命令コード出力部、15 オブジェクトコード、24 NOP命令解析部、30 プログラムアドレス生成部、31 命令フェッチ部、32,52,53 命令デコード部、33 データ読出し部、34 演算処理部、35 データ書込み部、36,46 命令レジスタ選択部、37,48 NOP命令解析部、38,47,55 分岐命令解析部、39 バッファ、40 命令レジスタ、41 命令解析部、42 NOPカウンタ、43 NOPフラグレジスタ、44,54 分岐フラグレジスタ、45 プログラムカウンタ、49 レジスタ、56 OR回路、61 コンピュータ本体、62 ディスプレイ装置、63 FDドライブ、64 FD、65 キーボード、66 マウス、67 CD−ROM装置、68 CD−ROM、69 ネットワーク通信装置、70 CPU、71 ROM、72 RAM、73 ハードディスク。

Claims (5)

  1. 入力されたプログラムの命令を順次解析し、連続する複数個のノーオペレーション命令を、該複数個のノーオペレーション命令の個数を指定するオペランドをもつ連続ノーオペレーション命令にエンコードする命令解析手段と、
    前記命令解析手段によってエンコードされた命令をオブジェクトコードとして出力する出力手段とを含むアセンブラ。
  2. 前記命令解析手段は、命令がラベルが付されたノーオペレーション命令の場合には、当該命令を前記連続ノーオペレーション命令に含めずにエンコードする、請求項1記載のアセンブラ。
  3. 前記命令解析手段は、命令が引数に相当する個数のノーオペレーションを行なう引数付ノーオペレーション命令の場合には、当該命令を前記連続ノーオペレーション命令に含めずにエンコードする、請求項1または2記載のアセンブラ。
  4. フェッチすべき命令のアドレスを生成するアドレス生成手段と、
    前記アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、
    前記命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、
    前記命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、
    前記命令デコード手段は、デコードする命令が、オペランド指定フィールドを有する連続ノーオペレーション命令である場合、そのオペランド指定フィールドで指定された個数分だけ連続したノーオペレーション命令として処理することができ、
    その連続ノーオペレーション命令の直前にフェッチされた命令が分岐命令であり、かつこの分岐命令による分岐が生じるときには、前記オペランド指定フィールドには依存しない個数のノーオペレーション命令として処理する、プロセッサ。
  5. フェッチすべき命令のアドレスを生成するアドレス生成手段と、
    前記アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、
    前記命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、
    前記命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、
    前記命令デコード手段は、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が成立する場合にはノーオペレーション命令を該ノーオペレーション付分岐命令の後に挿入し、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が不成立の場合にはノーオペレーション命令を挿入しない、プロセッサ。
JP2003388130A 2003-11-18 2003-11-18 プロセッサおよびそのアセンブラ Pending JP2005149297A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2003388130A JP2005149297A (ja) 2003-11-18 2003-11-18 プロセッサおよびそのアセンブラ
US10/841,467 US20050108698A1 (en) 2003-11-18 2004-05-10 Assembler capable of reducing size of object code, and processor for executing the object code
DE102004036293A DE102004036293A1 (de) 2003-11-18 2004-07-27 Assembler, der zur Verringerung der Größe des Zielcodes fähig ist, und Prozessor zum Ausführen des Zielcodes

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003388130A JP2005149297A (ja) 2003-11-18 2003-11-18 プロセッサおよびそのアセンブラ

Publications (2)

Publication Number Publication Date
JP2005149297A true JP2005149297A (ja) 2005-06-09
JP2005149297A5 JP2005149297A5 (ja) 2006-12-21

Family

ID=34567466

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003388130A Pending JP2005149297A (ja) 2003-11-18 2003-11-18 プロセッサおよびそのアセンブラ

Country Status (3)

Country Link
US (1) US20050108698A1 (ja)
JP (1) JP2005149297A (ja)
DE (1) DE102004036293A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008027341A (ja) * 2006-07-25 2008-02-07 Matsushita Electric Ind Co Ltd 命令セットおよび情報処理装置
US20090113403A1 (en) * 2007-09-27 2009-04-30 Microsoft Corporation Replacing no operations with auxiliary code
KR20180031266A (ko) * 2016-09-19 2018-03-28 삼성전자주식회사 전자 장치, vliw 프로세서 및 그 제어 방법들

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04275603A (ja) * 1991-03-01 1992-10-01 Fuji Electric Co Ltd プログラマブル・コントローラ
JPH11306016A (ja) * 1998-04-16 1999-11-05 Japan Radio Co Ltd レジスタ間接分岐命令及び条件付き分岐命令実行方法
JP2001216154A (ja) * 1999-12-30 2001-08-10 Texas Instr Inc <Ti> むき出しのパイプラインを具備するコードのサイズを、nop演算を命令オペランドとしてコード化することで削減するための方法並びに装置
JP2002099348A (ja) * 2000-09-21 2002-04-05 Matsushita Electric Ind Co Ltd クロック制御方法およびクロック制御装置

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61269734A (ja) * 1985-05-23 1986-11-29 Hitachi Ltd マイクロプログラム制御方式
DE3856175T2 (de) * 1987-06-05 1998-12-17 Mitsubishi Electric Corp Digitales Signalverarbeitungssystem in dem ein Prozessor unter Kontrolle eines Hosts auf zwei Befehlsspeicher zugreift
US6253307B1 (en) * 1989-05-04 2001-06-26 Texas Instruments Incorporated Data processing device with mask and status bits for selecting a set of status conditions
JP2761688B2 (ja) * 1992-02-07 1998-06-04 三菱電機株式会社 データ処理装置
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5727194A (en) * 1995-06-07 1998-03-10 Hitachi America, Ltd. Repeat-bit based, compact system and method for implementing zero-overhead loops
US5958044A (en) * 1997-01-24 1999-09-28 Texas Instruments Incorporated Multicycle NOP
US6182211B1 (en) * 1997-07-02 2001-01-30 Matsushita Electric Industrial Co., Ltd. Conditional branch control method
US5970241A (en) * 1997-11-19 1999-10-19 Texas Instruments Incorporated Maintaining synchronism between a processor pipeline and subsystem pipelines during debugging of a data processing system
US6370638B1 (en) * 1997-11-21 2002-04-09 Matsushita Electric Industrial Co., Ltd. Apparatus and method of computer program control in computer systems using pipeline processing
JP3881763B2 (ja) * 1998-02-09 2007-02-14 株式会社ルネサステクノロジ データ処理装置
US6553488B2 (en) * 1998-09-08 2003-04-22 Intel Corporation Method and apparatus for branch prediction using first and second level branch prediction tables
US6564316B1 (en) * 1998-09-10 2003-05-13 Parthusceva Ltd. Method and apparatus for reducing code size by executing no operation instructions that are not explicitly included in code using programmable delay slots
US20060168431A1 (en) * 1998-10-14 2006-07-27 Peter Warnes Method and apparatus for jump delay slot control in a pipelined processor
JP3842474B2 (ja) * 1999-02-02 2006-11-08 株式会社ルネサステクノロジ データ処理装置
US6367071B1 (en) * 1999-03-02 2002-04-02 Lucent Technologies Inc. Compiler optimization techniques for exploiting a zero overhead loop mechanism
US6275929B1 (en) * 1999-05-26 2001-08-14 Infineon Technologies Ag L. Gr. Delay-slot control mechanism for microprocessors
US6691240B1 (en) * 1999-12-30 2004-02-10 Texas Instruments Incorporated System and method of implementing variabe length delay instructions, which prevents overlapping lifetime information or values in efficient way
US6799266B1 (en) * 1999-12-30 2004-09-28 Texas Instruments Incorporated Methods and apparatus for reducing the size of code with an exposed pipeline by encoding NOP operations as instruction operands
US6889320B1 (en) * 1999-12-30 2005-05-03 Texas Instruments Incorporated Microprocessor with an instruction immediately next to a branch instruction for adding a constant to a program counter
US6834338B1 (en) * 2000-02-18 2004-12-21 Texas Instruments Incorporated Microprocessor with branch-decrement instruction that provides a target and conditionally modifies a test register if the register meets a condition
US6738893B1 (en) * 2000-04-25 2004-05-18 Transmeta Corporation Method and apparatus for scheduling to reduce space and increase speed of microprocessor operations
US7178013B1 (en) * 2000-06-30 2007-02-13 Cisco Technology, Inc. Repeat function for processing of repetitive instruction streams
JP2002342075A (ja) * 2001-05-11 2002-11-29 Mitsubishi Electric Corp マイクロプロセッサ
US20040034759A1 (en) * 2002-08-16 2004-02-19 Lexra, Inc. Multi-threaded pipeline with context issue rules
US7185177B2 (en) * 2002-08-26 2007-02-27 Gerald George Pechanek Methods and apparatus for meta-architecture defined programmable instruction fetch functions supporting assembled variable length instruction processors
US7143269B2 (en) * 2003-01-14 2006-11-28 Ip-First, Llc Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04275603A (ja) * 1991-03-01 1992-10-01 Fuji Electric Co Ltd プログラマブル・コントローラ
JPH11306016A (ja) * 1998-04-16 1999-11-05 Japan Radio Co Ltd レジスタ間接分岐命令及び条件付き分岐命令実行方法
JP2001216154A (ja) * 1999-12-30 2001-08-10 Texas Instr Inc <Ti> むき出しのパイプラインを具備するコードのサイズを、nop演算を命令オペランドとしてコード化することで削減するための方法並びに装置
JP2002099348A (ja) * 2000-09-21 2002-04-05 Matsushita Electric Ind Co Ltd クロック制御方法およびクロック制御装置

Also Published As

Publication number Publication date
DE102004036293A1 (de) 2005-06-23
US20050108698A1 (en) 2005-05-19

Similar Documents

Publication Publication Date Title
JPH0628185A (ja) 2つのコンピュータ命令を並列に実行できるコンピュータ装置
US20160259643A1 (en) Confidence-driven selective predication of processor instructions
JP2006313422A (ja) 演算処理装置及びデータ転送処理の実行方法
KR20080014062A (ko) 마이크로프로세서에서의 효율적인 서브프로그램 복귀
EP2461246B1 (en) Early conditional selection of an operand
JP2009059246A (ja) マイクロプロセッサ
US6871343B1 (en) Central processing apparatus and a compile method
JP4134179B2 (ja) ソフトウエアによる動的予測方法および装置
US20150227371A1 (en) Processors with Support for Compact Branch Instructions &amp; Methods
US6799266B1 (en) Methods and apparatus for reducing the size of code with an exposed pipeline by encoding NOP operations as instruction operands
JP2006517322A (ja) パイプライン化ディジタルプロセッサにおけるハザード検出および管理のための方法および装置
JP4607958B2 (ja) プロセッサおよびプログラム変換装置
US6209080B1 (en) Constant reconstruction processor that supports reductions in code size and processing time
Kiat et al. A comprehensive analysis on data hazard for RISC32 5-stage pipeline processor
US7543135B2 (en) Processor and method for selectively processing instruction to be read using instruction code already in pipeline or already stored in prefetch buffer
JP2005149297A (ja) プロセッサおよびそのアセンブラ
JP2006053830A (ja) 分岐予測装置および分岐予測方法
JP5068529B2 (ja) 時間−静止型プロセッサにおけるゼロ−オーバヘッドのブランチング及びルーピング
JP2002024008A (ja) データ処理装置およびプログラム変換装置
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
US9135006B1 (en) Early execution of conditional branch instruction with pc operand at which point target is fetched
JP4006887B2 (ja) コンパイラ、プロセッサおよび記録媒体
JP2004355477A (ja) マイクロプロセッサ
JPH1196001A (ja) プログラム実行装置及びプログラム変換方法
Hussain et al. Design and FPGA Implementation of Five Stage Pipelined RISC-V Processor

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061108

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061108

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090105

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091201

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100406