(57)【特許請求の範囲】
【請求項１】
処理ユニットが、複数の汎用レジスタ（ＧＰＲ）のうちの複数のソースＧＰＲのうちの第１のＧＰＲから前記複数のＧＰＲのうちの複数の宛先ＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、前記複数のソースＧＰＲのうちの第２のＧＰＲから前記複数の宛先ＧＰＲのうちの第４のＧＰＲに第２の値が移動されることと、前記複数のソースＧＰＲのうちの第５のＧＰＲから前記複数の宛先ＧＰＲのうちの第６のＧＰＲに第３の値が移動されることとを要求する単一の命令を受け取ることと、ここにおいて、前記単一の命令が、
前記宛先ＧＰＲのすべてを明確に識別しないギャザー命令であって、前記複数のソースＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先ＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または
前記ソースＧＰＲのすべてを明確に識別しないスキャッタ命令であって、前記ソースＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先ＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの１つであり、ここにおいて、前記単一の命令は、前記第１のＧＰＲから前記第３のＧＰＲに前記第１の値が移動されることと、前記第２のＧＰＲから前記第４のＧＰＲに前記第２の値が移動されることと、前記第５のＧＰＲから前記第６のＧＰＲに前記第３の値が移動されることとを要求する単一の割込み不可能な命令を備える、
前記単一の命令を受け取ったことに応答して、
前記処理ユニットの初期論理ユニットが、第１のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第１の値をコピーすることと、ここにおいて、前記複数のパイプラインレジスタが前記複数のＧＰＲとは異なる、
前記処理ユニットの前記初期論理ユニットが、前記第１のクロックサイクルの後にある第２のクロックサイクル中に、前記初期パイプラインレジスタに前記第２の値をコピーすることと、
前記処理ユニットの最終論理ユニットが、前記第２のクロックサイクルの後にある第３のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第３のＧＰＲに前記第１の値をコピーすることと、ここにおいて、前記第３のＧＰＲにコピーされる前記第１の値が、前記第１のＧＰＲからコピーされた前記第１の値と同じ値を表す、
前記処理ユニットの前記最終論理ユニットが、前記第２のクロックサイクルの後にある第４のクロックサイクル中に、前記最終パイプラインレジスタから前記第４のＧＰＲに前記第２の値をコピーすることと、ここにおいて、前記第４のＧＰＲにコピーされる前記第２の値が、前記第２のＧＰＲからコピーされた前記第２の値と同じ値を表す、
を備える方法。
【請求項２】
前記単一の命令が前記パイプラインレジスタのいずれをも個々に識別しない、請求項１に記載の方法。
【請求項３】
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のＧＰＲが命令によって個々にアクセス可能である、請求項１に記載の方法。
【請求項４】
前記処理ユニットが、前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタにアクセスするとき、前記複数のＧＰＲのうちの１つのＧＰＲにアクセスするときよりも少ない電力を消費する、請求項１に記載の方法。
【請求項５】
前記パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、請求項１に記載の方法。
【請求項６】
中間論理ユニットが、前記第１のクロックサイクルの後、および前記第３のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの１つの中間パイプラインレジスタに前記第１の値をコピーすることと、
前記中間論理ユニットが、前記第２のクロックサイクルの後、および前記第４のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第２の値をコピーすることと
をさらに備える、請求項１に記載の方法。
【請求項７】
前記処理ユニットが、１つの中央処理ユニット（ＣＰＵ）または１つのグラフィカル処理ユニット（ＧＰＵ）から構成される、請求項１に記載の方法。
【請求項８】
前記初期パイプラインレジスタに前記第１の値をコピーすることが、
前記第１のＧＰＲから前記初期パイプラインレジスタに前記第１の値をコピーすること、または
前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタから前記初期パイプラインレジスタに前記第１の値をコピーすること
のいずれかを備え、
前記初期パイプラインレジスタに前記第２の値をコピーすることが、
前記第２のＧＰＲから前記初期パイプラインレジスタに前記第２の値をコピーすること、または
前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタから前記初期パイプラインレジスタに前記第２の値をコピーすること
のいずれかを備える、
請求項１に記載の方法。
【請求項９】
複数の汎用レジスタ（ＧＰＲ）と、
複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、前記複数のパイプラインレジスタが前記複数のＧＰＲとは異なる、
複数の論理ユニットと、
前記複数のＧＰＲのうちの複数のソースＧＰＲのうちの第１のＧＰＲから前記複数のＧＰＲのうちの複数の宛先ＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、前記複数のソースＧＰＲのうちの第２のＧＰＲから前記複数の宛先ＧＰＲのうちの第４のＧＰＲに第２の値が移動されることと、前記複数のソースＧＰＲのうちの第５のＧＰＲから前記複数の宛先ＧＰＲのうちの第６のＧＰＲに第３の値が移動されることとを要求する単一の命令を受け取るように構成されたコントローラと、ここにおいて、前記単一の命令が、
前記宛先ＧＰＲのすべてを明確に識別しないギャザー命令であって、前記複数のソースＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先ＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または
前記ソースＧＰＲのすべてを明確に識別しないスキャッタ命令であって、前記ソースＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先ＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの１つであり、ここにおいて、前記単一の命令は、前記第１のＧＰＲから前記第３のＧＰＲに前記第１の値が移動されることと、前記第２のＧＰＲから前記第４のＧＰＲに前記第２の値が移動されることと、前記第５のＧＰＲから前記第６のＧＰＲに前記第３の値が移動されることとを要求する単一の割込み不可能な命令を備え、前記単一の命令を受け取ったことに応答して、前記コントローラが、
前記複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、前記複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第１の値をコピーさせることと、
前記初期論理ユニットに、前記第１のクロックサイクルの後にある第２のクロックサイクル中に、前記初期パイプラインレジスタに前記第２の値をコピーさせることと、
前記複数の論理ユニットのうちの最終論理ユニットに、前記第２のクロックサイクルの後にある第３のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第３のＧＰＲに前記第１の値をコピーさせることと、ここにおいて、前記第３のＧＰＲにコピーされる前記第１の値が、前記第１のＧＰＲからコピーされた前記第１の値と同じ値を表す、
前記最終論理ユニットに、前記第２のクロックサイクルの後にある第４のクロックサイクル中に、前記最終パイプラインレジスタから前記第４のＧＰＲに前記第２の値をコピーさせることと、ここにおいて、前記第４のＧＰＲにコピーされる前記第２の値が、前記第２のＧＰＲからコピーされた前記第２の値と同じ値を表す、
を行うように構成された、
を備える処理ユニット。
【請求項１０】
前記単一の命令が前記パイプラインレジスタのいずれをも個々に識別しない、請求項９に記載の処理ユニット。
【請求項１１】
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のＧＰＲが命令によって個々にアクセス可能である、請求項９に記載の処理ユニット。
【請求項１２】
前記処理ユニットが、前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタにアクセスするとき、前記複数のＧＰＲのうちの１つのＧＰＲにアクセスするときよりも少ない電力を消費する、請求項９に記載の処理ユニット。
【請求項１３】
前記パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、請求項９に記載の処理ユニット。
【請求項１４】
前記１つまたは複数の命令を受け取ったことに応答して、前記コントローラが、
前記複数の論理ユニットのうちの１つの中間論理ユニットに、前記第１のクロックサイクルの後、および前記第３のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの１つの中間パイプラインレジスタに前記第１の値をコピーさせることと、
前記中間論理ユニットに、前記第２のクロックサイクルの後、および前記第４のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第２の値をコピーさせることと
を行うようにさらに構成された、請求項９に記載の処理ユニット。
【請求項１５】
前記処理ユニットが、１つの中央処理ユニット（ＣＰＵ）または１つのグラフィカル処理ユニット（ＧＰＵ）から構成される、請求項９に記載の処理ユニット。
【請求項１６】
前記初期論理ユニットが、
前記第１のＧＰＲから前記初期パイプラインレジスタに前記第１の値をコピーすること、または
前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタから前記初期パイプラインレジスタに前記第１の値をコピーすること
のいずれかによって前記初期パイプラインレジスタに前記第１の値をコピーするように構成され、
前記初期論理ユニットが、
前記第２のＧＰＲから前記初期パイプラインレジスタに前記第２の値をコピーすること、または
前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタから前記初期パイプラインレジスタに前記第２の値をコピーすること
のいずれかによって前記初期パイプラインレジスタに前記第２の値をコピーするように構成された、
請求項９に記載の処理ユニット。
【請求項１７】
複数の汎用レジスタ（ＧＰＲ）のうちの複数のソースＧＰＲのうちの第１のＧＰＲから前記複数のＧＰＲのうちの複数の宛先ＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、前記複数のソースＧＰＲのうちの第２のＧＰＲから前記複数の宛先ＧＰＲのうちの第４のＧＰＲに第２の値が移動されることと、前記複数のソースＧＰＲのうちの第５のＧＰＲから前記複数の宛先ＧＰＲのうちの第６のＧＰＲに第３の値が移動されることとを要求する、処理ユニットに対する単一の命令を記憶する非一時的コンピュータ可読記憶媒体であって、ここにおいて、前記単一の命令が、前記宛先ＧＰＲのすべてを明確に識別しないギャザー命令であって、前記複数のソースＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先ＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または前記ソースＧＰＲのすべてを明確に識別しないスキャッタ命令であって、前記ソースＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先ＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの１つであり、ここにおいて、前記単一の命令は、前記第１のＧＰＲから前記第３のＧＰＲに前記第１の値が移動されることと、前記第２のＧＰＲから前記第４のＧＰＲに前記第２の値が移動されることと、前記第５のＧＰＲから前記第６のＧＰＲに前記第３の値が移動されることとを要求する単一の割込み不可能な命令を備え、前記単一の命令が、実行されたとき、
複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第１の値をコピーさせることと、
前記初期論理ユニットに、前記第１のクロックサイクルの後にある第２のクロックサイクル中に、前記初期パイプラインレジスタに前記第２の値をコピーさせることと、
前記複数の論理ユニットのうちの最終論理ユニットに、前記第２のクロックサイクルの後にある第３のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第３のＧＰＲに前記第１の値をコピーさせることと、ここにおいて、前記第３のＧＰＲにコピーされる前記第１の値が、前記第１のＧＰＲからコピーされた前記第１の値と同じ値を表す、
前記最終論理ユニットに、前記第２のクロックサイクルの後にある第４のクロックサイクル中に、前記最終パイプラインレジスタから前記第４のＧＰＲに前記第２の値をコピーさせることと、ここにおいて、前記第４のＧＰＲにコピーされる前記第２の値が、前記第２のＧＰＲからコピーされた前記第２の値と同じ値を表す、
を前記処理ユニットに行わせる、非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記単一の命令が前記パイプラインレジスタのいずれをも個々に識別しない、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のＧＰＲが命令によって個々にアクセス可能である、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記処理ユニットが、前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタにアクセスするとき、前記複数のＧＰＲのうちの１つのＧＰＲにアクセスするときよりも少ない電力を消費する、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２１】
実行されたとき、前記単一の命令が、
前記複数の論理ユニットのうちの１つの中間論理ユニットに、前記第１のクロックサイクルの後、および前記第３のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの１つの中間パイプラインレジスタに前記第１の値をコピーさせることと、
前記中間論理ユニットに、前記第２のクロックサイクルの後、および前記第４のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第２の値をコピーさせることと
を前記処理ユニットに行わせる、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２２】
コンパイラモジュールがコードを受け取ることと、
前記コンパイラモジュールが、前記コードによって示された複数の動作が単一のコンボ移動命令に組み合わせられ得ると決定することに応答して、前記単一のコンボ移動命令を生成することと
を備える方法であって、
ここにおいて、処理ユニットによって実行されたとき、前記コンボ移動命令が、複数の汎用レジスタ（ＧＰＲ）のうちの複数のソースＧＰＲから前記複数のＧＰＲのうちの複数の宛先ＧＰＲに複数の値を移動させるとき、前記処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、前記単一のコンボ移動命令が、
前記宛先ＧＰＲのすべてを明確に識別しないギャザー命令であって、前記複数のソースＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先ＧＰＲが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または
前記ソースＧＰＲのすべてを明確に識別しないスキャッタ命令であって、前記ソースＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先ＧＰＲが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの１つであり、ここにおいて、前記複数のソースＧＰＲのうちの少なくとも１つのＧＰＲが前記複数の宛先ＧＰＲ中に含まれ、ここにおいて、前記複数のパイプラインレジスタが前記複数のＧＰＲとは異なり、ここにおいて、前記単一の命令は、第１のＧＰＲから第３のＧＰＲに第１の値が移動されることと、第２のＧＰＲから第４のＧＰＲに第２の値が移動されることと、第５のＧＰＲから第６のＧＰＲに第３の値が移動されることとを要求する単一の割込み不可能な命令を備える、方法。
【請求項２３】
前記コードによって示された前記複数の動作が前記単一のコンボモード命令に組み合わせられ得ると決定することは、
前記コードによって示された前記複数の動作が、前記複数のＧＰＲの間で複数の値を移動することを含むと決定することに応答して、前記コードによって示された前記複数の動作が前記単一のコンボモード命令に組み合わせられ得ると決定すること
を備える、請求項２２に記載の方法。
【請求項２４】
前記コードが複数の命令を備え、ここにおいて、前記方法が、
前記単一のコンボ移動命令に組み合わせられ得る前記複数の動作に対応する前記命令を、前記生成された単一のコンボ移動命令と置き換えること
をさらに備える、請求項２２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、処理ユニットに関し、より詳細には、処理ユニットの汎用レジスタ間で複数の値を移動することに関する。
【背景技術】
【０００２】
[0002]グラフィックス処理ユニット（ＧＰＵ：graphics processing unit）および中央処理ユニット（ＣＰＵ：central processing unit）など、処理ユニットは、コンピューティングデバイス内の多種多様な動作を実施するために使用され得る。たとえば、ＧＰＵは、コンピュータグラフィックスを操作し、ディスプレイ上に表示するために利用される、グラフィックスレンダリングデバイスであり得る。ＧＰＵは、様々な複雑なアルゴリズムのために、一般的な汎用中央処理ユニット（ＣＰＵ）よりも効率的な処理を可能にし得る高度並列構造で構築される。処理ユニットは、一般に、データを記憶するために使用される複数の汎用レジスタ（ＧＰＲ：general purpose register）を含む。動作を実施するとき、処理ユニットは、一般に、処理ユニットにＧＰＲの間で値を移動させる命令を実行する。
【発明の概要】
【０００３】
[0003]概して、本開示では、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニットについて説明する。処理ユニットは、複数の命令を含み得る命令セットアーキテクチャ（ＩＳＡ：instruction set architecture）に従って動作するように構成され得、各命令は、処理ユニットによって実行され得る特定の動作を指定する。一例として、ＩＳＡ中に含まれる移動命令は、ソースＧＰＲから宛先ＧＰＲに値が移動されることを指定し得る。
【０００４】
[0004]一例では、方法は、処理ユニットが、複数のＧＰＲのうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取ることを含む。この例では、本方法はまた、１つまたは複数の命令を受け取ったことに応答して、処理ユニットの初期論理ユニットが、第１のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーすることと、ここにおいて、複数のパイプラインレジスタが複数のＧＰＲとは異なる、処理ユニットの初期論理ユニットが、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーすることと、処理ユニットの最終論理ユニットが、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーすることと、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、処理ユニットの最終論理ユニットが、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーすることと、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を含む。
【０００５】
[0005]別の例では、処理ユニットは、複数のＧＰＲと、複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、複数のパイプラインレジスタが複数のＧＰＲとは異なる、複数の論理ユニットと、コントローラとを含む。この例では、コントロールは、複数のＧＰＲのうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取るように構成される。この例では、１つまたは複数の命令を受け取ったことに応答して、コントローラは、複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、複数のパイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーさせることと、初期論理ユニットに、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーさせることと、複数の論理ユニットうちの最終論理ユニットに、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーさせることと、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、最終論理ユニットに、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーさせることと、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を行うように構成される。
【０００６】
[0006]別の例では、非一時的コンピュータ可読記憶媒体は、複数のＧＰＲのうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する、処理ユニットに対する１つまたは複数の命令を記憶する。この例では、実行されたとき、１つまたは複数の命令は、複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーさせることと、初期論理ユニットに、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーさせることと、複数の論理ユニットうちの最終論理ユニットに、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーさせることと、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、最終論理ユニットに、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーさせることと、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を処理ユニットに行わせる。
【０００７】
[0007]別の例では、方法は、コンパイラモジュールがコードを受け取ることと、コンパイラモジュールが、コードによって示された複数の動作がコンボ移動（combo-move）命令に組み合わせられ得ると決定することに応答して、コンボ移動命令を生成することとを含む。この例では、処理ユニットによって実行されたとき、生成されたコンボ移動命令は、複数のＧＰＲのうちの複数のソースＧＰＲから複数のＧＰＲのうちの複数の宛先ＧＰＲに複数の値を移動するとき、処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、複数のパイプラインレジスタは複数のＧＰＲとは異なる。
【０００８】
[0008]１つまたは複数の例の詳細が添付の図面および以下の説明に記載されている。本発明の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【０００９】
【図１】[0009]本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、汎用レジスタ（ＧＰＲ）間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニットを含む集積回路を示すブロック図。
【図２】[0010]本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニットを含む集積回路を示すブロック図。
【図３Ａ】[0011]本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図。
【図３Ｂ】本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図。
【図３Ｃ】本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図。
【図４】[0012]本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニットの例示的な動作を示すフローチャート。
【図５】[0013]本開示の１つまたは複数の技法による、コンボ移動命令を出力する例示的なコンパイラモジュールを示すブロック図。
【図６】[0014]本開示の１つまたは複数の技法による、コンボ移動命令を出力するコンパイラモジュールの例示的な動作を示すフローチャート。
【図７】[0015]本開示の１つまたは複数の技法による、図１の集積回路を含む例示的なデバイス１００を示すブロック図。
【発明を実施するための形態】
【００１０】
[0016]概して、本開示では、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニットについて説明する。処理ユニットは、複数の命令を含み得る命令セットアーキテクチャ（ＩＳＡ）に従って動作するように構成され得、各命令は、処理ユニットによって実行され得る特定の動作を指定する。一例として、ＩＳＡ中に含まれる移動命令は、ソースＧＰＲから宛先ＧＰＲに値が移動されることを指定し得る。いくつかの例では、レジスタ間で複数の値を移動するときなど、移動ごとに別個の命令を実行することは非効率的であり得る。
【００１１】
[0017]本開示の１つまたは複数の技法によれば、ＩＳＡ中に含まれるコンボ移動命令は、複数のソースＧＰＲから複数の宛先ＧＰＲに複数の値が移動されることを指定し得る。いくつかの例では、特定のＧＰＲは、複数のソースＧＰＲと複数の宛先ＧＰＲの両方中に含まれ得る。たとえば、スワップ（swap）命令など、コンボ移動命令は、第１のＧＰＲに記憶された第１の値が第２のＧＰＲに移動されることと、第２のＧＰＲに記憶された第２の値が第１のＧＰＲに移動されることとを指定し得る（たとえば、第１ＧＰＲに記憶された値と第２のＧＰＲに記憶された値とをスワップする）。いくつかの例では、コンボ移動命令を実行するために、処理ユニットは、実行中に値のうちの１つを一時的に記憶するために第３のＧＰＲを利用し得る。たとえば、処理ユニットは、第１のＧＰＲから第３のＧＰＲに第１の値をコピーし、第２のＧＰＲから第１のＧＰＲに第２の値をコピーし、第３のＧＰＲから第２のＧＰＲに第１の値をコピーし得る。
【００１２】
[0018]いくつかの例では、処理ユニットは、１つまたは複数のパイプラインを含み得る。パイプラインの各々は、少なくとも、初期論理ユニットと初期パイプラインレジスタとを含み得る初期段と、最終論理ユニットを含む最終段とを含む、複数の段を含み得る。したがって、いくつかの例では、Ｎ段パイプラインはＮ個の論理ユニットとＮ−１個のパイプラインレジスタとを含み得、第Ｎ−１の段中に含まれるパイプラインレジスタは最終パイプラインレジスタと呼ばれることがある。
【００１３】
[0019]動作中、Ｎ段パイプラインの初期論理ユニットは、第１のクロックサイクル中に処理ユニットの別の構成要素（たとえば、ＧＰＲ）から値を受け取り得る。後続のクロックサイクル中に、値はパイプラインの後続の要素を通過し得、第Ｎのクロックサイクル中に、値は、最終段からコピーするために利用可能になり得る。たとえば、第１のクロックサイクル中に、初期論理ユニットは、値を受け取り、値に対して要求された論理演算を実施し、値を初期パイプラインレジスタに与え得、その結果、第１のクロックサイクルの終わりに、初期パイプラインレジスタは値を記憶する。次いで、第２のクロックサイクル中に、第２の論理ユニットは、初期パイプラインレジスタから値を受け取り、値に対して要求された論理演算を実施し、値を第２のパイプラインレジスタに与え得、その結果、第２のクロックサイクルの終わりに、第２のパイプラインレジスタは値を記憶する。パイプラインが３段パイプライン（すなわち、Ｎ＝３）である場合、第３のクロックサイクル中に、第３の論理ユニットは、第２のパイプラインレジスタから値を受け取り、値に対して要求された論理演算を実施し、値を処理ユニットの１つまたは複数の他の構成要素（たとえば、ＧＰＲ）に与え得、その結果、第３のクロックサイクルの終わりに、１つまたは複数の他の構成要素は値を記憶する。
【００１４】
[0020]いくつかの例では、初期論理ユニットは、第１の値がパイプラインを出る前に（たとえば、最終論理ユニットが第１の値をＧＰＲにコピーする前に）、第２の値を受け取り得る。たとえば、第２のクロックサイクル中に、初期論理ユニットは、第２の値を受け取り、第２の値に対して要求された論理演算を実施し、第２の値を初期パイプラインレジスタに与え得、その結果、第２のクロックサイクルの終わりに、初期パイプラインレジスタは第２の値を記憶する。さらに、値が第１の値である上記の例で説明したように、第２のクロックサイクルの終わりに、第２のパイプラインレジスタは第１の値を記憶し得る。次いで、第３のクロックサイクル中に、第２の論理ユニットは、第１のパイプラインレジスタから第２の値を受け取り、第２の値に対して要求された論理演算を実施し、第２の値を第２のパイプラインレジスタに与え得、その結果、第２のクロックサイクルの終わりに、第２のパイプラインレジスタは第２の値を記憶する。このようにして、単一のクロックサイクル中に、パイプラインレジスタから第１の値がコピーされ得、パイプラインレジスタに第２の値がコピーされ得る。
【００１５】
[0021]一時的ＧＰＲの利用は、処理ユニットが命令の実行を完了することを可能にするが、いくつかの例では、追加のＧＰＲを使用することが望ましくないことがある。本開示の１つまたは複数の技法によれば、処理ユニットは、一時的ストレージのために追加のＧＰＲを使用することとは対照的に、処理ユニットのパイプラインレジスタを一時的ストレージとして利用し得る。たとえば、スワップ命令を実行するとき、処理ユニットは、第１のサイクル中に第１のＧＰＲからパイプラインの初期パイプラインレジスタに第１の値をコピーし、第２のサイクル中に第２のＧＰＲからパイプラインの初期レジスタに第２の値をコピーし、第３のサイクル中にパイプラインの最終パイプラインレジスタから第２のＧＰＲに第１の値をコピーし、第４のサイクル中に最終パイプラインレジスタから第１のＧＰＲに第２の値をコピーし得る。言い換えれば、処理ユニットは、パイプラインおよびそれの構成要素であるパイプラインレジスタを先入れ先出し（ＦＩＦＯ：first-in-first-out）キューとして使用し得、そこにおいて、パイプラインレジスタの各々中の値は、クロックサイクル中でそれぞれの次のパイプラインレジスタにコピーする。このようにして、処理ユニットは、一時的ストレージのために追加のＧＰＲを使用することなしに、２つのＧＰＲの値をスワップし得る。
【００１６】
[0022]以下でより詳細に説明するように、ＧＰＲとパイプラインレジスタとは異なり、パイプラインレジスタにアクセスすることは、ＧＰＲにアクセスすることよりも少ない電力を必要とし得る。したがって、一時的ストレージのためにＧＰＲではなくパイプラインレジスタを使用することによって、本技法は、電力消費を低減し、ならびに、ＧＰＲを不必要に利用不可能にすること（たとえば、さもなければ一時的ストレージのために使用されたであろうＧＰＲ）を回避する。
【００１７】
[0023]図１は、本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニット２を含む集積回路１（「ＩＣ１」）を示すブロック図である。いくつかの例では、ＩＣ１は、モバイルコンピューティングデバイス（たとえば、「スマートフォン」）、コンピューティングデバイス（たとえば、デスクトップ、ラップトップ、サーバなど）、コンピューティングデバイスモジュール（たとえば、グラフィックスカード）、携帯情報端末（ＰＤＡ）、ハンドヘルドビデオゲームデバイス、ゲームコンソール、および／またはテレビジョンデバイスなどのデバイス中に含まれ得る。いくつかの例では、ＩＣ１は、コンピュータグラフィックスを操作し、ディスプレイ上に表示するように構成されたグラフィックス処理ユニット（ＧＰＵ）、および／または一般的な計算動作を実施するように構成された中央処理ユニット（ＣＰＵ）を含み得る。たとえば、処理ユニット２はＧＰＵのシェーダプロセッサであり得る。図１に示されているように、ＩＣ１は、汎用レジスタ（ＧＰＲ）４Ａ〜４Ｎ（まとめて「ＧＰＲ４」）と、パイプライン６と、コントローラ１２と、クロック１４とを含む処理ユニット２を含み得る。
【００１８】
[0024]いくつかの例では、処理ユニット２は、処理ユニット２が使用するデータを記憶するように構成され得るＧＰＲ４を含み得る。ＧＰＲ４は汎用レジスタであるので、ＧＰＲ４は多種多様な情報を記憶し得る。ＧＰＲが記憶し得る情報の一例は、限定はしないが、整数値、浮動小数点値、文字、およびビットアレイなどのデータである。たとえば、ＧＰＲ４のうちの１つまたは複数は、グラフィカルベクトルなど、ベクトル成分を記憶し得る。したがって、いくつかの例では、ＧＰＲ４のうちの１つまたは複数はベクトルレジスタと見なされ得る。別の例として、ＧＰＲ４のうちの１つまたは複数はアドレスを記憶し得る。
【００１９】
[0025]いくつかの例では、ＧＰＲ４のすべては同じデータ容量を有し得る（すなわち、ＧＰＲ４はすべて同じサイズであり得る）。たとえば、ＧＰＲ４の各々は、８ビット、１６ビット、３２ビット、または６４ビットのデータ容量を有し得る。いくつかの例では、ＧＰＲ４は異なるサイズであり得る。たとえば、ＧＰＲ４のうちの第１のＧＰＲは３２ビットのデータ容量を有し得、ＧＰＲ４のうちの第２のＧＰＲは６４ビットのデータ容量を有し得る。
【００２０】
[0026]いくつかの例では、処理ユニット２は、データを処理するように構成され得るパイプライン６を含み得る。パイプライン６は、論理ユニット１０Ａ〜１０Ｎ（まとめて「論理ユニット１０」）を含む多段計算パイプラインであり得、そこにおいて、論理ユニット１０の各論理ユニットは個別の段を表す。パイプライン６は、初期段（すなわち、論理ユニット１０Ａ）と最終段（すなわち、論理ユニット１０Ｎ）とを含み得る。いくつかの例では、パイプライン６は、１つまたは複数の中間段（すなわち、論理ユニット１０Ｂ〜論理ユニット１０Ｎ−１）をも含み得る。段のうちの１つまたは複数（たとえば、論理ユニット１０のうちの１つまたは複数）によって決定された値を保持するために、パイプライン６は、論理ユニット１０のうちの１つまたは複数の後にパイプラインレジスタ８のうちの１つを含み得る。たとえば、パイプライン６は、論理ユニット１０Ａの後にパイプラインレジスタ８Ａを含み得る。いくつかの例では、パイプラインレジスタ６は、最終段（すなわち、論理ユニット１０Ｎ）の後にパイプラインレジスタを含まないことがある。したがって、いくつかの例では、パイプライン６がＮ個の段を含む場合、パイプライン６はＮ個の論理ユニット１０とＮ−１個のパイプラインレジスタ８とを含み得、パイプラインレジスタ８Ｎ−１は最終パイプラインレジスタと呼ばれることがある。
【００２１】
[0027]上記で説明したように、パイプライン６は、値を処理するように構成され得る１つまたは複数の論理ユニット１０を含み得る。たとえば、論理ユニット１０の各々は、データを受け取り、１つまたは複数の演算（たとえば、２つの値を加算することなどの１つまたは複数の算術演算、２つの値の論理積をとることなどの１つまたは複数の論理演算、および／または１つまたは複数の他の数学演算）を実施し、結果を出力するように構成され得る。いくつかの例では、論理ユニット１０のうちの１つまたは複数はプログラマブルであり得る。一例として、論理ユニット１０のうちの１つまたは複数は、２つの値を加算するようにプログラムされ得る。別の例として、論理ユニット１０のうちの１つまたは複数は、変更なしに値を渡すようにプログラムされ得る。別の例として、論理ユニット１０のうちの１つまたは複数は、値を渡すと同時に値のデータ型を変更するようにプログラムされ得る。たとえば、本開示で説明する技法は、一時的ストレージのための汎用レジスタの使用を回避するために、一時的ストレージのためにパイプラインレジスタ８を利用する。したがって、パイプラインレジスタ８が一時的ストレージのために使用される場合など、いくつかの例では、論理ユニット１０は、変更なしにまたはデータ型の変更とともに値を渡すように構成され得る。いくつかの例では、コントローラ１２は、論理ユニット１０のうちの１つまたは複数をプログラムし得る。いくつかの例では、論理ユニット１０のより多くのうちの１つは算術論理ユニット（ＡＬＵ：arithmetic logic unit）を含み得る。
【００２２】
[0028]パイプライン６は、クロック１４から受け取られたクロック信号に応答して動作するように構成され得る。たとえば、クロック１４から受け取られたクロック信号のエッジ（たとえば、立上りエッジまたは立下りエッジ）を受け取ったことに応答して、パイプライン６は次のサイクルに進み得る。したがって、いくつかの例では、パイプライン６のサイクルはクロックサイクルと呼ばれることがある。パイプライン６の各サイクル中で、論理ユニット１０のうちの論理ユニットは、入力レジスタから入力値を受け取り、出力値を決定するために入力値を処理し、出力値を出力レジスタに与え得る。言い換えれば、各サイクル中で、値はパイプライン６を通って進み得る。一例として、サイクル中に、論理ユニット１０Ｂは、パイプラインレジスタ８Ａから第１の入力値を受け取り、第１の出力値を決定するために第１の入力値を処理し、第１の出力値をパイプラインレジスタ８Ｂに与え得る。また同じサイクル中に、論理ユニット１０Ａは、ＧＰＲ４のうちのＧＰＲから第２の入力値を受け取り、第２の出力値を決定するために第２の入力値を処理し、第２の出力値をパイプラインレジスタ８Ａに与え得る。したがって、単一のサイクル中に、パイプラインレジスタ８Ａは、論理ユニット１０Ｂに第１の入力値を与えることと、論理ユニット１０Ａから第２の出力値を受け取ることの両方を行い得る。また別の例として、サイクル中に、論理ユニット１０Ｎは、パイプラインレジスタ８Ｎから入力値を受け取り、出力値を決定するために入力値を処理し、出力値をＧＰＲ４のうちのＧＰＲに与え得る。
【００２３】
[0029]パイプライン６が多段計算パイプラインである場合など、いくつかの例では、パイプライン６の始端に（すなわち、論理１０Ａに）値が与えられる最初のサイクルから、パイプライン６の終端において（すなわち、論理１０Ｎから）得られた値が利用可能になる最後のサイクルまでの間にいくつかのサイクルがあり得る。いくつかの例では、このいくつかのサイクルはパイプライン６のレイテンシと呼ばれることがある。いくつかの例では、パイプライン６のレイテンシは、パイプライン６中に含まれる段の数に等しいことがある。たとえば、パイプライン６が４つの段を含む場合、パイプライン６は４のレイテンシを有し得る。
【００２４】
[0030]また上記で説明したように、パイプライン６は、各々が値を記憶するように構成され得る１つまたは複数のパイプラインレジスタ８を含み得る。たとえば、パイプラインレジスタ８のうちのパイプラインレジスタは、サイクル中に論理ユニット１０のうちの論理ユニットによって決定された出力値を記憶し、次のサイクル中に論理ユニット１０のうちの別の論理ユニットにその出力値を与えるように構成され得る。さらに、パイプラインレジスタ８の各々は、コントローラ１２によって実行される命令など、ソフトウェアによって個々にアクセス可能および／またはアドレス指定可能でないことがある。いくつかの例では、処理ユニット２は、パイプラインレジスタ８のうちのパイプラインレジスタにアクセスするとき、ＧＰＲ４のうちのＧＰＲにアクセスするときよりも少ない電力量を消費し得る。たとえば、処理ユニット２は、パイプラインレジスタにアクセスするとき、ＧＰＲにアクセスするときと比較して半分の電力を消費し得る。いくつかの例では、パイプラインレジスタ８の各々は、ＧＰＲ４のうちのＧＰＲのデータ容量よりも大きいかまたはそれに等しいデータ容量を有し得る。
【００２５】
[0031]上記で説明したように、パイプラインレジスタ８は、ソフトウェアによって個々にアクセス可能および／またはアドレス指定可能でないことがある。たとえば、命令は、任意のパイプラインレジスタによって記憶された値を、別の任意のパイプラインレジスタまたは任意のＧＰＲに移動することができない。パイプラインレジスタ６のこの特性は、各々がソフトウェアによって個々にアクセス可能および／またはアドレス指定可能であるＧＰＲ４とまったく対照的である。したがって、データは、パイプラインの始端（すなわち、論理１０Ａ）においてのみパイプライン６に挿入され得、パイプラインの終端（すなわち、論理１０Ｎ）においてのみパイプライン６からアクセス（たとえば、ＧＰＲにコピー）され得、中間ではアクセスされないことがある（たとえば、パイプラインレジスタ８Ａ〜８Ｎ中のデータは、それぞれの後続の論理ユニットおよび／または初期論理ユニット以外の構成要素によってアクセスされ得ない）。
【００２６】
[0032]処理ユニット２は、処理ユニット２の１つまたは複数の構成要素の動作を制御し得るコントローラ１２を含み得る。たとえば、コントローラ１２は、命令を受け取ったことに応答して、ＧＰＲ４およびパイプライン６の動作を制御し得る。コントローラ１２は、処理ユニット２のための特定のコントローラであるか、またはデバイス１の全体的な動作を制御するより一般的なコントローラであり得る。いくつかの例では、コントローラ１２は命令デコーダを含み得る。
【００２７】
[0033]図２は、本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニット２Ａを含む集積回路１（「ＩＣ１」）を示すブロック図である。処理ユニット２Ａは、図１の処理ユニット２と同様であり得る。たとえば、処理ユニット２Ａは、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用し得る。図２に示されているように、処理ユニット２Ａは、汎用レジスタ（ＧＰＲ）４Ａ〜４Ｎ（まとめて「ＧＰＲ４」）と、パイプライン６Ａと、コントローラ１２と、クロック１４とを含み得る。ＧＰＲ４、コントローラ１２、およびクロック１４については、図１を参照しながら上記で説明したので、図２に関してＧＰＲ４、コントローラ１２、およびクロック１４についてのさらなる説明は行わない。
【００２８】
[0034]いくつかの例では、処理ユニット２Ａは、データを処理するように構成され得るパイプライン６Ａを含み得る。パイプライン６Ａは、図１のパイプライン６と同様であり得る。たとえば、パイプライン６Ａは、論理ユニット１０とパイプラインレジスタ８とを含む多段パイプラインであり得る。図２の例に示されているように、パイプライン６Ａは、バイパスチャネル９Ａ〜９Ｎ−１（まとめて「バイパスチャネル９」）を含み得、バイパスチャネル９の各々は、パイプラインレジスタ８のそれぞれのパイプラインレジスタから初期論理ユニット１０Ａへの値のコピーを可能にするように構成され得る。たとえば、論理ユニット１０Ａは、パイプラインレジスタ８Ｂからパイプラインレジスタ８Ａに値をコピーするためにバイパスチャネル９Ｂを利用し得る。
【００２９】
[0035]図３Ａ〜図３Ｃは、本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図である。図３Ａ〜図３Ｃのデータフローは、図１の処理ユニット２または図２の処理ユニット２Ａなど、処理ユニット内のデータフローを表し得る。説明の目的で、図３Ａ〜図３Ｃのデータフローについて図１の処理ユニット２のコンテキスト内で説明するが、処理ユニット２のそれとは異なる構成を有する処理ユニットが図３Ａ〜図３Ｃのデータフローと同様のデータフローを有し得る。
【００３０】
[0036]図３Ａ〜図３Ｃの各々は、特定のコンボ移動命令の実行中の処理ユニット内の例示的なデータフローを示しており、データブロックの各々が、各時間サイクル中に各レジスタによってどんな値が記憶されるかを識別するように、複数の時間サイクル（たとえば、ｔ0、ｔ1など）を示す水平軸と、複数のＧＰＲ４と複数のパイプラインレジスタ８とを示す垂直軸とを含む。図３Ａは、スウィズル（swizzle）命令の実行中の処理ユニット内の例示的なデータフローを示し、図３Ｂは、ギャザー（gather）命令の実行中の処理ユニット内の例示的なデータフローを示し、図３Ｃは、スキャッタ（scatter）命令の実行中の処理ユニット内の例示的なデータフローを示している。
【００３１】
[0037]本開示の１つまたは複数の技法によれば、コントローラ１２は、汎用レジスタ（ＧＰＲ）間で値を移動するとき、パイプラインレジスタを一時的ストレージとして使用することによって、コンボ移動命令を含む命令セットアーキテクチャ（ＩＳＡ）に従って処理ユニット２の動作を制御するように構成され得る。コントローラ１２によって実行可能なＩＳＡ中に含まれ得るいくつかの例示的なコンボ移動命令は、限定はしないが、スウィズル命令と、スワップ命令と、ギャザー命令と、スキャッタ命令とを含む。コンボ移動命令を使用することによって、コントローラ１２は、移動動作ごとに別個の命令を実行することとは対照的に、少なくともデータロケーションに関して、より少数の命令サイクル中で同じ最終結果を達成し、したがって、より高い性能を達成することが可能であり得る。いくつかの例では、コンボ移動命令のうちの１つまたは複数は割込み不可能であり得、これは、コントローラ１２が、別の命令を実行する前に、割込み不可能な命令の実行を完了しなければならないことを意味する。
【００３２】
[0038]コントローラ１２は、複数の任意のソースＧＰＲから複数の任意の宛先ＧＰＲに複数の値を移動するようにコントローラ１２に命令するスウィズル命令を受け取り得る。たとえば、コントローラ１２は、以下の命令（１）による２値スウィズル命令を受け取り得、ここで、ｄｓｔ０はＧＰＲ４のうちの第１の宛先ＧＰＲを示し、ｄｓｔ１はＧＰＲ４のうちの第２の宛先ＧＰＲを示し、ｓｒｃ０はＧＰＲ４のうちの第１のソースＧＰＲを示し、ｓｒｃ１はＧＰＲ４のうちの第２のソースＧＰＲを示す。
【００３３】
【数１】
0006301501.tif 000002
【００３４】
[0039]コントローラ１２がｎ値スウィズル命令を実行することから生じる挙動は、以下のように表され得る。
【００３５】
【数２】
0006301501.tif 000003
【００３６】
[0040]いくつかの例では、コントローラ１２は、２つの命令サイクル中で２値スウィズル命令を実行し得る。いくつかの例では、命令は、ソースが命令自体によって上書きされた場合、古いソースを使用し得る。
【００３７】
[0041]図３Ａは、第１のＧＰＲが第２のＧＰＲと値をスワップする、スウィズル命令の一種であるスワップコンボ移動命令の実行中の処理ユニットを通る例示的なデータフローを示している。たとえば、図３Ａによって示されたデータフローは、スウィズル命令ｓｗｚ４Ｂ、４Ａ、４Ａ、４Ｂの実行中の処理ユニット２内のデータフローであり得る。以下の例では、パイプライン６は、５つの論理ユニット（すなわち、論理ユニット１０Ａ〜１０Ｅ）間に点在する４つのパイプラインレジスタ（すなわち、パイプラインレジスタ８Ａ〜８Ｄ）を含む５段パイプラインであり得る。
【００３８】
[0042]図３Ａに示されているように、時間サイクルｔ0中に、ＧＰＲ４Ａは値ＶAを記憶し得、ＧＰＲ４Ｂは値ＶBを記憶し得る。また時間サイクルｔ0中に、コントローラ１２は、ＶAが初期パイプラインレジスタ８Ａにコピーされるようにし得る。一例として、コントローラ１２は、論理１０Ａに、ＧＰＲ４ＡからＶAを受け取らせ、ＶAをパイプラインレジスタ８Ａに渡させ得る。ＶAが、時間サイクルｔ-1（たとえば、時間サイクルｔ0の直前の時間サイクル）の終わりにパイプラインレジスタ８Ｂによって記憶された場合など、別の例として、コントローラ１２は、論理１０Ａに、バイパスチャネル（すなわち、図２のバイパスチャネル９Ｂ）を介してパイプラインレジスタ８ＢからＶAを受け取らせ、ＶAをパイプラインレジスタ８Ａに渡させ得る。
【００３９】
[0043]クロック１４から信号を受け取ると、処理ユニット２は時間サイクルｔ1に進み得る。時間サイクルｔ1中に、論理１０Ｂは、パイプラインレジスタ８ＡからＶAを受け取り、ＶAをパイプラインレジスタ８Ｂに渡し得る。言い換えれば、時間サイクルｔ1中に、論理１０ＢはＶAをパイプラインレジスタ８Ｂにコピーし得る。また時間サイクルｔ1中に、コントローラ１２は、ＶBが初期パイプラインレジスタ８Ａにコピーされるようにし得る。一例として、コントローラ１２は、論理１０Ａに、ＧＰＲ４ＢからＶBを受け取らせ、ＶBをパイプラインレジスタ８Ａに渡させ得る。
【００４０】
[0044]クロック１４から信号を受け取ると、処理ユニット２は時間サイクルｔ2に進み得る。時間サイクルｔ2中に、論理１０Ｃは、パイプラインレジスタ８ＢからＶAを受け取り、ＶAをパイプラインレジスタ８Ｃに渡し得る。また時間サイクルｔ2中に、論理１０Ｂは、パイプラインレジスタ８ＡからＶBを受け取り、ＶBをパイプラインレジスタ８Ｂに渡し得る。言い換えれば、時間サイクルｔ2中に、ＶAとＶBの両方は、ＶAがパイプラインレジスタ８Ｃにコピーされ、ＶBがパイプラインレジスタ８Ｂにコピーされるように進み得る。
【００４１】
[0045]クロック１４から信号を受け取ると、処理ユニット２は時間サイクルｔ3に進み得る。時間サイクルｔ3中に、論理１０Ｄは、パイプラインレジスタ８ＣからＶAを受け取り、ＶAをパイプラインレジスタ８Ｄに渡し得る。また時間サイクルｔ3中に、論理１０Ｃは、パイプラインレジスタ８ＢからＶBを受け取り、ＶBをパイプラインレジスタ８Ｃに渡し得る。言い換えれば、時間サイクルｔ3中に、ＶAとＶBの両方は、ＶAがパイプラインレジスタ８Ｄにコピーされ、ＶBがパイプラインレジスタ８Ｃにコピーされるように進み得る。
【００４２】
[0046]クロック１４から信号を受け取ると、処理ユニット２は時間サイクルｔ4に進み得る。時間サイクルｔ4中に、論理１０Ｅは、パイプラインレジスタ８ＤからＶAを受け取り、ＶAをＧＰＲ４Ｂに渡し得る。また時間サイクルｔ4中に、論理１０Ｄは、パイプラインレジスタ８ＣからＶBを受け取り、ＶBをパイプラインレジスタ８Ｄに渡し得る。言い換えれば、時間サイクルｔ4中に、ＶAは、ＧＰＲ４Ｂに記憶される値が、時間サイクルｔ0中にＧＰＲ４Ａに記憶された同じ値を表すように、最終パイプラインレジスタ８ＤからＧＰＲ４Ｂにコピーされ得、ＶBは、ＶBがパイプラインレジスタ８Ｄにコピーされるように進み得る。命令がＶＡのデータ型の変更を要求した場合など、いくつかの例では、ＧＰＲ４Ｂによって記憶される値は、データ型のみが異なる、時間サイクルｔ0中にＧＰＲ４Ａに記憶された値の表現であり得る。
【００４３】
[0047]クロック１４から信号を受け取ると、処理ユニット２は時間サイクルｔ5に進み得る。時間サイクルｔ5中に、論理１０Ｅは、パイプラインレジスタ８ＤからＶBを受け取り、ＶBをＧＰＲ４Ａに渡し得る。言い換えれば、時間サイクルｔ5中に、ＶBは、ＧＰＲ４Ａが、時間サイクルｔ0中にＧＰＲ４Ｂに記憶された同じ値を記憶するように、最終パイプラインレジスタ８ＤからＧＰＲ４Ａにコピーされ得る。このようにして、コントローラ１２は、（たとえば、第１のサイクル中に第１のＧＰＲから一時的ＧＰＲに第１の値をコピーし、第２のサイクル中に第２のＧＰＲから第１のＧＰＲに第２の値をコピーし、第３のサイクル中に一時的ＧＰＲから第２のＧＰＲに第１の値をコピーすることとは対照的に）一時的ストレージのために追加のＧＰＲを使用することなしにスワップ／スウィズル命令を実行し得る。
【００４４】
[0048]コントローラ１２は、複数の任意のソースＧＰＲから複数の連続して位置する宛先ＧＰＲに複数の値を移動するようにコントローラ１２に命令するギャザー命令を受け取り得る。たとえば、コントローラ１２は、以下の命令（２）による４値ギャザー命令を受け取り得、ここで、ｄｓｔはＧＰＲ４のうちの第１の宛先ＧＰＲを示し、ｓｒｃ０はＧＰＲ４のうちの第１のソースＧＰＲを示し、ｓｒｃ１はＧＰＲ４のうちの第２のソースＧＰＲを示し、ｓｒｃ２はＧＰＲ４のうちの第３のソースＧＰＲを示し、ｓｒｃ３はＧＰＲ４のうちの第４のソースＧＰＲを示す。
【００４５】
【数３】
0006301501.tif 000004
【００４６】
[0049]コントローラ１２がｎ値ギャザー命令を実行することから生じる挙動は、以下のように表され得る。
【００４７】
【数４】
0006301501.tif 000005
【００４８】
[0050]いくつかの例では、コントローラ１２は、４つの命令サイクル中で４値ギャザー命令を実行し得る。いくつかの例では、命令は、ソースが命令自体によって上書きされた場合、古いソースを使用し得る。
【００４９】
[0051]図３Ｂは、ギャザーコンボ移動命令の実行中の処理ユニットを通る例示的なデータフローを示している。たとえば、図３Ｂによって示されたデータフローは、３値ギャザー命令ｇａｔ４Ｂ、４Ｅ、４Ｂ、４Ｄの実行中の処理ユニット２内のデータフローであり得る。
【００５０】
[0052]コントローラ１２は、複数の連続して位置するソースＧＰＲから複数の任意の宛先ＧＰＲに複数の値を移動するようにコントローラ１２に命令するスキャッタ命令を受け取り得る。たとえば、コントローラ１２は、以下の命令（３）による４値ギャザー命令を受け取り得、ここで、ｄｓｔ０はＧＰＲ４のうちの第１の宛先ＧＰＲを示し、ｄｓｔ１はＧＰＲ４のうちの第２の宛先ＧＰＲを示し、ｄｓｔ２はＧＰＲ４のうちの第３の宛先ＧＰＲを示し、ｄｓｔ３はＧＰＲ４のうちの第４の宛先ＧＰＲを示し、ｓｒｃはＧＰＲ４のうちの第１のソースＧＰＲを示す。
【００５１】
【数５】
0006301501.tif 000006
【００５２】
[0053]コントローラ１２がｎ値スキャッタ命令を実行することから生じる挙動は、以下のように表され得る。
【００５３】
【数６】
0006301501.tif 000007
【００５４】
[0054]いくつかの例では、コントローラ１２は、４つの命令サイクル中で４値ギャザー命令を実行し得る。いくつかの例では、命令は、ソースが命令自体によって上書きされた場合、古いソースを使用し得る。
【００５５】
[0055]図３Ｃは、スキャッタコンボ移動命令の実行中の処理ユニットを通る例示的なデータフローを示している。たとえば、図３Ｃによって示されたデータフローは、３値スキャッタ命令ｇａｔ４Ｂ、４Ｅ、４Ｂ、４Ｄの実行中の処理ユニット２内のデータフローであり得る。
【００５６】
[0056]パイプライン６を通して、コピーされた各値を渡すように上記で説明したが、いくつかの例では、コントローラ１２は、パイプライン６を通して、コピーされた値のサブセットのみを渡すことによってコンボ移動命令を実行し得る。たとえば、ｓｗｚ４Ｃ、４Ａ、４Ｂ、４Ａ、４Ｂ、４Ｃなど、３値スウィズル命令を実行するとき、コントローラ１２は、第１のサイクル中に、ＧＰＲ４Ａによって記憶された値をパイプラインレジスタ８のうちの初期パイプラインレジスタにコピーし、第２のサイクル中に、ＧＰＲ４Ｃによって記憶された値をＧＰＲ４Ａにコピーし、第３のサイクル中に、ＧＰＲ４Ｂによって記憶された値をＧＰＲ４Ｃにコピーし、第４のサイクル中に、パイプラインレジスタ８のうちの最終パイプラインレジスタからＧＰＲ４Ｂに値をコピーし得る。特定のＧＰＲが複数の宛先ＧＰＲと複数のソースＧＰＲの両方中に含まれない場合など、いくつかの例では、コントローラ１２は、パイプライン６を通して値を渡すことなしにコンボ移動命令を実行し得る。
【００５７】
[0057]図４は、本開示の１つまたは複数の技法による、コンボ移動命令を実行するとき、ＧＰＲ間で値を移動するためにパイプラインレジスタを使用する処理ユニットの例示的な動作を示すフローチャートである。図４の技法は、図１に示された処理ユニット２、または図２に示された処理ユニット２Ａなど、処理ユニットによって実施され得る。説明の目的で、図４の技法について図１の処理ユニット２のコンテキスト内で説明するが、処理ユニット２のそれとは異なる構成を有する処理ユニットが図４の技法を実施し得る。
【００５８】
[0058]本開示の１つまたは複数の技法によれば、処理ユニット２のコントローラ１２は１つまたは複数の命令を受け取り得る。たとえば、コントローラ１２は、複数のＧＰＲのうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取る（４００）。いくつかの例では、命令は、第１の値のデータ型および／または第２の値のデータ型の一方または両方が変換されることをさらに要求し得る。たとえば、第１の値が整数として第１のＧＰＲに記憶された場合、命令は、第１の値が、第３のＧＰＲに移動され、浮動小数点値に変換されることを要求し得る。
【００５９】
[0059]１つまたは複数の命令を受け取ったことに応答して、コントローラ１２は、パイプライン６の論理ユニット１０のうちの初期論理ユニットに、第１のサイクル中に、パイプライン６のパイプラインレジスタ８のうちの初期パイプラインレジスタ（たとえば、パイプラインレジスタ８Ａ）に第１の値をコピーさせる（４０２）。一例として、コントローラ１２は、初期論理ユニットに、第１のＧＰＲから第１の値を取り出させ、第１の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。別の例として、第１の値がパイプラインレジスタ８のうちの特定のパイプラインレジスタによってすでに記憶されている場合、コントローラ１２は、初期論理ユニットに、特定のパイプラインレジスタから第１の値を取り出させ、第１の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。上記で説明したように、パイプラインレジスタ８は複数のＧＰＲ４とは異なる。さらに、上記で説明したように、処理ユニット２は、パイプラインレジスタ８のうちの１つのパイプラインレジスタにアクセスするとき、ＧＰＲ４のうちのＧＰＲにアクセスするときよりも少ない電力を消費し得る。たとえば、処理ユニット２は、パイプラインレジスタにアクセスするとき、ＧＰＲにアクセスするときと比較して半分の電力を消費し得る。命令が第１の値のデータ型の変換を要求する場合など、いくつかの例では、論理ユニットのうちの１つまたは複数はデータ型変換を実施し得る。たとえば、初期論理ユニットは、整数データ型から浮動小数点データ型に第１の値を変換し得る。初期論理ユニットは、第２のサイクル中に、ＧＰＲ４のうちの第２のＧＰＲから初期パイプラインレジスタに第２の値をコピーする（４０４）。一例として、コントローラ１２は、初期論理ユニットに、第２のＧＰＲから第２の値を取り出させ、第２の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。別の例として、第２の値がパイプラインレジスタ８のうちの特定のパイプラインレジスタによってすでに記憶されている場合、コントローラ１２は、初期論理ユニットに、特定のパイプラインレジスタから第２の値を取り出させ、第２の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。上記で説明したように、また第２のサイクル中に、論理ユニット１０のうちの後続の論理ユニット（たとえば、論理ユニット１０Ｂ）は、パイプラインレジスタ８のうちの後続のパイプラインレジスタ（たとえば、パイプラインレジスタ８Ｂ）に第１の値をコピーし得る。たとえば、コントローラ１２は、後続の論理ユニットに、初期パイプラインレジスタから第１の値を取り出させ、第１の値を後続のパイプラインレジスタに記憶させる信号を後続の論理ユニットに送り得る。
【００６０】
[0060]パイプライン６が２段パイプラインである場合、後続のパイプラインレジスタは、パイプラインレジスタ８のうちの最終パイプラインレジスタ（たとえば、パイプラインレジスタＮ−１）であり得る。しかしながら、パイプライン６が２段よりも多い段を有する場合、第１の値が最終パイプラインレジスタに記憶されるまで、第１の値および第２の値はパイプライン６の段を通って進み得る。したがって、第２のサイクルと第３のサイクルとの間に複数のサイクルがあり得る。
【００６１】
[0061]論理ユニット１０のうちの最終論理ユニット（たとえば、論理ユニット１０Ｎ）は、第３のサイクル中に、最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーする（４０６）。たとえば、コントローラ１２は、最終論理ユニットに、最終パイプラインレジスタから第１の値を取り出させ、第１の値を第３のＧＰＲに記憶させる信号を最終論理ユニットに送り得る。上記で説明したように、また第３のサイクル中に、第Ｎ−１の論理ユニット（すなわち、最後から２番目の論理ユニット）は、第Ｎ−１のパイプラインレジスタ（すなわち、最後から２番目のパイプラインレジスタ）から最終パイプラインレジスタに第２の値をコピーし得る。
【００６２】
[0062]最終論理ユニットは、第４のサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーする（４０８）。たとえば、コントローラ１２は、最終論理ユニットに、最終パイプラインレジスタから第２の値を取り出させ、第２の値を第４のＧＰＲに記憶させる信号を最終論理ユニットに送り得る。上記で説明したように、コントローラ１２は、コンボ移動命令など、単一の命令を受け取ったことに応答して、論理ユニットに、値をコピー（すなわち、動作４０２〜４０８を実施）させ得る。
【００６３】
[0063]図５は、本開示の１つまたは複数の技法による、コンボ移動命令を出力する例示的なコンパイラモジュール１６を示すブロック図である。図５の例に示されているように、コンパイラモジュール１６は、コードを受け取り、命令を出力し得る。コンパイラモジュール１６は、複数のＧＰＲと、複数のパイプラインレジスタを含むパイプラインとを含む、図１の処理ユニット２または図２の処理ユニット２Ａなど、処理ユニットが実行する命令を出力し得る。いくつかの例では、コンパイラモジュール１６は、処理ユニットと同じデバイス中に含まれ得る。さらに、図５の例に示されているように、コンパイラモジュール１６はコンボ移動モジュール１８を含み得る。
【００６４】
[0064]コンボ移動モジュール１８は、受け取られたコードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定するように構成され得る。たとえば、コンボ移動モジュール１８は、コードによって示された複数の動作が、処理ユニットの複数のＧＰＲの間で複数の値を移動することを含むかどうかを決定するために、コードを分析し得る。いずれの場合も、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、コンボ移動モジュール１８は、処理ユニットによって実行されたとき、複数の動作と同じ結果を達成する単一のコンボ移動命令を生成し得る。一例として、コードによって示された複数の動作が、第１のＧＰＲから一時的ＧＰＲに第１の値を移動し、第２のＧＰＲから第１のＧＰＲに第２の値を移動し、一時的ＧＰＲから第２のＧＰＲに第１の値を移動することを含む場合、コンボ移動モジュールは、より少数の命令サイクル中で同じ結果を達成する単一のスウィズル命令を生成し得る。
【００６５】
[0065]いくつかの例では、コンパイラモジュール１６は、コンパイルされていないコードを受け取り得る。そのような例では、コンパイラモジュール１６はコードを命令にコンパイルし得る。いくつかの例では、コンボ移動モジュール１８は、コンパイルプロセス中に、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定し得る。いくつかの例では、コンボ移動モジュール１８は、コンパイルプロセスが完了した後に、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定し得る。いくつかの例では、コンパイラモジュール１６は、コンパイルされたコード（たとえば、命令）を受け取り得る。そのような例では、コンボ移動モジュール１８は、命令のいずれかがコンボ移動命令に組み合わせられ得るかどうかを決定するために、コード中に含まれる命令を分析し得る。
【００６６】
[0066]図６は、本開示の１つまたは複数の技法による、コンボ移動命令を出力するコンパイラモジュールの例示的な動作を示すフローチャートである。図６の技法は、図５に示されたコンパイラモジュール１６など、コンパイラモジュールによって実施され得る。説明の目的で、図６の技法について図５のコンパイラモジュール１６のコンテキスト内で説明するが、コンパイラモジュール１６のそれとは異なる構成を有するコンパイラモジュールが図６の技法を実施し得る。
【００６７】
[0067]本開示の１つまたは複数の技法によれば、コンパイラモジュール１６はコードを受け取る（６０２）。上記で説明したように、コードは、コンパイルされたコードまたはコンパイルされていないコードであり得る。コンパイラモジュール１６のコンボ移動モジュール１８は、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定する（６０４）。コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、コンボ移動モジュール１８はコンボ移動命令を生成する（６０６）。上記で説明したように、いくつかの例示的なコンボ移動命令は、１つのスウィズル命令(a swizzle instruction)と、１つのギャザー命令(a gather instruction)と、１つのスキャッタ命令(a scatter instruction)とを含む。また上記で説明したように、コードが複数の命令を含む場合、コンボ移動モジュール１８は、コンボ移動命令に組み合わせられ得る複数の動作に対応する命令を、生成されたコンボ移動命令と置き換え得る。このようにして、コンボ移動モジュール１８は、動作を実施するために必要とされる命令の数を低減し得る。またこのようにして、コンボ移動モジュール１８は、動作を実施するために処理モジュールによって必要とされる命令サイクルの数を低減し得る。
【００６８】
[0068]図７は、本開示の１つまたは複数の技法による、図１の集積回路を含む例示的なデバイス１００を示すブロック図である。デバイス１００の例としては、限定はしないが、ワイヤレスデバイス、携帯電話、携帯情報端末（ＰＤＡ）、ビデオディスプレイを含むビデオゲーミングコンソール、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、テレビジョンセットトップボックス、タブレットコンピューティングデバイス、電子ブックリーダーなどがある。デバイス１００は、ＧＰＵ１７と、システムメモリ１９と、プロセッサ２０とを含む。図６に示された例では、ＧＰＵ１７およびプロセッサ２０は、ＧＰＵ１７とプロセッサ２０とが同じ集積回路中に形成され得ることを示すために破線で示されている。いくつかの例では、ＧＰＵ１７とプロセッサ２０とは他の集積回路中に形成され（すなわち、異なるチップ中にあり）得る。いくつかの例では、ＧＰＵ１７とプロセッサ２０の一方または両方は図１の集積回路１の例であり得る。たとえば、ＧＰＵ１７およびプロセッサ２０の一方または両方は、複数の汎用レジスタ（ＧＰＲ）のうちの複数のソースＧＰＲから複数のＧＰＲのうちの複数の宛先ＧＰＲに複数の値を移動するとき、複数のパイプラインレジスタを一時的ストレージとして利用するように構成され得る。
【００６９】
[0069]システムメモリ１９はデバイス１００のためのメモリと見なされ得る。システムメモリ１９は１つまたは複数のコンピュータ可読記憶媒体を備え得る。システムメモリ１９の例としては、限定はしないが、ランダムアクセスメモリ（ＲＡＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、あるいは命令および／またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。
【００７０】
[0070]いくつかの態様では、システムメモリ１９は、本開示においてプロセッサ２０およびＧＰＵ１７に起因する機能をプロセッサ２０および／またはＧＰＵ１７に実施させる命令を含み得る。したがって、システムメモリ１９は、実行されたとき、１つまたは複数のプロセッサ（たとえば、プロセッサ２０およびＧＰＵ１７）に様々な機能を実施させる命令を記憶したコンピュータ可読記憶媒体であり得る。システムメモリ１９は、ＧＰＵ１７および／またはプロセッサ２０に、本開示で説明する例示的な技法を実装させる命令を記憶し得る。
【００７１】
[0071]システムメモリ１９は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示し得る。ただし、「非一時的」という用語は、システムメモリ１９が非可動であること、またはそれのコンテンツが静的であることを意味すると解釈されるべきではない。一例として、システムメモリ１９は、デバイス１００から取り外され、別のデバイスに移動され得る。別の例として、システムメモリ１９と実質的に同様のメモリがデバイス１００中に挿入され得る。いくつかの例では、非一時的記憶媒体は、時間とともに変化し得るデータを（たとえば、ＲＡＭに）記憶し得る。
【００７２】
[0072]プロセッサ２０およびＧＰＵ１７の例としては、限定はしないが、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路がある。いくつかの例では、ＧＰＵ１７は、グラフィックス処理に好適な超並列処理能力をＧＰＵ１７に与える集積回路および／または個別論理回路を含む専用ハードウェアであり得る。いくつかの事例では、ＧＰＵ１７は、汎用処理能力をも含み得、汎用処理タスク（すなわち、非グラフィックス関係タスク）を実装するとき、汎用ＧＰＵ（ＧＰＧＰＵ）と呼ばれることがある。
【００７３】
[0073]プロセッサ２０は様々なタイプのアプリケーションを実行し得る。アプリケーションの例としては、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、または表示のために閲覧可能オブジェクトを生成する他のアプリケーションがある。１つまたは複数のアプリケーションの実行のための命令はシステムメモリ１９内に記憶され得る。プロセッサ２０は、さらなる処理のために閲覧可能オブジェクトのグラフィックスデータをＧＰＵ１７に送信し得る。
【００７４】
[0074]たとえば、プロセッサ１２０は、超並列動作を必要とするタスクなど、処理タスクをＧＰＵ１７にオフロードし得る。一例として、グラフィックス処理は超並列動作を必要とし、プロセッサ２０は、そのようなグラフィックス処理タスクをＧＰＵ１７にオフロードし得る。プロセッサ２０は、特定のアプリケーション処理インターフェース（ＡＰＩ：application processing interface）に従ってＧＰＵ１７と通信し得る。そのようなＡＰＩの例としては、Ｍｉｃｒｏｓｏｆｔ（登録商標）によるＤｉｒｅｃｔＸ（登録商標）ＡＰＩ、クロノスグループによるＯｐｅｎＧＬ（登録商標）ＡＰＩ、およびＯｐｅｎＣＬ（登録商標）ＡＰＩがあるが、本開示の態様は、ＤｉｒｅｃｔＸ、ＯｐｅｎＧＬ、またはＯｐｅｎＣＬ  ＡＰＩに限定されず、他のタイプのＡＰＩに拡張され得る。その上、本開示で説明する技法は、ＡＰＩに従って機能することを必要とせず、プロセッサ２０およびＧＰＵ１７は通信のために任意の技法を利用し得る。
【００７５】
[0075]グラフィックス演算を実施するために、ＧＰＵ１７はグラフィックス処理パイプラインを実装し得る。グラフィックス処理パイプラインは、ＧＰＵ１７上で実行するソフトウェアまたはファームウェアによって定義された機能を実施することと、まさに特定の機能を実施するように配線接続された固定機能ユニットによって機能を実施することとを含む。ＧＰＵ１７上で実行するソフトウェアまたはファームウェアはシェーダプログラム(shader programs)（または単にシェーダ）と呼ばれることがあり、シェーダプログラムは、ＧＰＵ１７の１つまたは複数のシェーダコア（シェーダプロセッサとも呼ばれる）上で実行し得る。ユーザは、任意の考えられる様式で所望のタスクを実施するようにシェーダプログラムを設計することができるので、シェーダプログラムはユーザに機能的フレキシビリティを与える。しかしながら、固定機能ユニットは、固定機能ユニットがタスクを実施する様式のために配線接続される。したがって、固定機能ユニットは多くの機能的フレキシビリティを与えないことがある。
【００７６】
[0076]たとえば、プロセッサ２０は、ビデオゲームなどのアプリケーションを実行し得、プロセッサ２０は、実行の一部としてグラフィックスデータを生成し得る。プロセッサ２０は、ＧＰＵ１７によって処理するためにグラフィックスデータを出力し得る。ＧＰＵ１７は、次いで、グラフィックスパイプライン中でグラフィックスデータを処理し得る。いくつかの例では、グラフィックデータを処理するために、ＧＰＵ１７は、１つまたは複数のシェーダプログラムを実行する必要があり得る。たとえば、プロセッサ２０上で実行しているアプリケーションは、システムメモリ１９からシェーダプログラムを取り出すようにＧＰＵ１７に命令することと、シェーダプログラムを実行するようにＧＰＵ１７に命令することとをプロセッサ２０に行わせ得る。
【００７７】
[0077]頂点シェーダ(vertex shaders)、ハルシェーダ(hull shaders)、ドメインシェーダ、ジオメトリシェーダ、フラグメントシェーダなど、様々なタイプのシェーダプログラムがある。これらの例示的なシェーダプログラムの各々は、グラフィックスパイプラインのある部分を形成し得る。たとえば、ＧＰＵ１７の固定機能ユニットは、例示的なシェーダプログラムのうちの１つまたは複数を実行するシェーダコアにデータを出力し得、例示的なシェーダプログラムのうちの１つまたは複数は、データを処理し、得られたデータをＧＰＵ１７の別の固定機能ユニットに出力し得る。シェーダプログラムが、別のシェーダプログラムからデータを受け取るか、または別のシェーダプログラムにデータを出力することも可能であり得る。このようにして、シェーダプログラムはグラフィックスパイプラインの一部分として実装される。
【００７８】
[0078]頂点シェーダ、ハルシェーダ、ドメインシェーダ、ジオメトリシェーダ、フラグメントシェーダなど、様々なタイプのシェーダプログラムがある。これらの例示的なシェーダプログラムの各々は、グラフィックスパイプラインのある部分を形成し得る。たとえば、ＧＰＵ１６の固定機能ユニットは、例示的なシェーダプログラムのうちの１つまたは複数を実行するシェーダコアにデータを出力し得、例示的なシェーダプログラムのうちの１つまたは複数は、データを処理し、得られたデータをＧＰＵ１６の別の固定機能ユニットに出力し得る。シェーダプログラムが、別のシェーダプログラムからデータを受け取るか、または別のシェーダプログラムにデータを出力することも可能であり得る。このようにして、シェーダプログラムはグラフィックスパイプラインの一部分として実装される。
【００７９】
[0079]デバイス１００はまた、ディスプレイ６０と、ユーザインターフェース６２と、トランシーバモジュール６４とを含み得る。デバイス１００は、明快のために図７に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス１００は、デバイス１００がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図７に示されていないスピーカーおよびマイクロフォンを含み得る。さらに、デバイス１００に示された様々なモジュールおよびユニットは、デバイス１００のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース６２およびディスプレイ６０は、デバイス１００がデスクトップコンピュータである例においてデバイス１００の外部にあり得る。別の例として、ユーザインターフェース６２は、ディスプレイ６０がモバイルデバイスのタッチセンシティブまたはプレゼンスセンシティブディスプレイである例においてディスプレイ６０の一部であり得る。
【００８０】
[0080]ユーザインターフェース６２の例としては、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース６２はまた、タッチスクリーンであり得、ディスプレイ６０の一部として組み込まれ得る。トランシーバモジュール６４は、デバイス１００と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール６４は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。ディスプレイ６０は、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、タッチセンシティブディスプレイ、プレゼンスセンシティブディスプレイ、または別のタイプのディスプレイデバイスを備え得る。
【００８１】
[0081]例１。処理ユニットが、複数の汎用レジスタ（ＧＰＲ）のうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取ることと、１つまたは複数の命令を受け取ったことに応答して、処理ユニットの初期論理ユニットが、第１のクロックサイクル中に、パイプラインの複数パイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーすることと、ここにおいて、複数のパイプラインレジスタが複数のＧＰＲとは異なる、処理ユニットの初期論理ユニットが、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーすることと、処理ユニットの最終論理ユニットが、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーすることと、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、処理ユニットの最終論理ユニットが、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーすることと、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を備える方法。
【００８２】
[0082]例２。１つまたは複数の命令が、第１のＧＰＲと、第２のＧＰＲと、第３のＧＰＲと、第４のＧＰＲとを識別し、１つまたは複数の命令がパイプラインレジスタのいずれをも個々に識別しない、例１に記載の方法。
【００８３】
[0083]例３。複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、複数のＧＰＲが命令によって個々にアクセス可能である、例１から２の任意の組合せに記載の方法。
【００８４】
[0084]例４。処理ユニットが、複数のパイプラインレジスタのうちのパイプラインレジスタにアクセスするとき、複数のＧＰＲのうちのＧＰＲにアクセスするときよりも少ない電力を消費する、例１から３の任意の組合せに記載の方法。
【００８５】
[0085]例５。１つまたは複数の命令は、第１のＧＰＲから第３のＧＰＲに第１の値が移動されることと、第２のＧＰＲから第４のＧＰＲに第２の値が移動されることとを要求する単一の割込み不可能な命令を備える、例１から４の任意の組合せに記載の方法。
【００８６】
[0086]例６。命令が、スワップ命令と、ここにおいて、第３のＧＰＲが第２のＧＰＲであり、ここにおいて、第４のＧＰＲが第１のＧＰＲである、スウィズル命令と、ここにおいて、複数のＧＰＲが任意に位置する、ギャザー命令と、ここにおいて、第１のＧＰＲと第２のＧＰＲとが連続して位置せず、ここにおいて、第３のＧＰＲと第４のＧＰＲとが連続して位置する、スキャッタ命令と、ここにおいて、第１のＧＰＲと第２のＧＰＲとが連続して位置し、ここにおいて、第３のＧＰＲと第４のＧＰＲとが連続して位置しない、からなるグループから選択される、例１から５の任意の組合せに記載の方法。
【００８７】
[0087]例７。パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、例１から６の任意の組合せに記載の方法。
【００８８】
[0088]例８。中間論理ユニットが、第１のクロックサイクルの後、および第３のクロックサイクルの前に、初期パイプラインレジスタから複数のパイプラインレジスタのうちの中間パイプラインレジスタに第１の値をコピーすることと、中間論理ユニットが、第２のクロックサイクルの後、および第４のクロックサイクルの前に、初期パイプラインレジスタから中間パイプラインレジスタに第２の値をコピーすることとをさらに備える、例１から７の任意の組合せに記載の方法。
【００８９】
[0089]例９。処理ユニットが、中央処理ユニット（ＣＰＵ）またはグラフィカル処理ユニット（ＧＰＵ）から構成される、例１から８の任意の組合せに記載の方法。
【００９０】
[0090]例１０。初期パイプラインレジスタに第１の値をコピーすることが、第１のＧＰＲから初期パイプラインレジスタに第１の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第１の値をコピーすることのいずれかを備え、初期パイプラインレジスタに第２の値をコピーすることが、第２のＧＰＲから初期パイプラインレジスタに第２の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第２の値をコピーすることのいずれかを備える、例１から９の任意の組合せに記載の方法。
【００９１】
[0091]例１１。第３のＧＰＲが第２のＧＰＲであり、および／または第４のＧＰＲが第１のＧＰＲである、例１から１０の任意の組合せに記載の方法。
【００９２】
[0092]例１２。複数の汎用レジスタ（ＧＰＲ）と、複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、複数のパイプラインレジスタが複数のＧＰＲとは異なる、複数の論理ユニットと、複数のＧＰＲのうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取るように構成されたコントローラと、ここにおいて、１つまたは複数の命令を受け取ったことに応答して、コントローラが、複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、複数のパイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーさせることと、初期論理ユニットに、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーさせることと、複数の論理ユニットのうちの最終論理ユニットに、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーさせることと、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、最終論理ユニットに、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーさせることと、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を行うように構成された、を備える処理ユニット。
【００９３】
[0093]例１３。１つまたは複数の命令が、第１のＧＰＲと、第２のＧＰＲと、第３のＧＰＲと、第４のＧＰＲとを識別し、１つまたは複数の命令がパイプラインレジスタのいずれをも個々に識別しない、例１２に記載の処理ユニット。
【００９４】
[0094]例１４。複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、複数のＧＰＲが命令によって個々にアクセス可能である、例１２から１３の任意の組合せに記載の処理ユニット。
【００９５】
[0095]例１５。処理ユニットが、複数のパイプラインレジスタのうちのパイプラインレジスタにアクセスするとき、複数のＧＰＲのうちのＧＰＲにアクセスするときよりも少ない電力を消費する、例１２から１４の任意の組合せに記載の処理ユニット。
【００９６】
[0096]例１６。１つまたは複数の命令は、第１のＧＰＲから第３のＧＰＲに第１の値が移動されることと、第２のＧＰＲから第４のＧＰＲに第２の値が移動されることとを要求する単一の割込み不可能な命令を備える、例１２から１５の任意の組合せに記載の処理ユニット。
【００９７】
[0097]例１７。命令が、スワップ命令と、ここにおいて、第３のＧＰＲが第２のＧＰＲであり、ここにおいて、第４のＧＰＲが第１のＧＰＲである、スウィズル命令と、ここにおいて、複数のＧＰＲが任意に位置する、ギャザー命令と、ここにおいて、第１のＧＰＲと第２のＧＰＲとが連続して位置せず、ここにおいて、第３のＧＰＲと第４のＧＰＲとが連続して位置する、スキャッタ命令と、ここにおいて、第１のＧＰＲ、ここにおいて、第１のＧＰＲと第２のＧＰＲとが連続して位置し、ここにおいて、第３のＧＰＲと第４のＧＰＲとが連続して位置しない、からなるグループから選択される、例１２から１６の任意の組合せに記載の処理ユニット。
【００９８】
[0098]例１８。パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、例１２から１７の任意の組合せに記載の処理ユニット。
【００９９】
[0099]例１９。１つまたは複数の命令を受け取ったことに応答して、コントローラが、複数の論理ユニットのうちの中間論理ユニットに、第１のクロックサイクルの後、および第３のクロックサイクルの前に、初期パイプラインレジスタから複数のパイプラインレジスタのうちの中間パイプラインレジスタに第１の値をコピーさせることと、中間論理ユニットに、第２のクロックサイクルの後、および第４のクロックサイクルの前に、初期パイプラインレジスタから中間パイプラインレジスタに第２の値をコピーさせることとを行うようにさらに構成された、例１２から１８の任意の組合せに記載の処理ユニット。
【０１００】
[0100]例２０。処理ユニットが、中央処理ユニット（ＣＰＵ）またはグラフィカル処理ユニット（ＧＰＵ）から構成される、例１２から１９の任意の組合せに記載の処理ユニット。
【０１０１】
[0101]例２１。初期論理ユニットが、第１のＧＰＲから初期パイプラインレジスタに第１の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第１の値をコピーすることのいずれかによって初期パイプラインレジスタに第１の値をコピーするように構成され、初期論理ユニットが、第２のＧＰＲから初期パイプラインレジスタに第２の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第２の値をコピーすることのいずれかによって初期パイプラインレジスタに第２の値をコピーするように構成された、例１２から２０の任意の組合せに記載の処理ユニット。
【０１０２】
[0102]例２２。第３のＧＰＲが第２のＧＰＲであり、および／または第４のＧＰＲが第１のＧＰＲである、例１２から２１の任意の組合せに記載の処理ユニット。
【０１０３】
[0103]例２３。複数のＧＰＲのうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する、処理ユニットに対する１つまたは複数の命令を記憶する非一時的コンピュータ可読記憶媒体であって、１つまたは複数の命令が、実行されたとき、複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーさせることと、初期論理ユニットに、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーさせることと、複数の論理ユニットのうちの最終論理ユニットに、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーさせることと、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、最終論理ユニットに、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーさせることと、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を処理ユニットに行わせる、非一時的コンピュータ可読記憶媒体。
【０１０４】
[0104]例２４。１つまたは複数の命令が、第１のＧＰＲと、第２のＧＰＲと、第３のＧＰＲと、第４のＧＰＲとを識別し、１つまたは複数の命令がパイプラインレジスタのいずれをも個々に識別しない、例２３に記載の非一時的コンピュータ可読記憶媒体。
【０１０５】
[0105]例２５。複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、複数のＧＰＲが命令によって個々にアクセス可能である、例２３から２４の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１０６】
[0106]例２６。処理ユニットが、複数のパイプラインレジスタのうちのパイプラインレジスタにアクセスするとき、複数のＧＰＲのうちのＧＰＲにアクセスするときよりも少ない電力を消費する、例２３から２５の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１０７】
[0107]例２７。処理ユニットが、単一の割込み不可能な命令を受け取ったことに応答して値をコピーする、例２３から２６の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１０８】
[0108]例２８。命令が、スワップ命令と、ここにおいて、第３のＧＰＲが第２のＧＰＲであり、ここにおいて、第４のＧＰＲが第１のＧＰＲである、スウィズル命令と、ここにおいて、複数のＧＰＲが任意に位置する、ギャザー命令と、ここにおいて、第１のＧＰＲと第２のＧＰＲとが連続して位置せず、ここにおいて、第３のＧＰＲと第４のＧＰＲとが連続して位置する、スキャッタ命令と、ここにおいて、第１のＧＰＲ、ここにおいて、第１のＧＰＲと第２のＧＰＲとが連続して位置し、ここにおいて、第３のＧＰＲと第４のＧＰＲとが連続して位置しない、からなるグループから選択される、例２３から２７の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１０９】
[0109]例２９。パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、例２３から２８の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１１０】
[0110]例３０。実行されたとき、１つまたは複数の命令が、複数の論理ユニットのうちの中間論理ユニットに、第１のクロックサイクルの後、および第３のクロックサイクルの前に、初期パイプラインレジスタから複数のパイプラインレジスタのうちの中間パイプラインレジスタに第１の値をコピーさせることと、中間論理ユニットに、第２のクロックサイクルの後、および第４のクロックサイクルの前に、初期パイプラインレジスタから中間パイプラインレジスタに第２の値をコピーさせることとを処理ユニットに行わせる、例２３から２９の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１１１】
[0111]例３１。処理ユニットが、中央処理ユニット（ＣＰＵ）またはグラフィカル処理ユニット（ＧＰＵ）から構成される、例２３から３０の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１１２】
[0112]例３２。初期論理ユニットが、第１のＧＰＲから初期パイプラインレジスタに第１の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第１の値をコピーすることのいずれかによって初期パイプラインレジスタに第１の値をコピーするように構成され、初期論理ユニットが、第２のＧＰＲから初期パイプラインレジスタに第２の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第２の値をコピーすることのいずれかによって初期パイプラインレジスタに第２の値をコピーするように構成された、例２３から３１の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１１３】
[0113]例３３。第３のＧＰＲが第２のＧＰＲであり、および／または第４のＧＰＲが第１のＧＰＲである、例２３から３２の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
【０１１４】
[0114]例３４。コンパイラモジュールがコードを受け取ることと、コンパイラモジュールが、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、コンボ移動命令を生成することとを備える方法であって、ここにおいて、処理ユニットによって実行されたとき、コンボ移動命令が、複数の汎用レジスタ（ＧＰＲ）のうちの複数のソースＧＰＲから複数のＧＰＲのうちの複数の宛先ＧＰＲに複数の値を移動するとき、処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、複数のパイプラインレジスタが複数のＧＰＲとは異なる、方法。
【０１１５】
[0115]例３５。コードによって示された複数の動作がコンボモード命令に組み合わせられ得ると決定することは、コードによって示された複数の動作が、複数のＧＰＲの間で複数の値を移動することを含むと決定することに応答して、コードによって示された複数の動作がコンボモード命令に組み合わせられ得ると決定することを備える、例３４に記載の方法。
【０１１６】
[0116]例３６。コードが複数の命令を備え、ここにおいて、上記方法が、コンボ移動命令に組み合わせられ得る複数の動作に対応する命令を、生成されたコンボ移動命令と置き換えることをさらに備える、例３４から３２の任意の組合せに記載の方法。
【０１１７】
[0117]例３７。例１から１１および／または例３４から３６に記載の方法の任意の組合せを実施するための手段を備えるデバイス。
【０１１８】
[0118]例３８。例１から１１および／または例３４から３６に記載の方法の任意の組合せを実施するための手段を備えるシステム。
【０１１９】
[0119]例３９。処理ユニットが、複数の汎用レジスタ（ＧＰＲ）のうちの第１のＧＰＲから複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、複数のＧＰＲのうちの第２のＧＰＲから複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取るための手段と、１つまたは複数の命令を受け取ったことに応答して、処理ユニットの初期論理ユニットが、第１のクロックサイクル中に、パイプラインの複数パイプラインレジスタのうちの初期パイプラインレジスタに第１の値をコピーするための手段と、ここにおいて、複数のパイプラインレジスタが複数のＧＰＲとは異なる、処理ユニットの初期論理ユニットが、第１のクロックサイクルの後にある第２のクロックサイクル中に、初期パイプラインレジスタに第２の値をコピーするための手段と、処理ユニットの最終論理ユニットが、第２のクロックサイクルの後にある第３のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第３のＧＰＲに第１の値をコピーするための手段と、ここにおいて、第３のＧＰＲにコピーされる第１の値が、第１のＧＰＲからコピーされた同じ第１の値を表す、処理ユニットの最終論理ユニットが、第２のクロックサイクルの後にある第４のクロックサイクル中に、最終パイプラインレジスタから第４のＧＰＲに第２の値をコピーするための手段と、ここにおいて、第４のＧＰＲにコピーされる第２の値が、第２のＧＰＲからコピーされた同じ第２の値を表す、を備えるデバイス。
【０１２０】
[0120]例４０。例１から１１に記載の方法の任意の組合せを実施するための手段をさらに備える、例４０に記載のデバイス。
【０１２１】
[0121]１つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、１つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得るか、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、（１）非一時的である有形コンピュータ可読記憶媒体、あるいは（２）信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび／またはデータ構造を取り出すために、１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
【０１２２】
[0122]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者線（ＤＳＬ）、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用してウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、ＤＳＬ、または赤外線、無線、およびマイクロ波などのワイヤレス技術は媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびｂｌｕ−ｒａｙ（登録商標）ディスク（disc）を含み、ここで、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【０１２３】
[0123]命令は、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび／またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【０１２４】
[0124]本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示した技法を実施するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明した１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
【０１２５】
[0125]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願発明の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
処理ユニットが、複数の汎用レジスタ（ＧＰＲ）のうちの第１のＧＰＲから前記複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、前記複数のＧＰＲのうちの第２のＧＰＲから前記複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取ることと、
前記１つまたは複数の命令を受け取ったことに応答して、
前記処理ユニットの初期論理ユニットが、第１のクロックサイクル中に、パイプラインの複数パイプラインレジスタのうちの初期パイプラインレジスタに前記第１の値をコピーすることと、ここにおいて、前記複数のパイプラインレジスタが前記複数のＧＰＲとは異なる、
前記処理ユニットの前記初期論理ユニットが、前記第１のクロックサイクルの後にある第２のクロックサイクル中に、前記初期パイプラインレジスタに前記第２の値をコピーすることと、
前記処理ユニットの最終論理ユニットが、前記第２のクロックサイクルの後にある第３のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第３のＧＰＲに前記第１の値をコピーすることと、ここにおいて、前記第３のＧＰＲにコピーされる前記第１の値が、前記第１のＧＰＲからコピーされた前記同じ第１の値を表す、
前記処理ユニットの前記最終論理ユニットが、前記第２のクロックサイクルの後にある第４のクロックサイクル中に、前記最終パイプラインレジスタから前記第４のＧＰＲに前記第２の値をコピーすることと、ここにおいて、前記第４のＧＰＲにコピーされる前記第２の値が、前記第２のＧＰＲからコピーされた前記同じ第２の値を表す、
を備える方法。
［Ｃ２］
前記１つまたは複数の命令が、前記第１のＧＰＲと、前記第２のＧＰＲと、前記第３のＧＰＲと、前記第４のＧＰＲとを識別し、
前記１つまたは複数の命令が前記パイプラインレジスタのいずれをも個々に識別しない、
Ｃ１に記載の方法。
［Ｃ３］
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のＧＰＲが命令によって個々にアクセス可能である、Ｃ１に記載の方法。
［Ｃ４］
前記処理ユニットが、前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタにアクセスするとき、前記複数のＧＰＲのうちの１つのＧＰＲにアクセスするときよりも少ない電力を消費する、Ｃ１に記載の方法。
［Ｃ５］
前記１つまたは複数の命令は、前記第１のＧＰＲから前記第３のＧＰＲに前記第１の値が移動されることと、前記第２のＧＰＲから前記第４のＧＰＲに前記第２の値が移動されることとを要求する単一の割込み不可能な命令を備える、Ｃ１に記載の方法。
［Ｃ６］
前記命令が、
スワップ命令と、ここにおいて、前記第３のＧＰＲが前記第２のＧＰＲであり、ここにおいて、前記第４のＧＰＲが前記第１のＧＰＲである、
スウィズル命令と、ここにおいて、前記複数のＧＰＲが任意に位置する、
ギャザー命令と、ここにおいて、前記第１のＧＰＲと前記第２のＧＰＲとが連続して位置せず、ここにおいて、前記第３のＧＰＲと前記第４のＧＰＲとが連続して位置する、
スキャッタ命令と、ここにおいて、前記第１のＧＰＲと前記第２のＧＰＲとが連続して位置し、ここにおいて、前記第３のＧＰＲと前記第４のＧＰＲとが連続して位置しない、
からなるグループから選択される、Ｃ５に記載の方法。
［Ｃ７］
前記パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、Ｃ１に記載の方法。
［Ｃ８］
中間論理ユニットが、前記第１のクロックサイクルの後、および前記第３のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの中間パイプラインレジスタに前記第１の値をコピーすることと、
前記中間論理ユニットが、前記第２のクロックサイクルの後、および前記第４のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第２の値をコピーすることと
をさらに備える、Ｃ１に記載の方法。
［Ｃ９］
前記処理ユニットが、中央処理ユニット（ＣＰＵ）またはグラフィカル処理ユニット（ＧＰＵ）から構成される、Ｃ１に記載の方法。
［Ｃ１０］
前記初期パイプラインレジスタに前記第１の値をコピーすることが、
前記第１のＧＰＲから前記初期パイプラインレジスタに前記第１の値をコピーすること、または
前記複数のパイプラインレジスタのうちのパイプラインレジスタから前記初期パイプラインレジスタに前記第１の値をコピーすること
のいずれかを備え、
前記初期パイプラインレジスタに前記第２の値をコピーすることが、
前記第２のＧＰＲから前記初期パイプラインレジスタに前記第２の値をコピーすること、または
前記複数のパイプラインレジスタのうちのパイプラインレジスタから前記初期パイプラインレジスタに前記第２の値をコピーすること
のいずれかを備える、
Ｃ１に記載の方法。
［Ｃ１１］
複数の汎用レジスタ（ＧＰＲ）と、
複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、前記複数のパイプラインレジスタが前記複数のＧＰＲとは異なる、
複数の論理ユニットと、
前記複数のＧＰＲのうちの第１のＧＰＲから前記複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、前記複数のＧＰＲのうちの第２のＧＰＲから前記複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する１つまたは複数の命令を受け取るように構成されたコントローラと、
を備え、
前記１つまたは複数の命令を受け取ったことに応答して、前記コントローラが、
前記複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、前記複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第１の値をコピーさせることと、
前記初期論理ユニットに、前記第１のクロックサイクルの後にある第２のクロックサイクル中に、前記初期パイプラインレジスタに前記第２の値をコピーさせることと、
前記複数の論理ユニットのうちの最終論理ユニットに、前記第２のクロックサイクルの後にある第３のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第３のＧＰＲに前記第１の値をコピーさせることと、ここにおいて、前記第３のＧＰＲにコピーされる前記第１の値が、前記第１のＧＰＲからコピーされた前記同じ第１の値を表す、
前記最終論理ユニットに、前記第２のクロックサイクルの後にある第４のクロックサイクル中に、前記最終パイプラインレジスタから前記第４のＧＰＲに前記第２の値をコピーさせることと、ここにおいて、前記第４のＧＰＲにコピーされる前記第２の値が、前記第２のＧＰＲからコピーされた前記同じ第２の値を表す、
を行うように構成された、処理ユニット。
［Ｃ１２］
前記１つまたは複数の命令が、前記第１のＧＰＲと、前記第２のＧＰＲと、前記第３のＧＰＲと、前記第４のＧＰＲとを識別し、
前記１つまたは複数の命令が前記パイプラインレジスタのいずれをも個々に識別しない、
Ｃ１１に記載の処理ユニット。
［Ｃ１３］
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のＧＰＲが命令によって個々にアクセス可能である、Ｃ１１に記載の処理ユニット。
［Ｃ１４］
前記処理ユニットが、前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタにアクセスするとき、前記複数のＧＰＲのうちの１つのＧＰＲにアクセスするときよりも少ない電力を消費する、Ｃ１１に記載の処理ユニット。
［Ｃ１５］
前記１つまたは複数の命令は、前記第１のＧＰＲから前記第３のＧＰＲに前記第１の値が移動されることと、前記第２のＧＰＲから前記第４のＧＰＲに前記第２の値が移動されることとを要求する単一の割込み不可能な命令を備える、Ｃ１１に記載の処理ユニット。
［Ｃ１６］
前記命令が、
スワップ命令と、ここにおいて、前記第３のＧＰＲが前記第２のＧＰＲであり、ここにおいて、前記第４のＧＰＲが前記第１のＧＰＲである、
スウィズル命令と、ここにおいて、前記複数のＧＰＲが任意に位置する、
ギャザー命令と、ここにおいて、前記第１のＧＰＲと前記第２のＧＰＲとが連続して位置せず、ここにおいて、前記第３のＧＰＲと前記第４のＧＰＲとが連続して位置する、
スキャッタ命令と、ここにおいて、前記第１のＧＰＲ、ここにおいて、前記第１のＧＰＲと前記第２のＧＰＲとが連続して位置し、ここにおいて、前記第３のＧＰＲと前記第４のＧＰＲとが連続して位置しない、
からなるグループから選択される、Ｃ１５に記載の処理ユニット。
［Ｃ１７］
前記パイプラインが、１つまたは複数の算術論理ユニット（ＡＬＵ）を含むマルチサイクル計算パイプラインである、Ｃ１１に記載の処理ユニット。
［Ｃ１８］
前記１つまたは複数の命令を受け取ったことに応答して、前記コントローラが、
前記複数の論理ユニットのうちの１つの中間論理ユニットに、前記第１のクロックサイクルの後、および前記第３のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの１つの中間パイプラインレジスタに前記第１の値をコピーさせることと、
前記中間論理ユニットに、前記第２のクロックサイクルの後、および前記第４のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第２の値をコピーさせることと
を行うようにさらに構成された、Ｃ１１に記載の処理ユニット。
［Ｃ１９］
前記処理ユニットが、１つの中央処理ユニット（ＣＰＵ）または１つのグラフィカル処理ユニット（ＧＰＵ）から構成される、Ｃ１１に記載の処理ユニット。
［Ｃ２０］
前記初期論理ユニットが、
前記第１のＧＰＲから前記初期パイプラインレジスタに前記第１の値をコピーすること、または
前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタから前記初期パイプラインレジスタに前記第１の値をコピーすること
のいずれかによって前記初期パイプラインレジスタに前記第１の値をコピーするように構成され、
前記初期論理ユニットが、
前記第２のＧＰＲから前記初期パイプラインレジスタに前記第２の値をコピーすること、または
前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタから前記初期パイプラインレジスタに前記第２の値をコピーすること
のいずれかによって前記初期パイプラインレジスタに前記第２の値をコピーするように構成された、
Ｃ１１に記載の処理ユニット。
［Ｃ２１］
複数のＧＰＲのうちの第１のＧＰＲから前記複数のＧＰＲのうちの第３のＧＰＲに第１の値が移動されることと、前記複数のＧＰＲのうちの第２のＧＰＲから前記複数のＧＰＲのうちの第４のＧＰＲに第２の値が移動されることとを要求する、処理ユニットに対する１つまたは複数の命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記１つまたは複数の命令が、実行されたとき、
前記複数の論理ユニットのうちの初期論理ユニットに、第１のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第１の値をコピーさせることと、
前記初期論理ユニットに、前記第１のクロックサイクルの後にある第２のクロックサイクル中に、前記初期パイプラインレジスタに前記第２の値をコピーさせることと、
前記複数の論理ユニットのうちの最終論理ユニットに、前記第２のクロックサイクルの後にある第３のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第３のＧＰＲに前記第１の値をコピーさせることと、ここにおいて、前記第３のＧＰＲにコピーされる前記第１の値が、前記第１のＧＰＲからコピーされた前記同じ第１の値を表す、
前記最終論理ユニットに、前記第２のクロックサイクルの後にある第４のクロックサイクル中に、前記最終パイプラインレジスタから前記第４のＧＰＲに前記第２の値をコピーさせることと、ここにおいて、前記第４のＧＰＲにコピーされる前記第２の値が、前記第２のＧＰＲからコピーされた前記同じ第２の値を表す、
を前記処理ユニットに行わせる、非一時的コンピュータ可読記憶媒体。
［Ｃ２２］
前記１つまたは複数の命令が、前記第１のＧＰＲと、前記第２のＧＰＲと、前記第３のＧＰＲと、前記第４のＧＰＲとを識別し、
前記１つまたは複数の命令が前記パイプラインレジスタのいずれをも個々に識別しない、
Ｃ２１に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２３］
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のＧＰＲが命令によって個々にアクセス可能である、Ｃ２１に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２４］
前記処理ユニットが、前記複数のパイプラインレジスタのうちの１つのパイプラインレジスタにアクセスするとき、前記複数のＧＰＲのうちの１つのＧＰＲにアクセスするときよりも少ない電力を消費する、Ｃ２１に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２５］
前記処理ユニットが、単一の割込み不可能な命令を受け取ったことに応答して前記値をコピーする、Ｃ２１に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２６］
前記命令が、
スワップ命令と、ここにおいて、前記第３のＧＰＲが前記第２のＧＰＲであり、ここにおいて、前記第４のＧＰＲが前記第１のＧＰＲである、
スウィズル命令と、ここにおいて、前記複数のＧＰＲが任意に位置する、
ギャザー命令と、ここにおいて、前記第１のＧＰＲと前記第２のＧＰＲとが連続して位置せず、ここにおいて、前記第３のＧＰＲと前記第４のＧＰＲとが連続して位置する、
スキャッタ命令と、ここにおいて、前記第１のＧＰＲ、ここにおいて、前記第１のＧＰＲと前記第２のＧＰＲとが連続して位置し、ここにおいて、前記第３のＧＰＲと前記第４のＧＰＲとが連続して位置しない、
からなるグループから選択される、Ｃ２５に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２７］
実行されたとき、前記１つまたは複数の命令が、
前記複数の論理ユニットのうちの中間論理ユニットに、前記第１のクロックサイクルの後、および前記第３のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの１つの中間パイプラインレジスタに前記第１の値をコピーさせることと、
前記中間論理ユニットに、前記第２のクロックサイクルの後、および前記第４のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第２の値をコピーさせることと
を前記処理ユニットに行わせる、Ｃ２１に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２８］
コンパイラモジュールがコードを受け取ることと、
前記コンパイラモジュールが、前記コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、前記コンボ移動命令を生成することと
を備える方法であって、
ここにおいて、処理ユニットによって実行されたとき、前記コンボ移動命令が、前記複数の汎用レジスタ（ＧＰＲ）のうちの複数のソースＧＰＲから前記複数のＧＰＲのうちの複数の宛先ＧＰＲに複数の値を移動するとき、前記処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、前記複数のソースＧＰＲのうちの少なくとも１つのＧＰＲが前記複数の宛先ＧＰＲ中に含まれ、ここにおいて、前記複数のパイプラインレジスタが前記複数のＧＰＲとは異なる、方法。
［Ｃ２９］
前記コードによって示された前記複数の動作が前記コンボモード命令に組み合わせられ得ると決定することは、
前記コードによって示された前記複数の動作が、前記複数のＧＰＲの間で複数の値を移動することを含むと決定することに応答して、前記コードによって示された前記複数の動作が前記コンボモード命令に組み合わせられ得ると決定すること
を備える、Ｃ２８に記載の方法。
［Ｃ３０］
前記コードが複数の命令を備え、ここにおいて、前記方法が、
前記コンボ移動命令に組み合わせられ得る前記複数の動作に対応する前記命令を、前記生成されたコンボ移動命令と置き換えること
をさらに備える、Ｃ２８に記載の方法。
【図１】
0006301501.tif 000008
【図２】
0006301501.tif 000009
【図３Ａ】
0006301501.tif 000010
【図３Ｂ】
0006301501.tif 000011
【図３Ｃ】
0006301501.tif 000012
【図４】
0006301501.tif 000013
【図５】
0006301501.tif 000014
【図６】
0006301501.tif 000015
【図７】
0006301501.tif 000016