JP3595269B2 - 命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体 - Google Patents

命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体 Download PDF

Info

Publication number
JP3595269B2
JP3595269B2 JP2001028234A JP2001028234A JP3595269B2 JP 3595269 B2 JP3595269 B2 JP 3595269B2 JP 2001028234 A JP2001028234 A JP 2001028234A JP 2001028234 A JP2001028234 A JP 2001028234A JP 3595269 B2 JP3595269 B2 JP 3595269B2
Authority
JP
Japan
Prior art keywords
address
instruction
program counter
relative value
bit
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.)
Expired - Lifetime
Application number
JP2001028234A
Other languages
English (en)
Other versions
JP2001236235A (ja
Inventor
秀一 高山
一 小川
謙一 川口
信生 檜垣
謙介 小谷
哲也 田中
信哉 宮地
岳人 瓶子
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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2001028234A priority Critical patent/JP3595269B2/ja
Publication of JP2001236235A publication Critical patent/JP2001236235A/ja
Application granted granted Critical
Publication of JP3595269B2 publication Critical patent/JP3595269B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、コンパイラ装置、最適化装置、アセンブラ装置、リンカ装置、デバッガ装置、及び逆アセンブラ装置に関し、読み出した命令の単位と無関係な単位で命令を実行するプロセッサを対象としたコンパイラ装置、最適化装置、アセンブラ装置、リンカ装置、デバッガ装置、及び逆アセンブラ装置に関する。
【0002】
【従来の技術】
一般に、プロセッサは、プログラムカウンタに基づき、命令をメモリから読み出し、実行する。図43は、プロセッサの基本構成の例を示すブロック図である。
命令メモリ4301は、プログラムを構成する命令列を記憶している。ここで、1命令は、8ビット長とし、4個の命令を1つの命令パケットとする。
【0003】
プログラムカウンタ4300は、命令メモリ4301内での命令パケットのアドレスを指定する。
命令読み出し部4302は、プログラムカウンタ4300により指定される命令パケットを命令メモリ4301から読み込む。
命令実行部4303は、読み出された命令パケットに含まれる4つの命令のすべてを1サイクル内で実行する。
【0004】
このように、一般にプロセッサは、1つのプログラムカウンタによって指定される命令パケットを読み込み、読み出した4個の命令を1サイクルで実行することができる。
【0005】
【発明が解決しようとする課題】
しかしながら、このようなプロセッサでは、読み込んだ命令パケット内のすべての命令を1サイクルの実行単位としているため、1つの命令パケット中に、I/Oやメモリ等のリソースが利用できない理由で実行できない命令が1つでもあると、そのリソースが利用できるようになるまで、その命令パケット内のすべての命令の実行が待たされることになる。その結果、このようなプロセッサは、命令の実行速度が遅い。
【0006】
そこで、本発明はかかる問題点に鑑み、命令の読み出しと命令の実行の単位が異なるプログラムを実行できるプロセッサ及びそのようなプログラムを作成できるプログラム開発環境を提供することを目的とする。
【0007】
【課題を解決するための手段】
上記目的を達成するために、本発明は、1バイトデータをメモリの1単位データとして命令を格納するメモリからプログラムカウンタの値に基いて命令を読み出し、実行するプロセッサにおいて、前記メモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データの前記メモリ内の格納位置を指定する値を保持する第1のプログラムカウンタと、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定する値を保持する第2のプログラムカウンタとを備える。
【0008】
また、本発明は、命令列から最適化コードを生成する命令列最適化装置であって、前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスを付与するアドレス付与手段と、前記命令列から、特定の1つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出手段と、前記特定の2つの命令のアドレスの差分に解決すべきラベルが検出された場合に、前記特定の2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記特定の1つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の1つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の2つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換手段と、前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成手段とを備える。
【0009】
また、本発明は、オブジェクトコード中の命令のアドレスを指定して、そのアドレスで特定される命令のアセンブラ名を出力する逆アセンブラであって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、前記特定される命令がプログラムカウンタ相対値を含む命令である場合に、前記特定される命令中からプログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、ラベルの位置を示すラベルアドレスとラベル名とを対応させて記憶する記憶手段と、前記指定した命令のアドレスとプログラムカウンタ相対値とを加算し、加算結果をラベルアドレスとするラベルアドレス算出手段と、前記記憶手段を参照して、前記算出したラベルアドレスに対応するラベル名を検索する検索手段とを備える。
【0010】
また、本発明は、ソースコードから命令列を生成するコンパイラ装置であって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成する。
【0011】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて説明する。
(第1の実施形態)
第1の実施形態は、命令の読み出しの単位と命令の実行の単位とが異なるプログラムを生成する最適化装置、アセンブラ装置、リンカ装置とそのプログラムを実行するプロセッサに関する。
(プロセッサが実行する命令のフォーマット)
まず、本実施の形態に係るプロセッサが実行する命令のフォーマットについて説明する。
【0012】
図1(a)〜図1(e)は本実施の形態のプロセッサが実行する命令のフォーマットを示す図である。プロセッサが実行する命令は21ビットを1単位(1ユニット)として構成される。命令には、1つのユニットで構成される21ビット命令(1ユニット命令)と2つのユニットで構成される42ビット命令(2ユニット命令)の2種類の命令が存在する。(以下、「命令」とは、21ビット命令又は42ビット命令のいずれかを指す)。
【0013】
1ビットのフォーマット情報101は、その命令がいずれの長さの命令であるかを示す。具体的には、フォーマット情報101が“0”の時には、そのフォーマット情報101が含まれるユニットで1つの命令、すなわち、21ビット命令を構成する。フォーマット情報101が“1”の時には、そのフォーマット情報101が含まれるユニットと後続するユニットで1つの命令、すなわち、42ビット命令を構成する。
【0014】
1ビットの並列実行境界情報100は、その命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示す。具体的には、並列実行境界情報100が“1”の時には、その並列実行境界情報100が含まれる命令と後続命令の間に並列実行の境界が存在し、これらの命令は異なるサイクルにおいて実行される。並列実行境界情報100が“0”の時には、並列実行境界情報100が含まれる命令と後続命令の間に並列実行の境界が存在せず、これらの命令は同一のサイクルにおいて実行される。
【0015】
フォーマット情報101と並列実行境界情報100以外の部分は、オペレーションを示す。すなわち、21ビット命令では19ビットの長さで、42ビット命令では40ビットの長さでオペレーションが指定される。具体的には、“Op1”、“Op2”、“Op3”、“Op4”のフィールドは、オペレーションの種類を表すオペコードを、“Rs”のフィールドは、ソースオペランドとなるレジスタのレジスタ番号を、“Rd”のフィールドは、デスティネーションオペランドとなるレジスタのレジスタ番号を示す。また、“imm5”及び“imm32”のフィールドは、それぞれ5ビットと32ビットの演算用定数オペランドを示す。そして、“disp13”及び“disp32”のフィールドは、それぞれ13ビットと32ビットの偏位(ディスプレースメント)を示す。
【0016】
32ビットの定数などの長い定数を扱う転送命令や演算命令、大きなディスプレースメントを指定する分岐命令は42ビット命令で定義され、それらを除くほとんどの命令は21ビット命令で定義される。42ビット命令の構成要素である2つのユニットのうち、後ろのユニットには、長い定数やディスプレースメントの一部のみが配置され、オペコードは配置されない。
(プロセッサの命令の読み出しと実行の動作)
次に、本実施の形態のプロセッサによる命令の読み出しと実行の動作について説明する。本実施の形態のプロセッサは、静的な並列スケジューリングを前提としたプロセッサである。図2(a)は、命令の格納、及び読み出し単位である命令パケットを示す図である。命令パケットは、3個のユニット(63ビット)とダミーデータ(1ビット)で構成される。プロセッサは、1サイクルにおいて、64ビットの固定長(以下、「パケット」と呼ぶ)で命令を読み出す。つまり、1つの命令は21ビット単位であり、メモリからの読み出しに不便であるので、命令を複数個組み合わせたバイト単位の命令パケットを読み出しの単位としている。また、この例のように、命令パケット内のユニットの個数が2の巾乗数でない場合に、特に効果がある。後述するように、命令パケット内のユニットの位置を通常の2進数で表すと都合が悪いからである。以下、1パケットを構成する3個のユニットを、アドレス値の小さい方から順に第1ユニット、第2ユニット、第3ユニットと呼ぶことにする。
【0017】
図2(b)は、命令の読み出しの順序を示す図である。図に示すように、命令の読み出しは、各サイクル、1パケットである。
図2(c)は、命令の実行の順序を示す図である。図に示すように、1サイクルで実行する命令の単位は、並列実行の境界までである。つまり、各サイクルにおいて並列実行境界情報100が“1”である命令までの命令を並列実行する。読みだされながら実行されなかったユニットは、命令バッファに蓄積され、次のサイクル以降で実行される。
【0018】
以上のように、本実施の形態のプロセッサは、固定長のパケット単位で命令を読み出し、各サイクルにおいて並列度に応じた適切な数のユニットを実行するものである。このように、本実施の形態のプロセッサは、命令パケット内の先頭の命令以外の命令でも、1サイクルの実行開始位置にすることができるのは、後述するように命令パケット内の命令の位置を指定する“パケット内アドレス”(下位PC)によるものである。
【0019】
また、本実施の形態のプロセッサは、バイトアラインされていない命令、すなわち、語長がバイト単位でない命令を実行するのに、特に適しているという特徴をもつ。つまり、バイト単位の長さをもたない命令であっても、バイト単位の長さをもつ命令パケットの単位でプロセッサ内に読み込めば、命令パケット内でのその命令はパケット内アドレスによって指定できるからである。
【0020】
図3は、一般のプロセッサで、バイトアラインされていない命令を実行する場合の命令の格納、読み出し方法の例を示す。命令が21ビットとバイトアラインされていない場合には、その命令をバイト単位で読み出しできるようにするため、その命令に3ビットの未使用領域を付加して、24ビット長とする。すなわち、本来21ビット長である1つの命令が24ビットを単位としてメモリに格納され、読み出しがなされる。この場合では、3つの命令の長さは72ビット長となるのに対して、本実施の形態では、3つの命令の長さは64ビット長であり、プログラムサイズを小さく抑えることができる。
【0021】
なお、本実施の形態では、命令の語長が21ビット単位である場合のパケットの構成について説明しているが、これに限定するものでなく、その他の語長をもつ命令に対しても、パケットを構成して、パケット単位で命令を読み出すことができる。例えば、命令の語長がnビット単位である場合には、(n×m+r)mod8=0であって、n×m/(n×m+r)を最大にするようなmとrの組合わせを選択し、1パケットをnビットの命令単位がm個とrビットのダミーデータで構成することとしてもよい。これによって、ダミーデータの比率が小さな、バイト単位の長さをもつ命令パケットを構成することができる。
(命令のアドレスの表現方法)
次に、本実施の形態における命令のアドレスの表現方法について説明する。命令のアドレスは、ユニットの位置を特定するアドレスを意味し、32ビットで表現される。
【0022】
32ビット中の上位29ビットは、命令パケットを特定し、「パケットアドレス」と呼ぶ。「パケットアドレス」は、16進数29ビットの29’h01234567等で表記することとする。この「パケットアドレス」の値を左へ3ビット分ビットシフトした値は、命令パケットが格納されているメモリアドレスとなる。
【0023】
32ビット中の下位3ビットは、命令パケットに含まれるユニットを特定し、「パケット内アドレス」と呼ぶ。「パケット内アドレス」は、2進数3ビットの3’b001等で表記することとする。パケット内アドレス3’b000は、パケット内の第1ユニットを示し、3’b010パケット内の第2ユニットを示し、3’b100パケット内の第3ユニットを示す。パケット内アドレスは、これに限定するものでない。3個の数値で、3個のユニットを示すこととすれば、他の数値で表現してもよい。
【0024】
また、本実施の形態における命令のアドレスの指定は、1つの命令パケット8バイト分に対して3ビットを割り当てている。従って、本実施の形態における命令のアドレスの指定方法と、一般のプロセッサにおける1バイトごとに1つずつアドレスを割り当てるアドレスの指定方法とでは、上位29ビットで指定されるアドレスは、同一のメモリアドレスを示すことになる。
(プロセッサが実行するオブジェクトコードの作成方法)
本実施の形態に係るプロセッサが実行するオブジェクトコードの作成方法について説明する。
【0025】
まず、本実施の形態において用いるいくつかの用語について説明する。
「PC相対値」とは、2つの命令のアドレスの差分値である。
「ラベル」は、プログラムに含まれるもので、条件分岐や、無条件分岐や、サブルーチンへの分岐や、サブルーチンからのリターンなどの分岐命令の行き先(分岐先)を示すものである。
【0026】
「ラベル」には、「命令のアドレスに解決すべきラベル」と、「PC相対値に解決すべきラベル」がある。「命令のアドレスに解決すべきラベル」は、プログラムがオブジェクトコードに変換される過程で、命令の絶対アドレスにより置き換えられるもので、例えば、メモリからレジスタr1への命令の転送命令「movL2、r1」中のラベルL2が該当する。「PC相対値に解決すべきラベル」は、プログラムがオブジェクトコードに変換される過程で、PC相対値に置き換えられるもので、例えば、PC相対値への無条件分岐命令「braL1」中のラベルL1が該当する。また、別の分類として、ラベルには、「局所ラベル」と「外部ラベル」がある。すなわち、ラベルとラベルを含む命令が同一のモジュール、すなわち、1つの処理機能をもったひとまとまりのサブプログラムに含まれる場合には、そのラベルを「局所ラベル」と呼び、ラベルとラベルを含む命令が、別個のモジュールに含まれる場合には、そのラベルを「外部ラベル」と呼ぶ。
【0027】
図4は、本実施の形態に係るプロセッサが実行するオブジェクトコードが、コンパイラ装置と、最適化装置と、アセンブラ装置と、リンカ装置により作成される過程を示す図である。ここでは、それぞれの機能の概略を説明する。
コンパイラ装置301は、C言語等の高級言語で書かれたソースコード300の内容を解析し、アセンブラコード302を出力する。
【0028】
最適化装置303は、アセンブラコード302に仮アドレスを付与し、命令列を3ユニットごとに連結し、その結果である最適化コード304を出力する。その過程において、局所ラベルについては、それぞれPC相対値又は命令のアドレスを算出して、その値に基づき、命令が1ユニットで表されるか2ユニットで表されるかの命令の大きさが決められる。
【0029】
アセンブラ装置305は、最適化コード304より再配置可能番地形式であるリロケータブルコード306を出力する。その過程において、局所ラベルであって、PC相対値に解決すべきラベルは、PC相対値に変換される。
リンカ装置307は、複数のモジュールを結合する。すなわち、複数のリロケータブルコード306を結合して、その結果であるオブジェクトコード308を出力する。その過程において、未解決なラベルは、PC相対値又は命令のアドレスに変換される。
【0030】
プロセッサ309は、オブジェクトコード308を実行する。
以上のように、高級言語で記述されたプログラムが、コンパイラ装置301と、最適化装置303と、アセンブラ装置305と、リンカ装置307によって、プロセッサが実行可能な形式であるオブジェクトコードに変換される。プログラム中のラベルについては、オブジェクトコード生成過程のいずれかにおいて、PC相対値又は命令のアドレスに変換される。すなわち、局所ラベルであって、かつPC相対値に解決すべきラベルのアドレス解決は、アセンブラ装置305によって行われる。局所ラベルであって、かつ命令のアドレスに解決すべきラベルのアドレス解決、及び外部ラベルのアドレス解決は、リンカ装置307によって行われる。
【0031】
以下では、図3に示したプロセッサ309と、リンカ装置307と、アセンブラ装置305と、最適化装置303について、その構成及び動作の詳細を説明する。
(プロセッサ)
図5は、プロセッサ309及び外部メモリの詳細を示すブロック図である。
【0032】
プロセッサ309は、最大3命令を並列実行可能なプロセッサであり、演算器401a〜cと、汎用レジスタ402、上位PC403と、下位PC404と、上位PC演算器411と、下位PC演算器405と、INC412と、命令バッファ408と、プリフェッチ上位カウンタ410と、プリフェッチ下位カウンタ413と、命令デコーダ409a〜409cと、PC相対値セレクタ420と、即値セレクタ421と、オペランドデータバッファ423と、オペランドバッファ422により構成される。外部メモリは、データメモリ406、命令メモリ407より構成される。
【0033】
以下、上位PC403と下位PC404とを合わせてPCと称し、上位PC演算器411と下位PC演算器405とを合わせてPC演算器と称する。
第1演算器401aと、第2演算器401bと、第3演算器401cは、それぞれ1つの演算を実行する。これらの演算器は同時に実行可能である。
汎用レジスタ402は、データ、アドレス等を格納する。
【0034】
上位PC403は、次のサイクルで実行すべき命令群の先頭命令のアドレスの上位29ビット、すなわち、パケットアドレスを保持する。
下位PC404は、次のサイクルで実行すべき命令群の先頭命令のアドレスの下位3ビット、すなわち、パケット内アドレスを保持する。
命令メモリ407は、オブジェクトコード308で表された命令を記憶する。
【0035】
命令バッファ408は、命令メモリ407から読み出した命令を格納する。
第1命令デコーダ409aと、第2命令デコーダ409b、第3命令デコーダ409cは、命令を解読し、解読した命令が実行可能なら、他のプロセッサの構成要素を指示してその命令を実行させる。第1命令デコーダ409aには、命令バッファ408に格納されている先頭の命令が入力され、第2命令デコーダ409bには、その次の命令が入力され、第3命令デコーダ409cには、その次の命令が入力される。命令デコーダ409a〜409cは、ユニットの並列実行境界情報を調べて、そのサイクルにおいて実行可能な命令のみを実行させる。例えば、定数値を演算する命令の場合には、その定数値を即値セレクタ421を介して演算器401aに送って、演算を実行させる。分岐命令の場合には、PC相対値をPC相対値セレクタ420を介して上位PC演算器411及び下位PC演算器405に送って、PCを更新させる。そして、命令デコーダ409a〜409cは、実行されたユニット数を制御信号によりINC412に送りPCを更新させ、実行されたユニット数を制御信号により命令バッファ408に送り、命令バッファ408内の実行されたユニットを消去させる。
【0036】
PC相対値セレクタ420は、命令デコーダ409a〜409cから出力されたPC相対値を上位PC演算器411及び下位PC演算器405へ出力する。
即値セレクタ421は、命令デコーダ409a〜409cから出力された即値を汎用レジスタ402又は演算器401a〜401cへ出力する
INC412は、命令デコーダ409a〜409cからの制御信号により、実行されたユニット数の情報を取得し、その分だけ上位PC403、下位PC404の値をインクリメントする。これによって、次のサイクルで実行すべき命令群の先頭の命令のパケットアドレスが上位PCに設定され、パケット内アドレスが下位PCに設定される。
【0037】
上位PC演算器411及び下位PC演算器405は、それぞれ上位PC403、下位PC404を更新する。命令デコーダ409a〜409cが分岐命令をデコードすると、当該分岐命令に含まれるPC相対値の上位29ビットが上位PC演算器411に送られ、PC相対値の下位3ビットが下位PC演算器405に送られる。下位PC演算器405は、現在の下位PC404の値と、PC相対値の下位3ビットの値とを加算又は減算し、その演算結果を更新値として下位PC404に送る。上位PC演算器411は、現在の上位PC403の値と、PC相対値の上位29ビットの値とを加算又は減算し、その演算結果を更新値として上位PC403に送る。なお、PC演算器の動作、すなわち演算方法については後述する。以上のようにして、分岐命令の実行にあたって、次に実行すべき分岐先命令のパケットアドレスが上位PC403に設定され、パケット内アドレスが下位PC404に設定される。また、上位PC演算器411及び下位PC演算器405は、PC相対値と汎用レジスタ402に格納されているアドレスとの演算により、PCを更新する場合もある。
【0038】
プリフェッチ上位カウンタ410は、命令メモリ407から読み出す命令群の先頭命令のアドレスの上位29ビット、すなわちパケットアドレスを示す。プリフェッチ上位カウンタ410は、通常、1サイクルごとに1つずつその値をインクリメントする。また、1つ前のサイクルで実行された命令が分岐命令である場合には、上述のようにして上位PC403に設定された分岐先の命令のパケットアドレスが上位PC403からプリフェッチ上位カウンタ410に送られ、プリフェッチ上位カウンタ410の値は上位PC403と同一の値に設定される。
【0039】
プリフェッチ下位カウンタ413は、命令メモリ407から読み出す命令群の先頭命令のアドレスの下位3ビット、すなわちパケット内アドレスを指定する。本実施の形態では、プリフェッチ下位カウンタ413は、3’b000に設定するものとする。従って、読み出される命令は命令パケット単位で指定されることになり、1サイクルごとに1パケットが命令メモリ407から命令バッファ408に送られる。
【0040】
データメモリ406は、オペランドデータを格納する。
オペランドデータバッファ423及びオペランドアドレスバッファ422は、データメモリとプロセッサとの間のバッファである。
次に、本実施の形態において最も特徴的である、命令のアドレスのインクリメント方法及び演算方法について説明する。
(命令のアドレスのインクリメント方法)
本実施の形態における命令のアドレスのインクリメント方法について説明する。命令のアドレスのインクリメントは、命令のパケット内アドレスにインクリメント値を加算し、桁上がりがある場合には、その桁上がり数をパケットアドレスに加えることとする。
【0041】
図6は、パケット内アドレスのインクリメントの規則を示すインクリメント表である。図に示すように、命令のアドレスのインクリメントは、パケット内アドレスが3’b000、又は3’b010の場合には、下位3ビットの値に2を加算する。パケット内アドレスが3’b100の場合には、パケットアドレスに桁上がりを発生させて(すなわち上位29ビットの値に1を加算)、下位3ビットの値を3’b000とする。つまり、パケット内アドレスのインクリメントは3’b000,3’b010,3’b100を巡回する3進演算である。例えば、インクリメント値が2で、インクリメント前のパケット内アドレスの値が3’b100であったとすると、インクリメント後のパケット内アドレスは3’b010となり、パケットアドレスに桁上がりが1発生する。
【0042】
このように、本実施の形態では、通常の2進数によりパケット内アドレスを表す必要がない。この点が、特に、命令パケット内のユニットの個数が2の巾乗数でない場合に対して効果的である。つまり、命令パケット内のユニットの個数が2の巾乗数でない場合には、命令パケット内のユニットの位置を通常の2進数で表現しても、ユニットの位置を移動する際に2進数の演算法を用いることができない。しかし、本実施の形態では、パケット内のユニットの位置を特有のm個の数値を用いて表し、ユニットの位置の移動するための演算としてm個の数値が巡回する演算を用いることによって、命令パケット内のユニットの個数が2の巾乗数でない場合にでも、ユニットの位置指定、ユニットの位置の移動のための演算が可能である。
(命令のアドレスの演算方法)
次に、本実施の形態における命令のアドレスの演算方式の一つである桁上がり方式について説明する。命令のアドレスの演算方法には桁上がり方式以外にも、分離方式、絶対位置指定方式、リニアアドレス方式があるが、それらについては後述する。桁上がり方式では、命令のアドレスを上位29ビットと、下位3ビットに分離して演算する。すなわち、パケットアドレスとパケット内アドレスをそれぞれ別々に計算する。ただし、上位ビットの演算の際、下位3ビットの演算で発生した桁上がり数または桁借り数を含めた演算が行われる。
【0043】
まず、プロセッサ309が行う、分岐命令のアドレスとPC相対値とを加算して分岐先命令のアドレスを求める方法について説明する。図5に示す下位PC演算器405は、分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとを加算する。図7(a)は、分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとの加算規則を示す加算表である。図に示すように、下位3ビットの加算は通常の2進演算と異なり、3’b000,3’b010,3’b100を巡回する3進演算である。図に示すような桁上がりが生じる場合には、下位PC演算器405は、上位PC演算器411に桁上がり数を送る。
【0044】
図5に示す上位PC演算器411は、分岐命令のアドレスの上位29ビットとPC相対値の上位29ビットとを加算する。この時、下位PC演算器405の演算で桁上がりが生じた場合には、その桁上がり数も加算する。加算方法は通常の2進演算である。
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果のの下位3ビットが下位PC404に設定され、加算結果の上位29ビットが上位PC403に設定される。
【0045】
次に、最適化装置303、アセンブラ装置305、リンカ装置307が行う、PC相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算方法について説明する。減算は、加算と同様に上位29ビットと下位3ビットに分離して行う。後述の最適化装置303の下位アドレス減算手段907、アセンブラ装置305の下位アドレス減算手段806、リンカ装置307の下位アドレス減算手段706は、分岐先命令のアドレスの下位3ビットから分岐命令のアドレスの下位3ビットを減算する。図7(b)は、分岐先命令のアドレスの下位3ビットと分岐命令のアドレスの下位3ビットとの減算規則を示す減算表である。図に示すように、下位3ビットの減算は通常の2進演算と異なり、3’b000,3’b010,3’b100を巡回する3進演算である。図に示すような桁借りが生じる場合には、下位アドレス減算手段907等は、それぞれ、後述の上位アドレス減算手段910等に桁借り数を送る。
【0046】
後述の最適化装置303の上位アドレス減算手段910と、アセンブラ装置305の上位アドレス減算手段809と、リンカ装置307の上位アドレス減算手段709は、分岐命令のアドレスの上位29ビットと分岐先命令の上位29ビットとを減算する。この時、下位アドレス減算手段907等の演算で桁借りが生じた場合には、その桁借り数も減算する。減算方法は通常の2進演算である。
【0047】
以上により算出された下位3ビットの減算結果を下位3ビットとし、上位29ビットの減算結果を上位29ビットとした値がPC相対値となる。また、プロセッサにより行なわれる分岐命令のアドレスとPC相対値とを減算して分岐先命令のアドレスを求める場合にも、上述と同様の方法により行なわれる。
以上のように、分岐先命令のアドレスと分岐命令のアドレスとの差分よりプログラムカウンタ相対値を算出する最適化装置303、アセンブラ装置305、リンカ装置307と、そのプログラムカウンタ相対値を用いて分岐先命令のアドレスを算出するプロセッサ309とが、どちらも同一の桁上がり方式によるアドレス演算を行うことによって、プロセッサは、分岐命令の実行時にプログラム相対値から分岐先命令のアドレスを誤りなく算出できる。また、この桁上り方式によるアドレス演算は、プログラムカウンタとPC相対値との上位ビットの演算と下位ビットの演算との間に連続性を備えたアドレス演算が可能となる特徴を有する。
(最適化装置)
図8は、図4に示した最適化装置303の構成要素及び入出力データを示すブロック図である。この最適化装置303の詳細について説明する。最適化装置303は、コンパイラ装置301が生成したアセンブラコード302を最適化し、命令列を3ユニットを単位とするパケットに連結し、その結果である最適化コード915を出力する。最適化装置303は、コード最適化手段902と、アドレス付与手段904と、ラベル検出手段905と、下位アドレス減算手段907と、上位アドレス減算手段910と、アドレス差算出手段912と、ラベル情報解決手段914により構成される。
【0048】
コード最適化手段902は、アセンブラコード302の最適化を行い、最適化処理コード903を生成する。コード最適化手段902の処理は、公知の最適化装置による処理と同様であるので、詳細な説明は省略する。
アドレス付与手段904は、コード最適化手段902により得られた最適化処理コード903の各命令のアドレスの予測を行い、各命令に予測したアドレスの付与を行い(以下、このアドレスを「仮アドレス」と呼ぶ)、その結果であるアドレス付与コード916を出力する。
【0049】
ラベル検出手段905は、アドレス付与コード916から「局所ラベル」を検出する。ラベル検出手段905は、検出したラベルが「命令のアドレスに解決すべきラベル」であれば、そのラベルが位置する命令の仮アドレスを取り込む。また、検出したラベルが「PC相対値に解決すべきラベル」であれば、分岐命令の仮アドレスと分岐先命令の仮アドレスを取り込む。そして、ラベル検出手段905は、ラベルを含む命令とそのラベルが解決される値についての情報からなるラベル情報906を出力する。
【0050】
下位アドレス減算手段907と、上位アドレス減算手段910と、アドレス差算出手段912は、ラベル情報906中の「PC相対値に解決すべきラベル」について、PC相対値の算出を行う。
下位アドレス減算手段907は、分岐先命令の仮アドレスの下位3ビットから分岐命令の仮アドレスの下位3ビットを減算し、桁借り数908と下位減算結果909を算出する。
【0051】
上位アドレス減算手段910は、分岐先命令の仮アドレスの上位29ビットから分岐命令の仮アドレスの上位29ビットと下位アドレス減算手段907が算出した桁借り数908とを減算し、上位減算結果911を算出する。
アドレス差算出手段912は、下位アドレス減算手段907が算出した下位減算結果909を下位3ビットとし、上位アドレス減算手段910が算出した上位減算結果911を上位29ビットとするアドレス差913を算出する。
【0052】
ラベル情報解決手段914は、最適化処理コード903中のラベルを含む命令を、アドレス付与手段904が予測し付与したアドレス又は、アドレス差算出手段912が算出したアドレス差913の値から、その値の大きさに応じた命令に変換する。すなわち、ラベルを含む命令は、前記付与アドレスあるいは前記アドレス差の値が13ビット以内で表現できれば21ビット命令に変換され、そうでなければ42ビット命令に変換される。
【0053】
そして、ラベル情報解決手段914は、ラベル解決後の命令列を3ユニットを単位とするパケットに連結し、その結果である最適化コード915を出力する。
次に、最適化装置の動作を具体例を用いて説明する。
図9は、最適化装置の動作手順を示すフローチャートである。
まず、コード最適化手段902は、入力されたアセンブラコード302を最適化し、最適化コード903を生成する。図10は、コード最適化手段902が生成した最適化処理コード903の一部分を示す。図10のいくつかの命令について説明を行う。「L1:movr2,r1」1000は、ラベルL1の位置を示し、レジスタr2からレジスタr1への転送を行う命令である。「jsrf」1001は、関数呼び出しであり、ラベルf(外部ラベル)への相対分岐を行う命令である。ret命令により、このアドレスに再び戻る。「addr0,r4」1002は、レジスタr0とレジスタr4の加算を行い、結果をr4へ格納する命令である。「andr1,r3」1003は、レジスタr1とr3の論理積を取り、結果をr3へ格納する命令である。「movL2,r2」1004は、ラベルL2が置かれている命令のアドレスを、レジスタr2に転送する命令である。「ld(r2),r0」1005は、レジスタr2が示すアドレスに格納されているデータをレジスタr0へ転送する命令である。「braL1」1006は、ラベルL1(局所ラベル)への相対分岐を行う命令である。なお、図10において、命令1007に後続する命令が省略してあるが、この後続する命令中には、ラベルfの位置する命令は存在しないこととする(ステップS3901)。
【0054】
次に、アドレス付与手段904は、最適化処理コード903の各命令に対して仮アドレスを付与し、アドレス付与コード916を生成する。図11は、図10の最適化処理コードより生成されたアドレス付与コード916を示す。ここでは、32’h00000800から始まる仮アドレスが割り当てられている(ステップS3902)。
【0055】
ラベル検出手段905は、アドレス付与コード916から局所ラベルの検索を行い、検索されたラベルを含む命令とそのラベルの解決される値についての情報とからなるラベル情報を出力する。図12は、図11のアドレス付与コード916から生成されたラベル情報906を示す。図に示すように、命令のアドレスに解決すべきラベルとして命令1104のL2、PC相対値に解決すべきラベルとして命令1106のL1が検出されている。ラベルL2については、L2を含む命令「movL2,r2」と解決されるアドレスの情報が取り込まれ、ラベルL1については、L1を含む命令「braL1」とPC相対値を計算するための分岐先命令のアドレスと分岐命令のアドレスの情報が取り込まれている。なお、命令1101のラベルfは外部ラベルであるため、最適化の対象外である(ステップS3903、S3904)。
【0056】
ラベル情報906中にPC相対値に解決すべきラベルがある場合には、PC相対値の算出が行なわれる。下位アドレス減算手段907は、PC相対値であるL1が示す値の下位ビットを計算する。下位アドレス減算手段907は、分岐先命令1100の仮アドレス32’h00000800の下位3ビット3’b000から分岐命令1106の仮アドレス32’h00000812の下位3ビット3’b010を減算する。その結果、桁借り数908として1が得られ、下位減算結果909として3’b100が得られる(ステップS3905、S3906)。
【0057】
上位アドレス減算手段910は、PC相対値であるL1が示す値の上位ビットを計算する。上位アドレス減算手段910は、分岐先命令1100の仮アドレスの上位29ビット29’h00000100から分岐命令1106の仮アドレスの上位29ビット29’h00000102と桁借り数908である1を減算する。その結果、上位減算結果911として29’h1ffffffd(10進数では−3を示す。以下、負数は2の補数で表す。)が得られる(ステップS3907)。
【0058】
アドレス差算出手段912は、下位演算結果900を下位ビットとし、上位演算結果911を上位ビットとしたアドレス差、すなわち、PC相対値を算出する。ここでは、3’b100を下位ビットとし、29’h1ffffffdを上位ビットして、アドレス差913である32’hffffffecが得られる(ステップS3908)。
【0059】
ラベル情報解決手段914は、ラベル情報906のラベルが解決される値が13ビットで表現できるか否かにより、ラベルを含む命令の大きさを決定する。図12に示すラベルL2が解決される値は32’h12345678であり、13ビットで表すことができないので、ラベルL2を含む命令1104は42ビット命令となる。また、ラベルL1が解決される値は32’hffffffecであり、13ビットで表すことが可能なので、ラベルL1を含む命令1106は21ビット命令となる(ステップS3909、S3910、S3911)。
【0060】
さらに、ラベル情報解決手段914は、アドレス付与コード916に基づいて命令列を3ユニットを単位とするパケットに連結する。この際に、ラベルを有する命令については、上記のようにして決定された大きさと一致するようにする。すなわち、21ビット命令については1ユニットを使用し、42ビット命令については2ユニットを使用するものとする。
そして、ラベル情報解決手段914は、パケット化された命令列を最適化コードとして出力する。図13は、図11のアドレス付与コード916から生成された最適化コード915を示す。図13は、一つのパケットを構成する命令が一行に記述され、記号||によりパケット中の命令は区切られている。また、42ビット命令は、()でくくられた命令を後続させることにより、その命令が2つのユニット分の領域を使用することを示している(ステップS3912)。
【0061】
以上のように、桁上がり方式によるアドレス演算を行って予測することにより、桁上がり方式に対応したプロセッサの最適化装置を実現することが可能となる。
なお、アドレス付与手段904において付与された仮アドレスと、アドレス差算出手段912において算出されたPC相対値は、すべてラベルを含む命令のサイズを確定させるために予測された値であって、実際の値とは異なる場合があるので、以降の処理では用いないこととする。
(アセンブラ装置)
図14は、図4に示したアセンブラ装置305の構成及び関連する入出力データを示すブロック図である。このアセンブラ装置305の詳細について説明する。アセンブラ装置305は、最適化装置303が生成した最適化コード304を再配置可能番地形式であるリロケータブルコード306に変換するものである。アセンブラ装置305は、機械語コード生成手段802と、ラベル検出手段804と、下位アドレス減算手段806と、上位アドレス減算手段809と、アドレス差算出手段811と、ラベル情報解決手段813より構成される。
【0062】
機械語コード生成手段802は、最適化コード304をプロセッサ309が実行可能な機械語コード803へ変換する。ただし、値が未解決なラベルについては、変換せずに機械語コード803中に保持する。その際に、機械語コード生成手段802は、各機械語コードに対してパケットアドレスとパケット内アドレスとを付与する。そして、この付与されたアドレスに基づいて、後述のラベルの解決がなされる。
【0063】
ラベル検出手段804は、局所ラベルであって、2つの命令のアドレスの差分、すなわち、PC相対値に解決すべきラベルを検索し、分岐命令のアドレスと分岐先命令のアドレスを取り込む。そして、ラベル検出手段804は、ラベルを含む命令とそのラベルが解決される値についての情報からなるラベル情報805を出力する。
【0064】
ラベル検出手段804で得られたラベル情報805を解決するため、下位アドレス減算手段806と、上位アドレス減算手段809と、アドレス差算出手段811は、以下のようにしてPC相対値の算出を行う。
下位アドレス減算手段806は、分岐先命令のアドレスの下位3ビットから分岐命令のアドレスの下位3ビットを減算し、桁借り数807と下位減算結果808を算出する。
【0065】
上位アドレス減算手段809は、分岐先命令の仮アドレスの上位29ビットから分岐命令の仮アドレスの上位29ビットと下位アドレス減算手段806が算出した桁借り数807とを減算し、上位減算結果810を算出する。
アドレス差算出手段811は、下位アドレス減算手段806が算出した下位減算結果808を下位3ビットとし、上位アドレス減算手段809が算出した上位減算結果810を上位29ビットとするアドレス差812を算出する。
【0066】
ラベル情報解決手段813は、機械語コード803中のラベルを、アドレス差算出手段811が算出したアドレス差812に置換し、その結果であるリロケータブルコード306を出力する。
次に、アセンブラ装置の動作について、最適化装置303が出力した図13の最適化コードをアセンブラ装置305に入力した場合の例を用いて説明する。
【0067】
図15は、アセンブラ装置の動作手順を示すフローチャートである。
まず、機械語コード生成手段802は、最適化コード304をパケットごとにプロセッサ309に対応した機械語コード803へ変換する。ただし、値が未解決なラベルについては、変換せずに機械語コード803中に保持する。そして、機械語コード生成手段802は、各機械語コード803に対して、パケットアドレス(以下、これを「局所パケットアドレス」と呼ぶ)とパケット内アドレスを割り振る。図16は、図13の最適化コードから生成された機械語コード803を示す。なお、実際の機械語コードは、0と1だけのバイナリ形式で表されるが、図16では説明の都合上、ニーモニック形式で示されている。また、各命令の並列実行境界情報100とビットフォーマット情報101もこの段階ですでに明らかになっているが、この図では特に示さない。図16では、29’h00000000から始まるパケットアドレス(局所パケットアドレス)が割り当てられている。また、パケット1300の命令「jsrf」中のラベルfと、パケット1301の命令「movL2,r2」中のラベルL2と、パケット1302の命令「braL1」中のラベルL1は、値が未解決なため、変換されていない(ステップS1500、S1501)。
【0068】
次に、ラベル検出手段804は、機械語コード803中の未解決なラベルの中で、局所ラベルであって、PC相対値に解決すべきラベルを検出して、そのラベルが含まれる命令のアドレス、すなわち、分岐命令のアドレスと、分岐先命令のアドレスを取り込む。そして、ラベル検出手段804は、ラベルを含む命令とそのラベルが解決される値についての情報からなるラベル情報805を出力する。図17は、図16の機械語コードより作成されたラベル情報を示す。局所ラベルであって、PC相対値に解決すべきラベルとしてラベルL1が検出され、分岐命令のアドレスとして、32’h00000012が取り込まれて、分岐先命令のアドレス32’h00000000が取り込まれている(ステップS1502、S1503)。
【0069】
次に、下位アドレス減算手段806は、PC相対値であるL1が示す値の下位ビットを計算する。下位アドレス減算手段806は、分岐先命令1401のアドレス32’h00000000の下位3ビット3’b000から分岐命令1409のアドレス32’h00000012の下位3ビット3’b010を減算する。その結果、桁借り数807として1が得られ、下位減算結果808として3’b100が得られる(ステップS1504)。
【0070】
次に、上位アドレス減算手段809は、PC相対値であるL1が示す値の上位ビットを計算する。上位アドレス減算手段809は、分岐先命令1401のアドレスの上位29ビット29’h00000000から分岐命令1409のアドレスの上位29ビット29’h00000002と桁借り数807である1を減算する。その結果、上位減算結果810として29’h1ffffffd(10進数では−3を示す。以下、負数は2の補数で表す。)が得られる(ステップS1505)。
【0071】
アドレス差算出手段811は、下位減算結果808を下位ビットとし、上位演算結果810を上位ビットとしたアドレス差、すなわち、PC相対値を算出する。この例では、3’b100を下位ビットとし、29’h1ffffffdを上位ビットして、アドレス差812である32’hffffffecが得られる(ステップS1506)。
【0072】
次に、ラベル情報解決手段813は、アドレス差812が下位13ビットで表現できる場合には、そのアドレス差の下位13ビットをPC相対値とし、下位13ビットで表現できない場合には、そのアドレス差をPC相対値として、機械語コード803中のラベルPC相対値に置換する。図16のラベル情報中のラベルL1が解決されるアドレス差は32’hffffffecであり、下位13ビット13’h1fecで表すことが可能なので、図16の機械語コード中のラベルL1は下位13ビットの値に変換される。このようにして機械語コードが変換されて、リロケータブルコードを生成する。図18は、図16の機械語コード803から生成されたリロケータブルコードを示す。図18中の命令1609は、ラベルL1がPC相対値に変換された命令である。図18では、機械語コード803の出力時にすでに明らかになっていた各命令の並列実行境界情報100とビットフォーマット情報101が示され、パケット中の1ビットが未使用ビットになっていることも示されている(ステップS1507、S1508、S1509)。
【0073】
以上のように、桁上がり方式によるアドレス演算を行ってPC相対値を求めることにより、桁上がり方式に対応したプロセッサのアセンブラ装置を実現することが可能となる。
(リンカ装置)
図19は、図4に示したリンカ装置307の構成及び関連する入出力データを示すブロック図である。このリンカ装置307の詳細について説明する。リンカ装置307は、複数のリロケータブルコード701を結合して、各命令のアドレスを決定し、プロセッサ309が実行可能な絶対番地形式であるオブジェクトコード308を出力するものである。リンカ装置307は、コード結合手段702と、再配置情報検出手段704と、下位アドレス減算手段706と、上位アドレス減算手段709と、アドレス差算出手段711と、再配置情報解決手段713とから構成される。
【0074】
コード結合手段702は、入力された複数のリロケータブルコード701の結合を行い、すべての命令のアドレスを決定する。そして、コード結合手段702は、命令のアドレスに解決すべきラベルについては、上記の決定されたアドレスに解決し、その結果である結合コード703を出力する。
再配置情報検出手段704は、PC相対値に解決すべき外部ラベルを検索し、分岐命令のアドレスと分岐先命令のアドレスを取り込む。そして、再配置情報検出手段704は、ラベルを含む命令とそのラベルが解決される値についての情報からなる再配置情報705を出力する。ここで得られた再配置情報を解決するため、下位アドレス減算手段706と、上位アドレス減算手段709と、アドレス差算出手段711は、以下のようにしてPC相対値の算出を行う。
【0075】
下位アドレス減算手段706は、分岐先命令のアドレスの下位3ビットから分岐命令のアドレスの下位3ビットを減算し、桁借り数707と下位減算結果708を算出する。
上位アドレス減算手段709は、分岐先命令のアドレスの上位29ビットから分岐命令のアドレスの上位29ビットと下位アドレス減算手段706が算出した桁借り数707とを減算し、上位減算結果710を算出する。
【0076】
アドレス差算出手段711は、下位アドレス減算手段706が算出した下位減算結果708を下位3ビットとし、上位アドレス減算手段709が算出した上位減算結果710を上位29ビットとするアドレス差712を算出する。
再配置情報解決手段713は、結合コード703中のラベルを、アドレス差算出手段711が算出したアドレス差712に置換し、その結果であるオブジェクトコード308を出力する。
【0077】
次に、リンカ装置の動作について、アセンブラ装置305が出力した図18のリロケータブルコードをリンカ装置307に入力した場合の例を用いて説明する。
図20は、リンカ装置の動作手順を示すフローチャートである。
まず、コード結合手段702は、複数個のリロケータブルコード701を結合する。図22は、図18に示すリロケータブルコード306と、別途生成された図21に示すリロケータブルコードと結合された状態を示す。すなわち、図21に示すリロケータブルコードの先頭のパケットアドレスを29’h00000000とし、図18に示すリロケータブルコードの先頭のパケットアドレスを29’h00000001として、これらの2つのリロケータブルコード結合されている(ステップS2000、S2001)。
【0078】
そして、これによって、すべての命令のアドレスが決定されたことになるので、コード結合手段702は、さらに、命令のアドレスに解決すべきラベルのアドレスを解決して、その結果である結合コード703を出力する。図22に示す命令1810「movL2,r2」のラベルL2のアドレスは、パケット1815の先頭のアドレスである。コード結合手段は、当該アドレスが32’h12345680と決定しているので、ラベルL2をこの値に置き換える。図23は、結合コード703を示す。図23中の結合コード1910は、ラベルL2が32’h12345680に置換えられたことを示す(ステップS2002)。
【0079】
次に、再配置情報検出手段704は、結合コード703中で、PC相対値に解決すべき外部ラベルを検出して、そのラベル含まれる命令のアドレスと、ラベルが置かれている命令のアドレス、すなわち、分岐命令のアドレスと分岐先命令のアドレスを取り込む。そして、再配置情報検出手段704は、ラベルを含む命令とそのラベルが解決される値についての情報からなる再配置情報705を出力する。図24は、図23の結合コードから作成されたラベル情報を示す。PC相対値に解決すべき外部ラベルとしてラベルfが検出され、分岐命令のアドレスとして、32’h0000000aが取り込まれて、分岐先命令のアドレス32’h00000000が取り込まれている(ステップS2003、S2004)。
【0080】
下位アドレス減算手段706は、PC相対値であるfが示す値の下位ビットを計算する。下位アドレス減算手段706は、分岐先命令1901のアドレス32’h00000000の下位3ビット3’b000から分岐命令1906のアドレス32’h0000000aの下位3ビット3’b010を減算する。その結果、桁借り数707として1が得られ、下位減算結果708として3’b100が得られる(ステップS2005)。
【0081】
次に、上位アドレス減算手段709は、PC相対値であるfが示す値の上位ビットを計算する。上位アドレス減算手段709は、分岐先命令1901のアドレス32’h00000000の上位29ビット29’h00000000から分岐命令1906のアドレス32’h0000000aの上位29ビット29’h00000001と桁借り数707である1を減算する。その結果、上位減算結果710として29’h1ffffffeが得られる(ステップS2006)。
【0082】
アドレス差算出手段811は、下位減算結果708を下位ビットとし、上位演算結果710を上位ビットとしたアドレス差、すなわち、PC相対値を算出する。3’b100を下位ビットとし、29’h1ffffffeを上位ビットして、アドレス差712である32’hfffffff4が得られる(ステップS2007)。
【0083】
次に、再配置情報解決手段713は、アドレス差712が下位13ビットで表現できる場合には、そのアドレス差の下位13ビットをPC相対値とし、下位13ビットで表現できない場合には、そのアドレス差をPC相対値として、結合コード703中のラベルをPC相対値に置換する。図23の再配置情報中のラベルfが解決されるアドレス差は32’hfffffff4であり、下位13ビット13’h1ff4で表すことが可能なので、図22の結合コード中のラベルfは下位13ビットの値に変換される。このようにして結合コードが変換されて、オブジェクトコードが生成される。図25は、オブジェクトコードを示す。図25中、オブジェクトコード2106は、ラベルfがPC相対値に変換されていることを示している(ステップS2008、S2009、S2010)。
【0084】
以上のように、桁上がり方式によるアドレス演算を行ってPC相対値を求めることにより、桁上がり方式に対応したプロセッサのリンカ装置を実現することが可能となる。
(プロセッサの具体的動作)
プロセッサの動作について、図25のオブジェクトコードが命令メモリ407に蓄えられている場合の例を用いて説明する。
【0085】
オブジェクトコードの実行開始時には、上位PC403は、29’h00000000に、下位PC404は、3’b000に設定されている。プリフェッチ上位カウンタ410は、上位PC403からの入力を受けて、29’h00000000に設定されている。
命令メモリ407から命令の読み出しは、プリフェッチ上位カウンタ410に基づき、パケット単位で行なわれる。すなわち、命令メモリ407に蓄えられた命令列のうち、プリフェッチ上位カウンタ410により指定されるパケット2100が、命令バッファ408に格納される。プリフェッチ上位カウンタ410の値は、1サイクルごとに1つずつインクリメントされるので、29’h00000001となる。以下、1サイクルごとに、プリフェッチ上位カウンタ410が指定するパケットが命令メモリ407から命令バッファ408へ読み出される。
【0086】
次に、上位PC403によりパケット2104が指定され、さらに下位PC404によりパケット2104中の命令2107が指定されている時の、命令の解読と実行の動作について説明する。命令バッファ408に格納された命令は、命令デコーダ409a〜409cにより解釈される。第1命令デコーダ409aは、命令バッファ408に格納されている先頭のユニット2107を取り込み、そのユニットが1ユニット命令であるか、並列実行境界であるかを調べる。ユニット2107が1ユニット命令であり、並列実行境界でないので、第2命令デコーダ409bは、次のユニット2109を取り込み、そのユニットが1ユニット命令であるか、並列実行境界であるかを調べる。ユニット2109が1ユニット命令であり、並列実行境界ではないので、第3命令デコーダ409cは、次のユニットを取り込む、そのユニットが1ユニット命令であるか、並列実行境界であるかを調べる。そのユニットが1ユニット命令でないので、第3命令デコーダ409cは、次のユニットも取り込む。そして、第3命令デコーダ409cは、そのユニットが並列実行境界であることを知る。以上によって、命令2107、命令2109、命令2110が同時並列実行可能であることがわかる。
【0087】
第1命令デコーダ409aは、命令「addr0,r4」をデコードし、制御信号を第1演算器401aに出力する。第1演算器401aは、レジスタr0とレジスタr4の値を加算し、その結果をレジスタr4へ格納する。第2命令デコーダ409bは、命令「andr1,r3」をデコードし、制御信号を第2演算器401bに出力する。第2演算器401bは、レジスタr1とレジスタr3の値の論理演算が行い、その結果をレジスタr3へ格納する。第3命令デコーダ409cは、命令「mov32’h12345680,r2」をデコードし、即値である32’h12345680を、レジスタr2に転送する。
【0088】
また、命令デコーダ409a〜409cは、この例では4つのユニットを実行したことを、制御信号によりINC412に知らせる。INC412は、4つのユニット分だけ、上位PC403及び下位PC404の値をインクリメントする。以上の結果、下位PC404は3’b000となり、上位PC403は桁上がりが2つ起こり29’h00000003となり、次のサイクルで実行する先頭命令は命令2112となる。
【0089】
次に、第1命令デコーダ409aは、命令バッファ408に格納されている先頭のユニット2112を取り込み、そのユニットが1ユニット命令であるか、並列実行境界であるかを調べる。ユニット2112が1ユニット命令であり、並列実行境界でないので、第2命令デコーダ409bは、次のユニット2113を取り込み、そのユニットが1ユニット命令であるか、並列実行境界であるかを調べる。第2命令デコーダ409bは、ユニット2113が1ユニット命令であり、並列実行境界であること知る。以上によって、命令2112、命令2113が同時並列実行可能であることがわかる。
【0090】
第1命令デコーダ409aは、命令「ld(r2),r0」がデコードし、レジスタr2の値をオペランドアドレスとするオペランドデータをデータメモリ406中から取り込み、レジスタr0へ格納する。第2命令デコーダ409bは、命令「bra13’h1fec」をデコードし、命令2113が分岐命令であるので、上位PC403及び下位PC404を分岐先命令のアドレスに更新する。
【0091】
まず、上位PC403及び下位PC404の指定するアドレスを補正する。PC相対値は、分岐命令から分岐先命令とのアドレスの差であるのに対して、上位PC403及び下位PC404はそのサイクルで実行する先頭の命令のアドレスを指定しており、整合性が取れていないので、上位PC403及び下位PC404を分岐命令のアドレスを指定するように補正する。すなわち、INC412は、実行単位の先頭命令2112から分岐命令2113までに存在するユニット数1だけ上位PC403及び下位PC404の値をインクリメントする。その結果、上位PCが29’h00000003となり、下位PCが3’b010となる。
【0092】
次に、上位PC演算器411及び下位PC演算器405は、上記により補正された上位PC403及び下位PC404の値と、第2命令デコーダ409bから得られたPC相対値13’h1fecとを加算する。ここで、PC相対値は、32ビットに符号拡張した値32’hffffffecを用いる。加算は、上位29ビットと下位3ビットに分離して行われる。
【0093】
下位PC演算器405は、下位PC3’b010とPC相対値の下位3ビット3’b100を加算する。その結果、桁上がり数1と下位演算結果3’b000が得られ、桁上がり数は上位PC演算器411に送られ、下位演算結果は下位PC404に転送される。
次に、上位PC演算器411は、上位PC29’h00000003と、PC相対値の上位29ビット29’h1ffffffdと、桁上がり数1とを加算する。上位演算結果29’h00000001は上位PC403に転送されるとともに、上位PCからプリフェッチ上位カウンタ410に転送される。以上の処理により、プリフェッチ上位カウンタ410は29’h00000001となり、次にプリフェッチするパケットは、パケット2104となる。また、上位PC403は29’h00000001で、下位PC404は3’b000となり、次のサイクルで実行する先頭命令は命令2105となる。
【0094】
以下、同様にして、オブジェクトコードが順次、読み込まれ、実行されてゆく。以降の命令の説明については省略する。
以上、図4に示したプロセッサ309、リンカ装置307、アセンブラ装置305、最適化装置303についてその構成の詳細を記した。なお、コンパイラ装置301については、公知のコンパイラ装置の構成と同様であるため、詳細な説明は省略する。
【0095】
なお、本実施の形態のプロセッサは、3個の命令デコーダ409a、409b、409cと3個の演算器401a、401b、401cを備えているものとしたが、これに限定するものでなく、1個の命令デコーダと、1個の演算器を有するものとしてもよい。
また、最適化装置303の機能をコンパイラ装置301に取り込んで、コンパイラ装置301と、アセンブラ装置305と、リンカ装置307によって、ソースコード300からオブジェクトコード308を生成することとしてもよい。
【0096】
また、本実施の形態では、プリフェッチ下位カウンタ413は、常時3’b000に設定するものとしたが、これに限定するものではなく、例えば、1サイクルごとに1ずつインクリメントすることととしてもよい。この場合には、1サイクルごとに1バイトデータが命令メモリ407から命令バッファ408に読み出されることになる。
(第2の実施形態)
第2の実施形態は、分岐命令中のラベルが解決されるPC相対値として、第1の実施形態と異なるものを用いたプロセッサ及び、最適化装置、アセンブラ装置、リンカ装置に関する。
【0097】
第1の実施形態では、分岐命令のPC相対値は、分岐先命令のアドレスと分岐命令のアドレスとの差分値であったが、本実施の形態では、分岐命令のPC相対値は、分岐先命令のアドレスと実行単位の先頭アドレスとの差分値とする。
本実施の形態では、第1の実施形態とPC相対値の意味づけが異なる。しかし、プログラム生成側、すなわち、プログラム相対値を算出する最適化装置、アセンブラ装置、リンカ装置と、プログラム実行側、すなわち、プログラム相対値からもとのアドレスを算出するプロセッサとで、PC相対値を同一の意味で用いることとすれば、プロセッサは、分岐命令の実行時に、正しく分岐先命令にプログラムカウンタの値を移行させることができる。
【0098】
まず、本実施の形態の最適化装置303、アセンブラ装置305、リンカ装置307、プロセッサ309について説明する。
最適化装置303のラベル検出手段905は、「PC相対値に解決すべきラベル」については、第1の実施形態で分岐命令の仮アドレスと分岐先命令の仮アドレスを取り込んでラベル情報を作成した代わりに、分岐先命令の仮アドレスとその分岐命令と同一の実行単位に属する命令群の先頭の命令のアドレスを取り込んでラベル情報906を作成する。このラベル情報906から、第1の実施形態と同様にして、2つの仮アドレスの差であるアドレス差913が算出され、最適化コード915が算出される。アセンブラ装置、リンカ装置についても同様である。
【0099】
本実施の形態により、オブジェクトコードが生成される具体例を示す。
アセンブラ装置305は、図16の機械語コード中の命令1409のラベルL1を、分岐先命令のアドレス32’h00000000から命令1409の実行単位の先頭である命令1408のアドレス32’h00000010を減算した減算値13’h1ff0に置き換える。リンカ装置307も、同様に、図23の結合コード中の命令1906のラベルfを、分岐先アドレス32’h00000000から命令1906の実行単位の先頭である命令1907のアドレス32’h00000008を減算した減算値13’h1ff8に置き換える。図26は、このようにして生成されるオブジェクトコードを示す。図26では、命令2206、命令2213のPC相対値が、図25に示すものと異なっていることが示されている。
【0100】
次に、本実施の形態のプロセッサについて説明する。
プロセッサ309は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ309が分岐命令を実行する際に、分岐命令中のPC相対値は、その時の上位PC403及び下位PC404が指定しているアドレスと分岐先命令のアドレスとの差分値である。従って、プロセッサ309は、上位PC403、下位PC404の値を補正する処理をすることなく、第1の実施形態と同様にして、上位PC403の値及び下位PC404の値と分岐命令中のPC相対値とを加算し、加算結果を上位PC403及び下位PC404の値に更新する。プロセッサが図26に示すオブジェクトコードを実行する場合、命令2213の実行の際には、現在のPCの値32’h00000008とPC相対値13’h1ff8とを加算し、加算値32’h00000000にPCを更新する。
【0101】
以上のように、本実施の形態のプロセッサは、分岐命令を実行する際に、第1の実施形態のようなプログラムカウンタの値を補正する処理は不要で、直接、PC相対値とPCの値とを加算することによって分岐先のアドレスが得られるので、実行時間を短縮できる。
(第3の実施形態)
第3の実施形態は、命令のアドレスの下位3ビットを十分に活用して、命令の実行位置を指定できるプロセッサに関する。
【0102】
第1の実施形態では、命令のアドレスの下位3ビットを用いて、3個のユニットの位置を指定することとしたが、本実施の形態では、命令のアドレスの下位3ビットを十分に活用して、8個のユニットの位置を指定するものである。
図27(a)は、本実施の形態の命令パケットの構成を示す図である。命令パケットは、8個のユニットで構成される。命令パケットの1個のユニットは8ビット長であり、命令パケットの長さは64ビット長となる。プロセッサは、1サイクルにおいて、この64ビットの固定長で命令を読み出す。
【0103】
図27(b)は、命令の種類を示す図である。各命令は、8ビットのユニットを単位として構成されており、2ユニット命令、3ユニット命令、5ユニット命令、6ユニット命令が存在する。
図27(c)は、パケット内アドレスと、パケット内アドレスが指定するパケット内のユニットとの関係を示す図である。命令パケット内の位置は、第1の実施形態と同様に、命令のアドレスの下位3ビットで指定される。図に示すように、パケット内アドレスが3’b000なら第1ユニットを指定し、3’b001なら第2ユニットを指定し、3’b010なら第3ユニットを指定し、3’b011なら第4ユニットを指定し、3’b100なら第5ユニットを指定し、3’b101なら第6ユニットを指定し、3’b110なら第7ユニットを指定し、3’b111なら第8ユニットを指定する。
【0104】
以上のように、本実施の形態のプロセッサは、命令の下位アドレスの3ビットを最大限に用いて、命令の実行位置を指定できるので、1サイクルにおける命令の実行単位にバリエーションをもたせることができる。
(第4の実施形態)
第4の実施形態は、桁上りなし方式による命令のアドレスの演算方法に関する。
【0105】
第1の実施形態では、プログラムを実行するプロセッサと、プログラムを作成する最適化装置、アセンブラ装置、リンカ装置のすべてが共通して桁上り方式のアドレスの演算方法を用いることによって、プロセッサでPC相対値から分岐先命令のアドレスを誤りなく再現することができたが、桁上り方式以外のアドレスの演算方法であっても、プロセッサと、最適化装置と、アセンブラ装置と、リンカ装置が共通にその演算方法を用いさえすれば、プロセッサが分岐先命令のアドレスを誤りなく再現できるようなものがある。本実施の形態は、このような他のアドレスの演算方法の一つである桁上りなし方式に関するものである。
【0106】
桁上りなし方式では、命令のアドレスを上位29ビット、下位3ビットに分離して演算する点で、第1の実施形態の桁上がり方式と同じであるが、下位3ビットの演算で桁上がりあるいは桁借りを発生させない点で、桁上がり方式と異なる。
まず、プロセッサ309が行う、分岐命令のアドレスとPC相対値とを加算して分岐先命令のアドレスを求める方法について説明する。図5に示す下位PC演算器405は、分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとを加算する。図28(a)は、本実施の形態に係る桁上りなし方式のアドレス演算による分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとの加算規則を示す加算表である。図に示すように、下位3ビットの加算は通常の2進演算と異なり、3’b000,3’b010,3’b100を巡回する3進演算である。この演算では、桁上がりは発生させない。
【0107】
図5に示す上位PC演算器411は、分岐命令のアドレスの上位29ビットとPC相対値の上位29ビットとを加算する。分岐命令のアドレスの上位29ビットとのPC相対値の上位29ビットとの加算方法は通常の2進演算である。
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果のの下位3ビットが下位PC404に設定され、加算結果の上位29ビットが上位PC403に設定される。
【0108】
次に、最適化装置303、アセンブラ装置305、リンカ装置307が行う、PC相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算方法について説明する。減算は、加算と同様に上位29ビットと下位3ビットに分離して行う。最適化装置303の下位アドレス減算手段907、アセンブラ装置305の下位アドレス減算手段806、リンカ装置307の下位アドレス減算手段706は、分岐先命令のアドレスの下位3ビットから分岐命令のアドレスの下位3ビットを減算する。図28(b)は、本実施の形態に係る桁上りなし方式のアドレス演算による分岐先命令のアドレスの下位3ビットと分岐命令のアドレスの下位3ビットとの減算規則を示す減算表である。図に示すように、下位3ビットの減算は通常の2進演算と異なり、3’b000,3’b010,3’b100を巡回する3進演算である。この演算では、桁借りは発生させない。
【0109】
最適化装置303の上位アドレス減算手段910と、アセンブラ装置305の上位アドレス減算手段809と、リンカ装置307の上位アドレス減算手段709は、分岐命令のアドレスの上位29ビットと分岐先命令の上位29ビットとを減算する。減算方法は通常の2進演算である。
以上により算出された下位3ビットの減算結果を下位3ビットとし、上位29ビットの減算結果を上位29ビットとした値がPC相対値となる。
【0110】
図29は、本実施の形態に係る桁上りなし方式のアドレス演算により生成されたオブジェクトコードを示す。図29では、命令2406と命令2413のPC相対値が、図25のものと異なっている。命令2406のPC相対値の算出法について説明する。
下位アドレス減算手段706は、命令2401の下位3ビットアドレス3’b000から命令2406の下位3ビットアドレス3’b010を、図28(b)に示す減算表に従って減算し、下位減算結果3’b100を得る。
【0111】
上位アドレス減算手段709は、命令2401の上位29ビットアドレス29’h00000000から命令2406の上位29ビットアドレス29’h00000001を減算し、上位減算結果29’h1fffffffを得る。
アドレス差算出手段711は、上位減算結果29’h1fffffffを上位29ビットとし、下位減算結果3’b100を下位3ビットとしたアドレス差32’h1ffffffcを算出する。
【0112】
再配置情報解決手段713は、アドレス差32’h1ffffffcが下位13ビット13’h1ffcで表現できるので、13’h1ffcをPC相対値としてラベルを置換えることによって、命令2406が生成される。
プロセッサ309は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ309は、分岐命令を実行する際に、分岐命令中のPC相対値と、分岐命令のアドレスを指定するように補正した上位PC403及び下位PC404の値とを桁上りなし方式により加算する。
【0113】
プロセッサが図29に示すオブジェクトコード中の命令2406を実行する際には、下位PC演算器405は、補正した下位PC404の値3’b010と、PC相対値の下位3ビット3’b100とを加算して、加算値3’b000に下位PC404を更新し、上位PC演算器411は、補正した上位PC403の値29’h00000001と、PC相対値の上位29ビット29’h1fffffffとを加算して、加算値29’h00000000に上位PC403を更新する。
【0114】
以上のように、桁上りなし方式によるアドレス演算では、下位PC演算器から上位PC演算器に桁上り数又は桁借り数が送られないので、単純なハードウエアによりアドレス演算が実現できる。
(第5の実施形態)
第5の実施形態は、絶対値方式による命令のアドレスの演算方法に関する。
【0115】
絶対値方式では、命令のアドレスを上位29ビット、下位3ビットに分離して演算する点で、第1の実施形態の桁上がり方式と同じであるが、命令の下位3ビットアドレスの値を下位3ビットの演算結果とする点で、桁上がり方式と異なる。
まず、プロセッサ309が行う、分岐命令のアドレスとPC相対値とを加算して分岐先命令のアドレスを求める方法について説明する。図5に示す下位PC演算器405は、分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとを加算する。図30(a)は、本実施の形態に係る絶対値方式のアドレス演算による分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとの加算規則を示す加算表である。図に示すように、PC相対値の下位3ビットが、下位3ビットの加算結果となる。
【0116】
図5に示す上位PC演算器411は、分岐命令のアドレスの上位29ビットとPC相対値の上位29ビットとを加算する。分岐命令のアドレスの上位29ビットとのPC相対値の上位29ビットとの加算方法は通常の2進演算である。
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果の下位3ビットが下位PC404に設定され、加算結果の上位29ビットが上位PC403に設定される。
【0117】
次に、最適化装置303、アセンブラ装置305、リンカ装置307が行う、PC相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算する減算方法について説明する。減算は、加算と同様に上位29ビットと下位3ビットに分離して行う。最適化装置303の下位アドレス減算手段907、アセンブラ装置305の下位アドレス減算手段806、リンカ装置307の下位アドレス減算手段706は、分岐先命令のアドレスの下位3ビットから分岐命令のアドレスの下位3ビットを減算する。図30(b)は、本実施の形態に係る絶対値方式のアドレス演算による分岐先命令のアドレスの下位3ビットと分岐命令のアドレスの下位3ビットとの減算規則を示す減算表である。図に示すように、分岐先命令のアドレスの下位3ビットが、下位3ビットの加算結果となる。
【0118】
最適化装置303の上位アドレス減算手段910と、アセンブラ装置305の上位アドレス減算手段809と、リンカ装置307の上位アドレス減算手段709は、分岐命令のアドレスの上位29ビットと分岐先命令の上位29ビットとを減算する。減算方法は通常の2進演算である。
以上により算出された下位3ビットの減算結果を下位3ビットとし、上位29ビットの減算結果を上位29ビットとした値がPC相対値となる。
【0119】
図31は、本実施の形態に係る絶対値方式のアドレス演算により生成されたオブジェクトコードを示す。図31では、命令2606と命令2613のPC相対値が、図25のものと異なっている。命令2606のPC相対値の算出法について説明する。
下位アドレス減算手段706は、命令2601の下位3ビットアドレス3’b000から命令2606の下位3ビットアドレス3’b010を、図30(b)に示す減算表に従って減算し、下位減算結果3’b000を得る。
【0120】
上位アドレス減算手段709は、命令2601の上位29ビットアドレス29’h00000000から命令2606の上位29ビットアドレス29’h00000001を減算し、上位減算結果29’h1fffffffを得る。
アドレス差算出手段711は、上位減算結果29’h1fffffffを上位29ビットとし、下位減算結果3’b000を下位3ビットとしたアドレス差32’h1ffffff8を算出する。
【0121】
再配置情報解決手段713は、アドレス差32’h1ffffff8が下位13ビット13’h1ff8で表現できるので、13’h1ff8をPC相対値としてラベルを置換えることによって、命令2606が生成される。
プロセッサ309は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ309は、分岐命令を実行する際に、分岐命令中のPC相対値と、分岐命令のアドレスを指定するように補正した上位PC403及び下位PC404の値とを絶対値方式により加算する。
【0122】
プロセッサが図31に示すオブジェクトコード中の命令2606を実行する際には、下位PC演算器405は、補正した下位PC404の値3’b010と、PC相対値の下位3ビット3’b000とを加算して、加算値3’b000に下位PC404を更新し、上位PC演算器411は、補正した上位PC403の値29’h00000001と、PC相対値の上位29ビット29’h1fffffffとを加算して、加算値29’h00000000に上位PC403を更新する。
【0123】
以上のように絶対値方式によるアドレス演算では、下位ビットの演算が不要なので、演算速度を高めることができる。
(第6の実施形態)
第6の実施形態は、リニア方式による命令のアドレスの演算方法に関する。
リニア方式では、他の実施形態と異なり、命令のアドレスを上位29ビットと、下位3ビットに分離せすに計算する。
【0124】
まず、プロセッサが行う、分岐命令のアドレスとPC相対値とを加算して分岐先命令のアドレスを求める方法について説明する。桁上り方式のプロセッサは、上位29ビットのアドレスを演算する上位PC演算器と下位3ビットのアドレスを演算する下位PC演算器を備えていたが、リニア方式のプロセッサは、32ビットのアドレスを演算する1つのPC演算器を備えている。リニア方式のPC演算器は、32ビットの分岐命令のアドレスと32ビットのPC相対値とを加算する。加算方法は通常の2進演算である。
【0125】
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果の下位3ビットが下位PC404に設定され、加算結果の上位29ビットが上位PC403に設定される。
次に、最適化装置303、アセンブラ装置305、リンカ装置307が行う、PC相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算方法について説明する。リニア方式の最適化装置303、アセンブラ装置305、リンカ装置307は、リニア方式のプロセッサと同様に、32ビットのアドレスを演算する1つのアドレス減算手段を備えている。リニア方式のアドレス減算手段は、32ビットの分岐先命令のアドレスから32ビットの分岐命令のアドレスを減算する。減算方法は通常の2進演算である。
【0126】
以上により算出された減算結果がPC相対値となる。
図32は、本実施の形態に係るリニア方式のアドレス演算を用いて生成されたオブジェクトコードを示す。図32では、命令2706と命令2713のPC相対値が、図25のものと異なっていることが示されている。命令2706のPC相対値の算出法について説明する。
【0127】
リニア方式のアドレス減算手段は、命令2701の32ビットアドレス32’h00000000から命令2706の32ビットアドレス32’h0000000aを減算し、アドレス差32’hfffffff6を得る。
再配置情報解決手段713は、アドレス差32’hfffffff6が下位13ビット13’h1ff6で表現できるので、13’h1ff6をPC相対値としてラベルを置換えることによって、命令2706が生成される。
【0128】
プロセッサ309は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ309は、分岐命令を実行する際に、分岐命令中のPC相対値と、分岐命令のアドレスを指定するように補正した上位PC403及び下位PC404の値とをリニア方式により加算する。
プロセッサが図32に示すオブジェクトコード中の命令2706を実行する際には、本実施の形態のPC演算器は、補正した上位PC403の値を上位29ビットとし、補正した下位PC404の値を下位3ビットとした32ビットのPCの値32’h0000000aと、PC相対値32’hfffffff6とを加算して、加算結果32’h00000000を得る。そして、PC演算器は、加算値の下位3ビット3’b000に下位PC404を更新し、加算値の上位29ビット29’h00000000に上位PC403を更新する。
【0129】
以上のように、リニア方式によるアドレス演算では、PC演算器として通常の演算器を用いることができるので、プロセッサの構成を簡易にすることができる。
(第7の実施形態)
第7の実施形態は、PC加算命令及びPC減算命令を解釈、実行するプロセッサ及びこれらの命令を生成するコンパイラ装置に関する。
【0130】
図33は、本実施の形態に係るプロセッサの構成図である。本実施の形態のプロセッサが図5に示す第1の実施形態に係るプロセッサと異なる点は、第2下位PC演算器2800と第2上位PC演算器2802が付加され、第1命令デコーダ2801aと、第2命令デコーダ2801bと、第2命令デコーダ2801cの機能が追加されたところである。
【0131】
命令デコーダ2801aと、2801bと、2801cは、通常の命令に加えて、PC加算命令とPC減算命令も解読する。図34(a)は、PC加算命令のニーモニックとオペレーションの対応を示す。同図に示すように、PC加算命令は、PC相対値dispとレジスタに格納されているPCの値とを加算し、同一のレジスタに結果を格納するものである。図34(b)は、PC減算命令のニーモニックとオペレーションの対応を示す。PC減算命令は、レジスタに格納されているPCの値からPC相対値dispを減算し、同一のレジスタに結果を格納するものである。
【0132】
第2下位PC演算器2800と第2上位PC演算器2802は、第1の実施形態における下位PC演算器405及び上位PC演算器411と同様の演算規則に従って、上記のPC加算命令とPC減算命令を実行する。
図35は、本実施の形態に係るコンパイラ装置の構成図である。
ソースコード2901はC言語等の高級言語で記述されたプログラムである。
【0133】
中間コード変換部2902は、ソースコード2901をコンパイラ装置の内部表現である中間コード2903に変換する。中間コード変換部2902は公知の技術であるため、詳細な説明を省略する。
PC値加算命令変換部2904は、中間コード2903の中でPCの値と変数とを加算する中間コードを図33に示したPC加算命令のアセンブラコード2906に変換する。
【0134】
命令変換部2905は、その他の中間コードを対応するアセンブラコード2906に変換する。命令変換部2905は公知の技術であるため、詳細な説明を省略する。
次に、コンパイラ装置の動作を、具体例を用いて説明する。
図36は、コンパイラ装置の動作手順を示すフローチャートである。
【0135】
まず、コンパイラ装置にソースコードが入力される。図37は、C言語で記述されたソースコードを示す。図中、外部関数g1、g2、g3、g4は宣言され、関数fはint型の変数iを受け取る関数として定義されている。この関数fは、iの値が1ならばポインタfpに関数g1のアドレスを代入し、iの値が2ならばポインタfpに関数g2のアドレスを代入し、iの値が3ならばポインタfpに関数g3のアドレスを代入し、iが以上の値でなければポインタfpに関数g4のアドレスを代入し、最後にfpの指す関数を呼び出すコードからなる(ステップS3600)。
【0136】
次に、中間コード変換部2902は、ソースコードを中間コードに変換する。その際に、特に、中間コード変換部2902は、外部関数へのポインタをポインタ変数に代入するソースコードを、関数の先頭のアドレスと外部関数の先頭のアドレスとの差分値と、関数の先頭のアドレスが格納された一時変数とを加算して、その結果をポインタ変数に代入する中間コードに変換する。
【0137】
図38は、図37のソースプログラムが変換された中間コードを示す。図中、中間コード3201は、関数の先頭のラベルfを有し、一時変数tmpに現在のPCの値、すなわち関数fの先頭アドレスを代入する中間コードである。中間コード3202は、変数iが1と等しくないかを判定する中間コードである。中間コード3203は、中間コード3202の判定が真の場合、すなわちiが1と等しくない場合には、ラベルL1へ分岐する中間コードである。中間コード3204は、iと1が等しい場合に実行されるもので、関数g1の先頭アドレスから関数fの先頭のアドレスを減算した差分値と関数fの先頭アドレスが代入された一時変数tmpとを加算し、その結果を変数fpに代入する中間コードである。中間コード3205は、ラベルLへ分岐する中間コードである。
【0138】
中間コード3206はラベルL1を有し、変数iが2と等しくないかを判定する中間コードである。中間コード3207は、中間コード3206の判定が真の場合、すなわち、iが2と等しくない場合には、ラベルL2へ分岐する中間コードである。中間コード3208は、iと2が等しい場合に実行され、関数g2の先頭アドレスから関数fの先頭のアドレスを減算した差分値と関数fの先頭アドレスが代入された一時変数tmpとを加算し、その結果を変数fpに代入する中間コードである。中間コード3209は、ラベルLへ分岐する中間コードである。
【0139】
中間コード3210はラベルL2を有し、変数iが3と等しくないかを判定する中間コードである。中間コード3211は、中間コード3210の判定が真の場合、すなわち、iが3と等しくない場合には、ラベルL3へ分岐する中間コードである。中間コード3212は、iと3が等しい場合に実行され、関数g3の先頭アドレスから関数fの先頭のアドレスを減算した差分値と関数fの先頭アドレスが代入された一時変数tmpとを加算し、その結果を変数fpに代入する中間コードである。中間コード3213は、ラベルLへ分岐する中間コードである。
【0140】
中間コード3214は、ラベルL3を有し、関数g4の先頭アドレスから関数fの先頭のアドレスを減算した差分値と関数fの先頭アドレスが代入された一時変数tmpを加算し、その結果を変数fpに代入する中間コードである。中間コード3215は、ラベルLを有し、変数fpが指す関数を呼び出す中間コードである。
【0141】
以上のように、図38に示す中間コードは、関数g1、g2、g3、g4の絶対アドレスを変数fpに代入するのではなく、関数fの先頭アドレスと関数g1、g2、g3、g4の先頭アドレスとの差分値を、関数fの先頭アドレスとを加算して、変数fpに代入するものである(ステップS3601〜S3603)。次に、PC値加算命令変換部2904及び中間コードをアセンブラコードに変換する。PC値加算命令変換部2904は、PCの値とPC相対値とを加算する中間コードを探し、その中間コードを第2下位PC演算器2800と第2上位PC演算器2802を使用するアセンブラコードに変換する。命令変換部2905は、その他の中間コードをアセンブラコードに変換する。
【0142】
PC値加算命令変換部2904は、図38中の中間コード3204が有する被演算子tmpが中間コード3201によりPCの値が転送されたものであり、演算子+はPCの値とPC相対値の加算であることをつきとめ、中間コード3204を第2下位PC演算器2800と第2上位PC演算器2802を使用して加算を行うアセンブラコードaddpcに変換する。PC値加算命令変換部2904は、中間コード3208、3212、3214に対しても同様にしてアセンブラコードaddpcに変換する。図38中のその他の中間コードは命令変換部2905によって変換される。
【0143】
図39は、図38の中間コードが変換されたアセンブラコードを示す。図中、アセンブラコード3301は、関数の先頭のラベルfを有し、レジスタr1にPCの値を転送する命令である。アセンブラコード3302は、定数1とレジスタr0の値が等しくないか判定する命令である。アセンブラコード3303は、命令3302による判定が真の場合には、ラベルL1へ分岐する命令である。アセンブラコード3304は、関数g1の先頭アドレスと関数fの先頭のアドレスの差分値であるPC相対値とレジスタr1に格納されたfの先頭アドレスであるPCの値とを第2下位PC演算器2800と第2上位PC演算器2802により加算し、その結果をレジスタr1に転送する命令である。アセンブラコード3305は、ラベルLへ分岐する命令である。
【0144】
アセンブラコード3306は、ラベルL1を有し、定数2とレジスタr0の値が等しくないか判定する命令である。アセンブラコード3307は、命令3306の判定が真の場合には、ラベルL2へ分岐する命令である。アセンブラコード3308は、関数g2の先頭アドレスと関数fの先頭のアドレスとの差分値であるPC相対値とレジスタr1に格納されたfの先頭アドレスであるPCの値とを第2下位PC演算器2800と第2上位PC演算器2802により加算し、その結果をレジスタr1に転送する命令である。アセンブラコード3309は、ラベルLへ分岐する命令である。
【0145】
アセンブラコード3310は、ラベルL2を有し、定数3とレジスタr0の値が等しくないか判定する命令である。アセンブラコード3311は、命令3310の判定が真の場合には、ラベルL3へ分岐する命令である。アセンブラコード3312は、関数g3の先頭アドレスと関数fの先頭のアドレスとの差分値であるPC相対値とレジスタr1に格納されたfの先頭アドレスであるPCの値とを第2下位PC演算器2800と第2上位PC演算器2802により加算し、その結果をレジスタr1に転送する命令である。アセンブラコード3313は、ラベルLへ分岐する命令である。
【0146】
アセンブラコード3314はラベルL3を有し、関数g4の先頭アドレスと関数fの先頭のアドレスとの差分値であるPC相対値とレジスタr1に格納されたfの先頭アドレスであるPCの値とを第2下位PC演算器2800と第2上位PC演算器2802により加算し、その結果をレジスタr1に転送する命令である。アセンブラコード3315は、ラベルLを有し、r1が指す関数を呼び出す命令である。アセンブラコード3316は関数を終了する命令である。
【0147】
以上説明してきたように、本実施の形態のコンパイラ装置は、関数f中に外部関数gへのポインタをポインタ変数に代入するソースコードがある場合、外部関数gへのアドレスをレジスタr1へ転送する命令(movr1、g)を生成するのではなく、関数fのアドレスと外部関数gのアドレスとの差分値(g−f)と、レジスタr1に格納された関数fのアドレスとを加算して、その結果をレジスタr1へ転送する命令(addPC g−f r1)を生成する。絶対アドレスg1よりもPC相対値g−fの方が値が小さいので、addpc命令を用いることによって、コードサイズを縮小することができる。また、実行時にプログラムのメモリ上のアドレスが決定されるPICコードにおいては、絶対アドレスを避けたコード表現が要求され、このPC相対値を用いた演算命令が必要不可欠である。
【0148】
本実施の形態のコンパイラ装置が出力したアセンブラコードは、第1の実施形態と同様に、最適化装置303、アセンブラ装置305、リンカ装置307によってプロセッサが実行するオブジェクトコードに変換される。プロセッサは、生成されたオブジェクトコードに含まれるPC加算命令addPC g−f r1を第2下位PC演算器2800と第2上位PC演算器2802によって実行する。すなわち、第2下位PC演算器2800は、定数値g−fの下位3ビットとレジスタr1に格納された数値の下位3ビットを加算し、桁上りがあれば桁上り数を第2上位PC演算器2802に送る。第2上位PC演算器2802は、定数値g−fの上位29ビットとレジスタr1に格納された数値の上位29ビットとを加算し、第2下位PC演算器2800からの桁上りがあれば桁上り数をも加算する。第2下位PC演算器2800による加算結果を下位3ビットとし、第2上位PC演算器2802による加算結果を上位29ビットとした値がレジスタr1に格納される。
【0149】
なお、図35に示した命令は定数値とレジスタとの加減算であったが、これに限定するものでなく、レジスタ間の加減算、PCとレジスタの間の加減算とすることもできる。
また、第2下位PC演算器2800と第2上位PC演算器2802の演算方法は、第1の実施形態の桁上り方式に限定するものでなく、オブジェクトコードを生成した最適化装置303、アセンブラ装置305、リンカ装置307で用いた方式と同一の方式をプロセッサが採用することとすれば、桁上りなし方式、リニア方式、絶対値方式のいずれを用いてもよい。
(第8の実施形態)
第8の実施形態は、デバッガ装置及び逆アセンブラ装置に関する。
【0150】
図40は、本実施の形態に係るデバッガ装置と逆アセンブラ装置の構成を示すブロック図である。
入力制御部4000は、オペレータからの入力を受け付け、入力された内容に応じて他の構成要素を制御する。
パケットアドレス特定部4001は、入力された命令のアドレスの上位29ビットを算出する。
【0151】
パケット内アドレス特定部4002は、入力された命令のアドレスの下位3ビットを算出する。
命令メモリ4004は、デバッグ及び逆アセンブルの対象となる命令を保持する。命令のアドレスは、第1の実施形態と同様であり、パケットアドレスを上位29ビットとし、パケット内アドレスを下位3ビットとする32ビット値である。図40では、図24に示した命令が格納されている状態が示されている。
【0152】
命令読み出し部4003は、パケットアドレス特定部4001で特定されたパケットアドレスで指定される命令パケットを命令メモリ4004から読み出す。
命令バッファ4005は、命令読み出し部4004が命令メモリ4004から読み出した命令パケットを格納する。
命令解読部4006は、パケット内アドレス特定部4002で特定されたパケット内アドレスをもつユニットを命令バッファ4005から取り出し、取り出したユニットを解読する。命令解読部4006は、ユニットが分岐命令である場合には、PC相対値4007を下位PC演算器4008及び上位PC演算器4009に送る。
【0153】
ラベルテーブル4011は、ラベル名とそのラベルの命令のアドレスの対応を保持するテーブルである。ラベルテーブル4011は、第1の実施形態で説明したアセンブラ装置が機械語コードを生成する際に、最適化コードから抽出することによって作成される。
図40では、アドレス32’h00000000とラベル名fが対応し、アドレス32’h00000008とラベル名L1が対応し、アドレス32’h12345680とラベル名L2とが対応していることが示されている。
【0154】
表示部4012は、命令を逆アセンブルした結果を表示する。
命令置換部4013は、入力された置換後の命令を命令バッファ4005内のパケット内アドレス特定部4002で特定されたパケット内アドレスで指定されるユニットに書き込む。
命令書き込み部4014は、命令メモリ4004内のパケットアドレス特定部4001により特定されたパケットアドレスを有する命令パケットを命令バッファ4005内の置換後の命令パケットに書き換える。
【0155】
上位PC演算器4009は、パケットアドレス特定部4001で特定された命令のアドレスの上位29ビットとPC相対値4007の上位29ビットとを演算する。
下位PC演算器4008は、パケット内アドレス特定部4002で特定された命令のアドレスの下位3ビットとPC相対値4007の下位3ビットを演算する。これらのPC演算器の演算方法は、オブジェクトコード生成過程で採用した方式と同一とする。
【0156】
次に、本実施の形態の逆アセンブラ装置の動作を具体例を用いて説明する。
図41は、逆アセンブラ装置の動作手順を示すフローチャートである。
まず、入力制御部4000は、逆アセンブルを指示するコマンドと逆アセンブルする命令のアドレスの入力を受け付ける。具体例では、命令のアドレスとして32’h0000001aが入力されたとする。(ステップS4100)。
【0157】
次に、パケットアドレス特定部4001は、命令のアドレスの上位29ビットよりパケットアドレスを特定する。そして、命令読み出し部4003は、特定したパケットアドレスをもつ命令パケットを命令メモリ4004から取り出し、命令バッファ4005に格納する。具体例では、パケットアドレスとして29’h00000003が特定され、ld(r2),r0||bra13’h1fec||add r2,r3の命令列からなる命令パケットが命令バッファ4005に格納される(ステップS4101)。
【0158】
そして、パケット内アドレス特定部4003は、命令のアドレスの下位3ビットからパケット内アドレスを特定し、特定したパケット内アドレスをもつユニットを命令解読部4006に通知する。命令解読部4006は、通知されたユニットを命令バッファ4005から取り出す。具体例では、パケット内アドレスとして3’b010が特定され、命令バッファ4005中の第2ユニットの命令であるbra13’h1fecが命令解読部4006に入力される(ステップS4102)。
【0159】
命令解読部4006は、取り出した命令が分岐命令であるかを判定する。具体例では、取り出した命令bra13’h1fecは、分岐命令である(ステップS4103)。
分岐命令であれば、命令中に指定されるPC相対値4007と入力された命令のアドレス値とが演算される。すなわち、下位PC演算器4008は、入力された命令のパケット内アドレス値と、PC相対値4007の下位3ビットの値とを加算又は減算し、その演算結果をラベル検索部4010に送る。また、上位PC演算器4008は、入力された命令のパケットアドレス値と、PC相対値4007の上位29ビットの値と、場合により下位PC演算器4008からの桁上がり数又は桁借り数とを加算又は減算し、その演算結果をラベル検索部4010に送る。ラベル検索部4010は、下位ビット演算結果と上位ビット演算結果より、ラベルのアドレスを特定する。具体例では、入力された命令のアドレスである32’h0000001aとPC相対値13’h1fecとの演算によって、ラベルのアドレスが32’h00000008として特定される(ステップS4103、S4104)。
【0160】
次に、ラベル検索部4010は、、ラベルテーブル4011を参照して上記特定したアドレスをもつラベル名を検索する。具体例では、アドレス32’h00000008に対応するラベル名がL1であることが検索される(ステップS4107)。
そして、表示部4012は、分岐命令のアセンブラ名と検索したラベル名を表示する。具体例では、分岐命令のアセンブラ名であるbraと検索したラベル名であるL1が表示される(ステップS4108)。
【0161】
また、命令解読部4006は、取り出した命令が分岐命令でない場合には、表示部4012を指示して、そのアセンブラ名を表示させる(ステップS4109)。
次に、本実施の形態のデバッガ装置の動作を具体例を用いて説明する。
図42は、デバッガ装置の動作手順を示すフローチャートである。
【0162】
まず、入力制御部4000は、デバッグを指示するコマンドと置換される命令のアドレスと置換後の命令の入力を受け付ける。具体例では、置換される命令のアドレスとして32’h0000001aが入力され、置換後の命令として減算命令subr0,r1が入力されたとする(ステップS4200)。
次に、パケットアドレス特定部4001は、置換される命令のアドレスの上位29ビットよりパケットアドレスを特定する。そして、命令読み出し部4003は、特定されたパケットアドレスをもつ命令パケットを命令メモリ4004から取りだし、命令バッファ4005に格納する。具体例では、パケットアドレスとして29’h00000003が特定され、ld(r2),r0||bra13’h1fec||add r2,r3の命令列からなる命令パケットが命令バッファ4005に格納される(ステップS4201)。
【0163】
次に、パケット内アドレス特定部4002は、置換される命令のアドレスの下位3ビットよりパケット内アドレスを特定する。具体例では、パケット内アドレスとして3’b010が特定される(ステップS4202)。
次に、命令置換部4013は、特定されたパケット内アドレスが3’b000なら、命令バッファ中の命令パケットの第1ユニットを入力された置換後の命令に置換し、特定されたパケット内アドレスが3’b010なら、命令バッファ中の命令パケットの第2ユニットを入力された置換後の命令に置換し、特定されたパケット内アドレスが3’b100なら、命令バッファ中の命令パケットの第3ユニットを入力された置換後の命令に置換する。具体例では、特定されたパケット内アドレスが3’b010なので、第2ユニットの命令bra13’h1fecが置換後の命令subr0,r1に置換される。その結果、命令バッファ4005内の命令パケットはld(r2),r0||subr0,r1||add r2,r3となる(ステップS4203〜S4207)。
【0164】
そして、命令書き込み部4014は、命令メモリ4004内のパケットアドレスで指定される命令パケットを命令バッファ4005に格納されている命令パケットに置き換える。
具体例では、命令メモリ4004内のパケットアドレス29’h00000003で指定される命令パケットld(r2),r0||bra13’h1fec||add r2,r3が命令バッファ4005内の命令パケットld(r2),r0||subr0,r1||add r2,r3に置換される。
【0165】
以上のように、本実施の形態における逆アセンブラ装置は、第1の実施形態に係るプロセッサが実行する命令を逆アセンブルすることができる。また、逆アセンブルする命令が分岐命令である場合にも、PC相対値をそのまま表示するのでなく、上位PC演算器及び下位PC演算器によってラベルの置かれているアドレスを算出し、そのアドレスからラベルテーブルを参照することによって、適切なラベル名を表示できる。
【0166】
また、本実施の形態におけるデバッガ装置は、バイトアラインされた命令パケットの単位で命令をメモリから命令バッファに読み出して、命令バッファ中で命令を書き換えて、命令パケットの単位で命令をメモリへ書き込むので、バイトアラインされていない命令のデバッグに適している。
なお、本実施の形態における上位PC演算器及び下位PC演算器の演算方式は、第1の実施形態における桁上がり方式に限定するものでなく、分離方式、絶対値方式、リニア方式のいずれを用いてもよい。
【0167】
以上、第1〜第8の実施形態に係るコンパイラ装置、最適化装置、アセンブラ装置、リンカ装置、プロセッサ、逆アセンブラ装置、デバッガ装置に関する実施の形態を説明したが、本発明は、これら実施の形態に限られないことは勿論である。
(1)第1〜第6の実施形態において、アセンブラコード302、最適化コード304、リロケータブルコード306、オブジェクトコード308はマスクROM、フラッシュメモリ等の半導体集積メモリや、フロッピーディスク、ハードディスク等の磁気記録媒体や、CD−ROM,DVD等の光ディスクに記録することもできる。
(2)第7の実施形態において、アセンブラコード2906は、マスクROM、フラッシュメモリ等の半導体集積メモリや、フロッピーディスク、ハードディスク等の磁気記録媒体や、CD−ROM,DVD等の光ディスクに記録することもできる。
【0168】
【発明の効果】
以上の説明から明らかなように、本発明は、1バイトデータをメモリの1単位データとして命令を格納するメモリからプログラムカウンタの値に基いて命令を読み出し、実行するプロセッサにおいて、前記メモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データの前記メモリ内の格納位置を指定する値を保持する第1のプログラムカウンタと、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定する値を保持する第2のプログラムカウンタとを備えたことを特徴とする。
【0169】
これによって、第1のプログラムカウンタは、バイト単位の長さをもつプロセッサの1単位データのメモリ内の格納位置を指定し、その値に基づいて命令がメモリから読み出される。また、第2のプログラムカウンタは、メモリからプロセッサ内に読み込んだプロセッサの1単位データに含まれるどのプロセッサの1単位命令であっても、その位置を指定することができる。つまり、命令の実行単位は、読み出し単位と関係なく任意に設定することができる。従って、メモリからプロセッサへ読み出す単位はバイト単位でなくてはならない場合にでも、命令の語長がバイト単位でない命令を実行することができる。
【0170】
ここで、前記プロセッサは、さらに、第1のプログラムカウンタ更新手段と、第2のプログラムカウンタ更新手段とを含み、前記第2のプログラムカウンタ更新手段は、前記第2のプログラムカウンタの値を1つ前のサイクルで実行した命令の分だけインクリメントし、桁上りがあれば、桁上り数を前記第1のプログラムカウンタ更新手段に送り、前記第1のプログラムカウンタ更新手段は、前記第1のプログラムカウンタの値を前記第2のプログラムカウンタ更新手段から送られた桁上り数だけ加算することを特徴としてもよい。
【0171】
これによって、プロセッサが実行した命令の分だけ、プログラムカウンタの値をインクリメントできるので、プログラムカウンタを次のサイクルで実行する命令の先頭位置に移行させることができる。
ここで、前記プロセッサであって、実行命令が、その命令と同一のサイクルで実行する先頭の命令のアドレスを基準とするプログラムカウンタ相対値を含む命令である場合には、当該プログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、前記第1のプログラムカウンタの値及び前記第2のプログラムカウンタの値と前記プログラムカウンタ相対値とを加算し、その演算結果を前記第1のプログラムカウンタの値及び前記第2のプログラムカウンタの値として設定する演算手段とをさらに備えたことを特徴としてもよい。
【0172】
これによって、プロセッサが分岐命令を実行した際に、プログラムカウンタの値と、分岐命令を実行する時のプログラムカウンタ値と分岐先命令のアドレスとの差分値であるプログラムカウンタ相対値とが加算されて、加算結果にプログラムカウンタが更新されるので、プログラムカウンタを分岐先命令のアドレスに移行させることができる。
【0173】
ここで、前記演算手段は、第1演算部と、第2演算部とを含み、前記第2演算部は、前記第2のプログラムカウンタの値と前記プログラムカウンタ相対値の下位ビットとを加算し、その加算結果を前記第2のプログラムカウンタの値として設定し、桁上りがある場合には、桁上り数を前記第1演算部に送り、桁借りがある場合には、桁借り数を前記第1演算部に送り、前記第1演算部は、前記第1のプログラムカウンタの値と前記プログラムカウンタ相対値の上位ビットとを加算し、さらに前記第2演算部より桁上り数を受けとった場合には、当該桁上り数を加算し、又は前記第2演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記第1のプログラムカウンタの値として設定することを特徴としてもよい。
【0174】
これによって、プロセッサが分岐命令を実行する際に、プログラムカウンタとプログラムカウンタ相対値との演算において、下位ビットの演算で発生した桁上り数又は桁借り数が上位ビットの演算で考慮されるので、上位ビットの演算と下位ビットの演算との間に連続性を備えたアドレス演算が可能となる。
ここで、前記演算手段は、第1演算部と、第2演算部とを含み、前記第2演算部は、前記第2のプログラムカウンタの値と前記プログラムカウンタ相対値の下位ビットとを桁上げ、又は桁借りを発生させずに加算し、その加算結果を前記第2のプログラムカウンタの値として設定し、前記第1演算部は、前記第1のプログラムカウンタの値と前記プログラムカウンタ相対値の上位ビットとを加算し、その加算結果を前記第1のプログラムカウンタの値として設定することを特徴としてもよい。
【0175】
これによって、プロセッサが分岐命令を実行する際に、第2のプログラムカウンタの値とプログラムカウンタ相対値の下位ビットとを演算する第2の演算器から、第1のプログラムカウンタの値とプログラムカウンタ相対値の上位ビットとを演算する第1の演算器へ、桁上げ数又は桁借り数が送られないので、第2の演算器と第1の演算器としては互いに独立して動作すればよい単純なハードウエアを用いることができる。
【0176】
ここで、前記演算手段は、前記第1のプログラムカウンタの値と前記プログラムカウンタ相対値の上位ビットとを加算し、その加算結果を前記第1のプログラムカウンタの値として設定し、前記プログラムカウンタ相対値の下位ビットを前記第2のプログラムカウンタの値として設定することを特徴としてもよい。
これによって、プロセッサが分岐命令を実行する際に、第2のプログラムカウンタの値とプログラムカウンタ相対値の下位ビットとの演算が不要となるので、プロセッサの分岐命令の実行速度が早くなる。
【0177】
ここで、前記演算手段は、前記第1のプログラムカウンタの値を上位ビットとし、前記第2のプログラムカウンタの値を下位ビットとする値と前記プログラムカウンタ相対値とを加算し、その加算結果の上位ビットを前記第1のプログラムカウンタの値として設定し、その加算結果の下位ビットを前記第2のプログラムカウンタの値として設定することを特徴としてもよい。
【0178】
これによって、プロセッサが分岐命令を実行の際に、プログラムカウンタ値とプログラムカウンタ相対値との演算を通常の演算器を用いて実行することができるので、プロセッサの構成を簡易にすることができる。
ここで、前記プロセッサであって、実行命令が、その命令のアドレスを基準とするプログラムカウンタ相対値を含む命令である場合には、当該プログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、前記第1のプログラムカウンタの値及び前記第2のプログラムカウンタの値を、前記実行命令のアドレスを指定するように補正するプログラムカウンタ補正手段と、前記補正された第1のプログラムカウンタの値及び第2のプログラムカウンタの値と前記プログラムカウンタ相対値とを加算し、その加算結果を前記第1のプログラムカウンタの値及び前記第2のプログラムカウンタの値として設定する演算手段とをさらに備えたことを特徴としてもよい。
【0179】
これによって、プログラムカウンタ相対値は、分岐命令のアドレスと分岐先命令の差分値で表されるので、プログラム中の並列実行の境界を変更したい事情が生じた場合にでも、プログラムカウンタ相対値の変更は不要となる。
ここで、前記プロセッサであって、レジスタ又は又は第1のプログラムカウンタ及び第2のプログラムカウンタに格納されたプログラムカウンタの値と、プログラムカウンタ相対値とを加算する加算命令又は減算する減算命令を解読するプログラムカウンタ相対値演算命令解読手段と、前記プログラムカウンタの値と前記プログラムカウンタ相対値とを加算又は減算し、演算結果を算出する演算手段と、前記演算結果にレジスタ又は第1のプログラムカウンタ及び第2のプログラムカウンタを更新するプログラムカウンタ値更新手段とをさらに備えたことを特徴としてもよい。
【0180】
これによって、関数の絶対アドレスをレジスタに格納する命令を使用する代わりに、プログラムカウンタとプログラムカウンタ相対値との演算を用いる命令を使用できる。従って、プログラムカウンタ相対値は命令の絶対アドレスよりも短いビット長で表すことができるので、プログラムのコードサイズを小さくすることができる。また、実行時にはじめてプログラムのメモリ上のアドレスが決定されるPICコードでは、絶対アドレスを用いることができないので、このプログラムカウンタとプログラムカウンタ相対値を用いた演算命令が必要不可欠である。
【0181】
ここで、前記第1のプログラムカウンタは、前記プロセッサの1単位データの長さがnバイトの時に、第1のプログラムカウンタの値をlog2nだけ左へビットシフトとした値を番地とするプロセッサの1単位データの前記メモリ内の格納位置であるメモリアドレスを指定することを特徴としてもよい。
これによって、メモリに1バイトごとに1つのアドレスが付与されている場合において、第1のプログラムカウンタの値と、メモリに格納された各プロセッサの1単位データが1対1に対応するので、プロセッサからプロセッサの1単位データの指定が容易となる。
【0182】
ここで、前記プロセッサであって、命令を一時的に記憶する命令バッファと、前記命令バッファの空き状態に応じて、前記プロセッサの1単位データに限定されず、メモリから命令をメモリの1単位データを最小単位として命令バッファへ読み出す命令読み出し手段とをさらに備えたことを特徴としてもよい。
これによって、メモリからプロセッサ内に読み出す命令の読み出し単位は任意に設定することができるので、プロセッサの命令の読み出しのための機構に柔軟性をもたせることができる。
【0183】
また、上記目的を達成するために、本発明は、命令列から最適化コードを生成する命令列最適化装置であって、前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスを付与するアドレス付与手段と、前記命令列から、特定の1つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出手段と、前記特定の2つの命令のアドレスの差分に解決すべきラベルが検出された場合に、前記特定の2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記特定の1つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の1つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の2つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換手段と、前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成手段とを備えたことを特徴とする。
【0184】
これによって、分岐命令を実行するプロセッサを対象としたプログラムを生成する最適化装置を実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【0185】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成する最適化装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【0186】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成する最適化装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴としてもよい。
【0187】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成する最適化装置が実現できる。
また、上記目的を達成するために、本発明は、命令列からリロケータブルコードを生成するアセンブラ装置であって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなる命令列を取得する命令列取得手段と、前記命令列中の特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出手段と、前記特定の2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを備えたことを特徴とする。
【0188】
これによって、分岐命令を実行するプロセッサを対象としたプログラムを生成するアセンブラ装置を実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【0189】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するアセンブラ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【0190】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するアセンブラ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴としてもよい。
【0191】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するアセンブラ装置が実現できる。
また、上記目的を達成するために、本発明は、リロケーターブルコードを結合してオブジェクトコードを生成するリンカ装置であって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるリロケータブルコードを取得するリロケータブルコード取得手段と、前記リロケータブルコードから特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得する再配置情報検出手段と、前記特定の2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを備えたことを特徴とする。
【0192】
これによって、分岐命令を実行するプロセッサを対象としたプログラムを生成するリンカ装置を実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【0193】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するリンカ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【0194】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するリンカ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果をプログラムカウンタ相対値の上位ビットとして設定し、前記特定の2つの命令の一方の命令のアドレスの下位ビットをプログラムカウンタ相対値の下位ビットとして設定することを特徴としてもよい。
【0195】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するリンカ装置が実現できる。
また、上記目的を達成するために、本発明は、オブジェクトコード中の命令のアドレスを指定して、そのアドレスで特定される命令のアセンブラ名を出力する逆アセンブラ装置であって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、前記特定される命令がプログラムカウンタ相対値を含む命令である場合に、前記特定される命令中からプログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、ラベルの位置を示すラベルアドレスとラベル名とを対応させて記憶する記憶手段と、前記指定した命令のアドレスとプログラムカウンタ相対値とを加算し、加算結果をラベルアドレスとするラベルアドレス算出手段と、前記記憶手段を参照して、前記算出したラベルアドレスに対応するラベル名を検索する検索手段とを備えたことを特徴とする。
【0196】
これによって、分岐命令を含むプログラムを逆アセンブルすることができる。つまり、逆アセンブルする命令が分岐命令である場合にも、プログラムカウンタ相対値から分岐先命令のアドレスを算出し、そのアドレスからラベルテーブルを参照して、ラベル名を取得できるので、プログラムカウンタ相対値よりも、わかりやすい形式であるラベル名により分岐先をユーザに提示することできる。
【0197】
ここで、前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算し、加算結果を前記ラベルアドレスの下位ビットとし、桁上りがある場合には、桁上り数を前記上位ビット演算部に送り、桁借りがある場合には、桁借り数を前記上位ビット演算部に送り、前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、さらに前記下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又は前記下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記ラベルアドレスの上位ビットとすることを特徴としてもよい。
【0198】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを逆アセンブルする逆アセンブラ装置を実現できる。
ここで、前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上げ、又は桁借りを発生させずに加算し、加算結果を前記ラベルアドレスの下位ビットとし、前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとすることを特徴としてもよい。
【0199】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを逆アセンブルする逆アセンブラ装置が実現できる。
ここで、前記ラベルアドレス算出手段は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとし、前記プログラムカウンタ相対値の下位ビットを前記ラベルアドレスの下位ビットとすることを特徴としてもよい。
【0200】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを逆アセンブルする逆アセンブラ装置が実現できる。
また、上記目的を達成するために、本発明は、オブジェクトコード中の命令のアドレスと変換命令を指定して、そのアドレスで特定される命令を変換命令に置換するデバッガ装置であって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、前記指定した命令のアドレスの上位ビットで特定されるプロセッサの1単位データをメモリから読み出して命令バッファに書き込むプロセッサの1単位データ読み出し手段と、前記命令バッファ内のプロセッサの1単位データに含まれる前記指定した命令のアドレスの下位ビットで特定される命令の位置に前記変換命令を書き込む命令書き込み手段と、前記命令書き込み後の命令バッファ内のプロセッサの1単位データをメモリに戻すプロセッサの1単位データ書き込み手段とを備えたことを特徴とする。
【0201】
これによって、バイト単位の長さであるプロセッサの1単位データを単位としてメモリから命令を命令バッファに読み出して、命令バッファ中で命令を書き換えて、命令パケットの単位で命令をメモリへ書き込むので、バイト単位の長さでない命令でもデバッグができるデバッガ装置が実現できる。
また、上記目的を達成するために、本発明は、ソースコードから命令列を生成するコンパイラ装置であって、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成することを特徴とする。
【0202】
これによって、プログラムカウンタ相対値演算命令を実行するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
ここで、前記プログラムカウンタ相対値演算命令は、前記プログラムカウンタの値の下位ビットとプログラムカウンタ相対値の下位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとし、桁上りがある場合には、桁上り数を上位ビット演算部に送り、桁借りがある場合には、桁借り数を上位ビット演算部に送る下位ビット演算をプロセッサの下位ビット演算部に実行させ、前記プログラムカウンタの値の上位ビットとプログラムカウンタ相対値の上位ビットとを加算又は減算し、さらに前記下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又は前記下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴としてもよい。
【0203】
これによって、プログラムカウンタ相対値演算命令を実行する際に、桁上り方式によりプログラムカウンタの値とプログラムカウンタ相対値とを演算するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
ここで、前記プログラムカウンタ相対値演算命令は、前記プログラムカウンタの値の下位ビットとプログラムカウンタ相対値の下位ビットとを桁上り、桁借りは発生させずに、加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとする下位ビット演算をプロセッサの下位ビット演算部に実行させ、前記プログラムカウンタの値の上位ビットとプログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴としてもよい。
【0204】
これによって、プログラムカウンタ相対値演算命令を実行する際に、桁上りなし方式によりプログラムカウンタの値とプログラムカウンタ相対値とを演算するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
ここで、前記プログラムカウンタ相対値演算命令は、前記プログラムカウンタの値の上位ビットとプログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させ、前記プログラムカウンタ相対値の下位ビットをプログラムカウンタの値の下位ビットとすることを特徴としてもよい。
【0205】
これによって、プログラムカウンタ相対値演算命令を実行する際に、絶対値方式によりプログラムカウンタの値とプログラムカウンタ相対値とを演算するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
【図面の簡単な説明】
【図1】図1(a)は、第1の実施形態のプロセッサが実行する命令のフォーマットを示す。
図1(b)は、第1の実施形態のプロセッサが実行する命令のフォーマットを示す。
図1(c)は、第1の実施形態のプロセッサが実行する命令のフォーマットを示す。
図1(d)は、第1の実施形態のプロセッサが実行する命令のフォーマットを示す。
図1(e)は、第1の実施形態のプロセッサが実行する命令のフォーマットを示す。
【図2】図2(a)は、命令の格納、及び読み出し単位である命令パケットを示す図である。
図2(b)は、命令の読み出しの順序を示す図である。
図2(c)は、命令の実行の順序を示す図である。
【図3】通常のプロセッサで、バイトアラインされていない命令を実行する場合の命令の格納、読み出し方法の例を示す図である。
【図4】プロセッサが実行するオブジェクトコードが、コンパイラ装置と、最適化装置と、アセンブラ装置と、リンカ装置により作成される過程を示す図である。
【図5】プロセッサ309及び外部メモリの詳細を示すブロック図である。
【図6】パケット内アドレスのインクリメントの規則を示すインクリメント表である。
【図7】図7(a)は、分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとの加算規則を示す加算表である。
図7(b)は、分岐先命令のアドレスの下位3ビットと分岐命令のアドレスの下位3ビットとの減算規則を示す減算表である。
【図8】最適化装置303の構成要素及び入出力データを示すブロック図である。
【図9】最適化装置303の動作手順を示すフローチャートである。
【図10】コード最適化手段902が生成した最適化処理コード903の一部分を示す。
【図11】図10の最適化処理コードより生成されたアドレス付与コード916を示す。
【図12】図11のアドレス付与コードから生成されたラベル情報906を示す。
【図13】図11のアドレス付与コードから生成された最適化コード915を示す。
【図14】アセンブラ装置305の構成及び関連する入出力データを示すブロック図である。
【図15】アセンブラ装置305の動作手順を示すフローチャートである。
【図16】図13の最適化コードから生成された機械語コード803を示す。
【図17】図16の機械語コードより作成されたラベル情報を示す。
【図18】図16の機械語コード803から生成されたリロケータブルコードを示す。
【図19】リンカ装置307の構成及び関連する入出力データを示すブロック図である。
【図20】リンカ装置307の動作手順を示すフローチャートである。
【図21】リロケータブルコードを示す。
【図22】図18に示すリロケータブルコード306と、別途生成された図21に示すリロケータブルコードと結合された状態を示す。
【図23】結合コード703を示す。
【図24】図23の結合コードより作成されたラベル情報を示す。
【図25】図23の結合コードより生成されたオブジェクトコードを示す。
【図26】第2の実施形態に係るオブジェクトコードを示す。
【図27】図27(a)は、第3の実施形態に係る命令パケットの構成を示す。
図27(b)は、命令の種類を示す。
図27(c)は、パケット内アドレスと、パケット内アドレスが指定するパケット内のユニットとの関係を示す。
【図28】図28(a)は、第4の実施形態に係る桁上りなし方式のアドレス演算による分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとの加算規則を示す加算表である。
図28(b)は、第4の実施形態に係る桁上りなし方式のアドレス演算による分岐先命令のアドレスの下位3ビットと分岐命令のアドレスの下位3ビットとの減算規則を示す減算表である。
【図29】第4の実施形態に係る桁上りなし方式のアドレス演算を用いて生成されたオブジェクトコードの具体例である。
【図30】図30(a)は、第5の実施形態に係る絶対値方式のアドレス演算による分岐命令のアドレスの下位3ビットとPC相対値の下位3ビットとの加算規則を示す加算表である。
図30(b)は、第5の実施形態に係る絶対値方式のアドレス演算による分岐先命令のアドレスの下位3ビットと分岐命令のアドレスの下位3ビットとの減算規則を示す減算表である。
【図31】第5の実施形態に係る絶対値方式のアドレス演算を用いて生成されたオブジェクトコードの具体例である。
【図32】第6の実施形態に係るリニア方式のアドレス演算を用いて生成されたオブジェクトコードを示す。
【図33】第7の実施形態に係るプロセッサの構成図である。
【図34】図34(a)は、PC加算命令のニーモニックとオペレーションの対応を示す。
図34(b)は、PC減算命令のニーモニックとオペレーションの対応を示す。
【図35】第8の実施形態に係るコンパイラ装置の構成図である。
【図36】コンパイラ装置の動作手順を示すフローチャートである。
【図37】C言語で記述されたソースコードを示す。
【図38】図37のソースプログラムが変換された中間コードを示す。
【図39】図38の中間コードが変換されたアセンブラコードを示す。
【図40】第8の実施形態に係るデバッガ装置と逆アセンブラ装置の構成を示すブロック図である。
【図41】逆アセンブラ装置の動作手順を示すフローチャートである。
【図42】デバッガ装置の動作手順を示すフローチャートである。
【図43】従来のプロセッサの基本構成を示すブロック図である。
【符号の説明】
100 並列実行境界情報
101 ビットフォーマット情報
300 ソースコード
301 コンパイラ装置
302 アセンブラコード
303 最適化装置
304 最適化コード
305 アセンブラ装置
306 リロケータブルコード
307 リンカ装置
308 オブジェクトコード
309 プロセッサ
401a〜401c 演算器
402 汎用レジスタ
403 上位PC
404 下位PC
405 下位PC演算器
406 データメモリ
407 命令メモリ
408 命令バッファ
409a〜409c 命令デコーダ
410 フェッチ上位カウンタ
411 上位PC演算器
412 INC
413 プリフェッチ下位カウンタ
420 PC相対値セレクタ
421 即値セレクタ
422 オペランドアドレスバッファ
423 オペランドデータバッファ
424a〜c 制御信号
702 コード結合手段
703 結合コード
704 再配置情報検出手段
705 再配置情報
706 下位アドレス減算手段
707 桁借り数
708 下位減算結果
709 上位アドレス減算手段
710 上位減算結果
711 アドレス差算出手段
712 アドレス差
713 再配置情報解決手段
802 機械語コード生成手段
803 機械語コード
804 ラベル検出手段
805 ラベル情報
806 下位アドレス減算手段
807 桁借り数
808 下位減算結果
809 上位アドレス減算手段
810 上位減算結果
811 アドレス差算出手段
812 アドレス差
813 ラベル情報解決手段
902 コード最適化手段
903 最適化処理コード
904 アドレス付与手段
905 ラベル検出手段
906 ラベル情報
907 下位アドレス減算手段
908 桁借り数
909 下位減算結果
910 上位アドレス減算手段
911 上位減算結果
912 アドレス差算出手段
913 アドレス差
914 ラベル情報解決手段
916 アドレス付与コード
2800 第2下位PC演算器
2801a〜2801c 命令デコーダ
2802 第2上位PC演算器
2901 ソースコード
2902 中間コード変換部
2903 中間コード
2904 PC値加算命令変換部
2905 命令変換部
2906 アセンブラコード
4000 入力制御部
4001 パケットアドレス特定部
4002 パケット内アドレス特定部
4003 パケット内アドレス特定部
4004 命令メモリ
4005 命令バッファ
4006 命令解読部
4007 PC相対値
4008 下位PC演算器
4009 上位PC演算器
4010 ラベル検索部
4011 ラベルテーブル
4012 表示部
4013 命令置換部
4300 プログラムカウンタ
4301 命令メモリ
4302 命令読み出し部
4303 命令実行部

Claims (34)

  1. 命令列から最適化コードを生成する命令列最適化装置であって、
    前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスを付与するアドレス付与手段と、
    つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段とを備え、
    前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、
    前記上位ビット減算部は、前記2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする命令列最適化装置。
  2. 前記命令列から、特定の1つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出手段と、
    前記特定の1つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の1つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の2つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換手段と、
    前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成手段とを更に備えたことを特徴とする請求項1記載の命令列最適化装置。
  3. 前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
    前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする請求項記載の命令列最適化装置。
  4. 前記プログラムカウンタ相対値算出手段は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
    前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定する
    ことを特徴とする請求項2または3記載の命令列最適化装置。
  5. 命令列からリロケータブルコードを生成するアセンブラ装置であって、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなる命令列を取得する命令列取得手段と、
    つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段とを備え、
    前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、
    前記上位ビット減算部は、前記2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とするアセンブラ装置。
  6. 前記命令列中の特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出手段と、
    前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを更に備えたことを特徴とする請求項5記載のアセンブラ装置。
  7. 前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
    前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする請求項記載のアセンブラ装置。
  8. 前記プログラムカウンタ相対値算出手段は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
    前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴とする請求項6または7記載のアセンブラ装置。
  9. リロケーターブルコードを結合してオブジェクトコードを生成するリンカ装置であって、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるリロケータブルコードを取得するリロケータブルコード取得手段と、
    つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段とを備え、
    前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、
    前記上位ビット減算部は、前記2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とするリンカ装置。
  10. 記リロケータブルコードから特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得する再配置情報検出手段と、
    前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを更に備えたことを特徴とする請求項9記載のリンカ装置。
  11. 前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
    前記上位ビット減算部は、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする請求項10記載のリンカ装置。
  12. 前記プログラムカウンタ相対値算出手段は、
    前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
    前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴とする請求項10または11記載のリンカ装置。
  13. オブジェクトコード中の命令のアドレスを指定して、そのアドレスで特定される命令のアセンブラ名を出力する逆アセンブラ装置であって、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と
    記指定した命令のアドレスとプログラムカウンタ相対値とを加算し、加算結果をラベルアドレスとするラベルアドレス算出手段とを備え、
    前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算し、加算結果を前記ラベルアドレスの下位ビットとし、桁上りがある場合には、桁上り数を前記上位ビット演算部に送り、桁借りがある場合には、桁借り数を前記上位ビット演算部に送り、
    前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、さらに前記下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又は前記下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記ラベルアドレスの上位ビットとすることを特徴とする逆アセンブラ装置。
  14. 前記特定される命令がプログラムカウンタ相対値を含む命令である場合に、前記特定される命令中からプログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、
    ラベルの位置を示すラベルアドレスとラベル名とを対応させて記憶する記憶手段と、
    前記記憶手段を参照して、前記算出したラベルアドレスに対応するラベル名を検索する検索手段とを更に備えたことを特徴とする請求項13記載の逆アセンブラ装置。
  15. 前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
    前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上げ、又は桁借りを発生させずに加算し、加算結果を前記ラベルアドレスの下位ビットとし、
    前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとする
    ことを特徴とする請求項13または14記載の逆アセンブラ装置。
  16. 前記ラベルアドレス算出手段は、
    前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとし、前記プログラムカウンタ相対値の下位ビットを前記ラベルアドレスの下位ビットすることを特徴とする請求項13から15のいずれかに記載の逆アセンブラ装置。
  17. ソースコードから命令列を生成するコンパイラ装置であって、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成し、
    前記プログラムカウンタ相対値演算命令は、
    前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算又は減算し、演算結果を前記プログラムカウンタの値の下位ビットとし、桁上りがある場合には、桁上り数をプロセッサの上位ビット演算部に送り、桁借りがある場合には、桁借り数をプロセッサの上位ビット演算部に送る下位ビット演算をプロセッサの下位ビット演算部に実行させ、
    前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、さらにプロセッサの下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又はプロセッサの下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記プログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴とするコンパイラ装置。
  18. 前記プログラムカウンタ相対値演算命令は、
    前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上り、桁借りは発生させずに、加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとする下位ビット演算をプロセッサの下位ビット演算部に実行させ、
    前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴とする請求項17記載のコンパイラ装置。
  19. 前記プログラムカウンタ相対値演算命令は、
    前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させ、
    前記プログラムカウンタ相対値の下位ビットを前記プログラムカウンタの値の下位ビットとすることを特徴とする請求項17または18記載のコンパイラ装置。
  20. 命令列から最適化コードを生成する命令列最適化装置に、
    前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスを付与するアドレス付与ステップと、
    2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出ステップとを有し、
    前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
    前記下位ビット減算サブステップは、前記2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を次サブステップで使用できる設定とし、
    前記上位ビット減算サブステップは、前記2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
  21. 前記命令列から、特定の1つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出ステップと、
    前記特定の1つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の1つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の2つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換ステップと、
    前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成ステップとを更に実行させるためのプログラムを記録した請求項20記載のコンピュータ読み取り可能な記録媒体。
  22. 前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを含み、
    前記下位ビット減算サブステップは、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
    前記上位ビット減算サブステップは、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録した請求項21記載のコンピュータ読み取り可能な記録媒体。
  23. 前記プログラムカウンタ相対値算出ステップは、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
    前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを実行させるためのプログラムを記録した請求項21または22記載のコンピュータ読み取り可能な記録媒体。
  24. 命令列からリロケータブルコードを生成するアセンブラ装置に、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなる命令列を取得する命令列取得ステップと、
    2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出ステップとを有し、
    前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
    前記下位ビット減算サブステップは、前記2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウン タ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を次サブステップで使用できる設定とし、
    前記上位ビット減算サブステップは、前記2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
  25. 前記命令列中の特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得するラベル検出ステップと、
    前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換ステップとを更に実行させるためのプログラムを記録した請求項24記載のコンピュータ読み取り可能な記録媒体。
  26. 前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
    前記下位ビット減算サブステップは、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
    前記上位ビット減算サブステップは、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録した請求項25記載のコンピュータ読み取り可能な記録媒体。
  27. 前記プログラムカウンタ相対値算出ステップは、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
    前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定すること実行させるためのプログラムを記録した請求項25または26記載のコンピュータ読み取り可能な記録媒体。
  28. リロケーターブルコードを結合してオブジェクトコードを生成するリンカ装置に、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するアドレスが付与された命令からなるリロケータブルコードを取得するリロケータブルコード取得ステップと、
    2つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出ステップとを有し、
    前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
    前記下位ビット減算サブステップは、前記2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を次サブステップで使用できる設定とし、
    前記上位ビット減算サブステップは、前記2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
  29. 前記リロケータブルコードから特定の2つの命令のアドレスの差分に解決すべきラベルを検出し、当該2つの命令のアドレスを取得する再配置情報検出ステップと、
    前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換ステップとを更に実行させるためのプログラムを記録した請求項28記載のコンピュータ読み取り可能な記録媒体。
  30. 前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを含み、
    前記下位ビット減算サブステップは、前記特定の2つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
    前記上位ビット減算サブステップは、前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録した請求項29記載のコンピュータ読み取り可能な記録媒体。
  31. 前記プログラムカウンタ相対値算出ステップは、
    前記特定の2つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
    前記特定の2つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを実行させるためのプログラムを記録した請求項29または30に記載のコンピュータ読み取り可能な記録媒体。
  32. ソースコードから命令列を生成するコンパイラ装置に、
    上位ビットは、1バイト長であるメモリの1単位データ又は複数のメモリの1単位データより構成されるプロセッサの1単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの1単位データに含まれるプロセッサが実行する1つのオペレーションを示すプロセッサの1単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成し、
    前記プログラムカウンタ相対値演算命令は、
    前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算又は減算し、演算結果を前記プログラムカウンタの値の下位ビットとし、桁上りがある場合には、桁上り数をプロセッサの上位ビット演算サブステップにて使用できる設定とし、桁借りがある場合には、桁借り数をプロセッサの上位ビット演算サブステップにて使用できる設定とし、下位ビット演算をプロセッサの下位ビット演算サブステップに実行させ、
    前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、さらにプロセッサの下位ビット演算サブステップにて使用できる設定とされた桁上り数がある場合には、当該桁上り数を加算し、又はプロセッサの下位ビット演算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、それらの演算結果を前記プログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算サブステップに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
  33. 前記プログラムカウンタ相対値演算命令は、
    前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上り、桁借りは発生させずに、加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとする下位ビット演算をプロセッサの下位ビット演算サブステップに実行させ、
    前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算サブステップに実行させるためのプログラムを記録した請求項32記載のコンピュータ読み取り可能な記録媒体。
  34. 前記プログラムカウンタ相対値演算命令は、
    前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算サブステップに実行させ、
    前記プログラムカウンタ相対値の下位ビットを前記プログラムカウンタの値の下位ビットとすることを実行させるためのプログラムを記録した請求項32または33記載のコンピュータ読み取り可能な記録媒体。
JP2001028234A 1998-04-28 2001-02-05 命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体 Expired - Lifetime JP3595269B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001028234A JP3595269B2 (ja) 1998-04-28 2001-02-05 命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP10-118326 1998-04-28
JP11832698 1998-04-28
JP2001028234A JP3595269B2 (ja) 1998-04-28 2001-02-05 命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP12063499A Division JP3190639B2 (ja) 1998-04-28 1999-04-27 プロセッサ

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2004210765A Division JP4323393B2 (ja) 1998-04-28 2004-07-16 プロセッサ

Publications (2)

Publication Number Publication Date
JP2001236235A JP2001236235A (ja) 2001-08-31
JP3595269B2 true JP3595269B2 (ja) 2004-12-02

Family

ID=26456282

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001028234A Expired - Lifetime JP3595269B2 (ja) 1998-04-28 2001-02-05 命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体

Country Status (1)

Country Link
JP (1) JP3595269B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5967618B2 (ja) 2013-04-17 2016-08-10 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 二進化十進数型変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにそのコンピュータ及びコンピュータ・プログラム

Also Published As

Publication number Publication date
JP2001236235A (ja) 2001-08-31

Similar Documents

Publication Publication Date Title
US7823142B2 (en) Processor for executing instructions in units that are unrelated to the units in which instructions are read, and a compiler, an optimization apparatus, an assembler, a linker, a debugger and a disassembler for such processor
US6324686B1 (en) Just in time compiler technique
JP6591978B2 (ja) 命令セット変換システム及び方法
JP4283131B2 (ja) プロセッサ及びコンパイル方法
KR100328162B1 (ko) 정보처리회로와마이크로컴퓨터와전자기기
US20030233386A1 (en) High speed virtual machine and compiler
US20120272044A1 (en) Processor for executing highly efficient vliw
US7480783B2 (en) Systems for loading unaligned words and methods of operating the same
KR19990087940A (ko) 단일클럭사이클내에불연속명령을페치하기위한방법및시스템
JP2857600B2 (ja) プロセッサ及びプログラム翻訳装置
US4945511A (en) Improved pipelined processor with two stage decoder for exchanging register values for similar operand instructions
US6611956B1 (en) Instruction string optimization with estimation of basic block dependence relations where the first step is to remove self-dependent branching
USRE41751E1 (en) Instruction converting apparatus using parallel execution code
KR100413651B1 (ko) 복수레지스터의데이터전송을워드길이가짧은명령으로실현하는정보처리장치및그정보처리방법
JP2001005675A (ja) プログラム変換装置及びプロセッサ
US7219337B2 (en) Direct instructions rendering emulation computer technique
JP3983482B2 (ja) 高速ディスプレースメント付きpc相対分岐方式
JP3595269B2 (ja) 命令列最適化装置、アセンブラ装置、リンカ装置、逆アセンブラ装置、コンパイラ装置、及び記録媒体
JP4323393B2 (ja) プロセッサ
US5774694A (en) Method and apparatus for emulating status flag
JP2004527824A (ja) データプロセッサ及び処理方法
JP3190639B2 (ja) プロセッサ
KR20010032275A (ko) 계산기 시스템
US7143266B1 (en) Storing immediate data of immediate instructions in a data table
US7111148B1 (en) Method and apparatus for compressing relative addresses

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040518

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040716

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040824

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040902

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080910

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080910

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090910

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090910

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100910

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110910

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120910

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130910

Year of fee payment: 9

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term