【文献】
中島康彦、上埜治彦、田尻邦彦、鈴木貴朗,動的命令変換手法によるMアーキテクチャ・エミュレーション,情報処理学会論文誌,社団法人情報処理学会,1997年11月15日, 第38巻,第11号,p.2309−2320
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0007】
図1は、一実施形態に従ったデータ処理システムの一例を示している。データ処理システム100は、システムメモリ104に結合されたプロセッサ102を含んでいる。プロセッサ102は条件状態(コンディションステート)103を含み得る。システムメモリ104は、ソースバイナリアプリケーション108、バイナリトランスレーションシステム110、及びオペレーティングシステム112を含み得る。バイナリトランスレーションシステム110は、インタープリタモジュール116、トランスレータモジュール118、及びランタイム環境モジュール120を含むことができ、これらは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの好適な組合せにて実装されることができる。トランスレータモジュール118は、変換(トランスレーテッド)コードキャッシュ122及び最適化(オプティマイザ)モジュール124を含み得る。また、変換コードキャッシュ122は、ターゲットバイナリコードブロック126を含み得る。ランタイム環境モジュール120は、リカバリテーブル128を含み得る。ソースバイナリアプリケーション108は、ソースバイナリコードブロック130を含み得る。ソースバイナリコードブロック130は条件(コンディション)コードブロック132を含み得る。また、条件コードブロック132は条件ビット134を含み得る。参照しやすいよう、ここでは、(複数の)ソースバイナリコードブロック130、(複数の)ターゲットバイナリコードブロック126、及び(複数の)条件コードブロック132を、説明のために適宜、単数形で参照することがある。
【0008】
プロセッサ102は、システムメモリ104内にロードされ得るソフトウェアの命令群を実行するよう機能する。プロセッサ102は、具体的な実装に応じて、複数のプロセッサ、マルチプロセッサコア、又はその他の種類のプロセッサであってもよい。ここでは、或るアイテムを参照する“複数の”は、1つ以上のアイテムを意味する。また、プロセッサ102は、単一チップ上にメインプロセッサと補助プロセッサとが存在する複数の異種プロセッサシステムを用いて実装されてもよい。他の一例として、プロセッサ102は、同一種類の複数のプロセッサを含む対称マルチプロセッサシステムであってもよい。プロセッサ102の1つ以上のコアによってトランスレータモジュール118が実行されて、ソースバイナリコードブロック130がターゲットバイナリコードブロック126へと変換され得る。
【0009】
システムメモリ104は記憶装置の一例である。記憶装置とは、情報(以下に限られないが、例えば、データ、関数形式のプログラムコード、及び/又は一時的あるいは永続的なその他の好適情報など)を記憶することが可能な何らかのハードウェアである。記憶装置は、これらの例において、コンピュータ読み取り可能記憶装置として言及されることもある。システムメモリ104は、例えば、ランダムアクセスメモリ、又はその他の好適な揮発性あるいは不揮発性の記憶装置を含み得る。システムメモリ104は、具体的な実装に応じて様々な形態を取り得る永続的な記憶装置をも含み得る。
【0010】
ソースバイナリアプリケーション108は、ソースISAに対応するソースバイナリコードブロック130を含み得る。同様に、ターゲットバイナリコードブロック126はターゲットISAに対応する。ソースバイナリコードブロック130は、例えば分岐命令で終了し得る1つ以上の命令のシーケンスとし得る。ターゲットバイナリコードブロック126は、対応するソースバイナリコードブロックの機能を含むように構成される。
【0011】
最適化モジュール124は、ソースバイナリコードブロック130の部分、例えば条件コードブロック132である部分、を最適化するように構成され得る。最適化された部分が、ターゲットバイナリコードブロック126として参照され得る。ターゲットバイナリコードブロック126は、ソースバイナリコードブロック130の機能を、ターゲットバイナリコードブロック126の形態で含み得る。最適化されたターゲットバイナリコードブロックは、ここで説明するように、追加機能を含んでいてもよい。
【0012】
ターゲットバイナリコードブロック126は、変換コードキャッシュ122として指定されたシステムメモリ領域に格納され得る。より具体的には、1つ以上の対応するソースバイナリコードブロック130から変換された1つ以上のターゲットバイナリコードブロック126は、変換コードキャッシュ122に格納され得る。
【0013】
ソースバイナリコードブロック130は、ターゲットバイナリコードブロック126へと変換され得る。一部の実施形態において、単一のソースバイナリコードブロック130が、単一のターゲットバイナリコードブロック126に変換される。しかしながら、他の実施形態においては、如何なる数のソースバイナリコードブロック130がターゲットバイナリコードブロック126へと変換されてもよい。換言すれば、ソースバイナリコードブロックは、静的にではなく、すなわち、ランタイムに先立ってではなく、当該ソースバイナリコードブロックを実行するための呼び出し(コール)に応答してターゲットバイナリコードブロックへと変換され得る。その後、ターゲットバイナリコードブロック126は、システムメモリ104内で変換コードキャッシュ122に格納され、且つ実行のためにプロセッサ102に提供され得る。
【0014】
条件コードブロックは、開発者が複数の命令の複数の条件ビット134を1つの条件指定命令へとエンコードすることを可能にし、続く命令群の条件ビット134は動的に分解されることができる。故に、条件コードブロック132は、コンパイラがよりコンパクトなコードを生成することを可能にする。条件コードブロック132は、埋め込みシステムISA用の技術を提供し、条件ビット134の小型形態として使用される。
【0015】
条件ビット(コンディションビット;CB)134は、ISAにおいて、ソフトウェア開発者が命令の特定ビットを条件状態103として設定することを可能にするために使用される。ランタイムに、プロセッサは、現在の条件フラグレジスタを、現在の命令の条件ビット134と比較し得る。そして、プロセッサは、現在の命令を実行すべきか、あるいはそれを無演算命令(no operation instruction;NOP)として扱うべきかを動的に決定し得る。
【0016】
条件状態(コンディションステート;CS)103は、条件コードブロック(例えば、条件コードブロック132)内の各命令の条件ビット134を動的に分解し且つその条件コードブロックの終了を検出するためにプロセッサ102内に維持されるワードデータである。条件状態103は、先ず、条件コードブロックの条件指定命令をデコードすることによって初期化されることができ、条件コードブロック内の各命令を実行した後に、例えばビットマスク処理によって進められることができる。条件指定命令は、命令を進めることと分解することとの双方を含み得る。
【0017】
例えば、ARMアーキテクチャ(例えば、32ビット縮小命令セットコンピュータ)のTHUMB2命令セットにおいて、条件コードブロック132は、ハイレベルのif−then−elseセマンティックを実装するために使用されることができる。後続の複数の命令を1つの条件コードブロックへとグループ化するIT命令(すなわち、If−Then命令)が存在し得る。ARMプロセッサは、条件ビット134を動的に分解し且つ条件コードブロック内の各命令を条件付きで実行するために、“IT−state”として参照するワードを維持する。
【0018】
本開示に係る実施形態は、条件状態リカバリテーブル128と最適化モジュール124とを導入することによって、バイナリトランスレーションを促進する。この促進により、バイナリトランスレーションシステム110でエミュレートされる条件コードブロック132は幾つかの利益を得ることができる。第1に、条件状態103を進めること及び変換コード内の条件ビット134を分解することが不要となり得る。条件コードブロック132の条件指定命令をターゲットバイナリコードブロック126に変換することも不要となり得る(例えば、THUMB2 ISAのIT命令)。最適化モジュール124は、条件指定命令上の複数の条件状態をデコードし、条件指定命令を除去し、そして、条件コードブロック132を、コード内の各命令がそれ自身のエンコードされた条件ビットを有する一連のコードへと変換し得る。
【0019】
また、バイナリトランスレーションシステム110は、条件コードブロック132がターゲットバイナリコードブロック126へと変換されている如何なる時点においても、条件状態103を元に戻す(リカバリする)能力を有し得る。条件状態リカバリテーブル128は、バイナリトランスレーションシステム110が条件状態を元に戻し且つ緻密な例外をサポートすることを可能にする。条件状態リカバリテーブル128は、ターゲットバイナリコードブロック126のうちの何れの範囲が条件コードブロック132内の特定の命令へと逆方向にマッピングされ得るかを特定することができる。
【0020】
図2は、一実施形態に従ったユーザ装置の一例を示している。本開示の一態様において、ユーザ装置200は、無線通信信号の送信機及び受信機として動作する。具体的には、一例において、ユーザ装置200は、セルラーネットワーク音声・データモバイルサービスの送信及び受信の双方を行うことが可能であり得る。モバイルサービスは、完全なるインターネットアクセス、ビデオコンテンツのダウンロード及びストリーミング、並びに音声電話通信等のような機能を含む。
【0021】
ユーザ装置200は、例えば“3G”すなわち“第3世代”セルラーサービスを受信することが可能なハンドセットなど、従来からの無線又はセルラー方式の携帯電話に相当し得る。他の一例において、ユーザ装置200は、同様に“4G”モバイルサービス又はその他のモバイルサービスの送信及び受信が可能であってもよい。
【0022】
ユーザ装置200に相当し得る装置の例は、例えばインターネットアクセス、電子メール及びインスタントメッセージ通信が可能なものなどの携帯電話ハンドセット及びスマートフォン、並びに電話サービスをサポートすることが可能な可搬式ビデオ受像機及び表示装置を含む。意図されることには、本明細書を参照する当業者は、ここに記載される本開示の様々な態様の実現に適した最新のスマートフォン並びに電話ハンドセット装置及びシステムの性質を容易に理解するであろう。従って、
図2に例示されるユーザ装置200のアーキテクチャは比較的ハイレベルで提示されるが、そうであっても、例えばこの記載の範囲内であることが意図される変更及び改変など、このアーキテクチャに対する変更及び改変が読者に明らかになるであろう。
【0023】
本開示の一態様において、ユーザ装置200は、アンテナに接続されてそれと通信するトランシーバ(送受信器)202を含んでいる。トランシーバ202は無線周波数トランシーバとし得る。また、トランシーバ202を介して無線信号が送信され受信され得る。トランシーバ202は、例えば、アナログ及びデジタルの無線周波数(RF)“フロントエンド”機能、望ましい場合には中間周波数(IF)を介してRF信号をベースバンド周波数に変換する回路、アナログ及びデジタルのフィルタリング、及び例えば3G通信若しくは4G通信に適したものなど最新のセルラー周波数上での無線通信を実行するのに有用なその他の従来回路を含むように構築され得る。トランシーバ202はプロセッサ204に接続され、プロセッサ204は、伝達されるべき信号及び受信された信号のデジタル信号処理の大部分をベースバンド周波数で実行し得る。プロセッサ204のそのような1つの機能は、テキスト、グラフィックス及びビデオのユーザへの表示のために、ディスプレイ106へのグラフィックインタフェースを提供することである。
【0024】
本開示の一態様において、プロセッサ204は、1つのプロセッサ、マルチコアプロセッサ、シングルコアプロセッサ、マイクロコントローラ、コントローラ回路、又はその他の種類の処理装置とし得る。プロセッサ204は、ここに詳述される処理を達成するよう、データに関する如何なる種類の命令をも実行することができる。本開示の一実施形態において、プロセッサは、要素又は項目(例えば、データ)を1つの状態若しくはものから別の状態若しくはものへと変換し得る。他の一例において、ここに概説される動作は、固定ロジック又はプログラム可能ロジック(例えば、プロセッサによって実行されるソフトウェア/コンピュータ命令)を用いて実装されることができ、ここに特定される要素は、何らかの種類のプログラマブルプロセッサ、プログラマブルデジタルロジック(例えば、フィールドプログラマブルゲートアレイ(FPGA))、消去可能プログラマブル読み出し専用メモリ(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、デジタルロジックやソフトウェアやコードや電子命令を含む特定用途向け集積回路(ASIC)、フラッシュメモリ、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD RROM)、磁気カード若しくは光カード、電子命令を格納するのに好適なその他の種類の機械読み取り可能媒体、又はこれらの好適な組合せとし得る。
【0025】
本開示の一態様において、プロセッサ204はまた、ここに概説されるようなバイナリトランスレーションに関連する処理を達成する際に使用される情報を格納するシステムメモリ208に結合され得る。これらの装置はまた、適宜、特定のニーズに基づき、好適なシステムメモリ(例えば、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、FPGA、EPROM、EEPROMなど)、ソフトウェア、ハードウェア、又はその他の好適コンポーネント、デバイス、素子、又は物体内に情報を保持してもよい。ここに記載されるメモリ品目又はストレージ品目は何れも、本明細書にて使用される“システムメモリ”なる広い用語の範囲内に包含されると解されるべきである。
【0026】
本開示の一態様において、ユーザ装置200のシステムメモリ208はまた、バイナリトランスレーションシステム210を含み得る。バイナリトランスレーションシステム210は、1つのインストラクション・セット・アーキテクチャ用にコンパイルされたアプリケーションが異なるISA上で動作(ラン)することを可能にするように構成され得る。基本的に、バイナリトランスレーションシステムは、ソースISA用に構築されたバイナリをターゲットISA上で動作可能なバイナリに変換することができる。バイナリトランスレーションシステム210は、バイナリトランスレーションシステム110の一例とし得る。
【0027】
図3は、一実施形態に従ったプロセッサの一例を示している。プロセッサ300は、例えばマイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、又はコードを実行するその他の装置などの、何らかの種類のプロセッサのコアとし得る。
図3には1つのプロセッサ300のみが示されているが、処理素子は、他の例では、
図3に示したプロセッサ300を2つ以上含んでいてもよい。プロセッサ300はシングルスレッド型のコアであってもよいが、少なくとも1つの実施形態において、プロセッサ300は、コア当たり2つ以上のハードウェアスレッドコンテキスト(すなわち“論理プロセッサ”)を含み得るマルチスレッド型であってもよい。
【0028】
図3はまた、プロセッサ300に結合されたメモリ302を例示している。メモリ302は、当業者に知られ、あるいはその他の方法で当業者に利用可能な多様なメモリ(メモリ階層の様々なレイヤを含む)のうちの何れかとし得る。メモリ302は、プロセッサ300によって実行される、1つ以上の命令とし得るコード304を含み得る。プロセッサ300は、コード304によって指示される命令群からなるプログラムシーケンスに従う。各命令がフロントエンドロジック306に入力され、1つ以上のデコーダ308によって処理される。デコーダは、その出力として、所定のフォーマットにて例えば固定幅のマイクロオペレーションなどのマイクロオペレーションを生成し、あるいは、元のコード命令を反映したその他の命令、マイクロ命令若しくは制御信号を生成し得る。フロントエンドロジック306はまた、実行のために概してリソースを割り当てるとともに変換命令に対応する処理を待ち行列に入れるレジスタ改名ロジック310及びスケジューリングロジック312を含んでいる。
【0029】
プロセッサ300は、一組の実行ユニット316−1乃至316−Nを有する実行ロジック314を含むように示されている。一部の実施形態は、特定の機能又は機能セットに専用の複数の実行ユニットを含み得る。他の実施形態は、特定の機能を果たすことができる1つの実行ユニットのみを含み得る。実行ロジック314は、コード命令によって指定される処理を実行する。
【0030】
コード命令によって指定される処理の実行の完了後、バックエンドロジック318がコード304の命令を回収する。一実施形態において、プロセッサ300は、命令のアウトオブオーダー実行を可能にするが、命令のインオーダー回収を必要とする。回収ロジック320は、当業者に知られた多様な形態(例えば、リオーダーバッファ又はそれに類するもの)を取り得る。斯くして、プロセッサ300は、少なくとも、デコーダによって生成される出力、レジスタ改名ロジック310によって使用されるハードウェアレジスタ及びテーブル、及び実行ロジック314によって変更されるレジスタ(図示せず)に関して、コード304の実行中に変換される。
【0031】
図3には示されていないが、処理素子は、プロセッサ300を有するチップ上にその他の素子を含んでいてもよい。例えば、処理素子は、プロセッサ300とともにメモリ制御ロジックを含み得る。処理素子は、I/O制御ロジックを含んでいてもよく、且つ/或いはメモリ制御ロジックと統合されたI/O制御ロジックを含んでいてもよい。処理素子はまた、1つ以上のキャッシュを含んでいてもよい。
【0032】
図4は、一実施形態に従ったソース・インストラクション・セット・アーキテクチャの命令群の実行順序の一例を示している。ソースISA402は、ソース条件コードブロック404及び実行ロジック406を含んでいる。ソース条件コードブロック404は命令410、412、414、416を含んでいる。
図4の例示は、時間408上での命令410−416の実行を描いている。
【0033】
例示として、命令410はアドレス0x102と処理IT 0x06とを含んでいる。この例において、IT 0x06は、ソース条件コードブロック404の開始418の処理とし得る。
【0034】
当初の条件状態420は0x06とし得る。条件状態420から、実行ロジック406は命令412の第1の条件を分解し得る。実行ロジック406は条件ビット422を識別し得る。条件ビット422はZFLAGを含み得る。ZFLAGが“1”である場合、実行ロジック406は命令412を実行する。命令412を実行した後、実行ロジック406は条件状態424へと進んで、条件ビット426を分解し得る。そして、条件ビット426のZFLAGが“1”であるので、実行ロジック406は命令414を実行し得る。
【0035】
このプロセスが、ソース条件コードブロック404の終了まで、条件ビット430、条件状態428及び命令416を用いて繰り返される。一部のシステムにおいて、末尾に“8”を有する条件状態428は、条件コードブロックの終了を指し示す。例えば、条件状態428は0x18であり、一部のシステムにおいて条件コードブロックの終了を指し示し得る。
【0036】
一部の実施形態において、実行ロジック406の一プロセス例は、以下を決定することで開始し得る:1)当初の条件状態0x06(16進数)はバイナリ(2進数)フォーマットで“0000 0110”である、2)上位4ビットは“0000”であり、これは条件ビットZFLAG=1を意味する、及び3)下位4ビットは“0110”であり、これは、条件コードブロックが終了しておらず且つ実行されるべき更なる命令を含むことを意味する“1000”(1000は、8に等価な2進数である)に等しくない。
【0037】
図5は、一実施形態に従った最適化モジュール514を備えたバイナリトランスレーションシステム502を例示している。バイナリトランスレーションシステム502は、ソースバイナリコード503からのコードを、ターゲットISA504上のコードへと変換する。一実施形態例において、バイナリトランスレーションシステム502は、インタープリタモジュール506と比較して、ソースバイナリコード503内に位置する条件コードブロック505をエミュレートするためのバイナリトランスレーションを高速化することができる。バイナリトランスレーションシステム502は、条件状態の前進及び条件ビットの分解をエミュレートすることを必要とせず、それにより変換コード516における時間を節減する。
【0038】
一実施形態例において、ソースバイナリコード503の条件コードブロック505は、
図4に示される命令例を含む。バイナリトランスレーションシステム502は、インタープリタモジュール506、トランスレータモジュール508、及びランタイム環境モジュール510を含み得る。トランスレータモジュール508は
図1のトランスレータモジュール118の一例とし得る。バイナリトランスレーションシステム502は、
図1に示したバイナリトランスレーションシステム110の一例とし得る。ソースバイナリコード503は
図1のソースバイナリコードブロック130の一例とし得る。
【0039】
インタープリタモジュール506は、ソースバイナリコード503を実行する解釈エンジンとして構成されることができる。インタープリタモジュール506はまた、ホットコードトレースを識別したときにトランスレータモジュール508の使用をトリガーすることができる。ホットコードトレースは、ホット基本ブロックとも称され得る。バイナリトランスレーションシステム502は、“ホット”な(すなわち、頻繁に実行される)基本ブロックを検出するプローブ(カウンタ)を実装し得る。ホットコードトレースの一例は、例えば、条件コードブロック505とし得る。
【0040】
トランスレータモジュール508は、各ホットコードトレースについて、ソースバイナリコード503のターゲットISA504へのバイナリトランスレーションを実行する。トランスレータモジュール508は、変換されたコードブロックを格納する変換コードキャッシュ512を有する。変換コードキャッシュ512は
図1の変換コードキャッシュ122の一例とし得る。
【0041】
トランスレータモジュール508はまた、変換中にソースバイナリコード503を最適化する最適化モジュール514を有する。最適化モジュール514は、ソースバイナリコード503を変換コード516へと変換することによって、ソースバイナリコード503を最適化し得る。変換コード516は、前進及び分解の処理(又は命令)を排除したソースバイナリコード503のプレ実行から生成され得る。最適化モジュール514は、ソースバイナリコード503のプレ実行中に条件の一部又は全てを識別することができるようにされ得る。
【0042】
最適化モジュール514は、条件コードブロック505についてソースISA−ソースISA変換を実行することができる。最適化モジュール514はまた、条件指定命令上の複数の条件をデコードし、条件指定命令を除去し、そして、各命令がそれ自身のエンコードされた条件ビットを有するかのように条件コードブロックを一連のコードへと変換する。この例において、IT 0x06は条件コードブロック505の開始の命令とし得る。
【0043】
ランタイム環境モジュール510は、変換されたコード(変換コード)をターゲットISA504上で走らせるための支援環境及びヘルパーライブラリを提供する。
【0044】
動作上の観点で、また、特定の一実施形態に関して、トランスレータモジュールの動作フローは以下のように機能する:ソースバイナリアプリケーションがバイナリトランスレーションシステム502上で起動するとき、インタープリタモジュール506がソースバイナリコード503を実行し始める。条件コードブロック505が(例えば、ホットコードトレースとして)検出されると、インタープリタモジュール506は、ソースISA−ターゲットISA変換を実行するようトランスレータモジュール508をトリガーする。変換中、トランスレータモジュール508は、条件コードブロック505に出会うと、最適化モジュール514を呼び出してソースバイナリコード503の変換を実行する。
【0045】
そして、最適化モジュール514は、条件コードブロック505の条件指定命令上の条件ビットをデコードし、条件状態を静的に前進させ且つ後続の各命令上に条件ビットを分解し、最終的に、条件コードブロック505の条件指定命令を除去する。斯くして、最適化モジュール514は、あたかも各命令がそれ自身のエンコードされた条件ビットを有するかのように、条件コードブロック505を一連のコードへと変換する。
【0046】
また、トランスレータモジュール508は、ソースISA−ターゲットISA変換を実行する。条件コードブロック505内のソースバイナリコード503に対し、トランスレータモジュール508は、各条件コードブロック命令の変換が厳密にプログラム順であること、すなわち、命令の並べ換えが行われないことを保証する。条件コードブロック505のアドレスマッピングも、システムの条件状態リカバリテーブル518に記録され得る。
【0047】
図6は、一実施形態に従った最適化モジュールを用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー600は、ステップ610にて、インタープリタモジュールがソース命令を解釈するときに開始し得る。命令を解釈することによって、インタープリタモジュールは、各命令を取り出し、該命令を分析し、該命令をソースISA上で実行する。解釈中に、ステップ620にて、インタープリタモジュールはホットトレース(又はホット基本ブロック)を識別し得る。
【0048】
ホットトレースが識別されると、ステップ630にて、バイナリトランスレーションシステムは、変換を実行するためにトランスレータモジュールを提供し得る。トランスレータモジュールは、ソース命令を変換された命令(変換命令)へと変換(“トランスレート”とも称する)する。1つ以上の実施形態において、変換命令はターゲット命令を含み得る。ターゲット命令は、ターゲットバイナリコード又は変換コードとも称され得る。ステップ640にて、トランスレータモジュールは、ホットトレース内で条件コードブロックを識別し得る。
【0049】
条件コードブロックを識別したことに応答し、ステップ650にて、トランスレータモジュールは、上記変換(“トランスレーション”とも称する)を最適化モジュールに引き渡し得る。最適化モジュールはトランスレータモジュールの一部とし得る。次に、最適化モジュールは、ステップ660にて、条件コードブロックのプレ実行を行い得る。このプレ実行は、そのブロック内の条件ビット群を分解して、事前分解された条件セットを形成するとともに、条件状態の前進のエミュレーションを不要にし得る。これらのコマンドの削減は、変換コードを一層効率的なものにする。
【0050】
プレ実行の後、ステップ670にて、最適化モジュールは、ターゲットISA上で動作する中間命令セットへの変換時に、事前分解された条件セットでソース命令をエンコードし得る。新たな命令の各々は、条件情報でエンコードされた結合命令セットとなり得る。この例において、トランスレータモジュールは、条件状態を識別して進めるためにリソースを費やす必要がない。また、当初の条件指定命令はもはや必要でない。その後、このプロセスは終了する。
【0051】
図7は、一実施形態に従ったリカバリテーブル718を備えたバイナリトランスレーションシステム702を例示している。
図7のバイナリトランスレーションシステム702は、
図5のバイナリトランスレーションシステム502と同様である。例えば、バイナリトランスレーションシステム702は、ソースバイナリコード703からのコードをターゲットISA704用のコードへと変換する。バイナリトランスレーションシステム702はまた、インタープリタモジュール706、トランスレータモジュール708、及びランタイム環境モジュール710を含んでいる。トランスレータモジュール708は最適化モジュール714と変換コードキャッシュ712とを含んでいる。バイナリトランスレーションシステム702のランタイム環境モジュール710は、リカバリテーブル718を含んでいる。また、バイナリトランスレーションシステム502及び702内の様々な構成要素は、様々な実施形態に係るその他のバイナリトランスレーションシステムを形成するように様々に組み合わされ得る。
【0052】
変換コードキャッシュ712内の命令の実行中、時々、割込又は例外711が発生する。例外711中、トランスレータモジュール708は、最適化モジュール714によって事前分解された条件状態情報を喪失することがある。従って、トランスレータモジュール708は、条件状態情報を復元する助けとなるリカバリテーブル718を閲覧し得る。
【0053】
動作上の観点で、また、特定の一実施形態に関して、条件コードブロック705の変換の変換コードにおいて例外711が発生するとき、条件状態リカバリプロセスは、ランタイム環境モジュール710が例外711を捕らえ、その例外命令のアドレスをリカバリテーブル718内で特定することを含み得る。そのアドレスがリカバリテーブル718内にない場合、ランタイム環境モジュール710は通常の状態リカバリプロセスを行う。そのアドレスをリカバリテーブル718内で発見することができた場合には、ランタイム環境モジュール710は、ソースバイナリコード703内の元の条件コードブロック705のアドレスを取り出し、例えば
図8及び9に示すプロセスといった、条件状態リカバリプロセスを開始する。
【0054】
アドレスから、ランタイム環境モジュール710は、条件指定命令内の条件ビットを再デコードし、障害が発生した障害点まで条件状態を再度進め、そして、障害を発生したソースISA命令の条件ビット群を再分解することができる。従って、障害点の条件状態を正確に復元することができる。ランタイム環境モジュール710は、その他のソースISA状態を復元し得る。全てのソースISA状態が復元されると、バイナリトランスレーションシステム702は安全にインタープリタモジュール706を呼び出すことができる。
【0055】
条件状態リカバリプロセスは、入力として、ターゲットISAコードにおける例外/割込ipを含むことができる。このプロセスは、出力として、復元された条件状態を含むことができる。それに従って擬似コードが以下のように構成され得る:
let eip=ターゲットISAコードにおける例外/割込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)。
【0056】
図8は、一実施形態に従った条件状態リカバリテーブルを備えたバイナリトランスレーションシステム(例えば、
図7に示したバイナリトランスレーションシステム702)によるバイナリトランスレーション方法を例示する簡略化したフローチャート800である。このフローは、ステップ810にて、バイナリトランスレーションシステム(BTS)が変換コードの命令の実行中に例外/割込を識別するときに開始し得る。そして、ステップ820にて、バイナリトランスレーションシステムは割り込まれた命令のアドレスを検索する。
【0057】
次に、ステップ830にて、ターゲットアドレスを用いて、バイナリトランスレーションシステムはリカバリデーブルを用いてソースアドレスを特定することができる。ソースアドレスは、エントリーアドレスをオフセットとともに含み得る。エントリーアドレスは、ソースバイナリコード内の条件コードブロックの開始アドレスとし得る。さらに、オフセットに命令サイズが掛け合わされ得る。例えば、
図7に示すように、復元されるソースアドレスは、0x102(エントリー)+2(オフセット)×2(命令サイズ)となり得る。例えば、命令サイズは2バイト命令で2とし得る。
【0058】
ソースアドレスが特定されると、ステップ840にて、バイナリトランスレーションシステムは、そのソースアドレスにおける対応する当初条件状態を特定することができる。当初条件状態は、ソースISAにおける条件コードブロックの当初の状態とすることができ、割り込まれたターゲットISAコード命令に変換されたソース命令を含む。
【0059】
ステップ850にて、バイナリトランスレーションシステムは、トランスレータモジュールにおける現在の条件状態を、ソースアドレスにおいて特定された当初条件状態に設定する。しかしながら、当初条件状態は所望の状態ではない。所望の状態を見出すため、ステップ860にて、バイナリトランスレーションシステムは、オフセットの値に基づく回数だけ条件状態を進める必要があり得る。条件状態を進める処理は
図7に示されている。条件状態が適切な回数だけ進められると、ステップ870にて、バイナリトランスレーションシステムは、例外時の(すなわち、障害を発生したアドレスにおける)ソースバイナリコードの現在条件状態を復元し得る。
【0060】
図9は、一実施形態に従ったリカバリテーブルを用いて条件状態を前進させる方法を例示する簡略化したフローチャート900である。
図9のフローは、
図8のフロー800の一部を補足し得るものである。バイナリトランスレーションシステムは、割り込まれたソースバイナリコード命令の条件状態を位置特定するまで条件を調べる。正確な条件を見出すため、バイナリトランスレーションシステムはループを開始する。
【0061】
バイナリトランスレーションシステムは、ステップ910にて、変数を“1”に設定する。そして、ステップ920にて、バイナリトランスレーションシステムは、リカバリテーブル内で特定されたオフセットに上記変数が達したかを決定する。
【0062】
変数がオフセットに達した場合、ステップ960にて、バイナリトランスレーションシステムは、ターゲットバイナリコードにおける例外時の条件を、ソースバイナリコードにおける現在条件状態に設定する。
【0063】
変数がオフセットに一致しない場合、ステップ930にて、バイナリトランスレーションシステムは条件状態を進める。ステップ940にて、バイナリトランスレーションシステムは、現在条件状態を、進められた条件状態に設定する。また、ステップ950にて、バイナリトランスレーションシステムは変数を進める。そして、このプロセスは、ステップ920で開始して繰り返される。リカバリテーブル内で特定されたオフセットに変数が達すると、ステップ960にて、例外時のソースISAの現在条件状態が復元され、その後、このプロセスは終了する。
【0064】
本開示に係る実施形態は、バイナリトランスレーション中に割込又は例外が発生するときに、現行システムでも、実行をゆっくり且つ安全に終了させるようにインタープリタまで後戻りすることによって、ソースバイナリコードの状態を復元し得ることを認識している。しかしながら、本開示に係る実施形態は、トランスレータが条件状態を復元するプロセスを提供する。
【0065】
図10Aは、一実施形態に従った並列乗算加算命令を識別する方法を例示する簡略化したフローチャートである。フロー1000は、ステップ1010にて、トランスレータモジュールが命令を受信するときに開始し得る。
【0066】
そして、ステップ1020にて、トランスレータモジュールは、その命令が並列乗算加算(parallel-multiply-addition)命令であるかを決定する。命令が並列乗算加算命令でない場合、このプロセスは終了する。命令が並列乗算加算命令である場合、ステップ1025にて、トランスレータモジュールは、該並列乗算加算命令についての変換を始動する。トランスレータモジュールは、並列乗算加算命令を:
Vector1=X1X0
Vector2=Y1Y0
Dest_tmp=X1*Y1 and X0*Y0
Dest=X1*Y1+X0*Y0
を含むものとして識別することができ、dest(宛先)アドレスが並列乗算加算命令の結果を含む。
【0067】
図10Bは、一実施形態に従った並列乗算加算命令を用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー1001は、ステップ1030にて、命令内で指し示されるソースベクトル上での並列乗算加算関数を実行する変換コードをトランスレータモジュールが生成するときに開始し得る。例えば、2つのソースベクトルが存在する場合、それらが乗算されて得られたベクトルが宛先ベクトルとして参照されることがある。
【0068】
ステップ1040にて、変換コードにおいて、上記関数の実行が完了すると、変換コードは桁あふれが起こったかを決定する。桁あふれを識別するため、変換コードは宛先ベクトルを或る定数と比較する。例えば、一実施形態において、宛先ベクトルが[0x1<<(S*N−1)]の値に等しい場合、桁あふれが検出される。この式において、“S”はベクトル要素のサイズであり、“N”はベクトル要素の個数である。故に、(S*N)がベクトルサイズである。桁あふれが検出されなかった場合、ステップ1050にて、桁あふれフラグが“0”に設定される。桁あふれが検出された場合、ステップ1060にて、桁あふれフラグが“1”に設定される。
【0069】
本開示に係る実施形態は、並列乗算命令及びその変形(加算、減算、拡張)に関するバイナリトランスレーションの効率を、ターゲットISAが同じセマンティックスでこれらの命令を提供しないときに向上させる。
【0070】
動作上の観点で、また、特定の一実施形態に関して、並列乗算加算は、第1のソースベクトルの個々の符号付き要素に、第2のソースベクトルの対応する符号付き要素を掛け合わせ、暫定的な符号付き二重要素結果を生成する。そして、隣り合う二重要素結果が足し合わされて、宛先ベクトルに記録される。
【0071】
他の実装例において、並列乗算命令の変形は、僅かに異なるセマンティックスを有し得る。桁あふれは加算中に起こり得る。加算を減算として、ターゲットISAの対応部分を有しない並列乗算減算を導き出してもよい。また、最終結果に第3のソースベクトルが加算されてもよい。
【0072】
本開示に係る実施形態は、ターゲットISAの命令の一部のみがマッピングされるときに、どのように並列乗算命令及びその変形を基本演算に効率的に変換するかを示すプロセスを提供する。1つのベクトルは幾つかの要素を含み得る。ここで、(S)は要素サイズを表し、(N)はベクトルの要素の個数を表し、(N*S)はベクトルサイズである。
【0073】
最も近いターゲットISA命令を並列乗算命令及びその変形内に実装するため、並列乗算加算関数の桁あふれ及び不存在が変換中に効率的にエミュレートされるべきである。
【0074】
桁あふれは、並列乗算加算において、加算結果が特定の桁あふれ境界値に達する場合にのみ発生する。この状況において、桁あふれフラグは設定される必要がある。
【0075】
桁あふれの擬似コードは:
dest=parallel_multiply_add(src1,src2)
if(dest==0x1<<(S*N-1)) O_flagを生成
である。
【0076】
本開示に係る実施形態は、結果値を或る定数値と比較することによって桁あふれ条件を検出し得る。並列乗算加算が桁あふれし得る条件が1つのみ存在することがあり得る。例えば、乗算演算の全ての要素が最大絶対値の負の0x1<<(S−1)であり、且つ乗算演算が正の01x<<(2S−2)を生成するときである。これら2つの正数が加算されるとき、それは0x1<<(2S−1)を生成する。ベクトルサイズは、桁あふれの境界値を生じさせるこの大きい結果を保持することができない。
【0077】
例えば、要素サイズが8ビットであり、且つ結果サイズが16ビットであると仮定する。また、vector1=0x8080、且つvector2=0x8080であると仮定する。この場合、parallel_multiply_add(vector1,vector2)=0x80*0x80+0x80*0x80=0x4000+0x4000=0x8000となる。この結果は負数であり、故に、桁あふれが発生する(2つの正数が1つの負数へと加算される)。従って、0x8000が桁あふれ境界値として決定される。
【0078】
並列乗算加算の変形が桁あふれフラグ(O_flag)を設定することを要するとき、桁あふれ情報を検出することは、正確なO_flagを効率的に生成する助けとなる。並列乗算加算の変形が、この並列乗算加算の結果に第3のソースベクトルを加算するとき、並列乗算加算中に発生した桁あふれは、最後の加算の計算に影響を及ぼす。故に、最初の加算及び最後の加算の間に発生した桁あふれ条件が組み合わされる。並列乗算加算にて桁あふれを検出することは、組み合わされた桁あふれフラグを計算するための効率的なコードを生成する助けとなる。
【0079】
図11Aは、一実施形態に従った並列乗算減算命令を識別する方法を例示する簡略化したフローチャートである。フロー1100は、ステップ1110にて、トランスレータモジュールが命令を受信するときに開始し得る。
【0080】
そして、ステップ1120にて、トランスレータモジュールは、その命令が並列乗算減算(parallel-multiply-subtraction)命令であるかを決定する。一実施形態において、第1のソースベクトルと第2のソースベクトルとの2つのベクトルが存在し得る。各ベクトルは、上半分と下半分とを有し得る。例えば、第1のソースベクトルがX1X0である場合、下半分はX0である。同様に、第2のソースベクトルはY1Y0を有し得る。この例において、値“Y0”はネゲートされてもよい。減算されるべきベクトルは第2のソースベクトルとし得る。例えば、第1のソースベクトル−第2のソースベクトルなる式とし得る。
【0081】
ステップ1120の決定で、命令が並列乗算減算命令でない場合、このプロセスは終了する。命令が並列乗算減算命令である場合、ステップ1125にて、トランスレータモジュールは、該並列乗算減算命令についての変換を始動する。
【0082】
図11Bは、一実施形態に従った並列乗算減算命令を用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー1101は、ステップ1130にて、第2のソースベクトルの下位要素についてビット毎のnotを実行するように構成された変換コードをトランスレータモジュールが生成するときに開始し得る。該要素がビット毎not演算によって変更された後、ステップ1135にて、命令内で指し示されたソースベクトルに対して並列乗算加算関数を実行するように変換コードが構成される。例えば、2つのソースベクトルが存在する場合、それらが掛け合わされて結果ベクトルが生成される。そして、ステップ1140にて、第1のソースベクトルの下位要素が符号拡張されて結果ベクトルに加算される。この最終ベクトルは宛先ベクトルとして参照され得る。
【0083】
次に、フローは、桁あふれを識別することに移る。ステップ1150にて、宛先ベクトルで桁あふれが存在するかを決定するように変換コードが構成され得る。変換コードは、宛先ベクトルを或る定数と比較することで桁あふれを識別するように構成され得る。例えば、変換コードは、ベクトルを定数[0x1<<(S*N−1)+符号拡張0x1<<(S−1)]と比較するように構成され得る。
【0084】
桁あふれが存在する場合、ステップ1160にて、得られた宛先ベクトルを或る一定値に設定するように変換コードが構成され得る。その後、このプロセスは終了し得る。桁あふれが存在しない場合、ステップ1170にて、上位要素が下位要素から減算されたか、それとも下位要素が上位要素から減算されたかを決定するように変換コードが構成され得る。例えば、上述の演算において、下位要素が上位要素から減算されると仮定する。しかしながら、その逆が行われる場合には、宛先ベクトルはビット毎のnot演算を適用される必要がある。従って、ステップ1170で、下位要素が上位要素から減算される、換言すれば、上位要素が下位要素から減算されない、と決定される場合、このプロセスは終了し得る。一方、ステップ1170で、上位要素が下位要素から減算されると決定される場合、ステップ1180にて、変換コードは、宛先ベクトル上でビット毎のnot演算を実行するように構成される。その後、このプロセスは終了し得る。
【0085】
動作上の観点で、また、特定の一実施形態に関して、並列乗算減算(加算が減算になる)を変換するとき、並列乗算減算を実行することに並列乗算加算が使用され得るように、第2のソースベクトルの下位要素は演算前にネゲートされる必要がある。
【0086】
並列乗算減算1の擬似コードは:
Src2.low_Sbit=not(src2.low_Sbit)
dest’=parallel_multiply_add(src1,src2)
dest=dest’+Sign-extend(src1.low_Sbit)
である。
【0087】
この方法の第2部分において、桁あふれが並列乗算加算にて発生し得る。これは、入力が特定値を保持するときに発生し、故に、最終結果が直接的に決定され得る。
【0088】
並列乗算減算2の擬似コードは:
If(overflow検出)
{
dest=(0x1<<(S*N-1))+sign-extend(0x1<<(S-1))
}
である。
【0089】
この方法の第3部分において、並列乗算減算は、上位要素の乗算結果−下位要素の乗算結果、又は下位要素の乗算結果−上位要素の乗算結果という、2つの異なる減算順序を有する。上述の段落は、上位要素の乗算結果−下位要素の乗算結果に向けられている。それに代わる状況において、下位要素の乗算結果から上位要素の乗算結果が減じられるときには、最終結果のネゲーションが行われる。
【0090】
並列乗算減算3の擬似コードは:
dest=
〜dest
である。
【0091】
様々な実施形態が、ターゲットバイナリコードが、並列乗算命令の変換において発生する桁あふれ及び部ゲーションの問題に対して対応する等価なものを提供しないとき、ソースバイナリコードのターゲットバイナリコードへの変換を提供する。
【0092】
図10及び11に関し、並列乗算命令の現行の変換は、一まとめにされた要素の乗算をエミュレートするためにターゲットISAの通例の乗算命令を使用している。“N”個の要素を含む2つのベクトルの並列乗算を実行するため、“N”回の通例の乗算が実行されている。また、ベクトルから要素を抽出することは、追加のシフト演算を必要としている。桁あふれフラグは加算中に生成される。しかしながら、この命令のセマンティックスが第3の加算を必要とする場合、それは第3のベクトルへの加算を実行するために使用されるべきである。この変換は10より多い命令によって実行されることがある。
【0093】
本開示に係る実施形態は、“N”個の乗算をまとめて1つの演算として結合して、並列乗算加算を効率的に変換する。換言すれば、幾つかの通例の乗算命令をエミュレートするために、1つの並列乗算命令を使用することができる。ここに開示される実施形態は、結果値を或る一定値と比較することによって桁あふれ条件を検出する。また、ここに開示される実施形態は、並列乗算減算を取り扱うために、ソースベクトルの一要素をネゲートする。新たな変換が、本開示に係る実施形態によって提案されるバイナリトランスレーションシステムにインポートされ得る。
【0094】
桁あふれ処理のアルゴリズムの一例は:
入力:SIA_INSTと表記されるソースISA命令のシーケンス
出力:O_flagと表記される桁あふれフラグ情報
アルゴリズム:
Begin
dest=parallel_multiply_add(src1,src2)
if(dest==0x1<<(S*N-1))
O_flagを生成
Endif
End
のように構成され得る。
【0095】
並列乗算減算アルゴリズムの一例は:
入力:SIA_INSTと表記されるソースISA命令のシーケンス
出力:TIA_INSTと表記されるターゲットISA命令のシーケンス
アルゴリズム:
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
のように構成され得る。
【0096】
図12Aは、一実施形態に従ったパーシャル(部分的)ロング乗算命令を識別する方法を例示する簡略化したフローチャートである。フロー1200は、ステップ1210にて、トランスレータモジュールが命令を受信するときに開始し得る。
【0097】
そして、ステップ1220にて、トランスレータモジュールは、その命令がパーシャルロング乗算(partial-long-multiply)命令であるかを決定する。命令がパーシャルロング乗算命令でない場合、このプロセスは終了する。命令がパーシャルロング乗算命令である場合、ステップ1225にて、トランスレータモジュールは、該パーシャルロング乗算命令についての変換を始動する。
【0098】
図12Bは、一実施形態に従ったパーシャルロング乗算命令を用いたバイナリトランスレーション方法を例示する簡略化したフローチャートである。フロー1201は、ステップ1230にて、命令の下のオペランドの上半分及び下半分を抽出して2つのオペランドを形成する変換コードをトランスレータモジュールが生成するときに開始し得る。また、ステップ1240にて、元のオペランドの下半分をハーフサイズからフルサイズへとゼロ拡張するように変換コードが構成され得る。次に、ステップ1250にて、元のオペランドの上半分に対してハーフサイズからフルサイズへと算術シフトライト(arithmetic-shift-right)を行うように変換コードが構成され得る。
【0099】
次に、ステップ1260にて、元のオペランドの各半分を第2のオペランドと乗算して2つの積を形成するように変換コードが構成され得る。最後に、ステップ1270にて、これら2つの積を足し合わせるように変換コードが構成され得る。これらの積を足し合わせるため、算術シフトライトを用いることによって下半分の乗算の積をフルサイズからハーフサイズへと調整するように変換コードが構成され得る。その後、このプロセスは終了する。
【0100】
本開示に係る実施形態は、パーシャルロング乗算命令(例えば、ARMにおけるHalfword Multiply命令による符号付きWord)に関するバイナリトランスレーションの効率を、ソースISA及びターゲットISAが同じセマンティックスでこれらの命令を提供しないときに向上させる。
【0101】
動作上の観点で、また、一実施形態において、パーシャルロング乗算命令は、符号付きのロングビット量に符号付きのショートビット量を乗算して、パーシャルロングビット結果を生成する。例えば、16ビット量に32ビット量が乗算されて48ビット結果を生成し;該48ビット結果の上位32ビットは記憶されるが該48ビットの下位16ビットは無視される。命令のセマンティックに応じて追加の累算関数が実行され得る。
【0102】
異なるISAは乗算命令の異なる変形を実装していることがある。典型的に、ソースベクトルは同じデータサイズを有する。しかしながら、異なるデータサイズを有する複数のソースベクトルの乗算命令を変換するとき、短い方のデータサイズを長い方のデータサイズに自動拡張し、長い乗算(ロング乗算)命令を用いて計算を実行し、宛先ベクトルに必要なビットを抽出する、というのは非効率である。
【0103】
ロング乗算は短い乗算(ショート乗算)より高コストになり得る。ショート乗算と比較して、ロング乗算は変換にとって幾つかの欠点を有する。ロング乗算では効率が低い。ロング乗算は長い待ち時間を有するとともに両方のポートを使用し、パイプラインを制限してしまう。レジスタ制約も存在する。ターゲットISA命令は或る特定のレジスタをオペランドレジスタとして占有することがあり、それにより、その他の構成要素の最適化を妨げてしまい得る。
【0104】
本開示に係る実施形態は、2つのショート乗算命令を用いてロング乗算命令をエミュレートすることによって、パーシャルロング乗算命令を効率的に変換する方法を提供する。これらの実施形態は、本開示において以下の表記を使用する。Halfword命令による符号付き乗算Word(signed multiply Word by Halfword instruction)をSMULWHと表記する。命令ベクトルのショートビットサイズをSBと表記し、ロングビットサイズをLBと表記する(LB=2SB)。
【0105】
乗算結果の一部のみが必要とされる場合、2つのショート乗算を用いて1つのロング乗算をエミュレートすることができる。それは、ロングビットのソースベクトルを2つの部分(下位ビットの半分及び上位ビットの半分)へと二等分し、これら2つの部分に別々に第2のショートビットベクトルを乗算し、そして、これら2つの中間結果を足し合わせて最終結果を生成する。2つの中間結果を対応し合う位置に整列させるために、加算の前にシフトが実行される。
【0106】
パーシャルロング乗算命令に関する変換は一般に2つの関数を含む。第1の関数がロングビットソースベクトル(src_long)の2つの部分を用意する。下位半分の拡張(extend(src_long.low_half))及び上位半分のシフト(src_long>>SB)が実行される。下位半分の拡張はゼロ拡張とすることができ、上位半分のシフトは算術シフトとすることができる。
【0107】
第2の関数が、これら2つの部分とショートビットベクトルとを乗算し、それらの中間結果を足し合わせる。それは、一方の乗算結果をシフト(low_multiply_result<<SB)し、その後、2つの乗算結果を足し合わせて最終結果を生成する。ソースISA命令のセマンティックスに応じて、上記最終結果に第3のソースベクトルが加算されてもよい。
【0108】
典型的に、異なるデータサイズを有する2つのベクトルの乗算に遭遇するとき、ロングビットのデータサイズが演算サイズとして選択され、ショートビットのデータサイズのベクトルがロングビットのデータサイズのベクトルへと符号付き拡張あるいは符号なし拡張され、ロング乗算命令を用いて演算が実行される。1つの部分(パーシャル)乗算命令を、6個程度のターゲット命令と、2つの追加の特定レジスタ保存及び復元命令とに変換することができる。しかしながら、1つのロング乗算はショート乗算より遙かに遅いものとなり得る。さらに、ロング乗算は、特定レジスタの使用が余分な保存及び復元の作業を生じさせ得るので、レジスタ制約を有する。これら2つの点は、変換の効率を低下させ得るものである。
【0109】
本開示に係る実施形態は、1つのロング乗算を2つのショート乗算に分割する。それは、追加の特定レジスタ保存・復元作業を排除し、レジスタの割当てを単純化する。1つのソースISA命令を6個のターゲットISA命令に変換することができる。
【0110】
パーシャルロング乗算命令に関する命令トランスレーションアルゴリズムの一例は:
入力:SIA_INSTと表記されるソースISA命令のシーケンス
出力:TIA_INSTと表記されるターゲットISA命令のシーケンス
アルゴリズム:
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
のように構成され得る。
【0111】
なお、特定の実施形態例において、ここに説明されたバイナリトランスレーション関数は、1つ以上の有形媒体にエンコードされたロジックによって実行され得る(例えば、特定用途向け集積回路(ASIC)内に設けられた組み込みロジック、デジタル信号プロセッサ(DSP)命令、プロセッサによって実行されるソフトウェア(場合により、オブジェクトコード及びソースコードを含む))。これらの例のうちの一部において、メモリ素子は、ここに記載された処理に使用されるデータを格納することができる。これには、実行されて本明細書に記載の動作を行うソフトウェア、ロジック、コード又はプロセッサ命令を記憶することができるメモリ素子が含まれる。プロセッサは、本明細書にて上述された処理を達成するために、データに関する如何なる種類の命令をも実行することができる。一例において、プロセッサは、要素又は項目(例えば、データ)を1つの状態若しくはものから別の状態若しくはものへと変換し得る。他の一例において、ここに説明された動作は、固定ロジック又はプログラム可能ロジック(例えば、プロセッサによって実行されるソフトウェア/コンピュータ命令)を用いて実装されることができ、ここに特定された要素は、何らかの種類のプログラマブルプロセッサ、プログラマブルデジタルロジック(例えば、FPGA、EPROM、EEPROM)、若しくはデジタルロジック、ソフトウェア、コード、電子命令を含むASIC、又はこれらの好適な組合せとし得る。
【0112】
一実装例において、バイナリトランスレーションシステムは、ここに説明されたバイナリトランスレーション動作を達成するためのソフトウェアを含み得る。バイナリトランスレーションシステムは、ここに記載されたようなバイナリトランスレーション動作を達成する際に使用される情報を格納するメモリ素子を含むことができる。また、バイナリトランスレーションシステムは、ソフトウェア又はアルゴリズムを実行して、本明細書にて開示されたバイナリトランスレーション動作を実行することが可能なプロセッサを含み得る。これらの装置は更に、適宜、特定のニーズに基づき、好適なメモリ素子(ランダムアクセスメモリ(RAM)、ROM、EPROM、EEPROM、ASICなど)、ソフトウェア、ハードウェア、又はその他の好適コンポーネント、デバイス、素子、又は物体内に情報を保持してもよい。ここに記載されるメモリ項目(例えば、データベース、テーブル、ツリー、キャッシュなど)は何れも、“メモリ要素”なる広い用語の範囲内に包含されると解されるべきである。同様に、本明細書に記載される潜在的な処理素子、モジュール及び機械は何れも、‘プロセッサ’なる広い用語の範囲内に包含されると解されるべきである。
【0113】
なお、この例及びここに提示された数多くのその他の例では、2つ、3つ又は4つの様子に関して相互作用を説明されているかもしれない。しかしながら、これは明瞭化且つ単なる例示の目的で行われたものである。一定の場合、所与のフローの組の機能のうちの1つ以上を、限られた数の要素のみを参照して記述する方が容易となり得る。認識されるように、バイナリトランスレーションシステム(及びそれらの教示)は、容易に拡張可能であり、多数のコンポーネントと、より複雑化/洗練された構成及び設定とを提供し得る。従って、バイナリトランスレーションシステムの広い教示は無数のその他アーキテクチャにも適用され得るものであり、提示された例は、バイナリトランスレーションシステムの教示の範囲を限定したり抑制したりするものではない。
【0114】
また、重要なことには、上述のフロー図における処理は、バイナリトランスレーションシステムによって、あるいはその内部で実行され得るシナリオ及びパターンの一部のみを示している。これらの処理のうちの一部は、本開示の範囲を逸脱することなく、適宜に削除あるいは除去されたり、大幅に変更あるいは変形されたりし得る。また、これらの処理のうちの一部は1つ以上の更なる処理と同時あるいは並列に実行されるように説明されている。しかしながら、これらの処理のタイミングは大幅に変更され得る。上述の処理フローは、例示及び説明の目的で提供されたものである。バイナリトランスレーションシステムは、本開示の教示を逸脱することなく如何なる好適な構成、時間配列、設定及びタイミング機構が実現されてもよいという点で、かなりの柔軟性を提供する。
【0115】
特定の構成及び設定を参照して本開示を説明してきたが、これらの構成及び設定の例は、本開示の範囲を逸脱することなく有意に変形され得る。
【0116】
以下の例は、本明細書に従った実施形態に関する。1つ以上の実施形態は、バイナリトランスレーションを実行する方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、ソース命令をターゲット命令にトランスレートするステップと、ソース命令内の条件コードブロックを識別するステップであり、該条件コードブロックは複数の条件ビットを含む、ステップと、条件コードブロックを変換するステップであり、条件コードブロックについてプレ実行を実行して、条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含むステップと、を含み得る。
【0117】
1つ以上の実施形態の一例において、当該方法は更に、事前分解された条件セットでソース命令をエンコードするステップを含み得る。
【0118】
1つ以上の実施形態は、バイナリトランスレーションを実行する方法を提供し得る。当該方法は、プロセッサ上で動作するランタイム環境モジュールによって、ターゲット命令内の命令における割込を識別するステップと、割り込まれた命令のターゲットアドレスを検索するステップであり、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものである、ステップと、割り込まれた命令のソースアドレスをリカバリテーブル内で特定するステップであり、ターゲットアドレスはリカバリテーブル内でソースアドレスと対にされている、ステップと、を含み得る。
【0119】
1つ以上の実施形態の一例において、ソースアドレスを特定するステップは、割り込まれた命令のソースアドレスに関するオフセットをリカバリテーブル内で特定するステップであり、該オフセットに割り込まれた命令の命令サイズが乗算される、ステップと、ソースアドレスにおける当初条件状態を特定するステップと、現在条件状態を当初条件状態に設定するステップと、オフセットの値に基づく回数だけ現在条件状態を進めるステップと、現在条件状態を復元するステップとを含み得る。
【0120】
1つ以上の実施形態の他の一例において、現在条件状態を進めるステップは、変数を1に設定するステップと、前記オフセットが前記変数に等しいかを決定するステップと、前記オフセットが前記変数に等しいことに応答して、現在条件状態を復元するステップと、前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進めるステップと、条件状態を進めたことに応答して、進められた条件状態に合致するように現在条件状態を設定するステップと、現在条件状態を設定したことに応答して、前記変数を進めるステップと、前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定するステップを繰り返すステップと、を含み得る。
【0121】
1つ以上の実施形態は、並列乗算加算命令をトランスレートする方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、トランスレートされるべき命令を受信するステップであり、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものである、ステップと、前記複数のソースベクトルに対する並列乗算加算関数を実行し;且つ桁あふれが存在するかを決定することを実行するトランスレートされたコードを生成するステップと、を含み得る。
【0122】
1つ以上の実施形態の一例において、この方法は更に、桁あふれを決定したことに応答して、桁あふれが存在することを指し示すように桁あふれフラグを設定するステップを含み得る。
【0123】
1つ以上の実施形態は、並列乗算減算命令をトランスレートする方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、トランスレートされるべき命令を受信するステップであり、該命令は複数のソースベクトルに対する並列乗算減算関数を呼び出すものであり、前記複数のソースベクトルのうちの各ベクトルは下位要素と上位要素とを有する、ステップと、第2のソースベクトルの下位要素に対してビット毎のnot演算を実行し、前記複数のソースベクトルに対する並列乗算加算関数を実行して結果を形成し、第1のソースベクトルの下位要素を前記結果に加算し、桁あふれが存在するかを決定し、且つ桁あふれを決定したことに応答して、前記結果を一定値に設定することを実行するトランスレートされたコードを生成するステップと、を含み得る。
【0124】
1つ以上の実施形態の一例において、この方法は更に、桁あふれを決定しなかったことに応答して、上位要素が下位要素から減算されたかを決定するステップと、上位要素が下位要素から減算されたことに応答して、前記結果に対してビットごとのnot演算を実行するステップと、を含み得る。
【0125】
1つ以上の実施形態は、パーシャルロング乗算命令をトランスレートする方法を提供し得る。当該方法は、プロセッサ上で動作するトランスレータモジュールによって、トランスレートされるべき命令を受信するステップであり、該命令は複数のソースベクトルに対するパーシャルロング乗算関数を呼び出すものであり、該パーシャルロング乗算関数は第1のオペランドを有する、ステップと、前記関数の第1のオペランドを上半分と下半分とに分割し、第1のオペランドの各半分に第2のオペランドを乗算して、上半分の積と下半分の積とを形成し、且つ上半分の積を下半分の積に加算することを実行するトランスレートされたコードを生成するステップと、を含み得る。
【0126】
1つ以上の実施形態の一例において、前記関数の第1のオペランドを分割することは、下半分に対してゼロ拡張を実行し、且つ上半分に対して算術シフトライト演算を実行することを含み得る。
【0127】
1つ以上の実施形態の他の一例において、この方法はまた、下半分の積に対して算術シフトライト演算を実行することを含み得る。
【0128】
1つ以上の実施形態は、プロセッサによって実行されるときに、ソース命令をターゲット命令にトランスレートし、ソース命令内の条件コードブロックを識別し、該条件コードブロックは複数の条件ビットを含み、且つ条件コードブロックを変換し、該変換は、条件コードブロックについてプレ実行を実行して、条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含む、1つ以上の命令を格納した少なくとも1つのコンピュータ読み取り可能媒体を提供し得る。
【0129】
1つ以上の実施形態の一例において、上記少なくとも1つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、事前分解された条件セットでソース命令をエンコードする命令を含み得る。
【0130】
1つ以上の実施形態は、プロセッサによって実行されるときに、ターゲット命令内の命令における割込を識別し、割り込まれた命令のターゲットアドレスを検索し、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものであり、且つ割り込まれた命令のソースアドレスをリカバリテーブル内で特定し、ターゲットアドレスはリカバリテーブル内でソースアドレスと対にされている、1つ以上の命令を有する少なくとも1つのコンピュータ読み取り可能媒体を提供し得る。
【0131】
上記少なくとも1つのコンピュータ読み取り可能媒体の1つ以上の実施形態の一例において、ソースアドレスを特定することは、プロセッサによって実行されるときに、割り込まれた命令のソースアドレスに関するオフセットをリカバリテーブル内で特定し、該オフセットに割り込まれた命令の命令サイズが乗算され、ソースアドレスにおける当初条件状態を特定し、現在条件状態を当初条件状態に設定し、前記オフセットの値に基づく回数だけ現在条件状態を進め、且つ現在条件状態を復元する1つ以上の命令を含み得る。
【0132】
上記少なくとも1つのコンピュータ読み取り可能媒体の1つ以上の実施形態の他の一例において、現在条件状態を進めることは、プロセッサによって実行されるときに、変数を1に設定し、前記オフセットが前記変数に等しいかを決定し、前記オフセットが前記変数に等しいことに応答して、現在条件状態を復元し、前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進め、条件状態を進めたことに応答して、進められた条件状態に合致するように現在条件状態を設定し、現在条件状態を設定したことに応答して、前記変数を進め、且つ前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定することを繰り返す1つ以上の命令を含み得る。
【0133】
1つ以上の実施形態は、プロセッサによって実行されるときに、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものであり、且つ前記複数のソースベクトルに対する並列乗算加算関数を実行し、且つ桁あふれが存在するかを決定するトランスレートされたコードを生成する1つ以上の命令を有する少なくとも1つのコンピュータ読み取り可能媒体を提供し得る。
【0134】
1つ以上の実施形態の一例において、上記少なくとも1つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、桁あふれを決定したことに応答して、桁あふれが存在することを指し示すように桁あふれフラグを設定する命令を含み得る。
【0135】
1つ以上の実施形態は、プロセッサによって実行されるときに、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算減算関数を呼び出すものであり、前記複数のソースベクトルのうちの各ベクトルは下位要素と上位要素とを有し、且つ第2のソースベクトルの下位要素に対してビット毎のnot演算を実行し、前記複数のソースベクトルに対する並列乗算加算関数を実行して結果を形成し、第1のソースベクトルの下位要素を前記結果に加算し、桁あふれが存在するかを決定し、且つ桁あふれを決定したことに応答して、前記結果を一定値に設定するトランスレートされたコードを生成する、1つ以上の命令を格納した少なくとも1つのコンピュータ読み取り可能媒体を提供し得る。
【0136】
1つ以上の実施形態の一例において、上記少なくとも1つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、桁あふれを決定しなかったことに応答して、上位要素が下位要素から減算されたかを決定し、且つ上位要素が下位要素から減算されたことに応答して、前記結果に対してビットごとのnot演算を実行する命令を含み得る。
【0137】
1つ以上の実施形態は、プロセッサによって実行されるときに、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対するパーシャルロング乗算関数を呼び出すものであり、該パーシャルロング乗算関数は第1のオペランドを有し、且つ前記関数の第1のオペランドを上半分と下半分とに分割し、第1のオペランドの各半分に第2のオペランドを乗算して、上半分の積と下半分の積とを形成し、且つ上半分の積を下半分の積に加算するトランスレートされたコードを生成する、1つ以上の命令を格納した少なくとも1つのコンピュータ読み取り可能媒体を提供し得る。
【0138】
上記少なくとも1つのコンピュータ読み取り可能媒体の1つ以上の実施形態の一例において、前記関数の第1のオペランドを分割することは、プロセッサによって実行されるときに、下半分に対してゼロ拡張を実行し、且つ上半分に対して算術シフトライト演算を実行する1つ以上の命令を含み得る。
【0139】
1つ以上の実施形態の他の一例において、上記少なくとも1つのコンピュータ読み取り可能媒体は更に、プロセッサによって実行されるときに、下半分の積に対して算術シフトライト演算を実行する命令を含み得る。
【0140】
1つ以上の実施形態は、トランスレータモジュールであり、ソース命令をターゲット命令にトランスレートし、且つソース命令内の条件コードブロックを識別し、該条件コードブロックは複数の条件ビットを含む、ように構成されたトランスレータモジュールと、条件コードブロックを変換するように構成された最適化モジュールであり、前記変換は、条件コードブロックについてプレ実行を実行して、条件コードブロック内の前記複数の条件ビットを分解することで、事前分解された条件セットを形成することを含む、最適化モジュールと、を有する装置を提供し得る。
【0141】
1つ以上の実施形態の一例において、最適化モジュールは更に、事前分解された条件セットでソース命令をエンコードするように構成され得る。
【0142】
1つ以上の実施形態は、複数のターゲットアドレスと複数のソースアドレスとを格納するように構成されたリカバリテーブルと、ランタイム環境モジュールであり、ターゲット命令内の命令における割込を識別し、割り込まれた命令のターゲットアドレスを検索し、該ターゲットアドレスはターゲット命令セットアーキテクチャに関するものであり、且つ割り込まれた命令のソースアドレスをリカバリテーブル内で特定し、前記複数のターゲットアドレスのうちの該ターゲットアドレスは、リカバリテーブル内で、前記複数のソースアドレスのうちの該ソースアドレスと対にされている、ように構成されたランタイム環境モジュールと、を有する装置を提供し得る。
【0143】
1つ以上の実施形態の一例において、ソースアドレスを特定することにおいて、ランタイム環境モジュールは更に、割り込まれた命令のソースアドレスに関するオフセットをリカバリテーブル内で特定し、該オフセットに割り込まれた命令の命令サイズが乗算され、ソースアドレスにおける当初条件状態を特定し、現在条件状態を当初条件状態に設定し、前記オフセットの値に基づく回数だけ現在条件状態を進め、且つ現在条件状態を復元するように構成され得る。
【0144】
1つ以上の実施形態の他の一例において、現在条件状態を進めることにおいて、ランタイム環境モジュールは更に、変数を1に設定し、前記オフセットが前記変数に等しいかを決定し、前記オフセットが前記変数に等しいことに応答して、現在条件状態を復元し、前記オフセットが前記変数に等しくないことに応答して、条件コードブロックの条件状態を進め、条件状態を進めたことに応答して、進められた条件状態に合致するように現在条件状態を設定し、現在条件状態を設定したことに応答して、前記変数を進め、且つ前記オフセットが前記変数に等しくなるまで、前記オフセットが前記変数に等しいかを決定することを繰り返すように構成され得る。
【0145】
1つ以上の実施形態は、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものであり、且つ前記複数のソースベクトルに対する並列乗算加算関数を実行し、且つ桁あふれが存在するかを決定するトランスレートされたコードを生成する、ように構成されたトランスレータモジュールを有する装置を提供し得る。
【0146】
1つ以上の実施形態の一例において、トランスレータモジュールは更に、桁あふれを決定したことに応答して、桁あふれが存在することを指し示すように桁あふれフラグを設定するように構成され得る。
【0147】
1つ以上の実施形態は、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対する並列乗算加算関数を呼び出すものであり、前記複数のソースベクトルのうちの各ベクトルは下位要素と上位要素とを有し、且つ第2のソースベクトルの下位要素に対してビット毎のnot演算を実行し、前記複数のソースベクトルに対する並列乗算加算関数を実行して結果を形成し、第1のソースベクトルの下位要素を前記結果に加算し、桁あふれが存在するかを決定し、且つ桁あふれを決定したことに応答して、前記結果を一定値に設定するトランスレートされたコードを生成する、ように構成されたトランスレータモジュールを有する装置を提供し得る。
【0148】
1つ以上の実施形態の一例において、トランスレータモジュールは更に、桁あふれを決定しなかったことに応答して、上位要素が下位要素から減算されたかを決定し、且つ上位要素が下位要素から減算されたことに応答して、前記結果に対してビットごとのnot演算を実行するように構成され得る。
【0149】
1つ以上の実施形態は、トランスレートされるべき命令を受信し、該命令は複数のソースベクトルに対するパーシャルロング乗算関数を呼び出すものであり、該パーシャルロング乗算関数は第1のオペランドを有し、且つ前記関数の前記第1のオペランドを上半分と下半分とに分割し、第1のオペランドの各半分に第2のオペランドを乗算して、上半分の積と下半分の積とを形成し、且つ上半分の積を下半分の積に加算するトランスレートされたコードを生成する、ように構成されたトランスレータモジュールを有する装置を提供し得る。
【0150】
1つ以上の実施形態の一例において、前記関数の第1のオペランドを分割することにおいて、トランスレータモジュールは、下半分に対してゼロ拡張を実行し、且つ上半分に対して算術シフトライト演算を実行するように構成され得る。
【0151】
1つ以上の実施形態の一例において、トランスレータモジュールは更に、下半分の積に対して算術シフトライト演算を実行するように構成され得る。