JPH06337792A - プログラム変換装置およびプロセッサ - Google Patents
プログラム変換装置およびプロセッサInfo
- Publication number
- JPH06337792A JPH06337792A JP5126213A JP12621393A JPH06337792A JP H06337792 A JPH06337792 A JP H06337792A JP 5126213 A JP5126213 A JP 5126213A JP 12621393 A JP12621393 A JP 12621393A JP H06337792 A JPH06337792 A JP H06337792A
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target 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)
Abstract
語プログラムのコードサイズが増加せず、またプログラ
ムの実行速度も低下しないプログラム変換装置およびプ
ロセッサを提供することを目的とする。 【構成】 オプション指示部6は、その保持内容に応じ
て、機械語命令生成の際に、演算命令に対するオーバー
フロー補償のための補正命令を生成するかしないかをコ
ード生成部5に指示する。その指示に応じて、コード生
成部5は、オペランドで指定されるデータ変数の有効ビ
ット長がレジスタのビット長Nよりも小さく、かつ、レ
ジスタ内でデータの有効ビット長を越えてオーバーフロ
ーを生じ得る演算を内容とする機械語命令を生成する際
に、当該機械語命令の演算対象となるデータ変数の型を
判別し、オーバーフローを補償する補正命令を生成す
る。
Description
械語プログラムに変換するプログラム変換装置、及び、
その機械語プログラムを実行するプロセッサに関する。
コンピュータ等の情報処理装置が普及し、あらゆる分野
で用いられている。従来のプロセッサは、命令の種類が
豊富なことを特徴とするCISCプロセッサ(Complex Inst
ruction Set Computer)と、命令の種類を限定して高速
さを特徴とするRISCプロセッサ(Reduced Instruction
Set Computer)とに大別できる。例えば、TRONやMC6804
0などは前者であり、SPARCやMIPSなどは後者である。こ
れらのプロセッサについては、32ビット幅の複数のレ
ジスタと32ビット幅の演算器を持つプロセッサが現在
主流である。
ロセッサが持つ全てのレジスタに対する全ての演算命令
で3種類のデータ幅(8ビット、16ビットおよび32
ビット)の取り扱いができるようになっている。これに
対応して、CISCプロセッサの機械語プログラムを生成す
るコンパイラ(以下、CISC用コンパイラ)は、データ幅
に合わせて種々の命令(コード)を生成する。例えば、
8ビット幅の文字型のデータ変数や、16ビット幅の短
整数型のデータ変数を32ビット幅のレジスタに格納す
る命令を生成する場合、それぞれのデータ変数を32ビ
ットレジスタの下位8ビット、下位16ビットに格納し
てそれぞれ上位24ビット、上位16ビットを更新しな
いような命令(コード)を生成する。
って生成された機械語プログラムを実行するが、CISCプ
ロセッサが持つ全てのレジスタに対する全ての演算命令
で3種類のデータ幅(8ビット、16ビットおよび32
ビット)が指定されるようになっているため、命令の数
が極めて多くなる。その結果として、それらの命令を解
読して実行するためのハードウェアが大きく、かつ、複
雑になるという短所を有している。この短所は、従来の
プロセッサにおける命令数を減らしたRISCプロセッサに
よって解決されている。
定され、32ビット幅のレジスタの下位8ビットあるい
は下位16ビットのみを更新するような命令は持たな
い。このため、RISC用コンパイラは、レジスタに8ビッ
ト幅の文字型のデータ変数や16ビット幅の短整数型の
データ変数を格納する命令を生成する場合でも、レジス
タの32ビット全てを更新するような命令(コード)を
生成する。
8ビット幅の文字型のデータ変数や16ビット幅の短整
数型のデータ変数を格納したレジスタを更新する命令の
後に、そのレジスタのそれぞれ上位24ビットおよび上
位16ビットを補正して、8ビット幅の文字型のデータ
変数や16ビット幅の短整数型のデータ変数で表現でき
る範囲内に値を修正する命令を生成する必要が生じる。
能性のあるオーバーフローを補償するためである。即
ち、符号付き文字型データ変数は、-128から+127まで、
符号なし文字型データ変数は、0から+255まで、符号付
き短整数型データ変数は、-32768から+32767まで、符号
なし短整数型データ変数は、0から+65535まで、がそれ
ぞれの型のデータ変数が表現できる範囲である(数値は
すべて十進数)。ところが、32ビット幅のレジスタの
中ではこれらのデータ変数が格納されて演算されると上
記の範囲を超えることがある。例えば、+127の値が格納
された符号付き文字型データ変数に割り当てられたレジ
スタに2を加える演算を行うとレジスタの値は+129にな
り、このレジスタは符号付き文字型データ変数として正
しい値を保持しなくなる。
るためにレジスタの内容が演算によって更新されるたび
に、符号付き文字型データ変数では、24ビット左シフ
ト命令と24ビット算術右シフト命令を、符号なし文字
型データ変数では、24ビット左シフト命令と24ビッ
ト論理右シフト命令を、符号付き短整数型データ変数で
は、16ビット左シフト命令と16ビット算術右シフト
命令を、符号なし短整数型データ変数では、16ビット
左シフト命令と16ビット論理右シフト命令を、それぞ
れ補正用命令として無条件に挿入したコードを生成す
る。ここで左シフトは最上位ビット方向のシフトを、算
術右シフトは最上位ビット入力を最上位ビットのコピー
とする最下位ビット方向のシフトを、論理右シフトは最
上位ビット入力をゼロとする最下位ビット方向のシフト
を表す。上記の例では、+129(二進数で100000001)の
値が格納されたレジスタは24ビット左シフトされる過
程で上位の1がこぼれ、24ビット算術右シフトによっ
て値が1となる。
従来技術によれば、文字型データ変数または短整数型デ
ータ変数を使用するプログラムは、RISCコンパイラによ
ってコンパイルされた結果、上記補正命令が頻出するこ
とになるので機械語プログラムのコードサイズが増加
し、かつ、RISCプロセッサにおけるプログラムの処理時
間が長くなるという問題点を有している。
ログラムを実行する場合、または、プログラマがデータ
変数毎にその値域を把握してオーバーフローを回避する
場合には、上記の補正命令による効果は皆無であるとい
う問題点がある。さらに、レジスタのビット幅が整数型
変数のビット幅を超えるシステムでは、文字型データ変
数や短整数型データ変数だけではなく整数型データ変数
でも同一の問題点を招き、通常整数型が最も頻繁に用い
られるためコードサイズの増加および実行速度の低下の
度合いはともに著しくなるという問題点を有している。
いかもしくはオーバーフローを意識しない場合は、上述
の補正命令は効果を発揮する。しかし、補正が左シフト
命令と算術または論理右シフト命令とによって構成され
るため、特にレジスタのビット幅が整数型データ変数の
ビット幅を超えるシステムではコードサイズの増加とプ
ログラムの実行速度の低下に及ぼす影響が大きいという
問題点を有している。
のオーバーフローが発生し得ないプログラムを実行する
場合、またはプログラマがデータ変数毎にその値域を把
握してオーバーフローを回避する場合には、そのデータ
変数の型にかかわらず機械語プログラムのコードサイズ
が増加させないプログラム変換装置、及び、生成された
プログラムの実行速度の低下させないプロセッサを提供
することを目的とする。
め本発明のプログラム変換装置は、データのビット長M
よりも大きいビット長Nをもつアドレスを扱うプロセッ
サを対象とし、高級言語プログラムに基づいて機械語命
令を生成するプログラム変換装置であって、演算命令に
関するオーバーフロー補償をするかしないかを示す指示
を保持するオプション指示手段と、オペランドで指定さ
れるデータ変数の有効ビット長がレジスタのビット長N
よりも小さく、かつ、その有効ビット長を越えてオーバ
ーフローを生じ得る演算を内容とする機械語命令を生成
する際に、オプション保持手段が補償すべき指示を保持
している場合には、当該機械語命令の演算対象となるデ
ータ変数の型を判別し、その判別結果に応じてオーバー
フローを補償する補正命令を生成する生成手段とを備え
ている。
償すべき指示を保持している場合に、生成の対象となる
全機械語命令のうちオーバーフローを生じうる演算命令
を判別する命令判別手段と、命令判別手段により判別さ
れた命令における変数について、その有効なビット長及
び符号ビットの有無を判別する変数判別手段と、符号ビ
ットがある場合には、当該変数を格納するレジスタに対
して判別された有効なビット長よりも上位の全ビットに
符号ビットと同じ論理値を埋める符号拡張処理を内容と
する補正命令を生成する符号拡張命令生成手段と、符号
ビットがない場合には、当該変数を格納するレジスタに
対して判別された有効なビット長よりも上位の全ビット
に論理値0を埋めるゼロ拡張処理を内容とする補正命令
を生成するゼロ拡張命令生成手段とからなっていてもよ
い。
数であってもよい。前記Mは16、Nは17以上31以
下の整数であってもよい。前記Mは16、Nは24であ
り、前記変数判別手段は、変数の有効なビット長が16
又は8の何れであるかを判別するようになっていてもよ
い。また、本発明のプロセッサは、上記のプログラム変
換装置により生成されたプログラムを実行するプロセッ
サであって、ビット長Nの複数のレジスタからなるレジ
スタ群と、前記補正命令に従って、レジスタ内のデータ
の有効ビット長をレジスタのビット長Nに拡張する補正
手段とを備えている。
正命令に従って、当該データ変数を格納するレジスタに
対して判別された有効なビット長よりも上位の全ビット
に符号ビットと同じ論理値を埋める第1の拡張器と、ゼ
ロ拡張を内容とする補正命令に従って、当該データ変数
を格納するレジスタに対して判別された有効なビット長
よりも上位の全ビットに論理値0を埋める第2の拡張器
とからなっていてもよい。
は、オプション指示手段は、その保持内容に応じて、機
械語命令生成の際に、演算命令に対するオーバーフロー
補償のための補正命令を生成するかしないかを生成手段
に指示する。生成手段は、オペランドで指定されるデー
タ変数の有効ビット長がレジスタのビット長Nよりも小
さく、かつ、その有効ビット長を越えてオーバーフロー
を生じ得る演算を内容とする機械語命令を生成する際
に、オプション保持手段が補償すべき指示を保持してい
る場合には、当該機械語命令の演算対象となるデータ変
数の型を判別し、その判別結果に応じてオーバーフロー
を補償する補正命令を生成する。
段により判別されたオーバーフローを生じうる演算命令
における変数について、変数判別手段は、その有効なビ
ット長及び符号ビットの有無を判別する。この判別の結
果、符号拡張命令生成手段は、符号ビットがある場合に
は、当該変数を格納するレジスタに対して判別された有
効なビット長よりも上位の全ビットに符号ビットと同じ
論理値を埋める符号拡張処理を内容とする補正命令を生
成する。また、ゼロ拡張命令生成手段は、符号ビットが
ない場合には、当該変数を格納するレジスタに対して判
別された有効なビット長よりも上位の全ビットに論理値
0を埋めるゼロ拡張処理を内容とする補正命令を生成す
る。
手段は、前記補正命令に従ってレジスタ内のデータの有
効ビット長をレジスタのビット長Nに拡張する。第1の
拡張器は符号拡張を、第2の拡張器はゼロ拡張を行う。
換装置(コンパイラ)及びプロセッサのブロック図を示
すものである。同図において、1は記憶装置で、C言語
プログラムを格納する。2はコンパイラで、C言語プロ
グラムを機械語に翻訳する。
生成されたオブジェクトコードを実行する。コンパイラ
2は、コード生成部5と、オプション指示部6とからな
る。コード生成部5は、C言語プログラムに基づいてオ
ブジェクトコードを生成する。
バーフロー補償の有無がオプション指定され、コード生
成部5に対して、プログラムにおけるデータ変数の演算
箇所に後述する補正コードを挿入するか否かを指示す
る。またハードウェア4は、マイクロコンピュータ7
と、オブジェクトコード及びプログラムに用いられるデ
ータが格納されるメモリ8とからなり、両者は24ビッ
トのアドレスバス9と16ビットのデータバス10とで
接続される。
9とデータバス10とを制御してメモリ8に格納された
命令を逐一読み出すとともにメモリ8に対してデータを
読み書きするバス制御回路11と、バス制御回路11か
ら命令を受け取り解読および実行する命令実行回路12
とからなる。命令実行回路12は、24ビットのレジス
タ13と、レジスタ13に保持された値を用いて算術論
理演算等を行う24ビットの演算器14と、レジスタ1
3に保持された値の下位8ビットを24ビットに符号拡
張もしくはゼロ拡張する第一拡張器15と、レジスタ1
3に保持された値の下位16ビットを24ビットに符号
拡張もしくはゼロ拡張する第二拡張器16とを持つ。
を示す図である。図2においてステップ20は、記憶装
置1からC言語プログラムを取り出し、構文を文法に照
らして解析して、中間形式の言語で記述された中間命令
及び中間形式文からなる中間ファイルを生成する。ステ
ップ21は、中間ファイルからデータ変数を抽出して、
それぞれの変数に関する情報を載せた変数テーブル(シ
ンボルテーブル)を作成する。シンボルテーブルの一例
を図4に示す。同図において、シンボル欄はデータ変数
のシンボルを、変数の型欄は変数の符号の有無および整
数型であるか文字型であるかを、バイト数欄はそのデー
タ変数のバイト数を、先頭アドレス欄はメモリに割り付
けられている場合の先頭アドレスを示す。
生成が未処理の中間命令があるか否かを判定する。あれ
ばステップ23に進み、なければコード生成が終了す
る。ステップ23は、中間ファイルから次に処理すべき
順の中間命令を1つ読み出す。ステップ24は、1つの
中間命令を実現する1つ又は複数の機械語命令を選定す
る。
た機械語命令から次に処理すべき順の機械語命令を1つ
指定する。ステップ26は、指定された1つの機械語命
令(以下、個別命令と呼ぶ)の命令コードを生成する処
理(以下、個別処理と呼ぶ)である。ステップ27は、
生成された命令が演算命令であるか否か、つまり、オー
バーフローが発生する可能性がある命令か否かを判定す
る。そうであればステップ30に進み、そうでなければ
ステップ28に進む。
次に処理すべき機械語命令があるか否かを判定する。あ
ればステップ25に戻り、なければステップ22に戻
る。図3においてステップ30は、オプション指示部6
によりオーバーフロー補償をする指示があるか否かを判
定する。あればステップ31に、なければステップ28
に進む。
して、シンボルテーブルを参照して変数の型を判別す
る。ステップ32は、変数の型が文字型であるか整数型
であるかを判定し、前者であればステップ33に、後者
であればステップ36に進む。ステップ33は、文字型
変数が符号付きであるか符号なしであるかを判定し、前
者であればステップ34に、後者であればステップ35
に進む。
号拡張する。つまり、8ビットを24ビットに符号拡張
する最小語長の命令を生成する。ステップ35は、符号
なし文字型変数をゼロ拡張する。つまり、8ビットを2
4ビットにゼロ拡張する最小語長の命令を生成する。ス
テップ36は、整数型変数が符号付きであるか符号なし
であるかを判定し、前者であればステップ37に、後者
であればステップ38に進む。
号拡張する。つまり、16ビットを24ビットに符号拡
張する最小語長の命令を生成する。ステップ38は、符
号なし整数変数をゼロ拡張する。つまり、16ビットを
24ビットにゼロ拡張する最小語長の命令を生成する。
以上のように構成された本実施例のプログラム変換装置
およびプロセッサについて、以下その動作を説明する。
説明を簡潔にするために、C言語プログラムが次に示す
場合を例にあげる。
装置1から読み出され、C言語の文法に照らして構文が
解析される。コード生成部5は、解析結果から中間形式
の言語で記述された中間ファイルを生成する(図2のス
テップ20)。この中間ファイルのイメージを以下に示
す。ただし、ここでは便宜上、中間形式の記述の意味が
わかるように書き直してある。
中間ファイル中のデータ変数(宣言のないものも含め
て)を抽出し、それぞれの変数の型を調査し、必要があ
ればメモリに割り当て、図4に示したシンボルテーブル
を作成する(ステップ21)。
変数a,b,c,dが抽出される。それぞれの変数は、宣言文
に基づいて変数の型が判別され、シンボルテーブル(図
4参照)に登録されるとともにメモリ上に割り当てられ
る。ここでは、変数a,b,c,dは、それぞれメモリの1000
番地から1バイト、1001番地から1バイト、1002番地か
ら2バイト、1004番地から2バイトの領域に割り当てら
れているものとする。このシンボルテーブルの内容は、
以後変更があれば、その都度ダイナミックにその内容が
書き換えられる。既に示した図4は、この時点における
シンボルテーブルの内容である。
れぞれについて、以下のようにして対応する機械語命令
を生成する。オーバーフロー補償がある場合と、ない場
合に分けて説明する。 (1)利用者がオーバーフロー補償を行わないことをコ
ンパイラにオプション指定する場合 コード生成部5は、未処理の中間命令のうち先頭の中間
命令を1つ読み出し(ステップ23)、その中間命令を
実現する1つ又は複数の機械語命令を選定する(ステッ
プ24)。
る1つ又は複数の命令の選定を具体的に説明する。中間
命令1(a = a + 1 )は「符号付き文字型変数aが割
り当てられている1000番地から1バイトを読み出して、
その内容に1を加算して、1000番地に格納する。」
ことを内容とする。コード生成部5は、この内容を実現
するため上記〜に対応する機械語命令を選定する。
すなわち、アドレス1000番地から1バイトを読み出し
て、データレジスタに格納するmov命令、データレジ
スタの内容に1を加算するadd命令、加算結果をアド
レス1000番地に戻すmov命令、の3つの命令を選定す
る。上記データレジスタは、D0が割り当てられているも
のとする。
オーバーフロー補償を指示されていないので、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を生成する。
7〜9を生成する。 命令7 : 100010番地 MOV @1002, D0 命令8 : 100013番地 ADD D1, D0 命令9 : 100014番地 MOV D0, @1002 中間命令4(d = d + c )からコード生成部5は次の命令
10〜12を生成する。
ニック(アセンブリ言語)で表現したものであり、メモ
リ8に格納される際は二進数で表される。上記の数値は
すべて16進数である。また、命令1から命令12はメ
モリ8上の100000番地から10001e番地までの31バイト
に割り付けられているとする。オーバーフローを補償す
るための命令は生成されない。
ェクトコードは、マイクロコンピュータ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)における次の命令生成後の処理である。
生成(ステップ26)後、コード生成部5は、演算命令
であり(図2のステップ27)、オーバーフロー補償す
べきオプション指定がされている(図3のステップ3
0)ので、シンボルテーブルを参照する。この時点では
図4に示したシンボルテーブルには、変数aのレジスタ
欄にD0レジスタが割り当てられていることが登録されて
いる。その結果、演算対象であるレジスタD0は、符号付
きの文字型変数である変数aであることがわかる(ステ
ップ31)。したがって、コード生成部5は、命令2の
演算対象である変数aが文字型で(ステップ32)、符
号付きの変数であるので(ステップ33)、D0レジスタ
の8ビットデータを24ビットに符号拡張する最小語長
の命令2’を生成する(ステップ34)。
プ26)後、コード生成部5は、演算命令であり(図2
のステップ27)、オーバーフロー補償すべきオプショ
ン指定がされている(図3のステップ30)ので、シン
ボルテーブルを参照する。この時点では図4に示したシ
ンボルテーブルには、変数bのレジスタ欄にD1レジスタ
が割り当てられていることが登録されている。その結
果、演算対象であるレジスタD1は、符号なしの文字型変
数である変数bであることがわかる(ステップ31)。
したがって、コード生成部5は、命令5の演算対象であ
る変数bが文字型で(ステップ32)、符号なしの変数
であるので(ステップ33)、D1レジスタの8ビットデ
ータを24ビットにゼロ拡張する最小語長の命令5’を
生成する(ステップ35)。
プ26)後、コード生成部5は、演算命令であり(図2
のステップ27)、オーバーフロー補償すべきオプショ
ン指定がされている(図3のステップ30)ので、シン
ボルテーブルを参照する。この時点では図4に示したシ
ンボルテーブルには、変数cのレジスタ欄にD0レジスタ
が割り当てられていることが登録されている。その結
果、演算対象であるレジスタD0は、符号付きの整数型変
数である変数cであることがわかる(ステップ31)。
したがって、コード生成部5は、命令8の演算対象であ
る変数cが整数型で(ステップ32)、符号付きの変数
であるので(ステップ36)、D0レジスタの16ビット
データを24ビットに符号拡張する最小語長の命令8’
を生成する(ステップ37)。
テップ26)後、コード生成部5は、演算命令であり
(図2のステップ27)、オーバーフロー補償すべきオ
プション指定がされている(図3のステップ30)の
で、シンボルテーブルを参照する。この時点では図4に
示したシンボルテーブルには、変数dのレジスタ欄にD1
レジスタが割り当てられていることが登録されている。
その結果、演算対象であるレジスタD1は、符号なしの整
数型変数である変数dであることがわかる(ステップ3
1)。したがって、コード生成部5は、命令11の演算
対象である変数dが整数型で(ステップ32)、符号な
しの変数であるので(ステップ36)、D1レジスタの1
6ビットデータを24ビットに符号拡張する最小語長の
命令11’を生成する(ステップ38)。
ブジェクトコードを生成する。 命令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の加算命令で発生する可能性のあ
るオーバーフローを補償するためのものである。
ェクトコードは、マイクロコンピュータ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レジスタに格納す
る。
りオーバーフローを生じ得る命令2、5、8、11に対
してオーバーフロー補正がそれぞれ行われる。このよう
にしてC言語プログラムがコンパイラ2で翻訳され、生
成されたオブジェクトコードがハードウェア4で実行さ
れる。この場合、整数型データ変数に対してもオーバー
フローを補償する命令8’や命令11’が生成される
が、文字型データ変数のオーバーフローを補償する命令
2’や命令5’も含めて、それぞれ語長が1バイトの命
令で構成されるため、コードサイズの増加および実行速
度の低下は小さい。以上のように本実施例によれば、利
用者がデータ変数のオーバーフローが発生し得ないプロ
グラムをコンパイルする場合、またはデータ変数毎にそ
の値域を把握してオーバーフローを回避している場合に
は、利用者がオーバーフロー補償を行わないことをコン
パイラ2にオプション指定することにより、そのデータ
変数の型にかかわらずオブジェクトコードのコードサイ
ズが増加せず、またその実行速度も低下しないようにす
ることができる。
ビット幅(24ビット)が整数型のビット幅(16ビッ
ト)を超え、利用者がデータ変数のオーバーフローを回
避できないかもしくはオーバーフローを意識しない場
合、即ち利用者がオーバーフロー補償を行うことをコン
パイラ2にオプション指定する場合でも、コードサイズ
の増加および実行速度の低下の度合いは従来に比べて小
さくなる。
二拡張器16を演算器14とは独立に設けているが、第
一拡張器15および第二拡張器16の機能を演算器14
に含めてもよい。また本実施例は、マイクロコンピュー
タ7のアドレスバス9、レジスタ13、演算器14、第
一拡張器15および第二拡張器16の出力のビット幅を
24ビットとし、コンパイラ2のコード生成部5で扱う
ポインタ変数のビット幅を24ビットとしているが、こ
れらを必要とするアドレス空間の広さに対応して17ビ
ットから31ビットの任意のビット幅にしてもよい。対
応は次のようになる。
過分なハードウェアがなくなり、応用に応じてコストお
よび消費電力の最適化を図ることができる。
のアドレスバス9、レジスタ13、演算器14、第一拡
張器15および第二拡張器16の出力のビット幅とコン
パイラ2のコード生成部5で扱うポインタ変数のビット
幅とを24ビットとし、コンパイラ2のコード生成部5
で主として扱う整数型データ変数のビット幅を16ビッ
トとしているが、これらのビット幅を限定するものでは
ない。後者をプログラムが主として扱う型のデータのビ
ット幅(Mとする)と等しくし、前者をMより大きい値
(Nとする)とすることにより、情報処理装置は、主と
して扱う型のデータのビット幅で表現できる2のM乗バ
イトの空間を越える2のN乗バイトのアドレス空間を扱
うことができる。
するものであるが、言語を限定するものではない。コン
パイラ2をプログラムの記述言語に対応させることによ
り、情報処理装置はいかなる言語のプログラムでも実行
できる。
グラム変換装置によれば、データ変数のオーバーフロー
が発生し得ないプログラムを実行する場合、またはプロ
グラマがデータ変数毎にその値域を把握してオーバーフ
ローを回避する場合には、コンパイラは、そのデータ変
数の型にかかわらず機械語プログラムのコードサイズが
増加せず、またプログラムの実行速度も低下しないプロ
グラムを生成することができるという効果がある。
ラマがデータ変数のオーバーフローを回避できないかも
しくはオーバーフローを意識しない場合でも、実行速度
の低下を小さくすることができるという効果がある。
よびプロセッサの構成を示すブロック図である。
示す図である。
関する処理フローを示す図である。
たシンボルテーブルを示す図である。
Claims (7)
- 【請求項1】 データのビット長Mよりも大きいビット
長Nをもつアドレスを扱うプロセッサを対象とし、高級
言語プログラムに基づいて機械語命令を生成するプログ
ラム変換装置であって、 演算命令に関するオーバーフロー補償をするかしないか
を示す指示を保持するオプション指示手段と、 オペランドで指定されるデータ変数の有効ビット長がレ
ジスタのビット長Nよりも小さく、かつ、その有効ビッ
ト長を越えてオーバーフローを生じ得る演算を内容とす
る機械語命令を生成する際に、オプション保持手段が補
償すべき指示を保持している場合には、当該機械語命令
の演算対象となるデータ変数の型を判別し、その判別結
果に応じてオーバーフローを補償する補正命令を生成す
る生成手段とを備えたことを特徴とするプログラム変換
装置。 - 【請求項2】 前記生成手段は、 オプション保持手段が補償すべき指示を保持している場
合に、生成の対象となる全機械語命令のうちオーバーフ
ローを生じ得る演算命令を判別する命令判別手段と、 命令判別手段により判別された命令におけるデータ変数
について、その有効なビット長及び符号ビットの有無を
判別する変数判別手段と、 符号ビットがある場合に、当該データ変数を格納するレ
ジスタに対して判別された有効なビット長よりも上位の
全ビットに符号ビットと同じ論理値を埋める符号拡張処
理を内容とする補正命令を生成する符号拡張命令生成手
段と、 符号ビットがない場合に、当該データ変数を格納するレ
ジスタに対して判別された有効なビット長よりも上位の
全ビットに論理値0を埋めるゼロ拡張処理を内容とする
補正命令を生成するゼロ拡張命令生成手段とからなるこ
とを特徴とする請求項1記載のプログラム変換装置。 - 【請求項3】 前記Mは32、Nは33以上63以下の
整数であることを特徴とする請求項1又は2記載のプロ
グラム変換装置。 - 【請求項4】 前記Mは16、Nは17以上31以下の
整数であることを特徴とする請求項1又は2記載のプロ
グラム変換装置。 - 【請求項5】 前記Mは16、Nは24であり、 前記変数判別手段は、データ変数の有効なビット長が1
6又は8の何れであるかを判別することを特徴とする請
求項2記載のプログラム変換装置。 - 【請求項6】 請求項1ないし5記載のいずれかのプロ
グラム変換装置により生成されたプログラムを実行する
プロセッサであって、 ビット長Nの複数のレジスタからなるレジスタ群と、 前記補正命令に従って、レジスタ内のデータの有効ビッ
ト長をレジスタのビット長Nに拡張する補正手段とを備
えたことを特徴とするプロセッサ。 - 【請求項7】 前記補正手段は、 符号拡張を内容とする補正命令に従って、当該データ変
数を格納するレジスタに対して判別された有効なビット
長よりも上位の全ビットに符号ビットと同じ論理値を埋
める第1の拡張器と、 ゼロ拡張を内容とする補正命令に従って、当該データ変
数を格納するレジスタに対して判別された有効なビット
長よりも上位の全ビットに論理値0を埋める第2の拡張
器とからなることを特徴とする請求項6記載のプロセッ
サ。
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 true JPH06337792A (ja) | 1994-12-06 |
JP2847688B2 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) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR970016944A (ko) * | 1995-09-29 | 1997-04-28 | 모리시다 요이치 | 포화연산을 적절하게 행하는 프로세서 및 그 제어방법 |
WO1998044410A1 (fr) * | 1997-04-03 | 1998-10-08 | Seiko Epson Corporation | Micro-ordinateur et equipement electronique |
JP2003515203A (ja) * | 1999-11-12 | 2003-04-22 | サン・マイクロシステムズ・インコーポレイテッド | Nベースタイプの演算式の最適化 |
US7278138B2 (en) | 2001-03-30 | 2007-10-02 | International Business Machines Corporation | Computer program conversion and compilation |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5915116A (en) * | 1997-03-07 | 1999-06-22 | Fmr Corp. | Time value manipulation |
GB2355085A (en) * | 1999-10-05 | 2001-04-11 | Sharp Kk | Translating a source operation to a target operation |
US6934709B2 (en) * | 2001-03-26 | 2005-08-23 | Matrixone, Inc. | Interface definition language compiler |
CN110443034B (zh) * | 2019-08-05 | 2021-09-14 | 中国工商银行股份有限公司 | 风险程序文件的识别方法、装置、计算设备以及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60134937A (ja) * | 1983-12-23 | 1985-07-18 | Hitachi Ltd | アドレス拡張装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS54117646A (en) * | 1978-03-06 | 1979-09-12 | Toshiba Corp | Computer |
US4879676A (en) * | 1988-02-29 | 1989-11-07 | Mips Computer Systems, Inc. | Method and apparatus for precise floating point exceptions |
KR950006609B1 (ko) | 1991-02-27 | 1995-06-19 | 디지탈 이큅먼트 코오포레이숀 | 다중 패스코드 발생에 있어서 템플리트를 이용한 다중 언어 최적화 컴파일러 |
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 |
-
1993
- 1993-05-27 JP JP5126213A patent/JP2847688B2/ja not_active Expired - Lifetime
-
1994
- 1994-05-26 US US08/249,460 patent/US5694605A/en not_active Expired - Lifetime
- 1994-05-27 EP EP94303846A patent/EP0626640B1/en not_active Expired - Lifetime
- 1994-05-27 DE DE69428151T patent/DE69428151T2/de not_active Expired - Lifetime
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60134937A (ja) * | 1983-12-23 | 1985-07-18 | Hitachi Ltd | アドレス拡張装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR970016944A (ko) * | 1995-09-29 | 1997-04-28 | 모리시다 요이치 | 포화연산을 적절하게 행하는 프로세서 및 그 제어방법 |
WO1998044410A1 (fr) * | 1997-04-03 | 1998-10-08 | Seiko Epson Corporation | Micro-ordinateur et equipement electronique |
JP2003515203A (ja) * | 1999-11-12 | 2003-04-22 | サン・マイクロシステムズ・インコーポレイテッド | Nベースタイプの演算式の最適化 |
JP2011150727A (ja) * | 1999-11-12 | 2011-08-04 | Oracle America Inc | Nベースタイプの演算式の最適化 |
JP4786101B2 (ja) * | 1999-11-12 | 2011-10-05 | オラクル・アメリカ・インコーポレイテッド | Nベースタイプの演算式の最適化 |
US7278138B2 (en) | 2001-03-30 | 2007-10-02 | International Business Machines Corporation | Computer program conversion and compilation |
Also Published As
Publication number | Publication date |
---|---|
JP2847688B2 (ja) | 1999-01-20 |
DE69428151D1 (de) | 2001-10-11 |
US5694605A (en) | 1997-12-02 |
EP0626640A1 (en) | 1994-11-30 |
DE69428151T2 (de) | 2002-03-28 |
EP0626640B1 (en) | 2001-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0626641B1 (en) | Processor improved in address management | |
US6996703B2 (en) | Processing device for executing virtual machine instructions | |
EP0941508B1 (en) | Variable instruction set computer | |
US6654875B1 (en) | Dual microcode RAM address mode instruction execution using operation code RAM storing control words with alternate address indicator | |
JP5299979B2 (ja) | Riscプロセッサ及びレジスタのフラグビットの処理方法 | |
EP0627681B1 (en) | Apparatus and method for processing data with a plurality of flag groups | |
JPH11175349A (ja) | データ列生成方法及び装置、変換方法、及びコンピュータ | |
JP3606561B2 (ja) | 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造 | |
EP0465248A2 (en) | A microcontroller having a pseudo-linear bank switching memory expansion scheme | |
EP0742513B1 (en) | A processor which returns from subroutine at high speed and a program translating apparatus which generates machine programs that makes a high-speed return from a subroutine | |
JPH1049369A (ja) | データ処理装置 | |
JP2847688B2 (ja) | プログラム変換装置およびプロセッサ | |
US20040003209A1 (en) | Data processor | |
US20030110478A1 (en) | Portable run-time code synthesis in a caching dynamic translator | |
JP2000040005A (ja) | プログラム変換装置 | |
JP4088418B2 (ja) | ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令 | |
JP2551167B2 (ja) | マイクロコンピュータ | |
JP3630804B2 (ja) | データ処理装置 | |
JPH0668724B2 (ja) | シミユレーシヨン方法 | |
EP0180077B1 (en) | A data processing machine for compiling computer programs | |
JPH086797A (ja) | 定数参照最適化処理装置 | |
US20040177234A1 (en) | Method and apparatus for executing branch instructions of a stack-based program | |
JP2875711B2 (ja) | プログラム変換装置およびプロセッサ | |
JPH1165622A (ja) | プログラマブルコントローラ | |
JPH07191845A (ja) | 即値データ転送装置 |
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 |