(57)【要約】  装置２は、データストアからフェッチされる２つ以上の命令を統合して、処理回路１４によって処理される統合命令を生成する命令統合回路５０を有する。命令統合回路５０に、転送プレフィックス命令が、転送プレフィックス命令および直後の命令によって指定されるレジスタを比較する必要なく、直後のデータ処理命令と統合可能であることを示す転送プレフィックス命令が提供される。これにより、命令統合回路５０を、ハードウェアおよびエネルギーコストを低減して実施することが可能になる。
2018534671.tif 000002
【特許請求の範囲】
【請求項１】
命令に応答してデータ処理を実行する処理回路と、
転送プレフィックス命令と、データストアからフェッチされる直後の命令とを統合して、前記処理回路によって処理される統合データ処理命令を生成する命令統合回路と
を備える装置であって、
前記転送プレフィックス命令は、転送先レジスタと、前記転送先レジスタに少なくとも部分的にコピーされるべきデータ値を指定する転送元レジスタとを特定し、
前記転送プレフィックス命令を検出することに応答して、前記命令統合回路は、前記転送プレフィックス命令の前記転送先レジスタが、前記直後の命令によって指定される任意のレジスタと同じレジスタであるか否かとは無関係に、前記転送プレフィックス命令および前記直後の命令を統合するべきか否かを決定するように構成されている、装置。
【請求項２】
前記転送プレフィックス命令は、前記直後の命令が、所定の処理動作を少なくとも２つの転送元レジスタによって指定される少なくとも２つの転送元値に適用した結果に対応する結果値に転送先レジスタを設定されるべきであり、前記転送先レジスタおよび前記少なくとも２つの転送元レジスタのうちの１つが前記転送プレフィックス命令の前記転送先レジスタと同じである破壊的データ処理命令であると予測されることを示す、請求項１に記載の装置。
【請求項３】
前記破壊的データ処理命令は、前記転送先レジスタと前記少なくとも２つの転送元レジスタのうちの１つの両方を識別する単一のレジスタ指定子を含む命令符号化を有する、請求項２に記載の装置。
【請求項４】
前記統合データ処理命令は、前記少なくとも２つのオペランドレジスタによって指定される値に処理動作を適用した結果に対応する結果値に設定されるべき、少なくとも２つのオペランドレジスタおよび結果レジスタを別個に識別する建設的データ処理命令を含む、請求項１〜３のいずれか一項に記載の装置。
【請求項５】
前記命令統合回路は、前記建設的データ処理命令を生成するように構成され、
前記結果レジスタは、前記転送プレフィックス命令の前記転送先レジスタおよび前記直後の命令の転送先レジスタの一方に対応し、
前記少なくとも２つのオペランドレジスタは、前記転送プレフィックス命令の前記転送元レジスタおよび前記直後の命令の少なくとも１つの転送元レジスタに対応する、請求項４に記載の装置。
【請求項６】
前記転送プレフィックス命令は、第１のレジスタから第２のレジスタへデータ値をコピーするように前記処理回路を制御するための少なくとも１つの他のタイプの命令とは異なる命令符号化を有する、請求項１〜５のいずれか一項に記載の装置。
【請求項７】
前記命令統合回路は、前記直後のデータ処理命令が、実行されるべき異なるタイプの処理動作に対応するデータ処理命令のクラスのいずれかである場合に、前記転送プレフィックス命令と前記直後のデータ処理命令とを統合させるように構成されている、請求項１〜６のいずれか一項に記載の装置。
【請求項８】
前記転送プレフィックス命令を検出したことに応答して、前記命令統合回路は、前記転送プレフィックス命令の前記転送先レジスタが、前記直後のデータ処理命令によって指定される任意のレジスタと同じレジスタであるか否か以外の少なくとも１つの基準に応じて、前記転送プレフィックス命令と前記直後の命令とを統合するべきか否かを決定するように構成されている、請求項１〜７のいずれか一項に記載の装置。
【請求項９】
前記少なくとも１つの基準は、
前記直後の命令が、少なくとも２つの転送元値に対して所与の処理動作を実行するように前記処理回路を制御するデータ処理命令である場合、どのタイプの処理動作が前記直後の命令に対する前記所与の処理動作であるか、
前記転送プレフィックス命令と前記直後の命令とが異なるキャッシュラインに保持されているか否か、および
前記転送プレフィックス命令と前記直後の命令とがアドレス空間の異なるページに対応するか否か
のうちの少なくとも１つを含む、請求項８に記載の装置。
【請求項１０】
前記転送プレフィックス命令および前記直後の命令は、単一のデータ要素を含むスカラデータ値を処理するためのスカラ命令を含む、請求項１〜９のいずれか一項に記載の装置。
【請求項１１】
前記転送プレフィックス命令および前記直後の命令は、複数のデータ要素を含むベクトルデータ値を処理するためのベクトル命令を含む、請求項１〜１０のいずれか一項に記載の装置。
【請求項１２】
前記直後の命令が、結果値を生成するために少なくとも２つの転送元値に対して所与の処理操作を実行するように前記処理回路を制御するデータ処理命令である場合、前記直後の命令は、前記結果値のいずれのデータ要素が、前記少なくとも２つの転送元値の対応するデータ要素に依存する値に設定されるべきアクティブ要素、または、前記少なくとも２つの転送元値に依存しない値に設定されるべき非アクティブ要素であるかを示す述語値を識別する、請求項１１に記載の装置。
【請求項１３】
前記命令統合回路は、前記転送プレフィックス命令が前記直後のデータ処理命令と同じ述語値を識別するか否かとは無関係に、前記転送プレフィックス命令と前記直後の命令とを統合させるべきか否かを判定するように構成されている、請求項１２に記載の装置。
【請求項１４】
前記転送プレフィックス命令は、複数のタイプの転送プレフィックス命令のうちの１つを含み、
前記命令統合回路が前記転送プレフィックス命令を前記直後の命令に統合するとき、前記命令統合回路は、どのタイプの転送プレフィックス命令が前記直後の命令と統合されたかに応じて選択される非アクティブレーン処理モードに従って、前記結果値の前記非アクティブ要素を決定するように前記処理回路を制御するための前記統合データ処理命令を生成するように構成されている、請求項１２および１３のいずれか一項に記載の装置。
【請求項１５】
前記命令統合回路は、前記直後のコードの符号化とは無関係に選択される前記非アクティブレーン処理モードによって前記結果値の前記非アクティブ要素を決定するように前記処理回路を制御するための前記統合データ処理命令を生成するように構成されている、請求項１４に記載の装置。
【請求項１６】
前記転送プレフィックス命令が叙述されていないタイプの転送プレフィックス命令である場合、前記命令統合回路は、前記転送元レジスタの対応する要素の値を有する前記結果値の前記非アクティブ要素を決定するように前記処理回路を制御するための前記統合データ処理命令を生成するように構成されている、請求項１４および１５のいずれか一項に記載の装置。
【請求項１７】
前記転送プレフィックス命令が叙述されていないタイプの転送プレフィックス命令であり、前記命令統合回路が前記転送プレフィックス命令を前記直後の命令と統合させないと判断した場合、前記処理回路は、前記転送元レジスタからのデータ全体を、前記転送先レジスタにコピーする役割を担う、請求項１６に記載の装置。
【請求項１８】
前記転送プレフィックス命令がマージタイプの転送プレフィックス命令である場合、前記命令統合回路は、前記転送先レジスタの対応する要素の以前の値に依存する値を有する前記結果値の前記非アクティブ要素を決定するように前記処理回路を制御するための前記統合データ処理命令を生成するように構成されている、請求項１４〜１７のいずれか一項に記載の装置。
【請求項１９】
前記マージタイプの転送プレフィックス命令は、前記転送先レジスタのどの要素がアクティブ要素または非アクティブ要素かを識別する転送述語値を指定し、
前記転送プレフィックス命令が前記マージタイプの転送プレフィックス命令であり、前記命令統合回路が前記転送プレフィックス命令を前記直後の命令と統合させないと決定した場合、前記処理回路は、前記転送プレフィックス命令に応答して、前記転送先レジスタのアクティブ要素を、前記転送元レジスタの対応する要素の値に設定し、前記転送先レジスタの非アクティブ要素の以前の値を保持する役割を担う、請求項１８に記載の装置。
【請求項２０】
前記転送プレフィックス命令がクリアタイプの転送プレフィックス命令である場合、前記命令統合回路は、所定の値にクリアされる値を有する前記結果値の前記非アクティブ要素を決定するように前記処理回路を制御するための前記統合データ処理命令を生成するように構成されている、請求項１４〜１９のいずれか一項に記載の装置。
【請求項２１】
前記クリアタイプの転送プレフィックス命令は、前記転送先レジスタのどの要素がアクティブ要素または非アクティブ要素かを識別する転送述語値を指定し、
前記転送プレフィックス命令が前記クリアタイプの転送プレフィックス命令であり、前記命令統合回路が前記転送プレフィックス命令を前記直後の命令と統合させないと決定した場合、前記処理回路は、前記転送プレフィックス命令に応答して、前記転送先レジスタのアクティブ要素を、前記転送元レジスタの対応する要素の値に設定し、前記転送先レジスタの非アクティブ要素を前記所定の値にクリアする役割を担う、請求項２０に記載の装置。
【請求項２２】
前記処理回路は、統合されていないデータ処理命令の、転送先レジスタおよび転送元レジスタの両方について同じレジスタを識別して、前記同じレジスタの対応する要素の以前の値に応じた値に設定される非アクティブ要素を有する結果値を生成する役割を担う、請求項１２〜２１のいずれか一項に記載の装置。
【請求項２３】
前記直後の命令または前記統合データ処理命令によってトリガされる停止イベントに応答して、前記処理回路が、前記停止イベントの解決後に処理を再開するための復帰アドレスとして、前記転送プレフィックス命令のアドレスを記録するように構成されている、請求項１〜２２のいずれか一項に記載の装置。
【請求項２４】
前記直後の命令または前記統合データ処理命令によってトリガされる停止イベントに応答して、前記処理回路が、前記停止イベントの解決後に処理を再開するための復帰アドレスとして、前記直後の命令のアドレスを記録し、前記転送先レジスタのデータが前記転送プレフィックス命令の実行結果と等価であることを保証するように構成されている、請求項１〜２２のいずれか一項に記載の装置。
【請求項２５】
前記直後の命令または前記統合データ処理命令によってトリガされる停止イベントに応答して、前記処理回路が、前記命令統合回路が前記転送プレフィックス命令および前記直後の命令を統合したか否かに応じて、前記停止イベントの解決後に処理を再開するための復帰アドレスとして、前記転送プレフィックス命令のアドレスまたは前記直後の命令のアドレスを記録すべきか否かを選択するように構成されている、請求項１〜２２のいずれか一項に記載の装置。
【請求項２６】
前記命令統合回路が前記転送プレフィックス命令と前記直後の命令とを統合したとき、前記処理回路は、前記転送プレフィックス命令の前記アドレスを前記復帰アドレスとして記録するように構成され、前記命令統合回路が前記転送プレフィックス命令と前記直後の命令とを統合させなかったとき、前記処理回路は前記直後の命令の前記アドレスを前記復帰アドレスとして記録するように構成される、請求項２５に記載の装置。
【請求項２７】
前記停止事象は、例外事象、
割り込み、および
ブレークポイント
のうちの１つを含む、請求項２３〜２６のいずれか一項に記載の装置。
【請求項２８】
データ処理方法であって、
処理回路によって処理するための、データストアからフェッチされる命令の中から、転送先レジスタと、前記転送先レジスタに少なくとも部分的にコピーされるべきデータ値を指定する転送元レジスタとを特定する転送プレフィックス命令を検出するステップと、
前記処理回路によって処理されるべき統合データ処理命令を生成するために、転送プレフィックス命令を直後の命令と統合すべきか否かを決定するステップとを含み、
前記転送プレフィックス命令が検出されるとき、前記決定するステップは、前記転送プレフィックス命令の前記転送先レジスタが、前記直後の命令によって指定される任意のレジスタと同じレジスタであるか否かとは無関係に、前記転送プレフィックス命令および前記直後の命令を統合するべきか否かを決定する、データ処理方法。
【請求項２９】
命令に応答してデータ処理を実行するための手段と、
転送プレフィックス命令と、データストアからフェッチされる直後の命令とを統合して、処理回路によって処理される統合データ処理命令を生成するための手段と
を備える装置であって、
前記転送プレフィックス命令は、転送先レジスタと、前記転送先レジスタに少なくとも部分的にコピーされるべきデータ値を指定する転送元レジスタとを特定し、
前記転送プレフィックス命令を検出することに応答して、前記統合するための手段は、前記転送プレフィックス命令の前記転送先レジスタが、前記直後の命令によって指定される任意のレジスタと同じレジスタであるか否かとは無関係に、前記転送プレフィックス命令および前記直後の命令を統合するべきか否かを決定するように構成されている、装置。
【請求項３０】
データ処理装置によって実行されると、請求項１〜２７のいずれか一項に記載の装置に対応する命令実行環境を提供する仮想マシンを提供する、コンピュータ可読記憶媒体に格納されたコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。
【背景技術】
【０００２】
場合によっては、処理回路は、処理回路が実行するように設計された命令セットアーキテクチャの符号化された命令に直接等価ではない演算をハードウェアでサポートすることができる。例えば、命令セットアーキテクチャにおいて利用可能な限定された符号化空間は、所与の演算が、実行中のプログラムにおいて２つ以上の別個の命令を定義することを必要とする可能性があることを意味し得るが、処理装置は、処理回路によってサポートされる単一の統合命令に相当する２つ以上の命令のグループが存在することを検出することができ、もしそうであれば、統合命令を実行のために処理回路に供給することができる命令統合回路を有することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかし、統合可能な命令セットが存在するときを検出するためのこのような命令統合回路は、回路面積および電力消費の点で比較的費用がかかり得る。性能よりもエネルギー効率が重要となり得る多くのローエンドシステムでは、命令統合のオーバーヘッドが高すぎる可能性があるため、命令統合の利点はしばしばそのようなシステムでは利用できない。
【課題を解決するための手段】
【０００４】
少なくともいくつかの例は、
命令に応答してデータ処理を実行する処理回路と、
転送プレフィックス命令と、データストアからフェッチされる直後の命令とを統合して、処理回路によって処理される統合データ処理命令を生成する命令統合回路とを備える装置であって、
転送プレフィックス命令は、転送先レジスタと、転送先レジスタに少なくとも部分的にコピーされるべきデータ値を指定する転送元レジスタとを特定し、
上記転送プレフィックス命令を検出することに応答して、命令統合回路は、転送プレフィックス命令の転送先レジスタが、上記直後の命令によって指定される任意のレジスタと同じレジスタであるか否かとは無関係に、上記転送プレフィックス命令および上記直後の命令を統合するべきか否かを決定するように構成されている、装置を提供する。
【０００５】
少なくともいくつかの例は、
データ処理方法であって、
処理回路によって処理するための、データストアからフェッチされる命令の中から、転送先レジスタと、転送先レジスタに少なくとも部分的にコピーされるべきデータ値を指定する転送元レジスタとを特定する転送プレフィックス命令を検出するステップと、
処理回路によって処理されるべき統合データ処理命令を生成するために、転送プレフィックス命令を直後の命令と統合すべきか否かを決定するステップとを含み、
転送プレフィックス命令が検出されるとき、決定するステップは、転送プレフィックス命令の転送先レジスタが、上記直後の命令によって指定される任意のレジスタと同じレジスタであるか否かとは無関係に、上記転送プレフィックス命令および上記直後の命令を統合するべきか否かを決定することを含む、データ処理方法を提供する。
【０００６】
少なくともいくつかの例は、
命令に応答してデータ処理を実行するための手段と、
転送プレフィックス命令と、データストアからフェッチされる直後の命令とを統合して、処理回路によって処理される統合データ処理命令を生成するための手段とを備える装置であって、
転送プレフィックス命令は、転送先レジスタと、転送先レジスタに少なくとも部分的にコピーされるべきデータ値を指定する転送元レジスタとを特定し、
上記転送プレフィックス命令を検出することに応答して、統合するための手段は、転送プレフィックス命令の転送先レジスタが、上記直後の命令によって指定される任意のレジスタと同じレジスタであるか否かとは無関係に、上記転送プレフィックス命令および上記直後の命令を統合するべきか否かを決定するように構成されている、装置を提供する。
【０００７】
少なくともいくつかの例は、データ処理装置によって実行されると、上記の装置に対応する命令実行環境を提供する仮想マシンを提供するコンピュータ可読記憶媒体に格納されたコンピュータプログラムを提供することもできる。記憶媒体は、非一時的記憶媒体であってもよい。
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれるべき以下の実施例の説明から明らかになるであろう。
【図面の簡単な説明】
【０００８】
【図１】命令統合回路を有するデータ処理装置の一例を概略的に示す図である。
【図２】転送プレフィックス命令を、直後の命令と統合することができることを命令統合回路にシグナリングするための転送プレフィックス命令の使用を示す図である。
【図３】非プレフィックス転送命令の使用を示す図である。
【図４】命令を統合させるか否かを決定する方法を示す図である。
【図５】３つの異なるタイプの転送プレフィックス命令と、その直後の命令との併用を示す図である。
【図６】例外または他の停止イベントを処理する２つの異なる方法のうちの１つを示す図である。
【図７】例外または他の停止イベントを処理する２つの異なる方法のうちの１つを示す図である。
【図８】仮想マシンの実施態様を示す図である。
【発明を実施するための形態】
【０００９】
本技術の具体例を以下に示す。本技術はこれらの例に限定されないことは理解されよう。
【００１０】
転送プレフィックス命令の転送先が直後の命令によって指定される任意のレジスタと同じであるか否かをチェックする必要なしに、転送プレフィックス命令と直後の命令とを統合させることが安全であることを命令統合回路にシグナリングするために、直後の命令の前に置くことができる転送プレフィックス命令が提供される。これは、命令統合回路が、それぞれの命令のレジスタを比較するコンパレータを必要とすることを回避し、命令統合のハードウェアにおける実施をより安価にし、したがって、命令統合がハードウェアおよびエネルギー消費に関して以前は高価すぎた下端システムに、命令統合を利用可能にする。
【００１１】
データ処理命令は、建設的命令または破壊的命令のいずれかとして定義することができる。建設的命令は、データ処理命令の転送先レジスタと転送元レジスタとを別々に識別する別個のレジスタ指定子のためのスペースを有する符号化を有する。一方、破壊的命令の場合、符号化は、転送先レジスタと１つの転送元レジスタの両方を識別する単一のレジスタ指定子を有することができる。建設的命令の一例は、演算Ｒｄ＝Ｒｓ１＋Ｒｓ２を実行するように処理回路をトリガすることができる加算命令ＡＤＤ  Ｒｄ，Ｒｓ１，Ｒｓ２であってもよい。破壊的演算の例は、加算演算Ｒｄ＝Ｒｄ＋Ｒｓ１を実行するように処理回路をトリガする加算命令ＡＤＤ  Ｒｄ，Ｒｓ１であってもよい。
【００１２】
建設的形式の命令は、すべての入力オペランドの以前の値を維持し、そのため、複数の命令が同じ入力を必要とする場合、以前の建設的命令と同じ転送元レジスタを参照し続けることができるため、有用であり得る。例えば、上述の建設的な加算演算では、レジスタＲｓ１が別の命令に対して再び必要とされる場合、建設的形式を使用することにより、加算を実行する前にレジスタを操作するためのさらなる命令を必要とせずにこの値を保持することができる。
【００１３】
しかし、いくつかの命令セットアーキテクチャでは、符号化空間は貴重であり、各転送元オペランドのためのレジスタ指定子に加えて、転送先レジスタのための別個のレジスタ指定子を収容するのに十分なスペースがない場合がある。したがって、いくつかの命令セットアーキテクチャは、いくつかの命令に対して建設的符号化を可能にせず、そのため、破壊的符号化が、プログラマまたはコンパイラにとって利用可能な唯一の符号化であり得る。破壊的符号化は、破壊的命令の結果を転送元レジスタの１つに書き込むことによって、命令において符号化する必要のあるレジスタ指定子が少なくなるため、符号化空間を節約する。それにもかかわらず、データフロー分析が、命令が完了した後に入力命令のすべてが生きたままである（再び読み出される）ことを示す場合、プログラマまたはコンパイラは、建設的形式の命令を使用することを所望することが一般的である。所望の演算を実行するための建設的命令が命令セットアーキテクチャで利用可能でない場合、プログラマまたはコンパイラは、レジスタ転送またはコピー命令を破壊的命令の前のどこかに挿入することによってこれに対処することができる。
【００１４】
例えば、次のベクタ操作では、アーキテクチャで利用できる建設的命令がない場合がある。
（１）ｒｄ＝ｐｇ？ｒｓ１＋ｒｓ２：０；    ／／ＡＤＤ  Ｚｄ．Ｓ，Ｐｇ／Ｚ，Ｚｓ１．Ｓ，Ｚｓ２．Ｓに対応する。
ここで、ｒｄは転送先レジスタ、ｒｓ１およびｒｓ２は転送元レジスタ、ｐｇはベクトルレジスタのどの要素がアクティブ要素か非アクティブ要素かを識別する述語値であり、アクティブ要素は転送元レジスタにおいて対応する要素の合計ｒｓ１＋ｒｓ２に設定され、ｒｄの非アクティブ要素は０に設定される。
【００１５】
上記の建設的ＡＤＤ命令が利用できない場合、プログラマまたはコンパイラは、別々の転送および破壊的加算命令を代わりに使用することができる。
（２）ｒｄ＝ｐｇ？ｒｓ１：０；    ／／ＭＯＶ  Ｚｄ．Ｓ，Ｐｇ／Ｚ，Ｚｓ１．Ｓに対応する
ｒｄ＝ｐｇ？ｒｄ’＋ｒｓ２：ｒｄ；    ／／ＡＤＤ  Ｚｄ．Ｓ，Ｐｇ／Ｍ，Ｚｓ２．Ｓに対応する
（上記のベクトル命令構文では、述語の接尾辞／Ｚまたは／Ｍは、ゼロ化予測が使用されるか、または、マージ予測が使用されるかを示す。ゼロ化叙述の場合、結果の非アクティブ要素はゼロに設定され、一方でマージ叙述の場合、非アクティブ要素は転送先レジスタＺｄ．Ｓの対応する要素に以前に格納されたものと同じ値を保持する）。
【００１６】
したがって、例（２）の２つの命令を使用して、後続の命令によって読み取ることができるように、レジスタの内容Ｚｓ１．Ｓ（ｒｓ１）を保存することができる。しかし、追加の命令を復号して処理する必要があると、パフォーマンスが低下する可能性がある。
【００１７】
実際には、処理回路のハードウェアは、たとえ建設的命令が命令セットアーキテクチャ内で提供されなくても、依然として建設的なデータ処理動作をサポートすることができる。例えば、所与の命令セットアーキテクチャは、符号化空間に最も大きな圧力がかかる命令に対してのみ破壊的符号化を使用することができ、より少ない異なる値が命令において符号化される必要がある他のタイプの命令は、別個の転送先レジスタ指定子のための十分なスペースを有する。したがって、たとえ命令セットアーキテクチャにいくつかの破壊的命令があっても、いくつかの建設的命令もあるという事実は、処理回路自体のハードウェアが依然として別個の転送元および転送先レジスタ指定子を受信するための入力を有し、そのため、相対的に少ない変更によって、破壊的命令を、処理回路に発行されるべき建設的演算に変換することもできることを意味し得る。
【００１８】
したがって、いくつかの実装態様は、実際に対応する建設的データ処理動作を実現することを意図した上記のような転送命令および後続するデータ処理命令のシーケンスがいつ存在するかを認識するための命令統合回路を提供し、そのようなシーケンスが認識されるとき、命令統合回路はそれらを統合して、単一の統合データ処理命令を生成して、建設的演算を実施するように処理回路をトリガすることができる。例えば、処理回路は、例（２）からの別個のベクトルＭＯＶおよびＡＤＤ命令の代わりに、上記の例（１）に示されるような建設的ベクトルＡＤＤ命令を発行されてもよい。
【００１９】
しかし、そのような命令統合をより困難にする多くの問題がある。第１に、転送命令と後続のデータ処理命令の対がページ境界またはキャッシュラインまたは命令フェッチ境界にまたがる場合、命令統合回路は、転送命令と同じ命令バッチ内の後続のデータ処理命令に遭遇しない場合があり、これによって、転送命令を見てから後続のデータ処理命令を見るまでの間に何らかの追加の内部状態を維持することなく命令の組み合わせを識別することがより困難になり得る。このような追加の内部状態を維持することは、命令統合回路のハードウェアオーバヘッドを増加させる。
【００２０】
また、転送命令および後続のデータ処理命令を統合することを可能にするために、命令統合回路は、転送およびデータ処理命令のオペランドが統合可能であるように互換性があることをチェックする必要があり得る。例えば、命令統合回路は、転送命令および後続のデータ処理命令の転送先レジスタが同じであること、そのレジスタを上書きする介在する命令が存在しないこと、および命令が、ベクトルオペランドのどのデータ要素がアクティブ要素であるかを識別する述語レジスタを指定するベクトル命令である場合、２つの命令によって指定される述語レジスタも同じであることをチェックする必要があり得る。これらのチェックは、転送命令および後続のデータ処理命令が、同等の建設的演算を実装することを実際に意図されており、独立した動作ではないことを保証する。これらのチェックをすべて実行すると、命令統合回路の複雑さが大幅に増加し、比較的ローエンドの実装ではこれが正当化されないことがある。
【００２１】
統合に関する別の問題は、統合命令が、浮動小数点命令がオーバーフローまたはアンダーフローまたはゼロ割りなどの浮動小数点例外に遭遇する場合など、例外条件をトリガする可能性があることである。このような例外の処理は、統合命令の場合にはより複雑になることがある。
【００２２】
これらの理由のために、一般的に命令統合は、性能がエネルギー効率より重要な要件である比較的ハイエンドの実装における転送およびデータ処理命令に対してのみ可能であった。統合の恩恵をよりローエンドの実装にも利用可能にすることが望ましい。
【００２３】
これらの問題に対処するために、専用の転送プレフィックス命令が提供され、プログラマまたはコンパイラは、転送プレフィックス命令および直後の命令が統合可能であることを知らせるために直後の命令にプレフィックスを付けるためにこれを使用することができる。転送プレフィックス命令は、転送先レジスタと、少なくとも部分的に転送先レジスタにコピーされるデータ値を指定する転送元レジスタとを識別する。転送プレフィックス命令が検出されると、命令統合回路は、転送プレフィックス命令の転送先レジスタが直後の命令によって指定される任意のレジスタと同じであるか否かとは無関係に、転送プレフィックス命令と直後の命令とを統合させるべきか否かを判定することができる。
【００２４】
したがって、転送プレフィックス命令が提供されたという事実は、直後の命令が、転送先レジスタと第１の転送元レジスタとが転送プレフィックス命令の転送先レジスタと同じ命令である破壊的データ処理であることが予想されることのシグナルであるため、命令統合回路は、転送プレフィックス命令と直後の命令のレジスタとを比較する必要はない。要約すると、転送命令と破壊的命令との対が建設的な操作統合を実施することを意図しているときに、プログラマまたはコンパイラに転送プレフィックス命令を選択する責任を与えることによって、これは、融解が可能な場合を検出するために処理回路における複雑なハードウェアの必要を回避し、消費電力および回路面積を節約する。
【００２５】
図１は、複数のパイプライン段を含む処理パイプライン４を含むデータ処理装置２の一例を概略的に示す。この例では、パイプライン段は、データストア（例えば、命令キャッシュまたはメモリ）から命令をフェッチするフェッチ段６と、フェッチされた命令を復号する復号段と、レジスタリネームを実行するためのリネーム段１０と、実行のために命令を発行する発行段１２と、発行された命令を実行するための実行段１４とを含む。実行段１４は、複数の異なる種類の命令を実行するための複数の実行ユニット、例えば、スカラデータ処理命令を実行するためのスカラＡＬＵ（算術論理装置）２０、ベクトルデータ処理命令を実行するためのベクトルＡＬＵ２２、浮動小数点命令を実行するための浮動小数点ユニット２４（場合によっては別個のスカラ浮動小数点ユニットおよびベクトル浮動小数点ユニットが設けられてもよい）、および、レジスタ３０とデータキャッシュまたはメモリなどのデータストアとの間でデータを転送するためのロード／ストア命令を実行するロード／ストアユニット２６を含む。ロード／ストア命令によって指定される仮想アドレスを、データキャッシュまたはメモリ内の位置を識別する物理アドレスに変換するためのアドレス変換データをキャッシュするために、変換ルックアサイドバッファ（ＴＬＢ）３２を設けることができる。
【００２６】
レジスタ３０は、各々が単一のデータ要素を含むスカラオペランドを格納するためのスカラレジスタ３４と、各々が複数のデータ要素を含むベクトルオペランドを格納するベクトルレジスタ３６と、ベクトルレジスタ３６のどの要素がアクティブまたは非アクティブであるかを識別する述語値を格納するための述語レジスタ３８とを含む。ベクトルＡＬＵ２２によって処理されるベクトル命令に応答して、１つまたは複数のベクトルオペランドがベクトルレジスタ３６から読み出され得、述語レジスタ３８の１つに記憶された述語値が、ベクトルＡＬＵ２２を制御して、述語値によって示される任意のアクティブデータ要素に対する所与のデータ処理演算を実行して、ベクトルレジスタの１つに書き戻される対応する結果データ要素を生成することができ、一方で、述語によって示される非アクティブレーンに対応する任意の要素は、他の値をとることができる。転送先レジスタ内の非アクティブレーンの値をどのように設定するかを決定するために、異なる非アクティブレーン処理モードを定義することができる。例えば、非アクティブな結果データ要素は、所定の値（例えばゼロ）にクリアされ得るか、または転送先レジスタの対応する要素の以前の値を保持することができる。一方、スカラ命令の場合、スカラＡＬＵ２０または浮動小数点ユニット２４は、スカラレジスタ３４からデータ値を読み出して処理し、結果値をスカラレジスタ３４の１つに書き戻すことができる。
【００２７】
図１の例では、パイプライン４は命令がフェッチ段６によってフェッチされたプログラム順序と異なる順序での命令の実行をサポートする順序外パイプラインである。発行段１２は、命令のオペランドが利用可能になるのを待つ間に実行されるべき命令を待ち行列化する発行キュー４０を有する。命令のオペランドが利用可能になると、たとえプログラム順序における先行する命令がそのオペランドを依然として待っているとしても、実行段４０によって実行のために発行され得る。命令の並べ替えが可能である範囲を増大するために、リネーム段１０が、フェッチされる命令によって指定されるアーキテクチャレジスタ指定子を、ハードウェア内に設けられた物理レジスタ３０を識別する物理レジスタ指定子にマッピングするために提供される。典型的には、提供される物理レジスタの数は、同じアーキテクチャレジスタを異なる命令が異なる物理レジスタにマッピングされることを可能にし、それによって、これらの命令間の依存関係を排除することができるようにするために、命令セットアーキテクチャで利用可能なアーキテクチャレジスタの数よりも多い。これにより、パフォーマンスを向上させるために命令の実行順序を変更するより高い柔軟性が可能になる。リネーム段１０は、アーキテクチャレジスタ指定子と物理レジスタ指定子との間のマッピングを追跡するためのリネームテーブル４２を維持する。
【００２８】
他の例は、プログラム命令が元のプログラム順序で実行される正順序パイプラインを提供することができることが理解されよう。この場合、リネーム段１０は省略されてもよく、発行段１２は、そのオペランドが利用可能であり、プログラム順序における任意の先行する命令が発行されたときに所定の命令を発行することができる。
【００２９】
これは、可能なパイプラインアーキテクチャの単なる一例に過ぎず、他の例は、実行段１４における実行ユニットの異なる段または異なる組み合わせを有してもよいことが理解されよう。例えば、いくつかのパイプラインは、復号段８と発行段１２との間に追加のディスパッチ段を有することができ、それによって、復号段８において他の命令の復号を阻害しないように、発行キュー４０がいっぱいになったときに、復号命令はディスパッチ段内で待つことができる。
【００３０】
フェッチ回路６によってデータストアからフェッチされた命令は、「マクロ命令」と呼ばれる場合があり、一方で、実行のために実行段１４に渡される復号命令は、「マイクロ命令」または「マイクロ演算」と呼ばれることがある。いくつかのタイプの命令では、キャッシュまたはメモリからフェッチされるマクロ命令と、実行段１４によって実行されるマイクロ演算との間に１対１のマッピングが存在し得る。しかし、他のタイプの命令の場合、複雑な命令は、復号段８によって複数のマイクロ演算に復号され、これはその後、実行段１４による実行のために別々に発行することができる。例えば、複数ロード命令を、各々がメモリから異なるレジスタにデータをロードするための複数の個々のロードマイクロ演算に復号することができる。
【００３１】
また、２つ以上のマクロ命令を統合して、実行されるべき単一のマイクロ命令を生成することもできる。この例では、復号段８は、命令キャッシュまたはメモリからフェッチ段によってフェッチされる命令ストリーム内で検出される２つ以上の命令からなる様々なグループを統合させ、そのようなグループが検出されると、これらを統合させて、その後処理のために後続の段に転送することができる同等の結果を与える単一の統合データ処理命令を生成するための命令統合回路５０を有する。単一の命令は一般的に２つ以上の別々の命令より高速に実行できるため、これにより、パフォーマンスを向上させることが可能である。図１は、命令統合回路５０を含む復号段８を示しているが、他の例では、命令統合は、ディスパッチ段または発行段１２などの別の段で行うことができる（例えば、復号段８は、最初に、命令グループを別個の復号命令に分割することができるが、発行段における統合回路は、その後、これらを単一のマイクロ演算に統合することができる）。したがって、復号の際に命令統合が行われることは必須ではない。
【００３２】
命令統合回路５０は、処理回路１４に送られる対応する統合命令（統合マイクロ演算）にマッピングすることができる統合可能な命令グループを検出することができる。各々が対応する統合命令にマッピングすることができるいくつかの異なる統合可能グループが存在する可能性がある。しかしながら、後続の例は、転送プレフィックス命令および直後の命令を含む特定のグループに焦点を当てる。これは、命令統合回路５０が他のタイプの命令も統合できることを排除するものではない。
【００３３】
図２は、命令統合回路５０によって実行される命令統合の例を示す。図２の上部は、プログラマまたはコンパイラが実際に使用することを所望するが、装置２によってサポートされている命令セットアーキテクチャでは利用できない建設的加算命令を示している。建設的加算命令は、転送先レジスタＺｄと、述語レジスタＰｇと、２つの転送元レジスタＺｓ１、Ｚｓ２とを指定する。建設的加算命令は、ベクトルレジスタＺｓ１、Ｚｓ２からベクトルを読み出し、２つのベクトルの対応するデータ要素の各それぞれの対に対して一連の加算演算を実行して、転送先レジスタＺｄに書き込まれるべき対応する結果データ要素を生成するように、装置を制御することを意図されている。述語レジスタＰｇによって非アクティブとして識別される任意の要素は、結果の対応するデータ要素を加算に依存しない何らかの他の値に設定し、一方で、アクティブレーンは転送元ベクトルの対応するデータ要素の加算結果をとる。
【００３４】
しかし、建設的加算命令が利用できないとき、プログラマまたはコンパイラは、代わりに、図２の中央部に示すように、転送プレフィックス命令および破壊的加算命令を提供する。転送プレフィックス命令は、転送先レジスタＺｄおよび転送元レジスタＺｓ１を指定し、転送先レジスタＺｄを転送元レジスタＺｓ１に等しく設定するように処理装置をトリガすることを意図している。任意選択的に、転送プレフィックス命令はまた、転送先レジスタＺｄのどのデータ要素が、転送元レジスタＺｓ１からの対応する要素でポピュレートされるアクティブ要素であるかを制御する述語レジスタＰｇを指定してもよい。しかし、叙述されていない転送プレフィックス命令も提供されてもよく、この場合、転送元値全体がレジスタＺｓ１から転送先レジスタＺｄにコピーされてもよい。次の破壊的加算命令は、転送プレフィックス命令と同じ転送先レジスタＺｄおよび同じ述語Ｐｇ（述語が転送プレフィックス命令内で与えられている場合）を指定し、第２の転送元レジスタＺｓ２も指定する。加算命令は、レジスタＺｄおよびＺｓ２内でそれぞれの要素対を加算し、各結果を転送先レジスタＺｄの対応する要素に書き込み、転送先レジスタのこれらの要素の以前の値を上書きするように、処理ハードウェアを制御するように意図されている。ここでも、述語レジスタは、どのレーンがアクティブおよび非アクティブであるかを制御し、任意の非アクティブなレーンは加算とは無関係に設定される（例えば、ゼロまたは転送先レジスタの以前の値に設定することができる）。
【００３５】
命令統合回路５０は、転送プレフィックス命令および破壊的加算命令を含む命令対を検出し、それらを統合するか否かを決定する。図２の下部に示すように、命令統合回路５０はこれらの命令を統合させないことを決定し、その後、統合されていない転送命令および加算命令が別々に実行するためにパイプラインの後続段に発行される。一方、命令が統合される場合、それらは、プログラムまたはコンパイラの本来の意図に従って、統合された建設的加算命令に置き換えられる。
【００３６】
転送プレフィックス命令を後続の命令と統合させるか否かの決定は、後続の命令によってどの特定のデータ処理動作が指定されるかを含み得る様々な要因に依存し得る。したがって、命令が統合されるか否かは、転送プレフィックス命令の異なるインスタンスに対して動的に変化し得る。図２の例では、転送プレフィックス命令の直後の命令は加算命令であるが、同様に、転送プレフィックス命令は他の形式の演算命令（減算、乗算、除算、平方根、乗加算など）、または論理命令（ＡＮＤ、ＯＲ、ＸＯＲ、ＮＡＮＤなど）のような他のタイプのデータ処理命令にプレフィックスを付けることができる。したがって、異なる種類のデータ処理命令のクラス全体が存在してもよく、これらの命令には、転送プレフィックス命令が前置されてもよい。転送プレフィックス命令がデータ処理命令のクラスのいずれかと統合されるとき、命令統合回路５０は、直後の命令のオペコードから、対応する統合データ処理命令のクラスのいずれを生成するかを決定することができる。
【００３７】
いくつかの実施形態では、統合回路５０は、その転送プレフィックス命令を、それらのすべてではなくそのクラス内の特定のタイプのデータ処理命令についてのみ、直後の命令と統合してもよい。例えば、浮動小数点命令で上述したように、浮動小数点演算が値をゼロ割りしようとする場合、または、浮動小数点結果がオーバーフローする、アンダーフローする、または不正確であるときなど、浮動小数点例外が発生するリスクがあり得る。統合命令が実行されるときにそのような例外条件を処理する複雑さを避けるために、実施態様は、実行されるべき演算が例えば浮動小数点演算である場合に、転送プレフィックスを直後の命令と統合させることを避けることができる。
【００３８】
また、転送プレフィックス命令および後続の命令が異なるキャッシュラインに保持されるか、またはアドレス空間の異なるページに命令アドレスを有する場合、例えば、転送プレフィックス命令は、復号段８が遭遇する１つの命令ブロックの最後の命令であり得、後続の命令は次のブロックの最初の命令になり、そのため、これらの２つの命令は同時に遭遇され得ないため、命令統合回路５０はそれらを統合させないことを選択することができる。２つの命令を見ている間に状態を維持するのを避けるために、１つのブロックの最後の命令の転送プレフィックスに遭遇すると、命令統合回路５０は、単に次の命令と統合させないことを決定することができる。
【００３９】
しかし、統合するか否かの決定は、直後の命令が建設的命令であるかまたは破壊的命令であるか、転送プレフィックス命令および直後の命令の転送先レジスタが同じであるか否か、転送プレフィックス命令および直後の命令の述語レジスタが同じであるか否か、および、直後の命令の転送元レジスタのうちの１つが転送プレフィックス命令の転送先レジスタと同じであるか否かを含む、いくつかの要因とは無関係である。プログラマまたはコンパイラが専用の転送プレフィックス符号化を使用して（データ値をレジスタ間で転送することができる何らかの他の種類の命令ではなく）転送プレフィックス命令を選択することを選択しているという事実は、転送プレフィックス命令を直後のデータ処理命令と安全にマージすることができることを示すため、命令統合回路５０は、これらの条件のいずれかをチェックする必要はない。これらの条件のすべてをチェックする必要性を排除することにより、命令統合回路５０はハードウェアの点ではるかにより効率的であり、そのため、これにより命令統合がより簡単なパイプライン実施態様にとって利用可能となり、比較的ローエンドのシステムの性能を高めることができる。
【００４０】
いくつかの実施形態では、命令統合回路５０は、直後の命令が実際にデータ処理命令であるか否かさえチェックしなくてもよい。プログラマまたはコンパイラは、予測可能な結果を与えるために、転送プレフィックス命令を限定された破壊的データ処理命令セットと対にする必要があるが、命令統合回路５０は、直後の命令が実際にその破壊的データ処理命令セットのうちの１つであるか否かをチェックする必要はなく、プログラマまたはコンパイラがロード、ストア、または分岐命令の直前に転送プレフィックス命令を置く場合、命令統合回路５０は依然として命令を統合して統合データ処理命令を生成することができ、その結果は予測できない。後続の命令が、統合されることを意図された許容される破壊的データ処理命令セットの１つであるか否かをチェックする必要性を回避することによって、命令統合回路５０のオーバーヘッドを低減することができる。代替的に、他の実施態様は、直後の命令のタイプをチェックして、それが統合すべきではないロード、ストア、分岐、または他のタイプの命令であることを決定してもよい。
【００４１】
図２とは対照的に、図３は、図２に示す転送プレフィックス命令とは異なる方法で符号化される標準転送命令を含む一連の命令を示す。プログラマまたはコンパイラは、後続のデータ処理演算が先行する転送とは無関係であるべきであり、そのため命令対が建設的演算を複製することを意図されていない場合に標準転送命令を選択することができる。標準的な転送命令の場合、命令統合回路５０は、転送命令を統合の候補として認識し得ず、後続のデータ処理命令とは別個にパイプラインの後続の段による処理のために単純に転送することができる。
【００４２】
図３に示す標準転送命令の命令符号化は、図２の転送プレフィックス命令の命令符号化とは区別することができる。標準的な転送命令であるか転送プレフィックス命令であるかを指定するフィールドを用いて転送命令を提供することが可能である。しかしながら、実際には、転送プレフィックス命令は、標準（非プレフィックス）転送命令とはまったく異なるオペコードを有することがある。あるレジスタから別のレジスタへのデータ値の転送は、実際には、２つの同一のオペランドに対して論理ＯＲを実行してその結果をレジスタに入れるＯＲ命令、２つの同一のオペランドに対して論理ＡＮＤを実行してその結果をレジスタに入れるＡＮＤ命令、転送されるオペランドにゼロを加算するＡＤＤ命令、または、その転送元オペランドのうちの１つと同じ結果を与える任意の他の命令のような、他の種類の命令を使用して実施することができる。したがって、既に提供されている別の命令を使用して転送を実際に実施することができるときに、専用転送命令のための命令セットアーキテクチャ内の符号化空間を無駄にする価値はないことが多い。したがって、実際には、図３に示す従来の転送命令は、実際にはその入力オペランドの１つと同じ結果を与える別の命令であり得、これは図２に示す転送プレフィックス命令とは異なるオペコードを有することができる。
【００４３】
統合されていない転送プレフィックス命令が実行されるいくつかの場合において、命令は実行段１４に発行され得、実行段１４は実際に転送先レジスタに転送元値を書き込むことができる。しかしながら、転送プレフィックス命令がスカラ命令、叙述されていないベクトル命令、または述語がすべての要素をアクティブと識別する叙述ベクトル命令である場合、転送は、単にリネームテーブル４２を更新することによってリネーム段１０で実行することもでき、それによって、転送先レジスタのアーキテクチャレジスタ指定子が、この時点で、転送元レジスタのアーキテクチャレジスタ指定子に以前にマップされた物理レジスタにマッピングされる。したがって、いくつかのタイプのレジスタ転送は、発行段でスロットが割り当てられるか、または実行段１４で任意の動作が割り当てられる必要をなくすことができ、単純にレジスタリネームによって実施することができる。
【００４４】
図４は、命令の統合を制御する方法を示す。ステップ６０において、命令統合回路５０は、フェッチされた命令が、転送先レジスタＲ１、転送元レジスタＲ２、および任意選択で述語レジスタＰ１を指定する転送プレフィックス命令を含むか否かを検出する。そうでない場合、フェッチされた命令は何らかの他の方法で処理される。転送プレフィックス命令が検出されると、ステップ６２において、命令統合回路５０は、転送プレフィックス命令の転送先レジスタＲ１が直後の命令によって指定されるレジスタのいずれかと同じであるか否かとは無関係に、転送プレフィックス命令と直後の命令とを統合させるべきか否かを判定する。いくつかの実施態様では、統合させるべきかの決定は、転送プレフィックス命令が検出されたときに、これが直後の命令と常に統合されるように固定されてもよく、一方、他の場合には、この決定は、特定のタイプのデータ処理が命令によってトリガされるなど、他の要因に依存してもよい（例えば、演算が浮動小数点演算であるか整数演算であるか、または演算が除算または加算であるかなど）。この決定はまた、転送プレフィックス命令および直後の命令が、所定の時間に処理される同じ命令ブロック内にあり、例えばページ境界またはキャッシュライン境界によって分離されていないかにも依存する。正しく使用される場合、直後の命令は、転送先レジスタＲ３が転送先レジスタＲ１と同じであり、転送元レジスタの１つが転送先レジスタＲ３自体であり、述語レジスタＰ２（指定されている場合）が、転送プレフィックス命令の述語レジスタＰ１と同じであるクラスのデータ処理動作の１つであるはずである。直後の命令は、少なくとも１つのさらなる転送元レジスタ（例えば、レジスタＲ４）を指定することもできる。
【００４５】
ステップ６４では、転送プレフィックス命令と直後の命令とを統合するか否かが決定される。命令が統合される場合、ステップ６６において、実行のために後続の段に渡すために、建設的な形式の統合命令が生成される。統合命令は、転送プレフィックス命令によって指定される転送先Ｒ１または直後の命令によって指定される転送先レジスタＲ３のいずれかと等しい結果レジスタＲｄ、転送プレフィックス命令および直後の命令によって指定されるいずれかの述語レジスタＰ１、Ｐ２と同じである述語レジスタＰｇ、転送プレフィックス命令の転送元レジスタＲ２および直後の命令のさらなる転送元レジスタＲ４に等しい少なくとも２つのオペランドレジスタＲｓ１、Ｒｓ２を指定する。いくつかのタイプの命令（例えば、乗加算）は、３つ以上の転送元オペランドを有することができ、その場合、統合命令の２つ以上の転送元オペランドは、元の破壊的命令の対応する転送元レジスタと同じであり得る。一方、ステップ６４において、命令を統合させないと決定された場合、ステップ６８において、別々の転送および処理命令が、パイプラインの残りの段によって別々に処理される。
【００４６】
図４に示す統合命令は、以下を条件として、ステップ６０および６２に示す２つの別々の転送およびデータ処理命令の組み合わせと同じ結果を生成すると予測される。
・直後の命令がデータ処理命令である（ロード、ストアまたは分岐など何らかの他の命令ではない）
・転送プレフィックス命令および直後の命令が同じ転送先レジスタを指定する（Ｒ１＝Ｒ３）。
・直後の命令が、さらなる転送元オペランドとしてプレフィックス転送先レジスタ（Ｒ１）を使用しない。
・転送プレフィックス命令および直後の命令が同じ述語レジスタを指定する（Ｐ１＝Ｐ２）。
・直後の命令が、転送元と転送先の両方として同じレジスタを指定する破壊的命令である。
【００４７】
プログラマまたはコンパイラが転送プレフィックス命令を誤って使用し、次のいずれかが該当する命令の直前に配置する可能性がある。
・後続の命令が、転送先レジスタを転送元オペランドとして使用する破壊的データ処理命令ではない、
・後続の命令が、転送プレフィックス命令と同じ転送先レジスタを指定していない、
・後続の命令は、プレフィックス転送先レジスタをさらなる転送元オペランドとして使用する、または
・後続の命令が、転送プレフィックス命令と同じ述語レジスタを指定しない（転送プレフィックス命令が述語命令である場合）。
【００４８】
命令統合回路５０がこれらの条件をチェックしていないため、命令統合回路１５は、転送プレフィックス命令と直後の命令とを統合して、統合命令を生成することができ、統合命令は、転送プレフィックス命令および直後の命令が独立に実行された場合に生成される結果とは異なる結果を与えることができる。したがって、転送プレフィックス命令がプログラマまたはコンパイラによって正しく使用されない場合、統合命令の挙動は予測不可能である可能性がある。統合命令（または統合命令の結果を使用する後続の命令）の結果は、所与のハードウェア実装が統合を実施する特定の方法に依存し得る。例えば、統合命令は、転送プレフィックス命令と直後の命令との組み合わせによって実際に意図されたものとは異なる転送元レジスタ対で動作してもよいし、または、リンクされることが決して意図されていない２つの演算を組み合わせてもよい。したがって、プログラマまたはコンパイラが転送プレフィックス命令を誤って使用すると、バグおよび誤った処理結果が発生する可能性がある。正しい使用を確実にするために、プログラマまたはコンパイラは、介在する命令なしにプログラム順序で適用する破壊的データ処理命令の直前に転送プレフィックス命令を置くべきであり、転送プレフィックス命令および直後の命令が、同じ転送先レジスタを指定し、（転送プレフィックス命令が叙述される場合）同じ述語レジスタを指定することを保証し、直後の命令が破壊的命令であることを保証すべきである。転送プレフィックス命令は実効的に、次の命令が統合されるのに適した破壊的命令になることを「約束」し、プログラマまたはコンパイラがこの約束を破った場合、結果が正しいと期待することはできない。
【００４９】
転送プレフィックス命令を使用して書かれたコードは依然として、命令を統合するための命令統合回路５０を有しないデータ処理装置によって実行することができる。そのような実施態様では、転送プレフィックス命令は、単に標準転送命令として処理することができ、転送元レジスタＺｓ１から転送先レジスタＺｄへデータ値を転送するために実行することができる。したがって、命令セットアーキテクチャ内で転送プレフィックス命令を提供する場合、そのアーキテクチャをサポートするすべてのハードウェアが命令統合回路５０を有する必要はなく、転送プレフィックス命令を提供することによって、命令統合回路５０を提供するハードウェア実施態様が、命令統合をより低コストで実施し、より多くのハードウェア実施態様が統合を可能にすることを選択する可能性を高めることを可能にする。
【００５０】
図５に示すように、複数のデータ要素を含むベクトルオペランドに対して動作する転送プレフィックス命令のベクトル実施態様のために、非アクティブな処理レーンを処理する様々な方法に対応する異なる形式の転送プレフィックス命令を提供することができる。図５のこの例では、３つの形式の命令、すなわち、述語レジスタを指定しない、すなわちベクトルのすべての要素がアクティブであると見なされる叙述されていない転送プレフィックス命令、ならびに、２つの叙述されている形式の命令、すなわち、述語値によって識別される非アクティブレーンが転送先レジスタの対応する要素に格納されている以前の値に設定されるマージ転送プレフィックス命令、および、転送先レジスタの非アクティブレーンが固定値（０など）に設定されるクリア転送プレフィックス命令が提供される。
【００５１】
図５の上部は、スタンドアローン命令（後続のデータ処理命令との統合を伴わない）として転送プレフィックス命令の各形式を実行した結果を示す。叙述されていない転送の場合、統合されていない転送命令を実行する結果として、転送元レジスタＺｓ１からのベクトル全体が転送先レジスタＺｄにコピーされる。上述したように、実際には、単純に、レジスタＺｄのアーキテクチャ指定子がこの時点で転送元レジスタＺｓ１に以前にマッピングされた物理レジスタにマッピングされるように、リネームテーブル４２を更新することによってこれを達成することができる。
【００５２】
マージ転送プレフィックス命令の場合、転送先レジスタのアクティブレーン（この例では、述語値が１であるレーン０，１，２）は、転送元レジスタＺｓ１からの対応する要素Ｖ０、Ｖ１、Ｖ２と等しく設定され、一方、非アクティブレーン（例えば、述語ビット０を有するレーン３）は、転送先レジスタＺｄの以前の値Ｄ３を維持する。レジスタのリネームにより、たとえ元の転送先レジスタと更新された転送先レジスタとの間で要素Ｄ３が変更されないままであっても、転送先レジスタＺｄの結果値は、実際には転送先レジスタＺｄに以前にマッピングされている物理レジスタに書き込むことができ、そのため、要素Ｄ３は依然としてアクティブ要素Ｖ０、Ｖ１、Ｖ２の値とともに転送先レジスタにコピーする必要があり得る。
【００５３】
一方、クリア転送プレフィックス命令の場合、転送先レジスタＺｄの任意の非アクティブ要素はゼロに設定され、一方、アクティブ要素は転送元レジスタＺｓ１の対応する要素Ｖ０−Ｖ２の値をとる。
【００５４】
図５の下部に示されているように、異なるタイプのプレフィックス命令の後にマージ叙述を使用するデータ処理命令が続く場合、結果は、データ処理命令の述語Ｐｇによって示されるアクティブなレーンが、データ処理命令の転送元レジスタＺｓ１および第２の転送元レジスタＺｓ２内の対応する要素の合計Ｖｎ＋Ｓｎに対応することである。一方、非アクティブレーンは、データ処理命令と組み合わされた転送プレフィックス命令のタイプに応じて異なる値をとる。叙述されていない転送プレフィックス命令の場合、非アクティブなレーンは、転送元レジスタＺｓ１の対応する要素からの値Ｖ３をとる。マージ転送プレフィックス命令の場合、後続のデータ処理命令の結果として、その非アクティブレーンが元の転送先レジスタＺｄからの要素Ｄ３をポピュレートされ、クリア転送プレフィックス命令では、最終結果の非アクティブレーンはゼロに設定される。これは、３つの例すべてが後続の命令とまったく同じ符号化を使用していても同じである。
【００５５】
したがって、異なる非アクティブレーン処理モードに対して異なる形式のデータ処理命令を提供する必要はない。例えば、先行する転送プレフィックス命令は、マージまたはクリアのいずれの叙述が使用されるかを選択するために、異なる形式で選択することができるため、叙述をクリアすることを可能にする符号化を伴う加算命令を提供する必要はない。これにより、データ処理命令の符号化空間が節約される。データ処理命令は、多くの場合、転送プレフィックス命令よりも多くの、命令符号化において表現されるべき値を有し得るため、非アクティブレーン処理モードの符号化を転送プレフィックス命令にシフトする結果として、データ処理命令の符号化がより効率的になり、これによって、他の情報を符号化するために、データ処理命令において利用可能なより多くのスペースが残る。
【００５６】
したがって、破壊的データ処理命令（転送元レジスタと転送先レジスタの両方として同じレジスタを指定する）は、デフォルトで、非アクティブレーンが転送先レジスタの対応する値を保持するマージ非アクティブレーン処理モードを使用すると仮定することができる。異なる非アクティブレーン処理モードがデータ処理命令（例えば、ゼロ化叙述）に対して所望される場合、異なるタイプの転送プレフィックス命令を命令に前置することによって、データ処理命令の挙動を変更することができる。
【００５７】
図５は、叙述されている加算命令の前に叙述されていない転送プレフィックス命令を実行する例を示しているが、多くの例では、叙述されていない転送プレフィックス命令は、非アクティブなレーンを有しない、叙述されていないデータ処理命令と併用される。この場合、すべてのレーンは、結果要素をレジスタＺｓ１、Ｚｓ２の対応する要素Ｖｎ、Ｓｎの合計に設定することができる。
【００５８】
また、図５は、転送プレフィックスと加算演算とを別々に実行する例を示しているが、これらが統合されたとき、処理回路１４は、いかなる方法でも同等の結果を生成することができることは理解されよう。処理回路が実際に２つの演算を連続して実行する必要はなく、転送先レジスタＺｄおよび２つの転送元レジスタＺｓ１、Ｚｓ２の入力値から直接適切な結果値を生成することが可能であり得る。
【００５９】
上で説明したように転送プレフィックス命令を導入するときに生じる１つの問題は、実行を停止させるイベントにどのように応答するかである。イベントを停止させる例は、例えば、例外、割り込み、またはブレークポイントなどである。例えば、命令が異常な結果（例えば、浮動小数点結果が範囲外である）を生成する場合、例外が発生する場合があり、または、外部デバイスが、例えば、ユーザが装置のボタンを押したか、あるいは、外部デバイスがメッセージを送信したことを示す割り込み信号をアサートすると、割り込みがトリガされ得る。例外または割り込みは、処理回路が、処理を中断し、発生したイベントを処理するために例外または割り込み処理ルーチンに切り替えるようにする場合がある。処理ルーチンが完了すると、処理はその後、以前に実行されていたプログラムに戻ることができる。同様に、デバッグの目的で、ブレークポイントアドレスを設定することができ、命令アドレスがブレークポイントアドレスと一致する命令に処理が到達したとき、デバッガが様々なレジスタの内容を検査すること、メモリ内の特定のアドレスからデータ値を読み出すこと、または処理回路の活動を調査するための他の操作のような何らかの診断動作を実行することができるように、処理を保留することができる。
【００６０】
したがって、これらのタイプの停止イベントのすべてについて、停止イベントの発生時に、処理が停止イベントの解決に戻るべき復帰アドレスを記録することができる。復帰アドレスは、複数の異なる方法で記録することができる。例えば、復帰アドレスはレジスタ（例えば、リンクレジスタ）に置くことができ、またはスタックにプッシュすることができ、または他の何らかのメカニズムを使用して記録することができる。図６および図７に示すように、転送プレフィックス命令およびデータ処理命令の対について、後続の命令（統合されていない場合）または統合命令（統合されている場合）の処理中に停止イベントが発生したときに復帰アドレスを決定することができる複数の異なる方法が存在する。
【００６１】
図６に示すように、１つのアプローチは、たとえ例外が後続の命令によって実際にトリガされた場合でも、停止イベント（この場合は例外など）が、転送プレフィックス命令の復帰アドレス＃Ａ１のレジスタ（ＥＬＲ）への記録をトリガすることである。図６の例では、データ処理命令は浮動小数点命令ＦＡＤＤであり、そのため、例外は浮動小数点例外であり得る。したがって、例外ハンドラが例外条件の解決を完了すると、処理は転送プレフィックス命令のアドレス♯Ａ１に戻り、そのため、命令統合回路５０は転送プレフィックス命令を後続の命令と統合させるか否かを再び決定することができる。停止イベントの前にその効果が既にアーキテクチャ的に実行されていたとしても、転送プレフィックス命令を繰り返すことができるため、この方法は、後続の命令を再開する前に、任意の状態を維持する必要性を回避する。
【００６２】
一方、図７に示すように、別のアプローチは、停止イベントが、転送プレフィックス命令のアドレスの代わりに、後続の命令の復帰アドレス＃Ａ２のＥＬＲ内への記録をトリガすることであってもよい。この場合、復帰アドレスを設定することに加えて、処理回路は、転送プレフィックス命令の転送先レジスタＺｄが、転送プレフィックス命令が実行された場合と同じ結果に設定されることを保証することができる。実際には、転送プレフィックス命令が次の命令と統合されていないいくつかの場合、転送プレフィックス命令は既に実行されている可能性があり、したがって、転送先レジスタＺｄが既に正しい結果を有している可能性がある。一方、転送プレフィックス命令がまだ実行されていない場合、または転送プレフィックス命令が後続の命令と統合された場合、例外に直面すると、転送先レジスタＺｄを正しい値に設定するための演算を実行することができ、それによって、後に処理がアドレス♯Ａ２に戻るとき、あたかも転送プレフィックス命令が既に完了したかのように、後続の命令ＦＡＤＤを実行することができる。例えば、転送プレフィックス命令を繰り返すか、または、転送プレフィックス転送命令が叙述されていない場合には、アーキテクチャ転送先レジスタＺｄがこの時点で以前に転送元アーキテクチャレジスタＺｓ１にマッピングされていた物理レジスタにマッピングするように、単純にリネームテーブル４２を更新することによって、転送プレフィックス命令がアーキテクチャ的に完了していることを保証することができる。
【００６３】
いくつかのシステムは、図６に示す手法または図７に示す手法に従って永続的に動作することができる。しかしながら、処理回路が、停止イベントに直面している現在の条件に応じて、転送プレフィックス命令のアドレス♯Ａ１またはデータ処理命令のアドレス♯Ａ２のいずれかとして復帰アドレスを記録する柔軟性を提供することが有用であり得る。例えば、復帰アドレス値は、転送プレフィックス命令と後続の命令とが最初に遭遇したときに統合されたか否かに依存してもよい。命令統合回路５０がこれらの命令を統合した場合、転送がまだ完了しておらず、そのため、統合命令について発生している例外、割り込み、またはブレークポイントによって、復帰アドレスが、図６に示すように転送プレフィックス命令のアドレス♯Ａ１に設定され得る。これにより、停止イベントが解決された後に処理が再開されたときに、転送が効果的に実行されることを保証する（統合されていない転送命令を使用することによって明示的に、または統合命令の結果の生成において暗黙的に）。
【００６４】
他方、最初にペアの命令が非統合で実行された場合、停止イベントが検出される時点までに、転送プレフィックス命令の転送は既に完了している可能性があり、したがって、転送命令を不必要に繰り返さないようにするために、図７に示す手法がより適切であり得る。したがって、復帰アドレスを設定する際にアドレスＡ１とアドレスＡ２との間で選択することを可能にすることにより、転送がまだ実行されていない場合には図６に示すような転送プレフィックス命令を繰り返すことのみが必要となるため、処理性能を改善することができる。
【００６５】
要約すると、直後の命令との統合が可能であることを知らせる転送プレフィックス命令を提供することによって、プログラムまたはコンパイラは、命令対のレジスタが一致するか否かを決定するために命令統合回路を必要とすることなく、安全に統合することができることを処理回路に示唆することができ、統合のオーバーヘッドが大幅に削減される。プログラムまたはコンパイラが命令を正しく使用した場合、直後の命令は、転送先レジスタおよび第１の転送元レジスタの両方を識別する単一のレジスタ指定子を有する破壊的データ処理命令であると予測され、転送プレフィックス命令の転送先レジスタは、後続の命令の転送先レジスタと同じである。この場合、統合回路は、これらの命令を統合して、２つのオペランドレジスタおよび結果レジスタを別個に識別する建設的データ処理命令を形成することができる。
【００６６】
特に、建設的命令は、以下のように指定されたレジスタで形成することができる。建設的命令の結果レジスタは、転送プレフィックス命令の転送先レジスタまたは直後の命令の転送先レジスタのいずれかに対応することができ、建設的命令の少なくとも２つのオペランドレジスタは、転送プレフィックス命令の転送元レジスタおよび直後のデータ処理命令の転送元レジスタの１つに対応して設定することができる。このアプローチでは、プログラマまたはコンパイラが、直後の命令が転送プレフィックス命令と同じ転送先レジスタを指定する破壊的データ処理命令であることを保証することを条件として、統合命令は、２つの転送プレフィックスおよびデータ処理命令を別々に実行するのと同じ結果を有することになる。ベクトル述語が使用される場合、統合命令の述語は、転送プレフィックスおよび直後の命令（プログラマ／コンパイラが命令を正しく使用した場合、同じであるはずである）のいずれかの述語に等しく設定することができる。
【００６７】
転送プレフィックス命令に加えて、第１のレジスタから第２のレジスタへデータ値をコピーするように処理回路を制御することができる少なくとも１つの他のタイプの命令が存在してもよい。例えば、他の命令は、上述したＡＮＤ命令、ＯＲ命令、ＡＤＤ命令、または専用ＭＯＶ命令、または転送元オペランドの１つと等しい結果を与える任意の他の種類の命令であってもよい。したがって、典型的には、アーキテクチャ内に、レジスタ転送を既に達成することができる多くの命令が存在することになる。転送プレフィックス命令は、異なる命令符号化を用いて、そのような命令に加えて提供される。他の命令によって既に提供され得るレジスタ転送機能を提供するための専用の命令を提供することが有用であることは驚くべきことであると考えられ得る。しかしながら、これは、転送プレフィックス命令に対して異なる命令符号化を提供することによって、プログラマまたはコンパイラが、独立転送操作とは対照的に、統合建設的命令を形成するために、後続の破壊的命令に先行して転送することを意図するときを知らせることを可能にする。したがって、これは、統合に必要な様々な条件が満たされていることを処理回路がチェックする必要性を排除する。
【００６８】
転送プレフィックス命令は、加算などの特定のタイプのデータ処理命令に固有のものであってもよい。しかし、転送プレフィックス命令を、異なる処理動作に対応するデータ処理命令のクラスのいずれかと結合することは有益であり、その結果、いずれの特定の演算が直後の命令によって表されるかにかかわらず、一般に転送プレフィックスは破壊的命令と統合して、元の破壊的命令と同じ処理演算に対応する統合建設的命令を形成することができる。例えば、データ処理命令のクラスは、加算、減算、乗算、除算、乗加算、平方根、シフト、ＡＮＤ、ＯＲ、ＮＯＴ、ＮＡＮＤ、ＮＯＲ、ＸＯＲならびに浮動小数点演算およびインターリーブなどのような他のベクトル演算を含む様々な演算を含んでもよい。
【００６９】
転送プレフィックス命令を直後の命令と統合させるか否かの決定は、いくつかの実装では静的である可能性がある。したがって、転送プレフィックス命令が検出されたとき、いくつかの実施態様は常に、他の条件に関係なく、直後の命令とそれをマージすることができる。
【００７０】
しかし、他のシステムは、転送プレフィックス命令と直後の命令との間のレジスタ比較以外の少なくとも１つの基準に依存する命令を統合するか否かを動的に判定することができる。例えば、これらの他の基準は、直後の命令によってどのタイプの処理操作が実行されるか、転送プレフィックス命令および直後の命令が異なるキャッシュラインに保持されるか否か、およびそれらがアドレス空間の異なるページに対応するか否かを含んでもよい。
【００７１】
上記の例では、複数のデータ要素を含むオペランドを使用してベクトル処理をサポートするベクトル処理システムについて説明してきた。しかしながら、単一のデータ要素に対応するスカラデータ値を処理するスカラ処理システムに、同様の転送プレフィックス命令が導入されてもよい。この場合、述語値は提供されず、図５の異なる非アクティブレーン処理モードは提供されない。それ以外、スカラ転送プレフィックス命令は、上述のベクトル実施例と同じように、スカラデータ処理命令に先行することができる。
【００７２】
上述したように、ベクトルオペランドが処理されるとき、統合が可能なときを知らせるとともに、後続の演算の操作が、後続の命令の符号化を一切変更することなく修正されることを可能にするために、異なる非アクティブレーン処理モードに対応して異なる形式の転送プレフィックス命令を提供することができるため、転送プレフィックス命令は非常に有用であり得る。これは、異なる形式の叙述に対応するデータ処理命令の異なるバージョンを提供する必要がないため、命令セットアーキテクチャにおける符号化空間を節約する。
【００７３】
上記の実施形態は、転送プレフィックス命令と直後の命令との統合を論じている。命令対は、フェッチされた命令における単一の倍長命令として考えることもでき、これは、その後、別個の命令に分割するか、または、処理回路によって処理される単一の結合命令として転送することができる。これは、上述した統合手法と完全に同等である（命令統合回路によって実行される実際の動作は同じであり、唯一の違いは、元の命令を１つまたは２つの命令として見なすかの解釈の１つである）。したがって、いくつかの実施形態では、命令統合回路の命令を統合するか否かの決定は、実効的に、（倍長命令の２つの部分の間の任意のレジスタ比較とは無関係に）倍長命令を分割するか否かの決定であり得、特許請求の範囲はこのアプローチを包含する。
【００７４】
図８は、使用することができる仮想マシンの実施態様を示す。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実施態様を提供することも可能である。これらの仮想マシン実施態様は、仮想マシンプログラム５１０をサポートするホストオペレーティングシステム５２０を実行するホストプロセッサ５３０上で実行される。通常、大規模で強力なプロセッサは、妥当な速度で実行する仮想マシンの実装を可能にする必要があるが、そのようなアプローチは、互換性または再利用の理由のために別のプロセッサに対してネイティブなコードを実行したいという要望がある場合などの特定の状況において正当化され得る。仮想マシンプログラム５１０は、仮想マシンプログラム５１０によってモデル化されているデバイスである実際のハードウェアによって提供されるアプリケーションプログラムインターフェースと同じアプリケーションプログラム５００にアプリケーションプログラムインターフェースを提供する。したがって、上述したメモリアクセスの制御を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム５１０を使用してアプリケーションプログラム５００内から実行することができる。
【００７５】
本出願において、「〜ように構成されている」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、規定の動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置が機能を実行するようにプログラムされてもよい。「〜ように構成されている」は、規定の動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【００７６】
添付図面を参照して本発明の例示的な実施形態を詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲および精神から逸脱することなく、様々な変更および修正が当業者によって実施され得ることが理解されるべきである。
【図１】
2018534671.tif 000003
【図２】
2018534671.tif 000004
【図３】
2018534671.tif 000005
【図４】
2018534671.tif 000006
【図５】
2018534671.tif 000007
【図６】
2018534671.tif 000008
【図７】
2018534671.tif 000009
【図８】
2018534671.tif 000010
【国際調査報告】
2018534671.tif 000011
2018534671.tif 000012
2018534671.tif 000013