JPH1115674A - 異なるランタイム環境において実行するための実行可能プログラムにおいて機能的に類似したコードシーケンスを発生するコンパイラ - Google Patents
異なるランタイム環境において実行するための実行可能プログラムにおいて機能的に類似したコードシーケンスを発生するコンパイラInfo
- Publication number
- JPH1115674A JPH1115674A JP10161974A JP16197498A JPH1115674A JP H1115674 A JPH1115674 A JP H1115674A JP 10161974 A JP10161974 A JP 10161974A JP 16197498 A JP16197498 A JP 16197498A JP H1115674 A JPH1115674 A JP H1115674A
- Authority
- JP
- Japan
- Prior art keywords
- executable program
- program
- computer
- instruction
- version
- 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.)
- Abandoned
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
を発生する方法を提供することである。 【解決手段】コンパイラ−ローダシステムは、命令セッ
トアーキテクチャの異なるバージョンに応じたターゲッ
トコンピュータに異なるロード実行可能なイメージを形
成することができる。この異なるイメージは、二次記憶
装置における単一実行可能プログラムから形成される。
コンパイラは、ターゲットコンピュータの両方のバージ
ョンで実行可能なルーチンおよび(i)ルーチンが呼び
出されるプログラム位置のアドレス、(ii)ルーチンと
同じ機能をすぐれた性能でもって実行するターゲットコ
ンピュータの1つのバージョンのみで実行可能な命令、
および(iii)どのバージョンのターゲットマシンがそ
の命令を実行しうるかを指示する値を有するアーキテク
チャエントリを含む実行可能なプログラムを発生する。
ローダは、ターゲットマシンが命令を実行しうるかを決
定し、もし、そうである場合には、アーキテクチャエン
トリにおけるアドレスに現れるサブルーチンコールを、
アーキテクチャエントリに現れる命令で置き換える。
Description
ピュータおよびコンピュータアーキテクチャの分野に関
する。特に、本発明は、異なる命令セットまたは他のア
ーキテクチャ特徴を有するコンピュータのためのコンピ
ュータ特定プログラムコードを発生するコンパイラ、ロ
ーダおよび類似のコンピュータプログラムに関するもの
である。
発されてくるにつれて、新しい命令および他の特徴がそ
れらに加えられてくる。より新しいコンピュータおよび
それらに書き込まれたソフトウエア(プログラム)は、
それらのより新しい命令および特徴を使用することがで
き、同じアーキテクチャのより古いコンピュータでは得
られなかったような効果を達成することができる。した
がって、より新しいプログラムまたはプログラムのより
新しいバージョンは、新しい命令を使用することが望ま
しい。しかしながら、一般的には、より新しいプログラ
ムは、より新しいコンピュータにて実行できるだけでな
く、より古いコンピュータでも実行できるものであるの
が望ましい。すなわち、より新しいプログラムは、遡及
的に、すなわち、後ろへ遡って両立性のあるものである
のが望ましい。ソフトウエアの売主は、種々なバージョ
ンのハードウエアを有する顧客へプログラムを売るが、
各プログラムの1つのバージョンだけサポートすればよ
い。顧客は、プログラムの1つのバージョンを買い、自
分のハードウエアのバージョンがどれであるかに関係な
しに、自分のハードウエアにそのプログラムを適用す
る。また、いわゆる、異種の環境、すなわち、プログラ
ムを実行する能力を必要としているより古いコンピュー
タとより新しいコンピュータとからなるコンピュータク
ラスタまたはコレクションにおいてそのプログラムを使
用したい顧客は、そのプログラムの1つのバージョンの
みをインストールし維持するだけでよい。したがって、
コンピュータ設計者が一般的に目指すところは、コンピ
ュータシステムの性能を改善し、同時に、新しいまたは
更新されたプログラムが広く使用しうるものであるよう
に遡及的な両立性を与えるような新しい命令の使用を促
進させることである。
としては、トラップ・アンド・エミュレートと称される
ものがあった。このスキームにおいては、実行可能なプ
ログラムが、1つまたはそれ以上の新しい命令を使用し
てコンパイルされ、この実行可能なプログラムが実行さ
れるべきコンピュータにおいて使用するための更新され
たオペレーティングシステムソフトウエアモジュールが
設けられる。より古いコンピュータが新しい命令を実行
しようとする時、不当命令トラップが中央プロセッサの
設計によって発生する。トラップハンドラーと称される
トラップベクトルが、その更新されたオペレーティング
システムモジュールへ指示する。このトラップハンドラ
ーは、その不当命令を検査し、それがより新しいコンピ
ュータにて正しく実行できるより新しい命令であるのか
を決定する。それから、そのトラップハンドラーは、ソ
フトウエアにてその新しい命令をエミュレートするルー
チンをランチする。このエミュレーションルーチンが完
了するとき、プログラムコントロールは、その実行可能
プログラムの、その新しい命令に続く命令のところに復
帰される。
アンド・エミュレート技法は、種々な欠点を有してお
り、そのために、あまり魅力的なものではない。その1
つの欠点は、新しい命令がそのアーキテクチャに加えら
れ、実行可能なプログラムにおいて使用されるときには
いつでも、オペレーティングシステムを更新する必要が
あるということである。さらに別の大きな欠点は、性能
である。トラップを行なうために100の単位のプロセ
ッサクロックサイクルに対する大きなペナルティがあ
る。実際に、より古いコンピュータの性能は、より新し
い命令を欠いている元のコンピュータの性能より悪くな
るのが一般的である。したがって、トラップ・アンド・
エミュレート技法は、遡及的、すなわち、後ろへ遡って
両立性を与えつつ、より古いコンピュータについても高
い性能を維持するという要望に十分に応えるものではな
い。
遡及的な両立性を維持し且つより古いバージョンのコン
ピュータの性能に与える影響を最少としつつ、より新し
いバージョンのコンピュータによって新しい命令を使用
できるようにするスキームが従来から要望されている。
本発明の目的は、このようなスキームを提供することで
ある。
範囲の請求項1に限定したような、コンピュータにおい
て実行可能なプログラムを発生する方法にある。
イム環境において実行しうる実行可能なプログラムを発
生するコンパイラを含む。ここで、異なるランタイム環
境は、例えば、命令セットアーキテクチャの異なるバー
ジョンを有するようなコンピュータでありうる。コンパ
イラは、実行可能なプログラムにおけるコードシーケン
スを発生する。これら各コードシーケンスは、実行可能
なプログラムが発生されるソースプログラムの部分によ
って必要とされる機能を実行する。各コードシーケンス
は、他のコードシーケンスよりも、ランタイム環境の対
応する1つにおいて実行するのにより適しており、これ
らコードシーケンスは、ランタイム環境の各々において
より適したコードシーケンスを実行しうるようにする仕
方で発生される。
異なるバージョンのコンピュータ、すなわち、1つはよ
り新しいコンピュータ、1つはより古いコンピュータに
て実行するためのものとされうる。この場合において、
コンパイラは、2つのコードシーケンスを発生する。こ
れらコードシーケンスのうちの一方は、より新しいコン
ピュータのみで実行されうる新しい命令であり、他方の
コードシーケンスは、その命令と同じ機能を実行する
が、より新しいコンピュータ並びにより古いコンピュー
タにて実行されうるようなルーチンである。
れた実行可能なプログラムは、より適したコードシーケ
ンスが実行されうるように、ランタイムで容易に変更さ
れうる。例えば、ローダプログラムの如き協動エンティ
ティは、より適したコードシーケンスにおいてパッチす
ることができ、すなわち、より適したコードシーケンス
が実行されるようにプログラムコントロールのフローを
変更することができる。したがって、より新しい命令
は、より新しいコンピュータにて使用され得て、そのル
ーチンは、トラップまたは他の同様の非効率的なメカニ
ズムを必要とせずに、より古いコンピュータにて使用さ
れ得る。
うちの1つは、そのデホールト実行を行なうようにして
発生されうるという点で効果がある。したがって、実行
可能なプログラムは、他のコードシーケンスおよび実行
可能なプログラムをパッチングする可能性を念頭に入れ
ていないようなより古いプログラムでありうるような環
境において実行されうる。この実行可能なプログラム
は、もし、発生されるデホールトコードシーケンスが遡
及的に両立性のあるコードシーケンスである場合には、
それでもなお正しく実行されうる。
シーケンスと共に、(i)ソースプログラムの部分によ
って必要とされる機能が実行されるべき実行可能なプロ
グラムにおけるプログラム位置を指定するアドレス、お
よび(ii)コードシーケンスのうちの1つの実行がより
適しているのは、どのランタイム環境においてかを指示
する値を含む実行可能なプログラムにおける付加的情報
を発生するコンパイラを含む。この付加的情報により、
イメージアクティベーションタイムでの協動エンティテ
ィによる実行可能なプログラムの速い効率的なパッチン
グが可能とされる。
明の実施例について本発明を説明する。
ており、この実施例によれば、コンピュータプログラム
が用意され、実行のためにターゲットコンピュータへロ
ードされる。高レベル言語にて書かれたソース言語プロ
グラム10は、ソースプログラム10の自然言語状コン
ストラクトを、デジタル呼によってより容易に理解され
る命令およびデータの如きオブジェクトコードコンスト
ラクトへと変換するコンパイラ12によってオペレート
される。コンパイラ12によって形成されるオブジェク
トコードコンストラクトのコレクションは、実行可能な
プログラム14と称される。この実行可能なプログラム
は、通常、後で実行するために、磁気ディスク上のファ
イルの如き持久性記憶装置におけるイメージとして保存
される。例えば、この実行可能なプログラム14は、ネ
ットワークサーバに存在し、また、ネットワークサーバ
を介してアクセスされうる。
トコル14は、2つの異なるコンピュータのどちらかで
実行されるものとされているが、それが実際にどちらの
コンピュータであるかは、コンパイル時では未知であ
る。ここでの説明では、これらコンピュータは、バージ
ョン1およびバージョン2と称する。実行可能なプログ
ラム14が実行されるべきとき、ローダ16は、その実
行可能なプログラム14を処理して、そのローダがオペ
レートするターゲットコンピュータにおけるロードされ
る実行可能なイメージを形成する。もし、ターゲットコ
ンピュータがバージョン1のコンピュータであるなら
ば、ローダ16は、バージョン1のコンピュータのメモ
リ20−1にバージョン1ロード実行可能イメージ18
−1を形成する。もし、ターゲットコンピュータがバー
ジョン2のコンピュータであるならば、ローダ16は、
バージョン2のコンピュータのメモリ20−2にバージ
ョン2ロード実行可能イメージ18−2を形成する。ロ
ーディングが完了した後、プログラムコントロールは、
通常の仕方でロードされた実行可能なイメージ18−1
または18−2へ転送され、その実行を開始する。
例示するために、バージョン1およびバージョン2のコ
ンピュータの特定の例を使用する。これらの例は、デジ
タルイクイップメントコーポレーションによって製造販
売されているAlphTM(アルファ)ファミリーのコンピュ
ータである。このファミリーの古いコンピュータおよび
新しいコンピュータは、特定の型のデータを処理するた
めにそれらが使用する命令のうちのあるいくつかの命令
に関して区別しうるものである。ある特定のケースは、
バイト(8ビット)データタイプの処理である。アルフ
ァアーキテクチャは、フラット64ビット仮想メモリア
ドレッシングを指定しており、したがって、アルファイ
ンプリメンテーションにおけるメモリワードの固有幅
は、64ビットである。このような理由を一つの理由と
して、アルファアーキテクチャの初期のバージョン(以
下、バージョン1と称する)の設計においては、レジス
タとメモリの間でデータを移動させるための命令(ロー
ドおよびストア命令)は、ロングワード(32ビット)
データタイプのための命令も存在するのであるが、主と
してカッドワード(64ビット)データタイプを取り扱
うのに限定されている。16ビットデータタイプと称さ
れるワード並びにバイト(8ビット)データタイプを取
り扱うために、バージョン1のアルファアーキテクチャ
は、いくつかの64ビット汎用レジスタのうちの1つ内
でバイトをマニュピレートするための命令を与える。
に、バージョン1のアルファコンピュータは、ある命令
のセットを実行する。これらは、バイトを含むカッドワ
ードをレジスタへもたらすためのカッドロード命令、レ
ジスタの所望の位置にバイトを挿入したりレジスタの所
望の位置からバイトを抽出したりする命令、およびデー
タ(新しいバイトを含む)をメモリへと戻すためのカッ
ドワードストア命令を含む。
ン(以下、バージョン2と称する)においては、バイト
およびワードロードおよびストアを直接に行なう命令が
存在する。これらの命令を使用すると、バイトおよびワ
ード変数を有するプログラムを簡単化でき、また、ある
場合には、それらプログラムの性能を増すことができ
る。
ョン1のアーキテクチャのスーパーセットと称されるも
のであり、すなわち、このバージョン2のアーキテクチ
ャは、新しい命令に加えて、バージョン1の命令のすべ
てを含む。したがって、バイトストアオペレーション
は、バージョン1のアルファコンピュータについて前述
したのと同じようにして、バージョン2のアルファコン
ピュータにて行われうる。そして、実際に、バージョン
1のコンピュータに対して書かれコンパイルされたプロ
グラムは、バージョン2のコンピュータにて変更されな
いままで実行されうる。しかしながら、バージョン2の
アルファコンピュータにて実行されるプログラムは、前
述したより古い方法に代えて、新しいバイトおよびワー
ド命令を使用するのが好ましい。
うな目的を達成するために協動する。1つの重要なエレ
メントは、実行可能なプログラム14を発生するコンパ
イラ12である。このコンパイラ12の機能について、
以下に、主として、それが発生する実行可能なプログラ
ム14の構造に関して説明する。コンパイラ12を実施
するための適当な手段については、ここでの説明から当
業者には明らかであろう。
挙げられたソースプログラム10から発生される実行可
能なプログラム14の構造を示す簡単なプログラム例の
リストである。この付録Aのリストに現れているエレメ
ントについて、以下に、ある程度詳細に説明する。
へ単純にコピーするs1と称するサブルーチンを含む。
これらの変数aおよびbは、バイトとして宣言される。
aおよびbは、バイトタイプの変数であるのでサブルー
チンs1において現れる割当てa=bは、バージョン1
のアルファコンピュータと、バージョン2のアルファコ
ンピュータとでは、異なった仕方で実施されるのが好ま
しい。何故ならば、前述したように、バージョン1のコ
ンピュータには、バイトロードおよびストア命令がない
からである。
能なプログラム14が異なるアルファ実施に対してこの
要件を取り扱うためにどのように構成されるかを示して
いる。相対プログラム位置0000で始まるプログラム
の主要部分は、バイトbを含むカッドワードを汎用レジ
スタt0へもたらすためロードカッドワード命令(1d
g u)を実行し、それから、そのバイトをt0内の最
下位位置に置くためにエクストラクトバイト命令(ex
tb1)を実行する。この点で、この割当て機能を完了
するために、このようにしてt0に置かれたバイトbを
メモリのバイトaのアドレスに記憶する必要がある。必
要とされるストアバイト機能をなすために、サブルーチ
ン(bsr)へのブランチが、stb routine
とラベルされたルーチンに対して実行される。このルー
チンは、後述するようなストアバイトオペレーションを
行なう。このサブルーチンstb routineが完
了するとき、バイト割当てa=bが完了され、それか
ら、リターン命令(ret)が、サブルーチンs1から
の復帰を実施する。
トaを含むカッドワードをレジスタt11へもたらすロ
ードカッドワード命令で始まる。それから、このルーチ
ンstb routineは、さもなければ零のフィー
ルドを含むアドレスa0、t12の下位ビットによって
示されるレジスタt12の位置にバイトb(t0から)
を入れるインサートバイト命令(insb1)を実行す
る。マスク命令(mskb1)は、バイトaを形成する
レジスタt11のビットをクリアし、したがって、t1
1は、aが配置されていたカッドワードを、aがそうで
あった相続く零のホールを有した状態で保持する。それ
から、論理和命令(bis)がバイトbをそのホールへ
挿入し、したがって、t11は、元々ロードされた同じ
カッドワードを、aの代わりにbが置かれた状態で保持
する。最後に、このカッドワードは、ストアカッドワー
ド(stq)命令を使用してメモリへ書き戻される。こ
の正味の効果は、勿論、メモリにおける単一バイトaが
バイトbによって置き換えられたことである。
実行のフローは、s1サブルーチンにおける位置000
0からbsrを通して0008まで行き、それから、s
tb routineの位置0010から位置0024ま
で行き、最後に、s1の位置000Cへ戻る。このシー
ケンスは、バージョン1のアルファコンピュータまたは
バージョン2のアルファコンピュータに関して実行しう
るようにして、バイトロード/ストアペアを実行する。
これは、実行可能なプログラム14の変更なしで実行さ
れるデホールトコードシーケンスである。
チャセクションと称されるセクションを示している。こ
れは、ローダが異なるロードされた実行可能なイメージ
18−1および18−2を形成することができるように
する情報を含む実行可能なプログラム14の別のセクシ
ョンである。このリストには、3つの重要なアイテム、
すなわち、バージョン指示値(0002)、アドレス
(0008)および命令(stb t0,(a0))が
ある。これらの3つのアイテムは、そこに現れているア
ドレス0008によって、位置0008でのbsr命令
に関連付けられるアーキテクチャエントリを形成する。
一般的に、ソースプログラム12によって必要とされる
各割当てオペレーションに対して1つのアーキテクチャ
エントリがある。この例は、1つの割当てしか有してい
ないので、アーキテクチャセクションには、1つのアー
キテクチャエントリしか示されていない。このアーキテ
クチャエントリにおけるバージョン指示値は、実行を行
なうターゲットコンピュータがそのアーキテクチャエン
トリに現れる命令を実行することができるかを、ローダ
が判断できるようにする。アドレスは、ローダが、st
b routineに対するコーリングポイントを識別
できるようにする。そして、その命令は、ローダによっ
て容易に識別され検索されうるように、そのアーキテク
チャエントリに置かれる。
ン2のアルファコンピュータにて実行されるべきときに
は、付録Aに示した実行可能なプログラム14を変更す
る。詳細には、ローダは、位置0008に現れているb
sr命令を、アーキテクチャエントリに現れるstb命
令で置き換える。その結果変更されたプログラムは、ソ
ースプログラムによって必要とされる同じ割当てオペレ
ーションを実行するが、実行のためのフローは異なる。
変更されたプログラムは、単に、位置000Cに復帰す
るまで直線的に実行し、サブルーチンstb rout
ineを呼び出すことはない。
ラムの実行のフローに影響を与えないような仕方で行わ
れねばならない。アルファアーキテクチャにおいて、す
べての命令は、同じサイズであり、32ビットである。
したがって、1つの命令は、命令ストリームにギャップ
を生じたり、命令ストリームのギャップを埋めたりせず
に、別の命令と置き換えられうる。他のアーキテクチャ
または置換スキームにおいては、デホールトシーケンス
を発生するとき、その後の置換を考慮する必要がある。
例えば、置換命令がデホールト命令より大きい場合に
は、デホールト命令に隣接した命令ストリームにおいて
ノーオペレーション(NOP)コマンドを発生する必要
がある。このような技法は、当業分野においてはよく知
られている。
るようなプログラム例は、バージョン1のアルファコン
ピュータに関して変更を要せずに実行しうるということ
である。したがって、このプログラムは、アーキテクチ
ャ情報およびstb命令におけるパッチングの可能性を
念頭においていないローダプログラムによってでも、メ
モリへロードされうる。これは、コードシーケンスのこ
のような配列によって達成される遡及的両立性をさらに
示すものである。
ションについて、本実施例について以下説明する。ロー
ディングプロセス中、ローダ16は、実行可能なプログ
ラム14のアーキテクチャセクションにアクセスする。
そして、ローダは、そこに見出したバージョン指示値
を、ターゲットコンピュータのバージョンを特定するタ
ーゲットコンピュータ環境における情報と比較する。ア
ルファアーキテクチャにおいては、この情報は、アマス
ク(アーキテクチャマスク)命令を介して手に入る。も
し、ターゲットコンピュータのバージョンがアーキテク
チャセクションの値によって特定されるものと一致しな
い場合には、ターゲットコンピュータは、そのアーキテ
クチャセクションに記憶された命令を実行することがで
きない。この場合において、ローダは、付録Aに示され
た実行可能なコードを、実行可能なプログラム14から
変更されていないメモリ20−1へと単にコピーするこ
とによって、バージョン1ロード実行可能イメージ18
−1を形成する。しかしながら、もし、ターゲットコン
ピュータのバージョンがそのアーキテクチャセクション
における値によって特定されるものと一致する場合に
は、ターゲットコンピュータは、そのアーキテクチャセ
クションに記憶された命令を実行することができる。こ
の場合において、ローダ16は、バージョンロード実行
可能イメージ18−2を形成する。ローダは、そのアー
キテクチャセクションに記憶されたアドレスおよび命令
を得る。それから、実行可能なプログラム14をメモリ
20−2へコピーしている間、または、コピーの後、ロ
ーダは、その特定されたアドレスに現れる命令を、その
アーキテクチャセクションから得られる命令で置き換え
る。
してきたのであるが、本発明の範囲内に入る他の多くの
可能な実施例がある。本発明は、命令セットアーキテク
チャを改訂することにより発生する問題を処理するのに
特に有用である。しかしながら、本発明は、より一般的
には、実行可能なプログラムが実行されうるような異な
るランタイム環境のセットにおいて効果的な結果をもた
らすのに適用されうる。このようなランタイム環境の例
としては、異なるオペレーティングシステム、通常のオ
ペレーティングモード対デバッグ、異なる浮動小数点演
算スキームまたは所望の精度がある。例示した実施例で
は、実行可能なプログラムは、2つのランタイム環境の
うちのどちらか一方にて実行され、2つの代替コードシ
ーケンスが発生される。本発明の原理は、2つ、3つ、
またはそれ以上の代替コードシーケンスが含まれるよう
な3つまたはそれ以上の異なるランタイム環境での実行
を行えるように拡張されうる。
実行可能なイメージ14を効果的に処理するのに外部ロ
ーダに頼っているが、別の実施例では、ランタイムでそ
の変更を実施する実行可能なプログラムにコードをそれ
自身で発生することができる。さらに別の実施例では、
発生されたルーチン(stb routineの如き)
は、ストアバイト機能が必要とされるような多重位置か
ら呼び出されうる。このようなスキームでは、stb命
令によって使用されるパラメータに特定のプリアレンジ
制約を課す必要がある。このような技法は、当業分野に
おいては知られており、これらを使用することにより、
発生される実行可能なプログラムのスペース効率をより
大きくすることができる。最後に、別の実施例では、デ
ホールトシーケンスが遡及的な両立性のあるルーチンで
なく、新しい命令であることの方が重要であることもあ
る。本特許請求の範囲は、これらのすべておよびその他
の実施例を包含しようとしているものである。
ングおよびローディングを示すブロック図である。
ペレーションを示すフローチャートを示す図である。
Claims (9)
- 【請求項1】 コンピュータにおけるソースプログラム
から異なるランタイム環境において実行されるための実
行可能なプログラムを発生する方法において、前記実行
可能なプログラムにおいて、該実行可能なプログラムが
発生されるソースプログラムの部分によって必要とされ
る機能を各々が実行するコードシーケンスを発生し、該
コードシーケンスは、他のコードシーケンスよりも、異
なるランタイム環境のうちの対応する1つにおいて実行
するのにより適しており、該コードシーケンスは、ラン
タイム環境の各々においてより適したコードシーケンス
の実行を可能とするような仕方で発生されることを特徴
とする方法。 - 【請求項2】 前記実行可能なプログラムにおいて、次
の情報、すなわち、(i)前記ソースプログラムの部分
によって必要とされる機能が実行されるべき前記実行可
能なプログラムにおけるプログラム位置を指定するアド
レス、および(ii)前記コードシーケンスのうちの1つ
の実行がより適しているのは、どのランタイム環境にお
いてかを指示する値を発生することを、更に、含む請求
項1記載の方法。 - 【請求項3】 ランタイム環境のうちの所定のランタイ
ム環境において実行するのにより適した前記コードシー
ケンスのうちの1つは、前記1つのコードシーケンスの
代わりにコードシーケンスのうちの別のコードシーケン
スを実行するために、前記実行可能なプログラムを変更
することのできるランタイム環境のうちの別のランタイ
ム環境における協動エンティティによる容易な識別およ
びデホールト実行を行えるような仕方で発生され、前記
他方のコードシーケンスは、前記協動エンティティによ
る容易な識別を行えるような仕方で発生される請求項1
記載の方法。 - 【請求項4】 前記異なるランタイム環境は、前記実行
可能なプログラムが実行されるための2つの異なるバー
ジョンのコンピュータであり、発生されるコードシーケ
ンスの数は、2であり、前記コードシーケンスのうちの
1つは、前記コンピュータの1つのバージョンのみにて
実行しうる命令であり、他方のコードシーケンスは、実
行中に命令よりも効率的でないが、前記コンピュータの
両方のバージョンで実行しうるルーチンである請求項1
記載の方法。 - 【請求項5】 前記コンピュータの2つのバージョン
は、命令セットアーキテクチャの2つの異なるバージョ
ンとの追従性によって区別され、命令セットアーキテク
チャのうちの1つのバージョンは、他方のバージョンの
スーパーセットである最近のバージョンである請求項4
記載の方法。 - 【請求項6】 前記コンピュータの両方のバージョン
は、64ビットメモリアーキテクチャであり、前記コー
ドシーケンスのうちの1つは、バイトストア命令であ
り、他方のコードシーケンスは、バイトストアオペレー
ションを行なう多重命令ルーチンである請求項4記載の
方法。 - 【請求項7】 実行可能なプログラムにおいて、該実行
可能なプログラムが発生されるソースプログラムの部分
によって必要とされる機能を行なう命令を発生し、該命
令は、前記実行可能なプログラムが実行されるためのコ
ンピュータの2つの異なるバージョンのうちの1つのみ
で実行可能であり、さらに、前記実行可能なプログラム
において、前記必要とされる機能を行うが、前記コンピ
ュータの両方のバージョンで実行可能であるようなルー
チンを発生し、前記実行可能なプログラムにおいて、
(i)前記機能が行われるべき前記実行可能なプログラ
ムにおけるプログラム位置を指定するアドレス、および
(ii)前記コンピュータのどのバージョンが前記命令を
実行できるかを指示する値を有するアーキテクチャエン
トリを発生することを特徴とする方法。 - 【請求項8】 前記ルーチンは、前記アーキテクチャ情
報に含まれたアドレスによって指定されるプログラム位
置から呼び出しうるサブルーチンであり、前記命令は、
前記アーキテクチャエントリに含まれており、さらに、
前記指定されたプログラム位置で前記実行可能なプログ
ラムにおける前記サブルーチンへのコールを発生し、前
記サブルーチンコールは、前記実行可能なプログラムの
他のものの実行のフローに影響せずに、前記命令と後で
置換できるような仕方で発生される請求項7記載の方
法。 - 【請求項9】 前記コンピュータの両方のバージョン
は、64ビットメモリアーキテクチャを有し、前記命令
およびルーチンによって行われる機能は、データの単一
バイトをメモリにストアすることである請求項7記載の
方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/873,147 US5920721A (en) | 1997-06-11 | 1997-06-11 | Compiler generating functionally-alike code sequences in an executable program intended for execution in different run-time environments |
US08/873147 | 1997-06-11 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH1115674A true JPH1115674A (ja) | 1999-01-22 |
Family
ID=25361066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP10161974A Abandoned JPH1115674A (ja) | 1997-06-11 | 1998-06-10 | 異なるランタイム環境において実行するための実行可能プログラムにおいて機能的に類似したコードシーケンスを発生するコンパイラ |
Country Status (3)
Country | Link |
---|---|
US (1) | US5920721A (ja) |
EP (1) | EP0892343A2 (ja) |
JP (1) | JPH1115674A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8221010B2 (en) | 2000-09-11 | 2012-07-17 | Zipher Limited | Tape drive and printing apparatus |
KR20140060299A (ko) * | 2011-09-07 | 2014-05-19 | 마이크로소프트 코포레이션 | 변형 컨텍스트-인식 데이터 소스 관리 |
Families Citing this family (53)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6163764A (en) * | 1998-10-12 | 2000-12-19 | Intel Corporation | Emulation of an instruction set on an instruction set architecture transition |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US6826748B1 (en) | 1999-01-28 | 2004-11-30 | Ati International Srl | Profiling program execution into registers of a computer |
US6526570B1 (en) * | 1999-04-23 | 2003-02-25 | Sun Microsystems, Inc. | File portability techniques |
US6286134B1 (en) * | 1999-04-23 | 2001-09-04 | Sun Microsystems, Inc. | Instruction selection in a multi-platform environment |
GB2389751B (en) * | 1999-05-28 | 2004-02-25 | Nec Corp | Mobile telecommunications system |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
JP3655152B2 (ja) * | 1999-11-29 | 2005-06-02 | 富士通株式会社 | ソフトウェア編集装置及び記憶媒体 |
JP3640081B2 (ja) * | 1999-12-27 | 2005-04-20 | 日本電気株式会社 | Mpiプログラムのコンパイルにおける最適化方法 |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
US6941549B1 (en) * | 2000-03-31 | 2005-09-06 | International Business Machines Corporation | Communicating between programs having different machine context organizations |
US7207038B2 (en) * | 2003-08-29 | 2007-04-17 | Nokia Corporation | Constructing control flows graphs of binary executable programs at post-link time |
US7395527B2 (en) | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US8381037B2 (en) | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
JP2005157849A (ja) * | 2003-11-27 | 2005-06-16 | Toshiba Corp | システムlsi設計装置、システムlsi設計用処理プログラム、及び整合性検証方法 |
US7401330B2 (en) * | 2003-12-11 | 2008-07-15 | Hewlett-Packard Development Company, L.P. | Cloning programming code |
US7895382B2 (en) | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
US7415705B2 (en) * | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
US20070016899A1 (en) * | 2005-07-15 | 2007-01-18 | Sule Dineel D | Technique for the calling of a sub-routine by a function using an intermediate sub-routine |
US9361137B2 (en) | 2006-03-10 | 2016-06-07 | International Business Machines Corporation | Managing application parameters based on parameter types |
US9727604B2 (en) * | 2006-03-10 | 2017-08-08 | International Business Machines Corporation | Generating code for an integrated data system |
US8099725B2 (en) * | 2006-10-11 | 2012-01-17 | International Business Machines Corporation | Method and apparatus for generating code for an extract, transform, and load (ETL) data flow |
US8160999B2 (en) * | 2006-12-13 | 2012-04-17 | International Business Machines Corporation | Method and apparatus for using set based structured query language (SQL) to implement extract, transform, and load (ETL) splitter operation |
US8219518B2 (en) * | 2007-01-09 | 2012-07-10 | International Business Machines Corporation | Method and apparatus for modelling data exchange in a data flow of an extract, transform, and load (ETL) process |
US9710384B2 (en) | 2008-01-04 | 2017-07-18 | Micron Technology, Inc. | Microprocessor architecture having alternative memory access paths |
US8095735B2 (en) | 2008-08-05 | 2012-01-10 | Convey Computer | Memory interleave for heterogeneous computing |
US8156307B2 (en) * | 2007-08-20 | 2012-04-10 | Convey Computer | Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set |
US8561037B2 (en) * | 2007-08-29 | 2013-10-15 | Convey Computer | Compiler for generating an executable comprising instructions for a plurality of different instruction sets |
US9015399B2 (en) | 2007-08-20 | 2015-04-21 | Convey Computer | Multiple data channel memory module architecture |
US8370821B2 (en) * | 2007-08-21 | 2013-02-05 | International Business Machines Corporation | Method for enabling profile-based call site tailor-ing using profile gathering of cloned functions |
US8185883B2 (en) * | 2007-09-14 | 2012-05-22 | International Business Machines Corporation | Instruction exploitation through loader late fix-up |
US8205066B2 (en) | 2008-10-31 | 2012-06-19 | Convey Computer | Dynamically configured coprocessor for different extended instruction set personality specific to application program with shared memory storing instructions invisibly dispatched from host processor |
US20100153693A1 (en) * | 2008-12-17 | 2010-06-17 | Microsoft Corporation | Code execution with automated domain switching |
US8677329B2 (en) * | 2009-06-03 | 2014-03-18 | Apple Inc. | Methods and apparatuses for a compiler server |
US9117071B2 (en) * | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US8423745B1 (en) | 2009-11-16 | 2013-04-16 | Convey Computer | Systems and methods for mapping a neighborhood of data to general registers of a processing element |
US8683455B1 (en) | 2011-01-12 | 2014-03-25 | Google Inc. | Method and system for optimizing an executable program by selectively merging identical program entities |
US8689200B1 (en) * | 2011-01-12 | 2014-04-01 | Google Inc. | Method and system for optimizing an executable program by generating special operations for identical program entities |
US8850413B2 (en) * | 2012-05-31 | 2014-09-30 | Oracle International Corporation | Compiling multi-threaded applications for targeted criticalities |
US10430190B2 (en) | 2012-06-07 | 2019-10-01 | Micron Technology, Inc. | Systems and methods for selectively controlling multithreaded execution of executable code segments |
US9052956B2 (en) * | 2012-08-30 | 2015-06-09 | Hewlett-Packard Development Company, L.P. | Selecting execution environments |
US9110737B1 (en) | 2014-05-30 | 2015-08-18 | Semmle Limited | Extracting source code |
US10162817B2 (en) * | 2016-06-14 | 2018-12-25 | Microsoft Technology Licensing, Llc | Computer messaging bot creation |
US10360906B2 (en) | 2016-06-14 | 2019-07-23 | Microsoft Technology Licensing, Llc | Computer proxy messaging bot |
US10810007B2 (en) | 2017-12-29 | 2020-10-20 | Microsoft Technology Licensing, Llc | Classifying system-generated code |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6184740A (ja) * | 1984-10-03 | 1986-04-30 | Hitachi Ltd | 汎用オブジエクトコ−ド生成方式 |
US4791558A (en) * | 1987-02-13 | 1988-12-13 | International Business Machines Corporation | System and method for generating an object module in a first format and then converting the first format into a format which is loadable into a selected computer |
US5339422A (en) * | 1991-03-07 | 1994-08-16 | Digital Equipment Corporation | System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment |
KR930020263A (ko) * | 1992-03-06 | 1993-10-19 | 윌리암 에이취. 뉴콤 | 프로그램 로딩 및 기억방법 |
US5446899A (en) * | 1992-06-26 | 1995-08-29 | Digital Equipment Corporation | Hint generation in smart recompilation |
JPH08501167A (ja) * | 1992-09-22 | 1996-02-06 | シーメンス アクチエンゲゼルシヤフト | 並列コンピュータシステムにおけるアプリケーションプログラムの処理方法 |
US5546586A (en) * | 1993-05-06 | 1996-08-13 | Apple Computer, Inc. | Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code |
US5432937A (en) * | 1993-08-20 | 1995-07-11 | Next Computer, Inc. | Method and apparatus for architecture independent executable files |
US5634114A (en) * | 1993-11-18 | 1997-05-27 | Intel Corporation | Dynamic link library version negotiation |
US5675803A (en) * | 1994-01-28 | 1997-10-07 | Sun Microsystems, Inc. | Method and apparatus for a fast debugger fix and continue operation |
US5701442A (en) * | 1995-09-19 | 1997-12-23 | Intel Corporation | Method of modifying an instruction set architecture of a computer processor to maintain backward compatibility |
US5774728A (en) * | 1995-12-27 | 1998-06-30 | International Business Machines Corporation | Method and system for compiling sections of a computer program for multiple execution environments |
US5732275A (en) * | 1996-01-11 | 1998-03-24 | Apple Computer, Inc. | Method and apparatus for managing and automatically updating software programs |
-
1997
- 1997-06-11 US US08/873,147 patent/US5920721A/en not_active Expired - Lifetime
-
1998
- 1998-06-03 EP EP98304376A patent/EP0892343A2/en not_active Withdrawn
- 1998-06-10 JP JP10161974A patent/JPH1115674A/ja not_active Abandoned
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8221010B2 (en) | 2000-09-11 | 2012-07-17 | Zipher Limited | Tape drive and printing apparatus |
US8221009B2 (en) | 2000-09-11 | 2012-07-17 | Zipher Limited | Tape drive and printing apparatus |
US8328441B2 (en) | 2000-09-11 | 2012-12-11 | Videojet Technologies (Nottingham) Limited | Tape drive and printing apparatus |
US8591127B2 (en) | 2000-09-11 | 2013-11-26 | Videojet Technologies (Nottingham) Limited | Tape drive and printing apparatus |
KR20140060299A (ko) * | 2011-09-07 | 2014-05-19 | 마이크로소프트 코포레이션 | 변형 컨텍스트-인식 데이터 소스 관리 |
Also Published As
Publication number | Publication date |
---|---|
EP0892343A2 (en) | 1999-01-20 |
US5920721A (en) | 1999-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH1115674A (ja) | 異なるランタイム環境において実行するための実行可能プログラムにおいて機能的に類似したコードシーケンスを発生するコンパイラ | |
JPH1115673A (ja) | 異なるランタイム環境において実行するための実行可能プログラムにおけるコードシーケンスを機能的に類似したコードシーケンスと条件付きで置き換えるローダ | |
US7533246B2 (en) | Application program execution enhancing instruction set generation for coprocessor and code conversion with marking for function call translation | |
Kornau | Return oriented programming for the ARM architecture | |
JP3786644B2 (ja) | バイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサ | |
JP3602857B2 (ja) | 多機種対応型情報処理システム、および、方法 | |
US5724590A (en) | Technique for executing translated software | |
TWI314701B (en) | Data processing apparatus and method with predication instruction function capable of adding conditional behavior to associated programs, and computer program product recording related instructions | |
US8015558B1 (en) | System, method and computer program product for on-the-fly patching of executable code | |
US7437542B2 (en) | Identifying and processing essential and non-essential code separately | |
US6230259B1 (en) | Transparent extended state save | |
US20120304160A1 (en) | Systems and Methods for Run-Time Interception of Software Methods | |
KR20010030587A (ko) | 데이터 처리장치 | |
CN111399990B (zh) | 解释执行智能合约指令的方法及装置 | |
JP2000112772A (ja) | 命令セット内の命令に応答してプロセスを実行するデ―タ処理システムおよびその命令処理方法 | |
JPH10320214A (ja) | コンパイルシステム及びコンピュータプログラム製品 | |
JP2008536240A (ja) | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス | |
JP7105699B2 (ja) | プログラム・ループ制御 | |
JP6908601B2 (ja) | ベクトルロード命令 | |
KR101292476B1 (ko) | 동적 확장가능 프로세서들에 대한 소프트웨어 지원을 위한컴퓨터 운영 체제, 재작성기 도구, 및 애플리케이션 효율성개선 방법 | |
TW202416123A (zh) | 硬體處理器及處理器 | |
US6871173B1 (en) | Method and apparatus for handling masked exceptions in an instruction interpreter | |
KR100308512B1 (ko) | 편집 기능을 위한 전문 밀리코드 지시 | |
JP2001519955A (ja) | 先進のプロセッサのための変換メモリ保護装置 | |
JP5051452B2 (ja) | 情報処理装置および命令実行方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050308 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050308 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20061227 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20061227 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070116 |