(57)【要約】【課題】例外的に実行されるコード部分の回避分岐はパフォーマンス上の負担になり、そのアウトライン化はプログラムを複雑にする。【解決手段】例外的に実行されるコード部分の取扱いの問題を、他の命令内の、例えば「即値」フィールドの中などに取扱いの命令を埋め込む方法を使って改善する。このような命令には、短い実行時間を有するものが選択される。通例的処理では、これらの命令は、回避ジャンプの必要なく素早く実行される。稀な場合にだけ、これらの特化されたコンピュータ命令の別の部分が必要となり使用される。【選択図】図１
2010517153.tif 000002
【特許請求の範囲】
【請求項１】
可変長の命令を有する命令セットを備えたプログラム内蔵方式デジタル・コンピュータを作動する方法であって、
前記方法は、
（ａ）処理対象となる例外条件を有する第一命令を実行するステップと、
（ｂ）前記例外条件が発生した場合、続いてジャンプ命令を実行するステップと、
（ｃ）前記例外条件が発生しなかった場合、処理のため意図された命令を実行するステップと、
（ｄ）命令自体内に実行可能コード部分を含むさらなる命令を実行するステップであって、前記実行可能コード部分は前記ジャンプ命令のディスティネーション（行先）である、前記ステップと、
を含む方法。
【請求項２】
前記第一命令は、不可分な命令、比較交換命令、ストリング命令、算術命令、論理命令、およびシフト命令で成る群から選択される、請求項１に記載の方法。
【請求項３】
前記さらなる命令は、即値フィールドを含む、請求項１に記載の方法。
【請求項４】
前記さらなる命令は、前記実行可能コード部分がかかわらない作動モードを含む、請求項１に記載の方法。
【請求項５】
前記ステップは、示された順序で行われる、請求項１に記載の方法。
【請求項６】
ステップ（ｄ）がステップ（ｃ）の前に行われる、請求項１に記載の方法。
【請求項７】
請求項１乃至６に記載のいずれかの方法の全ステップを実行するように構成された手段を含むシステム。
【請求項８】
コンピュータに、請求項１乃至６に記載のいずれかの方法の全ステップを実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、可変長の命令を有するコンピュータまたはマイクロプロセッサで実行される命令のコーディングに関する。さらに具体的には、本発明は、実行時間の延長を伴うことなく、稀に実行されるコード・シーケンスを頻繁に実行されるコード・シーケンスの中に埋め込む方法を対象とする。
【背景技術】
【０００２】
通常、コンピュータ・プログラムは、例外的な状態の下で実行されるレア（コールド）コードのためのシーケンスを有する。往々にして、こういったレア・コードのシーケンスは、ホット（頻繁に実行される）コードに近接して置かれる。レア・コードがホット・コードの近くに存在するために、コンパイラ、インタプリタ、アセンブラ、またはプログラマは、通例的処理ではこのレア・シーケンスの周りで分岐(回避分岐)する必要がある。この回避分岐は、頻繁に実行されるパスに対しパフォーマンス上の負担となる。コンパイラまたはプログラマは、これに代えて、ライン外のコード・シーケンス中にレア・コード・シーケンスを生成する（アウトライン化）オプションを有する。このオプションは、上記のパフォーマンス負担を回避するが、コードまたはコンパイラあるいはその両方に対し、特にレア・コード・シーケンスが短い場合、複雑さが加わる。
【発明の概要】
【課題を解決するための手段】
【０００３】
本発明は、可変長の命令を有するマシンに適用できる。本発明は、より大きな命令のバイナリ符号化の内容を使って、小さなレア・コード・シーケンスをより大きな（すなわちより長い）命令（のシーケンス）の中に埋め込む。このより大きな命令は、プログラムの正しい実行に影響しないように配慮して選択され、これらは実効的には空演算ないし無演算（ＮＯＰ）ステップとして作動する。これらの命令には、ホット・コードのパスに有意な影響を与えない高速な命令が選ばれる。レア・ケースにおいて、レア・コード・シーケンスを実行する必要がある場合、より大きな命令の中央部に分岐することによって、レア・シーケンスに到達できるようにする。これにより、回避分岐命令を含めねばならないというパフォーマンス負担を回避でき、アウトライン化の複雑さも回避できる。
【０００４】
上記により、本発明は、可変長の命令を有するプログラム格納式コンピュータに、命令を構築する方法、システム、およびプログラムを提供する。本発明は、例外的ベースで実行される命令を符号化するステップを含み、該命令は、実際は、第二命令の一つ以上のフィールドに配置され、第二命令の実行は、このフィールド中に存在する符号によりほとんど影響を受けない。要するに、本発明は、入り込まれた(エンターされた)ポイントによって決まる、二重の特性を有するコンピュータ命令の様式を生成する。言い変えれば、これは二つの命令を一つにまとめたものである。
【０００５】
本発明の利点は、例外条件の処理回数が少ないほど、効果的に実現される。また一方、処理を要する例外条件を生成する性質を持つ多くの種類の命令があることに留意する。こういったものには、算術、論理、およびシフト演算が必然的に含まれるだけでなく、他にも多くのこういった性質を示す命令の種類のおよび命令群がある。これらには、システム管理機能を提供する命令、「比較交換（コンペア・アンド・スワップ）」などのいわゆる「不可分な(アトミック)命令」、およびストリング命令が含まれる。本発明は、こういった全ての命令に適用でき、例外条件の処理の必要性がある任意の命令に一般的に適用できる。
【０００６】
本発明の技法を使って、さらなる機能および利点が実現できる。本明細書で詳細に説明されたもの以外の本発明の実施形態および態様も、本発明の請求範囲の一部と見なされる。
【０００７】
本明細書には、本発明の各種実施形態に適った望ましいオブジェクトのリストが記載されているが、これらの一切のオブジェクトは、個別的であれ集合的であれ、本発明の最も一般的な実施形態あるいはもっと特定的な実施形態のいずれにおいても、これらが必須の機能として存在することを暗示したり示唆したりする意図のものではない。
【０００８】
発明と見なされる主題は、本明細書の結びの部分において、具体的に指摘され明確に請求される。しかしながら、本発明は、添付の図面と関連させて以下の説明を参照することによって、そのさらなる目的および利点と併せ、全体構成と実施方法との両面に関し最善に理解することができよう。
【図面の簡単な説明】
【０００９】
【図１】本発明が用いられていない状況における、例外処理のための命令の処理を例示するブロック図を示す。
【図２】本発明の方法に基づいて描かれた、例外処理のための命令の処理を例示するブロック図を示す。
【図３】本発明が用いられる環境を例示するブロック図を示す。
【図４】本発明がエンコードされたＣＤ−ＲＯＭまたは他のコンピュータ可読媒体の上面図を示す。
【発明を実施するための形態】
【００１０】
以下のＩｎｔｅｌＡ３２アーキテクチャのコード・シーケンスは、ホット・パス中のレア・コードの小シーケンスを含むコードの例である。プログラマ／コンパイラは、ほとんど常に、レア・コード・シーケンスを回避分岐（branch around）しなければならない。
ａｄｄ  ｅａｘ，ｅｂｘ；  ２つの数を加算する
ｊｏ  Ｌｌ；  レアなオーバーフローが生じた場合、それを処理するためＬ１に分岐する
−ホット・コード−
ｊｍｐ  Ｌｄｏｎｅ；レア・コードを回避分岐する
Ｌｌ：  ｏｒ  ｅａｘ，３
Ｌｄｏｎｅ：
【００１１】
上記のコードおよびそれに伴う短所が図１に例示されている。具体的には、各々が一つ以上のフィールドを有するコンピュータ命令のシーケンスが示されている。この「コンピュータ命令長」スペクトルの最短のものは、ただ一つのバイトを含むものとすることも可能であろう。その他の命令はいろいろなサイズである。図１および２に示されたフィールドのサイズと数とは典型的なものであり、本発明の範囲に網羅されるフィールドが、これらのサイズおよび数だけであることを示唆する意味のものではない。
【００１２】
図１に例示するように、命令１１０は、通例的アプローチにおいて算術、論理、または他の演算を行い、時としてオーバーフローなどの例外条件を生成するので、これを、命令１５０として示されている「例外」のコードなど、別のコード位置で処理しなければならない。普通の処理モードでは、例外条件は発生せず、「ホット・コード」部分１３０を通って普通の処理が継続される。しかしながら、この通例的処理モードは、例外処理（１５０）が存在する命令メモリ部分に到達し、これを、命令１５０の直後の位置にジャンプさせる命令１４０によって回避ジャンプしなければならない。
【００１３】
本発明のアプローチは、上記のコードを以下のように実行する。
ａｄｄ  ｅａｘ，ｅｂｘ；  ２つの数を加算する
ｊｏ  Ｌｌ−３；  Ｌ１の３バイト前に分岐する
−ホット・コード−
ｔｅｓｔ  ｅａｘ，０ｘ０３Ｃ８８３００
Ｌ１：
上記の考え方は、より大きな命令（この場合はｔｅｓｔ）を使って、レアなコードのシーケンスを埋め込むことである。上記命令「ｏｒ  ｅａｘ，３」をバイナリ符号化すると、マシン・コード「８３  Ｃ８  ０３」となることに留意する。本出願人らは、「ｔｅｓｔ」命令のバイナリ符号化によって、シーケンスの終端に４バイトの即値フィールドが配置されることに着目した。本出願人らは、このマシン・コードを上記命令の即値フィールド内に直接に埋め込んだ。「ｔｅｓｔ」命令内の右側の位置に分岐するだけで、レア・ケース対応に必要な「ｏｒ」命令を実行することが可能となる。
【００１４】
このｔｅｓｔ命令は、ＦＲＡＧＳレジスタ以外の、一切のマシン状態を変更しない。この技法はＦＬＡＧＳレジスタが「実使用（live）」されていない場合には、何処でも使える。ＩＡ３２マイクロプロセッサのＦＬＡＧＳレジスタは、多数の命令を通してめったに「実使用状態(hold live)」にならないことが分かっている。従って、この手法は、ほぼ全てのシナリオに適用可能と考えられる。言い換えれば、「ｔｅｓｔ」命令は、プログラムのこの点で、プログラム状態に可観察な影響を与えず、実効的に無演算（ＮＯＰ）として作動する。さらに、これは十分高速で実行され、この解決策を回避分岐より優れたものとしている。
【００１５】
この改良されたコード構成が図２に示されている。具体的には、処理を要する例外条件を生成する典型的な命令１１０の後に、例外（すなわち稀な)条件が発生した場合に、命令１５５へのジャンプを生成する命令１２５が続く。例外条件でない場合、処理は、図１と同様なホット・コード１３０の実行が続く。
【００１６】
ここで、本発明の肝要な点は、上記コード・シーケンスが、典型的にはより長い命令である命令１５５を含んでおり、該命令が、即値フィールド、または「操作(演算)コード」部分１５６として示された命令部分とは制御可能に関係を持たないで存在する他の何らかフィールドを包含していることである。かくして、命令１５５の最左側の３つの部分を用いて、例外処理命令のビット表現を格納する。さらに、命令１５５は、無視可能なフィールドを有するように選択されるだけでなく、比較的迅速に実行される命令が選定される。上記に提示したコード・シーケンスはこの基準の事例である。
【００１７】
例えば、当該命令から到達可能な全てのパスが追跡されるまでは内容が読まれることのない汎用レジスタなど、プロセッサ状態を変更するだけの、他の大きな命令を使用することが可能である。例えば、
ａｄｄ  ｅａｘ，ｅｂｘ；２つの数を加算する
ｊｏ  Ｌｌ−３；Ｌ１の３バイト前に分岐する
−ホット・コード−
ｌｅａ  ｅｄｉ，［０ｘ０３Ｃ８８３００］
Ｌｌ：
「ｌｅａ  ｅｄｉ，［ｉｍｍｅｄｉａｔｅ］」命令は、「ｔｅｓｔ」命令よりも１ビット速く実行できる。但し、該命令はターゲット・レジスタ（上記例の場合ｅｄｉ）内容を破壊する。従って、本発明の方法は、実使用中の値を保持していないレジスタが利用できる環境においても用いることができる。
【００１８】
また、本発明のこの方法は、３９０などの可変命令長さに対応可能な他のアーキテクチャにおいても適用可能である。本発明を適用可能にする基本的要件は、使用アーキテクチャが、比較的長い命令が存在する可変長の命令群に対応しており、該長い命令が、「即値」フィールドか、または、該命令が何らかの点でプログラム上可視的にマシン状態を変化させたりすることなく、任意のバイナリ値を設定できる他の何らかのフィールドか、あるいは、フィールドの存在が、通常「操作コード(オペレーション・コード)」部分に規定される命令の遂行または作用に影響を与えない何らかのフィールドか、を包含していることである。また、本発明では、ジャンプを介して実行される埋め込みコードが、該二重用途の命令の単一のフィールドに埋め込まれる必要はないということに留意する。複数のおよびオーバーラップしたフィールドも使用可能である。さらに、本発明は、コンパイラ、エミュレータ、またはマシン命令のシーケンスを生成する他の類似のプログラムを使って自動的に実行できることにも留意する。また、本発明の実施においては、命令がどのようなやり方で符号化されたかにかかわらず、符号化された命令の最終的な実行が明確に意図されている。一つ以上のかかる命令を符号化することも同様に意図の内である。
【００１９】
本発明は、図３に示されるような一つ以上のコンピュータ構成要素を実効的に包含するデータ処理環境において作動する。具体的には、コンピュータ５００は、中央処理装置（ＣＰＵ）５２０を含み、該装置は、ランダム・アクセス・メモリ５１０内に格納されたプログラムおよびデータにアクセスする。メモリ５１０は、典型的には、揮発的性質のものであり、このため、通常、かかるシステムは回転式磁気記憶装置５４０の形で非揮発性記憶装置を備えている。記憶装置５４０は、望ましくは非揮発性の磁気装置であるが、他の媒体を用いることもできる。ＣＰＵ５２０は、入力／出力（Ｉ／Ｏ）ユニット５３０を介して、端末装置５５０などのコンソールによりユーザと交信する。端末装置５５０は、典型的には、一つ以上のＩ／Ｏユニット５３０を介しコンピュータ５００と交信する、何千台とまでは言わないが多くのコンソールの一つである。具体的には、コンソール・ユニット５５０は、図４に示されるようなＣＤ−ＲＯＭ５６０などの一つ以上の種類の媒体を読取るための装置をその中に含む。また、媒体６００には、以下に限らないが、磁気媒体、光学記憶デバイス、およびフラッシュ・メモリ・デバイスないしいわゆるサム・ドライブなどのチップを含め、任意の便利なデバイスを含めることができる。また、ディスク６００は、本明細書で説明した命令コードを表現するデータ・ビットを送信するのに使われる電気信号の形などによる、もっと広範囲の配布媒体をも代表している。こういった送信信号は、性質として一過性のものかもしれないが、そうであっても、符号化された命令ビットを搬送する物理的媒体を構成し、該信号の単複数の到達先で恒久的に捕捉することが意図されている。
【００２０】
本明細書では、特定の好適な実施形態に基づいて本発明を詳細に説明してきたが、当業者は、これに多くの改修および変更を加えることができよう。従って、かかる全ての改修および変更は、本発明の事実上の精神および範囲内に含まれるものとして、添付の特許請求範囲に網羅することが意図されている。
【図１】
2010517153.tif 000003
【図２】
2010517153.tif 000004
【図３】
2010517153.tif 000005
【図４】
2010517153.tif 000006
【国際調査報告】
2010517153.tif 000007
2010517153.tif 000008