(57)【要約】  データ処理システムは、複数のベクトル要素に関する、プログラム・ループ本体のベクトル化された実行を制御する述語的ループ命令をサポートする。処理されることになる要素の数が、この要素サイズに対してサポートされる処理のレーンの数の整数倍でないとき、述語的ループ命令は、必要とされない１つ又は複数のレーンにおける処理の抑制を制御する。
2019509574.tif 000002
【特許請求の範囲】
【請求項１】
個々のベクトル処理レーンと関連付けられたＮｍａｘ個までのベクトル要素の処理をサポートする少なくとも１つのベクトル処理プログラム命令を含むプログラム命令によって指定される処理動作を行う処理回路と、
前記処理動作を行うために、前記プログラム命令を復号して前記処理回路を制御する制御信号を生成する命令復号器と、
を備え、
前記命令復号器が、行われることになるプログラム・ループ本体のいくつかの繰返しの中で処理されることになるいくつかのベクトル要素Ｎｖｅを関連付けた述語的ループ命令を復号する述語的ループ命令復号器回路を備え、
前記処理回路が、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、Ｎｖｅ／Ｎｍａｘが整数でないときに、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数における処理を少なくとも部分的に抑制するよう動作する述語ループ制御回路を備える、
データを処理するための装置。
【請求項２】
Ｎｍａｘが、前記プログラム・ループ本体内部の前記プログラム命令に依存しない定数値である、請求項１に記載の装置。
【請求項３】
前記処理回路が、所定の数のビットＶＲｗｉｄｔｈをそれぞれ有し、それぞれがいくつかのビットＶＥｗｉｄｔｈを有する複数の前記ベクトル要素を格納できるベクトル・レジスタ備え、ここでＮｍａｘが（ＶＲｗｉｄｔｈ／ＶＥｗｉｄｔｈ）の整数部分によって与えられる、請求項１に記載の装置。
【請求項４】
前記述語的ループ命令が、ＶＥｗｉｄｔｈを示す値を指定する、請求項３に記載の装置。
【請求項５】
前記述語的ループ命令が、
前記述語的ループ命令内にＮｖｅをイミディエート値として符号化することと、
Ｎｖｅを示すデータを収めるレジスタの識別子を符号化することと、
のうちの１つによってＮｖｅを指定する、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記述語的ループ命令が、前記プログラム・ループ本体のサイズを示す値を指定する、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
前記述語的ループ命令を処理したとき、ループの繰返しが必要とされないと前記処理回路が決定した場合、前記処理回路が、
前記プログラム・ループ本体の前記終わりに到達したことを、前記プログラム・ループ本体の前記サイズを示す前記値が示すまで、少なくともいくつかの命令の実行を抑制すること、又は
前記プログラム・ループ本体の前記終わりに到達したことを、前記プログラム・ループ本体の前記サイズを示す前記値が示すまで、少なくともいくつかの命令の結果レジスタのアップデートを抑制すること、又は
前記プログラム・ループ本体に続く前記命令への分岐をトリガすること、
のうちの１つによって前記プログラム・ループ本体を抑制する、請求項６に記載の装置。
【請求項８】
前記述語的ループ命令が、述語的ゼロ・オーバヘッドのループ命令であり、前記処理回路が、前記述語的ループ開始命令に続く前記プログラム・ループ本体のプログラム命令によって指定される処理動作を行い、前記述語的ループ開始命令を除外するように前記処理回路を制御するループ制御回路を備える、請求項６に記載の装置。
【請求項９】
前記命令復号器が、ループ制御データを格納するように前記処理回路を制御する制御信号を生成するために、前記プログラム・ループ本体の終わりでループ終了命令を復号し、さらなるループの繰返しが必要とされるかどうかを決定し、さらなるループの繰返しが必要とされる場合、前記プログラム・ループ本体の冒頭の命令に分岐するループ終了命令復号回路を備え、
前記ループ制御データの制御下で、前記プログラム・ループ本体の最後のプログラム命令を少なくとも部分的に行うことに続いて、前記ループ制御回路が、さらなるループの繰返しが必要とされるかどうかを決定し、さらなるループの繰返しが必要とされる場合、前記ループ終了命令に先行する前記プログラム・ループ本体のプログラム命令によって指定される処理動作を行い、前記ループ終了命令を除外するように前記処理回路を制御する、
請求項１から８までのいずれか一項に記載の装置。
【請求項１０】
前記述語的ループ命令を処理したとき、前記処理回路が、ループの繰返しが必要とされないと決定した場合、前記処理回路が、
前記ループ終了命令に到達するまで、少なくともいくつかの命令の前記実行を抑制すること、又は
前記ループ終了命令に到達するまで、少なくともいくつかの命令の結果レジスタのアップデートを抑制すること、
のうちの１つによって前記プログラム・ループ本体を抑制する、請求項９に記載の装置。
【請求項１１】
前記ループ制御データが、ＶＥｗｉｄｔｈを示すデータを含む、請求項３及び９に記載の装置。
【請求項１２】
前記ループ制御データが、
前記冒頭の命令のアドレスを示すループ開始データと、
前記ループ終了命令の直前の前記プログラム・ループ本体の最後の命令と前記プログラム・ループ本体の前記冒頭の命令との間の前記間隔を示すループ開始オフセット・データと、
前記ループ終了命令の直前の前記プログラム・ループ本体の最後の命令のアドレスを示すループ終了データと、
前記ループ終了命令の直前の前記プログラム・ループ本体の最後の命令に到達する前に処理されるべき、残っている命令の前記数を示すループ残存命令データと、
前記ループ終了命令の直前の前記プログラム・ループ本体の最後の命令に到達する前に処理されるべき、残っているプログラム記憶メモリの場所の前記数を示すループ残存サイズ・データと、
ループ制御有効データと、
のうちの１つ又は複数を含む、請求項９、１０、及び１１のいずれか一項に記載の装置。
【請求項１３】
前記命令復号器が、ＶＥｗｉｄｔｈ＝ＶＲｗｉｄｔｈの述語的ループ開始命令のような、非述語的ループ開始命令を行うように前記処理回路を制御する制御信号を生成する、前記非述語的ループ開始命令の復号回路を備える、請求項３に記載の装置。
【請求項１４】
浮動小数点データの値を格納するための浮動小数点レジスタ、並びに浮動小数点制御データ、及びＶＥｗｉｄｔｈを示す値を格納するための浮動小数点制御レジスタを備え、
浮動小数点データの値が前記プログラム命令にアクセス可能なとき、前記浮動小数点制御レジスタもアクセス可能であり、
前記浮動小数点データの値が前記プログラム命令にアクセス不能なとき、前記浮動小数点制御レジスタもアクセス不能である、
請求項１から１３までのいずれか一項に記載の装置。
【請求項１５】
前記非述語的ループ開始復号回路が非述語的ループ開始命令を復号し、ＶＥｗｉｄｔｈ＝ＶＲｗｉｄｔｈであって、前記浮動小数点の値がアクセス可能であるとき、前記非述語的ループ開始復号回路が、ＶＥｗｉｄｔｈを表す値を前記浮動小数点制御レジスタ内に格納するように前記処理回路を制御し、前記処理回路がＶＥｗｉｄｔｈを表す前記値を読み込もうとする際に、ＶＥｗｉｄｔｈを表す前記値が、前記浮動小数点制御データレジスタから読み込まれ、
前記非述語的ループ開始復号回路が非述語的ループ開始命令を復号し、前記浮動小数点の値がアクセス不能であるとき、前記処理回路が、前記浮動小数点制御レジスタに格納されたＶＥｗｉｄｔｈのいずれの値にも依存しない、ＶＥｗｉｄｔｈ＝ＶＲｗｉｄｔｈを表す値を返す、
請求項１３及び１４に記載の装置。
【請求項１６】
前記非述語的ループ開始命令の実行に続いて、及び前記プログラム・ループ本体の繰返しの前記数Ｎｉｔが完了される前に、前記浮動小数点データの値がアクセス不能からアクセス可能に変更されると、ＶＲｗｉｄｔｈを示す値が、前記浮動小数点制御レジスタに格納される、請求項１５に記載の装置。
【請求項１７】
所与のベクトル処理レーンの所与の部分と関連付けられた動作の抑制が、
前記所与の部分に対応するその後のベクトル命令のうちの１つの行先ベクトル・レジスタの部分のアップデートを抑制することと、
前記所与の部分に対応する行先ベクトル・レジスタの部分をゼロにセットすることと、
前記所与のレーンの前記所与の部分のうちの１つに対応する制御情報に依存して前記所与のレーンに対応する行先ベクトル・レジスタの部分のアップデートを抑制することと、
前記所与の部分のうちの１つに対応する前記制御情報に依存して前記所与のレーンに対応する前記処理を抑制することと、
のうちの１つによって行われる、請求項１から１６までのいずれか一項に記載の装置。
【請求項１８】
個々のベクトル処理レーンと関連付けられたＮｍａｘ個までのベクトル要素の処理をサポートする少なくとも１つのベクトル処理プログラム命令を含むプログラム命令によって指定される処理動作を行うための処理手段と、
前記処理動作を行うために、前記プログラム命令を復号して前記処理手段を制御する制御信号を生成するための命令復号手段と、
を有し、
前記命令復号手段が、行われることになるプログラム・ループ本体のいくつかの繰返しの中で処理されることになるいくつかのベクトル要素Ｎｖｅを関連付けた述語的ループ命令を復号するための述語的ループ命令復号手段を有し、
前記処理手段が、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、Ｎｖｅ／Ｎｍａｘが整数でないときに、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数における処理を少なくとも部分的に抑制するよう動作するための述語的ループ制御手段を有する、
データを処理するための装置。
【請求項１９】
個々のベクトル処理レーンと関連付けられたＮｍａｘ個までのベクトル要素の処理をサポートする少なくとも１つのベクトル処理プログラム命令を含むプログラム命令によって指定される処理動作を行うステップと、
前記処理動作を前記行うステップを制御する制御信号を生成するために前記プログラム命令を復号するステップであって、
前記プログラム命令を前記復号するステップが、行われることになるプログラム・ループ本体のいくつかの繰返しの中で処理されることになるいくつかのベクトル要素Ｎｖｅを関連付けた述語的ループ命令を復号するステップを含む、
復号するステップと、
Ｎｖｅ／Ｎｍａｘが整数でないときに、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数における処理を少なくとも部分的に抑制するステップと、
を含む、データを処理する方法。
【請求項２０】
請求項１９に記載の方法によって動作する仮想マシン実行環境を提供するようにコンピュータを制御するためのコンピュータ・プログラムを非一時的な形で格納するコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理システムに関する。より詳細には、本開示は、データ処理システム内のプログラム・ループ制御に関する。
【背景技術】
【０００２】
プログラム・ループの実行をサポートするプログラム命令をデータ処理システムに用意していることは知られている。例えば、リピート・プログラム命令をサポートすることをデータ処理システムに用意していることは知られている。このようなリピート・プログラム命令は、１つ又は複数の命令の後続のシーケンスが、プログラムの実行がこのシーケンスより先に進む前に、複数回、実行／横断されるべきであることを指定するために使用される。これは、ループ挙動をもたらす。
【発明の概要】
【課題を解決するための手段】
【０００３】
本開示の少なくともいくつかの実例の実施例は、
個々のベクトル処理レーンと関連付けられたＮｍａｘ個までのベクトル要素の処理をサポートする少なくとも１つのベクトル処理プログラム命令を含むプログラム命令によって指定される処理動作を行う処理回路と、
前記処理動作を行うために、前記プログラム命令を復号して前記処理回路を制御する制御信号を生成する命令復号器と、
を備え、
前記命令復号器が、行われることになるプログラム・ループ本体のいくつかの繰返しの中で処理されることになるいくつかのベクトル要素Ｎｖｅを関連付けた述語的（ｐｒｅｄｉｃａｔｅｄ）ループ命令を復号する述語的ループ命令復号器回路を備え、
前記処理回路が、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、Ｎｖｅ／Ｎｍａｘが整数でないときに、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数における処理を少なくとも部分的に抑制するよう動作する述語（ｐｒｅｄｉｃａｔｉｏｎ）ループ制御回路を備える、
データを処理するための装置を提供する。
【０００４】
本開示の少なくともいくつかの実例の実施例は、
個々のベクトル処理レーンと関連付けられたＮｍａｘ個までのベクトル要素の処理をサポートする少なくとも１つのベクトル処理プログラム命令を含むプログラム命令によって指定される処理動作を行うための処理手段と、
前記処理動作を行うために、前記プログラム命令を復号して前記処理手段を制御する制御信号を生成するための命令復号手段と
を有し、
前記命令復号手段が、行われることになるプログラム・ループ本体のいくつかの繰返しの中で処理されることになるいくつかのベクトル要素Ｎｖｅを関連付けた述語的ループ命令を復号するための述語的ループ命令復号手段を有し、
前記処理手段が、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、Ｎｖｅ／Ｎｍａｘが整数でないときに、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数における処理を少なくとも部分的に抑制するよう動作するための述語的ループ制御手段を有する、
データを処理するための装置を提供する。
【０００５】
本開示の少なくともいくつかの実例の実施例は、
個々のベクトル処理レーンと関連付けられたＮｍａｘ個までのベクトル要素の処理をサポートする少なくとも１つのベクトル処理プログラム命令を含むプログラム命令によって指定される処理動作を行うステップと、
前記処理動作を前記行うステップを制御する制御信号を生成するために前記プログラム命令を復号するステップであって、
前記プログラム命令を前記復号するステップが、行われることになるプログラム・ループ本体のいくつかの繰返しの中で処理されることになるいくつかのベクトル要素Ｎｖｅを関連付けた述語的ループ命令を復号するステップを含む、
復号するステップと、
Ｎｖｅ／Ｎｍａｘが整数でないときに、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数における処理を少なくとも部分的に抑制するステップと、
を含む、データを処理する方法を提供する。
【０００６】
添付の図面を参照しながら、ほんの一例として、実例の実施例がこれから説明される。
【図面の簡単な説明】
【０００７】
【図１】データ処理装置を概略的に示す。
【図２Ａ】分岐見込み（ｂｒａｎｃｈ−ｆｕｔｕｒｅ）命令を概略的に示す。
【図２Ｂ】分岐見込み命令を含むプログラム命令のシーケンスを概略的に示す。
【図２Ｃ】所定の命令を示すプログラム可能なパラメータの様々な実装形態を有する、いくつかの分岐見込み命令を概略的に示す。
【図２Ｄ】プログラム可能な分岐宛先アドレスの様々な実装形態を有する、いくつかの分岐見込み命令を概略的に示す。
【図３Ａ】処理パイプラインを通じて進行する分岐見込み命令を含むプログラム命令のシーケンスを概略的に示す。
【図３Ｂ】分岐見込み命令を含む命令のシーケンスのプログラム・フローを概略的に示す。
【図３Ｃ】分岐見込みとリンクの命令を含む命令のシーケンスのプログラム・フローを概略的に示す。
【図４】分岐見込み処理の１つの方法を概略的に示す。
【図５】データ無効化に応答する処理を含む分岐見込み処理の別の方法を概略的に示す。
【図５Ａ】条件付き分岐見込み命令を処理する実例を示す。
【図５Ｂ】逆条件に対応する条件付き分岐見込み命令のペアを処理する実例を示す。
【図６】ゼロ・オーバヘッドのループ挙動を概略的に示す。
【図７】図６のゼロ・オーバヘッドのループ挙動に続く命令を実行するときの処理パイプラインのステージの内容を概略的に示す。
【図８】ゼロ・オーバヘッドのループ挙動及び分岐見込み命令の挙動を制御するループ／分岐制御回路を含む処理パイプラインを概略的に示す。
【図９】ループ開始位置への分岐が行われるべきプログラム実行時のポイントを識別するために、プログラム・カウンタの値とループ制御データのフィールドとの間で、どのように比較が行われ得るかを示す。
【図１０Ａ】ループ開始プログラム命令の挙動を概略的に示す流れ図である。
【図１０Ｂ】ループ開始命令の実装形態を概略的に示す。
【図１１】ループ終了プログラム命令の挙動を概略的に示す流れ図である。
【図１２】ゼロ・オーバヘッドのループ挙動の一部としてプログラム・ループ本体を実行するときのループ制御回路のアクションを概略的に示す流れ図である。
【図１３】述語を提供するプログラム・ループ本体内部の命令の実行の制御を概略的に示す流れ図であり、これによってベクトル命令は、プログラム・ループ本体の所与の繰返しが述語によって制御されている間、特定のベクトル要素がアクティブな、複数のベクトル要素上で動作することができる。
【図１４Ａ】非述語的（ｎｏｎ−ｐｒｅｄｉｃａｔｅｄ）及び述語的ループの実行の実例を示す。
【図１４Ｂ】非述語的及び述語的ループの実行の実例を示す。
【図１４Ｃ】非述語的及び述語的ループの実行の実例を示す。
【図１４Ｄ】非述語的及び述語的ループの実行の実例を示す。
【図１４Ｅ】非述語的及び述語的ループの実行の実例を示す。
【図１５】仮想マシンの実装形態を概略的に示す。
【発明を実施するための形態】
【０００８】
本開示は、パフォーマンスを低下させる処理の遅れを分岐命令が引き起こす可能性があることを認識している。この問題に対処するために、本開示は、分岐見込み命令を復号する分岐見込み命令復号回路を提供する。分岐見込み命令は、分岐宛先アドレスと関連付けられたプログラム可能なパラメータを含む。分岐宛先アドレスは、分岐に続く、処理回路によって処理され得るプログラム命令に対応する。分岐見込み命令は、プログラム命令のシーケンス内の分岐見込み命令に続く所定の命令を示す、さらなるプログラム可能な分岐ポイント・データ・パラメータも含む。分岐見込み命令にさらなるプログラム可能な分岐ポイント・データ・パラメータを含むことによって、処理回路は、分岐ポイントより前に分岐宛先アドレスへの分岐に準えることができる。したがって分岐ポイントに到達するときに、処理の遅れが回避又は緩和され得る。
【０００９】
図１は、メモリ１０２に連結されたデータ処理装置１００の実例を概略的に示す。メモリ１０２は、プログラム命令及びオペランド・データを格納する。命令はフェッチ・ユニット１０４によってフェッチされ、命令復号器１０６によって復号されて、処理回路を制御する制御信号１２０を生成する。処理回路は、メモリ１０２から受け取られた、又はメモリ１０２に格納された浮動小数点のオペランドに対してデータ処理演算を行うために、浮動小数点処理回路１０８及び浮動小数点レジスタ１１０を含むことができる。処理回路は、メモリ１０２から受け取られ、又はメモリ１０２に格納する整数のオペランドに対してデータ処理演算を行うために、乗算器１１２、シフタ１１４、加算器１１６、及び整数レジスタ１１７も含む。
【００１０】
フェッチ・ユニットによってフェッチされたいくつかの命令は、プログラム命令の現在のシーケンスの後から、分岐宛先アドレスから始まるメモリ・アドレスの場所に格納されたプログラム命令に、処理を分岐させる分岐命令であってよい。分岐命令に対応するために、データ処理装置１００は、プログラム・フローを分岐宛先アドレスにリダイレクトできる分岐ユニット１１９を含む。分岐命令の処理を速めるために、データ処理装置１００は、分岐予測器１１８を含むことができる。分岐プレディケータ１１８は状態データを格納し、分岐命令が、状態データに基づいて行われるか、又は行われないかを予測する。分岐ユニット１１９は、さらに本明細書で説明されるように、（他のループ制御回路の代用として、又はこれらに加えて）ゼロ・オーバヘッドのループ挙動をサポートする／もたらすループ制御データによって制御されてもよい。分岐予測器１１８も、さらに本明細書で説明されるように、ループ制御によって実装される。
【００１１】
図２Ａは、分岐見込み命令ＢＦ２００の実例を概略的に示す。分岐見込み命令２００は、分岐宛先アドレス２５４を示すプログラム可能なパラメータ、プログラム可能な分岐ポイント・データ２５２を提供するプログラム可能なパラメータ、及び分岐見込み命令として命令を識別する符号化ビット２５８を含む。分岐ポイント・データ２５２は、データ処理装置によって処理されることになるプログラム命令のシーケンスの中の分岐見込み命令ＢＦに続く所定の命令を示す。分岐宛先アドレス２５４は、プログラム・フローが所定の命令に到達するときに処理が分岐すべき命令の場所を示す。いくつかのビットｘ２５６は、他のパラメータのために予約されることがある。
【００１２】
図１に戻ると、データ処理装置は、分岐見込み符号化ビット２５８にマッチさせることによって、命令が分岐見込みであることを識別するのに応答して、図２Ａに示されたものなどの分岐見込み命令を復号するための分岐見込み命令復号回路１２２を含む。分岐見込み命令を復号すると、分岐見込み命令復号回路１２２は、分岐宛先アドレス・データ、及び所定の命令を示す分岐ポイント・データを、分岐制御データ・キャッシュ１３０に格納するように処理回路を制御する。このようにデータを格納することによって、データ処理装置１００は、プログラム命令の通常のシーケンスの処理からの分岐が発生し得るときより前の指示、及び分岐がプログラム実行ポイントを指示する場所への宛先アドレスを提供されることが可能になる。したがってプログラム・フローが、分岐見込み命令によって示される所定の命令に到達すると、分岐は、処理の遅れが緩和されるか、又はない状態で発生することができる。データ処理装置は、さらに以下に説明されるように、ループ終了命令ＤＬＥ及びループ開始命令ＤＬＳ（Ｐ）に応答するように処理回路を制御するために、ループ終了命令復号回路１２３及び（非述語的ループ開始命令復号回路の役割も果たす）述語的ループ開始命令復号回路１２５も含む。
【００１３】
分岐制御データ・キャッシュ１３０は、命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットの端から始まる所定の命令のメモリ記憶アドレスを示すビットの真部分集合として、分岐ポイントに対応するデータを格納することができる。プログラム・フローが、いつ所定の命令に到達したか決定するために、これらのビットは、プログラム・カウンタを示す値、次の命令フェッチ・アドレスを示す値、又はデータ処理装置１００の処理活動を示す値と比較されてよい（例えば、以下に説明される図９を参照）。
【００１４】
図２Ｂは、分岐見込み命令ＢＦ、並びにプログラム命令のシーケンスＡＤＤ１、ＡＤＤ２、及びＢＸを含むプログラム・コードを示し、これらは、データ処理装置１００によって処理されてよい。分岐見込み命令ＢＦは初めに、上述のように、プログラム・フローが所定の命令ＢＸに到達するときに宛先アドレスに分岐するようにデータ処理装置１００を設定する。分岐見込み命令を復号すると、データ処理装置１００は、ＡＤＤ１及びＡＤＤ２を含むプログラム命令のシーケンスを処理し続ける。データ処理装置１００がＡＤＤ２を処理すると、キャッシュ１３０に格納された分岐ポイント・データは、分岐が発生しようとしていることを示す。さらに分岐制御データ・キャッシュ１３０は、分岐されることになる命令のアドレスに対応する、対応する分岐宛先データも格納する。このようにして、分岐宛先データに対応する分岐宛先命令から始まる処理プログラム命令への分岐は、処理の遅れ、又は処理パイプラインに挿入されることになるバブル（未使用のスロット）を生じることなく、発生させることができる。
【００１５】
図２Ｃは、図２Ｂに示された命令のシーケンスに関連する所定の命令を示すプログラム可能な分岐ポイント・データ・パラメータの様々な実例を示す。図２Ｃの分岐見込み命令２０１において、分岐ポイント・データは、分岐命令ＢＸのアドレスを示すデータを含む。図１に示された分岐制御回路１２４は、ＢＸのアドレスを示すデータを、フェッチされる次の命令に対応する値にマッチさせることができる。その後、プログラム・フローが分岐命令ＢＸに到達したと決定されると、分岐制御回路１２４は、分岐見込み命令２０１の分岐宛先によって示される命令への分岐をトリガする。
【００１６】
分岐ポイント・データはまた、図２Ｃの分岐見込み命令２０２に示すように、命令ＡＤＤ２を示すデータであってもよい。したがって分岐見込み命令２０１と同じように、分岐制御回路１２４は、プログラム・フローがＡＤＤ２をフェッチし、ＢＸに到達したときに分岐宛先への分岐をトリガする。
【００１７】
図２Ｃの分岐見込み命令２０３は、図２Ｂにおける分岐見込み命令ＢＦから所定の命令ＢＸまでのアドレスのオフセットを含む、分岐ポイント・データを示す。図２Ｂの実例において、ＡＤＤ１及びＡＤＤ２は３２ビット命令である。したがって、８バイトのアドレスのオフセットは所定の命令ＢＸを示す。
【００１８】
図２Ｃの分岐見込み命令２０４は、残りの命令数を示す分岐ポイント・データを示す。残りの命令数は、所定の命令に到達する前の、分岐見込み命令に続いて実行されることになる命令の数を示す。図２Ｂの実例において、これはＡＤＤ１及びＡＤＤ２に対応する。したがって残りの命令数は、この実例では＋２である。
【００１９】
図２Ｃの分岐見込み命令２０５は、所定の命令に到達する前の、まだ処理されていない、いくつかのプログラムの記憶場所を示す残存サイズ・データを示す。命令ＡＤＤ及びＡＤＤ２が、それぞれ３２ビット及び１６ビットの可変長命令であった場合、これらの全体サイズは６バイトになるので、残りのサイズの値は６である。
【００２０】
図２Ｃの分岐見込み命令２１１は、図２Ｂにおける分岐見込み命令ＢＦから所定の命令ＢＸまでのアドレスのオフセットを含む、分岐ポイント・データを示す。図２Ｂの実例において、ＡＤＤ１及びＡＤＤ２は３２ビット命令である。したがって、アドレスのオフセットは８バイトであるが、すべての命令が少なくとも２バイト境界に揃えられ、したがって値８の最下位ビットが所定の命令のアドレスを一意に識別することが必要とされないので、所定の命令ＢＸを示す値４が使用される。
【００２１】
図２Ｄは、分岐宛先アドレスと関連付けられたプログラム可能なパラメータの様々な実装形態を有する分岐見込み命令の他のいくつかの実例を示す。図２Ｄの分岐見込み命令２０６に示すように、分岐宛先は、処理回路によって分岐されることになる命令のメモリ・アドレスを格納するレジスタの場所を指定するレジスタ指定子＜Ｒｍ＞によって示されてよい。
【００２２】
図２Ｄの分岐命令２０７は別の実例を示し、ここで分岐宛先は、分岐見込み命令のメモリ・アドレスに相対するポイントからのオフセットによって、分岐されることになる命令のアドレスを示す、イミディエートオフセット値＜ｉｍｍ＞によって示される。
【００２３】
図２Ｄの分岐見込み命令２０８及び分岐見込み命令２０９は、リンク指定子を同様に含む分岐見込み命令の実例を示す。リンク指定子は、リンク・レジスタＬＲに復帰アドレスを格納するように処理回路を制御する。プログラム・フローが分岐宛先で始まるプログラム命令の処理を完了し、リターン命令に到達すると、リンク・レジスタに格納されたアドレスへのさらなる分岐が行われる。したがって、分岐宛先でプログラム命令が処理されると、処理は、プログラム命令の元のストリームに戻ることができる。他の実例において、復帰アドレスは、所定のオフセットがスタック・ポイント・レジスタに当てはめられることによって指定された記憶エリア内の任意のアドレスに格納されてよい。
【００２４】
図２Ｄは、条件付き分岐見込み命令２１０も示す。条件付き分岐見込み命令２１０は、いくつかの条件コード、ｏｐ｛ｃｏｎｄ｝を含む。条件付き分岐見込み命令が処理されると、分岐見込み命令復号器は、条件コードが満たされたかどうかを決定し、条件付き分岐見込み命令は、この決定に従って処理される。
【００２５】
図３Ａは、図１のデータ処理装置１００の処理パイプライン（フェッチ、復号、及び実行という単純な３つのステージのパイプライン）を進行する、分岐見込み命令を含む命令のシーケンスを示す。サイクル０において、命令Ｉ１が処理パイプラインのフェッチ・ステージに送り込まれる。サイクル１において、図２Ｂに示された命令のシーケンスの第１の命令、即ち分岐見込み命令ＢＦがパイプラインに送り込まれる。命令Ｉ１も、このサイクル内の復号ステージに進行する。サイクル２において、加算命令ＡＤＤ１がパイプラインに送り込まれ、分岐見込み命令ＢＦが復号される。分岐見込み命令ＢＦを復号すると、分岐見込み命令復号回路１２２は、分岐制御データ・キャッシュ１３０に格納されている可能性がある、プログラム命令のシーケンス内の分岐見込み命令ＢＦに続く所定の命令を示す分岐ポイント・データ、及び分岐宛先データを取得する。この場合、分岐ポイント・データは、別の分岐命令ＢＸを指示可能である。
【００２６】
サイクル３において、別の命令ＡＤＤ２が処理パイプラインに送り込まれる。分岐制御回路１２４は、プログラム命令のシーケンスが所定の命令に到達したこと、及び分岐宛先アドレスから始まるプログラム命令の処理への分岐がトリガされるはずであることを識別する。したがって、次のサイクルであるサイクル４において、分岐宛先アドレスにおけるプログラム命令からの第１の命令Ｉ１ＢＴが、処理パイプラインに送り込まれる。同様に、サイクル５及びサイクル６において、さらに２つの命令Ｉ２ＢＴ及びＩ３ＢＴが、処理パイプラインに送り込まれる。
【００２７】
図３Ｂは、図３Ａの命令を処理するときのデータ処理装置１００のプログラム・フローを示す。図に示すように、Ｉ１、ＢＦ、ＡＤＤ１、及びＡＤＤ２を含む命令の第１のシーケンスは、データ処理装置によって最初に処理される。分岐見込み命令ＢＦによって、ＡＤＤ２の処理は、分岐宛先アドレスから始まるプログラム命令の別のシーケンスに対して分岐が発生するはずであることを示す。このその他のシーケンスは、分岐宛先命令Ｉ１ＢＴ、Ｉ２ＢＴ、及びＩ３ＢＴを含む。図３Ｂに示すように、プログラム・フローは、分岐見込み命令を含むプログラム命令の第１のシーケンスから分岐して離れ、分岐宛先命令を処理する。Ｉ１ＢＴ、Ｉ２ＢＴ、及びＩ３ＢＴは、算術的且つ論理的な命令、メモリ操作が行われるようにするデータ・ハンドリング命令、又は他の任意のタイプの命令であってよい。
【００２８】
図３Ｂに示されるように、分岐見込み命令ＢＦは、ＡＤＤ２命令の直後に分岐を引き起こし、分岐命令ＢＸを迂回する。分岐命令ＢＸは、分岐制御データ・キャッシュ１３０に格納された分岐見込み状態データが、分岐見込み命令ＢＦとＢＸの間で無効化されるイベントのプログラム命令のシーケンスに含まれてよい。例えば、前記処理回路がリセットされることと、ループ制御回路又はループ終了命令が、前記分岐見込み命令を含むプログラム・ループのさらなる繰返しが必要とされないと決定することと、例外がエンターされることと、例外がテール・チェーンし、それによって現在の例外より前の状態を復元させずに、処理が前記現在の例外の処理から次の例外の処理に直接的に進むことと、所定のイミディエート宛先アドレスの範囲より大きい分岐命令の実行と、分岐命令の実行と、ループ開始命令と、例外から復帰することと、前記データ処理装置の命令キャッシュが無効化されるようにする命令の実行と、前記制御データのキャッシングをディスエーブルする命令の実行と、分岐予測をディスエーブルする命令の実行と、プログラム・ループ本体内部の分岐が、ループ開始命令とループ終了命令の間にないアドレスを宛先にしていると前記処理回路が決定することと、セキュア・モードの動作と非セキュア・モードの動作を切り替えることと、１つ又は複数の実装形態を定義した条件と、のイベントにおいて、分岐見込み命令に対応する任意の格納された分岐ポイント・データが無効化されることがある。したがって、分岐見込み命令によって示される分岐を行うことは、もはや実現可能になることがない。したがって、分岐命令ＢＸは、宛先アドレスに分岐するためのバックアップとしてシーケンスのプログラム命令に含まれる。しかし通常の状況下では、分岐命令ＢＸは処理されない。
【００２９】
図３Ｃは、分岐見込みとリンクの命令ＢＦＬを含むプログラム命令のシーケンスを概略的に示す。ＢＦＬ命令は、命令ＭＵＬに到達するときに、サブルーチンｆｕｎｃ：への分岐を生じる。ＢＦＬ命令はまた、復帰アドレス値がリンク・レジスタＬＲに格納されるようにし、復帰アドレス値は、サブルーチンｆｕｎｃ：が実行されたときに返されることになるＣＭＰ命令のアドレスを示す。いくつかの実施例において、ＢＦＬ命令は、復帰アドレス値をリンク・レジスタＬＲに格納することができる。他の実施例において、ＢＦＬ命令は、リンク指標フラグを分岐制御データ・キャッシュ１３０に格納することができ、分岐制御回路１２４は、リンク指標フラグがセットされる場合に、分岐宛先アドレスへの分岐がトリガされると、復帰アドレス値をリンク・レジスタＬＲに格納することができる。
【００３０】
図４は、分岐見込み処理のための方法の１つの実例を示す。ステップ４０１において、分岐見込み命令が復号される。分岐見込み命令は、分岐宛先アドレス、及びプログラム命令のシーケンス内の分岐見込み命令に続く所定の命令を示す分岐ポイント・データをそれぞれ示すプログラム可能なパラメータを含む。方法は次にステップ４０２に進み、ここでプログラム命令のシーケンスが所定の命令に到達したかどうかが決定される。プログラム命令のシーケンスが所定の命令に到達したと決定されると、方法はステップ４０３に進み、ここで、分岐宛先アドレスからのプログラム命令の処理への分岐がトリガされる。
【００３１】
図５は、分岐見込み処理のための方法の別の実例を示す。ステップ５０１において、分岐見込み命令が復号される。前述のように、分岐見込み命令は、分岐宛先アドレス、及びプログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す分岐ポイント・データを含む。ステップ５０２において、分岐ポイント・データ及び分岐宛先アドレスは、ループ／分岐制御キャッシュに格納される。リンクを伴う分岐見込み命令の場合、復帰アドレスはまた、リンク・レジスタＬＲを使用して格納され、代替実施例において、リンクを伴う分岐見込み命令は、代わりにリンク指標フラグが格納されるようにする。処理は次にステップ５０３に進み、ここで、処理されているプログラム命令のシーケンスが所定の命令に到達したかどうかが監視される。所定の命令に到達していない場合、ステップ５０４において、分岐宛先アドレス及び分岐ポイント・データが無効化されたかどうかがチェックされる。ステップ５０４において無効化された場合、処理はステップ５０６に移り、ここで分岐見込み命令は無視され、通常のプログラム・フローが前進する。しかし、データがまだ有効であると決定される場合、処理はステップ５０３に戻る。所定の命令に到達したと決定されると、処理はステップ５０５に進み、ここで分岐宛先アドレスから始まるプログラム命令の処理への分岐がトリガされる。ステップ５０２においてリンク指標フラグを格納する実施例において、処理回路は、ステップ５０５においてこのフラグがセットされているかどうかを確かめるためにチェックし、セットされていると決定すると、復帰アドレスはリンク・レジスタＬＲに格納される。
【００３２】
図５Ａは、条件付き分岐見込み命令と共に生じ得る問題、及びこの問題に対処するための技法を示すために、命令の実例のシーケンスを示す。命令のシーケンスは、対応する条件（例えばＥＱに等しい）が満たされる場合に一定の宛先アドレスに分岐するための条件分岐ＢＥＱを含む。分岐ＢＥＱと同じ条件ＥＱを指定し、分岐宛先アドレスを示すパラメータ「ｆｕｎｃ」、及び直前に分岐が行われるアドレスＢＰを識別するための分岐ポイント・データＢＰも指定する、対応する条件付き分岐見込み命令ＢＦＣＳＥＬが含まれる。したがってＥＱ条件が満たされる場合、処理がポイントＢＰの直前の命令ＡＤＤ２に到達するときに分岐宛先命令Ｉ１ＢＴへの分岐がトリガされる。通常、条件付き分岐と関連付けられた条件が満たされない場合、分岐は行われず、代わりにプログラム・フローは順次継続する。分岐見込み命令ＢＦは同様にふるまうものと思われ、その結果、分岐見込み命令ＢＦＣＳＥＬの条件が満たされない場合、ＡＤＤ２命令に続いて、分岐宛先アドレス「ｆｕｎｃ」への分岐は行われず、代わりに分岐ポイントＢＰにおいて命令ＡＤＤ２に続く次の命令が実行される。
【００３３】
しかしＡＤＤ２に続く命令は、分岐見込み命令ＢＦＣＳＥＬに対応する条件付き分岐ＢＥＱであり、ＥＱ条件が分岐見込み命令ＢＦＣＳＥＬを満たさないことが既に分かっているので、分岐ＢＥＱもまた、この条件に不合格になる。したがって条件が不合格になると、フェッチ／復号／発行／実行のスロットを占めるが、いずれの本物の処理動作もトリガしない、処理パイプラインに挿入される２つの「浪費された」命令（分岐見込み命令ＢＦＣＳＥＬ及び分岐命令ＢＥＱ）が存在することになる（不合格になった分岐は本質的に、無演算（ＮＯＰ：ｎｏ−ｏｐｅｒａｔｉｏｎ）命令としてふるまう）。したがって、分岐見込み命令ＢＦＣＳＥＬを含むことは、分岐条件が合格になる場合にはパフォーマンスを改善できるが、条件が不合格になると、分岐見込み命令ＢＦＣＳＥＬを含むことは、分岐見込み命令ＢＦＣＳＥＬが含まれなかった場合に１つの浪費された命令（分岐ＢＥＱ）が存在する代わりに、現時点で２つの浪費された命令（分岐見込み命令ＢＦＣＳＥＬ及び分岐ＢＥＱ）が存在するので、実際にパフォーマンスの代償をこうむる。これは、分岐見込み命令ＢＦＣＳＥＬ含むことが理にかなうかどうかコンパイラが決定することを困難にし、含むべきか含むべきではないかの判定が、条件が満たされる確率に依存する可能性があり、これは、データに依存する可能性があり、コンパイル時に予測することが非常に困難になる可能性がある。
【００３４】
図５Ａは、この課題がどのように対処され得るかを示す。条件コードＥＱ、分岐ポイント情報ＢＰ、及び宛先アドレス情報「ｆｕｎｃ」に加えて、条件付き分岐見込み命令ＢＦＣＳＥＬは、分岐見込み命令ＢＦＣＳＥＬと関連付けられたその後の分岐命令ＢＥＱＸに続く命令である分岐迂回命令Ｉ２のアドレスを示す分岐迂回パラメータ「ｅｎｄ」も指定することができる。分岐見込み命令ＢＦＣＳＥＬと関連付けられた条件が満たされる場合、分岐見込み命令復号回路１２２は、上述と同じ方式で、分岐宛先アドレス・データ、及びポイントＢＰの直前の所定の命令ＡＤＤ２を示す分岐ポイント・データを分岐制御データ・キャッシュ１３０に格納するように処理回路を制御する。その一方で、分岐見込み命令ＢＦＣＳＥＬと関連付けられた条件が満たされない場合、分岐見込み命令復号回路１２２は、分岐ポイントＢＰ及び分岐迂回命令を識別する分岐制御データを分岐制御データ・キャッシュ１３０に格納するように処理回路を制御する。したがって、処理が分岐ポイントＢＰに到達するとき、条件が不合格になると、次の命令ＢＥＱに順次進む代わりに、分岐制御回路１２４は、分岐迂回命令Ｉ２への分岐をトリガする。
【００３５】
これは、条件付き分岐見込み命令と関連付けられた条件が満たされるかどうかに関わらず、分岐ポイントＢＰに到達する前に分岐制御データが無効化されない限り、分岐命令ＢＥＱ自体は到達されないということを意味する。したがって、条件が合格になるか不合格になるかに関わらず、及び分岐見込み命令が含まれるか否かに関わらず、分岐制御と関連付けられた命令スロットの数は依然として１なので、分岐見込み命令ＢＦＣＳＥＬを導入することによってこうむる代償はない。したがって、これは、分岐見込み命令を含むことがパフォーマンスの代償をもたらす可能性があるか否かを推定する必要なく、コンパイラが分岐見込み命令を使用できるということを意味し、したがって、実際にプログラム・コードを実行するときに、分岐ポイントにおける分岐の遅れを緩和するというパフォーマンスの恩恵がさらに頻繁に実現され得るように、分岐見込み命令をさらに利用しやすくする。
【００３６】
分岐迂回パラメータ「ｅｎｄ」は、条件付き分岐命令の中で様々な方式で符号化されてよく、又は暗黙的であってもよいので符号化される必要も全くなくてよい。例えば、「ｅｎｄ」のアドレスは、レジスタ内で、又はイミディエート値として指定されてよく、絶対値として指定されるか、又は分岐見込み命令ＢＦＣＳＥＬ自体のプログラム・カウンタ・アドレスに相対して指定されてもよい。しかし実際には、分岐迂回命令Ｉ２は典型的には、分岐ポイントＢＰからの２，３の命令に続くだけなので、分岐迂回パラメータを符号化するために必要とされるビット数を減らすために、分岐ポイントにおける所定の命令ＡＤＤ２のアドレスに相対して指定されたアドレスとして、分岐迂回パラメータを符号化することがさらに効率的になり得る。いくつかの実施例は、分岐ポイントＢＰが分岐命令ＢＥＱより先に任意の数の命令を指定されることを可能にすることがある。例えば、これは、分岐ポイント並びに分岐自体から分岐するときに、分岐ＢＥＱと関連付けられた条件を評価するための比較命令などの制御命令が、迂回されることを可能にすることができる。この場合、分岐迂回パラメータは、（例えば２又は４バイトといった）いくつかのアドレスのストライド値の倍数の、分岐ポイントにおける所定の命令に相対した分岐迂回命令のオフセットを指定する２進数の値であってよい。
【００３７】
しかし、他の実施例は、分岐ポイントＢＰが分岐ＢＸの直前の命令ＡＤＤ２であること、及び分岐迂回命令Ｉ２が分岐の直後の命令であるので、ＡＤＤ２とＩ２の間に１つの命令が存在することを想定できる。すべての分岐命令が一定の固定命令長を有する場合、分岐ポイントＢＰにおける命令ＡＤＤ２のアドレスと分岐迂回命令Ｉ２の間のオフセットが、一定の既知のオフセットによって分離されてよいので、分岐見込み命令の中で分岐迂回パラメータ「ｅｎｄ」を符号化する必要が全くなくてよい。
【００３８】
その一方で、分岐命令ＢＸが、分岐ポイントＢＰにおいて分岐迂回命令Ｉ２を命令ＡＤＤ２から分離するただ１つの命令であることが想定されるとしても、いくつかの実装形態は、可変命令長をサポートすることができるので、介在する分岐命令ＢＥＱは、いくつかの命令長のうちの１つを有することができる。この場合、条件付き分岐見込み命令ＢＦＣＳＥＬの中の迂回パラメータ「ｅｎｄ」は、分岐命令ＢＥＱの長さをフェッチして決定する必要なく、その後の分岐命令ＢＥＱの長さを指定することによって分岐迂回命令を識別することができ、例えば、分岐命令に対して２つの考えられる命令長（例えば１６ビット又は３２ビット）が存在する場合、迂回パラメータ「ｅｎｄ」は、１ビットのフラグによって表されてよい。
【００３９】
図５Ｂは、逆条件に対応する分岐見込み命令ＢＦＣＳＥＬのペアの使用を示す命令の別の実例のシーケンスを示す。（例えばｉｆ−ｔｈｅｎ−ｅｌｓｅ構造を処理するために）条件が満たされる場合、第１のコードへの分岐、及び条件が満たされない場合、第２のコードへの分岐を必要とするプログラム・フローにおいて、プログラムが「フォーク」を必要とすることが比較的よく見られる。したがって、プログラム命令のシーケンスは、（例えばＥＱに等しく、ＮＥに等しくない）逆条件に対応する分岐命令ＢＥＱ及びＢＮＱのペアを含むことができる。分岐を処理する際の遅れを緩和させるために、対応する条件付き分岐見込み命令ＢＦＣＳＥＬには、逆条件ＥＱ及びＮＥそれぞれが共に含まれてよい。したがって、ＥＱの条件が満足されるか、ＮＥの条件が満足されるかに関わらず、「ｆｕｎｃ１」又は「ｆｕｎｃ２」への分岐のうちの１つが行われるはずである。
【００４０】
分岐見込み命令ＢＦＣＳＥＬのペアの第１のＥＱがこの条件に不合格になると、分岐見込み命令復号回路１２２は、上述のように、迂回アドレス「ｅｎｄ」における分岐迂回命令を指定する分岐制御データを分岐制御データ・キャッシュ１３０に格納するように処理回路を制御する。次に、第２の分岐見込み命令ＢＦＣＳＥＬのＮＥがこの条件に合格するので、第１の分岐ポイントＢＰへの到達時に「ｅｎｄ」に分岐する代わりに、必要とされるプログラム・フローは、分岐ポイントＢＰにおいて関数「ｆｕｎｃ２」に分岐することを実際には必要とする。したがって、分岐制御データ・キャッシュ１３０が、初めの方の分岐見込み命令に応答してセットされた有効な分岐制御データを既に収めているときに、分岐見込み命令がこの条件に合格する場合、分岐見込み命令復号器回路１２２は、以前にセットされた分岐制御データを上書きするように処理回路を制御する。
【００４１】
しかし、分岐見込み命令ＢＦＣＳＥＬのペアの第１のＥＱがこの条件に合格すると、データは、処理が分岐ポイントＢＰに到達するときに分岐宛先アドレス「ｆｕｎｃ１」への分岐を制御するために、分岐制御データ・キャッシュ１３０に格納される。しかし、分岐見込み命令ＢＦＣＳＥＬのペアの第２のＮＥがこの条件に不合格になり、分岐ポイントＢＰにおける分岐迂回アドレス「ｅｎｄ」への分岐を示すために、分岐制御データ・キャッシュ１３０にデータを普通にセットする。しかし、以前にセットされた分岐制御データを上書きすることは、この場合、分岐ポイントＢＰに続くアドレス「ｅｎｄ」において命令Ｉ２に分岐することが、２つの関数「ｆｕｎｃ１」及び「ｆｕｎｃ２」のどちらも実行されないという結果になるような、間違った結果に至る。このことを防ぐために、分岐制御データ・キャッシュ１３０が、初めの方の分岐見込み命令に応答してセットされた有効な分岐制御データを既に収めているときに、分岐見込み命令がこの条件に不合格になる場合、分岐見込み命令復号器回路１２２は、以前にセットされた分岐制御データを分岐制御データ・キャッシュ１３０に保持するように処理回路を制御する。
【００４２】
要約すれば、「条件真」の分岐見込み命令は、以前の分岐見込み命令に応答してセットされた有効な分岐制御データを上書きするが、「条件偽」の分岐見込み命令は、以前の分岐見込み命令に応答してセットされた有効な分岐制御データを上書きしない。このことは、条件の結果に応じてプログラムが２つの代替関数のうちの１つに分岐する場合にプログラム・フロー制御における「フォーク」が必要とされるときでさえ、分岐見込み命令が正しく使用され得ることを保証する。
【００４３】
図６は、ゼロ・オーバヘッドのプログラムのループ挙動を概略的に示す。ゼロ・オーバヘッドのプログラムのループ挙動は、ループ挙動をサポートすることと関連付けられたオーバヘッドがないことを意味せず、例えば、プログラム・ループ本体を通る第１の工程の間、プログラム実行パイプライン内のスロットを占有することをループ制御プログラム命令に必要とすることなどによって、このオーバヘッドは緩和され、これらのループ制御プログラム命令を別々に実行することを必要とせずにその後の工程が制御されるということが理解されよう。
【００４４】
プログラム・フローは通常、プログラム分岐が遭遇されるまで直線的に進行する。図６に示された実例において、プログラム・フローは命令Ｉｘを通り過ぎて進行し、ループ開始命令ＤＬＳ［Ｐ］に到達する。このループ開始命令ＤＬＳ［Ｐ］は、述語的及び非述語的挙動の両方を見せることがある。ループ開始命令ＤＬＳ［Ｐ］に続く命令Ｉ０、Ｉ１、Ｉ２、Ｉ３を含むプログラム・ループ本体が、プログラム・ループ本体を通るそれぞれの工程に対して複数のベクトル要素が処理されるベクトル・プログラム・ループ本体として実行することになる場合、ループ開始命令は、述語に対して使用されることになるベクトル要素サイズを指定する。使用されることになるこのベクトル要素サイズが、根本的な処理システムの最大データ経路幅より小さいとき、これは、プログラム・ループ本体を通るそれぞれの工程上で複数のベクトル要素が処理されることになるということを示す。逆に、指定されたベクトル要素サイズが、最大データ経路幅に等しいか、又はデータ要素のサイズが指定されていない場合、これは、処理がスカラ的に推進されることになり、それによって１つの要素が、プログラム・ループ本体を通るそれぞれの工程に対して処理されるということを示す。プログラム・ループ本体を通る１つの工程の間に複数のベクトル要素を処理するとき、このような工程は、プログラム・ループ本体を通るこの工程の間に処理されるベクトル要素の数によって示される複数の繰返しに対してプログラム・ループ本体を実行したことに対応すると考えられてよい。例えば、実行されることになるプログラムは、処理されることになる８つの要素、即ちプログラム・ループ本体の８つの繰返しを必要とすることができる。これは、要素のうちの４つに対する所望の処理をそれぞれ並列に実行する、プログラム・ループ本体を通る２つの工程によって実現されてよく、プログラム・ループ本体を通るそれぞれの工程はループの４つの繰返しに対応する。他の実施例において、要素は、１つの繰返しにそれぞれ対応する、ループを通る８つの工程の間、別々に処理されてよい。
【００４５】
典型的なベクトルの実装形態において、パフォーマンスの向上は、プログラム・ループ本体を通る工程の間、ベクトル要素を並列に処理することによって実現されるということが理解されよう。しかし、いくつかの実施例は、これらが、プログラマの視点から、単一の並列ベクトル処理命令に対応するように思えても、様々なベクトル要素を順番に実行することによってハードウェアのオーバヘッド／複雑性を低下させるために、並列に実行する能力を犠牲にすることがある。
【００４６】
複数のベクトル要素を伴うベクトル処理の場合、様々なベクトル要素がベクトル処理の様々なレーンの中で処理され、これらのレーンのそれぞれは述語を必要とすることがある。１つのレベルにおいて、述語は、当該の要素のビット幅に利用できるデータ・レーンの利用可能な数を考慮して、プログラム・ループ本体を通るそれぞれの工程の間に処理されることになるベクトル要素の数に、行われる処理をマッチさせるために使用されてよい。例えば、処理が７つのベクトル要素に対して行われることになり、ベクトル要素サイズが、プログラム・ループ本体を通るそれぞれの工程の間に４つのベクトル要素が処理され得るというようなものである場合、全体的な処理は、４つのベクトル要素が並列に処理される、プログラム・ループ本体を通る１つの工程を行い、続いて、３つの要素が並列に処理され、且つベクトル処理の１つのレーンがプログラム・ループ本体内部のプログラム命令の述語のためにこの動作の中で抑制される、ループ本体を通る最終の工程を行うことによって実現されることが可能である。
【００４７】
このような述語は、プログラム・ループ本体を通る繰返しの数を、処理のデータ経路幅及びベクトル要素サイズとマッチさせる。このような述語は、例えばプログラム命令によって指定されるような、演算が行われていることに関連する他の理由のために、プログラム・ループ本体を通る所与の工程の間、処理レーン内の処理を抑制する効果があるさらなる述語によって追加されてよい。ベクトル要素がプログラム・ループ本体の実行を経るので、述語のこれらの形の両方が、ベクトル要素の全体的な述語をもたらすように組み合わされてよい。
【００４８】
図６に戻ると、ループ開始命令は、レジスタＲｎに格納された値によって示されるような、（ベクトル化が行われない場合、スカラ・ループの繰返しの数に対応する、）プログラム・ループ本体が実行されることになる回数を指定する、ループ開始命令と関連付けられたパラメータを有し、この値は、ＤＬＳ（Ｐ）命令によってレジスタＬＲにコピーされる。レジスタＬＲは、プログラム・コールの復帰時に使用されることになる復帰アドレスを格納するためのリンク・レジスタとしても使用されるレジスタであってよく、したがって、ＤＬＳ（Ｐ）命令を実行する前に、このリンク・レジスタの内容をプログラム・スタックに保存することが望ましい場合がある。ループ開始命令ＤＬＳ（Ｐ）は、ゼロ・オーバヘッドのループの終わりのプログラム・アドレスを示す、関連付けられたパラメータ「ｌｏｏｐｅｎｄ」も有し、ループ終了命令ＤＬＥの直後の命令である。
【００４９】
ループ開始命令ＤＬＳ（Ｐ）に続いて、プログラム・ループ本体を形成する、例えば、Ｉ０、Ｉ１、Ｉ２、Ｉ３といった１つ又は複数のプログラム命令がある。プログラム・ループ本体は、短く且つ単純、又は長く且つ複雑であってよく（例えば、さらなるループ又は分岐を収めてよく）、状況次第で単一の命令しか含まなくてもよいということが理解されよう。実際には、プログラム・ループ本体自体の長さが短くなれば、プログラム・ループ本体を通るそれぞれの工程に対して従来のループ制御命令を実行することによるオーバヘッドが大きくなるので、短いプログラム・ループ本体は、ゼロ・オーバヘッドのループの使用から相対的により多くの恩恵を受ける。
【００５０】
プログラム・ループ本体の終わりに、ループ終了命令ＤＬＥがある。このループ終了命令ＤＬＥは、ループ開始命令ＤＬＳ［Ｐ］の後の命令のメモリ・アドレスを指定するｌｏｏｐｓｔａｒｔパラメータを、ループ終了命令ＤＬＥの挙動を制御するためのパラメータとみなす。ＤＬＥ命令は、まだ行われていない繰返しの数を示す、レジスタＬＲに格納された値をチェックする。プログラム・ループ本体を通る最終の工程が行われると、処理は、ループ終了命令ＤＬＥに続くプログラム命令、即ち命令Ｉｚを実行するために進む。これは、命令Ｉｚに直接的に分岐することによって、又はＮＯＰとしてＤＬＥ命令を最初に実行し、次にＩｚを実行することによって行われてよい。
【００５１】
図６の右側部分は、プログラム・ループ本体を通るどの工程の間に、どの命令が実行されるかを概略的に示す。プログラム・ループ本体を通る第１の工程において、ループ開始命令ＤＬＳ［Ｐ］とループ終了命令ＤＬＥの両方が実行される。ループ開始命令とループ終了命令の両方を実行すると、ループ制御データは、システムのハードウェアによってセットアップされ、格納される。これは、このようなループ挙動が途切れずに進むことが許されるときに、ループ開始命令ＤＬＳ［Ｐ］又はループ終了命令ＤＬＥを別々に実行する必要なく、プログラム・ループ本体を通るその後の工程が行われることを可能にする。これは、実行されるプログラム命令をなぞる実線、及びプログラム・フローを飛び越えること／分岐することを示す点線で図６の右側部分に示される。図示されるように、プログラム・ループ本体を通る最終の工程の終わりで、プログラム実行ポイントは、ループ終了命令ＤＬＥを実行せずに、プログラム・ループ本体の最終の命令Ｉ３から、ループ終了命令に続く命令Ｉｚに飛び越えることができる。他の実施例において、プログラム・フローはループ終了命令ＤＬＥを通ることができるが、このアクションは、このポイントまでに、リンク・レジスタＬＲがプログラム・ループ本体の必要とされた繰返しのすべてが行われたことを示す値を格納しているとき、単に抑制されるだけである。
【００５２】
プログラム・ループ本体の終わりにおけるループ終了命令ＤＬＥの場所、並びにループ制御データをセットアップ及び格納する際のこのアクションは、例外の発生などのために、プログラム・ループ本体を通る工程が割り込まれ、ループ制御データが無効化される場合、プログラム・ループ本体による処理が再開されるときに、必要なループ制御データを復元するためにループ終了命令ＤＬＥが再び実行され得るという結果になる。さらに具体的には、ループ制御データ（マイクロアーキテクチャ状態）は、例外の発生時に保護される必要がなく、プログラム・ループ本体の繰返しのうちのいくつが行われたかを示すリンク・レジスタ値ＬＲ（アーキテクチャ状態）が維持される。プログラム・ループ本体の途中で実行が再開すると、（割込が発生しなかった場合にループ終了命令の実行が抑制されたとしても、）ループ終了命令は再び実行され、プログラム・ループ本体を通るその後の工程において、ゼロ・オーバヘッドのループ挙動が再開されるように、ループ制御データを復元する役目をし、このようなその後の工程に対する、ループ終了命令の実行が回避されることが可能である。
【００５３】
上述のように、ゼロ・オーバヘッドのループ挙動を制御するループ制御データは、ゼロ・オーバヘッドのループ処理中に例外／割込が発生すると無効にされることがある。他のイベントは、ループ制御データの無効化をトリガすることもできるが、少なくともいくつかの例において、このループ制御データはその後、処理が再開されるときに復元される。ループ制御データの無効化をもたらす可能性のあるイベントの実例は、処理回路がリセットされることと、ループ制御回路又はループ終了命令が、プログラム・ループ本体のさらなる繰返しが必要とされないことを識別することと、例外がエンターされることと、例外がテール・チェーンし、それによって現在の例外より前の状態を復元させずに、処理が現在の例外の処理から次の例外の処理に直接的に進むことと、所定のイミディエート宛先アドレスの範囲より大きい分岐命令の実行と、例外から復帰することと、装置の命令キャッシュが無効化されるようにする命令の実行と、ループ制御データのキャッシングをディスエーブルする命令の実行と、分岐予測器又は分岐予測をディスエーブルする命令の実行（修正された分岐予測器は、ループ制御回路の役割を部分的に果たすために使用されることがある）と、プログラム・ループ本体内部の分岐が、プログラム・ループ本体の冒頭の命令とループ終了命令の間にないアドレスを宛先にしていると処理回路が決定することと、セキュア・モードの動作と非セキュア・モードの動作を切り替えることと、ループ制御データを無効化するために特定の実装形態が使用できる１つ又は複数の実装形態を定義した条件と、を含む。
【００５４】
図７は、図６に示された実例のゼロ・オーバヘッドのプログラムのループ挙動を行うときの処理パイプラインの様々な処理ステージの内容を概略的に示す。この実例において、処理パイプラインは、６つのステージ、即ちフェッチ、復号、及び実行を含む。図６に示されたプログラム命令は、この処理パイプラインに供給／フェッチされる。図示されるように、プログラム・ループ本体を通る第１の工程は、ループ開始命令ＤＬＳ［Ｐ］とループ終了命令ＤＬＥの両方の実行を含む。したがって、第１の工程において実行される６つの命令（ＤＬＳ（Ｐ）、Ｉ０、Ｉ１、Ｉ２、Ｉ３、及びＤＬＥ）がある。プログラム・ループ本体を通るその後の３つの工程において、ループ開始命令ＤＬＳ［Ｐ］及びループ終了命令ＤＬＥの実行は必要とされず、代わりにループ制御データの制御下で動作するループ制御回路は、行われたプログラム・ループ本体を通る工程の数を追跡するため、プログラム・ループ本体内部の最後の命令がフェッチ・ステージに入れられたときを識別するため、及びプログラム・ループ本体の冒頭の命令に分岐して戻るときに使用されることになる分岐ポイントを識別するために使用されてよい。この実例において、命令Ｉ０はプログラム・ループ本体の冒頭の命令であり、命令Ｉ３はプログラム・ループ本体内部の最後の／最終の命令である。プログラム・ループを通るゼロ・オーバヘッドの工程のそれぞれにおいて、４つのプログラム命令（Ｉ０、Ｉ１、Ｉ２、及びＩ３）が、処理パイプラインを流れる。プログラム・ループ本体を通る第４の工程における最終の命令Ｉ３の実行の後、リンク・レジスタＬＲに格納されたループ繰返しカウンタは、必要とされた繰返しすべてが行われたことを示し、したがって最終の命令Ｉ３に到達すると、ループ制御回路は、冒頭の命令Ｉ０に戻る分岐をトリガせず、代わりにループ終了命令ＤＬＥの直後の命令Ｉｚへの分岐をトリガする。他の実施例において、ループ制御回路は命令Ｉｚへの分岐をトリガせず、代わりにプログラム・フローがＤＬＥに続くことを可能にする。リンク・レジスタＬＲに格納された繰返しカウンタは、これ以上の繰返しが必要とされないことを示すので、ＤＬＥ命令はどのような動作も行わず、プログラム・フローは命令Ｉｚを続ける。このアプローチは、いくつかの実施例において、さらに実装しやすくする可能性があり、ループの終わりに到達すると、もう１つのＤＬＥ命令しか実行されないので、パフォーマンスのインパクトが最小になる可能性がある。
【００５５】
図８は、命令パイプラインのフェッチ・ステージ１００２と関連するループ／分岐制御回路１０００の１つの実例の形及び動作を概略的に示す。ループ／分岐制御回路は、ループ／分岐制御キャッシュ１００４に格納されたループ／分岐制御データによって少なくとも部分的に制御される。他の場所で説明されたゼロ・オーバヘッドのループ挙動及び分岐見込み挙動は、同じ又は類似の回路を使用して制御され得るということが理解されよう。例えば、（ゼロ・オーバヘッドのループ挙動がアクティブであることを示す）ＤｏＬｏｏｐフラグがセットされず、まだループ／分岐制御データが有効であるとマークされる状態にシステムがあるとき、分岐見込み挙動は、ループ制御データ（又はこれに類似のデータ）及びループ／分岐制御回路１０００使用してサポートされてよい。
【００５６】
図８及びこの使用に戻ると、ゼロ・オーバヘッドのループ挙動を制御する際に、ループ制御キャッシュ１００４は、ループ終了命令ＤＬＥの結果としてループ制御データをロードされる。ループ終了命令は、図１に示されたループ終了復号回路１２３によって復号される。データは、分岐見込み命令ＢＦの実行によってこのキャッシュ１００４にロードされてもよく、このデータは、図１に示された分岐見込み命令復号回路１２２で復号される。
【００５７】
ループ制御キャッシュ１００４は、いくつかの実施例において、障害シンドローム・レジスタ、即ち障害の発生時に障害シンドローム・データを格納するレジスタとしても働くストレージを再使用することができる。このようなレジスタは、レジスタに格納された何らかのデータが有効な障害シンドローム・データであるかどうかを示す、レジスタと関連付けられた少なくとも１つの有効ビットｆｖを有することができる。ループ／分岐制御回路１０００並びにループ開始及びループ終了命令のアクションは、当該のレジスタがループ制御データ又は分岐見込みデータを代わりに格納しているときに、障害シンドローム・データと関連付けられたこのような障害レジスタの有効ビットｆｖを無効状態にセットするように働く。いくつかの実施例において、ゼロ・オーバヘッドのループ挙動が進むことを可能にする障害シンドローム・データの保護がより重要であるとみなされるということがあり得、したがって偽のシンドローム・レジスタのいずれかが、障害レジスタの有効ビットｆｖによって示されるような障害シンドローム・データを格納している場合、（ループ開始及びループ終了命令の存在はまだ、これらの明示的な実行によって、プログラム・ループ本体の繰返しの正確な数が行われることを保証するが）ループ終了命令の復号は、このような有効な障害シンドローム・データが上書きされるのを許可せず、ゼロ・オーバヘッドのループ挙動は抑制される。
【００５８】
ループ制御回路１０００は、診断／分析のために、トレース・データを形成するために使用されることになるトレース出力も生成する。ループ制御回路は、プログラム・ループ本体を通る第１の工程の後のゼロ・オーバヘッドのループの動作中に、ループ終了命令の実行が回避され、明示的に（別々に）行わなかったとしても、ゼロ・オーバヘッドのループを実行するときに、ループ／分岐制御回路１０００の制御下で、ループ終了命令の実行時、又は冒頭の命令に分岐して戻る制御時に、ループ終了命令ＤＬＥの実行に対応するトレース出力を生成する。このループ終了命令が、一般に言われている意味で明示的に／別々に実行されなかったとしても、ループ終了命令の実行に対応するイベントを示すトレース・データを含むトレース出力を提供することは、診断及び分析操作を行うときに、トレース出力をさらに追いやすくし、理解しやすくする。
【００５９】
ループ制御キャッシュ１００４に格納されたループ制御データは様々な形を有し、ゼロ・オーバヘッドのループ挙動及び分岐見込み挙動を制御するために使用される様々なタイプのデータを含むことができる。具体的には、ループ制御データは、例えば、（このアドレスを直接的に又はアドレスから冒頭の命令への所定のオフセットによるアドレスを介して示す）冒頭の命令のアドレスを示すループ開始データと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令とプログラム・ループ本体の冒頭の命令との間の間隔を示すループ開始オフセット・アドレスと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令のアドレスを示すループ終了データと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令に到達する前の、まだ処理されていない命令の数を示すループ残存命令データと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令に到達する前に、まだ処理されていないプログラム命令を格納するプログラム記憶メモリの場所の数を示すループ残存サイズ・データと、例えば、前述のように無効化イベントが発生しなかったことといった、ループ制御データが有効であることを示すループ制御有効データｖと、のうちの１つ又は複数を含むことができる。
【００６０】
いくつかの実例の実施例において、ループ制御キャッシュ１００４は、複数のエントリを収めることができ、その結果、複数の動作が一斉にサポートされることが可能である。ループ制御キャッシュ１００４の内部のこれらのエントリのそれぞれはさらに、ループ制御キャッシュ１００４が現在、有効なループ制御データを格納しているか否かを示す、ループ制御キャッシュ１００４と関連付けられた有効ビットｖを有する。ループ制御データに対するこの有効ビットｖは、上述の様々な無効化イベントのうちの１つの発生時に無効であることを示すようにクリアされてよい。この実例の実施例において、ループ制御キャッシュ１００４は、２つのエントリを有するものとして示される。これは、ゼロ・オーバヘッドのループと分岐見込み挙動の両方が一斉にサポートされることを可能にする。他の実施例において、ただ１つのエントリ対して充分なストレージがループ制御キャッシュ１００４の内部に設けられてよく、したがってゼロ・オーバヘッドのループ挙動又は分岐見込み挙動のうちのただ１つが、所与の時間にサポートされることが可能である。ループ制御キャッシュ１００４は、分岐制御キャッシュとしても働くということが理解されよう。同じ２重の関数が同様に、ループ制御回路１０００によって提供される。
【００６１】
図８に示されるように、ループ制御回路１０００は、命令キャッシュ１００６からフェッチ・ステージ１００２にロードされるプログラム命令Ｉと関連付けられたメモリ・アドレスを監視する役目をする。ロードされたプログラム命令のアドレスが、ループ制御キャッシュ１０４に格納されたループ制御データによって、ゼロ・オーバヘッドのループのプログラム・ループ本体内部の最後の命令として示されるプログラム命令のアドレスにマッチする（又は例えばこのアドレスからの所定のオフセットといった所定の関連性を有する）とき、ループ制御回路１０００は、（リンク・レジスタＬＲ内の値によって示されるような、）プログラム・ループ本体を通ってシステムによって行われることになる残りの工程があるか否かを決定し、このような残りの工程がある場合、プログラム・ループ本体の冒頭の命令への分岐をトリガする。このようにして、ループ制御キャッシュ１００４に格納されたループ制御データの制御下でふるまうループ制御回路１０００は、さらなるループの繰返しが必要とされるかどうかを決定し、さらなるループの繰返し（処理されることになる所与の要素に対するプログラム・ループ本体を通る工程）が必要とされる場合、ループ終了命令に先行するプログラム命令又はプログラム・ループ本体によって指定される処理動作を行うように処理回路（命令パイプライン及び処理パイプラインによって実行される命令を行うシステムの他の要素）を制御することができるが、（ループ終了命令自体が、第１の工程以外のプログラム・ループ本体を通る工程において別々に実行される必要がなく、ループ制御データが生じない無効化イベントを必要としない）ループ終了命令を除外する。
【００６２】
図９は、ループ制御回路１０００の１つの実例の形式が、プログラム・ループ本体の冒頭の命令への分岐が必要とされるかどうかを決定するために、どのようにループ制御データの部分を使用して、フェッチ・ステージ１００２によってフェッチされることになる次の命令（命令メモリ・アドレス自体でなくてもよく、例えばこのアドレスからの固定オフセットを有してよい）を、関連付けられた現在のプログラム・カウンタの値に依存するデータと比較することができるかを概略的に示す。さらに具体的には、ループ制御データは、ループ終了命令のメモリ記憶アドレスを示すビットの真部分集合を含むことができる。例えば、ループ制御データは、メモリ記憶場所に対応するバイトでアドレス指定されたメモリ・アドレスを、通常の３２ビットのうちのビット２からビットｘまで拡張するビットのフィールドを含むことができる。これは、フェッチ・ステージ１００２によって供給される、フェッチされることになる次の命令と関連付けられたメモリ・アドレス内の対応するビット位置と比較される。この実例の実施例におけるプログラム命令は３２ビットのプログラム命令であり、これは、２つの最下位ビット１：０が不変になるように、バイトでアドレス指定されたメモリ・アドレス空間の内部で揃えられ、したがってループ開始アドレスに分岐する要件を識別するために比較される必要はない。図９の実例は、プログラム・ループ本体内部の最後の命令がフェッチ・ステージ１００２にフェッチされていること、及びそれに応じた、ループ開始アドレス、即ちプログラム・ループ本体の冒頭の命令に分岐する要件を、ループ制御回路１０００が識別できるただ１つの方式であることが理解されよう。分岐を行うこのような要件は、プログラム・ループ本体を通って進行される間にフェッチされる命令の数を数えること、プログラム・ループ本体の命令をフェッチする際に通った記憶場所の数を数えること（この技法は、可変長命令を用いる実施例における使用に適していることがある）、又は他の技法などの、さらなる方式で実現されることが可能である。
【００６３】
図１０Ａは、ループ開始命令の復号の際の挙動を概略的に示す流れ図である。ステップ２０００において、処理は、ループ開始命令ＤＬＳ（Ｐ）がループ開始命令復号器回路によって復号されるまで待機する。ステップ２００２は、パラメータＲｎによって指定された、レジスタに格納された繰返しカウントが、ゼロに等しいか否かを決定する。繰返しカウントがゼロに等しい場合、これは、プログラム・ループ本体を通る工程（繰返し）が必要とされないことを示し、処理はステップ２００４に進み、ここで、ループ終了命令ＤＬＥに続く命令への分岐が行われるか、又はライト・バック及びこれらの命令からの他の副次的作用を抑制することなどによって、遭遇される命令のそれぞれを抑制しながらプログラム・ループ本体が横断される。
【００６４】
ステップ２００２における決定が、繰返しカウントがゼロでないというものである場合、処理はステップ２００３に進み、ここで、ステップ２０００で復号された命令が、述語的ループ開始命令ＤＬＳＰであるかどうかについての決定が行われる。はいの場合、処理はステップ２００６に直接的に進む。いいえの場合、ステップ２００５は要素サイズを十分なベクトル・サイズにセットし、その後処理はやはりステップ２００６に進み、ここで、プログラム・ループ本体を通る１つの工程の中で処理されることが可能なベクトル要素の最大数を示す値Ｎｍａｘが生成される。他の実施例において、Ｎｍａｘの計算は、ＤＬＳ（Ｐ）命令の一部として行われる必要はなく、例えば、図１３に示されるようなＤｏＬｏｏｐの中で処理する命令の一部として行われてよい。この値Ｎｍａｘは、ループ開始命令によって指定されたベクトル要素サイズと比較される、処理パイプラインの処理回路のデータ幅に依存している。Ｎｍａｘの値は、ゼロ・オーバヘッドのループ挙動の実行の全体を通じて静的であるので、生成された値は明示的に格納される必要はなく、必要とされたときにベクトルの挙動を制御するためにしか使用されない。
【００６５】
ステップ２００８は、ＤｏＬｏｏｐの状態が有効であり、システムが現在、ＤｏＬｏｏｐを処理している（即ち、ゼロ・オーバヘッドのループ挙動がアクティブである）ことを示すフラグをセットする役目をし、ループ繰返しカウントは、リンク・レジスタＬＲにもコピーされ、ループ制御回路によって使用される。処理は次にステップ２０１０に進み、ここで、プログラム・ループ本体の冒頭の命令のフェッチ及び実行への前進が行われる。
【００６６】
図１０Ｂは、ループ開始命令ＤＬＳ（Ｐ）を概略的に示す。これは、命令をＤＬＳ（Ｐ）命令として識別するオペコード・フィールドＥＮＣを含む。（リンク・レジスタＬＲに移送されることになる）繰返しカウントＲｎ、ループ終了命令が置かれる場所の指標（前述のように、分岐宛先アドレスを指定するＢＦに関する様々な方式で指定されてよい）、及び要素サイズの値を収めるレジスタを指定するパラメータ・フィールドも含まれる。要素サイズの値が、データ経路の十分なベクトル・サイズにセットされる場合、命令は、非述語的、即ちＤＬＳ命令として扱われる。要素サイズが、より小さい場合、これは、ループが、指定されたベクトル・サイズの要素を使用してベクトル化され、述語的ループ開始命令として処理されるはずであることを示す。
【００６７】
ベクトル要素サイズＶＥｗｉｄｔｈは、浮動小数点データの値がアクセス可能なときにアクセス可能であり、浮動小数点データの値がアクセス不能なときにアクセス不能な、浮動小数点制御データ・レジスタに格納される。浮動小数点データの値がアクセス可能なとき、ループ開始命令から復号されるようなベクトル要素サイズＶＥｗｉｄｔｈは、浮動小数点制御データ・レジスタに格納され、データ経路内のベクトル化を制御する。ループ開始命令が非述語的である場合、ベクトル要素サイズは、ベクトル・レジスタ幅ＶＲｗｉｄｔｈにセットされる。
【００６８】
例えば、浮動小数点状態が初期化されていなかったときのように、浮動小数点データの値がアクセス可能ではないとき、浮動小数点制御データ・レジスタからＶＥｗｉｄｔｈを読み込もうとする試みは、（同様にアクセス不能な）浮動小数点制御レジスタに現在、格納されているＶＥｗｉｄｔｈの任意の値に依存しないＶＲｗｉｄｔｈの値を返す。浮動小数点の値が、ループの実行の途中でアクセス可能になる（初期化される）と、任意の既存の浮動状態は（例えば、遅延状態（ｌａｚｙ  ｓｔａｔｅ）保存メカニズムによって）保存され、新しい浮動小数点状態が初期化され、（特定の実装形態に組み込まれた）浮動小数点制御データ・レジスタに格納されたＶＥｗｉｄｔｈの値をＶＲｗｉｄｔｈに初期化することを含む。ループ内のベクトル化は、それに応じて変更されない。
【００６９】
図１１は、ループ終了命令ＤＬＥを復号する際のアクションを概略的に示す流れ図である。ステップ２０１２において、処理は、ループ終了命令ＤＬＥがループ終了命令復号器によって復号されるまで待機する。ステップ２０１４は次に、ＤｏＬｏｏｐフラグが現在、セットされているか否かを決定する。ＤｏＬｏｏｐフラグが現在、セットされていない場合、これは、ゼロ・ループ挙動が現在、アクティブでないことを示し、処理はステップ２０１６に進み、ここで、ステップ２０１３においてループ終了命令を無演算命令（ＮＯＰ）として扱うことなどによって、ループ終了命令の実行は抑制される。
【００７０】
ステップ２０１４における決定が、ＤｏＬｏｏｐフラグがセットされているというものである場合、ステップ２０１８は、ループ制御データをループ制御キャッシュ１００４に格納する役目をする。このループ制御データは、例えば、冒頭の命令の命令アドレスを示すデータ、ＤＬＥ命令のメモリ記憶アドレスのビットに対応する（固定命令の配列のための任意の不変のビットを除く）最下位ビットのフィールド、及びループ制御データが有効であることを示す有効ビットを含むことができる。ループ制御データの他の形式も、前述のように格納される。
【００７１】
ステップ２０２０は、現在の繰返しカウントが、ＤＬＳ（Ｐ）ループ開始命令に応答して以前に生成されたＮｍａｘの値以下であるか否かを決定する。繰返しカウントがＮｍａｘの値以下である場合、これは、ループ終了命令に到達した現在のプログラム・ループ本体を通る工程が、プログラム・ループ本体を通る最後に必要とされた工程であることを示し、したがって処理はステップ２０１６に進む。ステップ２０２０における決定が、繰返しカウントがＮｍａｘの値以下ではないというものである場合、処理はステップ２０２２に進み、ここで、繰返しカウントはＮｍａｘまで減らされる。
【００７２】
ステップ２０２４は次に、プログラム・ループ本体の冒頭の命令への分岐を行う。
【００７３】
図１２は、ループ制御回路１０００のアクションを概略的に示す流れ図である。ステップ２０２６において、ループ制御回路１０００は、ループ制御データが現在、有効であるとマークされているか否かを決定する。ループ制御データが現在、有効であるとマークされている場合、処理はステップ２０２８に進み、ここで、パイプラインに供給された（即ちフェッチ・ステージ１００２にフェッチされた）最新の命令が、ループ制御データとマッチするフェッチされることになる次の命令のアドレスによって示されるような、プログラム・ループ本体内部の最後の命令であるか否かについての決定が行われる。プログラム・ループ本体の中のこのような最後の命令のフェッチが検出されると、処理はステップ２０３０に進み、ここで、繰返しカウントが現在、値Ｎｍａｘ以下であるか否かについての決定が行われる。繰返しカウントがＮｍａｘの値以下である場合、処理はステップ２０３２に進み、ここで、ＤｏＬｏｏｐフラグはクリアされ、ループ制御データの有効ビットｖはクリアされる。これは、ゼロ・オーバヘッドのループ挙動が終了されることを示す。ループ制御回路１０００による処理はその後、このゼロ・オーバヘッドのループ挙動の事例を終了する。ループ終了命令は次に、図１１に関連して議論されたように処理され、例えば、このようなループ終了命令ＤＬＥに関する分岐が行われる。
【００７４】
ステップ２０３０における決定が、プログラム・ループ本体を通る工程の数を追跡する現在の繰返しカウントが値Ｎｍａｘ以下ではないというものである場合、ステップ２０３４は、Ｎｍａｘまで繰返しカウントを減らす役目をする。ステップ２０３６は次に、プログラム・ループ本体の冒頭の命令に分岐し、プログラム・ループ本体を通る次の工程が開始される。
【００７５】
図１３は、ゼロ・オーバヘッドのプログラム・ループ本体内部の命令の実行の制御、さらに具体的には、これがどのように述語を伴うことができるかを概略的に示す流れ図である。ステップ２０３８は、実行することになる命令があるかどうかを決定する。ステップ２０４０は次に、ゼロ・オーバヘッドのループのプログラム・ループ本体内部でこのような実行が行われることを示すＤｏＬｏｏｐフラグがセットされているか否かを決定する。ＤｏＬｏｏｐフラグがセットされていない場合、命令の処理はステップ２０５０に正常に進む。ステップ２０４０における決定が、ＤｏＬｏｏｐフラグがセットされているというものである場合、ステップ２０４２は、Ｎｍａｘの値が残りの繰返しカウントより大きいかどうかを決定する。Ｎｍａｘの値が残りの繰返しカウントより大きくない場合、ステップ２０４４は、実行されることになるプログラム命令のために使用されることになるアクティブなレーンの数をＮｍａｘとしてセットする。アクティブなレーンのこの数は、実際には、ステップ２０４８で実行されることになる命令、又はステップ２０４８若しくは２０５０で行われた以前の命令の中で符号化され得るさらなる述語の結果として減らされることがある。ステップ２０４２における決定が、Ｎｍａｘの値が残りの繰返しカウントより大きいというものである場合、ステップ２０４６は、命令のために使用されることになるアクティブなレーンの数を残りの繰返しカウントの値としてセットする。これは、このようなレーンの中で処理される必要があるベクトル要素がないときに処理するレーンのアクティブな使用を回避する。ステップ２０４８は次に、アクティブなレーンのセットされた数を使用して、ステップ２０３８で実行を必要とするものとして識別された命令を行う。
【００７６】
命令のベクトル化されたパフォーマンスは、行われている命令のタイプに依存してよい。さらに具体的には、選択されたアクティブなレーンの数によって示される述語が実現される手法は、実行されている命令の性質、及び当該のシステムのデータ経路の性質によって変化してよい。例えば述語は、必要とされないときに、データの述語によって示された（例えばバイトが可能にする）データ・レーンに対するライト・バックを抑制することによって適用されてよい。このような場合、述語の値を生成するときに適用される要素サイズは、処理命令によって適用される要素サイズとは異なることがある。したがって、より小さい要素サイズにライト・バックを抑制することは、加算がライト・バックされることなどの、単一の算術演算の部分だけを生じることがある。容易に分割され得ない命令の場合、適用される述語はバイト・レベルで指定されてよいが、行われるデータ処理のワードの全体を断定するのに役立つ最下位バイトなどの、バイトの述語の値のうちのただ１つに依存して実装される。
【００７７】
上述のように、ループ制御回路１０００は、プログラム・ループ本体の１つのベクトル命令に応答して処理されることになる、いくつかのベクトル要素を示す所定の状態レジスタに格納された制御パラメータに依存してループ・カウンタのアップデートを制御することができる。例えば制御パラメータは、ループによって処理される１つのベクトル要素のサイズを示すＶＥｗｉｄｔｈであってよく、これは、ループの繰返し当たりの処理されることになる要素の数が決定されることを可能にし、その結果、ループ・カウンタは、ループ本体の横断によって処理された、いくつかのベクトル要素によって、それぞれの繰返しの際にアップデートされてよい。ＶＥｗｉｄｔｈは、ループの処理のために定義されるような、１つのベクトル要素サイズであるということに留意されたい。別々のベクトル要素サイズＩＶＥｗｉｄｔｈは、ループ内のベクトル命令のパラメータのうちの１つとして指定されてもよく、全体としてループに対して指定されたものとしてＶＥｗｉｄｔｈとマッチすることが多いが、同じである必要はない。全体としてループ及びループ内の命令に対して別々の要素サイズが指定されることを可能にすることは、ループ内で処理されることになる１つの「要素」が、ベクトル命令の様々なベクトル要素に割り振られる複数の構成要素を実際に収める場合をサポートするのに有用なことがある。例えば複素数は、実数及び虚数の構成要素を有してよく、１つ又は複数の数のうちの実数及び虚数の構成要素が、ベクトルの代替要素に割り振られることを想定する複素数の算術ベクトル命令がサポートされてもよい。この場合、個別のベクトル命令が３２ビットの要素を指定するとしても、例えば、これが実数と虚数両方の構成要素を含むので、全体としてのループが、１つの「要素」が６４ビットを有するとみなすことができる。したがって、本明細書においてＶＥｗｉｄｔｈへの言及は、ループ制御回路から分かるように、ベクトル要素サイズを指し、これは、ループ内のベクトル命令によって使用される実際の要素サイズと必ずしも同じではない。
【００７８】
ループの最終の繰返しにおいて（Ｎｍａｘ−ｌｏｏｐｃｏｕｎｔ）ベクトル・レーンをマスクするループ末端述語は、所定の状態レジスタに格納されたパラメータに依存することもある。例えば、ループ末端述語は、述語が必要とされるかどうかを示すフラグに依存することがあり、述語が必要とされると、最終の繰返しにおいて行われることになるアクティブなレーンの数は、（リンク・レジスタに格納されたループ・カウンタ「ｌｏｏｐｃｏｕｎｔ」と組み合わせて）所定の状態レジスタに格納されたＶＥｗｉｄｔｈから導出可能なである。ループの終わりで、ループに続くベクトル命令が末端の述語がなくても動作するように、適用されている任意のループ末端述語は、所定の状態レジスタ内のフラグをリセットすることによってディスエーブルされてよい。一方、述語が必要とされるかどうかは、明示的な述語フラグが必要とされることがないように、ｌｏｏｐｃｏｕｎｔ及びＶＥｗｉｄｔｈから直接的に決定されてよい。ここで、ループ末端述語は、Ｎｖｅが、プログラム・ループ本体のいくつかの繰返しの間に処理されることになる（サイズＶＥｗｉｄｔｈの）ベクトル要素の総数であり、Ｎｍａｘが、プログラム・ループ本体の１つの繰返しの中で処理されることになる（やはりサイズＶＥｗｉｄｔｈの）ベクトル要素の最大数である場合に、Ｎｖｅ／Ｎｍａｘが整数でないとき、ループ制御回路１０００が、前記繰返しの中で処理されるベクトル要素の総数がＮｖｅになるように、前記繰返しの１つ又は複数の間、前記ベクトル処理レーンの１つ又は複数の中の処理を少なくとも部分的に抑制するという機能性を指す。以下の実例は、ループ末端述語が最終のループの繰返しに適用されるケースを説明するが、他の実装形態が、同じ結果を示すように、初めの方のループの繰返しにおいてループ末端述語を適用してもよい。サイズＶＥｗｉｄｔｈの１つの要素の述語は、上述のように、ＶＥｗｉｄｔｈ＞ＩＶＥｗｉｄｔｈのケースにおいて、ループ内の個別のベクトル命令に対してマスクされることになるサイズＩＶＥｗｉｄｔｈの２つ以上の要素を必要とすることができるということに留意されたい。
【００７９】
しかし、所定の状態レジスタは、常にアクセス可能というわけではないレジスタであってよい。例えば、所定の状態レジスタは、例えば、図１に示された浮動小数点レジスタ１１０のうちの１つである浮動小数点制御レジスタ１１１０（図８参照）といった、浮動小数点コンテキスト・データと関連付けられたレジスタであってよい。コンテキスト・スイッチにおいて保存される必要がある状態の量を減らすために、浮動小数点演算を必要としない処理は、デフォルトで浮動小数点状態を割り振られず、制御レジスタに格納された浮動小数点状態アクセス可能性フラグ（又は遅延状態保存ステータス・フラグ）は、浮動小数点コンテキストが現在のプロセスにアクセス可能であるかどうかを示すことができる。コンテキスト・スイッチにおいて、浮動小数点コンテキストが現在、アクセス可能でないことを状態アクセス可能性フラグが示す場合、浮動小数点コンテキストは、メモリに保存される必要がない。浮動小数点コンテキストが現在、アクセス可能でないときに浮動小数点コンテキストを必要とする命令に応答して、浮動小数点レジスタに格納された以前の任意のコンテキスト・データをメモリに保存するために遅延状態保存動作が行われ、次に浮動小数点コンテキスト・レジスタは、現在のプロセス、及び浮動小数点コンテキストが現時点でアクセス可能であることを示すためにアップデートされた状態アクセス可能性フラグにアクセス可能になる。
【００８０】
所定の状態レジスタがアクセス不能になり得る別の状況は、現在の特権レベル又はプロセスがこのレジスタにアクセスするのを禁止するアクセス許可が定義された場合である。例えば、いくつかのシステムは、所定の状態レジスタ（例えば浮動小数点レジスタ）を含むレジスタの特定のサブセットへのアクセスを制御するためのアクセス許可データをチェックするため、及び前記アクセス許可データに違反するレジスタのサブセットのうちの１つへのアクセスが検出されるときに障害条件をトリガするために、許可チェック回路１００８（図８参照）を提供することがある。レジスタのサブセットを、障害をトリガしたプロセス／特権レベルにアクセス可能にするようにアクセス許可を変更する前に、及び非特権プロセスに処理を返す前に、障害が、障害をトリガした非特権プロセスから隠されることが可能なように、障害は、アクセス許可を見直し、必要ならレジスタに現在、格納されている特権データをメモリに保存するように、オペレーティング・システムをトリガすることができる。
【００８１】
必要とされるベクトル要素幅ＶＥｗｉｄｔｈをセットアップするために、ループの初めに浮動小数点コンテキストがアクセス可能になるとしても、現在のプロセスのコンテキストが無効化されることに至る例外がループ中に発生し、例外に続くこのプロセスのコンテキストの復元の際に、浮動小数点コンテキストは、復元されるプロセスと関連付けられた命令によって実際に必要とされるまで復元されない可能性があるので、ループの終わりに浮動小数点コンテキストが依然としてアクセス可能であることが想定されることはない。
【００８２】
したがって、ループの終わりに、ループ・カウントの減少及び／又はループ末端述語を制御するために使用されるパラメータを格納する所定の状態レジスタがアクセス可能になることはない。ループ末端述語情報をリセットできるように、ループの終わりに遅延状態の保存又は障害条件をトリガして、所定の状態レジスタがアクセス可能になることを可能にするための機能を提供することが期待される。しかし、このアプローチは、特定の命令アドレスにおいてこれらの動作がトリガされるということを、障害又は状態保存を処理するためのアーキテクチャのメカニズムが想定できるときに、命令によってトリガされずにループ制御回路１０００から遅延状態保存動作又は障害条件をトリガすることが望ましくないことが多いので問題となることがある。パフォーマンスを改善するために、（ループ制御データが有効なときに、さらなるループの繰返しが必要とされないことを検出することに応答して、ループ制御回路が、前記ループ終了命令の後の命令からプログラムの実行を継続するように処理回路を制御するように構成されるように、）ループの最終の繰返しにおいて、ループ終了命令の実行を完全に省略することが好ましいことがある。ループ終了命令に先行する又は続く命令に応答して、障害条件又は状態保存をトリガすることは、妥当ではないことがある。したがって、必要とされるときに浮動小数点コンテキストをアクセス可能にするために遅延状態保存又は障害条件をトリガすることに対して、ループの終わりに妥当な命令がないことがある。同様にループ制御回路１０００は、命令パイプラインのフェッチ・ステージと関連付けられることがあり、このステージは通常、レジスタ・アクセスをトリガするための経路を有さないので、フェッチ・ステージが状態保存をトリガすることを可能にすることは、回路の面積の観点から困難且つ高価である。
【００８３】
これらの課題は、ループ終了命令に応答して、遅延状態保存動作又は障害条件を代わりにトリガすることによって対処されることが可能であり、これは、ループの一番初めの繰返しにおいて、又は例外が発生した繰返しの終わりに実行される（例外はループ制御データを無効化するので、ループ終了命令は、この繰返しの終わりに再実行される）。したがって、所定の状態レジスタを含むレジスタのサブセットがアクセス不能なときにループ終了命令に応答して、ループ終了命令復号回路は、レジスタの前記サブセットに格納された状態データのメモリへの保存をトリガし、レジスタの前記サブセットをアクセス可能にするために、状態保存制御信号を生成することができる。ループの完了時ではなく、ループ終了命令に応答して状態保存演算をトリガすることによって、浮動小数点状態がアクセス不能になった場合の単なる予防策として、最終のループの繰返しの終わりにループ終了命令を実行することは必要ではなく、パフォーマンスが改善されることを可能にする。同様に、アクセス許可データが、所定の状態レジスタを含むレジスタのサブセットへのアクセスを禁止する場合、ループ終了命令に応答して、ループ終了命令復号回路は、レジスタのサブセットへのアクセスをトリガする制御信号を生成することができる。したがって、許可チェック回路１００８によって、アクセスが現在、許可されていない場合、障害は、ループ終了命令を実行するときに生成され、いずれかの影響を受けたデータがメモリに保存されて、レジスタのこのサブセットの中で無効化されると、必要な許可をグラントするためにオペレーティング・システムが介入することを可能にする。ループ終了命令に応答したこれらの動作は、ループ・カウンタの減少を制御するために、ループ制御回路１０００がＶＥｗｉｄｔｈパラメータにアクセスできることも保証する。
【００８４】
ループの最終の繰返しの終わりで、プログラム・ループ本体の繰返しに続いて、さらなるループの繰返しが必要とされないことを検出することに応答して、ループ制御回路は、前記ベクトル処理レーンの前記１つ又は複数における処理の抑制をディスエーブルする。例えば、ループ制御回路は、所定の状態レジスタに格納された制御パラメータに依存して前記ベクトル処理レーンの１つ又は複数における処理の抑制を制御することができ、プログラム・ループ本体の繰返しに続くさらなるループの繰返しが必要とされないことを検出することに応答して、ループ制御回路１０００は、所定の状態レジスタがアクセス可能であるかどうかを決定することができ、所定の状態レジスタがアクセス可能であると決定されると、所定の状態レジスタに格納された制御パラメータをアップデートすることによって、前記ベクトル処理レーンの１つ又は複数における処理の抑制をディスエーブルするために述語ディスエーブル化制御信号を生成する。ループ制御回路１０００は、所定の状態レジスタがアクセス不能であると決定されるときに、述語ディスエーブル化制御信号の生成を抑制する。
【００８５】
即ち、ループ制御回路１０００は、所定の状態レジスタが既にアクセス可能なときに、所定の状態レジスタ内のパラメータをリセットして、ループ末端述語をディスエーブルすることしか行わない。所定の状態レジスタがまだアクセス可能でないとき、レジスタがアクセス不能になることに至る可能性があるイベント（例えば、例外、障害、又はコンテキスト・スイッチ）が、ループ制御キャッシュ１００４からのループ制御データも無効化するときに、ループ終了命令は遭遇される。したがって、ループ制御回路１０００が遅延状態保存又は障害トリガ動作をトリガする必要はなく、遅延状態保存又は障害トリガ動作は、ループの終わりに必要に応じて、ループ終了命令に応答して、ループ終了命令復号回路１２３によって代わりにトリガされる。
【００８６】
上記に示された理由のために、ループ終了命令が、要素幅及びループ末端述語制御情報を指定する制御パラメータを格納する所定の状態レジスタがアクセス可能であるかどうかに関するチェックをトリガすること、並びにレジスタがアクセス不能な場合に障害条件又は遅延状態保存をトリガすることが有用である。いくつかの実装形態は、必要とされた所定の状態レジスタがアクセス不能なときに、ループ終了命令に応答して、このような状態保存又は障害条件を常にトリガすることができる。
【００８７】
しかし実際には、すべてのループが、ループの末端にレーンの述語を必要とするわけではない。例えば、要素サイズがレジスタ幅に等しいスカラ命令又はベクトル命令を使用してループが処理されることになる場合、繰返しごとにただ１つの要素が処理されるので、要素の総数は、常にベクトル長の正確な倍数である。したがって、このようなループにおいて、ＶＥｗｉｄｔｈ又はループ末端述語制御パラメータへのアクセスは必要とされない。非述語的ループに対して遅延状態保存又は障害条件をトリガすることによってパフォーマンス・コストを招くことを回避するために、２つのバージョンのループ開始命令及びループ終了命令が提供される。
・ＤＬＳ：非述語的ループ開始命令。ループ終了アドレス「ｌｏｏｐｅｎｄ」及び繰返しｒＮの数を指定するが、ベクトル要素サイズは指定しないので、浮動小数点制御レジスタ内のＶＥｗｉｄｔｈパラメータに対する変更は行われない。ＶＥｗｉｄｔｈはデフォルトで、１つのベクトル・レジスタＶＲｗｉｄｔｈの中のビット数に等しくなると想定される。
・ＤＬＳＰ：述語的ループ開始命令。ループ終了アドレス「ｌｏｏｐｅｎｄ」及び繰返しｒＮの数を指定し、ベクトル命令に対する要素幅ＶＥｗｉｄｔｈを示す「ｓｉｚｅ」パラメータも指定する。要素幅は、浮動小数点制御レジスタに格納される。浮動小数点コンテキストがまだアクセス可能でない場合、ＤＬＳＰ命令は、遅延状態保存動作をトリガして、以前の浮動小数点コンテキストをメモリに保存し、浮動小数点コンテキストは、要素幅を浮動小数点制御レジスタに格納する前に、現在のプロセスにアクセス可能になる。
・ＤＬＥ：非述語的ループ終了命令。ＤＬＳ命令に続いて使用される。浮動小数点コンテキストがアクセス不能なときに実行されると、ループ終了命令復号回路は、メモリへの、浮動小数点コンテキストのいずれの遅延状態保存もトリガしない。
・ＤＬＥＰ：述語的ループ終了命令。ＤＬＳＰ命令に続いて使用される。浮動小数点コンテキストがアクセス不能なときに実行されると、ループ終了命令復号回路は、浮動小数点コンテキストのメモリへの保存をトリガする制御信号を生成し、浮動小数点コンテキストをアクセス可能にする。ＤＬＥＰ命令は、浮動小数点コンテキストが、現在のプロセス／特権レベルに対してアクセスされることを許可されない場合、アクセス許可チェック回路１００８によって障害条件がトリガされることを保証するために、浮動小数点コンテキスト・レジスタのうちの１つ（例えば、ＶＥｗｉｄｔｈを格納する浮動小数点制御レジスタ）へのアクセスもトリガする。
【００８８】
ループのそれぞれの繰返しの終わりに、ループ制御回路は、浮動小数点制御レジスタから読み込まれたＶＥｗｉｄｔｈから導出される、この繰返しの中で処理される要素の数までループ・カウンタを減らす。したがって、非述語的ループに関して、ＶＥｗｉｄｔｈ＝ＶＲｗｉｄｔｈなので、ループ・カウンタは、それぞれの繰返しに対して１まで減らされる。述語的ループに関して、繰返しごとに処理される要素の数は、ＶＲｗｉｄｔｈ／ＶＥｗｉｄｔｈである（ＶＲｗｉｄｔｈは、所与のハードウェアの実装形態に対して固定されてよいので、制御レジスタ内で明示的に示される必要はなくてもよい）。
【００８９】
２つのバージョンのループ終了命令を提供ことによって、コンテキスト・データがフラッシュされ、浮動小数点コンテキストが、例外からの復帰に続く現在のプロセスに対して再びアクセス不能になるように、述語的ループの途中で例外が発生しても、このことがループ制御データも無効化するので、述語的ループ終了命令は、ループの終わりで実行され、浮動小数点コンテキストを再びアクセス可能にする必要がある場合、遅延状態保存動作又は障害条件をトリガすることができる。しかし、非述語的ループに関して、遅延状態保存動作又は障害条件をトリガすることによるオーバヘッドは、非述語的ループ終了命令を使用することによって回避されることが可能である。したがって要約すれば、ループ終了命令復号回路は、ループ終了命令が、第１のタイプのループ終了命令であるか、第２のタイプのループ終了命令であるかによって、状態保存制御信号を生成すべきかどうかを選択することができる。同様に、ループ終了命令に応答して所定の状態レジスタを含むレジスタのサブセットへのアクセスがトリガされるかどうかは、ループ終了命令が第１のタイプのループ終了命令であるか、第２のタイプのループ終了命令であるかに依存することができる。
【００９０】
図１４Ａから図１４Ｅは、上述の特徴を示すために非述語的及び述語的ループの実行の実例を示す。
【００９１】
図１４Ａは、ループの実行中に例外が発生しない非述語的ループの実例を示す。非述語的ループ開始命令ＤＬＳはループの始めに実行され、ループ終了アドレス及び実行されることになる繰返しの数をセットアップする。これは非述語的ループ開始命令なので、浮動小数点制御レジスタ内の要素幅ＶＥｗｉｄｔｈパラメータは、まだ変化していない。現在のプロセスがまだ、浮動小数点コンテキストにアクセスできない場合、アクセスは必要とされないので、遅延状態保存動作又は障害条件はトリガされない。第１のループの繰返しの終わりに、非述語的ループ終了命令ＤＬＥは実行され、その後の繰返しを制御するためのループ開始アドレスをセットアップし、浮動小数点制御レジスタへのアクセスは必要とされないので、浮動小数点コンテキストが現在、アクセス可能でないことを浮動小数点コンテキスト・アクセス可能性フラグが示しても、遅延状態保存動作又は障害条件はトリガされない。ループのその後の繰返しにおいて、ループ開始命令及びループ終了命令は実行されず、プログラム・フローは、プログラム・ループ本体の複数の繰返しを通って進む。それぞれの繰返しの終わりにおいて、浮動小数点コンテキストはアクセス不能なので、ループ制御回路１０００は浮動小数点制御レジスタにアクセスせず、ＶＥｗｉｄｔｈ＝ＶＲｗｉｄｔｈ、即ちベクトル当たりの要素の数が１であることを想定するので、ループ・カウンタを１まで減らす。最終の繰返しにおいて、ベクトル・ループの述語は適用されず、さらなる繰返しが必要とされないこと検出すると、ループ制御回路１０００は、ループ終了命令ＤＬＥに先行する命令からＤＬＥ後の命令に飛び越えるようにプログラム・フローを制御し、ループ終了命令をスキップして、ループ後のその後の命令の処理を継続する。
【００９２】
図１４Ｂは、ループの実行中に例外が発生しない述語的ループの実例を示す。今回、ループ開始命令は述語的ループ開始命令ＤＬＳＰであるので、ループ終了アドレス、及び行われることになる繰返しの数を指定するループ制御データをセットアップすることに加えて、ループ開始命令復号回路は、ＤＬＳＰ命令によって指定される「ｓｉｚｅ」パラメータに基づいて、浮動小数点制御レジスタ内で指定されるベクトル要素幅ＶＥｗｉｄｔｈのアップデートもトリガする。したがって、浮動小数点コンテキストがまだアクセス可能でない場合、ＶＥｗｉｄｔｈがアップデートされることが可能になるように、遅延状態保存動作又は障害条件がトリガされ、コンテキストをアクセス可能にする。第１のループの繰返しの終わりに、述語的ループ終了命令ＤＬＥＰが実行され、ループ開始アドレスをセットアップする。ループ終了命令復号回路は、浮動小数点コンテキストが既にアクセス可能であることを状態アクセス可能性フラグから検出するので、遅延状態保存の必要はなく、ループ終了命令ＤＬＥＰに応答してトリガされる浮動小数点制御レジスタへのアクセスは、障害をトリガしない。ループのその後の繰返しはその後、ループ開始命令／ループ終了命令を実行せずに実行される。ループのそれぞれの繰返しにおいて、ループ制御回路１０００は、浮動小数点制御レジスタから読み込まれたＶＥｗｉｄｔｈに基づいて、繰返しの中で処理される要素の数を決定し、要素の決定された数によってループ・カウンタを減らす。ループの最終の繰返しにおいて、ループ・カウンタによって示されるような、まだ処理されていない要素の数が、１つのベクトル命令によって処理されることになる要素の数より小さい場合、ループ制御回路１０００は、不要なベクトル・レーンに述語を適用し、マスクされることになるベクトルの部分は、ＶＥｗｉｄｔｈ及びループ・カウンタから決定される。最終の繰返しの終わりに、ループ制御回路１０００は、さらなる繰返しが必要とされないことを検出するので、ＤＬＥＰ命令はスキップされる。浮動小数点コンテキストは既にアクセス可能なので、浮動小数点制御レジスタ内のＶＥｗｉｄｔｈフィールドは、ベクトル・レジスタの幅にリセットされ、その後のベクトル命令に対するループ末端述語をディスエーブルし、遅延状態保存又は障害条件は必要とされない。
【００９３】
図１４Ｃは、ループ中に例外が発生するときの非述語的ループの実例を示す。非述語的ループ開始命令及び非述語的ループ終了命令ＤＬＳ、ＤＬＥは、図１４Ａに対して説明されたのと同じ方式で実行され、ループ・カウンタは、図１４Ａに対して説明されたように、ループのそれぞれの繰返しにおいて、１まで減らされる。第３の繰返しにおいて、割り込まれたスレッドのコンテキストの状態保存をトリガする例外が発生する。浮動小数点コンテキストがアクセス可能として示される場合、状態保存は、浮動小数点コンテキストの保存を含むが、浮動小数点コンテキストがアクセス不能な場合、状態保存は、整数コンテキスト・データを保存するが、浮動小数点コンテキスト・データは保存しない。例外から戻ると、整数状態データは復元され、浮動小数点コンテキスト・データは、初めはアクセス不能である。遅延状態保護がアクティブであることを示すように遅延状態保護フラグがセットされ、その結果、ループのその後の任意の命令が、浮動小数点コンテキスト・データを必要とする場合、これは、浮動小数点コンテキストの遅延状態の復元をトリガする。浮動小数点コンテキスト・データを必要とする命令が遭遇される場合、ループ終了命令ＤＬＥに到達するとき、浮動小数点コンテキストはまだアクセス不能である。ループ制御データは以前、例外の発生時に無効化されたので、ループ終了命令ＤＬＥが実行され、ループ制御データをリセットする。これは非述語的ループ終了命令ＤＬＥなので、浮動小数点コンテキストがアクセス不能であるとしても、ループ終了命令は、遅延状態保存、又は浮動小数点制御レジスタへのアクセスをトリガしない。ループ制御データを復元すると、ループのその後の繰返しは、図１４Ａの方式と同じ方式で継続し、ループの最終の繰返しは、図１４Ａと同じ方式で処理される。したがって、処理されることになる繰返しが残っていないとき、ＤＬＥ命令はスキップされるので、浮動小数点コンテキストがアクセス不能であるとしても、最終の繰返しにおいて遅延状態保護又は障害条件はトリガされない。例外から復帰してから、遅延状態保護フラグがまだクリアされていない場合、フラグはまだアクティブなので、ループ後に浮動小数点コンテキストを必要とする次の命令は、遅延状態保存をトリガする。さらに、例外から復帰してから、遅延状態保護フラグがまだクリアされていない場合、ループ制御回路は、浮動小数点制御レジスタ内のＶＥｗｉｄｔｈをベクトル・レジスタの幅にリセットしようとしない。
【００９４】
図１４Ｄは、ループ中に例外が発生するときの述語的ループの実例を示す。第１の繰返しにおいて、述語的ループ開始命令／述語的ループ終了命令ＤＬＳＰ及びＤＬＥＰは、図１４Ｂの方式と同じ方式で実行される。ループの第３の繰返しにおいて例外が発生する。この例外は、例外ハンドラ又は別のスレッドへのコンテキスト・スイッチをトリガし、再び戻るが、これは、図１４Ｃの方式と同じ方式で処理される。しかし、述語的ループに関して、ループ本体に復帰すると、遅延状態保護フラグ（状態アクセス可能性フラグ）を伴う命令は、アクティブにセットし、述語的ループ終了命令ＤＬＥＰの復号は、現在のプロセスへのアクセス許可が、浮動小数点レジスタへのアクセスを許可しない場合、障害条件が引き起こされ、必要とされた許可を認めるようにオペレーティング・システムをトリガできるように、（ループ本体の中の初めの方の命令が浮動小数点コンテキストを必要としなかった場合）遅延状態保存動作をトリガし、浮動小数点制御レジスタへのアクセスもトリガする。したがって、述語的ループ終了命令に遭遇した後、浮動小数点コンテキストは利用可能になるので、ループ・カウンタのアップデートを制御するためにＶＥｗｉｄｔｈパラメータを読み込むこと、及びループの最後の繰返しにおいて述語を制御するためのループ末端述語パラメータにアクセスすることが可能である。ループ中に２つ以上の例外が発生する場合、それぞれの例外は、図１４Ｄに示されたものに類似の方式で処理される。最終のループの繰返しにおいて、ループの中で処理された要素の総数が、ループ開始命令によって指定された数にマッチすることを保証するように未使用のベクトル・レーンのマスクを制御するために、ループ末端述語が適用される。最終のループの繰返しの終わりに、ループ制御回路１０００は、遅延状態保存フラグが非アクティブであるので、浮動小数点コンテキストが既にアクセス可能であることを検出し、浮動小数点制御レジスタ内のＶＥｗｉｄｔｈをベクトル・レジスタの幅にリセットして、ループ中に断定されたこれらのベクトル・レーンの処理の抑制をディスエーブルする。
【００９５】
図１４Ｅは、ループの最終の繰返しにおいて例外が発生する述語的ループの実例を示す。第１の繰返しにおいて、ループ開始命令／ループ終了命令ＤＬＳＰ及びＤＬＥＰは、図１４Ｂ又は図１４Ｄの方式と同じ方式で処理され、同様にそれぞれの繰返しにおけるループ・カウンタの減少は、同じ方式で処理される。しかし、ポイント＊２で、最終の繰返しにおいて例外が発生し、これは、コンテキスト・スイッチをトリガする。（述語要素幅ＶＥｗｉｄｔｈを含む）以前の浮動小数点コンテキストは、メモリに保存され、例外が処理される。例外から復帰する際に、ループを動かすスレッドと関連付けられた整数コンテキストは復元されるが、浮動小数点コンテキストは復元されないので、遅延状態保存フラグはアクティブにセットされる。この実例において、例外からの復帰後に実行される第１の命令は、浮動小数点状態を必要としないスカラ命令ＳＩ１なので、遅延状態保存をトリガしない。浮動小数点制御レジスタ内の述語要素幅ＶＥｗｉｄｔｈはアクセス不能であるが、これは、命令がスカラ命令であり、述語を必要としないので、問題ではない。第１のベクトル命令ＶＩ２がポイント＊３で遭遇されると、これは、浮動小数点コンテキストを必要とする命令とみなされる（浮動小数点制御レジスタから述語要素幅ＶＥｗｉｄｔｈを必要とすることを除いて、いくつかのアーキテクチャにおいて、ベクトル・レジスタは、浮動小数点レジスタと重複してよいので、遅延状態保存フラグがアクティブであるときのベクトル命令の実行は、ベクトル・レジスタをアクセス可能にするために、いずれにしても遅延状態保護を発生させる）。遅延状態保存フラグがアクティブなとき、ベクトル命令ＶＩ２は遅延状態保存動作をトリガし、これは、ループの最終の繰返しの残りのために述語が再びイネーブルされるように、浮動小数点コンテキストをアクセス可能にし、ＶＥｗｉｄｔｈが復元されることを可能にする。
【００９６】
いくつかの実施例において、遅延状態保護プロセスは、レジスタ内の浮動小数点コンテキストを保護するだけであり、遅延状態保護をトリガしたスレッドと関連付けられた浮動小数点コンテキストを復元させない。このような実施例において、オペレーティング・システムは、遅延状態保護をトリガすることに加えて、障害をトリガしたスレッドと関連付けられた浮動小数点コンテキストにオペレーティング・システムが応答して復元できる障害も、浮動小数点状態にアクセスしようとする試みがトリガするように、アクセス許可を構成する。
【００９７】
図１５は、いくつかの実例の実施例において、本明細書で説明された技法を実装するのに適した仮想マシンの実施例を概略的に示す。初めの方で説明された実施例は、当該の技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点から本発明を実装するが、ハードウェア・デバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシン・プログラム５１０をサポートするホスト・オペレーティング・システム５２０を動かすホスト・プロセッサ５３０上で動く。典型的には、適度なスピードで実行する仮想マシンの実装形態を提供するために、大規模で強力なプロセッサが必要とされるが、このようなアプローチは、互換性又は再使用のために、別のプロセッサにネイティブなコードを動かすという要望があるときなど、一定の状況において正当化されることがある。仮想マシン・プログラム５１０は、仮想マシン・プログラム５１０によって模倣されるデバイスである本物のハードウェアによって提供されるアプリケーション・プログラム・インターフェースと同じアプリケーション・プログラム・インターフェースを、アプリケーション・プログラム５００に提供する。したがって、上述のメモリ・アクセスの制御を含むプログラム命令は、仮想マシン・プログラム５１０を使用して仮想マシンのハードウェアとのプログラム命令の相互作用を模倣し、アプリケーション・プログラム５００の内部から実行されてよい。
【００９８】
例証的な実施例が、添付の図面を参照しながら本明細書で詳細に説明されたが、特許請求の範囲はこれらの正確な実施例に限定されないということ、並びに添付の特許請求の範囲の範囲及び精神から逸脱することなく、様々な変更、追加、及び修正が、当業者によってこれらの実施例の中で行われてよいということを理解されたい。例えば、従属請求項の特徴の様々な組合せが、独立請求項の特徴と共に行われてよい。
【図１】
2019509574.tif 000003
【図２Ａ】
2019509574.tif 000004
【図２Ｂ】
2019509574.tif 000005
【図２Ｃ】
2019509574.tif 000006
【図２Ｄ】
2019509574.tif 000007
【図３Ａ】
2019509574.tif 000008
【図３Ｂ】
2019509574.tif 000009
【図３Ｃ】
2019509574.tif 000010
【図４】
2019509574.tif 000011
【図５】
2019509574.tif 000012
【図５Ａ】
2019509574.tif 000013
【図５Ｂ】
2019509574.tif 000014
【図６】
2019509574.tif 000015
【図７】
2019509574.tif 000016
【図８】
2019509574.tif 000017
【図９】
2019509574.tif 000018
【図１０Ａ】
2019509574.tif 000019
【図１０Ｂ】
2019509574.tif 000020
【図１１】
2019509574.tif 000021
【図１２】
2019509574.tif 000022
【図１３】
2019509574.tif 000023
【図１４Ａ】
2019509574.tif 000024
【図１４Ｂ】
2019509574.tif 000025
【図１４Ｃ】
2019509574.tif 000026
【図１４Ｄ】
2019509574.tif 000027
【図１４Ｅ】
2019509574.tif 000028
【図１５】
2019509574.tif 000029
【国際調査報告】
2019509574.tif 000030
2019509574.tif 000031
2019509574.tif 000032