(57)【要約】【課題】  特殊化ビット・ブロック転送関数をランタイム時に生成するための実装形態を提供すること。【解決手段】  ビット・ブロック転送（bitblt）を実行する例示的な方法は、ｂｉｔｂｌｔを指定する１つまたは複数のグラフィックス・パラメータを受け取ること、およびｂｉｔｂｌｔを実行するための特殊化ｂｉｔｂｌｔ関数を生成することを含む。特殊化ｂｉｔｂｌｔ関数は、コード・ブロックの上位セットからグラフィックス・パラメータに基づいて選択した１つまたは複数のコード・ブロックを含む。システムは、指定されたｂｉｔｂｌｔを実行するための特殊化ｂｉｔｂｌｔ関数を生成する特殊化ｂｉｔｂｌｔ関数生成部を含む。特殊化ｂｉｔｂｌｔ関数は、ｂｉｔｂｌｔを指定する１つまたは複数のグラフィックス・パラメータに対応する中間言語コードを含む。翻訳部により、特殊化ｂｉｔｂｌｔ関数は、マシン特有の言語のコードへと翻訳される。【選択図】  図１
2006018830.tif 000002
【特許請求の範囲】
【請求項１】
ビット・ブロック転送（bitblt）を実行する方法であって、
前記ｂｉｔｂｌｔを指定する１つまたは複数のグラフィックス・パラメータを受け取ること、および
複数のｂｉｔｂｌｔ操作に対応するコード・ブロックの上位セットからの１つまたは複数のコード・ブロックからなるセットを備える特殊化ｂｉｔｂｌｔ関数を生成し、前記ｂｉｔｂｌｔを実行すること
を備えることを特徴とする方法。
【請求項２】
前記生成し実行することは、前記特殊化ｂｉｔｂｌｔ関数を表す中間言語コードを生成することを備えることを特徴とする請求項１に記載の方法。
【請求項３】
中間言語コードをマシン特有の言語のコードへと翻訳することをさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
前記マシン特有の言語のコードのキャッシュを行うことをさらに備えることを特徴とする請求項３に記載の方法。
【請求項５】
前記マシン特有の言語のコードのキャッシュを行うこと、および
前記キャッシュを行ったマシン特有の言語のコードを、前記受け取る操作に応答して実行すること
をさらに備えることを特徴とする請求項３に記載の方法。
【請求項６】
前記マシン特有の言語のコードを実行して、前記ｂｉｔｂｌｔを実行することをさらに備えることを特徴とする請求項３に記載の方法。
【請求項７】
ｂｉｔｂｌｔシグニチャを前記１つまたは複数のグラフィックス・パラメータに基づいて生成することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記生成し実行することは、前記１つまたは複数のコード・ブロックからなるセットを、一般化ｂｉｔｂｌｔ関数から前記１つまたは複数のグラフィックス・パラメータに基づいて選択することを備えることを特徴とする請求項１に記載の方法。
【請求項９】
前記特殊化ｂｉｔｂｌｔ関数がメモリ内にキャッシュされているかどうかを決定すること、および
前記特殊化ｂｉｔｂｌｔ関数が前記メモリ内にキャッシュされていた場合、前記メモリ内の前記特殊化ｂｉｔｂｌｔ関数を実行すること
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記生成し実行することは、
前記特殊化ｂｉｔｂｌｔ関数を表す中間言語コードを生成すること、
前記中間言語コードをマシン特有の言語のコードへと翻訳すること、および
前記マシン特有の言語のコードを最適化すること
を備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記最適化することは、前記マシン特有の言語のコードを増進的に最適化することを備えることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記最適化することは、前記マシン特有の言語のコードをランタイム中に最適化することを備えることを特徴とする請求項１０に記載の方法。
【請求項１３】
コンピュータ・システム上でコンピュータ・プロセスを実行するためのコンピュータ・プログラムをエンコードするコンピュータ・プログラム製品であって、前記コンピュータ・プロセスは、
ビット・ブロック転送（bitblt）を指定する１つまたは複数のグラフィックス・パラメータを受け取ること、および
中間言語コードを備える特殊化ｂｉｔｂｌｔ関数を動的に生成し、前記ｂｉｔｂｌｔを実行すること
を備えることを特徴とするコンピュータ・プログラム製品。
【請求項１４】
前記生成し実行することは、コード・ブロックの選択を、複数のｂｉｔｂｌｔ操作に対応する複数のコード・ブロックを備える一般化ｂｉｔｂｌｔ関数から行うことを備えることを特徴とする請求項１３に記載のコンピュータ・プログラム製品。
【請求項１５】
前記コンピュータ・プロセスは、前記中間言語コードをマシン特有の言語のコードへと翻訳することをさらに備えることを特徴とする請求項１３に記載のコンピュータ・プログラム製品。
【請求項１６】
前記コンピュータ・プロセスは、前記マシン特有の言語のコードのキャッシュを行うことをさらに備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１７】
前記コンピュータ・プロセスは、前記マシン特有の言語のコードを最適化することをさらに備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１８】
前記最適化することは、前記マシン特有の言語のコードを増進的に最適化することを備えることを特徴とする請求項１７に記載のコンピュータ・プログラム製品。
【請求項１９】
前記コンピュータ・プロセスは、
ｂｉｔｂｌｔシグニチャを前記１つまたは複数のグラフィックス・パラメータから生成すること、および
前記一般化ｂｉｔｂｌｔ関数内の前記コード・ブロックを、前記ｂｉｔｂｌｔシグニチャに基づいて識別すること
をさらに備えることを特徴とする請求項１４に記載のコンピュータ・プログラム製品。
【請求項２０】
前記コンピュータ・プロセスは、
前記特殊化ｂｉｔｂｌｔ関数がキャッシュされているかどうかを決定すること、および
キャッシュされている前記特殊化ｂｉｔｂｌｔ関数を実行すること
をさらに備えることを特徴とする請求項１３に記載のコンピュータ・プログラム製品。
【請求項２１】
指定された特殊化ビット・ブロック転送（bitblt）を実行する特殊化ｂｉｔｂｌｔ関数を生成する特殊化ｂｉｔｂｌｔ関数生成部であって、前記特殊化ｂｉｔｂｌｔ関数が前記ｂｉｔｂｌｔを指定する１つまたは複数のグラフィックス・パラメータに対応する中間言語コードを備える特殊化ｂｉｔｂｌｔ関数生成部と、
前記特殊化ｂｉｔｂｌｔ関数をマシン特有の言語のコードへと翻訳する翻訳部と
を備えることを特徴とするシステム。
【請求項２２】
ｂｉｔｂｌｔシグニチャを前記１つまたは複数のグラフィックス・パラメータに基づいて生成するｂｉｔｂｌｔシグニチャ生成部をさらに備え、前記ｂｉｔｂｌｔシグニチャによって前記指定されたｂｉｔｂｌｔが一意に識別されることを特徴とする請求項２１に記載のシステム。
【請求項２３】
前記マシン特有の言語のコードをランタイム中に最適化する最適化モジュールをさらに備えることを特徴とする請求項２１に記載のシステム。
【請求項２４】
マシン特有の言語のコードになっている１つまたは複数の特殊化ｂｉｔｂｌｔ関数を収容するキャッシュをさらに備えることを特徴とする請求項２１に記載のシステム。
【請求項２５】
指定されたｂｉｔｂｌｔに対応する一般化ｂｉｔｂｌｔ関数内のコード・ブロックを識別するためのデータ構造をさらに備えることを特徴とする請求項２１に記載のシステム。
【請求項２６】
指定されたｂｉｔｂｌｔ関数を実行するための特殊化ビット・ブロック転送（bitblt)関数の作成を容易にするための１つまたは複数のデータ構造が格納してあるコンピュータ可読媒体であって、前記１つまたは複数のデータ構造は、
一般化ｂｉｔｂｌｔ関数のベース・アドレスから前記一般化ｂｉｔｂｌｔ関数内のコード・ブロックまでのメモリ・オフセットを表すデータを収容するオフセット・フィールドと、
前記コード・ブロックが前記特殊化ｂｉｔｂｌｔ関数内で必要であるかどうかを指示する条件値を有する条件フィールドと、
前記コード・ブロックのサイズを表すサイズ値を有するサイズ・フィールドと
を備えることを特徴とするコンピュータ可読媒体。
【請求項２７】
前記１つまたは複数のデータ構造は、前記特殊化ｂｉｔｂｌｔ関数内で必要になるコード・ブロックを識別するための、前記一般化ｂｉｔｂｌｔ関数を調べて行く間にスキップする値であって、前記一般化ｂｉｔｂｌｔ関数内のメモリの量を指示する値、を有するスキップ・フィールドをさらに備えることを特徴とする請求項２６に記載のコンピュータ可読媒体。
【請求項２８】
前記１つまたは複数のデータ構造は、前記一般化ｂｉｔｂｌｔ関数内の前記コード・ブロックに関連付けられている色変換コードを有する変換フィールドをさらに備えることを特徴とする請求項２６に記載のコンピュータ可読媒体。
【請求項２９】
前記１つまたは複数のデータ構造は、前記一般化ｂｉｔｂｌｔ関数内の前記コード・ブロックに関連付けられているラスタ・オペレーション３（ＲＯＰ３sub-optimal）コードを有するＲＯＰ３変換フィールドをさらに備えることを特徴とする請求項２６に記載のコンピュータ可読媒体。
【請求項３０】
転送元メモリおよび転送先メモリと、
データの転送を、前記転送元メモリから前記転送先メモリへ、１つまたは複数のグラフィックス・パラメータの指定する要求されたビット・ブロック転送（bitblt）操作に従って行う特殊化ｂｉｔｂｌｔ関数を動的に作成する手段と
を備えることを特徴とするシステム。
【請求項３１】
特殊化ｂｉｔｂｌｔ関数を動的に作成する前記手段は、前記要求されたｂｉｔｂｌｔ操作を一意に識別するｂｉｔｂｌｔシグニチャを生成するｂｉｔｂｌｔシグニチャ生成部を備えることを特徴とする請求項３０に記載のシステム。
【請求項３２】
特殊化ｂｉｔｂｌｔ関数を動的に作成する前記手段は、コード・ブロックを複数のコード・ブロックから選択する特殊化ｂｉｔｂｌｔ関数生成部をさらに含み、前記複数のコード・ブロックのそれぞれは、特定のｂｉｔｂｌｔ操作に対応し、前記選択したコード・ブロックは前記要求されたｂｉｔｂｌｔ操作に対応することを特徴とする請求項３１に記載のシステム。
【請求項３３】
前記特殊化ｂｉｔｂｌｔ関数生成部は、前記選択したコード・ブロックを前記複数のコード・ブロックから前記特殊化ｂｉｔｂｌｔ関数へとコピーすることを特徴とする請求項３２に記載のシステム。
【請求項３４】
特殊化ｂｉｔｂｌｔ関数を動的に作成する前記手段は、前記特殊化ｂｉｔｂｌｔ関数を中間言語コードからマシン特有の言語のコードへと翻訳する翻訳部を備えることを特徴とする請求項３０に記載のシステム。
【請求項３５】
特殊化ｂｉｔｂｌｔ関数を動的に作成する前記手段は、前記マシン特有の言語のコードを最適化する最適化モジュールをさらに備えることを特徴とする請求項３４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにおけるデータ転送に関し、より詳細には、ビット・ブロック転送関数のためのクロス・プラットフォームのランタイム・コード生成に関する。
【背景技術】
【０００２】
コンピューティングの一部の分野では、しばしば、複数ビットからなる矩形ブロック（rectangular block）をあるメモリ・ロケーションから別のメモリ・ロケーションへと転送することが必要である。たとえば、ビデオ・ゲームでは、画像または面（surface）を表す複数ビットのブロックを、システム・メモリからビデオ・メモリへと、ユーザに表示するために転送することがある。そのようなデータ転送は、普通、ビット・ブロック転送（bitblt, bit block transfer）と呼ばれる。ビデオ・ゲームでは、グラフィックスの提示が滑らかでユーザにとって目立つ遅延がないように、ｂｉｔｂｌｔは非常に高速であるべきである。高速化（accelerated）グラフィックス・カードなどの高度なグラフィックス・ハードウェアのないコンピュータでは、ｂｉｔｂｌｔは、しばしば、グラフィックス・ハードウェアをエミュレートするエミュレーション・ソフトウェアなどのソフトウェアによって実行される。
【０００３】
ｂｉｔｂｌｔ機能は、しばしば、データ・ブロック転送だけでなく、データに対して行われる操作にも関連する。たとえば、データ・ブロックのあるメモリ・ロケーションから別のメモリ・ロケーションへの転送中に、そのデータ・ブロックに透過（transparency）操作が適用されることがある。ラスタ・オペレーション（ROP, raster operation）、ストレッチ（stretching）、シュリンク（shrinking）、アルファ・ブレンド、色変換など、他の操作も、状況に応じて行われることがある。ｂｉｔｂｌｔを行う間には、複数の操作の組み合わせが必要となる可能性もある。
【０００４】
ｂｉｔｂｌｔソフトウェアの開発者は、通常、必要となるｂｉｔｂｌｔ操作をすべて扱うコードを開発する。あいにく、ｂｉｔｂｌｔソフトウェア機能を開発する従来の手法は、コード・サイズとコードのパフォーマンスの間の困難なトレードオフをはらんでいる。一般的な手法として、（１）すべての状況でソフトウェアによるｂｉｔｂｌｔの最適パフォーマンスを達成するために、多くの（たとえば、数百の）関数を、ｂｉｔｂｌｔ操作ごとに１つずつ書くこと、または（２）その関数内部で正しいｂｉｔｂｌｔ操作へと分岐することによってどのようなｂｉｔｂｌｔも実行できる単一の（または少数の）ｂｉｔｂｌｔ関数を書くこと、の２つがある。
【０００５】
【特許文献１】米国特許第６，０２６，２３９号明細書
【特許文献２】米国特許第６，２４７，１７４号明細書
【特許文献３】米国特許第６，２５６，７５２号明細書
【特許文献４】米国特許第６，２７９，０３０号明細書
【特許文献５】米国特許第６，３０５，０１２号明細書
【特許文献６】米国特許第６，３２４，６８８号明細書
【特許文献７】米国特許第６，３３０，７１１号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述した第１の手法では、ｂｉｔｂｌｔのパフォーマンスは速くなるが、コード・サイズは極端に大きくなる。また、上述した第２の手法では、コード・サイズは妥当であるが、ｂｉｔｂｌｔのパフォーマンスが、正しいｂｉｔｂｌｔ操作への分岐に関係するオーバーヘッドのために、ずっと遅くなる。
【０００７】
さらに、従来のｂｉｔｂｌｔ関数では、ランタイム時の最適化が可能ではない。従来のｂｉｔｂｌｔ関数は、通常、特定のターゲット・プラットフォーム（たとえば、マイクロ・プロセッサ）に対する機械コード（machine code）のコーディングおよびコンパイルが、システム内での展開の前に行われる。従来のｂｉｔｂｌｔ関数は、全体としては、スピード（またはサイズ）に関してターゲット・プラットフォームに対する最適化をコンパイル時に行うことができるが、コンパイルが済んでしまうと、従来のｂｉｔｂｌｔ関数内部の特定の操作（たとえば、ＲＯＰ、透過など）を、展開後にスピードに関してそれ以上最適化することはできない。単一のｂｉｔｂｌｔ関数を使用し、特定のｂｉｔｂｌｔ操作に分岐させているときには、この分岐のために、特定の操作に対するパフォーマンスは最適に達しないものとなる。
【０００８】
したがって、本願は、上述した課題を、特殊化（specialized）ビット・ブロック転送（bitblt, bit block transfer）関数をランタイム時に生成することによって解決することを目的とし、そのための実装形態の説明を行う。
【課題を解決するための手段】
【０００９】
特殊化ｂｉｔｂｌｔ関数は１つまたは複数のｂｉｔｂｌｔ操作を実行し、この特殊化ｂｉｔｂｌｔ関数はｂｉｔｂｌｔ操作の上位セット（superset）から生成される。この特殊化ｂｉｔｂｌｔ関数は、中間言語コードから構成されており、これが、ランタイム時に、プラットフォーム特有の機械語コードへと翻訳される。特殊化ｂｉｔｂｌｔ関数は、ランタイム中に、スピードに関して増進的に最適化することができる。
【発明を実施するための最良の形態】
【００１０】
例示的なビット・ブロック転送システム
図１に、あるロケーションから別のロケーションへの１ブロックのデータの転送を、１つまたは複数のグラフィックス操作をそのブロックのデータに対して実行しながら行う、例示的なビット・ブロック転送（bitblt, bit block transfer）システム１００を示している。ｂｉｔｂｌｔシステム１００は、図３に示す汎用コンピュータなどの汎用コンピュータ、または、ゲーム・システムなどの専用コンピュータ、に実装することができる。
【００１１】
ｂｉｔｂｌｔシステム１００は、指定されたｂｉｔｂｌｔ操作を実行するｂｉｔｂｌｔモジュール１０２を含む。ｂｉｔｂｌｔモジュール１０２は、ハードウェア、ファームウェア、またはこうした技術の組み合わせで実装されてもよいが、通常、ソフトウェア・モジュールとして実装される。
【００１２】
一般に、ｂｉｔｂｌｔモジュール１０２は、特定のｂｉｔｂｌｔ操作を指定するグラフィックス・パラメータ１０４を受け取り、データ・ブロックを転送元１０６から転送先１０８へと転送する。グラフィックス・パラメータ１０４は、通常、ｂｉｔｂｌｔモジュール１０２への関数呼び出しの形で提供される。グラフィックス・パラメータ１０４には、そのｂｉｔｂｌｔ操作で転送することになるデータ・ブロックに対して実行すべき操作を指定する情報が含まれる。また、グラフィックス・パラメータ１０４には、転送元１０６および転送先１０８に対する識別子も含まれる。
【００１３】
転送元１０６は、データ・ブロックをそこから転送すべきメモリ・ロケーションであり、転送先１０８は、データ・ブロックをそこへと転送すべきメモリ・ロケーションである。転送元１０６および転送先１０８は、システム・メモリまたはビデオ・メモリを含むが、これに限定されない、任意のタイプのメモリとすることもできる。転送元１０６および転送先１０８は、グラフィックス・パラメータ１０４内で、ポインタで指定することができる。また、グラフィックス・パラメータ１０４により、パタン・メモリ（図示せず）やマスク・メモリ（図示せず）など、ｂｉｔｂｌｔ操作中に使用する他のメモリ・ロケーションを指定することもできる。
【００１４】
始めに、エグゼクティブ１１０が、グラフィックス・パラメータ１０４を受け取る。エグゼクティブ１１０は、ｂｉｔｂｌｔモジュール１０２内部の論理コンポーネントであり、これにより、グラフィックス・パラメータ１０４を使用して、指定されたｂｉｔｂｌｔ操作をどのように実行すべきかが決定される。エグゼクティブ１１０は、特殊化ｂｉｔｂｌｔ関数を生成させることができ、この関数は、次いで実行されて、指定されたｂｉｔｂｌｔ操作が実行される。また、エグゼクティブ１１０は、生成したｂｉｔｂｌｔ関数をキャッシュ１１２に格納し、この特殊化した生成済みｂｉｔｂｌｔ関数のラベル付けを、その特殊化した生成済みｂｉｔｂｌｔ関数を識別する一意のｂｉｔｂｌｔシグニチャ（signature）によって行うことができる。この特殊化ｂｉｔｂｌｔ関数が将来必要となったときには、再度生成するのではなく、キャッシュから取り出される。
【００１５】
したがって、エグゼクティブ１１０は、グラフィックス・パラメータを受け取ると、ｂｉｔｂｌｔシグニチャ生成部１１４を呼び出す。ｂｉｔｂｌｔシグニチャ生成部１１４への呼び出しは、グラフィックス・パラメータ１０４を含んでいる。グラフィックス・パラメータ１０４に基づいて、ｂｉｔｂｌｔシグニチャ生成部１１４は、要求されたｂｉｔｂｌｔ操作を一意に識別するｂｉｔｂｌｔシグニチャを作成する。ｂｉｔｂｌｔシグニチャ生成部１１４の実行する操作の例示的な実装形態を、図２に示しており、下でさらに論じる。
【００１６】
エグゼクティブ１１０は、ｂｉｔｂｌｔシグニチャ生成部１１４から生成したｂｉｔｂｌｔシグニチャを使用して、特殊化ｂｉｔｂｌｔ関数がすでにキャッシュ１１２内に存在するかどうか、または特殊化ｂｉｔｂｌｔ関数を生成する必要があるかどうかを決定する。エグゼクティブ１１０は、ｂｉｔｂｌｔシグニチャ生成部１１４の生成したｂｉｔｂｌｔシグニチャに等しいｂｉｔｂｌｔシグニチャを有する特殊化ｂｉｔｂｌｔ関数があるかどうか、キャッシュ１１２を探索する。指定されたｂｉｔｂｌｔ操作のｂｉｔｂｌｔシグニチャを有する特殊化ｂｉｔｂｌｔ関数がキャッシュ１１２内に見つかった場合、エグゼクティブは、その特殊化ｂｉｔｂｌｔ関数を実行する。
【００１７】
生成したｂｉｔｂｌｔシグニチャを有するｂｉｔｂｌｔ関数がキャッシュ１１２内に見つからなかった場合、エグゼクティブ１１０は、ｂｉｔｂｌｔ関数生成部１１６を呼んで、指定されたｂｉｔｂｌｔ操作を実行するための特殊化ｂｉｔｂｌｔ関数を生成する。ｂｉｔｂｌｔ関数生成部１１６は、特殊化ｂｉｔｂｌｔ関数の生成を、ｂｉｔｂｌｔコード・ブロックの上位セット１１８から１つまたは複数のコード・ブロック選択することによって行う。コード・ブロックの上位セット１１８内の各コード・ブロックは、実行させると、あるｂｉｔｂｌｔ操作またはあるｂｉｔｂｌｔ操作の一部を実行する。ｂｉｔｂｌｔ関数生成部１１６は、コード・ブロックの上位セット１１８からコード・ブロックまたはコード・ブロック群を選択し、選択したコード・ブロックまたはコード・ブロック群を、ある特殊化ｂｉｔｂｌｔ関数へとコピーする。
【００１８】
ｂｉｔｂｌｔ関数生成部１１６は、１つまたは複数のデータ構造１２０を使用して、ｂｉｔｂｌｔコード・ブロックの上位セット１１８からコード・ブロックを選択する。データ構造１２０は、ｂｉｔｂｌｔコード・ブロックの上位セット１１８についての情報、たとえば、オフセット、コード・ブロック・サイズ、コード・ブロックをｂｉｔｂｌｔコード・ブロックの上位セット１１８から特殊化ｂｉｔｂｌｔ関数へとコピーすべきかどうかを指定する条件情報など、を提供する。特殊化ｂｉｔｂｌｔ関数のためのコード・ブロックを選択する際に使用するための例示的なデータ構造１２０を、下でさらに示し説明する。
【００１９】
ｂｉｔｂｌｔコード・ブロックの上位セット１１８の一実装形態では、そのコード・ブロックは、中間言語（IL, intermediate language）で表現されている。ＩＬという用語は、ターゲット言語を指し、この言語に、ソース言語内の、単一の文（statement）またはソース・プログラムのすべてまたは部分を、これをさらに翻訳または解釈実行（interpret）する前に、翻訳する。ＩＬコードは、一般に、プラットフォーム独立、またはマイクロ・プロセッサ独立である。したがって、ＩＬコードの移植は、そのＩＬコードを、特定のプラットフォーム上で実行可能なマシン特有のコードへと翻訳（または解釈実行）するための翻訳プログラム（translator）（またはインタープリタ）を有する任意のプラットフォームへも可能である。この実装形態では、ｂｉｔｂｌｔシグニチャ生成部１１６により、特殊化ｂｉｔｂｌｔ関数の作成が、ＩＬコードで、ｂｉｔｂｌｔコード・ブロックの上位セット１１８内のＩＬコード・ブロックに基づいて、行われる。
【００２０】
ｂｉｔｂｌｔ関数翻訳部１２２により、特殊化ｂｉｔｂｌｔ関数のＩＬコードがマシン特有（またはプラットフォーム特有）のコードへと翻訳される。ｂｉｔｂｌｔ関数翻訳部（translator）の特定の実装形態は、マイクロソフト・コーポレーション（MICROSOFT CORPORATION）製の．ＮＥＴプラットフォームなどの仮想マシンを含む。
【００２１】
特殊化ｂｉｔｂｌｔ関数がマシン特有のコードへと変換された後、マシン特有の特殊化ｂｉｔｂｌｔ関数は、キャッシュ１１２内へと格納される。キャッシュ１１２のある実装形態では、生成したｂｉｔｂｌｔに、合計のｂｉｔｂｌｔコード・サイズの最小化のため、最終的に確定したサイズ（fixed size）の関数のキャッシュを使用する。
【００２２】
特殊化ｂｉｔｂｌｔ関数のｂｉｔｂｌｔシグニチャを用いて、特殊化ｂｉｔｂｌｔ関数のキャッシュ１１２への格納、および、そこからの取り出しが行われる。将来再び、対応するｂｉｔｂｌｔ操作が要求された場合に、このキャッシュ１１２から、特殊化ｂｉｔｂｌｔ関数の実行を行うことができる。
【００２３】
さらに、特殊化ｂｉｔｂｌｔ関数のマシン特有の言語のコードへの翻訳後、最適化モジュール１２４により、特殊化ｂｉｔｂｌｔ関数を最適化することができる。最適化は、特殊化ｂｉｔｂｌｔ関数すべてに対して行っても、指定した回数より多くアクセスされる特殊化ｂｉｔｂｌｔ関数だけに対して行ってもよい。最適化は、特殊化ｂｉｔｂｌｔ関数のパフォーマンスを改善するために、不必要なコード行を取り除くこと、コード行を配列し直すこと、または他の方法を含むことができる。
【００２４】
ｂｉｔｂｌｔコード・ブロックの上位セット１１８のある実装形態では、ｂｉｔｂｌｔコード・ブロックは、一般化（generalized）ｂｉｔｂｌｔ関数に含まれる。以下に示すのは、中間言語コードで表現された例示的な一般化ｂｉｔｂｌｔ関数のごく一部である。説明を簡単にするために、中間言語コードのうち１４行だけを示している。一般化ｂｉｔｂｌｔ関数の実際の実装形態は、ずっと多くの行のＩＬコード（たとえば、数千行）を含む。
【００２５】
【表１】
2006018830.tif 000003
【００２６】
一般化ｂｉｔｂｌｔ関数内のコードの各行のオフセットは、一般化ｂｉｔｂｌｔ関数内の、コードの対応する行のアドレス・オフセットを（バイトで）与える。
【００２７】
一般化ｂｉｔｂｌｔ関数の設計は、ストレッチ（stretching）、シュリンク（shrinking）、透過、アルファ・ブレンディング、色変換、２５６通りの３つ組（ternary）ラスタオペレーション（ＲＯＰ３）のどれか、２つの異なるＲＯＰ３を選択するためのマスクの使用、またはこれらの操作の組み合わせを含めるが、これらに限定されない任意のｂｉｔｂｌｔ操作も実行するようにデザインすることができる。特定のｂｉｔｂｌｔ操作では、こうした操作の一部は実行されないことになる（たとえば、ストレッチとシュリンクは互いに排他的であり、色変換は異なる２つのフォーマットの間だけのものであり、異なるフォーマットすべての間のものではない、など）。特定のｂｉｔｂｌｔ操作を実行するのに必要なコードだけを含む特殊化ｂｉｔｂｌｔ関数が生成される。
【００２８】
特定の一実装形態では、特殊化ｂｉｔｂｌｔ関数生成部１１６は、始めに、１組のＩＬレジスタをｂｉｔｂｌｔシグニチャに基づいてロードする。この実装形態では、ＩＬレジスタ・データ構造中のｂレジスタ（ｂ０〜ｂ３１）に、ｂｉｔｂｌｔシグニチャからのデータをロードする。ｂレジスタが、どのようにロードされる可能性があるかの１つの例を下に示す。  
ｂ０：  Ｂｌｔシグニチャ  SolidFill  
ｂ１：  Ｂｌｔシグニチャ  ScanXPositive  
ｂ２：  Ｂｌｔシグニチャ  ScanYPositive  
ｂ３：  Ｂｌｔシグニチャ  StretchX  
ｂ４：  Ｂｌｔシグニチャ  StretchY  
ｂ５：  Ｂｌｔシグニチャ  ShrinkX  
ｂ６：  Ｂｌｔシグニチャ  ShrinkY  
ｂ７：  Ｂｌｔシグニチャ  SourceConstantAlpha  
ｂ８：  Ｂｌｔシグニチャ  PerPixelAlpha  
ｂ９：  Ｂｌｔシグニチャ  SrcColorKey  
ｂ１０：  Ｂｌｔシグニチャ  DstColorKey  
ｂ１１：  転送先がビデオ・メモリ内にある場合に真  
ｂ１２：  転送元がビデオ・メモリ内にある場合に真  
ｂ１３：  パタンがビデオ・メモリ内にある場合に真  
ｂ１４：  マスクがビデオ・メモリ内にある場合に真  
ｂ１５：  Ｂｌｔシグニチャ  MirrorX  
ｂ１６：  Ｂｌｔシグニチャ  MirrorY  
ｂ１７：  Ｂｌｔシグニチャ  Lookup  
ｂ１８：  Ｂｌｔシグニチャ  Convert  
ｂ１９：  ｂ３、ｂ４、ｂ５、またはｂ６のいずれかが真の場合に真  
ｂ２０：  転送先をＲＯＰ３の一部として使用する場合に真  
ｂ２１：  転送元をＲＯＰ３の一部として使用する場合に真  
ｂ２２：  パタンをＲＯＰ３の一部として使用する場合に真  
ｂ２３：  マスクをｂｉｔｂｌｔの一部として使用する場合に真  
ｂ２４：  ＲＯＰ３をｂｉｔｂｌｔの一部として使用する場合に真  
ｂ２５：  転送元が２４ｂｐｐである場合に真  
ｂ２６：  転送先が８ｂｐｐである場合に真  
ｂ２７：  転送先が１６ｂｐｐである場合に真  
ｂ２８：  転送先が２４ｂｐｐである場合に真
ｂ２９：  転送先が３２ｂｐｐである場合に真
【００２９】
例示的なｂｉｔｂｌｔシグニチャデータを、下でさらに詳細に論じる。
ｂレジスタへのｂｉｔｂｌｔシグニチャデータのロードの後、特殊化ｂｉｔｂｌｔ関数生成部１１６では、一般化ｂｉｔｂｌｔ関数内のコード・ブロックを調べて行き、どのコード・ブロックを特殊化ｂｉｔｂｌｔ関数へとコピーすべきかの決定を、ｂレジスタ内の値およびデータ構造１２０内の値に基づいて行う。不必要な操作のコードは、一般化ｂｉｔｂｌｔ関数から特殊化ｂｉｔｂｌｔ関数へとコピーする必要はない。
【００３０】
データ構造１２０のある実装形態は、どのコード・ブロックがその特殊化ｂｉｔｂｌｔ関数へとコピーされることになるかどうかを決定するのに特殊化ｂｉｔｂｌｔ関数生成部１１６が使用する、３つのテーブル、すなわち、不変テーブル（invariant table）、ＲＯＰ３テーブル（ROP3 table）、および変換テーブル（convert table）を含んでいる。不変テーブルは、使用される最も主要なテーブルであり、特定のｂｉｔｂｌｔ操作を実行するためにどの特殊化ｂｉｔｂｌｔ関数の命令が必要になるかを記述する。ＲＯＰ３テーブルは、２５６通りのＲＯＰ３操作のそれぞれに対して、どのような命令が必要になるかを指示する。変換テーブルは、どれか２つの色フォーマットの間の変換にどの命令が必要になるかを指示する。不変テーブル、ＲＯＰ３テーブル、および変換テーブルの例示的な定義を、以下にＣ言語の構造体によって示し、説明する。
【００３１】
ＩｎｖａｒｉａｎｔＴａｂｌｅ：
【００３２】
【表２】
2006018830.tif 000004
【００３３】
上の例示的な不変テーブルを参照すると、Ｏｆｆｓｅｔフィールドは、一般化ｂｉｔｂｌｔ関数の先頭から現在のコード・ブロックの先頭までのＤＷＯＲＤ数を表す。コード・ブロックは、ＩｎｖａｒｉａｎｔＴａｂｌｅ内のエントリが参照する、連続する中間言語命令である。
【００３４】
Ｃｏｎｄｉｔｉｏｎフィールドは、異なる３つの意味を担うことができる。Ｃｏｎｄｉｔｉｏｎが０である場合、このコード・ブロックは条件（conditional）ブロックではなく、特殊化ｂｉｔｂｌｔ関数へとコピーされることになる。Ｃｏｎｄｉｔｉｏｎが０より大きい場合であって、レジスタｂ［Condition−１］が真である場合は、そのブロックはコピーされることになり、レジスタｂ［Ｃｏｎｄｉｔｉｏｎ−１］が偽である場合は、そのブロックはスキップされることになる。Ｃｏｎｄｉｔｉｏｎが０より小さい場合であって、レジスタｂ［Ｃｏｎｄｉｔｉｏｎ−１］が真である場合は、そのコード・ブロックはスキップされることになり、レジスタｂ［Ｃｏｎｄｉｔｉｏｎ−１］が偽である場合は、そのブロックは特殊化ｂｉｔｂｌｔ関数へとコピーされることになる。
【００３５】
ＩｎｖａｒｉａｎｔＴａｂｌｅのＳｉｚｅフィールドは、特殊化ｂｉｔｂｌｔ関数へとコピーするコード・ブロックの（ＤＷＯＲＤでの）サイズを表す。Ｓｋｉｐフィールドは、次のコード・ブロックに達するのにスキップするＤＷＯＲＤ数を表す。
【００３６】
Ｒｏｐ３Ｔａｂｌｅ：
【００３７】
【表３】
2006018830.tif 000005
【００３８】
Ｏｆｆｓｅｔフィールドは、一般化ｂｉｔｂｌｔ関数の先頭から、特定のＲＯＰ３コードを扱うコード・ブロックの先頭までのＤＷＯＲＤ数を表す。Ｓｉｚｅフィールドは、特殊化ｂｉｔｂｌｔ関数へとコピーするコード・ブロックのサイズを（ＤＷＯＲＤで）表す。Ｒｏｐ３フィールドは、このテーブル参照のこのエントリが参照するコード・ブロックに関連付けられているＲＯＰ３コードである。
【００３９】
ＣｏｎｖｅｒｔＴａｂｌｅ：
【００４０】
【表４】
2006018830.tif 000006
【００４１】
Ｏｆｆｓｅｔフィールドは、一般化ｂｉｔｂｌｔ関数の先頭から、特定の色変換プロセスを扱うブロックの先頭までのＤＷＯＲＤ数を表す。Ｓｉｚｅフィールドは、特殊化ｂｉｔｂｌｔ関数へとコピーするコード・ブロックのサイズを（ＤＷＯＲＤで）表す。Ｃｏｎｖｅｒｔフィールドは、このテーブルのこのエントリが参照するコード・ブロックに関連付けられている色変換コードである。
【００４２】
３つのテーブルを使用するやり方を次に説明する。上で論じたように、ｂレジスタ（ｂ０〜ｂ３１）は、特定のｂｉｔｂｌｔ操作に対応するｂｉｔｂｌｔシグニチャに基づいて初期化する。次いで、ｂレジスタの状態を使用して、一般化ｂｉｔｂｌｔ関数および３つのテーブルから、特殊化ｂｉｔｂｌｔ関数を構築する。
【００４３】
表に関して次の規則を使用して、特殊化ｂｉｔｂｌｔ関数を生成する。  
１．Ｃｏｎｄｉｔｉｏｎフィールドが０である場合、Ｓｉｚｅ個のＤＷＯＲＤを特殊化ｂｉｔｂｌｔ関数へとコピーし、Ｓｋｉｐ個のＤＷＯＲＤを一般化ｂｉｔｂｌｔ関数内でスキップする。  
２．Ｃｏｎｄｉｔｉｏｎ変数が正であり、関連するｂレジスタが真である場合、その「if」命令をスキップする。ｂレジスタが偽である場合、Ｓｋｉｐ個のＤＷＯＲＤを一般化ｂｉｔｂｌｔ関数内でスキップする。  
３．Ｃｏｎｄｉｔｉｏｎ変数が負であり、関連するｂレジスタが真である場合、Ｓｋｉｐ個のＤＷＯＲＤを一般化ｂｉｔｂｌｔ関数内でスキップする。ｂレジスタが偽である場合、その「ｅｌｓｅ」命令をスキップする。
【００４４】
テーブルをどのように使用できるかを示すために、例示的な不変テーブルを下に示し、例示的な想定状況（scenario）を与える。次の例は、上の一般化ｂｉｔｂｌｔ関数の例示的な部分に基づいている。例示を簡単にするために、例示的なＩＬコードを下に示す。
【００４５】
【表５】
2006018830.tif 000007
【００４６】
【表６】
2006018830.tif 000008
【００４７】
上の不変テーブルで、オフセットの縦列（column）は、一般化ｂｉｔｂｌｔ関数内のオフセットを含んでいる。条件フィールドが０のときは、サイズ・フィールド内に示す量のコードを、オフセット・フィールドに示すオフセットから始めて、特殊化ｂｉｔｂｌｔ関数へとコピーする。上の例示的なＩｎｖａｒｉａｎｔＴａｂｌｅおよび上の例示的な一般化ｂｉｔｂｌｔ関数が与えられており、ｂ０が真、ｂ１が偽、ｂ２が真であると仮定すると、これからできる特殊化ｂｉｔｂｌｔ関数は
【００４８】
【表７】
2006018830.tif 000009
【００４９】
となる。
【００５０】
別の例として、ｂ０が偽、ｂ１が真、ｂ２が真の場合に、上のＩｎｖａｒｉａｎｔＴａｂｌｅおよび一般化ｂｉｔｂｌｔ関数を使用すると、これからできる特殊化ｂｉｔｂｌｔ関数は
【００５１】
【表８】
2006018830.tif 000010
【００５２】
となる。
【００５３】
テーブルの生成は、ランタイム時に、一般化ｂｉｔｂｌｔ関数を、「if ＜ｂレジスタ＞」という命令、およびその後の自由選択の「ｅｌｓｅ」命令、およびその後の必須の「ｅｎｄｉｆ」命令を検索しながら構文解析する、ことによって行う。「ｉｆ  ｂ１８」という命令は、ＣｏｎｖｅｒｔＴａｂｌｅを使用すべきであることを示しており、「ｉｆ  ｂ２４」という命令は、Ｒｏｐ３Ｔａｂｌｅを使用すべきであることを示している。
【００５４】
特定の実装形態では、テーブルを構築するために次の規則に従う。  
１．「ｉｆ  ｂ＜Ｎ＞」という命令があると、正のＣｏｎｄｔｉｏｎの値（＜Ｎ＞＋１）を有するエントリを作り、Ｓｉｚｅは無視し、Ｓｋｉｐは、その「ｉｆ」命令に対応する「ｅｌｓｅ」または「ｅｌｓｅｉｆ」命令までのＤＷＯＲＤ数に設定する。  
２．「ｅｌｓｅ」命令があると、負のＣｏｎｄｔｉｏｎの値−（＜Ｎ＞＋１）を有するエントリを作り、Ｓｉｚｅは無視し、Ｓｋｉｐは、対になる「ｅｎｄｉｆ」命令までのＤＷＯＲＤ数に設定する。  
３．「ｅｎｄｉｆ」命令があると、Ｃｏｎｄｔｉｏｎ数が０で、Ｓｉｚｅが０で、Ｓｋｉｐが１のエントリを作る。  
４．「ｉｆ」、「ｅｌｓｅ」または「ｅｎｄｉｆ」を含まない命令のブロックは、そのテーブル内の１つのエントリにまとめ、Ｃｏｎｄｉｔｉｏｎの値は０とし、ＳｉｚｅおよびＳｋｉｐ変数は命令の現在のブロック内のＤＷＯＲＤ数とする。
【００５５】
例示的なｂｉｔｂｌｔシグニチャおよびｂｉｔｂｌｔ生成プロセス
ｂｉｔｂｌｔシグニチャ生成部の特定の実装形態では、（ＢｌｔＳｉｇｎａｔｕｒｅと呼ぶ）Ｃの構造体は、３つの主要な部分で編成される。すなわち、指定されたｂｉｔｂｌｔ操作についての情報を収容するビットフィールドとして使用する１つの３２ビット値と、そのｂｉｔｂｌｔが操作するビット・ブロックまたはブロック群のフォーマットについての付加的な情報を提供する１つの１６ビット値と、指定されたｂｉｔｂｌｔ操作のために使用する１つまたは複数のＲＯＰコードを含む別の１６ビット値とである。この例示的な実装形態では、ビット・ブロックをサーフェス（surface）と呼ぶが、これは１ブロックのピクセル・データを指す。次の図に、ＢｌｔＳｉｇｎａｔｕｒｅ構造体のレイアウトおよび各ビットの意味を示す。
【００５６】
【表９】
2006018830.tif 000011
【００５７】
以上のＢｌｔＳｉｇｎａｔｕｒｅ構造体は、Ｃプログラミング言語または他のどのような適切な言語でも実装することができる。ＢｌｔＳｉｇｎａｔｕｒｅ構造体内のフィールドのそれぞれを下で説明する。  
ＤｓｔＦｏｒｍａｔおよびＳｒｃＦｏｒｍａｔ
０  これは無効なフォーマット番号である  
１  ピクセル・フォーマットはＡＲＧＢ８８８８である  
２  ピクセル・フォーマットはＡＢＧＲ８８８８である  
３  ピクセル・フォーマットはＲＧＢ８８８である  
４  ピクセル・フォーマットはＢＧＲ８８８である  
５  ピクセル・フォーマットはＲＧＢ５６５である  
６  ピクセル・フォーマットはＲＧＢ５５５である  
７  カラー・パレットをもつサーフェス  
８  １ｂｐｐ（ビット／ピクセル）のサーフェス  
９  ビットマスクを使用する何らかの不明なフォーマット・タイプ
【００５８】
ＢｌｔＭｏｄｅおよびＵｎｕｓｅｄフィールドは、無視することができる。  
ＰａｔｔｅｒｎＴｙｐｅ：
０  単色（ｓｏｌｉｄ  ｃｏｌｏｒ）  
１  ビットマップ・パタン  
【００５９】
ＳｃａｎＸＰｏｓｉｔｉｖｅ：
０  ピクセルを−Ｘ方向に処理する  
１  ピクセルをＸ方向に処理する  
【００６０】
ＳｃａｎＹＰｏｓｉｔｉｖｅ：
０  ピクセルを−Ｙ方向に処理する  
１  ピクセルをＹ方向に処理する  
【００６１】
ＵｓｅＳｔｒｅｔｃｈ：
０  ストレッチまたはシュリンクなし  
１  Ｘ方向にストレッチする  
２  Ｙ方向にストレッチする  
４  Ｘ方向にシュリンクする  
８  Ｙ方向にシュリンクする  
【００６２】
ＵｓｅＡｌｐｈａ：
０  ＡｌｐｈａＢｌｅｎｄｉｎｇなし
１  転送元で一定のアルファ値（ａｌｐｈａ）を使用する  
２  ピクセルごとの転送元のアルファ値を使用する  
【００６３】
ＣｏｌｏｒＫｅｙＴｙｐｅ：
０  カラー・キーなし  
１  転送元にカラー・キーがある  
２  転送先にカラー・キーがある  
【００６４】
DstMemory, SrcMemory, PatMemory, MaskMemory：
０  ビデオ・メモリ  
１  システム・メモリ  
【００６５】
ＭｉｒｒｏｒＸ：
０  転送元サーフェスをＹ軸のまわりに反転させない  
１  転送元サーフェスをＹ軸のまわりに反転させる  
【００６６】
ＭｉｒｒｏｒＹ：
０  転送元サーフェスをＹ軸のまわりに反転させない  
１  転送元サーフェスをＹ軸のまわりに反転させる  
【００６７】
Ｌｏｏｋｕｐ：
０  色ルックアップ・テーブルを使用しない  
１  色ルックアップ・テーブルを使用する
【００６８】
Ｃｏｎｖｅｒｔ：
０  色変換を使用しない  
１  色変換を使用する  
【００６９】
Ｄｓｔ８Ｂｐｐ：
０  転送先は８ｂｐｐではない  
１  転送先は８ｂｐｐである  
【００７０】
Ｄｓｔ１６Ｂｐｐ：
０  転送先は１６ｂｐｐではない  
１  転送先は１６ｂｐｐである  
【００７１】
Ｄｓｔ２４Ｂｐｐ：
０  転送先は２４ｂｐｐではない  
１  転送先は２４ｂｐｐである  
【００７２】
Ｄｓｔ３２Ｂｐｐ：
０  転送先は３２ｂｐｐではない  
１  転送先は３２ｂｐｐである  
【００７３】
Ｓｒｃ２４Ｂｐｐ：
０  転送元は２４ｂｐｐではない  
０  転送元は２４ｂｐｐである
【００７４】
この特定の実装形態では、ＦｏｒｅｇｒｏｕｎｄＲｏｐとＢａｃｋｇｒｏｕｎｄＲｏｐはどちらも、指定されたｂｉｔｂｌｔ操作に関連付けられているラスタ・オペレーションを指定するＲＯＰ３コードである。
【００７５】
次に、ｂｉｔｂｌｔシグニチャの生成を、ｂｉｔｂｌｔ関数呼び出し中に受け取ったグラフィックス・パラメータに基づいてどのように行うかを例示するために、例示的な想定状況を説明する。
【００７６】
あるアプリケーションが、ｂｉｔｂｌｔ関数ＢｉｔＢｌｔ（）を次の呼び出し、すなわちＢｉｔｂｌｔ（ｈｄｃ，  ０，  ０，  １００，  １００，  ｈｄｃＳｒｃ，  ０，  ０，  ＳＲＣＣＯＰＹ）で呼び出すと仮定する。ここで、ｈｄｃはビデオ・メモリ内のＲＧＢ５６５サーフェスを表し、ｈｄｃＳｒｃはシステム・メモリ内の８ｂｐｐ（ビット／ピクセル）のパレット化されたサーフェスを表す。以上の例示的な関数呼び出しのグラフィックス・パラメータは、ＢｌｔＳｉｇｎａｔｕｒｅ構造体の表す次のｂｉｔｂｌｔシグニチャに対応する。
【００７７】
【表１０】
2006018830.tif 000012
【００７８】
ＳＲＣＣＯＰＹ  ＲＯＰ３では、パタンおよびマスクは必要ではないため、値ＰａｔｔｅｒｎＴｙｐｅおよびＭａｓｋＭｅｍｏｒｙはすべて０になる。ＢｉｔＢｌｔ（）への例示的な呼び出しは、アルファ・ブレンドを含まないため、ＵｓｅＡｌｐｈａは０に設定する。ＢｉｔＢｌｔ（）への例示的な呼び出しは、透明な画像を含まないため、ＣｏｌｏｒＫｅｙＴｙｐｅは０に設定する。ＢｉｔＢｌｔ（）への例示的な呼び出しでは、ストレッチを可能にしないため、ＵｓｅＳｔｒｅｔｃｈも０になる。ＭｉｒｒｏｒＸおよびＭｉｒｒｏｒＹが、非ゼロになりうるのは、ＳｔｒｅｔｃｈＢｌｔ、ＡｌｐｈａＢｌｅｎｄ、またはＴｒａｎｓｐａｒｅｎｔＩｍａｇｅを負の幅または高さで呼び出した場合に限られるため、この場合、それらは０になる。最後に、ＢｌｔＭｏｄｅは、適用がＳｔｒｅｔｃｈＢｌｔに限られるため、０になる。
【００７９】
転送先、すなわちｈｄｃはビデオ・メモリ内のＲＧＢ５６５サーフェスであるため、これから、ＤｓｔＦｏｒｍａｔが５、Ｄｓｔ８Ｂｐｐが０、Ｄｓｔ１６Ｂｐｐが（ＲＧＢ５６５は定義により１６ｂｐｐであるため）１、Ｄｓｔ２４Ｂｐｐが０、Ｄｓｔ３２Ｂｐｐが０、ＤｓｔＭｅｍｏｒｙが０であることになる。転送元、すなわちｈｄｃＳｒｃはシステム・メモリ内の８ｂｐｐのパレット化されたサーフェスであるため、これから、ＳｒｃＦｏｒｍａｔが７、Ｓｒｃ２４Ｂｐｐが０、ＳｒｃＭｅｍｏｒｙが１になる。転送元および転送先はピクセル・フォーマットが異なるため、Ｃｏｎｖｅｒｔは１という値に設定される。また、転送元はパレット化されたサーフェスであるため、Ｌｏｏｋｕｐも１に設定されて、この特殊化した関数がパレット化した色の値のルックアップを行えるようになる。
【００８０】
ＦｏｒｇｒｏｕｎｄＲｏｐおよびＢａｃｋｇｒｏｕｎｄＲｏｐのエントリは、ＢｉｔＢｌｔへの例示的な呼び出しがマスク操作を含まないため、同一である。ここに示すように、ＦｏｒｇｒｏｕｎｄＲｏｐおよびＢａｃｋｇｒｏｕｎｄＲｏｐは０ｘＣＣであるが、これは、０ｘＣＣがＳＲＣＣＯＰＹを表す数値であるためである。
【００８１】
例示的な操作
本明細書では、ビット・ブロック転送（bitblt, bit block transfer）関数のクロス・プラットフォームのランタイム・コード生成のための例示的な方法を説明する。本明細書で説明する方法は、１つまたは複数のコンピュータ可読媒体上の論理命令として具体的に表すことができる。論理命令は、プロセッサ上で実行すると、汎用コンピューティング装置が、ここで説明する方法を実装する専用マシンとしてプログラムされるようにする。次の例示的な操作では、図面に示すコンポーネントおよび接続を使用して、ｂｉｔｂｌｔ関数のクロス・プラットフォームのランタイム・コード生成を実装する。
【００８２】
図２に、特殊化ｂｉｔｂｌｔ関数を使用して指定されたｂｉｔｂｌｔ操作を実行する例示的なｂｉｔｂｌｔアルゴリズム２００を示している。一般に、特殊化ｂｉｔｂｌｔ関数がキャッシュ・メモリ内に見つかった場合には、そのキャッシュされている特殊化ｂｉｔｂｌｔ関数を実行する。特殊化ｂｉｔｂｌｔ関数がキャッシュ・メモリ内に見つからない場合は、特殊化ｂｉｔｂｌｔ関数をランタイム中に生成し、実行する。あるｂｉｔｂｌｔ関数呼び出しが、ｂｉｔｂｌｔアルゴリズム２００に入ったとき、あるｂｉｔｂｌｔ操作を要求することになっていたと仮定する。この関数呼び出しは、実行すべきｂｉｔｂｌｔ操作を指定する１つまたは複数のグラフィックス・パラメータを含んでいる。
【００８３】
生成する操作２０２では、ｂｉｔｂｌｔシグニチャの生成が、グラフィックス・パラメータに基づいて行われる。この生成する操作のある実装形態では、（上で説明した）ＢｌｔＳｉｇｎａｔｕｒｅの作成が、グラフィックス・パラメータを用いて行われる。このｂｉｔｂｌｔシグニチャにより、ｂｉｔｂｌｔ関数呼び出しで指定されるｂｉｔｂｌｔ操作が一意に識別される。
【００８４】
判定する操作２０４では、要求されたｂｉｔｂｌｔ操作に対応するマシン特有の言語の特殊化ｂｉｔｂｌｔ関数が、キャッシュ内に存在するかどうかの決定を行う。判定する操作２０４では、生成する操作２０２で生成したｂｉｔｂｌｔシグニチャと同じｂｉｔｂｌｔシグニチャを有する関数を、キャッシュ内で検索する。特殊化ｂｉｔｂｌｔ関数がキャッシュ内に見つかった場合は、ｂｉｔｂｌｔアルゴリズムは「はい」に、下で説明する決定する操作２１２へと分岐する。特殊化ｂｉｔｂｌｔ関数がキャッシュ内に見つからない場合は、ｂｉｔｂｌｔアルゴリズムは「いいえ」に、生成する操作２０６へと分岐する。
【００８５】
生成する操作２０６では、要求されたｂｉｔｂｌｔ操作に対応する特殊化ｂｉｔｂｌｔ関数を生成する。生成する操作２０６のある実装形態では、生成する操作２０６が、一般化ｂｉｔｂｌｔ関数を調べて行き、一般化ｂｉｔｂｌｔ関数内のコード・ブロックが、要求されたｂｉｔｂｌｔ操作を実行するために使用されるべきかどうかを決定する。生成する操作２０６では、一般化ｂｉｔｂｌｔ関数内の各コード・ブロックのところで、ｂｉｔｂｌｔシグニチャを使用して、所与のコード・ブロックが必要かどうかの決定を行う。
【００８６】
また、生成する操作２０６では、上で説明したＩｎｖａｒｉａｎｔＴａｂｌｅ、ＣｏｎｖｅｒｔＴａｂｌｅ、およびＲｏｐ３Ｔａｂｌｅなどのデータ構造にアクセスして、そのコード・ブロックが必要かどうか、および、必要である場合には、どれだけのデータを一般化ｂｉｔｂｌｔ関数から特殊化ｂｉｔｂｌｔ関数へとコピーすべきかの決定を行う。また、生成する操作２０６では、こうしたテーブルを使用して、どれだけのデータが一般化ｂｉｔｂｌｔ関数から次のコード・ブロックへと移るかの決定を行う。生成する操作２０６の出力は、中間言語のコードによる特殊化ｂｉｔｂｌｔ操作である。
【００８７】
翻訳する操作２０８では、特殊化ｂｉｔｂｌｔ関数を中間言語のコードからマシン特有の言語のコードへと翻訳する。翻訳する操作２０８の実行は、翻訳部（translator）によって行われ、この翻訳部は、中間言語のコードを読み込むことができ、ｂｉｔｂｌｔアルゴリズムが動作しているマシンに特有のコードを生成する。この翻訳する操作２０８の実行は、仮想マシンによって行うことが可能である。
【００８８】
キャッシュを行う操作２１０では、特殊化ｂｉｔｂｌｔ関数を表すマシン特有の言語のコードのキャッシュを行う。キャッシュを行う操作２１０では、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数を（生成する操作２０２で生成した）ｂｉｔｂｌｔシグニチャによってラベル付けし、そのマシン特有の言語の特殊化ｂｉｔｂｌｔ関数をキャッシュ・メモリに保存する。キャッシュを行う操作２１０のある実装形態では、最終的に確定したサイズ（fixed size）の関数のキャッシュを使用して、ｂｉｔｂｌｔコードの合計サイズを最小化している。
【００８９】
決定する操作２１２では、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数を最適化すべきかどうかの決定を行う。決定する操作２１２のある実装形態では、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数が頻繁に実行されるかどうかの決定を行う。この実装形態では、決定する操作２１２で、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数が指定された回数実行されているかどうかの決定を行う。決定する操作２１２でマシン特有の言語の特殊化ｂｉｔｂｌｔ関数を最適化すべきであると決定した場合は、ｂｉｔｂｌｔアルゴリズム２００は「はい」に、最適化する操作２１４へと分岐する。
【００９０】
最適化する操作２１４では、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数の最適化を、ランタイム時に行う。最適化する操作２１４では、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数に対して、この関数をより速く、より効率よくし、または他の方法でパフォーマンスを改善するために、変更を行う。最適化する操作２１４のある実装形態では、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数の最適化を、増進的に（incrementally）行う。
【００９１】
最適化する操作２１４の後、および、決定する操作２１２でマシン特有の言語の特殊化ｂｉｔｂｌｔ関数を最適化すべきでないと決定した場合には、実行する操作２１６で、マシン特有の言語の特殊化ｂｉｔｂｌｔ関数を実行する。
【００９２】
例示的なコンピューティング装置
図３に、ビット・ブロック転送（bitblt, bit block transfer）関数のクロス・プラットフォームのランタイム・コード生成の実装に使用できる例示的なコンピューティング装置３００の概念図（schematic illustration）を示している。コンピューティング装置３００は、１つまたは複数のプロセッサまたは処理ユニット３３２、システム・メモリ３３４、および、システム・メモリ３３４を含む様々なシステム・コンポーネントをプロセッサ３３２へと結合するバス３３６を含む。バス３３６は、様々なバス・アーキテクチャのいずれかを用いた、メモリ・バスまたはメモリ・コントローラ、周辺バス、ＡＧＰ（accelerated graphics port）、およびプロセッサ・バスまたはローカル・バスを含めて、いくつかのタイプのバス構造のうちのどのようなものの１つまたは複数も代表する。システム・メモリ３３４は、ＲＯＭ（read only memory、読み取り専用メモリ）３３８およびＲＡＭ（random access memory、ランダム・アクセス・メモリ）３４０を含む。起動（start-up）時などにコンピューティング装置３００内部の要素間で情報を転送するのに役立つ基本ルーチンを含む、ＢＩＯＳ（basic input/output system、基本入出力システム）３４２は、通常、ＲＯＭ３３８に格納されている。
【００９３】
コンピューティング装置３００は、ハードディスク（図示せず）からの読み取りまたはそれへの書き込みを行うハードディスク・ドライブ３４４をさらに含んでおり、リムーバブルの磁気ディスク３４８からの読み取りまたはそれへの書き込みを行う磁気ディスク・ドライブ３４６、および、ＣＤ−ＲＯＭや他の光学メディアなどのリムーバブルの光ディスク３５２からの読み取りまたはそれへの書き込みを行う光ディスク・ドライブ３５０を含んでもよい。ハードディスク・ドライブ３４４、磁気ディスク・ドライブ３４６、および光ディスク・ドライブ３５０は、適切なインターフェース３５４ａ、３５４ｂ、および３５４ｃによってバス３３６へと接続される。
【００９４】
ドライブおよびそれに関連するコンピュータ可読媒体により、コンピュータ可読命令、データ構造、プログラム・モジュール、および、コンピューティング装置３００用の他のデータの不揮発性ストレージが提供される。本明細書で説明した例示的な環境ではハードディスク、リムーバブルの磁気ディスク３４８、およびリムーバブルの光ディスク３５２を使用しているが、磁気カセット、フラッシュ・メモリ・カード、ＤＶＤ（digital video disks、デジタル・ビデオ・ディスク）、ＲＡＭ（random access memory、ランダム・アクセス・メモリ）、ＲＯＭ（read only memory、読み取り専用メモリ）など、他のタイプのコンピュータ可読媒体も、例示的な動作環境では使用することができる。
【００９５】
いくつものプログラム・モジュールを、ハードディスク３４４、磁気ディスク３４８、光ディスク３５２、ＲＯＭ３３８、またはＲＡＭ３４０上に、オペレーティング・システム３５８、１つまたは複数のアプリケーション・プログラム３６０、他のプログラム・モジュール３６２、およびプログラム・データ３６４を含めて、格納することができる。ユーザは、コマンドおよび情報のコンピューティング装置３００への入力を、キーボード３６６やポインティング装置３６８などの入力装置によって行うことができる。他の入力装置（図示せず）としては、マイクロフォン、ジョイスティック、ゲーム・パッド、皿形アンテナ（satellite dish）、スキャナなどがあり得る。こうしたおよび他の入力装置の処理ユニット３３２への接続は、バス３３６に結合されるインターフェース３５６を通して行われる。また、モニタ３７２または他のタイプのディスプレイ装置のバス３３６への接続も、ビデオ・アダプタ３７４などのインターフェースを介して行われる。
【００９６】
一般に、コンピューティング装置３００のデータ・プロセッサは、このコンピュータの様々なコンピュータ可読ストレージ媒体内に異なるときに格納された命令によってプログラムされる。プログラムおよびオペレーティング・システムの配布は、たとえば、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ上で、または電子的に、行うことができ、コンピューティング装置３００の２次記憶装置（secondary memory）へとインストールまたはロードされる。プログラムは、実行時には、少なくとも部分的にコンピューティング装置３００の１次の電子的記憶装置（primary electronic memory）へとロードされる。
【００９７】
コンピューティング装置３００は、リモート・コンピュータ３７６などの１つまたは複数のリモート・コンピュータへの論理接続を使用するネットワーク化環境で動作することができる。リモート・コンピュータ３７６は、パーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置（peer device）、または他の一般的なネットワークノードとすることができ、通常、コンピューティング装置３００に関して上で説明した要素の多くまたはすべてを含む。図３に示す論理接続は、ＬＡＮ３８０およびＷＡＮ３８２を含む。論理接続は、有線、無線、またはそれらの組み合わせとすることができる。
【００９８】
ＷＡＮ３８２は、データがコンピューティング装置３００からリモート・コンピュータ３７６へ、およびその逆方向に回送される際に通るいくつものネットワークおよびサブネットワークを含むことができる。ＷＡＮ３８２は、メッセージを正しい転送先ノードへと振り向けるためのどのような数のノード（たとえば、ＤＮＳサーバ、ルータ、など）も含むことができる。
【００９９】
コンピューティング装置３００は、ＬＡＮネットワーキング環境で使用するときには、ＬＡＮ（local area network、構内通信網）３８０にネットワーク・インターフェースまたはアダプタ３８４を通して接続する。コンピューティング装置３００は、ＷＡＮネットワーキング環境で使用するときには、通常、モデム３８６、または、インターネットなどのＷＡＮ（wide area network、広域通信網）３８２を介して通信を確立するための他の手段を含む。モデム３８６は、内蔵でも外付けでもよいが、バス３３６にシリアル・ポート・インターフェース３５６を介して接続する。
【０１００】
ネットワーク化環境では、コンピューティング装置３００に関して示したプログラム・モジュール、またはその部分は、リモートのメモリ・ストレージ装置に格納することができる。ここに示すネットワーク接続は例示的であり、コンピュータ間の通信リンクを確立する他の手段を使用してもよいことが理解されよう。
【０１０１】
コンピューティング装置３００は、サーバ・アプリケーション専用の、または他のアプリケーションも動作させるサーバ・コンピュータとして実装することができる。代替方法として、コンピューティング装置３００は、例示として、そのいくつかだけを挙げれば、スタンドアロンのパーソナル・デスクトップまたはラップトップのコンピュータ（ＰＣ）、ワークステーション、ＰＤＡ（personal digital assistant）、または家電製品（electronic appliance）に実装することができる。
【０１０２】
様々なモジュールおよび技法の説明を、本明細書では、１つまたは複数のコンピュータまたは他の装置の実行する、プログラム・モジュールなどのコンピュータ実行可能命令の一般的な状況で行うことができる。一般に、プログラム・モジュールは、特定のタスクを実行しまたは特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラム・モジュールの機能は、様々な実施形態において希望通りに組み合わせまたは配布することができる。
【０１０３】
こうしたモジュールおよび技法の実装形態は、何らかの形式のコンピュータ可読媒体上への格納、またはこれを通した伝送を行うことができる。コンピュータ可読媒体は、あるコンピュータのアクセスできるどのような利用可能な媒体とすることもできる。限定ではなく、例として、コンピュータ可読媒体は、「コンピュータ・ストレージ媒体」と「通信媒体」を含むことができる。
【０１０４】
「コンピュータ・ストレージ媒体」は、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータなどの情報の格納のためのどのような方法または技術でも実装される揮発性および不揮発性で、リムーバブルおよび非リムーバブルの媒体を含む。コンピュータ・ストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disk、デジタル多用途ディスク）または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気ストレージ装置、あるいは所望の情報を格納するのに使用でき、コンピュータがアクセスできる他のどのような媒体も含むが、それに限定されるものではない。
【０１０５】
「通信媒体」は、通常、コンピュータ可読命令、データ構造、プログラム・モジュールまたは他のデータを、搬送波などの変調されたデータ信号（modulated data signal）または他の通信機構（transport mechanism）で具現化する。また、通信媒体は、どのような情報配信媒体（information delivery media）も含む。「変調されたデータ信号」という用語は、その特徴のうちの１つまたは複数の設定または変更が、情報をその信号の中にエンコードする形で行われる信号を意味する。限定ではなく、例として、通信媒体は、有線ネットワークや直接結線（direct-wired）接続などの有線媒体、ならびに音響、高周波、赤外線などの無線媒体および他の無線媒体を含む。また、上のどのようなものの組み合わせも、コンピュータ可読媒体の範囲内に含められる。
【０１０６】
本明細書で明示的に述べた特定の実装形態のほかに、他の態様および実装形態が、本明細書に開示した明細書に対する考慮から当業者には明らかとなろう。明細書およびここに示した諸実装形態は、添付の特許請求の範囲の真の範囲および趣旨のもとで、例に過ぎないと見なすよう意図するものである。
【図面の簡単な説明】
【０１０７】
【図１】１ブロックのデータのあるロケーションから別のロケーションへの転送を、１つまたは複数のグラフィックス操作をそのブロックのデータに対して実行しながら行う、ビット・ブロック転送関数ランタイム・コード生成のための例示的なｂｉｔｂｌｔ（ビット・ブロック転送）システムを示す図である。
【図２】特定のｂｉｔｂｌｔ操作を実行するための特殊化ｂｉｔｂｌｔ関数を生成するアルゴリズムを示す図である。
【図３】ｂｉｔｂｌｔ関数のためのクロス・プラットフォームのランタイム・コード生成の実装に使用できる汎用コンピュータを示す図である。
【符号の説明】
【０１０８】
１００    ブロック転送システム
１０２    ｂｉｔｂｌｔモジュール
１０４    グラフィックス・パラメータ
１０６    転送元
１０８    転送先
１１０    エグゼクティブ
１１２    キャッシュ
１１４    ｂｉｔｂｌｔシグニチャ生成部
１１６    ｂｉｔｂｌｔ関数生成部
１１８    ｂｉｔｂｌｔコード・ブロックの上位セット
１２０    データ構造
１２２    ｂｉｔｂｌｔ関数翻訳部
１２４    最適化モジュール
２００    例示的なbitbltアルゴリズム
２０２    ｂｉｔｂｌｔシグニチャを生成する
２０４    ｂｉｔｂｌｔ関数がキャッシュ内にあるか？
２０６    特殊化ｂｉｔｂｌｔ関数を中間言語コードで生成する
２０８    ｂｉｔｂｌｔ関数を中間言語コードからマシン特有の言語のコードへと翻訳する
２１０    マシン特有の言語の特殊化ｂｉｔｂｌｔ関数のキャッシュを行う
２１２    ｂｉｔｂｌｔを最適化するか？
２１４    ｂｉｔｂｌｔを最適化する
２１６    ｂｉｔｂｌｔを実行する
３００    コンピューティング装置
３３２    処理ユニット
３３４    システム・メモリ
３３６    システム・バス
３３８    （ＲＯＭ）
３４４    ハードディスク・ドライブ
３４６    磁気ディスク・ドライブ
３４８    磁気ディスク
３５０    光ディスク・ドライブ
３５２    光ディスク
３５４Ａ  ハードディスク・ドライブ・インターフェース
３５４Ｂ  磁気ディスク・ドライブ・インターフェース
３５４Ｃ  光学ドライブ・インターフェース
３５６    シリアル・ポート・インターフェース
３５８    オペレーティング・システム
３６０    アプリケーション・プログラム
３６２    他のプログラム・モジュール
３６４    プログラム・データ
３７２    モニタ
３７４    ビデオ・アダプタ
３７６    リモート・コンピュータ
３８０    ＬＡＮ（構内通信網）
３８２    ＷＡＮ（広域通信網）
３８４    ネットワーク・インターフェース
３８６    モデム
【図１】
2006018830.tif 000013
【図２】
2006018830.tif 000014
【図３】
2006018830.tif 000015
【外国語明細書】
2006018830000001.pdf