(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
処理演算を実施するように構成される処理回路と、
前記処理演算を実施するように前記処理回路を制御するための制御信号を生成するように、プログラム命令に応答する、命令復号器と、を備え、
前記プログラム命令は、複数のデータサイズから選択される選択されたデータサイズを示すための第１の部分と、前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも１つの制御パラメータを示すための第２の部分と、を有する、制御値を指定する、少なくとも１つの命令を含み、前記第１の部分および前記第２の部分は、各々、可変ビット数を有し、
前記命令復号器は、前記選択されたデータサイズおよび前記少なくとも１つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理回路を制御するための制御信号を生成するように、前記少なくとも１つの命令に応答し、
前記少なくとも１つの命令を処理する時、前記命令復号器および前記処理回路のうちの少なくとも１つは、前記制御値の前記第１の部分のビット数を特定するように、ならびに前記第１の部分のビット数に依存して、（ａ）前記選択されたデータサイズ、および（ｂ）前記制御値のどのビットが、前記少なくとも１つの制御パラメータを示すための前記第２の部分を形成するかを特定するように構成され、
前記少なくとも１つの命令は、ソースデータ値を特定する、ビット単位の論理命令を含み、前記ビット単位の論理命令に関して、
前記対応する処理演算は、前記ソースデータ値、および、前記制御値に基づいて判定される第２のデータ値に対する、論理演算の適用の結果と同等な結果データ値を生成することを含み、
前記選択されたデータサイズは、前記第２のデータ値内における、ビットの繰り返しパターンの一つ分のビット数を示し、
前記少なくとも１つの制御パラメータは、前記ビットの繰り返しパターンのビット値を特定するための情報を示す、データ処理装置。
【請求項２】
前記第１の部分のビット数は、前記第２の部分のビット数が、前記選択されたデータサイズに依存して減少するにつれて、前記選択されたデータサイズに依存して増加する、請求項１に記載のデータ処理装置。
【請求項３】
前記複数のデータサイズの少なくともサブセットに関して、前記第１の部分は、少なくとも第１の状態を有する第１のビット、および第２の状態を有するＸ個の残りのビットを含み、Ｘは０以上の可変整数であり、
前記命令復号器および前記処理回路のうちの少なくとも１つは、前記制御値の既定の部分内の前記第１のビットのビット位置に依存して、前記制御値の前記第１の部分のビット数を特定するように構成される、請求項１または２に記載のデータ処理装置。
【請求項４】
前記第１の部分は、前記選択されたデータサイズを特定するためのさらなる情報を提供するための少なくとも１つの追加のビットを含む、請求項３に記載のデータ処理装置。
【請求項５】
前記少なくとも１つの制御パラメータは、複数の制御パラメータを含み、
前記少なくとも１つの命令を処理する時、前記命令復号器および前記処理回路のうちの少なくとも１つは、前記第１の部分のビット数に依存して、前記複数の制御パラメータの各々が、前記第２の部分のどのビットにより示されるかを特定するように構成される、請求項１から４のいずれか１項に記載のデータ処理装置。
【請求項６】
前記複数の制御パラメータは、少なくとも、前記選択されたデータサイズが増加するにつれて増加するビット数を有する、第１の制御パラメータと、前記選択されたデータサイズが増加するにつれて減少するビット数を有する第２の制御パラメータと、を含み、
前記第２の部分は、前記第１の制御パラメータおよび前記第２の制御パラメータを示すためのサブ部分を含み、前記命令復号器および前記処理回路のうちの少なくとも１つは、前記第１の部分のビット数に依存して、前記サブ部分のどのビットが前記第１の制御パラメータを示し、前記サブ部分のどのビットが前記第２の制御パラメータを示すかを特定する、請求項５に記載のデータ処理装置。
【請求項７】
前記少なくとも１つの命令は、少なくとも１つのソースデータ要素を含むソースデータ値を特定する、少なくとも１つの単一命令複数データ（ＳＩＭＤ）命令を含み、
前記少なくとも１つのＳＩＭＤ命令に関して、前記選択されたデータサイズは、前記少なくとも１つのソースデータ要素のデータ要素サイズを示し、前記対応する処理演算は、前記ソースデータ値の前記少なくとも１つのソースデータ要素の各々において、選択された処理演算を実施することを含む、請求項１から６のいずれか１項に記載のデータ処理装置。
【請求項８】
前記少なくとも１つのＳＩＭＤ命令は、ビットフィールド操作命令を含み、前記ビットフィールド操作命令に関して、
前記対応する処理演算は、少なくとも１つの結果データ要素を含む結果データ値を生成することを含み、各結果データ要素は、前記ソースデータ値の対応するソースデータ要素に対応し、
各結果データ要素は、前記対応するソースデータ要素内の連続ビットのソースビットフィールドのビット値に対応するビット値を有する、結果ビットフィールドを含み、
前記少なくとも１つの制御パラメータは、前記ソースビットフィールドおよび前記結果ビットフィールドのそれぞれのビット数、前記対応するソースデータ要素内の前記ソースビットフィールドの位置、ならびに前記結果データ要素内の前記結果ビットフィールドの位置を示す、請求項７に記載のデータ処理装置。
【請求項９】
前記ビットフィールド操作命令に関して、前記ソースデータ値が複数のソースデータ要素を含み、前記結果データ値が複数の結果データ要素を含む場合、前記少なくとも１つの制御パラメータはまた、前記複数の結果データ要素が前記結果データ値内に配置される順序を示すためのデータ要素順序付けパラメータを含む、請求項８に記載のデータ処理装置。
【請求項１０】
前記ビット単位の論理演算は、ＡＮＤ演算、ＯＲ演算、および排他的ＯＲ演算のうちの１つを含む、請求項１から９のいずれか１項に記載のデータ処理装置。
【請求項１１】
プログラム命令に応答して、処理演算を実施するための処理装置のためのデータ処理方法であって、
複数のデータサイズから選択される選択されたデータサイズを示すための第１の部分、および前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも１つの制御パラメータを示すための第２の部分を有する、制御値を指定する、少なくとも１つの命令を受信することであって、前記第１の部分および前記第２の部分は、各々、可変ビット数を有する、受信することと、
前記少なくとも１つの命令に応答して、前記制御値の前記第１の部分のビット数を特定することと、
前記第１の部分のビット数に依存して、（ａ）前記選択されたデータサイズ、および（ｂ）前記制御値のどのビットが前記少なくとも１つの制御パラメータを示すための前記第２の部分を形成するかを特定することと、
前記選択されたデータサイズおよび前記少なくとも１つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理装置を制御することと、を含み、
前記少なくとも１つの命令は、ソースデータ値を特定する、ビット単位の論理命令を含み、前記ビット単位の論理命令に関して、
前記対応する処理演算は、前記ソースデータ値、および、前記制御値に基づいて判定される第２のデータ値に対する、論理演算の適用の結果と同等な結果データ値を生成することを含み、
前記選択されたデータサイズは、前記第２のデータ値内における、ビットの繰り返しパターンの一つ分のビット数を示し、
前記少なくとも１つの制御パラメータは、前記ビットの繰り返しパターンのビット値を特定するための情報を示す、方法。
【請求項１２】
コンピュータによって実行される時、請求項１から１０のいずれか１項に記載のデータ処理装置に従う命令実行環境を提供する、仮想機械を提供するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関する。
【背景技術】
【０００２】
データ処理システムにおいて、データ値は、時折、他のデータ値から独立して、その値が関心対象のものである、いくつかの隣接ビットを含有する場合がある。かかる隣接ビット群は、ビットフィールドと称され得、群における隣接ビットの数は、その幅と称され得る。例えば、ＲＧＢ色値を表すデータ値は、それぞれ赤、緑、および青コンポーネントを表すビットフィールドを含む場合がある。時折、ビットフィールドをその周囲から隔離するように、ビットフィールドを含有するデータ値を操作することが望ましい場合がある。例えば、ＲＧＢ色値の緑コンポーネントのみを抽出または置換したい場合がある。本技術は、多様な異なる種類のビットフィールド操作を実施するように、処理装置を制御することができる、ビットフィールド操作命令の効率的な符号化の提供を目指す。
【０００３】
本出願において、＜Ｘ：Ｙ＞という表記は、ビット位置Ｘの最上位ビットからビット位置Ｙの最下位ビットにまで及ぶ、隣接ビット群を示す。＜Ｘ：Ｙ＞によって説明される群の幅は、Ｘ−Ｙ＋１ビットである。例えば、＜４：０＞という表現は、ビット位置４から０において幅が５ビットの群を示し、ここでは、ビット＜４＞は、ビット＜０＞よりも上位である。＜Ｘ：Ｙ＞という表記は、記憶順序は、ビットの上位下位の順序と同じである必要はない（例えば、ビッグエンディアンまたはリトルエンディアン記憶形式が使用されてもよい）ため、記憶場所内のビットのいかなる特定の記憶順序も示唆しないということに留意されたい。
【０００４】
本出願において、１および０の列が続く、プレフィックス０ｂは、２進表記における数値を表す。例えば、０ｂ１１０は、１０進表記における値６を表す。
【発明の概要】
【課題を解決するための手段】
【０００５】
一態様から見ると、本発明は、データ処理装置であって、
処理演算を実施するように構成される処理回路と、
前記処理演算を実施するように前記処理回路を制御するための制御信号を生成するように、プログラム命令に応答する、命令復号器と、を備え、
前記プログラム命令は、少なくとも、各々がＮビット＜Ｎ−１：０＞を有する、少なくとも１つの第１のソースデータ要素を含む、第１のソースデータ値、各々がＮビット＜Ｎ−１：０＞を有する、少なくとも１つの第２のソースデータ要素を含む、第２のソースデータ値、および制御値を特定する、ビットフィールド操作命令を含み、
前記制御値は、ビットフィールド幅Ｗ、ソースビット位置Ａ、および結果ビット位置Ｂを示すための情報を含み、ここでは、１≦Ｗ≦Ｎ、０≦Ａ≦（Ｎ−Ｗ）、および０≦Ｂ≦（Ｎ−Ｗ）であり、
前記命令復号器は、少なくとも１つの結果データ要素を含む結果データ値を生成するように、前記処理回路を制御するための制御信号を生成するように、前記ビットフィールド操作命令に応答し、各結果データ要素は、対応する第１のソースデータ要素、および対応する第２のソースデータ要素に対応し、各結果データ要素は、
（ａ）  前記対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞に対応するビット値を有する、ビット＜Ｂ＋Ｗ−１：Ｂ＞と、
（ｂ）  Ｂ＋Ｗ＜Ｎである場合、（ｉ）各々がゼロ値を有するビットを含む第１のプレフィックス値、（ｉｉ）前記対応する第２のソースデータ要素のビット＜Ｎ−１：Ｂ＋Ｗ＞の前記ビット値を有する、第２のプレフィックス値、および（ｉｉｉ）前記対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞の符号拡張に対応するビット値を有する、第３のプレフィックス値のうちの１つとして、前記制御値に依存して選択されるプレフィックス値に対応するビット値を有する、ビット＜Ｎ−１：Ｂ＋Ｗ＞と、
（ｃ）  Ｂ＞０である場合、（ｉ）各々がゼロ値を有するビットを含む第１のサフィックス値、および（ｉｉ）前記対応する第２のソースデータ要素のビット＜Ｂ−１：０＞の前記ビット値を有する、第２のサフィックス値のうちの１つとして、前記制御値に依存して選択されるサフィックス値に対応するビット値を有する、ビット＜Ｂ−１：０＞と、を含む、Ｎビット＜Ｎ−１：０＞を有し、
前記ビットフィールド操作命令は、前記ソースビット位置Ａ＝０であり、前記結果ビット位置Ｂ＞０である、ビットフィールド挿入形態と、前記ソースビット位置Ａ≧０であり、前記結果ビット位置Ｂ＝０である、ビットフィールド抽出形態とを有し、
前記制御値は、前記ビットフィールド幅Ｗ、前記ソースビット位置Ａ、および前記結果ビット位置Ｂを判定するために、最上位ビット位置Ｓおよび回転パラメータＲを指定し、
Ｓ≧Ｒである場合、前記ソースビット位置Ａ＝Ｒであり、前記結果ビット位置Ｂ＝０であり、前記ビットフィールド幅Ｗ＝（Ｓ＋１）−Ｒであり、前記ビットフィールド操作命令は、前記ビットフィールド抽出形態を有し、
Ｓ＜Ｒである場合、前記ソースビット位置Ａ＝０であり、前記結果ビット位置Ｂ＝Ｎ−Ｒであり、前記ビットフィールド幅Ｗ＝Ｓ＋１であり、前記ビットフィールド操作命令は、前記ビットフィールド挿入形態を有する、データ処理装置を提供する。
【０００６】
処理装置には、処理回路と、ビットフィールド操作演算を実施するように、処理回路を制御するように、ビットフィールド操作命令に応答する命令復号器と、が提供される。ビットフィールド操作命令は、少なくとも１つの第１のソースデータ要素を含む、第１のソースデータ値と、少なくとも１つの第２のソースデータ要素を含む、第２のソースデータ値とを、少なくとも特定する。ビットフィールド操作命令に応答して、処理回路は、少なくとも１つの結果データ要素を含む、結果データ値を生成するように制御される。各第１のソースデータ要素、第２のソースデータ要素、および結果データ要素は、Ｎビット＜Ｎ−１：０＞を有する。
【０００７】
各Ｎ−ビットの結果データ要素は、第１のソースデータ値の対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞に対応するビット値を有する、Ｗビット＜Ｂ＋Ｗ−１：Ｂ＞を含む。したがって、各結果データ要素は、対応する第１のソースデータ要素から抽出される、Ｗビットのビットフィールドを含む。ソースビット位置Ａは、第１のソースデータ要素内のビットフィールドの最下位ビットの位置を示し、結果ビット位置Ｂは、結果データ要素内のビットフィールドの最下位ビットを示し、ビットフィールド幅Ｗは、ビットフィールドによって含まれるビット数を示す。Ａ、Ｂ、およびＷという量は、１≦Ｗ≦Ｎ、０≦Ａ≦Ｎ−Ｗ、および０≦Ｂ≦Ｎ−Ｗの範囲内にあり、ビットフィールド操作命令内の制御値によって特定される。制御値は、直接的に、またはＡ、Ｂ、およびＷを導出するために使用することができる任意の組のパラメータを使用して間接的に、Ａ、Ｂ、およびＷを特定してもよい。制御値は、ビットフィールド操作命令符号化内の一組の連続ビットである必要はないが、命令符号化にわたり分布される２つ以上のビット群を含んでもよいということに留意されたい。
【０００８】
制御値が、Ｂ＋Ｗ＜Ｎであることを示す場合、各結果データ要素は、結果データ要素内のビットフィールドの最上位ビット＜Ｂ＋Ｗ−１＞よりも上位であるビット＜Ｎ−１：Ｂ＋Ｗ＞を含む、プレフィックス部分を含むであろう。本技術は、プレフィックス部分のビット値を設定するための異なるオプションを提供する。ビットフィールド操作命令の制御値は、何のタイプのプレフィックス部分が特定のビットフィールド操作のために使用されるかを示す情報を含む。制御値に依存して、プレフィックス値は、第１のプレフィックス値、第２のプレフィックス値、および第３のプレフィックス値のうちの１つとして選択される。
【０００９】
第１のプレフィックス値は、各々がゼロ値を有するビットを含む。第１のプレフィックス値が選択される時、各結果データ要素は、対応するソースデータ要素から抽出されるビットフィールドを含有し、ビットフィールドよりも上位のいずれのビットもゼロに設定される。これは、ビットフィールドの値を、ソースデータ要素の他の部分とは別個に処理することができるように、ソースデータ要素のビットフィールドを隔離するのに有用であり得る。
【００１０】
第２のプレフィックス値は、対応する第２のソースデータ要素のビット＜Ｎ−１：Ｂ＋Ｗ＞のビット値を有する。したがって、第２のプレフィックス値が選択される時、ビットフィールド操作は、第２のソースデータ要素内に、第１のソースデータ要素のビットフィールドを挿入するのと同等な結果をもたらし、第２のソースデータ要素のどのより上位のビットも変化していないままである。これは、２つ以上のデータ値の部分を、単一のデータ値に組み合わせるのに有用であり得る。例えば、組み合わされたＲＧＢ色値は、ＲＧＢコンポーネントのうちの１つを含有するデータ値内に、他方の２つのコンポーネントに対応するビットフィールドを挿入するように、第２のプレフィックス形態のビットフィールド操作命令を使用することによって、別個のＲＧＢコンポーネント値から組み立てることができる。
【００１１】
第３のプレフィックス値は、対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞の符号拡張に対応するビット値を有する。これは、符号拡張は、それが結果データ要素内に含まれる時、第１のソースデータ要素のビットフィールドの符号を保存するため、符号付きの値を表すビットフィールドに対して有用である。例えば、第１のソースデータ要素から抽出されるビットフィールド＜Ａ＋Ｗ−１：Ａ＞が、負の数を表していた場合、第３のプレフィックス値によって提供される符号拡張は、結果データ要素内のビットフィールドの負の符号を維持する。
【００１２】
第１、第２、および第３のプレフィックス値のうちの適切なものを選択することによって、異なる種類のビットフィールド操作は、同じビットフィールド操作命令によって符号化することができる。単一のビットフィールド操作命令は、複数の異なる操作演算を提供することができるため、命令セットの符号化空間は、効率的に使用される。当業者は、ビットフィールド操作命令を実装するためのハードウェアが、多様な異なる形態を有してもよいということ、ならびに処理回路および命令復号器が、上で説明される形態の少なくとも１つの結果データ要素を有する結果値を生成する、いかなる種類のハードウェアも備えてもよいということを理解するであろう。
【００１３】
第３のプレフィックス値の符号拡張ビットは、データ値に対して使用される符号表現のタイプに依存して、異なる形態を有してもよい。しかしながら、一実施形態において、第３のプレフィックス値は、各々が対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１＞のビット値を有する、ビットを含んでもよい。多くの符号付きの２進数表現において、データ値が正または負であるかどうかを示す符号ビットは、そのデータ値の最上位ビットである。第１のソースデータ要素から抽出されるビットフィールドの最上位ビットは、ビット＜Ａ＋Ｗ−１＞であり、したがって、第３のプレフィックス値のビットの各々においてこのビットを複製することによって、抽出されたビットフィールドの符号は、そのビットフィールドが結果データ値内に挿入される時、維持される。
【００１４】
制御値が、結果ビット位置Ｂをゼロより大きいと定義する場合、結果データ要素は、ビットフィールドの最下位ビット＜Ｂ＞よりも下位の少なくとも１つのビット＜Ｂ−１：０＞を含む、サフィックス部分を有する。制御値に依存して、サフィックス値は、各々がゼロ値を有するビットを含む第１のサフィックス値、および対応する第２のソースデータ要素のビット＜Ｂ−１：０＞のビット値を有する第２のサフィックス値のうちの１つとして、選択されてもよい。第１のサフィックス値を選択することによって、ビットフィールドは、より下位のビットがゼロ値を有する状態で、結果データ要素内で隔離することができる。第２のサフィックス値を使用することによって、ビットフィールド操作は、第２のソースデータ要素のより下位のビットが変化していない状態で、第１のソースデータ要素のビットフィールドを、第２のソースデータ要素内に効果的に挿入する。
【００１５】
後に説明される実施形態において、命令符号化は、第２のプレフィックス値が選択される時に、第２のサフィックス値が選択され、第１および第３のプレフィックス値のうちの１つが選択される時に、第１のサフィックス値が選択されると説明されるが、第１、第２、および第３のプレフィックス値のうちの１つの、第１および第２のサフィックス値のうちの１つとのいかなる任意の組み合わせもまた、使用されてもよいということが理解されるであろう。
【００１６】
データ処理装置は、前記処理回路によって処理するためのデータ値を記憶するように構成される複数の記憶場所を備えてもよく、
前記ビットフィールド操作命令は、少なくとも、前記第１のソースデータ値を記憶するための第１のソース記憶場所、および宛先記憶場所を特定し、
前記命令復号器は、前記結果データ値を前記宛先記憶場所に記憶するように、前記処理回路を制御するための制御信号を生成するように、前記ビットフィールド操作命令に応答する。
【００１７】
ビットフィールド操作命令の一実施形態において、命令は、少なくとも、第１のソースデータ値を記憶するための第１のソース記憶場所、および生成された結果データ値を記憶するための宛先記憶場所を特定する。記憶場所は、例えば、レジスタ、メモリの場所、または処理回路によって処理するためのデータを記憶するための任意の他のデータストアであってもよい。
【００１８】
任意に、ビットフィールド操作命令は、第２のソースデータ値を記憶するための第２のソース記憶場所を指定してもよく、または第２のソースデータ値は、命令内で直接特定される即値であってもよい。
【００１９】
代替的に、一実施形態において、第２のソースデータ値は、ビットフィールド操作命令の実行の前に、宛先記憶場所に存在するデータ値であってもよい。この場合、結果データ値は、宛先記憶場所内の第２のソースデータ値を上書きする。ビットフィールド操作命令の制御値が、第２のプレフィックス値および第２のサフィックス値が選択されるようなものである場合、ビットフィールド操作の結果は、第１のソースデータ値からのビットフィールドが、宛先記憶場所の他のビットが変化していないままの状態で、宛先記憶場所内に挿入されることである。
【００２０】
一部の処理装置は、記憶場所（例えば、レジスタ）が、複数の異なる記憶場所サイズの記憶場所としてアクセスされることを可能にすることができる。したがって、ビットフィールド操作命令の制御値は、第１のソース記憶場所および宛先記憶場所の記憶場所サイズを特定するための情報を含んでもよい。記憶場所は、異なる方法で実装されてもよい。一実施形態において、異なるサイズ（例えば、６４ビットの記憶場所の１つの群、および３２ビットの記憶場所の別の群）を有する、物理的に異なる記憶場所が存在してもよい。代替的に、共通の組の記憶場所が、異なる記憶場所サイズでアクセス可能であってもよい。例えば、同じ６４ビットの記憶場所は、６４ビットのデータアクセスおよび３２ビットのデータアクセスの対象であってもよい。６４ビットの記憶場所の３２ビットのデータアクセス中、記憶場所のビットのうちの３２のみが、読み取られ得るか、または代替的に、記憶場所の全ての６４ビットが読み取られてもよいが、次いで、ビットのうちの３２は、データ値の任意の更なる処理を実施する前に破棄されてもよい。同様に、３２ビットのデータ値が６４ビットの記憶場所に書き込まれる時、他方の３２ビットは、何らかの既定の値に、または３２ビットのデータの符号拡張に設定されてもよく、または変化していないままとされてもよい。
【００２１】
一部の実施形態において、第１のソースデータ値、第２のソースデータ値、および結果データ値内に含まれる、１つ以上のデータ要素は、複数の異なるデータ要素サイズの中から選択される、データ要素サイズＮを有してもよい。この場合、ビットフィールド操作命令の制御値もまた、データ要素サイズＮを直接的または間接的に特定する情報を含んでもよい。可変データ要素サイズを提供することは、例えば、単一命令複数データ（ＳＩＭＤ）処理演算に対して有用であり得、ここでは、ビットフィールド操作が、第１のソースデータ値、第２のソースデータ値、および結果データ値内の複数の組の対応するデータ要素に対して、並行して適用される。
【００２２】
第１のソースデータ要素および結果データ要素内のビットフィールドの位置を示す、ビット位置ＡおよびＢは、ビットフィールド操作命令の制御値によって特定される。ビットフィールド操作命令の一実施形態において、制御値は、ソースデータ要素内のいずれの位置からのビットフィールドも、結果データ要素内のいずれの場所にもコピーすることができるように、ＡおよびＢのいずれの任意の値も特定してもよい。
【００２３】
しかしながら、一実施形態において、ビットフィールド操作命令は、ソースビット位置Ａおよび結果ビット位置Ｂのうちの１つが、ゼロの値を有するように、符号化を有する。本技術は、最も一般的に所望されるタイプのビットフィールド操作演算に関して、ソースビット位置Ａおよび結果ビット位置Ｂのうちの少なくとも１つが、ゼロであることを認識する。ＡおよびＢのうちの１つをゼロに等しく設定することによって、ＡおよびＢのうちのゼロではないもののみが、制御値によって特定されることが必要であり、そのため、命令符号化がより効率的になる。命令のビットフィールド挿入形態において、ソースデータ要素の最下位部分＜Ｗ−１：０＞に位置付けられるビットフィールドが、結果データ要素の任意の部分＜Ｂ＋Ｗ−１：Ｂ＞に挿入されるように、Ａ＝０、およびＢ＞０である。命令のビットフィールド抽出形態において、ビットフィールドが、ソースデータ要素の任意の部分＜Ａ＋Ｗ−１：Ａ＞から抽出され、結果データ要素の最下位部分＜Ｗ−１：０＞にコピーされるように、Ａ≧０、およびＢ＝０である。命令の抽出および挿入形態は、ビットフィールド操作の最も一般的な形態を満たす。それにもかかわらず、ＡおよびＢの両方にゼロではない値が所望されるビットフィールド操作が所望される場合、これは、依然として、２つのビットフィールド操作命令：ソース値の任意の位置Ａからソースビットフィールドを抽出し、一時的な記憶場所の最下位部分にビットフィールドをコピーするためのビットフィールド抽出形態の命令、および一時的な記憶場所の最下位部分からビットフィールドを取り、このビットフィールドを結果値内の任意の位置Ｂに挿入するためのビットフィールド挿入形態の命令を使用して、実施することができる。
【００２４】
一実施形態において、装置は、前記制御値が、前記ビットフィールド幅Ｗ、前記ソースビット位置Ａ、および前記結果ビット位置Ｂを判定するために、最上位ビット位置Ｓおよび要素回転パラメータＲを指定するように、構成されてもよく、
Ｓ≧Ｒである場合、前記ソースビット位置Ａ＝Ｒであり、前記結果ビット位置Ｂ＝０であり、前記ビットフィールド幅Ｗ＝（Ｓ＋１）−Ｒであり、前記ビットフィールド操作命令は、前記ビットフィールド抽出形態を有し、
Ｓ＜Ｒである場合、前記ソースビット位置Ａ＝０であり、前記結果ビット位置Ｂ＝Ｎ−Ｒであり、前記ビットフィールド幅Ｗ＝Ｓ＋１であり、前記ビットフィールド操作命令は、前記ビットフィールド挿入形態を有する。
【００２５】
ビットフィールド操作命令のこの符号化は、２つのパラメータＳおよびＲが、少なくとも、（ａ）ビットフィールド操作命令が、ビットフィールド抽出形態またはビットフィールド挿入形態かどうか、（ｂ）第１のソースデータ要素内のビットフィールドの位置を示すソースビット位置Ａ、（ｃ）結果データ要素内のビットフィールドの位置を示す結果ビット位置Ｂ、および（ｄ）ビットフィールドによって含まれるビット数を示すビットフィールド幅Ｗを特定するのに十分であるため、特に効率的である。
【００２６】
ビットフィールド挿入形態およびビットフィールド抽出形態の両方に関して、最上位ビット位置Ｓは、第１のソースデータ要素内のビットフィールドの最上位ビットのビット位置を表し、要素回転パラメータＲは、ソースビット位置Ａが結果ビット位置Ｂに移動された場合、各ソースデータ要素がその分右に回転されるであろう、ビット位置の数を表す。ビットフィールド挿入形態に関して、Ｒは、第１のソースデータ要素内のビットフィールドの最下位ビットのビット位置を表す一方、ビットフィールド抽出形態に関して、（Ｎ−Ｒ）の値は、結果データ要素内のビットフィールドの最下位ビット位置を特定する（ここで、Ｎは、データ要素サイズである）。
【００２７】
要素回転パラメータＲが、ソースビット位置Ａが結果ビット位置Ｂに移動された場合、各ソースデータ要素がその分右に回転されるであろう、ビット位置の数を表す一方、第１のソースデータ要素から結果データ要素を生成する時、実際に右回転を実施することは不可欠ではない。例えば、右回転の代わりに同等な左回転が使用されてもよく、または実際に回転を実施することなく、結果データ要素が生成されてもよい。
【００２８】
一実施形態において、最上位ビット位置Ｓは、ビットフィールド符号−ビットパラメータＳを含んでもよい。第１のソースデータ要素が、符号付きのデータ値である場合、最上位ビット位置Ｓはまた、第１のソースデータ要素内の符号ビットの位置を特定する（上で言及される（ａ）から（ｄ）の項目を特定することに加えて）。
【００２９】
装置は、前記制御値が、各々が可変ビット数を含む、第１の部分および第２の部分を含むように、配設されてもよく、
前記命令復号器および前記処理回路のうちの少なくとも１つは、前記制御値の前記第１の部分によって含まれるビット数を判定するように、および前記第１の部分によって含まれるビット数に基づいて、
（ａ）  前記少なくとも１つの第１のソースデータ要素のデータ要素サイズＮ、前記少なくとも１つの第２のソースデータ要素、および前記少なくとも１つの結果データ要素、ならびに
（ｂ）  前記第２の部分のどのビットが、前記最上位ビット位置Ｓおよび前記回転パラメータＲを示すか、
を判定するように、前記ビットフィールド操作命令に応答する。
【００３０】
データ要素サイズＮが大きいほど、ＲおよびＳの可能な値は大きい。したがって、ＲおよびＳを表すために必要とされるビット数は、特定の演算に対して選択されるデータ要素サイズＮに依存して変化する。制御値内に、ＲおよびＳの最大の可能な値を特定するのに十分である固定ビット数を割り当てることが可能であろう一方、制御値に各々が可変長の第１の部分および第２の部分を提供することによって、より効率的な符号化を達成することができる。制御値のビットは、使用されているデータ要素サイズＮに依存して、第１の部分または第２の部分のいずれかに可変的に割り当てることができる。可変長の第１の部分のサイズを検出することによって、装置は、データ要素サイズＮ、ならびに第２の部分のどのビットが最上位ビット位置Ｓおよび回転パラメータＲを表すかを特定することができる。
【００３１】
一部の実施形態において、結果データ値は、第１および第２のソースデータ値内の対応する第１および第２のソースデータ要素と同じ順序で配置される結果データ要素を伴って生成されてもよい。
【００３２】
しかしながら、他の実施形態は、前記第１のソースデータ値が複数の第１のソースデータ要素を含み、前記第２のソースデータ値が複数の第２のソースデータ要素を含み、前記結果データ値が複数の結果データ要素を含む場合、前記制御値は、前記複数の結果データ要素が前記結果データ値内に配置される順序を示すためのデータ要素順序付け情報を含むように、配置されてもよい。
【００３３】
したがって、ビットフィールド操作命令はまた、所望される場合、データ要素再順序付けを実装するために使用することができる。例えば、２つの結果データ要素ＡおよびＢを含む結果データ値が、対応する第１のソースデータ要素Ａ’およびＢ’を含む第１のソースデータ値、ならびに対応する第２のソースデータ要素Ａ’’およびＢ’’を含む第２のソースデータ値に基づいて、生成されてもよい。次いで、制御値によって示されるデータ要素順序付け情報は、結果データ要素が、順序ＡＢ（ソースデータ値内の対応するソースデータ要素の順序に対応する）で、または反対の順序ＢＡで、配置されるかどうかを指定してもよい。
【００３４】
ビットフィールド操作命令は、所望される場合、ビットフィールド操作がそのデータ値において実施される場合でさえも、データ値内のデータ要素の再順序付けを実装するために使用されてもよいということに留意されたい。これは、結果データ値内のデータ要素が、データ要素順序付け情報に依存して再順序付けされている状態で、ビットフィールド操作演算が、第１のソースデータ値全体を結果データ値にコピーする効果を有するように、ビットフィールド幅Ｗをデータ要素サイズＮと同じに設定することによって行うことができる。したがって、本技術は、ビットフィールド操作だけでなく、データ要素の再順序付けも実装することができる、多用途の命令を提供する。
【００３５】
１つの例示的な実施形態において、装置は、前記第１のソースデータ値が複数の第１のソースデータ要素を含み、前記第２のソースデータ値が複数の第２のソースデータ要素を含み、前記結果データ値が複数の結果データ要素を含む場合、前記結果データ値が、
（ａ）  前記第１のソースデータ値内の対応する第１のソースデータ要素の順序、および前記第２のソースデータ値内の対応する第２のソースデータ要素の順序に対応して順序付けられる、前記結果データ要素を含む中間値を生成すること、ならびに
（ｂ）  前記第１のデータ値を生成するように、前記中間値内の前記結果データ要素における少なくとも１つの再順序付けの反復を実施すること、
によって得られる第１のデータ値と同等であるように構成されてもよく、
各再順序付けの反復は、前記データ要素順序付け情報の対応するビットが、既定の値を有するかどうかを判定することと、前記データ要素順序付け情報の前記対応するビットが前記既定の値を有する場合、前記中間値内のビット群の対を交換することと、を含む。
【００３６】
一実施形態において、中間値内のビット群の交換された対は、ビット群の隣接対を含む。
【００３７】
データ要素再順序付けを実装する一方法は、（ａ）上で説明されるようなビットフィールド操作演算を使用して、ビットフィールド操作に起因する結果データ要素が、第１および第２のソースデータ値内の対応する第１および第２のソースデータ要素と同じ順序で順序付けられる、中間値が生成された場合、ならびに（ｂ）第１のデータ値を生成するために、一連の１つ以上の再順序付けの反復が中間値に適用された場合（各再順序付けの反復は、データ要素順序付け情報の対応するビットが既定の値を有する場合、中間値内のビット群の対を交換することを含む）に、生成されるであろう第１のデータ値と同等である形態の結果データ値を生成することである。
【００３８】
結果データ値は、上で説明されるようなステップ（ａ）および（ｂ）を実施することによって、実際に生成される必要はないということに留意されたい。一部の実装において、処理回路は、単一演算において、ビットフィールド操作演算が第１の／第２のソースデータ値に基づいて実施されており、結果データ要素もまた結果データ値内の所望される順序で順序付けられている、最終結果値を生成してもよい。したがって、上で説明される中間値が処理回路によって生成される、または処理回路が実際に再順序付けの反復を実施する必要はない。最終結果データ値は、中間値における、かかる再順序付けの反復の実施に起因するであろう第１のデータ値と同等である値を有する。
【００３９】
一部の実施形態において、再順序付けの反復が、任意のビット数を有するビット群の対を交換してもよい一方、データ要素順序付け情報の符号化、および結果データ値を生成するためのハードウェアの構成は、ビット群がデータ要素サイズＮの倍数であるビット数を含む場合、簡略化することができる。例えば、再順序付けの反復は、単一のデータ要素の対を交換してもよいか、または２つ、４つ以上のデータ要素群の対を交換してもよい。
【００４０】
一実施形態において、ビット群は、少なくとも１つの再順序付けの反復のうちの異なるものに対して、異なるビット数を含んでもよい。異なる群サイズのビット（またはデータ要素）群を交換するための一連の再順序付けの反復は、広範な可能なデータ要素の配置が結果データ値内に提供されることを可能にする。
装置は、前記制御値が、各々が可変ビット数を含む第１の部分および第２の部分を含み、
前記命令復号器および前記処理回路のうちの少なくとも１つが、前記制御値の前記第１の部分によって含まれるビット数を判定するように、および前記第１の部分によって含まれるビット数に基づいて、
（ａ）  前記少なくとも１つの第１のソースデータ要素、前記少なくとも１つの第２のソースデータ要素、および前記少なくとも１つの結果データ要素のデータ要素サイズＮ、ならびに
（ｂ）  前記第２の部分のどのビットが、前記データ要素順序付け情報を示すか、
を判定するように、前記ビットフィールド操作命令に応答するように、構成されてもよい。
【００４１】
上で説明されるパラメータＳおよびＲと同様に、データ要素順序付け情報は、各々が可変ビット数を有する第１の部分および第２の部分を使用して符号化されてもよい。これは、データ要素順序付け情報が、典型的に、いくつのデータ要素がデータ値内に存在しているかに依存する（データ要素の数が大きければ、可能である再順序付け順列の数は多くなる）、ビット数を必要とするため、有用である。データ要素の数は、データ要素サイズＮに依存し、そのため、データ要素順序付け情報を表すために必要とされるビット数は、データ要素サイズＮとは逆に変化してもよい（データ要素サイズが大きければ、可能である再順序付け順列は少なくなる）。したがって、ビットフィールドパラメータＳおよびＲに関して上で説明されるような制御値に対する符号化スキームは、同様に、効率的にデータ要素順序付け情報を表すために使用することができる。
【００４２】
さらなる態様から見ると、本発明は、処理演算を実施するための処理装置のためのデータ処理方法を提供し、該方法は、
ビットフィールド操作命令に応答して、少なくとも、各々がＮビット＜Ｎ−１：０＞を有する、少なくとも１つの第１のソースデータ要素を含む、第１のソースデータ値、各々がＮビット＜Ｎ−１：０＞を有する、少なくとも１つの第２のソースデータ要素を含む、第２のソースデータ値、および制御値を特定することと、各々がＮビット＜Ｎ−１：０＞を有する少なくとも１つの結果データ要素を含む、結果データ値を生成するように、前記処理装置を制御するための制御信号を生成することと、を含み、各結果データ要素は、対応する第１のソースデータ要素および対応する第２のソースデータ要素に対応し、
前記制御値は、ビットフィールド幅Ｗ、ソースビット位置Ａ、および結果ビット位置Ｂを示すための情報を含み、ここでは、１≦Ｗ≦Ｎ、０≦Ａ≦Ｎ−Ｗ、および０≦Ｂ≦Ｎ−Ｗであり、各結果データ要素は、
（ａ）  前記対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞に対応するビット値を有する、ビット＜Ｂ＋Ｗ−１：Ｂ＞と、
（ｂ）  Ｂ＋Ｗ＜Ｎである場合、（ｉ）各々がゼロ値を有するビットを含む第１のプレフィックス値、（ｉｉ）前記対応する第２のソースデータ要素のビット＜Ｎ−１：Ｂ＋Ｗ＞の前記ビット値を有する、第２のプレフィックス値、および（ｉｉｉ）前記対応する第１のソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞の符号拡張に対応するビット値を有する、第３のプレフィックス値のうちの１つとして、前記制御値に依存して選択されるプレフィックス値に対応するビット値を有するビット＜Ｎ−１：Ｂ＋Ｗ＞と、
（ｃ）  Ｂ＞０である場合、（ｉ）各々がゼロ値を有するビットを含む第１のサフィックス値、および（ｉｉ）前記対応する第２のソースデータ要素のビット＜Ｂ−１：０＞の前記ビット値を有する、第２のサフィックス値のうちの１つとして、前記制御値に依存して選択されるサフィックス値に対応するビット値を有する、ビット＜Ｂ−１：０＞と、を含み、
前記ビットフィールド操作命令は、前記ソースビット位置Ａ＝０であり、前記結果ビット位置Ｂ＞０である、ビットフィールド挿入形態と、前記ソースビット位置Ａ≧０であり、前記結果ビット位置Ｂ＝０である、ビットフィールド抽出形態とを有し、
前記制御値は、前記ビットフィールド幅Ｗ、前記ソースビット位置Ａ、および前記結果ビット位置Ｂを判定するために、最上位ビット位置Ｓおよび回転パラメータＲを指定し、
Ｓ≧Ｒである場合、前記ソースビット位置Ａ＝Ｒであり、前記結果ビット位置Ｂ＝０であり、前記ビットフィールド幅Ｗ＝（Ｓ＋１）−Ｒであり、前記ビットフィールド操作命令は、前記ビットフィールド抽出形態を有し、
Ｓ＜Ｒである場合、前記ソースビット位置Ａ＝０であり、前記結果ビット位置Ｂ＝Ｎ−Ｒであり、前記ビットフィールド幅Ｗ＝Ｓ＋１であり、前記ビットフィールド操作命令は、前記ビットフィールド挿入形態を有する。
【００４３】
別の態様から見ると、本発明は、データ処理装置であって、
処理演算を実施するように構成される処理回路と、
前記処理演算を実施するように前記処理回路を制御するための制御信号を生成するように、プログラム命令に応答する、命令復号器と、を備え、
前記プログラム命令は、複数のデータサイズから選択される選択されたデータサイズを示すための第１の部分と、前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも１つの制御パラメータを示すための第２の部分と、を有する、制御値を指定する、少なくとも１つの命令を含み、前記第１の部分および前記第２の部分は、各々、可変ビット数を有し、
前記命令復号器は、前記選択されたデータサイズおよび前記少なくとも１つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理回路を制御するための制御信号を生成するように、前記少なくとも１つの命令に応答し、
前記少なくとも１つの命令を処理する時、前記命令復号器および前記処理回路のうちの少なくとも１つは、前記制御値の前記第１の部分によって含まれるビット数を特定するように、ならびに前記第１の部分によって含まれる前記ビット数に依存して、（ａ）前記選択されたデータサイズ、および（ｂ）前記制御値のどのビットが、前記少なくとも１つの制御パラメータを示すための前記第２の部分を形成するかを特定するように構成される、データ処理装置を提供する。
【００４４】
上で言及されるように、ビットフィールド操作命令は、ビットフィールド操作に供される、データ要素のサイズを示す、選択されたデータ要素サイズと関連付けられてもよい。ビットフィールド操作演算を制御するための制御パラメータは、データ要素サイズに依存する可変ビット数を有してもよく、そのため、上で説明されるように、効率的にこれらの制御パラメータを特定するために、可変長の第１および第２の部分を使用する符号化スキームを使用することができる。
【００４５】
制御値のこのタイプの符号化はまた、複数のデータサイズの中から選択されるデータサイズと、選択されたデータサイズに依存するビット数を有する少なくとも１つの制御パラメータとに依存する、処理演算と関連付けられる、他の種類の命令に対して使用されてもよい。かかる命令に関して、命令は、各々が可変ビット数を有する第１の部分および第２の部分を有する制御値を指定してもよい。第１の部分によって含まれるビット数を特定することによって、命令復号器および処理回路のうちの少なくとも１つは、選択されたデータサイズを決定し、制御値のどのビットが、少なくとも１つの制御パラメータを表す第２の部分に対応するかを特定することができる。この形態の命令符号化は、様々なタイプの命令に適用することができ、ビット数が選択されたデータサイズに依存して変化する、符号化制御パラメータの効率的な方法を提供する。
【００４６】
「部分」という用語は、必ずしも、制御値内のビットの連続的な部分を表す必要はないが、それらのビットが隣接ビット位置を有しない場合でさえも、制御値のいずれの任意のビット群を指してもよいということに留意されたい。
【００４７】
利用可能な命令セットが、その命令と関連付けられる制御パラメータおよびデータサイズを特定するように、各々が制御値のこの共通の符号化形式を使用する、複数の異なる種類の命令を含む実施形態において、制御値を復号化するためのハードウェアの一部は、異なる種類の命令に対して再利用することができるため、命令復号器および／または処理回路をより効率的にすることができる。
【００４８】
この技術は、第２の部分のビット数が選択されたデータサイズに依存して減少するにつれて、第１の部分のビット数が選択されたデータサイズに依存して増加する場合、特に有用である。第２の部分のビット数が減少するにつれて、第１の部分のビット数を増加させること、およびその逆によって、第１の部分は、選択されたデータサイズを示すために、第２の部分によって必要とされない制御値のいずれもビットも使用することができる。したがって、制御値の合計サイズは、制御値の異なるビットが、使用されている特定のデータサイズに依存して、第１の部分または第２の部分のいずれかに適切に割り当てられている状態で、選択されたデータサイズにかかわらずに同じのままであることができる。
【００４９】
一実施形態において、制御値の第１の部分は、前記複数のデータサイズの少なくともサブセットに関して、前記第１の部分が、少なくとも、第１の状態を有する第１のビット、および第２の状態を有するＸ個の残りのビットを含むように符号化されてもよく、ここでは、Ｘは、０以上の可変整数であり、
前記命令復号器および前記処理回路のうちの少なくとも１つは、前記制御値の既定の部分内の前記第１のビットのビット位置に依存して、前記制御値の前記第１の部分によって含まれるビット数を特定するように構成される。
【００５０】
本実施形態において、第１の部分は、第１の状態（例えば、「０」状態または「１」状態）を有する、少なくとも１つのビットを含む。第１の部分のゼロ、１以上の残りのビットは、第２の状態（例えば、「０」および「１」状態の他方）を有する。一実施形態において、第２の状態を有する第１の部分のゼロ、１以上のビットは、所与のデータサイズに対して、少なくとも１つの制御パラメータを示すための第２の部分によって必要とされない制御値のビット位置を埋めるための「パディング」ビットとして効果的に使用されてもよい。第２の状態を有するビットの数に依存して、第１の状態を有するビットの位置は、変化することができる。次いで、データサイズは、第１の状態を有するビットのビット位置に基づいて、特定することができる。
【００５１】
第１の状態を有する第１のビットのビット位置に基づいて、第１の部分のサイズ（および、したがって、選択されたデータサイズ）を検出する技術は、多くの実装において、利用可能なデータサイズが、２のべき乗で上昇し、そのため、第１の状態を有するビットのビット位置は、しばしば、選択されたデータサイズに対して２の特定のべき乗に相関させることができるため、特に有用である。
【００５２】
第１の状態を有する第１の部分のビットのビット位置を特定するこの技術は、データ要素サイズを特定するために使用される唯一の技術である必要はない。選択されたデータサイズを特定するためのさらなる情報を提供する、少なくとも１つの追加のビットもまた存在してもよい。
【００５３】
単一の制御パラメータのみを表すために本制御値符号化技術を使用することが可能である一方、本技術は、複数の制御パラメータが存在する時に、特に有用である。この場合、少なくとも１つの命令を処理する時、命令復号器または処理回路は、第１の部分によって含まれるビット数に依存して、第２の部分のどのビットが、複数の制御パラメータの各々を示すかを特定するように構成されてもよい。
【００５４】
複数の制御パラメータが存在する時、本符号化技術は、制御パラメータが、少なくとも、選択されたデータサイズが増加するにつれて増加するビット数を有する第１の制御パラメータ、および選択されたデータサイズが増加するにつれて減少するビット数を有する第２の制御パラメータを含む場合、特に有用である。この場合、第２の部分は、第１および第２の制御パラメータを示すサブ部分を含んでもよく、そのサブ部分のビットは、選択されたデータサイズに依存して、第１の制御パラメータまたは第２の制御パラメータに割り当てられている。選択されたデータサイズが増加するにつれてビット数が増加する制御パラメータを、選択されたデータサイズが増加するにつれてビット数が減少する別の制御パラメータと対にすることは、所与のデータサイズに対する第１の制御パラメータを示すために必要とされないビットを、第２の制御パラメータを示すために再割り当てすることができ、逆も同様であるため、制御値の効率的な符号化をもたらす。
【００５５】
上で言及されるように、本符号化技術は、様々な異なるタイプの命令に適用されてもよい。本技術が特に有用である１つのタイプの命令は、少なくとも１つのソースデータ要素を有するソースデータ値を特定する、単一命令複数データ（ＳＩＭＤ）命令である。少なくとも１つのＳＩＭＤ命令に関して、選択されたデータサイズは、少なくとも１つのソースデータ要素のデータ要素サイズを示すことができ、対応する処理演算は、ソースデータ値内の各ソースデータ要素において、並行して、選択された処理演算を実施することを含むことができる。対応する処理演算を制御するための制御パラメータは、異なるデータ要素サイズに対して異なる割り当て可能な範囲を有することができ、そのため、この制御パラメータのビット数は、データ要素サイズに伴って変化することができる。したがって、本符号化技術は、制御値内の選択されたデータ要素サイズおよび可変長の制御パラメータの両方を効率的に符号化するために使用することができる。
【００５６】
本制御値符号化技術が適用され得る、ＳＩＭＤ命令の１つの特定の実施形態は、前記対応する処理演算が、少なくとも１つの結果データ要素を含む結果データ値を生成することを含む、ビットフィールド操作命令であり、各結果データ要素は、前記ソースデータ値の対応するソースデータ要素に対応し、
各結果データ要素は、前記対応するソースデータ要素内の連続ビットのソースビットフィールドのビット値に対応するビット値を有する、結果ビットフィールドを含み、
前記少なくとも１つの制御パラメータは、前記ソースビットフィールドおよび前記結果ビットフィールドによって含まれるビット数、前記対応するソースデータ要素内の前記ソースビットフィールドの位置、ならびに前記結果データ要素内の前記結果ビットフィールドの位置を示す。
【００５７】
したがって、制御値は、ビット数がビットフィールド操作命令に対するデータ要素サイズを特定する第１の部分、ならびにビットフィールド幅、ソースデータ要素内のビットフィールドの位置、および結果データ要素内の結果ビットフィールドの位置を示す、制御パラメータを特定する、第２の部分を含む。データ要素サイズが大きいほど、ビットフィールド幅、ならびにソースおよび結果データ要素内のビットフィールド位置の可能な値は大きく、したがって、これらのパラメータを示すために必要とされるビット数が大きい。したがって、本制御値符号化技術は、これらのパラメータを示すために有用である。
【００５８】
ビットフィールド操作命令はまた、結果データ要素が結果値内に配置される順序を特定する、データ要素順序付けパラメータを指定してもよい。可変サイズを有する第１および第２の部分を使用する本符号化技術は、同様に、データ要素順序付けパラメータを特定するために使用されてもよい。
【００５９】
本符号化技術が適用され得る、別のタイプの命令は、ソースデータ値を特定する、ならびに対応する処理演算が、制御値に基づいて判定されるソースデータ値および第２のデータ値への論理演算の適用の結果と同等である、結果データ値を生成することを含む、ビット単位の論理命令である。
【００６０】
第２のデータ値は、論理演算を使用してソースデータ値と組み合わせるためのマスク値として考えることができる。この場合の選択されたデータサイズは、第２のデータ値内のビットの繰り返しパターンによって含まれるビット数を示し、少なくとも１つの制御パラメータは、ビットの繰り返しパターンのビット値を特定する情報を示す。したがって、この場合、選択されたデータサイズは、必ずしもデータ要素サイズではないが、第２のデータ値内のビットの繰り返しパターンのサイズを示す。ビットの繰り返しパターンのサイズが大きいほど、それらのビットのビット値を特定するために制御パラメータにおいて必要とされるビット数は大きく、したがって、制御パラメータは、選択されたデータサイズに伴って変化するビット数を有する。したがって、本符号化技術は、かかるパラメータを示すために有用である。
【００６１】
ビット単位の論理命令と関連付けられる論理演算は、いくつかの異なるタイプの論理演算を含んでもよい。例えば、論理演算は、ＡＮＤ演算、ＯＲ演算、および排他的ＯＲ（ＸＯＲ）演算のうちの１つを含んでもよい。
【００６２】
ビット単位の論理命令は、必ずしも、実際にビットの繰り返しパターンを含有する第２のデータ値を生成し、ソースデータ値および第２のデータ値に論理演算を適用するように、処理回路を制御する必要はないということに留意されたい。処理回路は、単一の組み合わせ演算において、第２のデータ値が生成され、論理演算を使用してソースデータ値と組み合わされた場合に得られるであろう結果と同等である結果データ値を生成するためのハードウェアを含んでもよいことが可能である。第２のデータ値は、実際にこの演算のいずれかの段階に存在する必要はない。
【００６３】
別の態様から見ると、本発明は、プログラム命令に応答して、処理演算を実施するための処理装置のためのデータ処理方法を提供し、
複数のデータサイズから選択される選択されたデータサイズを示すための第１の部分、および前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも１つの制御パラメータを示すための第２の部分を有する、制御値を指定する、少なくとも１つの命令を受信することであって、前記第１の部分および前記第２の部分は、各々、可変ビット数を有する、受信することと、
前記少なくとも１つの命令に応答して、前記制御値の前記第１の部分によって含まれる前記ビット数を特定することと、
前記第１の部分によって含まれる前記ビット数に依存して、（ａ）前記選択されたデータサイズ、および（ｂ）前記制御値のどのビットが前記少なくとも１つの制御パラメータを示すための前記第２の部分を形成するかを特定することと、
前記選択されたデータサイズおよび前記少なくとも１つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理装置を制御することと、を含む。
【００６４】
本発明はまた、コンピュータによって実行される時、上で説明される実施形態のいずれかに従うデータ処理装置に従う命令実行環境を提供する、コンピュータプログラムによって提供される仮想機械を提供する。仮想機械は、例えば、上で説明される命令のうちの１つを含有するプログラムと、命令を実行するためのハードウェアとの相互作用をモデル化してもよい。仮想機械を実行するためのホストコンピュータは、それ自体が、命令を実行することが可能な復号化および処理ハードウェアを含有する必要はないが、命令の処理をシミュレーションする仮想機械を実行することができるように、十分な処理リソースを含む。
【００６５】
本発明の上のおよび他の目的、特性、および利点は、添付の図面と併せて読まれる、例解的な実施形態の以下の詳細な説明を読むことから明らかとなるであろう。
【図面の簡単な説明】
【００６６】
【図１】データ処理装置を概略的に例解する図である。
【図２】ビットフィールド操作命令の例示的な符号化を示す図である。
【図３】ビットフィールド操作演算の実施形態を示す図である。
【図４】ビットフィールド操作を適用することによる、ソースデータ要素からの結果データ要素の生成の実施形態を示す図である。
【図５】ビットフィールド操作命令内の制御フィールドの例示的な符号化を示す図である。
【図６】ビットフィールド操作命令のビットフィールド挿入形態、およびビットフィールド操作命令のビットフィールド抽出形態の実施形態を例解する図である。
【図７】ビットフィールド操作命令内の制御値に依存して、結果データ要素の異なるプレフィックスおよびサフィックス部分を選択する実施形態を示す図である。
【図８Ａ】制御値内で符号化される再順序付け情報に依存した、結果データ値内のデータ要素の再順序付けの実施形態を例解する図である。
【図８Ｂ】データ要素の再順序付けの第２の実施形態を例解する図である。
【図９】ビットフィールド操作命令を処理する方法を例解する図である。
【図１０】制御パラメータの値を得るように、制御フィールドを復号化する方法を例解する図である。
【図１１】ビットフィールド操作命令と、共通の制御フィールド符号化を共有する、ビット単位の論理命令の例示的な符号化を例解する図である。
【図１２】ビット単位の論理命令の制御フィールドの例示的な符号化を例解する図である。
【図１３】論理演算を使用してソースデータ値と組み合わせるためのマスク値の実施形態を例解する図である。
【図１４】ビット単位の論理命令の制御下で実施することができる、異なる種類の論理演算を例解する図である。
【図１５】ビット単位の論理命令を処理する例示的な方法を例解する図である。
【図１６】仮想機械実装の実施形態を例解する図である。
【発明を実施するための形態】
【００６７】
図１は、処理回路４と、命令復号器６と、レジスタ８のバンクと、メモリシステム１０と、を備える、データ処理装置２を概略的に例解する。メモリシステム１０は、１つ以上のキャッシュまたはメモリデバイスを含む。処理回路４は、加算器１２、乗算器１４、およびシフタ１６といったいくつかの処理要素を含む。データを処理する時、命令復号器６は、レジスタ８に記憶されるデータを処理し、レジスタ８に処理結果を記憶するように、処理回路４を制御するための制御信号を生成するように、プログラム命令に応答する。命令復号器６の制御下では、データ処理装置２はまた、レジスタ８とメモリシステム１０との間でデータを転送するように制御されてもよい。
【００６８】
レジスタ８のバンクは、複数の異なるレジスタアクセスサイズを使用してアクセス可能である。レジスタが、例えば、６４ビットを含む場合、レジスタは、例えば、６４ビットアクセスまたは３２ビットアクセスの対象となり得る。命令復号器６によって復号される命令は、所与の処理演算のために使用されるべき、選択されたレジスタアクセスサイズを指定する情報を含んでもよい。
【００６９】
図１の実施形態において、処理回路４は、レジスタ８に記憶されるデータを処理し、データ処理の結果をレジスタ８に記憶し戻すとして例解される一方、いかなる他の種類の記憶場所も、レジスタ８の代わりに使用されてもよいということが理解されるであろう。データ処理装置２および処理回路４は、典型的に、図１に例解されない他の要素を含んでもよいということが理解されるであろう。
【００７０】
図２は、ビットフィールド操作演算を実施するように、処理装置２を制御するためのビットフィールド操作命令ＢＦの例示的な符号化を示す。ビットフィールド操作命令は、命令のビット＜２８：２３＞に位置する演算コードによって特定され、以下のフィールドを含む。
・Ｒｎ：第１のソースデータ値ｓｒｃ１を記憶するレジスタバンク８のレジスタを特定するソースレジスタフィールド。
・Ｒｄ：処理結果が記憶されるレジスタバンク８の宛先レジスタを特定する宛先レジスタフィールド。宛先レジスタフィールドＲｄはまた、ビットフィールド操作命令の実行の前に、宛先レジスタに記憶される値である、第２のソースデータ値ｓｒｃ２を特定する。
・ｓｆ：ソースレジスタおよび宛先レジスタのために使用されるべき、選択されたアクセスサイズをＭ特定する、レジスタアクセスサイズフィールド。図２の実施形態において、レジスタサイズフィールドｓｆは、単一のサイズを示すビットを含み、サイズを示すビットの第１の状態は、第１のアクセスサイズ（例えば、６４ビット）を示し、サイズフィールドの第２の状態は、第２のアクセスサイズ（例えば、３２ビット）を示す。しかしながら、所望される場合、３つ以上の異なるアクセスサイズが、レジスタアクセスサイズフィールドｓｆに、ビットフィールド操作命令符号化のより多くのビットを割り当てることによって、提供され得る。
・ｏｐｃ：処理回路４によって実施されるべきビットフィールド操作のタイプを制御するための制御値を示す、サブ演算コードフィールド。サブ演算コードフィールドの例示的な符号化は、図７を参照して以下で説明する。
・ｃｏｎｔｒｏｌ１３：
−第１のソースデータ値ｓｒｃ１、第２のソースデータ値ｓｒｃ２、およびビットフィールド操作命令の処理中に生成される結果データ値のデータ要素のデータ要素サイズＮ、ならびに
−処理回路４によって実施されるべきビットフィールド操作演算の態様を制御するためのいくつかの他の制御パラメータ
を特定する制御フィールド。
ｃｏｎｔｒｏｌ１３フィールドの符号化の実施形態は、図５を参照して以下で説明する。
【００７１】
データ要素の数もまた、ｓｆおよびｃｏｎｔｒｏｌ１３フィールドから導出することができる。第１および第２のソースデータ値ｓｒｃ１、ｓｒｃ２、ならびに結果データ値の各々内に存在するデータ要素の数は、Ｍ／Ｎに等しく、ここでは、Ｍは、選択されたレジスタアクセスサイズであり、Ｎは、データ要素サイズである。
【００７２】
ｓｆ、ｏｐｃ、およびｃｏｎｔｒｏｌ１３フィールドは、集合的に、ビットフィールド操作演算の態様を制御するための制御値を形成すると見なされ得る。
【００７３】
図２の例示的な符号化は、第２のソースデータ値ｓｒｃ２が、ビットフィールド操作命令を実行する前に、宛先レジスタに記憶される値として特定されることを示す一方、他の実施形態において、別個のレジスタフィールドが、第２のソースデータ値ｓｒｃ２を記憶する、宛先レジスタ以外のレジスタを特定するように提供されてもよいということが理解されるであろう。
【００７４】
図３は、ビットフィールド操作演算の実施形態を示す。ビットフィールド操作命令の実行の前に、レジスタＲｎに記憶されるＭビット値である、第１のソース値ｓｒｃ１は、各々がＮビットを有するＭ／Ｎデータ要素を含有する。同様に、宛先レジスタＲｄに記憶されるＭビットの第２のソース値ｓｒｃ２もまた、各々がＮビットを有するＭ／Ｎデータ要素を含む。
ビットフィールド操作命令に応答して、処理回路４は、ソース値ｓｒｃ１、ｓｒｃ２のデータ要素に対応する、Ｍ／Ｎ結果データ要素を有する、結果データ値を生成する。各結果データ要素は、値が、第１のソースデータ値ｓｒｃ１内のＷビットのビットフィールド（ｂｆ）に対応する、Ｗビットを含む。第１のソースデータ値ｓｒｃ１内のビットフィールドの位置、および結果データ値内のビットフィールドの位置は、ビットフィールド操作命令の制御値に基づいて制御されてもよい。各結果データ要素に関して、挿入されたビットフィールドよりも下位の、いかなるビットも、サフィックス値ｓの値をとる一方、ビットフィールドよりも上位である結果データ要素のいずれのビットも、プレフィックス値ｐの値をとる。結果データ要素は、宛先レジスタＲｄに記憶される。
【００７５】
したがって、ビットフィールド操作命令の効果は、第１のソース値ｓｒｃ１の各データ要素内の所与の位置から、ビットフィールドを抽出すること、および各抽出されたビットフィールドを結果値の対応するデータ要素内に挿入することであり、宛先レジスタの他のビット（ある場合）は、プレフィックスおよびサフィックス値をとる。
【００７６】
図４は、ビットフィールド操作演算を定量的に定義することができる方法の実施形態を示す。図４は、対応する結果データ要素を生成するために、単一のソースデータ要素に適用されているビットフィールド操作演算の実施形態を示す。ソースおよび結果データ値が、２つ以上のデータ要素を有する場合、対応する結果データ要素を生成するように、同じ演算を各ソースデータ要素に適用することができる。
【００７７】
命令復号器６は、結果データ要素のビット＜Ｂ＋Ｗ−１：Ｂ＞が、第１のソース値ｓｒｃ１の対応するソースデータ要素のビット＜Ａ＋Ｗ−１：Ａ＞を含む、ビットフィールドｂｆの値をとる、結果データ要素を生成するように、ビットフィールド操作命令に応答する。パラメータＡは、第１のソースデータ値ｓｒｃ１から抽出されるべきビットフィールドの開始ビット位置を示す一方、パラメータＢは、ビットフィールドが結果データ要素内に配置されるべきである、開始ビット位置を示す。Ｗは、ビットフィールドｂｆによって含まれるビット数を示す。Ａ、Ｂ、およびＷは、１≦Ｗ≦Ｎ、０≦Ａ≦Ｎ−Ｗ、および０≦Ｂ≦Ｎ−Ｗの範囲内のいずれかの整数値を有し、ここでは、Ｎは、データ要素によって含まれるビット数である。
【００７８】
図４は、ビットフィールド位置値ＡおよびＢが、それぞれ、ソースデータ要素および結果データ要素内のいずれのビット位置の値もとることができる、一般的な形態のビットフィールド操作を例解する。ビットフィールド操作命令の制御値内に、直接、Ａ、Ｂ、およびＷを符号化することが可能である。
【００７９】
しかしながら、特定の実施形態において、ｃｏｎｔｒｏｌ１３フィールドの制御符号化は、図５および６に示されるように、直接、Ａ、Ｂ、およびＷを特定するために使用される。
【００８０】
図５は、ビットフィールド操作命令のｃｏｎｔｒｏｌ１３フィールドの例示的な符号化を例解する。ｃｏｎｔｒｏｌ１３フィールドは、その各々が可変ビット数を有する、第１の部分３０および第２の部分３２を含む、１３ビット＜１２：０＞を有する。ｃｏｎｔｒｏｌ１３フィールドは、データ要素サイズＮ、回転パラメータＲ、最上位ビット位置Ｓ、および反転情報Ｖを特定する。回転パラメータＲおよび最上位ビット位置Ｓは、ソースデータ要素ｓｒｃ１から抽出されるべきビットフィールドの位置およびサイズ、ならびに、図６を参照して以下で説明されるように、ビットフィールドが結果データ要素内に挿入される位置を判定する。反転情報Ｖは、図７を参照して以下で説明されるように、データ要素が結果データ要素内に配置されるべき順序を定義する。
【００８１】
ｃｏｎｔｒｏｌ１３フィールドの第１の部分３０は、可変ビット数を含む。本実施形態において、第１の部分３０は、ｃｏｎｔｒｏｌ１３フィールドのビット＜１２＞、ならびにｃｏｎｔｒｏｌ１３フィールドのビット＜５：０＞のゼロ、１以上のビットを含む。第１の部分３０によって含まれるビット数を検出することによって、データ要素サイズＮを特定することができる。
【００８２】
ｃｏｎｔｒｏｌ１３フィールドの第２の部分３２は、回転パラメータＲ、最上位ビット位置Ｓ、および反転情報Ｖを表す、可変ビット数を有する。ｃｏｎｔｒｏｌ１３フィールドのどのビットが、どのパラメータを表すかは、所与の命令に対して使用される特定のデータ要素サイズＮに依存する。命令復号器６または処理回路４は、第１の部分３０において特定されるビット数に基づいて、第２の部分３２のどのビットが、Ｒ、Ｓ、およびＶの各々を表すかを特定する。
【００８３】
例えば、ｃｏｎｔｒｏｌ１３フィールドのビット＜１２＞および＜５＞が、０の値を有する場合、これは、データ要素サイズＮが３２ビットであることを示す。したがって、命令復号器６または処理回路４はまた、回転パラメータＲが、ｃｏｎｔｒｏｌ１３フィールドのビット＜１０：６＞の値を有し、サイズパラメータが、ｃｏｎｔｒｏｌ１３フィールドのビット＜４：０＞の値を有し、かつ反転情報Ｖが、２進値０ｂｖ０００００（ここでは、ｖは、ｃｏｎｔｒｏｌ１３フィールドのビット＜１１＞の値である）を有することを判定することができる。同様に、他のデータ要素サイズに関して、図５に示される方法で、パラメータＮ、Ｒ、Ｓ、およびＶを、ｃｏｎｔｒｏｌ１３フィールドから判定することができる。
【００８４】
ｃｏｎｔｒｏｌ１３フィールドは、ＲおよびＶパラメータを表す、サブ部分（ビット＜１１：６＞）を含む。データ要素サイズＮが大きいほど、回転パラメータＲに対して必要とされるビット数は多く、反転情報Ｖに対して必要とされるビット数は少ない。したがって、ｃｏｎｔｒｏｌ１３フィールドのビット＜１１：６＞は、図５に示される方法で、これらのパラメータ間で共有される。異なるデータ要素サイズＮに関して、サブ部分のビットは、回転パラメータＲまたは反転情報Ｖのいずれかを示すように割り当てられる。同様に、第１の部分３０、および最上位ビット位置Ｓを示す第２の部分３２の一部は、これらの値の各々に対して使用されるビット数が、データ要素サイズＮが増加または減少するにつれて、反対方向に変化するため、固定ビット数を共有することができる。いずれの所与のデータ要素サイズに関しても、１つのパラメータに対して必要とされないビットが、別のパラメータを示すために使用されるため、データ要素サイズの一部の値に対して、いずれのパラメータも示さない、残されたビットは存在せず、そのため、ｃｏｎｔｒｏｌ１３フィールドの符号化は、効率的に、Ｎ、Ｒ、Ｓ、およびＶパラメータを表す。
【００８５】
ｃｏｎｔｒｏｌ１３フィールドの実装は、図１０を参照して、以下でより詳細に説明する。
【００８６】
図６は、ビットフィールド位置パラメータＲおよび最上位ビット位置Ｓに依存して実施される、ビットフィールド操作演算の実施形態を示す。ソースビットフィールド開始位置Ａ、結果ビットフィールド開始位置Ｂ、およびビットフィールド幅Ｗは、全て、パラメータＳおよびＲから導出することができる。
【００８７】
ビットフィールド操作演算は、パラメータＳとＲとの間の関係に依存して、２つの代替的な形態を有する。命令のビットフィールド抽出形態ＢＦＸに応答して、処理回路４は、第１のソースデータ要素ｓｒｃ１内の選択された位置に位置するビットフィールドｂｆを抽出し、対応する結果データ要素の最下位部分に、ビットフィールドを書き込むように制御される。命令のビットフィールド挿入形態ＢＦＩに応答して、処理回路４は、第１のソースデータ要素ｓｒｃ１の最下位部分に位置するビットフィールドをコピーし、対応する結果データ要素内の選択された位置に、コピーされたビットフィールドを挿入するように制御される。
【００８８】
図６の上部に示されるように、Ｓ≧Ｒである場合、ビットフィールド操作命令は、ビットフィールド抽出形態ＢＦＸである。命令のビットフィールド抽出形態に関して、回転パラメータＲは、第１のソースデータ要素ｓｒｃ１内のビットフィールドｂｆの最下位ビットの位置を示し、最上位ビット位置Ｓは、第１のソースデータ要素ｓｒｃ内のビットフィールドｂｆの最上位ビットの位置を示す。したがって、ソースビットフィールド開始位置Ａは、回転パラメータＲに等しく、結果ビットフィールド開始位置Ｂは、ゼロであり、ビットフィールド幅Ｗ＝Ｓ＋１−Ｒである。これは、命令のビットフィールド抽出形態ＢＦＸに応答して、結果データ要素のビット＜Ｓ−Ｒ：０＞が、対応する第１のソースデータ要素ｓｒｃ１のビット＜Ｓ：Ｒ＞に等しく設定されることを意味する。
【００８９】
一方、Ｓ＜Ｒである場合、ビットフィールド操作命令は、図６の下部に示されるように、ビットフィールド挿入形態ＢＦＩをとる。この場合、ソースビットフィールド開始位置Ａは、ゼロに等しく、結果ビットフィールド開始位置Ｂ＝Ｎ−Ｒであり、ビットフィールド幅Ｗ＝Ｓ＋１である。したがって、命令のビットフィールド挿入形態において、結果データ要素のビット＜Ｎ−Ｒ＋Ｓ：Ｎ−Ｒ＞は、第１のソースデータ要素ｓｒｃ１のビット＜Ｓ：０＞に等しく設定される。
【００９０】
ソース開始ビット位置Ａおよび結果開始ビット位置Ｂのうちの少なくとも１つを、ゼロに等しく制約することによって、図５の符号化は、２つのパラメータＲ、Ｓのみで、実施されるべきビットフィールド操作を特定するための３つのパラメータＡ、Ｂ、Ｗを符号化することができるため、効率的になる。ゼロではないソース開始ビット位置Ａからのビットフィールドが、ゼロではない結果ビット位置Ｂに書き込まれる（図４に示される実施形態にあるように）、より一般的なビットフィールド操作演算が所望される場合、これは、命令のビットフィールド抽出形態ＢＦＸ、続いて、命令のビットフィールド挿入形態ＢＦＩを実行することによって実装することができる。
【００９１】
図６は、ビットフィールド操作命令のビットフィールド抽出形態ＢＦＸにおいて、ビットフィールドｂｆが、結果データ要素の最下位部分に書き込まれ、そのため、結果データ要素が、プレフィックス部分を含むことができるが、サフィックス部分を含まないことを示す。ＲおよびＳの一部の値に関して、プレフィックス部分が存在しなくてもよい。対照的に、命令のビットフィールド挿入形態ＢＦＩに関して、ビットフィールドは、結果データ要素のいずれの部分に挿入されてもよく、そのため、結果データ値は、プレフィックス部分およびサフィックス部分の両方を有してもよい（ＲおよびＳの値は、結果データ要素が、プレフィックス部分およびサフィックス部分のいずれも含まない、それらのうちの１つ、または両方を含むかどうかを制御する）。一般的に、結果データ要素は、Ｂ＋Ｗ＜Ｎである場合、プレフィックス部分（ビット＜Ｎ−１：Ｂ＋Ｗ＞）を含み、Ｂ＞０である場合、サフィックス部分（ビット＜Ｂ−１：０＞）を含む。上で説明されるように、ビットフィールド操作命令は、サブ演算コードフィールドｏｐｃを含む。ｏｐｃフィールドは、選択された形態のプレフィックスまたはサフィックス値を生成するように、処理回路４を制御する。図７は、フィールドの異なる値に対して選択され得る、異なる種類のプレフィックスおよびサフィックス値を例解する。
【００９２】
サブ演算コードフィールドｏｐｃが０ｂ００の値を有する時、プレフィックス部分ｐは、ビットフィールドｂｆの符号拡張であり、サフィックス部分ｓのビットは、ゼロ値を有する。符号拡張ビットは、ビットフィールドｂｆの符号が、結果データ要素内に挿入される時に保存されることを確実にする値を有する。典型的に、プレフィックス部分の符号拡張ビットは、各々、ビットフィールドｂｆの最上位ビットの値に等しい（即ち、各々、第１のソースデータ要素のビット＜Ｓ＞に等しい）。しかしながら、プレフィックス部分ｐ内の符号拡張ビットの正確な性質は、ビットフィールドｂｆに対して使用される特定の符号表現に依存する。サブ演算コードフィールドを０ｂ００に設定することによって、ビットフィールド操作命令は、第１のソースデータ要素から、符号付きのデータ値を含むビットフィールドを抽出するため、およびビットフィールドの符号を保存しつつ、この値を結果データ要素の一部にコピーするために、使用することができる。
【００９３】
サブ演算コードフィールドが０ｂ０１の値を有する時、結果データ要素のプレフィックスおよびサフィックス部分は、第２のソースデータ要素ｓｒｃ２の対応するビットの値をとる。したがって、この形態の命令は、第２のソースデータ要素ｓｒｃ２を他のビットを変化しないままにしつつ、第１のソースデータ要素ｓｒｃ１からのビットフィールドｂｆを、第２のソースデータ要素ｓｒｃ２内の位置に挿入する効果を有する。図２に示される実施形態において、第２のソースデータ要素ｓｒｃ２は、ビットフィールド操作命令の実行の前に、宛先レジスタＲｄに記憶される値であり、そのため、ｏｐｃ＝０１に関して、命令は、他のビットをしないままにしつつ、第１のソースデータ要素ｓｒｃ１のビットフィールドを、宛先レジスタＲｄの所与の位置に効果的に挿入する。
【００９４】
サブ演算コードフィールドが０ｂ１０の値を有する場合、プレフィックスおよびサフィックス部分のビットは、各々、ゼロ値を有する。したがって、この種類の命令に関して、第１のソースデータ要素ｓｒｃ１のビットフィールドは、結果データ要素内のゼロによって隔離および包囲される。
【００９５】
図７の実施形態において、サブ演算コードフィールドｏｐｃに対する０ｂ１１の値は、未定義であるが、他の機能性が、０ｂ１１値と関連付けられ得るということが理解されるであろう。
【００９６】
上で言及されるように、ｃｏｎｔｒｏｌ１３フィールドは、結果データ値内のデータ要素の順序付けを制御するための反転情報Ｖを示す。図８Ａは、反転情報Ｖに依存したデータ要素の再順序付けの実施形態を概略的に例解する。結果データ値は、上で説明されるようなビットフィールド操作を使用して生成され、第１および第２のソースデータ値内の対応するデータ要素の順序に対応する順序でデータ要素を含む、中間結果データ値が、反転情報Ｖに依存して制御される一連の再順序付けの反復の対象であった場合に生成されるであろう値と同等である。各再順序付けの反復は、ビット群がデータ値内で再順序付けされるべき粒度を示す特定の群サイズと関連付けられ、また、反転情報Ｖの対応するビットとも関連付けられる。各再順序付けの反復は、反転情報Ｖの対応するビットが、既定の値を有するかどうかを判定することと、対応するビットが既定の値を有する場合、結果データ値内で、対応する群サイズのビット群の隣接対の位置を交換することと、を含む。以下で説明される実施形態において、「１」値は、反転情報Ｖの既定の値として使用されるが、「０」値が代わりに使用され得る。
【００９７】
図８Ａは、結果データ値を生成するように、中間結果に適用されてもよい、一連の再順序付けの反復の実施形態を示す。再順序付けの反復０において、中間結果の隣接ビットの対の位置は、反転情報Ｖ＜５：０＞のビットＶ＜０＞が１の値を有する場合に交換される。即ち、中間結果のビット＜０＞は、ビット＜１＞でスワップされ、同様に、ビット＜３＞および＜２＞がスワップされ、ビット＜５＞および＜４＞がスワップされる、等である。一方、ビットＶ＜０＞が０の値を有する場合、スワップは実施されない。
【００９８】
同様に、図８Ａに示される再順序付けの反復１に関して、前の反復の結果内の２ビットの隣接群の位置は、反転情報Ｖの対応するビットＶ＜１＞が１の値を有する場合に交換される。したがって、ビット＜１：０＞は、ビット＜３：２＞でスワップされ、ビット＜７：６＞は、ビット＜５：４＞でスワップされる、等である。そうでなければ、Ｖ＜１＞＝０である場合、前の反復の結果のビットは、同じままである。
【００９９】
同様に、各連続した再順序付けの反復に関して、ビット群の隣接対は、反転情報Ｖの対応するビットが値１を有する場合、２のべき乗で上昇する各再順序付けの反復に対する群サイズで、位置を交換される。図８Ａに示される演算は、例えば、反転情報の対応するビットＶ＜ｉ＞が１の値を有する場合、ｉ番目の再順序付けの反復が２ｉビットの隣接群の対の位置を交換し、対応するビットＶ＜ｉ＞が０の値を有する場合、２ｉビット群の対の位置を交換しない、一連の再順序付けの反復として要約することができる。ｉ番目の再順序付けの反復がビット群の位置を交換するべきかどうかを示すように、反転情報Ｖのビット＜ｉ＞を使用することが好都合である一方で、反転情報Ｖのビットと再順序付けの反復との間の異なる対応もまた、使用され得る。再順序付けの反復の総数は、いくつのデータ要素が存在しているかに依存する。例えば、図８Ａに示される反復５は、３２ビットの単一の群のみが存在し、そのため、３２ビット群の対をスワップすることが可能ではないため、３２ビットデータ値の場合は実施されないであろう。
【０１００】
図８Ａは、ビット数１、２、４等を有するビット群の位置を交換することができる実施形態を示す。一部の実施形態において、ビットフィールド操作命令は、データ要素サイズの倍数に対応するビット群のみの、位置を交換することができるように、符号化されてもよい。かかる実施形態は、図８Ｂに示される。
【０１０１】
図８Ｂは、６４ビットデータ値が８つの８ビットデータ要素Ａ〜Ｈを含む実施形態を示す。図５に示される実施形態において、ｃｏｎｔｒｏｌ１３フィールドは、データ要素サイズＮよりも小さいビット群をスワップするための再順序付けの反復に対応する反転情報Ｖ＜５：０＞のいずれかのビットにゼロ値が配置されるように符号化される。したがって、ｃｏｎｔｒｏｌ１３フィールドは、データ要素サイズＮ以上であるビット群のスワップを示す、反転情報Ｖのビットの値を示すのみである。例えば、図８Ｂに示されるような８ビットのデータ要素サイズに関して、反転情報のビットＶ＜２：０＞は、図８Ａに示されるように、１、２、および４ビットの群をスワップするための再順序付けの反復０、１、および２が、実施されるべきではないということを示すように、０に設定される。反転情報Ｖのビット＜５：３＞は、再順序付けの反復３、４、および５が、８、１６、および３２ビットの隣接する群の位置を交換するように実施されるべきであるかどうかを示すように、ｃｏｎｔｒｏｌ１３フィールド内で符号化される。
【０１０２】
図８Ｂは、どのように、第１および第２のソースデータ値ｓｒｃ１、ｓｒｃ２が、文字ＡからＨによって示されるような特定の記憶順序を有するデータ要素Ａ〜Ｈを最初に含むかを示す。データ要素再順序付けが実施されない場合、ソースデータ値へのビットフィールド操作命令の適用は、結果データ要素が、ソースデータ値内のデータ要素の順序に対応する順序Ａ、Ｂ、Ｃ、…、Ｈで順序付けされる、結果データ値をもたらす（図８Ｂに例解される中間結果を参照されたい）。
【０１０３】
しかしながら、反転情報Ｖの制御下では、命令復号器６は、最終結果データ値を生成する時に、データ要素再順序付けを適用するように、処理回路４を制御することができる。反転情報Ｖのビット＜２：０＞が０の値を有する際、実施されてもよい第１の再順序付けの反復は、ビットＶ＜３＞と関連付けられる。図８Ｂは、ビットＶ＜３＞が１の値を有する場合、８ビットの隣接群（即ち、隣接データ要素）は位置を交換される一方、そうでなければ、中間値は変化しないということを示す。次いで、別の再順序付けの反復は、ビットＶ＜４＞が１の値を有する場合、１６ビットの隣接群（即ち、２つのデータ要素の隣接群）の位置を交換する。次いで、さらなる再順序付けの反復は、ビットＶ＜５＞が１の値を有する場合、３２ビットの隣接群（即ち、４つのデータ要素の隣接群）をスワップする。反転情報Ｖのビットに依存して、異なるサイズのビット群を選択的に交換する、または交換しないことによって、データ要素の異なる順序を結果データ値内に提供することができる。例えば、図８Ｂの下部にある表は、再順序付け情報Ｖ＜５：３＞の異なる値に関して、図８Ｂに示される再順序付けの反復に起因する、異なるデータ要素順序付けを示す。したがって、各反復が異なるサイズのビット群の隣接対の位置を交換する、連続した再順序付けの反復を適用することによって、様々なデータ要素順序付けを、結果値内にもたらすことができるということが分かる。
【０１０４】
データ処理回路４が、実際に、ビットフィールド操作演算を使用して中間結果を生成し、次いで、結果データ値を生成するために、中間結果に一連の再順序付けの反復を適用することは必要ではないということに留意されたい。データ処理回路４は、ソースデータ要素のビットフィールドが各結果データ要素内に含まれる結果データ値が生成され、結果データ要素が、これまでにもたらされたいかなる中間結果も伴わずに、反転情報Ｖに対応する順序で順序付けられるように、データ要素の再順序付けと同時に、ビットフィールド操作を適用するように構成されてもよい。結果データ値は、単に、再順序付けの反復がかかる中間結果に適用された場合に得られるであろう結果と同等である値であってもよい。
【０１０５】
図９は、図２の実施形態にあるように符号化されるビットフィールド操作命令の処理の実施形態を示す。図９は、一連の方法ステップを示すフローチャートを例解する一方、実際には、命令を実装するためのハードウェアは、互いに並行して、これらのステップのうちのいくつかを実施してもよく、または同様の結果をもたらす他のステップを実施してもよいということに留意されたい（同じことは、本出願に示される他のフローチャートに対しても言える）。
【０１０６】
ステップ５０において、命令復号器６は、サブ演算コードフィールドｏｐｃの値をチェックする。サブ演算コードフィールドｏｐｃが０ｂ００の値を有する場合、方法は、ステップ５２に進み、ここで、結果データ値は、ゼロ値に初期化される。次いで、ブール量ｅｘｔｅｎｄは、ステップ５４においてＴＲＵＥ値に設定される（ビットフィールド操作を適用する時、プレフィックス値が抽出されたビットフィールドの符号拡張に設定されることを示す）。
【０１０７】
一方、ステップ５０において、サブ演算コードフィールドが、０ｂ０１の値を有すると判定されるｏｐｃである場合、ステップ５６において、結果データ値は、第２のソースデータ値ｓｒｃ２の値に初期化される（各結果データ要素が、第２のソースデータ値ｓｒｃ２の対応するデータ要素のそれらに対応するビット値を有する、プレフィックスおよび／またはサフィックス部分を有するように）。次いで、ステップ５８において、ブール量ｅｘｔｅｎｄは、プレフィックス部分を生成する時に、符号拡張が実施されないということを示すＦＡＬＳＥ値に設定される。
【０１０８】
代替的に、ステップ５０において、サブ演算コードフィールドｏｐｃが０ｂ１０の値を有すると見出される場合、ステップ６０において、結果値は、ゼロ値に設定され、ステップ６２において、ブール値ｅｘｔｅｎｄは、ＦＡＬＳＥ値に設定される。したがって、各結果データ要素が生成される時、挿入されたビットフィールド以外のいずれのビットも、ゼロ値を有し、ビットフィールドの符号拡張が実施されない。
【０１０９】
ステップ５０において、サブ演算コードフィールドｏｐｃの値にかかわらず、方法は、ステップ６４に進み、ここで、回転パラメータＲ、最上位ビット位置Ｓ、反転情報Ｖ、およびデータ要素サイズＮを特定するために、ビットフィールド操作命令の制御フィールドｃｏｎｔｒｏｌ１３を復号化するように、関数ＴＲＩＤＥＣＯＤＥ（ｃｏｎｔｒｏｌ１３）が実施される。ＴＲＩＤＥＣＯＤＥ関数は、図１０を参照して以下で説明する。
【０１１０】
ステップ６４において、Ｒ、Ｓ、Ｖ、およびＮの値を特定すると、次いで、ステップ６６において、最上位ビット位置Ｓが回転パラメータＲ以上かどうかが判定される。ＳがＲ以上である場合、ステップ６８において、ソースビットフィールド位置値Ａは、Ｒに等しく設定され、結果ビットフィールド位置値Ｂは、０に設定され、ビットフィールド幅Ｗは、Ｓ＋１−Ｒに等しく設定される（即ち、ビットフィールド操作は、ビットフィールド抽出形態ＢＦＸである）。一方、ステップ６６において、ＳがＲ未満であることが判定される場合、命令は、ビットフィールド挿入形態ＢＦＩを有し、そのため、ステップ７０において、ソースビットフィールド位置値Ａは、０に設定され、結果ビットフィールド位置値Ｂは、Ｎ−Ｒに設定され、ビットフィールド幅Ｗは、Ｓ＋１に設定される。
【０１１１】
ステップ７２において、命令がビットフィールド挿入形態ＢＦＩまたはビットフィールド抽出形態ＢＦＸを有するかどうかにかかわらず、処理回路４は、各データ要素が対応する第１のソースデータ要素ｓｒｃ１のビット＜Ａ＋Ｗ−１：Ａ＞に等しい、ビット＜Ｂ＋Ｗ−１：Ｂ＞を有する、結果データ値を生成する。このステップは、第１のソースデータ要素の標的ビットフィールドが、結果データ要素内の所望の位置にコピーされることを確実とする。結果データ要素の残りのビットは、ステップ５２、５６、および６０のうちの１つにおいて、初期化されるような値を有し続ける。
【０１１２】
次いで、ステップ７４において、ブール量ｅｘｔｅｎｄがＴＲＵＥおよびＢ＋Ｗ＜Ｎであるかどうかが判定される。ｅｘｔｅｎｄがＴＲＵＥおよびＢ＋Ｗ＜Ｎである場合、これは、結果データ要素内にプレフィックス部分＜Ｎ−１：Ｂ＋Ｗ＞が存在すること、およびサブ演算コードフィールドｏｐｃが、符号拡張がビットフィールドに適用されるべきであったことを示したことを示す。この場合、ステップ７６において、処理回路４は、各結果データ要素のビット＜Ｎ−１：Ｂ＋Ｗ＞を、ソースデータ要素ｓｒｃ１からコピーされるビットフィールド内の符号ビットの値に設定する（即ち、第１のソースデータ要素のビット＜Ｓ＞は、結果データ要素内のプレフィックス部分の各ビットで複製される）。これは、第１のソースデータ要素ｓｒｃ１から抽出されるビットフィールドの符号を保存する効果を有する。一方、ステップ７４において、ブール量ｅｘｔｅｎｄがＦＡＬＳＥである場合、ステップ７６は省略され、そのため、結果データ要素のプレフィックス部分は、その前の値（ステップ６０において設定されるゼロ値、またはステップ５６において設定される第２のソースデータ要素ｓｒｃ２の前の値のいずれか）を保持する。Ｂ＋Ｗ＝Ｎである場合、ステップ７６はまた、プレフィックス部分が存在しないこの場合のように、省略される。
【０１１３】
ステップ７８において、結果データ値内の結果データ要素の再順序付けは、例えば、図８Ａおよび８Ｂを参照して上で説明されるように、ビットフィールド操作命令のｃｏｎｔｒｏｌ１３フィールドから特定される反転情報Ｖに基づいて、適用される。一部のハードウェア実装において、このステップは、ステップ７２における結果データ要素の生成と並行して、実施されてもよいということに留意されたい。
【０１１４】
したがって、ビットフィールド操作命令の制御下では、各結果データ要素が、対応する第１のソースデータ要素ｓｒｃ１内の所望の位置＜Ａ＋Ｗ−１：Ａ＞から採られるビットフィールドを含む；結果データ要素内のビットフィールドを境界するプレフィックスおよびサフィックス部分が、ゼロ値、符号拡張値、または所望に応じて、第２のソースデータ要素ｓｒｃ２の値に設定される；ならびに、任意に、結果内の結果データ要素の再順序付けも実施される、結果データ値が生成される。したがって、ビットフィールド操作命令は、一般的な符号化内の広範囲のビットフィールド操作を提供する。
【０１１５】
さらに、ビットフィールド操作命令はまた、ビットフィールドが第１のソースデータ要素ｓｒｃ１全体に対応するように、パラメータＳおよびＲを適切な値に設定することによって、データ要素再順序付け命令として使用することもできる。この場合、結果データ要素は、対応する第１のソースデータ要素と同じであるが、反転情報Ｖに従って、結果データ値内に再順序付けされる。
【０１１６】
図１０は、図９のステップ６４において示されるように（および図１５のステップ１６０において、以下で説明されるように）、ＴＲＩＤＥＣＯＤＥ関数を使用したｃｏｎｔｒｏｌ１３フィールドの復号化の実施形態を例解する。ｃｏｎｔｒｏｌ１３フィールドの復号化は、命令復号器６、処理回路４によって、または命令復号器６および処理回路４の組み合わせによって、実施されてもよい。以下で説明されるように、ｃｏｎｔｒｏｌ１３フィールドは、異なる種類の命令に対して使用されてもよい。図１０を参照して称される「データサイズ」は、図２〜９を参照して説明される、ビットフィールド操作命令のデータ要素サイズＮ、および図１１〜１５を参照して説明される、ビット単位の論理命令のパターン繰り返しサイズＮに対応する。
【０１１７】
図１０のステップ１００において、パラメータＶ＜５：０＞は、０ｂ００００００の全てゼロ値に初期化される。これは、ｃｏｎｔｒｏｌ１３フィールド内で符号化されない反転情報Ｖのいずれの値も、ゼロ値をとることを確実とし、そのため、対応する再順序付けの反復が実施されないことを確実とする。
【０１１８】
ステップ１０２において、一時的な値ｔｅｍｐ＜６：０＞は、ｃｏｎｔｒｏｌ１３フィールドのビット＜１２＞を、ｃｏｎｔｒｏｌ１３フィールドのビット＜５：０＞の逆数と連結することによって判定され、長さパラメータｌｅｎは、ｔｅｍｐ＜６：０＞内の「１」値を有する最高（最上位）ビットのビット位置として判定される。値ｔｅｍｐ＜６：０＞は、その中に第１の部分３０が存在し得るｃｏｎｔｒｏｌ１３フィールドの部分のビット値を表す。データサイズが６４ビットである場合、「１」値を有する最上位ビットは、ｔｅｍｐ＜６：０＞のビット＜６＞であり、そのためｌｅｎ＝６である。他のデータサイズに関して、ｔｅｍｐ＜６：０＞内の最高「１」ビットは、ｃｏｎｔｒｏｌ１３フィールドのビット＜５：０＞内の最高「０」の位置に対応し、そのため、それぞれＮ＝３２、１６、８、４、２、１に対して、ｌｅｎ＝５、４、３、２、１、０である（図５および１２を参照されたい）。このため、長さパラメータｌｅｎは、第１の部分３０のサイズの指標であり、これは、データサイズＮ、ならびにＲ、Ｓ、およびＶパラメータの符号化形式が、図１０のステップ１０４〜１１４において判定されることを可能にする。一時的な値ｔｅｍｐがｃｏｎｔｒｏｌ１３フィールドの復号化中に生成されることは、不可欠ではなく、一部の実施形態において、単一の演算がｃｏｎｔｒｏｌ１３フィールドの値から直接ｌｅｎパラメータを判定してもよいということが理解されるであろう。
【０１１９】
図１０のステップ１０４において、データサイズＮは、値０ｂ１を、ｌｅｎビット位置分、左にシフトすることによって判定される。例えば、ｌｅｎ＝２である場合、０ｂ１の値を左に２つシフトすることは、値０ｂ１００、即ち、４ビットのデータサイズＮをもたらす。したがって、データサイズＮは、２ｌｅｎと同等である。このように、ｃｏｎｔｒｏｌ１３フィールドの第１の部分３０のサイズは、図５および１２に示されるように、対応するデータサイズＮに相関させることができる。
【０１２０】
図１０のステップ１０６において、長さパラメータｌｅｎが０に等しいかどうかが判定される。ｌｅｎ＝０である場合、ステップ１０８において、回転パラメータＲおよび最上位ビット位置Ｓは、０に設定される。これは、１ビットのデータ要素サイズに対応し、それに対して、唯一の適用することができる、可能なビットフィールド操作は、各第１のソースデータ要素ｓｒｃ１の単一のビットを、対応する結果データ要素ｓｒｃ２の単一のビットにコピーすることであるため、Ｎ＝１の場合は、いかなる回転および最上位ビット位置パラメータＲ、Ｓも必要ない（この場合、ｃｏｎｔｒｏｌ１３フィールドの符号化が、Ｒ、Ｓを示すために使用されるであろうビットを、代わりに反転情報Ｖおよび第１の部分３０を示すために使用するということに留意されたい）。
【０１２１】
ステップ１０６において、長さパラメータｌｅｎがゼロに等しくない場合、ステップ１１０において、回転パラメータＲは、ｃｏｎｔｒｏｌ１３フィールドのビット＜ｌｅｎ＋５：６＞の値を有する、符号なし整数に設定される一方、最上位ビット位置Ｓは、ｃｏｎｔｒｏｌ１３フィールドのビット＜ｌｅｎ−１：０＞の値を有する、符号なし整数に設定される。これは、図５および１２に示されるようなｃｏｎｔｒｏｌ１３フィールドの符号化に対応する。
【０１２２】
ステップ１１２において、長さパラメータが６未満であるかどうかが判定される。そのような場合、ステップ１１４において、反転情報Ｖのビット＜５：ｌｅｎ＞は、ｃｏｎｔｒｏｌ１３フィールドのビット＜１１：ｌｅｎ＋６＞に等しく設定される。反転情報のビット＜ｌｅｎ−１：０＞は、図１０のステップ１００において初期化されるように、それらのゼロ値を保持する。重ねて、これは、図５に示されるようなｃｏｎｔｒｏｌ１３フィールドの符号化に対応する。
【０１２３】
一方、ステップ１１２において、ｌｅｎ＝６である場合、データサイズは、図５の実施形態に関して、６４ビットデータ値全体のサイズに対応する、最大データ要素サイズである、６４ビットである。ｌｅｎ＝６である場合、データ値内の単一のデータ要素を順序付ける方法は１つしかないため、データ要素のいかなる再順序付けも存在し得ない。したがって、図１０のステップ１１４は、ｌｅｎ＝６である場合、省略され、再順序付け情報Ｖを、ステップ１００において設定されるように、０に等しくさせ続ける。
【０１２４】
最終的に、ステップ１１６において、パラメータＲ、Ｓ、Ｖ、およびＮの判定された値は、ｃｏｎｔｒｏｌ１３フィールドを含有する命令を処理する時の、処理回路４による使用のために、返される。
【０１２５】
図５に示されるようなｃｏｎｔｒｏｌ１３フィールドの符号化は、他のタイプの命令、ならびにビットフィールド操作命令のために使用することができる。ｃｏｎｔｒｏｌ１３フィールドの符号化は、データサイズの群の選択されたもの、およびビット数が選択されたデータサイズに依存して変化する、少なくとも１つの制御パラメータを指定する、いかなる種類の命令にも有用である。ビットフィールド操作命令は、ＳＩＭＤ命令の例である。ｃｏｎｔｒｏｌ１３の符号化は、データ要素サイズ、およびビット数がデータ要素サイズに依存して変化する、少なくとも１つの他のパラメータを指定する、別の命令にも同様に有用であり得る。
【０１２６】
図１１は、ｃｏｎｔｒｏｌ１３の符号化を使用する命令の別の例である、ビット単位の論理命令ＬＯＧＩＣを示す。ビット単位の論理命令のｃｏｎｔｒｏｌ１３フィールドは、図１２に示されるように符号化される。図５および１２の比較は、ＲおよびＳパラメータが、ビットフィールド操作命令ＢＦに関して、ビット単位の論理命令ＬＯＧＩＣに対して同じように特定されること、ならびに、図５において、データ要素サイズＮが、ビットフィールド操作命令に対して特定されるのと同じように、パターン繰り返しサイズＮが、ビット単位の論理命令に対して特定されることを示す。ビット単位の論理命令は、反転情報Ｖと同等のものは有さず、そのため、ビットフィールド操作命令ＢＦに対する反転情報Ｖを表すｃｏｎｔｒｏｌ１３フィールドのビットは、ビット単位の論理命令ＬＯＧＩＣに対するｃｏｎｔｒｏｌ１３フィールドの符号化において使用されない。他の実施形態において、図１２においてｘとして示される使用されないビットが、別のパラメータを示し得るということが理解されるであろう。
【０１２７】
図１３および１４は、ビット単位の論理命令ＬＯＧＩＣの関数を例解する。命令は、第１のソースデータ値ｓｒｃ１を記憶するソースレジスタＲｎを特定する。ビット単位の論理命令のサブ演算コードフィールドｏｐｃは、第１のソースデータ値ｓｒｃ１およびマスクデータ値に適用されるべき論理演算のタイプを示す。例えば、論理演算は、図１４に示されるように、ＡＮＤ演算、ＯＲ演算、または排他的ＯＲ（ＸＯＲ）演算のうちの１つであってもよい。
【０１２８】
命令復号器６は、選択された論理演算を使用して、ソースデータ値ｓｒｃ１をマスクデータ値（マスク）を組み合わせることによって、結果値を生成するように、処理回路４を制御するための制御信号を生成することによって、論理命令に応答する。マスクデータ値は、論理命令のｃｏｎｔｒｏｌ１３フィールドから特定されるような、選択されたデータサイズＮ、ならびにパラメータＲおよびＳを使用して判定される値である。
【０１２９】
マスクデータ値は、ビットの繰り返しパターンを含む。繰り返しパターンの繰り返しの単位は、ｃｏｎｔｒｏｌ１３パラメータによって特定される、選択されたデータサイズＮである。各繰り返しパターンは、Ｓ＋１ビットが「１」値を有し、他方のビットが「０」値を有する、Ｎビットから成る。繰り返しパターンは、各々が１値を有する（Ｓ＋１）ビットが、パターンの最下位端に位置した場合（より上位なビットは「０」値を有する）、および、次いで、パターンがＲビット位置分、右に回転された場合に生じる値と同等である。他の実施形態において、回転パラメータＲは、右回転よりもむしろ左回転の量を示し得るということが理解されるであろう。繰り返しパターンは、図１３に示されるように、マスクデータ値を通じて、Ｍ／Ｎ回繰り返される（ここでは、Ｍは、ｓｒｃ１およびマスクデータ値によって含まれるビット数である）。したがって、ｃｏｎｔｒｏｌ１３フィールド内で符号化されるＮ、Ｒ、およびＳの値は、種々の異なるマスクが、論理演算を使用して、ソースデータ値ｓｒｃ１と組み合わせるために生成されることを可能にする。
【０１３０】
マスク値は、図１４に示されるように、ビット単位のＡＮＤ、ＯＲ、または排他的ＯＲ（ＸＯＲ）演算のうちの１つを使用して、ソースデータ値ｓｒｃ１と組み合わされる。論理演算は、例えば、データ値の特定の部分のビット値を試験、設定、消去、もしくは反転する、またはデータ値の特定の部分を隔離するために使用することができる。マスクデータ値は、実際に、処理回路４によって生成される必要はないが、代わりに、処理回路４が、論理演算を使用して、マスクをソースデータ値ｓｒｃ１と組み合わせた結果と同等である形態を有する、最終結果を単に生成してもよいということに留意されたい。
【０１３１】
図１５は、図１１〜１４に示される形態のビット単位の論理命令を処理する方法を示す。ステップ１５０において、サブ演算コードフィールドｏｐｃの値が判定される。サブ演算コードフィールドが０ｂ００の値を有する場合、論理演算は、ステップ１５２において、ＡＮＤ演算であると判定される。サブ演算コードフィールドｏｐｃが０ｂ０１の値を有する場合、論理演算は、ステップ１５４において、ＯＲ演算であると判定される。サブ演算コードフィールドｏｐｃが０ｂ１０の値を有する場合、論理演算は、ステップ１５６において判定されるように、排他的ＯＲ（ＸＯＲ）演算である。０ｂ１１のｏｐｃ値は、本実施形態において、留保されるが、別の実施形態において、異なる形態の論理演算に割り当てられ得る。
【０１３２】
サブ演算コードフィールドｏｐｃの値にかかわらず、ステップ１６０において、パラメータＲ、Ｓ、Ｖ、およびＮは、図１０を参照して説明されるように、ＴＲＩＤＥＣＯＤＥ関数を使用して、ｃｏｎｔｒｏｌ１３フィールドから判定される。この場合、Ｎは、ソースデータ値に適用されるべきマスク内の繰り返しパターンのサイズを表す。Ｓ＋１は、マスク値内の「１」ビットの数を示す。Ｒは、マスク値内の「１」ビットの位置を示す。論理命令に関して、ビットフィールド操作命令のために使用される反転情報Ｖは、関心対象ではなく、そのため、ＴＲＩＤＥＣＯＤＥ関数によって返されるＶの値は、論理演算の結果を計算する時、無視される。
【０１３３】
ステップ１６２において、ビットの繰り返しパターンが判定される。繰り返しパターンは、「０」の値を有するビット＜Ｎ−１：Ｓ＋１＞、および「１」の値を有するビット＜Ｓ：０＞を含む、ビット＜Ｎ−１：０＞として初期化される。ステップ１６４において、ビットの繰り返しパターンは、Ｒビット位置分回転される（回転は、所望に応じて、右または左であってもよいが、図１３の実施形態においては、回転は右である）。
【０１３４】
ステップ１６６において、マスクデータ値は、マスクを通じて、ビットの回転された繰り返しパターンをＭ／Ｎ回複製することによって形成され、ここでは、Ｍは、この特定の処理演算のために使用されるデータ値サイズである。例えば、Ｍは、ビット単位の論理命令のｓｆフィールドによって特定される、レジスタアクセスサイズに基づいて判定されてもよい。次いで、ステップ１６８において、結果データ値は、ステップ１５２、１５４、１５６のうちの１つにおいて選択される論理演算を使用して、第１のソースデータ値ｓｒｃ１をマスクデータ値と組み合わせた結果として生成される。
【０１３５】
重ねて、図１５のステップは、一例に過ぎず、連続ではなくむしろ、互いに並行して実施されてもよい。また、ステップ１６６において説明されるマスク値は、実際に、処理回路４によって生成されなくてもよいが、代わりに、処理回路４が、ソースデータ値ｓｒｃ１、およびビット単位の論理命令のｃｏｎｔｒｏｌ１３フィールドから直接、ステップ１６８において、結果データ値を生成してもよい。
【０１３６】
したがって、異なる命令が、関連付けられた処理演算を制御するためのパラメータを示すように、同じ形式のｃｏｎｔｒｏｌ１３フィールドを使用してもよい。図５および１２の実施形態に示されるように、異なる種類の命令のためのパラメータを示すように、共通の符号化を使用することによって、これらの命令を復号化および処理するためのハードウェアのうちの一部を共有することができ、そのため、処理回路４および命令復号器６の複雑性を低減することができる。
【０１３７】
ビットフィールド操作命令およびビット単位の論理命令に対応する演算を示すための例示的な疑似コードを、以下に示す。疑似コードに示される演算は、例に過ぎず、処理装置２のハードウェアが、これらのステップを実際に実施するための要素を含む必要はない。実際、疑似コードに示されるステップのうちの一部は、一連の逐次的ステップとしてよりもむしろ、互いに並行して実施されてもよい。それにもかかわらず、疑似コードは、当業者が、疑似コードに示される処理ステップの結果と同等な結果データ値を生成するためのハードウェア実施形態をもたらすことができるには十分である。疑似コードにおいて、「ｆｒｏｍ」、「ｔｏ」、「ｗｉｄｔｈ」、および「ｓｉｚｅ」というパラメータは、それぞれ、上で説明されるようなパラメータＡ、Ｂ、Ｗ、およびＮに対応する。「ｄａｔａｓｉｚｅ」というパラメータは、上で説明されるようなソースおよび結果データ値のサイズＭを示す。「Ｒ［ｎ］」および「Ｒ［ｄ］」という用語は、ソースおよび宛先レジスタＲｎ、Ｒｄをそれぞれ表す。疑似コードにおいて、‘１１０’といったシングルクォーテーションマーク内の１および０の列は、２進表記における連続ビットの文字列を表す。ＵＩｎｔという関数は、ビットの文字列を、それらが表す符号なし整数値に変換し、そのため、ＵＩｎｔ（‘１１０’）は、値６を返す。
【０１３８】
疑似コードの第１の部分は、ｃｏｎｔｒｏｌ１３フィールドを復号化するためのＴＲＩＤＥＣＯＤＥ関数の実施形態を示す。疑似コードは、図１０の演算に対応する。ＴＲＩＤＥＣＯＤＥ関数は、後に、ビットフィールド操作命令およびビット単位の論理命令の両方の処理において使用されるということに留意されたい。
／／ビットフィールド即値ｃｏｎｔｒｏｌ１３を復号化して、Ｒ、Ｓ、Ｖ、およびＳＩＺＥ制御パラメータを求める
（ｉｎｔｅｇｅｒ，  ｉｎｔｅｇｅｒ，  ｂｉｔｓ（６），  ｉｎｔｅｇｅｒ）  ＴＲＩＤＥＣＯＤＥ（ｂｉｔｓ（１３）  ｃｏｎｔｒｏｌ１３）
ｉｎｔｅｇｅｒ  Ｒ；
ｉｎｔｅｇｅｒ  Ｓ；
ｉｎｔｅｇｅｒ  ｌｅｎ；
ｂｉｔｓ（６）  Ｖ  ＝  Ｚｅｒｏｓ（）；
ｌｅｎ  ＝  ＨｉｇｈｅｓｔＳｅｔＢｉｔ（ｃｏｎｔｒｏｌ１３＜１２＞：ＮＯＴ（ｃｏｎｔｒｏｌ１３＜５：０＞））；
ｉｆ  ｌｅｎ  ＜  ０  ｔｈｅｎ  ＵＮＤＥＦＩＮＥＤ；
ｉｆ  ｌｅｎ  ＝＝  ０  ｔｈｅｎ
Ｒ  ＝  ０；
Ｓ  ＝  ０；
ｅｌｓｅ
Ｒ  ＝  ＵＩｎｔ（ｃｏｎｔｒｏｌ１３＜ｌｅｎ＋５：６＞）；
Ｓ  ＝  ＵＩｎｔ（ｃｏｎｔｒｏｌ１３＜ｌｅｎ−１：０＞）；
ｉｆ  ｌｅｎ  ＜  ６  ｔｈｅｎ
Ｖ＜５：ｌｅｎ＞  ＝  ｃｏｎｔｒｏｌ１３＜１１：ｌｅｎ＋６＞；
ｒｅｔｕｒｎ  （Ｒ，  Ｓ，  Ｖ，  １  ＜＜  ｌｅｎ）；
【０１３９】
疑似コードの次の部分は、ビットフィールド操作命令の復号化および実行に対応する：
／／ビットフィールド復号化
ｉｎｔｅｇｅｒ  ｎ  ＝  ＵＩｎｔ（Ｒｎ）；
ｉｎｔｅｇｅｒ  ｄ  ＝  ＵＩｎｔ（Ｒｄ）；
ｉｎｔｅｇｅｒ  ｄａｔａｓｉｚｅ  ＝  ｉｆ  ｓｆ  ＝＝  ‘１’  ｔｈｅｎ  ６４  ｅｌｓｅ  ３２；    
ｂｏｏｌｅａｎ  ｉｎｚｅｒｏ；
ｂｏｏｌｅａｎ  ｅｘｔｅｎｄ；
ｉｎｔｅｇｅｒ  Ｒ；
ｉｎｔｅｇｅｒ  Ｓ；
ｂｉｔｓ（６）  Ｖ；
ｉｎｔｅｇｅｒ  ｓｉｚｅ；
ｉｎｔｅｇｅｒ  ｆｒｏｍ；
ｉｎｔｅｇｅｒ  ｔｏ；
ｉｎｔｅｇｅｒ  ｗｉｄｔｈ；
ｃａｓｅ  ｏｐｃ  ｏｆ
ｗｈｅｎ  ‘００’  ｉｎｚｅｒｏ  ＝  ｔｒｕｅ；    ｅｘｔｅｎｄ  ＝  ｔｒｕｅ；    ／／図７のＳＢＦＸ／ＳＢＦＩＺ
ｗｈｅｎ  ‘０１’  ｉｎｚｅｒｏ  ＝  ｆａｌｓｅ；  ｅｘｔｅｎｄ  ＝  ｆａｌｓｅ；  ／／図７のＢＦＸＩＬ／ＢＦＩ
ｗｈｅｎ  ‘１０’  ｉｎｚｅｒｏ  ＝  ｔｒｕｅ；    ｅｘｔｅｎｄ  ＝  ｆａｌｓｅ；  ／／図７のＵＢＦＸ／ＵＢＦＩＺ
ｗｈｅｎ  ‘１１’  ＵＮＤＥＦＩＮＥＤ；
ｉｆ  ｄａｔａｓｉｚｅ  ＝＝  ３２  ｔｈｅｎ
／／３２ビットデータ値に関して、６４ビットデータ要素サイズであることはできない
／／そのため、ｃｏｎｔｒｏｌ１３フィールドのビット＜１２＞は、１であることはできない。
ｉｆ  ｃｏｎｔｒｏｌ１３＜１２＞  ＝＝  ‘１’  ｔｈｅｎ
ＵＮＤＥＦＩＮＥＤ；
／／また、３２ビットデータ値に関して、３２ビットの群のいかなる再順序付けも存在することはできず、
／／そのため、ｃｏｎｔｒｏｌ１３フィールドのビット＜１１＞もまた、１であることはできない。
ｅｌｓｉｆ  ｃｏｎｔｒｏｌ１３＜１１＞  ＝＝  ‘１’  ｔｈｅｎ
ＵＮＤＥＦＩＮＥＤ；
／／上で定義される
／／ＴＲＩＤＥＣＯＤＥ関数を使用して、Ｒ、Ｓ、Ｖ、およびｓｉｚｅの値を復号化する
（Ｒ，  Ｓ，  Ｖ，  ｓｉｚｅ）  ＝  ＴＲＩＤＥＣＯＤＥ（ｃｏｎｔｒｏｌ１３）；  
ｉｆ  Ｓ  ＞＝  Ｒ  ｔｈｅｎ
／／ＢＦＸの場合
ｆｒｏｍ  ＝  Ｒ；
ｔｏ  ＝  ０；
ｗｉｄｔｈ  ＝  （Ｓ  ＋  １）  −  Ｒ；
ｅｌｓｅ
／／ＢＦＩの場合
ｆｒｏｍ  ＝  ０；
ｔｏ  ＝  ｓｉｚｅ  −  Ｒ；
ｗｉｄｔｈ  ＝  （Ｓ  ＋  １）；
／／ビットフィールド実行
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｏｐｅｒａｎｄ１  ＝  Ｒ［ｎ］；
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｒｅｓｕｌｔ；
ｉｎｔｅｇｅｒ  ｂａｓｅ；
ｉｎｔｅｇｅｒ  ｓｒｃ；
ｉｎｔｅｇｅｒ  ｄｓｔ；
ｉｎｔｅｇｅｒ  ｖｂｉｔ；
／／ｉｎｚｅｒｏが真である場合は、結果をゼロに、またはｉｎｚｅｒｏが偽である場合は、宛先レジスタのコピーに初期化する／／
ｒｅｓｕｌｔ  ＝  ｉｆ  ｉｎｚｅｒｏ  ｔｈｅｎ  Ｚｅｒｏｓ（）  ｅｌｓｅ  Ｒ［ｄ］；
／／ｓｒｃオペランドの各データ要素からのビットフィールドを、結果の対応する
／／データ要素にコピーする
ｂａｓｅ  ＝  ０；
ｗｈｉｌｅ  ｂａｓｅ  ＜  ｄａｔａｓｉｚｅ  ｄｏ
ｓｒｃ  ＝  ｂａｓｅ  ＋  ｆｒｏｍ；
ｄｓｔ  ＝  ｂａｓｅ  ＋  ｔｏ；
ｒｅｓｕｌｔ＜ｄｓｔ＋ｗｉｄｔｈ−１：ｄｓｔ＞  ＝  ｏｐｅｒａｎｄ１＜ｓｒｃ＋ｗｉｄｔｈ−１：ｓｒｃ＞；
／／必要とされる場合、符号ビット複製を実施する
ｉｆ  ｅｘｔｅｎｄ  ＆＆  ｔｏ  ＋  ｗｉｄｔｈ  ＜  ｓｉｚｅ  ｔｈｅｎ
ｒｅｓｕｌｔ＜ｂａｓｅ＋ｓｉｚｅ−１：ｄｓｔ＋ｗｉｄｔｈ＞  ＝
Ｒｅｐｌｉｃａｔｅ（ｓｒｃ＜ｂａｓｅ＋Ｓ＞，  ｓｉｚｅ−（ｔｏ＋ｗｉｄｔｈ））；
ｂａｓｅ  ＝  ｂａｓｅ  ＋  ｓｉｚｅ；
／／Ｖ＜ｖｂｉｔ＞＝１である場合、結果において、２＾ｖビットのビットの隣接対を反転させる
ｆｏｒ  ｖｂｉｔ  ＝  ０  ｔｏ  ５
ｉｆ  Ｖ＜ｖｂｉｔ＞  ＝＝  ‘１’  ｔｈｅｎ
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｔｍｐ  ＝  ｒｅｓｕｌｔ；
ｓｉｚｅ  ＝  １  ＜＜  ｖｂｉｔ；
ｂａｓｅ  ＝  ０；
ｗｈｉｌｅ  ｂａｓｅ  ＜  ｄａｔａｓｉｚｅ  ｄｏ
ｒｅｓｕｌｔ＜ｂａｓｅ＋ｓｉｚｅ−１：ｂａｓｅ＞  ＝  ｔｍｐ＜ｂａｓｅ＋（２＊ｓｉｚｅ）−１：ｂａｓｅ＋ｓｉｚｅ＞；
ｒｅｓｕｌｔ＜ｂａｓｅ＋（２＊ｓｉｚｅ）−１：ｂａｓｅ＋ｓｉｚｅ＞  ＝  ｔｍｐ＜ｂａｓｅ＋ｓｉｚｅ−１：ｂａｓｅ＞；
ｂａｓｅ  ＝  ｂａｓｅ  ＋  （２  ＊  ｓｉｚｅ）；
／／結果を宛先レジスタに書き込む
Ｒ［ｄ］  ＝  ｒｅｓｕｌｔ；
【０１４０】
疑似コードの次の部分は、ビット単位の論理命令を復号化および処理するための関数を示す：
／／論理（即時）復号化
ｉｎｔｅｇｅｒ  Ｒ；
ｉｎｔｅｇｅｒ  Ｓ；
ｉｎｔｅｇｅｒ  ｓｉｚｅ；
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｍａｓｋ；
ｉｎｔｅｇｅｒ  ｄａｔａｓｉｚｅ  ＝  ｉｆ  ｓｆ  ＝＝  ‘１’  ｔｈｅｎ  ６４  ｅｌｓｅ  ３２；
ｉｎｔｅｇｅｒ  ｎ  ＝  ＵＩｎｔ（Ｒｎ）；
ｉｎｔｅｇｅｒ  ｄ  ＝  ＵＩｎｔ（Ｒｄ）；
ＬｏｇｉｃａｌＯｐ  ｏｐｃｏｄｅ；
／／ｏｐｃは、適用されるべき論理演算のタイプを定義する
ｃａｓｅ  ｏｐｃ  ｏｆ
ｗｈｅｎ  ‘００’  ｏｐｃｏｄｅ  ＝  ＬｏｇｉｃａｌＯｐ＿ＡＮＤ；
ｗｈｅｎ  ‘０１’  ｏｐｃｏｄｅ  ＝  ＬｏｇｉｃａｌＯｐ＿ＯＲ；
ｗｈｅｎ  ‘１０’  ｏｐｃｏｄｅ  ＝  ＬｏｇｉｃａｌＯｐ＿ＥＯＲ；
ｏｔｈｅｒｗｉｓｅ  ＵＮＤＥＦＩＮＥＤ；
／／３２ビットデータ値に関して、６４ビットのパターン繰り返しサイズであることはできない
ｉｆ  ｄａｔａｓｉｚｅ  ＝＝  ３２  ＆＆  ｃｏｎｔｒｏｌ１３＜１２＞  ＝＝  ‘１’  ｔｈｅｎ  ＵＮＤＥＦＩＮＥＤ；
／／上で説明されるＴＲＩＤＥＣＯＤＥ関数を使用して、Ｒ、Ｓ、およびｓｉｚｅを復号化し、
／／Ｖの返された値を無視する
（Ｒ，  Ｓ，  −，  ｓｉｚｅ）  ＝  ＴＲＩＤＥＣＯＤＥ（ｃｏｎｔｒｏｌ１３）；
／／Ｒ、Ｓ、およびｓｉｚｅに基づいて、マスクを判定する
ｂｉｔｓ（ｓｉｚｅ）  ｐａｔｔｅｒｎ  ＝  Ｚｅｒｏｓ（ｓｉｚｅ−（Ｓ＋１））：Ｏｎｅｓ（Ｓ＋１）；
ｐａｔｔｅｒｎ  ＝  ＲＯＲ（ｐａｔｔｅｒｎ，  Ｒ）；
ｍａｓｋ  ＝  Ｒｅｐｌｉｃａｔｅ（ｐａｔｔｅｒｎ，  ｄａｔａｓｉｚｅ  ＤＩＶ  ｓｉｚｅ）；
／／論理（即時）実行
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｏｐｅｒａｎｄ１  ＝  Ｒ［ｎ］；
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｏｐｅｒａｎｄ２  ＝  ｍａｓｋ；
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｒｅｓｕｌｔ；
／／選択された論理演算を使用して、
／／ソースおよびマスクオペランドを組み合わせることによって、結果を生成する
ｃａｓｅ  ｏｐｃｏｄｅ  ｏｆ
ｗｈｅｎ  ＬｏｇｉｃａｌＯｐ＿ＡＮＤ  ｒｅｓｕｌｔ  ＝  ｏｐｅｒａｎｄ１  ＡＮＤ  ｏｐｅｒａｎｄ２；
ｗｈｅｎ  ＬｏｇｉｃａｌＯｐ＿ＯＲ      ｒｅｓｕｌｔ  ＝  ｏｐｅｒａｎｄ１  ＯＲ  ｏｐｅｒａｎｄ２；
ｗｈｅｎ  ＬｏｇｉｃａｌＯｐ＿ＥＯＲ  ｒｅｓｕｌｔ  ＝  ｏｐｅｒａｎｄ１  ＥＯＲ  ｏｐｅｒａｎｄ２；
／／宛先レジスタに結果を書き込む
Ｒ［ｄ］  ＝  ｒｅｓｕｌｔ；
【０１４１】
疑似コードの次の部分は、ｃｏｎｔｒｏｌ１３符号化を使用することができる、別の種類の命令の実施形態を示す。抽出命令は、いくつかの結果データ要素を含むデータ値をもたらし、各結果データ要素は、第１のソースオペランド（ｏｐｅｒａｎｄ１）の対応する第１のソースデータ要素、および第２のソースオペランド（ｏｐｅｒａｎｄ２）の対応する第２のソースデータ要素を連結することによって形成される値の選択された部分に対応する。本実施形態において、ｃｏｎｔｒｏｌ１３値は、データ要素サイズ、および連結された第１および第２のソースデータ要素のどの部分が、結果データ要素に含まれるかを示す値「ｌｓｂ」を定義する。データ要素サイズおよび「ｌｓｂ」値は、ＴＲＩＤＥＣＯＤＥ関数から返されるＮおよびＳの値に対応し、ＴＲＩＤＥＣＯＤＥ関数によって返されるＶおよびＲの値は、無視される。
／／抽出復号化
ｉｎｔｅｇｅｒ  ｄａｔａｓｉｚｅ  ＝  ｉｆ  ｓｆ  ＝＝  ‘１’  ｔｈｅｎ  ６４  ｅｌｓｅ  ３２；
ｉｎｔｅｇｅｒ  ｎ  ＝  ＵＩｎｔ（Ｒｎ）；
ｉｎｔｅｇｅｒ  ｍ  ＝  ＵＩｎｔ（Ｒｍ）；
ｉｎｔｅｇｅｒ  ｄ  ＝  ＵＩｎｔ（Ｒｄ）；
ｉｎｔｅｇｅｒ  ｌｓｂ；
ｉｎｔｅｇｅｒ  ｓｉｚｅ；
ｂｉｔｓ（１３）  ｃｏｎｔｒｏｌ１３；
ｉｆ  ｄａｔａｓｉｚｅ  ＝＝  ３２  ＆＆  Ｎ  ＝＝  ‘１’  ｔｈｅｎ  ＵＮＤＥＦＩＮＥＤ；
ｃｏｎｔｒｏｌ１３  ＝  Ｎ：Ｚｅｒｏｓ（６）：ｉｍｍ６；
（−，  ｌｓｂ，  −，  ｓｉｚｅ）  ＝  ＴＲＩＤＥＣＯＤＥ（ｃｏｎｔｒｏｌ１３）；
／／抽出実行
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｏｐｅｒａｎｄ１  ＝  Ｒ［ｎ］；
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｏｐｅｒａｎｄ２  ＝  Ｒ［ｍ］；
ｂｉｔｓ（ｄａｔａｓｉｚｅ）  ｒｅｓｕｌｔ；
ｂｉｔｓ（２＊ｓｉｚｅ）  ｃｏｎｃａｔ；
ｉｎｔｅｇｅｒ  ｂｂｉｔ  ＝  ０；
ｗｈｉｌｅ  ｂｂｉｔ  ＜  ｄａｔａｓｉｚｅ
ｉｎｔｅｇｅｒ  ｅｂｉｔ  ＝  ｂｂｉｔ  ＋  ｓｉｚｅ  −  １；
ｃｏｎｃａｔ  ＝  ｏｐｅｒａｎｄ１＜ｅｂｉｔ：ｂｂｉｔ＞  ：  ｏｐｅｒａｎｄ２＜ｅｂｉｔ：ｂｂｉｔ＞；
ｒｅｓｕｌｔ＜ｅｂｉｔ：ｂｂｉｔ＞  ＝  ｃｏｎｃａｔ＜ｌｓｂ＋ｓｉｚｅ−１：ｌｓｂ＞；
ｂｂｉｔ  ＝  ｂｂｉｔ  ＋  ｓｉｚｅ；
Ｒ［ｄ］  ＝  ｒｅｓｕｌｔ；
【０１４２】
図１６は、使用することができる仮想機械実装を例解する。先で説明される実施形態は、関連する技術を支援する特定の処理ハードウェアを動作させるための装置および方法に関して、本発明を実装する一方で、ハードウェアデバイスのいわゆる仮想機械実装を提供することもまた可能である。これらの仮想機械実装は、仮想機械プログラム２４０を支援するホストオペレーティングシステム２２０を実行するホストプロセッサ２００上で実行する。典型的に、大型で強力なプロセッサが、合理的な速度で実行する仮想機械実装を提供ために必要とされるが、かかるアプローチは、互換性および再利用の理由により、別のプロセッサにネイティブなコードを実行することが所望される時といった、ある状況において、正当化され得る。仮想機械プログラム２４０は、仮想機械プログラム２４０によってモデル化されているデバイスである、実際のハードウェアによって提供されるであろう、アプリケーションプログラムインターフェースと同じである、アプリケーションプログラムインターフェースを、アプリケーションプログラム２６０に提供する。このため、メモリアクセスの制御を含むプログラム命令は、仮想機械ハードウェアとの相互作用をモデル化するように、仮想機械プログラム２４０を使用して、アプリケーションプログラム２６０内から実行することができる。
【０１４３】
本発明の例解的な実施形態を、添付の図面を参照して、本明細書において詳細に説明してきたが、本発明は、それらの正確な実施形態に限定されないということ、ならびに添付の請求項によって定義されるように、本発明の範囲および精神から逸脱することなく、当業者によって、種々の変更および修正をその中で行うことができるということが理解されるものとする。
【符号の説明】
【０１４４】
２  データ処理装置
４  処理回路
６  命令復号器
８  レジスタ
１０  メモリシステム
１２  加算器
１４  乗算器
１６  シフタ
３０  第１の部分
３２  第２の部分
２００  ホストプロセッサ
２２０  ホストオペレーティングシステム
２４０  仮想機械プログラム
２６０  アプリケーションプログラム
【図１】
0005897696.tif 000002
【図２】
0005897696.tif 000003
【図３】
0005897696.tif 000004
【図４】
0005897696.tif 000005
【図５】
0005897696.tif 000006
【図６】
0005897696.tif 000007
【図７】
0005897696.tif 000008
【図８Ａ】
0005897696.tif 000009
【図８Ｂ】
0005897696.tif 000010
【図９】
0005897696.tif 000011
【図１０】
0005897696.tif 000012
【図１１】
0005897696.tif 000013
【図１２】
0005897696.tif 000014
【図１３】
0005897696.tif 000015
【図１４】
0005897696.tif 000016
【図１５】
0005897696.tif 000017
【図１６】
0005897696.tif 000018