(57)【特許請求の範囲】
【請求項１】
命令列から最適化コードを生成する命令列最適化装置であって、
前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスを付与するアドレス付与手段と、
２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段とを備え、
前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、
前記上位ビット減算部は、前記２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする命令列最適化装置。
【請求項２】
前記命令列から、特定の１つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出手段と、
前記特定の１つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の１つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の２つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換手段と、
前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成手段とを更に備えたことを特徴とする請求項１記載の命令列最適化装置。
【請求項３】
前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする請求項２記載の命令列最適化装置。
【請求項４】
前記プログラムカウンタ相対値算出手段は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定する
ことを特徴とする請求項２または３記載の命令列最適化装置。
【請求項５】
命令列からリロケータブルコードを生成するアセンブラ装置であって、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなる命令列を取得する命令列取得手段と、
２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段とを備え、
前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、
前記上位ビット減算部は、前記２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とするアセンブラ装置。
【請求項６】
前記命令列中の特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出手段と、
前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを更に備えたことを特徴とする請求項５記載のアセンブラ装置。
【請求項７】
前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする請求項６記載のアセンブラ装置。
【請求項８】
前記プログラムカウンタ相対値算出手段は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴とする請求項６または７記載のアセンブラ装置。
【請求項９】
リロケーターブルコードを結合してオブジェクトコードを生成するリンカ装置であって、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるリロケータブルコードを取得するリロケータブルコード取得手段と、
２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段とを備え、
前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、
前記上位ビット減算部は、前記２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とするリンカ装置。
【請求項１０】
前記リロケータブルコードから特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得する再配置情報検出手段と、
前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを更に備えたことを特徴とする請求項９記載のリンカ装置。
【請求項１１】
前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴とする請求項１０記載のリンカ装置。
【請求項１２】
前記プログラムカウンタ相対値算出手段は、
前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴とする請求項１０または１１記載のリンカ装置。
【請求項１３】
オブジェクトコード中の命令のアドレスを指定して、そのアドレスで特定される命令のアセンブラ名を出力する逆アセンブラ装置であって、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、
前記指定した命令のアドレスとプログラムカウンタ相対値とを加算し、加算結果をラベルアドレスとするラベルアドレス算出手段とを備え、
前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算し、加算結果を前記ラベルアドレスの下位ビットとし、桁上りがある場合には、桁上り数を前記上位ビット演算部に送り、桁借りがある場合には、桁借り数を前記上位ビット演算部に送り、
前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、さらに前記下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又は前記下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記ラベルアドレスの上位ビットとすることを特徴とする逆アセンブラ装置。
【請求項１４】
前記特定される命令がプログラムカウンタ相対値を含む命令である場合に、前記特定される命令中からプログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、
ラベルの位置を示すラベルアドレスとラベル名とを対応させて記憶する記憶手段と、
前記記憶手段を参照して、前記算出したラベルアドレスに対応するラベル名を検索する検索手段とを更に備えたことを特徴とする請求項１３記載の逆アセンブラ装置。
【請求項１５】
前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、
前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上げ、又は桁借りを発生させずに加算し、加算結果を前記ラベルアドレスの下位ビットとし、
前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとする
ことを特徴とする請求項１３または１４記載の逆アセンブラ装置。
【請求項１６】
前記ラベルアドレス算出手段は、
前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとし、前記プログラムカウンタ相対値の下位ビットを前記ラベルアドレスの下位ビットすることを特徴とする請求項１３から１５のいずれかに記載の逆アセンブラ装置。
【請求項１７】
ソースコードから命令列を生成するコンパイラ装置であって、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成し、
前記プログラムカウンタ相対値演算命令は、
前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算又は減算し、演算結果を前記プログラムカウンタの値の下位ビットとし、桁上りがある場合には、桁上り数をプロセッサの上位ビット演算部に送り、桁借りがある場合には、桁借り数をプロセッサの上位ビット演算部に送る下位ビット演算をプロセッサの下位ビット演算部に実行させ、
前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、さらにプロセッサの下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又はプロセッサの下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記プログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴とするコンパイラ装置。
【請求項１８】
前記プログラムカウンタ相対値演算命令は、
前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上り、桁借りは発生させずに、加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとする下位ビット演算をプロセッサの下位ビット演算部に実行させ、
前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴とする請求項１７記載のコンパイラ装置。
【請求項１９】
前記プログラムカウンタ相対値演算命令は、
前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させ、
前記プログラムカウンタ相対値の下位ビットを前記プログラムカウンタの値の下位ビットとすることを特徴とする請求項１７または１８記載のコンパイラ装置。
【請求項２０】
命令列から最適化コードを生成する命令列最適化装置に、
前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスを付与するアドレス付与ステップと、
２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出ステップとを有し、
前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
前記下位ビット減算サブステップは、前記２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を次サブステップで使用できる設定とし、
前記上位ビット減算サブステップは、前記２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２１】
前記命令列から、特定の１つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出ステップと、
前記特定の１つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の１つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の２つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換ステップと、
前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成ステップとを更に実行させるためのプログラムを記録した請求項２０記載のコンピュータ読み取り可能な記録媒体。
【請求項２２】
前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを含み、
前記下位ビット減算サブステップは、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
前記上位ビット減算サブステップは、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録した請求項２１記載のコンピュータ読み取り可能な記録媒体。
【請求項２３】
前記プログラムカウンタ相対値算出ステップは、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを実行させるためのプログラムを記録した請求項２１または２２記載のコンピュータ読み取り可能な記録媒体。
【請求項２４】
命令列からリロケータブルコードを生成するアセンブラ装置に、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなる命令列を取得する命令列取得ステップと、
２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出ステップとを有し、
前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
前記下位ビット減算サブステップは、前記２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を次サブステップで使用できる設定とし、
前記上位ビット減算サブステップは、前記２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットを減算し、さらに前記下位ビット減算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２５】
前記命令列中の特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出ステップと、
前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換ステップとを更に実行させるためのプログラムを記録した請求項２４記載のコンピュータ読み取り可能な記録媒体。
【請求項２６】
前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
前記下位ビット減算サブステップは、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
前記上位ビット減算サブステップは、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録した請求項２５記載のコンピュータ読み取り可能な記録媒体。
【請求項２７】
前記プログラムカウンタ相対値算出ステップは、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定すること実行させるためのプログラムを記録した請求項２５または２６記載のコンピュータ読み取り可能な記録媒体。
【請求項２８】
リロケーターブルコードを結合してオブジェクトコードを生成するリンカ装置に、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるリロケータブルコードを取得するリロケータブルコード取得ステップと、
２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出ステップとを有し、
前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを有し、
前記下位ビット減算サブステップは、前記２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を次サブステップで使用できる設定とし、
前記上位ビット減算サブステップは、前記２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２９】
前記リロケータブルコードから特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得する再配置情報検出ステップと、
前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換ステップとを更に実行させるためのプログラムを記録した請求項２８記載のコンピュータ読み取り可能な記録媒体。
【請求項３０】
前記プログラムカウンタ相対値算出ステップは、上位ビット減算サブステップと、下位ビット減算サブステップとを含み、
前記下位ビット減算サブステップは、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、
前記上位ビット減算サブステップは、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを実行させるためのプログラムを記録した請求項２９記載のコンピュータ読み取り可能な記録媒体。
【請求項３１】
前記プログラムカウンタ相対値算出ステップは、
前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、
前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを実行させるためのプログラムを記録した請求項２９または３０に記載のコンピュータ読み取り可能な記録媒体。
【請求項３２】
ソースコードから命令列を生成するコンパイラ装置に、
上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成し、
前記プログラムカウンタ相対値演算命令は、
前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算又は減算し、演算結果を前記プログラムカウンタの値の下位ビットとし、桁上りがある場合には、桁上り数をプロセッサの上位ビット演算サブステップにて使用できる設定とし、桁借りがある場合には、桁借り数をプロセッサの上位ビット演算サブステップにて使用できる設定とし、下位ビット演算をプロセッサの下位ビット演算サブステップに実行させ、
前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、さらにプロセッサの下位ビット演算サブステップにて使用できる設定とされた桁上り数がある場合には、当該桁上り数を加算し、又はプロセッサの下位ビット演算サブステップにて使用できる設定とされた桁借り数がある場合には、当該桁借り数を減算し、それらの演算結果を前記プログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算サブステップに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項３３】
前記プログラムカウンタ相対値演算命令は、
前記プログラムカウンタの値の下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上り、桁借りは発生させずに、加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとする下位ビット演算をプロセッサの下位ビット演算サブステップに実行させ、
前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算サブステップに実行させるためのプログラムを記録した請求項３２記載のコンピュータ読み取り可能な記録媒体。
【請求項３４】
前記プログラムカウンタ相対値演算命令は、
前記プログラムカウンタの値の上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算サブステップに実行させ、
前記プログラムカウンタ相対値の下位ビットを前記プログラムカウンタの値の下位ビットとすることを実行させるためのプログラムを記録した請求項３２または３３記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンパイラ装置、最適化装置、アセンブラ装置、リンカ装置、デバッガ装置、及び逆アセンブラ装置に関し、読み出した命令の単位と無関係な単位で命令を実行するプロセッサを対象としたコンパイラ装置、最適化装置、アセンブラ装置、リンカ装置、デバッガ装置、及び逆アセンブラ装置に関する。
【０００２】
【従来の技術】
一般に、プロセッサは、プログラムカウンタに基づき、命令をメモリから読み出し、実行する。図４３は、プロセッサの基本構成の例を示すブロック図である。
命令メモリ４３０１は、プログラムを構成する命令列を記憶している。ここで、１命令は、８ビット長とし、４個の命令を１つの命令パケットとする。
【０００３】
プログラムカウンタ４３００は、命令メモリ４３０１内での命令パケットのアドレスを指定する。
命令読み出し部４３０２は、プログラムカウンタ４３００により指定される命令パケットを命令メモリ４３０１から読み込む。
命令実行部４３０３は、読み出された命令パケットに含まれる４つの命令のすべてを１サイクル内で実行する。
【０００４】
このように、一般にプロセッサは、１つのプログラムカウンタによって指定される命令パケットを読み込み、読み出した４個の命令を１サイクルで実行することができる。
【０００５】
【発明が解決しようとする課題】
しかしながら、このようなプロセッサでは、読み込んだ命令パケット内のすべての命令を１サイクルの実行単位としているため、１つの命令パケット中に、Ｉ／Ｏやメモリ等のリソースが利用できない理由で実行できない命令が１つでもあると、そのリソースが利用できるようになるまで、その命令パケット内のすべての命令の実行が待たされることになる。その結果、このようなプロセッサは、命令の実行速度が遅い。
【０００６】
そこで、本発明はかかる問題点に鑑み、命令の読み出しと命令の実行の単位が異なるプログラムを実行できるプロセッサ及びそのようなプログラムを作成できるプログラム開発環境を提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、本発明は、１バイトデータをメモリの１単位データとして命令を格納するメモリからプログラムカウンタの値に基いて命令を読み出し、実行するプロセッサにおいて、前記メモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データの前記メモリ内の格納位置を指定する値を保持する第１のプログラムカウンタと、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定する値を保持する第２のプログラムカウンタとを備える。
【０００８】
また、本発明は、命令列から最適化コードを生成する命令列最適化装置であって、前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスを付与するアドレス付与手段と、前記命令列から、特定の１つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出手段と、前記特定の２つの命令のアドレスの差分に解決すべきラベルが検出された場合に、前記特定の２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記特定の１つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の１つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の２つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換手段と、前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成手段とを備える。
【０００９】
また、本発明は、オブジェクトコード中の命令のアドレスを指定して、そのアドレスで特定される命令のアセンブラ名を出力する逆アセンブラであって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、前記特定される命令がプログラムカウンタ相対値を含む命令である場合に、前記特定される命令中からプログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、ラベルの位置を示すラベルアドレスとラベル名とを対応させて記憶する記憶手段と、前記指定した命令のアドレスとプログラムカウンタ相対値とを加算し、加算結果をラベルアドレスとするラベルアドレス算出手段と、前記記憶手段を参照して、前記算出したラベルアドレスに対応するラベル名を検索する検索手段とを備える。
【００１０】
また、本発明は、ソースコードから命令列を生成するコンパイラ装置であって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成する。
【００１１】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて説明する。
（第１の実施形態）
第１の実施形態は、命令の読み出しの単位と命令の実行の単位とが異なるプログラムを生成する最適化装置、アセンブラ装置、リンカ装置とそのプログラムを実行するプロセッサに関する。
（プロセッサが実行する命令のフォーマット）
まず、本実施の形態に係るプロセッサが実行する命令のフォーマットについて説明する。
【００１２】
図１（ａ）〜図１（ｅ）は本実施の形態のプロセッサが実行する命令のフォーマットを示す図である。プロセッサが実行する命令は２１ビットを１単位（１ユニット）として構成される。命令には、１つのユニットで構成される２１ビット命令（１ユニット命令）と２つのユニットで構成される４２ビット命令（２ユニット命令）の２種類の命令が存在する。（以下、「命令」とは、２１ビット命令又は４２ビット命令のいずれかを指す）。
【００１３】
１ビットのフォーマット情報１０１は、その命令がいずれの長さの命令であるかを示す。具体的には、フォーマット情報１０１が“０”の時には、そのフォーマット情報１０１が含まれるユニットで１つの命令、すなわち、２１ビット命令を構成する。フォーマット情報１０１が“１”の時には、そのフォーマット情報１０１が含まれるユニットと後続するユニットで１つの命令、すなわち、４２ビット命令を構成する。
【００１４】
１ビットの並列実行境界情報１００は、その命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示す。具体的には、並列実行境界情報１００が“１”の時には、その並列実行境界情報１００が含まれる命令と後続命令の間に並列実行の境界が存在し、これらの命令は異なるサイクルにおいて実行される。並列実行境界情報１００が“０”の時には、並列実行境界情報１００が含まれる命令と後続命令の間に並列実行の境界が存在せず、これらの命令は同一のサイクルにおいて実行される。
【００１５】
フォーマット情報１０１と並列実行境界情報１００以外の部分は、オペレーションを示す。すなわち、２１ビット命令では１９ビットの長さで、４２ビット命令では４０ビットの長さでオペレーションが指定される。具体的には、“Ｏｐ１”、“Ｏｐ２”、“Ｏｐ３”、“Ｏｐ４”のフィールドは、オペレーションの種類を表すオペコードを、“Ｒｓ”のフィールドは、ソースオペランドとなるレジスタのレジスタ番号を、“Ｒｄ”のフィールドは、デスティネーションオペランドとなるレジスタのレジスタ番号を示す。また、“ｉｍｍ５”及び“ｉｍｍ３２”のフィールドは、それぞれ５ビットと３２ビットの演算用定数オペランドを示す。そして、“ｄｉｓｐ１３”及び“ｄｉｓｐ３２”のフィールドは、それぞれ１３ビットと３２ビットの偏位（ディスプレースメント）を示す。
【００１６】
３２ビットの定数などの長い定数を扱う転送命令や演算命令、大きなディスプレースメントを指定する分岐命令は４２ビット命令で定義され、それらを除くほとんどの命令は２１ビット命令で定義される。４２ビット命令の構成要素である２つのユニットのうち、後ろのユニットには、長い定数やディスプレースメントの一部のみが配置され、オペコードは配置されない。
（プロセッサの命令の読み出しと実行の動作）
次に、本実施の形態のプロセッサによる命令の読み出しと実行の動作について説明する。本実施の形態のプロセッサは、静的な並列スケジューリングを前提としたプロセッサである。図２（ａ）は、命令の格納、及び読み出し単位である命令パケットを示す図である。命令パケットは、３個のユニット（６３ビット）とダミーデータ（１ビット）で構成される。プロセッサは、１サイクルにおいて、６４ビットの固定長（以下、「パケット」と呼ぶ）で命令を読み出す。つまり、１つの命令は２１ビット単位であり、メモリからの読み出しに不便であるので、命令を複数個組み合わせたバイト単位の命令パケットを読み出しの単位としている。また、この例のように、命令パケット内のユニットの個数が２の巾乗数でない場合に、特に効果がある。後述するように、命令パケット内のユニットの位置を通常の２進数で表すと都合が悪いからである。以下、１パケットを構成する３個のユニットを、アドレス値の小さい方から順に第１ユニット、第２ユニット、第３ユニットと呼ぶことにする。
【００１７】
図２（ｂ）は、命令の読み出しの順序を示す図である。図に示すように、命令の読み出しは、各サイクル、１パケットである。
図２（ｃ）は、命令の実行の順序を示す図である。図に示すように、１サイクルで実行する命令の単位は、並列実行の境界までである。つまり、各サイクルにおいて並列実行境界情報１００が“１”である命令までの命令を並列実行する。読みだされながら実行されなかったユニットは、命令バッファに蓄積され、次のサイクル以降で実行される。
【００１８】
以上のように、本実施の形態のプロセッサは、固定長のパケット単位で命令を読み出し、各サイクルにおいて並列度に応じた適切な数のユニットを実行するものである。このように、本実施の形態のプロセッサは、命令パケット内の先頭の命令以外の命令でも、１サイクルの実行開始位置にすることができるのは、後述するように命令パケット内の命令の位置を指定する“パケット内アドレス”（下位ＰＣ）によるものである。
【００１９】
また、本実施の形態のプロセッサは、バイトアラインされていない命令、すなわち、語長がバイト単位でない命令を実行するのに、特に適しているという特徴をもつ。つまり、バイト単位の長さをもたない命令であっても、バイト単位の長さをもつ命令パケットの単位でプロセッサ内に読み込めば、命令パケット内でのその命令はパケット内アドレスによって指定できるからである。
【００２０】
図３は、一般のプロセッサで、バイトアラインされていない命令を実行する場合の命令の格納、読み出し方法の例を示す。命令が２１ビットとバイトアラインされていない場合には、その命令をバイト単位で読み出しできるようにするため、その命令に３ビットの未使用領域を付加して、２４ビット長とする。すなわち、本来２１ビット長である１つの命令が２４ビットを単位としてメモリに格納され、読み出しがなされる。この場合では、３つの命令の長さは７２ビット長となるのに対して、本実施の形態では、３つの命令の長さは６４ビット長であり、プログラムサイズを小さく抑えることができる。
【００２１】
なお、本実施の形態では、命令の語長が２１ビット単位である場合のパケットの構成について説明しているが、これに限定するものでなく、その他の語長をもつ命令に対しても、パケットを構成して、パケット単位で命令を読み出すことができる。例えば、命令の語長がｎビット単位である場合には、（ｎ×ｍ＋ｒ）ｍｏｄ８＝０であって、ｎ×ｍ／（ｎ×ｍ＋ｒ）を最大にするようなｍとｒの組合わせを選択し、１パケットをｎビットの命令単位がｍ個とｒビットのダミーデータで構成することとしてもよい。これによって、ダミーデータの比率が小さな、バイト単位の長さをもつ命令パケットを構成することができる。
（命令のアドレスの表現方法）
次に、本実施の形態における命令のアドレスの表現方法について説明する。命令のアドレスは、ユニットの位置を特定するアドレスを意味し、３２ビットで表現される。
【００２２】
３２ビット中の上位２９ビットは、命令パケットを特定し、「パケットアドレス」と呼ぶ。「パケットアドレス」は、１６進数２９ビットの２９’ｈ０１２３４５６７等で表記することとする。この「パケットアドレス」の値を左へ３ビット分ビットシフトした値は、命令パケットが格納されているメモリアドレスとなる。
【００２３】
３２ビット中の下位３ビットは、命令パケットに含まれるユニットを特定し、「パケット内アドレス」と呼ぶ。「パケット内アドレス」は、２進数３ビットの３’ｂ００１等で表記することとする。パケット内アドレス３’ｂ０００は、パケット内の第１ユニットを示し、３’ｂ０１０パケット内の第２ユニットを示し、３’ｂ１００パケット内の第３ユニットを示す。パケット内アドレスは、これに限定するものでない。３個の数値で、３個のユニットを示すこととすれば、他の数値で表現してもよい。
【００２４】
また、本実施の形態における命令のアドレスの指定は、１つの命令パケット８バイト分に対して３ビットを割り当てている。従って、本実施の形態における命令のアドレスの指定方法と、一般のプロセッサにおける１バイトごとに１つずつアドレスを割り当てるアドレスの指定方法とでは、上位２９ビットで指定されるアドレスは、同一のメモリアドレスを示すことになる。
（プロセッサが実行するオブジェクトコードの作成方法）
本実施の形態に係るプロセッサが実行するオブジェクトコードの作成方法について説明する。
【００２５】
まず、本実施の形態において用いるいくつかの用語について説明する。
「ＰＣ相対値」とは、２つの命令のアドレスの差分値である。
「ラベル」は、プログラムに含まれるもので、条件分岐や、無条件分岐や、サブルーチンへの分岐や、サブルーチンからのリターンなどの分岐命令の行き先（分岐先）を示すものである。
【００２６】
「ラベル」には、「命令のアドレスに解決すべきラベル」と、「ＰＣ相対値に解決すべきラベル」がある。「命令のアドレスに解決すべきラベル」は、プログラムがオブジェクトコードに変換される過程で、命令の絶対アドレスにより置き換えられるもので、例えば、メモリからレジスタｒ１への命令の転送命令「ｍｏｖＬ２、ｒ１」中のラベルＬ２が該当する。「ＰＣ相対値に解決すべきラベル」は、プログラムがオブジェクトコードに変換される過程で、ＰＣ相対値に置き換えられるもので、例えば、ＰＣ相対値への無条件分岐命令「ｂｒａＬ１」中のラベルＬ１が該当する。また、別の分類として、ラベルには、「局所ラベル」と「外部ラベル」がある。すなわち、ラベルとラベルを含む命令が同一のモジュール、すなわち、１つの処理機能をもったひとまとまりのサブプログラムに含まれる場合には、そのラベルを「局所ラベル」と呼び、ラベルとラベルを含む命令が、別個のモジュールに含まれる場合には、そのラベルを「外部ラベル」と呼ぶ。
【００２７】
図４は、本実施の形態に係るプロセッサが実行するオブジェクトコードが、コンパイラ装置と、最適化装置と、アセンブラ装置と、リンカ装置により作成される過程を示す図である。ここでは、それぞれの機能の概略を説明する。
コンパイラ装置３０１は、Ｃ言語等の高級言語で書かれたソースコード３００の内容を解析し、アセンブラコード３０２を出力する。
【００２８】
最適化装置３０３は、アセンブラコード３０２に仮アドレスを付与し、命令列を３ユニットごとに連結し、その結果である最適化コード３０４を出力する。その過程において、局所ラベルについては、それぞれＰＣ相対値又は命令のアドレスを算出して、その値に基づき、命令が１ユニットで表されるか２ユニットで表されるかの命令の大きさが決められる。
【００２９】
アセンブラ装置３０５は、最適化コード３０４より再配置可能番地形式であるリロケータブルコード３０６を出力する。その過程において、局所ラベルであって、ＰＣ相対値に解決すべきラベルは、ＰＣ相対値に変換される。
リンカ装置３０７は、複数のモジュールを結合する。すなわち、複数のリロケータブルコード３０６を結合して、その結果であるオブジェクトコード３０８を出力する。その過程において、未解決なラベルは、ＰＣ相対値又は命令のアドレスに変換される。
【００３０】
プロセッサ３０９は、オブジェクトコード３０８を実行する。
以上のように、高級言語で記述されたプログラムが、コンパイラ装置３０１と、最適化装置３０３と、アセンブラ装置３０５と、リンカ装置３０７によって、プロセッサが実行可能な形式であるオブジェクトコードに変換される。プログラム中のラベルについては、オブジェクトコード生成過程のいずれかにおいて、ＰＣ相対値又は命令のアドレスに変換される。すなわち、局所ラベルであって、かつＰＣ相対値に解決すべきラベルのアドレス解決は、アセンブラ装置３０５によって行われる。局所ラベルであって、かつ命令のアドレスに解決すべきラベルのアドレス解決、及び外部ラベルのアドレス解決は、リンカ装置３０７によって行われる。
【００３１】
以下では、図３に示したプロセッサ３０９と、リンカ装置３０７と、アセンブラ装置３０５と、最適化装置３０３について、その構成及び動作の詳細を説明する。
（プロセッサ）
図５は、プロセッサ３０９及び外部メモリの詳細を示すブロック図である。
【００３２】
プロセッサ３０９は、最大３命令を並列実行可能なプロセッサであり、演算器４０１ａ〜ｃと、汎用レジスタ４０２、上位ＰＣ４０３と、下位ＰＣ４０４と、上位ＰＣ演算器４１１と、下位ＰＣ演算器４０５と、ＩＮＣ４１２と、命令バッファ４０８と、プリフェッチ上位カウンタ４１０と、プリフェッチ下位カウンタ４１３と、命令デコーダ４０９ａ〜４０９ｃと、ＰＣ相対値セレクタ４２０と、即値セレクタ４２１と、オペランドデータバッファ４２３と、オペランドバッファ４２２により構成される。外部メモリは、データメモリ４０６、命令メモリ４０７より構成される。
【００３３】
以下、上位ＰＣ４０３と下位ＰＣ４０４とを合わせてＰＣと称し、上位ＰＣ演算器４１１と下位ＰＣ演算器４０５とを合わせてＰＣ演算器と称する。
第１演算器４０１ａと、第２演算器４０１ｂと、第３演算器４０１ｃは、それぞれ１つの演算を実行する。これらの演算器は同時に実行可能である。
汎用レジスタ４０２は、データ、アドレス等を格納する。
【００３４】
上位ＰＣ４０３は、次のサイクルで実行すべき命令群の先頭命令のアドレスの上位２９ビット、すなわち、パケットアドレスを保持する。
下位ＰＣ４０４は、次のサイクルで実行すべき命令群の先頭命令のアドレスの下位３ビット、すなわち、パケット内アドレスを保持する。
命令メモリ４０７は、オブジェクトコード３０８で表された命令を記憶する。
【００３５】
命令バッファ４０８は、命令メモリ４０７から読み出した命令を格納する。
第１命令デコーダ４０９ａと、第２命令デコーダ４０９ｂ、第３命令デコーダ４０９ｃは、命令を解読し、解読した命令が実行可能なら、他のプロセッサの構成要素を指示してその命令を実行させる。第１命令デコーダ４０９ａには、命令バッファ４０８に格納されている先頭の命令が入力され、第２命令デコーダ４０９ｂには、その次の命令が入力され、第３命令デコーダ４０９ｃには、その次の命令が入力される。命令デコーダ４０９ａ〜４０９ｃは、ユニットの並列実行境界情報を調べて、そのサイクルにおいて実行可能な命令のみを実行させる。例えば、定数値を演算する命令の場合には、その定数値を即値セレクタ４２１を介して演算器４０１ａに送って、演算を実行させる。分岐命令の場合には、ＰＣ相対値をＰＣ相対値セレクタ４２０を介して上位ＰＣ演算器４１１及び下位ＰＣ演算器４０５に送って、ＰＣを更新させる。そして、命令デコーダ４０９ａ〜４０９ｃは、実行されたユニット数を制御信号によりＩＮＣ４１２に送りＰＣを更新させ、実行されたユニット数を制御信号により命令バッファ４０８に送り、命令バッファ４０８内の実行されたユニットを消去させる。
【００３６】
ＰＣ相対値セレクタ４２０は、命令デコーダ４０９ａ〜４０９ｃから出力されたＰＣ相対値を上位ＰＣ演算器４１１及び下位ＰＣ演算器４０５へ出力する。
即値セレクタ４２１は、命令デコーダ４０９ａ〜４０９ｃから出力された即値を汎用レジスタ４０２又は演算器４０１ａ〜４０１ｃへ出力する
ＩＮＣ４１２は、命令デコーダ４０９ａ〜４０９ｃからの制御信号により、実行されたユニット数の情報を取得し、その分だけ上位ＰＣ４０３、下位ＰＣ４０４の値をインクリメントする。これによって、次のサイクルで実行すべき命令群の先頭の命令のパケットアドレスが上位ＰＣに設定され、パケット内アドレスが下位ＰＣに設定される。
【００３７】
上位ＰＣ演算器４１１及び下位ＰＣ演算器４０５は、それぞれ上位ＰＣ４０３、下位ＰＣ４０４を更新する。命令デコーダ４０９ａ〜４０９ｃが分岐命令をデコードすると、当該分岐命令に含まれるＰＣ相対値の上位２９ビットが上位ＰＣ演算器４１１に送られ、ＰＣ相対値の下位３ビットが下位ＰＣ演算器４０５に送られる。下位ＰＣ演算器４０５は、現在の下位ＰＣ４０４の値と、ＰＣ相対値の下位３ビットの値とを加算又は減算し、その演算結果を更新値として下位ＰＣ４０４に送る。上位ＰＣ演算器４１１は、現在の上位ＰＣ４０３の値と、ＰＣ相対値の上位２９ビットの値とを加算又は減算し、その演算結果を更新値として上位ＰＣ４０３に送る。なお、ＰＣ演算器の動作、すなわち演算方法については後述する。以上のようにして、分岐命令の実行にあたって、次に実行すべき分岐先命令のパケットアドレスが上位ＰＣ４０３に設定され、パケット内アドレスが下位ＰＣ４０４に設定される。また、上位ＰＣ演算器４１１及び下位ＰＣ演算器４０５は、ＰＣ相対値と汎用レジスタ４０２に格納されているアドレスとの演算により、ＰＣを更新する場合もある。
【００３８】
プリフェッチ上位カウンタ４１０は、命令メモリ４０７から読み出す命令群の先頭命令のアドレスの上位２９ビット、すなわちパケットアドレスを示す。プリフェッチ上位カウンタ４１０は、通常、１サイクルごとに１つずつその値をインクリメントする。また、１つ前のサイクルで実行された命令が分岐命令である場合には、上述のようにして上位ＰＣ４０３に設定された分岐先の命令のパケットアドレスが上位ＰＣ４０３からプリフェッチ上位カウンタ４１０に送られ、プリフェッチ上位カウンタ４１０の値は上位ＰＣ４０３と同一の値に設定される。
【００３９】
プリフェッチ下位カウンタ４１３は、命令メモリ４０７から読み出す命令群の先頭命令のアドレスの下位３ビット、すなわちパケット内アドレスを指定する。本実施の形態では、プリフェッチ下位カウンタ４１３は、３’ｂ０００に設定するものとする。従って、読み出される命令は命令パケット単位で指定されることになり、１サイクルごとに１パケットが命令メモリ４０７から命令バッファ４０８に送られる。
【００４０】
データメモリ４０６は、オペランドデータを格納する。
オペランドデータバッファ４２３及びオペランドアドレスバッファ４２２は、データメモリとプロセッサとの間のバッファである。
次に、本実施の形態において最も特徴的である、命令のアドレスのインクリメント方法及び演算方法について説明する。
（命令のアドレスのインクリメント方法）
本実施の形態における命令のアドレスのインクリメント方法について説明する。命令のアドレスのインクリメントは、命令のパケット内アドレスにインクリメント値を加算し、桁上がりがある場合には、その桁上がり数をパケットアドレスに加えることとする。
【００４１】
図６は、パケット内アドレスのインクリメントの規則を示すインクリメント表である。図に示すように、命令のアドレスのインクリメントは、パケット内アドレスが３’ｂ０００、又は３’ｂ０１０の場合には、下位３ビットの値に２を加算する。パケット内アドレスが３’ｂ１００の場合には、パケットアドレスに桁上がりを発生させて（すなわち上位２９ビットの値に１を加算）、下位３ビットの値を３’ｂ０００とする。つまり、パケット内アドレスのインクリメントは３’ｂ０００，３’ｂ０１０，３’ｂ１００を巡回する３進演算である。例えば、インクリメント値が２で、インクリメント前のパケット内アドレスの値が３’ｂ１００であったとすると、インクリメント後のパケット内アドレスは３’ｂ０１０となり、パケットアドレスに桁上がりが１発生する。
【００４２】
このように、本実施の形態では、通常の２進数によりパケット内アドレスを表す必要がない。この点が、特に、命令パケット内のユニットの個数が２の巾乗数でない場合に対して効果的である。つまり、命令パケット内のユニットの個数が２の巾乗数でない場合には、命令パケット内のユニットの位置を通常の２進数で表現しても、ユニットの位置を移動する際に２進数の演算法を用いることができない。しかし、本実施の形態では、パケット内のユニットの位置を特有のｍ個の数値を用いて表し、ユニットの位置の移動するための演算としてｍ個の数値が巡回する演算を用いることによって、命令パケット内のユニットの個数が２の巾乗数でない場合にでも、ユニットの位置指定、ユニットの位置の移動のための演算が可能である。
（命令のアドレスの演算方法）
次に、本実施の形態における命令のアドレスの演算方式の一つである桁上がり方式について説明する。命令のアドレスの演算方法には桁上がり方式以外にも、分離方式、絶対位置指定方式、リニアアドレス方式があるが、それらについては後述する。桁上がり方式では、命令のアドレスを上位２９ビットと、下位３ビットに分離して演算する。すなわち、パケットアドレスとパケット内アドレスをそれぞれ別々に計算する。ただし、上位ビットの演算の際、下位３ビットの演算で発生した桁上がり数または桁借り数を含めた演算が行われる。
【００４３】
まず、プロセッサ３０９が行う、分岐命令のアドレスとＰＣ相対値とを加算して分岐先命令のアドレスを求める方法について説明する。図５に示す下位ＰＣ演算器４０５は、分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとを加算する。図７（ａ）は、分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとの加算規則を示す加算表である。図に示すように、下位３ビットの加算は通常の２進演算と異なり、３’ｂ０００，３’ｂ０１０，３’ｂ１００を巡回する３進演算である。図に示すような桁上がりが生じる場合には、下位ＰＣ演算器４０５は、上位ＰＣ演算器４１１に桁上がり数を送る。
【００４４】
図５に示す上位ＰＣ演算器４１１は、分岐命令のアドレスの上位２９ビットとＰＣ相対値の上位２９ビットとを加算する。この時、下位ＰＣ演算器４０５の演算で桁上がりが生じた場合には、その桁上がり数も加算する。加算方法は通常の２進演算である。
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果のの下位３ビットが下位ＰＣ４０４に設定され、加算結果の上位２９ビットが上位ＰＣ４０３に設定される。
【００４５】
次に、最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７が行う、ＰＣ相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算方法について説明する。減算は、加算と同様に上位２９ビットと下位３ビットに分離して行う。後述の最適化装置３０３の下位アドレス減算手段９０７、アセンブラ装置３０５の下位アドレス減算手段８０６、リンカ装置３０７の下位アドレス減算手段７０６は、分岐先命令のアドレスの下位３ビットから分岐命令のアドレスの下位３ビットを減算する。図７（ｂ）は、分岐先命令のアドレスの下位３ビットと分岐命令のアドレスの下位３ビットとの減算規則を示す減算表である。図に示すように、下位３ビットの減算は通常の２進演算と異なり、３’ｂ０００，３’ｂ０１０，３’ｂ１００を巡回する３進演算である。図に示すような桁借りが生じる場合には、下位アドレス減算手段９０７等は、それぞれ、後述の上位アドレス減算手段９１０等に桁借り数を送る。
【００４６】
後述の最適化装置３０３の上位アドレス減算手段９１０と、アセンブラ装置３０５の上位アドレス減算手段８０９と、リンカ装置３０７の上位アドレス減算手段７０９は、分岐命令のアドレスの上位２９ビットと分岐先命令の上位２９ビットとを減算する。この時、下位アドレス減算手段９０７等の演算で桁借りが生じた場合には、その桁借り数も減算する。減算方法は通常の２進演算である。
【００４７】
以上により算出された下位３ビットの減算結果を下位３ビットとし、上位２９ビットの減算結果を上位２９ビットとした値がＰＣ相対値となる。また、プロセッサにより行なわれる分岐命令のアドレスとＰＣ相対値とを減算して分岐先命令のアドレスを求める場合にも、上述と同様の方法により行なわれる。
以上のように、分岐先命令のアドレスと分岐命令のアドレスとの差分よりプログラムカウンタ相対値を算出する最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７と、そのプログラムカウンタ相対値を用いて分岐先命令のアドレスを算出するプロセッサ３０９とが、どちらも同一の桁上がり方式によるアドレス演算を行うことによって、プロセッサは、分岐命令の実行時にプログラム相対値から分岐先命令のアドレスを誤りなく算出できる。また、この桁上り方式によるアドレス演算は、プログラムカウンタとＰＣ相対値との上位ビットの演算と下位ビットの演算との間に連続性を備えたアドレス演算が可能となる特徴を有する。
（最適化装置）
図８は、図４に示した最適化装置３０３の構成要素及び入出力データを示すブロック図である。この最適化装置３０３の詳細について説明する。最適化装置３０３は、コンパイラ装置３０１が生成したアセンブラコード３０２を最適化し、命令列を３ユニットを単位とするパケットに連結し、その結果である最適化コード９１５を出力する。最適化装置３０３は、コード最適化手段９０２と、アドレス付与手段９０４と、ラベル検出手段９０５と、下位アドレス減算手段９０７と、上位アドレス減算手段９１０と、アドレス差算出手段９１２と、ラベル情報解決手段９１４により構成される。
【００４８】
コード最適化手段９０２は、アセンブラコード３０２の最適化を行い、最適化処理コード９０３を生成する。コード最適化手段９０２の処理は、公知の最適化装置による処理と同様であるので、詳細な説明は省略する。
アドレス付与手段９０４は、コード最適化手段９０２により得られた最適化処理コード９０３の各命令のアドレスの予測を行い、各命令に予測したアドレスの付与を行い（以下、このアドレスを「仮アドレス」と呼ぶ）、その結果であるアドレス付与コード９１６を出力する。
【００４９】
ラベル検出手段９０５は、アドレス付与コード９１６から「局所ラベル」を検出する。ラベル検出手段９０５は、検出したラベルが「命令のアドレスに解決すべきラベル」であれば、そのラベルが位置する命令の仮アドレスを取り込む。また、検出したラベルが「ＰＣ相対値に解決すべきラベル」であれば、分岐命令の仮アドレスと分岐先命令の仮アドレスを取り込む。そして、ラベル検出手段９０５は、ラベルを含む命令とそのラベルが解決される値についての情報からなるラベル情報９０６を出力する。
【００５０】
下位アドレス減算手段９０７と、上位アドレス減算手段９１０と、アドレス差算出手段９１２は、ラベル情報９０６中の「ＰＣ相対値に解決すべきラベル」について、ＰＣ相対値の算出を行う。
下位アドレス減算手段９０７は、分岐先命令の仮アドレスの下位３ビットから分岐命令の仮アドレスの下位３ビットを減算し、桁借り数９０８と下位減算結果９０９を算出する。
【００５１】
上位アドレス減算手段９１０は、分岐先命令の仮アドレスの上位２９ビットから分岐命令の仮アドレスの上位２９ビットと下位アドレス減算手段９０７が算出した桁借り数９０８とを減算し、上位減算結果９１１を算出する。
アドレス差算出手段９１２は、下位アドレス減算手段９０７が算出した下位減算結果９０９を下位３ビットとし、上位アドレス減算手段９１０が算出した上位減算結果９１１を上位２９ビットとするアドレス差９１３を算出する。
【００５２】
ラベル情報解決手段９１４は、最適化処理コード９０３中のラベルを含む命令を、アドレス付与手段９０４が予測し付与したアドレス又は、アドレス差算出手段９１２が算出したアドレス差９１３の値から、その値の大きさに応じた命令に変換する。すなわち、ラベルを含む命令は、前記付与アドレスあるいは前記アドレス差の値が１３ビット以内で表現できれば２１ビット命令に変換され、そうでなければ４２ビット命令に変換される。
【００５３】
そして、ラベル情報解決手段９１４は、ラベル解決後の命令列を３ユニットを単位とするパケットに連結し、その結果である最適化コード９１５を出力する。
次に、最適化装置の動作を具体例を用いて説明する。
図９は、最適化装置の動作手順を示すフローチャートである。
まず、コード最適化手段９０２は、入力されたアセンブラコード３０２を最適化し、最適化コード９０３を生成する。図１０は、コード最適化手段９０２が生成した最適化処理コード９０３の一部分を示す。図１０のいくつかの命令について説明を行う。「Ｌ１：ｍｏｖｒ２，ｒ１」１０００は、ラベルＬ１の位置を示し、レジスタｒ２からレジスタｒ１への転送を行う命令である。「ｊｓｒｆ」１００１は、関数呼び出しであり、ラベルｆ（外部ラベル）への相対分岐を行う命令である。ｒｅｔ命令により、このアドレスに再び戻る。「ａｄｄｒ０，ｒ４」１００２は、レジスタｒ０とレジスタｒ４の加算を行い、結果をｒ４へ格納する命令である。「ａｎｄｒ１，ｒ３」１００３は、レジスタｒ１とｒ３の論理積を取り、結果をｒ３へ格納する命令である。「ｍｏｖＬ２，ｒ２」１００４は、ラベルＬ２が置かれている命令のアドレスを、レジスタｒ２に転送する命令である。「ｌｄ（ｒ２），ｒ０」１００５は、レジスタｒ２が示すアドレスに格納されているデータをレジスタｒ０へ転送する命令である。「ｂｒａＬ１」１００６は、ラベルＬ１（局所ラベル）への相対分岐を行う命令である。なお、図１０において、命令１００７に後続する命令が省略してあるが、この後続する命令中には、ラベルｆの位置する命令は存在しないこととする（ステップＳ３９０１）。
【００５４】
次に、アドレス付与手段９０４は、最適化処理コード９０３の各命令に対して仮アドレスを付与し、アドレス付与コード９１６を生成する。図１１は、図１０の最適化処理コードより生成されたアドレス付与コード９１６を示す。ここでは、３２’ｈ０００００８００から始まる仮アドレスが割り当てられている（ステップＳ３９０２）。
【００５５】
ラベル検出手段９０５は、アドレス付与コード９１６から局所ラベルの検索を行い、検索されたラベルを含む命令とそのラベルの解決される値についての情報とからなるラベル情報を出力する。図１２は、図１１のアドレス付与コード９１６から生成されたラベル情報９０６を示す。図に示すように、命令のアドレスに解決すべきラベルとして命令１１０４のＬ２、ＰＣ相対値に解決すべきラベルとして命令１１０６のＬ１が検出されている。ラベルＬ２については、Ｌ２を含む命令「ｍｏｖＬ２，ｒ２」と解決されるアドレスの情報が取り込まれ、ラベルＬ１については、Ｌ１を含む命令「ｂｒａＬ１」とＰＣ相対値を計算するための分岐先命令のアドレスと分岐命令のアドレスの情報が取り込まれている。なお、命令１１０１のラベルｆは外部ラベルであるため、最適化の対象外である（ステップＳ３９０３、Ｓ３９０４）。
【００５６】
ラベル情報９０６中にＰＣ相対値に解決すべきラベルがある場合には、ＰＣ相対値の算出が行なわれる。下位アドレス減算手段９０７は、ＰＣ相対値であるＬ１が示す値の下位ビットを計算する。下位アドレス減算手段９０７は、分岐先命令１１００の仮アドレス３２’ｈ０００００８００の下位３ビット３’ｂ０００から分岐命令１１０６の仮アドレス３２’ｈ０００００８１２の下位３ビット３’ｂ０１０を減算する。その結果、桁借り数９０８として１が得られ、下位減算結果９０９として３’ｂ１００が得られる（ステップＳ３９０５、Ｓ３９０６）。
【００５７】
上位アドレス減算手段９１０は、ＰＣ相対値であるＬ１が示す値の上位ビットを計算する。上位アドレス減算手段９１０は、分岐先命令１１００の仮アドレスの上位２９ビット２９’ｈ０００００１００から分岐命令１１０６の仮アドレスの上位２９ビット２９’ｈ０００００１０２と桁借り数９０８である１を減算する。その結果、上位減算結果９１１として２９’ｈ１ｆｆｆｆｆｆｄ（１０進数では−３を示す。以下、負数は２の補数で表す。）が得られる（ステップＳ３９０７）。
【００５８】
アドレス差算出手段９１２は、下位演算結果９００を下位ビットとし、上位演算結果９１１を上位ビットとしたアドレス差、すなわち、ＰＣ相対値を算出する。ここでは、３’ｂ１００を下位ビットとし、２９’ｈ１ｆｆｆｆｆｆｄを上位ビットして、アドレス差９１３である３２’ｈｆｆｆｆｆｆｅｃが得られる（ステップＳ３９０８）。
【００５９】
ラベル情報解決手段９１４は、ラベル情報９０６のラベルが解決される値が１３ビットで表現できるか否かにより、ラベルを含む命令の大きさを決定する。図１２に示すラベルＬ２が解決される値は３２’ｈ１２３４５６７８であり、１３ビットで表すことができないので、ラベルＬ２を含む命令１１０４は４２ビット命令となる。また、ラベルＬ１が解決される値は３２’ｈｆｆｆｆｆｆｅｃであり、１３ビットで表すことが可能なので、ラベルＬ１を含む命令１１０６は２１ビット命令となる（ステップＳ３９０９、Ｓ３９１０、Ｓ３９１１）。
【００６０】
さらに、ラベル情報解決手段９１４は、アドレス付与コード９１６に基づいて命令列を３ユニットを単位とするパケットに連結する。この際に、ラベルを有する命令については、上記のようにして決定された大きさと一致するようにする。すなわち、２１ビット命令については１ユニットを使用し、４２ビット命令については２ユニットを使用するものとする。
そして、ラベル情報解決手段９１４は、パケット化された命令列を最適化コードとして出力する。図１３は、図１１のアドレス付与コード９１６から生成された最適化コード９１５を示す。図１３は、一つのパケットを構成する命令が一行に記述され、記号｜｜によりパケット中の命令は区切られている。また、４２ビット命令は、（）でくくられた命令を後続させることにより、その命令が２つのユニット分の領域を使用することを示している（ステップＳ３９１２）。
【００６１】
以上のように、桁上がり方式によるアドレス演算を行って予測することにより、桁上がり方式に対応したプロセッサの最適化装置を実現することが可能となる。
なお、アドレス付与手段９０４において付与された仮アドレスと、アドレス差算出手段９１２において算出されたＰＣ相対値は、すべてラベルを含む命令のサイズを確定させるために予測された値であって、実際の値とは異なる場合があるので、以降の処理では用いないこととする。
（アセンブラ装置）
図１４は、図４に示したアセンブラ装置３０５の構成及び関連する入出力データを示すブロック図である。このアセンブラ装置３０５の詳細について説明する。アセンブラ装置３０５は、最適化装置３０３が生成した最適化コード３０４を再配置可能番地形式であるリロケータブルコード３０６に変換するものである。アセンブラ装置３０５は、機械語コード生成手段８０２と、ラベル検出手段８０４と、下位アドレス減算手段８０６と、上位アドレス減算手段８０９と、アドレス差算出手段８１１と、ラベル情報解決手段８１３より構成される。
【００６２】
機械語コード生成手段８０２は、最適化コード３０４をプロセッサ３０９が実行可能な機械語コード８０３へ変換する。ただし、値が未解決なラベルについては、変換せずに機械語コード８０３中に保持する。その際に、機械語コード生成手段８０２は、各機械語コードに対してパケットアドレスとパケット内アドレスとを付与する。そして、この付与されたアドレスに基づいて、後述のラベルの解決がなされる。
【００６３】
ラベル検出手段８０４は、局所ラベルであって、２つの命令のアドレスの差分、すなわち、ＰＣ相対値に解決すべきラベルを検索し、分岐命令のアドレスと分岐先命令のアドレスを取り込む。そして、ラベル検出手段８０４は、ラベルを含む命令とそのラベルが解決される値についての情報からなるラベル情報８０５を出力する。
【００６４】
ラベル検出手段８０４で得られたラベル情報８０５を解決するため、下位アドレス減算手段８０６と、上位アドレス減算手段８０９と、アドレス差算出手段８１１は、以下のようにしてＰＣ相対値の算出を行う。
下位アドレス減算手段８０６は、分岐先命令のアドレスの下位３ビットから分岐命令のアドレスの下位３ビットを減算し、桁借り数８０７と下位減算結果８０８を算出する。
【００６５】
上位アドレス減算手段８０９は、分岐先命令の仮アドレスの上位２９ビットから分岐命令の仮アドレスの上位２９ビットと下位アドレス減算手段８０６が算出した桁借り数８０７とを減算し、上位減算結果８１０を算出する。
アドレス差算出手段８１１は、下位アドレス減算手段８０６が算出した下位減算結果８０８を下位３ビットとし、上位アドレス減算手段８０９が算出した上位減算結果８１０を上位２９ビットとするアドレス差８１２を算出する。
【００６６】
ラベル情報解決手段８１３は、機械語コード８０３中のラベルを、アドレス差算出手段８１１が算出したアドレス差８１２に置換し、その結果であるリロケータブルコード３０６を出力する。
次に、アセンブラ装置の動作について、最適化装置３０３が出力した図１３の最適化コードをアセンブラ装置３０５に入力した場合の例を用いて説明する。
【００６７】
図１５は、アセンブラ装置の動作手順を示すフローチャートである。
まず、機械語コード生成手段８０２は、最適化コード３０４をパケットごとにプロセッサ３０９に対応した機械語コード８０３へ変換する。ただし、値が未解決なラベルについては、変換せずに機械語コード８０３中に保持する。そして、機械語コード生成手段８０２は、各機械語コード８０３に対して、パケットアドレス（以下、これを「局所パケットアドレス」と呼ぶ）とパケット内アドレスを割り振る。図１６は、図１３の最適化コードから生成された機械語コード８０３を示す。なお、実際の機械語コードは、０と１だけのバイナリ形式で表されるが、図１６では説明の都合上、ニーモニック形式で示されている。また、各命令の並列実行境界情報１００とビットフォーマット情報１０１もこの段階ですでに明らかになっているが、この図では特に示さない。図１６では、２９’ｈ００００００００から始まるパケットアドレス（局所パケットアドレス）が割り当てられている。また、パケット１３００の命令「ｊｓｒｆ」中のラベルｆと、パケット１３０１の命令「ｍｏｖＬ２，ｒ２」中のラベルＬ２と、パケット１３０２の命令「ｂｒａＬ１」中のラベルＬ１は、値が未解決なため、変換されていない（ステップＳ１５００、Ｓ１５０１）。
【００６８】
次に、ラベル検出手段８０４は、機械語コード８０３中の未解決なラベルの中で、局所ラベルであって、ＰＣ相対値に解決すべきラベルを検出して、そのラベルが含まれる命令のアドレス、すなわち、分岐命令のアドレスと、分岐先命令のアドレスを取り込む。そして、ラベル検出手段８０４は、ラベルを含む命令とそのラベルが解決される値についての情報からなるラベル情報８０５を出力する。図１７は、図１６の機械語コードより作成されたラベル情報を示す。局所ラベルであって、ＰＣ相対値に解決すべきラベルとしてラベルＬ１が検出され、分岐命令のアドレスとして、３２’ｈ００００００１２が取り込まれて、分岐先命令のアドレス３２’ｈ００００００００が取り込まれている（ステップＳ１５０２、Ｓ１５０３）。
【００６９】
次に、下位アドレス減算手段８０６は、ＰＣ相対値であるＬ１が示す値の下位ビットを計算する。下位アドレス減算手段８０６は、分岐先命令１４０１のアドレス３２’ｈ００００００００の下位３ビット３’ｂ０００から分岐命令１４０９のアドレス３２’ｈ００００００１２の下位３ビット３’ｂ０１０を減算する。その結果、桁借り数８０７として１が得られ、下位減算結果８０８として３’ｂ１００が得られる（ステップＳ１５０４）。
【００７０】
次に、上位アドレス減算手段８０９は、ＰＣ相対値であるＬ１が示す値の上位ビットを計算する。上位アドレス減算手段８０９は、分岐先命令１４０１のアドレスの上位２９ビット２９’ｈ００００００００から分岐命令１４０９のアドレスの上位２９ビット２９’ｈ０００００００２と桁借り数８０７である１を減算する。その結果、上位減算結果８１０として２９’ｈ１ｆｆｆｆｆｆｄ（１０進数では−３を示す。以下、負数は２の補数で表す。）が得られる（ステップＳ１５０５）。
【００７１】
アドレス差算出手段８１１は、下位減算結果８０８を下位ビットとし、上位演算結果８１０を上位ビットとしたアドレス差、すなわち、ＰＣ相対値を算出する。この例では、３’ｂ１００を下位ビットとし、２９’ｈ１ｆｆｆｆｆｆｄを上位ビットして、アドレス差８１２である３２’ｈｆｆｆｆｆｆｅｃが得られる（ステップＳ１５０６）。
【００７２】
次に、ラベル情報解決手段８１３は、アドレス差８１２が下位１３ビットで表現できる場合には、そのアドレス差の下位１３ビットをＰＣ相対値とし、下位１３ビットで表現できない場合には、そのアドレス差をＰＣ相対値として、機械語コード８０３中のラベルＰＣ相対値に置換する。図１６のラベル情報中のラベルＬ１が解決されるアドレス差は３２’ｈｆｆｆｆｆｆｅｃであり、下位１３ビット１３’ｈ１ｆｅｃで表すことが可能なので、図１６の機械語コード中のラベルＬ１は下位１３ビットの値に変換される。このようにして機械語コードが変換されて、リロケータブルコードを生成する。図１８は、図１６の機械語コード８０３から生成されたリロケータブルコードを示す。図１８中の命令１６０９は、ラベルＬ１がＰＣ相対値に変換された命令である。図１８では、機械語コード８０３の出力時にすでに明らかになっていた各命令の並列実行境界情報１００とビットフォーマット情報１０１が示され、パケット中の１ビットが未使用ビットになっていることも示されている（ステップＳ１５０７、Ｓ１５０８、Ｓ１５０９）。
【００７３】
以上のように、桁上がり方式によるアドレス演算を行ってＰＣ相対値を求めることにより、桁上がり方式に対応したプロセッサのアセンブラ装置を実現することが可能となる。
（リンカ装置）
図１９は、図４に示したリンカ装置３０７の構成及び関連する入出力データを示すブロック図である。このリンカ装置３０７の詳細について説明する。リンカ装置３０７は、複数のリロケータブルコード７０１を結合して、各命令のアドレスを決定し、プロセッサ３０９が実行可能な絶対番地形式であるオブジェクトコード３０８を出力するものである。リンカ装置３０７は、コード結合手段７０２と、再配置情報検出手段７０４と、下位アドレス減算手段７０６と、上位アドレス減算手段７０９と、アドレス差算出手段７１１と、再配置情報解決手段７１３とから構成される。
【００７４】
コード結合手段７０２は、入力された複数のリロケータブルコード７０１の結合を行い、すべての命令のアドレスを決定する。そして、コード結合手段７０２は、命令のアドレスに解決すべきラベルについては、上記の決定されたアドレスに解決し、その結果である結合コード７０３を出力する。
再配置情報検出手段７０４は、ＰＣ相対値に解決すべき外部ラベルを検索し、分岐命令のアドレスと分岐先命令のアドレスを取り込む。そして、再配置情報検出手段７０４は、ラベルを含む命令とそのラベルが解決される値についての情報からなる再配置情報７０５を出力する。ここで得られた再配置情報を解決するため、下位アドレス減算手段７０６と、上位アドレス減算手段７０９と、アドレス差算出手段７１１は、以下のようにしてＰＣ相対値の算出を行う。
【００７５】
下位アドレス減算手段７０６は、分岐先命令のアドレスの下位３ビットから分岐命令のアドレスの下位３ビットを減算し、桁借り数７０７と下位減算結果７０８を算出する。
上位アドレス減算手段７０９は、分岐先命令のアドレスの上位２９ビットから分岐命令のアドレスの上位２９ビットと下位アドレス減算手段７０６が算出した桁借り数７０７とを減算し、上位減算結果７１０を算出する。
【００７６】
アドレス差算出手段７１１は、下位アドレス減算手段７０６が算出した下位減算結果７０８を下位３ビットとし、上位アドレス減算手段７０９が算出した上位減算結果７１０を上位２９ビットとするアドレス差７１２を算出する。
再配置情報解決手段７１３は、結合コード７０３中のラベルを、アドレス差算出手段７１１が算出したアドレス差７１２に置換し、その結果であるオブジェクトコード３０８を出力する。
【００７７】
次に、リンカ装置の動作について、アセンブラ装置３０５が出力した図１８のリロケータブルコードをリンカ装置３０７に入力した場合の例を用いて説明する。
図２０は、リンカ装置の動作手順を示すフローチャートである。
まず、コード結合手段７０２は、複数個のリロケータブルコード７０１を結合する。図２２は、図１８に示すリロケータブルコード３０６と、別途生成された図２１に示すリロケータブルコードと結合された状態を示す。すなわち、図２１に示すリロケータブルコードの先頭のパケットアドレスを２９’ｈ００００００００とし、図１８に示すリロケータブルコードの先頭のパケットアドレスを２９’ｈ０００００００１として、これらの２つのリロケータブルコード結合されている（ステップＳ２０００、Ｓ２００１）。
【００７８】
そして、これによって、すべての命令のアドレスが決定されたことになるので、コード結合手段７０２は、さらに、命令のアドレスに解決すべきラベルのアドレスを解決して、その結果である結合コード７０３を出力する。図２２に示す命令１８１０「ｍｏｖＬ２，ｒ２」のラベルＬ２のアドレスは、パケット１８１５の先頭のアドレスである。コード結合手段は、当該アドレスが３２’ｈ１２３４５６８０と決定しているので、ラベルＬ２をこの値に置き換える。図２３は、結合コード７０３を示す。図２３中の結合コード１９１０は、ラベルＬ２が３２’ｈ１２３４５６８０に置換えられたことを示す（ステップＳ２００２）。
【００７９】
次に、再配置情報検出手段７０４は、結合コード７０３中で、ＰＣ相対値に解決すべき外部ラベルを検出して、そのラベル含まれる命令のアドレスと、ラベルが置かれている命令のアドレス、すなわち、分岐命令のアドレスと分岐先命令のアドレスを取り込む。そして、再配置情報検出手段７０４は、ラベルを含む命令とそのラベルが解決される値についての情報からなる再配置情報７０５を出力する。図２４は、図２３の結合コードから作成されたラベル情報を示す。ＰＣ相対値に解決すべき外部ラベルとしてラベルｆが検出され、分岐命令のアドレスとして、３２’ｈ０００００００ａが取り込まれて、分岐先命令のアドレス３２’ｈ００００００００が取り込まれている（ステップＳ２００３、Ｓ２００４）。
【００８０】
下位アドレス減算手段７０６は、ＰＣ相対値であるｆが示す値の下位ビットを計算する。下位アドレス減算手段７０６は、分岐先命令１９０１のアドレス３２’ｈ００００００００の下位３ビット３’ｂ０００から分岐命令１９０６のアドレス３２’ｈ０００００００ａの下位３ビット３’ｂ０１０を減算する。その結果、桁借り数７０７として１が得られ、下位減算結果７０８として３’ｂ１００が得られる（ステップＳ２００５）。
【００８１】
次に、上位アドレス減算手段７０９は、ＰＣ相対値であるｆが示す値の上位ビットを計算する。上位アドレス減算手段７０９は、分岐先命令１９０１のアドレス３２’ｈ００００００００の上位２９ビット２９’ｈ００００００００から分岐命令１９０６のアドレス３２’ｈ０００００００ａの上位２９ビット２９’ｈ０００００００１と桁借り数７０７である１を減算する。その結果、上位減算結果７１０として２９’ｈ１ｆｆｆｆｆｆｅが得られる（ステップＳ２００６）。
【００８２】
アドレス差算出手段８１１は、下位減算結果７０８を下位ビットとし、上位演算結果７１０を上位ビットとしたアドレス差、すなわち、ＰＣ相対値を算出する。３’ｂ１００を下位ビットとし、２９’ｈ１ｆｆｆｆｆｆｅを上位ビットして、アドレス差７１２である３２’ｈｆｆｆｆｆｆｆ４が得られる（ステップＳ２００７）。
【００８３】
次に、再配置情報解決手段７１３は、アドレス差７１２が下位１３ビットで表現できる場合には、そのアドレス差の下位１３ビットをＰＣ相対値とし、下位１３ビットで表現できない場合には、そのアドレス差をＰＣ相対値として、結合コード７０３中のラベルをＰＣ相対値に置換する。図２３の再配置情報中のラベルｆが解決されるアドレス差は３２’ｈｆｆｆｆｆｆｆ４であり、下位１３ビット１３’ｈ１ｆｆ４で表すことが可能なので、図２２の結合コード中のラベルｆは下位１３ビットの値に変換される。このようにして結合コードが変換されて、オブジェクトコードが生成される。図２５は、オブジェクトコードを示す。図２５中、オブジェクトコード２１０６は、ラベルｆがＰＣ相対値に変換されていることを示している（ステップＳ２００８、Ｓ２００９、Ｓ２０１０）。
【００８４】
以上のように、桁上がり方式によるアドレス演算を行ってＰＣ相対値を求めることにより、桁上がり方式に対応したプロセッサのリンカ装置を実現することが可能となる。
（プロセッサの具体的動作）
プロセッサの動作について、図２５のオブジェクトコードが命令メモリ４０７に蓄えられている場合の例を用いて説明する。
【００８５】
オブジェクトコードの実行開始時には、上位ＰＣ４０３は、２９’ｈ００００００００に、下位ＰＣ４０４は、３’ｂ０００に設定されている。プリフェッチ上位カウンタ４１０は、上位ＰＣ４０３からの入力を受けて、２９’ｈ００００００００に設定されている。
命令メモリ４０７から命令の読み出しは、プリフェッチ上位カウンタ４１０に基づき、パケット単位で行なわれる。すなわち、命令メモリ４０７に蓄えられた命令列のうち、プリフェッチ上位カウンタ４１０により指定されるパケット２１００が、命令バッファ４０８に格納される。プリフェッチ上位カウンタ４１０の値は、１サイクルごとに１つずつインクリメントされるので、２９’ｈ０００００００１となる。以下、１サイクルごとに、プリフェッチ上位カウンタ４１０が指定するパケットが命令メモリ４０７から命令バッファ４０８へ読み出される。
【００８６】
次に、上位ＰＣ４０３によりパケット２１０４が指定され、さらに下位ＰＣ４０４によりパケット２１０４中の命令２１０７が指定されている時の、命令の解読と実行の動作について説明する。命令バッファ４０８に格納された命令は、命令デコーダ４０９ａ〜４０９ｃにより解釈される。第１命令デコーダ４０９ａは、命令バッファ４０８に格納されている先頭のユニット２１０７を取り込み、そのユニットが１ユニット命令であるか、並列実行境界であるかを調べる。ユニット２１０７が１ユニット命令であり、並列実行境界でないので、第２命令デコーダ４０９ｂは、次のユニット２１０９を取り込み、そのユニットが１ユニット命令であるか、並列実行境界であるかを調べる。ユニット２１０９が１ユニット命令であり、並列実行境界ではないので、第３命令デコーダ４０９ｃは、次のユニットを取り込む、そのユニットが１ユニット命令であるか、並列実行境界であるかを調べる。そのユニットが１ユニット命令でないので、第３命令デコーダ４０９ｃは、次のユニットも取り込む。そして、第３命令デコーダ４０９ｃは、そのユニットが並列実行境界であることを知る。以上によって、命令２１０７、命令２１０９、命令２１１０が同時並列実行可能であることがわかる。
【００８７】
第１命令デコーダ４０９ａは、命令「ａｄｄｒ０，ｒ４」をデコードし、制御信号を第１演算器４０１ａに出力する。第１演算器４０１ａは、レジスタｒ０とレジスタｒ４の値を加算し、その結果をレジスタｒ４へ格納する。第２命令デコーダ４０９ｂは、命令「ａｎｄｒ１，ｒ３」をデコードし、制御信号を第２演算器４０１ｂに出力する。第２演算器４０１ｂは、レジスタｒ１とレジスタｒ３の値の論理演算が行い、その結果をレジスタｒ３へ格納する。第３命令デコーダ４０９ｃは、命令「ｍｏｖ３２’ｈ１２３４５６８０，ｒ２」をデコードし、即値である３２’ｈ１２３４５６８０を、レジスタｒ２に転送する。
【００８８】
また、命令デコーダ４０９ａ〜４０９ｃは、この例では４つのユニットを実行したことを、制御信号によりＩＮＣ４１２に知らせる。ＩＮＣ４１２は、４つのユニット分だけ、上位ＰＣ４０３及び下位ＰＣ４０４の値をインクリメントする。以上の結果、下位ＰＣ４０４は３’ｂ０００となり、上位ＰＣ４０３は桁上がりが２つ起こり２９’ｈ０００００００３となり、次のサイクルで実行する先頭命令は命令２１１２となる。
【００８９】
次に、第１命令デコーダ４０９ａは、命令バッファ４０８に格納されている先頭のユニット２１１２を取り込み、そのユニットが１ユニット命令であるか、並列実行境界であるかを調べる。ユニット２１１２が１ユニット命令であり、並列実行境界でないので、第２命令デコーダ４０９ｂは、次のユニット２１１３を取り込み、そのユニットが１ユニット命令であるか、並列実行境界であるかを調べる。第２命令デコーダ４０９ｂは、ユニット２１１３が１ユニット命令であり、並列実行境界であること知る。以上によって、命令２１１２、命令２１１３が同時並列実行可能であることがわかる。
【００９０】
第１命令デコーダ４０９ａは、命令「ｌｄ（ｒ２），ｒ０」がデコードし、レジスタｒ２の値をオペランドアドレスとするオペランドデータをデータメモリ４０６中から取り込み、レジスタｒ０へ格納する。第２命令デコーダ４０９ｂは、命令「ｂｒａ１３’ｈ１ｆｅｃ」をデコードし、命令２１１３が分岐命令であるので、上位ＰＣ４０３及び下位ＰＣ４０４を分岐先命令のアドレスに更新する。
【００９１】
まず、上位ＰＣ４０３及び下位ＰＣ４０４の指定するアドレスを補正する。ＰＣ相対値は、分岐命令から分岐先命令とのアドレスの差であるのに対して、上位ＰＣ４０３及び下位ＰＣ４０４はそのサイクルで実行する先頭の命令のアドレスを指定しており、整合性が取れていないので、上位ＰＣ４０３及び下位ＰＣ４０４を分岐命令のアドレスを指定するように補正する。すなわち、ＩＮＣ４１２は、実行単位の先頭命令２１１２から分岐命令２１１３までに存在するユニット数１だけ上位ＰＣ４０３及び下位ＰＣ４０４の値をインクリメントする。その結果、上位ＰＣが２９’ｈ０００００００３となり、下位ＰＣが３’ｂ０１０となる。
【００９２】
次に、上位ＰＣ演算器４１１及び下位ＰＣ演算器４０５は、上記により補正された上位ＰＣ４０３及び下位ＰＣ４０４の値と、第２命令デコーダ４０９ｂから得られたＰＣ相対値１３’ｈ１ｆｅｃとを加算する。ここで、ＰＣ相対値は、３２ビットに符号拡張した値３２’ｈｆｆｆｆｆｆｅｃを用いる。加算は、上位２９ビットと下位３ビットに分離して行われる。
【００９３】
下位ＰＣ演算器４０５は、下位ＰＣ３’ｂ０１０とＰＣ相対値の下位３ビット３’ｂ１００を加算する。その結果、桁上がり数１と下位演算結果３’ｂ０００が得られ、桁上がり数は上位ＰＣ演算器４１１に送られ、下位演算結果は下位ＰＣ４０４に転送される。
次に、上位ＰＣ演算器４１１は、上位ＰＣ２９’ｈ０００００００３と、ＰＣ相対値の上位２９ビット２９’ｈ１ｆｆｆｆｆｆｄと、桁上がり数１とを加算する。上位演算結果２９’ｈ０００００００１は上位ＰＣ４０３に転送されるとともに、上位ＰＣからプリフェッチ上位カウンタ４１０に転送される。以上の処理により、プリフェッチ上位カウンタ４１０は２９’ｈ０００００００１となり、次にプリフェッチするパケットは、パケット２１０４となる。また、上位ＰＣ４０３は２９’ｈ０００００００１で、下位ＰＣ４０４は３’ｂ０００となり、次のサイクルで実行する先頭命令は命令２１０５となる。
【００９４】
以下、同様にして、オブジェクトコードが順次、読み込まれ、実行されてゆく。以降の命令の説明については省略する。
以上、図４に示したプロセッサ３０９、リンカ装置３０７、アセンブラ装置３０５、最適化装置３０３についてその構成の詳細を記した。なお、コンパイラ装置３０１については、公知のコンパイラ装置の構成と同様であるため、詳細な説明は省略する。
【００９５】
なお、本実施の形態のプロセッサは、３個の命令デコーダ４０９ａ、４０９ｂ、４０９ｃと３個の演算器４０１ａ、４０１ｂ、４０１ｃを備えているものとしたが、これに限定するものでなく、１個の命令デコーダと、１個の演算器を有するものとしてもよい。
また、最適化装置３０３の機能をコンパイラ装置３０１に取り込んで、コンパイラ装置３０１と、アセンブラ装置３０５と、リンカ装置３０７によって、ソースコード３００からオブジェクトコード３０８を生成することとしてもよい。
【００９６】
また、本実施の形態では、プリフェッチ下位カウンタ４１３は、常時３’ｂ０００に設定するものとしたが、これに限定するものではなく、例えば、１サイクルごとに１ずつインクリメントすることととしてもよい。この場合には、１サイクルごとに１バイトデータが命令メモリ４０７から命令バッファ４０８に読み出されることになる。
（第２の実施形態）
第２の実施形態は、分岐命令中のラベルが解決されるＰＣ相対値として、第１の実施形態と異なるものを用いたプロセッサ及び、最適化装置、アセンブラ装置、リンカ装置に関する。
【００９７】
第１の実施形態では、分岐命令のＰＣ相対値は、分岐先命令のアドレスと分岐命令のアドレスとの差分値であったが、本実施の形態では、分岐命令のＰＣ相対値は、分岐先命令のアドレスと実行単位の先頭アドレスとの差分値とする。
本実施の形態では、第１の実施形態とＰＣ相対値の意味づけが異なる。しかし、プログラム生成側、すなわち、プログラム相対値を算出する最適化装置、アセンブラ装置、リンカ装置と、プログラム実行側、すなわち、プログラム相対値からもとのアドレスを算出するプロセッサとで、ＰＣ相対値を同一の意味で用いることとすれば、プロセッサは、分岐命令の実行時に、正しく分岐先命令にプログラムカウンタの値を移行させることができる。
【００９８】
まず、本実施の形態の最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７、プロセッサ３０９について説明する。
最適化装置３０３のラベル検出手段９０５は、「ＰＣ相対値に解決すべきラベル」については、第１の実施形態で分岐命令の仮アドレスと分岐先命令の仮アドレスを取り込んでラベル情報を作成した代わりに、分岐先命令の仮アドレスとその分岐命令と同一の実行単位に属する命令群の先頭の命令のアドレスを取り込んでラベル情報９０６を作成する。このラベル情報９０６から、第１の実施形態と同様にして、２つの仮アドレスの差であるアドレス差９１３が算出され、最適化コード９１５が算出される。アセンブラ装置、リンカ装置についても同様である。
【００９９】
本実施の形態により、オブジェクトコードが生成される具体例を示す。
アセンブラ装置３０５は、図１６の機械語コード中の命令１４０９のラベルＬ１を、分岐先命令のアドレス３２’ｈ００００００００から命令１４０９の実行単位の先頭である命令１４０８のアドレス３２’ｈ００００００１０を減算した減算値１３’ｈ１ｆｆ０に置き換える。リンカ装置３０７も、同様に、図２３の結合コード中の命令１９０６のラベルｆを、分岐先アドレス３２’ｈ００００００００から命令１９０６の実行単位の先頭である命令１９０７のアドレス３２’ｈ０００００００８を減算した減算値１３’ｈ１ｆｆ８に置き換える。図２６は、このようにして生成されるオブジェクトコードを示す。図２６では、命令２２０６、命令２２１３のＰＣ相対値が、図２５に示すものと異なっていることが示されている。
【０１００】
次に、本実施の形態のプロセッサについて説明する。
プロセッサ３０９は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ３０９が分岐命令を実行する際に、分岐命令中のＰＣ相対値は、その時の上位ＰＣ４０３及び下位ＰＣ４０４が指定しているアドレスと分岐先命令のアドレスとの差分値である。従って、プロセッサ３０９は、上位ＰＣ４０３、下位ＰＣ４０４の値を補正する処理をすることなく、第１の実施形態と同様にして、上位ＰＣ４０３の値及び下位ＰＣ４０４の値と分岐命令中のＰＣ相対値とを加算し、加算結果を上位ＰＣ４０３及び下位ＰＣ４０４の値に更新する。プロセッサが図２６に示すオブジェクトコードを実行する場合、命令２２１３の実行の際には、現在のＰＣの値３２’ｈ０００００００８とＰＣ相対値１３’ｈ１ｆｆ８とを加算し、加算値３２’ｈ００００００００にＰＣを更新する。
【０１０１】
以上のように、本実施の形態のプロセッサは、分岐命令を実行する際に、第１の実施形態のようなプログラムカウンタの値を補正する処理は不要で、直接、ＰＣ相対値とＰＣの値とを加算することによって分岐先のアドレスが得られるので、実行時間を短縮できる。
（第３の実施形態）
第３の実施形態は、命令のアドレスの下位３ビットを十分に活用して、命令の実行位置を指定できるプロセッサに関する。
【０１０２】
第１の実施形態では、命令のアドレスの下位３ビットを用いて、３個のユニットの位置を指定することとしたが、本実施の形態では、命令のアドレスの下位３ビットを十分に活用して、８個のユニットの位置を指定するものである。
図２７（ａ）は、本実施の形態の命令パケットの構成を示す図である。命令パケットは、８個のユニットで構成される。命令パケットの１個のユニットは８ビット長であり、命令パケットの長さは６４ビット長となる。プロセッサは、１サイクルにおいて、この６４ビットの固定長で命令を読み出す。
【０１０３】
図２７（ｂ）は、命令の種類を示す図である。各命令は、８ビットのユニットを単位として構成されており、２ユニット命令、３ユニット命令、５ユニット命令、６ユニット命令が存在する。
図２７（ｃ）は、パケット内アドレスと、パケット内アドレスが指定するパケット内のユニットとの関係を示す図である。命令パケット内の位置は、第１の実施形態と同様に、命令のアドレスの下位３ビットで指定される。図に示すように、パケット内アドレスが３’ｂ０００なら第１ユニットを指定し、３’ｂ００１なら第２ユニットを指定し、３’ｂ０１０なら第３ユニットを指定し、３’ｂ０１１なら第４ユニットを指定し、３’ｂ１００なら第５ユニットを指定し、３’ｂ１０１なら第６ユニットを指定し、３’ｂ１１０なら第７ユニットを指定し、３’ｂ１１１なら第８ユニットを指定する。
【０１０４】
以上のように、本実施の形態のプロセッサは、命令の下位アドレスの３ビットを最大限に用いて、命令の実行位置を指定できるので、１サイクルにおける命令の実行単位にバリエーションをもたせることができる。
（第４の実施形態）
第４の実施形態は、桁上りなし方式による命令のアドレスの演算方法に関する。
【０１０５】
第１の実施形態では、プログラムを実行するプロセッサと、プログラムを作成する最適化装置、アセンブラ装置、リンカ装置のすべてが共通して桁上り方式のアドレスの演算方法を用いることによって、プロセッサでＰＣ相対値から分岐先命令のアドレスを誤りなく再現することができたが、桁上り方式以外のアドレスの演算方法であっても、プロセッサと、最適化装置と、アセンブラ装置と、リンカ装置が共通にその演算方法を用いさえすれば、プロセッサが分岐先命令のアドレスを誤りなく再現できるようなものがある。本実施の形態は、このような他のアドレスの演算方法の一つである桁上りなし方式に関するものである。
【０１０６】
桁上りなし方式では、命令のアドレスを上位２９ビット、下位３ビットに分離して演算する点で、第１の実施形態の桁上がり方式と同じであるが、下位３ビットの演算で桁上がりあるいは桁借りを発生させない点で、桁上がり方式と異なる。
まず、プロセッサ３０９が行う、分岐命令のアドレスとＰＣ相対値とを加算して分岐先命令のアドレスを求める方法について説明する。図５に示す下位ＰＣ演算器４０５は、分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとを加算する。図２８（ａ）は、本実施の形態に係る桁上りなし方式のアドレス演算による分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとの加算規則を示す加算表である。図に示すように、下位３ビットの加算は通常の２進演算と異なり、３’ｂ０００，３’ｂ０１０，３’ｂ１００を巡回する３進演算である。この演算では、桁上がりは発生させない。
【０１０７】
図５に示す上位ＰＣ演算器４１１は、分岐命令のアドレスの上位２９ビットとＰＣ相対値の上位２９ビットとを加算する。分岐命令のアドレスの上位２９ビットとのＰＣ相対値の上位２９ビットとの加算方法は通常の２進演算である。
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果のの下位３ビットが下位ＰＣ４０４に設定され、加算結果の上位２９ビットが上位ＰＣ４０３に設定される。
【０１０８】
次に、最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７が行う、ＰＣ相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算方法について説明する。減算は、加算と同様に上位２９ビットと下位３ビットに分離して行う。最適化装置３０３の下位アドレス減算手段９０７、アセンブラ装置３０５の下位アドレス減算手段８０６、リンカ装置３０７の下位アドレス減算手段７０６は、分岐先命令のアドレスの下位３ビットから分岐命令のアドレスの下位３ビットを減算する。図２８（ｂ）は、本実施の形態に係る桁上りなし方式のアドレス演算による分岐先命令のアドレスの下位３ビットと分岐命令のアドレスの下位３ビットとの減算規則を示す減算表である。図に示すように、下位３ビットの減算は通常の２進演算と異なり、３’ｂ０００，３’ｂ０１０，３’ｂ１００を巡回する３進演算である。この演算では、桁借りは発生させない。
【０１０９】
最適化装置３０３の上位アドレス減算手段９１０と、アセンブラ装置３０５の上位アドレス減算手段８０９と、リンカ装置３０７の上位アドレス減算手段７０９は、分岐命令のアドレスの上位２９ビットと分岐先命令の上位２９ビットとを減算する。減算方法は通常の２進演算である。
以上により算出された下位３ビットの減算結果を下位３ビットとし、上位２９ビットの減算結果を上位２９ビットとした値がＰＣ相対値となる。
【０１１０】
図２９は、本実施の形態に係る桁上りなし方式のアドレス演算により生成されたオブジェクトコードを示す。図２９では、命令２４０６と命令２４１３のＰＣ相対値が、図２５のものと異なっている。命令２４０６のＰＣ相対値の算出法について説明する。
下位アドレス減算手段７０６は、命令２４０１の下位３ビットアドレス３’ｂ０００から命令２４０６の下位３ビットアドレス３’ｂ０１０を、図２８（ｂ）に示す減算表に従って減算し、下位減算結果３’ｂ１００を得る。
【０１１１】
上位アドレス減算手段７０９は、命令２４０１の上位２９ビットアドレス２９’ｈ００００００００から命令２４０６の上位２９ビットアドレス２９’ｈ０００００００１を減算し、上位減算結果２９’ｈ１ｆｆｆｆｆｆｆを得る。
アドレス差算出手段７１１は、上位減算結果２９’ｈ１ｆｆｆｆｆｆｆを上位２９ビットとし、下位減算結果３’ｂ１００を下位３ビットとしたアドレス差３２’ｈ１ｆｆｆｆｆｆｃを算出する。
【０１１２】
再配置情報解決手段７１３は、アドレス差３２’ｈ１ｆｆｆｆｆｆｃが下位１３ビット１３’ｈ１ｆｆｃで表現できるので、１３’ｈ１ｆｆｃをＰＣ相対値としてラベルを置換えることによって、命令２４０６が生成される。
プロセッサ３０９は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ３０９は、分岐命令を実行する際に、分岐命令中のＰＣ相対値と、分岐命令のアドレスを指定するように補正した上位ＰＣ４０３及び下位ＰＣ４０４の値とを桁上りなし方式により加算する。
【０１１３】
プロセッサが図２９に示すオブジェクトコード中の命令２４０６を実行する際には、下位ＰＣ演算器４０５は、補正した下位ＰＣ４０４の値３’ｂ０１０と、ＰＣ相対値の下位３ビット３’ｂ１００とを加算して、加算値３’ｂ０００に下位ＰＣ４０４を更新し、上位ＰＣ演算器４１１は、補正した上位ＰＣ４０３の値２９’ｈ０００００００１と、ＰＣ相対値の上位２９ビット２９’ｈ１ｆｆｆｆｆｆｆとを加算して、加算値２９’ｈ００００００００に上位ＰＣ４０３を更新する。
【０１１４】
以上のように、桁上りなし方式によるアドレス演算では、下位ＰＣ演算器から上位ＰＣ演算器に桁上り数又は桁借り数が送られないので、単純なハードウエアによりアドレス演算が実現できる。
（第５の実施形態）
第５の実施形態は、絶対値方式による命令のアドレスの演算方法に関する。
【０１１５】
絶対値方式では、命令のアドレスを上位２９ビット、下位３ビットに分離して演算する点で、第１の実施形態の桁上がり方式と同じであるが、命令の下位３ビットアドレスの値を下位３ビットの演算結果とする点で、桁上がり方式と異なる。
まず、プロセッサ３０９が行う、分岐命令のアドレスとＰＣ相対値とを加算して分岐先命令のアドレスを求める方法について説明する。図５に示す下位ＰＣ演算器４０５は、分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとを加算する。図３０（ａ）は、本実施の形態に係る絶対値方式のアドレス演算による分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとの加算規則を示す加算表である。図に示すように、ＰＣ相対値の下位３ビットが、下位３ビットの加算結果となる。
【０１１６】
図５に示す上位ＰＣ演算器４１１は、分岐命令のアドレスの上位２９ビットとＰＣ相対値の上位２９ビットとを加算する。分岐命令のアドレスの上位２９ビットとのＰＣ相対値の上位２９ビットとの加算方法は通常の２進演算である。
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果の下位３ビットが下位ＰＣ４０４に設定され、加算結果の上位２９ビットが上位ＰＣ４０３に設定される。
【０１１７】
次に、最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７が行う、ＰＣ相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算する減算方法について説明する。減算は、加算と同様に上位２９ビットと下位３ビットに分離して行う。最適化装置３０３の下位アドレス減算手段９０７、アセンブラ装置３０５の下位アドレス減算手段８０６、リンカ装置３０７の下位アドレス減算手段７０６は、分岐先命令のアドレスの下位３ビットから分岐命令のアドレスの下位３ビットを減算する。図３０（ｂ）は、本実施の形態に係る絶対値方式のアドレス演算による分岐先命令のアドレスの下位３ビットと分岐命令のアドレスの下位３ビットとの減算規則を示す減算表である。図に示すように、分岐先命令のアドレスの下位３ビットが、下位３ビットの加算結果となる。
【０１１８】
最適化装置３０３の上位アドレス減算手段９１０と、アセンブラ装置３０５の上位アドレス減算手段８０９と、リンカ装置３０７の上位アドレス減算手段７０９は、分岐命令のアドレスの上位２９ビットと分岐先命令の上位２９ビットとを減算する。減算方法は通常の２進演算である。
以上により算出された下位３ビットの減算結果を下位３ビットとし、上位２９ビットの減算結果を上位２９ビットとした値がＰＣ相対値となる。
【０１１９】
図３１は、本実施の形態に係る絶対値方式のアドレス演算により生成されたオブジェクトコードを示す。図３１では、命令２６０６と命令２６１３のＰＣ相対値が、図２５のものと異なっている。命令２６０６のＰＣ相対値の算出法について説明する。
下位アドレス減算手段７０６は、命令２６０１の下位３ビットアドレス３’ｂ０００から命令２６０６の下位３ビットアドレス３’ｂ０１０を、図３０（ｂ）に示す減算表に従って減算し、下位減算結果３’ｂ０００を得る。
【０１２０】
上位アドレス減算手段７０９は、命令２６０１の上位２９ビットアドレス２９’ｈ００００００００から命令２６０６の上位２９ビットアドレス２９’ｈ０００００００１を減算し、上位減算結果２９’ｈ１ｆｆｆｆｆｆｆを得る。
アドレス差算出手段７１１は、上位減算結果２９’ｈ１ｆｆｆｆｆｆｆを上位２９ビットとし、下位減算結果３’ｂ０００を下位３ビットとしたアドレス差３２’ｈ１ｆｆｆｆｆｆ８を算出する。
【０１２１】
再配置情報解決手段７１３は、アドレス差３２’ｈ１ｆｆｆｆｆｆ８が下位１３ビット１３’ｈ１ｆｆ８で表現できるので、１３’ｈ１ｆｆ８をＰＣ相対値としてラベルを置換えることによって、命令２６０６が生成される。
プロセッサ３０９は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ３０９は、分岐命令を実行する際に、分岐命令中のＰＣ相対値と、分岐命令のアドレスを指定するように補正した上位ＰＣ４０３及び下位ＰＣ４０４の値とを絶対値方式により加算する。
【０１２２】
プロセッサが図３１に示すオブジェクトコード中の命令２６０６を実行する際には、下位ＰＣ演算器４０５は、補正した下位ＰＣ４０４の値３’ｂ０１０と、ＰＣ相対値の下位３ビット３’ｂ０００とを加算して、加算値３’ｂ０００に下位ＰＣ４０４を更新し、上位ＰＣ演算器４１１は、補正した上位ＰＣ４０３の値２９’ｈ０００００００１と、ＰＣ相対値の上位２９ビット２９’ｈ１ｆｆｆｆｆｆｆとを加算して、加算値２９’ｈ００００００００に上位ＰＣ４０３を更新する。
【０１２３】
以上のように絶対値方式によるアドレス演算では、下位ビットの演算が不要なので、演算速度を高めることができる。
（第６の実施形態）
第６の実施形態は、リニア方式による命令のアドレスの演算方法に関する。
リニア方式では、他の実施形態と異なり、命令のアドレスを上位２９ビットと、下位３ビットに分離せすに計算する。
【０１２４】
まず、プロセッサが行う、分岐命令のアドレスとＰＣ相対値とを加算して分岐先命令のアドレスを求める方法について説明する。桁上り方式のプロセッサは、上位２９ビットのアドレスを演算する上位ＰＣ演算器と下位３ビットのアドレスを演算する下位ＰＣ演算器を備えていたが、リニア方式のプロセッサは、３２ビットのアドレスを演算する１つのＰＣ演算器を備えている。リニア方式のＰＣ演算器は、３２ビットの分岐命令のアドレスと３２ビットのＰＣ相対値とを加算する。加算方法は通常の２進演算である。
【０１２５】
以上により算出された加算結果が分岐先命令のアドレスとなる。すなわち、加算結果の下位３ビットが下位ＰＣ４０４に設定され、加算結果の上位２９ビットが上位ＰＣ４０３に設定される。
次に、最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７が行う、ＰＣ相対値を求める演算、すなわち、分岐先命令のアドレスから分岐命令のアドレスを減算方法について説明する。リニア方式の最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７は、リニア方式のプロセッサと同様に、３２ビットのアドレスを演算する１つのアドレス減算手段を備えている。リニア方式のアドレス減算手段は、３２ビットの分岐先命令のアドレスから３２ビットの分岐命令のアドレスを減算する。減算方法は通常の２進演算である。
【０１２６】
以上により算出された減算結果がＰＣ相対値となる。
図３２は、本実施の形態に係るリニア方式のアドレス演算を用いて生成されたオブジェクトコードを示す。図３２では、命令２７０６と命令２７１３のＰＣ相対値が、図２５のものと異なっていることが示されている。命令２７０６のＰＣ相対値の算出法について説明する。
【０１２７】
リニア方式のアドレス減算手段は、命令２７０１の３２ビットアドレス３２’ｈ００００００００から命令２７０６の３２ビットアドレス３２’ｈ０００００００ａを減算し、アドレス差３２’ｈｆｆｆｆｆｆｆ６を得る。
再配置情報解決手段７１３は、アドレス差３２’ｈｆｆｆｆｆｆｆ６が下位１３ビット１３’ｈ１ｆｆ６で表現できるので、１３’ｈ１ｆｆ６をＰＣ相対値としてラベルを置換えることによって、命令２７０６が生成される。
【０１２８】
プロセッサ３０９は、上述のようにして作成されたオブジェクトコードを実行する。プロセッサ３０９は、分岐命令を実行する際に、分岐命令中のＰＣ相対値と、分岐命令のアドレスを指定するように補正した上位ＰＣ４０３及び下位ＰＣ４０４の値とをリニア方式により加算する。
プロセッサが図３２に示すオブジェクトコード中の命令２７０６を実行する際には、本実施の形態のＰＣ演算器は、補正した上位ＰＣ４０３の値を上位２９ビットとし、補正した下位ＰＣ４０４の値を下位３ビットとした３２ビットのＰＣの値３２’ｈ０００００００ａと、ＰＣ相対値３２’ｈｆｆｆｆｆｆｆ６とを加算して、加算結果３２’ｈ００００００００を得る。そして、ＰＣ演算器は、加算値の下位３ビット３’ｂ０００に下位ＰＣ４０４を更新し、加算値の上位２９ビット２９’ｈ００００００００に上位ＰＣ４０３を更新する。
【０１２９】
以上のように、リニア方式によるアドレス演算では、ＰＣ演算器として通常の演算器を用いることができるので、プロセッサの構成を簡易にすることができる。
（第７の実施形態）
第７の実施形態は、ＰＣ加算命令及びＰＣ減算命令を解釈、実行するプロセッサ及びこれらの命令を生成するコンパイラ装置に関する。
【０１３０】
図３３は、本実施の形態に係るプロセッサの構成図である。本実施の形態のプロセッサが図５に示す第１の実施形態に係るプロセッサと異なる点は、第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２が付加され、第１命令デコーダ２８０１ａと、第２命令デコーダ２８０１ｂと、第２命令デコーダ２８０１ｃの機能が追加されたところである。
【０１３１】
命令デコーダ２８０１ａと、２８０１ｂと、２８０１ｃは、通常の命令に加えて、ＰＣ加算命令とＰＣ減算命令も解読する。図３４（ａ）は、ＰＣ加算命令のニーモニックとオペレーションの対応を示す。同図に示すように、ＰＣ加算命令は、ＰＣ相対値ｄｉｓｐとレジスタに格納されているＰＣの値とを加算し、同一のレジスタに結果を格納するものである。図３４（ｂ）は、ＰＣ減算命令のニーモニックとオペレーションの対応を示す。ＰＣ減算命令は、レジスタに格納されているＰＣの値からＰＣ相対値ｄｉｓｐを減算し、同一のレジスタに結果を格納するものである。
【０１３２】
第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２は、第１の実施形態における下位ＰＣ演算器４０５及び上位ＰＣ演算器４１１と同様の演算規則に従って、上記のＰＣ加算命令とＰＣ減算命令を実行する。
図３５は、本実施の形態に係るコンパイラ装置の構成図である。
ソースコード２９０１はＣ言語等の高級言語で記述されたプログラムである。
【０１３３】
中間コード変換部２９０２は、ソースコード２９０１をコンパイラ装置の内部表現である中間コード２９０３に変換する。中間コード変換部２９０２は公知の技術であるため、詳細な説明を省略する。
ＰＣ値加算命令変換部２９０４は、中間コード２９０３の中でＰＣの値と変数とを加算する中間コードを図３３に示したＰＣ加算命令のアセンブラコード２９０６に変換する。
【０１３４】
命令変換部２９０５は、その他の中間コードを対応するアセンブラコード２９０６に変換する。命令変換部２９０５は公知の技術であるため、詳細な説明を省略する。
次に、コンパイラ装置の動作を、具体例を用いて説明する。
図３６は、コンパイラ装置の動作手順を示すフローチャートである。
【０１３５】
まず、コンパイラ装置にソースコードが入力される。図３７は、Ｃ言語で記述されたソースコードを示す。図中、外部関数ｇ１、ｇ２、ｇ３、ｇ４は宣言され、関数ｆはｉｎｔ型の変数ｉを受け取る関数として定義されている。この関数ｆは、ｉの値が１ならばポインタｆｐに関数ｇ１のアドレスを代入し、ｉの値が２ならばポインタｆｐに関数ｇ２のアドレスを代入し、ｉの値が３ならばポインタｆｐに関数ｇ３のアドレスを代入し、ｉが以上の値でなければポインタｆｐに関数ｇ４のアドレスを代入し、最後にｆｐの指す関数を呼び出すコードからなる（ステップＳ３６００）。
【０１３６】
次に、中間コード変換部２９０２は、ソースコードを中間コードに変換する。その際に、特に、中間コード変換部２９０２は、外部関数へのポインタをポインタ変数に代入するソースコードを、関数の先頭のアドレスと外部関数の先頭のアドレスとの差分値と、関数の先頭のアドレスが格納された一時変数とを加算して、その結果をポインタ変数に代入する中間コードに変換する。
【０１３７】
図３８は、図３７のソースプログラムが変換された中間コードを示す。図中、中間コード３２０１は、関数の先頭のラベルｆを有し、一時変数ｔｍｐに現在のＰＣの値、すなわち関数ｆの先頭アドレスを代入する中間コードである。中間コード３２０２は、変数ｉが１と等しくないかを判定する中間コードである。中間コード３２０３は、中間コード３２０２の判定が真の場合、すなわちｉが１と等しくない場合には、ラベルＬ１へ分岐する中間コードである。中間コード３２０４は、ｉと１が等しい場合に実行されるもので、関数ｇ１の先頭アドレスから関数ｆの先頭のアドレスを減算した差分値と関数ｆの先頭アドレスが代入された一時変数ｔｍｐとを加算し、その結果を変数ｆｐに代入する中間コードである。中間コード３２０５は、ラベルＬへ分岐する中間コードである。
【０１３８】
中間コード３２０６はラベルＬ１を有し、変数ｉが２と等しくないかを判定する中間コードである。中間コード３２０７は、中間コード３２０６の判定が真の場合、すなわち、ｉが２と等しくない場合には、ラベルＬ２へ分岐する中間コードである。中間コード３２０８は、ｉと２が等しい場合に実行され、関数ｇ２の先頭アドレスから関数ｆの先頭のアドレスを減算した差分値と関数ｆの先頭アドレスが代入された一時変数ｔｍｐとを加算し、その結果を変数ｆｐに代入する中間コードである。中間コード３２０９は、ラベルＬへ分岐する中間コードである。
【０１３９】
中間コード３２１０はラベルＬ２を有し、変数ｉが３と等しくないかを判定する中間コードである。中間コード３２１１は、中間コード３２１０の判定が真の場合、すなわち、ｉが３と等しくない場合には、ラベルＬ３へ分岐する中間コードである。中間コード３２１２は、ｉと３が等しい場合に実行され、関数ｇ３の先頭アドレスから関数ｆの先頭のアドレスを減算した差分値と関数ｆの先頭アドレスが代入された一時変数ｔｍｐとを加算し、その結果を変数ｆｐに代入する中間コードである。中間コード３２１３は、ラベルＬへ分岐する中間コードである。
【０１４０】
中間コード３２１４は、ラベルＬ３を有し、関数ｇ４の先頭アドレスから関数ｆの先頭のアドレスを減算した差分値と関数ｆの先頭アドレスが代入された一時変数ｔｍｐを加算し、その結果を変数ｆｐに代入する中間コードである。中間コード３２１５は、ラベルＬを有し、変数ｆｐが指す関数を呼び出す中間コードである。
【０１４１】
以上のように、図３８に示す中間コードは、関数ｇ１、ｇ２、ｇ３、ｇ４の絶対アドレスを変数ｆｐに代入するのではなく、関数ｆの先頭アドレスと関数ｇ１、ｇ２、ｇ３、ｇ４の先頭アドレスとの差分値を、関数ｆの先頭アドレスとを加算して、変数ｆｐに代入するものである（ステップＳ３６０１〜Ｓ３６０３）。次に、ＰＣ値加算命令変換部２９０４及び中間コードをアセンブラコードに変換する。ＰＣ値加算命令変換部２９０４は、ＰＣの値とＰＣ相対値とを加算する中間コードを探し、その中間コードを第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２を使用するアセンブラコードに変換する。命令変換部２９０５は、その他の中間コードをアセンブラコードに変換する。
【０１４２】
ＰＣ値加算命令変換部２９０４は、図３８中の中間コード３２０４が有する被演算子ｔｍｐが中間コード３２０１によりＰＣの値が転送されたものであり、演算子＋はＰＣの値とＰＣ相対値の加算であることをつきとめ、中間コード３２０４を第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２を使用して加算を行うアセンブラコードａｄｄｐｃに変換する。ＰＣ値加算命令変換部２９０４は、中間コード３２０８、３２１２、３２１４に対しても同様にしてアセンブラコードａｄｄｐｃに変換する。図３８中のその他の中間コードは命令変換部２９０５によって変換される。
【０１４３】
図３９は、図３８の中間コードが変換されたアセンブラコードを示す。図中、アセンブラコード３３０１は、関数の先頭のラベルｆを有し、レジスタｒ１にＰＣの値を転送する命令である。アセンブラコード３３０２は、定数１とレジスタｒ０の値が等しくないか判定する命令である。アセンブラコード３３０３は、命令３３０２による判定が真の場合には、ラベルＬ１へ分岐する命令である。アセンブラコード３３０４は、関数ｇ１の先頭アドレスと関数ｆの先頭のアドレスの差分値であるＰＣ相対値とレジスタｒ１に格納されたｆの先頭アドレスであるＰＣの値とを第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２により加算し、その結果をレジスタｒ１に転送する命令である。アセンブラコード３３０５は、ラベルＬへ分岐する命令である。
【０１４４】
アセンブラコード３３０６は、ラベルＬ１を有し、定数２とレジスタｒ０の値が等しくないか判定する命令である。アセンブラコード３３０７は、命令３３０６の判定が真の場合には、ラベルＬ２へ分岐する命令である。アセンブラコード３３０８は、関数ｇ２の先頭アドレスと関数ｆの先頭のアドレスとの差分値であるＰＣ相対値とレジスタｒ１に格納されたｆの先頭アドレスであるＰＣの値とを第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２により加算し、その結果をレジスタｒ１に転送する命令である。アセンブラコード３３０９は、ラベルＬへ分岐する命令である。
【０１４５】
アセンブラコード３３１０は、ラベルＬ２を有し、定数３とレジスタｒ０の値が等しくないか判定する命令である。アセンブラコード３３１１は、命令３３１０の判定が真の場合には、ラベルＬ３へ分岐する命令である。アセンブラコード３３１２は、関数ｇ３の先頭アドレスと関数ｆの先頭のアドレスとの差分値であるＰＣ相対値とレジスタｒ１に格納されたｆの先頭アドレスであるＰＣの値とを第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２により加算し、その結果をレジスタｒ１に転送する命令である。アセンブラコード３３１３は、ラベルＬへ分岐する命令である。
【０１４６】
アセンブラコード３３１４はラベルＬ３を有し、関数ｇ４の先頭アドレスと関数ｆの先頭のアドレスとの差分値であるＰＣ相対値とレジスタｒ１に格納されたｆの先頭アドレスであるＰＣの値とを第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２により加算し、その結果をレジスタｒ１に転送する命令である。アセンブラコード３３１５は、ラベルＬを有し、ｒ１が指す関数を呼び出す命令である。アセンブラコード３３１６は関数を終了する命令である。
【０１４７】
以上説明してきたように、本実施の形態のコンパイラ装置は、関数ｆ中に外部関数ｇへのポインタをポインタ変数に代入するソースコードがある場合、外部関数ｇへのアドレスをレジスタｒ１へ転送する命令（ｍｏｖｒ１、ｇ）を生成するのではなく、関数ｆのアドレスと外部関数ｇのアドレスとの差分値（ｇ−ｆ）と、レジスタｒ１に格納された関数ｆのアドレスとを加算して、その結果をレジスタｒ１へ転送する命令（ａｄｄＰＣ  ｇ−ｆ  ｒ１）を生成する。絶対アドレスｇ１よりもＰＣ相対値ｇ−ｆの方が値が小さいので、ａｄｄｐｃ命令を用いることによって、コードサイズを縮小することができる。また、実行時にプログラムのメモリ上のアドレスが決定されるＰＩＣコードにおいては、絶対アドレスを避けたコード表現が要求され、このＰＣ相対値を用いた演算命令が必要不可欠である。
【０１４８】
本実施の形態のコンパイラ装置が出力したアセンブラコードは、第１の実施形態と同様に、最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７によってプロセッサが実行するオブジェクトコードに変換される。プロセッサは、生成されたオブジェクトコードに含まれるＰＣ加算命令ａｄｄＰＣ  ｇ−ｆ  ｒ１を第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２によって実行する。すなわち、第２下位ＰＣ演算器２８００は、定数値ｇ−ｆの下位３ビットとレジスタｒ１に格納された数値の下位３ビットを加算し、桁上りがあれば桁上り数を第２上位ＰＣ演算器２８０２に送る。第２上位ＰＣ演算器２８０２は、定数値ｇ−ｆの上位２９ビットとレジスタｒ１に格納された数値の上位２９ビットとを加算し、第２下位ＰＣ演算器２８００からの桁上りがあれば桁上り数をも加算する。第２下位ＰＣ演算器２８００による加算結果を下位３ビットとし、第２上位ＰＣ演算器２８０２による加算結果を上位２９ビットとした値がレジスタｒ１に格納される。
【０１４９】
なお、図３５に示した命令は定数値とレジスタとの加減算であったが、これに限定するものでなく、レジスタ間の加減算、ＰＣとレジスタの間の加減算とすることもできる。
また、第２下位ＰＣ演算器２８００と第２上位ＰＣ演算器２８０２の演算方法は、第１の実施形態の桁上り方式に限定するものでなく、オブジェクトコードを生成した最適化装置３０３、アセンブラ装置３０５、リンカ装置３０７で用いた方式と同一の方式をプロセッサが採用することとすれば、桁上りなし方式、リニア方式、絶対値方式のいずれを用いてもよい。
（第８の実施形態）
第８の実施形態は、デバッガ装置及び逆アセンブラ装置に関する。
【０１５０】
図４０は、本実施の形態に係るデバッガ装置と逆アセンブラ装置の構成を示すブロック図である。
入力制御部４０００は、オペレータからの入力を受け付け、入力された内容に応じて他の構成要素を制御する。
パケットアドレス特定部４００１は、入力された命令のアドレスの上位２９ビットを算出する。
【０１５１】
パケット内アドレス特定部４００２は、入力された命令のアドレスの下位３ビットを算出する。
命令メモリ４００４は、デバッグ及び逆アセンブルの対象となる命令を保持する。命令のアドレスは、第１の実施形態と同様であり、パケットアドレスを上位２９ビットとし、パケット内アドレスを下位３ビットとする３２ビット値である。図４０では、図２４に示した命令が格納されている状態が示されている。
【０１５２】
命令読み出し部４００３は、パケットアドレス特定部４００１で特定されたパケットアドレスで指定される命令パケットを命令メモリ４００４から読み出す。
命令バッファ４００５は、命令読み出し部４００４が命令メモリ４００４から読み出した命令パケットを格納する。
命令解読部４００６は、パケット内アドレス特定部４００２で特定されたパケット内アドレスをもつユニットを命令バッファ４００５から取り出し、取り出したユニットを解読する。命令解読部４００６は、ユニットが分岐命令である場合には、ＰＣ相対値４００７を下位ＰＣ演算器４００８及び上位ＰＣ演算器４００９に送る。
【０１５３】
ラベルテーブル４０１１は、ラベル名とそのラベルの命令のアドレスの対応を保持するテーブルである。ラベルテーブル４０１１は、第１の実施形態で説明したアセンブラ装置が機械語コードを生成する際に、最適化コードから抽出することによって作成される。
図４０では、アドレス３２’ｈ００００００００とラベル名ｆが対応し、アドレス３２’ｈ０００００００８とラベル名Ｌ１が対応し、アドレス３２’ｈ１２３４５６８０とラベル名Ｌ２とが対応していることが示されている。
【０１５４】
表示部４０１２は、命令を逆アセンブルした結果を表示する。
命令置換部４０１３は、入力された置換後の命令を命令バッファ４００５内のパケット内アドレス特定部４００２で特定されたパケット内アドレスで指定されるユニットに書き込む。
命令書き込み部４０１４は、命令メモリ４００４内のパケットアドレス特定部４００１により特定されたパケットアドレスを有する命令パケットを命令バッファ４００５内の置換後の命令パケットに書き換える。
【０１５５】
上位ＰＣ演算器４００９は、パケットアドレス特定部４００１で特定された命令のアドレスの上位２９ビットとＰＣ相対値４００７の上位２９ビットとを演算する。
下位ＰＣ演算器４００８は、パケット内アドレス特定部４００２で特定された命令のアドレスの下位３ビットとＰＣ相対値４００７の下位３ビットを演算する。これらのＰＣ演算器の演算方法は、オブジェクトコード生成過程で採用した方式と同一とする。
【０１５６】
次に、本実施の形態の逆アセンブラ装置の動作を具体例を用いて説明する。
図４１は、逆アセンブラ装置の動作手順を示すフローチャートである。
まず、入力制御部４０００は、逆アセンブルを指示するコマンドと逆アセンブルする命令のアドレスの入力を受け付ける。具体例では、命令のアドレスとして３２’ｈ００００００１ａが入力されたとする。（ステップＳ４１００）。
【０１５７】
次に、パケットアドレス特定部４００１は、命令のアドレスの上位２９ビットよりパケットアドレスを特定する。そして、命令読み出し部４００３は、特定したパケットアドレスをもつ命令パケットを命令メモリ４００４から取り出し、命令バッファ４００５に格納する。具体例では、パケットアドレスとして２９’ｈ０００００００３が特定され、ｌｄ（ｒ２），ｒ０｜｜ｂｒａ１３’ｈ１ｆｅｃ｜｜ａｄｄ  ｒ２，ｒ３の命令列からなる命令パケットが命令バッファ４００５に格納される（ステップＳ４１０１）。
【０１５８】
そして、パケット内アドレス特定部４００３は、命令のアドレスの下位３ビットからパケット内アドレスを特定し、特定したパケット内アドレスをもつユニットを命令解読部４００６に通知する。命令解読部４００６は、通知されたユニットを命令バッファ４００５から取り出す。具体例では、パケット内アドレスとして３’ｂ０１０が特定され、命令バッファ４００５中の第２ユニットの命令であるｂｒａ１３’ｈ１ｆｅｃが命令解読部４００６に入力される（ステップＳ４１０２）。
【０１５９】
命令解読部４００６は、取り出した命令が分岐命令であるかを判定する。具体例では、取り出した命令ｂｒａ１３’ｈ１ｆｅｃは、分岐命令である（ステップＳ４１０３）。
分岐命令であれば、命令中に指定されるＰＣ相対値４００７と入力された命令のアドレス値とが演算される。すなわち、下位ＰＣ演算器４００８は、入力された命令のパケット内アドレス値と、ＰＣ相対値４００７の下位３ビットの値とを加算又は減算し、その演算結果をラベル検索部４０１０に送る。また、上位ＰＣ演算器４００８は、入力された命令のパケットアドレス値と、ＰＣ相対値４００７の上位２９ビットの値と、場合により下位ＰＣ演算器４００８からの桁上がり数又は桁借り数とを加算又は減算し、その演算結果をラベル検索部４０１０に送る。ラベル検索部４０１０は、下位ビット演算結果と上位ビット演算結果より、ラベルのアドレスを特定する。具体例では、入力された命令のアドレスである３２’ｈ００００００１ａとＰＣ相対値１３’ｈ１ｆｅｃとの演算によって、ラベルのアドレスが３２’ｈ０００００００８として特定される（ステップＳ４１０３、Ｓ４１０４）。
【０１６０】
次に、ラベル検索部４０１０は、、ラベルテーブル４０１１を参照して上記特定したアドレスをもつラベル名を検索する。具体例では、アドレス３２’ｈ０００００００８に対応するラベル名がＬ１であることが検索される（ステップＳ４１０７）。
そして、表示部４０１２は、分岐命令のアセンブラ名と検索したラベル名を表示する。具体例では、分岐命令のアセンブラ名であるｂｒａと検索したラベル名であるＬ１が表示される（ステップＳ４１０８）。
【０１６１】
また、命令解読部４００６は、取り出した命令が分岐命令でない場合には、表示部４０１２を指示して、そのアセンブラ名を表示させる（ステップＳ４１０９）。
次に、本実施の形態のデバッガ装置の動作を具体例を用いて説明する。
図４２は、デバッガ装置の動作手順を示すフローチャートである。
【０１６２】
まず、入力制御部４０００は、デバッグを指示するコマンドと置換される命令のアドレスと置換後の命令の入力を受け付ける。具体例では、置換される命令のアドレスとして３２’ｈ００００００１ａが入力され、置換後の命令として減算命令ｓｕｂｒ０，ｒ１が入力されたとする（ステップＳ４２００）。
次に、パケットアドレス特定部４００１は、置換される命令のアドレスの上位２９ビットよりパケットアドレスを特定する。そして、命令読み出し部４００３は、特定されたパケットアドレスをもつ命令パケットを命令メモリ４００４から取りだし、命令バッファ４００５に格納する。具体例では、パケットアドレスとして２９’ｈ０００００００３が特定され、ｌｄ（ｒ２），ｒ０｜｜ｂｒａ１３’ｈ１ｆｅｃ｜｜ａｄｄ  ｒ２，ｒ３の命令列からなる命令パケットが命令バッファ４００５に格納される（ステップＳ４２０１）。
【０１６３】
次に、パケット内アドレス特定部４００２は、置換される命令のアドレスの下位３ビットよりパケット内アドレスを特定する。具体例では、パケット内アドレスとして３’ｂ０１０が特定される（ステップＳ４２０２）。
次に、命令置換部４０１３は、特定されたパケット内アドレスが３’ｂ０００なら、命令バッファ中の命令パケットの第１ユニットを入力された置換後の命令に置換し、特定されたパケット内アドレスが３’ｂ０１０なら、命令バッファ中の命令パケットの第２ユニットを入力された置換後の命令に置換し、特定されたパケット内アドレスが３’ｂ１００なら、命令バッファ中の命令パケットの第３ユニットを入力された置換後の命令に置換する。具体例では、特定されたパケット内アドレスが３’ｂ０１０なので、第２ユニットの命令ｂｒａ１３’ｈ１ｆｅｃが置換後の命令ｓｕｂｒ０，ｒ１に置換される。その結果、命令バッファ４００５内の命令パケットはｌｄ（ｒ２），ｒ０｜｜ｓｕｂｒ０，ｒ１｜｜ａｄｄ  ｒ２，ｒ３となる（ステップＳ４２０３〜Ｓ４２０７）。
【０１６４】
そして、命令書き込み部４０１４は、命令メモリ４００４内のパケットアドレスで指定される命令パケットを命令バッファ４００５に格納されている命令パケットに置き換える。
具体例では、命令メモリ４００４内のパケットアドレス２９’ｈ０００００００３で指定される命令パケットｌｄ（ｒ２），ｒ０｜｜ｂｒａ１３’ｈ１ｆｅｃ｜｜ａｄｄ  ｒ２，ｒ３が命令バッファ４００５内の命令パケットｌｄ（ｒ２），ｒ０｜｜ｓｕｂｒ０，ｒ１｜｜ａｄｄ  ｒ２，ｒ３に置換される。
【０１６５】
以上のように、本実施の形態における逆アセンブラ装置は、第１の実施形態に係るプロセッサが実行する命令を逆アセンブルすることができる。また、逆アセンブルする命令が分岐命令である場合にも、ＰＣ相対値をそのまま表示するのでなく、上位ＰＣ演算器及び下位ＰＣ演算器によってラベルの置かれているアドレスを算出し、そのアドレスからラベルテーブルを参照することによって、適切なラベル名を表示できる。
【０１６６】
また、本実施の形態におけるデバッガ装置は、バイトアラインされた命令パケットの単位で命令をメモリから命令バッファに読み出して、命令バッファ中で命令を書き換えて、命令パケットの単位で命令をメモリへ書き込むので、バイトアラインされていない命令のデバッグに適している。
なお、本実施の形態における上位ＰＣ演算器及び下位ＰＣ演算器の演算方式は、第１の実施形態における桁上がり方式に限定するものでなく、分離方式、絶対値方式、リニア方式のいずれを用いてもよい。
【０１６７】
以上、第１〜第８の実施形態に係るコンパイラ装置、最適化装置、アセンブラ装置、リンカ装置、プロセッサ、逆アセンブラ装置、デバッガ装置に関する実施の形態を説明したが、本発明は、これら実施の形態に限られないことは勿論である。
（１）第１〜第６の実施形態において、アセンブラコード３０２、最適化コード３０４、リロケータブルコード３０６、オブジェクトコード３０８はマスクＲＯＭ、フラッシュメモリ等の半導体集積メモリや、フロッピーディスク、ハードディスク等の磁気記録媒体や、ＣＤ−ＲＯＭ，ＤＶＤ等の光ディスクに記録することもできる。
（２）第７の実施形態において、アセンブラコード２９０６は、マスクＲＯＭ、フラッシュメモリ等の半導体集積メモリや、フロッピーディスク、ハードディスク等の磁気記録媒体や、ＣＤ−ＲＯＭ，ＤＶＤ等の光ディスクに記録することもできる。
【０１６８】
【発明の効果】
以上の説明から明らかなように、本発明は、１バイトデータをメモリの１単位データとして命令を格納するメモリからプログラムカウンタの値に基いて命令を読み出し、実行するプロセッサにおいて、前記メモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データの前記メモリ内の格納位置を指定する値を保持する第１のプログラムカウンタと、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定する値を保持する第２のプログラムカウンタとを備えたことを特徴とする。
【０１６９】
これによって、第１のプログラムカウンタは、バイト単位の長さをもつプロセッサの１単位データのメモリ内の格納位置を指定し、その値に基づいて命令がメモリから読み出される。また、第２のプログラムカウンタは、メモリからプロセッサ内に読み込んだプロセッサの１単位データに含まれるどのプロセッサの１単位命令であっても、その位置を指定することができる。つまり、命令の実行単位は、読み出し単位と関係なく任意に設定することができる。従って、メモリからプロセッサへ読み出す単位はバイト単位でなくてはならない場合にでも、命令の語長がバイト単位でない命令を実行することができる。
【０１７０】
ここで、前記プロセッサは、さらに、第１のプログラムカウンタ更新手段と、第２のプログラムカウンタ更新手段とを含み、前記第２のプログラムカウンタ更新手段は、前記第２のプログラムカウンタの値を１つ前のサイクルで実行した命令の分だけインクリメントし、桁上りがあれば、桁上り数を前記第１のプログラムカウンタ更新手段に送り、前記第１のプログラムカウンタ更新手段は、前記第１のプログラムカウンタの値を前記第２のプログラムカウンタ更新手段から送られた桁上り数だけ加算することを特徴としてもよい。
【０１７１】
これによって、プロセッサが実行した命令の分だけ、プログラムカウンタの値をインクリメントできるので、プログラムカウンタを次のサイクルで実行する命令の先頭位置に移行させることができる。
ここで、前記プロセッサであって、実行命令が、その命令と同一のサイクルで実行する先頭の命令のアドレスを基準とするプログラムカウンタ相対値を含む命令である場合には、当該プログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、前記第１のプログラムカウンタの値及び前記第２のプログラムカウンタの値と前記プログラムカウンタ相対値とを加算し、その演算結果を前記第１のプログラムカウンタの値及び前記第２のプログラムカウンタの値として設定する演算手段とをさらに備えたことを特徴としてもよい。
【０１７２】
これによって、プロセッサが分岐命令を実行した際に、プログラムカウンタの値と、分岐命令を実行する時のプログラムカウンタ値と分岐先命令のアドレスとの差分値であるプログラムカウンタ相対値とが加算されて、加算結果にプログラムカウンタが更新されるので、プログラムカウンタを分岐先命令のアドレスに移行させることができる。
【０１７３】
ここで、前記演算手段は、第１演算部と、第２演算部とを含み、前記第２演算部は、前記第２のプログラムカウンタの値と前記プログラムカウンタ相対値の下位ビットとを加算し、その加算結果を前記第２のプログラムカウンタの値として設定し、桁上りがある場合には、桁上り数を前記第１演算部に送り、桁借りがある場合には、桁借り数を前記第１演算部に送り、前記第１演算部は、前記第１のプログラムカウンタの値と前記プログラムカウンタ相対値の上位ビットとを加算し、さらに前記第２演算部より桁上り数を受けとった場合には、当該桁上り数を加算し、又は前記第２演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記第１のプログラムカウンタの値として設定することを特徴としてもよい。
【０１７４】
これによって、プロセッサが分岐命令を実行する際に、プログラムカウンタとプログラムカウンタ相対値との演算において、下位ビットの演算で発生した桁上り数又は桁借り数が上位ビットの演算で考慮されるので、上位ビットの演算と下位ビットの演算との間に連続性を備えたアドレス演算が可能となる。
ここで、前記演算手段は、第１演算部と、第２演算部とを含み、前記第２演算部は、前記第２のプログラムカウンタの値と前記プログラムカウンタ相対値の下位ビットとを桁上げ、又は桁借りを発生させずに加算し、その加算結果を前記第２のプログラムカウンタの値として設定し、前記第１演算部は、前記第１のプログラムカウンタの値と前記プログラムカウンタ相対値の上位ビットとを加算し、その加算結果を前記第１のプログラムカウンタの値として設定することを特徴としてもよい。
【０１７５】
これによって、プロセッサが分岐命令を実行する際に、第２のプログラムカウンタの値とプログラムカウンタ相対値の下位ビットとを演算する第２の演算器から、第１のプログラムカウンタの値とプログラムカウンタ相対値の上位ビットとを演算する第１の演算器へ、桁上げ数又は桁借り数が送られないので、第２の演算器と第１の演算器としては互いに独立して動作すればよい単純なハードウエアを用いることができる。
【０１７６】
ここで、前記演算手段は、前記第１のプログラムカウンタの値と前記プログラムカウンタ相対値の上位ビットとを加算し、その加算結果を前記第１のプログラムカウンタの値として設定し、前記プログラムカウンタ相対値の下位ビットを前記第２のプログラムカウンタの値として設定することを特徴としてもよい。
これによって、プロセッサが分岐命令を実行する際に、第２のプログラムカウンタの値とプログラムカウンタ相対値の下位ビットとの演算が不要となるので、プロセッサの分岐命令の実行速度が早くなる。
【０１７７】
ここで、前記演算手段は、前記第１のプログラムカウンタの値を上位ビットとし、前記第２のプログラムカウンタの値を下位ビットとする値と前記プログラムカウンタ相対値とを加算し、その加算結果の上位ビットを前記第１のプログラムカウンタの値として設定し、その加算結果の下位ビットを前記第２のプログラムカウンタの値として設定することを特徴としてもよい。
【０１７８】
これによって、プロセッサが分岐命令を実行の際に、プログラムカウンタ値とプログラムカウンタ相対値との演算を通常の演算器を用いて実行することができるので、プロセッサの構成を簡易にすることができる。
ここで、前記プロセッサであって、実行命令が、その命令のアドレスを基準とするプログラムカウンタ相対値を含む命令である場合には、当該プログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、前記第１のプログラムカウンタの値及び前記第２のプログラムカウンタの値を、前記実行命令のアドレスを指定するように補正するプログラムカウンタ補正手段と、前記補正された第１のプログラムカウンタの値及び第２のプログラムカウンタの値と前記プログラムカウンタ相対値とを加算し、その加算結果を前記第１のプログラムカウンタの値及び前記第２のプログラムカウンタの値として設定する演算手段とをさらに備えたことを特徴としてもよい。
【０１７９】
これによって、プログラムカウンタ相対値は、分岐命令のアドレスと分岐先命令の差分値で表されるので、プログラム中の並列実行の境界を変更したい事情が生じた場合にでも、プログラムカウンタ相対値の変更は不要となる。
ここで、前記プロセッサであって、レジスタ又は又は第１のプログラムカウンタ及び第２のプログラムカウンタに格納されたプログラムカウンタの値と、プログラムカウンタ相対値とを加算する加算命令又は減算する減算命令を解読するプログラムカウンタ相対値演算命令解読手段と、前記プログラムカウンタの値と前記プログラムカウンタ相対値とを加算又は減算し、演算結果を算出する演算手段と、前記演算結果にレジスタ又は第１のプログラムカウンタ及び第２のプログラムカウンタを更新するプログラムカウンタ値更新手段とをさらに備えたことを特徴としてもよい。
【０１８０】
これによって、関数の絶対アドレスをレジスタに格納する命令を使用する代わりに、プログラムカウンタとプログラムカウンタ相対値との演算を用いる命令を使用できる。従って、プログラムカウンタ相対値は命令の絶対アドレスよりも短いビット長で表すことができるので、プログラムのコードサイズを小さくすることができる。また、実行時にはじめてプログラムのメモリ上のアドレスが決定されるＰＩＣコードでは、絶対アドレスを用いることができないので、このプログラムカウンタとプログラムカウンタ相対値を用いた演算命令が必要不可欠である。
【０１８１】
ここで、前記第１のプログラムカウンタは、前記プロセッサの１単位データの長さがｎバイトの時に、第１のプログラムカウンタの値をｌｏｇ２ｎだけ左へビットシフトとした値を番地とするプロセッサの１単位データの前記メモリ内の格納位置であるメモリアドレスを指定することを特徴としてもよい。
これによって、メモリに１バイトごとに１つのアドレスが付与されている場合において、第１のプログラムカウンタの値と、メモリに格納された各プロセッサの１単位データが１対１に対応するので、プロセッサからプロセッサの１単位データの指定が容易となる。
【０１８２】
ここで、前記プロセッサであって、命令を一時的に記憶する命令バッファと、前記命令バッファの空き状態に応じて、前記プロセッサの１単位データに限定されず、メモリから命令をメモリの１単位データを最小単位として命令バッファへ読み出す命令読み出し手段とをさらに備えたことを特徴としてもよい。
これによって、メモリからプロセッサ内に読み出す命令の読み出し単位は任意に設定することができるので、プロセッサの命令の読み出しのための機構に柔軟性をもたせることができる。
【０１８３】
また、上記目的を達成するために、本発明は、命令列から最適化コードを生成する命令列最適化装置であって、前記命令列の各命令の大きさを予測して、各命令に対して、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスを付与するアドレス付与手段と、前記命令列から、特定の１つの命令のアドレスに解決すべきラベルを検出し、当該命令のアドレスを取得するとともに、特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出手段と、前記特定の２つの命令のアドレスの差分に解決すべきラベルが検出された場合に、前記特定の２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記特定の１つの命令のアドレスに解決すべきラベルを有する命令については、その大きさを前記特定の１つの命令のアドレスの大きさに応じた命令の大きさに変換し、前記特定の２つの命令のアドレスの差分に解決すべきラベルを有する命令については、その大きさを前記プログラムカウンタ相対値の大きさに応じた命令の大きさに変換する変換手段と、前記変換された命令の大きさに応じて、各命令のアドレスを変換して、最適化コードを生成する最適化コード生成手段とを備えたことを特徴とする。
【０１８４】
これによって、分岐命令を実行するプロセッサを対象としたプログラムを生成する最適化装置を実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【０１８５】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成する最適化装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【０１８６】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成する最適化装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴としてもよい。
【０１８７】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成する最適化装置が実現できる。
また、上記目的を達成するために、本発明は、命令列からリロケータブルコードを生成するアセンブラ装置であって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなる命令列を取得する命令列取得手段と、前記命令列中の特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得するラベル検出手段と、前記特定の２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを備えたことを特徴とする。
【０１８８】
これによって、分岐命令を実行するプロセッサを対象としたプログラムを生成するアセンブラ装置を実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【０１８９】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するアセンブラ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【０１９０】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するアセンブラ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定し、前記特定の２つの命令の一方の命令のアドレスの下位ビットを前記プログラムカウンタ相対値の下位ビットとして設定することを特徴としてもよい。
【０１９１】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するアセンブラ装置が実現できる。
また、上記目的を達成するために、本発明は、リロケーターブルコードを結合してオブジェクトコードを生成するリンカ装置であって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるリロケータブルコードを取得するリロケータブルコード取得手段と、前記リロケータブルコードから特定の２つの命令のアドレスの差分に解決すべきラベルを検出し、当該２つの命令のアドレスを取得する再配置情報検出手段と、前記特定の２つの命令の一方の命令のアドレスから他方の命令のアドレスを減算し、プログラムカウンタ相対値を算出するプログラムカウンタ相対値算出手段と、前記ラベルを前記算出されたプログラムカウンタ相対値に置換する置換手段とを備えたことを特徴とする。
【０１９２】
これによって、分岐命令を実行するプロセッサを対象としたプログラムを生成するリンカ装置を実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、桁借りがある場合には、桁借り数を前記上位ビット減算部に送り、前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、さらに前記下位ビット減算部より桁借り数を受けとった場合には、当該桁借り数を減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【０１９３】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するリンカ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの下位ビットから他方の命令のアドレスの下位ビットとを桁借りを発生させずに減算し、減算結果を前記プログラムカウンタ相対値の下位ビットとして設定し、前記上位ビット減算部は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果を前記プログラムカウンタ相対値の上位ビットとして設定することを特徴としてもよい。
【０１９４】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するリンカ装置が実現できる。
ここで、前記プログラムカウンタ相対値算出手段は、前記特定の２つの命令の一方の命令のアドレスの上位ビットから他方の命令のアドレスの上位ビットとを減算し、減算結果をプログラムカウンタ相対値の上位ビットとして設定し、前記特定の２つの命令の一方の命令のアドレスの下位ビットをプログラムカウンタ相対値の下位ビットとして設定することを特徴としてもよい。
【０１９５】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを生成するリンカ装置が実現できる。
また、上記目的を達成するために、本発明は、オブジェクトコード中の命令のアドレスを指定して、そのアドレスで特定される命令のアセンブラ名を出力する逆アセンブラ装置であって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、前記特定される命令がプログラムカウンタ相対値を含む命令である場合に、前記特定される命令中からプログラムカウンタ相対値を抽出するプログラムカウンタ相対値抽出手段と、ラベルの位置を示すラベルアドレスとラベル名とを対応させて記憶する記憶手段と、前記指定した命令のアドレスとプログラムカウンタ相対値とを加算し、加算結果をラベルアドレスとするラベルアドレス算出手段と、前記記憶手段を参照して、前記算出したラベルアドレスに対応するラベル名を検索する検索手段とを備えたことを特徴とする。
【０１９６】
これによって、分岐命令を含むプログラムを逆アセンブルすることができる。つまり、逆アセンブルする命令が分岐命令である場合にも、プログラムカウンタ相対値から分岐先命令のアドレスを算出し、そのアドレスからラベルテーブルを参照して、ラベル名を取得できるので、プログラムカウンタ相対値よりも、わかりやすい形式であるラベル名により分岐先をユーザに提示することできる。
【０１９７】
ここで、前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを加算し、加算結果を前記ラベルアドレスの下位ビットとし、桁上りがある場合には、桁上り数を前記上位ビット演算部に送り、桁借りがある場合には、桁借り数を前記上位ビット演算部に送り、前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、さらに前記下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又は前記下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果を前記ラベルアドレスの上位ビットとすることを特徴としてもよい。
【０１９８】
これによって、分岐命令を実行する際に桁上り方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを逆アセンブルする逆アセンブラ装置を実現できる。
ここで、前記ラベルアドレス算出手段は、上位ビット減算部と、下位ビット減算部とを含み、前記下位ビット減算部は、前記指定した命令のアドレスの下位ビットと前記プログラムカウンタ相対値の下位ビットとを桁上げ、又は桁借りを発生させずに加算し、加算結果を前記ラベルアドレスの下位ビットとし、前記上位ビット減算部は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとすることを特徴としてもよい。
【０１９９】
これによって、分岐命令を実行する際に桁上りなし方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを逆アセンブルする逆アセンブラ装置が実現できる。
ここで、前記ラベルアドレス算出手段は、前記指定した命令のアドレスの上位ビットと前記プログラムカウンタ相対値の上位ビットとを加算し、加算結果を前記ラベルアドレスの上位ビットとし、前記プログラムカウンタ相対値の下位ビットを前記ラベルアドレスの下位ビットとすることを特徴としてもよい。
【０２００】
これによって、分岐命令を実行する際に絶対値方式によるアドレス演算によって分岐先命令のアドレスを算出するプロセッサを対象としたプログラムを逆アセンブルする逆アセンブラ装置が実現できる。
また、上記目的を達成するために、本発明は、オブジェクトコード中の命令のアドレスと変換命令を指定して、そのアドレスで特定される命令を変換命令に置換するデバッガ装置であって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するアドレスが付与された命令からなるオブジェクトコードを取得するオブジェクトコード取得手段と、前記指定した命令のアドレスの上位ビットで特定されるプロセッサの１単位データをメモリから読み出して命令バッファに書き込むプロセッサの１単位データ読み出し手段と、前記命令バッファ内のプロセッサの１単位データに含まれる前記指定した命令のアドレスの下位ビットで特定される命令の位置に前記変換命令を書き込む命令書き込み手段と、前記命令書き込み後の命令バッファ内のプロセッサの１単位データをメモリに戻すプロセッサの１単位データ書き込み手段とを備えたことを特徴とする。
【０２０１】
これによって、バイト単位の長さであるプロセッサの１単位データを単位としてメモリから命令を命令バッファに読み出して、命令バッファ中で命令を書き換えて、命令パケットの単位で命令をメモリへ書き込むので、バイト単位の長さでない命令でもデバッグができるデバッガ装置が実現できる。
また、上記目的を達成するために、本発明は、ソースコードから命令列を生成するコンパイラ装置であって、上位ビットは、１バイト長であるメモリの１単位データ又は複数のメモリの１単位データより構成されるプロセッサの１単位データが格納されるメモリアドレスを指定し、下位ビットは、前記プロセッサの１単位データに含まれるプロセッサが実行する１つのオペレーションを示すプロセッサの１単位命令の位置を指定するプログラムカウンタの値とプログラムカウンタ相対値とを加算又は減算し、演算結果をプログラムカウンタの値とする命令をプロセッサに実行させるプログラムカウンタ相対値演算命令を生成することを特徴とする。
【０２０２】
これによって、プログラムカウンタ相対値演算命令を実行するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
ここで、前記プログラムカウンタ相対値演算命令は、前記プログラムカウンタの値の下位ビットとプログラムカウンタ相対値の下位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとし、桁上りがある場合には、桁上り数を上位ビット演算部に送り、桁借りがある場合には、桁借り数を上位ビット演算部に送る下位ビット演算をプロセッサの下位ビット演算部に実行させ、前記プログラムカウンタの値の上位ビットとプログラムカウンタ相対値の上位ビットとを加算又は減算し、さらに前記下位ビット演算部より桁上り数が受けとった場合には、当該桁上り数を加算し、又は前記下位ビット演算部より桁借り数を受けとった場合には、当該桁借り数を減算し、それらの演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴としてもよい。
【０２０３】
これによって、プログラムカウンタ相対値演算命令を実行する際に、桁上り方式によりプログラムカウンタの値とプログラムカウンタ相対値とを演算するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
ここで、前記プログラムカウンタ相対値演算命令は、前記プログラムカウンタの値の下位ビットとプログラムカウンタ相対値の下位ビットとを桁上り、桁借りは発生させずに、加算又は減算し、演算結果をプログラムカウンタの値の下位ビットとする下位ビット演算をプロセッサの下位ビット演算部に実行させ、前記プログラムカウンタの値の上位ビットとプログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させることを特徴としてもよい。
【０２０４】
これによって、プログラムカウンタ相対値演算命令を実行する際に、桁上りなし方式によりプログラムカウンタの値とプログラムカウンタ相対値とを演算するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
ここで、前記プログラムカウンタ相対値演算命令は、前記プログラムカウンタの値の上位ビットとプログラムカウンタ相対値の上位ビットとを加算又は減算し、演算結果をプログラムカウンタの値の上位ビットとする上位ビット演算をプロセッサの上位ビット演算部に実行させ、前記プログラムカウンタ相対値の下位ビットをプログラムカウンタの値の下位ビットとすることを特徴としてもよい。
【０２０５】
これによって、プログラムカウンタ相対値演算命令を実行する際に、絶対値方式によりプログラムカウンタの値とプログラムカウンタ相対値とを演算するプロセッサを対象としたプログラムを生成するコンパイラ装置を実現できる。
【図面の簡単な説明】
【図１】図１（ａ）は、第１の実施形態のプロセッサが実行する命令のフォーマットを示す。
図１（ｂ）は、第１の実施形態のプロセッサが実行する命令のフォーマットを示す。
図１（ｃ）は、第１の実施形態のプロセッサが実行する命令のフォーマットを示す。
図１（ｄ）は、第１の実施形態のプロセッサが実行する命令のフォーマットを示す。
図１（ｅ）は、第１の実施形態のプロセッサが実行する命令のフォーマットを示す。
【図２】図２（ａ）は、命令の格納、及び読み出し単位である命令パケットを示す図である。
図２（ｂ）は、命令の読み出しの順序を示す図である。
図２（ｃ）は、命令の実行の順序を示す図である。
【図３】通常のプロセッサで、バイトアラインされていない命令を実行する場合の命令の格納、読み出し方法の例を示す図である。
【図４】プロセッサが実行するオブジェクトコードが、コンパイラ装置と、最適化装置と、アセンブラ装置と、リンカ装置により作成される過程を示す図である。
【図５】プロセッサ３０９及び外部メモリの詳細を示すブロック図である。
【図６】パケット内アドレスのインクリメントの規則を示すインクリメント表である。
【図７】図７（ａ）は、分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとの加算規則を示す加算表である。
図７（ｂ）は、分岐先命令のアドレスの下位３ビットと分岐命令のアドレスの下位３ビットとの減算規則を示す減算表である。
【図８】最適化装置３０３の構成要素及び入出力データを示すブロック図である。
【図９】最適化装置３０３の動作手順を示すフローチャートである。
【図１０】コード最適化手段９０２が生成した最適化処理コード９０３の一部分を示す。
【図１１】図１０の最適化処理コードより生成されたアドレス付与コード９１６を示す。
【図１２】図１１のアドレス付与コードから生成されたラベル情報９０６を示す。
【図１３】図１１のアドレス付与コードから生成された最適化コード９１５を示す。
【図１４】アセンブラ装置３０５の構成及び関連する入出力データを示すブロック図である。
【図１５】アセンブラ装置３０５の動作手順を示すフローチャートである。
【図１６】図１３の最適化コードから生成された機械語コード８０３を示す。
【図１７】図１６の機械語コードより作成されたラベル情報を示す。
【図１８】図１６の機械語コード８０３から生成されたリロケータブルコードを示す。
【図１９】リンカ装置３０７の構成及び関連する入出力データを示すブロック図である。
【図２０】リンカ装置３０７の動作手順を示すフローチャートである。
【図２１】リロケータブルコードを示す。
【図２２】図１８に示すリロケータブルコード３０６と、別途生成された図２１に示すリロケータブルコードと結合された状態を示す。
【図２３】結合コード７０３を示す。
【図２４】図２３の結合コードより作成されたラベル情報を示す。
【図２５】図２３の結合コードより生成されたオブジェクトコードを示す。
【図２６】第２の実施形態に係るオブジェクトコードを示す。
【図２７】図２７（ａ）は、第３の実施形態に係る命令パケットの構成を示す。
図２７（ｂ）は、命令の種類を示す。
図２７（ｃ）は、パケット内アドレスと、パケット内アドレスが指定するパケット内のユニットとの関係を示す。
【図２８】図２８（ａ）は、第４の実施形態に係る桁上りなし方式のアドレス演算による分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとの加算規則を示す加算表である。
図２８（ｂ）は、第４の実施形態に係る桁上りなし方式のアドレス演算による分岐先命令のアドレスの下位３ビットと分岐命令のアドレスの下位３ビットとの減算規則を示す減算表である。
【図２９】第４の実施形態に係る桁上りなし方式のアドレス演算を用いて生成されたオブジェクトコードの具体例である。
【図３０】図３０（ａ）は、第５の実施形態に係る絶対値方式のアドレス演算による分岐命令のアドレスの下位３ビットとＰＣ相対値の下位３ビットとの加算規則を示す加算表である。
図３０（ｂ）は、第５の実施形態に係る絶対値方式のアドレス演算による分岐先命令のアドレスの下位３ビットと分岐命令のアドレスの下位３ビットとの減算規則を示す減算表である。
【図３１】第５の実施形態に係る絶対値方式のアドレス演算を用いて生成されたオブジェクトコードの具体例である。
【図３２】第６の実施形態に係るリニア方式のアドレス演算を用いて生成されたオブジェクトコードを示す。
【図３３】第７の実施形態に係るプロセッサの構成図である。
【図３４】図３４（ａ）は、ＰＣ加算命令のニーモニックとオペレーションの対応を示す。
図３４（ｂ）は、ＰＣ減算命令のニーモニックとオペレーションの対応を示す。
【図３５】第８の実施形態に係るコンパイラ装置の構成図である。
【図３６】コンパイラ装置の動作手順を示すフローチャートである。
【図３７】Ｃ言語で記述されたソースコードを示す。
【図３８】図３７のソースプログラムが変換された中間コードを示す。
【図３９】図３８の中間コードが変換されたアセンブラコードを示す。
【図４０】第８の実施形態に係るデバッガ装置と逆アセンブラ装置の構成を示すブロック図である。
【図４１】逆アセンブラ装置の動作手順を示すフローチャートである。
【図４２】デバッガ装置の動作手順を示すフローチャートである。
【図４３】従来のプロセッサの基本構成を示すブロック図である。
【符号の説明】
１００    並列実行境界情報
１０１    ビットフォーマット情報
３００    ソースコード
３０１    コンパイラ装置
３０２    アセンブラコード
３０３    最適化装置
３０４    最適化コード
３０５    アセンブラ装置
３０６    リロケータブルコード
３０７    リンカ装置
３０８    オブジェクトコード
３０９    プロセッサ
４０１ａ〜４０１ｃ  演算器
４０２    汎用レジスタ
４０３    上位ＰＣ
４０４    下位ＰＣ
４０５    下位ＰＣ演算器
４０６    データメモリ
４０７    命令メモリ
４０８    命令バッファ
４０９ａ〜４０９ｃ  命令デコーダ
４１０    フェッチ上位カウンタ
４１１    上位ＰＣ演算器
４１２    ＩＮＣ
４１３    プリフェッチ下位カウンタ
４２０    ＰＣ相対値セレクタ
４２１    即値セレクタ
４２２    オペランドアドレスバッファ
４２３    オペランドデータバッファ
４２４ａ〜ｃ  制御信号
７０２    コード結合手段
７０３    結合コード
７０４    再配置情報検出手段
７０５    再配置情報
７０６    下位アドレス減算手段
７０７    桁借り数
７０８    下位減算結果
７０９    上位アドレス減算手段
７１０    上位減算結果
７１１    アドレス差算出手段
７１２    アドレス差
７１３    再配置情報解決手段
８０２    機械語コード生成手段
８０３    機械語コード
８０４    ラベル検出手段
８０５    ラベル情報
８０６    下位アドレス減算手段
８０７    桁借り数
８０８    下位減算結果
８０９    上位アドレス減算手段
８１０    上位減算結果
８１１    アドレス差算出手段
８１２    アドレス差
８１３    ラベル情報解決手段
９０２    コード最適化手段
９０３    最適化処理コード
９０４    アドレス付与手段
９０５    ラベル検出手段
９０６    ラベル情報
９０７    下位アドレス減算手段
９０８    桁借り数
９０９    下位減算結果
９１０    上位アドレス減算手段
９１１    上位減算結果
９１２    アドレス差算出手段
９１３    アドレス差
９１４    ラベル情報解決手段
９１６    アドレス付与コード
２８００    第２下位ＰＣ演算器
２８０１ａ〜２８０１ｃ  命令デコーダ
２８０２    第２上位ＰＣ演算器
２９０１    ソースコード
２９０２    中間コード変換部
２９０３    中間コード
２９０４    ＰＣ値加算命令変換部
２９０５    命令変換部
２９０６    アセンブラコード
４０００    入力制御部
４００１    パケットアドレス特定部
４００２    パケット内アドレス特定部
４００３    パケット内アドレス特定部
４００４    命令メモリ
４００５    命令バッファ
４００６    命令解読部
４００７    ＰＣ相対値
４００８    下位ＰＣ演算器
４００９    上位ＰＣ演算器
４０１０    ラベル検索部
４０１１    ラベルテーブル
４０１２    表示部
４０１３    命令置換部
４３００    プログラムカウンタ
４３０１    命令メモリ
４３０２    命令読み出し部
４３０３    命令実行部
【図１】
0003595269.tif 000002
【図２】
0003595269.tif 000003
【図３】
0003595269.tif 000004
【図４】
0003595269.tif 000005
【図５】
0003595269.tif 000006
【図６】
0003595269.tif 000007
【図７】
0003595269.tif 000008
【図８】
0003595269.tif 000009
【図９】
0003595269.tif 000010
【図１０】
0003595269.tif 000011
【図１１】
0003595269.tif 000012
【図１２】
0003595269.tif 000013
【図１３】
0003595269.tif 000014
【図１４】
0003595269.tif 000015
【図１５】
0003595269.tif 000016
【図１６】
0003595269.tif 000017
【図１７】
0003595269.tif 000018
【図１８】
0003595269.tif 000019
【図１９】
0003595269.tif 000020
【図２０】
0003595269.tif 000021
【図２１】
0003595269.tif 000022
【図２２】
0003595269.tif 000023
【図２３】
0003595269.tif 000024
【図２４】
0003595269.tif 000025
【図２５】
0003595269.tif 000026
【図２６】
0003595269.tif 000027
【図２７】
0003595269.tif 000028
【図２８】
0003595269.tif 000029
【図２９】
0003595269.tif 000030
【図３０】
0003595269.tif 000031
【図３１】
0003595269.tif 000032
【図３２】
0003595269.tif 000033
【図３３】
0003595269.tif 000034
【図３４】
0003595269.tif 000035
【図３５】
0003595269.tif 000036
【図３６】
0003595269.tif 000037
【図３７】
0003595269.tif 000038
【図３８】
0003595269.tif 000039
【図３９】
0003595269.tif 000040
【図４０】
0003595269.tif 000041
【図４１】
0003595269.tif 000042
【図４２】
0003595269.tif 000043
【図４３】
0003595269.tif 000044