JP2847688B2 - プログラム変換装置およびプロセッサ - Google Patents

プログラム変換装置およびプロセッサ

Info

Publication number
JP2847688B2
JP2847688B2 JP5126213A JP12621393A JP2847688B2 JP 2847688 B2 JP2847688 B2 JP 2847688B2 JP 5126213 A JP5126213 A JP 5126213A JP 12621393 A JP12621393 A JP 12621393A JP 2847688 B2 JP2847688 B2 JP 2847688B2
Authority
JP
Japan
Prior art keywords
instruction
register
variable
bit length
bits
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
JP5126213A
Other languages
English (en)
Other versions
JPH06337792A (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 Holdings Corp
Original Assignee
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP5126213A priority Critical patent/JP2847688B2/ja
Priority to US08/249,460 priority patent/US5694605A/en
Priority to EP94303846A priority patent/EP0626640B1/en
Priority to DE69428151T priority patent/DE69428151T2/de
Publication of JPH06337792A publication Critical patent/JPH06337792A/ja
Application granted granted Critical
Publication of JP2847688B2 publication Critical patent/JP2847688B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は高級言語プログラムを機
械語プログラムに変換するプログラム変換装置、及び、
その機械語プログラムを実行するプロセッサに関する。
【0002】
【従来の技術】近年の電子技術の発展により、マイクロ
コンピュータ等の情報処理装置が普及し、あらゆる分野
で用いられている。従来のプロセッサは、命令の種類が
豊富なことを特徴とするCISCプロセッサ(Complex Inst
ruction Set Computer)と、命令の種類を限定して高速
さを特徴とするRISCプロセッサ(Reduced Instruction
Set Computer)とに大別できる。例えば、TRONやMC6804
0などは前者であり、SPARCやMIPSなどは後者である。こ
れらのプロセッサについては、32ビット幅の複数のレ
ジスタと32ビット幅の演算器を持つプロセッサが現在
主流である。
【0003】32ビットのCISCプロセッサでは、CISCプ
ロセッサが持つ全てのレジスタに対する全ての演算命令
で3種類のデータ幅(8ビット、16ビットおよび32
ビット)の取り扱いができるようになっている。これに
対応して、CISCプロセッサの機械語プログラムを生成す
るコンパイラ(以下、CISC用コンパイラ)は、データ幅
に合わせて種々の命令(コード)を生成する。例えば、
8ビット幅の文字型のデータ変数や、16ビット幅の短
整数型のデータ変数を32ビット幅のレジスタに格納す
る命令を生成する場合、それぞれのデータ変数を32ビ
ットレジスタの下位8ビット、下位16ビットに格納し
てそれぞれ上位24ビット、上位16ビットを更新しな
いような命令(コード)を生成する。
【0004】CISCプロセッサは、CISC用コンパイラによ
って生成された機械語プログラムを実行するが、CISCプ
ロセッサが持つ全てのレジスタに対する全ての演算命令
で3種類のデータ幅(8ビット、16ビットおよび32
ビット)が指定されるようになっているため、命令の数
が極めて多くなる。その結果として、それらの命令を解
読して実行するためのハードウェアが大きく、かつ、複
雑になるという短所を有している。この短所は、従来の
プロセッサにおける命令数を減らしたRISCプロセッサに
よって解決されている。
【0005】一方、RISCプロセッサでは命令の種類が限
定され、32ビット幅のレジスタの下位8ビットあるい
は下位16ビットのみを更新するような命令は持たな
い。このため、RISC用コンパイラは、レジスタに8ビッ
ト幅の文字型のデータ変数や16ビット幅の短整数型の
データ変数を格納する命令を生成する場合でも、レジス
タの32ビット全てを更新するような命令(コード)を
生成する。
【0006】さらに、RISC用コンパイラは、レジスタに
8ビット幅の文字型のデータ変数や16ビット幅の短整
数型のデータ変数を格納したレジスタを更新する命令の
後に、そのレジスタのそれぞれ上位24ビットおよび上
位16ビットを補正して、8ビット幅の文字型のデータ
変数や16ビット幅の短整数型のデータ変数で表現でき
る範囲内に値を修正する命令を生成する必要が生じる。
【0007】これはデータ変数の演算によって生じる可
能性のあるオーバーフローを補償するためである。即
ち、符号付き文字型データ変数は、-128から+127まで、
符号なし文字型データ変数は、0から+255まで、符号付
き短整数型データ変数は、-32768から+32767まで、符号
なし短整数型データ変数は、0から+65535まで、がそれ
ぞれの型のデータ変数が表現できる範囲である(数値は
すべて十進数)。ところが、32ビット幅のレジスタの
中ではこれらのデータ変数が格納されて演算されると上
記の範囲を超えることがある。例えば、+127の値が格納
された符号付き文字型データ変数に割り当てられたレジ
スタに2を加える演算を行うとレジスタの値は+129にな
り、このレジスタは符号付き文字型データ変数として正
しい値を保持しなくなる。
【0008】そこでRISC用コンパイラは、これを補償す
るためにレジスタの内容が演算によって更新されるたび
に、符号付き文字型データ変数では、24ビット左シフ
ト命令と24ビット算術右シフト命令を、符号なし文字
型データ変数では、24ビット左シフト命令と24ビッ
ト論理右シフト命令を、符号付き短整数型データ変数で
は、16ビット左シフト命令と16ビット算術右シフト
命令を、符号なし短整数型データ変数では、16ビット
左シフト命令と16ビット論理右シフト命令を、それぞ
れ補正用命令として無条件に挿入したコードを生成す
る。ここで左シフトは最上位ビット方向のシフトを、算
術右シフトは最上位ビット入力を最上位ビットのコピー
とする最下位ビット方向のシフトを、論理右シフトは最
上位ビット入力をゼロとする最下位ビット方向のシフト
を表す。上記の例では、+129(二進数で100000001)の
値が格納されたレジスタは24ビット左シフトされる過
程で上位の1がこぼれ、24ビット算術右シフトによっ
て値が1となる。
【0009】
【発明が解決しようとする課題】しかしながら、上記の
従来技術によれば、文字型データ変数または短整数型デ
ータ変数を使用するプログラムは、RISCコンパイラによ
ってコンパイルされた結果、上記補正命令が頻出するこ
とになるので機械語プログラムのコードサイズが増加
し、かつ、RISCプロセッサにおけるプログラムの処理時
間が長くなるという問題点を有している。
【0010】加えて、オーバーフローが発生し得ないプ
ログラムを実行する場合、または、プログラマがデータ
変数毎にその値域を把握してオーバーフローを回避する
場合には、上記の補正命令による効果は皆無であるとい
う問題点がある。さらに、レジスタのビット幅が整数型
変数のビット幅を超えるシステムでは、文字型データ変
数や短整数型データ変数だけではなく整数型データ変数
でも同一の問題点を招き、通常整数型が最も頻繁に用い
られるためコードサイズの増加および実行速度の低下の
度合いはともに著しくなるという問題点を有している。
【0011】プログラマがオーバーフローを回避できな
いかもしくはオーバーフローを意識しない場合は、上述
の補正命令は効果を発揮する。しかし、補正が左シフト
命令と算術または論理右シフト命令とによって構成され
るため、特にレジスタのビット幅が整数型データ変数の
ビット幅を超えるシステムではコードサイズの増加とプ
ログラムの実行速度の低下に及ぼす影響が大きいという
問題点を有している。
【0012】本発明はかかる問題点に鑑み、データ変数
のオーバーフローが発生し得ないプログラムを実行する
場合、またはプログラマがデータ変数毎にその値域を把
握してオーバーフローを回避する場合には、そのデータ
変数の型にかかわらず機械語プログラムのコードサイズ
が増加させないプログラム変換装置、及び、生成された
プログラムの実行速度の低下させないプロセッサを提供
することを目的とする。
【0013】
【課題を解決するための手段】上記の課題を解決するた
め本発明のプログラム変換装置は、データのビット長M
よりも大きいビット長Nをもつアドレスを扱うプロセッ
サを対象とし、高級言語プログラムに基づいて機械語命
令を生成するプログラム変換装置であって、利用者によ
り指定された指示であって、演算命令に関するオーバー
フロー補償をするかしないかを示す指示を保持するオプ
ション指示手段と、オペランドで指定されるデータ変数
の有効ビット長がレジスタのビット長Nよりも小さく、
かつ、その有効ビット長を越えてオーバーフローを生じ
得る演算を内容とする機械語命令を生成する際に、オプ
ション保持手段が補償すべき指示を保持している場合に
は、当該機械語命令の演算対象となるデータ変数の型を
判別し、その判別結果に応じてオーバーフローを補償す
る補正命令を生成する生成手段とを備えている。
【0014】前記生成手段は、オプション保持手段が補
償すべき指示を保持している場合に、生成の対象となる
全機械語命令のうちオーバーフローを生じうる演算命令
を判別する命令判別手段と、命令判別手段により判別さ
れた命令における変数について、その有効なビット長及
び符号ビットの有無を判別する変数判別手段と、符号ビ
ットがある場合には、当該変数を格納するレジスタに対
して判別された有効なビット長よりも上位の全ビットに
符号ビットと同じ論理値を埋める符号拡張処理を内容と
する補正命令を生成する符号拡張命令生成手段と、符号
ビットがない場合には、当該変数を格納するレジスタに
対して判別された有効なビット長よりも上位の全ビット
に論理値0を埋めるゼロ拡張処理を内容とする補正命令
を生成するゼロ拡張命令生成手段とからなっていてもよ
い。
【0015】前記Mは32、Nは33以上63以下の整
数であってもよい。前記Mは16、Nは17以上31以
下の整数であってもよい。前記Mは16、Nは24であ
り、前記変数判別手段は、変数の有効なビット長が16
又は8の何れであるかを判別するようになっていてもよ
い。また、本発明のプロセッサは、上記のプログラム変
換装置により生成されたプログラムを実行するプロセッ
サであって、ビット長Nの複数のレジスタからなるレジ
スタ群と、前記補正命令に従って、レジスタ内のデータ
の有効ビット長をレジスタのビット長Nに拡張する補正
手段とを備えている。
【0016】前記補正手段は、符号拡張を内容とする補
正命令に従って、当該データ変数を格納するレジスタに
対して判別された有効なビット長よりも上位の全ビット
に符号ビットと同じ論理値を埋める第1の拡張器と、ゼ
ロ拡張を内容とする補正命令に従って、当該データ変数
を格納するレジスタに対して判別された有効なビット長
よりも上位の全ビットに論理値0を埋める第2の拡張器
とからなっていてもよい。
【0017】
【作用】上記の手段により本発明のプログラム変換装置
は、オプション指示手段は、その保持内容に応じて、機
械語命令生成の際に、演算命令に対するオーバーフロー
補償のための補正命令を生成するかしないかを生成手段
に指示する。生成手段は、オペランドで指定されるデー
タ変数の有効ビット長がレジスタのビット長Nよりも小
さく、かつ、その有効ビット長を越えてオーバーフロー
を生じ得る演算を内容とする機械語命令を生成する際
に、オプション保持手段が補償すべき指示を保持してい
る場合には、当該機械語命令の演算対象となるデータ変
数の型を判別し、その判別結果に応じてオーバーフロー
を補償する補正命令を生成する。
【0018】また、前記生成手段において、命令判別手
段により判別されたオーバーフローを生じうる演算命令
における変数について、変数判別手段は、その有効なビ
ット長及び符号ビットの有無を判別する。この判別の結
果、符号拡張命令生成手段は、符号ビットがある場合に
は、当該変数を格納するレジスタに対して判別された有
効なビット長よりも上位の全ビットに符号ビットと同じ
論理値を埋める符号拡張処理を内容とする補正命令を生
成する。また、ゼロ拡張命令生成手段は、符号ビットが
ない場合には、当該変数を格納するレジスタに対して判
別された有効なビット長よりも上位の全ビットに論理値
0を埋めるゼロ拡張処理を内容とする補正命令を生成す
る。
【0019】また、本発明のプロセッサにおいて、補正
手段は、前記補正命令に従ってレジスタ内のデータの有
効ビット長をレジスタのビット長Nに拡張する。第1の
拡張器は符号拡張を、第2の拡張器はゼロ拡張を行う。
【0020】
【実施例】図1は本発明の実施例におけるプログラム変
換装置(コンパイラ)及びプロセッサのブロック図を示
すものである。同図において、1は記憶装置で、C言語
プログラムを格納する。2はコンパイラで、C言語プロ
グラムを機械語に翻訳する。
【0021】4はハードウェアで、コンパイラ2により
生成されたオブジェクトコードを実行する。コンパイラ
2は、コード生成部5と、オプション指示部6とからな
る。コード生成部5は、C言語プログラムに基づいてオ
ブジェクトコードを生成する。
【0022】オプション指示部6は、利用者によりオー
バーフロー補償の有無がオプション指定され、コード生
成部5に対して、プログラムにおけるデータ変数の演算
箇所に後述する補正コードを挿入するか否かを指示す
る。またハードウェア4は、マイクロコンピュータ7
と、オブジェクトコード及びプログラムに用いられるデ
ータが格納されるメモリ8とからなり、両者は24ビッ
トのアドレスバス9と16ビットのデータバス10とで
接続される。
【0023】マイクロコンピュータ7は、アドレスバス
9とデータバス10とを制御してメモリ8に格納された
命令を逐一読み出すとともにメモリ8に対してデータを
読み書きするバス制御回路11と、バス制御回路11か
ら命令を受け取り解読および実行する命令実行回路12
とからなる。命令実行回路12は、24ビットのレジス
タ13と、レジスタ13に保持された値を用いて算術論
理演算等を行う24ビットの演算器14と、レジスタ1
3に保持された値の下位8ビットを24ビットに符号拡
張もしくはゼロ拡張する第一拡張器15と、レジスタ1
3に保持された値の下位16ビットを24ビットに符号
拡張もしくはゼロ拡張する第二拡張器16とを持つ。
【0024】図2、3は、コード生成部5の処理フロー
を示す図である。図2においてステップ20は、記憶装
置1からC言語プログラムを取り出し、構文を文法に照
らして解析して、中間形式の言語で記述された中間命令
及び中間形式文からなる中間ファイルを生成する。ステ
ップ21は、中間ファイルからデータ変数を抽出して、
それぞれの変数に関する情報を載せた変数テーブル(シ
ンボルテーブル)を作成する。シンボルテーブルの一例
を図4に示す。同図において、シンボル欄はデータ変数
のシンボルを、変数の型欄は変数の符号の有無および整
数型であるか文字型であるかを、バイト数欄はそのデー
タ変数のバイト数を、先頭アドレス欄はメモリに割り付
けられている場合の先頭アドレスを示す。レジスタ欄は
変数にレジスタが割り当てられている場合にそのレジス
タを示す。
【0025】ステップ22は、中間ファイルからコード
生成が未処理の中間命令があるか否かを判定する。あれ
ばステップ23に進み、なければコード生成が終了す
る。ステップ23は、中間ファイルから次に処理すべき
順の中間命令を1つ読み出す。ステップ24は、1つの
中間命令を実現する1つ又は複数の機械語命令を選定す
る。
【0026】ステップ25は、ステップ24で選定され
た機械語命令から次に処理すべき順の機械語命令を1つ
指定する。ステップ26は、指定された1つの機械語命
令(以下、個別命令と呼ぶ)の命令コードを生成する処
理(以下、個別処理と呼ぶ)である。ステップ27は、
生成された命令が演算命令であるか否か、つまり、オー
バーフローが発生する可能性がある命令か否かを判定す
る。そうであればステップ30に進み、そうでなければ
ステップ28に進む。
【0027】ステップ28は、複数の機械語命令のうち
次に処理すべき機械語命令があるか否かを判定する。あ
ればステップ25に戻り、なければステップ22に戻
る。図3においてステップ30は、オプション指示部6
によりオーバーフロー補償をする指示があるか否かを判
定する。あればステップ31に、なければステップ28
に進む。
【0028】ステップ31は、生成された個別命令に関
して、シンボルテーブルを参照して変数の型を判別す
る。ステップ32は、変数の型が文字型であるか整数型
であるかを判定し、前者であればステップ33に、後者
であればステップ36に進む。ステップ33は、文字型
変数が符号付きであるか符号なしであるかを判定し、前
者であればステップ34に、後者であればステップ35
に進む。
【0029】ステップ34は、符号付き文字型変数を符
号拡張する。つまり、8ビットを24ビットに符号拡張
する最小語長の命令を生成する。ステップ35は、符号
なし文字型変数をゼロ拡張する。つまり、8ビットを2
4ビットにゼロ拡張する最小語長の命令を生成する。ス
テップ36は、整数型変数が符号付きであるか符号なし
であるかを判定し、前者であればステップ37に、後者
であればステップ38に進む。
【0030】ステップ37は、符号付き整数型変数を符
号拡張する。つまり、16ビットを24ビットに符号拡
張する最小語長の命令を生成する。ステップ38は、符
号なし整数変数をゼロ拡張する。つまり、16ビットを
24ビットにゼロ拡張する最小語長の命令を生成する。
以上のように構成された本実施例のプログラム変換装置
およびプロセッサについて、以下その動作を説明する。
説明を簡潔にするために、C言語プログラムが次に示す
場合を例にあげる。
【0031】 このC言語プログラムは、コード生成部5によって記憶
装置1から読み出され、C言語の文法に照らして構文が
解析される。コード生成部5は、解析結果から中間形式
の言語で記述された中間ファイルを生成する(図2のス
テップ20)。この中間ファイルのイメージを以下に示
す。ただし、ここでは便宜上、中間形式の記述の意味が
わかるように書き直してある。
【0032】中間形式文1: (char a ) 中間形式文2: (unsigned char b ) 中間形式文3: (int c ) 中間形式文4: (unsigned int d ) 中間命令1: (a = a + 1 ) 中間命令2: (b = b + a ) 中間命令3: (c = c + b ) 中間命令4: (d = d + c ) この中間ファイルが入力されると、コード生成部5は、
中間ファイル中のデータ変数(宣言のないものも含め
て)を抽出し、それぞれの変数の型を調査し、必要があ
ればメモリに割り当て、図4に示したシンボルテーブル
を作成する(ステップ21)。
【0033】中間形式文1〜4から明示的に宣言された
変数a,b,c,dが抽出される。それぞれの変数は、宣言文
に基づいて変数の型が判別され、シンボルテーブル(図
4参照)に登録されるとともにメモリ上に割り当てられ
る。ここでは、変数a,b,c,dは、それぞれメモリの1000
番地から1バイト、1001番地から1バイト、1002番地か
ら2バイト、1004番地から2バイトの領域に割り当てら
れているものとする。このシンボルテーブルの内容は、
以後変更があれば、その都度ダイナミックにその内容が
書き換えられる。既に示した図4は、この時点における
シンボルテーブルの内容である。
【0034】この後、コード生成部5は、中間命令のそ
れぞれについて、以下のようにして対応する機械語命令
を生成する。オーバーフロー補償がある場合と、ない場
合に分けて説明する。 (1)利用者がオーバーフロー補償を行わないことをコ
ンパイラにオプション指定する場合 コード生成部5は、未処理の中間命令のうち先頭の中間
命令を1つ読み出し(ステップ23)、その中間命令を
実現する1つ又は複数の機械語命令を選定する(ステッ
プ24)。
【0035】ステップ24における中間命令1を実現す
る1つ又は複数の命令の選定を具体的に説明する。中間
命令1(a = a + 1 )は「符号付き文字型変数aが割
り当てられている1000番地から1バイトを読み出して、
その内容に1を加算して、1000番地に格納する。」
ことを内容とする。コード生成部5は、この内容を実現
するため上記〜に対応する機械語命令を選定する。
すなわち、アドレス1000番地から1バイトを読み出し
て、データレジスタに格納するmov命令、データレジ
スタの内容に1を加算するadd命令、加算結果をアド
レス1000番地に戻すmov命令、の3つの命令を選定す
る。上記データレジスタは、D0が割り当てられているも
のとする。
【0036】さらに、コード生成部5は、オプションの
オーバーフロー補償を指示されていないので、3つの個
別命令を3回のループ処理によって、次の命令1〜命令
3を生成する(ステップ24〜28)。 命令1 : 100000番地 MOVB @1000, D0 命令2 : 100004番地 ADD #1, D0 命令3 : 100006番地 MOVB D0, @1000 同様に、中間命令2(b = b + a )からコード生成部5は
次の命令4〜6を生成する。
【0037】 命令4 : 100009番地 MOVBU @1001, D1 命令5 : 10000c番地 ADD D0, D1 命令6 : 10000d番地 MOVB D1, @1001 中間命令3(c = c + b )からコード生成部5は次の命令
7〜9を生成する。 命令7 : 100010番地 MOV @1002, D0 命令8 : 100013番地 ADD D1, D0 命令9 : 100014番地 MOV D0, @1002 中間命令4(d = d + c )からコード生成部5は次の命令
10〜12を生成する。
【0038】 命令10: 100017番地 MOVU @1004, D1 命令11: 10001b番地 ADD D0, D1 命令12: 10001c番地 MOV D1, @1004 上記命令1〜12は、オブジェクトコードを便宜上ニモ
ニック(アセンブリ言語)で表現したものであり、メモ
リ8に格納される際は二進数で表される。上記の数値は
すべて16進数である。また、命令1から命令12はメ
モリ8上の100000番地から10001e番地までの31バイト
に割り付けられているとする。オーバーフローを補償す
るための命令は生成されない。
【0039】この後、メモリ8に格納されたこのオブジ
ェクトコードは、マイクロコンピュータ7により次のよ
うに実行される。 (命令1) バス制御回路11によりメモリ8の001000
番地から変数aの8ビットの値を読み出して24ビット
に符号拡張し、レジスタ13の中のD0レジスタに格納す
る。 (命令2) 演算器14によりレジスタ13の中のD0レ
ジスタの内容に1を加算して、結果を再びレジスタ13
の中のD0レジスタに格納する。加算は24ビット全てで
行う。 (命令3) バス制御回路11によりレジスタ13の中
のD0レジスタの内容の下位8ビットをメモリ8の001000
番地に書き込む。 (命令4) バス制御回路11によりメモリ8の001001
番地から変数bの8ビットの値を読み出して24ビット
にゼロ拡張し、レジスタ13の中のD1レジスタに格納す
る。 (命令5) 演算器14によりレジスタ13の中のD0レ
ジスタの内容にD1レジスタの内容を加算して、結果を再
びレジスタ13の中のD1レジスタに格納する。加算前の
D0レジスタには、命令2により更新された変数aの値が
保持されている。加算は24ビット全てで行う。 (命令6) バス制御回路11によりレジスタ13の中
のD1レジスタの内容の下位8ビットをメモリ8の001001
番地に書き込む。 (命令7) バス制御回路11によりメモリ8の001002
番地から変数cの16ビットの値を読み出して24ビッ
トに符号拡張し、レジスタ13の中のD0レジスタに格納
する。 (命令8) 演算器14によりレジスタ13の中のD1レ
ジスタの内容にD0レジスタの内容を加算して、結果を再
びレジスタ13の中のD0レジスタに格納する。加算前の
D1レジスタには、命令5により更新された変数bの値が
保持されている。加算は24ビット全てで行う。 (命令9) バス制御回路11によりレジスタ13の中
のD0レジスタの内容の下位16ビットをメモリ8の0010
02番地に書き込む。 (命令10) バス制御回路11によりメモリ8の0010
04番地から変数dの16ビットの値を読み出して24ビ
ットにゼロ拡張し、レジスタ13の中のD1レジスタに格
納する。 (命令11) 演算器14によりレジスタ13の中のD0
レジスタの内容にD1レジスタの内容を加算して、結果を
再びレジスタ13の中のD1レジスタに格納する。加算前
のD0レジスタには、命令8により更新された変数cの値
が保持されている。加算は24ビット全てで行う。 (命令12) バス制御回路11によりレジスタ13の
中のD1レジスタの内容の下位16ビットをメモリ8の00
1004番地に書き込む。 このようにしてC言語プログラムがコンパイラ2で翻訳
され、生成されたオブジェクトコードがハードウェア4
で実行される。この場合、オーバーフローを補償する命
令が生成されないため、それらによるコードサイズの増
加および実行速度の低下がない。 (2)利用者がオーバーフロー補償を行うことをコンパ
イラにオプション指定する場合 上記(1)の場合とほぼ同じであるが、コード生成部5
の動作で異なる点は、図3のステップ30において、オ
ーバーフロー補償がある点である。以下、異なる点のみ
説明する。ステップ30は、個別命令生成時に図2のス
テップ27において、演算命令の生成である場合のみオ
ーバーフロー補償されるので、(1)における演算命令
生成後の処理が異なることになる。すなわち、異なる点
は、(1)における次の命令生成後の処理である。
【0040】命令2 : ADD #1, D0 命令5 : ADD D0, D1 命令8 : ADD D1, D0 命令11: ADD D0, D1 これらの命令生成後の処理を以下、説明して行く。
【0041】(命令2のオーバーフロー補償)命令2の
生成(ステップ26)後、コード生成部5は、演算命令
であり(図2のステップ27)、オーバーフロー補償す
べきオプション指定がされている(図3のステップ3
0)ので、シンボルテーブルを参照する。この時点では
図4に示したシンボルテーブルには、変数aのレジスタ
欄にD0レジスタが割り当てられていることが登録されて
いる。その結果、演算対象であるレジスタD0は、符号付
きの文字型変数である変数aであることがわかる(ステ
ップ31)。したがって、コード生成部5は、命令2の
演算対象である変数aが文字型で(ステップ32)、符
号付きの変数であるので(ステップ33)、D0レジスタ
の8ビットデータを24ビットに符号拡張する最小語長
の命令2’を生成する(ステップ34)。
【0042】命令2’: EXTXB D0 (命令5のオーバーフロー補償)命令5の生成(ステッ
プ26)後、コード生成部5は、演算命令であり(図2
のステップ27)、オーバーフロー補償すべきオプショ
ン指定がされている(図3のステップ30)ので、シン
ボルテーブルを参照する。この時点では図4に示したシ
ンボルテーブルには、変数bのレジスタ欄にD1レジスタ
が割り当てられていることが登録されている。その結
果、演算対象であるレジスタD1は、符号なしの文字型変
数である変数bであることがわかる(ステップ31)。
したがって、コード生成部5は、命令5の演算対象であ
る変数bが文字型で(ステップ32)、符号なしの変数
であるので(ステップ33)、D1レジスタの8ビットデ
ータを24ビットにゼロ拡張する最小語長の命令5’を
生成する(ステップ35)。
【0043】命令5’: EXTXBU D1 (命令8のオーバーフロー補償)命令8の生成(ステッ
プ26)後、コード生成部5は、演算命令であり(図2
のステップ27)、オーバーフロー補償すべきオプショ
ン指定がされている(図3のステップ30)ので、シン
ボルテーブルを参照する。この時点では図4に示したシ
ンボルテーブルには、変数cのレジスタ欄にD0レジスタ
が割り当てられていることが登録されている。その結
果、演算対象であるレジスタD0は、符号付きの整数型変
数である変数cであることがわかる(ステップ31)。
したがって、コード生成部5は、命令8の演算対象であ
る変数cが整数型で(ステップ32)、符号付きの変数
であるので(ステップ36)、D0レジスタの16ビット
データを24ビットに符号拡張する最小語長の命令8’
を生成する(ステップ37)。
【0044】命令8’: EXTX D0 (命令11のオーバーフロー補償)命令11の生成(ス
テップ26)後、コード生成部5は、演算命令であり
(図2のステップ27)、オーバーフロー補償すべきオ
プション指定がされている(図3のステップ30)の
で、シンボルテーブルを参照する。この時点では図4に
示したシンボルテーブルには、変数dのレジスタ欄にD1
レジスタが割り当てられていることが登録されている。
その結果、演算対象であるレジスタD1は、符号なしの整
数型変数である変数dであることがわかる(ステップ3
1)。したがって、コード生成部5は、命令11の演算
対象である変数dが整数型で(ステップ32)、符号な
しの変数であるので(ステップ36)、D1レジスタの1
6ビットデータを24ビットに符号拡張する最小語長の
命令11’を生成する(ステップ38)。
【0045】命令11’: EXTXU D1 以上のようにして、結局コード生成部5は次のようなオ
ブジェクトコードを生成する。 命令1 : 100000番地 MOVB @1000, D0 命令2 : 100004番地 ADD #1, D0 命令2’ : 100006番地 EXTXB D0 命令3 : 100007番地 MOVB D0, @1000 命令4 : 10000a番地 MOVBU @1001, D1 命令5 : 10000d番地 ADD D0, D1 命令5’ : 10000e番地 EXTXBU D1 命令6 : 10000f番地 MOVB D1, @1001 命令7 : 100012番地 MOV @1002, D0 命令8 : 100015番地 ADD D1, D0 命令8’ : 100016番地 EXTX D0 命令9 : 100017番地 MOV D0, @1002 命令10 : 10001a番地 MOVU @1004, D1 命令11 : 10001e番地 ADD D0, D1 命令11’: 10001f番地 EXTXU D1 命令12 : 100020番地 MOV D1, @1004 命令1から命令12はメモリ8上の100000番地から1000
22番地までの35バイトに割り付けられているものとす
る。命令2’、命令5’、命令8’、命令11’が、そ
れぞれ符号付き文字型データ変数a、符号なし文字型デ
ータ変数b、符号付き整数型データ変数c、符号なし整数
型データ変数dの補正命令で、それぞれ命令2、命令
5、命令8、命令11の加算命令で発生する可能性のあ
るオーバーフローを補償するためのものである。
【0046】この後、メモリ8に格納されたこのオブジ
ェクトコードは、マイクロコンピュータ7の次のように
実行される。(1)の場合とほぼ同じなので異なる命令
についてのみ説明する。 (命令2’) 第一拡張器15によりレジスタ13の中
のD0レジスタの内容の下位8ビットを符号拡張して、結
果を再びレジスタ13の中のD0レジスタに格納する。 (命令5’) 第一拡張器15によりレジスタ13の中
のD1レジスタの内容の下位8ビットをゼロ拡張して、結
果を再びレジスタ13の中のD1レジスタに格納する。 (命令8’) 第二拡張器16によりレジスタ13の中
のD0レジスタの内容の下位16ビットを符号拡張して、
結果を再びレジスタ13の中のD0レジスタに格納する。 (命令11’) 第二拡張器16によりレジスタ13の
中のD1レジスタの内容の下位16ビットをゼロ拡張し
て、結果を再びレジスタ13の中のD1レジスタに格納す
る。
【0047】上記の命令2’、5’、8’、11’によ
りオーバーフローを生じ得る命令2、5、8、11に対
してオーバーフロー補正がそれぞれ行われる。このよう
にしてC言語プログラムがコンパイラ2で翻訳され、生
成されたオブジェクトコードがハードウェア4で実行さ
れる。この場合、整数型データ変数に対してもオーバー
フローを補償する命令8’や命令11’が生成される
が、文字型データ変数のオーバーフローを補償する命令
2’や命令5’も含めて、それぞれ語長が1バイトの命
令で構成されるため、コードサイズの増加および実行速
度の低下は小さい。以上のように本実施例によれば、利
用者がデータ変数のオーバーフローが発生し得ないプロ
グラムをコンパイルする場合、またはデータ変数毎にそ
の値域を把握してオーバーフローを回避している場合に
は、利用者がオーバーフロー補償を行わないことをコン
パイラ2にオプション指定することにより、そのデータ
変数の型にかかわらずオブジェクトコードのコードサイ
ズが増加せず、またその実行速度も低下しないようにす
ることができる。
【0048】さらに本実施例によれば、レジスタ13の
ビット幅(24ビット)が整数型のビット幅(16ビッ
ト)を超え、利用者がデータ変数のオーバーフローを回
避できないかもしくはオーバーフローを意識しない場
合、即ち利用者がオーバーフロー補償を行うことをコン
パイラ2にオプション指定する場合でも、コードサイズ
の増加および実行速度の低下の度合いは従来に比べて小
さくなる。
【0049】なお本実施例は、第一拡張器15および第
二拡張器16を演算器14とは独立に設けているが、第
一拡張器15および第二拡張器16の機能を演算器14
に含めてもよい。また本実施例は、マイクロコンピュー
タ7のアドレスバス9、レジスタ13、演算器14、第
一拡張器15および第二拡張器16の出力のビット幅を
24ビットとし、コンパイラ2のコード生成部5で扱う
ポインタ変数のビット幅を24ビットとしているが、こ
れらを必要とするアドレス空間の広さに対応して17ビ
ットから31ビットの任意のビット幅にしてもよい。対
応は次のようになる。
【0050】 必要なアドレス空間 ビット幅 128キロバイト 17ビット 256キロバイト 18ビット 512キロバイト 19ビット 1メガバイト 20ビット 2メガバイト 21ビット 4メガバイト 22ビット 8メガバイト 23ビット 16メガバイト 24ビット(本実施例) 32メガバイト 25ビット 64メガバイト 26ビット 128メガバイト 27ビット 256メガバイト 28ビット 512メガバイト 29ビット 1ギガバイト 30ビット 2ギガバイト 31ビット このようにすることにより、アドレスのビット幅を超す
過分なハードウェアがなくなり、応用に応じてコストお
よび消費電力の最適化を図ることができる。
【0051】また本実施例は、マイクロコンピュータ7
のアドレスバス9、レジスタ13、演算器14、第一拡
張器15および第二拡張器16の出力のビット幅とコン
パイラ2のコード生成部5で扱うポインタ変数のビット
幅とを24ビットとし、コンパイラ2のコード生成部5
で主として扱う整数型データ変数のビット幅を16ビッ
トとしているが、これらのビット幅を限定するものでは
ない。後者をプログラムが主として扱う型のデータのビ
ット幅(Mとする)と等しくし、前者をMより大きい値
(Nとする)とすることにより、情報処理装置は、主と
して扱う型のデータのビット幅で表現できる2のM乗バ
イトの空間を越える2のN乗バイトのアドレス空間を扱
うことができる。
【0052】また本実施例は、C言語プログラムを実行
するものであるが、言語を限定するものではない。コン
パイラ2をプログラムの記述言語に対応させることによ
り、情報処理装置はいかなる言語のプログラムでも実行
できる。
【0053】
【発明の効果】以上説明してきたたように本発明のプロ
グラム変換装置によれば、データ変数のオーバーフロー
が発生し得ないプログラムを実行する場合、またはプロ
グラマがデータ変数毎にその値域を把握してオーバーフ
ローを回避する場合には、コンパイラは、そのデータ変
数の型にかかわらず機械語プログラムのコードサイズが
増加せず、またプログラムの実行速度も低下しないプロ
グラムを生成することができるという効果がある。
【0054】また本発明のプロセッサによれば、プログ
ラマがデータ変数のオーバーフローを回避できないかも
しくはオーバーフローを意識しない場合でも、実行速度
の低下を小さくすることができるという効果がある。
【図面の簡単な説明】
【図1】本発明の実施例におけるプログラム変換装置お
よびプロセッサの構成を示すブロック図である。
【図2】同実施例におけるコード生成部の処理フローを
示す図である。
【図3】同実施例におけるコード生成部のオプションに
関する処理フローを示す図である。
【図4】同実施例におけるコード生成部により作成され
たシンボルテーブルを示す図である。
【符号の説明】
1 記憶装置 2 コンパイラ 4 ハードウェア 5 コード生成部 6 オプション指示部 7 マイクロコンピュータ 8 メモリ 9 アドレスバス 10 データバス 11 バス制御回路 12 命令実行回路 13 レジスタ 14 演算器 15 第一拡張器 16 第二拡張器
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 昭60−134937(JP,A) 国際公開92/15943(WO,A) (58)調査した分野(Int.Cl.6,DB名) G06F 9/45 G06F 9/305

Claims (7)

    (57)【特許請求の範囲】
  1. 【請求項1】 データのビット長Mよりも大きいビット
    長Nをもつアドレスを扱うプロセッサを対象とし、高級
    言語プログラムに基づいて機械語命令を生成するプログ
    ラム変換装置であって、利用者により指定された指示であって、 演算命令に関す
    るオーバーフロー補償をするかしないかを示す指示を保
    持するオプション指示手段と、 オペランドで指定されるデータ変数の有効ビット長がレ
    ジスタのビット長Nよりも小さく、かつ、その有効ビッ
    ト長を越えてオーバーフローを生じ得る演算を内容とす
    る機械語命令を生成する際に、オプション保持手段が補
    償すべき指示を保持している場合には、当該機械語命令
    の演算対象となるデータ変数の型を判別し、その判別結
    果に応じてオーバーフローを補償する補正命令を生成す
    る生成手段とを備えたことを特徴とするプログラム変換
    装置。
  2. 【請求項2】 前記生成手段は、 オプション保持手段が補償すべき指示を保持している場
    合に、生成の対象となる全機械語命令のうちオーバーフ
    ローを生じ得る演算命令を判別する命令判別手段と、 命令判別手段により判別された命令におけるデータ変数
    について、その有効なビット長及び符号ビットの有無を
    判別する変数判別手段と、 符号ビットがある場合に、当該データ変数を格納するレ
    ジスタに対して判別された有効なビット長よりも上位の
    全ビットに符号ビットと同じ論理値を埋める符号拡張処
    理を内容とする補正命令を生成する符号拡張命令生成手
    段と、 符号ビットがない場合に、当該データ変数を格納するレ
    ジスタに対して判別された有効なビット長よりも上位の
    全ビットに論理値0を埋めるゼロ拡張処理を内容とする
    補正命令を生成するゼロ拡張命令生成手段とからなるこ
    とを特徴とする請求項1記載のプログラム変換装置。
  3. 【請求項3】 前記Mは32、Nは33以上63以下の
    整数であることを特徴とする請求項1又は2記載のプロ
    グラム変換装置。
  4. 【請求項4】 前記Mは16、Nは17以上31以下の
    整数であることを特徴とする請求項1又は2記載のプロ
    グラム変換装置。
  5. 【請求項5】 前記Mは16、Nは24であり、 前記変数判別手段は、データ変数の有効なビット長が1
    6又は8の何れであるかを判別することを特徴とする請
    求項2記載のプログラム変換装置。
  6. 【請求項6】 請求項1ないし5記載のいずれかのプロ
    グラム変換装置により生成されたプログラムを実行する
    プロセッサであって、 ビット長Nの複数のレジスタからなるレジスタ群と、 前記補正命令に従って、レジスタ内のデータの有効ビッ
    ト長をレジスタのビット長Nに拡張する補正手段とを備
    えたことを特徴とするプロセッサ。
  7. 【請求項7】 前記補正手段は、 符号拡張を内容とする補正命令に従って、当該データ変
    数を格納するレジスタに対して判別された有効なビット
    長よりも上位の全ビットに符号ビットと同じ論理値を埋
    める第1の拡張器と、 ゼロ拡張を内容とする補正命令に従って、当該データ変
    数を格納するレジスタに対して判別された有効なビット
    長よりも上位の全ビットに論理値0を埋める第2の拡張
    器とからなることを特徴とする請求項6記載のプロセッ
    サ。
JP5126213A 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ Expired - Lifetime JP2847688B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP5126213A JP2847688B2 (ja) 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ
US08/249,460 US5694605A (en) 1993-05-27 1994-05-26 Program translator with selective data value amendment and processor with data extension instructions
EP94303846A EP0626640B1 (en) 1993-05-27 1994-05-27 Program translator with selective data value amendment and processor with data extension instructions
DE69428151T DE69428151T2 (de) 1993-05-27 1994-05-27 Programmübersetzer mit selektiver Datenwertverbesserung und Prozessor mit Befehlen zur Datenverlängerung

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5126213A JP2847688B2 (ja) 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ

Publications (2)

Publication Number Publication Date
JPH06337792A JPH06337792A (ja) 1994-12-06
JP2847688B2 true JP2847688B2 (ja) 1999-01-20

Family

ID=14929535

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5126213A Expired - Lifetime JP2847688B2 (ja) 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ

Country Status (4)

Country Link
US (1) US5694605A (ja)
EP (1) EP0626640B1 (ja)
JP (1) JP2847688B2 (ja)
DE (1) DE69428151T2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0997178A (ja) * 1995-09-29 1997-04-08 Matsushita Electric Ind Co Ltd 飽和演算処理装置および方法
US5915116A (en) * 1997-03-07 1999-06-22 Fmr Corp. Time value manipulation
TW541496B (en) * 1997-04-03 2003-07-11 Seiko Epson Corp Micro-computer and electronic machine
GB2355085A (en) * 1999-10-05 2001-04-11 Sharp Kk Translating a source operation to a target operation
US6363523B1 (en) * 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
US6934709B2 (en) * 2001-03-26 2005-08-23 Matrixone, Inc. Interface definition language compiler
JP3763516B2 (ja) 2001-03-30 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法
CN110443034B (zh) * 2019-08-05 2021-09-14 中国工商银行股份有限公司 风险程序文件的识别方法、装置、计算设备以及介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS54117646A (en) * 1978-03-06 1979-09-12 Toshiba Corp Computer
JPS60134937A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd アドレス拡張装置
US4879676A (en) * 1988-02-29 1989-11-07 Mips Computer Systems, Inc. Method and apparatus for precise floating point exceptions
JPH0769833B2 (ja) 1991-02-27 1995-07-31 ディジタル イクイップメント コーポレイション 多言語最適化コンパイラ内のシンボル テーブル構成用インタフェイス
US5257216A (en) * 1992-06-10 1993-10-26 Intel Corporation Floating point safe instruction recognition apparatus
US5440702A (en) * 1992-10-16 1995-08-08 Delco Electronics Corporation Data processing system with condition code architecture for executing single instruction range checking and limiting operations

Also Published As

Publication number Publication date
JPH06337792A (ja) 1994-12-06
DE69428151T2 (de) 2002-03-28
EP0626640A1 (en) 1994-11-30
DE69428151D1 (de) 2001-10-11
US5694605A (en) 1997-12-02
EP0626640B1 (en) 2001-09-05

Similar Documents

Publication Publication Date Title
USRE41959E1 (en) Variable address length compiler and processor improved in address management
US5077657A (en) Emulator Assist unit which forms addresses of user instruction operands in response to emulator assist unit commands from host processor
US5781758A (en) Software emulation system with reduced memory requirements
JP2832899B2 (ja) データ処理装置およびデータ処理方法
US5249280A (en) Microcomputer having a memory bank switching apparatus for accessing a selected memory bank in an external memory
JP5299979B2 (ja) Riscプロセッサ及びレジスタのフラグビットの処理方法
JPH11175349A (ja) データ列生成方法及び装置、変換方法、及びコンピュータ
JP2002366348A (ja) 多重命令セットによるデータ処理
JP3606561B2 (ja) 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造
JP2847688B2 (ja) プログラム変換装置およびプロセッサ
JPH1049369A (ja) データ処理装置
JP4088418B2 (ja) ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令
US5077659A (en) Data processor employing the same microprograms for data having different bit lengths
US5991870A (en) Processor for executing an instructions stream where instruction have both a compressed and an uncompressed register field
JPH034936B2 (ja)
EP0180077B1 (en) A data processing machine for compiling computer programs
EP0265972A2 (en) Control of the program counter used in a pipelined computer
JP2875711B2 (ja) プログラム変換装置およびプロセッサ
JP2832900B2 (ja) データ処理装置およびデータ処理方法
JP3517579B2 (ja) マイクロプロセッサ
Von Eicken Software support for Motorola 68000 microprocessor at CERN: M68MIL cross macro assembler
JPS61182137A (ja) タグ付デ−タ処理装置
JPH02306339A (ja) ビット・アドレシング方式
Woods Inside the Computer
Wakker ACE Consulting bv Version 1.2, March 2000

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071106

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20081106

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20091106

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20091106

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20101106

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20111106

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20121106

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20121106

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20131106

Year of fee payment: 15

EXPY Cancellation because of completion of term