(57)【要約】【課題】  サブジェクト・コンピュータ・プラットフォームによって実行可能なバイナリ・コードからターゲット・コンピュータ・プラットフォームによって実行可能なターゲット・コードに変換するための方法及び装置を提供する。【解決手段】  プログラム・コード変換の際に浮動小数点演算を処理することが可能な、浮動小数点ユニットと整数ユニットとを含むプロセッサを備えるコンピュータ・システムを提供する。コンピュータ・システムは、浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信し、それに応答してプロセッサ上で実行するための対応するターゲット・コードを生成するように構成された翻訳器ユニットをさらに備える。翻訳器ユニット内には、浮動小数点演算を処理するために、浮動小数点状態ユニットと浮動小数点制御ユニットとが設けられる。これらのユニットは、翻訳器ユニットに、浮動小数点ユニット上で浮動小数点演算を直接行うためのターゲット・コード、又は、例えば整数ユニット及び浮動小数点ユニットの組み合わせを用いて浮動小数点演算を間接的に行うためのターゲット・コードのいずれかを生成させる。このようにしてコンピュータ・システムの効率が改善される。【選択図】  図３
2010530996.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
前記プロセッサ内の浮動小数点ユニット及び整数ユニットと、
浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信し、それに応答して前記プロセッサ上で実行するための対応するターゲット・コードを生成するように構成された、翻訳器ユニットと、
前記受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するように構成された、前記翻訳器ユニット内の浮動小数点状態ユニットと、
前記浮動小数点状態ユニットから前記浮動小数点状態情報を受信し、それに応答して前記翻訳器ユニットを制御して、前記浮動小数点ユニット上で前記浮動小数点演算を行うためのターゲット・コード、又は、前記整数ユニットと前記浮動小数点ユニットとの組み合わせを用いて前記浮動小数点演算を行うためのターゲット・コードのいずれかを生成させるように構成された、前記翻訳器ユニット内の浮動小数点制御ユニットと、
を備えるコンピュータ・システム。
【請求項２】
前記浮動小数点状態ユニットは、前記受信したサブジェクト・コード命令の中で参照されるデータの精度に応じて浮動小数点状態情報を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項３】
前記受信したサブジェクト・コード命令は、サブジェクト浮動小数点ユニットを参照し、前記浮動小数点状態ユニットは、前記サブジェクト浮動小数点ユニットにデータを与える前記受信したサブジェクト・コードの中の命令に応答して浮動小数点状態情報を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項４】
前記浮動小数点状態ユニットは、前記サブジェクト浮動小数点ユニットに特定の数値精度のデータを与える前記受信したサブジェクト・コードの中の命令に応答して浮動小数点状態情報を生成するように構成された、請求項３に記載のコンピュータ・システム。
【請求項５】
前記浮動小数点状態ユニットは、サブジェクト浮動小数点ユニットのためのソース・オペランドとして与えられた前記受信したサブジェクト・コードの中のデータの数値精度に応じて浮動小数点状態情報を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項６】
前記浮動小数点状態ユニットは、前記受信したサブジェクト・コードの中の命令によってメモリからサブジェクト浮動小数点ユニットにロードされるデータの数値精度に応じて浮動小数点状態情報を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項７】
前記浮動小数点状態ユニットは、前記浮動小数点演算の結果について浮動小数点状態情報を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項８】
前記浮動小数点状態ユニットは、前記受信したサブジェクト・コードの中の各々の浮動小数点演算の結果ごとに１つの浮動小数点状態情報を生成するように構成された、請求項７に記載のコンピュータ・システム。
【請求項９】
前記浮動小数点状態ユニットは、少なくとも１つの高精度データが前記浮動小数点ユニットのデータ構造の中に存在することを示す１つの浮動小数点状態情報を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項１０】
前記浮動小数点状態ユニットは、浮動小数点状態情報を基本ブロック単位で生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項１１】
前記浮動小数点状態ユニットは、ターゲット・コードの基本ブロックの開始時に、サブジェクト浮動小数点ユニットと関連するデータ構造の特徴に従って浮動小数点状態情報を生成するように構成された、請求項１０に記載のコンピュータ・システム。
【請求項１２】
前記翻訳器ユニットは、前記受信したサブジェクト・コード命令によって参照されるサブジェクト浮動小数点ユニット・レジスタ・スタックの表現をサブジェクト・レジスタ・バンクの一部として保持するように構成され、前記浮動小数点状態ユニットは、前記サブジェクト浮動小数点ユニット・レジスタ・スタックの前記表現の内容を監視して浮動小数点状態情報を生成するように構成された、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記サブジェクト浮動小数点ユニット・レジスタ・スタックの前記表現の中に１つ又は複数の高精度データが含まれている場合には、前記浮動小数点状態ユニットは、前記サブジェクト浮動小数点ユニット・レジスタ・スタックの前記表現の中に高精度データが存在することを示す浮動小数点状態情報を生成するように構成された、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記サブジェクト浮動小数点ユニット・レジスタ・スタックの前記表現は、前記サブジェクト浮動小数点ユニット・レジスタ・スタックにおけるデータ位置の表現と、サブジェクト浮動小数点ユニット・スタック・ポインタの表現とを含む、請求項１２に記載のコンピュータ・システム。
【請求項１５】
前記浮動小数点状態ユニットは、前記受信したサブジェクト・コード命令に応答して、前記サブジェクト浮動小数点ユニット・レジスタ・スタックの前記表現における前記データ位置に配置されたデータの数値精度を示す浮動小数点状態情報を生成するように構成された、請求項１３又は１４に記載のコンピュータ・システム。
【請求項１６】
前記サブジェクト浮動小数点ユニット・スタック・ポインタの前記表現が、前記サブジェクト浮動小数点ユニット・レジスタ・スタックの前記表現における前記データ位置は空であることを示したときに、前記浮動小数点状態ユニットは、以前に生成された浮動小数点状態情報をクリアするように構成された、請求項１５に記載のコンピュータ・システム。
【請求項１７】
前記浮動小数点制御ユニットは、前記受信したサブジェクト・コード命令における浮動小数点演算に関する命令を特定し、該命令に応答して前記受信した浮動小数点状態情報をチェックし、それに応答して浮動小数点制御信号を生成するように構成された、請求項１に記載のコンピュータ・システム。
【請求項１８】
前記翻訳器ユニットは、前記浮動小数点制御ユニットから受信した制御信号に従って、前記ターゲット・コードを生成するための適切な中間表現を生成するように構成された浮動小数点計算ユニットをさらに含み、前記中間表現は、前記ターゲット・コードを生成するために前記翻訳器ユニットによって用いられる、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記浮動小数点制御ユニットは、前記受信したサブジェクト・コード命令の中の浮動小数点命令によって指定された精度を特定し、前記浮動小数点計算ユニットのための浮動小数点制御信号を生成するようにさらに構成された、請求項１８に記載のコンピュータ・システム。
【請求項２０】
前記サブジェクト・コード命令は、プロセッサによって直接実行可能なバイナリ・プログラム・コードである、請求項１に記載のコンピュータ・システム。
【請求項２１】
前記ターゲット・コードは、前記プロセッサによって直接実行可能なバイナリ・プログラム・コードである、請求項１に記載のコンピュータ・システム。
【請求項２２】
前記翻訳器ユニットは、第１のタイプのプロセッサによって直接実行可能なバイナリ・プログラム・コードである前記サブジェクト・コード命令を、前記プロセッサによって直接実行可能なバイナリ・プログラム・コードである前記ターゲット・コードに変換するように構成された、請求項１に記載のコンピュータ・システム。
【請求項２３】
前記翻訳器ユニットは、第１のタイプのプロセッサによって実行するために書かれた前記サブジェクト・コード命令を、互換性のない異なる第２のタイプの前記プロセッサによって実行される前記ターゲット・コードに翻訳するように構成された、請求項１に記載のコンピュータ・システム。
【請求項２４】
前記プロセッサはＰｏｗｅｒＰＣプロセッサを備え、前記翻訳器ユニットはｘ８７プロセッサのために書かれたサブジェクト・コード命令を受信するように構成された、請求項１に記載のコンピュータ・システム。
【請求項２５】
前記翻訳器ユニットは、第１のタイプのプロセッサによって実行するために書かれた前記サブジェクト・コード命令を、同じ第１のタイプの前記プロセッサによってより効率的に実行される前記ターゲット・コードに最適化するように構成された、請求項１に記載のコンピュータ・システム。
【請求項２６】
プロセッサと、
前記プロセッサ内の浮動小数点ユニット及び整数ユニットと、
浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信し、それに応答して前記プロセッサ上で実行するための対応するターゲット・コードを生成するように構成された、翻訳器ユニットと、
前記受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するように構成された、前記翻訳器ユニット内の浮動小数点状態ユニットと、
前記浮動小数点状態ユニットから前記浮動小数点状態情報を受信し、それに応答して前記翻訳器ユニットを制御して、前記浮動小数点ユニット上で前記浮動小数点演算を直接行うためのターゲット・コード、又は、前記整数ユニット及び前記浮動小数点ユニットのうちの一方又は両方を用いて前記浮動小数点演算を間接的に行うためのターゲット・コードのいずれかを生成させるように構成された、前記翻訳器ユニット内の浮動小数点制御ユニットと、
を備えるコンピュータ・システム。
【請求項２７】
前記翻訳器ユニット、前記浮動小数点状態ユニット、前記浮動小数点制御ユニット、及び前記浮動小数点計算ユニットのうちの１つ又は複数が、請求項１−２５のいずれか１つの請求項に記載されたものである、請求項２６に記載のコンピュータ・システム。
【請求項２８】
動的バイナリ翻訳器において用いるためのデコーダ・ユニットであって、
前記デコーダ・ユニットによって受信されたサブジェクト・コード命令の中の浮動小数点命令に従って浮動小数点状態情報を生成するように構成された浮動小数点状態ユニットと、
前記浮動小数点状態ユニットから前記浮動小数点状態情報を受信し、それに応答して前記浮動小数点命令の出力のための所望のレベルの数値精度を示す制御信号を生成するように構成された、浮動小数点制御ユニットと、
を備えるデコーダ・ユニット。
【請求項２９】
コンピュータ・システムにおいて浮動小数点命令を処理する方法であって、
浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信するコンピュータ実装ステップと、
前記受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するコンピュータ実装ステップと、
前記浮動小数点状態情報に応答して、前記コンピュータ・システムの浮動小数点ユニット上で前記浮動小数点演算を行うためのターゲット・コード、又は、前記コンピュータ・システムの整数ユニットと前記コンピュータ・システムの浮動小数点ユニットとの組み合わせを用いて前記浮動小数点演算を行うためのターゲット・コードのいずれかを生成するコンピュータ実装ステップと、
を含む方法。
【請求項３０】
コンピュータ・システムにおいて浮動小数点命令を処理する方法であって、
浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信するコンピュータ実装ステップと、
前記受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するコンピュータ実装ステップと、
前記浮動小数点状態情報に応答して、前記コンピュータ・システムの浮動小数点ユニット上で前記浮動小数点演算を直接行うためのターゲット・コード、又は、前記コンピュータ・システムの整数ユニットと前記コンピュータ・システムの浮動小数点ユニットとの組み合わせを用いて前記浮動小数点演算を間接的に行うためのターゲット・コードのいずれかを生成するコンピュータ実装ステップと、
を含む方法。
【請求項３１】
コンピュータ・システムによって実行されたときに、
浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信するステップと、
前記受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するステップと、
前記浮動小数点状態情報に応答して、前記コンピュータ・システムの浮動小数点ユニット上で前記浮動小数点演算を行うためのターゲット・コード、又は、前記コンピュータ・システムの整数ユニットと前記コンピュータ・システムの浮動小数点ユニットとの組み合わせを用いて前記浮動小数点演算を行うためのターゲット・コードのいずれかを生成するステップと、
を実施する命令が記録されたコンピュータ可読記録媒体。
【請求項３２】
コンピュータ・システムによって実行されたときに、
浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信するステップと、
前記受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するステップと、
前記浮動小数点状態情報に応答して、前記コンピュータ・システムの浮動小数点ユニット上で前記浮動小数点演算を直接行うためのターゲット・コード、又は、前記コンピュータ・システムの整数ユニットと前記コンピュータ・システムの浮動小数点ユニットとの組み合わせを用いて前記浮動小数点演算を間接的に行うためのターゲット・コードのいずれかを生成するステップと、
を実施する命令が記録されたコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ及びコンピュータ・システムの分野に関し、より特定的には、例えばプログラム・コードを変換するコード翻訳器、エミュレータ、及びアクセラレータに有用なプログラム・コード変換方法及び装置に関する。より具体的には、本発明は、サブジェクト・コンピュータ・プラットフォームによって実行可能なバイナリ・コードから、ターゲット・コンピュータ・プラットフォームによって代わりに実行可能なターゲット・コードに変換するための方法及び装置に関する。
【背景技術】
【０００２】
中央演算ユニット（ＣＰＵ）即ちプロセッサは、全ての現代的なコンピュータ・システムの中心に位置する。プロセッサは、コンピュータ・プログラムの命令を実行し、ひいてはどのような仕事であろうとコンピュータ・プラットフォームが有用な仕事を行うことができるようにする。ＣＰＵは、現代の生活において、パーソナル・コンピュータ、ラップトップ、ＰＤＡなどの専用コンピュータ・マシンだけでなく、あらゆる形態のデジタル・デバイスとして普及している。現代のマイクロプロセッサは、自動車から携帯電話や子供の玩具に至るまであらゆるものに搭載されている。現代のコンピュータ・システムにおいては、コンピュータ・システムの仕事の一部としての算術演算を行うために、ＣＰＵと並置して又はＣＰＵの内部に、追加のハードウェアを設けることがある。このようなハードウェアは、整数演算を行うための整数ユニット（ＩＵ）及び／又は浮動小数点演算を行うための浮動小数点ユニット（ＦＰＵ）を備えることがある。
【０００３】
各々のタイプのプロセッサはそれ自体の固有の命令セット・アーキテクチャ（ＩＳＡ）を有するため、１つのタイプのプロセッサによって実行可能なプログラム・コードは、いずれかの別のタイプのプロセッサによって実行不可能な場合があるという問題が生じる。従って、１つのタイプのプロセッサのために書かれたプログラム・コードを別のタイプのプロセッサによって実行可能なコードに自動的に変換するために、又は、同じタイプのプロセッサについてより古い非効率的なコードをより新しくより高速なバージョンに最適化するために、プログラム・コード変換が発展してきた。即ち、組み込みＣＰＵ及び非組み込みＣＰＵのいずれにおいても、大容量のソフトウェアが既に存在しており、性能の点で「処理能力を向上」させるか又はコスト／性能の点でより有利な他のプロセッサに合わせて「翻訳」することができる、支配的なＩＳＡが存在する。自らのＩＳＡに束縛されて性能又は市場の範囲を発展させることができない支配的なＣＰＵアーキテクチャも見られる。この問題は、独立型のポケットサイズ・コンピュータ・デバイスから、何十何百もの強力なサーバを有する大規模ネットワークに至るまで、コンピュータ産業の全てのレベルにおいて当てはまる。
【０００４】
このプログラム・コード変換分野の背景情報として、発明の名称を「Program Code Conversion」とする特許文献１、発明の名称を「Method and Apparatus for Performing Interpreter Optimizations duringProgram Code Conversion」とする特許文献２、及び、発明の名称を「ImprovedArchitecture for Generating Intermediate Representations for Program CodeConversion」とする特許文献３は、本明細書において説明される例示的な実施形態において用いることができるようなプログラム・コード変換能力を高める方法及び装置を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】ＷＯ２０００／２２５２１号明細書
【特許文献２】ＷＯ２００４／０９５２６４号明細書
【特許文献３】ＷＯ２００４／０９７６３１号明細書
【特許文献４】ＷＯ２００５／００３９５９号明細書
【特許文献５】ＷＯ２００５／００８４７８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プログラム・コード変換の際における１つの具体的な問題領域は、浮動小数点表記で表された数値の取り扱いに関するものである。特定のタイプのプロセッサに従って書かれた元のプログラム・コード（ここでは「サブジェクト・コード」と呼ばれる）は、特定のタイプの実行環境を求める。具体的には、サブジェクト・コードは、浮動小数点表記で表された数値の演算のためのハードウェア・サポートに特定のレベルの数値精度を求める。このハードウェア・サポートは、サブジェクトＦＰＵによって提供される。
【０００７】
しかしながら、プログラム・コード変換の際に、サブジェクト・コードは、ターゲット・コンピュータ・プラットフォーム上で実行されるターゲット・コードに変換される。ターゲット・コンピュータ・プラットフォームは、サブジェクトＦＰＵによってサポートされる演算より低い精度の数値演算をサポートするＦＰＵを備える場合がある。この状況においては、サブジェクト・コンピュータ・プラットフォームとターゲット・コンピュータ・プラットフォームとの間に根本的なハードウェア非互換性が存在する。
【０００８】
上述の問題に対応して、特許文献４は、ターゲット・コンピュータ・プラットフォーム上のターゲットＦＰＵと整数ハードウェアとの組み合わせを用いて、ターゲット・コンピュータ・プラットフォーム上で浮動小数点演算を行うためのメカニズムを説明する。しかしながら、ターゲット・コンピュータ・システム上の整数ハードウェアを用いるメカニズムを利用して浮動小数点演算の結果を出すことは、典型的には低速である。
【０００９】
従って、プログラム・コード変換の際に２つの問題に直面する。第１に、ターゲット・コンピュータ・プラットフォームのハードウェアは、サブジェクト・コードによって求められる精度レベルで浮動小数点ハードウェア・サポートを提供することができないという問題が存在する。第２に、ターゲット・コンピュータ・プラットフォームの整数ハードウェアを用いて、サブジェクト・コードによって求められる精度で、且つ、ターゲットＦＰＵによってサポートされる精度より高い精度で、浮動小数点演算の結果を出すことは、非効率的な可能性が高いという問題が存在する。
【００１０】
以下でより詳細に説明されるように、本発明の例示的な実施形態によって従来技術のこれらの問題及び他の問題に対処する。
【課題を解決するための手段】
【００１１】
本発明によれば、特許請求の範囲に示される装置及び方法が提供される。本発明の他の特徴は、従属請求項及び以下の説明から明らかとなる。
【００１２】
以下は、本発明の実施形態に従って実現可能な種々の態様及び利点の概要である。これは当業者の役に立ち、以下の詳細な設計の説明をより迅速に理解させるための導入として提供されるものであり、本明細書の特許請求の範囲をいかなる形においても限定するものではなく、また限定することを意図しない。
【００１３】
具体的には、本発明者はプログラム・コード変換を対象とする方法を開発したが、これは、サブジェクト・コードからターゲット・コードへの動的バイナリ翻訳を提供する実行時翻訳器に関して特に有用である。
【００１４】
本発明の１つの例示的な態様においては、プロセッサと、プロセッサ内の浮動小数点ユニット及び整数ユニットと、浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信し、それに応答してプロセッサ上で実行させるための対応するターゲット・コードを生成するように構成された、翻訳器ユニットと、受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するように構成された、翻訳器ユニット内の浮動小数点状態ユニットと、浮動小数点状態ユニットから浮動小数点状態情報を受信し、それに応答して翻訳器ユニットを制御して、浮動小数点ユニット上で浮動小数点演算を行うためのターゲット・コード、又は、整数ユニットと浮動小数点ユニットとの組み合わせを用いて浮動小数点演算を行うためのターゲット・コードのいずれかを生成するように構成された、翻訳器ユニット内の浮動小数点制御ユニットと、を備えるコンピュータ・システムが提供される。
【００１５】
本発明の別の例示的な態様においては、プロセッサと、プロセッサ内の浮動小数点ユニット及び整数ユニットと、浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信し、それに応答してプロセッサ上で実行するための対応するターゲット・コードを生成するように構成された、翻訳器ユニットと、受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するように構成された、翻訳器ユニット内の浮動小数点状態ユニットと、浮動小数点状態ユニットから浮動小数点状態情報を受信し、それに応答して翻訳器ユニットを制御して、浮動小数点ユニット上で浮動小数点演算を直接行うためのターゲット・コード、又は、整数ユニット及び浮動小数点ユニットの一方又は両方を用いて浮動小数点演算を間接的に行うためのターゲット・コードのいずれかを生成するように構成された、翻訳器ユニット内の浮動小数点制御ユニットと、を備えるコンピュータ・システムが提供される。
【００１６】
本発明の別の例示的な態様においては、動的バイナリ翻訳器において用いるためのデコーダ・ユニットであって、デコーダ・ユニットによって受信されたサブジェクト・コード命令の中の浮動小数点命令に従って浮動小数点状態情報を生成するように構成された浮動小数点状態ユニットと、浮動小数点状態ユニットから浮動小数点状態情報を受信し、それに応答して浮動小数点命令の出力のための所望のレベルの数値精度を示す制御信号を生成するように構成された、浮動小数点制御ユニットと、を備えるデコーダ・ユニットが提供される。
【００１７】
本発明の別の例示的な態様においては、コンピュータ・システムにおいて浮動小数点命令を処理する方法であって、浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信するコンピュータ実装ステップと、受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するコンピュータ実装ステップと、浮動小数点状態情報に応答して、コンピュータ・システムの浮動小数点ユニット上で浮動小数点演算を行うためのターゲット・コード、又は、コンピュータ・システムの整数ユニットとコンピュータ・システムの浮動小数点ユニットとの組み合わせを用いて浮動小数点演算を行うためのターゲット・コードのいずれかを生成するコンピュータ実装ステップと、を含む方法が提供される。
【００１８】
本発明の別の例示的な態様においては、コンピュータ・システムにおいて浮動小数点命令を処理する方法であって、浮動小数点演算に関する少なくとも１つの命令を含むサブジェクト・コード命令を受信するコンピュータ実装ステップと、受信したサブジェクト・コード命令に従って浮動小数点状態情報を生成するコンピュータ実装ステップと、浮動小数点状態情報に応答して、コンピュータ・システムの浮動小数点ユニット上で浮動小数点演算を直接行うためのターゲット・コード、又は、コンピュータ・システムの整数ユニットとコンピュータ・システムの浮動小数点ユニットとの組み合わせを用いて浮動小数点演算を間接的に行うためのターゲット・コードのいずれかを生成するコンピュータ実装ステップと、を含む方法が提供される。
【００１９】
本発明は、本明細書において説明される発明の実施形態を実施するように構成された翻訳装置にも及ぶ。また、本発明は、本明細書において定義された方法のいずれかを実施するためにコンピュータによって実施することができる命令が記録されたコンピュータ可読ストレージ媒体に及ぶ。
【００２０】
本発明の少なくとも幾つかの実施形態は、部分的に又は全体的に専用ハードウェアを用いて構成することができる。本明細書において用いられる「コンポーネント」、「モジュール」、又は「ユニット」といった用語は、特定のタスクを実施するField Programmable Gate Array（ＦＰＧＡ）又はApplication Specific Integrated Circuit（ＡＳＩＣ）といったハードウェア・デバイスを含むが、これらに限定されるものではない。代替的に、本発明の要素は、アドレス可能なストレージ媒体に常駐するように設定してもよく、１つ又は複数のプロセッサ上で実行されるように設定してもよい。したがって、幾つかの実施形態においては、本発明の機能的要素は、例として、ソフトウェア・コンポーネント、オブジェクト指向ソフトウェア・コンポーネント、クラス・コンポーネント、及びタスク・コンポーネントなどのコンポーネント、プロセス、関数、属性、プロシージャ、サブルーチン、プログラム・コードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造、表、アレイ、並びに変数を含むものとすることができる。さらに、以下で説明されるコンポーネント、モジュール、及びユニットを参照して好ましい実施形態を説明したが、こうした機能的要素を組み合わせてより少ない要素にしてもよく、又は分離して付加的な要素としてもよい。
【００２１】
本明細書に組み込まれ、その一部を構成する添付図面は、現時点での好ましい実施形態を示すものであり、以下のように説明される。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施形態が応用される装置を示すブロック図を示す。
【図２】本発明の実施形態によって用いられるサブジェクト・コード変換プロセスの概略図を示す。
【図３】本発明の例示的な実施形態に係るコンピュータ・システムを示すブロック図を示す。
【図４】図３の実施形態における浮動小数点状態ユニット、浮動小数点制御ユニット、及び浮動小数点計算ユニットによって行われるステップを示すフロー図を示す。
【図５】サブジェクト・コードの一部の例、図３の実施形態において示される翻訳器ユニット、及び翻訳器ユニットによって生成される４つのターゲット・コード基本ブロックを示す。
【図６】サブジェクト・コードの一部のさらなる例、図３の実施形態において示される翻訳器ユニット、及び翻訳器ユニットによって生成される４つのターゲット・コード基本ブロックの図を示す。
【図７】サブジェクト・コードの一部の第２の例、図３の実施形態において示される翻訳器ユニット、及び翻訳器ユニットによって生成される２つのターゲット・コード基本ブロックの図を示す。
【図８】サブジェクト・コードの一部の第３の例、図３の実施形態において示される翻訳器ユニット、及び翻訳器ユニットによって生成される２つのターゲット・コードの基本ブロックの図を示す。
【図９】サブジェクト・コードの一部の第４の例、図３の実施形態において示される翻訳器ユニット、及び翻訳器ユニットによって生成される３つのターゲット・コードの基本ブロックの図を示す。
【図１０】本発明の例示的な実施形態に係る、低精度のエントリ条件の下で入る基本ブロックを生成するときに、図３の実施形態における浮動小数点状態ユニット、浮動小数点制御ユニット、及び浮動小数点計算ユニットによって行われるステップを示すフロー図である。
【図１１】本発明の例示的な実施形態に係る、高精度のエントリ条件の下で入る基本ブロックを生成するときに、図３の実施形態における浮動小数点状態ユニット、浮動小数点制御ユニット、及び浮動小数点計算ユニットによって行われるステップを示すフロー図である。
【発明を実施するための形態】
【００２３】
以下の説明は、当業者が本発明を作成して利用できるようにするために提供されるものであり、発明者によって考慮される本発明を実現する最良の形態を記載している。しかしながら、本発明の一般原理は、改善されたプログラム・コード変換方法及び装置を提供するために特に本明細書において定められたものであるため、当業者であれば種々の修正が容易に明らかとなっている。
【００２４】
図１は、以下でより詳細に説明されるコンポーネント、モジュール、及びユニットを紹介するために、本発明の例示的な実施形態を適用することができるシステム及び環境の概要を与えるものである。図１を参照すると、サブジェクト・コード１７は、少なくとも１つのサブジェクト・プロセッサ３を有するサブジェクト・コンピュータ・プラットフォーム１上で実行することを目的としている。しかしながら、その代わりにターゲット・コンピュータ・プラットフォーム１０を用いて、プログラム・コード変換を行う翻訳器ユニット１９を通じてサブジェクト・コード１７が実行される。翻訳器ユニット１９は、サブジェクト・コード１７からターゲット・コード２１へのコード変換を行い、それにより、ターゲット・コード２１はターゲット・コンピュータ・プラットフォーム１０上で実行可能となる。
【００２５】
当業者にはよく知られているように、サブジェクト・プロセッサ３は、サブジェクト・レジスタ５の組を有する。サブジェクト・メモリ８は、特に、サブジェクト・コード１７とサブジェクト・オペレーティング・システム２とを保持する。サブジェクト・コンピュータ・プラットフォーム１は、サブジェクト・プロセッサ３内に、浮動小数点演算を計算するためのＦＰＵ４と整数演算を行うための整数ユニット６とをさらに含む。当業者には公知のように、ＦＰＵ４及びＩＵ６は、さまざまなタイプのハードウェア・ユニットのうちのいずれかを含むものとすることができる。ここではＦＰＵ４は、例として、「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ｆｏｒ  Ｂｉｎａｒｙ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ａｒｉｔｈｍｅｔｉｃ（ＡＮＳＩ／ＩＥＥＥ  Ｓｔｄ  ７５４−１９８５）」という名称のＩＥＥＥ７５４標準規格に準拠して動作する。
【００２６】
この規格は、多くのＦＰＵによって用いられており、浮動小数点を表すための形式、特殊な値の表現（例えば、無限大）、例外、丸めモード、及び、あらゆる適合システムにおいて完全に同じように働く浮動小数点演算の組を定める。ＩＥＥＥ７５４標準規格はさらに、浮動小数点値を単精度（３２ビット）、倍精度（６４ビット）、及び拡張倍精度（典型的には８０ビット）で表すための形式を指定する。
【００２７】
同様に、図１における例示的なターゲット・コンピュータ・プラットフォーム１０は、複数のターゲット・レジスタ１５を有する少なくとも１つのターゲット・プロセッサ１３と、ターゲット・オペレーティング・システム２０、サブジェクト・コード１７、翻訳器ユニット１９、及び翻訳済みターゲット・コード２１を含む複数の動作コンポーネントを格納するためのメモリ１８とを備える。ターゲット・コンピュータ・プラットフォーム１０は、典型的には、マイクロプロセッサ・ベースのコンピュータ又は他の適切なコンピュータである。ターゲット・コンピュータ・プラットフォーム１０は、浮動小数点演算を計算するためのＦＰＵ１４と整数演算を行うためのＩＵ１６とを含む。
【００２８】
１つの実施形態においては、翻訳器ユニット１９は、最適化されているかどうかに関わらず、サブジェクト命令セット・アーキテクチャ（ＩＳＡ）のサブジェクト・コードを別のＩＳＡの翻訳済みターゲット・コードに翻訳するエミュレータである。別の実施形態においては、翻訳器ユニット１９は、プログラム・コード最適化を行うことによって、あるＩＳＡのサブジェクト・コードを同一のＩＳＡのターゲット・コードに翻訳するためのアクセラレータとして機能する。
【００２９】
翻訳器ユニット１９は、翻訳器を実装するソース・コードのコンパイル・バージョンであることが適切であり、ターゲット・プロセッサ１３上でオペレーティング・システム２０と共に動作する。図１に示される構造は単なる例であり、例えば、本発明の実施形態によるソフトウェア、方法、及びプロセスは、オペレーティング・システム２０の内部又は下層に常駐するコードで実装してもよいことが認識されよう。当業者には公知のように、サブジェクト・コード１７、翻訳器ユニット１９、オペレーティング・システム２０、及びメモリ１８のストレージ機構は、様々なタイプのもののいずれかとすることができる。
【００３０】
図１による装置において、プログラム・コード変換は、ターゲット・コード２１の実行中にターゲット・アーキテクチャ１０上で実行されるように実行時に動的に行われる。即ち、翻訳器ユニット１９は、翻訳済みターゲット・コード２１とインラインで動作する。翻訳器ユニット１９を通してサブジェクト・コード１７を実行することには、交互に実行される２つの異なるタイプのコード、即ち、翻訳器ユニット１９とターゲット・コード２１とが関わる。従って、ターゲット・コード２１は、実行時全体を通して、翻訳中のプログラムの格納済みサブジェクト・コード１７に基づき翻訳器ユニット１９によって生成される。
【００３１】
１つの実施形態において、翻訳器ユニット１９は、サブジェクト・プロセッサ３及び特にサブジェクト・レジスタ５などのサブジェクト・アーキテクチャ１の関連部分をエミュレートしながら、実際にはターゲット・プロセッサ１３上でターゲット・コード２１としてサブジェクト・コード１７を実行する。好ましい実施形態においては、少なくとも１つのグローバル・レジスタ・ストア２７（サブジェクト・レジスタ・バンク２７又は抽象レジスタ・バンク２７とも呼ばれる）が設けられる。マルチプロセッサ環境においては、サブジェクト・プロセッサのアーキテクチャに応じて、必要に応じて２つ以上の抽象レジスタ・バンク２７が設けられる。サブジェクト状態の表現は、翻訳器ユニット１９及びターゲット・コード２１のコンポーネントによって与えられる。即ち、翻訳器ユニット１９は、サブジェクト状態を、変数及び／又はオブジェクトといった種々の明示的なプログラミング言語デバイスに格納する。これに対し、翻訳済みターゲット・コード２１は、サブジェクト・プロセッサ状態を、ターゲット・コード２１のターゲット命令によって操作されるターゲット・レジスタ１５及びメモリ位置１８に非明示的に与える。例えば、グローバル・レジスタ・ストア２７の低レベル表現は、単なる割り当てメモリの領域である。しかしながら、翻訳器ユニット１９のソース・コードにおいては、グローバル・レジスタ・ストア２７は、より高レベルでアクセス及び操作することができるデータ・アレイ又はオブジェクトである。
【００３２】
「基本ブロック」という用語は、当業者にはよく知られている。基本ブロックは、正確に１つの入口点と正確に１つの出口点とを有するコードの一部であり、ブロック・コードを単一の制御パスに制限するものである。従って、基本ブロックは制御フローの有用な基本単位である。好適には、翻訳器ユニット１９は、サブジェクト・コード１７を、各々が単一の入口点における第１の命令と単一の出口点における最後の命令（ジャンプ、呼び出し、又は分岐などの命令）との間の連続的な命令の組である複数の基本ブロックに分割する。翻訳器ユニット１９は、これらの基本ブロックのうちの１つのみを選択するか（ブロック・モード）、又は基本ブロックのグループを選択する（グループ・ブロック・モード）ことができる。グループ・ブロックは、好適には、単一のユニットとしてまとめて処理される２つ又はそれ以上の基本ブロックを含む。さらに、翻訳器ユニットは、サブジェクト・コードの同じ基本ブロックを表すが異なるエントリ条件下にある等ブロックを形成してもよい。
【００３３】
好ましい実施形態においては、元のサブジェクト・コード１７からターゲット・コード２１を生成するプロセスの一部として、サブジェクト命令シーケンスに基づいて中間表現（ＩＲ）木（trees of intermediate Representation）が生成される。ＩＲ木は、サブジェクト・コードによって計算された表現及び行われた演算の抽象表現である。後に、ＩＲ木に基づいて、ターゲット・コード２１が生成される（移植される（planted））。ＩＲノードの集合は、実際には有向非巡回グラフ（ＤＡＧ）であるが、口語的な表現では「木」と呼ばれる。
【００３４】
当業者であれば分かるように、１つの実施形態においては、翻訳器ユニット１９は、Ｃ＋＋などのオブジェクト指向プログラミング言語を用いて実装される。例えば、ＩＲノードは、Ｃ＋＋オブジェクトとして実装され、他のノードへの参照は、それらの他のノードに対応するＣ＋＋オブジェクトへのＣ＋＋参照として実装される。従って、ＩＲ木は、互いに対する種々の参照を含むＩＲノード・オブジェクトの集合として実装される。
【００３５】
さらに、説明している実施形態においては、ＩＲの生成は、サブジェクト・コード１７が実行されるように意図されるサブジェクト・アーキテクチャの特定の特徴に対応するレジスタ定義の組を用いる。例えば、サブジェクト・アーキテクチャの各々の物理レジスタ（即ち、図１のサブジェクト・レジスタ５）について、固有のレジスタ定義が存在する。従って、翻訳器ユニットにおけるレジスタ定義は、ＩＲノード・オブジェクト（即ち、ＩＲ木）への参照を含むＣ＋＋オブジェクトとして実装することができる。レジスタ定義の組によって参照される全てのＩＲ木の集合体は、作業ＩＲ森（working IR forest）と呼ばれる（各々が１つのＩＲ木を参照する複数の抽象レジスタのルートを含むため、「森」と呼ばれる）。これらのＩＲ木及び他のプロセスは、好適には翻訳器ユニット１９の一部を形成する。
【００３６】
図１は、さらに、ターゲット・アーキテクチャ１０のメモリ１８の中のネイティブ・コード２８を示す。サブジェクト・コード１７の実行時翻訳の結果として得られるターゲット・コード２１と、ターゲット・アーキテクチャのために直接書かれた又はコンパイルされたネイティブ・コード２８との間には、違いがある。幾つかの実施形態においては、翻訳器ユニット１９は、サブジェクト・コードの制御フローが、サブジェクト・コードのネイティブ・バージョンが存在するサブジェクト・ライブラリなどのサブジェクト・コード１７のセクションに入ったことを検出したときに、ネイティブ・バインディングを実施する。翻訳器ユニット１９は、サブジェクト・コードを翻訳する代わりに、等価なネイティブ・コード２８をターゲット・プロセッサ１３上で実行させる。例示的な実施形態においては、翻訳器ユニット１９は、特許文献５においてより詳細に説明されているように、ネイティブ・コード呼び出しスタブ又はターゲット・コード呼び出しスタブなどの定められたインターフェースを用いて、生成されたターゲット・コード２１をネイティブ・コード２８にバインドする。
【００３７】
図２は、ターゲット・コンピュータ・プラットフォーム１０上で実行されているときの翻訳器ユニット１９をより詳細に示す。上述のように、翻訳器ユニット１９のフロント・エンドはデコーダ・ユニット１９１を含み、デコーダ・ユニット１９１は、サブジェクト・コード１７の現時点で必要なセクションをデコードして複数のサブジェクト・コード・ブロック１７１ａ、１７１ｂ、１７１ｃ（通常は各々がサブジェクト・コードの１つの基本ブロックを含む）を与え、また、各々のサブジェクト・ブロックと、翻訳器ユニット１９の後の動作を支援する、サブジェクト・ブロックに含まれるサブジェクト命令とに関するデコーダ情報１７２を与えることもできる。幾つかの実施形態においては、翻訳器ユニット１９のコア１９２にあるＩＲユニットが、デコードされたサブジェクト命令から中間表現（ＩＲ）を作成し、中間表現に関して、適宜、最適化が行われる。翻訳器ユニット１９のバック・エンドの一部としてのエンコーダ１９３が、ターゲット・プロセッサ１３によって実行可能なターゲット・コード２１を生成する（移植する）。この単純な例においては、サブジェクト・プラットフォーム１上でサブジェクト・コード・ブロック１７１ａ−１７１ｃを実行するのに相当する作業をターゲット・プラットフォーム１０上で行うために、３つのターゲット・コード・ブロック２１１ａ−２１１ｃが生成される。また、エンコーダ１９３は、ターゲット・コード・ブロック２１１ａ−２１１ｃのうちの幾つか又は全てについて、そのターゲット・コード・ブロックが動作する環境を設定し、適切な翻訳器ユニット１９に制御を戻すなどといった機能を行う制御コード２１２を生成することもできる。このように、翻訳器ユニット１９は、ターゲット・コード２１の実行とターゲット・オペレーティング・システム２０とをインターフェースするように構成される。
【００３８】
図３は、本発明の例示的な実施形態によるコンピュータ・システム１０を例示するブロック図を示す。図３において、サブジェクト・コード１７は、浮動小数点表記で表された数値の演算を特定のレベルの数値精度まで行うためにハードウェアのサポートを必要とする。しかしながら、図３のコンピュータ・システム１０においては、サブジェクト・コード１７は、翻訳器ユニット１９によってターゲット・コード２１に変換される。ターゲット・コード２１は、ターゲット・プロセッサ１３によって実行される。ターゲット・プロセッサ１３は、ＩＵ１６と、サブジェクト・コード１７によって必要とされる精度より低い精度で数値の浮動小数点演算をサポートするＦＰＵ１４と、を含む。この状況においては、サブジェクト・コードとターゲット・プロセッサ１３のハードウェアとの間に根本的な非互換性が存在する。
【００３９】
高精度という用語は、ターゲット・プロセッサ１３におけるＦＰＵ１４のハードウェアによって提供される精度より高いレベルの数値精度を指す。低精度は、ターゲット・プロセッサ１３におけるＦＰＵ１４のハードウェアによって提供される精度より低いか又はこれと等しいレベルの数値精度を指す。高精度は、ターゲットを上回る精度、即ち、ターゲット・プロセッサ１３によって本来必要とされる精度と比べて数値的により正確な精度であると見なすことができる。高精度問題は、サブジェクト・コード１７によって必要とされるハードウェアに、ターゲットＦＰＵ１４に存在するものより多くのデータ・ビットが存在するときに生じる。
【００４０】
翻訳器ユニット１９のデコーダ１９１内には、浮動小数点状態ユニット１９５がある。浮動小数点状態ユニットは、浮動小数点状態情報を決定するように構成される。浮動小数点状態情報は、翻訳器ユニット１９によって受信されたサブジェクト・コード１７の中の命令に従って決定される。浮動小数点状態情報は、ＦＰＵ１４を直接用いてサブジェクト・コード１７における浮動小数点演算の結果を得るのか、又は、例えばＩＵ１６を単独で若しくはＦＰＵ１４と組み合わせて用いることによって間接的に結果を得るのかを示す。
【００４１】
翻訳器ユニット１９内に、浮動小数点制御ユニット１９６が示される。浮動小数点制御ユニット１９６は、浮動小数点状態ユニット１９５から浮動小数点状態情報を受信する。浮動小数点制御ユニット１９６は、浮動小数点演算のために受信したサブジェクト・コード命令をチェックし、浮動小数点演算が特定されたときに浮動小数点状態情報をチェックする。次いで、浮動小数点制御ユニット１９６は、翻訳器ユニット１９を制御してターゲット・コード２１を生成する。
【００４２】
この実施形態においては、浮動小数点制御ユニット１９６は、コア１９２の中の浮動小数点計算ユニット１９７に制御信号を送信する。浮動小数点計算ユニット１９７は、浮動小数点制御ユニット１９６から受信した制御信号に従って、適切な中間表現を生成し最適化する。ここから、コード生成器１９３は、対応するターゲット・コード２１を生成する。ターゲット・コード２１は、ターゲット・プロセッサ１３上で実行されたときに、サブジェクト・コード１７によって要求される浮動小数点演算をＦＰＵ１４上で直接行うコード、又は、ターゲット・プロセッサ１３上で実行されたときに、サブジェクト・コード１７によって要求される浮動小数点演算の結果をＩＵ１６及び／又はＦＰＵ１４を用いて間接的に生成するコードのいずれかを含む。別の実施形態においては、浮動小数点計算ユニット１９７は、例えば翻訳器ユニット１９がアプリオリに利用可能なターゲット・コードを利用することによって特定のＩＲの生成を必要とすることなく浮動小数点演算を行うように、コード生成器１９３がターゲット・コード２１を移植するようにする。
【００４３】
図３に示される実施形態を関連づけて説明すると、サブジェクト・コード１７は、例えば、ｘ８７  ＦＰＵ上で行われるｘ８７命令サブセットからの命令を含むＩｎｔｅｌ  ｘ８６命令からなる。ｘ８７  ＦＰＵは、制御レジスタに設定された値に応じて、３２ビット精度、６４ビット精度、又は８０ビット精度のうちの１つの正確さを出力に与える。図３に示されるターゲット・プロセッサ１３がＰｏｗｅｒＰＣの場合には、ＦＰＵ１４の出力は、３２ビット又は６４ビットの精度で得られる。８０ビットの拡張精度演算、及び、それより高い精度の演算は、ＰｏｗｅｒＰＣのＦＰＵによってサポートされていない。
【００４４】
ＰｏｗｅｒＰＣが８０ビットの精度で結果を生成できるようにするために、ＦＰＵ１４をＩＵ１６と組み合わせて用いることができる。しかしながら、ＩＵ１６と組み合わせてＦＰＵ１４を用いる８０ビット浮動小数点演算の結果を評価するために翻訳器ユニット１９によって生成されるターゲット・コード２１は、低速である。従って、ＩＵに割り当てられる作業量を減らすことによってターゲット・プロセッサの効率を改善し、ターゲット・プロセッサのＦＰＵを最大限に利用することが望ましい。
【００４５】
ここで、浮動小数点状態ユニット１９５、浮動小数点制御ユニット１９６、及び浮動小数点計算ユニット１９７と、それらのそれぞれの機能とを、より詳細に説明する。浮動小数点状態ユニット１９５は、翻訳器ユニット１９によって受信されたサブジェクト・コード１７の中の命令に従って、浮動小数点状態情報を決定する。浮動小数点状態ユニット１９５は、サブジェクトＦＰＵにデータを与えるサブジェクト・コードの命令を特定し、そのようなデータの精度を決定する。具体的には、ソース・オペランドとしてサブジェクトＦＰＵに与えられるデータを用いて、浮動小数点状態情報が設定される。
【００４６】
サブジェクト・コード１７においてサブジェクトＦＰＵにデータをロードする命令に遭遇すると、浮動小数点状態ユニット１９５は、データの精度及びＦＰＵ１４の精度に応じて、ＦＰＵ１４を用いて浮動小数点演算の結果をサブジェクト・コード１７に直接与えるべきか、又は、ＩＵ１６を単独で若しくはＦＰＵ１４と組み合わせて用いて間接的に結果を与えるべきかを判定する。それに応じて、次に、浮動小数点状態ユニット１９５は浮動小数点状態情報を設定する。
【００４７】
ターゲット・コードがターゲットＦＰＵ１４及びＩＵ１６を利用してサブジェクト・コードの浮動小数点演算の結果を生成する方法に関して本明細書において用いられる直接及び間接という用語を、ここで説明する。ターゲットＦＰＵ１４を直接用いるというのは、ターゲットＦＰＵによってサポートされる精度レベルでターゲットＦＰＵハードウェアを用いることである。ターゲットＦＰＵは、サポートできる数値精度のレベルにあるソース・オペランドをサブジェクト・コードから提示されたときには、そのハードウェアを直接利用してそのソース・オペランドを用い、浮動小数点演算の結果を生成することができる。ターゲットＦＰＵ１４及び／又はＩＵ１６を間接的に用いるというのは、ＦＰＵ１４及び／又はＩＵ１６を用いて、サブジェクト・コードにおいて指定される浮動小数点演算の出力を生成するための作業の一部としてソース・オペランドの中間計算を行うことである。ターゲットＦＰＵ１４及び／又はＩＵ１６を間接的に利用することによって、低精度のハードウェアが高精度の結果を生成することが可能になるが、これは中間計算の適切な組を実施することを犠牲にするものである。例示的な実施形態においては、ターゲット・ハードウェアに与えられた精度より高いレベルの精度でサブジェクト・コードにおける浮動小数点演算の結果を生成するためにターゲットＦＰＵ１４及び／又はＩＵ１６を間接的に利用することは、浮動小数点エミュレーション・アルゴリズムを用いることを含む。１つの好適なエミュレーション・アルゴリズムは、ＳｏｆｔＦｌｏａｔアルゴリズムを含む。好適なエミュレーション・アルゴリズムは、典型的には、ターゲットＩＵ１６を用いて高精度の浮動小数点演算の結果を間接的に計算するが、さらにターゲットＦＰＵ１４を用いることもできる。しかしながら、幾つかの実施形態においては、特定の高精度のサブジェクト浮動小数点演算の結果を間接的に評価するのにターゲットＦＰＵ１４のみを用いることもできる。
【００４８】
浮動小数点制御ユニット１９６は、浮動小数点状態ユニット１９５から浮動小数点状態情報を受信し、浮動小数点演算のために受信したサブジェクト・コード命令をチェックする。浮動小数点制御ユニット１９６は、サブジェクト・コード１７の中の浮動小数点演算を特定し、浮動小数点状態情報に注目する。浮動小数点制御ユニット１９６は、浮動小数点計算ユニット１９７に制御信号を渡す。これに応答して、浮動小数点計算ユニット１９７は、適切な中間表現を生成し最適化する。ここから、コード生成器１９３は対応するターゲット・コード２１を生成し、対応するターゲット・コード２１は、ＦＰＵ１４を利用して要求されるレベルの精度でサブジェクト・コード１７における浮動小数点演算の結果を直接出すか、又は、ＩＵ１６及び／又はＦＰＵ１４を利用して間接的に結果を出す。
【００４９】
１つの実施形態においては、浮動小数点状態ユニット１９５は、浮動小数点演算のためのソース・オペランドを使用できるデータの各々に関連するフラグを生成するように構成される。例えば、浮動小数点演算のためのソース・オペランドは、メモリからＦＰＵにロードするか、又は、レジスタ内容を例えば円周率といった所定の数学定数又は他の定数に直接設定するサブジェクト命令によってロードすることができる。フラグは、浮動小数点状態情報を含み、データの精度を示す。浮動小数点状態ユニット１９５は、関連するデータの精度を指定するサブジェクト・コード１７の中のロード命令及び他の命令を特定し、区別するように構成される。
【００５０】
浮動小数点制御ユニット１９６は、受信したサブジェクト・コードの中の浮動小数点演算についてのオペランドを特定し、浮動小数点状態ユニット１９５から受信したフラグをチェックする。浮動小数点制御ユニット１９６は、ターゲット・プロセッサのハードウェアが正確に用いられて浮動小数点演算の結果が生成されることを保証するように、浮動小数点計算ユニット１９７を制御する。浮動小数点状態ユニット１９５は、浮動小数点演算の結果の精度を示すフラグを生成するように適切に構成され、フラグは次いで、適切なターゲット・コードの生成の際に浮動小数点制御ユニット１９６及び浮動小数点計算ユニット１９７によっても用いられる。１つの例示的な実施形態においては、高精度のソース・オペランドに対して行われた演算の結果自体は、高精度であると判断され、その結果に対する次の演算も高精度で行われることが必要な高精度データとしてフラグされる。
【００５１】
図４は、上述された実施形態において、浮動小数点状態ユニット１９５、浮動小数点制御ユニット１９６、及び浮動小数点計算ユニット１９７によって行われるステップを示すフロー図を示す。サブジェクト命令は、ステップ９０１においてデコードされ、次いで、ステップ９０２において、浮動小数点演算であるかどうかを判定するために浮動小数点制御ユニット１９６によって分析される。サブジェクト命令が浮動小数点演算である場合には、右側の分岐からステップ９０４に続く。このステップにおいて、オペランドのフラグが検査される。
【００５２】
以下でより詳細に説明されるように、データがサブジェクトＦＰＵのデータ構造にロードされるとき、又はそうでなければサブジェクト浮動小数点ソース・オペランドとなったときに、データの精度に応じて浮動小数点状態ユニット１９５によってフラグが設定される。
【００５３】
ステップ９０４において、１つ又は複数のオペランドのフラグが高精度を示す場合には、浮動小数点制御ユニット１９６は浮動小数点計算ユニット１９７にＩＲを生成させ、ＩＲは、ターゲットＦＰＵ１４とターゲットＩＵ１６とを組み合わせて演算が行われるエンコーダ１９３によって生成されるターゲット・コードをもたらすことになる（ステップ９０６）。次いで、ステップ９０８において、浮動小数点計算ユニット１９７は、浮動小数点演算の結果について高精度を示すフラグを設定する。ステップ９０４において、浮動小数点制御ユニットが、オペランドのフラグが低精度を示すと判定した場合には、浮動小数点制御ユニット１９６は浮動小数点計算ユニット１９７にＩＲを生成させ、ＩＲは、ターゲットＩＵ１６が関与することなくターゲットＦＰＵ１４で問題の演算が行われるエンコーダ１９３によって生成されるターゲット・コードをもたらすことになる（ステップ９０７）。その後、フローはステップ９０９に続き、浮動小数点状態ユニット１９５は、浮動小数点演算の結果について低精度を示すフラグを設定する。
【００５４】
ステップ９０２において、浮動小数点制御ユニットによって、次の命令が浮動小数点演算ではないと判定された場合には、左側の分岐からステップ９０３に続く。このステップにおいて、命令は、その命令がデータのロードであるかどうかを判定するために、浮動小数点状態ユニット１９５によって分析される。命令がロードでない場合には、ステップ９０１において次のサブジェクト・コード命令がデコードされるまで、浮動小数点制御ユニット１９６及び浮動小数点状態ユニット１９５の作業は終了である。ステップ９０３において、浮動小数点状態ユニット１９５が、命令はロードであると判定した場合には、浮動小数点状態ユニット１９５は、ロード命令によって指定された精度に従ってロード済みデータについてフラグを設定し、浮動小数点制御ユニット１９６及び浮動小数点状態ユニット１９５の作業は、次のサブジェクト・コード命令がステップ９０１においてデコードされるまで終了する。
【００５５】
上述された実施形態は、浮動小数点状態ユニット１９５によって生成されるフラグを用いて、データ精度の正確な追跡を可能にする。しかしながら、上述されたようなフラグの生成は、管理面でのオーバーヘッドを生じさせる。
【００５６】
浮動小数点状態情報の生成においてロード済みデータの各々と関連するフラグを用いる上記の実施形態の代わりに、本発明の第２の実施形態は、サブジェクト・コード１７によって求められるＦＰＵ４の特徴を利用するものであり、具体的には、ＦＰＵ４と関連するデータ構造の特徴を用いる。第２の実施形態においては、浮動小数点状態ユニット１９５は、管理面の著しい負担を追加することなく浮動小数点状態情報を生成する。第２の実施形態においては、浮動小数点状態ユニットは、基本ブロック単位で浮動小数点状態情報を生成する。浮動小数点状態ユニットは、ターゲット・コードの基本ブロックの開始時に、ＦＰＵ４と関連するデータ構造の特徴に従って浮動小数点状態情報を生成する。次いで、基本ブロック全体にわたってサブジェクト・コード１７によって必要とされる浮動小数点演算を直接行うためにターゲットＦＰＵのみを用いるか、又は、基本ブロック全体にわたってターゲットＦＰＵ１４及び／又はターゲットＩＵ１６において間接的な計算を用いる、ターゲット・コードの基本ブロックが生成される。
【００５７】
図５は、ターゲット・コード２１への変換前にターゲット・プロセッサ１３のメモリ１８に格納されるサブジェクト・コード１７の一部の例を示す。図５にはまた、４つのターゲット・コード基本ブロック２１ａ、２１ｂ１、２１ｃ、及び２１ｂ２と、翻訳器ユニット１９とが示される。ターゲット・コード基本ブロックは、サブジェクト・コード１７がターゲット・コード２１に変換されるときに、翻訳器ユニット１９によって生成される。ターゲット・コード基本ブロック２１ｂ１及び２１ｂ２は等ブロックであり、異なるエントリ条件下にあるサブジェクト・コードの同一の基本ブロックを表す。図５においてさらに示されるのは、翻訳器ユニットがアクセス可能なストレージ位置２７ａ及び２７ｂであり、これらはサブジェクトＦＰＵ４と関連するサブジェクト・データ構造の表現を形成する。
【００５８】
基本ブロック２１ｂ１と２１ｂ２との間で異なるエントリ条件は、サブジェクトＦＰＵ４と関連するストレージ２７ａ内のデータの精度に関する。エントリ条件は、ストレージ２７ａのデータのうちのどれが高精度データを表すかを記述する。このデータは、ブロックの翻訳の開始時に、浮動小数点状態情報として浮動小数点状態ユニット１９５にロードされる。翻訳器ユニット１９によって命令が翻訳される際に、浮動小数点状態ユニット１９５は、この情報を更新する。ＦＰＵに高精度データをロードする命令が、デコーダ１９１によってブロックに翻訳されるときに、浮動小数点状態情報は、これを反映するように更新される。受信したサブジェクト・コードの中の浮動小数点命令を翻訳した時点で、浮動小数点制御ユニット１９６は、浮動小数点状態情報を調査する。命令に対するオペランドが低精度の場合には、低精度で演算を行うために、浮動小数点制御ユニット１９６の制御の下で浮動小数点計算ユニット１９７によってＩＲが生成され、結果が低精度であることを追跡するために浮動小数点状態情報が更新される。命令に対するオペランドが高精度の場合には、高精度で演算を行うために、浮動小数点制御ユニット１９６の制御の下で浮動小数点計算ユニット１９７によってＩＲが生成され、結果が高精度の値であることを追跡するために浮動小数点状態情報が更新される。ブロックの最後において、浮動小数点状態情報は、浮動小数点状態ユニット１９５からコピーされて戻され、このデータは、後に実行されるブロックのためのエントリ条件の一部を形成することになる。
【００５９】
精度に特化した基本ブロック／等ブロックが作られることによって、ＩＲにおけるブロック最適化が容易になる。
【００６０】
再び図５を参照すると、サブジェクト・コード１７は、サブジェクト・コード・プログラム・カウンタ０ｘ２０００に対応するメモリ・アドレスから開始するブロックＢ（４２０）を含み、浮動小数点演算を含む。しかしながら、翻訳器ユニットがブロックＢをデコードする際に、このブロックが何の命令を含むかはアプリオリには知られていない。具体的には、ブロックがいずれかのデータをＦＰＵ４と関連するデータ構造にロードするかどうか、ブロックがいずれかの浮動小数点演算を含むかどうか、及び、そういったいずれかの浮動小数点演算の結果についてどのレベルの精度が指定されるのかということは、知られていない。
【００６１】
ブロックＢは、０ｘ１０００で開始するブロックＡ（４１０）、又は、０ｘ４０００で開始するブロックＣ（４３０）のいずれかから到達される。ブロックＡの最後で、ＦＰＵ４と関連するデータ構造の表現に高精度データがロードされる。ブロックＡからコード・ブロックＢに到達したときに、高精度データのエントリ条件に特化された基本ブロック２１ｂ１が生成される。これらのエントリ条件の下で、ターゲット・プロセッサ１３のＦＰＵ１４及び／又はターゲット・プロセッサ１３のＩＵ１６が間接的に用いられて、ブロックＢにおいて指定される浮動小数点演算の結果が評価される。
【００６２】
ブロックＣの最後で、サブジェクトＦＰＵ４と関連するデータ構造の表現に低精度データがロードされる。ブロックＣの最後からサブジェクト・コード・ブロックＢに到達したときに、低精度データのエントリ条件に特化された基本ブロックが生成される。これらのエントリ条件の下で、ターゲット・プロセッサ１３のＦＰＵ１４が直接用いられて、ブロックＢにおいて指定される浮動小数点演算の結果が評価される。
【００６３】
サブジェクト・コード１７は、例えば、ｘ８７ＦＰＵ上で行われるｘ８７命令サブセットからの命令を含むＩｎｔｅｌ  ｘ８６命令からなるものとすることができる。ｘ８７  ＦＰＵは、ＦＰＵのためのソース・オペランドを保持し、ＦＰＵの出力を保持するために、スタック・データ構造を利用する。ｘ８７は、ＦＰＵのためのソース・オペランドとＦＰＵの出力とをレジスタ・スタックに格納する。ｘ８７  ＦＰＵレジスタ・スタックは、各々が８０ビットの幅である８つのレジスタを含む。データは、メモリからスタックに格納され、スタックから取り出されてメモリに戻される。浮動小数点演算に関する命令は、一般に、２つのソース・オペランドをスタックの上部から取り出し、それらを実行し、ＦＰＵ演算の結果をスタックの上部に戻す。
【００６４】
浮動小数点状態ユニット１９５は、サブジェクトＦＰＵスタックの表現の内容を監視することによって、ブロックが開始したときにそのブロックにおけるＦＰＵ演算の結果について必要な可能性のある精度を判定することができる。サブジェクトＦＰＵスタックの表現の内容を監視することによって、浮動小数点状態情報の生成に特に都合のよい方法が提供される。
【００６５】
図１に関して説明されたように、翻訳器ユニット１９は、サブジェクトＦＰＵレジスタ・スタックの表現をサブジェクト・レジスタ・バンク２７の一部として保持するように構成される。この表現は、例えば図５においてストレージ位置２７ａとして示されるサブジェクトＦＰＵレジスタ・スタックの中のデータ位置の表現と、図５において２７ｂとして示されるサブジェクトＦＰＵスタック・ポインタの表現とを含む。
【００６６】
ここで、サブジェクト・コード１７がｘ８７命令サブセットからの８０ビット命令を含み、ターゲット・プロセッサのＦＰＵが６４ビット精度までしか正確ではない例を説明する。基本ブロックの開始時にサブジェクト・レジスタ・スタックの表現が６４ビットのデータのみを含むときには、浮動小数点状態ユニット１９５は、ターゲット・プロセッサ１３のＦＰＵ１４を用いてブロックの中のデータの浮動小数点演算を行うように、浮動小数点状態情報を設定する。サブジェクト浮動小数点状態ユニット１９５は、ブロックの中のサブジェクト・コード命令を監視し、高精度データをサブジェクトＦＰＵスタックに格納する命令を特定した場合には、浮動小数点状態情報に対して２つの操作を行う。第１に、浮動小数点制御ユニット１９６が基本ブロックを終了させるように浮動小数点状態情報を設定する。第２に、浮動小数点制御ユニット１９６が新しい基本ブロックを作るように浮動小数点状態情報を設定する。
【００６７】
上述されたような浮動小数点状態情報の変化に応答して、浮動小数点制御ユニット１９６は、サブジェクトＦＰＵスタック２７ａの表現の中に存在するいずれかの６４ビット・データを再フォーマットし、８０ビット・データについての規則に従って提示されるようにターゲット・コードを生成させる。このプロセスは、上位変換（up-conversion）と呼ばれる。浮動小数点制御ユニット１９６は、ＦＰＵ１４及び／又はＩＵ１６が間接的に用いられて、新しい基本ブロック内のサブジェクトＦＰＵスタック２７ａの表現の中に存在するデータの浮動小数点演算が行われるように、ターゲット・コードを生成させる。
【００６８】
浮動小数点状態ユニット１９５は、サブジェクトＦＰＵスタック・ポインタ２７ｂの表現を監視することによって、サブジェクトＦＰＵスタック２７ａの表現が空になるときを判定する。これが生じたときには、浮動小数点状態ユニット１９５は、以前にロードされたいずれかの高精度データの全ての演算が完了したことを示すように、浮動小数点状態情報を設定する。次いで、ターゲットＦＰＵ１４のみを直接用いてサブジェクト・コード１７の浮動小数点演算の結果を生成するターゲット・コード・ブロックが、浮動小数点制御ユニット１９６の制御の下で生成される。
【００６９】
サブジェクト・コードのＦＰＵロード命令などのような、ソース・オペランドをＦＰＵに与える命令と関連する精度を監視することと、スタック２７ａが空であることをスタック・ポインタ２７ｂが示した以降にいずれかの高精度命令が実施されたかどうかを判定するためにサブジェクトＦＰＵスタック・ポインタ２７ｂの表現を監視することとによって、浮動小数点状態情報を効率的に設定する情報が浮動小数点状態ユニット１９５に与えられる。浮動小数点状態情報を用いることによって、サブジェクト・コード１７において指定される浮動小数点演算の結果を生成するために、ターゲット・プロセッサ１３のＦＰＵ１４を直接用いるようにターゲット・コードを選択的に生成するか、又は、ターゲット・プロセッサのＦＰＵ１４及び／又はＩＵ１６を間接的に用いるようにターゲット・コードを選択的に生成することが可能になる。この実施形態は、データを監視することによる最小のオーバーヘッドのみを伴うものであり、受信したサブジェクト・コードの翻訳の生成に用いるための浮動小数点状態情報を生成する都合の良い方法を提供する。
【００７０】
図６は、ターゲット・コード２１への変換前にターゲット・プロセッサ１３のメモリ１８に格納されるサブジェクト・コード１７の一部の例を示す。サブジェクト・コード１７は、それぞれ４１０、４２０、及び４３０と表記される、ブロックＤ、ブロックＥ、及びブロックＦから成る。図６にはまた、４つのターゲット・コード基本ブロック２１ｄ、２１ｅ１、２１ｆ、及び２１ｅ２と、翻訳器ユニット１９とが示される。ターゲット・コード基本ブロックは、サブジェクト・コード１７がターゲット・コード２１に変換されるときに、翻訳器ユニット１９によって生成される。ターゲット・コード基本ブロック２１ｅ１及び２１ｅ２は等ブロックであり、異なるエントリ条件下にあるサブジェクト・コードの同一の基本ブロックを表す。図６は、図５と同様の状況を示すが、この図においては、生成されたターゲット・コード・ブロック２１ｅ１及び２１ｅ２は、それぞれ、低精度及び高精度のエントリ条件で生成された等ブロックを表す。
【００７１】
図７は、ブロックが開始したときに浮動小数点状態情報によって示された精度より高い精度を必要とする演算に応答して、ブロックを終了させ、新しいブロックを開始するプロセスを示す。サブジェクト・コード・ブロックＧ（４１０）は、低精度のエントリ条件で開始された。翻訳器ユニット１９内の浮動小数点状態ユニット１９５は、ブロックが開始したときに浮動小数点状態情報によって示されたものより高い精度のオペランドを取得するか又はより高い精度の出力を必要とする、ブロックＧにおけるサブジェクト・コード１７の命令を特定する。現在の基本ブロック２１ｇ１が終了する。高精度を必要とする命令の翻訳を含むことなく、高精度のエントリ条件の下で新しい基本ブロック２１ｇ２が作られる。
【００７２】
図８は、ブロックが開始したときに浮動小数点状態情報によって示された精度より低い精度を必要とする演算に応答して、ブロックを終了させ、新しいブロックを開始するプロセスを示す。サブジェクト・コード・ブロックＨ（４１０）は、高精度のエントリ条件で開始された。翻訳器ユニット１９内の浮動小数点状態ユニット１９５は、ある時点でサブジェクトＦＰＵと関連するデータ構造の中のデータのいずれも高精度ではないことを特定する。現在の基本ブロック２１ｈ１が終了する。低精度のエントリ条件の下で新しい基本ブロック２１ｈ２が作られる。
【００７３】
状況によっては、上述された浮動小数点状態ユニット１９５と浮動小数点制御ユニット１９６は、受信したサブジェクト・コード命令に応答して動作し、サブジェクトＦＰＵスタック２７ａ、２７ｂの表現に格納されたデータの上位変換を行うことを唯一の機能とするターゲット・コードの基本ブロックを生成することになる。
【００７４】
図９は、低精度の条件の下で作られたサブジェクト・コード・ブロックＩ（４１０）を示す。低精度の条件は、示されたジャンプ命令に応答してブロックが終了するまで継続する。しかしながら、ジャンプ命令が実行されたときに、次の命令、即ちブロックＪ（４２０）における第１の命令は、高精度データに関するものである。ターゲット・コード・ブロック２１ｊ１が作られたときには、このブロックにおける第１の命令は、翻訳器ユニット１９によってデコードされていなかった。このシナリオでは、低精度ブロック２１ｊ１が作られ、ＦＰＵスタック２７ａのサブジェクト・コード表現にロードされたデータが上位変換され、次いで高精度ブロック２１ｊ２が作られる。
【００７５】
図１０は、低精度のエントリ条件の下で入る基本ブロックの生成を例示するフロー図を示す。サブジェクト・コードの浮動小数点演算の結果を評価するにあたって、可能であればターゲット・プロセッサ１３のＦＰＵ１４のみを用いることが望ましいため、これらのエントリ条件は、変換されるサブジェクト・コード１７の一部における第１の基本ブロックについてのデフォルト条件として仮定される場合がある。必要な精度の設定は、浮動小数点状態ユニット１９５によって行われる。浮動小数点状態ユニット１９５は、上述されたように、ブロックの精度がターゲット・プロセッサ１３のＦＰＵ１４によってサポートされる最も高いレベルの精度であることを示すことが好ましい浮動小数点状態情報を作る。
【００７６】
この例においては、ステップ５０１において、ブロックは低精度ブロックとして作られ、サブジェクト命令のデコードが開始する。ステップ５０２において、第１のサブジェクト命令が分析され、高精度が必要とされるどうかが判定される。高精度が必要とされない場合には、ステップ５０３において命令がブロックに追加される。次いで、ステップ５０３において追加された命令が分析され、ブロックを終了させる命令を含むかどうかが判定される。命令がブロックを終了させない場合には、プロセスはステップ５０３に戻り、次の命令が分析され、高精度が必要とされるどうかが判定される。ステップ５０５において、命令がブロックを終了させることが判定された場合には、そのブロックは終了し、次に続くブロックのためのエントリ条件は、低精度のエントリ条件として設定される（ステップ５０６）。
【００７７】
ステップ５０２において、例えば、命令が８０ビット・データのロードに関するものであるか、又は、命令は６４ビット・データの浮動小数点演算に関するものであるが出力は８０ビットの精度に丸められるといった理由で、次の命令が高精度を必要とすることが判定された場合には、ＦＰＵレジスタ・スタックに格納された値は、ステップ５０４において高精度に上位変換される。その後、ステップ５０７において、ブロックは終了し、次に続くブロックのためのエントリ条件は、高精度のエントリ条件として設定される。高精度を必要とする命令は、次に続くブロックにおいて第１の命令を形成する。
【００７８】
図５の方法によって低精度ブロックとして生成された命令は、サブジェクト・コード１７の中の浮動小数点演算の結果を必要なレベルの精度で生成するのにターゲット・プロセッサ１３のＩＵ１６を必要としない。
【００７９】
図１１は、高精度のエントリ条件の下で作られたブロックを処理するときに行われるステップを示す。ステップ６０１において、ブロックは高精度ブロックとして作られる。ステップ６０２において、第１のサブジェクト命令は高精度命令として追加される。この命令によって、ターゲットＦＰＵ１４とＩＵ１６とを用いてサブジェクト・コードで指定された浮動小数点演算の結果を計算するターゲット・コードが生成されることになる。ステップ６０３において、次のサブジェクト命令が分析され、依然として高精度が必要かどうかが判定される。依然として高精度が必要である場合には、ステップ６０２において追加された命令が分析され、ブロックを終了させる命令を含むかどうかが判定される（ステップ６０５）。ブロックを終了させない場合には、プロセスはステップ６０２に戻り、次の命令がブロックに追加される。
【００８０】
ステップ６０５において、命令がブロックを終了させることが判定された場合には、ブロックは終了し、次に続くブロックのためのエントリ条件は、高精度のエントリ条件として設定される（ステップ６０６）。
【００８１】
ステップ６０３において、例えば、サブジェクトＦＰＵスタック・ポインタ２７ｂの表現の状態をチェックすることなどによって示される、サブジェクトＦＰＵ２７ａの表現の中に高精度のデータが存在しないといった理由で、より低い精度で次の命令を行うことができると判定された場合には、方法は、ステップ６０７に進み、そこでブロックは終了し、次に続くブロックのためのエントリ条件は、低精度のエントリ条件として設定される。ブロックを終了させる６４ビット命令は、図１０の方法に従って生成されている次に続くブロックにおける最初の命令を形成する。
【００８２】
上記の説明において示されたように、上記の種々の実施形態は、サブジェクト・コード・オペランド又はサブジェクト・コード演算の結果がターゲット・マシンとは異なる精度を必要とする場合に、ターゲット・マシン上でのサブジェクト・プログラム・コードの効率的な処理を提供する。さらに、ターゲット・マシン・アーキテクチャによってサポートされる精度より高い精度を伴うサブジェクト・プログラム・コード命令は、異なる精度のデータの演算が行われるときに迅速に効率よく特定され、処理される。
【００８３】
本発明の翻訳器ユニット及び方法の異なる構成は、上記の実施形態の各々において別個に説明されている。しかしながら、本発明の発明者は、本明細書において説明された各実施形態の別個の態様を本明細書において説明された他の実施形態と組み合わせることができることを、十分に意図している。当業者であれば、本発明の範囲及び趣旨から逸脱することなく、ここで説明された好ましい実施形態を様々に適応させ、修正できることが分かるであろう。従って、特許請求の範囲内で、本明細書において詳細に説明された以外の方法で本発明を実施できることを理解されたい。
【００８４】
少数の好ましい実施形態が示され説明されたが、当業者であれば、特許請求の範囲において定められる本発明の範囲から逸脱することなく、様々に変更し修正することができることが分かるであろう。
【００８５】
本出願と関連して本明細書と同時に又はこれ以前に出願され、本明細書と共に公開される全ての論文及び文献に注意が向けられており、そのような論文及び文献の全ての内容は、引用により本明細書に組み入れられる。
【００８６】
（いずれかの特許請求の範囲、要約、及び図面を含む）本明細書において開示された特徴の全て、及び／又は、そこに開示されたいずれかの方法又はプロセスのステップの全ては、こうした特徴及び／又はステップのうちの少なくとも幾つかが相互に排他的である組み合わせを除いて、いかなる組み合わせにも組み合わせることができる。
【００８７】
（いずれかの特許請求の範囲、要約、及び図面を含む）本明細書において開示された各々の特徴は、他に明示的な断りのない限り、同一の目的、等価な目的、又は類似の目的を果たす代替的な特徴によって置換することができる。従って、他に明示的な断りのない限り、開示された各々の特徴は、一般的な一連の等価な特徴又は類似の特徴の単なる一例である。
【００８８】
本発明は、上記の１つ又は複数の実施形態の詳細に限定されるものでなはい。本発明は、（いずれかの特許請求の範囲、要約、及び図面を含む）本明細書において開示された特徴のいずれかの新規な１つ若しくはいずれかの新規な組み合わせ、又は、そこに開示された方法若しくはプロセスのステップのいずれかの新規な１つ若しくはいずれかの新規な組み合わせにも及ぶ。
【図１】
2010530996.tif 000003
【図２】
2010530996.tif 000004
【図３】
2010530996.tif 000005
【図４】
2010530996.tif 000006
【図５】
2010530996.tif 000007
【図６】
2010530996.tif 000008
【図７】
2010530996.tif 000009
【図８】
2010530996.tif 000010
【図９】
2010530996.tif 000011
【図１０】
2010530996.tif 000012
【図１１】
2010530996.tif 000013
【国際調査報告】
2010530996.tif 000014
2010530996.tif 000015
2010530996.tif 000016