JPH04107638A - リテラル定数割り付け方式 - Google Patents

リテラル定数割り付け方式

Info

Publication number
JPH04107638A
JPH04107638A JP22509590A JP22509590A JPH04107638A JP H04107638 A JPH04107638 A JP H04107638A JP 22509590 A JP22509590 A JP 22509590A JP 22509590 A JP22509590 A JP 22509590A JP H04107638 A JPH04107638 A JP H04107638A
Authority
JP
Japan
Prior art keywords
constant
relative displacement
section
literal
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP22509590A
Other languages
English (en)
Inventor
Takao Suzuki
隆夫 鈴木
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.)
NEC Solution Innovators Ltd
Original Assignee
NEC Solution Innovators 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 NEC Solution Innovators Ltd filed Critical NEC Solution Innovators Ltd
Priority to JP22509590A priority Critical patent/JPH04107638A/ja
Publication of JPH04107638A publication Critical patent/JPH04107638A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、プログラムカウンタ相対アドレッシングモー
ドを有するプロセッサに対するコンパイラにおけるリテ
ラル定数割り付け方式に関する。
〔従来の技術〕
プロセッサの機械命令に即値として埋め込むことができ
ないリテラル定数は、−船釣にコンスタントセクション
と呼ばれる記憶域に割り付けられる。
ところで、プログラムカウンタ相対アドレッシングモー
ドを有するプロセッサに対する従来のコンパイラは、コ
ンパイル単位が複数の手続きブロックから構成されてい
る場合でもすべてのリテラル定数を一つのコンスタント
セクションに割り付け、第5図に示すようにそのコンス
タントセクション31の先頭アドレスを保持するアドレ
スレジスタAR,を用いて参照する命令を生成するか、
あるいは第6図に示すようにコンスタントセクション3
1とコードセクション32とを記憶域上に連続して配置
し、プログラムカウンタPCに保持されている実行中の
命令自身のアドレスからの相対変位dを用いて参照する
命令を生成していた。
〔発明が解決しようとする課題〕
しかしながら、上述した従来のコンパイラでは、アドレ
スレジスタ八−からの相対変位dあるいはプログラムカ
ウンタPCからの相対変位dとしてとり得る値にハード
ウェアアーキテクチャ上の制限がある場合に、コンスタ
ントセクション31自身の大きさあるいはコードセクシ
ョン32の大きさによってはリテラル定数を相対変位d
で参照できない場合が起きる。この場合には、コンパイ
ラの制限としてコンパイルを打ち切るか、あるいは第7
図に示すように相対変位が制限値の範囲内となるような
新しいベースアドレスをアドレスレジスタにロードして
、そのアドレスレジスタを用いて参照する命令を生成し
なければならないという欠点を有していた。
本発明は、このような従来の欠点を改善したもので、そ
の目的は、リテラル定数を効率良く参照することが可能
であって、余分な命令を生成する必要がなくなり、プロ
グラムの実行時間を短縮可能なリテラル定数割り付け方
式を提供することにある。
〔課題を解決するための手段〕
本発明のリテラル定数割り付け方式は、プログラムカウ
ンタ相対アドレッシングモードを有するプロセッサに対
して原始プログラムから目的プログラムを生成し出力す
るコンパイラにおいて、前記原始プログラムを読み込み
構文解析を行って中間テキストを生成する構文解析部と
、中間テキストから目的プログラムを生成して出力する
コード生成部とを備え、前記コード生成部は、コンスタ
ントセクションの大きさが相対変位の制限値の範囲内の
場合には、前記中間テキストに現れるリテラル定数をコ
ンスタントセクションに割り付けてアドレスレジスタか
らの相対変位で参照する命令を生成し、コンスタントセ
クションの大きさが相対変位の制限値を超える場合には
、リテラル定数をコードセクション中の各手続ブロック
の直後に割り付け、プロゲラ、ムカウンタからの相対変
位で参照する命令を生成するようになっている。
〔作用] 本発明では、コンスタントセクションの大きさが相対変
位の制限値を超える場合には、リテラル定数をコードセ
クション中の名手続きブロックの命令列の直後に割り付
けることにより、多くのリテラル定数をもつプログラム
に対して余分な命令を生成する必要がなくなる。
〔実施例〕
以下、本発明について図面を参照して説明する。
第1図は、本発明の一実施例のリテラル定数割り付け方
式が適用されたコンパイラのブロック図である。このコ
ンパイラ2は、プログラムカウンタ相対アドレッシング
モードを有するプロセッサに対して、ブロック構造をも
つ高級言語で記述された原始プログラム1から目的プロ
グラム3を生成して出力するコイバイラであり、原始プ
ログラムIを読み込んで構文解析を行い中間テキスト2
3を生成する構文解析部21と、中間テキスト23から
目的プログラム3を生成して出力するコード生成部22
とから構成されている。
コード生成部22は、中間テキスト23から命令を生成
し、命令テーブル25に登録する命令生成手段221と
、中間テキスト23中に現れたリテラル定数をコンスタ
ントセクションあるいはコードセクションに割り付け、
その結果を定数テーブル24および命令テーブル25に
登録する定数割り付け手段222と、一つの手続きブロ
ックの処理終了時にコードセクション中に割り付けられ
た定数のアドレスを決定し、それに伴う命令テーブル2
5および定数テーブル240更新を行う定数アドレス補
正手段223とを有しでいる。
第2図(a)乃至(d)を参照すると、定数テーブル2
4は、次の定数テーブルへのポインタ241と、同値な
定数テーブルへのポインタ242と、コードセクション
フラグ243と、セクション中のオフセット244と、
フィックスアップチェーンの先頭245と、定数の長さ
246と、定数値247とを有し、また、命令テーブル
25は、命令情報251と、オペランド情報252とを
要素とする配列となっている。命令情報251は、命令
の種1!2511と、命令のアドレス2512と、オペ
ランド数2513とで構成され、オペランド情報252
は、アドレッシングモード2521と、レジスタ番号2
522と、ペースレジスタ番号2523と、インデック
スレジスタ番号2524と、オフセット2525と、デ
ータ長2526と、フィックスアップチェーン2527
とで構成されている。
次に、このように構成された本実施例のリテラル定数割
り付け方式において、第3図に示すような目的プログラ
ムを生成する場合を例にとって説明する。
原始プログラム1が与えられてコンパイラ2が起動され
ると、まず構文解析部21が原始プログラム1を読み込
んで中間テキスト23を生成する。
次に、コード生成部22が中間テキスト23を入力する
と、命令生成手段221においては、中間テキスト23
に基づいて、命令情報251を登録する。次いで、各オ
ペランドに対して、オペランドがリテラル定数でない場
合にはオペランド情報252を登録し、オペランドがリ
テラル定数の場合には定数割り付け手段222を起動す
る。
定数割り付け手段222が起動されると、定数割り付け
手段222では第4図に示すようにして割り付け処理を
行う。すなわち、先づ、定数テーブル24中の次の定数
テーブルへのポインタ241をたどり、同じ値のリテラ
ル定数が登録されているか探す。登録されていない場合
には、そのリテラル定数を登録する。このとき、コンス
タントセクションに割り付け可能か否かを判定し、割り
付け可能ならコードセクションフラグ243をオフにし
、セクション31中のオフセット244にコンスタント
セクション中の相対変位をセントする。
割り付け不可能ならコードセクションフラグ243をオ
ンにし、セクション中のオフセット244に処理中の手
続きブロックの命令列の直後に割り付けられる定数群中
の相対変位をセットし、フィックスアップチェーンの先
頭245にオペランド情報252の添字の値をセットす
る。
コードセクションフラグ243がオフの場合には、アド
レスレジスタ相対アドレッシングモードとしてオペラン
ド情報252を登録し、起動元へ戻る。
コードセクションフラグ243がオンの場合には、同値
な定数テーブルへのポインタ242をたどり、アドレス
が確定している定数でプログラムカウンタからの相対変
位で参照可能なものが登録されているか探す。
登録されている場合には、プログラムカウンタ相対アド
レッシングモードとしてオペランド情報252を登録し
、起動元へ戻る。
登録されていない場合には、まずアドレスが未確定のも
のがなければ同値な定数テーブルのリストの先頭にフィ
ックスアップのための定数テーブル24を登録する。次
に、プログラムカウンタ相対アドレッシングモードとし
てオペランド情報252を登録し、フィックスアップチ
ェーンを張った後に起動元へ戻る。
一つの手続きブロックに対して命令生成手段221の処
理が終了すると、定数アドレス補正手段223が起動さ
れ、フィックスアンプチェーンの先頭245に添字がセ
ットされているすべての定数テーブル24に対して以下
の処理を行う。
すなわち、定数アドレス補正手段223は、セクション
中のオフセット244に手続きプロ・ンクの命令列の直
後のアドレスを加え、定数のアトルスを決定する。次い
で、フィックスアップチェーンの先頭245からフィッ
クスアップチェーン2527をたどり、オフセット25
25にセクション中のオフセット244と命令のアドレ
ス2512との差をセットする。しかる後、フィックス
アップチェーンの先頭245にゼロをセットし、アドレ
ス確定の状態にする。
このようにして、定数アドレス補正手段223の処理が
終了するとコード出力手段224が起動され、命令テー
ブル25に基づいて第3図のような目的プログラム3が
生成される。
第3図かられかるように、本実施例では、コンスタント
セクション31の先頭からの相対変位が制限値の範囲内
の場合には、そのリテラル定数をコンスタントセクショ
ン31に割り付けてアドレスレジスタからの相対変位で
参照する命令が生成され、制限値を超える場合には、リ
テラル定数をコードセクション中の各手続きブロックの
直後に割り付け、プログラムカウンタからの相対変位で
参照する命令が生成される。
このようにして、リテラル定数をアドレスレジスタある
いはプログラムカウンタからの相対変位で効率良く参照
することができるので、余分な命令を生成する必要がな
くなる。
〔発明の効果〕
以上説明したように、本発明によれば、コンスタントセ
クションの大きさが相対変位の制限−値を超える場合に
は、リテラル定数をコードセクション中の各手続きブロ
ックの命令列の直後に割り付けるようにしているので、
多くのリテラル定数をもつプログラムに対して余分な命
令を生成する必要がなくなり、プログラムの実行時間を
短縮できるという効果がある。
【図面の簡単な説明】
第1図は本発明の一実施例のブロック図、第2図(a)
乃至(d)は定数テーブルおよび命令テーブルの構成例
を示す図、第3図は本発明のリテラル定数割り付け方式
においてリテラル定数が割り付けられ生成された目的プ
ログラムの一例を示す図、第4図は第3図の目的プログ
ラムを生成するときの定数テーブルおよび命令テーブル
の内容を示す図、第5図はアドレスレジスタからの相対
変位でリテラル定数を参照する仕方の一例を示す図、第
6図はプログラムカウンタからの相対変位でリテラル定
数を参照する仕方の一例を示す図、第7図はアドレスレ
ジスタからの相対変位が制限値を超える場合にリテラル
定数を参照する仕方の一例を示す図である。 図において、1・・・原始プログラム、2・・・コンパ
イラ、3・・・目的プログラム、21・・・構文解析部
、22・・・コード生成部、23・・・中間テキスト、
24・・・定数テーブル、25・・・命令テーブル、3
1・・・コンスタントセクション、32・・・コードセ
クション、221・・・命令生成手段、222・・・定
数割り付け手段、223・・・定数アドレス補正手段、
224・・・コード出力手段、241・・・次の定数テ
ーブルへのポインタ、242・・・同値な定数テーブル
へのポインタ、243・・・コードセクションフラグ、
244・・・セクション中のオフセット、245・・・
フィックスアップチェーンの先頭、246・・・定数の
長さ、247・・・定数値、251・・・命令情報、2
52・・・オペランド情報、2511・・・命令の種類
、2512・・・命令のアドレス、2513・・・オペ
ランド数、2521・・・アドレッシングモード、25
22・・・レジスタ番号、2523・・・ベースレジス
タ番号、2524・・・インデックスレジスタ番号、2
525・・・オフセット、2526・・・データ長、2
527・・・フィックスアップチェーンである。 第2図 代理人 弁理士  山 下 穣 平 第3図 アドレスレジスタ

Claims (1)

  1. 【特許請求の範囲】 プログラムカウンタ相対アドレッシングモードを有する
    プロセッサに対して原始プログラムから目的プログラム
    を生成し出力するコンパイラにおいて、 前記原始プログラムを読み込み構文解析を行って中間テ
    キストを生成する構文解析部と、中間テキストから目的
    プログラムを生成して出力するコード生成部とを備え、 前記コード生成部は、コンスタントセクションの大きさ
    が相対変位の制限値の範囲内の場合には、前記中間テキ
    ストに現れるリテラル定数をコンスタントセクションに
    割り付けてアドレスレジスタからの相対変位で参照する
    命令を生成し、コンスタントセクションの大きさが相対
    変位の制限値を超える場合には、リテラル定数をコード
    セクション中の各手続ブロックの直後に割り付け、プロ
    グラムカウンタからの相対変位で参照する命令を生成す
    るようになっていることを特徴とするリテラル定数割り
    付け方式。
JP22509590A 1990-08-29 1990-08-29 リテラル定数割り付け方式 Pending JPH04107638A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22509590A JPH04107638A (ja) 1990-08-29 1990-08-29 リテラル定数割り付け方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22509590A JPH04107638A (ja) 1990-08-29 1990-08-29 リテラル定数割り付け方式

Publications (1)

Publication Number Publication Date
JPH04107638A true JPH04107638A (ja) 1992-04-09

Family

ID=16823915

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22509590A Pending JPH04107638A (ja) 1990-08-29 1990-08-29 リテラル定数割り付け方式

Country Status (1)

Country Link
JP (1) JPH04107638A (ja)

Similar Documents

Publication Publication Date Title
JP4640684B2 (ja) プログラムコード変換方法
JP2001147819A (ja) 最適化装置および記録媒体
JPH1097430A (ja) 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム
US7032230B2 (en) Efficient virtual function calls for compiled/interpreted environments
US6571387B1 (en) Method and computer program product for global minimization of sign-extension and zero-extension operations
US6256782B1 (en) Compile apparatus, compile method and computer-readable medium storing compiler
JPH04107638A (ja) リテラル定数割り付け方式
JP3566602B2 (ja) コンパイル方法、および、コンパイル用プログラムを記録した記録媒体
JPS58169637A (ja) コンパイル処理方式
JPH0991151A (ja) コンパイル装置及びプロセッサ装置
JPH0373026A (ja) コンパイル方式
JP2001142719A (ja) コンパイラ装置及びコンパイラプログラムを記録した記録媒体
JP3018783B2 (ja) コンパイル方式
JPH0689187A (ja) インライン展開最適化方法
JPH04256132A (ja) 高級プログラム言語の代入文最適化方式
JPH03164835A (ja) インタプリタ型言語処理系における大域変数処理のコンパイル方法
JP2003337709A (ja) コンパイル方法
JP2020086734A (ja) コンパイラ
JPH0240721A (ja) 並列コンパイル方式
JPH02105224A (ja) コンパイラにおけるデータ割付け方式
JPH03257534A (ja) メモリ割り当て方式
CA2355990A1 (en) Efficient virtual function call for compiled/interpreted environments
JPH0553821A (ja) コンパイル処理方式
JPH07141193A (ja) レジスタの割付方式
JP2001184227A (ja) シミュレーション装置