JP2003280894A - 命令セット変換装置 - Google Patents

命令セット変換装置

Info

Publication number
JP2003280894A
JP2003280894A JP2002087777A JP2002087777A JP2003280894A JP 2003280894 A JP2003280894 A JP 2003280894A JP 2002087777 A JP2002087777 A JP 2002087777A JP 2002087777 A JP2002087777 A JP 2002087777A JP 2003280894 A JP2003280894 A JP 2003280894A
Authority
JP
Japan
Prior art keywords
native
code
instruction set
program
address
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.)
Withdrawn
Application number
JP2002087777A
Other languages
English (en)
Inventor
Satoshi Izawa
聡 井沢
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.)
Hitachi Solutions Technology Ltd
Original Assignee
Hitachi ULSI Systems 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 Hitachi ULSI Systems Co Ltd filed Critical Hitachi ULSI Systems Co Ltd
Priority to JP2002087777A priority Critical patent/JP2003280894A/ja
Publication of JP2003280894A publication Critical patent/JP2003280894A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 プロセッサがプログラムの実行を高速に行え
るように最適化されたプログラムコードの変換が可能な
命令セット変換装置を提供する。 【解決手段】 命令セット変換装置に、スタックデータ
をプロセッサのレジスタに割当てる際のレジスタアドレ
スとスタック上の登録位置との対応関係情報を含むスタ
ック構造情報が登録されるデータ構造記憶手段213
と、変換前の非ネイティブコードと上記のスタック構造
情報とに基づいてネイティブコードへの変換とスタック
構造情報の更新とを行うデコーダ215とを備え、デコ
ーダ215により、変換前の非ネイティブコードがスタ
ックを使用する命令コードだった場合に、スタックデー
タをレジスタに割当てるネイティブコードが生成され、
且つ、この割当てが反映されるように上記スタック構造
情報の更新が行われるように構成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、ハードウェア処
理により所定の命令セットのプログラムをリアルタイム
で異なる命令セットのプログラムに変換して、プロセッ
サが対応していない命令セットのプログラムを実行する
のを支援する命令セット変換装置に関する。
【0002】
【従来の技術】プロセッサに対応していない命令セット
のプログラムをプロセッサに対応した命令セットにリア
ルタイムで変換して、プロセッサによる実行を支援する
ハードウェアの従来技術として、例えば、米国特許58
75336「Method and system for translating a no
n-negative bytecode to a set of codes native to ap
rocessor within a computer system」に開示の技術が
ある。以下、プロセッサに対応していない命令セットの
ことを「非ネイティブ命令セット」と呼び、そのプログ
ラムコードのことを「非ネイティブコード」と呼ぶ。ま
た、プロセッサに対応した命令セットのことを「ネイテ
ィブ命令セット」と呼び、そのプログラムコードのこと
を「ネイティブコード」と呼ぶ。
【0003】上記の技術は、プロセッサと主記憶間にコ
ード変換装置を置き、プロセッサの命令フェッチ時に、
主記憶から読み出した非ネイティブコードをネイティブ
コードに1個ずつ変換してプロセッサに供給するもので
ある。コードの変換は、非ネイティブ命令セットの各コ
ード毎に対応するネイティブコードが格納された変換テ
ーブルを参照して行う。また、上記の技術においては、
変換後のネイティブコードは、仮想的なアドレス空間
(以下、仮想ネイティブ空間と呼ぶ)に格納されている
ものとして扱われ、プロセッサはこの仮想ネイティブ空
間の仮想的なアドレスを用いてネイティブコードのフェ
ッチを行う。図2に示すように、仮想ネイティブ空間に
おいては、非ネイティブコードの単位データ量(1バイ
ト)毎に2のべき乗倍の大きさのアドレスブロックBR
が割り当てられ、このアドレスブロックBRに変換後の
ネイティブコードが格納されるものとされる。
【0004】このように単位データ量ごとの非ネイティ
ブコードと、変換後のネイティブコードが格納されるア
ドレスブロックBRとが一対一に対応付けられること
で、例えば非ネイティブコードにジャンプ命令とその飛
込み先のアドレスがあった場合に、それに対応する仮想
ネイティブ空間の飛込み先アドレスを割り出してネイテ
ィブコードに変換することが出来るとともに、非ネイテ
ィブコードのどのアドレスに飛込み点があった場合で
も、その飛込み点からコード変換を開始した場合の仮想
ネイティブ空間のアドレスの確保が保障される。また、
1個のアドレスブロックBRには、一対一に対応づけら
れた非ネイティブコードに加え、後続する複数の非ネイ
ティブコードの変換後のネイティブコードも詰め込ま
れ、1ブロック分のネイティブコードがプロセッサのキ
ャッシュへまとめて転送されるようになっている。それ
により、キャッシュの有効利用が図られている。
【0005】
【発明が解決しようとする課題】プログラム処理におい
てはスタックと呼ばれる仕組みを用いた処理をいかに高
速に行うかが重要なポイントの一つである。特に非ネイ
ティブ命令セットがスタック指向型のアーキテクチャー
である場合には最重要となる。しかしながら、上記従来
の技術では、スタックがプロセッサのレジスタではなく
主記憶に割り当てられてしまうため、スタック処理を高
速に行うことが出来ないという第1の課題があった。ま
た、上記従来の技術では、コード変換の際に、非ネイテ
ィブコードを1個ずつそれぞれ独立的にネイティブコー
ドに変換していたため、前後の非ネイティブコードを考
慮した変換の最適化を図ることが出来ないという第2の
課題があった。
【0006】また、上記従来の技術では、図2に示すよ
うに、変換後の複数のネイティブコードを仮想ネイティ
ブ空間の1つのアドレスブロックBRに詰め込んでキャ
ッシュの有効利用を図っていたが、非ネイティブコード
の単位データ量ごとに仮想ネイティブ空間の1ブロック
のアドレス範囲が割り当てられているため、その大半の
ブロックは使用されない無駄な空間となり(例えば図2
の2〜4段目のブロックBR)、使用されるブロックは
飛び飛びとなる。そのため、キャッシュに写されるブロ
ックが飛び飛びとなってキャッシュのヒット率が低下す
るという第3の課題があった。特に、この問題はプロセ
ッサのキャッシュがデータを写すブロックが1つしかな
いダイレクトマッピング方式のキャッシュメモリである
場合に特に顕著となる。
【0007】また、上記従来の技術では、非ネイティブ
コードの1バイトに対して仮想ネイティブ空間では例え
ば32バイトのアドレスブロックBRが割り当てられる
ため、仮想ネイティブ空間は非ネイティブコードが格納
されるアドレス範囲の32倍の領域を必要とすることに
なる。しかも、仮想ネイティブ空間は、主記憶上で非ネ
イティブ命令セットのプログラムが格納されている一番
若いアドレスから一番最後のアドレスまで、その間に無
関係の領域が挟まっていたとしても、その全範囲に対応
させて確保されなければならない。しかしながら、非ネ
イティブ命令セットのプログラムは非ネイティブコード
用のエリアにまとまって格納される訳ではなく、多くの
システムでは他の領域と区別されずに配置され他のもの
と混在することになる。非ネイティブ命令セットのプロ
グラムを格納する領域を限定することはシステムの構成
によっては簡単でなく、少なくともシステム設計に対し
て制約を与えることになる。従って、非ネイティブ命令
セットのプログラムを含みうる連続領域はほとんどシス
テム全体の大きさと変らなくなってしまうため、その3
2倍の領域を必要とする仮想ネイティブ空間はさらに広
大な空間となり、小規模のシステムではアドレス空間が
足りなくなる可能性があるという第4の課題を有する。
【0008】また、プロセッサのパイプラインの構造、
スーパースカラーなどの処理方式によっては命令の順序
などにより処理性能の最適化が可能となる場合がある
が、上記従来の技術では、ネイティブコードは変換順の
ままプロセッサに供給されるので、命令順序の最適化が
行えないという第5の課題を有している。
【0009】また、上記従来の技術のようにハードウェ
アでコード変換を行う場合には、コンパイラでコード変
換を行う場合と較べて、コードの変換時に入手できる情
報は非ネイティブコードのみと非常に制限されるため、
その結果、無駄なオペレーションコードを含んだ変換内
容になってしまうという第6の課題があった。例えば、
オブジェクト指向言語において或るオブジェクトを操作
する関数を呼び出す処理では、暗黙の引数として処理対
象のオブジェクトのポインターを渡されるが、ここで渡
される値はNULLでないことがチェック済みである。
しかしながら、ハードウェアによるコード変換機構では
この情報を取得することは難しいため、通常はポインタ
ーがNULLでないことのチェックを行うコードを生成
しなければならず、無駄なオペレーションコードが含ま
れてしまう。
【0010】この発明の目的は、上記の第1〜第6の課
題を解決して、プロセッサがプログラムの実行を高速に
行えるように最適化されたプログラムコードの変換が可
能な命令セット変換装置を提供することにある。この発
明の前記ならびにそのほかの目的と新規な特徴について
は、本明細書の記述および添附図面から明らかになるで
あろう。
【0011】
【課題を解決するための手段】本願において開示される
発明のうち代表的なものの概要を説明すれば、下記のと
おりである。すなわち、命令セット変換装置に、スタッ
クデータをプロセッサのレジスタに割当てる際のレジス
タ番号とスタック上の位置との対応関係が示されるスタ
ック構造情報を格納するデータ構造記憶手段と、変換前
の非ネイティブコードと上記スタック構造情報とに基づ
いてネイティブコードへの変換とスタック構造情報の更
新とを行う命令デコーダとを備え、上記命令デコーダ
は、変換する非ネイティブコードがスタックを使用する
命令コードだった場合に、スタックデータをレジスタに
割当てるネイティブコードを生成し、且つ、この割当て
を反映させて上記スタック構造情報の更新を行うように
構成したものである。
【0012】このような手段によれば、スタック処理を
レジスタを用いて高速に実行することが可能で、第1の
課題が解決される。さらに、複数の非ネイティブコード
を連続して変換する際に、前の非ネイティブコードの情
報が反映されたスタック構造情報を命令デコーダが認識
しながら次の非ネイティブコードの変換を行うので、前
後の非ネイティブコードを考慮した最適なコード変換が
可能である。すなわち、これにより第2の課題を解決す
ることが出来る。例えば、上記命令デコーダは、上記非
ネイティブコードの処理が上記スタック構造情報の更新
で完了するものである場合に、ネイティブコードの生成
を行わずに上記スタック構造情報の更新のみを行うよう
にすることも可能である。さらに好ましくは、上記スタ
ック構造情報の一つとして、上記データ構造記憶手段に
スタック上の位置に対応させてスタックデータそのもの
を登録可能に構成しても良く、これにより、さらに最適
化したネイティブコードへの変換が可能となる。
【0013】望ましくは、仮想ネイティブ空間にキャッ
シュメモリの1回のエントリの整数倍の容量をそれぞれ
有する仮想アドレスブロックが設定され、連続する複数
の非ネイティブコードの変換後のネイティブコードが対
応する仮想アドレスブロックに収められ、そのうち1キ
ャッシュエントリ分のネイティブコードが上記キャッシ
ュメモリに転送されるように構成すると良い。このよう
な構成により、1つの仮想アドレスブロック分のコード
変換を連続的に且つ上記スタック構造情報により最適化
を図って行うことが出来るので、その変換効率が高くな
り、また、上記容量の仮想アドレスブロックを用いるこ
とでキャッシュの有効利用を図ることが出来る。
【0014】また望ましくは、予め上記非ネイティブ命
令セットのプログラムの飛込みアドレスが蓄積されるデ
ータベース(例えば飛込み点データベース253)とを
備え、1つの飛込みアドレスから次の飛込みアドレスに
わたる非ネイティブコードの1ブロックと仮想ネイティ
ブ空間における1つの仮想アドレスブロックとを対応さ
せるように構成しても良い。このような構成により、仮
想ネイティブ空間のうち使用されない無駄な空間がなく
なり第4の課題であるアドレス不足の恐れが解消され
る。また、仮想ネイティブ空間のうち使用されるアドレ
ス範囲が飛び飛びにならず、キャッシュのヒット率の向
上が図られ第3の課題を解決することが出来る。
【0015】具体的には、非ネイティブ命令セットプロ
グラムの飛込みアドレスを抽出する抽出手段は、非ネイ
ティブ命令セットのプログラムが記憶手段に格納される
際に、該記憶手段のデータ線およびアドレス線の信号を
監視するように構成することで上記飛込みアドレスを抽
出することが出来る。
【0016】また望ましくは、データ構造記憶手段に格
納されたスタック構造情報を1セット又は複数セット記
憶するスタック構造情報記憶手段を備え、スタック構造
情報の一時待機や復帰が可能なように構成すると良い。
この構成により、例えば、割込処理などが生じてその後
に元の処理に戻るような場合に、コード変換を途中の段
階から再開させることが出来る。さらに望ましくは、変
換された複数のネイティブコードを一時的に保持してそ
の順番を最適化してから出力する命令順序最適化バッフ
ァを備えると良い。それによりネイティブコードの並び
順の最適化が行え、第5の課題を解決することが出来
る。
【0017】また、非ネイティブコードをネイティブコ
ードに変換する命令デコーダが、特定の非ネイティブコ
ードの内容を限定した疑似コードの変換機能を有するよ
うに構成すると良い。このような手段によれば、予め非
ネイティブ命令セットのプログラムのうち可能なコード
を疑似コードに変換するように加工しておくことで、プ
ログラムの実行時に余計なネイティブコードの生成が省
かれ、プログラムをより高速に実行することが出来る。
すなわち、これにより第6の課題を解決することが出来
る。
【0018】また望ましくは、非ネイティブコードが連
続的に格納されたコードブロックと、仮想ネイティブ空
間におけるアドレスブロックとの割当情報が蓄積される
データベース(例えばデータベース237)を備え、プ
ロセッサから上記仮想ネイティブ空間へ読出し命令があ
った場合に上記データベースから読出し先アドレスに対
応する非ネイティブコードのコードブロックが検索され
て、該コードブロックのコード変換と変換後のプログラ
ムコードのプロセッサ側への供給が行われるように構成
すると良い。
【0019】このような手段によれば、非ネイティブ命
令セットのプログラムコードと、変換後のネイティブコ
ードが格納される仮想ネイティブ空間のアドレスブロッ
クとを、自由に割り当てることが可能となり、それによ
り無駄な空間の割り当てを排除して仮想ネイティブ空間
のアドレス不足を解消したり、変換後のネイティブコー
ドを適当な大きさのブロックに詰めて連続的に配列し、
キャッシュの有効利用やヒット率の向上を図ったりする
ことが出来る。
【0020】
【発明の実施の形態】以下、本発明の好適な実施例を図
面に基づいて説明する。 [第1実施例]図1は、本発明の第1実施例の命令セッ
ト変換装置を利用した計算機を示すブロック図である。
第1実施例の命令セット変換装置2は、CPU1と主記
憶3との間に接続されて、主記憶3に格納された非ネイ
ティブ命令セットのプログラムをネイティブコードに変
換してCPU1側に供給するものである。変換されたネ
イティブコードは、仮想的なアドレス空間である仮想ネ
イティブ空間に格納されたものとして扱われ、CPU1
はこの仮想ネイティブ空間のアドレスを用いてネイティ
ブコードをフェッチする。
【0021】命令セット変換装置2には、CPU1から
の読出しアドレスが仮想ネイティブ空間のものか否かの
判定、および、仮想ネイティブ空間である場合にそれに
対応する非ネイティブコードのアドレスの割り出しを行
うネイティブ空間判定部23と、非ネイティブコードか
らネイティブコードへの変換を行う命令列変換部21
と、主記憶3の読み書きの制御を行う記憶制御部24
と、命令列変換部21の出力と記憶制御部24からの読
出しデータの何れかを選択するセレクタ22とが設けら
れている。
【0022】図2には、主記憶に格納された非ネイティ
ブコードと仮想ネイティブ空間に設定された仮想アドレ
スブロックとの対応関係を表わす図を示す。なお、この
実施例では、非ネイティブ命令セットとして、1つのプ
ログラムコードが1バイトや複数バイトで表わされる可
変長コードで、それに付随する引数データやアドレスが
1バイトや1ワード(2バイト)で表わされる命令セッ
トを対象としている。
【0023】第1実施例の命令セット変換装置2におい
ては、非ネイティブコードはその単位データ量である例
えば1バイトごとに、仮想ネイティブ空間の1個の最適
化ブロックBRがにそれぞれ割り当てられている。最適
化ブロックBRは、仮想ネイティブ空間を所定アドレス
範囲ごとに区切った仮想アドレスブロックで、32バイ
ト分のコードを格納する大きさに設定されている。この
データ量はCPU1の内部キャッシュが1回のキャッシ
ュエントリで取り込むデータ量と同一のものである。な
お、このデータ量の整数倍など1回のキャッシュエント
リよりも大きくしても対応することが出来る。
【0024】そして、この最適化ブロックBRに、それ
と一対一に対応づけられた非ネイティブコードを変換し
たネイティブコードが仮想的に格納され、且つ、最適化
ブロックBRがいっぱいにならない範囲で、続く数個分
の非ネイティブコードを変換したネイティブコードも格
納されるように設定されている。ここで、仮想的に格納
されるとは、そのアドレスに対応づけられるということ
である。
【0025】例えば、非ネイティブコードが01h番地
から08h番地まで順に実行されていくようなプログラ
ムの場合では、先ず、CPU1から命令フェッチ用の読
出しアドレスとして1段目の最適化ブロックBRの先頭
アドレスが出力される。このアドレスはネイティブ空間
判定部23で仮想ネイティブ空間のものと判別され、そ
れに対応する主記憶3上のアドレス‘01h’が割り出
される。命令列変換部21はこのアドレスに基づき非ネ
イティブコードを主記憶3から順に読み出してネイティ
ブコードへの変換を行っていく。生成されたネイティブ
コードは1番目の最適化ブロックBRの先頭番地から順
に格納されていたかのように仮想ネイティブ空間のアド
レスに対応づけられる。
【0026】このように、非ネイティブコードからネイ
ティブコードへの変換が続けられて、例えば05h番地
の非ネイティブコードの変換で1段目の最適化ブロック
がいっぱいになると判断された場合には、そのコード変
換は行わず、その代わりにこの05h番地の非ネイティ
ブコードに対応する4段目の最適化ブロックBRへジャ
ンプするネイティブコードを生成して、1段目の最適化
ブロックBRの最後に付加されて1ブロック分の変換が
完了する。そして、この最適化ブロックBRのネイティ
ブコードがCPU1のキャッシュメモリに転送されて、
CPU1において順次実行されていく。その後、最適化
ブロックBRの最後に付加されたジャンプ命令により次
に4番目の最適化ブロックBRの先頭番地がCPU1か
ら命令フェッチ用の読出しアドレスとして出力され、4
段目の最適化ブロックBRに対応する05h番地以降の
コード変換が同様に行われる。
【0027】一方、CPU1から主記憶3へのデータ書
込みの要求があった場合には、命令セット変換装置2は
その書込みアドレスが仮想ネイティブ空間のものか判別
することなく主記憶3にそのままデータの書込みを行
う。また、CPU1から主記憶3に対するデータ読出し
の要求があった場合には、ネイティブ空間判定部23で
その読出しアドレスが仮想ネイティブ空間でないと判別
され、記憶制御24を介して主記憶3からデータの読出
しが行われる。そして、セレクタ22を介してCPU1
に送られる。そして、このような処理が繰り返されて非
ネイティブ命令セットのプログラムがネイティブコード
に変換されながらCPU1により実行されていくように
なっている。
【0028】なお、最適化ブロックBRを1回のキャッ
シュエントリの複数倍とした場合には、最適化ブロック
BR内の或るアドレスに読出し要求があった場合に、そ
の最適化ブロックBRの最初からネイティブコードへの
変換を行うとともに、読出しアドレスが命令列変換部2
1にも渡されるように構成して、該読出しアドレスが含
まれる1回のキャッシュエントリ分のみがキャッシュに
転送されるようにすることで同様に対応することが出来
る。
【0029】次に、各部の説明を詳細に行う。図3は、
ネイティブ空間判定部の内部構成を示すブロック図であ
る。ネイティブ空間判定部23は、仮想ネイティブ空間
の最大アドレスが設定される最大アドレスレジスタ23
1と、仮想ネイティブ空間の最小アドレスが設定される
最小アドレスレジスタ232と、読出しアドレスが仮想
ネイティブ空間のものか否か判別してセレクタ22の制
御信号を生成する比較器233と、主記憶3上の非ネイ
ティブ命令セットのプログラムの開始アドレスが設定さ
れる開始アドレスレジスタ234と、仮想ネイティブ空
間のアドレスからそれに対応する非ネイティブコードの
アドレスを計算する減算器235および加算器236と
から構成される。
【0030】非ネイティブコードの開始アドレスと、仮
想ネイティブ空間の最小アドレスおよび最大アドレス
は、プログラムの開始前に別のソフトウェア処理により
設定される。また、減算器235と加算器236による
計算は、先ず減算器235で下位5ビットがカットされ
て仮想ネイティブ空間のアドレスが「32」で除算さ
れ、且つ、仮想ネイティブ空間の最小アドレスが減算さ
れ、次いで、加算器236での非ネイティブコードの開
始アドレスが加算されることで、32倍の大きさの仮想
ネイティブ空間のアドレスからそれに対応する非ネイテ
ィブコードのアドレスが求められる。
【0031】図4は、命令列変換部21の内部構成を示
すブロック図である。図4において、アドレスレジスタ
部211は、変換するべき非ネイティブコートのアドレ
スを格納するレジスタであり、記憶制御部24に対して
そのアドレスの上位ビットを送信して1ブロック分の非
ネイティブコードを読み出させる。読み出された1ブロ
ックの非ネイティブコードは、非ネイティブバッファ2
12に格納される。また、アドレスレジスタ部211は
下位ビットを非ネイティブバッファ212に送って、読
み込んだ1ブロックの非ネイティブコードのうち指定ア
ドレスの非ネイティブコードを選択して命令デコーダ2
15に出力させる。非ネイティブバッファ212には、
命令デコーダ215からの更新信号も入力され、それに
より順次アドレス順に非ネイティブコードが出力されて
いく。
【0032】非ネイティブバッファ212の非ネイティ
ブコードが尽きた場合には、命令デコーダ215からの
更新信号により値が更新され、次の1ブロックの非ネイ
ティブコードが非ネイティブバッファ212に読み出さ
れる。このように、CPU1から命令フェッチのために
1個の読出しアドレスが出力されただけで、複数の非ネ
イティブコードが読み出されて1回のキャッシュエント
リ分のコード変換が行えるようになっている。マッピン
グデータ構造213は、スタックデータをレジスタに割
り当てたときの対応関係などが含まれるタック構造情報
と、変数をレジスタに割り当てたとき割当状況が示され
る変数割当情報が格納されるレジスタ群であり、さら
に、命令デコーダ215からの制御信号によって各情報
が更新できるように構成されている。
【0033】図5には、上記マッピングデータ構造21
3のうちのスタック構造情報のデータ構成図を示す。ス
タック構造情報は、図5のようにデータテーブル形式に
構成されたものである。スタック構造情報の各行は予め
スタックの所定位置と対応付けられている。例えば、1
行目がスタックポインタが指し示すスタックトップのエ
ントリに対応し、2行目以降はスタックトップ側から2
段目以降のエントリと順に対応するように設定されてい
る。また、スタック構造情報を格納するレジスタ群は、
各行のデータを上下にシフトしやすい構成になってい
る。
【0034】スタック構造情報の各行のデータ項目は、
その行が有効であることを示すV(バリッド)ビット、
スタックデータをレジスタに割り当てていることを示す
R(レジスタ)ビット、複数のスタックエントリが1つ
のレジスタに割り当てられていることを示すSAMEビ
ット、割り当て先のレジスタ番号又は定数値が入力され
るデータフィールドから構成される。例えば、1行目の
VビットとRビットが有効でデータフィールドにレジス
タ番号(例えば「1」)が入力されていれば、1番レジ
スタにスタックトップのエントリが割り当てられている
ことが示され、2行目のVビットとRビットが有効でデ
ータフィールドにレジスタ番号(例えば「2」)が入力
されていれば、2番レジスタにスタックトップから2段
目のエントリが割り当てられていることが示される。
【0035】また、Vビットが有効でRビットが無効の
場合はレジスタ割当ではなく、データフィールドに直接
スタックデータが入力されていることが示される。ま
た、SAMEビットが有効のときには、他の行でも同一
番号のレジスタにスタック割り当てが行われていること
が示される。これは、そのスタックデータが開放される
際などに、レジスタに格納されているデータ自体は他の
スタックエントリにまだ割り当てられているので、開放
されないように制御するために使用されるものである。
加えて、スタック構造情報には、別途、スタックの深さ
情報が入力されるデプスフィールドが設けられている。
この深さ情報により、スタックがレジスタと主記憶3と
の両方にまたがって割り当てられている場合に、それを
識別することが可能となっている。
【0036】非ネイティブ命令デコーダ215は、非ネ
イティブバッファ212から出力された非ネイティブコ
ードと、マッピングデータ構造213のスタック構造情
報および変数割当情報とに基づき、上記非ネイティブコ
ードの内容を実現するネイティブコードを最大2つのプ
リミティブとして生成する。プリミティブとは、命令デ
コーダ215が生成する命令列の基本単位であり番号で
表わされる。そして、このプリミティブ番号と付随する
パラメータとがプリミティブ生成器216a,216b
に送られて1個以上のネイティブコードが生成される。
プリミティブ生成器216a,216bが2つあるのは
生成するネイティブコードのコード列が長い場合に処理
速度を上げるためである。変換速度を速める必要がなけ
れば1つでも良い。非ネイティブ命令デコーダ215
は、プリミティブの生成のほか、生成したプリミティブ
に合わせてマッピングデータ構造213の更新を行う。
【0037】ここで、マッピングデータ構造213を参
照しながら行われる非ネイティブコードの変換例につい
て幾つか説明する。図6には、スタックを使用する非ネ
イティブコードの第1の変換例の説明図を示す。マッピ
ングデータ構造213の初期値はレジスタ割り当てなし
の状態である。この初期状態で、例えば、「PUSH
_A」(A番地のデータをスタックに格納)、「PU
SH_B」(B番地のデータをスタックに格納)、
「ADD」(スタックトップと2段目のスタックデータ
を取り出して加算しスタックトップに格納)、「PO
P_C」(スタックトップのデータを取り出してC番地
に格納)と云った4つのスタックを用いる非ネイティブ
コードが順に入力されたとする。
【0038】この場合、先ず、「PUSH_A」は
「mov_A,R1」(A番地のデータを1番レジスタ
に移動)と云うスタックデータをレジスタに割り当てる
ネイティブコードに変換され、加えて、マッピングデー
タ構造213のスタック構造情報の1行目が更新され
て、1番レジスタがスタックトップのエントリに割り当
てられていることが登録される。次に、「PUSH_
B」は「mov_B,R2」(B番地のデータを2番レ
ジスタに移動)と云うスタックデータをレジスタに割り
当てるネイティブコードに変換される。加えて、スタッ
ク構造情報の1行目が2行目にシフトされ、2行目に新
たなデータが入力されて、2番レジスタがスタックトッ
プのエントリに割り当てられ、且つ、1番レジスタがス
タックトップから2段目のエントリに割り当てられてい
ることが登録される。
【0039】「ADD」は「ADD_R2,R1」
(1番レジスタに2番レジスタの値を加算)と云うレジ
スタを用いたネイティブコードに変換され、スタック構
造情報では2行目が1行目にシフトされ、1番レジスタ
がスタックトップのエントリに割当られていることが登
録される。 「POP_C」は「mov_R1,C」(C番地に1
番レジスタのデータを移動)というネイティブコードに
変換され、スタック構造情報は全行でVビットが無効と
されて、スタックが開放されたことが登録される。この
ように、スタックデータがレジスタに割り当てられるの
で、それにより高速なスタック処理が可能となる。
【0040】図7には、スタックを使用する非ネイティ
ブコードの第2の変換例の説明図を示す。スタックに複
数のデータがエントリされている状態で、「swap_
1,2」(スタックのトップと2段目の値を入れ替え
る)という非ネイティブコードが入力されたとする。こ
の場合には、ネイティブコードの生成は不要とされ、ス
タック構造情報の1行目と2行目の入れ替えを行うこと
で、この非ネイティブコードの処理が完了される。
【0041】図8には、スタックを使用する非ネイティ
ブコードの第3の変換例の説明図を示す。スタックに複
数のデータがエントリされている状態で、「dup_
1」(スタックトップの値をコピーしてスタックに格
納)という非ネイティブコードが入力されたときには、
ネイティブコードの生成は不要とされ、スタック構造情
報の各行を下にシフトさせ、1行目に2行目に割り当て
られているレジスタ番号と同じ番号を登録することで、
この非ネイティブコードの処理が完了される。
【0042】このように、マッピングデータ構造213
のスタック構造情報を介して前後の非ネイティブコード
の内容を関連させた状態でコード変換を行うことが出来
るので、無駄なコードが省かれた最適化されたネイティ
ブコードの生成が行われるようになっている。その他、
非ネイティブコードとして、「PUSHi_X12」
(定数X12をスタックに格納)など定数を引数に持っ
たコードが命令デコーダ215入力された場合には、こ
の定数をスタック構造情報のデータエントリにそのまま
入力することで、変換後のネイティブコードの数をさら
に減らすことが出来る。
【0043】また、同様に、非ネイティブコードで使用
されるローカル変数をレジスタに割り当てるとともに、
その割当状況をマッピングデータ構造の変数割当情報に
登録しておくようにすることで、例えば、良く使われる
変数をレジスタに割り当てて処理の高速化を図ることが
出来るとともに、変数割当情報を介して前後の非ネイテ
ィブコードを関連させながらコード変換できるので、そ
れにより、最適化されたネイティブコードの生成を行う
ことが出来る。
【0044】命令デコーダ215においてローカル変数
をレジスタに割り当てる条件は次の1〜3のような幾つ
かの例を採用することが出来る。 1.非ネイティブコードを生成するコンパイラが使用頻
度の高いローカル変数を低いアドレスに置くようにして
いる場合にそのローカル変数領域の先頭のいくつかのロ
ーカル変数をレジスタ割当てにする。 2.ローカル変数への代入処理が出現した場合にその代
入値がレジスタに入った時点で無条件にその変数をその
レジスタに割り当てる。 3.ローカル変数を参照する処理にLRU(least rece
ntly used)アルゴリズムを適用して良く使われるロー
カル変数を割り出し、それをレジスタに割り当てる。
【0045】非ネイティブ命令デコーダ215は、上記
のようなコード変換処理やマッピングデータ構造213
の更新処理のほかに、ネイティブコードを最適化ブロッ
クBRの1個分生成して終了するために、非ネイティブ
コードの読み込み数の制御をしたり、生成したネイティ
ブコードのトータル長を監視して最適化ブロックBRの
最後処理のためのコード生成を行う。すなわち、非ネイ
ティブ命令デコーダ215は、デコードする非ネイティ
ブコードのコード長を求めて、非ネイティブバッファ2
12に次のコードを出力させる制御信号を送ったり、必
要に応じてアドレスレジスタ部211の更新をして次の
非ネイティブコードのブロックを非ネイティブバッファ
212に読み込ませる制御を行う。
【0046】また、非ネイティブ命令デコーダ215
は、生成されたネイティブコードのトータルのコード長
がカウントされるネイティブアドレス部219の値を監
視するとともに、次にコード変換しようとしている非ネ
イティブコードのコード変換後のコード長の最大値を求
め、これをネイティブアドレス部219の値に加えるこ
とで、最終的に最適化ブロックBRの大きさを超えない
かどうか判定する。そして、超えてしまう場合にはその
コード変換を行う代わりに、その非ネイティブコードに
対応する最適化ブロックBRへジャンプするネイティブ
コードを生成して、一つの最適化ブロックBRのネイテ
ィブコードの生成処理を完了する。また、最後のジャン
プ命令の前には、スタックやローカル変数のレジスタ割
当をメモリ側へ移すネイティブコードを生成して、マッ
ピングデータ構造213やレジスタの内容を開放してお
く。
【0047】非ネイティブ命令デコーダ215は、上述
の機能に加えて、さらに非ネイティブ命令セットに含ま
れない疑似コードを対応するネイティブコードに変換す
る機能も有している。疑似コードとしては、非ネイティ
ブ命令セットに含まれる特定の非ネイティブコード(例
えば「PUSH_pointer」:ポインタをスタッ
クに格納すると云うコード)の内容を限定したコード
(例えば「PUSH_object_pointe
r」:オブジェクトのポインタをスタックに格納すると
云うコード)などが採用されており、特定コードの内容
が限定されていることから、変換後のネイティブコード
のコード数が少なくなるようになっている。
【0048】すなわち、特定の非ネイティブコード「P
USH_pointer」では、引数が「NULL」で
ないことをチェックするネイティブコードも生成しなけ
ればならないので、変換後のネイティブコードの数は多
くなるが、疑似コード「PUSH_object_po
inter」であれば引数は「NULL」でないことが
わかっているので、引数をチェックするネイティブコー
ドを省くことができて、変換後のネイティブコードの数
を減らすことが出来る。
【0049】このような疑似コードの変換機能を利用す
ることで、非ネイティブ命令デコーダ215のコード変
換をさらに最適化して、プログラム処理をさらに高速化
することが可能である。疑似コードを利用するには、例
えば、非ネイティブ命令セットのプログラムのコンパイ
ル時などに、上記疑似コードに対応する限定された内容
の処理があった場合に、非ネイティブコードを用いずに
疑似コードに変換させてプログラムをコンパイルし、こ
の疑似コードを含んだプログラムコードを主記憶3に格
納して実行させるようにすれば良い。また、他のソフト
ウェアにより疑似コードに変換可能な部分を検索させて
疑似コードと変換させるようにしても良い。
【0050】図4において、シーケンス番号214は、
コード変換する非ネイティブコードが複数バイトあり2
つのプリミティブの生成では対応できず、複数のマシン
サイクルを必要とする場合に、このマシンサイクルをカ
ウントするもので、初期値はゼロである。非ネイティブ
命令デコーダ215は、非ネイティブコードのコード変
換に複数のマシンサイクルが必要であることを認識する
と、最初の2つのプリミティブを出力するとともにシー
ケンス番号214をカウントアップする。続くマシンサ
イクルでは命令デコーダ215はシーケンス番号214
の値が「1」であることに基づき3番目以降のプリミテ
ィブを出力する。もしそこで終わりならばシーケンス番
号214をクリアして、その非ネイティブコードのコー
ド変換が完了する。
【0051】連接器217は、2つのプリミティブから
生成されたネイティブコードを結合して命令順序最適化
バッファ218に送出する。また、単位長さのネイティ
ブコードが送出される毎に、ネイティブアドレス219
にアドレス更新の制御信号を出力する。ネイティブアド
レス219は生成するネイティブコードの最適化ブロッ
クBR内での相対アドレスが格納され、連接器217か
らの制御信号に応じてアドレス値が更新される。
【0052】命令順序最適化バッファ218は、連接器
から受け取ったネイティブコード列を一定のマシンサイ
クルだけ保持し、その間に処理結果を変えない範囲でネ
イティブコードの順序を入れ替えることによりネイティ
ブコード列の実行効率を向上させる。これは、例えば、
プロセッサの処理方式(例えば1サイクルで複数の命令
コードの発行が可能なスーパースカラ方式)や、プロセ
ッサのパイプライン構造に合わせて、命令コードの順序
を変えることでデータハザードや制御ハザードを少なく
して実行効率を向上させるものであり、従来よりプログ
ラムのコンパイル時などに適用されているものである。
今回は、それをハード構成により実現したものである。
【0053】すなわち、バッファ218の先頭付近のネ
イティブコードの組み合わせでハザード(競合)発生の
有無を判定してハザードが発生する場合は順番を入れ替
えてハザードを回避する。処理結果の同一性は、バッフ
ァ218に格納しているネイティブコードでデータの入
出力に使われるリソースのアドレス(レジスタ番号やメ
モリアドレスなど)を抽出し、或るリソースにデータ入
力する命令と同じリソースからデータ出力する命令との
間で追い越しを禁止することにより保証する。ネイティ
ブバッファ210は、命令順序最適化バッファ218か
ら出力されたネイティブコードを、必要ならバッファ2
18のワードにまとめて整列するなどバッファリングし
てCPU1のキャッシュに転送する。
【0054】以上のように、この第1実施例の命令セッ
ト変換装置2によれば、スタックを利用した非ネイティ
ブコードのコード変換を行う際に、スタックのエントリ
をレジスタに効率的に割り当てることが出来るので、ス
タックを主記憶3に設ける場合に較べて、スタック処理
の高速化を図ることが出来る。また、マッピングデータ
構造213のスタック構造情報や変数割当情報などを介
して前後の非ネイティブコードの関連を考慮しながらネ
イティブコードへの変換が可能なので、無駄なコードが
省かれた最適化されたネイティブコードの生成を行うこ
とが出来る。さらに、非ネイティブ命令デコーダ215
による疑似コードの変換機能の利用や、命令順序最適化
バッファ218の最適化処理により、さらにネイティブ
コードが最適化されて、プログラム処理を高速に実行す
ることが可能となる。
【0055】[第2実施例]図9には、本発明の第2実
施例の命令セット変換装置を利用した計算機のブロック
図を示す。第2実施例においては、第1実施例と共通す
る部分が多いため共通する部分については同符号を付し
て説明を省略する。第2実施例の命令セット変換装置2
Aは、第1実施例の命令セット変換装置2の構成要素の
うち、ネイティブ空間判定部23と命令列変換部21の
構成を変更し、構造認識部25を追加したものである。
【0056】図12には、構造認識部25の内部構成の
ブロック図を示す。構造認識部25には、予め非ネイテ
ィブ命令セットのプログラムが格納される主記憶3上の
アドレスが設定されており、該プログラムが外部から主
記憶3にロードされる際に、アドレス線10とライトデ
ータ線の信号を観測して、該プログラムを解析すること
で、プログラム中の飛込み点を抽出してそのデータベー
スを作成する。
【0057】詳細には、ファイル解釈ステートマシン2
51に予め他のソフトウェア処理により非ネイティブ命
令セットのプログラムの格納領域が設定され、その格納
領域へのCPU1のライト動作を検出するとファイル構
造の認識動作が開始される。認識動作が開始されると、
先ず、プログラムのヘッダー部分の解釈が行われてプロ
グラム本体のアドレスが求められる。そして、CPU1
がそのプログラム本体のアドレスへライト動作をした時
点で実際の飛び込み点データベースの作成が開始され
る。ファイル解釈ステートマシン251は、個々の非ネ
イティブコードからジャンプ命令などプログラムカウン
タを変更する命令を抽出して、それをブランチ先計算部
252に送る。プランチ先計算部252は非ネイティブ
コードの内容と引数アドレスとからジャンプ先のアドレ
スを計算して飛込み点データベース253に送る。飛び
込み点データベース253はプログラムごとにこの飛込
みアドレスを蓄積しデータベース化する。飛込み点デー
タベース253の情報量は膨大になりやすいので、デー
タ量が圧縮されるように次のようなデータ構造にされ
る。
【0058】図14には、飛込み点データベースの具体
例を説明する図を示す。同図(a)は非ネイティブ命令
セットのプログラムと飛込み点データの対応関係を示す
もの、(b)は飛込み点データの要素データのデータ項
目を示すものである。飛込み点データベース253は、
図14(a)に示すように、非ネイティブ命令セットの
プログラムを一定の長さ(例えば64バイト)毎に区切
った各ブロックに対して、このブロックより一桁程度小
さいデータブロック(例えば32ビット)をデータベー
スの要素データEとして対応づけ、さらに、プログラム
のブロックとは対応づけされない補助的なデータブロッ
クFが付加されたデータ構成である。そして、各要素デ
ータEに、対応する64バイトのブロック中に含まれる
飛込み点(エントリポイント)EPの情報が格納され
る。また、飛込み点EPの数が多くてその情報が1個の
要素データEに収まらない場合には、補助的なデータブ
ロックFが使われるようになっている。
【0059】要素データEは、1番目の飛込み点の情報
(ブロック内アドレス)が登録される1番フィールドF
1と、2番目以降の飛込み点の情報(前の飛込み点から
の差分アドレス)が登録される数個のフィールドF2,
F3…とを有している。1個前の飛込み点がブロック内
の最終番地近くになるほど、次の飛込み点の差分アドレ
スの最大値は小さくなるので、2番目移行のフィールド
F2,F3…は、前の飛込み点の位置に応じてビット長
が必要最小になるように可変長に設定されている。さら
に、要素データEの終了側には、飛込み点EPの数が多
くて溢れたことを示すフラグビットMと、溢れた飛込み
点の情報を格納する補助データブロックFの番地を示す
アドレスフィールドSAとが設けられている。補助デー
タブロックFも要素データEと同様のデータ構造になっ
ている。このような飛込み点データベースは、主記憶3
上に設けることができるが、その大きさが十分小さけれ
ば、主記憶3以外の専用RAMに格納することも可能で
ある。
【0060】図10には、第2実施例に係るネイティブ
空間判定部のブロック図を示す。第2実施例に係るネイ
ティブ空間判定部23aは、第1実施例で仮想ネイティ
ブ空間のアドレスからそれに対応する非ネイティブコー
ドのアドレスを計算する構成(開始アドレス234、減
算器235、加算器236)を削除し、替わりにデータ
ベース237と変換範囲判定部238とを追加したもの
である。
【0061】図11には、データベース237の内容と
それに基づく非ネイティブコードと仮想ネイティブ空間
との対応関係を表わした説明図を示す。データベース2
37には、仮想ネイティブ空間でネイティブコードが連
続的に格納される最適化ブロックBRaと、非ネイティ
ブコードにおける1つの飛込み点から次の飛込み点まで
のコードブロック(非ネイティブコード群)BN1,B
N2…との対応関係を検索することが可能な割当テーブ
ルが構築される。
【0062】詳細には、仮想ネイティブ空間を均等に分
割してそれぞれ同じアドレス範囲の最適化ブロックBR
aを設定し、これら複数の最適化ブロックBRa…とデ
ータベース237の割当テーブルの各行とを一対一に対
応づけておくとともに、非ネイティブコードの各コード
ブロックBN1,BN2…の先頭アドレスを割当テーブ
ルの適宜の行に動的に割り当てて、上記データベースが
実現される。非ネイティブコードの各コードブロックB
N1,BN2…の先頭アドレスは、構造認識部25の飛
込み点データベースを利用して取得する。なお、非ネイ
ティブコードのコードブロックBNiが一定以上の長さ
になって、変換後のネイティブコードが最適化ブロック
BRaに収まらない恐れが生じる場合には、該コードブ
ロックBNiを一定の長さ以下になるように分割して扱
うことで同様に対応することが出来る。
【0063】ネイティブ空間判定部23aにおいて、C
PU1からのリード要求のあったアドレスが仮想ネイテ
ィブ空間かどうか判定する仕組みは第1実施例のものと
同じである。仮想ネイティブ空間のアドレスであった場
合には、該アドレスを基にデータベース237を検索し
てそれに対応する非ネイティブコードのアドレスを求
め、この非ネイティブコードのアドレスがデータベース
237から変換範囲判定部238に送られる。変換範囲
判定部238は、CPU1から命令フェッチのために出
された読出しアドレスが、仮想ネイティブ空間の各最適
化ブロックBRa(図11参照)の先頭番地であれば、
データベース237から供給されたコードブロックBN
iの先頭番地を命令列変換部21aに送り、命令列変換
部21aでこのコードブロックBNiの先頭からコード
変換を行わせる。
【0064】このようにコードブロックBNiの先頭
(すなわち非ネイティブコードの飛込み点)からコード
変換を開始する方式では、通常、CPU1の命令フェッ
チは最適化ブロックBRaの先頭から行われる。しかし
ながら、他の割込み処理などによりネイティブコードの
実行が中断された場合には、割込み処理が終了して元の
処理に復帰する際に、アドレスブロックBNiの中間か
らCPU1の命令フェッチが開始される場合がある。
【0065】このようにアドレスブロックBNiの中間
から命令フェッチが行われた場合には、何も工夫がない
とアドレスブロックBNiの先頭からネイティブコード
への変換を行わなければならず、実際に命令フェッチが
行われた中間点のネイティブコードを供給するまでにタ
イムロスが生じてしまう。そこで、この第2実施例の命
令セット変換装置では、ネイティブ空間判定部23aの
変換範囲判定部238と、命令列変換部21aのスタッ
ク構造情報記憶手段としての状態保存部213sとが有
する次の機能により、上記のタイムロスが生じないよう
になっている。
【0066】すなわち、命令列変換部21aでは、通
常、1個のコードブロックBNiのコード変換が連続的
に行われるが、割込みなどがあって1つのコードブロッ
クBNiの途中でコード変換が中断された場合には、ど
の非ネイティブコードのアドレスで中断があったかアド
レスレジスタ部211aの値に反映されているので、変
換範囲判定部238はこのアドレスレジスタ部211a
の値を読み込んで、どのアドレスでコード変換の中断が
行われたかを記憶しておく。
【0067】そして、割込み処理が終わって中断した処
理が再開されると、CPU1から仮想ネイティブ空間の
アドレスブロックの途中から命令フェッチが行われる
が、変換範囲判定部238はこの読出しアドレスがアド
レスブロックの途中であることを検出し、そのアドレス
ブロックの途中で中断したアドレス(非ネイティブコー
ドのアドレス)が先に記憶されたものか確認する。そし
て、記憶されていたものであればその中断したアドレス
を命令列変換部21aのアドレスレジスタ部211aに
送り、さらに、命令列変換部21aの状態保存部213
sにコード変換中に退避されたマッピングデータ構造2
13aの情報を検索して、マッピングデータ構造213
aに回復させる制御信号を出力する。それにより、命令
列変換部21aでは、コード変換が中断された個所が行
われ、上記のタイムロスを防ぐことが出来る。
【0068】図9には、命令列変換部21aの内部構成
のブロック図を示す。この命令列変換部21aは、第1
実施例の命令列変換部21に対して、アドレスレジスタ
部211aとマッピングデータ構造213aに少し機能
を足し、さらに状態保存部213sを追加した構成であ
る。アドレスレジスタ部211aには、変換しようとし
ている非ネイティブコードのアドレスだけでなく、変換
の終わりのアドレスがネイティブ空間判定部23aから
渡されて保持される。そして、非ネイティブ命令デコー
ダ215からのアドレス更新指示で、変換の終わりのア
ドレスを越える場合はそれで非ネイティブコードの供給
を終了させる。従って、第1実施例で非ネイティブ命令
デコーダ215が行っていた最適化ブロックBRを超え
るか否かの判定は第2実施例では不要となる。
【0069】マッピングデータ構造213aは、第1実
施例のマッピングデータ構造213の機能に加え、マッ
ピングデータ構造213aの内容を状態保存部213s
に保存したり、状態保存部213sに保存されているデ
ータからマッピングデータ構造の内容を回復したりする
機能を備えている。状態保存部213sは、マッピング
データ構造213aの内容を複数セット保存することが
可能なものである。マッピングデータ構造213aの状
態の保存は、割込み等でコード変換が中断されたとき
に、図10の変換範囲判定部238から状態保存部21
3sに出力される保存の制御信号に基づいて行われる。
また、状態の回復は、中断していたアドレスから命令フ
ェッチが行われたときに、図10の変換範囲判定部23
8から状態保存部213sに出力される回復の制御信号
に基づいて行われる。
【0070】以上のように、この第2実施例の命令セッ
ト変換装置2Aによれば、図11に示すように、非ネイ
ティブコードの1つの飛込み点から次の飛込み点ま前ま
でのブロックBN1,BN2…ごとに、仮想ネイティブ
空間の最適化ブロックBRaを対応づけているので、第
1実施例において図2に示したように仮想ネイティブ空
間で全く使用されないブロックがあまり生じず、小規模
なシステムであってもアドレス空間不足になることがな
い。
【0071】また、連続的にコード変換を行う量が多け
れば多いほど、マッピングデータ構造213aの情報を
有効に活用できる期間が長くなるので、より最適化され
たコード変換を行うことが出来るが、第1実施例のよう
な非ネイティブコードと仮想ネイティブ空間との対応づ
けの方式では、最適化ブロックBRの容量を大きくする
と、それだけ仮想ネイティブ空間の使われないブロック
数や量が多くなり、仮想ネイティブ空間のアドレス不足
という問題が深刻化してしまうため、あまり最適化ブロ
ックBRの容量を大きくすることが出来なかった。それ
に対して、第2実施例の対応づけの方式では、非ネイテ
ィブコードの1つの飛込み点から次の飛込み点まで連続
的にコード変換できるので、連続的にコード変換をして
最適化できる非ネイティブコード列の長さを長くするこ
とが出来る。
【0072】また、割り込み処理などで、ブロックの途
中からコード変換を開始しなければならないときでも、
中断時にマッピングデータ構造213aの内容を保存し
ておき、再開時にその内容を回復させて途中からコード
変換を再開させることが出来るので、ブロックの最初か
らコード変換をするのに比べてタイムロスを少なくする
ことが出来る。
【0073】以上本発明者によってなされた発明を実施
例に基づき具体的に説明したが、本発明は上記実施例に
限定されるものではなく、その要旨を逸脱しない範囲で
種々変更可能であることはいうまでもない。例えば、ス
タック構造情報が有効に活用されるコード変換の具体例
を図6〜図9に示したが、ここに示される非ネイティブ
コードの内容や変換後のネイティブコードの内容は一例
に過ぎず、CPUのアーキテクチャーなどに応じて適宜
変更されるものである。
【0074】
【発明の効果】本願において開示される発明のうち代表
的なものによって得られる効果を簡単に説明すれば下記
のとおりである。すなわち、本発明に従うと、プロセッ
サが対応していない命令セットのプログラムを、プロセ
ッサが対応する命令セットのコードに変換してプロセッ
サに実行させることが出来るとともに、プログラム処理
で重要なスタック処理をプロセッサのレジスタを用いて
高速に実行できるという効果がある。また、以前のプロ
グラムコードによる処理内容が反映されるスタック構造
情報を参照しながらコード変換が行われるので、前後の
プログラムコードを考慮したコード変換の最適化を図る
ことが出来るという効果がある。
【図面の簡単な説明】
【図1】本発明の第1実施例の命令セット変換装置を利
用した計算機を示すブロック図である。
【図2】主記憶に格納された非ネイティブ命令セットの
プログラムと仮想ネイティブ空間のアドレスブロックで
ある最適化ブロックとの対応関係を表わす図である。
【図3】図1のネイティブ空間判定部の内部構成を示す
ブロック図である。
【図4】図1の命令列変換部の内部構成を示すブロック
図である。
【図5】図4のマッピングデータ構造部に形成されるデ
ータテーブルの内容を示す図である。
【図6】スタックを使用する非ネイティブコードの第1
の変換例を示す説明図である。
【図7】スタックを使用する非ネイティブコードの第2
の変換例を示す説明図である。
【図8】スタックを使用する非ネイティブコードの第3
の変換例を示す説明図である。
【図9】本発明の第2実施例の命令セット変換装置を利
用した計算機を示すブロック図である。
【図10】図9のネイティブ空間判定部の内部構成を示
すブロック図である。
【図11】図10のデータベースの内容と非ネイティブ
コードと仮想ネイティブ空間との対応関係を表わした説
明図である。
【図12】図9の構造認識部の内部構成を示すブロック
図である。
【図13】第2実施例に係る命令列変換部の内部構成を
示すブロック図である。
【図14】飛込み点データベースの具体例を説明する図
で、(a)は非ネイティブ命令セットのプログラムと飛
込み点データの対応関係を示すもの、(b)は飛込み点
データの単位要素のデータ項目を示すものである。
【符号の説明】
1 CPU 2,2a 命令セット変換装置 3 主記憶 21,21a 命令列変換部 23,23a ネイティブ空間判定部 25 構造認識部 213,213a マッピングデータ構造 213s 状態保存部 215 非ネイティブ命令デコーダ 218 命令順序最適化バッファ 219 ネイティブアドレス 237 データベース 238 変換範囲判定部 251 ファイル解釈ステートマシン 252 ブランチ先計算部 253 飛込み点データベース
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 9/38 310 G06F 9/42 330R 9/42 330 12/08 501D 9/455 523C 12/08 501 551Z 523 9/30 320C 551 9/44 310A Fターム(参考) 5B005 JJ13 KK12 MM01 MM31 NN12 RR01 5B013 AA05 AA12 5B033 AA01 AA03 AA04 AA10 AA15 BA03 BA05 BE00 DB01 DB08 DE07 EA17

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 プロセッサと該プロセッサに対応してい
    ない非ネイティブ命令セットのプログラムが格納された
    記憶手段との間に設けられ、記憶手段から読み出された
    上記プログラムをプロセッサに対応した等価なネイティ
    ブ命令セットのプログラムに変換してプロセッサ側に供
    給する命令セット変換装置であって、 プログラムで使用されるスタックデータをプロセッサの
    レジスタに割り当てる際のレジスタ番号とスタック上の
    位置との対応関係が示されるスタック構造情報を格納す
    るデータ構造記憶手段と、 読み出された上記非ネイティブ命令セットのプログラム
    コードである非ネイティブコードと上記スタック構造情
    報とに基づいて上記ネイティブ命令セットのプログラム
    コードであるネイティブコードへの変換および上記スタ
    ック構造情報の更新を行う命令デコーダとを備え、 上記命令デコーダは、上記非ネイティブコードがスタッ
    クを使用する内容である場合に、スタックデータをレジ
    スタに割当てて処理するネイティブコードを生成すると
    ともに、この割当てを反映させて上記スタック構造情報
    の更新を行うように構成されていることを特徴とする命
    令セット変換装置。
  2. 【請求項2】 上記プロセッサは上記記憶手段からキャ
    ッシメモリを介してデータの読み書きを行うとともに、 変換後のネイティブコードが仮想的に格納される仮想ネ
    イティブ空間において上記キャッシュメモリの1回のエ
    ントリ量の整数倍の容量を有する互いに重複のない複数
    の仮想アドレスブロックが設定され、 上記非ネイティブ命令セットのプログラムの1単位デー
    タ量ごとに1個の上記仮想アドレスブロックが対応付け
    られるとともに、 上記プロセッサから仮想アドレスへ読出し要求があった
    場合に、この仮想アドレスが含まれる仮想アドレスブロ
    ックに対応付けられた非ネイティブコードから連続する
    複数の非ネイティブコードの変換を、変換後のネイティ
    ブコードが仮想アドレスブロックに収まる範囲で行い、
    該変換されたネイティブコードのうち読出し要求のあっ
    た仮想アドレスのコードを含む1回のエントリ分のネイ
    ティブコードが上記キャッシュメモリに転送されるよう
    に構成されていることを特徴とする請求項1記載の命令
    セット変換装置。
  3. 【請求項3】 上記非ネイティブ命令セットのプログラ
    ムの飛込みアドレスを抽出する抽出手段と、該抽出手段
    により予め抽出された飛込みアドレスが蓄積されるデー
    タベースとを備え、 非ネイティブ命令セットのプログラムの1つの飛込みア
    ドレスから次の飛込みアドレスにわたる1ブロックの非
    ネイティブコード群が、変換後のネイティブコードが仮
    想的に格納される仮想ネイティブ空間において1つの連
    続する仮想アドレスブロックに対応付けられて、上記1
    ブロックの非ネイティブコード群から変換されたネイテ
    ィブコードが対応付けられた仮想アドレスブロックに仮
    想的に格納されることを特徴とする請求項1記載の命令
    セット変換装置。
  4. 【請求項4】 上記データ構造記憶手段に格納されたス
    タック構造情報を1セット又は複数セット記憶するスタ
    ック構造情報記憶手段を備え、 上記データ構造記憶手段から上記スタック構造情報記憶
    手段へスタック構造情報を移動させ、且つ、上記スタッ
    ク構造情報記憶手段から上記データ構造記憶手段へスタ
    ック構造情報を復帰可能としたことを特徴とする請求項
    1〜3の何れかに記載の命令セット変換装置。
  5. 【請求項5】 上記命令デコーダにより変換された複数
    のネイティブコードを一時的に保持するとともに、これ
    ら複数のネイティブコードの順番を最適化する命令順序
    最適化バッファを備え、 該命令順序最適化バッファにより順番が最適化された複
    数のネイティブコードがプロセッサ側へ供給されるよう
    にしたことを特徴とする請求項1〜4の何れかに記載の
    命令セット変換装置。
  6. 【請求項6】 プロセッサと該プロセッサに対応してい
    ない非ネイティブ命令セットのプログラムが格納された
    記憶手段との間に設けられ、記憶手段から読み出された
    上記プログラムをプロセッサに対応した等価なネイティ
    ブ命令セットのプログラムに変換してプロセッサ側に供
    給する命令セット変換装置であって、 上記非ネイティブ命令セットのプログラムコードである
    非ネイティブコードを上記ネイティブ命令セットのプロ
    グラムコードであるネイティブコードに変換する命令デ
    コーダを有し、 該命令デコーダは、特定の非ネイティブコードの内容を
    限定したもので上記非ネイティブ命令セットに含まれな
    い疑似コードをネイティブコードに変換する機能を有
    し、上記疑似コードの限定された内容により上記特定の
    非ネイティブコードを変換した場合よりも上記疑似コー
    ドを変換した場合の方が変換後のネイティブコードの数
    が少なくされることを特徴とする命令セット変換装置。
  7. 【請求項7】 プロセッサと該プロセッサに対応してい
    ない非ネイティブ命令セットのプログラムが格納された
    記憶手段との間に設けられ、記憶手段から読み出された
    上記プログラムをプロセッサに対応した等価なネイティ
    ブ命令セットのプログラムに変換してプロセッサ側に供
    給する命令セット変換装置であって、 上記非ネイティブ命令セットのプログラムのうち複数の
    プログラムコードが連続的に格納されているコードブロ
    ックごとに、仮想的なアドレス空間において変換後のプ
    ログラムコードが仮想的に格納される一連の仮想アドレ
    スブロックがそれぞれ割り当てられるとともに、 上記コードブロックと上記仮想アドレスブロックとの割
    当情報が蓄積されるデータベースを備え、 プロセッサから上記仮想ネイティブ空間へ読出し命令が
    あった場合に、上記データベースから読出しアドレスに
    対応する上記コードブロックが検索されて、該コードブ
    ロックの読み出しとコード変換が行われ、この変換後の
    プログラムコードがプロセッサ側へ供給されるように構
    成されていることを特徴とする命令セット変換装置。
JP2002087777A 2002-03-27 2002-03-27 命令セット変換装置 Withdrawn JP2003280894A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002087777A JP2003280894A (ja) 2002-03-27 2002-03-27 命令セット変換装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002087777A JP2003280894A (ja) 2002-03-27 2002-03-27 命令セット変換装置

Publications (1)

Publication Number Publication Date
JP2003280894A true JP2003280894A (ja) 2003-10-02

Family

ID=29233844

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002087777A Withdrawn JP2003280894A (ja) 2002-03-27 2002-03-27 命令セット変換装置

Country Status (1)

Country Link
JP (1) JP2003280894A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006323844A (ja) * 2005-05-19 2006-11-30 Samsung Electronics Co Ltd ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法
US7478224B2 (en) * 2005-04-15 2009-01-13 Atmel Corporation Microprocessor access of operand stack as a register file using native instructions

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7478224B2 (en) * 2005-04-15 2009-01-13 Atmel Corporation Microprocessor access of operand stack as a register file using native instructions
JP2006323844A (ja) * 2005-05-19 2006-11-30 Samsung Electronics Co Ltd ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法
US8561042B2 (en) 2005-05-19 2013-10-15 Samsung Electronics Co., Ltd. System and method for reducing execution time of bytecode in java virtual machine

Similar Documents

Publication Publication Date Title
US9110826B2 (en) Memory allocation in a system using memory striping
US8621443B2 (en) Processor emulation using speculative forward translation
EP2542973B1 (en) Gpu support for garbage collection
JP3816586B2 (ja) 先取り命令を生成する方法とシステム
JP3820261B2 (ja) データ処理システムの外部および内部命令セット
US7200741B1 (en) Microprocessor having main processor and co-processor
JP4844971B2 (ja) インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
US8195925B2 (en) Apparatus and method for efficient caching via addition of branch into program block being processed
US8453132B2 (en) System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems
US20020066083A1 (en) Java virtual machine hardware for RISC and CISC processors
US20060248520A1 (en) Program conversion device and program conversion method
US20050160415A1 (en) Method and system for improving performance of Java virtual machine
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
JPH07234792A (ja) コンパイル処理装置
JPH0240744A (ja) 仮想アドレス‐物理アドレスの変換が有効に行なわれることを予想する方法及び装置
JP2002169696A (ja) データ処理装置
US7539695B2 (en) Pointer compression/expansion method, a program to execute the method and a computer system using the program
JP2000347876A (ja) スタック・スロット割当て方法および装置
WO2013032446A1 (en) Hardware-based array compression
US20050240915A1 (en) Java hardware accelerator using microcode engine
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
Stark et al. Reducing the performance impact of instruction cache misses by writing instructions into the reservation stations out-of-order
US20030088636A1 (en) Multiprocessor system having distributed shared memory and instruction scheduling method used in the same system
US20150089149A1 (en) Arithmetic processing device and control method for arithmetic processing device
KR100985239B1 (ko) 인스트럭션 캐시 관리 방법, 캐시 메모리, 집적 회로 및저장 매체

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20050607