JPH04158445A - アドレスサイズが機械語の命令長と同等な場合におけるジャンプ方式 - Google Patents
アドレスサイズが機械語の命令長と同等な場合におけるジャンプ方式Info
- Publication number
- JPH04158445A JPH04158445A JP28345090A JP28345090A JPH04158445A JP H04158445 A JPH04158445 A JP H04158445A JP 28345090 A JP28345090 A JP 28345090A JP 28345090 A JP28345090 A JP 28345090A JP H04158445 A JPH04158445 A JP H04158445A
- Authority
- JP
- Japan
- Prior art keywords
- register
- instruction
- jump
- interpreter
- jump table
- 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
Links
- 238000000034 method Methods 0.000 claims description 6
- 230000009191 jumping Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 1
Landscapes
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
[産業上の利用分野]
本発明は、縮小命令セット会コンピュータシステムのよ
うに、機械語の命令長と等しいアドレス値を即値として
機械語1命令中で扱うことができないシステムに関し、
特に、LISP言語のようにインタプリタとコンパイラ
から構成される言語処理系に関する。
うに、機械語の命令長と等しいアドレス値を即値として
機械語1命令中で扱うことができないシステムに関し、
特に、LISP言語のようにインタプリタとコンパイラ
から構成される言語処理系に関する。
[従来の技術]
従来、インタプリタとコンパイラから構成される言語処
理システムで、コンパイラが出力するオブジェクトコー
ド(以後、コンパイルドコードオブジェクトと呼ぶ)が
インタプリタの一部(以後、サブルーチンと呼ぶ)を呼
び出し、そのサブルーチンのアドレス値がそのシステム
内で表される最大のアドレス値と同バイト数である場合
において、通常は、指定する即値の長さ(バイト数)に
合わせて機械語の命令長が変わるシステムが多いので、
この場合、システム内で表される最大のアドレス値と同
バイト数であるインタプリタのサブルーチンのアドレス
値を即値として直接指定し、その指定されたアドレスに
ジャンプするという1命令を使用してインタプリタのサ
ブルーチンを呼ぶコンパイルドコードを出力していた。
理システムで、コンパイラが出力するオブジェクトコー
ド(以後、コンパイルドコードオブジェクトと呼ぶ)が
インタプリタの一部(以後、サブルーチンと呼ぶ)を呼
び出し、そのサブルーチンのアドレス値がそのシステム
内で表される最大のアドレス値と同バイト数である場合
において、通常は、指定する即値の長さ(バイト数)に
合わせて機械語の命令長が変わるシステムが多いので、
この場合、システム内で表される最大のアドレス値と同
バイト数であるインタプリタのサブルーチンのアドレス
値を即値として直接指定し、その指定されたアドレスに
ジャンプするという1命令を使用してインタプリタのサ
ブルーチンを呼ぶコンパイルドコードを出力していた。
また、縮小命令セット・コンピュータシステムのように
、機械語の全命令長が固定であり、そのシステム内で表
せる最大のアドレス値がその命令長と等しい場合、機械
語には、何命令であるかを識別するためのオペコードと
呼ばれる部分が必ず必要なため、機械語1命令中で命令
長と等しいアドレス値を即値として扱うことができない
。よってそのようなシステムの場合は、システム内の最
大のアドレス値を直接即値として指定してそのアドレス
にジャンプする命令は存在しない。そこで、まずアドレ
ス値をレジスタにロードし、そのレジスタにジャンプす
る命令を使用するが、同様な理由でアドレス値をレジス
タに1命令でロードする命令は存在しない。そこで、ア
ドレス値を上位バイト、下位バイトに分けて上位バイト
をロードする命令と下位バイトをロードする命令の2命
令を使用してアドレス値をレジスタにロードし、次にそ
のレジスタにジャンプする命令の3命令を使用してイン
タプリタのサブルーチンを呼び出すコンパイルドコード
を出力していた。
、機械語の全命令長が固定であり、そのシステム内で表
せる最大のアドレス値がその命令長と等しい場合、機械
語には、何命令であるかを識別するためのオペコードと
呼ばれる部分が必ず必要なため、機械語1命令中で命令
長と等しいアドレス値を即値として扱うことができない
。よってそのようなシステムの場合は、システム内の最
大のアドレス値を直接即値として指定してそのアドレス
にジャンプする命令は存在しない。そこで、まずアドレ
ス値をレジスタにロードし、そのレジスタにジャンプす
る命令を使用するが、同様な理由でアドレス値をレジス
タに1命令でロードする命令は存在しない。そこで、ア
ドレス値を上位バイト、下位バイトに分けて上位バイト
をロードする命令と下位バイトをロードする命令の2命
令を使用してアドレス値をレジスタにロードし、次にそ
のレジスタにジャンプする命令の3命令を使用してイン
タプリタのサブルーチンを呼び出すコンパイルドコード
を出力していた。
[発明が解決しようとする課題〕
上述した従来の方式では、まず、前者の場合は、命令長
と等しいアドレス値を即値として1命令中で扱うことが
できないので、従来のように、インタプリタのサブルー
チンのアドレス値を即値として直接指定し、その指定さ
れたアドレスにジャンプするという1命令を使用したコ
ンパイルドコードを出力することはできないため、コン
パイルドコードオブジェクトからインタプリタのサブル
ーチンへジャンプできない。
と等しいアドレス値を即値として1命令中で扱うことが
できないので、従来のように、インタプリタのサブルー
チンのアドレス値を即値として直接指定し、その指定さ
れたアドレスにジャンプするという1命令を使用したコ
ンパイルドコードを出力することはできないため、コン
パイルドコードオブジェクトからインタプリタのサブル
ーチンへジャンプできない。
また、後者の場合は、インタプリタのサブルーチンを呼
び出すのに3命令かかる。インタプリタ上にもコンパイ
ラがインライン展開する関数と同じ機能を持つコード列
が存在するので、インタプリタ上のコード列がインライ
ン展開するコードと同等の実行性能をもつ部分は、必ず
インタプリタ上のコード列をサブルーチンとして呼び、
また、実行時のエラー処理などのコード生成を行うこと
は、エラー処理のための環境を生成しなければならない
ので、コードの量が非常に多くなるため、インタプリタ
上のエラー処理サブルーチンを呼び出すことが普通であ
る。このため、同じコンパイルドコードオブジェクト内
で度々インタプリタのサブルーチンを呼び出す場合が多
く、その度に3命令かかることになり、実行速度が遅く
なるという欠点がある。
び出すのに3命令かかる。インタプリタ上にもコンパイ
ラがインライン展開する関数と同じ機能を持つコード列
が存在するので、インタプリタ上のコード列がインライ
ン展開するコードと同等の実行性能をもつ部分は、必ず
インタプリタ上のコード列をサブルーチンとして呼び、
また、実行時のエラー処理などのコード生成を行うこと
は、エラー処理のための環境を生成しなければならない
ので、コードの量が非常に多くなるため、インタプリタ
上のエラー処理サブルーチンを呼び出すことが普通であ
る。このため、同じコンパイルドコードオブジェクト内
で度々インタプリタのサブルーチンを呼び出す場合が多
く、その度に3命令かかることになり、実行速度が遅く
なるという欠点がある。
[課題を解決するための手段]
本発明のアドレスサイズが機械語の命令長と同等な場合
におけるジャンプ方式は、コンパイルドコードオブジェ
クトが呼び出す全てのインタプリタのサブルーチンのア
ドレスを要素とするテーブルを持ち、これを前もってイ
ンタプリタ上に生成するジャンプテーブル生成手段と、
コンパイルドコードオブジェクトがジャンプテーブル生
成手段で生成したジャンプテーブルを参照できるよう、
レジスタMがジャンプテーブルの先頭を指すようにし、
そのレジスタMを使用して、呼び出したいサブルーチン
のアドレスをレジスタにロードするコードを出力するジ
ャンプテーブル参照手段と、そのレジスタの指す先にジ
ャンプするコードを出力するジャンプ命令生成手段有し
ている。
におけるジャンプ方式は、コンパイルドコードオブジェ
クトが呼び出す全てのインタプリタのサブルーチンのア
ドレスを要素とするテーブルを持ち、これを前もってイ
ンタプリタ上に生成するジャンプテーブル生成手段と、
コンパイルドコードオブジェクトがジャンプテーブル生
成手段で生成したジャンプテーブルを参照できるよう、
レジスタMがジャンプテーブルの先頭を指すようにし、
そのレジスタMを使用して、呼び出したいサブルーチン
のアドレスをレジスタにロードするコードを出力するジ
ャンプテーブル参照手段と、そのレジスタの指す先にジ
ャンプするコードを出力するジャンプ命令生成手段有し
ている。
[実施例]
次に、本発明について図面を参照して説明する。
第1図は、本発明の構成を表す図である。ジャンプテー
ブル生成手段1は、インタプリタ上にコンパイルドコー
ドオブジェクトが呼び出すインタプリタのサブルーチン
のアドレスを要素とするジャンプテーブルを生成する。
ブル生成手段1は、インタプリタ上にコンパイルドコー
ドオブジェクトが呼び出すインタプリタのサブルーチン
のアドレスを要素とするジャンプテーブルを生成する。
ジャンプテーブル参照手段2によって、レジスタM5が
そのジャンプテーブル4の先頭ポインタを指すようにし
て、Mを基準にしてジャンプテーブルに格納されている
アドレスをレジスタにロードし、ジャンプ命令生成手段
3によってそのレジスタの指す先にジャンプするコード
を出力する。これによって、コンパイラは、アドレス値
がシステムの命令長と等しい場合でもインタプリタのサ
ブルーチンを呼び出すコンパイルドコードを出力するこ
とができる。
そのジャンプテーブル4の先頭ポインタを指すようにし
て、Mを基準にしてジャンプテーブルに格納されている
アドレスをレジスタにロードし、ジャンプ命令生成手段
3によってそのレジスタの指す先にジャンプするコード
を出力する。これによって、コンパイラは、アドレス値
がシステムの命令長と等しい場合でもインタプリタのサ
ブルーチンを呼び出すコンパイルドコードを出力するこ
とができる。
次に第2図を用いて説明する。コンパイルドコードオブ
ジェクトが呼び出す全てのインタプリタのサブルーチン
のアドレスを格納したジャンプテーブル8を、インタプ
リタ上に生成し、どのサブルーチンが第何番目の要素で
あるかはあらかじめ定めておく。
ジェクトが呼び出す全てのインタプリタのサブルーチン
のアドレスを格納したジャンプテーブル8を、インタプ
リタ上に生成し、どのサブルーチンが第何番目の要素で
あるかはあらかじめ定めておく。
例えば機械語の命令長が4バイトで、インタプリタ上に
サブルーチンequal 6とサブルーチンplug7
が存在する時、コンパイルドコードオブジェクトからサ
ブルーチンplus7を呼び出す場合について具体的に
説明する。
サブルーチンequal 6とサブルーチンplug7
が存在する時、コンパイルドコードオブジェクトからサ
ブルーチンplus7を呼び出す場合について具体的に
説明する。
今、インタプリタのサブルーチンのアドレス値は機械語
の命令長と等しい4バイトで、また、ジャンプテーブル
生成手段1によりすでに生成したインタプリタ上のジャ
ンプテーブル8には第1要素にequalのアドレス9
が、第2要素にplusのアドレス10が格納され、ま
た、コンパイラが、コンパイルドコード列の最初に、コ
ンパイルドコードオブジェクトがレジスタMllを基準
にしてジャンプテーブル8の要素を参照できるように、
ジャンプテーブル参照手段2によりレジスタMllにジ
ャンプテーブルの先頭のアドレスを格納するコンパイル
ドコード12を出力している。
の命令長と等しい4バイトで、また、ジャンプテーブル
生成手段1によりすでに生成したインタプリタ上のジャ
ンプテーブル8には第1要素にequalのアドレス9
が、第2要素にplusのアドレス10が格納され、ま
た、コンパイラが、コンパイルドコード列の最初に、コ
ンパイルドコードオブジェクトがレジスタMllを基準
にしてジャンプテーブル8の要素を参照できるように、
ジャンプテーブル参照手段2によりレジスタMllにジ
ャンプテーブルの先頭のアドレスを格納するコンパイル
ドコード12を出力している。
この時、コンパイラはインタプリタのサブルーチンpl
ugを呼び出すコンパイルドコードを出力するが、サブ
ルーチンplug7のアドレス値はシステムの命令長と
等しいので、そのアドレス値を即値として指定してジャ
ンプする命令を1命令で記述することはできない。
ugを呼び出すコンパイルドコードを出力するが、サブ
ルーチンplug7のアドレス値はシステムの命令長と
等しいので、そのアドレス値を即値として指定してジャ
ンプする命令を1命令で記述することはできない。
そこで、ジャンプ命令生成手段3によりまずそのアドレ
ス値をレジスタにロードする命令を出力し、次にそのレ
ジスタの指す先にジャンプする命令を出力する。まず、
アドレス値をレジスタにロードする命令を出力するが、
アドレス値を即値としてロードするのではなく、レジス
タMllを使用してジャンプテーブル8からロードする
方法をとる。今、サブルーチンplug7のアドレス1
0は、ジャンプテーブルの第2番目に格納してあり、レ
ジスタMllはジャンプテーブルの先頭を指しているの
で、レジスタMllを使ってレジスタMllが指す4バ
イト先の内容をレジスタWOにロードするアセンブラ命
令LW WO4(M)13を出力することができる。
ス値をレジスタにロードする命令を出力し、次にそのレ
ジスタの指す先にジャンプする命令を出力する。まず、
アドレス値をレジスタにロードする命令を出力するが、
アドレス値を即値としてロードするのではなく、レジス
タMllを使用してジャンプテーブル8からロードする
方法をとる。今、サブルーチンplug7のアドレス1
0は、ジャンプテーブルの第2番目に格納してあり、レ
ジスタMllはジャンプテーブルの先頭を指しているの
で、レジスタMllを使ってレジスタMllが指す4バ
イト先の内容をレジスタWOにロードするアセンブラ命
令LW WO4(M)13を出力することができる。
こうして、システムの命令長と等しいアドレス値を1命
令でロードすることができる。次に、そのWOの指す先
にジャンプするアセンブラ命令JMP WO14を出
力する。このようにして、システムの命令長と等しいア
ドレス値を持つインタプリタのサブルーチンplug7
を呼び出すコンパイルドコードを合計2命令で出力する
ことができる。
令でロードすることができる。次に、そのWOの指す先
にジャンプするアセンブラ命令JMP WO14を出
力する。このようにして、システムの命令長と等しいア
ドレス値を持つインタプリタのサブルーチンplug7
を呼び出すコンパイルドコードを合計2命令で出力する
ことができる。
同様にしてインタプリタのサブルーチンequa16も
呼び出せる。
呼び出せる。
以後、同じコンパイルドコードオブジェクト内で何度も
インタプリタのサブルーチンを呼び出す場合、2命令で
すむ。
インタプリタのサブルーチンを呼び出す場合、2命令で
すむ。
[発明の効果]
以上説明したように、本発明のアドレスサイズが機械語
の命令長と同等な場合におけるジャンプ方式は、あらか
じめコンパイルドコードオブジェクトが呼び出す全ての
インタプリタのアドレスを格納したジャンプテーブルを
用意し、ジャンプテーブルの先頭をレジスタがポイント
することによって、インタプリタのサブルーチンにジャ
ンプするコードを2命令で実現することができる。また
、同じコンパイルドコードオブジェクト内で何度もイン
タプリタのサブルーチンを呼び出す場合が多いので、そ
の度2命令ですみ、実行速度が速くなるという効果があ
る。また、コンパイルドコードオブジェクトが呼び出す
インタプリタのサブルーチンが増えたり、アドレスが変
わったりする場合、ジャンプテーブルに新たに要素を付
は加えたり、要素の値を変えれば良く、処理が簡単に行
えるという効果もある。
の命令長と同等な場合におけるジャンプ方式は、あらか
じめコンパイルドコードオブジェクトが呼び出す全ての
インタプリタのアドレスを格納したジャンプテーブルを
用意し、ジャンプテーブルの先頭をレジスタがポイント
することによって、インタプリタのサブルーチンにジャ
ンプするコードを2命令で実現することができる。また
、同じコンパイルドコードオブジェクト内で何度もイン
タプリタのサブルーチンを呼び出す場合が多いので、そ
の度2命令ですみ、実行速度が速くなるという効果があ
る。また、コンパイルドコードオブジェクトが呼び出す
インタプリタのサブルーチンが増えたり、アドレスが変
わったりする場合、ジャンプテーブルに新たに要素を付
は加えたり、要素の値を変えれば良く、処理が簡単に行
えるという効果もある。
第1図は本発明の全体構成図。
第2図はコンパイルドコードオブジェクトがサブルーチ
ンplugを呼び出す処理を表した図。 1・・・ジャンプテーブル生成手段、2・・・ジャンプ
テーブル参照手段、3・・・ジャンプ命令生成手段、4
.8・・・ジャンプテーブル、5.11・・・レジスタ
、6・・・equalサブルーチン、7・・・plus
サブル−チン。 代理人 弁理士 山 下 穣 平
ンplugを呼び出す処理を表した図。 1・・・ジャンプテーブル生成手段、2・・・ジャンプ
テーブル参照手段、3・・・ジャンプ命令生成手段、4
.8・・・ジャンプテーブル、5.11・・・レジスタ
、6・・・equalサブルーチン、7・・・plus
サブル−チン。 代理人 弁理士 山 下 穣 平
Claims (1)
- コンパイルドコードオブジェクトが呼び出す全てのイン
タプリタのサブルーチンのアドレスを要素とするテーブ
ルを持ち、これを前もってインタプリタ上に生成するジ
ャンプテーブル生成手段と、コンパイルドコードオブジ
ェクトがジャンプテーブル生成手段で生成したジャンプ
テーブルを参照できるよう、レジスタMがジャンプテー
ブルの先頭を指すようにし、そのレジスタMを使用して
、呼び出したいサブルーチンのアドレスをレジスタにロ
ードするコードを出力するジャンプテーブル参照手段と
、そのレジスタの指す先にジャンプするコードを出力す
るジャンプ命令生成手段からなるアドレスサイズが機械
語の命令長と同等な場合におけるジャンプ方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28345090A JPH04158445A (ja) | 1990-10-23 | 1990-10-23 | アドレスサイズが機械語の命令長と同等な場合におけるジャンプ方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28345090A JPH04158445A (ja) | 1990-10-23 | 1990-10-23 | アドレスサイズが機械語の命令長と同等な場合におけるジャンプ方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH04158445A true JPH04158445A (ja) | 1992-06-01 |
Family
ID=17665704
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP28345090A Pending JPH04158445A (ja) | 1990-10-23 | 1990-10-23 | アドレスサイズが機械語の命令長と同等な場合におけるジャンプ方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH04158445A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014523594A (ja) * | 2011-07-19 | 2014-09-11 | クアルコム,インコーポレイテッド | 頻繁にコールされる関数に対するテーブルコール命令 |
-
1990
- 1990-10-23 JP JP28345090A patent/JPH04158445A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014523594A (ja) * | 2011-07-19 | 2014-09-11 | クアルコム,インコーポレイテッド | 頻繁にコールされる関数に対するテーブルコール命令 |
US9116685B2 (en) | 2011-07-19 | 2015-08-25 | Qualcomm Incorporated | Table call instruction for frequently called functions |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5504901A (en) | Position independent code location system | |
US7739696B2 (en) | Message translation systems and methods | |
US8196120B2 (en) | Computer emulator employing direct execution of compiled functions | |
EP0474425B1 (en) | Arrangement for efficiently transferring program execution between subprograms | |
JPH01306923A (ja) | 異種言語間連絡方式 | |
JPH01154267A (ja) | 入出力機器制御プログラムのアドレス解決方法 | |
JPH09231077A (ja) | コンピュータプログラムのサイズを縮小する方法 | |
EP0595540A1 (en) | Debugging/modifying of software in ROM | |
US6101326A (en) | Method and apparatus for frame elimination for simple procedures with tail calls | |
JPS63101931A (ja) | プログラム制御方式 | |
KR19990046225A (ko) | 확장 명령어를 가진 중앙처리장치 | |
JPH04158445A (ja) | アドレスサイズが機械語の命令長と同等な場合におけるジャンプ方式 | |
KR20100110710A (ko) | 동적 라이브러리를 갖는 인터페이스를 간단히 하는 방법, 시스템 및 컴퓨터 프로그램 제품 | |
US5805887A (en) | Universal pointer object | |
Sadolewski et al. | Denotational model and implementation of scalable virtual machine in CPDev | |
JP2585793B2 (ja) | コンパイラシステム | |
JP2006048186A (ja) | 動的コンパイラの生成コードを保護する言語処理系 | |
Henriksen | Circumventing The Linker: Using SciPy's BLAS and LAPACK Within Cython. | |
KR100329780B1 (ko) | 인터럽트 응답 시간을 줄인 인터럽트 처리 장치 | |
JPH08115221A (ja) | Cコンパイラ | |
JPH04101237A (ja) | デバッグ処理方式 | |
JPH04107605A (ja) | 制御プログラム用言語処理装置 | |
JPH02206838A (ja) | 共通サブル―チンリンク方法 | |
JPH04317129A (ja) | マイクロプログラムアドレススタック回路 | |
Schachte et al. | E cient Object-Oriented Programming in Prolog |