JP4786101B2 - Nベースタイプの演算式の最適化 - Google Patents
Nベースタイプの演算式の最適化 Download PDFInfo
- Publication number
- JP4786101B2 JP4786101B2 JP2001536669A JP2001536669A JP4786101B2 JP 4786101 B2 JP4786101 B2 JP 4786101B2 JP 2001536669 A JP2001536669 A JP 2001536669A JP 2001536669 A JP2001536669 A JP 2001536669A JP 4786101 B2 JP4786101 B2 JP 4786101B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- type
- overflow
- operand
- reference numeral
- 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
Links
Images
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/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- 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/52—Binary to binary
Description
(技術分野)
関連出願への相互参照
本出願は、以下の特許に関連する:
スッサー及びシュウェーブによる「リソース限定型装置のためのオブジェクト志向命令セット」という名称の1999年2月2日出願の米国特許出願、及び
レビ及びシュウェーブによる「確実に配分されたバイトコード照合を有する仮想計算機」という名称の1997年4月15日出願の米国特許出願。
本発明は、コンピュータシステムに関する。より具体的には、本発明は、nベースタイプの演算式の最適化に関する。
【0002】
(背景技術)
コンピュータプログラムの準備が図1に示されている。ユーザは、プログラムを高級プログラム言語10で書く。高級プログラム言語10で書かれたプログラムは、目標とする計算機によって実行することができる低級機械言語12にコンパイルされる。例えば、高級Java(登録商標)プログラム言語で書かれたプログラムは、低級バイトコード命令にコンパイルされる。バイトコード命令とは、「Java(登録商標)仮想計算機」のための機械言語である。「Java(登録商標)機械言語仕様」は、アジソン・ウェスレーから1999年に出版のリンドホルム他著「Java(登録商標)機械言語仕様」第2版に説明されている。
【0003】
一般的な高級プログラム言語は、演算式をサポートする。演算式は、1つ又はそれ以上のオペランドに作用する算術演算子によって形成される。一般的にサポートされる演算子は、加算、引き算、乗算、割り算、剰余、ネゲート、桁送り、ビット式論理和、ビット式論理積、及び、ビット式排他的論理和を含む。中間的な値は、1つ又はそれ以上の算術演算の結果である。高級言語はまた、一般的に多重又はnベースの整数タイプをサポートし、算術演算がオーバ・ロードされる。オーバ・ロードは、演算子が混合タイプを有するオペランドを受け入れることを可能にする。例えば、Java(登録商標)プログラム言語は、4つのベースの整数タイプ、すなわち、byte、short、int、及び、longをサポートする。これらのタイプは、各々、8、16、32、及び、64ビット値をサポートする。「+」演算子のような演算子は、これらの整数タイプのいずれのオペランドも受け入れるであろう。以下の3つの例は、混合ベースタイプを有するオペランドの演算のための「+」演算子のオーバ・ロードを示している。
int a、b;
a+b;
short a、b;
a+b;
byte a、b;
a+b;
【0004】
このオーバ・ロードは、一般的に、値をより広いベースタイプに広げ、次に、算術演算を実行することによって行われる。例えば、「C」及びJava(登録商標)コンパイラは、通常、タイプbyte及びshortの値をタイプintに広げる。Java(登録商標)言語において、タイプintは、いつも32ビットである。すなわち、タイプshortの16ビット値とタイプbyteの8ビット値とは、算術演算を実行する前に、32ビットのタイプintまで広げられる。Java(登録商標)言語においては、上記で列挙した3つの例の各々に対して、以下のバイトコードが発生される。
iload a
iload b
iadd
【0005】
iload命令は、8、16、又は、32ビット変数のいずれかをロードし、そのスタック上に32ビットオペランドを置く。iadd命令は、スタックから2つの32ビットオペランドを取り出し、それらを加え合わせ、32ビットの結果をスタック上に戻して置く。
Java(登録商標)と違って、いくつかの高級言語は、整数タイプ間の関係のみを規定し、各タイプのサイズは規定しない。例えば、「C」コンパイラの販売業者の1つは、byte、short、及び、intのタイプのビットサイズを、各々、8、16、及び、32ビットであると規定してもよい。しかし、別の「C」コンパイラの販売業者は、同じタイプのサイズを、各々、16、32、及び、64ビットであると規定するであろう。更に別のコンパイラは、そのビットサイズを、各々、16、32、及び、32ビットであると規定してもよい。全ての場合において、各タイプのサイズ間の関係は維持されるが(タイプbyteで表される値の数<タイプshortで表される値の数、タイプshortで表される値の数<タイプintで表される値の数)、各タイプを表すのに使用される実際のビット数は異なってもよい。しかし、Java(登録商標)のように、「C」は、特定の各コンパイラによって規定されるintタイプのサイズで算術演算を実行する。これには、より小さいベースタイプを有する値をタイプintまで広げることが必要である。
【0006】
このタイプ拡大手法は、機械命令の数を減らし、従って、目標とする計算機の複雑さを低減する。しかし、このタイプ拡大は、一般的により大きな計算スタック空間を必要とする。例えば、タイプshortの2つの16ビット値をそれらが32ビットタイプに拡大された後で加え合わせることは、図2A及び図2Bに示す通り、タイプintの2つの32ビット値を加え合わせるスタック空間と同じ量を使用する。
【0007】
ここで図2Aを参照すると、Java(登録商標)言語のタイプshortの2つの16ビット値を加え合わせる時のスタック使用法を示す流れ図が示されている。参照番号20において、第1の16ビットオペランドがロードされ、オペランドスタック上に押し付けられる。この時点のオペランドスタックは、参照番号30で示されている。参照番号22において、第1の16ビットオペランドは、32ビットに拡大される。参照番号24において、第2の16ビットオペランドがロードされ、オペランドスタック上に押し付けられる。参照番号26において、第2の16ビットオペランドが32ビットに拡大される。この時点で、オペランドスタックは、4x16=64ビットを占有する。参照番号28において、この2つの32ビットオペランドは、32ビットadd演算子を使用して加え合わされる。
【0008】
ここで図3Aを参照すると、タイプintの2つの32ビット値を加え合わせる時のスタック使用法を示す流れ図が表されている。参照番号40において、第1の32ビットオペランドがロードされ、オペランドスタック上に押し付けられる。このオペランドスタックは、図3Bで示されている。参照番号42において、第2の32ビットオペランドがロードされ、オペランドスタック上に押し付けられる。参照番号44において、この2つの32ビットオペランドは、32ビットadd演算子を使用して加え合わされる。すなわち、上述の16ビット加算及び32ビット加算例の両方において、2つの32ビットオペランドは、スタックから取り出されて32ビットの加算演算を使用して加え合わされる前に、スタック上に押し付けられる。
【0009】
プログラム実行が進行する間、スタックの大きさは、入れ子プロシージャの呼び出しのレベル、計算された式の複雑さ、及び、局所的に表された変数の数などの要素のためにサイズが変動する場合がある。スマートカードなどのリソース限定型装置においては、一般的に、タイプ拡大が行われるような計算を実行するのに利用できるメモリが不十分である。
リソース限定型装置は、一般的なデスクトップコンピュータなどと比べた場合、一般的に、メモリ、及び/又は、計算能力又は速度が比較的制限されているものであると考えられている。一例として、他のリソース限定型装置には、セルラー電話機、境界用走査装置、野外用プログラム可能装置、携帯情報端末(PDA)、及び、ポケットベルや他の小型又は小さな衛星電波使用装置が含まれる。
【0010】
賢い携帯用データ携行カードとしても知られるスマートカードは、一般的に、プラスチック又は金属から作られ、プログラムを実行するための内蔵マイクロプロセッサ又はマイクロコントローラとプログラム及びデータを記憶するメモリとを含む電子集積回路を有する。ほぼクレジットカードのサイズが可能なその様な装置は、8ビット又は16ビットのアーキテクチャを備えたコンピュータ集積回路を有する。更に、これらの装置は、一般的に制限された記憶容量を有する。例えば、スマートカードのいくつかは、1キロバイト(1K)未満のランダムアクセスメモリ(RAM)のほか、限られたロム(ROM)、及び/又は、電気的消去可能ロム(EEPROM)のような不揮発性メモリを有する。
【0011】
更に、8ビット又は16ビットアーキテクチャを有するスマートカードは、一般的に、内蔵8ビット又は16ビット算術演算を各々有する。従って、スマートカードは、通常、32ビット演算よりも効率的に8ビット又は16ビット演算を実行することができる。32ビットに拡大されたデータに対して32ビット演算を実行することは、特に非効率的である。すなわち、スマートカードなどのリソース限定型装置の限られたアーキテクチャ及びメモリは、値がより大きな整数タイプに拡大されたプログラムを実行することを非実用的又は不可能にする。
【0012】
「Java(登録商標)機械言語」命令セットは、byte、short、及び、intの整数タイプの値を処理するための算術命令セットを形成する。タイプbyte及びshortの変数は、編集中に整数タイプintまで拡大される。反対に、「Java Card(登録商標)(Java(登録商標)プログラム言語をサポートするスマートカード)仮想計算機」は、整数タイプintの変数を処理する命令セットに加えて、タイプbyte及びshortの変数を処理する別の命令セットを形成する。ほとんどの「Java Card(登録商標)」アプリケーションは、タイプshort又はbyteのデータ値に対して演算する。
【0013】
コンピュータ産業においては、同じプログラムをリソース限定型装置で実行することができ、従って縦のプラットフォームに亘る相互運用性が達成されるように、比較的メモリが豊富なデスクトップコンピュータ上で実行するように意図された高級コンピュータ言語をサポートする傾向が増加している。この縦のプラットフォームに亘る相互運用性には、高級プログラム言語で書かれたプログラムがリソース限定型装置で実行された時、それらが仮に比較的メモリが豊富な装置で実行された場合にもたらすであろう同じ結果を示すことが必要である。例えば、Java(登録商標)プログラム言語で書かれたプログラムの実行を、スマートカードプラットフォーム、手持式装置、消費者電気器具、デスクトップコンピュータ、及び、スーパーコンピュータを含む、様々なプラットフォーム上でサポートすることが必要である。
従って、意味論的に同等な数学的表現をより少ない計算スタック空間を使用して実行することができるように、プログラム表現を変える必要性が存在する。更に、実行速度が増加するようにそのような変形を行う必要性が従来技術において存在する。
【0014】
(発明の開示)
演算式最適化の方法は、第1のベースを有する第1のプロセッサのために形成された、演算子と少なくとも1つのオペランドとを含む第1の命令を受け取る段階、全てのオペランドが潜在的な桁あふれを伴っていないか、又は、演算子が桁あふれに対して敏感でない場合、第1のベースよりも小さい第2のベースを有する第2のプロセッサのために最適化された第2の命令に第1の命令を変換する段階、及び、少なくとも1つのオペランドが桁あふれの可能性になっており、かつ、演算子が桁あふれに対して敏感な場合、桁あふれの源である第3の命令をより広いベースに変換する段階を含む。演算式最適化の装置は、プログラム命令を有する少なくとも1つのメモリ、及び、第1のベースを有する第1のプロセッサに対して形成された第1の命令を受信し、少なくとも1つのオペランドのいずれもが潜在的な桁あふれを伴っていないか、又は、演算子が桁あふれに敏感でない場合には、その第1の命令を第1のベースよりも小さい第2のベースを有する第2のプロセッサに対して最適化された第2の命令に変換し、少なくとも1つのオペランドが桁あふれの可能性になっており、かつ、演算子が桁あふれに対して敏感な場合には、桁あふれの源である第3の命令をより広いベースに変換するために、プログラム命令を使用するように形成された少なくとも1つのプロセッサを含む。
【0015】
(発明を実施するための最良の形態)
当業者は、本発明の以下の記述が単に例示的であることを理解するであろうし、本発明の開示の恩恵を受けるような当業者に対しては、本発明の他の実施形態が容易に示唆されるであろう。
本発明は、コンピュータシステムに関する。より具体的には、本発明は、nベースタイプの演算式の最適化に関する。本発明は、更に、(1)本発明のレイアウトパラメータ、及び/又は、(2)コンピュータ上で演算を実行する際に本発明を使用するためのプログラム命令、を記憶した機械読取可能媒体に関する。そのような媒体には、例として挙げると、磁気テープ、磁気ディスク、CD・ROMのような光学的読取可能媒体、及び、PCMCIAカードのような半導体メモリが含まれる。この媒体はまた、小さなディスク、ディスケット、又は、カセットのような携帯用品目の形態を取ってもよい。この媒体はまた、ハードディスクドライブやコンピュータRAMのようなより大きな又は固定式品目の形態を取ってもよい。
【0016】
リソース限定型装置は、通常のデスクトップコンピュータなどと比べた場合、一般的に、メモリ、及び/又は、計算能力又は速度が比較的制限されているものであると考えられている。以下で検討する特定の実施例はスマートカードに関して説明されるが、本発明は、他のリソース限定型装置と共に使用することができ、それらには、以下に限定されないが、セルラー電話機、境界用走査装置、野外用プログラム可能装置、携帯情報端末(PDA)、及び、ポケットベルのほか、他の小型又は小さな衛星電波使用装置が含まれる。本発明はまた、非リソース限定型装置上でも使用することができる。
本発明を開示する目的上、「プロセッサ」という用語は、物理的なコンピュータ又は仮想計算機を意味するように用いられる場合がある。
【0017】
ここで図4Aを参照すると、本発明の一実施形態に従ってリソース限定型計算機上で実行するための演算式を変換する段階を説明するブロック図が示されている。コンパイラは、高級言語62で書かれた演算式60を取り、そのオペランドをより大きな整数タイプに拡大し、一般的なデスクトップ計算機66上で実行するためのより大きなベースタイプの命令64を作り出す。このより大きなベースタイプ命令64は、リソース限定型計算機70上で実行するための意味論的に同等なより小さなベースタイプ命令68に最適化される。例えば、shortタイプの加算命令は、shortタイプのオペランドに対して演算するのに使用され、その結果は、タイプshortである。
【0018】
本発明の別の実施形態によると、意味論的に同等なより小さなベースタイプ命令への最適化は、ジャスト・イン・タイム・コード発生装置の一部である。命令セットが初めて実行される少し前に、最適化されていない命令は、リソース限定型計算機上で実行するための意味論的に同等なより小さなベースタイプ命令に最適化される。同じ命令セットのその後の実行は、その最適化された命令セットを使用する。
本発明の別の実施形態によると、算術命令の意味を保存するためにより大きなタイプ命令64が必要であり、かつ、より大きなタイプ命令が目標とするプロセッサによってサポートされていない場合、その演算式は、サポートされていないとして拒絶される。
【0019】
ここで図4Bを参照すると、本発明の一実施形態による命令を変換する段階を説明するブロック図が示されている。32ビットオペランドを有する命令を含むJava(登録商標)の部類のファイル72は、「Java Card(登録商標)」の部類のファイル変換器74によって受け取られる。この変換器74は、リソース限定型装置上で実行するために最適化された命令76を発生する。この最適化は、例として挙げると、より少ないスタック使用量、より小さなプログラムサイズ、及び、より高速の実行を準備する段階を含む。
【0020】
目標とする計算機は、nタイプの算術演算をサポートするであろう。「Java(登録商標)仮想計算機」は、タイプint演算子をサポートするが、「Java Card(登録商標)仮想計算機」は、タイプshort演算子をサポートし、オプションでタイプint演算子をサポートする。他の装置は、byteタイプの算術演算子のみ、又は、byte、short、及び、intタイプの演算の全てをサポートしてもよい。一般的に、8ビット又は16ビットプロセッサ上で16ビットの算術を実行するために比較的少ない時間を要し、同じプロセッサ上で32ビットの算術を実行するためには、比較的多くの時間が必要である。
【0021】
算術演算に使用される実際の値は最適化時には未知であるから、最適化は、各オペランドに対して最悪の場合の値を仮定する必要がある。オペランドに対する最悪の場合の値は、入力オペランドタイプに基づいて判断される。小さいタイプの演算は、大きいタイプの表示又はより大きなタイプへの桁あふれを必要とする結果を有する可能性がある。すなわち、本発明によると、算術演算子は、桁あふれによって影響される演算子と桁あふれを引き起こす可能性を有する演算子とに分類される。本発明を開示する目的上、桁あふれは、負の値の下位桁あふれを含む。小さいタイプの演算の結果は、その結果を作り出すのに用いられた演算子が大きいタイプの表示への桁あふれを引き起こす可能性を有する演算子のグループに属する場合、潜在的桁あふれを伴うと言われる。中間的な値は、その中間的な値が桁あふれに影響される演算子のグループに属する演算子のためのオペランドとして使用されない限り、潜在的桁あふれを伴うことを許される。
【0022】
桁あふれを引き起こす可能性を有する演算子は、加算、引き算、乗算、割り算、ネゲート、及び、左側桁送りを含む。これらの演算子に対するJava(登録商標)バイトコードは、表1に示されている。
【0023】
(表1)潜在的桁あふれを伴う演算
【0024】
桁あふれに影響される演算子は、表2に示されている。桁あふれに影響される算術演算子は、割り算、剰余、ネゲート、右側桁送り、及び、符号なしの右側桁送りを含む。また、桁あふれに影響される非算術演算子は、アレー演算、スイッチ演算、及び、比較演算を含む。
【0025】
(表2)桁あふれに影響される演算
【0026】
表1の演算をより小さなタイプに最適化する時、結果は、より大きなタイプの中に桁あふれする場合がある。表2の演算子のうちの1つを用いる表現の結果は、表現中のオペランドのうちの1つが中間的な値であり、潜在的な桁あふれデータを含む場合、精度を失うであろう。最適化を可能にし、高級ソースコードの意味を保存するために、潜在的桁あふれは、結果が表2の演算のうちの1つに入力される場合、その結果のタイプに対する明白なソースレベルの型を用いて是正する必要がある。
【0027】
表2の演算のいずれかに対する入力オペランドが表1の演算の結果であり、明白な高級ソースコードの型がない場合、最適化は起こることができない。そのような誤った最適化は、意味論的に同等な結果を保証しないであろう。換言すれば、リソース限定型装置上で実行するために発生された最適化コードは、結果をデスクトップコンピュータ用に発生された最適化なしのコードとは異なるようにすることができるであろう。例えば、桁あふれデータは、オペランドのJava(登録商標)32ビット表示で与えることができるが、「Java Card(登録商標)」16ビット表示ではできないであろう。
【0028】
表1に列挙された演算子を用いる演算の結果は、より小さなタイプを有する演算子が適用された場合、桁あふれを生じる場合がある。デスクトップコンピュータ・プラットフォームを目標とする命令をリソース限定型コンピュータ・プラットフォームを目標とする命令に最適化する段階に付随するこれらの問題の例は、図5A〜図8Bに与えられている。これらの例は、デスクトップコンピュータが32ビットアーキテクチャに基づいており、比較的メモリが豊富であることを仮定している。リソース限定型コンピュータは、比較的少ないメモリを有する16ビットアーキテクチャに基づくと仮定されている。当業者は、本発明が様々なアーキテクチャを有する演算プラットフォームに適用されることを認めるであろう。
図5A〜図8Bはまた、符号を有する値を使用する。当業者はまた、値の符号の有無に関わらず桁あふれが起こり得ることを認めるであろう。
【0029】
ここで図5Aを参照すると、デスクトップコンピュータ上での2つのタイプshortの値の加算を説明するコード見本が示されている。値「a」は、16ビットの符号付きshortタイプで表すことができる最大値を含む。上記の通り、たとえ値が16ビットshortの値であっても、intタイプの加算が用いられる。すなわち、16ビット範囲から32ビット範囲への桁あふれが結果の値の中に存在し、桁あふれの効果は、より大きな正の32ビット数を作り出すことである。
【0030】
ここで図5Bを参照すると、リソース限定型コンピュータ上で図5Aにおけるのと同じ値を加算する段階を説明するコード見本が示されている。実行は、リソース限定型コンピュータ上で行われており、両方の値が16ビットshortタイプであるから、命令はshortタイプの加算を用いて最適化され、従ってより少ないスタック空間を使用する。しかし、32ビット加算の代わりに16ビット加算が用いられるために、加算は符号ビットに桁あふれを引き起こす。デスクトップコンピュータは、32、768という値を計算したのに対し、リソース限定型コンピュータの例で計算された結果は、−32、768という負の数である。この結果は、それがデスクトップコンピュータの結果と異なり、多様なコンピュータ・プラットフォームに亘る相互運用性を妨げる理由から、受け入れられないものである。
【0031】
ここで図6Aを参照すると、2つのタイプshortの値の加算とその結果を直ちに型に入れる段階とを説明するコード見本が示されている。この例は、加算結果がタイプshortに型入れされる点を除いて、図5Aのものと同じである。タイプをshortに型入れする段階は、最も有意な16ビットをshort値に切り落とし、符号が32ビット値に広がる。潜在的に桁あふれを伴う演算(add演算)の結果は、タイプshortに型入れされ、それによっていかなる潜在的桁あふれの問題も排除する。図6Bは、リソース限定型コンピュータ上で16ビット値として表された、図6Aにおけるのと同じ値を加算する段階を示す。デスクトップコンピュータ及びリソース限定型コンピュータの両方に対する結果の値は同じである。
【0032】
ここで図7Aを参照すると、デスクトップコンピュータ上での3つのタイプshortの値の加算を説明するコード見本が示されている。この例においては、intタイプの加算が、16ビットshort値「a」及び「b」を加え、その結果を「c」に加えるために用いられている。最終結果は、shortタイプに型入れされる。
ここで図7Bを参照すると、リソース限定型コンピュータ上に潜在的に桁あふれを伴う演算によって引き起こされたオペランドの桁あふれに影響されない演算を実行する段階を説明するコード見本が示されている。この例の全ての値は16ビットのshortタイプであるから、全ての中間的な加算に対してshortタイプの加算が用いられる。表1に示す通り、加算演算子は、潜在的に桁あふれを引き起こすが、桁あふれに影響されない。すなわち、「a」と「b」を加えることは、潜在的に桁あふれを伴う値を作り出す。この値が「c」に加えられ、潜在的に桁あふれを伴う別の値を作り出す。第2のadd演算は、潜在的に桁あふれ(a+bの結果)を伴う1つのオペランドを含むが、add演算は、桁あふれを伴うオペランドに影響されない。最終結果は、タイプshortに型入れされ、加算演算から潜在的な桁あふれを取り除く。すなわち、デスクトップコンピュータ及びリソース限定型コンピュータの両方に対する結果の値は同じである。
【0033】
ここで図8Aを参照すると、デスクトップコンピュータ上での2つのタイプshortの値の加算とその結果をタイプshortの値で割り算する段階とを説明するコード見本が示されている。実行はデスクトップコンピュータ上で行われているので、intタイプの演算が用いられる。「a」及び「b」の値がintタイプのaddを用いて互いに加えられ、この中間的な値は、「c]で割り算される。
ここで図8Bを参照すると、リソース限定型コンピュータ上で潜在的に桁あふれを伴う演算によって引き起こされたオペランドの桁あふれに影響される演算を実行する段階を説明するコード見本が示されている。実行はリソース限定型コンピュータ上で行われているので、shortタイプの演算が用いられる。「a」及び「b」の値は、shortタイプのaddを用いて互いに加えられる。この加算は、16ビット範囲から桁あふれする中間的な値を作り出す。この中間的な値は、「c」で割り算される。図7Bで用いられた加算演算子と異なり、割り算演算子は、表2に示す通り桁あふれに影響される。高いビットに値が入っているので、この16ビット値は、負であると見なされる。すなわち、デスクトップコンピュータ及びリソース限定型コンピュータの例は、図6A〜図7Bにおけるようなプログラムで表されたタイプ変換で訂正されていない、異なる結果をもたらす。
【0034】
本発明によると、演算式は、オペランドのタイプに応じて最適であるタイプの命令を用いて最適化される。最適化処理は、潜在的桁あふれの問題に遭遇するまで進行される。その時点で、演算式の入力オペランドに立ち戻り、それを次のより大きなタイプ命令に変換する。この処理は、演算式が最適化された命令セットを用いてデスクトップコンピュータとリソース限定型装置とで同じ結果を示すような、命令の適切なタイプが選択されるまで繰り返される。
【0035】
変換処理の間は、いくつかの関係が維持される。これらの関係は、命令と、その命令を目標とする計算機上で実行する時に生じることになる値とに関する。関係データには、値に対する実際のタイプ及びターゲットタイプが含まれる。関係データはまた、命令が目標とする計算機上で一旦実行されると目標とする計算機上で値を生み出すことになるソース命令を含む。各命令はまた、そのオペランド関係データにリンクされる。更に、結果に関する関係データは、その結果を消費する命令にリンクされる。各関係データはまた、命令が目標とする計算機上で実行された場合に潜在的桁あふれを生じることになる命令(もしあれば)にリンクされる。この命令は、ロールバックポイントと呼ばれる。潜在的桁あふれを伴う値が桁あふれに敏感な演算子によって消費された場合、誤った最終結果が生み出されることがあるので、生み出されることになる値の各々を桁あふれを引き起こした命令とリンクさせることは、変換処理を先に進めることができない時に桁あふれ問題を引き起こした命令にロールバックする方法を与える。
【0036】
中間的な値は、後続の命令においてオペランドとして更に消費することができる。中間的な値が潜在的に桁あふれを伴う場合、ロールバック命令もまた、結果内を伝達される。これは、表現を変換する過程で繰り返される。このロールバック作用は、常に中間的な値(又は、オペランド)に作用し、再変換が必要とされる命令までロールバックする。ロールバック命令を判断する方法及び最適化の他の詳細は、以下で検討される。
【0037】
ここで図9を参照すると、本発明の一実施形態によるnベースタイプの演算式最適化を説明する流れ図が示されている。参照番号80で、変換される命令が受け取られる。参照番号82で、入力オペランドのいずれかが潜在的桁あふれを伴うか否かに関して判断が為される。少なくとも1つのオペランドが潜在的桁あふれを伴う場合、変換される命令が桁あふれに敏感であるか否かに関する判断が参照番号84で為される。これらに関するJava(登録商標)バイトコードが表2に列挙されている。当業者は、桁あふれに影響される演算子のリストが異なる高級言語に関して変動し得ること、及び、本発明がこれらの他の言語にも同様に適用し得ることを認めるであろう。
【0038】
変換される命令が桁あふれに敏感である場合、変換処理は、参照番号86において問題の源である命令にロールバックされ、その命令は、より広いベースを有するタイプを用いて変換される。例えば、8ビットのバイトタイプは、16ビットのワードタイプに拡大され、16ビットのワードタイプは、32ビットのワードタイプに拡大されるであろう。オペランドをより大きなタイプに拡大することにより、オペランドのその後の命令変換がより大きなタイプに結合された命令を使用することが必要になる。
【0039】
変換される命令が桁あふれに敏感でない場合、又は、どの入力オペランドも潜在的桁あふれを伴わない場合、その命令は、参照番号88で、リソース限定型装置上での実行に対して最も最適なタイプに変換される。参照番号90で、変換される命令がまだ残っているか否かに関する判断が為される。更なる命令が残っている場合、参照番号80で次の命令の変換が始まる。最後の命令が変換されると、参照番号92で変換処理が終了する。
【0040】
ここで図10を参照すると、本発明の一実施形態によるnベースタイプの演算式最適化を説明する詳細な流れ図が示されている。参照番号100で、変換が完了していないという指示が作られる。参照番号102で、第1の命令の変換を実行すべきであるという指示が作られる。参照番号104で、命令変換が完了したか否かが判断される。命令変換が完了した場合、実行は参照番号106で終了する。変換が完了していない場合、変換が完了したという指示が参照番号108で作られる。参照番号110で、第1の命令が得られる。参照番号112で、その命令が変換されるべきか否かの判断が為される。
【0041】
命令を変換する必要がある場合、変換が未完了であるという指示、及び、現在の命令を再度変換すべきではないという指示が、参照番号114及び116で各々作られる。参照番号118で、命令は、より小さなベースタイプを有する、目標とする計算機のために最適化された別の命令に変換される。参照番号120で、ロールバックが参照番号118における変換によってトリガされたか否かに関する判断が為される。ロールバックがトリガされていた場合、ロールバックポイントでの命令が参照番号122で得られ、ロールバックポイントでの命令の変換が参照番号104で再度開始される。ロールバックがトリガされない場合、結果のタイプ及びターゲットタイプが参照番号124で照合される。参照番号126で、変換情報は、各制御経路の後続命令に伝達される。
参照番号128で、更なる命令が残っているか否かに関する判断が為される。更なる命令が残っている場合、次の命令が参照番号130で取得され、参照番号112で実行が継続される。変換処理は、最後の命令が変換されると終了する。
【0042】
ここで図11を参照すると、本発明の一実施形態による命令を変換する段階を説明する流れ図が示されている。参照番号140で、現在の命令が算術命令か否かが判断される。命令が算術命令である場合、それは、参照番号142で変換される。同様に、スタック操作命令、ターゲット命令、タイプ変換命令、及び、初期値変換命令は、参照番号146、150、154、及び、158で各々変換される。命令が図11の算術命令、スタック操作命令、タイプ変換命令、又は、初期値命令か否かによる命令の分類は、単に例示的な目的で示されている。当業者は、本発明が他の多くの命令の種類又は分類に対しても同様に適用し得ることを認めるであろう。
【0043】
ここで図12Aを参照すると、本発明の一実施形態によるターゲット命令を変換する方法を説明する流れ図が示されている。「Java(登録商標)仮想計算機」命令セットにおいては、ターゲット命令は、分岐、スイッチ、アレーアクセス、アレー作成、及び、様々な記憶/保管命令(store/put命令)を含むほか、スタック操作命令、タイプ変換命令、初期値命令、又は、演算式ではない、コンピュータ言語におけるタイプに敏感な他のいかなる非算術命令をも含む。
【0044】
参照番号160で、命令オペランドに対するターゲットタイプが判断される。参照番号162で、ターゲット命令が消費するオペランドがそのターゲット命令のターゲットタイプよりも小さいタイプを有するか否かに関する判断が為される。そのオペランドが目標とするものよりも小さなタイプを有する場合、変換処理は、参照番号164で、その小さなタイプのオペランドを用いてロールバックされる。オペランドが目標とするものよりも小さなタイプを持たない場合、そのオペランドが潜在的桁あふれを伴うか否かに関する判断が参照番号166で為される。オペランドは、それが表1に記載されたオペランドのうちの1つで作り出されたか、又は、オペランド内で桁あふれを伝達する演算子によって作り出された場合、潜在的桁あふれを伴うことがある。桁あふれを伝達する演算子には、例として挙げると、「and」、「or」、及び、排他的「or」(xor)演算子が含まれる。どのオペランドも潜在的桁あふれを伴わない場合、命令は、参照番号167で最適化される。オペランドの少なくとも1つが潜在的に桁あふれを伴っている場合、変換処理は、参照番号164で、より小さなオペランドを用いてロールバックされる。
【0045】
ここで図12Bを参照すると、本発明の一実施形態による初期値命令を変換する方法を説明する流れ図が示されている。初期値命令の例には、獲得/ロード命令(get/load命令)、及び、変数をロードする他の命令が含まれる。初期値命令はまた、方法の結果を戻す、方法呼出し命令を含む。更に、初期値命令は、ロード定数命令を含む。これらの命令は、命令が生み出す値が中間的な計算の結果ではないことから、「初期値」命令と呼ばれる。参照番号168で、変数、戻り値、又は、定数のタイプが受け取られる。参照番号169で、初期値命令は、変数又は定数のタイプに従って最適化される。例えば、shortタイプのローカル変数をロードするために、iload命令はsloadに最適化される。
【0046】
ここで図13を参照すると、本発明の一実施形態によるタイプ変換命令を変換する方法を説明する流れ図が示されている。タイプ変換命令は、オペランドをより大きなタイプ又はより小さなタイプに変換してもよい。例えば、32ビットのintタイプを16ビットのshortタイプに型入れする段階は、オペランドをより小さなタイプに変換する。同様に、8ビットのbyteタイプを32ビットのintタイプに型入れする段階は、オペランドをより大きなタイプに変換する。後者の場合、byteタイプは、オペランドタイプと呼ばれ、intタイプは、ターゲットタイプと呼ばれる。
【0047】
参照番号170で、命令が受け取られる。オペランドタイプ及びターゲットタイプは、各々、参照番号172及び174において決められる。オペランドタイプがターゲットタイプよりも大きい場合、オペランドタイプは、参照番号178でターゲットタイプまで狭められる。オペランドタイプがターゲットタイプよりも小さい場合、オペランドが潜在的に桁あふれを伴っているか否かに関する判断が参照番号180で為される。オペランドが潜在的に桁あふれを伴う場合、変換処理は、タイプを訂正するために参照番号182でロールバックされる。オペランドタイプが潜在的桁あふれを伴わない場合、オペランドは、参照番号184でターゲットタイプまで広げられる。
【0048】
ここで図14を参照すると、本発明の一実施形態によるスタック操作命令を変換する方法を説明する流れ図が示されている。「Java(登録商標)仮想計算機」命令セットにおいては、スタック操作命令は、「dup(複製する)」、「swap(交換する)」、及び、「pop(ポップする)」命令を含む。参照番号190で、命令が受け取られる。参照番号192で、その命令がdup命令か否かに関する判断が為される。命令がdup命令である場合、参照番号194で、元のスタックエントリに対するロールバックポイントが存在するか否かに関する判断が為される。元のスタックエントリがロールバックポイントを有する場合、複製されたスタックエントリのロールバックポイントは、参照番号196で、元のスタックエントリのロールバックポイントに設定される。元のスタックエントリがロールバックポイントを持たない場合、複製されたスタックエントリのロールバックポイントは、参照番号198で、元のスタックエントリのソース命令に設定される。参照番号200で、命令が変換される。
【0049】
ここで図15を参照すると、本発明の一実施形態による演算式を変換する方法を説明する流れ図が示されている。参照番号210で、オペランドが潜在的桁あふれを伴っているか否かに関する判断が為される。オペランドが潜在的桁あふれを伴わない場合、参照番号212で、オペランドが潜在的桁あふれを持たないという指示が作られる。オペランドが潜在的桁あふれを伴う場合、参照番号214で、命令が桁あふれに影響されるか否かに関する判断が為される。命令が桁あふれに影響されない場合、参照番号216で、オペランドが潜在的桁あふれを有するという指示が作られる。命令が桁あふれに影響される場合、この変換は、参照番号218で、桁あふれを有する第1のオペランドにロールバックされる。変換がロールバックされない場合、最適化された命令タイプが参照番号220で決められ、命令が参照番号222で最適化され、結果のタイプと結果の桁あふれが参照番号224で判断される。
【0050】
ここで図16を参照すると、本発明の一実施形態による最適化された命令タイプを判断する方法を説明する流れ図が示されている。参照番号230で、少なくとも1つのオペランドが受け取られる。参照番号232で、目標とする命令タイプは、そのオペランドに付随する最も大きいタイプに設定される。参照番号234で、オペランドのいずれかが目標とする命令タイプよりも小さいタイプを有するか否かに関する判断が為される。少なくとも1つのオペランドが目標とするタイプよりも小さいタイプを有する場合、その小さいオペランドは、タイプを訂正するために参照番号236でロールバックされる。
【0051】
ここで図17を参照すると、本発明の一実施形態による結果のタイプ及び結果の桁あふれを判断する方法を説明する流れ図が示されている。参照番号240で、結果のタイプは、命令タイプに設定される。「Java Card(登録商標)」の戻された結果タイプ及び桁あふれ指示は、以下の表3から表10にまとめられている。これらの表は、命令のタイプによって構成されている。各表は、1つ又は2つのオペランドのタイプに基づいて、結果タイプと桁あふれ指示とを示している
【0052】
(表3)加算、乗算、及び、引き算
【0053】
(表4)割り算
【0054】
(表5)左側桁送り
【0055】
(表6)右側桁送り
【0056】
(表7)ネゲート
【0057】
(表8)符号なしの右側桁送り
【0058】
(表9)剰余
【0059】
(表10)and、or、及び、xor
【0060】
図17における「Java Card(登録商標)」の結果タイプ及び桁あふれ指示の使用は、単に例証目的のためである。当業者は、本発明が他のタイプを有する他の高級言語に対しても適用可能であることを認めるであろう。
参照番号244で、結果がより最適化された命令を用いることで生じた桁あふれを潜在的に伴うか否かに関する判断が為される。結果が潜在的桁あふれを伴わない場合、参照番号246で、オペランドのいずれかが桁あふれを伝達するか否かに関する判断が為される。少なくとも1つのオペランドが桁あふれを伝達するか、又は、結果が潜在的に桁あふれを伴う場合、その結果のロールバックポイントが参照番号248で記録され、結果が潜在的桁あふれを有するという指示が参照番号250で作られる。
【0061】
ここで図18を参照すると、本発明の一実施形態によるロールバックポイントを記録する方法を説明する流れ図が示されている。参照番号260で、第1のオペランドがそれに付随するロールバックポイントを有するか否かに関する判断が為される。第1のオペランドがそれに付随するロールバックポイントを有する場合、現在の命令のロールバックポイントは、参照番号262で、第1のオペランドのロールバックポイントに設定される。第1のオペランドがそれに付随する桁あふれを持たない場合、参照番号264で、第2のオペランドがそれに付随する桁あふれを有するか否かに関する判断が為される。第2のオペランドがそれに付随するロールバックポイントを有する場合、命令のロールバックポイントは、参照番号266で、第2のオペランドのロールバックポイントに設定される。どちらのオペランドもそれに付随するロールバックポイントを持たない場合、命令のロールバックポイントは、参照番号268で、第1のオペランドに対するソース命令に設定される。
【0062】
本発明の特定の実施形態によると、図18に示す通り、「第1のオペランド」は、第1に作り出されたオペランドを意味する。ロールバックポイントをより古いオペランドに対するソース命令に設定することは、より古いオペランドに付随するタイプを訂正することによって、より新しいオペランドがその後に使用するタイプを訂正し得るので、より新しいオペランドに対する追加のロールバック演算を実行する必要性を除外するであろう。
【0063】
ここで図19を参照すると、本発明の一実施形態による変換処理をロールバックする方法を設定する流れ図が示されている。参照番号270で、現在の命令の変換が割り込まれる。参照番号272で、オペランドがロールバックポイントを有するか否かに関する判断が為される。オペランドがロールバックポイントを持たない場合、ロールバック命令は、参照番号276で、そのオペランドを作り出したソース命令に設定される。オペランドがロールバックポイントを有する場合、ロールバック命令は、参照番号274で、その同じロールバックポイントに設定される。参照番号278で、ロールバック命令の目標とするタイプが広げられる。参照番号280で、ロールバック命令を変換すべきであるという指示が作られる。変換処理は、参照番号282において、ロールバック命令で再開される。参照番号284で、ロールバック命令は、新しい目標とするタイプに従って変換される。
【0064】
ここで図20を参照すると、本発明の一実施形態による命令最適化の結果を伝達する段階を説明する流れ図が示されている。参照番号290で、後続命令が取得される。後続命令とは、現在の命令と同じ制御経路にあって、現在の命令の直ぐ後に発生する命令である。当業者は、1つの命令が多くの制御経路の一部であってもよいことを認めるであろう。
参照番号292で、後続命令が変換処理において以前に訪問されたか否かに関する判断が為される。後続命令が以前に訪問されていない場合、後続命令に関する変換情報は、参照番号294で現在の命令に関する変換情報と等しいように設定され、参照番号296で後続命令を変換すべきであるという指示が作られる。変換情報は、現在の変換点におけるランタイム状態を含んでもよい。例えば、まだ消費されていない現在又は以前の命令によって、それらの値が作り出される。これらの値は、制御経路の後続命令に対してオペランドとして使用されることになる。各値に対して、タイプ、ソース命令、及び、ロールバックポイントが記録される。後続命令が以前に訪問されていた場合、後続命令において以前に記録された変換情報は、参照番号298で現在の変換情報と結合される。参照番号300で、結合された情報の中の値が変更されたか否かに関する判断が為される。値が変更されていた場合、後続命令を変換すべきであるという指示が参照番号296で作られる。この処理は、各後続命令に対して繰り返される。
【0065】
ここで図21を参照すると、本発明の一実施形態による異なる制御経路からの変換情報を結合する段階を説明する流れ図が示されている。参照番号310で、両方の制御経路の対応する入力が比較される。参照番号312で、対応する入力のタイプが異なっているか否かに関する判断が為される。タイプが異なる場合、より小さなタイプを有する入力は、参照番号314でロールバックされる。この処理は、各オペランドに対して繰り返される。
【0066】
ここで図22Aを参照すると、本発明の一実施形態による命令変換を説明するブロック図が示されている。これは、最適化が可能な演算式への本発明の応用法を示している。図22Aは、値a、b、及び、cをタイプshortとする時の以下のJava(登録商標)表現に対する変換処理を説明している。
short c=(short)((short)(a+b)/c)
この式のJava(登録商標)バイトコードシーケンスは、参照番号316で示されている。
【0067】
命令変換は、iload-a命令で始まる。第1のより小さなタイプに付随する命令が、load及びadd命令に対して用いられる。表1に明記した通り、add命令は潜在的桁あふれを引き起こすが、ソースレベルにおけるタイプshortへの明確な型入れが、桁あふれの可能性を取り除く。div330の命令は、表2に示す通り、桁あふれに影響される。しかし、明確な型入れのために、潜在的桁あふれは何も存在しない。従って、より大きなタイプを作り出すために加算演算に「ロールバック」する必要性は起こらない。
本発明の理解を更に助けるために、上記で検討した例は、図10から図21に関連して以下で更に詳細に説明される。
【0068】
iload命令は、ソース命令である。参照番号160において、「a」オペランドに対する目標とするタイプはタイプshortである。参照番号162において、オペランド「a」はタイプshortである。オペランドは、それらが直接ロードされ、従って、桁あふれを引き起こす演算によって作り出されたのではないために、参照番号166で潜在的桁あふれを伴わない。従って、参照番号167でiload命令をsload-a命令に変換するのに、shortの気味のある命令が使用される。同様に、iload-b命令は、sload-b命令に変換される。
【0069】
次に、iadd命令が処理される。iaddは桁あふれを引き起こすことがある命令であるから、そのオペランドが潜在的桁あふれを伴うか否かを判断する検査が参照番号210で行われる。両方のオペランドは、それらが潜在的桁あふれを伴わないように、直接ロードされる。従って、最適化された結果タイプは、参照番号220で判断される。参照番号232で、命令タイプは、最大のオペランドタイプに設定される。この例では、この最大オペランドタイプは、オペランド「a」及びオペランド「b」の両方がタイプshortであるために、タイプshortである。両方のオペランドが命令タイプと同じタイプであるから、参照番号238で、タイプshortが、命令タイプとして戻される。
【0070】
次に、参照番号222で、命令が最適化される。命令タイプがタイプshortであるから、最適化された命令は、「sadd」である。次に、結果タイプ及び桁あふれ指示が、参照番号224で判断される。参照番号240で、結果タイプは、命令タイプであるタイプshortに設定される。更に、結果が潜在的桁あふれを有するという指示が表3に従って作られる。結果が潜在的桁あふれを含むので、(a+b)の結果に対するロールバックポイントは、参照番号248で記録される。いずれのオペランドもロールバックポイントを持たないので、結果に対するロールバックポイントは、参照番号268で、オペランド「a」(第1のオペランド)に対するソース命令に設定される。参照番号250で、結果が潜在的桁あふれを有するという指示が作られる。
【0071】
次に、i2s命令が処理される。このi2s命令は、タイプ変換命令である。参照番号176で、オペランドタイプ(short)は、ターゲットタイプ(short)と比較される。両方のタイプは同じであるから、参照番号178でタイプがタイプshortまで狭められ、潜在的桁あふれを取り除く。
次に、iload-c命令が処理される。値a及びbのように、cはタイプshortであり、iload-c命令は、sload-c命令に変換される。次に、idiv命令が処理される。表2に明記した通り、idivは、桁あふれに影響されてもよい命令である。「a+b」オペランドは、shortへの明確なソースレベルの型入れのために潜在的桁あふれを伴わず、従って、最適化された割り算命令タイプは、参照番号232でタイプshortであると判断され、結果タイプは、参照番号240でタイプshortに設定される。
【0072】
次に、i2s命令が処理される。参照番号176で、オペランドタイプ(short)は、ターゲットタイプ(short)と比較される。両方のタイプは同じであるから、このタイプは、参照番号178でタイプshortまで狭められ、潜在的桁あふれを取り除く。
最後に、istore-c命令が処理される。目標とするタイプがタイプshortであり、オペランドが桁あふれを伴わないから、istore-c命令は、参照番号167で、sstore-c命令に最適化される。変換されたバイトコードは、参照番号318で示されている。
【0073】
ここで図22Bを参照すると、本発明の一実施形態による命令変換を説明するブロック図が示されている。これは、最適化不可能な演算式への本発明の応用法を示している。それにもかかわらず、変換されたコードは、未変換コードとの意味論的同等性を維持している。図22Bは、値a、b、及び、cをタイプshortとする時の以下のJava(登録商標)表現に対する変換処理を説明している。
short c=(short)((a+b)/c)
この式に対するJava(登録商標)バイトコードシーケンスは、参照番号320で示されている。
【0074】
命令変換は、参照番号322で表されたiload-a命令で始まる。第1のより小さなタイプに付随する命令が、load322及び324とadd326との命令に対して使用される。表1で明記した通り、add命令326は、桁あふれの可能性を引き起こすが、第2のより大きなタイプの使用を必要としない。しかし、div330の命令は、桁あふれに影響される。これは、表2で示されている。すなわち、桁あふれの問題を引き起こす命令は、訂正されなければならない。この問題は、参照番号322まで「ロールバック」して、オペランド「a」に対して第2の大きなタイプの命令を使用することによって訂正される。
【0075】
命令変換がオペランド「b」もまたより大きなタイプに変換されるべきであると判断され、2度目のロールバックを必要とするまで、命令変換は、参照番号332で2度目を続行する。命令変換は、次に、オペランド「c」に対する命令がより大きなタイプの使用を必要とすると命令変換が判断されるまで、参照番号334で3度目を続行する。3度目のロールバックが実行され、オペランド「c」のタイプが訂正されて、変換処理は、参照番号336で4度目の変換処理が続行された後で完了する。
本発明の理解を更に助けるために、上記で検討した図22Bの例は、図10から図21を参照して以下で更に詳細に説明される。
【0076】
iload-a命令、iload-b命令、及び、iadd命令の最初の変換は、前記の例で説明したように進行する。次に、iload-c命令は、参照番号167で、sload-c命令に変換される。次に、idiv命令が処理される。表2で明記した通り、idivは、桁あふれに影響され得る命令である。「a+b」オペランドは、それが「+」演算子によって作り出され、その演算子が表1で示したように桁あふれを引き起こすことがあるので、桁あふれの可能性となる。少なくとも1つのオペランドが桁あふれの可能性となっているので、桁あふれを有する第1のオペランドへのロールバックが参照番号218で実行される。
【0077】
参照番号270で、現在の命令の変換が割り込まれる。参照番号274で、桁あふれがa+bオペランドと結び付けられ、そのために、ロールバックポイントは、a+bオペランドに対するロールバックポイントに設定される。参照番号278で、ロールバック命令の目標とするタイプは、タイプshortからタイプintに広げられる。参照番号280で、ロールバックされる行き先の命令を変換する指示が作られる。参照番号282で、変換処理は、以前にsload-a命令に変換されたiload-a命令において再開される。このiload-a命令は、参照番号284で変換される。
【0078】
ロールバックの結果として、iload-a命令は、参照番号338で処理される。参照番号124で、結果のタイプと目標とするタイプとが照合される。結果のタイプがshortで、目標とするタイプがintであるから、そのタイプは一致しない。すなわち、shortをintに上げるために、S2I命令が作り出される。処理は、iload-b命令及びiadd命令を用いて続行される。iadd命令に対するオペランドは、参照番号210において潜在的桁あふれを伴わず、従って、最適化された結果タイプが参照番号220で判断される。参照番号234で、オペランドのタイプが比較される。「a」オペランドが今はタイプintであり、「b」オペランドがまだタイプshortであるから、「b」オペランドに対してロールバックが実行される。参照番号276で、ロールバック命令は、iload-b命令340に設定される。また、参照番号278で、目標とするタイプはintに設定される。参照番号280で、現在の命令を変換する指示が作られる。参照番号282及び284で、変換がiload-b命令において再開され、命令が変換される。
参照番号124で、結果のタイプと目標とするタイプとが照合される。結果のタイプがshortで、目標とするタイプがintであるから、そのタイプは一致しない。すなわち、shortをintに上げるために、S2I命令が作り出される。
【0079】
次に、iadd命令が処理される。2度ロールバックした後では、いずれのオペランドも桁あふれの可能性を持っていない。従って、参照番号210で、オペランドが潜在的桁あふれを伴わないという指示が作られ、最適化された命令タイプが参照番号220で決められる。参照番号232で、命令タイプは、最大のオペランドタイプに設定される。「a+b」オペランドがタイプintであり、「c」オペランドがタイプshortであるから、命令タイプはintに設定される。「c」オペランドのタイプが命令タイプと異なるので、参照番号236で、「c」オペランドに対してロールバックが実行される。参照番号276で、ロールバック命令は、iload-c命令に設定される。参照番号278で、ロールバック命令の目標とするタイプは、タイプshortからタイプintに広げられる。変換処理は、iload-c命令342において再開される。
【0080】
参照番号124で、結果のタイプと目標とするタイプとが照合される。結果のタイプがshortで、目標とするタイプがintであるから、そのタイプは一致しない。すなわち、shortをintに上げるために、S2I命令が作り出される。
次に、idiv命令が処理される。参照番号238において、両方のオペランドがタイプintであるから、最適化された命令タイプはintに設定される。参照番号222で、intの気味のある命令(idiv)が選択される。最後の命令シーケンスは、図22の参照番号344で表されている。
【0081】
本発明は、整数タイプに関して説明されたが、当業者は、本発明が浮動小数点演算式に対しても同様に適用し得ることを認めるであろう。更に、本発明は、「Java Card(登録商標)」技術に関して説明されたが、当業者は、本発明が他の多くのプラットフォームに対しても同様に適用可能であることを認めるであろう。これらのプラットフォームには、例として挙げると、K仮想計算機(KVM)技術が含まれる。KVM技術は、1999年6月8日にサン・マイクロシステムズ・インコーポレーテッドから出版された「K仮想計算機(KVM)・白書」で説明されている。
本発明は、ソフトウエア又はハードウエアにおいて実施されるであろう。本発明は、他のプロセッサにおいて実施されてもよく、同様に、プログラム可能ゲートアレー装置、「特定用途向け集積回路(ASIC)」、及び、他のハードウエアにおいて実施されてもよい。
【0082】
演算式の適応最適化に関する新しい方法が以上のように説明された。同一タイプの命令は、リソース限定型計算機上で実行するために、第2のより小さな(より小さなビット数を有する)整数タイプのための意味論的同等タイプの命令に変換され、従って、比較的効率的なスタック利用と実行速度の増加とをもたらす。本発明の実施形態及び応用例が示され説明されたが、本発明の開示の恩恵を受ける当業者には、本明細書の革新的概念から逸脱することなく、上述のもの以外に更に多くの変更が可能であることが明らかであろう。従って、本発明は、特許請求の範囲の精神において限定されるが、それ以外では限定されないものとする。
【図面の簡単な説明】
【図1】 高級言語で書かれたプログラムをコンパイルする方法を示すブロック図である。
【図2A】 32ビットに拡大された2つの16ビットオペランドを加え合わせるためのスタックの使用法を示す流れ図である。
【図2B】 32ビットに拡大された2つの16ビットオペランドを加え合わせるためのスタックの使用法を示すブロック図である。
【図3A】 2つの32ビットオペランドを加え合わせるためのスタックの使用法を示す流れ図である。
【図3B】 2つの32ビットオペランドを加え合わせるためのスタックの使用法を示すブロック図である。
【図4A】 本発明の一実施形態に従って、リソース限定型計算機上での実行のために演算式を変換する方法を示すブロック図である。
【図4B】 本発明の一実施形態に従って、Java(登録商標)の部類に属するファイルを変換する段階を示すブロック図である。
【図5A】 デスクトップコンピュータ上での2つのタイプshortの値の加算を説明するコード見本を示す図である。
【図5B】 リソース限定型コンピュータ上での2つのタイプshortの値の加算を説明するコード見本を示す図である。
【図6A】 2つのタイプshortの値の加算、及び、その結果を直ちにデスクトップコンピュータ上で型に入れることを説明するコード見本を示す図である。
【図6B】 リソース限定型コンピュータ上に桁あふれを持ち込む可能性のある、演算の結果の直ぐの型入れを説明するコード見本を示す図である。
【図7A】 3つのタイプshortの値の加算、及び、その結果を直ちにデスクトップコンピュータ上で型に入れることを説明するコード見本を示す図である。
【図7B】 リソース限定型コンピュータ上に桁あふれをもたらす可能性がある演算によるオペランド上の桁あふれによって影響されない演算の実行を説明するコード見本を示す図である。
【図8A】 2つのタイプshortの値の加算、及び、その結果をデスクトップコンピュータ上のタイプshortの値で割り算することを説明するコード見本を示す図である。
【図8B】 リソース限定型コンピュータ上に桁あふれをもたらす可能性がある演算によって作り出されたオペランド上の桁あふれによって影響された演算の実行を説明するコード見本を示す図である。
【図9】 本発明の一実施形態によるnベースタイプの演算式最適化の方法を示す流れ図である。
【図10】 本発明の一実施形態によるnベースタイプの演算式最適化の方法を示す詳細な流れ図である。
【図11】 本発明の一実施形態による命令を変換する段階を示す流れ図である。
【図12A】 本発明の一実施形態によるターゲット命令を変換する方法を示す流れ図である。
【図12B】 本発明の一実施形態による初期値命令を変換する方法を示す流れ図である。
【図13】 本発明の一実施形態によるタイプ変換命令を変換する方法を示す流れ図である。
【図14】 本発明の一実施形態によるスタック操作命令を変換する方法を示す流れ図である。
【図15】 本発明の一実施形態による演算式を変換する方法を示す流れ図である。
【図16】 本発明の一実施形態による最適化された命令のタイプを判断する方法を示す流れ図である。
【図17】 本発明の一実施形態による、結果のタイプ及び結果の桁あふれを判断する方法を示す流れ図である。
【図18】 本発明の一実施形態によるロールバックポイントを記録する方法を示す流れ図である。
【図19】 本発明の一実施形態による変換処理をロールバックする方法を示す流れ図である。
【図20】 本発明の一実施形態による命令最適化の結果を伝達する段階を示す流れ図である。
【図21】 本発明の一実施形態による異なる制御経路からの変換情報を結合する段階を示す流れ図である。
【図22A】 本発明の一実施形態による命令変換を示すブロック図である。
【図22B】 本発明の一実施形態による命令変換を示すブロック図である。
Claims (1)
- 第1のベースを有する第1のプロセッサのために形成され、演算子と少なくとも1つのオペランドとを含む第1の命令を受け取る段階と、
前記少なくとも1つのオペランドが前記第1のベースよりも小さい第2のベースを超える潜在的桁あふれを伴わない時、又は、前記演算子が桁あふれに敏感でない時、前記第1の命令を、前記第2のベースを有する第2のプロセッサに対して最適化された第2の命令に変換する段階と、
前記少なくとも1つのオペランドが前記第2のベースを超える桁あふれの可能性を伴う時、及び、前記演算子が桁あふれに敏感である時、前記少なくとも1つのオペランドに付随する潜在的桁あふれの源であり、以前に最適化されている第3の命令を、前記第2のベースよりも大きく前記第1のベースよりも小さいか又は等しい、より広いベースに変換する段階と、
を含み、
前記第1の命令は、算術であり、
前記第1の命令の前記変換段階の後で、前記第1のプロセッサのために形成された全ての命令が変換されるまで、前記第1の命令を受け取る段階に戻る段階を更に含み、
全ての制御経路において、各命令を後続命令にリンクする段階を更に含み、
前記第1の命令の前記変換段階は、
命令の結果の各々を、前記結果を消費する全ての命令にリンクする段階と、
前記変換段階が値を作り出す段階を含む場合、前記値を生み出した命令に前記値をリンクする段階と、
前記値が桁あふれの可能性を伴う場合、前記桁あふれを最初に引き起こした命令に前記値をリンクする段階と、
を更に含み、
前記第1のベースは、前記第1のベースのサイズよりも小さいサイズを有する少なくとも1つのデータタイプ上で算術演算を実行するために、前記第1のプロセッサによって使用され、
前記少なくとも1つのデータタイプのサイズよりも大きいサイズを有する前記第2のベースは、前記少なくとも1つのデータタイプ上で算術演算を実行するために、前記第2のプロセッサによって使用される、
ことを特徴とする、演算式最適化の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/439,113 US6363523B1 (en) | 1999-11-12 | 1999-11-12 | Optimization of N-base typed arithmetic expressions |
US09/439,113 | 1999-11-12 | ||
PCT/US2000/031029 WO2001035201A1 (en) | 1999-11-12 | 2000-11-10 | Optimization of n-base typed arithmetic expressions |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011092259A Division JP5325925B2 (ja) | 1999-11-12 | 2011-04-18 | Nベースタイプの演算式の最適化 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2003515203A JP2003515203A (ja) | 2003-04-22 |
JP2003515203A5 JP2003515203A5 (ja) | 2008-01-10 |
JP4786101B2 true JP4786101B2 (ja) | 2011-10-05 |
Family
ID=23743348
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001536669A Expired - Lifetime JP4786101B2 (ja) | 1999-11-12 | 2000-11-10 | Nベースタイプの演算式の最適化 |
JP2011092259A Expired - Lifetime JP5325925B2 (ja) | 1999-11-12 | 2011-04-18 | Nベースタイプの演算式の最適化 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011092259A Expired - Lifetime JP5325925B2 (ja) | 1999-11-12 | 2011-04-18 | Nベースタイプの演算式の最適化 |
Country Status (8)
Country | Link |
---|---|
US (3) | US6363523B1 (ja) |
EP (1) | EP1232430B1 (ja) |
JP (2) | JP4786101B2 (ja) |
KR (1) | KR20020087384A (ja) |
CN (1) | CN1287257C (ja) |
AU (1) | AU1484901A (ja) |
DE (1) | DE1232430T1 (ja) |
WO (1) | WO2001035201A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011150727A (ja) * | 1999-11-12 | 2011-08-04 | Oracle America Inc | Nベースタイプの演算式の最適化 |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8631066B2 (en) * | 1998-09-10 | 2014-01-14 | Vmware, Inc. | Mechanism for providing virtual machines for use by multiple users |
US7200842B1 (en) | 1999-02-02 | 2007-04-03 | Sun Microsystems, Inc. | Object-oriented instruction set for resource-constrained devices |
JP2001005675A (ja) * | 1999-06-21 | 2001-01-12 | Matsushita Electric Ind Co Ltd | プログラム変換装置及びプロセッサ |
US7010786B2 (en) * | 1999-11-12 | 2006-03-07 | Sun Microsystems, Inc. | Predictive arithmetic overflow detection |
US8453133B2 (en) * | 1999-11-12 | 2013-05-28 | Oracle America, Inc. | Optimization of N-base typed arithmetic instructions via rework |
US7207037B2 (en) * | 1999-11-12 | 2007-04-17 | Sun Microsystems, Inc. | Overflow sensitive arithmetic instruction optimization using chaining |
US7107581B2 (en) * | 1999-11-12 | 2006-09-12 | Sun Microsystems, Inc. | Overflow predictive arithmetic instruction optimization using chaining |
US20010007146A1 (en) * | 1999-12-23 | 2001-07-05 | Uwe Hansmann | Method for providing a set of software components |
US20100174717A1 (en) * | 2002-02-28 | 2010-07-08 | Olivier Fambon | Interative serialisation procedure for structured software objects |
US7171438B2 (en) * | 2002-11-12 | 2007-01-30 | Sandbridge Technologies, Inc. | Method for recognition of full-word saturating addition and subtraction |
WO2006020729A2 (en) * | 2004-08-12 | 2006-02-23 | Sandbridge Technologies, Inc. | Recognition of acyclic instruction patterns |
US7661096B2 (en) * | 2004-02-13 | 2010-02-09 | Microsoft Corporation | Interaction with nested and non-nested streams |
JP2006227939A (ja) * | 2005-02-17 | 2006-08-31 | Matsushita Electric Ind Co Ltd | 演算装置 |
CN100410873C (zh) * | 2005-04-12 | 2008-08-13 | 威盛电子股份有限公司 | 分离饱和加减功能以改善处理器管线的关键执行阶段时程 |
US20070050605A1 (en) * | 2005-08-29 | 2007-03-01 | Bran Ferren | Freeze-dried ghost pages |
US7653834B2 (en) | 2005-08-29 | 2010-01-26 | Searete, Llc | Power sparing synchronous apparatus |
US7877584B2 (en) * | 2005-08-29 | 2011-01-25 | The Invention Science Fund I, Llc | Predictive processor resource management |
US8516300B2 (en) * | 2005-08-29 | 2013-08-20 | The Invention Science Fund I, Llc | Multi-votage synchronous systems |
US8181004B2 (en) * | 2005-08-29 | 2012-05-15 | The Invention Science Fund I, Llc | Selecting a resource management policy for a resource available to a processor |
US7739524B2 (en) * | 2005-08-29 | 2010-06-15 | The Invention Science Fund I, Inc | Power consumption management |
US7607042B2 (en) * | 2005-08-29 | 2009-10-20 | Searete, Llc | Adjusting a processor operating parameter based on a performance criterion |
US20070050606A1 (en) * | 2005-08-29 | 2007-03-01 | Searete Llc, A Limited Liability Corporation Of The State Of Delaware | Runtime-based optimization profile |
US7647487B2 (en) | 2005-08-29 | 2010-01-12 | Searete, Llc | Instruction-associated processor resource optimization |
US8255745B2 (en) * | 2005-08-29 | 2012-08-28 | The Invention Science Fund I, Llc | Hardware-error tolerant computing |
US7725693B2 (en) | 2005-08-29 | 2010-05-25 | Searete, Llc | Execution optimization using a processor resource management policy saved in an association with an instruction group |
US8214191B2 (en) * | 2005-08-29 | 2012-07-03 | The Invention Science Fund I, Llc | Cross-architecture execution optimization |
US8423824B2 (en) | 2005-08-29 | 2013-04-16 | The Invention Science Fund I, Llc | Power sparing synchronous apparatus |
US7539852B2 (en) | 2005-08-29 | 2009-05-26 | Searete, Llc | Processor resource management |
US7779213B2 (en) * | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US8209524B2 (en) | 2005-08-29 | 2012-06-26 | The Invention Science Fund I, Llc | Cross-architecture optimization |
US7627739B2 (en) * | 2005-08-29 | 2009-12-01 | Searete, Llc | Optimization of a hardware resource shared by a multiprocessor |
US8689194B1 (en) * | 2007-08-20 | 2014-04-01 | The Mathworks, Inc. | Optimization identification |
CN101814009B (zh) * | 2009-02-25 | 2011-12-21 | 慧国(上海)软件科技有限公司 | 闪存装置、资料储存系统、以及传送特殊命令至闪存装置的方法 |
US9003377B2 (en) * | 2010-01-07 | 2015-04-07 | Microsoft Technology Licensing, Llc | Efficient resumption of co-routines on a linear stack |
US8572594B2 (en) | 2010-12-22 | 2013-10-29 | Microsoft Corporation | Invasion analysis to identify open types |
US9652358B1 (en) | 2016-04-14 | 2017-05-16 | Semmle Limited | Type widening for source code analysis |
JP7163697B2 (ja) * | 2018-09-28 | 2022-11-01 | 富士通株式会社 | 生成プログラム,情報処理装置及び生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05505692A (ja) * | 1991-03-07 | 1993-08-19 | ディジタル イクイプメント コーポレイション | 変換コードを実行するための効果的エラー報告 |
JPH06337792A (ja) * | 1993-05-27 | 1994-12-06 | Matsushita Electric Ind Co Ltd | プログラム変換装置およびプロセッサ |
Family Cites Families (58)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US574041A (en) * | 1896-12-29 | Mcolure | ||
US3805045A (en) | 1972-10-30 | 1974-04-16 | Amdahl Corp | Binary carry lookahead adder using redundancy terms |
US3993891A (en) | 1975-07-03 | 1976-11-23 | Burroughs Corporation | High speed parallel digital adder employing conditional and look-ahead approaches |
JPS55112651A (en) * | 1979-02-21 | 1980-08-30 | Fujitsu Ltd | Virtual computer system |
US4429370A (en) * | 1981-04-23 | 1984-01-31 | Data General Corporation | Arithmetic unit for use in a data processing system for computing exponent results and detecting overflow and underflow conditions thereof |
US4504924A (en) | 1982-06-28 | 1985-03-12 | International Business Machines Corporation | Carry lookahead logical mechanism using affirmatively referenced transfer gates |
US4941119A (en) * | 1988-11-30 | 1990-07-10 | Control Data Corporation | Method and apparatus for predicting an overflow in an integer multiply |
US5617574A (en) * | 1989-05-04 | 1997-04-01 | Texas Instruments Incorporated | Devices, systems and methods for conditional instructions |
JPH03100827A (ja) | 1989-09-14 | 1991-04-25 | Mitsubishi Electric Corp | オーバフロー検出回路 |
US5107451A (en) * | 1990-01-30 | 1992-04-21 | The Boeing Company | Method and apparatus for pipelined detection of overflow in residue arithmetic multiplication |
US5058048A (en) * | 1990-04-02 | 1991-10-15 | Advanced Micro Devices, Inc. | Normalizing pipelined floating point processing unit |
US5301341A (en) * | 1990-11-28 | 1994-04-05 | International Business Machines Corporation | Overflow determination for three-operand alus in a scalable compound instruction set machine which compounds two arithmetic instructions |
US5102645A (en) * | 1990-06-21 | 1992-04-07 | Liquid Carbonic Corporation | Method for manufacture of high purity carbon monoxide |
IL100987A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Method and device for encoding |
IL100986A (en) * | 1991-02-27 | 1997-01-10 | Digital Equipment Corp | Method for compiling code |
US5305456A (en) * | 1991-10-11 | 1994-04-19 | Security Integration, Inc. | Apparatus and method for computer system integrated security |
US5418959A (en) * | 1992-11-30 | 1995-05-23 | Intel Corporation | Instruction operation size optimization |
US5606677A (en) | 1992-11-30 | 1997-02-25 | Texas Instruments Incorporated | Packed word pair multiply operation forming output including most significant bits of product and other bits of one input |
US5408670A (en) | 1992-12-18 | 1995-04-18 | Xerox Corporation | Performing arithmetic in parallel on composite operands with packed multi-bit components |
DE69434971T2 (de) * | 1993-05-27 | 2008-01-17 | Matsushita Electric Industrial Co., Ltd., Kadoma | Programmumsetzungseinheit |
US5446901A (en) * | 1993-06-30 | 1995-08-29 | Digital Equipment Corporation | Fault tolerant distributed garbage collection system and method for collecting network objects |
US5825407A (en) * | 1993-09-13 | 1998-10-20 | Albrit Technologies Ltd. | Cable television audio messaging systems |
US5668999A (en) | 1994-12-20 | 1997-09-16 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US5630066A (en) | 1994-12-20 | 1997-05-13 | Sun Microsystems, Inc. | System and method for locating object view and platform independent object |
US5659754A (en) | 1995-03-31 | 1997-08-19 | Sun Microsystems, Inc. | Method and apparatus for an improved optimizing compiler |
CA2173695A1 (en) * | 1995-04-14 | 1996-10-15 | Panagiotis Kougiouris | Method and system for providing interoperability among processes written to execute on different operating systems |
US5724279A (en) | 1995-08-25 | 1998-03-03 | Microsoft Corporation | Computer-implemented method and computer for performing modular reduction |
US5878266A (en) * | 1995-09-26 | 1999-03-02 | Advanced Micro Devices, Inc. | Reservation station for a floating point processing unit |
US5732263A (en) * | 1995-10-03 | 1998-03-24 | International Business Machines Corporation | Systems, methods and computer program products for generating and validating user defined object classes in an object oriented programming environment after build time |
US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
US6067575A (en) | 1995-12-08 | 2000-05-23 | Sun Microsystems, Inc. | System and method for generating trusted, architecture specific, compiled versions of architecture neutral programs |
US5790859A (en) | 1995-12-21 | 1998-08-04 | International Business Machines Corporation | Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler |
US5784553A (en) * | 1996-01-16 | 1998-07-21 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs |
WO1997027544A1 (en) * | 1996-01-24 | 1997-07-31 | Sun Microsystems, Inc. | Processor with accelerated array access bounds checking |
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6075863A (en) * | 1996-02-28 | 2000-06-13 | Encanto Networks | Intelligent communication device |
US5794049A (en) * | 1996-06-05 | 1998-08-11 | Sun Microsystems, Inc. | Computer system and method for executing architecture specific code with reduced run-time memory space requirements |
US5844218A (en) * | 1996-07-16 | 1998-12-01 | Transaction Technology, Inc. | Method and system for using an application programmable smart card for financial transactions in multiple countries |
MY126363A (en) * | 1996-10-25 | 2006-09-29 | Gemalto Sa | Using a high level programming language with a microcontroller |
US5884316A (en) * | 1996-11-19 | 1999-03-16 | Microsoft Corporation | Implicit session context system with object state cache |
US5920720A (en) * | 1997-02-25 | 1999-07-06 | Microsoft Corporation | Efficient computer based virtual machine object structure |
DE69827405T2 (de) * | 1997-03-24 | 2005-05-19 | Visa International Service Association, Foster City | System und verfahren für eine mehrzweckchipkarte die eine nachträgliche speicherung einer anwendung auf dieser karte ermöglicht |
US6003038A (en) * | 1997-03-31 | 1999-12-14 | Sun Microsystems, Inc. | Object-oriented processor architecture and operating method |
US6092147A (en) * | 1997-04-15 | 2000-07-18 | Sun Microsystems, Inc. | Virtual machine with securely distributed bytecode verification |
US6202143B1 (en) * | 1997-08-21 | 2001-03-13 | Samsung Electronics Co., Ltd. | System for fetching unit instructions and multi instructions from memories of different bit widths and converting unit instructions to multi instructions by adding NOP instructions |
US6026237A (en) * | 1997-11-03 | 2000-02-15 | International Business Machines Corporation | System and method for dynamic modification of class files |
US5978825A (en) * | 1997-11-14 | 1999-11-02 | Crystal Semiconductor Corp. | Zero detection circuitry and methods |
US6247174B1 (en) * | 1998-01-02 | 2001-06-12 | Hewlett-Packard Company | Optimization of source code with embedded machine instructions |
US6247116B1 (en) * | 1998-04-30 | 2001-06-12 | Intel Corporation | Conversion from packed floating point data to packed 16-bit integer data in different architectural registers |
US6292935B1 (en) * | 1998-05-29 | 2001-09-18 | Intel Corporation | Method for fast translation of java byte codes into efficient native processor code |
US6093216A (en) * | 1998-05-29 | 2000-07-25 | Intel Corporation | Method of run-time tracking of object references in Java programs |
US6212633B1 (en) * | 1998-06-26 | 2001-04-03 | Vlsi Technology, Inc. | Secure data communication over a memory-mapped serial communications interface utilizing a distributed firewall |
FR2797963B1 (fr) | 1999-08-23 | 2002-11-29 | Trusted Logic | Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants |
US6363523B1 (en) * | 1999-11-12 | 2002-03-26 | Sun Microsystems, Inc. | Optimization of N-base typed arithmetic expressions |
GB2365610A (en) * | 2000-08-02 | 2002-02-20 | Ncr Int Inc | Self-service terminal |
US6988119B2 (en) * | 2001-06-29 | 2006-01-17 | Intel Corporation | Fast single precision floating point accumulator using base 32 system |
-
1999
- 1999-11-12 US US09/439,113 patent/US6363523B1/en not_active Expired - Lifetime
-
2000
- 2000-11-10 CN CNB008181950A patent/CN1287257C/zh not_active Expired - Lifetime
- 2000-11-10 WO PCT/US2000/031029 patent/WO2001035201A1/en active Application Filing
- 2000-11-10 AU AU14849/01A patent/AU1484901A/en not_active Abandoned
- 2000-11-10 KR KR1020027006138A patent/KR20020087384A/ko active IP Right Grant
- 2000-11-10 DE DE1232430T patent/DE1232430T1/de active Pending
- 2000-11-10 JP JP2001536669A patent/JP4786101B2/ja not_active Expired - Lifetime
- 2000-11-10 EP EP00977174.2A patent/EP1232430B1/en not_active Expired - Lifetime
-
2001
- 2001-11-01 US US10/002,437 patent/US6687898B2/en not_active Expired - Lifetime
-
2003
- 2003-10-14 US US10/686,513 patent/US7316007B2/en not_active Expired - Lifetime
-
2011
- 2011-04-18 JP JP2011092259A patent/JP5325925B2/ja not_active Expired - Lifetime
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05505692A (ja) * | 1991-03-07 | 1993-08-19 | ディジタル イクイプメント コーポレイション | 変換コードを実行するための効果的エラー報告 |
JPH06337792A (ja) * | 1993-05-27 | 1994-12-06 | Matsushita Electric Ind Co Ltd | プログラム変換装置およびプロセッサ |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011150727A (ja) * | 1999-11-12 | 2011-08-04 | Oracle America Inc | Nベースタイプの演算式の最適化 |
Also Published As
Publication number | Publication date |
---|---|
AU1484901A (en) | 2001-06-06 |
JP2011150727A (ja) | 2011-08-04 |
JP5325925B2 (ja) | 2013-10-23 |
EP1232430A1 (en) | 2002-08-21 |
CN1421001A (zh) | 2003-05-28 |
DE1232430T1 (de) | 2003-02-06 |
WO2001035201A1 (en) | 2001-05-17 |
US6687898B2 (en) | 2004-02-03 |
JP2003515203A (ja) | 2003-04-22 |
US7316007B2 (en) | 2008-01-01 |
KR20020087384A (ko) | 2002-11-22 |
EP1232430A4 (en) | 2007-01-10 |
US20020129344A1 (en) | 2002-09-12 |
US20040073894A1 (en) | 2004-04-15 |
US6363523B1 (en) | 2002-03-26 |
CN1287257C (zh) | 2006-11-29 |
EP1232430B1 (en) | 2020-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4786101B2 (ja) | Nベースタイプの演算式の最適化 | |
US6324686B1 (en) | Just in time compiler technique | |
US6298477B1 (en) | Method and apparatus for selecting ways to compile at runtime | |
US7366880B2 (en) | Facilitating value prediction to support speculative program execution | |
US8732678B2 (en) | Methods and apparatus for dynamic best fit compilation of mixed mode instructions | |
US6581206B2 (en) | Computer program language subset validation | |
Yellin et al. | The java virtual machine specification | |
US20030192035A1 (en) | Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment | |
EP1301854B1 (en) | Method and apparatus for creating efficient native methods that extend a bytecode interpreter | |
WO2000079383A2 (en) | Supporting multi-dimensional space-time computing through object versioning | |
JP2005501334A (ja) | Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク | |
US7036120B2 (en) | Two tier clusters for representation of objects in Java programming environments | |
US6978448B1 (en) | Method and apparatus for rewriting bytecodes to minimize runtime checks | |
Franz | Run-time code generation as a central system service | |
US20040025009A1 (en) | Method and apparatus for acceleration of multimedia content | |
US7010786B2 (en) | Predictive arithmetic overflow detection | |
US7107581B2 (en) | Overflow predictive arithmetic instruction optimization using chaining | |
US8453133B2 (en) | Optimization of N-base typed arithmetic instructions via rework | |
US7207037B2 (en) | Overflow sensitive arithmetic instruction optimization using chaining | |
Glossner et al. | Towards a very high bandwidth wireless battery powered device | |
Wong | Optimizing floating point operations in Scheme | |
Darcy et al. | Analysis of “Proposal for Extension to Java Floating Point Semantics, Revision 1” | |
Glossner et al. | Towards a very high bandwidth wireless handheld device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071112 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071112 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100826 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20101126 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20101216 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110418 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110420 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110527 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20110601 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110623 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110713 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4786101 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140722 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140722 Year of fee payment: 3 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |