JP5897696B2 - データ処理装置および方法 - Google Patents

データ処理装置および方法 Download PDF

Info

Publication number
JP5897696B2
JP5897696B2 JP2014255950A JP2014255950A JP5897696B2 JP 5897696 B2 JP5897696 B2 JP 5897696B2 JP 2014255950 A JP2014255950 A JP 2014255950A JP 2014255950 A JP2014255950 A JP 2014255950A JP 5897696 B2 JP5897696 B2 JP 5897696B2
Authority
JP
Japan
Prior art keywords
value
bit
bits
data
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014255950A
Other languages
English (en)
Other versions
JP2015097099A (ja
Inventor
デイビッド・ジェームズ・シール
リチャード・ロイ・グリセンスウェイト
ナイジェル・ジョン・スティーブンズ
Original Assignee
アーム・リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2015097099A publication Critical patent/JP2015097099A/ja
Application granted granted Critical
Publication of JP5897696B2 publication Critical patent/JP5897696B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/764Masking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/768Data position reversal, e.g. bit reversal, byte swapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • User Interface Of Digital Computer (AREA)
  • Electrotherapy Devices (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は、データ処理の分野に関する。
データ処理システムにおいて、データ値は、時折、他のデータ値から独立して、その値が関心対象のものである、いくつかの隣接ビットを含有する場合がある。かかる隣接ビット群は、ビットフィールドと称され得、群における隣接ビットの数は、その幅と称され得る。例えば、RGB色値を表すデータ値は、それぞれ赤、緑、および青コンポーネントを表すビットフィールドを含む場合がある。時折、ビットフィールドをその周囲から隔離するように、ビットフィールドを含有するデータ値を操作することが望ましい場合がある。例えば、RGB色値の緑コンポーネントのみを抽出または置換したい場合がある。本技術は、多様な異なる種類のビットフィールド操作を実施するように、処理装置を制御することができる、ビットフィールド操作命令の効率的な符号化の提供を目指す。
本出願において、<X:Y>という表記は、ビット位置Xの最上位ビットからビット位置Yの最下位ビットにまで及ぶ、隣接ビット群を示す。<X:Y>によって説明される群の幅は、X−Y+1ビットである。例えば、<4:0>という表現は、ビット位置4から0において幅が5ビットの群を示し、ここでは、ビット<4>は、ビット<0>よりも上位である。<X:Y>という表記は、記憶順序は、ビットの上位下位の順序と同じである必要はない(例えば、ビッグエンディアンまたはリトルエンディアン記憶形式が使用されてもよい)ため、記憶場所内のビットのいかなる特定の記憶順序も示唆しないということに留意されたい。
本出願において、1および0の列が続く、プレフィックス0bは、2進表記における数値を表す。例えば、0b110は、10進表記における値6を表す。
一態様から見ると、本発明は、データ処理装置であって、
処理演算を実施するように構成される処理回路と、
前記処理演算を実施するように前記処理回路を制御するための制御信号を生成するように、プログラム命令に応答する、命令復号器と、を備え、
前記プログラム命令は、少なくとも、各々がNビット<N−1:0>を有する、少なくとも1つの第1のソースデータ要素を含む、第1のソースデータ値、各々がNビット<N−1:0>を有する、少なくとも1つの第2のソースデータ要素を含む、第2のソースデータ値、および制御値を特定する、ビットフィールド操作命令を含み、
前記制御値は、ビットフィールド幅W、ソースビット位置A、および結果ビット位置Bを示すための情報を含み、ここでは、1≦W≦N、0≦A≦(N−W)、および0≦B≦(N−W)であり、
前記命令復号器は、少なくとも1つの結果データ要素を含む結果データ値を生成するように、前記処理回路を制御するための制御信号を生成するように、前記ビットフィールド操作命令に応答し、各結果データ要素は、対応する第1のソースデータ要素、および対応する第2のソースデータ要素に対応し、各結果データ要素は、
(a) 前記対応する第1のソースデータ要素のビット<A+W−1:A>に対応するビット値を有する、ビット<B+W−1:B>と、
(b) B+W<Nである場合、(i)各々がゼロ値を有するビットを含む第1のプレフィックス値、(ii)前記対応する第2のソースデータ要素のビット<N−1:B+W>の前記ビット値を有する、第2のプレフィックス値、および(iii)前記対応する第1のソースデータ要素のビット<A+W−1:A>の符号拡張に対応するビット値を有する、第3のプレフィックス値のうちの1つとして、前記制御値に依存して選択されるプレフィックス値に対応するビット値を有する、ビット<N−1:B+W>と、
(c) B>0である場合、(i)各々がゼロ値を有するビットを含む第1のサフィックス値、および(ii)前記対応する第2のソースデータ要素のビット<B−1:0>の前記ビット値を有する、第2のサフィックス値のうちの1つとして、前記制御値に依存して選択されるサフィックス値に対応するビット値を有する、ビット<B−1:0>と、を含む、Nビット<N−1:0>を有し、
前記ビットフィールド操作命令は、前記ソースビット位置A=0であり、前記結果ビット位置B>0である、ビットフィールド挿入形態と、前記ソースビット位置A≧0であり、前記結果ビット位置B=0である、ビットフィールド抽出形態とを有し、
前記制御値は、前記ビットフィールド幅W、前記ソースビット位置A、および前記結果ビット位置Bを判定するために、最上位ビット位置Sおよび回転パラメータRを指定し、
S≧Rである場合、前記ソースビット位置A=Rであり、前記結果ビット位置B=0であり、前記ビットフィールド幅W=(S+1)−Rであり、前記ビットフィールド操作命令は、前記ビットフィールド抽出形態を有し、
S<Rである場合、前記ソースビット位置A=0であり、前記結果ビット位置B=N−Rであり、前記ビットフィールド幅W=S+1であり、前記ビットフィールド操作命令は、前記ビットフィールド挿入形態を有する、データ処理装置を提供する。
処理装置には、処理回路と、ビットフィールド操作演算を実施するように、処理回路を制御するように、ビットフィールド操作命令に応答する命令復号器と、が提供される。ビットフィールド操作命令は、少なくとも1つの第1のソースデータ要素を含む、第1のソースデータ値と、少なくとも1つの第2のソースデータ要素を含む、第2のソースデータ値とを、少なくとも特定する。ビットフィールド操作命令に応答して、処理回路は、少なくとも1つの結果データ要素を含む、結果データ値を生成するように制御される。各第1のソースデータ要素、第2のソースデータ要素、および結果データ要素は、Nビット<N−1:0>を有する。
各N−ビットの結果データ要素は、第1のソースデータ値の対応する第1のソースデータ要素のビット<A+W−1:A>に対応するビット値を有する、Wビット<B+W−1:B>を含む。したがって、各結果データ要素は、対応する第1のソースデータ要素から抽出される、Wビットのビットフィールドを含む。ソースビット位置Aは、第1のソースデータ要素内のビットフィールドの最下位ビットの位置を示し、結果ビット位置Bは、結果データ要素内のビットフィールドの最下位ビットを示し、ビットフィールド幅Wは、ビットフィールドによって含まれるビット数を示す。A、B、およびWという量は、1≦W≦N、0≦A≦N−W、および0≦B≦N−Wの範囲内にあり、ビットフィールド操作命令内の制御値によって特定される。制御値は、直接的に、またはA、B、およびWを導出するために使用することができる任意の組のパラメータを使用して間接的に、A、B、およびWを特定してもよい。制御値は、ビットフィールド操作命令符号化内の一組の連続ビットである必要はないが、命令符号化にわたり分布される2つ以上のビット群を含んでもよいということに留意されたい。
制御値が、B+W<Nであることを示す場合、各結果データ要素は、結果データ要素内のビットフィールドの最上位ビット<B+W−1>よりも上位であるビット<N−1:B+W>を含む、プレフィックス部分を含むであろう。本技術は、プレフィックス部分のビット値を設定するための異なるオプションを提供する。ビットフィールド操作命令の制御値は、何のタイプのプレフィックス部分が特定のビットフィールド操作のために使用されるかを示す情報を含む。制御値に依存して、プレフィックス値は、第1のプレフィックス値、第2のプレフィックス値、および第3のプレフィックス値のうちの1つとして選択される。
第1のプレフィックス値は、各々がゼロ値を有するビットを含む。第1のプレフィックス値が選択される時、各結果データ要素は、対応するソースデータ要素から抽出されるビットフィールドを含有し、ビットフィールドよりも上位のいずれのビットもゼロに設定される。これは、ビットフィールドの値を、ソースデータ要素の他の部分とは別個に処理することができるように、ソースデータ要素のビットフィールドを隔離するのに有用であり得る。
第2のプレフィックス値は、対応する第2のソースデータ要素のビット<N−1:B+W>のビット値を有する。したがって、第2のプレフィックス値が選択される時、ビットフィールド操作は、第2のソースデータ要素内に、第1のソースデータ要素のビットフィールドを挿入するのと同等な結果をもたらし、第2のソースデータ要素のどのより上位のビットも変化していないままである。これは、2つ以上のデータ値の部分を、単一のデータ値に組み合わせるのに有用であり得る。例えば、組み合わされたRGB色値は、RGBコンポーネントのうちの1つを含有するデータ値内に、他方の2つのコンポーネントに対応するビットフィールドを挿入するように、第2のプレフィックス形態のビットフィールド操作命令を使用することによって、別個のRGBコンポーネント値から組み立てることができる。
第3のプレフィックス値は、対応する第1のソースデータ要素のビット<A+W−1:A>の符号拡張に対応するビット値を有する。これは、符号拡張は、それが結果データ要素内に含まれる時、第1のソースデータ要素のビットフィールドの符号を保存するため、符号付きの値を表すビットフィールドに対して有用である。例えば、第1のソースデータ要素から抽出されるビットフィールド<A+W−1:A>が、負の数を表していた場合、第3のプレフィックス値によって提供される符号拡張は、結果データ要素内のビットフィールドの負の符号を維持する。
第1、第2、および第3のプレフィックス値のうちの適切なものを選択することによって、異なる種類のビットフィールド操作は、同じビットフィールド操作命令によって符号化することができる。単一のビットフィールド操作命令は、複数の異なる操作演算を提供することができるため、命令セットの符号化空間は、効率的に使用される。当業者は、ビットフィールド操作命令を実装するためのハードウェアが、多様な異なる形態を有してもよいということ、ならびに処理回路および命令復号器が、上で説明される形態の少なくとも1つの結果データ要素を有する結果値を生成する、いかなる種類のハードウェアも備えてもよいということを理解するであろう。
第3のプレフィックス値の符号拡張ビットは、データ値に対して使用される符号表現のタイプに依存して、異なる形態を有してもよい。しかしながら、一実施形態において、第3のプレフィックス値は、各々が対応する第1のソースデータ要素のビット<A+W−1>のビット値を有する、ビットを含んでもよい。多くの符号付きの2進数表現において、データ値が正または負であるかどうかを示す符号ビットは、そのデータ値の最上位ビットである。第1のソースデータ要素から抽出されるビットフィールドの最上位ビットは、ビット<A+W−1>であり、したがって、第3のプレフィックス値のビットの各々においてこのビットを複製することによって、抽出されたビットフィールドの符号は、そのビットフィールドが結果データ値内に挿入される時、維持される。
制御値が、結果ビット位置Bをゼロより大きいと定義する場合、結果データ要素は、ビットフィールドの最下位ビット<B>よりも下位の少なくとも1つのビット<B−1:0>を含む、サフィックス部分を有する。制御値に依存して、サフィックス値は、各々がゼロ値を有するビットを含む第1のサフィックス値、および対応する第2のソースデータ要素のビット<B−1:0>のビット値を有する第2のサフィックス値のうちの1つとして、選択されてもよい。第1のサフィックス値を選択することによって、ビットフィールドは、より下位のビットがゼロ値を有する状態で、結果データ要素内で隔離することができる。第2のサフィックス値を使用することによって、ビットフィールド操作は、第2のソースデータ要素のより下位のビットが変化していない状態で、第1のソースデータ要素のビットフィールドを、第2のソースデータ要素内に効果的に挿入する。
後に説明される実施形態において、命令符号化は、第2のプレフィックス値が選択される時に、第2のサフィックス値が選択され、第1および第3のプレフィックス値のうちの1つが選択される時に、第1のサフィックス値が選択されると説明されるが、第1、第2、および第3のプレフィックス値のうちの1つの、第1および第2のサフィックス値のうちの1つとのいかなる任意の組み合わせもまた、使用されてもよいということが理解されるであろう。
データ処理装置は、前記処理回路によって処理するためのデータ値を記憶するように構成される複数の記憶場所を備えてもよく、
前記ビットフィールド操作命令は、少なくとも、前記第1のソースデータ値を記憶するための第1のソース記憶場所、および宛先記憶場所を特定し、
前記命令復号器は、前記結果データ値を前記宛先記憶場所に記憶するように、前記処理回路を制御するための制御信号を生成するように、前記ビットフィールド操作命令に応答する。
ビットフィールド操作命令の一実施形態において、命令は、少なくとも、第1のソースデータ値を記憶するための第1のソース記憶場所、および生成された結果データ値を記憶するための宛先記憶場所を特定する。記憶場所は、例えば、レジスタ、メモリの場所、または処理回路によって処理するためのデータを記憶するための任意の他のデータストアであってもよい。
任意に、ビットフィールド操作命令は、第2のソースデータ値を記憶するための第2のソース記憶場所を指定してもよく、または第2のソースデータ値は、命令内で直接特定される即値であってもよい。
代替的に、一実施形態において、第2のソースデータ値は、ビットフィールド操作命令の実行の前に、宛先記憶場所に存在するデータ値であってもよい。この場合、結果データ値は、宛先記憶場所内の第2のソースデータ値を上書きする。ビットフィールド操作命令の制御値が、第2のプレフィックス値および第2のサフィックス値が選択されるようなものである場合、ビットフィールド操作の結果は、第1のソースデータ値からのビットフィールドが、宛先記憶場所の他のビットが変化していないままの状態で、宛先記憶場所内に挿入されることである。
一部の処理装置は、記憶場所(例えば、レジスタ)が、複数の異なる記憶場所サイズの記憶場所としてアクセスされることを可能にすることができる。したがって、ビットフィールド操作命令の制御値は、第1のソース記憶場所および宛先記憶場所の記憶場所サイズを特定するための情報を含んでもよい。記憶場所は、異なる方法で実装されてもよい。一実施形態において、異なるサイズ(例えば、64ビットの記憶場所の1つの群、および32ビットの記憶場所の別の群)を有する、物理的に異なる記憶場所が存在してもよい。代替的に、共通の組の記憶場所が、異なる記憶場所サイズでアクセス可能であってもよい。例えば、同じ64ビットの記憶場所は、64ビットのデータアクセスおよび32ビットのデータアクセスの対象であってもよい。64ビットの記憶場所の32ビットのデータアクセス中、記憶場所のビットのうちの32のみが、読み取られ得るか、または代替的に、記憶場所の全ての64ビットが読み取られてもよいが、次いで、ビットのうちの32は、データ値の任意の更なる処理を実施する前に破棄されてもよい。同様に、32ビットのデータ値が64ビットの記憶場所に書き込まれる時、他方の32ビットは、何らかの既定の値に、または32ビットのデータの符号拡張に設定されてもよく、または変化していないままとされてもよい。
一部の実施形態において、第1のソースデータ値、第2のソースデータ値、および結果データ値内に含まれる、1つ以上のデータ要素は、複数の異なるデータ要素サイズの中から選択される、データ要素サイズNを有してもよい。この場合、ビットフィールド操作命令の制御値もまた、データ要素サイズNを直接的または間接的に特定する情報を含んでもよい。可変データ要素サイズを提供することは、例えば、単一命令複数データ(SIMD)処理演算に対して有用であり得、ここでは、ビットフィールド操作が、第1のソースデータ値、第2のソースデータ値、および結果データ値内の複数の組の対応するデータ要素に対して、並行して適用される。
第1のソースデータ要素および結果データ要素内のビットフィールドの位置を示す、ビット位置AおよびBは、ビットフィールド操作命令の制御値によって特定される。ビットフィールド操作命令の一実施形態において、制御値は、ソースデータ要素内のいずれの位置からのビットフィールドも、結果データ要素内のいずれの場所にもコピーすることができるように、AおよびBのいずれの任意の値も特定してもよい。
しかしながら、一実施形態において、ビットフィールド操作命令は、ソースビット位置Aおよび結果ビット位置Bのうちの1つが、ゼロの値を有するように、符号化を有する。本技術は、最も一般的に所望されるタイプのビットフィールド操作演算に関して、ソースビット位置Aおよび結果ビット位置Bのうちの少なくとも1つが、ゼロであることを認識する。AおよびBのうちの1つをゼロに等しく設定することによって、AおよびBのうちのゼロではないもののみが、制御値によって特定されることが必要であり、そのため、命令符号化がより効率的になる。命令のビットフィールド挿入形態において、ソースデータ要素の最下位部分<W−1:0>に位置付けられるビットフィールドが、結果データ要素の任意の部分<B+W−1:B>に挿入されるように、A=0、およびB>0である。命令のビットフィールド抽出形態において、ビットフィールドが、ソースデータ要素の任意の部分<A+W−1:A>から抽出され、結果データ要素の最下位部分<W−1:0>にコピーされるように、A≧0、およびB=0である。命令の抽出および挿入形態は、ビットフィールド操作の最も一般的な形態を満たす。それにもかかわらず、AおよびBの両方にゼロではない値が所望されるビットフィールド操作が所望される場合、これは、依然として、2つのビットフィールド操作命令:ソース値の任意の位置Aからソースビットフィールドを抽出し、一時的な記憶場所の最下位部分にビットフィールドをコピーするためのビットフィールド抽出形態の命令、および一時的な記憶場所の最下位部分からビットフィールドを取り、このビットフィールドを結果値内の任意の位置Bに挿入するためのビットフィールド挿入形態の命令を使用して、実施することができる。
一実施形態において、装置は、前記制御値が、前記ビットフィールド幅W、前記ソースビット位置A、および前記結果ビット位置Bを判定するために、最上位ビット位置Sおよび要素回転パラメータRを指定するように、構成されてもよく、
S≧Rである場合、前記ソースビット位置A=Rであり、前記結果ビット位置B=0であり、前記ビットフィールド幅W=(S+1)−Rであり、前記ビットフィールド操作命令は、前記ビットフィールド抽出形態を有し、
S<Rである場合、前記ソースビット位置A=0であり、前記結果ビット位置B=N−Rであり、前記ビットフィールド幅W=S+1であり、前記ビットフィールド操作命令は、前記ビットフィールド挿入形態を有する。
ビットフィールド操作命令のこの符号化は、2つのパラメータSおよびRが、少なくとも、(a)ビットフィールド操作命令が、ビットフィールド抽出形態またはビットフィールド挿入形態かどうか、(b)第1のソースデータ要素内のビットフィールドの位置を示すソースビット位置A、(c)結果データ要素内のビットフィールドの位置を示す結果ビット位置B、および(d)ビットフィールドによって含まれるビット数を示すビットフィールド幅Wを特定するのに十分であるため、特に効率的である。
ビットフィールド挿入形態およびビットフィールド抽出形態の両方に関して、最上位ビット位置Sは、第1のソースデータ要素内のビットフィールドの最上位ビットのビット位置を表し、要素回転パラメータRは、ソースビット位置Aが結果ビット位置Bに移動された場合、各ソースデータ要素がその分右に回転されるであろう、ビット位置の数を表す。ビットフィールド挿入形態に関して、Rは、第1のソースデータ要素内のビットフィールドの最下位ビットのビット位置を表す一方、ビットフィールド抽出形態に関して、(N−R)の値は、結果データ要素内のビットフィールドの最下位ビット位置を特定する(ここで、Nは、データ要素サイズである)。
要素回転パラメータRが、ソースビット位置Aが結果ビット位置Bに移動された場合、各ソースデータ要素がその分右に回転されるであろう、ビット位置の数を表す一方、第1のソースデータ要素から結果データ要素を生成する時、実際に右回転を実施することは不可欠ではない。例えば、右回転の代わりに同等な左回転が使用されてもよく、または実際に回転を実施することなく、結果データ要素が生成されてもよい。
一実施形態において、最上位ビット位置Sは、ビットフィールド符号−ビットパラメータSを含んでもよい。第1のソースデータ要素が、符号付きのデータ値である場合、最上位ビット位置Sはまた、第1のソースデータ要素内の符号ビットの位置を特定する(上で言及される(a)から(d)の項目を特定することに加えて)。
装置は、前記制御値が、各々が可変ビット数を含む、第1の部分および第2の部分を含むように、配設されてもよく、
前記命令復号器および前記処理回路のうちの少なくとも1つは、前記制御値の前記第1の部分によって含まれるビット数を判定するように、および前記第1の部分によって含まれるビット数に基づいて、
(a) 前記少なくとも1つの第1のソースデータ要素のデータ要素サイズN、前記少なくとも1つの第2のソースデータ要素、および前記少なくとも1つの結果データ要素、ならびに
(b) 前記第2の部分のどのビットが、前記最上位ビット位置Sおよび前記回転パラメータRを示すか、
を判定するように、前記ビットフィールド操作命令に応答する。
データ要素サイズNが大きいほど、RおよびSの可能な値は大きい。したがって、RおよびSを表すために必要とされるビット数は、特定の演算に対して選択されるデータ要素サイズNに依存して変化する。制御値内に、RおよびSの最大の可能な値を特定するのに十分である固定ビット数を割り当てることが可能であろう一方、制御値に各々が可変長の第1の部分および第2の部分を提供することによって、より効率的な符号化を達成することができる。制御値のビットは、使用されているデータ要素サイズNに依存して、第1の部分または第2の部分のいずれかに可変的に割り当てることができる。可変長の第1の部分のサイズを検出することによって、装置は、データ要素サイズN、ならびに第2の部分のどのビットが最上位ビット位置Sおよび回転パラメータRを表すかを特定することができる。
一部の実施形態において、結果データ値は、第1および第2のソースデータ値内の対応する第1および第2のソースデータ要素と同じ順序で配置される結果データ要素を伴って生成されてもよい。
しかしながら、他の実施形態は、前記第1のソースデータ値が複数の第1のソースデータ要素を含み、前記第2のソースデータ値が複数の第2のソースデータ要素を含み、前記結果データ値が複数の結果データ要素を含む場合、前記制御値は、前記複数の結果データ要素が前記結果データ値内に配置される順序を示すためのデータ要素順序付け情報を含むように、配置されてもよい。
したがって、ビットフィールド操作命令はまた、所望される場合、データ要素再順序付けを実装するために使用することができる。例えば、2つの結果データ要素AおよびBを含む結果データ値が、対応する第1のソースデータ要素A’およびB’を含む第1のソースデータ値、ならびに対応する第2のソースデータ要素A’’およびB’’を含む第2のソースデータ値に基づいて、生成されてもよい。次いで、制御値によって示されるデータ要素順序付け情報は、結果データ要素が、順序AB(ソースデータ値内の対応するソースデータ要素の順序に対応する)で、または反対の順序BAで、配置されるかどうかを指定してもよい。
ビットフィールド操作命令は、所望される場合、ビットフィールド操作がそのデータ値において実施される場合でさえも、データ値内のデータ要素の再順序付けを実装するために使用されてもよいということに留意されたい。これは、結果データ値内のデータ要素が、データ要素順序付け情報に依存して再順序付けされている状態で、ビットフィールド操作演算が、第1のソースデータ値全体を結果データ値にコピーする効果を有するように、ビットフィールド幅Wをデータ要素サイズNと同じに設定することによって行うことができる。したがって、本技術は、ビットフィールド操作だけでなく、データ要素の再順序付けも実装することができる、多用途の命令を提供する。
1つの例示的な実施形態において、装置は、前記第1のソースデータ値が複数の第1のソースデータ要素を含み、前記第2のソースデータ値が複数の第2のソースデータ要素を含み、前記結果データ値が複数の結果データ要素を含む場合、前記結果データ値が、
(a) 前記第1のソースデータ値内の対応する第1のソースデータ要素の順序、および前記第2のソースデータ値内の対応する第2のソースデータ要素の順序に対応して順序付けられる、前記結果データ要素を含む中間値を生成すること、ならびに
(b) 前記第1のデータ値を生成するように、前記中間値内の前記結果データ要素における少なくとも1つの再順序付けの反復を実施すること、
によって得られる第1のデータ値と同等であるように構成されてもよく、
各再順序付けの反復は、前記データ要素順序付け情報の対応するビットが、既定の値を有するかどうかを判定することと、前記データ要素順序付け情報の前記対応するビットが前記既定の値を有する場合、前記中間値内のビット群の対を交換することと、を含む。
一実施形態において、中間値内のビット群の交換された対は、ビット群の隣接対を含む。
データ要素再順序付けを実装する一方法は、(a)上で説明されるようなビットフィールド操作演算を使用して、ビットフィールド操作に起因する結果データ要素が、第1および第2のソースデータ値内の対応する第1および第2のソースデータ要素と同じ順序で順序付けられる、中間値が生成された場合、ならびに(b)第1のデータ値を生成するために、一連の1つ以上の再順序付けの反復が中間値に適用された場合(各再順序付けの反復は、データ要素順序付け情報の対応するビットが既定の値を有する場合、中間値内のビット群の対を交換することを含む)に、生成されるであろう第1のデータ値と同等である形態の結果データ値を生成することである。
結果データ値は、上で説明されるようなステップ(a)および(b)を実施することによって、実際に生成される必要はないということに留意されたい。一部の実装において、処理回路は、単一演算において、ビットフィールド操作演算が第1の/第2のソースデータ値に基づいて実施されており、結果データ要素もまた結果データ値内の所望される順序で順序付けられている、最終結果値を生成してもよい。したがって、上で説明される中間値が処理回路によって生成される、または処理回路が実際に再順序付けの反復を実施する必要はない。最終結果データ値は、中間値における、かかる再順序付けの反復の実施に起因するであろう第1のデータ値と同等である値を有する。
一部の実施形態において、再順序付けの反復が、任意のビット数を有するビット群の対を交換してもよい一方、データ要素順序付け情報の符号化、および結果データ値を生成するためのハードウェアの構成は、ビット群がデータ要素サイズNの倍数であるビット数を含む場合、簡略化することができる。例えば、再順序付けの反復は、単一のデータ要素の対を交換してもよいか、または2つ、4つ以上のデータ要素群の対を交換してもよい。
一実施形態において、ビット群は、少なくとも1つの再順序付けの反復のうちの異なるものに対して、異なるビット数を含んでもよい。異なる群サイズのビット(またはデータ要素)群を交換するための一連の再順序付けの反復は、広範な可能なデータ要素の配置が結果データ値内に提供されることを可能にする。
装置は、前記制御値が、各々が可変ビット数を含む第1の部分および第2の部分を含み、
前記命令復号器および前記処理回路のうちの少なくとも1つが、前記制御値の前記第1の部分によって含まれるビット数を判定するように、および前記第1の部分によって含まれるビット数に基づいて、
(a) 前記少なくとも1つの第1のソースデータ要素、前記少なくとも1つの第2のソースデータ要素、および前記少なくとも1つの結果データ要素のデータ要素サイズN、ならびに
(b) 前記第2の部分のどのビットが、前記データ要素順序付け情報を示すか、
を判定するように、前記ビットフィールド操作命令に応答するように、構成されてもよい。
上で説明されるパラメータSおよびRと同様に、データ要素順序付け情報は、各々が可変ビット数を有する第1の部分および第2の部分を使用して符号化されてもよい。これは、データ要素順序付け情報が、典型的に、いくつのデータ要素がデータ値内に存在しているかに依存する(データ要素の数が大きければ、可能である再順序付け順列の数は多くなる)、ビット数を必要とするため、有用である。データ要素の数は、データ要素サイズNに依存し、そのため、データ要素順序付け情報を表すために必要とされるビット数は、データ要素サイズNとは逆に変化してもよい(データ要素サイズが大きければ、可能である再順序付け順列は少なくなる)。したがって、ビットフィールドパラメータSおよびRに関して上で説明されるような制御値に対する符号化スキームは、同様に、効率的にデータ要素順序付け情報を表すために使用することができる。
さらなる態様から見ると、本発明は、処理演算を実施するための処理装置のためのデータ処理方法を提供し、該方法は、
ビットフィールド操作命令に応答して、少なくとも、各々がNビット<N−1:0>を有する、少なくとも1つの第1のソースデータ要素を含む、第1のソースデータ値、各々がNビット<N−1:0>を有する、少なくとも1つの第2のソースデータ要素を含む、第2のソースデータ値、および制御値を特定することと、各々がNビット<N−1:0>を有する少なくとも1つの結果データ要素を含む、結果データ値を生成するように、前記処理装置を制御するための制御信号を生成することと、を含み、各結果データ要素は、対応する第1のソースデータ要素および対応する第2のソースデータ要素に対応し、
前記制御値は、ビットフィールド幅W、ソースビット位置A、および結果ビット位置Bを示すための情報を含み、ここでは、1≦W≦N、0≦A≦N−W、および0≦B≦N−Wであり、各結果データ要素は、
(a) 前記対応する第1のソースデータ要素のビット<A+W−1:A>に対応するビット値を有する、ビット<B+W−1:B>と、
(b) B+W<Nである場合、(i)各々がゼロ値を有するビットを含む第1のプレフィックス値、(ii)前記対応する第2のソースデータ要素のビット<N−1:B+W>の前記ビット値を有する、第2のプレフィックス値、および(iii)前記対応する第1のソースデータ要素のビット<A+W−1:A>の符号拡張に対応するビット値を有する、第3のプレフィックス値のうちの1つとして、前記制御値に依存して選択されるプレフィックス値に対応するビット値を有するビット<N−1:B+W>と、
(c) B>0である場合、(i)各々がゼロ値を有するビットを含む第1のサフィックス値、および(ii)前記対応する第2のソースデータ要素のビット<B−1:0>の前記ビット値を有する、第2のサフィックス値のうちの1つとして、前記制御値に依存して選択されるサフィックス値に対応するビット値を有する、ビット<B−1:0>と、を含み、
前記ビットフィールド操作命令は、前記ソースビット位置A=0であり、前記結果ビット位置B>0である、ビットフィールド挿入形態と、前記ソースビット位置A≧0であり、前記結果ビット位置B=0である、ビットフィールド抽出形態とを有し、
前記制御値は、前記ビットフィールド幅W、前記ソースビット位置A、および前記結果ビット位置Bを判定するために、最上位ビット位置Sおよび回転パラメータRを指定し、
S≧Rである場合、前記ソースビット位置A=Rであり、前記結果ビット位置B=0であり、前記ビットフィールド幅W=(S+1)−Rであり、前記ビットフィールド操作命令は、前記ビットフィールド抽出形態を有し、
S<Rである場合、前記ソースビット位置A=0であり、前記結果ビット位置B=N−Rであり、前記ビットフィールド幅W=S+1であり、前記ビットフィールド操作命令は、前記ビットフィールド挿入形態を有する。
別の態様から見ると、本発明は、データ処理装置であって、
処理演算を実施するように構成される処理回路と、
前記処理演算を実施するように前記処理回路を制御するための制御信号を生成するように、プログラム命令に応答する、命令復号器と、を備え、
前記プログラム命令は、複数のデータサイズから選択される選択されたデータサイズを示すための第1の部分と、前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも1つの制御パラメータを示すための第2の部分と、を有する、制御値を指定する、少なくとも1つの命令を含み、前記第1の部分および前記第2の部分は、各々、可変ビット数を有し、
前記命令復号器は、前記選択されたデータサイズおよび前記少なくとも1つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理回路を制御するための制御信号を生成するように、前記少なくとも1つの命令に応答し、
前記少なくとも1つの命令を処理する時、前記命令復号器および前記処理回路のうちの少なくとも1つは、前記制御値の前記第1の部分によって含まれるビット数を特定するように、ならびに前記第1の部分によって含まれる前記ビット数に依存して、(a)前記選択されたデータサイズ、および(b)前記制御値のどのビットが、前記少なくとも1つの制御パラメータを示すための前記第2の部分を形成するかを特定するように構成される、データ処理装置を提供する。
上で言及されるように、ビットフィールド操作命令は、ビットフィールド操作に供される、データ要素のサイズを示す、選択されたデータ要素サイズと関連付けられてもよい。ビットフィールド操作演算を制御するための制御パラメータは、データ要素サイズに依存する可変ビット数を有してもよく、そのため、上で説明されるように、効率的にこれらの制御パラメータを特定するために、可変長の第1および第2の部分を使用する符号化スキームを使用することができる。
制御値のこのタイプの符号化はまた、複数のデータサイズの中から選択されるデータサイズと、選択されたデータサイズに依存するビット数を有する少なくとも1つの制御パラメータとに依存する、処理演算と関連付けられる、他の種類の命令に対して使用されてもよい。かかる命令に関して、命令は、各々が可変ビット数を有する第1の部分および第2の部分を有する制御値を指定してもよい。第1の部分によって含まれるビット数を特定することによって、命令復号器および処理回路のうちの少なくとも1つは、選択されたデータサイズを決定し、制御値のどのビットが、少なくとも1つの制御パラメータを表す第2の部分に対応するかを特定することができる。この形態の命令符号化は、様々なタイプの命令に適用することができ、ビット数が選択されたデータサイズに依存して変化する、符号化制御パラメータの効率的な方法を提供する。
「部分」という用語は、必ずしも、制御値内のビットの連続的な部分を表す必要はないが、それらのビットが隣接ビット位置を有しない場合でさえも、制御値のいずれの任意のビット群を指してもよいということに留意されたい。
利用可能な命令セットが、その命令と関連付けられる制御パラメータおよびデータサイズを特定するように、各々が制御値のこの共通の符号化形式を使用する、複数の異なる種類の命令を含む実施形態において、制御値を復号化するためのハードウェアの一部は、異なる種類の命令に対して再利用することができるため、命令復号器および/または処理回路をより効率的にすることができる。
この技術は、第2の部分のビット数が選択されたデータサイズに依存して減少するにつれて、第1の部分のビット数が選択されたデータサイズに依存して増加する場合、特に有用である。第2の部分のビット数が減少するにつれて、第1の部分のビット数を増加させること、およびその逆によって、第1の部分は、選択されたデータサイズを示すために、第2の部分によって必要とされない制御値のいずれもビットも使用することができる。したがって、制御値の合計サイズは、制御値の異なるビットが、使用されている特定のデータサイズに依存して、第1の部分または第2の部分のいずれかに適切に割り当てられている状態で、選択されたデータサイズにかかわらずに同じのままであることができる。
一実施形態において、制御値の第1の部分は、前記複数のデータサイズの少なくともサブセットに関して、前記第1の部分が、少なくとも、第1の状態を有する第1のビット、および第2の状態を有するX個の残りのビットを含むように符号化されてもよく、ここでは、Xは、0以上の可変整数であり、
前記命令復号器および前記処理回路のうちの少なくとも1つは、前記制御値の既定の部分内の前記第1のビットのビット位置に依存して、前記制御値の前記第1の部分によって含まれるビット数を特定するように構成される。
本実施形態において、第1の部分は、第1の状態(例えば、「0」状態または「1」状態)を有する、少なくとも1つのビットを含む。第1の部分のゼロ、1以上の残りのビットは、第2の状態(例えば、「0」および「1」状態の他方)を有する。一実施形態において、第2の状態を有する第1の部分のゼロ、1以上のビットは、所与のデータサイズに対して、少なくとも1つの制御パラメータを示すための第2の部分によって必要とされない制御値のビット位置を埋めるための「パディング」ビットとして効果的に使用されてもよい。第2の状態を有するビットの数に依存して、第1の状態を有するビットの位置は、変化することができる。次いで、データサイズは、第1の状態を有するビットのビット位置に基づいて、特定することができる。
第1の状態を有する第1のビットのビット位置に基づいて、第1の部分のサイズ(および、したがって、選択されたデータサイズ)を検出する技術は、多くの実装において、利用可能なデータサイズが、2のべき乗で上昇し、そのため、第1の状態を有するビットのビット位置は、しばしば、選択されたデータサイズに対して2の特定のべき乗に相関させることができるため、特に有用である。
第1の状態を有する第1の部分のビットのビット位置を特定するこの技術は、データ要素サイズを特定するために使用される唯一の技術である必要はない。選択されたデータサイズを特定するためのさらなる情報を提供する、少なくとも1つの追加のビットもまた存在してもよい。
単一の制御パラメータのみを表すために本制御値符号化技術を使用することが可能である一方、本技術は、複数の制御パラメータが存在する時に、特に有用である。この場合、少なくとも1つの命令を処理する時、命令復号器または処理回路は、第1の部分によって含まれるビット数に依存して、第2の部分のどのビットが、複数の制御パラメータの各々を示すかを特定するように構成されてもよい。
複数の制御パラメータが存在する時、本符号化技術は、制御パラメータが、少なくとも、選択されたデータサイズが増加するにつれて増加するビット数を有する第1の制御パラメータ、および選択されたデータサイズが増加するにつれて減少するビット数を有する第2の制御パラメータを含む場合、特に有用である。この場合、第2の部分は、第1および第2の制御パラメータを示すサブ部分を含んでもよく、そのサブ部分のビットは、選択されたデータサイズに依存して、第1の制御パラメータまたは第2の制御パラメータに割り当てられている。選択されたデータサイズが増加するにつれてビット数が増加する制御パラメータを、選択されたデータサイズが増加するにつれてビット数が減少する別の制御パラメータと対にすることは、所与のデータサイズに対する第1の制御パラメータを示すために必要とされないビットを、第2の制御パラメータを示すために再割り当てすることができ、逆も同様であるため、制御値の効率的な符号化をもたらす。
上で言及されるように、本符号化技術は、様々な異なるタイプの命令に適用されてもよい。本技術が特に有用である1つのタイプの命令は、少なくとも1つのソースデータ要素を有するソースデータ値を特定する、単一命令複数データ(SIMD)命令である。少なくとも1つのSIMD命令に関して、選択されたデータサイズは、少なくとも1つのソースデータ要素のデータ要素サイズを示すことができ、対応する処理演算は、ソースデータ値内の各ソースデータ要素において、並行して、選択された処理演算を実施することを含むことができる。対応する処理演算を制御するための制御パラメータは、異なるデータ要素サイズに対して異なる割り当て可能な範囲を有することができ、そのため、この制御パラメータのビット数は、データ要素サイズに伴って変化することができる。したがって、本符号化技術は、制御値内の選択されたデータ要素サイズおよび可変長の制御パラメータの両方を効率的に符号化するために使用することができる。
本制御値符号化技術が適用され得る、SIMD命令の1つの特定の実施形態は、前記対応する処理演算が、少なくとも1つの結果データ要素を含む結果データ値を生成することを含む、ビットフィールド操作命令であり、各結果データ要素は、前記ソースデータ値の対応するソースデータ要素に対応し、
各結果データ要素は、前記対応するソースデータ要素内の連続ビットのソースビットフィールドのビット値に対応するビット値を有する、結果ビットフィールドを含み、
前記少なくとも1つの制御パラメータは、前記ソースビットフィールドおよび前記結果ビットフィールドによって含まれるビット数、前記対応するソースデータ要素内の前記ソースビットフィールドの位置、ならびに前記結果データ要素内の前記結果ビットフィールドの位置を示す。
したがって、制御値は、ビット数がビットフィールド操作命令に対するデータ要素サイズを特定する第1の部分、ならびにビットフィールド幅、ソースデータ要素内のビットフィールドの位置、および結果データ要素内の結果ビットフィールドの位置を示す、制御パラメータを特定する、第2の部分を含む。データ要素サイズが大きいほど、ビットフィールド幅、ならびにソースおよび結果データ要素内のビットフィールド位置の可能な値は大きく、したがって、これらのパラメータを示すために必要とされるビット数が大きい。したがって、本制御値符号化技術は、これらのパラメータを示すために有用である。
ビットフィールド操作命令はまた、結果データ要素が結果値内に配置される順序を特定する、データ要素順序付けパラメータを指定してもよい。可変サイズを有する第1および第2の部分を使用する本符号化技術は、同様に、データ要素順序付けパラメータを特定するために使用されてもよい。
本符号化技術が適用され得る、別のタイプの命令は、ソースデータ値を特定する、ならびに対応する処理演算が、制御値に基づいて判定されるソースデータ値および第2のデータ値への論理演算の適用の結果と同等である、結果データ値を生成することを含む、ビット単位の論理命令である。
第2のデータ値は、論理演算を使用してソースデータ値と組み合わせるためのマスク値として考えることができる。この場合の選択されたデータサイズは、第2のデータ値内のビットの繰り返しパターンによって含まれるビット数を示し、少なくとも1つの制御パラメータは、ビットの繰り返しパターンのビット値を特定する情報を示す。したがって、この場合、選択されたデータサイズは、必ずしもデータ要素サイズではないが、第2のデータ値内のビットの繰り返しパターンのサイズを示す。ビットの繰り返しパターンのサイズが大きいほど、それらのビットのビット値を特定するために制御パラメータにおいて必要とされるビット数は大きく、したがって、制御パラメータは、選択されたデータサイズに伴って変化するビット数を有する。したがって、本符号化技術は、かかるパラメータを示すために有用である。
ビット単位の論理命令と関連付けられる論理演算は、いくつかの異なるタイプの論理演算を含んでもよい。例えば、論理演算は、AND演算、OR演算、および排他的OR(XOR)演算のうちの1つを含んでもよい。
ビット単位の論理命令は、必ずしも、実際にビットの繰り返しパターンを含有する第2のデータ値を生成し、ソースデータ値および第2のデータ値に論理演算を適用するように、処理回路を制御する必要はないということに留意されたい。処理回路は、単一の組み合わせ演算において、第2のデータ値が生成され、論理演算を使用してソースデータ値と組み合わされた場合に得られるであろう結果と同等である結果データ値を生成するためのハードウェアを含んでもよいことが可能である。第2のデータ値は、実際にこの演算のいずれかの段階に存在する必要はない。
別の態様から見ると、本発明は、プログラム命令に応答して、処理演算を実施するための処理装置のためのデータ処理方法を提供し、
複数のデータサイズから選択される選択されたデータサイズを示すための第1の部分、および前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも1つの制御パラメータを示すための第2の部分を有する、制御値を指定する、少なくとも1つの命令を受信することであって、前記第1の部分および前記第2の部分は、各々、可変ビット数を有する、受信することと、
前記少なくとも1つの命令に応答して、前記制御値の前記第1の部分によって含まれる前記ビット数を特定することと、
前記第1の部分によって含まれる前記ビット数に依存して、(a)前記選択されたデータサイズ、および(b)前記制御値のどのビットが前記少なくとも1つの制御パラメータを示すための前記第2の部分を形成するかを特定することと、
前記選択されたデータサイズおよび前記少なくとも1つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理装置を制御することと、を含む。
本発明はまた、コンピュータによって実行される時、上で説明される実施形態のいずれかに従うデータ処理装置に従う命令実行環境を提供する、コンピュータプログラムによって提供される仮想機械を提供する。仮想機械は、例えば、上で説明される命令のうちの1つを含有するプログラムと、命令を実行するためのハードウェアとの相互作用をモデル化してもよい。仮想機械を実行するためのホストコンピュータは、それ自体が、命令を実行することが可能な復号化および処理ハードウェアを含有する必要はないが、命令の処理をシミュレーションする仮想機械を実行することができるように、十分な処理リソースを含む。
本発明の上のおよび他の目的、特性、および利点は、添付の図面と併せて読まれる、例解的な実施形態の以下の詳細な説明を読むことから明らかとなるであろう。
データ処理装置を概略的に例解する図である。 ビットフィールド操作命令の例示的な符号化を示す図である。 ビットフィールド操作演算の実施形態を示す図である。 ビットフィールド操作を適用することによる、ソースデータ要素からの結果データ要素の生成の実施形態を示す図である。 ビットフィールド操作命令内の制御フィールドの例示的な符号化を示す図である。 ビットフィールド操作命令のビットフィールド挿入形態、およびビットフィールド操作命令のビットフィールド抽出形態の実施形態を例解する図である。 ビットフィールド操作命令内の制御値に依存して、結果データ要素の異なるプレフィックスおよびサフィックス部分を選択する実施形態を示す図である。 制御値内で符号化される再順序付け情報に依存した、結果データ値内のデータ要素の再順序付けの実施形態を例解する図である。 データ要素の再順序付けの第2の実施形態を例解する図である。 ビットフィールド操作命令を処理する方法を例解する図である。 制御パラメータの値を得るように、制御フィールドを復号化する方法を例解する図である。 ビットフィールド操作命令と、共通の制御フィールド符号化を共有する、ビット単位の論理命令の例示的な符号化を例解する図である。 ビット単位の論理命令の制御フィールドの例示的な符号化を例解する図である。 論理演算を使用してソースデータ値と組み合わせるためのマスク値の実施形態を例解する図である。 ビット単位の論理命令の制御下で実施することができる、異なる種類の論理演算を例解する図である。 ビット単位の論理命令を処理する例示的な方法を例解する図である。 仮想機械実装の実施形態を例解する図である。
図1は、処理回路4と、命令復号器6と、レジスタ8のバンクと、メモリシステム10と、を備える、データ処理装置2を概略的に例解する。メモリシステム10は、1つ以上のキャッシュまたはメモリデバイスを含む。処理回路4は、加算器12、乗算器14、およびシフタ16といったいくつかの処理要素を含む。データを処理する時、命令復号器6は、レジスタ8に記憶されるデータを処理し、レジスタ8に処理結果を記憶するように、処理回路4を制御するための制御信号を生成するように、プログラム命令に応答する。命令復号器6の制御下では、データ処理装置2はまた、レジスタ8とメモリシステム10との間でデータを転送するように制御されてもよい。
レジスタ8のバンクは、複数の異なるレジスタアクセスサイズを使用してアクセス可能である。レジスタが、例えば、64ビットを含む場合、レジスタは、例えば、64ビットアクセスまたは32ビットアクセスの対象となり得る。命令復号器6によって復号される命令は、所与の処理演算のために使用されるべき、選択されたレジスタアクセスサイズを指定する情報を含んでもよい。
図1の実施形態において、処理回路4は、レジスタ8に記憶されるデータを処理し、データ処理の結果をレジスタ8に記憶し戻すとして例解される一方、いかなる他の種類の記憶場所も、レジスタ8の代わりに使用されてもよいということが理解されるであろう。データ処理装置2および処理回路4は、典型的に、図1に例解されない他の要素を含んでもよいということが理解されるであろう。
図2は、ビットフィールド操作演算を実施するように、処理装置2を制御するためのビットフィールド操作命令BFの例示的な符号化を示す。ビットフィールド操作命令は、命令のビット<28:23>に位置する演算コードによって特定され、以下のフィールドを含む。
・Rn:第1のソースデータ値src1を記憶するレジスタバンク8のレジスタを特定するソースレジスタフィールド。
・Rd:処理結果が記憶されるレジスタバンク8の宛先レジスタを特定する宛先レジスタフィールド。宛先レジスタフィールドRdはまた、ビットフィールド操作命令の実行の前に、宛先レジスタに記憶される値である、第2のソースデータ値src2を特定する。
・sf:ソースレジスタおよび宛先レジスタのために使用されるべき、選択されたアクセスサイズをM特定する、レジスタアクセスサイズフィールド。図2の実施形態において、レジスタサイズフィールドsfは、単一のサイズを示すビットを含み、サイズを示すビットの第1の状態は、第1のアクセスサイズ(例えば、64ビット)を示し、サイズフィールドの第2の状態は、第2のアクセスサイズ(例えば、32ビット)を示す。しかしながら、所望される場合、3つ以上の異なるアクセスサイズが、レジスタアクセスサイズフィールドsfに、ビットフィールド操作命令符号化のより多くのビットを割り当てることによって、提供され得る。
・opc:処理回路4によって実施されるべきビットフィールド操作のタイプを制御するための制御値を示す、サブ演算コードフィールド。サブ演算コードフィールドの例示的な符号化は、図7を参照して以下で説明する。
・control13:
−第1のソースデータ値src1、第2のソースデータ値src2、およびビットフィールド操作命令の処理中に生成される結果データ値のデータ要素のデータ要素サイズN、ならびに
−処理回路4によって実施されるべきビットフィールド操作演算の態様を制御するためのいくつかの他の制御パラメータ
を特定する制御フィールド。
control13フィールドの符号化の実施形態は、図5を参照して以下で説明する。
データ要素の数もまた、sfおよびcontrol13フィールドから導出することができる。第1および第2のソースデータ値src1、src2、ならびに結果データ値の各々内に存在するデータ要素の数は、M/Nに等しく、ここでは、Mは、選択されたレジスタアクセスサイズであり、Nは、データ要素サイズである。
sf、opc、およびcontrol13フィールドは、集合的に、ビットフィールド操作演算の態様を制御するための制御値を形成すると見なされ得る。
図2の例示的な符号化は、第2のソースデータ値src2が、ビットフィールド操作命令を実行する前に、宛先レジスタに記憶される値として特定されることを示す一方、他の実施形態において、別個のレジスタフィールドが、第2のソースデータ値src2を記憶する、宛先レジスタ以外のレジスタを特定するように提供されてもよいということが理解されるであろう。
図3は、ビットフィールド操作演算の実施形態を示す。ビットフィールド操作命令の実行の前に、レジスタRnに記憶されるMビット値である、第1のソース値src1は、各々がNビットを有するM/Nデータ要素を含有する。同様に、宛先レジスタRdに記憶されるMビットの第2のソース値src2もまた、各々がNビットを有するM/Nデータ要素を含む。
ビットフィールド操作命令に応答して、処理回路4は、ソース値src1、src2のデータ要素に対応する、M/N結果データ要素を有する、結果データ値を生成する。各結果データ要素は、値が、第1のソースデータ値src1内のWビットのビットフィールド(bf)に対応する、Wビットを含む。第1のソースデータ値src1内のビットフィールドの位置、および結果データ値内のビットフィールドの位置は、ビットフィールド操作命令の制御値に基づいて制御されてもよい。各結果データ要素に関して、挿入されたビットフィールドよりも下位の、いかなるビットも、サフィックス値sの値をとる一方、ビットフィールドよりも上位である結果データ要素のいずれのビットも、プレフィックス値pの値をとる。結果データ要素は、宛先レジスタRdに記憶される。
したがって、ビットフィールド操作命令の効果は、第1のソース値src1の各データ要素内の所与の位置から、ビットフィールドを抽出すること、および各抽出されたビットフィールドを結果値の対応するデータ要素内に挿入することであり、宛先レジスタの他のビット(ある場合)は、プレフィックスおよびサフィックス値をとる。
図4は、ビットフィールド操作演算を定量的に定義することができる方法の実施形態を示す。図4は、対応する結果データ要素を生成するために、単一のソースデータ要素に適用されているビットフィールド操作演算の実施形態を示す。ソースおよび結果データ値が、2つ以上のデータ要素を有する場合、対応する結果データ要素を生成するように、同じ演算を各ソースデータ要素に適用することができる。
命令復号器6は、結果データ要素のビット<B+W−1:B>が、第1のソース値src1の対応するソースデータ要素のビット<A+W−1:A>を含む、ビットフィールドbfの値をとる、結果データ要素を生成するように、ビットフィールド操作命令に応答する。パラメータAは、第1のソースデータ値src1から抽出されるべきビットフィールドの開始ビット位置を示す一方、パラメータBは、ビットフィールドが結果データ要素内に配置されるべきである、開始ビット位置を示す。Wは、ビットフィールドbfによって含まれるビット数を示す。A、B、およびWは、1≦W≦N、0≦A≦N−W、および0≦B≦N−Wの範囲内のいずれかの整数値を有し、ここでは、Nは、データ要素によって含まれるビット数である。
図4は、ビットフィールド位置値AおよびBが、それぞれ、ソースデータ要素および結果データ要素内のいずれのビット位置の値もとることができる、一般的な形態のビットフィールド操作を例解する。ビットフィールド操作命令の制御値内に、直接、A、B、およびWを符号化することが可能である。
しかしながら、特定の実施形態において、control13フィールドの制御符号化は、図5および6に示されるように、直接、A、B、およびWを特定するために使用される。
図5は、ビットフィールド操作命令のcontrol13フィールドの例示的な符号化を例解する。control13フィールドは、その各々が可変ビット数を有する、第1の部分30および第2の部分32を含む、13ビット<12:0>を有する。control13フィールドは、データ要素サイズN、回転パラメータR、最上位ビット位置S、および反転情報Vを特定する。回転パラメータRおよび最上位ビット位置Sは、ソースデータ要素src1から抽出されるべきビットフィールドの位置およびサイズ、ならびに、図6を参照して以下で説明されるように、ビットフィールドが結果データ要素内に挿入される位置を判定する。反転情報Vは、図7を参照して以下で説明されるように、データ要素が結果データ要素内に配置されるべき順序を定義する。
control13フィールドの第1の部分30は、可変ビット数を含む。本実施形態において、第1の部分30は、control13フィールドのビット<12>、ならびにcontrol13フィールドのビット<5:0>のゼロ、1以上のビットを含む。第1の部分30によって含まれるビット数を検出することによって、データ要素サイズNを特定することができる。
control13フィールドの第2の部分32は、回転パラメータR、最上位ビット位置S、および反転情報Vを表す、可変ビット数を有する。control13フィールドのどのビットが、どのパラメータを表すかは、所与の命令に対して使用される特定のデータ要素サイズNに依存する。命令復号器6または処理回路4は、第1の部分30において特定されるビット数に基づいて、第2の部分32のどのビットが、R、S、およびVの各々を表すかを特定する。
例えば、control13フィールドのビット<12>および<5>が、0の値を有する場合、これは、データ要素サイズNが32ビットであることを示す。したがって、命令復号器6または処理回路4はまた、回転パラメータRが、control13フィールドのビット<10:6>の値を有し、サイズパラメータが、control13フィールドのビット<4:0>の値を有し、かつ反転情報Vが、2進値0bv00000(ここでは、vは、control13フィールドのビット<11>の値である)を有することを判定することができる。同様に、他のデータ要素サイズに関して、図5に示される方法で、パラメータN、R、S、およびVを、control13フィールドから判定することができる。
control13フィールドは、RおよびVパラメータを表す、サブ部分(ビット<11:6>)を含む。データ要素サイズNが大きいほど、回転パラメータRに対して必要とされるビット数は多く、反転情報Vに対して必要とされるビット数は少ない。したがって、control13フィールドのビット<11:6>は、図5に示される方法で、これらのパラメータ間で共有される。異なるデータ要素サイズNに関して、サブ部分のビットは、回転パラメータRまたは反転情報Vのいずれかを示すように割り当てられる。同様に、第1の部分30、および最上位ビット位置Sを示す第2の部分32の一部は、これらの値の各々に対して使用されるビット数が、データ要素サイズNが増加または減少するにつれて、反対方向に変化するため、固定ビット数を共有することができる。いずれの所与のデータ要素サイズに関しても、1つのパラメータに対して必要とされないビットが、別のパラメータを示すために使用されるため、データ要素サイズの一部の値に対して、いずれのパラメータも示さない、残されたビットは存在せず、そのため、control13フィールドの符号化は、効率的に、N、R、S、およびVパラメータを表す。
control13フィールドの実装は、図10を参照して、以下でより詳細に説明する。
図6は、ビットフィールド位置パラメータRおよび最上位ビット位置Sに依存して実施される、ビットフィールド操作演算の実施形態を示す。ソースビットフィールド開始位置A、結果ビットフィールド開始位置B、およびビットフィールド幅Wは、全て、パラメータSおよびRから導出することができる。
ビットフィールド操作演算は、パラメータSとRとの間の関係に依存して、2つの代替的な形態を有する。命令のビットフィールド抽出形態BFXに応答して、処理回路4は、第1のソースデータ要素src1内の選択された位置に位置するビットフィールドbfを抽出し、対応する結果データ要素の最下位部分に、ビットフィールドを書き込むように制御される。命令のビットフィールド挿入形態BFIに応答して、処理回路4は、第1のソースデータ要素src1の最下位部分に位置するビットフィールドをコピーし、対応する結果データ要素内の選択された位置に、コピーされたビットフィールドを挿入するように制御される。
図6の上部に示されるように、S≧Rである場合、ビットフィールド操作命令は、ビットフィールド抽出形態BFXである。命令のビットフィールド抽出形態に関して、回転パラメータRは、第1のソースデータ要素src1内のビットフィールドbfの最下位ビットの位置を示し、最上位ビット位置Sは、第1のソースデータ要素src内のビットフィールドbfの最上位ビットの位置を示す。したがって、ソースビットフィールド開始位置Aは、回転パラメータRに等しく、結果ビットフィールド開始位置Bは、ゼロであり、ビットフィールド幅W=S+1−Rである。これは、命令のビットフィールド抽出形態BFXに応答して、結果データ要素のビット<S−R:0>が、対応する第1のソースデータ要素src1のビット<S:R>に等しく設定されることを意味する。
一方、S<Rである場合、ビットフィールド操作命令は、図6の下部に示されるように、ビットフィールド挿入形態BFIをとる。この場合、ソースビットフィールド開始位置Aは、ゼロに等しく、結果ビットフィールド開始位置B=N−Rであり、ビットフィールド幅W=S+1である。したがって、命令のビットフィールド挿入形態において、結果データ要素のビット<N−R+S:N−R>は、第1のソースデータ要素src1のビット<S:0>に等しく設定される。
ソース開始ビット位置Aおよび結果開始ビット位置Bのうちの少なくとも1つを、ゼロに等しく制約することによって、図5の符号化は、2つのパラメータR、Sのみで、実施されるべきビットフィールド操作を特定するための3つのパラメータA、B、Wを符号化することができるため、効率的になる。ゼロではないソース開始ビット位置Aからのビットフィールドが、ゼロではない結果ビット位置Bに書き込まれる(図4に示される実施形態にあるように)、より一般的なビットフィールド操作演算が所望される場合、これは、命令のビットフィールド抽出形態BFX、続いて、命令のビットフィールド挿入形態BFIを実行することによって実装することができる。
図6は、ビットフィールド操作命令のビットフィールド抽出形態BFXにおいて、ビットフィールドbfが、結果データ要素の最下位部分に書き込まれ、そのため、結果データ要素が、プレフィックス部分を含むことができるが、サフィックス部分を含まないことを示す。RおよびSの一部の値に関して、プレフィックス部分が存在しなくてもよい。対照的に、命令のビットフィールド挿入形態BFIに関して、ビットフィールドは、結果データ要素のいずれの部分に挿入されてもよく、そのため、結果データ値は、プレフィックス部分およびサフィックス部分の両方を有してもよい(RおよびSの値は、結果データ要素が、プレフィックス部分およびサフィックス部分のいずれも含まない、それらのうちの1つ、または両方を含むかどうかを制御する)。一般的に、結果データ要素は、B+W<Nである場合、プレフィックス部分(ビット<N−1:B+W>)を含み、B>0である場合、サフィックス部分(ビット<B−1:0>)を含む。上で説明されるように、ビットフィールド操作命令は、サブ演算コードフィールドopcを含む。opcフィールドは、選択された形態のプレフィックスまたはサフィックス値を生成するように、処理回路4を制御する。図7は、フィールドの異なる値に対して選択され得る、異なる種類のプレフィックスおよびサフィックス値を例解する。
サブ演算コードフィールドopcが0b00の値を有する時、プレフィックス部分pは、ビットフィールドbfの符号拡張であり、サフィックス部分sのビットは、ゼロ値を有する。符号拡張ビットは、ビットフィールドbfの符号が、結果データ要素内に挿入される時に保存されることを確実にする値を有する。典型的に、プレフィックス部分の符号拡張ビットは、各々、ビットフィールドbfの最上位ビットの値に等しい(即ち、各々、第1のソースデータ要素のビット<S>に等しい)。しかしながら、プレフィックス部分p内の符号拡張ビットの正確な性質は、ビットフィールドbfに対して使用される特定の符号表現に依存する。サブ演算コードフィールドを0b00に設定することによって、ビットフィールド操作命令は、第1のソースデータ要素から、符号付きのデータ値を含むビットフィールドを抽出するため、およびビットフィールドの符号を保存しつつ、この値を結果データ要素の一部にコピーするために、使用することができる。
サブ演算コードフィールドが0b01の値を有する時、結果データ要素のプレフィックスおよびサフィックス部分は、第2のソースデータ要素src2の対応するビットの値をとる。したがって、この形態の命令は、第2のソースデータ要素src2を他のビットを変化しないままにしつつ、第1のソースデータ要素src1からのビットフィールドbfを、第2のソースデータ要素src2内の位置に挿入する効果を有する。図2に示される実施形態において、第2のソースデータ要素src2は、ビットフィールド操作命令の実行の前に、宛先レジスタRdに記憶される値であり、そのため、opc=01に関して、命令は、他のビットをしないままにしつつ、第1のソースデータ要素src1のビットフィールドを、宛先レジスタRdの所与の位置に効果的に挿入する。
サブ演算コードフィールドが0b10の値を有する場合、プレフィックスおよびサフィックス部分のビットは、各々、ゼロ値を有する。したがって、この種類の命令に関して、第1のソースデータ要素src1のビットフィールドは、結果データ要素内のゼロによって隔離および包囲される。
図7の実施形態において、サブ演算コードフィールドopcに対する0b11の値は、未定義であるが、他の機能性が、0b11値と関連付けられ得るということが理解されるであろう。
上で言及されるように、control13フィールドは、結果データ値内のデータ要素の順序付けを制御するための反転情報Vを示す。図8Aは、反転情報Vに依存したデータ要素の再順序付けの実施形態を概略的に例解する。結果データ値は、上で説明されるようなビットフィールド操作を使用して生成され、第1および第2のソースデータ値内の対応するデータ要素の順序に対応する順序でデータ要素を含む、中間結果データ値が、反転情報Vに依存して制御される一連の再順序付けの反復の対象であった場合に生成されるであろう値と同等である。各再順序付けの反復は、ビット群がデータ値内で再順序付けされるべき粒度を示す特定の群サイズと関連付けられ、また、反転情報Vの対応するビットとも関連付けられる。各再順序付けの反復は、反転情報Vの対応するビットが、既定の値を有するかどうかを判定することと、対応するビットが既定の値を有する場合、結果データ値内で、対応する群サイズのビット群の隣接対の位置を交換することと、を含む。以下で説明される実施形態において、「1」値は、反転情報Vの既定の値として使用されるが、「0」値が代わりに使用され得る。
図8Aは、結果データ値を生成するように、中間結果に適用されてもよい、一連の再順序付けの反復の実施形態を示す。再順序付けの反復0において、中間結果の隣接ビットの対の位置は、反転情報V<5:0>のビットV<0>が1の値を有する場合に交換される。即ち、中間結果のビット<0>は、ビット<1>でスワップされ、同様に、ビット<3>および<2>がスワップされ、ビット<5>および<4>がスワップされる、等である。一方、ビットV<0>が0の値を有する場合、スワップは実施されない。
同様に、図8Aに示される再順序付けの反復1に関して、前の反復の結果内の2ビットの隣接群の位置は、反転情報Vの対応するビットV<1>が1の値を有する場合に交換される。したがって、ビット<1:0>は、ビット<3:2>でスワップされ、ビット<7:6>は、ビット<5:4>でスワップされる、等である。そうでなければ、V<1>=0である場合、前の反復の結果のビットは、同じままである。
同様に、各連続した再順序付けの反復に関して、ビット群の隣接対は、反転情報Vの対応するビットが値1を有する場合、2のべき乗で上昇する各再順序付けの反復に対する群サイズで、位置を交換される。図8Aに示される演算は、例えば、反転情報の対応するビットV<i>が1の値を有する場合、i番目の再順序付けの反復が2ビットの隣接群の対の位置を交換し、対応するビットV<i>が0の値を有する場合、2iビット群の対の位置を交換しない、一連の再順序付けの反復として要約することができる。i番目の再順序付けの反復がビット群の位置を交換するべきかどうかを示すように、反転情報Vのビット<i>を使用することが好都合である一方で、反転情報Vのビットと再順序付けの反復との間の異なる対応もまた、使用され得る。再順序付けの反復の総数は、いくつのデータ要素が存在しているかに依存する。例えば、図8Aに示される反復5は、32ビットの単一の群のみが存在し、そのため、32ビット群の対をスワップすることが可能ではないため、32ビットデータ値の場合は実施されないであろう。
図8Aは、ビット数1、2、4等を有するビット群の位置を交換することができる実施形態を示す。一部の実施形態において、ビットフィールド操作命令は、データ要素サイズの倍数に対応するビット群のみの、位置を交換することができるように、符号化されてもよい。かかる実施形態は、図8Bに示される。
図8Bは、64ビットデータ値が8つの8ビットデータ要素A〜Hを含む実施形態を示す。図5に示される実施形態において、control13フィールドは、データ要素サイズNよりも小さいビット群をスワップするための再順序付けの反復に対応する反転情報V<5:0>のいずれかのビットにゼロ値が配置されるように符号化される。したがって、control13フィールドは、データ要素サイズN以上であるビット群のスワップを示す、反転情報Vのビットの値を示すのみである。例えば、図8Bに示されるような8ビットのデータ要素サイズに関して、反転情報のビットV<2:0>は、図8Aに示されるように、1、2、および4ビットの群をスワップするための再順序付けの反復0、1、および2が、実施されるべきではないということを示すように、0に設定される。反転情報Vのビット<5:3>は、再順序付けの反復3、4、および5が、8、16、および32ビットの隣接する群の位置を交換するように実施されるべきであるかどうかを示すように、control13フィールド内で符号化される。
図8Bは、どのように、第1および第2のソースデータ値src1、src2が、文字AからHによって示されるような特定の記憶順序を有するデータ要素A〜Hを最初に含むかを示す。データ要素再順序付けが実施されない場合、ソースデータ値へのビットフィールド操作命令の適用は、結果データ要素が、ソースデータ値内のデータ要素の順序に対応する順序A、B、C、…、Hで順序付けされる、結果データ値をもたらす(図8Bに例解される中間結果を参照されたい)。
しかしながら、反転情報Vの制御下では、命令復号器6は、最終結果データ値を生成する時に、データ要素再順序付けを適用するように、処理回路4を制御することができる。反転情報Vのビット<2:0>が0の値を有する際、実施されてもよい第1の再順序付けの反復は、ビットV<3>と関連付けられる。図8Bは、ビットV<3>が1の値を有する場合、8ビットの隣接群(即ち、隣接データ要素)は位置を交換される一方、そうでなければ、中間値は変化しないということを示す。次いで、別の再順序付けの反復は、ビットV<4>が1の値を有する場合、16ビットの隣接群(即ち、2つのデータ要素の隣接群)の位置を交換する。次いで、さらなる再順序付けの反復は、ビットV<5>が1の値を有する場合、32ビットの隣接群(即ち、4つのデータ要素の隣接群)をスワップする。反転情報Vのビットに依存して、異なるサイズのビット群を選択的に交換する、または交換しないことによって、データ要素の異なる順序を結果データ値内に提供することができる。例えば、図8Bの下部にある表は、再順序付け情報V<5:3>の異なる値に関して、図8Bに示される再順序付けの反復に起因する、異なるデータ要素順序付けを示す。したがって、各反復が異なるサイズのビット群の隣接対の位置を交換する、連続した再順序付けの反復を適用することによって、様々なデータ要素順序付けを、結果値内にもたらすことができるということが分かる。
データ処理回路4が、実際に、ビットフィールド操作演算を使用して中間結果を生成し、次いで、結果データ値を生成するために、中間結果に一連の再順序付けの反復を適用することは必要ではないということに留意されたい。データ処理回路4は、ソースデータ要素のビットフィールドが各結果データ要素内に含まれる結果データ値が生成され、結果データ要素が、これまでにもたらされたいかなる中間結果も伴わずに、反転情報Vに対応する順序で順序付けられるように、データ要素の再順序付けと同時に、ビットフィールド操作を適用するように構成されてもよい。結果データ値は、単に、再順序付けの反復がかかる中間結果に適用された場合に得られるであろう結果と同等である値であってもよい。
図9は、図2の実施形態にあるように符号化されるビットフィールド操作命令の処理の実施形態を示す。図9は、一連の方法ステップを示すフローチャートを例解する一方、実際には、命令を実装するためのハードウェアは、互いに並行して、これらのステップのうちのいくつかを実施してもよく、または同様の結果をもたらす他のステップを実施してもよいということに留意されたい(同じことは、本出願に示される他のフローチャートに対しても言える)。
ステップ50において、命令復号器6は、サブ演算コードフィールドopcの値をチェックする。サブ演算コードフィールドopcが0b00の値を有する場合、方法は、ステップ52に進み、ここで、結果データ値は、ゼロ値に初期化される。次いで、ブール量extendは、ステップ54においてTRUE値に設定される(ビットフィールド操作を適用する時、プレフィックス値が抽出されたビットフィールドの符号拡張に設定されることを示す)。
一方、ステップ50において、サブ演算コードフィールドが、0b01の値を有すると判定されるopcである場合、ステップ56において、結果データ値は、第2のソースデータ値src2の値に初期化される(各結果データ要素が、第2のソースデータ値src2の対応するデータ要素のそれらに対応するビット値を有する、プレフィックスおよび/またはサフィックス部分を有するように)。次いで、ステップ58において、ブール量extendは、プレフィックス部分を生成する時に、符号拡張が実施されないということを示すFALSE値に設定される。
代替的に、ステップ50において、サブ演算コードフィールドopcが0b10の値を有すると見出される場合、ステップ60において、結果値は、ゼロ値に設定され、ステップ62において、ブール値extendは、FALSE値に設定される。したがって、各結果データ要素が生成される時、挿入されたビットフィールド以外のいずれのビットも、ゼロ値を有し、ビットフィールドの符号拡張が実施されない。
ステップ50において、サブ演算コードフィールドopcの値にかかわらず、方法は、ステップ64に進み、ここで、回転パラメータR、最上位ビット位置S、反転情報V、およびデータ要素サイズNを特定するために、ビットフィールド操作命令の制御フィールドcontrol13を復号化するように、関数TRIDECODE(control13)が実施される。TRIDECODE関数は、図10を参照して以下で説明する。
ステップ64において、R、S、V、およびNの値を特定すると、次いで、ステップ66において、最上位ビット位置Sが回転パラメータR以上かどうかが判定される。SがR以上である場合、ステップ68において、ソースビットフィールド位置値Aは、Rに等しく設定され、結果ビットフィールド位置値Bは、0に設定され、ビットフィールド幅Wは、S+1−Rに等しく設定される(即ち、ビットフィールド操作は、ビットフィールド抽出形態BFXである)。一方、ステップ66において、SがR未満であることが判定される場合、命令は、ビットフィールド挿入形態BFIを有し、そのため、ステップ70において、ソースビットフィールド位置値Aは、0に設定され、結果ビットフィールド位置値Bは、N−Rに設定され、ビットフィールド幅Wは、S+1に設定される。
ステップ72において、命令がビットフィールド挿入形態BFIまたはビットフィールド抽出形態BFXを有するかどうかにかかわらず、処理回路4は、各データ要素が対応する第1のソースデータ要素src1のビット<A+W−1:A>に等しい、ビット<B+W−1:B>を有する、結果データ値を生成する。このステップは、第1のソースデータ要素の標的ビットフィールドが、結果データ要素内の所望の位置にコピーされることを確実とする。結果データ要素の残りのビットは、ステップ52、56、および60のうちの1つにおいて、初期化されるような値を有し続ける。
次いで、ステップ74において、ブール量extendがTRUEおよびB+W<Nであるかどうかが判定される。extendがTRUEおよびB+W<Nである場合、これは、結果データ要素内にプレフィックス部分<N−1:B+W>が存在すること、およびサブ演算コードフィールドopcが、符号拡張がビットフィールドに適用されるべきであったことを示したことを示す。この場合、ステップ76において、処理回路4は、各結果データ要素のビット<N−1:B+W>を、ソースデータ要素src1からコピーされるビットフィールド内の符号ビットの値に設定する(即ち、第1のソースデータ要素のビット<S>は、結果データ要素内のプレフィックス部分の各ビットで複製される)。これは、第1のソースデータ要素src1から抽出されるビットフィールドの符号を保存する効果を有する。一方、ステップ74において、ブール量extendがFALSEである場合、ステップ76は省略され、そのため、結果データ要素のプレフィックス部分は、その前の値(ステップ60において設定されるゼロ値、またはステップ56において設定される第2のソースデータ要素src2の前の値のいずれか)を保持する。B+W=Nである場合、ステップ76はまた、プレフィックス部分が存在しないこの場合のように、省略される。
ステップ78において、結果データ値内の結果データ要素の再順序付けは、例えば、図8Aおよび8Bを参照して上で説明されるように、ビットフィールド操作命令のcontrol13フィールドから特定される反転情報Vに基づいて、適用される。一部のハードウェア実装において、このステップは、ステップ72における結果データ要素の生成と並行して、実施されてもよいということに留意されたい。
したがって、ビットフィールド操作命令の制御下では、各結果データ要素が、対応する第1のソースデータ要素src1内の所望の位置<A+W−1:A>から採られるビットフィールドを含む;結果データ要素内のビットフィールドを境界するプレフィックスおよびサフィックス部分が、ゼロ値、符号拡張値、または所望に応じて、第2のソースデータ要素src2の値に設定される;ならびに、任意に、結果内の結果データ要素の再順序付けも実施される、結果データ値が生成される。したがって、ビットフィールド操作命令は、一般的な符号化内の広範囲のビットフィールド操作を提供する。
さらに、ビットフィールド操作命令はまた、ビットフィールドが第1のソースデータ要素src1全体に対応するように、パラメータSおよびRを適切な値に設定することによって、データ要素再順序付け命令として使用することもできる。この場合、結果データ要素は、対応する第1のソースデータ要素と同じであるが、反転情報Vに従って、結果データ値内に再順序付けされる。
図10は、図9のステップ64において示されるように(および図15のステップ160において、以下で説明されるように)、TRIDECODE関数を使用したcontrol13フィールドの復号化の実施形態を例解する。control13フィールドの復号化は、命令復号器6、処理回路4によって、または命令復号器6および処理回路4の組み合わせによって、実施されてもよい。以下で説明されるように、control13フィールドは、異なる種類の命令に対して使用されてもよい。図10を参照して称される「データサイズ」は、図2〜9を参照して説明される、ビットフィールド操作命令のデータ要素サイズN、および図11〜15を参照して説明される、ビット単位の論理命令のパターン繰り返しサイズNに対応する。
図10のステップ100において、パラメータV<5:0>は、0b000000の全てゼロ値に初期化される。これは、control13フィールド内で符号化されない反転情報Vのいずれの値も、ゼロ値をとることを確実とし、そのため、対応する再順序付けの反復が実施されないことを確実とする。
ステップ102において、一時的な値temp<6:0>は、control13フィールドのビット<12>を、control13フィールドのビット<5:0>の逆数と連結することによって判定され、長さパラメータlenは、temp<6:0>内の「1」値を有する最高(最上位)ビットのビット位置として判定される。値temp<6:0>は、その中に第1の部分30が存在し得るcontrol13フィールドの部分のビット値を表す。データサイズが64ビットである場合、「1」値を有する最上位ビットは、temp<6:0>のビット<6>であり、そのためlen=6である。他のデータサイズに関して、temp<6:0>内の最高「1」ビットは、control13フィールドのビット<5:0>内の最高「0」の位置に対応し、そのため、それぞれN=32、16、8、4、2、1に対して、len=5、4、3、2、1、0である(図5および12を参照されたい)。このため、長さパラメータlenは、第1の部分30のサイズの指標であり、これは、データサイズN、ならびにR、S、およびVパラメータの符号化形式が、図10のステップ104〜114において判定されることを可能にする。一時的な値tempがcontrol13フィールドの復号化中に生成されることは、不可欠ではなく、一部の実施形態において、単一の演算がcontrol13フィールドの値から直接lenパラメータを判定してもよいということが理解されるであろう。
図10のステップ104において、データサイズNは、値0b1を、lenビット位置分、左にシフトすることによって判定される。例えば、len=2である場合、0b1の値を左に2つシフトすることは、値0b100、即ち、4ビットのデータサイズNをもたらす。したがって、データサイズNは、2lenと同等である。このように、control13フィールドの第1の部分30のサイズは、図5および12に示されるように、対応するデータサイズNに相関させることができる。
図10のステップ106において、長さパラメータlenが0に等しいかどうかが判定される。len=0である場合、ステップ108において、回転パラメータRおよび最上位ビット位置Sは、0に設定される。これは、1ビットのデータ要素サイズに対応し、それに対して、唯一の適用することができる、可能なビットフィールド操作は、各第1のソースデータ要素src1の単一のビットを、対応する結果データ要素src2の単一のビットにコピーすることであるため、N=1の場合は、いかなる回転および最上位ビット位置パラメータR、Sも必要ない(この場合、control13フィールドの符号化が、R、Sを示すために使用されるであろうビットを、代わりに反転情報Vおよび第1の部分30を示すために使用するということに留意されたい)。
ステップ106において、長さパラメータlenがゼロに等しくない場合、ステップ110において、回転パラメータRは、control13フィールドのビット<len+5:6>の値を有する、符号なし整数に設定される一方、最上位ビット位置Sは、control13フィールドのビット<len−1:0>の値を有する、符号なし整数に設定される。これは、図5および12に示されるようなcontrol13フィールドの符号化に対応する。
ステップ112において、長さパラメータが6未満であるかどうかが判定される。そのような場合、ステップ114において、反転情報Vのビット<5:len>は、control13フィールドのビット<11:len+6>に等しく設定される。反転情報のビット<len−1:0>は、図10のステップ100において初期化されるように、それらのゼロ値を保持する。重ねて、これは、図5に示されるようなcontrol13フィールドの符号化に対応する。
一方、ステップ112において、len=6である場合、データサイズは、図5の実施形態に関して、64ビットデータ値全体のサイズに対応する、最大データ要素サイズである、64ビットである。len=6である場合、データ値内の単一のデータ要素を順序付ける方法は1つしかないため、データ要素のいかなる再順序付けも存在し得ない。したがって、図10のステップ114は、len=6である場合、省略され、再順序付け情報Vを、ステップ100において設定されるように、0に等しくさせ続ける。
最終的に、ステップ116において、パラメータR、S、V、およびNの判定された値は、control13フィールドを含有する命令を処理する時の、処理回路4による使用のために、返される。
図5に示されるようなcontrol13フィールドの符号化は、他のタイプの命令、ならびにビットフィールド操作命令のために使用することができる。control13フィールドの符号化は、データサイズの群の選択されたもの、およびビット数が選択されたデータサイズに依存して変化する、少なくとも1つの制御パラメータを指定する、いかなる種類の命令にも有用である。ビットフィールド操作命令は、SIMD命令の例である。control13の符号化は、データ要素サイズ、およびビット数がデータ要素サイズに依存して変化する、少なくとも1つの他のパラメータを指定する、別の命令にも同様に有用であり得る。
図11は、control13の符号化を使用する命令の別の例である、ビット単位の論理命令LOGICを示す。ビット単位の論理命令のcontrol13フィールドは、図12に示されるように符号化される。図5および12の比較は、RおよびSパラメータが、ビットフィールド操作命令BFに関して、ビット単位の論理命令LOGICに対して同じように特定されること、ならびに、図5において、データ要素サイズNが、ビットフィールド操作命令に対して特定されるのと同じように、パターン繰り返しサイズNが、ビット単位の論理命令に対して特定されることを示す。ビット単位の論理命令は、反転情報Vと同等のものは有さず、そのため、ビットフィールド操作命令BFに対する反転情報Vを表すcontrol13フィールドのビットは、ビット単位の論理命令LOGICに対するcontrol13フィールドの符号化において使用されない。他の実施形態において、図12においてxとして示される使用されないビットが、別のパラメータを示し得るということが理解されるであろう。
図13および14は、ビット単位の論理命令LOGICの関数を例解する。命令は、第1のソースデータ値src1を記憶するソースレジスタRnを特定する。ビット単位の論理命令のサブ演算コードフィールドopcは、第1のソースデータ値src1およびマスクデータ値に適用されるべき論理演算のタイプを示す。例えば、論理演算は、図14に示されるように、AND演算、OR演算、または排他的OR(XOR)演算のうちの1つであってもよい。
命令復号器6は、選択された論理演算を使用して、ソースデータ値src1をマスクデータ値(マスク)を組み合わせることによって、結果値を生成するように、処理回路4を制御するための制御信号を生成することによって、論理命令に応答する。マスクデータ値は、論理命令のcontrol13フィールドから特定されるような、選択されたデータサイズN、ならびにパラメータRおよびSを使用して判定される値である。
マスクデータ値は、ビットの繰り返しパターンを含む。繰り返しパターンの繰り返しの単位は、control13パラメータによって特定される、選択されたデータサイズNである。各繰り返しパターンは、S+1ビットが「1」値を有し、他方のビットが「0」値を有する、Nビットから成る。繰り返しパターンは、各々が1値を有する(S+1)ビットが、パターンの最下位端に位置した場合(より上位なビットは「0」値を有する)、および、次いで、パターンがRビット位置分、右に回転された場合に生じる値と同等である。他の実施形態において、回転パラメータRは、右回転よりもむしろ左回転の量を示し得るということが理解されるであろう。繰り返しパターンは、図13に示されるように、マスクデータ値を通じて、M/N回繰り返される(ここでは、Mは、src1およびマスクデータ値によって含まれるビット数である)。したがって、control13フィールド内で符号化されるN、R、およびSの値は、種々の異なるマスクが、論理演算を使用して、ソースデータ値src1と組み合わせるために生成されることを可能にする。
マスク値は、図14に示されるように、ビット単位のAND、OR、または排他的OR(XOR)演算のうちの1つを使用して、ソースデータ値src1と組み合わされる。論理演算は、例えば、データ値の特定の部分のビット値を試験、設定、消去、もしくは反転する、またはデータ値の特定の部分を隔離するために使用することができる。マスクデータ値は、実際に、処理回路4によって生成される必要はないが、代わりに、処理回路4が、論理演算を使用して、マスクをソースデータ値src1と組み合わせた結果と同等である形態を有する、最終結果を単に生成してもよいということに留意されたい。
図15は、図11〜14に示される形態のビット単位の論理命令を処理する方法を示す。ステップ150において、サブ演算コードフィールドopcの値が判定される。サブ演算コードフィールドが0b00の値を有する場合、論理演算は、ステップ152において、AND演算であると判定される。サブ演算コードフィールドopcが0b01の値を有する場合、論理演算は、ステップ154において、OR演算であると判定される。サブ演算コードフィールドopcが0b10の値を有する場合、論理演算は、ステップ156において判定されるように、排他的OR(XOR)演算である。0b11のopc値は、本実施形態において、留保されるが、別の実施形態において、異なる形態の論理演算に割り当てられ得る。
サブ演算コードフィールドopcの値にかかわらず、ステップ160において、パラメータR、S、V、およびNは、図10を参照して説明されるように、TRIDECODE関数を使用して、control13フィールドから判定される。この場合、Nは、ソースデータ値に適用されるべきマスク内の繰り返しパターンのサイズを表す。S+1は、マスク値内の「1」ビットの数を示す。Rは、マスク値内の「1」ビットの位置を示す。論理命令に関して、ビットフィールド操作命令のために使用される反転情報Vは、関心対象ではなく、そのため、TRIDECODE関数によって返されるVの値は、論理演算の結果を計算する時、無視される。
ステップ162において、ビットの繰り返しパターンが判定される。繰り返しパターンは、「0」の値を有するビット<N−1:S+1>、および「1」の値を有するビット<S:0>を含む、ビット<N−1:0>として初期化される。ステップ164において、ビットの繰り返しパターンは、Rビット位置分回転される(回転は、所望に応じて、右または左であってもよいが、図13の実施形態においては、回転は右である)。
ステップ166において、マスクデータ値は、マスクを通じて、ビットの回転された繰り返しパターンをM/N回複製することによって形成され、ここでは、Mは、この特定の処理演算のために使用されるデータ値サイズである。例えば、Mは、ビット単位の論理命令のsfフィールドによって特定される、レジスタアクセスサイズに基づいて判定されてもよい。次いで、ステップ168において、結果データ値は、ステップ152、154、156のうちの1つにおいて選択される論理演算を使用して、第1のソースデータ値src1をマスクデータ値と組み合わせた結果として生成される。
重ねて、図15のステップは、一例に過ぎず、連続ではなくむしろ、互いに並行して実施されてもよい。また、ステップ166において説明されるマスク値は、実際に、処理回路4によって生成されなくてもよいが、代わりに、処理回路4が、ソースデータ値src1、およびビット単位の論理命令のcontrol13フィールドから直接、ステップ168において、結果データ値を生成してもよい。
したがって、異なる命令が、関連付けられた処理演算を制御するためのパラメータを示すように、同じ形式のcontrol13フィールドを使用してもよい。図5および12の実施形態に示されるように、異なる種類の命令のためのパラメータを示すように、共通の符号化を使用することによって、これらの命令を復号化および処理するためのハードウェアのうちの一部を共有することができ、そのため、処理回路4および命令復号器6の複雑性を低減することができる。
ビットフィールド操作命令およびビット単位の論理命令に対応する演算を示すための例示的な疑似コードを、以下に示す。疑似コードに示される演算は、例に過ぎず、処理装置2のハードウェアが、これらのステップを実際に実施するための要素を含む必要はない。実際、疑似コードに示されるステップのうちの一部は、一連の逐次的ステップとしてよりもむしろ、互いに並行して実施されてもよい。それにもかかわらず、疑似コードは、当業者が、疑似コードに示される処理ステップの結果と同等な結果データ値を生成するためのハードウェア実施形態をもたらすことができるには十分である。疑似コードにおいて、「from」、「to」、「width」、および「size」というパラメータは、それぞれ、上で説明されるようなパラメータA、B、W、およびNに対応する。「datasize」というパラメータは、上で説明されるようなソースおよび結果データ値のサイズMを示す。「R[n]」および「R[d]」という用語は、ソースおよび宛先レジスタRn、Rdをそれぞれ表す。疑似コードにおいて、‘110’といったシングルクォーテーションマーク内の1および0の列は、2進表記における連続ビットの文字列を表す。UIntという関数は、ビットの文字列を、それらが表す符号なし整数値に変換し、そのため、UInt(‘110’)は、値6を返す。
疑似コードの第1の部分は、control13フィールドを復号化するためのTRIDECODE関数の実施形態を示す。疑似コードは、図10の演算に対応する。TRIDECODE関数は、後に、ビットフィールド操作命令およびビット単位の論理命令の両方の処理において使用されるということに留意されたい。

//ビットフィールド即値control13を復号化して、R、S、V、およびSIZE制御パラメータを求める
(integer, integer, bits(6), integer) TRIDECODE(bits(13) control13)
integer R;
integer S;
integer len;
bits(6) V = Zeros();

len = HighestSetBit(control13<12>:NOT(control13<5:0>));

if len < 0 then UNDEFINED;
if len == 0 then
R = 0;
S = 0;
else
R = UInt(control13<len+5:6>);
S = UInt(control13<len−1:0>);

if len < 6 then
V<5:len> = control13<11:len+6>;
return (R, S, V, 1 << len);
疑似コードの次の部分は、ビットフィールド操作命令の復号化および実行に対応する:

//ビットフィールド復号化

integer n = UInt(Rn);
integer d = UInt(Rd);
integer datasize = if sf == ‘1’ then 64 else 32;
boolean inzero;
boolean extend;
integer R;
integer S;
bits(6) V;
integer size;
integer from;
integer to;
integer width;

case opc of
when ‘00’ inzero = true; extend = true; //図7のSBFX/SBFIZ
when ‘01’ inzero = false; extend = false; //図7のBFXIL/BFI
when ‘10’ inzero = true; extend = false; //図7のUBFX/UBFIZ
when ‘11’ UNDEFINED;

if datasize == 32 then
//32ビットデータ値に関して、64ビットデータ要素サイズであることはできない
//そのため、control13フィールドのビット<12>は、1であることはできない。
if control13<12> == ‘1’ then
UNDEFINED;
//また、32ビットデータ値に関して、32ビットの群のいかなる再順序付けも存在することはできず、
//そのため、control13フィールドのビット<11>もまた、1であることはできない。
elsif control13<11> == ‘1’ then
UNDEFINED;

//上で定義される
//TRIDECODE関数を使用して、R、S、V、およびsizeの値を復号化する
(R, S, V, size) = TRIDECODE(control13);

if S >= R then
//BFXの場合
from = R;
to = 0;
width = (S + 1) − R;
else
//BFIの場合
from = 0;
to = size − R;
width = (S + 1);

//ビットフィールド実行

bits(datasize) operand1 = R[n];
bits(datasize) result;
integer base;
integer src;
integer dst;
integer vbit;

//inzeroが真である場合は、結果をゼロに、またはinzeroが偽である場合は、宛先レジスタのコピーに初期化する//
result = if inzero then Zeros() else R[d];

//srcオペランドの各データ要素からのビットフィールドを、結果の対応する
//データ要素にコピーする
base = 0;
while base < datasize do
src = base + from;
dst = base + to;
result<dst+width−1:dst> = operand1<src+width−1:src>;

//必要とされる場合、符号ビット複製を実施する
if extend && to + width < size then
result<base+size−1:dst+width> =
Replicate(src<base+S>, size−(to+width));
base = base + size;

//V<vbit>=1である場合、結果において、2^vビットのビットの隣接対を反転させる
for vbit = 0 to 5
if V<vbit> == ‘1’ then
bits(datasize) tmp = result;
size = 1 << vbit;
base = 0;
while base < datasize do
result<base+size−1:base> = tmp<base+(2*size)−1:base+size>;
result<base+(2*size)−1:base+size> = tmp<base+size−1:base>;
base = base + (2 * size);

//結果を宛先レジスタに書き込む
R[d] = result;
疑似コードの次の部分は、ビット単位の論理命令を復号化および処理するための関数を示す:

//論理(即時)復号化

integer R;
integer S;
integer size;
bits(datasize) mask;

integer datasize = if sf == ‘1’ then 64 else 32;
integer n = UInt(Rn);
integer d = UInt(Rd);
LogicalOp opcode;

//opcは、適用されるべき論理演算のタイプを定義する
case opc of
when ‘00’ opcode = LogicalOp_AND;
when ‘01’ opcode = LogicalOp_OR;
when ‘10’ opcode = LogicalOp_EOR;
otherwise UNDEFINED;

//32ビットデータ値に関して、64ビットのパターン繰り返しサイズであることはできない
if datasize == 32 && control13<12> == ‘1’ then UNDEFINED;

//上で説明されるTRIDECODE関数を使用して、R、S、およびsizeを復号化し、
//Vの返された値を無視する
(R, S, −, size) = TRIDECODE(control13);

//R、S、およびsizeに基づいて、マスクを判定する
bits(size) pattern = Zeros(size−(S+1)):Ones(S+1);
pattern = ROR(pattern, R);
mask = Replicate(pattern, datasize DIV size);

//論理(即時)実行

bits(datasize) operand1 = R[n];
bits(datasize) operand2 = mask;
bits(datasize) result;

//選択された論理演算を使用して、
//ソースおよびマスクオペランドを組み合わせることによって、結果を生成する
case opcode of
when LogicalOp_AND result = operand1 AND operand2;
when LogicalOp_OR result = operand1 OR operand2;
when LogicalOp_EOR result = operand1 EOR operand2;

//宛先レジスタに結果を書き込む
R[d] = result;
疑似コードの次の部分は、control13符号化を使用することができる、別の種類の命令の実施形態を示す。抽出命令は、いくつかの結果データ要素を含むデータ値をもたらし、各結果データ要素は、第1のソースオペランド(operand1)の対応する第1のソースデータ要素、および第2のソースオペランド(operand2)の対応する第2のソースデータ要素を連結することによって形成される値の選択された部分に対応する。本実施形態において、control13値は、データ要素サイズ、および連結された第1および第2のソースデータ要素のどの部分が、結果データ要素に含まれるかを示す値「lsb」を定義する。データ要素サイズおよび「lsb」値は、TRIDECODE関数から返されるNおよびSの値に対応し、TRIDECODE関数によって返されるVおよびRの値は、無視される。

//抽出復号化

integer datasize = if sf == ‘1’ then 64 else 32;
integer n = UInt(Rn);
integer m = UInt(Rm);
integer d = UInt(Rd);
integer lsb;
integer size;
bits(13) control13;

if datasize == 32 && N == ‘1’ then UNDEFINED;

control13 = N:Zeros(6):imm6;
(−, lsb, −, size) = TRIDECODE(control13);

//抽出実行

bits(datasize) operand1 = R[n];
bits(datasize) operand2 = R[m];
bits(datasize) result;
bits(2*size) concat;
integer bbit = 0;

while bbit < datasize
integer ebit = bbit + size − 1;
concat = operand1<ebit:bbit> : operand2<ebit:bbit>;
result<ebit:bbit> = concat<lsb+size−1:lsb>;
bbit = bbit + size;

R[d] = result;
図16は、使用することができる仮想機械実装を例解する。先で説明される実施形態は、関連する技術を支援する特定の処理ハードウェアを動作させるための装置および方法に関して、本発明を実装する一方で、ハードウェアデバイスのいわゆる仮想機械実装を提供することもまた可能である。これらの仮想機械実装は、仮想機械プログラム240を支援するホストオペレーティングシステム220を実行するホストプロセッサ200上で実行する。典型的に、大型で強力なプロセッサが、合理的な速度で実行する仮想機械実装を提供ために必要とされるが、かかるアプローチは、互換性および再利用の理由により、別のプロセッサにネイティブなコードを実行することが所望される時といった、ある状況において、正当化され得る。仮想機械プログラム240は、仮想機械プログラム240によってモデル化されているデバイスである、実際のハードウェアによって提供されるであろう、アプリケーションプログラムインターフェースと同じである、アプリケーションプログラムインターフェースを、アプリケーションプログラム260に提供する。このため、メモリアクセスの制御を含むプログラム命令は、仮想機械ハードウェアとの相互作用をモデル化するように、仮想機械プログラム240を使用して、アプリケーションプログラム260内から実行することができる。
本発明の例解的な実施形態を、添付の図面を参照して、本明細書において詳細に説明してきたが、本発明は、それらの正確な実施形態に限定されないということ、ならびに添付の請求項によって定義されるように、本発明の範囲および精神から逸脱することなく、当業者によって、種々の変更および修正をその中で行うことができるということが理解されるものとする。
2 データ処理装置
4 処理回路
6 命令復号器
8 レジスタ
10 メモリシステム
12 加算器
14 乗算器
16 シフタ
30 第1の部分
32 第2の部分
200 ホストプロセッサ
220 ホストオペレーティングシステム
240 仮想機械プログラム
260 アプリケーションプログラム

Claims (12)

  1. データ処理装置であって、
    処理演算を実施するように構成される処理回路と、
    前記処理演算を実施するように前記処理回路を制御するための制御信号を生成するように、プログラム命令に応答する、命令復号器と、を備え、
    前記プログラム命令は、複数のデータサイズから選択される選択されたデータサイズを示すための第1の部分と、前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも1つの制御パラメータを示すための第2の部分と、を有する、制御値を指定する、少なくとも1つの命令を含み、前記第1の部分および前記第2の部分は、各々、可変ビット数を有し、
    前記命令復号器は、前記選択されたデータサイズおよび前記少なくとも1つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理回路を制御するための制御信号を生成するように、前記少なくとも1つの命令に応答し、
    前記少なくとも1つの命令を処理する時、前記命令復号器および前記処理回路のうちの少なくとも1つは、前記制御値の前記第1の部分ビット数を特定するように、ならびに前記第1の部分ビット数に依存して、(a)前記選択されたデータサイズ、および(b)前記制御値のどのビットが、前記少なくとも1つの制御パラメータを示すための前記第2の部分を形成するかを特定するように構成され、
    前記少なくとも1つの命令は、ソースデータ値を特定する、ビット単位の論理命令を含み、前記ビット単位の論理命令に関して、
    前記対応する処理演算は、前記ソースデータ値、および、前記制御値に基づいて判定される第2のデータ値に対する、論理演算の適用の結果と同等な結果データ値を生成することを含み、
    前記選択されたデータサイズは、前記第2のデータ値内における、ビットの繰り返しパターンの一つ分のビット数を示し、
    前記少なくとも1つの制御パラメータは、前記ビットの繰り返しパターンのビット値を特定するための情報を示す、データ処理装置。
  2. 前記第1の部分のビット数は、前記第2の部分のビット数が、前記選択されたデータサイズに依存して減少するにつれて、前記選択されたデータサイズに依存して増加する、請求項1に記載のデータ処理装置。
  3. 前記複数のデータサイズの少なくともサブセットに関して、前記第1の部分は、少なくとも第1の状態を有する第1のビット、および第2の状態を有するX個の残りのビットを含み、Xは0以上の可変整数であり、
    前記命令復号器および前記処理回路のうちの少なくとも1つは、前記制御値の既定の部分内の前記第1のビットのビット位置に依存して、前記制御値の前記第1の部分ビット数を特定するように構成される、請求項1または2に記載のデータ処理装置。
  4. 前記第1の部分は、前記選択されたデータサイズを特定するためのさらなる情報を提供するための少なくとも1つの追加のビットを含む、請求項3に記載のデータ処理装置。
  5. 前記少なくとも1つの制御パラメータは、複数の制御パラメータを含み、
    前記少なくとも1つの命令を処理する時、前記命令復号器および前記処理回路のうちの少なくとも1つは、前記第1の部分ビット数に依存して、前記複数の制御パラメータの各々が、前記第2の部分のどのビットにより示されるかを特定するように構成される、請求項1から4のいずれか1項に記載のデータ処理装置。
  6. 前記複数の制御パラメータは、少なくとも、前記選択されたデータサイズが増加するにつれて増加するビット数を有する、第1の制御パラメータと、前記選択されたデータサイズが増加するにつれて減少するビット数を有する第2の制御パラメータと、を含み、
    前記第2の部分は、前記第1の制御パラメータおよび前記第2の制御パラメータを示すためのサブ部分を含み、前記命令復号器および前記処理回路のうちの少なくとも1つは、前記第1の部分ビット数に依存して、前記サブ部分のどのビットが前記第1の制御パラメータを示し、前記サブ部分のどのビットが前記第2の制御パラメータを示すかを特定する、請求項5に記載のデータ処理装置。
  7. 前記少なくとも1つの命令は、少なくとも1つのソースデータ要素を含むソースデータ値を特定する、少なくとも1つの単一命令複数データ(SIMD)命令を含み、
    前記少なくとも1つのSIMD命令に関して、前記選択されたデータサイズは、前記少なくとも1つのソースデータ要素のデータ要素サイズを示し、前記対応する処理演算は、前記ソースデータ値の前記少なくとも1つのソースデータ要素の各々において、選択された処理演算を実施することを含む、請求項1から6のいずれか1項に記載のデータ処理装置。
  8. 前記少なくとも1つのSIMD命令は、ビットフィールド操作命令を含み、前記ビットフィールド操作命令に関して、
    前記対応する処理演算は、少なくとも1つの結果データ要素を含む結果データ値を生成することを含み、各結果データ要素は、前記ソースデータ値の対応するソースデータ要素に対応し、
    各結果データ要素は、前記対応するソースデータ要素内の連続ビットのソースビットフィールドのビット値に対応するビット値を有する、結果ビットフィールドを含み、
    前記少なくとも1つの制御パラメータは、前記ソースビットフィールドおよび前記結果ビットフィールドのそれぞれのビット数、前記対応するソースデータ要素内の前記ソースビットフィールドの位置、ならびに前記結果データ要素内の前記結果ビットフィールドの位置を示す、請求項7に記載のデータ処理装置。
  9. 前記ビットフィールド操作命令に関して、前記ソースデータ値が複数のソースデータ要素を含み、前記結果データ値が複数の結果データ要素を含む場合、前記少なくとも1つの制御パラメータはまた、前記複数の結果データ要素が前記結果データ値内に配置される順序を示すためのデータ要素順序付けパラメータ含む、請求項8に記載のデータ処理装置。
  10. 前記ビット単位の論理演算は、AND演算、OR演算、および排他的OR演算のうちの1つを含む、請求項1から9のいずれか1項に記載のデータ処理装置。
  11. プログラム命令に応答して、処理演算を実施するための処理装置のためのデータ処理方法であって、
    複数のデータサイズから選択される選択されたデータサイズを示すための第1の部分、および前記選択されたデータサイズに依存して変化するビット数を有する、少なくとも1つの制御パラメータを示すための第2の部分を有する、制御値を指定する、少なくとも1つの命令を受信することであって、前記第1の部分および前記第2の部分は、各々、可変ビット数を有する、受信することと、
    前記少なくとも1つの命令に応答して、前記制御値の前記第1の部分ビット数を特定することと、
    前記第1の部分ビット数に依存して、(a)前記選択されたデータサイズ、および(b)前記制御値のどのビットが前記少なくとも1つの制御パラメータを示すための前記第2の部分を形成するかを特定することと、
    前記選択されたデータサイズおよび前記少なくとも1つの制御パラメータに依存して、対応する処理演算を実施するように、前記処理装置を制御することと、を含
    前記少なくとも1つの命令は、ソースデータ値を特定する、ビット単位の論理命令を含み、前記ビット単位の論理命令に関して、
    前記対応する処理演算は、前記ソースデータ値、および、前記制御値に基づいて判定される第2のデータ値に対する、論理演算の適用の結果と同等な結果データ値を生成することを含み、
    前記選択されたデータサイズは、前記第2のデータ値内における、ビットの繰り返しパターンの一つ分のビット数を示し、
    前記少なくとも1つの制御パラメータは、前記ビットの繰り返しパターンのビット値を特定するための情報を示す、方法。
  12. コンピュータによって実行される時、請求項1から10のいずれか1項に記載のデータ処理装置に従う命令実行環境を提供する、仮想機械を提供するコンピュータプログラム。
JP2014255950A 2010-11-23 2014-12-18 データ処理装置および方法 Active JP5897696B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1019798.6A GB2485774A (en) 2010-11-23 2010-11-23 Processor instruction to extract a bit field from one operand and insert it into another with an option to sign or zero extend the field
GB1019798.6 2010-11-23

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2013539334A Division JP5703385B2 (ja) 2010-11-23 2011-09-29 データ処理装置および方法

Publications (2)

Publication Number Publication Date
JP2015097099A JP2015097099A (ja) 2015-05-21
JP5897696B2 true JP5897696B2 (ja) 2016-03-30

Family

ID=43467131

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2013539334A Active JP5703385B2 (ja) 2010-11-23 2011-09-29 データ処理装置および方法
JP2014255950A Active JP5897696B2 (ja) 2010-11-23 2014-12-18 データ処理装置および方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2013539334A Active JP5703385B2 (ja) 2010-11-23 2011-09-29 データ処理装置および方法

Country Status (10)

Country Link
US (3) US9207937B2 (ja)
EP (2) EP2648091B1 (ja)
JP (2) JP5703385B2 (ja)
KR (2) KR101900236B1 (ja)
CN (2) CN104915182B (ja)
GB (1) GB2485774A (ja)
IL (1) IL225036A (ja)
MY (1) MY164432A (ja)
TW (1) TWI520058B (ja)
WO (1) WO2012069798A1 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2485774A (en) 2010-11-23 2012-05-30 Advanced Risc Mach Ltd Processor instruction to extract a bit field from one operand and insert it into another with an option to sign or zero extend the field
US20130159667A1 (en) * 2011-12-16 2013-06-20 Mips Technologies, Inc. Vector Size Agnostic Single Instruction Multiple Data (SIMD) Processor Architecture
US9632980B2 (en) 2011-12-23 2017-04-25 Intel Corporation Apparatus and method of mask permute instructions
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN111831335A (zh) * 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
CN104137055B (zh) * 2011-12-29 2018-06-05 英特尔公司 点积处理器、方法、系统和指令
US9081607B2 (en) * 2012-10-24 2015-07-14 International Business Machines Corporation Conditional transaction abort and precise abort handling
CN103973600B (zh) * 2013-02-01 2018-10-09 德克萨斯仪器股份有限公司 用于分组处理旋转掩码合并和寄存字段指令的方法及装置
WO2014203035A1 (en) * 2013-06-18 2014-12-24 Freescale Semiconductor, Inc. Signal processing device and method of performing a bit-expand operation
US20150186137A1 (en) * 2013-12-27 2015-07-02 Tal Uliel Systems, apparatuses, and methods for vector bit test
KR102148984B1 (ko) 2014-05-29 2020-08-27 삼성에스디에스 주식회사 데이터 처리 시스템 및 방법
EP3001306A1 (en) * 2014-09-25 2016-03-30 Intel Corporation Bit group interleave processors, methods, systems, and instructions
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
CN104991758B (zh) * 2015-07-27 2017-11-21 中国科学院自动化研究所 一种位域覆盖装置及操作方法
US9733899B2 (en) * 2015-11-12 2017-08-15 Arm Limited Lane position information for processing of vector
US20170177350A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Set-Multiple-Vector-Elements Operations
US20170177354A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Vector-Based Bit Manipulation
US20170177362A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Adjoining data element pairwise swap processors, methods, systems, and instructions
CN105892993B (zh) * 2016-03-28 2019-02-15 龙芯中科技术有限公司 基于提取插入操作的重组方法、装置及微处理器
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3602383A4 (en) * 2017-03-21 2021-05-19 Tora Holdings, Inc. SECURE ORDER AGREEMENT THROUGH DISTRIBUTION OF DATA AND PROCESSING OVER SEVERAL SEGREGATED CALCULATION NODES
US10514914B2 (en) * 2017-08-29 2019-12-24 Gsi Technology Inc. Method for min-max computation in associative memory

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4520439A (en) * 1981-01-05 1985-05-28 Sperry Corporation Variable field partial write data merge
US4617641A (en) * 1983-10-19 1986-10-14 Hitachi, Ltd. Operation unit for floating point data having a variable length exponent part
JPS6266377A (ja) * 1985-09-19 1987-03-25 Fujitsu Ltd マスクパタ−ン生成方式
JP2674301B2 (ja) 1990-10-31 1997-11-12 富士通株式会社 ビット転記方式
US5423010A (en) * 1992-01-24 1995-06-06 C-Cube Microsystems Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words
JP3203401B2 (ja) * 1993-05-21 2001-08-27 三菱電機株式会社 データ処理装置
JP3452655B2 (ja) 1993-09-27 2003-09-29 株式会社日立製作所 ディジタル信号処理プロセッサおよびそれを用いて命令を実行する方法
JPH07175651A (ja) * 1993-09-27 1995-07-14 Hitachi Ltd ディジタル信号処理プロセッサおよびそれを用いて命令をフェッチし復号する方法
JP2682469B2 (ja) * 1994-09-20 1997-11-26 日本電気株式会社 命令コード符号化方式
US6738793B2 (en) 1994-12-01 2004-05-18 Intel Corporation Processor capable of executing packed shift operations
JP3433588B2 (ja) 1995-10-19 2003-08-04 株式会社デンソー マスクデータ生成回路及びビットフィールド操作回路
JPH11272546A (ja) 1998-03-23 1999-10-08 Nec Corp 可変長レジスタ装置
JP2000099327A (ja) 1998-09-28 2000-04-07 Mitsubishi Electric Corp 計算機
US6308253B1 (en) * 1999-03-31 2001-10-23 Sony Corporation RISC CPU instructions particularly suited for decoding digital signal processing applications
JP2001251349A (ja) * 2000-03-06 2001-09-14 Fujitsu Ltd パケットプロセッサ
US6625724B1 (en) * 2000-03-28 2003-09-23 Intel Corporation Method and apparatus to support an expanded register set
US6678806B1 (en) 2000-08-23 2004-01-13 Chipwrights Design, Inc. Apparatus and method for using tagged pointers for extract, insert and format operations
GB0024312D0 (en) * 2000-10-04 2000-11-15 Advanced Risc Mach Ltd Single instruction multiple data processing
DE10314928A1 (de) 2003-04-02 2004-11-04 Infineon Technologies Ag Verfahren und programmgesteuerte Einheit zur Bitfeldverschiebung
CN1898873A (zh) * 2003-12-18 2007-01-17 汤姆森特许公司 用于将n比特字代码转换为m比特字并且m小于n的方法和器件
EP1545010A1 (en) * 2003-12-18 2005-06-22 Deutsche Thomson-Brandt GmbH Method and device for transcoding N-bit words into M-bit words with M smaller N
US7370180B2 (en) * 2004-03-08 2008-05-06 Arm Limited Bit field extraction with sign or zero extend
GB2411978B (en) * 2004-03-10 2007-04-04 Advanced Risc Mach Ltd Inserting bits within a data word
US7315937B2 (en) * 2004-10-01 2008-01-01 Mips Technologies, Inc. Microprocessor instructions for efficient bit stream extractions
US7885992B2 (en) * 2006-06-22 2011-02-08 Honeywell International Inc. System and method for implementing irregular data formats
US7529918B2 (en) * 2006-07-21 2009-05-05 Broadcom Corporation System and method for efficiently performing bit-field extraction and bit-field combination operations in a processor
JP4374363B2 (ja) 2006-09-26 2009-12-02 Okiセミコンダクタ株式会社 ビットフィールド操作回路
US7895419B2 (en) * 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US8352528B2 (en) * 2009-09-20 2013-01-08 Mimar Tibet Apparatus for efficient DCT calculations in a SIMD programmable processor
GB2485774A (en) * 2010-11-23 2012-05-30 Advanced Risc Mach Ltd Processor instruction to extract a bit field from one operand and insert it into another with an option to sign or zero extend the field

Also Published As

Publication number Publication date
JP5703385B2 (ja) 2015-04-15
KR20140001910A (ko) 2014-01-07
US20160026465A1 (en) 2016-01-28
EP2648091A1 (en) 2013-10-09
KR20170118946A (ko) 2017-10-25
CN104915182A (zh) 2015-09-16
JP2015097099A (ja) 2015-05-21
KR101900236B1 (ko) 2018-09-19
GB2485774A (en) 2012-05-30
US10521232B2 (en) 2019-12-31
CN103229139A (zh) 2013-07-31
EP2648091B1 (en) 2014-10-29
TWI520058B (zh) 2016-02-01
US20120131312A1 (en) 2012-05-24
MY164432A (en) 2017-12-15
US20170153891A1 (en) 2017-06-01
CN103229139B (zh) 2016-06-08
EP2603851B1 (en) 2017-08-16
IL225036A (en) 2017-06-29
EP2603851A1 (en) 2013-06-19
JP2014500546A (ja) 2014-01-09
US9619225B2 (en) 2017-04-11
TW201235937A (en) 2012-09-01
WO2012069798A1 (en) 2012-05-31
GB201019798D0 (en) 2011-01-05
KR101834174B1 (ko) 2018-03-05
CN104915182B (zh) 2017-12-01
US9207937B2 (en) 2015-12-08

Similar Documents

Publication Publication Date Title
JP5897696B2 (ja) データ処理装置および方法
JP5646737B2 (ja) 条件付き比較命令
CN103562854B (zh) 用于对齐寄存器的系统、装置和方法
CN107851013B (zh) 数据处理装置和方法
TWI739754B (zh) 向量運算指令
EP3655852B1 (en) Vector interleaving in a data processing apparatus
JP6803390B2 (ja) 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する符号化命令
JP5732139B2 (ja) データ要素の条件付き選択

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151026

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160120

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160302

R150 Certificate of patent or registration of utility model

Ref document number: 5897696

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250