(57)【要約】  トランザクション・メモリ用のサポートを提供するシステムにおいて、処理回路４が、少なくとも１つのステータス値を、対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて複数の状態の１つにセットするようトリガするために、トランザクションのネスト深さテスト命令が提供され、複数の状態には、トランザクションのネスト深さが１である場合に選択される第１の状態、及びトランザクションのネスト深さが１より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれる。サポートされるＩＳＡにより、少なくとも１つのステータス値、及び少なくとも１つのステータス値が第１の状態にあることを条件とする条件分岐のセットを、単一のトランザクションのネスト深さテスト命令及び単一の条件分岐命令に応答して実行することが可能である。
2020535513.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコーダと、
前記命令デコーダによってデコードされた前記命令に応答してデータ処理を実行する処理回路と
を備え、前記処理回路は、前記処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を具備し、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、そのため前記処理回路は、前記トランザクション終了命令に至るまで、前記トランザクションの前記投機的に実行された命令の結果がコミットされるのを防止し、前記トランザクション終了命令に至る前にアボート・イベントが発生した場合、前記トランザクションの処理を打ち切るよう構成され、
前記命令デコーダによるトランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、少なくとも１つのステータス値を、前記対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう構成され、前記複数の状態には、前記トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及び前記トランザクションのネスト深さが前記所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれ、且つ
前記命令デコーダは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャをサポートするよう構成され、前記命令セット・アーキテクチャにより、前記命令デコーダは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、前記処理回路を制御し、前記トランザクションのネスト深さに応じて前記少なくとも１つのステータス値をセットし、前記少なくとも１つのステータス値が前記第１の状態にあることを条件として、条件分岐を実行できる、装置。
【請求項２】
前記所定の数は１である、請求項１に記載の装置。
【請求項３】
前記少なくとも１つの別の状態は、
前記トランザクションのネスト深さが前記所定の数より小さい場合に選択される、第２の状態と、
前記トランザクションのネスト深さが前記所定の数より大きい場合に選択される、第３の状態と
を含む、請求項１又は２に記載の装置。
【請求項４】
前記命令セット・アーキテクチャは、前記命令デコーダが、前記処理回路を制御して、前記トランザクションのネスト深さに応じて前記少なくとも１つのステータス値をセットし、ターゲット状態が前記第１の状態であるか、前記第２の状態であるか、又は前記第３の状態であるかどうかにかかわらず、単一の条件分岐命令が後に続く単一のトランザクションのネスト深さテスト命令に応答して、前記少なくとも１つのステータス値が前記複数の状態のうち前記ターゲット状態にあることを条件として条件分岐を実行することを可能にする、１種又は複数種類の条件分岐命令を含む、請求項３に記載の装置。
【請求項５】
以前に実行された命令の処理結果の少なくとも１つの特性を示す、少なくとも１つの条件ステータス値を記憶する条件ステータス記憶要素
を備え、
前記命令デコーダによる前記トランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、前記トランザクションのネスト深さを前記所定の数と比較した結果に対応するために、前記少なくとも１つの条件ステータス値をセットするよう構成される、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
テスト条件を指定する、前記命令デコーダによる条件ステータス依存の条件分岐命令のデコードに応答して、前記処理回路は、前記条件ステータス記憶要素に記憶されている前記少なくとも１つの条件ステータス値が、前記テスト条件を満たすかどうかを条件として、前記条件分岐を実行するよう構成される、請求項５に記載の装置。
【請求項７】
命令の被演算子を記憶する複数の汎用レジスタを備え、
前記命令デコーダによる前記トランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、前記トランザクションのネスト深さを表すトランザクションのネスト深さの値を、前記トランザクションのネスト深さテスト命令によって指定される汎用レジスタに書き込むよう構成される、請求項５又は６に記載の装置。
【請求項８】
命令の被演算子を記憶する複数の汎用レジスタを備え、
前記命令デコーダによる前記トランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、前記少なくとも１つのステータス値を、前記トランザクションのネスト深さテスト命令によって指定される汎用レジスタに書き込むよう構成される、請求項１から４までのいずれか一項に記載の装置。
【請求項９】
前記第１の状態において、前記少なくとも１つのステータス値は、
全ビットが０に等しい第１のエンコードと、
第１の所定のビットが１に等しく、第２の所定のビットが０に等しい第２のエンコードと、
前記第１の所定のビットが０に等しく、前記第２の所定のビットが１に等しい第３のエンコードと
のうちの１つを有する、請求項１から４まで及び８のいずれか一項に記載の装置。
【請求項１０】
前記第１、第２、及び第３の状態のうちの第１の状態では、前記少なくとも１つのステータス値は、全ビットが０に等しい第１のエンコードを有し、
前記第１、第２、及び第３の状態のうちの第２の状態では、前記少なくとも１つのステータス値は、第１の所定のビットが１に等しく、第２の所定のビットが０に等しい第２のエンコードを有し、且つ
前記第１、第２、及び第３の状態のうちの第３の状態では、前記少なくとも１つのステータス値は、前記第１の所定のビットが０に等しく、前記第２の所定のビットが１に等しい第３のエンコードを有する、請求項３又は４に記載の装置。
【請求項１１】
前記命令デコーダの、ターゲット・レジスタを指定する、ゼロと比較する種類の条件分岐命令のデコードに応答して、前記処理回路は、前記ターゲット・レジスタの全ビットが０に等しいことを条件とする前記条件分岐を実行するよう構成される、請求項１から１０までのいずれか一項に記載の装置。
【請求項１２】
前記命令デコーダの、ターゲット・レジスタの所定のビットを指定する、ビット・テストする種類の条件分岐命令のデコードに応答して、前記処理回路は、前記ターゲット・レジスタの前記所定のビットが１に等しいことを条件とするか、又は前記ターゲット・レジスタの前記所定のビットが０に等しいことを条件とする、前記条件分岐を実行するよう構成される、請求項１から１１までのいずれか一項に記載の装置。
【請求項１３】
前記トランザクションのネスト深さを表すトランザクションのネスト深さの値を記憶する、トランザクションのネスト深さ記憶要素を備える、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
前記トランザクション・メモリ用サポート回路は、前記トランザクションを打ち切ると復元されるように、前記トランザクション開始命令に応答して取り込まれたトランザクション復元状態を記憶する、復元状態記憶回路を備える、請求項１から１３までのいずれか一項に記載の装置。
【請求項１５】
前記処理回路は、
前記トランザクションのネスト深さがゼロに等しい場合、前記トランザクション開始命令に応答して前記トランザクション復元状態を取り込み、且つ
前記トランザクションのネスト深さがゼロより大きい場合、前記トランザクション開始命令に応答した前記トランザクション復元状態の取込みを抑える
よう構成される、請求項１４に記載の装置。
【請求項１６】
前記トランザクション・メモリ用サポート回路は、少なくとも１つのスレッドの少なくとも１つのトランザクションの前記投機的に実行された命令の前記結果を記憶する投機結果記憶回路を備える、請求項１から１５までのいずれか一項に記載の装置。
【請求項１７】
前記トランザクション・メモリ用サポート回路は、最初のスレッドのトランザクション内で行われた所与のアドレスへのデータ・アクセスと、別のスレッドによって行われた同じアドレスへのデータ・アクセスとの競合を検出する、競合検出回路を備える、請求項１から１６までのいずれか一項に記載の装置。
【請求項１８】
前記競合検出回路は、前記競合の検出に応答して、前記アボート・イベントをトリガするよう構成される、請求項１７に記載の装置。
【請求項１９】
前記トランザクション・メモリ用サポート回路は、トランザクション内の命令によってアクセスされるアドレスを追跡するアドレス追跡回路を備える、請求項１から１８までのいずれか一項に記載の装置。
【請求項２０】
命令デコーダを使用して命令をデコードするステップと、
前記命令デコーダによってデコードされた前記命令に応答して、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を備える前記処理回路を使用して、データ処理を実行するステップであって、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、そのため前記処理回路は、前記トランザクション終了命令に至るまで、前記トランザクションの前記投機的に実行された命令の結果がコミットされるのを防止し、前記トランザクション終了命令に至る前にアボート・イベントが発生した場合、前記トランザクションの処理を打ち切るよう構成されるステップと、
単一のトランザクションのネスト深さ命令のデコードに応答して、少なくとも１つのステータス値を、前記対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするステップであって、前記複数の状態には、前記トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及び前記トランザクションのネスト深さが前記所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれるステップと、
前記単一のトランザクションのネスト深さ命令の後に続く単一の条件分岐命令のデコードに応答して、前記少なくとも１つのステータス値が前記第１の状態にあることを条件とする条件分岐を実行するステップと
を含むデータ処理方法。
【請求項２１】
ホスト・データ処理装置を制御して、命令を実行するための命令実行環境を提供するコンピュータ・プログラムであって、
データ処理のスレッド内のトランザクションの実行をサポートする処理プログラム・ロジック
を含み、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、そのため前記処理プログラム・ロジックは、前記トランザクション終了命令に至るまで、前記トランザクションの前記投機的に実行された命令の結果がコミットされるのを防止し、前記トランザクション終了命令に至る前にアボート・イベントが発生した場合、前記トランザクションの処理を打ち切るよう構成され、
トランザクションのネスト深さテスト命令に応答して、前記処理プログラム・ロジックは、少なくとも１つのステータス値を、前記対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう構成され、前記複数の状態には、前記トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及び前記トランザクションのネスト深さが前記所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれ、
前記処理プログラム・ロジックは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャをサポートするよう構成され、前記命令セット・アーキテクチャにより、前記処理プログラム・ロジックは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、前記トランザクションのネスト深さに応じて前記少なくとも１つのステータス値をセットし、前記少なくとも１つのステータス値が前記第１の状態にあることを条件として、条件分岐を実行できる、コンピュータ・プログラム。
【請求項２２】
請求項２１に記載の前記コンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。より詳細には、本技法は、トランザクション・メモリに関する。
【背景技術】
【０００２】
データ処理システムは、データ処理の複数のスレッドを実行できる。スレッドは、共有リソースにアクセスしなければならない場合があり、データ処理操作の内容により、スレッドが共有リソースとの相互作用を開始すると、その間にリソースにアクセスする別のスレッドがなくても、操作のセットが不可分なものとしてリソースを使用し、完了する必要があり得る。
【０００３】
スレッド間のこの競合を扱う１つの手法は、ロックを使用して、少なくとも１つのターゲット・リソースへの排他的アクセスを制御することであり得る。たとえば、あるスレッドが特定のアドレス領域のデータへのアクセスを開始するとき、スレッドはロックの所有権を要求するためにロック変数をセットすることができ、次いでロックを所有するスレッドがロックの所有権を有している間、ロック変数を確認する他のスレッドは、ロックが既に要求されていることを判断でき、そのため、そのアドレス領域と相互作用するコードのセクションに入ってはならない。かかるロック・ベースの手法は、競合が生じ得ないことを保証するロックの所有権がない限り、別のスレッドとの競合が発生する可能性があるので、各スレッドは、デフォルトで、共有リソースにアクセスするコードのセクションに入ることができないと推定する、悲観的なものであると理解することができる。ただし、ロック識別子はしばしば、複数のリソース（たとえばアドレスの範囲）への排他的アクセスを制御する場合があり、そのため、あるスレッドがロック変数で保護されたリソースのセット内の特定のリソースにアクセスしている場合、別のスレッドが確実に同じリソースにアクセスすることが保障されるとは限らない。したがって、スレッド間の競合がまれな場合、共有リソースを使用するコードの重要なセクションに入る前に、スレッドは、ロックが解放されるのを不必要に待っている可能性があるので、ロック・ベースの手法は、性能を損なう可能性がある。
【０００４】
共有リソースにアクセスするスレッド間の競合を扱うより楽観的な手法は、トランザクション・メモリ用サポートを使用することであり得る。データ処理システムは、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートする回路を備えることができる。トランザクションは、トランザクションの開始を示すトランザクション開始命令と、トランザクションの終了を示すトランザクション終了命令との間に実行される、スレッドのそれらの命令であり得る。トランザクション開始命令とトランザクション終了命令との間に、処理回路は、介在する命令を投機的に実行し、トランザクション終了命令に至るまで投機的に実行されるそうした命令の、結果のコミットを防ぐことができる。トランザクション開始命令の実行後（ただし、トランザクション終了命令に至る前に）にアボート・イベントが発生すると、トランザクションが打ち切られ、投機結果が破棄されるという結果になり得る。トランザクションを打ち切る理由はいくつかあり得るが、１つの理由は、別のスレッドが行うメモリ・アクセスとの競合が検出されることであり得る。したがって、この手法では、各スレッドは他のスレッドとの競合が発生しないであろうと推定して、コードの重要なセクションの処理を楽観的に開始することができ、次いでどんな競合も検出されることなく重要なセクションの終わりに達した場合、トランザクションの結果はコミットされ得る。競合がまれな場合、トランザクション・メモリ用サポートを使用することで、より多くのスレッドがコードの重要なセクションを同時に処理できることにより、パフォーマンスを向上させることができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、１９９０年冬、ＵＳＥＮＩＸカンファレンス、５３〜６３頁
【発明の概要】
【課題を解決するための手段】
【０００６】
少なくともいくつかの実例により、以下を備える装置を提供する。
命令をデコードする命令デコーダと、
命令デコーダによってデコードされた命令に応答してデータ処理を実行する処理回路と
を備え、処理回路は、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を具備し、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのため処理回路は、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成され、
命令デコーダによるトランザクションのネスト深さテスト命令のデコードに応答して、処理回路は、少なくとも１つのステータス値を、対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう構成され、複数の状態には、トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及びトランザクションのネスト深さが所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれ、且つ
命令デコーダは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャをサポートするよう構成され、命令セット・アーキテクチャにより、命令デコーダは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、処理回路を制御し、トランザクションのネスト深さに応じて少なくとも１つのステータス値をセットし、少なくとも１つのステータス値が第１の状態にあることを条件として、条件分岐を実行できる。
【０００７】
少なくともいくつかの実例により、以下を含むデータ処理方法を提供する。
命令デコーダを使用して命令をデコードするステップと、
命令デコーダによってデコードされた命令に応答して、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を備える処理回路を使用して、データ処理を実行するステップであって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのため処理回路は、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成されるステップと、
単一のトランザクションのネスト深さ命令のデコードに応答して、少なくとも１つのステータス値を、対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするステップであって、複数の状態には、トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及びトランザクションのネスト深さが所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれるステップと、
単一のトランザクションのネスト深さ命令の後に続く単一の条件分岐命令のデコードに応答して、少なくとも１つのステータス値が第１の状態にあることを条件とする条件分岐を実行するステップと
を含む。
【０００８】
少なくともいくつかの実例により、ホスト・データ処理装置を制御して、命令を実行するための命令実行環境を提供する、以下を含むコンピュータ・プログラムを提供する。
データ処理のスレッド内のトランザクションの実行をサポートする処理プログラム・ロジックを含み、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのために処理プログラム・ロジックは、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成され、
トランザクションのネスト深さテスト命令に応答して、処理プログラム・ロジックは、少なくとも１つのステータス値を、対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう構成され、複数の状態には、トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及びトランザクションのネスト深さが所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれ、且つ
処理プログラム・ロジックは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャをサポートするよう構成され、命令セット・アーキテクチャにより、処理プログラム・ロジックは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、トランザクションのネスト深さに応じて少なくとも１つのステータス値をセットし、少なくとも１つのステータス値が第１の状態にあることを条件として、条件分岐を実行できる。
【０００９】
記憶媒体は、コンピュータ・プログラムを記憶することができる。記憶媒体は、非一時的な記憶媒体であり得る。
【００１０】
本技法のさらなる態様、特徴、及び利点は、以下の添付図面と併せて読まれるべき実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【００１１】
【図１】トランザクション・メモリ用サポート回路を備えた、データ処理装置の実例を模式的に示す図である。
【図２】トランザクション・メモリ・リソースを使用した、トランザクションの処理の実例を示す図である。
【図３】ネストされたトランザクションのセットの実例を示す図である。
【図４】トランザクションのネスト深さテスト命令の、第１の実例を示す図である。
【図５】トランザクションのネスト深さを１と比較した結果に対応する、少なくとも１つのステータス値をセットする実例を示す図である。
【図６】トランザクションのネスト深さテスト命令の、第２の実例を示す図である。
【図７】トランザクションのネスト深さテスト命令を処理する方法を示す流れ図である。
【図８】使用することができるシミュレータの実例を示す図である。
【発明を実施するための形態】
【００１２】
データ処理装置は、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を具備する、処理回路を備えることができる。トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのため処理回路は、トランザクションの投機的に実行された命令の結果のコミットを、トランザクション終了命令に至るまで防ぐことができ、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切ることができる。
【００１３】
実行されているプログラム・コードには、ネストされたトランザクションのセットが含まれる場合があり、この場合、内側のトランザクションのトランザクション開始命令は、外側のトランザクションのトランザクション開始命令の後だが、外側のトランザクションのトランザクション終了命令に至る前、且つ外側のトランザクションが打ち切られる前に実行される。いくつかのハードウェア実施態様では、ネストされたトランザクションのセットの各トランザクションの投機的結果を個別に追跡し、それによりネストされたトランザクションのいずれかの開始まで状態を戻すことが可能であるが、実際にはこれは、状態復元データの複数のセット又は投機結果の複数のセットを記憶するために、トランザクション・メモリ用サポート回路内にかなりのリソースを必要とする可能性がある。実際には、この追加されるリソースは正当化され（ｊｕｓｔｉｆｉｅｄ）ない可能性があり、そのため処理回路は、（少なくともいくつかの目的のために）ネストされたセットのどの内側のトランザクションも実際上無視し、外側のトランザクションのトランザクション開始命令と終了命令との範囲内にあるすべての操作を、単にただ１つのトランザクションとして取り扱うことが多い。たとえば、ネストされたトランザクションのセット中のいずれかの時点でアボート・イベントが発生する場合、外側のトランザクションのトランザクション開始命令に戻る、状態の復元がトリガされ得る。内側のトランザクションのトランザクション終了命令は無視される場合があり、投機的に実行された命令の結果のコミットをトリガするのは、外側のトランザクションのトランザクション終了命令であり得る。ハードウェアが、実際に、個々のトランザクションの状態を、所与のスレッドのネストされたトランザクションのセット内で個別に追跡しない場合でも、ソフトウェアが、かかるネストされたトランザクションを定義すること、たとえば分岐が、最初のトランザクション開始命令を超えて存在するプログラムの一部に分岐し得る場合を扱うことは、依然として有用な場合があり、トランザクション・ベースの仕組みを使用して、分岐のエントリ・ポイントの後に続く操作の不可分性を確保することが依然として望まれる。
【００１４】
処理回路上で実行されるソフトウェアは、実行している現在のポイントが、開始されたがコミットされておらず打ち切られていないトランザクションの内側にあるかどうか、或いはかかるトランザクション内にある場合、現在のトランザクションがネストされたセットの外側のトランザクションであるか又は内側のトランザクションであるかを、知る必要がある場合がある。たとえば、現在の処理が内側のトランザクション内にあるか外側のトランザクション内にあるかに応じて、トランザクションのスケジューリングに関する、又はアボート・イベントにどのように応答するかに関する決定が行われ得る。また、ネストのレベルは、分岐が行われた、その前のトランザクション開始命令に対応するポイントを識別する間接的なやり方であり得る。トランザクションのネストの現在のレベルを追跡する助けとなるように、処理回路は、トランザクションのネスト深さを示す、トランザクションのネスト深さの値を保持することができる。トランザクションのネストの深さは、対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドについて実行されたトランザクション開始命令の数を示すことができる。たとえば、トランザクションのネストの深さがゼロの場合、トランザクションが開始されていないことを示すことができ、トランザクションのネストの深さが１の場合、現在の実行ポイントが外側のトランザクション内にあることを示すことができ、トランザクションのネストの深さが２つ以上の場合、現在のトランザクションがネストされたトランザクションのセットの内側のトランザクションであることを示すことができる。
【００１５】
トランザクションのネストの深さに関する情報をソフトウェアが見えるようにする１つの手法は、現在のトランザクションのネストの深さをゼロと比較し、トランザクションのネストの深さが現在ゼロか否かを示すブール値を返す、深さテスト命令を提供することであり得る。ただし、この種の命令では、処理が、ネストされたセットの内側のトランザクション内か又は外側のトランザクション内かを示すことはできないであろう。別の手法は、トランザクションのネストの深さを読み取り、ソフトウェアでアクセス可能なレジスタ内に値を渡し、スレッド内で実行している現在のポイントに対する正確なトランザクションのネスト深さを示す命令を提供することであり得る。これにより、ソフトウェアは、内側のトランザクションが処理されているか又は外側のトランザクションが処理されているかを判断できるが、これはさらに、その比較操作の出力に基づいて条件分岐を実行する前に、トランザクションのネストの深さを参照値と比較する別の命令を必要とし得る。すなわち、トランザクションのネストの深さに基づいて、レジスタをセットする命令に加えて、条件分岐をトリガするために、さらに２つの命令が必要であろう。
【００１６】
以下で論じる技法は、命令デコーダによってデコードされると、少なくとも１つのステータス値を、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう処理回路をトリガする、トランザクションのネスト深さテスト命令を提供し、ここで複数の状態には、トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及びトランザクションのネスト深さが所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれる。命令デコーダは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）をサポートする。ＩＳＡにより、命令デコーダは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、処理回路を制御し、トランザクションのネスト深さに応じて少なくとも１つのステータス値をセットし、少なくとも１つのステータス値が第１の状態にあることを条件として、条件分岐を実行できる。
【００１７】
したがって、トランザクションの深さがゼロより大きい所定の数に等しいか否かは、単一のトランザクションのネスト深さテスト命令及び単一の条件分岐命令によって解明することができ、ネスト深さを条件として操作性能を制御する命令の数を減らすことにより、性能を改善できる。これは、たとえば、現在のトランザクションが、ネストされたセットの内側のトランザクションであるか又は外側のトランザクションであるかを解明するのに役立ち得る。
【００１８】
所定の数が２以上であるトランザクションのネスト深さテスト命令の、いくつかのバージョンを提供できる。これにより、特定のネスト深さが現在有効か否かの、より迅速な判断を提供できる。
【００１９】
ただし多くの場合、所定の数が１であると、特に有用であり得る。したがって、トランザクションのネスト深さ命令は、トランザクションのネスト深さが１の場合、少なくとも１つのステータス値を第１の状態にセットし、トランザクションのネストの深さが０又は２以上の場合、少なくとも１つの別の状態にセットすることができる。これは、いくつかの操作が、外側のトランザクション内にある場合必要であり得るが、内側のトランザクション内にある場合、又はまったくトランザクションにない場合は不要であり得るので、特に有用であり得る。
【００２０】
トランザクションのネスト深さ命令のいくつかの形式は、少なくとも１つのステータス値に対する２つの状態、つまりトランザクションのネスト深さが所定の数に等しい場合に使用される第１の状態と、トランザクションのネスト深さが所定の数より大きいか又は小さい場合に（この場合、少なくとも１つの別の状態は、第２の状態だけを含み得る）使用される第２の状態との、二者択一となり得る。これにより、システムが現在特定のレベルのネスト深さにあるか否かのテストが可能になるであろう（たとえば、処理が現在外側のトランザクション内にあるかどうかにかかわらず、所定の数が１の場合）。
【００２１】
ただし実際には、３つ以上の相異なる場合を区別して、それにより少なくとも１つのステータス値が、トランザクションのネスト深さが所定の数に等しい場合の第１の状態、トランザクションのネスト深さが所定の数よりも小さい場合の第２の状態、及びトランザクションのネスト深さが所定の数よりも大きい場合の第３の状態のうちの１つにセットされることが、有用であり得る。これにより、後に続く条件付き操作で、対象となる３種類の場合を区別できる（たとえば、所定の数が１の場合、まったくトランザクション内にないか、内側のトランザクション内にあるか、外側のトランザクション内にあるか、をそれぞれ区別する）。
【００２２】
命令デコーダによってサポートされるＩＳＡは、１種又は複数種類の条件分岐命令を含むことができ、ＩＳＡによって、命令デコーダは、処理回路を制御し、トランザクションのネスト深さに応じて少なくとも１つのステータス値をセットし、ターゲット状態が第１の状態、第２の状態、又は第３の状態であるかどうかにかかわらず、単一の条件分岐命令が後に続く単一のトランザクションのネスト深さテスト命令に応答して、少なくとも１つのステータス値が複数の状態のうちターゲット状態にあることを条件として条件分岐を実行することが（集合的に）可能である。この手法によって、所定の数が１の場合、処理がまったくトランザクション内にあるか（第２の状態）、処理が外側のトランザクション内にあるか（第１の状態）、及び処理が内側のトランザクション内にあるか（第３の状態）の３つすべての疑問が、単一のトランザクションのネスト深さテスト命令及び単一の条件分岐命令によってすべて解決できる。
【００２３】
トランザクションのネスト深さテスト命令を実現できる、いくつかのやり方がある。
【００２４】
一実例では、装置は、以前に実行された命令の処理結果の少なくとも１つの特性を示す、少なくとも１つの条件ステータス値を記憶する、状態ステータス記憶要素を備えることができる。命令デコーダによるトランザクションのネスト深さテスト命令のデコードに応答して、処理回路は、トランザクションのネスト深さを所定の数と比較した結果に対応するように、少なくとも１つの条件ステータス値をセットすることができる。
【００２５】
条件ステータス記憶要素は、条件ステータス依存の種類の条件分岐命令によって使用され、条件ステータス記憶要素に記憶されている少なくとも１つのステータス値が、条件分岐命令によって指定されるテスト条件を満たすかどうかに応じて、分岐ターゲット・アドレスに分岐するかどうかを選択することができる。たとえば、少なくとも１つの条件ステータス値には、結果の何らかの特性に応じて、処理ロジックで実行されるいくつかの種類のプログラム命令に応答してセットされる条件コード値が含まれ得る。たとえば、少なくとも１つの条件ステータス値には、プログラム命令の結果がゼロかどうかを示す第１のフラグ、結果が負かどうかを示す第２のフラグ、結果が与えられたビット数に収まらないため、処理結果の最上位ビットからの桁上がりが発生したかどうかを示す第３のフラグ、及び／又は２の補数の算術演算で正の値から負の値へのラップ・アラウンドが発生したかどうかを示す第４のフラグが含まれ得る。結果の他の特性も、条件フラグを使用して表すことができることが理解されよう。条件分岐命令は、満たされるべきテスト条件について、条件コードによって満たされるべき特定の基準のセットを表す条件コードを指定することができる。
【００２６】
したがって、いくつかの実例では、トランザクションのネスト深さテスト命令は、他の命令で使用されるのと同じ条件ステータス・フラグに書き込むことができ、テスト条件を指定する一般的な条件ステータス依存の条件分岐命令を使用して、分岐をトリガすべき特定のトランザクションのネスト深さに応じて選択されたテスト条件を用いてテストできる。これにより、処理が現在トランザクション内にあるか、又は外側のトランザクション内若しくは内側のトランザクション内にあるかに応じて、条件付きで実行されるべき操作を必要とするコードのセクションの処理が可能になり、より効率的に実行される。
【００２７】
少なくとも１つの条件ステータス値をセットすることは、トランザクションのネスト深さテスト命令の唯一の結果ではない場合がある。たとえば、いくつかの変形例では、少なくとも１つの条件ステータス値のセットに加えて、トランザクションのネスト深さテスト命令のデコードは、処理回路が、トランザクションのネスト深さを表すトランザクションのネスト深さの値を、命令の被演算子を記憶するための汎用レジスタに書き込むのをトリガすることもできる。汎用レジスタは、トランザクションのネスト深さテスト命令のエンコードによって指定できる。したがって、正確なトランザクションのネスト深さを知る必要がある、より複雑な操作（内側のトランザクションの相異なるレベル間を区別することを含む）は、この場合、別の操作を実行するために汎用レジスタに書き込まれたトランザクションのネスト深さの値をテストできる。
【００２８】
別の実例では、トランザクションのネスト深さテスト命令は、トランザクションのネスト深さテスト命令によって指定された汎用レジスタに、少なくとも１つのステータス値を書き込むことができる。
【００２９】
たとえば、汎用レジスタに書き込まれる少なくとも１つのステータス値は、すべてのビットが０に等しい第１のエンコード、第１の所定のビットが１に等しく第２の所定のビットが０に等しい第２のエンコード、及び第１の所定のビットが０に等しく第２の所定のビットが１に等しい第３のエンコードのうちの１つを有することができる。第１の状態は、これら３つのエンコードのどれか１つで表すことができる。少なくとも１つの別の状態が、トランザクションのネスト深さが所定の数より大きいか又はより小さい場合を表す第２の状態しか含まない場合、第２の状態は、第１の状態で使用されない他の２つのエンコードのいずれかに一致し得る。少なくとも１つの別の状態が、トランザクションのネスト深さが所定の数より小さいか又はより大きい場合をそれぞれ表す、別々の第２及び第３の状態を含む実施態様では、第２及び第３の状態は、第１の状態で使用されない他の２つのエンコードを（どちらでも）とることができる。
【００３０】
かかるエンコードの場合、相異なる種類の条件分岐命令を使用して、少なくとも１つのステータス値が、第１、第２、及び第３のエンコードのうちの特定の１つを有するかどうかを判断できる（適切な種類の条件分岐命令が、状態と使用されているエンコードとの間のマッピング、及びどの特定の状態が対象となるターゲット状態であるかに応じて、プログラマ又はコンパイラによって選択されている状態で）。
【００３１】
たとえば、ＩＳＡには、ターゲット・レジスタを指定する、ゼロと比較する種類の条件分岐命令が含まれ得る。ゼロと比較する種類の条件分岐命令のデコードに応答して、処理回路は、ターゲット・レジスタのすべてのビットが０に等しいことを条件とする条件分岐を実行することができる。したがって、これにより、単一のトランザクションのネスト深さテスト命令の後に続く単一の条件分岐命令だけを使用して、以前のトランザクションのネスト深さテスト命令が、少なくとも１つのステータス値を上記で論じた第１のエンコードにセットしたかどうかをテストできる。
【００３２】
ＩＳＡには、ターゲット・レジスタの所定のビットを指定する、ビット・テストする種類の条件分岐命令を含まれ得る。ビット・テストする種類の条件分岐命令のデコードに応答して、処理回路は、ターゲット・レジスタの所定のビットが１に等しいことを条件とするか、又はターゲット・レジスタの所定のビットが０に等しいことを条件とする条件分岐を実行することができる。いくつかの実施態様では、ＩＳＡにおいて、所定のビットが１又は０であるかどうかのテストをそれぞれ可能にする、ビットが０でないことをテストする条件分岐命令の変形例、及びビットが０であることをテストする条件分岐命令の変形例を提供することができる。ビット・テストする種類の条件分岐命令は、単一トランザクションのネスト深さテスト命令の後に続く単一の条件分岐命令を使用して、以前のトランザクションのネスト深さテスト命令が、少なくとも１つのステータス値を、上記で論じた第２又は第３のエンコードにセットしたかどうかをテストできる。
【００３３】
トランザクション・メモリ用サポート回路は、トランザクション・メモリの仕組みを使用してトランザクションの実行をサポートする、複数のリソースを備えることができる。たとえば、トランザクション・メモリ用サポート回路は、トランザクションを打ち切ると復元されるべき、トランザクション開始命令に応答して取り込まれたトランザクション復元状態を記憶する、復元状態記憶回路を備えることができる。場合によっては、外側のトランザクションのトランザクション開始命令がトランザクション復元状態の取込みをトリガすることができ、内側のトランザクションのトランザクション復元状態の取込みが抑えられ得る（トランザクション開始命令が発生した時点で、トランザクションのネスト深さが０より大きい場合）。
【００３４】
トランザクション・メモリ用サポート回路は、少なくとも１つのスレッドの少なくとも１つのトランザクションについての、少なくともいくつかの投機的に実行された命令の結果を記憶するための、投機結果記憶回路を備えることもできる。場合によっては、特定の種類の命令だけが、その結果を投機結果記憶回路に記憶させることができる。たとえば、メモリに書き込むためのストア命令は、トランザクションがコミットされ得るまで投機結果記憶部にその記憶データを投機的に保持させることができ、一方、レジスタに作用する一般的な算術命令は、復元状態により、状態が以前の実行時点に戻されたときに算術命令の結果を後で破棄できるので、それらのレジスタに簡単に書き込むことができる。
【００３５】
トランザクション・メモリ用サポート回路は、最初のスレッドのトランザクション内で行われた所与のアドレスへのデータ・アクセスと、別のスレッドによって行われた同じアドレスへのデータ・アクセスとの競合を検出する、競合検出回路を備えることもできる。競合の検出に応答して、競合検出回路は、アボート・イベントをトリガできる。アボート・イベントが発生する他の理由には、トランザクションの処理中に発生する割込み又は例外、トランザクションの投機結果をさらに収容するためのトランザクション・メモリ用サポート回路内の記憶部の容量不足、又はトランザクション内でのアクセスが許可されていない特定の命令が検出されることが含まれ得る。トランザクション・メモリ用サポート回路は、トランザクション内の命令によってアクセスされるアドレスを追跡するアドレス追跡回路も備えることができ、競合検出回路は、追跡されたアドレスを使用して他のスレッドとの競合を識別することができる。
【００３６】
装置は、トランザクションのネスト深さを表すトランザクションのネスト深さの値を記憶する、トランザクションのネスト深さ記憶要素を備えることができる。たとえば、内部レジスタが提供され得る。トランザクションのネスト深さの値を記憶するレジスタは、ソフトウェアでアクセスできる必要はなく、したがってトランザクションのネスト深さテスト命令は、トランザクションのネスト深さをソフトウェア・アーキテクチャに見えるようにするために提供され得る。
【００３７】
場合によっては、記憶されたトランザクションのネスト深さの値は、現在のトランザクションのネスト深さと正確に一致し得る。たとえば、ゼロで開始し、トランザクション開始命令の実行時に増加し、トランザクション終了命令の実行時に減少し、トランザクションの処理が打ち切られるとゼロにリセットされるカウンタを保持できる。しかし、トランザクションの深さを表す他のやり方もあり得る。たとえば、カウンタがゼロ以外の値で開始する場合、処理が現在トランザクション内にないときにトランザクションのネスト深さがゼロであっても、記憶されているトランザクションの深さの値はゼロではない場合がある（たとえば、記憶されたトランザクションの深さの値と実際のトランザクションの深さとの間にずれがあり得る）。
【００３８】
したがって、トランザクションのネスト深さテスト命令が、トランザクションのネスト深さと所定の数との比較結果に対応するように条件ステータス記憶要素をセットする実施態様では、記憶されたトランザクションのネスト深さの値と、それ自体ゼロより大きい所定の数との実際の比較は必要ない。対応するトランザクションが打ち切られず、コミットされないままである、所与のスレッドの実行されたトランザクション開始命令の実際の数を示す、概念的なトランザクションのネスト深さの値が、所定の数と比較された場合に生じることになる結果と同等の結果を生成する、どんな比較操作も実行できる。たとえば、記憶されたトランザクションのネスト深さの値が、実際のトランザクションのネスト深さから事実上ずれる場合、比較手段は、記憶された値を所定の数から対応する量だけずれた数と実際に比較することができる。また場合によっては、トランザクションのネスト深さが、記憶された値内で何らかの形でエンコードされている場合、やはりその比較は、トランザクションのネスト深さのコードをデコードし、トランザクションのネスト深さが０、１、又はそれ以上に一致するかどうかに応じて、ステータス記憶要素に書き込まれるべき対応するステータス値を識別するための、より複雑な操作になる可能性がある。したがって、同じ結果を実現させるいくつかのやり方があり得る。命令セット・アーキテクチャの観点より、結果は、トランザクションのネスト深さを明示的に示す値が、ゼロより大きい所定の数と比較される場合と同等であるが、この結果が実際このやり方で生成されるかどうかは問題ではない。
【００３９】
対応するコンピュータ・プログラムは、ホスト・データ処理装置を制御して、命令を実行する命令実行環境を提供でき、その中で処理プログラム・ロジックは、上記で論じたトランザクションのネスト深さテスト命令及びＩＳＡをサポートする。かかるコンピュータ・プログラムにより、トランザクション・メモリ用サポート回路又はトランザクション・ネスト深さテスト命令のための命令デコーダ・サポートをそれ自体が備えていない汎用のホスト・データ処理装置が、こうした機能を提供する実際のハードウェアがない場合でも、トランザクション・メモリの機能性及び改善されたネスト深さテストの恩恵を受けることが可能となる。コンピュータ・プログラムは、その代わりに、この機能性をエミュレーションする命令又はデータ構造体のセットなどのプログラム・ロジックを提供し、汎用のホスト・データ処理装置が、かかるハードウェア機能を備える装置上で実行することを意図されたコードを、実行できるようにする。
【００４０】
図１は、ハードウェア・トランザクション・メモリ（ＨＴＭ：ｈａｒｄｗａｒｅ  ｔｒａｎｓａｃｔｉｏｎａｌ  ｍｅｍｏｒｙ）・サポートを備えた、データ処理装置２の実例を示す。本装置は、命令を実行してデータ処理演算を行う処理ロジック４を備える。たとえば、処理ロジック４は、加算、乗算、ＡＮＤ、ＯＲなどの算術又は論理演算を行うための算術／論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ／ｌｏｇｉｃ  ｕｎｉｔ）、浮動小数点被演算子の演算を実行する浮動小数点ユニット、又は複数のデータ要素を含むベクトル被演算子のベクトル処理を行うベクトル処理ユニットなど、様々な種類の処理演算を実行する実行ユニットを備えることができる。処理ロジック４で実行される命令の被演算子を記憶し、実行された命令の結果を記憶する、アーキテクチャ・レジスタ６のセットが提供される。アーキテクチャ・レジスタ６は、以前に実行された命令の結果の特性を示す少なくとも１つのステータス値（たとえば、条件フラグ）を記憶する、ステータス・レジスタ７を備える。命令デコーダ８は、命令キャッシュ１０から取得された命令をデコードして、処理ロジック４又はデータ処理装置２の他の要素を制御して関連する操作を実行するための制御信号を生成する。ロード／ストア・ユニット１２も提供され、（命令デコーダ８によってデコードされたロード命令に応答して）ロード操作を実行して、データ・キャッシュ１４又は主メモリ１６からアーキテクチャ・レジスタ６にデータ値をロードし、（命令デコーダ８によってデコードされたストア命令に応答して）ストア操作を実行して、アーキテクチャ・レジスタ６からのデータ値をデータ・キャッシュ１４又はメモリ１６に記憶する。
【００４１】
装置２は、ハードウェア・トランザクション・メモリ（ＨＴＭ）をサポートするための様々なリソースを提供する、トランザクション・メモリ用サポート回路２０も備える。トランザクション・メモリ用サポート回路２０のＨＴＭリソースは、たとえば、トランザクションの投機結果を記憶する投機結果記憶部２２、トランザクションがアクセスしたアドレスを追跡するアドレス追跡回路２４、トランザクションが行ったデータ・アクセスと他のスレッドが行ったデータ・アクセスとの間の競合を検出し、それにより競合が検出されたときにトランザクションを打ち切ることができる競合検出回路２６、及びトランザクション開始時にアーキテクチャ・レジスタ６からのアーキテクチャ状態データのスナップショットを記憶し、それによりトランザクションが打ち切られたときに、トランザクションの投機結果に上書きするように、この状態を復元できる復元状態記憶回路２８を備え得る。ＨＴＭリソース２０は、処理ロジック４内で飛行中の（ｉｎ  ｆｌｉｇｈｔ）任意のトランザクションの現在のトランザクション・ネスト深さを表すネスト深さの値を記憶する、ネスト深さレジスタ３０も備える。
【００４２】
図２は、トランザクション・メモリ用サポート回路２０及び処理ロジック４を使用して、所与のスレッド内のトランザクションを実行する実例を示す。トランザクションは、トランザクション開始命令（ｔｓｔａｒｔ）及びトランザクション終了命令（ｔｃｏｍｍｉｔ）で区切られたプログラム・コードのセクションである。図２に示すように、トランザクション開始命令に応答して、アーキテクチャ・レジスタ６内の現在のアーキテクチャ状態が取り込まれ、復元状態記憶回路２８に記憶される。処理ロジック４は、ｔｓｔａｒｔ命令の後に続く、以降の命令の投機的な実行を開始し、こうした命令が実行されると、その命令によってアクセスされるアドレスがアドレス追跡回路２４によって追跡され、競合検出回路２６が、追跡されたアドレスと、他のスレッドに応答してロード／ストア・ユニット１２を使用してアクセスされたアドレスとの間の競合を検出する。トランザクション内の命令の少なくともいくつかの投機結果は、投機結果記憶回路２２内に記憶される。たとえば、ストア命令ＳＴＲに応答してキャッシュ又はメモリに記憶された値は、トランザクションが保留状態にある間、投機結果記憶部２２に保持することができる。その間にアボート・イベントが発生せずにトランザクション終了命令（ｔｃｏｍｍｉｔ）に至る場合、トランザクション終了命令に応答して投機結果はコミットされる。トランザクションをコミットすると、そのスレッドの投機結果記憶部２２に記憶されたどの結果も、データ・キャッシュ１４又はメモリ１６に書き込むことができ、もはやトランザクション開始命令が検出される前のポイントにアーキテクチャの状態を戻す必要がなくなったので、復元状態２８は破棄されるか、又は上書きが許可され得る。
【００４３】
一方、たとえば、既にトランザクションによってアクセスされているアドレスに別のスレッドがアクセスするとき、競合検出回路２６によって競合が検出され、アボート・イベントが発生する場合、トランザクションの打切りがトリガされ、復元状態記憶部２８からの復元状態が、アーキテクチャ・レジスタ６に復元される。アボート・イベントが発生する他の原因には、たとえば、トランザクション内での実行が許可されていない命令の実行、投機結果記憶部２２又は投機結果若しくは所与のトランザクションが要求するアドレスを扱うアドレス追跡回路２４内のリソース不足、又はトランザクション中に受信されている割込みが含まれ得る。
【００４４】
図３は、ネストされたトランザクションのセットの実例を示す。最初に、以前の任意のトランザクションがコミットされたか、又は打ち切られたコードを処理し、その後に続いて開始命令がまだ実行されていないとき、ネスト深さの値３０で表されるネスト深さは０である。最初のトランザクション開始命令に応答して、現在のアーキテクチャ状態が取り込まれ、復元状態記憶部２８に記憶され、ネストの深さは１に増える。後に続く命令は、このネストされたトランザクションのセットの外側のトランザクション内で処理される。外側のトランザクションのトランザクション終了命令に至る前に別のトランザクション開始命令が検出された場合、復元状態記憶部２８内のリソースを節約するために復元状態は取り込まれないが、ネスト深さレジスタ３０は増やされ、ネスト深さ２を示す。同様に、図３に示すように、後に続くトランザクション開始命令は、ネスト深さのさらなる増加をトリガして、ネスト深さの値３を与えることができる。ネスト深さがゼロ以外の（且つ、トランザクション内の命令のネスト深さが２以上になるであろう）場合に実行されるトランザクション開始命令に対応するトランザクションは、トランザクション開始命令がネスト深さ０のときに実行された、またトランザクション内の命令がネスト深さ１に対応するであろう、外側のトランザクションではなく、内側のトランザクションと見なされる。
【００４５】
外側のトランザクションのトランザクション開始命令の後に続く任意のポイントでアボート・イベントが発生する場合、復元状態記憶部２８に記憶された状態は、アーキテクチャ・レジスタ６に復元され、これは、処理が外側のトランザクションの元のトランザクション開始命令に効果的に戻されることを意味する。したがって、内側のトランザクションのトランザクション開始命令に対応する状態を復元することは、できない可能性がある。ネスト深さは、アボート・イベントに応答して０にリセットされる。
【００４６】
どんなアボート・イベントもない場合、外側のトランザクションに対応するトランザクション終了命令に至ると、外側のトランザクションのトランザクション開始命令がコミットされるので、内側のトランザクションのトランザクション終了命令は無視され、処理の何らかの投機結果が実行される。つまり、トランザクション終了命令が実行され、ネスト深さが２以上の場合、結果のコミットは発生しない。トランザクション終了命令が実行され、ネスト深さが１の場合、結果はコミットされる。各トランザクション終了命令に応答して、ネスト深さは減り、ネスト深さが０に戻ると、これはすべての未処理のトランザクションが完了し、処理が現時点であらゆるトランザクションの外側にあることを意味する。トランザクションを扱うこの手法は、ネストされたトランザクションの数に関係なく、特定のスレッドに投機結果記憶リソース、アドレス追跡リソース、又は復元状態記憶リソースの１つのセットだけを割り当てればよく、他のスレッドがトランザクションを実行するために、より多くのリソースをとっておくことを意味する。
【００４７】
ただし、ソフトウェアは、現在の処理がトランザクション内にあるか否か、及びトランザクション内にある場合、現在の処理が内側のトランザクション内にあるか又は外側のトランザクション内にあるかを、知ることが必要となる場合がある。
【００４８】
図４は、こうした疑問を解決するための、トランザクションの深さテスト（ｔｔｅｓｔ）命令の第１の実例を示す。トランザクションの深さテスト命令に応答して、命令デコーダ８は、処理ロジック４を制御し、現在のトランザクションのネスト深さをゼロより大きい所定値と比較した結果に対応している操作を実行する。本実例では、所定の数は１である。比較に応答して、ステータス・レジスタ７内の条件フラグは、比較結果に応じた値にセットされる。任意選択で、トランザクションの深さテスト命令のいくつかの変形例は、追加の汎用レジスタＲｘも指定でき、その場合、現在のトランザクションのネスト深さを表すネスト深さの値を、指定されたレジスタに書き込むことができる。
【００４９】
図５は、比較に応じてステータス・レジスタ７のステータス・フラグをセットする実例を示す。ステータス・フラグは以下を含む。
・命令の結果が正の場合は０にセットされ、結果が負の場合は１にセットされる、負フラグＮ。
・結果がゼロの場合は１にセットされ、結果がゼロ以外の場合は０にセットされる、ゼロ・フラグＺ。
・結果の値が使用可能なビット数内に収まらず、そのため最上位ビットの桁上がりが発生する場合は１にセットされ、そうでない場合は０にセットされるキャリ・フラグＣ。
・２の補数のバイナリの値を使用して表わすことができる最大の正の値から、２の補数形式で表わすことができる最大の負の値へのオーバーフローがある場合、又はその逆の場合に１にセットされる、オーバーフロー・フラグＶ。
【００５０】
図５の表に示すように、ネスト深さが０（トランザクション内ではない）の場合、ｔｔｅｓｔ命令に応答して、ステータス・フラグは、Ｚフラグ及びＣフラグが０にセットされ、Ｎ及びＶフラグは任意の値（０又は１のどちらでも）を取ることができる、第１の状態にセットされる。トランザクションのネスト深さが１（外側のトランザクション内にある）の場合、ステータス・フラグは、Ｚフラグ及びＣフラグが両方とも１にセットされ、Ｎフラグ及びＶフラグはやはり任意の値を取ることができる、第２の状態にセットされる。トランザクションのネスト深さが１より大きい（内側のトランザクション内にある）場合、ステータス・フラグは、Ｚフラグが０にセットされ、Ｃフラグが１にセットされ、フラグＮ及びＶはやはり任意の値を取ることができる、第３の状態にセットされる。これにより、後に続く条件付き分岐命令又は他の条件付き命令が、フラグのステータスに基づいて条件付き操作を実行できる。条件付き命令は、ステータス・レジスタ７のフラグに適用されるべき特定のテスト条件を識別する条件コードを指定できる。以下の表は、様々な条件コード、及びそのテスト条件を満たすための、満たされるべきフラグの対応する値を表す。
【表１】
2020535513.tif 000003
【００５１】
この手法では、以下のように、２つの命令シーケンスを使用して、以下の疑問のいずれにも答えることができる。
【表２】
2020535513.tif 000004
【００５２】
図４は、比較器５０がネスト深さを所定の値１と比較する場合の実例を示す。ネスト深さから１を減算し、その結果に基づいてフラグをセットすることにより、同等の結果を得ることができる。また、場合によっては、ネスト深さの値は、図３に示すように、実際のネスト深さに正確に一致する形で表されない可能性があり、この場合、処理ロジック４は、ネスト深さレジスタ３０内で使用されるネスト深さの表現を解釈し、ネスト深さの明示的な示度が１と比較された場合と同等の結果を生成する、何らかの回路を備えることができる。またいくつかの変形例では、１と比較する代わりに、トランザクション・テスト命令が、２以上と比較することができる。
【００５３】
図６は、トランザクションのネスト深さテスト命令の第２の実例を示し、この実例では、少なくとも１つのステータス値が書き込まれるべき汎用レジスタＲｘを指定し、状態は、ネスト深さレジスタ３０によって示される現在のトランザクションのネスト深さに応じて選択される。図６の表に示すように、指定されたレジスタＲｘの２ビットは、ネスト深さが０、１、又は１より大きいかどうかに応じて、エンコード０ｂ００、０ｂ０１、又は０ｂ１０にセットされ得る。指定されたレジスタの他のビットはすべて０にセットされ得る。図６は、トランザクションのネスト深さ０、１、及び＞１と３つのエンコードとの間の１つの特定のマッピングを示しているが、他の実施態様では、使用するマッピングを切り替えることができる（たとえば、別の実施態様では、０ｂ００を、ネスト深さが１であった場合又は１より大きかった場合．．．のうちの１つを表すために使用することができる）。ただし、図６の表に示す手法は、この場合ビットのペアがネスト深さのバイナリ値に一致するので、より直感的であり得る（２が上限であり（ｓａｔｕｒａｔｅｄ）、したがってネスト深さが２以上であるかどうかに関係なく、エンコードは０ｂ１０である）。
【００５４】
図６の下部に示すように、命令デコーダ８及び処理回路４に実装されているＩＳＡによって、様々な種類の条件分岐命令がサポートされ得る。こうした形式の条件分岐命令により、対象となるターゲット状態が図６の表に示す３つの状態のいずれであるかに関係なく、単一のｔｔｅｓｔ命令及び単一の条件分岐命令だけを使用して、ネスト深さが特定のターゲット状態に合致するかどうかをテストできる。条件分岐命令がｔｔｅｓｔ命令に依存せず、ｔｔｅｓｔ命令の結果に上書きしない、１つ又は複数の介在する命令を、ｔｔｅｓｔ命令と条件付き分岐命令との間で実行できることが理解されよう。なぜなら、この場合、介在する命令は、トランザクションのネスト深さの比較に影響を与えず、ステータス値の設定を分岐せず、条件分岐は依然として２つの命令によって効果的に制御されるためである。
【００５５】
対象となるターゲット状態が０ｂ００に一致する場合（たとえば、図６の実例でネスト深さ０）、ソース・レジスタＲｎ及び分岐ターゲット・アドレスを示すラベルを指定する、ゼロと比較する種類の条件分岐命令（ＣＢＺ）を使用できる。ＣＢＺ命令に応答して、デコーダ８は、ソース・レジスタＲｎのすべてのビットが０である場合、ラベルで示される分岐ターゲット・アドレスに分岐するように、処理ロジック４を制御する。したがって、ソース・レジスタＲｎとして、前のｔｔｅｓｔ命令のデスティネーション・レジスタＲｘを指定するＣＢＺ命令を実行することにより、０ｂ００状態に応じた条件分岐を、２つの命令だけで行うことができる。
【００５６】
対象となるターゲット状態が０ｂ０１又は０ｂ１０に一致する場合、ソース・レジスタＲｔ、ソース・レジスタ内の特定のビット位置を識別する即値＃ｉｍｍ、及び分岐ターゲット・アドレスを示すラベルを被演算子として指定する、ビット・テストする種類の条件分岐命令（ＴＢＺ又はＴＢＺＮ）を使用できる。他の実例では、ビット位置は、即値ではなく別のソース・レジスタで示され得る。ＴＢＺ命令に応答して、デコーダ８は、指定されたビット位置にあるビットが０に等しい場合、ラベルで示される分岐ターゲット・アドレスに分岐するように、処理ロジック４を制御する。ＴＢＺＮ命令に応答して、デコーダ８は、指定されたビット位置にあるビットが１に等しい場合、ラベルで示される分岐ターゲット・アドレスに分岐するように、処理ロジック４を制御する。ＴＢＺ／ＴＢＺＮ命令の両方の形式を提供することは、必須ではない。なぜなら、どちらの形式も、テストされるべきビット位置として（＃ｉｍｍによって）どのビット位置を指定するかを変えることにより、０ｂ０１と０ｂ１０との両方の状態をテストするのに使用できるからである。やはり、ソース・レジスタＲｔが前のｔｔｅｓｔ命令のデスティネーション・レジスタＲｘに一致するＴＢＺ又はＴＢＺＮ命令を実行することにより、０ｂ０１又は０ｂ１０状態に応じた条件分岐を、２つの命令で行うことができる。
【００５７】
図７は、トランザクションの深さテスト命令の実行を制御する流れ図を示す。ステップ１００で、単一のトランザクションのネスト深さテスト命令が実行される。トランザクションのネスト深さテスト命令に応答して、命令デコーダ８によって生成される制御信号に応答して、ステップ１０２で、処理回路は、トランザクションのネスト深さに応じた少なくとも１つのステータス値を、トランザクションのネスト深さが所定の値（たとえば１）に等しい場合に選択される第１の状態、及びトランザクションのネスト深さが所定の値よりも大きい又は小さい場合の少なくとも１つの別の状態を少なくとも含む、複数の状態のうちの１つにセットする。ステップ１０４で、単一のｔｔｅｓｔ命令に応答してセットされた少なくとも１つのステータス値に応じて、単一の条件分岐命令が実行される。
【００５８】
図８は、使用することができるシミュレータの実施態様を示す。前述の実施例は、当該の技法をサポートする特定の処理ハードウェアを操作する装置及び方法の点から本発明を実現する一方で、本明細書に記載の実施例にしたがって、コンピュータ・プログラムの使用によって実現される、命令実行環境を提供することも可能である。かかるコンピュータ・プログラムは、ハードウェア・アーキテクチャのソフトウェア・ベースでの実施態様を提供する限り、シミュレータと呼ばれることが多い。シミュレータのコンピュータ・プログラムの種類には、エミュレータ、仮想マシン、モデル、及び動的バイナリ・トランスレータを含むバイナリ・トランスレータが含まれる。通常、シミュレータの実施態様は、ホスト・プロセッサ２３０上で実行することができ、任意選択で、ホスト・オペレーティング・システム２２０を実行し、シミュレータ・プログラム２１０をサポートする。いくつかの配置構成では、ハードウェア及び提供された命令実行環境、並びに／又は同じホスト・プロセッサ上に提供された複数の別個の命令実行環境の間に、複数のシミュレーションの層があり得る。歴史的に、合理的な速度で実行するシミュレータの実施態様を提供するには強力なプロセッサが必要であったが、かかる手法は、互換性又は再利用性のために別のプロセッサにネイティブなコードを実行することが望まれる場合など、特定の状況で正当化され得る。たとえば、シミュレータの実施態様は、ホスト・プロセッサのハードウェアでサポートされていない追加の機能性を有する命令実行環境を提供するか、又は異なるハードウェア・アーキテクチャに通常関連する命令実行環境を提供することができる。シミュレーションの概要は、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、１９９０年冬、ＵＳＥＮＩＸカンファレンス、５３〜６３頁に提示されている。
【００５９】
特定のハードウェア構成又は機能を参照して、前に実施例を説明してきた限りにおいて、シミュレーションされた実施例で、好適なソフトウェア構成又は機能により同等の機能性を提供することができる。たとえば、特定の回路は、シミュレーションされた実施例では、コンピュータ・プログラム・ロジックとして実現することができる。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、ソフトウェア・データ構造としてシミュレーションされた実施例で実現することができる。前に説明した実施例で参照された１つ又は複数のハードウェア要素がホスト・ハードウェア（たとえば、ホスト・プロセッサ２３０）上に存在する配置構成では、いくつかのシミュレーションされた実施例は、好適な場合、ホスト・ハードウェアを使用することができる。
【００６０】
シミュレータ・プログラム２１０は、コンピュータ可読の記憶媒体（非一時的媒体であり得る）に記憶することができ、シミュレータ・プログラム２１０によってモデル化されているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェイスと同じ、プログラム・インタフェース（命令実行環境）を、ターゲット・コード２００（アプリケーション、オペレーティング・システム及びハイパーバイザが含まれ得る）に提供する。したがって、上記のトランザクションのネスト深さテスト命令を含むターゲット・コード２００のプログラム命令は、シミュレータ・プログラム２１０を使用して命令実行環境内から実行されてもよく、その結果、上記で論じた装置２のハードウェアの機能を実際には備えていないホスト・コンピュータ２３０が、こうした機能をエミュレーションできる。
【００６１】
さらに例示的な配置構成を、以下の条項に記載する。
（１）以下を備える装置。
命令をデコードする命令デコーダと、
命令デコーダによってデコードされた命令に応答してデータ処理を実行する処理回路であって、処理回路は、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を具備し、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのため処理回路は、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成された処理回路と、
以前に実行された命令の処理結果の少なくとも１つの特性を示す、少なくとも１つのステータス値を記憶するステータス記憶要素と
を備え、
命令デコーダによるトランザクションのネスト深さテスト命令のデコードに応答して、処理回路は、トランザクションのネスト深さをゼロより大きい所定数と比較した結果に対応する、少なくとも１つのステータス値をセットするよう構成され、ここで前記トランザクションのネスト深さは、対応するトランザクションが打ち切られずコミットされないままである所与のスレッドの、実行されたトランザクション開始命令の数を示す。
（２）以下を含むデータ処理方法。
デコードされた命令に応答して、処理回路を使用して、データ処理を実行するステップであって、処理回路は、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を備え、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのために処理回路は、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成されたステップと、
以前に実行された命令の処理結果の少なくとも１つの特性を示す、少なくとも１つのステータス値を記憶するステップと、
トランザクションのネスト深さテスト命令のデコードに応答して、トランザクションのネスト深さをゼロより大きい所定の数と比較した結果に対応する、前記少なくとも１つのステータス値をセットするステップであって、ここで前記トランザクションのネスト深さは、対応するトランザクションが打ち切られずコミットされないままである所与のスレッドの、実行されたトランザクション開始命令の数を示すステップと
を含む。
（３）ホスト・データ処理装置を制御して、命令を実行するための命令実行環境を提供する、以下を含むコンピュータ・プログラム。
データ処理のスレッド内のトランザクションの実行をサポートする処理プログラム・ロジックであって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのため処理プログラム・ロジックは、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成された処理プログラム・ロジックと、
以前に実行された命令の処理結果の少なくとも１つの特性を示す、少なくとも１つのステータス値を記憶するステータス・データ構造体と
を備え、
トランザクションのネスト深さテスト命令に応答して、処理プログラム・ロジックは、トランザクションのネスト深さをゼロより大きい所定数と比較した結果に対応する、前記少なくとも１つのステータス値をセットするよう構成され、ここで前記トランザクションのネスト深さは、対応するトランザクションが打ち切られずコミットされないままである所与のスレッドの、実行されたトランザクション開始命令の数を示す。
（４）条項３のコンピュータ・プログラムを記憶する記憶媒体。
【００６２】
本出願では、「．．．するよう構成される」という用語は、装置の要素が、定義された操作を実行できる構成を備えることを意味するように使用される。これに関連して、「構成」とは、ハードウェア又はソフトウェアの相互接続の配置構成又は態様を意味する。たとえば、装置は、定義された操作を提供する専用のハードウェアを備えてもよく、又はプロセッサ若しくは他の処理デバイスを、機能を実行するようにプログラムしてもよい。「するよう構成される」は、定義された操作を提供するために、装置要素をいかなる形であれ変更する必要があることを示唆するものではない。
【００６３】
本発明の例示的な実施例を、添付図面を参照して本明細書で詳細に説明してきたが、本発明はそれらの正確な実施例に限定されるものではなく、当業者によってその中に、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、様々な変更及び修正を行うことができることを理解されたい。
【図１】
2020535513.tif 000005
【図２】
2020535513.tif 000006
【図３】
2020535513.tif 000007
【図４】
2020535513.tif 000008
【図５】
2020535513.tif 000009
【図６】
2020535513.tif 000010
【図７】
2020535513.tif 000011
【図８】
2020535513.tif 000012
【手続補正書】
【提出日】令和2年6月8日(2020.6.8)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
少なくともいくつかの実例により、以下を含むデータ処理方法を提供する。
命令デコーダを使用して命令をデコードするステップと、
命令デコーダによってデコードされた命令に応答して、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を備える処理回路を使用して、データ処理を実行するステップであって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのため処理回路は、トランザクション終了命令に至るまで、トランザクションの投機的に実行された命令の結果がコミットされるのを防止し、トランザクション終了命令に至る前にアボート・イベントが発生した場合、トランザクションの処理を打ち切るよう構成されるステップと、
単一のトランザクションのネスト深さテスト命令のデコードに応答して、少なくとも１つのステータス値を、対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするステップであって、複数の状態には、トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及びトランザクションのネスト深さが所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれるステップと、
単一のトランザクションのネスト深さテスト命令の後に続く単一の条件分岐命令のデコードに応答して、少なくとも１つのステータス値が第１の状態にあることを条件とする条件分岐を実行するステップと
を含む。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコーダと、
前記命令デコーダによってデコードされた前記命令に応答してデータ処理を実行する処理回路と
を備え、前記処理回路は、前記処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を具備し、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、そのため前記処理回路は、前記トランザクション終了命令に至るまで、前記トランザクションの前記投機的に実行された命令の結果がコミットされるのを防止し、前記トランザクション終了命令に至る前にアボート・イベントが発生した場合、前記トランザクションの処理を打ち切るよう構成され、
前記命令デコーダによるトランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、少なくとも１つのステータス値を、前記対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう構成され、前記複数の状態には、前記トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及び前記トランザクションのネスト深さが前記所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれ、且つ
前記命令デコーダは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャをサポートするよう構成され、前記命令セット・アーキテクチャにより、前記命令デコーダは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、前記処理回路を制御し、前記トランザクションのネスト深さに応じて前記少なくとも１つのステータス値をセットし、前記少なくとも１つのステータス値が前記第１の状態にあることを条件として、条件分岐を実行できる、装置。
【請求項２】
前記所定の数は１である、請求項１に記載の装置。
【請求項３】
前記少なくとも１つの別の状態は、
前記トランザクションのネスト深さが前記所定の数より小さい場合に選択される、第２の状態と、
前記トランザクションのネスト深さが前記所定の数より大きい場合に選択される、第３の状態と
を含む、請求項１又は２に記載の装置。
【請求項４】
前記命令セット・アーキテクチャは、前記命令デコーダが、前記処理回路を制御して、前記トランザクションのネスト深さに応じて前記少なくとも１つのステータス値をセットし、ターゲット状態が前記第１の状態であるか、前記第２の状態であるか、又は前記第３の状態であるかどうかにかかわらず、単一の条件分岐命令が後に続く単一のトランザクションのネスト深さテスト命令に応答して、前記少なくとも１つのステータス値が前記複数の状態のうち前記ターゲット状態にあることを条件として条件分岐を実行することを可能にする、１種又は複数種類の条件分岐命令を含む、請求項３に記載の装置。
【請求項５】
以前に実行された命令の処理結果の少なくとも１つの特性を示す、少なくとも１つの条件ステータス値を記憶する条件ステータス記憶要素
を備え、
前記命令デコーダによる前記トランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、前記トランザクションのネスト深さを前記所定の数と比較した結果に対応するために、前記少なくとも１つの条件ステータス値をセットするよう構成される、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
テスト条件を指定する、前記命令デコーダによる条件ステータス依存の条件分岐命令のデコードに応答して、前記処理回路は、前記条件ステータス記憶要素に記憶されている前記少なくとも１つの条件ステータス値が、前記テスト条件を満たすかどうかを条件として、前記条件分岐を実行するよう構成される、請求項５に記載の装置。
【請求項７】
命令の被演算子を記憶する複数の汎用レジスタを備え、
前記命令デコーダによる前記トランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、前記トランザクションのネスト深さを表すトランザクションのネスト深さの値を、前記トランザクションのネスト深さテスト命令によって指定される汎用レジスタに書き込むよう構成される、請求項５又は６に記載の装置。
【請求項８】
命令の被演算子を記憶する複数の汎用レジスタを備え、
前記命令デコーダによる前記トランザクションのネスト深さテスト命令のデコードに応答して、前記処理回路は、前記少なくとも１つのステータス値を、前記トランザクションのネスト深さテスト命令によって指定される汎用レジスタに書き込むよう構成される、請求項１から４までのいずれか一項に記載の装置。
【請求項９】
前記第１の状態において、前記少なくとも１つのステータス値は、
全ビットが０に等しい第１のエンコードと、
第１の所定のビットが１に等しく、第２の所定のビットが０に等しい第２のエンコードと、
前記第１の所定のビットが０に等しく、前記第２の所定のビットが１に等しい第３のエンコードと
のうちの１つを有する、請求項１から４まで及び８のいずれか一項に記載の装置。
【請求項１０】
前記第１、第２、及び第３の状態のうちの第１の状態では、前記少なくとも１つのステータス値は、全ビットが０に等しい第１のエンコードを有し、
前記第１、第２、及び第３の状態のうちの第２の状態では、前記少なくとも１つのステータス値は、第１の所定のビットが１に等しく、第２の所定のビットが０に等しい第２のエンコードを有し、且つ
前記第１、第２、及び第３の状態のうちの第３の状態では、前記少なくとも１つのステータス値は、前記第１の所定のビットが０に等しく、前記第２の所定のビットが１に等しい第３のエンコードを有する、請求項３又は４に記載の装置。
【請求項１１】
前記命令デコーダの、ターゲット・レジスタを指定する、ゼロと比較する種類の条件分岐命令のデコードに応答して、前記処理回路は、前記ターゲット・レジスタの全ビットが０に等しいことを条件とする前記条件分岐を実行するよう構成される、請求項１から１０までのいずれか一項に記載の装置。
【請求項１２】
前記命令デコーダの、ターゲット・レジスタの所定のビットを指定する、ビット・テストする種類の条件分岐命令のデコードに応答して、前記処理回路は、前記ターゲット・レジスタの前記所定のビットが１に等しいことを条件とするか、又は前記ターゲット・レジスタの前記所定のビットが０に等しいことを条件とする、前記条件分岐を実行するよう構成される、請求項１から１１までのいずれか一項に記載の装置。
【請求項１３】
前記トランザクションのネスト深さを表すトランザクションのネスト深さの値を記憶する、トランザクションのネスト深さ記憶要素を備える、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
前記トランザクション・メモリ用サポート回路は、前記トランザクションを打ち切ると復元されるように、前記トランザクション開始命令に応答して取り込まれたトランザクション復元状態を記憶する、復元状態記憶回路を備える、請求項１から１３までのいずれか一項に記載の装置。
【請求項１５】
前記処理回路は、
前記トランザクションのネスト深さがゼロに等しい場合、前記トランザクション開始命令に応答して前記トランザクション復元状態を取り込み、且つ
前記トランザクションのネスト深さがゼロより大きい場合、前記トランザクション開始命令に応答した前記トランザクション復元状態の取込みを抑える
よう構成される、請求項１４に記載の装置。
【請求項１６】
前記トランザクション・メモリ用サポート回路は、少なくとも１つのスレッドの少なくとも１つのトランザクションの前記投機的に実行された命令の前記結果を記憶する投機結果記憶回路を備える、請求項１から１５までのいずれか一項に記載の装置。
【請求項１７】
前記トランザクション・メモリ用サポート回路は、最初のスレッドのトランザクション内で行われた所与のアドレスへのデータ・アクセスと、別のスレッドによって行われた同じアドレスへのデータ・アクセスとの競合を検出する、競合検出回路を備える、請求項１から１６までのいずれか一項に記載の装置。
【請求項１８】
前記競合検出回路は、前記競合の検出に応答して、前記アボート・イベントをトリガするよう構成される、請求項１７に記載の装置。
【請求項１９】
前記トランザクション・メモリ用サポート回路は、トランザクション内の命令によってアクセスされるアドレスを追跡するアドレス追跡回路を備える、請求項１から１８までのいずれか一項に記載の装置。
【請求項２０】
命令デコーダを使用して命令をデコードするステップと、
前記命令デコーダによってデコードされた前記命令に応答して、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするトランザクション・メモリ用サポート回路を備える前記処理回路を使用して、データ処理を実行するステップであって、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、そのため前記処理回路は、前記トランザクション終了命令に至るまで、前記トランザクションの前記投機的に実行された命令の結果がコミットされるのを防止し、前記トランザクション終了命令に至る前にアボート・イベントが発生した場合、前記トランザクションの処理を打ち切るよう構成されるステップと、
単一のトランザクションのネスト深さテスト命令のデコードに応答して、少なくとも１つのステータス値を、前記対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするステップであって、前記複数の状態には、前記トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及び前記トランザクションのネスト深さが前記所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれるステップと、
前記単一のトランザクションのネスト深さテスト命令の後に続く単一の条件分岐命令のデコードに応答して、前記少なくとも１つのステータス値が前記第１の状態にあることを条件とする条件分岐を実行するステップと
を含むデータ処理方法。
【請求項２１】
ホスト・データ処理装置を制御して、命令を実行するための命令実行環境を提供するコンピュータ・プログラムであって、
データ処理のスレッド内のトランザクションの実行をサポートする処理プログラム・ロジック
を含み、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、そのため前記処理プログラム・ロジックは、前記トランザクション終了命令に至るまで、前記トランザクションの前記投機的に実行された命令の結果がコミットされるのを防止し、前記トランザクション終了命令に至る前にアボート・イベントが発生した場合、前記トランザクションの処理を打ち切るよう構成され、
トランザクションのネスト深さテスト命令に応答して、前記処理プログラム・ロジックは、少なくとも１つのステータス値を、前記対応するトランザクションが打ち切られずコミットされないままである、所与のスレッドの実行されたトランザクション開始命令の数を示す、トランザクションのネスト深さに応じて選択された複数の状態の１つにセットするよう構成され、前記複数の状態には、前記トランザクションのネスト深さがゼロより大きい所定の数に等しい場合に選択される第１の状態、及び前記トランザクションのネスト深さが前記所定の数より大きい又は小さい場合に選択される少なくとも１つの別の状態が含まれ、
前記処理プログラム・ロジックは、少なくとも１種類の条件分岐命令を含む命令セット・アーキテクチャをサポートするよう構成され、前記命令セット・アーキテクチャにより、前記処理プログラム・ロジックは、単一の条件分岐命令がその後に続く単一のトランザクションのネスト深さテスト命令に応答して、前記トランザクションのネスト深さに応じて前記少なくとも１つのステータス値をセットし、前記少なくとも１つのステータス値が前記第１の状態にあることを条件として、条件分岐を実行できる、コンピュータ・プログラム。
【請求項２２】
請求項２１に記載の前記コンピュータ・プログラムを記憶する記憶媒体。
【国際調査報告】
2020535513.tif 000013
2020535513.tif 000014