(57)【特許請求の範囲】
【請求項１】
バイナリトランスレーションを実行する方法であって：
プロセッサ上で動作するランタイム環境モジュールによって、ターゲット命令内の命令における割込を識別するステップ；
割り込まれた命令のターゲットアドレスを検索するステップであり、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものである、ステップ；及び
前記割り込まれた命令のソースアドレスをリカバリテーブル内で特定するステップであり、前記ターゲットアドレスは該リカバリテーブル内で該ソースアドレスと対にされている、ステップ；
を有し、
前記ソースアドレスを特定するステップは：
前記割り込まれた命令の前記ソースアドレスに関するオフセットを前記リカバリテーブル内で特定するステップであり、該オフセットに前記割り込まれた命令の命令サイズが乗算される、ステップ；
前記ソースアドレスにおける当初条件状態を特定するステップ；
現在条件状態を前記当初条件状態に設定するステップ；
前記オフセットの値に基づく回数だけ前記現在条件状態を進めるステップ；及び
前記現在条件状態を復元するステップ；
を有する、
方法。
【請求項２】
前記現在条件状態を進めるステップは：
変数を１に設定するステップ；
前記オフセットが前記変数に等しいかを決定するステップ；
前記オフセットが前記変数に等しいことに応答して、前記現在条件状態を復元するステップ；
前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進めるステップ；
前記条件状態を進めたことに応答して、進められた条件状態に合致するように前記現在条件状態を設定するステップ；
前記現在条件状態を設定したことに応答して、前記変数を進めるステップ；及び
前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定するステップを繰り返すステップ；
を有する、請求項１に記載の方法。
【請求項３】
１つ以上の命令を格納した少なくとも１つのコンピュータ読み取り可能媒体であって、前記１つ以上の命令は、プロセッサによって実行されるときに、請求項１又は２に記載の方法を実行する、少なくとも１つのコンピュータ読み取り可能媒体。
【請求項４】
１つ以上の命令を格納したメモリ；及び
プロセッサであり、前記１つ以上の命令が該プロセッサによって実行されるときに請求項１又は２に記載の方法を実行するように構成された、プロセッサ；
を有する装置。
【請求項５】
少なくとも１つのコンピュータ読み取り可能媒体にエンコードされたコンピュータプログラムであって、プロセッサによって実行されるときに請求項１又は２に記載の方法を実行するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してバイナリトランスレーションの分野に関し、より具体的にはバイナリトランスレーションを伴う命令を実行することに関する。
【背景技術】
【０００２】
バイナリトランスレーションは、１つのインストラクション・セット・アーキテクチャ（ここでは、“ソースＩＳＡと称する”）用にコンパイルされたアプリケーションが異なるＩＳＡ（ここでは、“ターゲットＩＳＡ”と称する）上で動作（ラン）することを可能にする高性能エミュレータである。基本的に、バイナリトランスレーション（ＢＴ）は、１つのソースＩＳＡ用に構築されたバイナリを別のターゲットＩＳＡに変換する一般的な技術である。従って、バイナリトランスレーションを用いることにより、１つのプロセッサＩＳＡ用に構築されたアプリケーションバイナリを、ハイレベルソースコードを再コンパイルしたりアセンブリコードを書き換えたりすることなく、異なるアーキテクチャを有するプロセッサ上で実行することが可能である。数多くのレガシーコンピュータアプリケーションはバイナリフォーマットで入手可能であるので、バイナリトランスレーションは、プロセッサがそれ用に構築されず利用可能でないアプリケーションを実行することを可能にできることにより、非常に魅力的である。
【０００３】
一般に、バイナリトランスレーションシステム群は同じ基本実行フローに従う。先ず、ソースアーキテクチャ用に作成されたバイナリファイルがメモリにロードされる。このソースバイナリのセクションがターゲットバイナリコードへと変換される。この変換は典型的に“オンデマンド”で実行される。換言すれば、ソースコード命令は、制御のフローがそのソースコード命令に到達するときに変換される。典型的に、この変換は、単一の入力と場合により複数の出力とを有する命令のシーケンスである基本ブロックの粒度で実行される。１つの基本ブロックが変換されると、その変換は、後での再使用のために、メモリ内のトランスレーションキャッシュ（ここでは、“コードキャッシュ”とも称する）に保持される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
実施形態例において、バイナリトランスレーションを実行するシステム及び方法を提供する。
【課題を解決するための手段】
【０００５】
一実施形態例において、バイナリトランスレーションを実行する方法が提供され得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、ソース命令をターゲット命令にトランスレートするステップと、前記ソース命令内の条件コードブロックを識別するステップであり、該条件コードブロックは複数の条件ビットを含む、ステップと、前記条件コードブロックを変換するステップであり、前記条件コードブロックについてプレ実行を実行して、前記条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含むステップと、を含み得る。
【図面の簡単な説明】
【０００６】
本開示並びにその特徴及び利点の更に完全なる理解を提供するため、以下の説明を、以下の図を含む添付図面とともに参照する。図面において、似通った参照符号は同様の部分を表す。
【図１】一実施形態に従ったデータ処理システムの一例を示す図である。
【図２】一実施形態に従ったユーザ装置の一例を示す図である。
【図３】一実施形態に従ったプロセッサの一例を示す図である。
【図４】一実施形態に従ったソース・インストラクション・セット・アーキテクチャの命令群の実行順序の一例を示す図である。
【図５】一実施形態に従った最適化モジュールを備えたバイナリトランスレーションシステムの一例を示す図である。
【図６】一実施形態に従った最適化モジュールを用いたバイナリトランスレーション方法を例示する簡略フローチャートである。
【図７】一実施形態に従ったリカバリテーブルを備えたバイナリトランスレーションシステムの一例を示す図である。
【図８】一実施形態に従った条件状態リカバリテーブルを備えたバイナリトランスレーションシステムによるバイナリトランスレーション方法を例示する簡略フローチャートである。
【図９】一実施形態に従ったリカバリテーブルを用いて条件状態を前進させる方法を例示する簡略フローチャートである。
【図１０Ａ】一実施形態に従った並列乗算加算命令を識別する方法を例示する簡略フローチャートである。
【図１０Ｂ】一実施形態に従った並列乗算加算命令を用いたバイナリトランスレーション方法を例示する簡略フローチャートである。
【図１１Ａ】一実施形態に従った並列乗算減算命令を識別する方法を例示する簡略フローチャートである。
【図１１Ｂ】一実施形態に従った並列乗算減算命令を用いたバイナリトランスレーション方法を例示する簡略フローチャートである。
【図１２Ａ】一実施形態に従ったパーシャルロング乗算命令を識別する方法を例示する簡略フローチャートである。
【図１２Ｂ】一実施形態に従ったパーシャルロング乗算命令を用いたバイナリトランスレーション方法を例示する簡略フローチャートである。
【発明を実施するための形態】
【０００７】
図１は、一実施形態に従ったデータ処理システムの一例を示している。データ処理システム１００は、システムメモリ１０４に結合されたプロセッサ１０２を含んでいる。プロセッサ１０２は条件状態（コンディションステート）１０３を含み得る。システムメモリ１０４は、ソースバイナリアプリケーション１０８、バイナリトランスレーションシステム１１０、及びオペレーティングシステム１１２を含み得る。バイナリトランスレーションシステム１１０は、インタープリタモジュール１１６、トランスレータモジュール１１８、及びランタイム環境モジュール１２０を含むことができ、これらは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの好適な組合せにて実装されることができる。トランスレータモジュール１１８は、変換（トランスレーテッド）コードキャッシュ１２２及び最適化（オプティマイザ）モジュール１２４を含み得る。また、変換コードキャッシュ１２２は、ターゲットバイナリコードブロック１２６を含み得る。ランタイム環境モジュール１２０は、リカバリテーブル１２８を含み得る。ソースバイナリアプリケーション１０８は、ソースバイナリコードブロック１３０を含み得る。ソースバイナリコードブロック１３０は条件（コンディション）コードブロック１３２を含み得る。また、条件コードブロック１３２は条件ビット１３４を含み得る。参照しやすいよう、ここでは、（複数の）ソースバイナリコードブロック１３０、（複数の）ターゲットバイナリコードブロック１２６、及び（複数の）条件コードブロック１３２を、説明のために適宜、単数形で参照することがある。
【０００８】
プロセッサ１０２は、システムメモリ１０４内にロードされ得るソフトウェアの命令群を実行するよう機能する。プロセッサ１０２は、具体的な実装に応じて、複数のプロセッサ、マルチプロセッサコア、又はその他の種類のプロセッサであってもよい。ここでは、或るアイテムを参照する“複数の”は、１つ以上のアイテムを意味する。また、プロセッサ１０２は、単一チップ上にメインプロセッサと補助プロセッサとが存在する複数の異種プロセッサシステムを用いて実装されてもよい。他の一例として、プロセッサ１０２は、同一種類の複数のプロセッサを含む対称マルチプロセッサシステムであってもよい。プロセッサ１０２の１つ以上のコアによってトランスレータモジュール１１８が実行されて、ソースバイナリコードブロック１３０がターゲットバイナリコードブロック１２６へと変換され得る。
【０００９】
システムメモリ１０４は記憶装置の一例である。記憶装置とは、情報（以下に限られないが、例えば、データ、関数形式のプログラムコード、及び／又は一時的あるいは永続的なその他の好適情報など）を記憶することが可能な何らかのハードウェアである。記憶装置は、これらの例において、コンピュータ読み取り可能記憶装置として言及されることもある。システムメモリ１０４は、例えば、ランダムアクセスメモリ、又はその他の好適な揮発性あるいは不揮発性の記憶装置を含み得る。システムメモリ１０４は、具体的な実装に応じて様々な形態を取り得る永続的な記憶装置をも含み得る。
【００１０】
ソースバイナリアプリケーション１０８は、ソースＩＳＡに対応するソースバイナリコードブロック１３０を含み得る。同様に、ターゲットバイナリコードブロック１２６はターゲットＩＳＡに対応する。ソースバイナリコードブロック１３０は、例えば分岐命令で終了し得る１つ以上の命令のシーケンスとし得る。ターゲットバイナリコードブロック１２６は、対応するソースバイナリコードブロックの機能を含むように構成される。
【００１１】
最適化モジュール１２４は、ソースバイナリコードブロック１３０の部分、例えば条件コードブロック１３２である部分、を最適化するように構成され得る。最適化された部分が、ターゲットバイナリコードブロック１２６として参照され得る。ターゲットバイナリコードブロック１２６は、ソースバイナリコードブロック１３０の機能を、ターゲットバイナリコードブロック１２６の形態で含み得る。最適化されたターゲットバイナリコードブロックは、ここで説明するように、追加機能を含んでいてもよい。
【００１２】
ターゲットバイナリコードブロック１２６は、変換コードキャッシュ１２２として指定されたシステムメモリ領域に格納され得る。より具体的には、１つ以上の対応するソースバイナリコードブロック１３０から変換された１つ以上のターゲットバイナリコードブロック１２６は、変換コードキャッシュ１２２に格納され得る。
【００１３】
ソースバイナリコードブロック１３０は、ターゲットバイナリコードブロック１２６へと変換され得る。一部の実施形態において、単一のソースバイナリコードブロック１３０が、単一のターゲットバイナリコードブロック１２６に変換される。しかしながら、他の実施形態においては、如何なる数のソースバイナリコードブロック１３０がターゲットバイナリコードブロック１２６へと変換されてもよい。換言すれば、ソースバイナリコードブロックは、静的にではなく、すなわち、ランタイムに先立ってではなく、当該ソースバイナリコードブロックを実行するための呼び出し（コール）に応答してターゲットバイナリコードブロックへと変換され得る。その後、ターゲットバイナリコードブロック１２６は、システムメモリ１０４内で変換コードキャッシュ１２２に格納され、且つ実行のためにプロセッサ１０２に提供され得る。
【００１４】
条件コードブロックは、開発者が複数の命令の複数の条件ビット１３４を１つの条件指定命令へとエンコードすることを可能にし、続く命令群の条件ビット１３４は動的に分解されることができる。故に、条件コードブロック１３２は、コンパイラがよりコンパクトなコードを生成することを可能にする。条件コードブロック１３２は、埋め込みシステムＩＳＡ用の技術を提供し、条件ビット１３４の小型形態として使用される。
【００１５】
条件ビット（コンディションビット；ＣＢ）１３４は、ＩＳＡにおいて、ソフトウェア開発者が命令の特定ビットを条件状態１０３として設定することを可能にするために使用される。ランタイムに、プロセッサは、現在の条件フラグレジスタを、現在の命令の条件ビット１３４と比較し得る。そして、プロセッサは、現在の命令を実行すべきか、あるいはそれを無演算命令（no  operation  instruction；ＮＯＰ）として扱うべきかを動的に決定し得る。
【００１６】
条件状態（コンディションステート；ＣＳ）１０３は、条件コードブロック（例えば、条件コードブロック１３２）内の各命令の条件ビット１３４を動的に分解し且つその条件コードブロックの終了を検出するためにプロセッサ１０２内に維持されるワードデータである。条件状態１０３は、先ず、条件コードブロックの条件指定命令をデコードすることによって初期化されることができ、条件コードブロック内の各命令を実行した後に、例えばビットマスク処理によって進められることができる。条件指定命令は、命令を進めることと分解することとの双方を含み得る。
【００１７】
例えば、ＡＲＭアーキテクチャ（例えば、３２ビット縮小命令セットコンピュータ）のＴＨＵＭＢ２命令セットにおいて、条件コードブロック１３２は、ハイレベルのｉｆ−ｔｈｅｎ−ｅｌｓｅセマンティックを実装するために使用されることができる。後続の複数の命令を１つの条件コードブロックへとグループ化するＩＴ命令（すなわち、Ｉｆ−Ｔｈｅｎ命令）が存在し得る。ＡＲＭプロセッサは、条件ビット１３４を動的に分解し且つ条件コードブロック内の各命令を条件付きで実行するために、“ＩＴ−ｓｔａｔｅ”として参照するワードを維持する。
【００１８】
本開示に係る実施形態は、条件状態リカバリテーブル１２８と最適化モジュール１２４とを導入することによって、バイナリトランスレーションを促進する。この促進により、バイナリトランスレーションシステム１１０でエミュレートされる条件コードブロック１３２は幾つかの利益を得ることができる。第１に、条件状態１０３を進めること及び変換コード内の条件ビット１３４を分解することが不要となり得る。条件コードブロック１３２の条件指定命令をターゲットバイナリコードブロック１２６に変換することも不要となり得る（例えば、ＴＨＵＭＢ２  ＩＳＡのＩＴ命令）。最適化モジュール１２４は、条件指定命令上の複数の条件状態をデコードし、条件指定命令を除去し、そして、条件コードブロック１３２を、コード内の各命令がそれ自身のエンコードされた条件ビットを有する一連のコードへと変換し得る。
【００１９】
また、バイナリトランスレーションシステム１１０は、条件コードブロック１３２がターゲットバイナリコードブロック１２６へと変換されている如何なる時点においても、条件状態１０３を元に戻す（リカバリする）能力を有し得る。条件状態リカバリテーブル１２８は、バイナリトランスレーションシステム１１０が条件状態を元に戻し且つ緻密な例外をサポートすることを可能にする。条件状態リカバリテーブル１２８は、ターゲットバイナリコードブロック１２６のうちの何れの範囲が条件コードブロック１３２内の特定の命令へと逆方向にマッピングされ得るかを特定することができる。
【００２０】
図２は、一実施形態に従ったユーザ装置の一例を示している。本開示の一態様において、ユーザ装置２００は、無線通信信号の送信機及び受信機として動作する。具体的には、一例において、ユーザ装置２００は、セルラーネットワーク音声・データモバイルサービスの送信及び受信の双方を行うことが可能であり得る。モバイルサービスは、完全なるインターネットアクセス、ビデオコンテンツのダウンロード及びストリーミング、並びに音声電話通信等のような機能を含む。
【００２１】
ユーザ装置２００は、例えば“３Ｇ”すなわち“第３世代”セルラーサービスを受信することが可能なハンドセットなど、従来からの無線又はセルラー方式の携帯電話に相当し得る。他の一例において、ユーザ装置２００は、同様に“４Ｇ”モバイルサービス又はその他のモバイルサービスの送信及び受信が可能であってもよい。
【００２２】
ユーザ装置２００に相当し得る装置の例は、例えばインターネットアクセス、電子メール及びインスタントメッセージ通信が可能なものなどの携帯電話ハンドセット及びスマートフォン、並びに電話サービスをサポートすることが可能な可搬式ビデオ受像機及び表示装置を含む。意図されることには、本明細書を参照する当業者は、ここに記載される本開示の様々な態様の実現に適した最新のスマートフォン並びに電話ハンドセット装置及びシステムの性質を容易に理解するであろう。従って、図２に例示されるユーザ装置２００のアーキテクチャは比較的ハイレベルで提示されるが、そうであっても、例えばこの記載の範囲内であることが意図される変更及び改変など、このアーキテクチャに対する変更及び改変が読者に明らかになるであろう。
【００２３】
本開示の一態様において、ユーザ装置２００は、アンテナに接続されてそれと通信するトランシーバ（送受信器）２０２を含んでいる。トランシーバ２０２は無線周波数トランシーバとし得る。また、トランシーバ２０２を介して無線信号が送信され受信され得る。トランシーバ２０２は、例えば、アナログ及びデジタルの無線周波数（ＲＦ）“フロントエンド”機能、望ましい場合には中間周波数（ＩＦ）を介してＲＦ信号をベースバンド周波数に変換する回路、アナログ及びデジタルのフィルタリング、及び例えば３Ｇ通信若しくは４Ｇ通信に適したものなど最新のセルラー周波数上での無線通信を実行するのに有用なその他の従来回路を含むように構築され得る。トランシーバ２０２はプロセッサ２０４に接続され、プロセッサ２０４は、伝達されるべき信号及び受信された信号のデジタル信号処理の大部分をベースバンド周波数で実行し得る。プロセッサ２０４のそのような１つの機能は、テキスト、グラフィックス及びビデオのユーザへの表示のために、ディスプレイ１０６へのグラフィックインタフェースを提供することである。
【００２４】
本開示の一態様において、プロセッサ２０４は、１つのプロセッサ、マルチコアプロセッサ、シングルコアプロセッサ、マイクロコントローラ、コントローラ回路、又はその他の種類の処理装置とし得る。プロセッサ２０４は、ここに詳述される処理を達成するよう、データに関する如何なる種類の命令をも実行することができる。本開示の一実施形態において、プロセッサは、要素又は項目（例えば、データ）を１つの状態若しくはものから別の状態若しくはものへと変換し得る。他の一例において、ここに概説される動作は、固定ロジック又はプログラム可能ロジック（例えば、プロセッサによって実行されるソフトウェア／コンピュータ命令）を用いて実装されることができ、ここに特定される要素は、何らかの種類のプログラマブルプロセッサ、プログラマブルデジタルロジック（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ））、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、デジタルロジックやソフトウェアやコードや電子命令を含む特定用途向け集積回路（ＡＳＩＣ）、フラッシュメモリ、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ  ＲＲＯＭ）、磁気カード若しくは光カード、電子命令を格納するのに好適なその他の種類の機械読み取り可能媒体、又はこれらの好適な組合せとし得る。
【００２５】
本開示の一態様において、プロセッサ２０４はまた、ここに概説されるようなバイナリトランスレーションに関連する処理を達成する際に使用される情報を格納するシステムメモリ２０８に結合され得る。これらの装置はまた、適宜、特定のニーズに基づき、好適なシステムメモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、ＦＰＧＡ、ＥＰＲＯＭ、ＥＥＰＲＯＭなど）、ソフトウェア、ハードウェア、又はその他の好適コンポーネント、デバイス、素子、又は物体内に情報を保持してもよい。ここに記載されるメモリ品目又はストレージ品目は何れも、本明細書にて使用される“システムメモリ”なる広い用語の範囲内に包含されると解されるべきである。
【００２６】
本開示の一態様において、ユーザ装置２００のシステムメモリ２０８はまた、バイナリトランスレーションシステム２１０を含み得る。バイナリトランスレーションシステム２１０は、１つのインストラクション・セット・アーキテクチャ用にコンパイルされたアプリケーションが異なるＩＳＡ上で動作（ラン）することを可能にするように構成され得る。基本的に、バイナリトランスレーションシステムは、ソースＩＳＡ用に構築されたバイナリをターゲットＩＳＡ上で動作可能なバイナリに変換することができる。バイナリトランスレーションシステム２１０は、バイナリトランスレーションシステム１１０の一例とし得る。
【００２７】
図３は、一実施形態に従ったプロセッサの一例を示している。プロセッサ３００は、例えばマイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ、又はコードを実行するその他の装置などの、何らかの種類のプロセッサのコアとし得る。図３には１つのプロセッサ３００のみが示されているが、処理素子は、他の例では、図３に示したプロセッサ３００を２つ以上含んでいてもよい。プロセッサ３００はシングルスレッド型のコアであってもよいが、少なくとも１つの実施形態において、プロセッサ３００は、コア当たり２つ以上のハードウェアスレッドコンテキスト（すなわち“論理プロセッサ”）を含み得るマルチスレッド型であってもよい。
【００２８】
図３はまた、プロセッサ３００に結合されたメモリ３０２を例示している。メモリ３０２は、当業者に知られ、あるいはその他の方法で当業者に利用可能な多様なメモリ（メモリ階層の様々なレイヤを含む）のうちの何れかとし得る。メモリ３０２は、プロセッサ３００によって実行される、１つ以上の命令とし得るコード３０４を含み得る。プロセッサ３００は、コード３０４によって指示される命令群からなるプログラムシーケンスに従う。各命令がフロントエンドロジック３０６に入力され、１つ以上のデコーダ３０８によって処理される。デコーダは、その出力として、所定のフォーマットにて例えば固定幅のマイクロオペレーションなどのマイクロオペレーションを生成し、あるいは、元のコード命令を反映したその他の命令、マイクロ命令若しくは制御信号を生成し得る。フロントエンドロジック３０６はまた、実行のために概してリソースを割り当てるとともに変換命令に対応する処理を待ち行列に入れるレジスタ改名ロジック３１０及びスケジューリングロジック３１２を含んでいる。
【００２９】
プロセッサ３００は、一組の実行ユニット３１６−１乃至３１６−Ｎを有する実行ロジック３１４を含むように示されている。一部の実施形態は、特定の機能又は機能セットに専用の複数の実行ユニットを含み得る。他の実施形態は、特定の機能を果たすことができる１つの実行ユニットのみを含み得る。実行ロジック３１４は、コード命令によって指定される処理を実行する。
【００３０】
コード命令によって指定される処理の実行の完了後、バックエンドロジック３１８がコード３０４の命令を回収する。一実施形態において、プロセッサ３００は、命令のアウトオブオーダー実行を可能にするが、命令のインオーダー回収を必要とする。回収ロジック３２０は、当業者に知られた多様な形態（例えば、リオーダーバッファ又はそれに類するもの）を取り得る。斯くして、プロセッサ３００は、少なくとも、デコーダによって生成される出力、レジスタ改名ロジック３１０によって使用されるハードウェアレジスタ及びテーブル、及び実行ロジック３１４によって変更されるレジスタ（図示せず）に関して、コード３０４の実行中に変換される。
【００３１】
図３には示されていないが、処理素子は、プロセッサ３００を有するチップ上にその他の素子を含んでいてもよい。例えば、処理素子は、プロセッサ３００とともにメモリ制御ロジックを含み得る。処理素子は、Ｉ／Ｏ制御ロジックを含んでいてもよく、且つ／或いはメモリ制御ロジックと統合されたＩ／Ｏ制御ロジックを含んでいてもよい。処理素子はまた、１つ以上のキャッシュを含んでいてもよい。
【００３２】
図４は、一実施形態に従ったソース・インストラクション・セット・アーキテクチャの命令群の実行順序の一例を示している。ソースＩＳＡ４０２は、ソース条件コードブロック４０４及び実行ロジック４０６を含んでいる。ソース条件コードブロック４０４は命令４１０、４１２、４１４、４１６を含んでいる。図４の例示は、時間４０８上での命令４１０−４１６の実行を描いている。
【００３３】
例示として、命令４１０はアドレス０ｘ１０２と処理ＩＴ  ０ｘ０６とを含んでいる。この例において、ＩＴ  ０ｘ０６は、ソース条件コードブロック４０４の開始４１８の処理とし得る。
【００３４】
当初の条件状態４２０は０ｘ０６とし得る。条件状態４２０から、実行ロジック４０６は命令４１２の第１の条件を分解し得る。実行ロジック４０６は条件ビット４２２を識別し得る。条件ビット４２２はＺＦＬＡＧを含み得る。ＺＦＬＡＧが“１”である場合、実行ロジック４０６は命令４１２を実行する。命令４１２を実行した後、実行ロジック４０６は条件状態４２４へと進んで、条件ビット４２６を分解し得る。そして、条件ビット４２６のＺＦＬＡＧが“１”であるので、実行ロジック４０６は命令４１４を実行し得る。
【００３５】
このプロセスが、ソース条件コードブロック４０４の終了まで、条件ビット４３０、条件状態４２８及び命令４１６を用いて繰り返される。一部のシステムにおいて、末尾に“８”を有する条件状態４２８は、条件コードブロックの終了を指し示す。例えば、条件状態４２８は０ｘ１８であり、一部のシステムにおいて条件コードブロックの終了を指し示し得る。
【００３６】
一部の実施形態において、実行ロジック４０６の一プロセス例は、以下を決定することで開始し得る：１）当初の条件状態０ｘ０６（１６進数）はバイナリ（２進数）フォーマットで“００００  ０１１０”である、２）上位４ビットは“００００”であり、これは条件ビットＺＦＬＡＧ＝１を意味する、及び３）下位４ビットは“０１１０”であり、これは、条件コードブロックが終了しておらず且つ実行されるべき更なる命令を含むことを意味する“１０００”（１０００は、８に等価な２進数である）に等しくない。
【００３７】
図５は、一実施形態に従った最適化モジュール５１４を備えたバイナリトランスレーションシステム５０２を例示している。バイナリトランスレーションシステム５０２は、ソースバイナリコード５０３からのコードを、ターゲットＩＳＡ５０４上のコードへと変換する。一実施形態例において、バイナリトランスレーションシステム５０２は、インタープリタモジュール５０６と比較して、ソースバイナリコード５０３内に位置する条件コードブロック５０５をエミュレートするためのバイナリトランスレーションを高速化することができる。バイナリトランスレーションシステム５０２は、条件状態の前進及び条件ビットの分解をエミュレートすることを必要とせず、それにより変換コード５１６における時間を節減する。
【００３８】
一実施形態例において、ソースバイナリコード５０３の条件コードブロック５０５は、図４に示される命令例を含む。バイナリトランスレーションシステム５０２は、インタープリタモジュール５０６、トランスレータモジュール５０８、及びランタイム環境モジュール５１０を含み得る。トランスレータモジュール５０８は図１のトランスレータモジュール１１８の一例とし得る。バイナリトランスレーションシステム５０２は、図１に示したバイナリトランスレーションシステム１１０の一例とし得る。ソースバイナリコード５０３は図１のソースバイナリコードブロック１３０の一例とし得る。
【００３９】
インタープリタモジュール５０６は、ソースバイナリコード５０３を実行する解釈エンジンとして構成されることができる。インタープリタモジュール５０６はまた、ホットコードトレースを識別したときにトランスレータモジュール５０８の使用をトリガーすることができる。ホットコードトレースは、ホット基本ブロックとも称され得る。バイナリトランスレーションシステム５０２は、“ホット”な（すなわち、頻繁に実行される）基本ブロックを検出するプローブ（カウンタ）を実装し得る。ホットコードトレースの一例は、例えば、条件コードブロック５０５とし得る。
【００４０】
トランスレータモジュール５０８は、各ホットコードトレースについて、ソースバイナリコード５０３のターゲットＩＳＡ５０４へのバイナリトランスレーションを実行する。トランスレータモジュール５０８は、変換されたコードブロックを格納する変換コードキャッシュ５１２を有する。変換コードキャッシュ５１２は図１の変換コードキャッシュ１２２の一例とし得る。
【００４１】
トランスレータモジュール５０８はまた、変換中にソースバイナリコード５０３を最適化する最適化モジュール５１４を有する。最適化モジュール５１４は、ソースバイナリコード５０３を変換コード５１６へと変換することによって、ソースバイナリコード５０３を最適化し得る。変換コード５１６は、前進及び分解の処理（又は命令）を排除したソースバイナリコード５０３のプレ実行から生成され得る。最適化モジュール５１４は、ソースバイナリコード５０３のプレ実行中に条件の一部又は全てを識別することができるようにされ得る。
【００４２】
最適化モジュール５１４は、条件コードブロック５０５についてソースＩＳＡ−ソースＩＳＡ変換を実行することができる。最適化モジュール５１４はまた、条件指定命令上の複数の条件をデコードし、条件指定命令を除去し、そして、各命令がそれ自身のエンコードされた条件ビットを有するかのように条件コードブロックを一連のコードへと変換する。この例において、ＩＴ  ０ｘ０６は条件コードブロック５０５の開始の命令とし得る。
【００４３】
ランタイム環境モジュール５１０は、変換されたコード（変換コード）をターゲットＩＳＡ５０４上で走らせるための支援環境及びヘルパーライブラリを提供する。
【００４４】
動作上の観点で、また、特定の一実施形態に関して、トランスレータモジュールの動作フローは以下のように機能する：ソースバイナリアプリケーションがバイナリトランスレーションシステム５０２上で起動するとき、インタープリタモジュール５０６がソースバイナリコード５０３を実行し始める。条件コードブロック５０５が（例えば、ホットコードトレースとして）検出されると、インタープリタモジュール５０６は、ソースＩＳＡ−ターゲットＩＳＡ変換を実行するようトランスレータモジュール５０８をトリガーする。変換中、トランスレータモジュール５０８は、条件コードブロック５０５に出会うと、最適化モジュール５１４を呼び出してソースバイナリコード５０３の変換を実行する。
【００４５】
そして、最適化モジュール５１４は、条件コードブロック５０５の条件指定命令上の条件ビットをデコードし、条件状態を静的に前進させ且つ後続の各命令上に条件ビットを分解し、最終的に、条件コードブロック５０５の条件指定命令を除去する。斯くして、最適化モジュール５１４は、あたかも各命令がそれ自身のエンコードされた条件ビットを有するかのように、条件コードブロック５０５を一連のコードへと変換する。
【００４６】
また、トランスレータモジュール５０８は、ソースＩＳＡ−ターゲットＩＳＡ変換を実行する。条件コードブロック５０５内のソースバイナリコード５０３に対し、トランスレータモジュール５０８は、各条件コードブロック命令の変換が厳密にプログラム順であること、すなわち、命令の並べ換えが行われないことを保証する。条件コードブロック５０５のアドレスマッピングも、システムの条件状態リカバリテーブル５１８に記録され得る。
【００４７】
図６は、一実施形態に従った最適化モジュールを用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー６００は、ステップ６１０にて、インタープリタモジュールがソース命令を解釈するときに開始し得る。命令を解釈することによって、インタープリタモジュールは、各命令を取り出し、該命令を分析し、該命令をソースＩＳＡ上で実行する。解釈中に、ステップ６２０にて、インタープリタモジュールはホットトレース（又はホット基本ブロック）を識別し得る。
【００４８】
ホットトレースが識別されると、ステップ６３０にて、バイナリトランスレーションシステムは、変換を実行するためにトランスレータモジュールを提供し得る。トランスレータモジュールは、ソース命令を変換された命令（変換命令）へと変換（“トランスレート”とも称する）する。１つ以上の実施形態において、変換命令はターゲット命令を含み得る。ターゲット命令は、ターゲットバイナリコード又は変換コードとも称され得る。ステップ６４０にて、トランスレータモジュールは、ホットトレース内で条件コードブロックを識別し得る。
【００４９】
条件コードブロックを識別したことに応答し、ステップ６５０にて、トランスレータモジュールは、上記変換（“トランスレーション”とも称する）を最適化モジュールに引き渡し得る。最適化モジュールはトランスレータモジュールの一部とし得る。次に、最適化モジュールは、ステップ６６０にて、条件コードブロックのプレ実行を行い得る。このプレ実行は、そのブロック内の条件ビット群を分解して、事前分解された条件セットを形成するとともに、条件状態の前進のエミュレーションを不要にし得る。これらのコマンドの削減は、変換コードを一層効率的なものにする。
【００５０】
プレ実行の後、ステップ６７０にて、最適化モジュールは、ターゲットＩＳＡ上で動作する中間命令セットへの変換時に、事前分解された条件セットでソース命令をエンコードし得る。新たな命令の各々は、条件情報でエンコードされた結合命令セットとなり得る。この例において、トランスレータモジュールは、条件状態を識別して進めるためにリソースを費やす必要がない。また、当初の条件指定命令はもはや必要でない。その後、このプロセスは終了する。
【００５１】
図７は、一実施形態に従ったリカバリテーブル７１８を備えたバイナリトランスレーションシステム７０２を例示している。図７のバイナリトランスレーションシステム７０２は、図５のバイナリトランスレーションシステム５０２と同様である。例えば、バイナリトランスレーションシステム７０２は、ソースバイナリコード７０３からのコードをターゲットＩＳＡ７０４用のコードへと変換する。バイナリトランスレーションシステム７０２はまた、インタープリタモジュール７０６、トランスレータモジュール７０８、及びランタイム環境モジュール７１０を含んでいる。トランスレータモジュール７０８は最適化モジュール７１４と変換コードキャッシュ７１２とを含んでいる。バイナリトランスレーションシステム７０２のランタイム環境モジュール７１０は、リカバリテーブル７１８を含んでいる。また、バイナリトランスレーションシステム５０２及び７０２内の様々な構成要素は、様々な実施形態に係るその他のバイナリトランスレーションシステムを形成するように様々に組み合わされ得る。
【００５２】
変換コードキャッシュ７１２内の命令の実行中、時々、割込又は例外７１１が発生する。例外７１１中、トランスレータモジュール７０８は、最適化モジュール７１４によって事前分解された条件状態情報を喪失することがある。従って、トランスレータモジュール７０８は、条件状態情報を復元する助けとなるリカバリテーブル７１８を閲覧し得る。
【００５３】
動作上の観点で、また、特定の一実施形態に関して、条件コードブロック７０５の変換の変換コードにおいて例外７１１が発生するとき、条件状態リカバリプロセスは、ランタイム環境モジュール７１０が例外７１１を捕らえ、その例外命令のアドレスをリカバリテーブル７１８内で特定することを含み得る。そのアドレスがリカバリテーブル７１８内にない場合、ランタイム環境モジュール７１０は通常の状態リカバリプロセスを行う。そのアドレスをリカバリテーブル７１８内で発見することができた場合には、ランタイム環境モジュール７１０は、ソースバイナリコード７０３内の元の条件コードブロック７０５のアドレスを取り出し、例えば図８及び９に示すプロセスといった、条件状態リカバリプロセスを開始する。
【００５４】
アドレスから、ランタイム環境モジュール７１０は、条件指定命令内の条件ビットを再デコードし、障害が発生した障害点まで条件状態を再度進め、そして、障害を発生したソースＩＳＡ命令の条件ビット群を再分解することができる。従って、障害点の条件状態を正確に復元することができる。ランタイム環境モジュール７１０は、その他のソースＩＳＡ状態を復元し得る。全てのソースＩＳＡ状態が復元されると、バイナリトランスレーションシステム７０２は安全にインタープリタモジュール７０６を呼び出すことができる。
【００５５】
条件状態リカバリプロセスは、入力として、ターゲットＩＳＡコードにおける例外／割込ｉｐを含むことができる。このプロセスは、出力として、復元された条件状態を含むことができる。それに従って擬似コードが以下のように構成され得る：
let  eip＝ターゲットＩＳＡコードにおける例外／割込ip
{offset,ccb_entry_ip}=
BT.runtime.condition_state_recovery_table[eip]
Contition_state=BT.runtime.decode(ccb_entry_ip)
For  i＝1  to  offset:
condition_state=
BT.runtime.condition_state_adcvance(condition_state)。
【００５６】
図８は、一実施形態に従った条件状態リカバリテーブルを備えたバイナリトランスレーションシステム（例えば、図７に示したバイナリトランスレーションシステム７０２）によるバイナリトランスレーション方法を例示する簡略化したフローチャート８００である。このフローは、ステップ８１０にて、バイナリトランスレーションシステム（ＢＴＳ）が変換コードの命令の実行中に例外／割込を識別するときに開始し得る。そして、ステップ８２０にて、バイナリトランスレーションシステムは割り込まれた命令のアドレスを検索する。
【００５７】
次に、ステップ８３０にて、ターゲットアドレスを用いて、バイナリトランスレーションシステムはリカバリデーブルを用いてソースアドレスを特定することができる。ソースアドレスは、エントリーアドレスをオフセットとともに含み得る。エントリーアドレスは、ソースバイナリコード内の条件コードブロックの開始アドレスとし得る。さらに、オフセットに命令サイズが掛け合わされ得る。例えば、図７に示すように、復元されるソースアドレスは、０ｘ１０２（エントリー）＋２（オフセット）×２（命令サイズ）となり得る。例えば、命令サイズは２バイト命令で２とし得る。
【００５８】
ソースアドレスが特定されると、ステップ８４０にて、バイナリトランスレーションシステムは、そのソースアドレスにおける対応する当初条件状態を特定することができる。当初条件状態は、ソースＩＳＡにおける条件コードブロックの当初の状態とすることができ、割り込まれたターゲットＩＳＡコード命令に変換されたソース命令を含む。
【００５９】
ステップ８５０にて、バイナリトランスレーションシステムは、トランスレータモジュールにおける現在の条件状態を、ソースアドレスにおいて特定された当初条件状態に設定する。しかしながら、当初条件状態は所望の状態ではない。所望の状態を見出すため、ステップ８６０にて、バイナリトランスレーションシステムは、オフセットの値に基づく回数だけ条件状態を進める必要があり得る。条件状態を進める処理は図７に示されている。条件状態が適切な回数だけ進められると、ステップ８７０にて、バイナリトランスレーションシステムは、例外時の（すなわち、障害を発生したアドレスにおける）ソースバイナリコードの現在条件状態を復元し得る。
【００６０】
図９は、一実施形態に従ったリカバリテーブルを用いて条件状態を前進させる方法を例示する簡略化したフローチャート９００である。図９のフローは、図８のフロー８００の一部を補足し得るものである。バイナリトランスレーションシステムは、割り込まれたソースバイナリコード命令の条件状態を位置特定するまで条件を調べる。正確な条件を見出すため、バイナリトランスレーションシステムはループを開始する。
【００６１】
バイナリトランスレーションシステムは、ステップ９１０にて、変数を“１”に設定する。そして、ステップ９２０にて、バイナリトランスレーションシステムは、リカバリテーブル内で特定されたオフセットに上記変数が達したかを決定する。
【００６２】
変数がオフセットに達した場合、ステップ９６０にて、バイナリトランスレーションシステムは、ターゲットバイナリコードにおける例外時の条件を、ソースバイナリコードにおける現在条件状態に設定する。
【００６３】
変数がオフセットに一致しない場合、ステップ９３０にて、バイナリトランスレーションシステムは条件状態を進める。ステップ９４０にて、バイナリトランスレーションシステムは、現在条件状態を、進められた条件状態に設定する。また、ステップ９５０にて、バイナリトランスレーションシステムは変数を進める。そして、このプロセスは、ステップ９２０で開始して繰り返される。リカバリテーブル内で特定されたオフセットに変数が達すると、ステップ９６０にて、例外時のソースＩＳＡの現在条件状態が復元され、その後、このプロセスは終了する。
【００６４】
本開示に係る実施形態は、バイナリトランスレーション中に割込又は例外が発生するときに、現行システムでも、実行をゆっくり且つ安全に終了させるようにインタープリタまで後戻りすることによって、ソースバイナリコードの状態を復元し得ることを認識している。しかしながら、本開示に係る実施形態は、トランスレータが条件状態を復元するプロセスを提供する。
【００６５】
図１０Ａは、一実施形態に従った並列乗算加算命令を識別する方法を例示する簡略化したフローチャートである。フロー１０００は、ステップ１０１０にて、トランスレータモジュールが命令を受信するときに開始し得る。
【００６６】
そして、ステップ１０２０にて、トランスレータモジュールは、その命令が並列乗算加算（parallel-multiply-addition）命令であるかを決定する。命令が並列乗算加算命令でない場合、このプロセスは終了する。命令が並列乗算加算命令である場合、ステップ１０２５にて、トランスレータモジュールは、該並列乗算加算命令についての変換を始動する。トランスレータモジュールは、並列乗算加算命令を：
Vector1=X1X0
Vector2=Y1Y0
Dest_tmp=X1*Y1  and  X0*Y0
Dest=X1*Y1＋X0*Y0
を含むものとして識別することができ、dest（宛先）アドレスが並列乗算加算命令の結果を含む。
【００６７】
図１０Ｂは、一実施形態に従った並列乗算加算命令を用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー１００１は、ステップ１０３０にて、命令内で指し示されるソースベクトル上での並列乗算加算関数を実行する変換コードをトランスレータモジュールが生成するときに開始し得る。例えば、２つのソースベクトルが存在する場合、それらが乗算されて得られたベクトルが宛先ベクトルとして参照されることがある。
【００６８】
ステップ１０４０にて、変換コードにおいて、上記関数の実行が完了すると、変換コードは桁あふれが起こったかを決定する。桁あふれを識別するため、変換コードは宛先ベクトルを或る定数と比較する。例えば、一実施形態において、宛先ベクトルが［０ｘ１＜＜（Ｓ＊Ｎ−１）］の値に等しい場合、桁あふれが検出される。この式において、“Ｓ”はベクトル要素のサイズであり、“Ｎ”はベクトル要素の個数である。故に、（Ｓ＊Ｎ）がベクトルサイズである。桁あふれが検出されなかった場合、ステップ１０５０にて、桁あふれフラグが“０”に設定される。桁あふれが検出された場合、ステップ１０６０にて、桁あふれフラグが“１”に設定される。
【００６９】
本開示に係る実施形態は、並列乗算命令及びその変形（加算、減算、拡張）に関するバイナリトランスレーションの効率を、ターゲットＩＳＡが同じセマンティックスでこれらの命令を提供しないときに向上させる。
【００７０】
動作上の観点で、また、特定の一実施形態に関して、並列乗算加算は、第１のソースベクトルの個々の符号付き要素に、第２のソースベクトルの対応する符号付き要素を掛け合わせ、暫定的な符号付き二重要素結果を生成する。そして、隣り合う二重要素結果が足し合わされて、宛先ベクトルに記録される。
【００７１】
他の実装例において、並列乗算命令の変形は、僅かに異なるセマンティックスを有し得る。桁あふれは加算中に起こり得る。加算を減算として、ターゲットＩＳＡの対応部分を有しない並列乗算減算を導き出してもよい。また、最終結果に第３のソースベクトルが加算されてもよい。
【００７２】
本開示に係る実施形態は、ターゲットＩＳＡの命令の一部のみがマッピングされるときに、どのように並列乗算命令及びその変形を基本演算に効率的に変換するかを示すプロセスを提供する。１つのベクトルは幾つかの要素を含み得る。ここで、（Ｓ）は要素サイズを表し、（Ｎ）はベクトルの要素の個数を表し、（Ｎ＊Ｓ）はベクトルサイズである。
【００７３】
最も近いターゲットＩＳＡ命令を並列乗算命令及びその変形内に実装するため、並列乗算加算関数の桁あふれ及び不存在が変換中に効率的にエミュレートされるべきである。
【００７４】
桁あふれは、並列乗算加算において、加算結果が特定の桁あふれ境界値に達する場合にのみ発生する。この状況において、桁あふれフラグは設定される必要がある。
【００７５】
桁あふれの擬似コードは：
dest=parallel_multiply_add(src1,src2)
if(dest==0x1<<(S*N-1))  O_flagを生成
である。
【００７６】
本開示に係る実施形態は、結果値を或る定数値と比較することによって桁あふれ条件を検出し得る。並列乗算加算が桁あふれし得る条件が１つのみ存在することがあり得る。例えば、乗算演算の全ての要素が最大絶対値の負の０ｘ１＜＜（Ｓ−１）であり、且つ乗算演算が正の０１ｘ＜＜（２Ｓ−２）を生成するときである。これら２つの正数が加算されるとき、それは０ｘ１＜＜（２Ｓ−１）を生成する。ベクトルサイズは、桁あふれの境界値を生じさせるこの大きい結果を保持することができない。
【００７７】
例えば、要素サイズが８ビットであり、且つ結果サイズが１６ビットであると仮定する。また、ｖｅｃｔｏｒ１＝０ｘ８０８０、且つｖｅｃｔｏｒ２＝０ｘ８０８０であると仮定する。この場合、ｐａｒａｌｌｅｌ＿ｍｕｌｔｉｐｌｙ＿ａｄｄ（ｖｅｃｔｏｒ１，ｖｅｃｔｏｒ２）＝０ｘ８０＊０ｘ８０＋０ｘ８０＊０ｘ８０＝０ｘ４０００＋０ｘ４０００＝０ｘ８０００となる。この結果は負数であり、故に、桁あふれが発生する（２つの正数が１つの負数へと加算される）。従って、０ｘ８０００が桁あふれ境界値として決定される。
【００７８】
並列乗算加算の変形が桁あふれフラグ（Ｏ＿ｆｌａｇ）を設定することを要するとき、桁あふれ情報を検出することは、正確なＯ＿ｆｌａｇを効率的に生成する助けとなる。並列乗算加算の変形が、この並列乗算加算の結果に第３のソースベクトルを加算するとき、並列乗算加算中に発生した桁あふれは、最後の加算の計算に影響を及ぼす。故に、最初の加算及び最後の加算の間に発生した桁あふれ条件が組み合わされる。並列乗算加算にて桁あふれを検出することは、組み合わされた桁あふれフラグを計算するための効率的なコードを生成する助けとなる。
【００７９】
図１１Ａは、一実施形態に従った並列乗算減算命令を識別する方法を例示する簡略化したフローチャートである。フロー１１００は、ステップ１１１０にて、トランスレータモジュールが命令を受信するときに開始し得る。
【００８０】
そして、ステップ１１２０にて、トランスレータモジュールは、その命令が並列乗算減算（parallel-multiply-subtraction）命令であるかを決定する。一実施形態において、第１のソースベクトルと第２のソースベクトルとの２つのベクトルが存在し得る。各ベクトルは、上半分と下半分とを有し得る。例えば、第１のソースベクトルがＸ１Ｘ０である場合、下半分はＸ０である。同様に、第２のソースベクトルはＹ１Ｙ０を有し得る。この例において、値“Ｙ０”はネゲートされてもよい。減算されるべきベクトルは第２のソースベクトルとし得る。例えば、第１のソースベクトル−第２のソースベクトルなる式とし得る。
【００８１】
ステップ１１２０の決定で、命令が並列乗算減算命令でない場合、このプロセスは終了する。命令が並列乗算減算命令である場合、ステップ１１２５にて、トランスレータモジュールは、該並列乗算減算命令についての変換を始動する。
【００８２】
図１１Ｂは、一実施形態に従った並列乗算減算命令を用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー１１０１は、ステップ１１３０にて、第２のソースベクトルの下位要素についてビット毎のｎｏｔを実行するように構成された変換コードをトランスレータモジュールが生成するときに開始し得る。該要素がビット毎ｎｏｔ演算によって変更された後、ステップ１１３５にて、命令内で指し示されたソースベクトルに対して並列乗算加算関数を実行するように変換コードが構成される。例えば、２つのソースベクトルが存在する場合、それらが掛け合わされて結果ベクトルが生成される。そして、ステップ１１４０にて、第1のソースベクトルの下位要素が符号拡張されて結果ベクトルに加算される。この最終ベクトルは宛先ベクトルとして参照され得る。
【００８３】
次に、フローは、桁あふれを識別することに移る。ステップ１１５０にて、宛先ベクトルで桁あふれが存在するかを決定するように変換コードが構成され得る。変換コードは、宛先ベクトルを或る定数と比較することで桁あふれを識別するように構成され得る。例えば、変換コードは、ベクトルを定数［０ｘ１＜＜（Ｓ＊Ｎ−１）＋符号拡張０ｘ１＜＜（Ｓ−１）］と比較するように構成され得る。
【００８４】
桁あふれが存在する場合、ステップ１１６０にて、得られた宛先ベクトルを或る一定値に設定するように変換コードが構成され得る。その後、このプロセスは終了し得る。桁あふれが存在しない場合、ステップ１１７０にて、上位要素が下位要素から減算されたか、それとも下位要素が上位要素から減算されたかを決定するように変換コードが構成され得る。例えば、上述の演算において、下位要素が上位要素から減算されると仮定する。しかしながら、その逆が行われる場合には、宛先ベクトルはビット毎のｎｏｔ演算を適用される必要がある。従って、ステップ１１７０で、下位要素が上位要素から減算される、換言すれば、上位要素が下位要素から減算されない、と決定される場合、このプロセスは終了し得る。一方、ステップ１１７０で、上位要素が下位要素から減算されると決定される場合、ステップ１１８０にて、変換コードは、宛先ベクトル上でビット毎のｎｏｔ演算を実行するように構成される。その後、このプロセスは終了し得る。
【００８５】
動作上の観点で、また、特定の一実施形態に関して、並列乗算減算（加算が減算になる）を変換するとき、並列乗算減算を実行することに並列乗算加算が使用され得るように、第２のソースベクトルの下位要素は演算前にネゲートされる必要がある。
【００８６】
並列乗算減算１の擬似コードは：
Src2.low_Sbit=not（src2.low_Sbit）
dest’=parallel_multiply_add(src1,src2)
dest=dest’+Sign-extend(src1.low_Sbit)
である。
【００８７】
この方法の第２部分において、桁あふれが並列乗算加算にて発生し得る。これは、入力が特定値を保持するときに発生し、故に、最終結果が直接的に決定され得る。
【００８８】
並列乗算減算２の擬似コードは：
If(overflow検出)
{
dest=(0x1<<(S*N-1))+sign-extend(0x1<<(S-1))
}
である。
【００８９】
この方法の第３部分において、並列乗算減算は、上位要素の乗算結果−下位要素の乗算結果、又は下位要素の乗算結果−上位要素の乗算結果という、２つの異なる減算順序を有する。上述の段落は、上位要素の乗算結果−下位要素の乗算結果に向けられている。それに代わる状況において、下位要素の乗算結果から上位要素の乗算結果が減じられるときには、最終結果のネゲーションが行われる。
【００９０】
並列乗算減算３の擬似コードは：
dest=〜dest
である。
【００９１】
様々な実施形態が、ターゲットバイナリコードが、並列乗算命令の変換において発生する桁あふれ及び部ゲーションの問題に対して対応する等価なものを提供しないとき、ソースバイナリコードのターゲットバイナリコードへの変換を提供する。
【００９２】
図１０及び１１に関し、並列乗算命令の現行の変換は、一まとめにされた要素の乗算をエミュレートするためにターゲットＩＳＡの通例の乗算命令を使用している。“Ｎ”個の要素を含む２つのベクトルの並列乗算を実行するため、“Ｎ”回の通例の乗算が実行されている。また、ベクトルから要素を抽出することは、追加のシフト演算を必要としている。桁あふれフラグは加算中に生成される。しかしながら、この命令のセマンティックスが第３の加算を必要とする場合、それは第３のベクトルへの加算を実行するために使用されるべきである。この変換は１０より多い命令によって実行されることがある。
【００９３】
本開示に係る実施形態は、“Ｎ”個の乗算をまとめて１つの演算として結合して、並列乗算加算を効率的に変換する。換言すれば、幾つかの通例の乗算命令をエミュレートするために、１つの並列乗算命令を使用することができる。ここに開示される実施形態は、結果値を或る一定値と比較することによって桁あふれ条件を検出する。また、ここに開示される実施形態は、並列乗算減算を取り扱うために、ソースベクトルの一要素をネゲートする。新たな変換が、本開示に係る実施形態によって提案されるバイナリトランスレーションシステムにインポートされ得る。
【００９４】
桁あふれ処理のアルゴリズムの一例は：
入力：SIA_INSTと表記されるソースＩＳＡ命令のシーケンス
出力：O_flagと表記される桁あふれフラグ情報
アルゴリズム：
Begin
dest=parallel_multiply_add(src1,src2)
if(dest==0x1<<(S*N-1))
O_flagを生成
Endif
End
のように構成され得る。
【００９５】
並列乗算減算アルゴリズムの一例は：
入力：SIA_INSTと表記されるソースＩＳＡ命令のシーケンス
出力：TIA_INSTと表記されるターゲットＩＳＡ命令のシーケンス
アルゴリズム：
Begin
Src2.low_Sbit=not（src2.low_Sbit）
dest’=Parallel_multiply_add(src1,src2)
dest=dest’+Sign-extend(src1.low_Sbit)
if(桁あふれ検出)
dest=const_val
Endif
if(回要素から上位要素を減算)dest=〜dest
Endif
End
のように構成され得る。
【００９６】
図１２Ａは、一実施形態に従ったパーシャル（部分的）ロング乗算命令を識別する方法を例示する簡略化したフローチャートである。フロー１２００は、ステップ１２１０にて、トランスレータモジュールが命令を受信するときに開始し得る。
【００９７】
そして、ステップ１２２０にて、トランスレータモジュールは、その命令がパーシャルロング乗算（partial-long-multiply）命令であるかを決定する。命令がパーシャルロング乗算命令でない場合、このプロセスは終了する。命令がパーシャルロング乗算命令である場合、ステップ１２２５にて、トランスレータモジュールは、該パーシャルロング乗算命令についての変換を始動する。
【００９８】
図１２Ｂは、一実施形態に従ったパーシャルロング乗算命令を用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー１２０１は、ステップ１２３０にて、命令の下のオペランドの上半分及び下半分を抽出して２つのオペランドを形成する変換コードをトランスレータモジュールが生成するときに開始し得る。また、ステップ１２４０にて、元のオペランドの下半分をハーフサイズからフルサイズへとゼロ拡張するように変換コードが構成され得る。次に、ステップ１２５０にて、元のオペランドの上半分に対してハーフサイズからフルサイズへと算術シフトライト（arithmetic-shift-right）を行うように変換コードが構成され得る。
【００９９】
次に、ステップ１２６０にて、元のオペランドの各半分を第２のオペランドと乗算して２つの積を形成するように変換コードが構成され得る。最後に、ステップ１２７０にて、これら２つの積を足し合わせるように変換コードが構成され得る。これらの積を足し合わせるため、算術シフトライトを用いることによって下半分の乗算の積をフルサイズからハーフサイズへと調整するように変換コードが構成され得る。その後、このプロセスは終了する。
【０１００】
本開示に係る実施形態は、パーシャルロング乗算命令（例えば、ＡＲＭにおけるＨａｌｆｗｏｒｄ  Ｍｕｌｔｉｐｌｙ命令による符号付きＷｏｒｄ）に関するバイナリトランスレーションの効率を、ソースＩＳＡ及びターゲットＩＳＡが同じセマンティックスでこれらの命令を提供しないときに向上させる。
【０１０１】
動作上の観点で、また、一実施形態において、パーシャルロング乗算命令は、符号付きのロングビット量に符号付きのショートビット量を乗算して、パーシャルロングビット結果を生成する。例えば、１６ビット量に３２ビット量が乗算されて４８ビット結果を生成し；該４８ビット結果の上位３２ビットは記憶されるが該４８ビットの下位１６ビットは無視される。命令のセマンティックに応じて追加の累算関数が実行され得る。
【０１０２】
異なるＩＳＡは乗算命令の異なる変形を実装していることがある。典型的に、ソースベクトルは同じデータサイズを有する。しかしながら、異なるデータサイズを有する複数のソースベクトルの乗算命令を変換するとき、短い方のデータサイズを長い方のデータサイズに自動拡張し、長い乗算（ロング乗算）命令を用いて計算を実行し、宛先ベクトルに必要なビットを抽出する、というのは非効率である。
【０１０３】
ロング乗算は短い乗算（ショート乗算）より高コストになり得る。ショート乗算と比較して、ロング乗算は変換にとって幾つかの欠点を有する。ロング乗算では効率が低い。ロング乗算は長い待ち時間を有するとともに両方のポートを使用し、パイプラインを制限してしまう。レジスタ制約も存在する。ターゲットＩＳＡ命令は或る特定のレジスタをオペランドレジスタとして占有することがあり、それにより、その他の構成要素の最適化を妨げてしまい得る。
【０１０４】
本開示に係る実施形態は、２つのショート乗算命令を用いてロング乗算命令をエミュレートすることによって、パーシャルロング乗算命令を効率的に変換する方法を提供する。これらの実施形態は、本開示において以下の表記を使用する。Ｈａｌｆｗｏｒｄ命令による符号付き乗算Ｗｏｒｄ（signed  multiply  Word  by  Halfword  instruction）をＳＭＵＬＷＨと表記する。命令ベクトルのショートビットサイズをＳＢと表記し、ロングビットサイズをＬＢと表記する（ＬＢ＝２ＳＢ）。
【０１０５】
乗算結果の一部のみが必要とされる場合、２つのショート乗算を用いて１つのロング乗算をエミュレートすることができる。それは、ロングビットのソースベクトルを２つの部分（下位ビットの半分及び上位ビットの半分）へと二等分し、これら２つの部分に別々に第２のショートビットベクトルを乗算し、そして、これら２つの中間結果を足し合わせて最終結果を生成する。２つの中間結果を対応し合う位置に整列させるために、加算の前にシフトが実行される。
【０１０６】
パーシャルロング乗算命令に関する変換は一般に２つの関数を含む。第１の関数がロングビットソースベクトル（src_long）の２つの部分を用意する。下位半分の拡張（extend(src_long.low_half)）及び上位半分のシフト（src_long>>SB）が実行される。下位半分の拡張はゼロ拡張とすることができ、上位半分のシフトは算術シフトとすることができる。
【０１０７】
第２の関数が、これら２つの部分とショートビットベクトルとを乗算し、それらの中間結果を足し合わせる。それは、一方の乗算結果をシフト（low_multiply_result<<SB）し、その後、２つの乗算結果を足し合わせて最終結果を生成する。ソースＩＳＡ命令のセマンティックスに応じて、上記最終結果に第３のソースベクトルが加算されてもよい。
【０１０８】
典型的に、異なるデータサイズを有する２つのベクトルの乗算に遭遇するとき、ロングビットのデータサイズが演算サイズとして選択され、ショートビットのデータサイズのベクトルがロングビットのデータサイズのベクトルへと符号付き拡張あるいは符号なし拡張され、ロング乗算命令を用いて演算が実行される。１つの部分（パーシャル）乗算命令を、６個程度のターゲット命令と、２つの追加の特定レジスタ保存及び復元命令とに変換することができる。しかしながら、１つのロング乗算はショート乗算より遙かに遅いものとなり得る。さらに、ロング乗算は、特定レジスタの使用が余分な保存及び復元の作業を生じさせ得るので、レジスタ制約を有する。これら２つの点は、変換の効率を低下させ得るものである。
【０１０９】
本開示に係る実施形態は、１つのロング乗算を２つのショート乗算に分割する。それは、追加の特定レジスタ保存・復元作業を排除し、レジスタの割当てを単純化する。１つのソースＩＳＡ命令を６個のターゲットＩＳＡ命令に変換することができる。
【０１１０】
パーシャルロング乗算命令に関する命令トランスレーションアルゴリズムの一例は：
入力：SIA_INSTと表記されるソースＩＳＡ命令のシーケンス
出力：TIA_INSTと表記されるターゲットＩＳＡ命令のシーケンス
アルゴリズム：
Begin
src_long_lh’=zero_extend（src_long_lh,SB_size）
src_long_hh’=arithmetic_shift_right（src_long_hh,SB_size）
lh_product=imul(src_long_lh’,src_short）
hh_product=imul(src_long_hh’,src_short）
lh_product’=arithmetic_shift_right（lh_product,SB_size）
dest=add(lh_product’,hh_product)
if  現在命令が拡張を有する
dest=add(dest,src_ext)
Endif
End
のように構成され得る。
【０１１１】
なお、特定の実施形態例において、ここに説明されたバイナリトランスレーション関数は、１つ以上の有形媒体にエンコードされたロジックによって実行され得る（例えば、特定用途向け集積回路（ＡＳＩＣ）内に設けられた組み込みロジック、デジタル信号プロセッサ（ＤＳＰ）命令、プロセッサによって実行されるソフトウェア（場合により、オブジェクトコード及びソースコードを含む））。これらの例のうちの一部において、メモリ素子は、ここに記載された処理に使用されるデータを格納することができる。これには、実行されて本明細書に記載の動作を行うソフトウェア、ロジック、コード又はプロセッサ命令を記憶することができるメモリ素子が含まれる。プロセッサは、本明細書にて上述された処理を達成するために、データに関する如何なる種類の命令をも実行することができる。一例において、プロセッサは、要素又は項目（例えば、データ）を１つの状態若しくはものから別の状態若しくはものへと変換し得る。他の一例において、ここに説明された動作は、固定ロジック又はプログラム可能ロジック（例えば、プロセッサによって実行されるソフトウェア／コンピュータ命令）を用いて実装されることができ、ここに特定された要素は、何らかの種類のプログラマブルプロセッサ、プログラマブルデジタルロジック（例えば、ＦＰＧＡ、ＥＰＲＯＭ、ＥＥＰＲＯＭ）、若しくはデジタルロジック、ソフトウェア、コード、電子命令を含むＡＳＩＣ、又はこれらの好適な組合せとし得る。
【０１１２】
一実装例において、バイナリトランスレーションシステムは、ここに説明されたバイナリトランスレーション動作を達成するためのソフトウェアを含み得る。バイナリトランスレーションシステムは、ここに記載されたようなバイナリトランスレーション動作を達成する際に使用される情報を格納するメモリ素子を含むことができる。また、バイナリトランスレーションシステムは、ソフトウェア又はアルゴリズムを実行して、本明細書にて開示されたバイナリトランスレーション動作を実行することが可能なプロセッサを含み得る。これらの装置は更に、適宜、特定のニーズに基づき、好適なメモリ素子（ランダムアクセスメモリ（ＲＡＭ）、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＡＳＩＣなど）、ソフトウェア、ハードウェア、又はその他の好適コンポーネント、デバイス、素子、又は物体内に情報を保持してもよい。ここに記載されるメモリ項目（例えば、データベース、テーブル、ツリー、キャッシュなど）は何れも、“メモリ要素”なる広い用語の範囲内に包含されると解されるべきである。同様に、本明細書に記載される潜在的な処理素子、モジュール及び機械は何れも、‘プロセッサ’なる広い用語の範囲内に包含されると解されるべきである。
【０１１３】
なお、この例及びここに提示された数多くのその他の例では、２つ、３つ又は４つの様子に関して相互作用を説明されているかもしれない。しかしながら、これは明瞭化且つ単なる例示の目的で行われたものである。一定の場合、所与のフローの組の機能のうちの１つ以上を、限られた数の要素のみを参照して記述する方が容易となり得る。認識されるように、バイナリトランスレーションシステム（及びそれらの教示）は、容易に拡張可能であり、多数のコンポーネントと、より複雑化／洗練された構成及び設定とを提供し得る。従って、バイナリトランスレーションシステムの広い教示は無数のその他アーキテクチャにも適用され得るものであり、提示された例は、バイナリトランスレーションシステムの教示の範囲を限定したり抑制したりするものではない。
【０１１４】
また、重要なことには、上述のフロー図における処理は、バイナリトランスレーションシステムによって、あるいはその内部で実行され得るシナリオ及びパターンの一部のみを示している。これらの処理のうちの一部は、本開示の範囲を逸脱することなく、適宜に削除あるいは除去されたり、大幅に変更あるいは変形されたりし得る。また、これらの処理のうちの一部は１つ以上の更なる処理と同時あるいは並列に実行されるように説明されている。しかしながら、これらの処理のタイミングは大幅に変更され得る。上述の処理フローは、例示及び説明の目的で提供されたものである。バイナリトランスレーションシステムは、本開示の教示を逸脱することなく如何なる好適な構成、時間配列、設定及びタイミング機構が実現されてもよいという点で、かなりの柔軟性を提供する。
【０１１５】
特定の構成及び設定を参照して本開示を説明してきたが、これらの構成及び設定の例は、本開示の範囲を逸脱することなく有意に変形され得る。
【０１１６】
以下の例は、本明細書に従った実施形態に関する。１つ以上の実施形態は、バイナリトランスレーションを実行する方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、ソース命令をターゲット命令にトランスレートするステップと、ソース命令内の条件コードブロックを識別するステップであり、該条件コードブロックは複数の条件ビットを含む、ステップと、条件コードブロックを変換するステップであり、条件コードブロックについてプレ実行を実行して、条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含むステップと、を含み得る。
【０１１７】
１つ以上の実施形態の一例において、当該方法は更に、事前分解された条件セットでソース命令をエンコードするステップを含み得る。
【０１１８】
１つ以上の実施形態は、バイナリトランスレーションを実行する方法を提供し得る。当該方法は、プロセッサ上で動作するランタイム環境モジュールによって、ターゲット命令内の命令における割込を識別するステップと、割り込まれた命令のターゲットアドレスを検索するステップであり、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものである、ステップと、割り込まれた命令のソースアドレスをリカバリテーブル内で特定するステップであり、ターゲットアドレスはリカバリテーブル内でソースアドレスと対にされている、ステップと、を含み得る。
【０１１９】
１つ以上の実施形態の一例において、ソースアドレスを特定するステップは、割り込まれた命令のソースアドレスに関するオフセットをリカバリテーブル内で特定するステップであり、該オフセットに割り込まれた命令の命令サイズが乗算される、ステップと、ソースアドレスにおける当初条件状態を特定するステップと、現在条件状態を当初条件状態に設定するステップと、オフセットの値に基づく回数だけ現在条件状態を進めるステップと、現在条件状態を復元するステップとを含み得る。
【０１２０】
１つ以上の実施形態の他の一例において、現在条件状態を進めるステップは、変数を１に設定するステップと、前記オフセットが前記変数に等しいかを決定するステップと、前記オフセットが前記変数に等しいことに応答して、現在条件状態を復元するステップと、前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進めるステップと、条件状態を進めたことに応答して、進められた条件状態に合致するように現在条件状態を設定するステップと、現在条件状態を設定したことに応答して、前記変数を進めるステップと、前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定するステップを繰り返すステップと、を含み得る。
【０１２１】
１つ以上の実施形態は、並列乗算加算命令をトランスレートする方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、トランスレートされるべき命令を受信するステップであり、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものである、ステップと、前記複数のソースベクトルに対する並列乗算加算関数を実行し；且つ桁あふれが存在するかを決定することを実行するトランスレートされたコードを生成するステップと、を含み得る。
【０１２２】
１つ以上の実施形態の一例において、この方法は更に、桁あふれを決定したことに応答して、桁あふれが存在することを指し示すように桁あふれフラグを設定するステップを含み得る。
【０１２３】
１つ以上の実施形態は、並列乗算減算命令をトランスレートする方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、トランスレートされるべき命令を受信するステップであり、該命令は複数のソースベクトルに対する並列乗算減算関数を呼び出すものであり、前記複数のソースベクトルのうちの各ベクトルは下位要素と上位要素とを有する、ステップと、第２のソースベクトルの下位要素に対してビット毎のｎｏｔ演算を実行し、前記複数のソースベクトルに対する並列乗算加算関数を実行して結果を形成し、第１のソースベクトルの下位要素を前記結果に加算し、桁あふれが存在するかを決定し、且つ桁あふれを決定したことに応答して、前記結果を一定値に設定することを実行するトランスレートされたコードを生成するステップと、を含み得る。
【０１２４】
１つ以上の実施形態の一例において、この方法は更に、桁あふれを決定しなかったことに応答して、上位要素が下位要素から減算されたかを決定するステップと、上位要素が下位要素から減算されたことに応答して、前記結果に対してビットごとのｎｏｔ演算を実行するステップと、を含み得る。
【０１２５】
１つ以上の実施形態は、パーシャルロング乗算命令をトランスレートする方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、トランスレートされるべき命令を受信するステップであり、該命令は複数のソースベクトルに対するパーシャルロング乗算関数を呼び出すものであり、該パーシャルロング乗算関数は第１のオペランドを有する、ステップと、前記関数の第１のオペランドを上半分と下半分とに分割し、第１のオペランドの各半分に第２のオペランドを乗算して、上半分の積と下半分の積とを形成し、且つ上半分の積を下半分の積に加算することを実行するトランスレートされたコードを生成するステップと、を含み得る。
【０１２６】
１つ以上の実施形態の一例において、前記関数の第１のオペランドを分割することは、下半分に対してゼロ拡張を実行し、且つ上半分に対して算術シフトライト演算を実行することを含み得る。
【０１２７】
１つ以上の実施形態の他の一例において、この方法はまた、下半分の積に対して算術シフトライト演算を実行することを含み得る。
【０１２８】
１つ以上の実施形態は、プロセッサによって実行されるときに、ソース命令をターゲット命令にトランスレートし、ソース命令内の条件コードブロックを識別し、該条件コードブロックは複数の条件ビットを含み、且つ条件コードブロックを変換し、該変換は、条件コードブロックについてプレ実行を実行して、条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含む、１つ以上の命令を格納した少なくとも１つのコンピュータ読み取り可能媒体を提供し得る。
【０１２９】
１つ以上の実施形態の一例において、上記少なくとも１つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、事前分解された条件セットでソース命令をエンコードする命令を含み得る。
【０１３０】
１つ以上の実施形態は、プロセッサによって実行されるときに、ターゲット命令内の命令における割込を識別し、割り込まれた命令のターゲットアドレスを検索し、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものであり、且つ割り込まれた命令のソースアドレスをリカバリテーブル内で特定し、ターゲットアドレスはリカバリテーブル内でソースアドレスと対にされている、１つ以上の命令を有する少なくとも１つのコンピュータ読み取り可能媒体を提供し得る。
【０１３１】
上記少なくとも１つのコンピュータ読み取り可能媒体の１つ以上の実施形態の一例において、ソースアドレスを特定することは、プロセッサによって実行されるときに、割り込まれた命令のソースアドレスに関するオフセットをリカバリテーブル内で特定し、該オフセットに割り込まれた命令の命令サイズが乗算され、ソースアドレスにおける当初条件状態を特定し、現在条件状態を当初条件状態に設定し、前記オフセットの値に基づく回数だけ現在条件状態を進め、且つ現在条件状態を復元する１つ以上の命令を含み得る。
【０１３２】
上記少なくとも１つのコンピュータ読み取り可能媒体の１つ以上の実施形態の他の一例において、現在条件状態を進めることは、プロセッサによって実行されるときに、変数を１に設定し、前記オフセットが前記変数に等しいかを決定し、前記オフセットが前記変数に等しいことに応答して、現在条件状態を復元し、前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進め、条件状態を進めたことに応答して、進められた条件状態に合致するように現在条件状態を設定し、現在条件状態を設定したことに応答して、前記変数を進め、且つ前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定することを繰り返す１つ以上の命令を含み得る。
【０１３３】
１つ以上の実施形態は、プロセッサによって実行されるときに、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものであり、且つ前記複数のソースベクトルに対する並列乗算加算関数を実行し、且つ桁あふれが存在するかを決定するトランスレートされたコードを生成する１つ以上の命令を有する少なくとも１つのコンピュータ読み取り可能媒体を提供し得る。
【０１３４】
１つ以上の実施形態の一例において、上記少なくとも１つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、桁あふれを決定したことに応答して、桁あふれが存在することを指し示すように桁あふれフラグを設定する命令を含み得る。
【０１３５】
１つ以上の実施形態は、プロセッサによって実行されるときに、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算減算関数を呼び出すものであり、前記複数のソースベクトルのうちの各ベクトルは下位要素と上位要素とを有し、且つ第２のソースベクトルの下位要素に対してビット毎のｎｏｔ演算を実行し、前記複数のソースベクトルに対する並列乗算加算関数を実行して結果を形成し、第１のソースベクトルの下位要素を前記結果に加算し、桁あふれが存在するかを決定し、且つ桁あふれを決定したことに応答して、前記結果を一定値に設定するトランスレートされたコードを生成する、１つ以上の命令を格納した少なくとも１つのコンピュータ読み取り可能媒体を提供し得る。
【０１３６】
１つ以上の実施形態の一例において、上記少なくとも１つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、桁あふれを決定しなかったことに応答して、上位要素が下位要素から減算されたかを決定し、且つ上位要素が下位要素から減算されたことに応答して、前記結果に対してビットごとのｎｏｔ演算を実行する命令を含み得る。
【０１３７】
１つ以上の実施形態は、プロセッサによって実行されるときに、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対するパーシャルロング乗算関数を呼び出すものであり、該パーシャルロング乗算関数は第１のオペランドを有し、且つ前記関数の第１のオペランドを上半分と下半分とに分割し、第１のオペランドの各半分に第２のオペランドを乗算して、上半分の積と下半分の積とを形成し、且つ上半分の積を下半分の積に加算するトランスレートされたコードを生成する、１つ以上の命令を格納した少なくとも１つのコンピュータ読み取り可能媒体を提供し得る。
【０１３８】
上記少なくとも１つのコンピュータ読み取り可能媒体の１つ以上の実施形態の一例において、前記関数の第１のオペランドを分割することは、プロセッサによって実行されるときに、下半分に対してゼロ拡張を実行し、且つ上半分に対して算術シフトライト演算を実行する１つ以上の命令を含み得る。
【０１３９】
１つ以上の実施形態の他の一例において、上記少なくとも１つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、下半分の積に対して算術シフトライト演算を実行する命令を含み得る。
【０１４０】
１つ以上の実施形態は、トランスレータモジュールであり、ソース命令をターゲット命令にトランスレートし、且つソース命令内の条件コードブロックを識別し、該条件コードブロックは複数の条件ビットを含む、ように構成されたトランスレータモジュールと、条件コードブロックを変換するように構成された最適化モジュールであり、前記変換は、条件コードブロックについてプレ実行を実行して、条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含む、最適化モジュールと、を有する装置を提供し得る。
【０１４１】
１つ以上の実施形態の一例において、最適化モジュールは更に、事前分解された条件セットでソース命令をエンコードするように構成され得る。
【０１４２】
１つ以上の実施形態は、複数のターゲットアドレスと複数のソースアドレスとを格納するように構成されたリカバリテーブルと、ランタイム環境モジュールであり、ターゲット命令内の命令における割込を識別し、割り込まれた命令のターゲットアドレスを検索し、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものであり、且つ割り込まれた命令のソースアドレスをリカバリテーブル内で特定し、前記複数のターゲットアドレスのうちの該ターゲットアドレスは、リカバリテーブル内で、前記複数のソースアドレスのうちの該ソースアドレスと対にされている、ように構成されたランタイム環境モジュールと、を有する装置を提供し得る。
【０１４３】
１つ以上の実施形態の一例において、ソースアドレスを特定することにおいて、ランタイム環境モジュールは更に、割り込まれた命令のソースアドレスに関するオフセットをリカバリテーブル内で特定し、該オフセットに割り込まれた命令の命令サイズが乗算され、ソースアドレスにおける当初条件状態を特定し、現在条件状態を当初条件状態に設定し、前記オフセットの値に基づく回数だけ現在条件状態を進め、且つ現在条件状態を復元するように構成され得る。
【０１４４】
１つ以上の実施形態の他の一例において、現在条件状態を進めることにおいて、ランタイム環境モジュールは更に、変数を１に設定し、前記オフセットが前記変数に等しいかを決定し、前記オフセットが前記変数に等しいことに応答して、現在条件状態を復元し、前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進め、条件状態を進めたことに応答して、進められた条件状態に合致するように現在条件状態を設定し、現在条件状態を設定したことに応答して、前記変数を進め、且つ前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定することを繰り返すように構成され得る。
【０１４５】
１つ以上の実施形態は、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものであり、且つ前記複数のソースベクトルに対する並列乗算加算関数を実行し、且つ桁あふれが存在するかを決定するトランスレートされたコードを生成する、ように構成されたトランスレータモジュールを有する装置を提供し得る。
【０１４６】
１つ以上の実施形態の一例において、トランスレータモジュールは更に、桁あふれを決定したことに応答して、桁あふれが存在することを指し示すように桁あふれフラグを設定するように構成され得る。
【０１４７】
１つ以上の実施形態は、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものであり、前記複数のソースベクトルのうちの各ベクトルは下位要素と上位要素とを有し、且つ第２のソースベクトルの下位要素に対してビット毎のｎｏｔ演算を実行し、前記複数のソースベクトルに対する並列乗算加算関数を実行して結果を形成し、第１のソースベクトルの下位要素を前記結果に加算し、桁あふれが存在するかを決定し、且つ桁あふれを決定したことに応答して、前記結果を一定値に設定するトランスレートされたコードを生成する、ように構成されたトランスレータモジュールを有する装置を提供し得る。
【０１４８】
１つ以上の実施形態の一例において、トランスレータモジュールは更に、桁あふれを決定しなかったことに応答して、上位要素が下位要素から減算されたかを決定し、且つ上位要素が下位要素から減算されたことに応答して、前記結果に対してビットごとのｎｏｔ演算を実行するように構成され得る。
【０１４９】
１つ以上の実施形態は、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対するパーシャルロング乗算関数を呼び出すものであり、該パーシャルロング乗算関数は第１のオペランドを有し、且つ前記関数の前記第１のオペランドを上半分と下半分とに分割し、第１のオペランドの各半分に第２のオペランドを乗算して、上半分の積と下半分の積とを形成し、且つ上半分の積を下半分の積に加算するトランスレートされたコードを生成する、ように構成されたトランスレータモジュールを有する装置を提供し得る。
【０１５０】
１つ以上の実施形態の一例において、前記関数の第１のオペランドを分割することにおいて、トランスレータモジュールは、下半分に対してゼロ拡張を実行し、且つ上半分に対して算術シフトライト演算を実行するように構成され得る。
【０１５１】
１つ以上の実施形態の一例において、トランスレータモジュールは更に、下半分の積に対して算術シフトライト演算を実行するように構成され得る。
【図１】
0005727107.tif 000002
【図２】
0005727107.tif 000003
【図３】
0005727107.tif 000004
【図４】
0005727107.tif 000005
【図５】
0005727107.tif 000006
【図６】
0005727107.tif 000007
【図７】
0005727107.tif 000008
【図８】
0005727107.tif 000009
【図９】
0005727107.tif 000010
【図１０Ａ】
0005727107.tif 000011
【図１０Ｂ】
0005727107.tif 000012
【図１１Ａ】
0005727107.tif 000013
【図１１Ｂ】
0005727107.tif 000014
【図１２Ａ】
0005727107.tif 000015
【図１２Ｂ】
0005727107.tif 000016