JP2019503010A - 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する符号化命令 - Google Patents

第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する符号化命令 Download PDF

Info

Publication number
JP2019503010A
JP2019503010A JP2018536878A JP2018536878A JP2019503010A JP 2019503010 A JP2019503010 A JP 2019503010A JP 2018536878 A JP2018536878 A JP 2018536878A JP 2018536878 A JP2018536878 A JP 2018536878A JP 2019503010 A JP2019503010 A JP 2019503010A
Authority
JP
Japan
Prior art keywords
register number
architecture
instruction
architecture register
operand
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.)
Granted
Application number
JP2018536878A
Other languages
English (en)
Other versions
JP6803390B2 (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 JP2019503010A publication Critical patent/JP2019503010A/ja
Application granted granted Critical
Publication of JP6803390B2 publication Critical patent/JP6803390B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する命令をより効率的に符号化するための様々な符号化方式について論じる。第1の例では、第1のアーキテクチャレジスタ番号を第2のアーキテクチャレジスタ番号よりも大きくなるように制約することによって、他の演算の符号化に使用するために符号化を解放する。第2の例では、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号は任意の値をとることができるが、第1のタイプの処理演算および第2のタイプの処理演算のうちの一方が、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号の比較に応じて選択される。

Description

本技術は、データ処理の分野に関する。
データ処理装置は、所与の命令セットアーキテクチャ(ISA)に従って符号化された命令を実行するように構成された処理回路を有することができる。命令は、いずれの処理演算を実行すべきか、および、その処理演算中にいずれのレジスタを使用すべきかを識別するために復号される所与のビット数を使用して表現することができる。理論的にはサポートすることが望ましいかもしれない多種多様な処理演算が存在する可能性があるが、追加の動作に対応するために各命令のビット数を増やすことは、追加のビットを各命令の処理パイプラインに沿って搬送する必要があり、より複雑な復号回路が必要となり、プログラムをメモリに記憶するのに必要なメモリ空間が命令のサイズとともに増加することになるために、ISAに従って命令を実行する処理装置の回路面積および電力消費を増加させる傾向があるため、ISA設計は困難になる可能性がある。一方、回路面積およびエネルギーを節約するために、命令符号化のビット数を特定の数に制限することができるが、これはISAによっていずれの演算がサポートされるかに関して妥協を必要とする場合がある。
少なくともいくつかの例は、
データ値を記憶するための複数のレジスタと、
命令に応答して処理演算を実行する処理回路と
を備える装置であって、
第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する第1のクラスの命令のうちの1つに応答して、処理回路は、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号に対応する第1のレジスタおよび第2のレジスタを使用して、対応する処理演算を実行するように構成され、
上記第1の命令クラスの命令は、上記第1のアーキテクチャレジスタ番号を上記第2のアーキテクチャのレジスタ番号よりも大きくなるように制約する命令符号化を有する、装置を提供する。
少なくともいくつかの例は、データ処理方法であって、
命令に応答して処理演算を実行するように処理回路を制御するステップを含み、
第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する第1のクラスの命令のうちの1つに応答して、処理回路は、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号に対応する第1のレジスタおよび第2のレジスタを使用して、対応する処理演算を実行するように制御され、
上記第1の命令クラスの命令は、上記第1のアーキテクチャレジスタ番号を上記第2のアーキテクチャのレジスタ番号よりも大きくなるように制約する命令符号化を有する、データ処理方法を提供する。
少なくともいくつかの例は、
データ値を記憶するための複数のレジスタと、
命令に応答して処理演算を実行する処理回路と
を備える装置であって、
第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する命令符号化を有する命令に応答して、処理回路は、第1のアーキテクチャレジスタ番号と第2のアーキテクチャレジスタ番号との比較に基づいて、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号に対応するレジスタを使用して、第1のタイプの処理演算を実行すべきか、または、第2のタイプの処理演算を実行すべきかを選択するように構成されている、装置を提供する。
少なくともいくつかの例は、
第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する命令符号化を有する命令に応答して、第1のアーキテクチャレジスタ番号と第2のアーキテクチャレジスタ番号とを比較するステップと、
第1のアーキテクチャレジスタ番号と第2のアーキテクチャレジスタ番号との比較に基づいて、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号に対応するレジスタを使用して、第1のタイプの処理演算を実行すべきか、または、第2のタイプの処理演算を実行すべきかを選択するステップと
を含む、データ処理方法を提供する。
上述したいずれかの装置に対応する仮想マシン実行環境を提供するようにコンピュータを制御するコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体を提供することができる。記憶媒体は、非一時的記憶媒体であってもよい。
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれるべき以下の実施例の説明から明らかになるであろう。
ここで本発明の実施形態を、添付の図面を参照して、単なる例として以下に説明する。
命令を処理するための処理パイプラインを有するデータ処理装置の一例を概略的に示す図である。 任意の値をとることができる第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する命令符号化の一例を示す図である。 第1のアーキテクチャレジスタ番号が第2のアーキテクチャレジスタ番号よりも大きくなるように制約されている第1のクラスの命令と、単一のソースアーキテクチャレジスタ番号を符号化する第2のクラスの命令とを提供する命令符号化の一例を示す図である。 図3に示された第1のクラスの命令の第1のレジスタフィールドおよび第2のレジスタフィールドの2つの可能な符号化のうちの1つを示す図である。 図3に示された第1のクラスの命令の第1のレジスタフィールドおよび第2のレジスタフィールドの2つの可能な符号化のうちの1つを示す図である。 図3に示すように符号化された命令を復号するための復号ステージの一例を示す図である。 図4Aの符号化方式に従って第1のレジスタフィールドおよび第2のレジスタフィールドを復号するための回路の第1の例を示す図である。 復号回路の第2の例を示す図である。 命令を処理する方法を示す図である。 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を比較するためのレジスタ比較器を含む命令復号回路の第2の例を示す図である。 比較命令の符号化の例を示す図である。 命令を処理する方法を示す図である。 使用することができる仮想マシンの実施態様を示す図である。
いくつかの具体例を以下に示す。本発明はこれらの例に限定されないことは理解されよう。
処理回路は、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別するいくつかの命令をサポートすることができる。そのような命令に応答して、処理回路は、第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号に対応する第1のレジスタおよび第2のレジスタを使用して、対応する処理演算を実行することができる。典型的なISAは、所与の数のアーキテクチャレジスタを指定し、これらのアーキテクチャレジスタのいずれかが任意の組み合わせで第1および第2のアーキテクチャレジスタ番号として指定され得るように命令を符号化する。
しかし、本発明者らは、いずれのレジスタをそれぞれ第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号として見なされるかを交換しても、異なる結果をもたらさない可能性があるため、そのような手法ではいくらかの冗長性があることを認識した。例えば、レジスタR1およびR2に記憶された値を加算するadd命令は、レジスタR2およびR1内の値を加算するadd命令と同じ結果をもたらす。したがって、典型的なISAは、所与の処理演算のために両方の順序の所与のレジスタ対を別々に符号化する際に、かなりの量の命令符号化空間を使い果たす可能性がある。本技術は、この冗長性を利用して命令のより効率的な符号化を提供することができる技術を提供する。
第1の例では、第1のアーキテクチャレジスタ番号を第2のアーキテクチャレジスタ番号よりも大きくなるように制約する命令符号化を有する第1のクラスの命令を提供することができる。第1のアーキテクチャレジスタ番号が第2のアーキテクチャレジスタ番号以下であるという選択肢を排除することにより、アーキテクチャレジスタの有効な組み合わせの数が減少し、これにより、他の処理演算をシグナリングするために使用するためのいくつかの命令符号化を解放することができる。アーキテクチャレジスタの任意の組み合わせが指定され得る場合と比較して、第1のアーキテクチャレジスタ番号を第2のアーキテクチャレジスタ番号よりも大きくなるように制限することにより、有効なレジスタ対符号化の数を半分以上減らすことができ、それらが1つ少ないビットを使用して識別されることが可能になる。これによって、全体でより少ないビットを使用して命令が符号化されることを可能にし、命令を実行する処理装置においてエネルギーおよび電力を節約することができるか、または、実行されるべき処理演算を符号化するために追加のビットが利用可能となるため、所与のビット数が、追加の機能をサポートするために、より広い範囲の異なる処理演算を表すことを可能にすることができる。
簡潔にするために、第1のアーキテクチャレジスタ番号は以下ではRxとして見なされ、第2のアーキテクチャレジスタ番号はRyとして見なされ、Rx>Ryである。
装置は、命令に応答して処理回路によってアクセス可能なハードウェア内に設けられた物理レジスタを有することができる。いくつかの実施形態では、アーキテクチャレジスタ番号Rx、Ryは、使用される物理レジスタを識別することもできる。この場合、Rx>Ryの制約は、いずれの物理レジスタが処理されるべきデータを記憶するかを制約することもできる。一方、他の実施形態は、命令によって指定されるアーキテクチャレジスタ番号がハードウェア内に提供される異なる物理レジスタにマッピングされ得るレジスタリネーミングをサポートすることができる。この場合、命令符号化はRx>Ryを必要とし得るが、レジスタリネーミング回路は依然として、指定されたアーキテクチャレジスタ番号を任意の利用可能な物理レジスタにマッピングする自由を有することができるため、これは必ずしも、決して物理レジスタの選択を制約するものではない。命令符号化は、Rx>Ryであるようにアーキテクチャレジスタ番号を制約するが、対応するレジスタに記憶されるデータには制約がなく、RxおよびRyに記憶されたデータは任意の値をとることができることに留意されたい。
処理回路は、RxがRyよりも大きくなるように制約される命令符号化に従って第1のクラスの命令を復号する復号回路を有することができる。
第1のクラスの命令の少なくともいくつかについて、第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryは、対応する命令に応答して処理されるべきオペランド値を記憶するレジスタを識別するソースアーキテクチャレジスタ番号であってもよい(例えば算術命令または論理命令は、そのソースオペランドが、Rx>Ryであるアーキテクチャレジスタによって識別されるようにすることができる)。命令はまた、演算結果が書き込まれる宛先レジスタも指定することができる。宛先レジスタの選択は無制約であり得るため、ソースアーキテクチャレジスタRx、Ryの選択にかかわらず、宛先アーキテクチャレジスタとして任意のアーキテクチャレジスタを指定することができる。
他方、第1のクラスの命令の他の命令について、第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryの一方または両方は、結果が書き込まれる宛先レジスタを識別することができる。例えば、load multiple命令は、Rx>Ryの符号化を使用して値がメモリからロードされるべき2つの宛先レジスタRx、Ryを指定することができる。
一例では、第1のクラスの命令は、対応する処理演算が可換的演算である少なくとも1つの可換的命令を含むことができる。可換的演算は、オペランドが入力される順序に関係なく、所与のオペランドセットに適用されたときに同じ結果を与える演算であり得る(例えば、A≠Bであっても、f(A,B)=f(B,A)となる関数f(m,n))。例えば、加算は2+3=3+2なので可換的演算である。可換的演算の他の例には、乗算、絶対差、およびAND、OR、XORのようないくつかのビット単位の論理演算が含まれる。可換的演算では、入力オペランドの順序にかかわらず同じ結果が生成されるため、Rx>Ryの符号化に加えてRx>Ryの符号化を可能にすることは、全体的に冗長になる。したがって、そのような演算の場合、Rx<Ryの符号化の損失は、ISAによって提供される機能性に影響を与えない。コンパイラは、例えばADD R2、R3の代わりに単にADD R3、R2を符号化する命令を選択することができる。
いくつかの可換的演算では、2つの同一のオペランドに演算を適用することが依然として重要である可能性があり、そのため、Rx=Ryの符号化を除外することによって、ある程度機能が制限される場合がある。しかし、いくつかのタイプの演算では、2つの同一の入力に演算を適用するのと同じ結果をもたらす、ISAがサポートしている別の演算がすでに存在する可能性がある(例えば、Rx+RxはRx*2、または1ビット位置だけの左シフトと等価であり得、そのため、両方のソースレジスタが同じであることを可能にするadd命令は必須ではない場合がある)。
また、2つの同一の入力に適用されるある可換的演算が命令セットアーキテクチャ内の他の場所に同等のものを有しないとしても、Rx>Ryによって対応する可換的命令を依然として実行できるように、同じオペランド値を2つの異なるアーキテクチャレジスタRx、Ryに書き込むことができる。
また、所与の可換的演算に対して、2つの同一のオペランドに演算を適用することが頻繁に使用される可能性が高く、そのため、ISAでこれを明示的にサポートすることが望ましい場合、または、同じ値を記憶するために2つの異なるレジスタの使用と関連付けられる追加のレジスタ圧力を避けることが望ましい場合、第2の命令タイプ(例えば、異なるオペコードを有する)を命令セット符号化空間の他の場所に実装して、同一の入力によってその特定の可換的演算を実行することができる。例えば、Rx>Ryである符号化を有する乗算命令MUL Rx、Ryに加えて、MUL Rx、Rxを実行してレジスタRxの値を2乗する2乗命令に追加の符号化を割り当てることができる。典型的には、Rx=Ryのときに演算を実行することが重要である可換的演算の数は、サポートされる可換的演算の総数よりも少なく、そのため、演算のいくつかがそれぞれRx>RyおよびRx=Ryに対して定義される別個の符号化を有する場合であっても、全体として必要とされる命令符号化の総数を減らすことができる。
第1のクラスの命令はまた、対応する処理演算が非可換的演算である少なくとも1つの非可換的命令を含むこともできる。非可換的演算は、オペランドがすべて等しいものではない場合に、オペランドの順序を変更することによって、異なる結果が生成される演算であり得る(例えば、A≠Bの場合、f(A,B)≠f(B,A)となる関数f(m,n))。例えば、4−1は1−4と等しくないため、減算は非可換的演算である。非可換的演算の他の例には、除算およびシフト演算が含まれる(例えば、オペランドBによって指定される複数のビット位置だけオペランドAをシフトすることは、一般に、オペランドAによって指定される複数のビット位置だけオペランドBをシフトすることと同じ結果を与えない)。
Rx<Ryを許容することが異なる結果を生成するため、これを可能にすることは依然として重要であるという理由で、Rx>Ryを制約する命令符号化は、非可換的命令には望ましくないと予測される可能性がある。しかし、たとえ命令セットアーキテクチャが所与の非可換的演算に対してRx>Ryしか許容しないとしても、入力値は以前の命令によって異なる順序でアーキテクチャレジスタに書き込まれ、それによって、非可換的演算は依然として、アーキテクチャレジスタ番号Rx、Ryの制約にもかかわらず、正しい順序で正しい値に適用することができる。例えば、非可換的演算が適用されるべきオペランドを生成する、先行する命令の宛先レジスタは、非可換的演算のための第1のオペランドが、第2のオペランドに使用されるレジスタよりも大きいアーキテクチャレジスタ番号を有するレジスタであるように、選択することができる。代替的に、非可換的命令の前にレジスタ移動命令を実行して、あるレジスタから別のレジスタにデータ値を移動させ、オペランドが制約Rx>Ryに適合する適切なレジスタ内にあり、非可換的演算命令を、正しい順序のオペランドによって実行することができることを保証することができる。
しかし、追加の移動命令を実行するか、または非可換的演算のためにオペランドを記憶できるレジスタを制約すると、性能に影響を与える可能性がある。これを回避し、コンパイラ設計を単純化するために、第1のクラスの命令は、同じタイプの非可換的演算に対応する少なくとも1対の相補的非可換的命令を含むことができる。各対に対して、対のうちの1つの命令は、第1のオペランドおよび第2のオペランドを有する非可換的演算を、対の他の命令とは異なる順序で実行するように、処理回路を制御する。例えば、例としてRx−Ryに対応するSUB Rx、RyおよびRy−Rxに対応するSUBR Rx、Ryを有する、相補的な一対の減算命令が提供され得る。非可換的演算の非反転および反転の両方のバージョンを別々の命令として含めることによって、コンパイラは、非可換的演算のオペランドを任意のアーキテクチャレジスタに完全に自由に配置することができる。
これは、そもそもアーキテクチャレジスタ番号符号化Rx、Ryを制約するという目的を損なうことが予想される。しかしながら、レジスタ指定フィールドよりも命令の他の部分に冗長性をシフトすることによって、これは符号化空間の冗長部分を、それらの演算を復号することおよび/またはそのような冗長部分を他の演算に再利用することをより容易にする連続的な部分に融合することができるため、このようにアーキテクチャレジスタを符号化することの利点は依然として存在する。
相補的な非可換的命令の対は、種々の方法で区別することができる。場合によっては、命令の対は異なるオペコードを有することができる。場合によっては、非可換的命令の相補的な対のオペコードは、異なる1つのビットを除いて同一であり得る。異なるビットを、レジスタの順序を逆転させるための論理をアクティブにするために使用することができるため、この手法は、復号回路を単純にすることができる。代替的に、命令対は同じオペコードを有することができるが、非可換的演算を使用してオペランドが処理される順序を指定する追加のビットフィールドを有することができる。
代替的に、Rx>Ryである第1のクラスの命令に加えて、RxがRyよりも小さくなるように制約されるさらなるクラスの命令が存在してもよく、第1のクラスおよびさらなるクラスの各々における1つの命令が、同じ非可換的演算に割り当てられる(例えば、オペコードの1ビットは、RxおよびRyの復号値が反転されるか否かを選択することができ、RxおよびRyのいずれがより大きいかを実効的に反転する)が、可換的演算は第1のクラスまたはさらなるクラスのいずれかに割り当てられる単一の命令のみを有し得る。
第1のクラスの命令は、第1のアーキテクチャレジスタ番号Rxと第2のアーキテクチャレジスタ番号Ryとの間の連続範囲内のアーキテクチャレジスタ番号に対応する複数のレジスタを使用して処理演算を実行するように処理回路を制御するための少なくとも1つのレジスタ範囲指定命令を含むことができる。例えば、レジスタ範囲指定命令は、レジスタとメモリ内の対応するアドレスとの間でデータを転送するためのload multiple命令もしくはstore multiple命令、またはレジスタとスタックとの間でデータを転送するプッシュ命令またはポップ命令とすることができる。レジスタ範囲指定命令について、範囲を昇順と降順の両方で符号化できることについて大きな利点はないため、Rx>Ryとなるようにレジスタ符号化を制約することによって、ISAの全体的な符号化をより効率的にする他の演算を符号化するために、いくつかの命令符号化を使用できるようにすることができる。レジスタリネーミングをサポートするシステムでは、アーキテクチャレジスタ番号がレジスタ範囲指定命令によって連続範囲として識別され得るが、各アーキテクチャレジスタ番号は、物理レジスタファイル内の個別の物理レジスタにマッピングされ得るため、対応する物理レジスタ番号は連続的な範囲内にある必要はないことに留意されたい。
第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryは、第1のクラスの命令の命令符号化において明示的に識別されない場合がある。したがって、装置は、第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryを識別するために第1のクラスの命令の命令符号化を復号するレジスタ復号回路を備えることができる。場合によっては、レジスタ復号回路は、命令自体を復号する命令復号器の一部であってもよく、その結果、命令復号器は、実行すべき処理演算を識別する命令のオペコードと、実際のアーキテクチャレジスタ番号Rx、Ryを識別するための命令のビットを識別するレジスタの両方を復号する。他の場合には、レジスタ復号回路を命令復号器とは別個に設けることができる。例えば、命令復号器は最初にオペコードを復号することができるが、その後、レジスタリネーミングステージまたは発行ステージのような後続のステージにおいて、アーキテクチャレジスタ番号Rx、Ryを復号することができる。しかしながら、一般に、第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryが早期に識別され得るほど、同じアーキテクチャレジスタを指定する命令間の危険を早期に識別することができるため、レジスタ復号回路を可能な限り早く、例えば命令復号ステージにおいて提供することが有益であり得る。
場合によっては、アーキテクチャレジスタ番号Rx、Ryの符号化を、即値、制御フラグまたは他のパラメータなど、命令の少なくとも1つのさらなるパラメータの符号化と組み合わせることができる。この場合、命令の共通のビットフィールド(または複数のビットフィールド)を復号して、Rx、Ryおよびさらなるパラメータを識別することができ、Rx>Ryのレジスタ対のみがビットフィールド(複数可)の有効な符号化を割り当てられる。このようにレジスタ番号Rx、Ryの符号化をさらなるパラメータの符号化と組み合わせることにより、レジスタおよびさらなるパラメータのための別個のフィールドが提供される場合よりも命令をより効率的に符号化することができる。
他の例では、第1のクラスの命令の命令符号化のいくつかのビットは、第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryを識別するために特に割り当てられてもよく、命令の任意の他のパラメータは命令の異なるフィールドにおいて別々に識別されてもよい。この場合、2個のアーキテクチャレジスタを提供するISAについて、第1のクラスの命令において、第1のアーキテクチャレジスタRxおよび第2のアーキテクチャレジスタRyは、命令符号化の2N−1ビットを使用して表すことができる。例えば、アーキテクチャが16または32のレジスタを提供する場合、RxおよびRyはそれぞれ7または9ビットを使用して表すことができる。対照的に、命令符号化がアーキテクチャレジスタ番号Rx、Ryの自由な選択を許可した場合、2Nビットが必要となる。したがって、レジスタ指定フィールドに1ビットを保存することによって、命令幅を縮小するか、命令の他の部分の符号化空間を解放して、他の演算の符号化に使用することができる。
個のアーキテクチャレジスタがあり、RxおよびRyが2N−1個のレジスタ識別ビットを使用して表される場合、Rx>RyであるRxとRyとの組み合わせの数は2N−1/2であり、他の目的のために使用することができるレジスタ識別ビットの2N−1個のスペア値を残す。これらのスペア符号化のうちのいくつかは、命令オペコードまたは命令符号化の他の部分を第1クラスの命令とは別様に解釈することができる第2のクラスの命令を表すために使用することができ、それによって、他のオペコードが他の演算を符号化するために解放される。
例えば、第2のクラスの命令は、1つの入力オペランドしか必要とせず、したがって1つのソースアーキテクチャレジスタ番号のみを指定する必要がある命令を含むことができる。例えば、このような単一入力命令は、指定されたレジスタ内のビットの順序を逆転させる命令、または所与のレジスタに記憶されたデータ値の先頭のゼロの数をカウントする命令を含むことができる。また、2つの同一の入力に演算を適用することが重要である、上述したようないくつかの可換的演算(例えば上述の2乗命令)が存在する可能性がある。そのような命令は、これらの単一入力動作のために他のオペコードを使い切る必要を回避するために、レジスタ識別ビットのいくつかのスペアビットパターンを使用して符号化することができる。
スペアビットパターンの数は、可能なすべてのアーキテクチャレジスタを単一入力演算の単一ソースレジスタとして識別するのには十分でなくてもよく、したがって第2のクラスの命令について、第1のクラスの命令のオペコードフィールドのビットは、レジスタ識別ビットの少なくともサブセットとともに、単一ソースレジスタを識別することができる。したがって、第2のクラスの命令のオペコードは事実上1ビット短くなり得、それによって、第1のクラスの命令よりも、第2の命令クラスの命令が少なくなる。
第1のクラスの命令について、所与のビットパターンにおいてRxおよびRyを符号化するために使用され得る多種多様な符号化方式が存在し得る。最も一般的には、レジスタ識別ビットの可能な各ビットパターンは、Rx>Ryである所与のレジスタ対Rx、Ryに任意にマッピングすることができ、いくつかのビットパターンが、上述したように第2のクラスの命令に使用できるスペアに残る。しかしながら、いくつかの符号化方式は、他の符号化方式よりも複雑な復号回路を必要とすることがある。
特に効率的な符号化は、Ryの最上位ビットが0であるときにRxに依存し、Ryの最上位ビットが1であるときにRxの全ビットを反転した結果に依存する第1のレジスタフィールドA、および、Ryの最上位ビット以外のRyの残りのビットに依存する値を有する第2のレジスタフィールドBを提供することである。これは、AとBの比較に応じてAフィールドの内容を選択的に反転させることによって復号することができ、それによって、RxおよびRyは比較的少ない回路で復号することができる。
一例では、第2のレジスタフィールドBは、Ryの残りのビットとRxの対応するビットとのビット単位の排他的OR(XOR)の結果に依存する値を有することができる。この符号化にはいくつかの利点がある。第1に、第2のクラスの命令に対して再使用されるスペアビットパターンは、第2のレジスタフィールドBのすべてのビットがゼロであり、第1のレジスタフィールドAの最上位ビットもゼロである符号化に融合され、第2のクラスの命令の復号がより単純になる。また、この復号論理は、他の符号化を復号する論理に比べて、比較的単純で高速である。
別の例では、第2のレジスタフィールドBは、Ryの最上位ビットが0であるときにRyの残りのビットに依存し、Ryの最上位ビットが1であるときはRyの残りのビットを反転した結果に依存する値を有することができる。この手法では、スペア符号化は、Bの対応するビットに等しいAの最下位ビットを有することができる。
アーキテクチャレジスタ番号符号化における冗長性を利用するためのもう1つの技法は、いずれのアーキテクチャレジスタがRxおよびRyとして指定されるかの自由な選択を可能にし、ただし、RxおよびRyの比較から何らかの追加情報を導出することである。例えば、処理回路は、RxとRyとの比較に基づいて、Rx、Ryに対応するレジスタを使用して、第1のタイプの処理演算を実行するか、または第2のタイプの処理演算を実行するかを選択することができる。一般に、第1の処理演算および第2のタイプの処理演算は、入力値の少なくともいくつかの組み合わせについて異なる結果を生成する任意の処理演算であってもよい。したがって、上述したようにレジスタ符号化を制約するのではなく、レジスタ符号化は、利用可能なアーキテクチャレジスタ番号のいずれかから選択することができるが、アーキテクチャレジスタ番号を比較することによって、少なくとも一片の追加情報を導出することができ、この情報はその後、命令コードの残りの部分が他の様態で同一であっても、処理回路によって異なるタイプの処理演算を実行できるように、どのように命令が復号されるかに影響を与えることができる。ここでも、これによってその追加情報片を識別するために符号化の別のビットを提供する必要性をなくし、命令をより短くすることができ、または、これによって、他の目的のための符号化の追加のビットを解放して、増大した機能が、所与の数の命令ビットを使用してサポートされることを可能にすることができる。
いくつかの命令について、Rx>Ryの場合、処理回路は第1のタイプの処理演算を実行することができ、Rx<Ryの場合、処理回路は第2のタイプの処理演算を実行することができる。したがって、オペランドが符号化される順序は、実効的に、処理演算のタイプを選択するためのオペコードの追加ビットを提供することができる。
この手法は、第1のタイプの処理演算および第2のタイプの処理演算が異なる可換的演算である場合に特に有用であり得る。上記で論じたように、可換的演算の場合、所与の対のレジスタのうちのいずれのレジスタが第1のオペランドまたは第2のオペランドとして指定されるかにかかわらず、所与の対のレジスタに可換的演算が適用される場合、結果は同じになる。したがって、所定の命令オペコードに対してレジスタが指定される順序は、他の何らかの情報をシグナリングするために使用することができる。場合によっては、可換的演算はまったく異なる可能性があり得る。例えば、第1のタイプの処理演算は加算であり得、第2のタイプの処理演算はXORであり得る。他の場合には、第1のタイプの処理演算および第2のタイプの処理演算は、本質的に同じ種類の算術演算または論理演算に対応することができるが、第2のタイプの処理演算は第1のタイプの変更バージョンである(例えば、第2のタイプの演算が、第1のタイプの演算の結果の絶対的な大きさを返してもよい)。
RxおよびRyが自由に選択でき、Rx>RyおよびRy<Rxがそれぞれ第1の処理演算および第2の処理演算に対応する場合、RxがRyに等しいいくつかの符号化も存在する。これらは、いくつかの異なる方法で処理することができる。
・いくつかの命令では、Rx=Ryのとき、処理回路は、第1のタイプの処理演算または第2のタイプの処理演算のいずれかを選択することができる。例えば、第1のタイプの処理演算はRx≧Ryであるときに選択することができ、第2のタイプの動作はRx<Ryである場合に選択することができる。Rx=Ryのとき、両方のタイプの演算を符号化することが意味をなさない場合があるいくつかのタイプの処理演算がある。例えば、第1のタイプの演算が減算であり、第2のタイプの演算が減算の結果の絶対値を生成する場合、Rx=Ryの場合、両方の演算は結果0を生成するため、Rx=Ryのときの2つのタイプの演算のための別々の符号化を提供することには何の意味もなく、代わりに、Rx=Ryのときには、これによって第1のタイプの演算が選択されることになり得る。
・代替的に、Rx=Ryである何らかの命令について、第3のタイプの処理演算が実行されてもよい。したがって、Rx=Ryの符号化は、Rx>RyまたはRx<Ryの場合の演算とはまったく異なる演算をシグナリングすることができる。
・もう1つの手法は、特定の命令について、Rx=Ryの符号化が単に、任意のタイプの処理演算に対応しない無効な符号化であることであり得る。そのような符号化に遭遇すると、命令復号器は未定義の命令をシグナリングしてもよく、またはその命令をNOPとして扱ってもよい。
Rx=Ryの場合を処理するのに、ISAのすべての命令が同じ手法を使用する必要はない。所与のISAは、これらの手法の1つを使用するある命令、および、別の手法を使用する他の命令を有し得る。
他の命令について、第1のタイプの処理演算は、RxとRyが異なる場合に実行され得、第2のタイプの処理演算は、RxがRyに等しい場合に実行され得る。これは、第1のタイプの処理演算が非可換的演算である場合に特に有用である。非可換的演算について、非可換的演算はオペランドの順序が逆になったときに異なる結果をもたらすため、所与のレジスタ対が符号化され得る可能性のある両方の順序が重要であり得る。しかし、両方のオペランドが同じであるいくつかの非可換的演算については、結果は、重要でないものであり得るか、または、代替的な演算を使用して生成され得る。例えば、BIC演算(Rx AND(NOT Ry))について、Rx=Ryの場合、結果は常に0であるため、代わりに、Rx=RyであるBIC演算の符号化は、異なる第2のタイプの処理演算、例えば、レジスタRx内のデータ値の全ビットを反転させるためのビット反転演算をシグナリングし得る。Rx=Ryのときの結果が重要でないものであり得る非可換的演算の他の例は、整数減算(Rx−Rxが常に0)、除算(Rx/Rxが常に1)、またはORN(A ORN BはA OR(NOT B)と等価であるため、Rx ORN Rxは常にすべて1のビットパターン、すなわち、0xffff...,または−1である)である。
装置は、第1のアーキテクチャレジスタ番号Rxおよび第2のアーキテクチャレジスタ番号Ryを比較するレジスタ番号比較回路と、命令のオペコードおよびレジスタ番号比較回路によって実行された比較の結果に基づいて実行されるべき処理演算のタイプを識別する復号回路とを有することができる。例えば、オペコードは、レジスタを用いて実行される必要な処理演算を識別するために、オペコードとともに復号され得る、レジスタ比較から導出される追加のオペコードビットによって補完され得る。これにより、明示的な命令符号化において追加のオペコードビットを表す必要がなくなる。
それぞれRx>RyおよびRx<Ryのときに異なる演算を実行することが有用であり得る命令の例は、第1のタイプの処理演算が、第1のオペランドおよび第2のオペランドが等しいか否かの判定を含むことができ、第2のタイプの処理演算が、第1のオペランドおよび第2のオペランドが不等であるか否かの判定を含むことができる、比較命令である。等しいかの比較および不等かの比較は可換的であるため、Rx>RyおよびRx<Ryの両方を表すことができる必要はなく、そのため、これらは、等価条件が使用されるか、または、不等条件が使用されるかをシグナリングするレジスタ番号の相対的な順序付けによる共通の符号化を使用して表現することができる。Rx=Ryの符号化では、もはや等価条件と不等条件とを区別することはできないが、所与の値がそれ自体と等しいかまたは不等であるかの比較は、通常、他の演算によって評価することができる。
より詳細には、比較命令は、比較条件フィールドを有することができる。比較条件フィールドが第1の値を有するとき、処理回路は、Rx>Ryのときに第1のオペランドおよび第2のオペランドが等しいか否かを判定し、Rx<Ryのときに第1のオペランドおよび第2のオペランドが不等であるか否かを決定することができる。比較条件フィールドが第2の値を有するとき、処理回路は、Rx>RyまたはRx<Ryであるかにかかわらず、(i)第1のオペランドが第2のオペランドよりも大きいか否か、および(ii)第1のオペランドが第2のオペランド以下であるか否かのうちの一方を判定することができる。比較条件フィールドが第3の値を有するとき、処理回路は、Rx>RyまたはRx<Ryであるかにかかわらず、(i)第1のオペランドが第2のオペランド以上であるか否か、および(ii)第1のオペランドが第2のオペランド未満であるか否かのうちの一方を判定することができる。この手法では、6つの異なる比較条件(未満(<)、より大きい(>)、以下(≦)、以上(≧)、等しい(==)、等しくない(!=))を表すのに、予測され得るような3ビットフィールドではなく、2ビットフィールドで十分である。これは、すべての比較条件が比較条件フィールドの専用符号化を有するわけではないが、反対の順序で指定されたオペランドを有する他の比較条件の1つを用いて等価な結果を適用することができる(例えば、Rx>RyはRy≦Rxと等価である)ために、可能である。また、比較条件フィールドの符号化は、必要に応じて別の演算をシグナリングするのに使用するためにスペアも残す。
上述のすべての例について、本技術は仮想マシン実行環境で使用することもできる。仮想マシンは、コンピュータ可読記憶媒体に記憶されたコンピュータプログラムとして提供されてもよく、媒体は、非一時的記憶媒体であってもよい。上記のように符号化された命令を処理するための命令復号または処理回路をそれ自体は有しないコンピュータによって実行されると、仮想マシンプログラムはその符号化に従って命令を解釈し、対応する動作を実行するように処理回路を制御する。例えば、仮想マシンプログラムは、ホストコンピュータの処理回路によってサポートされるネイティブ命令に命令をマッピングすることができる。これにより、上記の符号化技術をサポートする別のプラットフォーム用に書かれたコードが、これらの技術をそれ自体はサポートしていないコンピュータ上で実行されることが可能になる。
図1は、命令に応答してデータ処理を実行するための処理パイプライン4を備えるデータ処理装置2の一例を概略的に示す図である。パイプライン4は、命令キャッシュ8から処理すべき命令をフェッチするためのフェッチステージ6と、フェッチされた命令を復号する復号ステージ10と、復号された命令によって指定されるアーキテクチャレジスタ指定子を、ハードウェア内に設けられている物理レジスタ14を識別する物理レジスタ指定子にマッピングするためのレジスタリネームを実行するレジスタリネームステージ12と、オペランドが利用可能になる間は実行を待つ命令を待ち行列に入れ、オペランドが利用可能になると実行のための命令を発行する発行ステージ16と、発行された命令を実行する実行ステージ18とを含む複数のパイプラインステージを含む。発行ステージ16は、命令がフェッチステージ6によって命令キャッシュ8からフェッチされたプログラム順序と同じ順序で命令が実行されるインオーダーパイプラインであってもよく、または、プログラム順序と異なる順序で実行するために命令を順序外で発行することを可能にすることができるアウトオブオーダーパイプラインであってもよい。
実行ステージ18は、算術または論理命令を実行するための算術論理ユニット(ALU)、浮動小数点命令を実行する浮動小数点(FP)ユニット、および、メモリシステムからデータをロードするためのロード命令またはメモリシステムにデータを記憶するためのストア命令を実行するためのロード/ストアユニットのような、異なる種類の命令を処理するための複数の実行ユニットを含むことができる。図1に示すように、メモリシステムは、命令キャッシュ8、レベル1(L1)データキャッシュ26、レベル2(L2)キャッシュ28およびメインメモリ30を含むことができる。この例では、L2キャッシュ28は共有命令/データキャッシュとして使用されるが、別個のL2命令キャッシュおよびデータキャッシュも提供されてもよい。また、3つ以上のレベルのキャッシュが存在してもよいことが理解されるであろう。
図1は概略的なものに過ぎず、簡潔にするために、処理装置2のすべての可能な構成要素を示すものではなく、そのため、装置2は他の要素も含んでもよい。図1に示されるパイプライン4における特定のパイプラインステージの構成は単なる一例に過ぎず、他のタイプのパイプラインステージが提供されてもよい。図1は、実行ステージ18がレジスタ14からデータ値を読み出してデータ値をレジスタ14に書き戻す例を示しているが、他の例では、命令が発行ステージ16において保留されている間に命令のソースレジスタからデータが読み出されてもよい。また、命令の結果をレジスタ14に書き戻すために、実行ステージの後に別個のライトバックステージを設けることも可能である。また、いくつかのパイプライン4は、発行ステージ16が満杯であっても、命令がリネームステージ12を離れることができるようにバッファを提供するために、リネームステージ12と発行ステージ16との間に別個のディスパッチステージを有することができる。図1はレジスタリネーミングステージ12を含むパイプラインの例を示しているが、これは任意選択であり、他のパイプラインはリネームステージ12を省略してもよい。例えば、元のプログラム順序で命令を処理するインオーダーパイプラインは、リネームステージ12を必要としない場合がある。リネームステージ12が提供されない場合、復号された命令によって指定されるアーキテクチャレジスタもまた、それらの命令に応答してアクセスされるべき物理レジスタ14を識別する。
復号ステージ10は、ある命令セットアーキテクチャ(ISA)に従って命令を復号する。各命令は特定のビット数を有し、ISAはこれらのビットをどのように解釈すべきかを定義する。一般に、処理パイプライン4によってサポートされる多種多様な異なる処理演算が存在し得る。理解を容易にするために、以下の例は、例えば加算、減算(SUB)、AND、OR、乗算(MUL)、除算(DIV)、ビット反転(BITREV、所与の値の全ビットを反転させる演算、例えば0001のビットを反転させると1000がもたらされる)、先行ゼロカウント(CLZ、例えば、値0011の先行ゼロカウントは2である)などの、演算の限られたサブセットに焦点を当てる。実際には、ほとんどのISAは、スタックまたは同様のデータ構造からデータをプッシュまたはポップするためのシフト、プッシュまたはポップ動作、ロードまたはストア命令、分岐命令などの他のタイプの動作を定義することが理解されよう。以下の例は、簡潔にするために簡略化されている。また、以下の例では、アーキテクチャが、命令に応答してアクセス可能な16個のアーキテクチャレジスタを定義すると仮定している。他のアーキテクチャは、例えば32などの他の数のレジスタを定義することができることは理解されよう。これは、ハードウェアに設けられた物理レジスタ14の数を制限するものではないことに留意されたい。レジスタリネーミングがサポートされている場合、物理レジスタファイルは、アーキテクチャで定義されたアーキテクチャレジスタが存在するよりも多数の物理レジスタを有する場合がある。
図2の例に示すように、上述の動作のサブセットは、15ビットを使用して表すことができ、4ビットが、命令の結果が書き込まれる宛先アーキテクチャレジスタRdを表し、3ビットが実行されるべき演算のタイプを識別する命令オペコードOPCを表し、4ビットが、第1のソースアーキテクチャレジスタRxを表し、4ビットが、第2のソースアーキテクチャレジスタRyを表す。ADD、SUB、AND、OR、MULおよびDIV命令はすべて、ソースレジスタRxおよびRyの両方を必要とし、レジスタRx、Ryに記憶されたオペランドに対して対応する処理演算を実行するように処理パイプライン4を制御する2ソース命令であり、結果はアーキテクチャレジスタRdに書き込まれる。BITREVおよびCLZ命令は、1つのソースレジスタRxしか必要とせず、この場合、Ryに対応するビットフィールドは無視される。図2に示す15個の命令ビットは、符号化空間全体の一部分のみを表し得ることが理解されよう。例えば、命令は15ビットよりも多いビットを有してもよく、この場合、命令の他のビットのいくつかは、図2に示す15ビットを図2の符号化に示すように解釈すべきか、または、シフトまたはロード/ストア命令などの他の命令に対して何らかの他の様式で解釈すべきかを指定することができる。
アーキテクチャレジスタは16個あり、ソースレジスタおよび宛先レジスタRx、Ry、Rdは各々4ビットで表されているため、ソースレジスタおよび宛先レジスタの各々のいずれとしてアーキテクチャレジスタを使用するかは自由に選択できる。しかしながら、例えば、ADD命令は、所与のアーキテクチャレジスタ対(例えば、R1およびR2)に適用されるとき、R1およびR2のいずれが第1のソースオペランドRxとして指定され、いずれが第2のソースオペランドRyとして指定されるかにかかわらず同じ結果を与えることになるため、この方式はある程度の冗長性を含む。同様に、AND、ORおよびMUL命令は、ソースオペランドRxおよびRyの順序を逆にしても結果が変化しない可換的命令である。
対照的に、図3は、図3の左側部分に示された第1のクラスの命令について、第1のソースアーキテクチャレジスタRxおよび第2のソースアーキテクチャレジスタRyが、RxをRyよりも大きくなるように制約する符号化を使用して表される、上述した演算のサブセットを表す代替的な符号化を示す。宛先アーキテクチャレジスタRdおよびオペコードOPCは、依然としてそれぞれ4ビットおよび3ビットのフィールドを使用して表される。
図3の第1のクラスの命令では、2つのソースアーキテクチャレジスタRx、Ryが、図2の8ビットではなく7ビットをともに含む2つのフィールドA、Bを使用して表される。RxおよびRyに基づいてフィールドAおよびBを符号化する2つの例が、図4Aおよび図4Bに関して以下に説明されるが、一般に、以下に説明するようなRx>Ryである符号化方式によってRx、Ryを再符号化することによって、1ビットが節約され、いくつかの機能が犠牲になる。レジスタは、それ自体に加算することはできず、または、それ自体を乗算することはできない。また、DIVまたはSUBのすべての固有の事例を1つのオペコードで符号化することはできない。ADDの失われた機能は、依然としてシフトによって実行することができる(1ビット位置だけオペランドを左シフトすることは、オペランドをそれ自体に加算することと等価である)。
Rx/Ryコード化方式は、この例では、A、Bフィールドのための8つの未使用コードポイントを有する。これらは、図3の右側部分に第2のクラスの命令として示される、単一入力オペレーションのための別個のオペコード空間をシグナリングするために使用される。単一の未処理のソースレジスタを完全に指定するためには1つの追加ビットが必要であり、このビットSはオペコード符号化から得られ、単一入力演算のための2ビットオペコード空間、および、2入力演算のための別個の3ビットオペコード空間が残る。BITREVおよびCLZは、この単一入力オペコード空間内に、その単一入力を2乗するMULの変形とともに配置される。これにより、2入力オペコード空間内に2つのスロットが開き、これらは、SUBおよびDIVの逆転した変形によって使用され、それによって、これらの演算のRx>RyとRx<Ryの両方のオペランドの事例を符号化することができる。
より現実的な実施態様では、オペコードのリストはより長くなる可能性が高く、どのように事を運ぶかにより大きな柔軟性をもたらす。それはシフトを含む場合があり、その場合にはこれらの逆のバージョンも必要となり、これは命令のレジスタによってシフトされた定数の形式の可能性を示唆している。レジスタオペランドを即値定数によって指定される複数のビットだけシフトすることをサポートするシフト命令がサポートされている場合、命令の逆の形式は、レジスタオペランドによって指定される複数のビット位置だけ即値定数をシフトすることができ、これは例えばマスク生成に有用であり得る。
図3は、16個のアーキテクチャレジスタが存在する例を示しているが、より一般的には2個のレジスタがある場合、Rx>Ryを制約することは、2N−1個の未使用値を残して2N−1ビットにおいて符号化することができる、RxとRyとの2N−1/2個の有効な組み合わせが存在することを意味する。ここで提案されるコード化方式によって、これらの未使用値を使用して別個の1入力オペランド空間をシグナリングすることができるが、代替的に、AフィールドおよびBフィールドのスペア符号化を使用する第2のクラスの命令を使用して他のタイプの演算が表されてもよい。追加の逆オペランドオペコードの数が十分に少ない場合、オペコードフィールドをより大きくする必要はなく、全体的な符号化方式はナイーブ方式より1ビット小さくなる。しかし、一般的に、非可換的演算のために逆オペコードを追加した後、オペコードフィールドは1ビット増加し、何も節約されないことが判明するかもしれないが、この場合の利点は、未使用のオペコードスペースが統合されることであり、復号が単純化され、将来の拡張が複雑にならないようにされる。
図4Aおよび図4Bは、図3に示す命令符号化のAフィールドおよびBフィールドの2つの例示的な符号化を示す。図4Aにおいて、Xが常にYより大きい2つのNビットアーキテクチャレジスタ指定子Rx、Ryは、以下のように符号化される。
2つのソースレジスタRx、Ryを必要とする2入力動作の場合、
A=x EOR Replicate(y<N−1>);
B=x<N−2:0>EOR y<N−2:0>;
instruction=binary_opcode:B:A:d;
1入力演算のために単一のソースレジスタRxを符号化するには、
A=x EOR Replicate(x<N−1>);
B=0;
S=x<N−1>;instruction=unary_opcode:S:B:A:d;
この記法において、
・v<b>は値vのビットbを意味する。例えば、y<N−1>は値yからのビットN−1を参照する。
・v<b:a>は、値vのビットの範囲a〜bを意味し(bは慣例的にaより大きい)、x<N−2:0>は、値xのビット0〜N−2を意味する。
・EORは排他的論理和(XOR)を意味する。
・Replicate()は、カッコ()内の引数のビットを繰り返すことによって形成される全幅の値を意味する。したがって、Replicate(y<N−1>)は、yのビットN−1(yの最上位ビット)にすべて等しいNビットを含む。実効的には、yの最上位ビットが1の場合、A=xであり、yの最上位ビットが0の場合、A=invert(x)である。
・コロン(:)は連結を示し、最上位ビットが最初に表示される。したがって、binary_opcodeが101、Bが00、Aが10、dが1001の場合、binary_opcode:B:A:dの結果は10100101001になる。
図4Aは、この符号化を使用する場合のRxおよびRyの各ペアリングについて、AおよびBの可能な値を示す。Ry>Rxであり、十字で表示されたエントリはRx=Ryであるために無効であるため、表の濃い色のエントリで示されたRxとRyとの組み合わせは無効であることに留意されたい。表の対称性から、RxをRyよりも大きくなるように制約することにより、可能な組み合わせの数が総数の半分未満だけに減ることが分かり、これが1ビットを節約することができる理由である。また、図4aの下部に示されているように、1入力演算に再利用できるいくつかのスペア符号化がある。この例では、スペア符号化はB=000およびA=0???である(?は0または1のいずれかであり、これらのビットは追加のオペコードビットSとともに、BITREV、CRZまたは2乗MUL命令などの単一入力演算の1つについて単一のソースレジスタRxを識別する)。
AおよびB値を生成するために所与のアーキテクチャレジスタ指定子対を符号化することは、図1の装置2自体によって実行されるのではなく、ソースコードまたはコンパイルされたコードに基づいて実行されるべき命令を生成するときにコンパイラまたはアセンブラによって実行されることに留意されたい。
アーキテクチャレジスタ指定子Rx、Ryを識別するためにAおよびBフィールドを復号するための復号回路が、パイプライン2のある点に設けられる。レジスタ復号は、任意のステージ(例えば、レジスタリネーミング)に配置することができるが、アーキテクチャレジスタ番号が早期に識別されるほど、より早期のハザード検出を実行することができる。したがって、復号ステージ10においてレジスタ復号が行われることが望ましい場合がある。
図5は、命令を復号するための復号ステージ10の一部の例を示す。図5に示すように、復号ステージは、オペコード復号器40およびレジスタ復号器42を含むことができる。宛先レジスタ指定子Rdは、命令符号化において明示的に識別されるため、変更されずに復号ステージ10を通過する。レジスタ復号器42は、命令のAおよびBフィールドを追加のオペコードビットSとともに受信し、これらを復号して第1のソースアーキテクチャレジスタRxおよび第2のソースアーキテクチャレジスタRyを識別する。レジスタ復号器42はまた、現在の命令が単一入力命令(第2のクラスの命令)の1つであるか否かをAフィールドおよびBフィールドから識別し、オペコード復号器40にこれが当てはまるか否かの指示を提供する。オペコード復号器40は、命令が第1の命令クラスまたは第2の命令クラスのうちの1つであるかに従って命令のオペコードを復号し、復号された命令を識別する所与の数のビットを出力する。復号された命令は、命令を適切に処理するためにパイプラインの後続のステージを制御するために必要な任意の数のビットを含むことができ、例えば、実行ステージ80内のいくつかの機能ユニットのいずれが命令を処理すべきかの選択についてシグナリングする。
図4Aに示す符号化が使用されるとき、レジスタ復号器42は、以下の演算を使用して、AおよびBフィールドならびに追加のオペコードビットSを復号することができる。
boolean binary=(B:A<N−1>!=Replicate(’0’));
bits(N−1)tmp_y=B EOR A<N−2:0>;
boolean flip=(’0’:tmp_y:S>A:’0’);
bits(N)mask=flip?Replicate(’1’,N):Replicate(’0’,N);
bits(N)x=A EOR mask;
bits(N)y=’0’:tmp_y EOR mask;
「binary」フラグは、オペコードがバイナリオペコード(第1のクラスの演算)または単項オペコード(第2のクラスの演算)として解釈されるべきであるかをオペコード復号器40にシグナリングするために使用され得る。
これは、比較的複雑な一連の演算のように見え得るが、回路内でこれを判定する論理は、実際には上記の式によって暗示されるよりも単純である。Aおよびtmp_yの値が反転されるか否かに影響を与える値「flip」を決定するために、Aのいずれのビットが、AがA XOR Bより大きいか否かを決定するのを選択するために、Bの第1の非ゼロスキャンを使用することができる。図6Aは、Rx、Ryを識別するためにAおよびBを復号する回路の例を示す。回路は、Bのそれぞれのビットと、Aの対応するビットとの排他的論理和をとる一連の排他的ORゲート50を含む(すなわち、これらのゲート50は、実効的に、上記の式において「tmp_y」の値を決定する)。この回路はまた、その出力がORゲート54によって結合された一連のNORゲート52を含む。ORゲート54の出力は、上に示したパラメータ「flip」を表す。NORゲート52−0は、追加のオペコードビットSの反転バージョン、Bフィールドの3ビット、およびAフィールドの最上位ビットを入力として受信し、その出力は、S=1、B=000かつAの最上位ビットが0である場合のみ、1になる。NORゲート52−1は、Bの上位2ビット、Aの最上位ビット、Bの最下位ビットの反転バージョンおよびAの最下位ビットを入力として受信し、その出力は、B=001かつA=0?0(ここでも、?によって表されるすべてのビットは0または1のいずれかになり得る)である場合に1になる。NORゲート52−2は、Bの最上位ビット、Aの最上位ビット、Bの最上位から2番目のビットの反転バージョンおよびAの最下位から2番目のビットを入力として受信し、その出力はB=01?かつA=0?0?である場合に1になる。最後に、NORゲート52−3は、Aの最上位から2ビット、および、Bの最上位ビットの反転バージョンを入力として受信し、その出力はB=1??かつA=00??である場合に1になる。いずれかのNORゲート52が1を出力する場合、ORゲート54によって生成されるものとして「flip」=1となる。「flip」が1に等しいとき、Aフィールドは、XORゲート56を使用して反転されて、第1のソースレジスタ指定子Rxが生成される。また、「flip」が1に等しいとき、Ryの最上位ビットは1であり、Ryの他の3ビットは、XORゲート50によって生成されるものとしてのtmp_yの対応するビットの出力を反転するXORビット58によって形成される。代替的に、「flip」が0に等しいとき、Rx=A、Ryの最上位ビット=0であり、Ryの残りのビットはBの対応するビットに等しい。
図6Bは、復号論理の第2の例を示す。この例では、追加のXORゲート55が、ORゲート54とXORゲート56,58との間の経路上に設けられている。XORゲート55は、その第2の入力として、オペコードの選択されたビット(例えば、最下位ビット)を受信する。このような復号論理によって、オペコードは、オペコード番号によるすべての第2のオペコードが、Rx>Ry条件を反転させて実質的にRx<Ryとなるようにするという特性を有し(XORゲート55は実効的に、最終的なRx、Ry結果のすべてのビットを反転させるため)、これにより、2つの異なるオペコードスロットに単一の非可換的演算を割り当てることが可能になり、それによって、すべてのオペランドの順序が可能になる。ゲート55によって反転が適用される反転された非可換的命令のうちの1つのRx、Ryの所与の値を符号化する場合、Rx、Ryへの対応する反転は、RxおよびRyの正確な値が返されることを確実にするために、上記に示した符号化プロセスを適用する前に実行されるべきである。したがって、同じ非可換的演算に対応するが、異なるオペランド順序を有する相補命令の対は、実効的に、1ビットだけ異なるオペコードによって表され、1つの追加のゲート55のみを使用した比較的単純な復号が可能となる。一方、可換的演算の場合、1つのオペコードスロットのみが割り当てられ、1ビットだけが異なる、隣接するオペコードの対が、まったく異なる可換的演算に対応する。図6Bでは、図6AのNORゲート52−0は簡潔にするため省略されているが(例えば、これは1入力演算のためにA、Bのスペア符号化空間を再使用しない例であり得る)、他の例では、NORゲート52−0を設けることもできる。
図4Bは、使用可能なAおよびBフィールドの第2の符号化例を示す。ここでも、RxはRyよりも大きくなるように制約される。この場合、0〜2−1の範囲の所与の値Rx、RyおよびRx>Ry、AおよびBが以下のように符号化されるという制約について、
if(y>=2N−1)then
A=x EOR(2−1)//(2−1はすべて1であるN−1ビットを有する値)
B=y EOR(2−1)
else
A=x
B=y
endif
Ryのこの制約された値のために、Bは常に2N−1より小さくなるため、1ビットを削除することができることが観察され得る。
図4Bは、この符号化方式によって利用可能な異なる符号化を示す表である。ここでもいくつかのスペア符号化があるが、今回は、これらは、Aの最上位ビットがゼロであり、Aの残りのビットがBの対応するビットと等しい値である。したがって、スペア符号化は図4Aのものと異なるが、これは依然として、レジスタフィールドA、Bの特定の値によって第1のクラスと区別される、オペコードの異なる解釈を使用して別個の第2のクラスの命令が定義されることを可能にする。これらのスペア符号化のために、図3に示す単一ソースレジスタRxは(Aの下位3ビットと同一である)Bの3ビットおよび追加のオペコードビットSを使用して識別され、その単一のレジスタRxを使用して実行されるべき演算は、オペコードフィールドの残りの2ビットによって識別される。
図4Bに示された方法で符号化された場合、第1のクラスの命令のAおよびBを復号するために、以下の論理を使用することができる。
if(B>=A)then
x=A EOR(2−1)
y=B EOR(2−1)
else
x=A
y=B
endif
この手法では、B>=Aであるか否かを判定するためにBとAとのデジタル比較がいくつかのXNORゲートを必要とするため、わずかにより深い復号論理が必要になる場合がある。第2のクラスの命令について、比較器は、Aの下位3ビットがBの対応するビットに等しいか否かを判定することができ、そうである場合、RxはSおよびBからいかなる復号もせずに直接決定することができる。
Rx>RyであるRxおよびRyの特定の組み合わせの、AフィールドおよびBフィールドの潜在的な値に対する、他のより恣意的なマッピングを選択することができる。一般に、いずれの特定のレジスタ対がAフィールドおよびBフィールドの各異なる符号化によって表されるかは重要ではないが、図4Aおよび図4Bに示す例は、必要とされる復号論理の量を低減するのに特に有利であり、図4Aは、図6に示すように比較的浅い論理を必要とし、スペア符号化を、Bが000であり、Aの最上位ビットも0である符号化空間の共通部分に統合するため、特に効率的である。
図7は、命令を処理する方法を示す。ステップ100において、復号器は、現在の命令が第1の命令クラスのものであるか否かを判定する(例えば、A、Bがスペア符号化の1つを有していない場合)。命令が第1のクラスのものである場合、ステップ102において、レジスタフィールドAおよびBが復号されて、Rx>Ryである、命令に使用されるアーキテクチャレジスタ番号Rx、Ryが決定される。ステップ104において、復号ステージ10が命令のオペコードを復号する。ステップ106において、パイプラインの後続のステージは、識別されたアーキテクチャレジスタRxおよびRyに対応するレジスタを使用して命令を処理する。これらは、リネームステージ12によって再マッピングされたものと異なる物理レジスタ番号を有する物理レジスタであってもよいことに留意されたい。Rx>Ryであるが、物理レジスタが使用される制約はない。
一方、命令が第1の命令クラスのものでない場合、ステップ110において、その命令が第2の命令クラスのものであるか否かが判定される。そうでない場合、命令は何らかの他の方法で処理される。命令が第2のクラスのものであるか否かを判定するために、これは、AおよびBフィールドが上記のスペア符号化の1つを有するか否かから識別することができる。命令が第2のクラスのものである場合、ステップ112において、追加のオペコードビットSならびにAフィールドおよびBフィールドのビットのサブセット(例えば、Aフィールドの下位3ビット)が復号されて、単一のソースレジスタのアーキテクチャレジスタ番号Rxが決定される。ステップ114において、命令のオペコードは、単項オペコード復号方式に従って復号される。ステップ116において、後続のパイプラインステージが、アーキテクチャレジスタ番号Rxに対応する単一のレジスタを使用してオペコードによって表されるタイプの動作を実行するための命令を処理する。
上記の例では、表されているレジスタRx、Ryは、対応する処理演算のためのソースオペランドを含むソースレジスタである。しかし、この符号化方式を宛先レジスタまたは他のタイプのレジスタを符号化するために使用することも可能である。例えば、いくつかの命令は、開始レジスタから開始して終了レジスタで終了するアーキテクチャレジスタのリストを識別し、開始レジスタと終了レジスタとの間のアーキテクチャ番号を有するアーキテクチャレジスタの連続ブロックを使用して所与の動作を実行するように処理回路を制御する。例えば、load multiple命令は、いくつかのアドレスからアーキテクチャレジスタ番号の連続ブロックに対応するレジスタにデータ値をロードすることができ、または、store multiple命令は、指定レジスタからメモリ内の対応アドレスにデータを記憶することができる。また、いくつかのスタック命令(プッシュまたはポップ命令)は、ある範囲のレジスタからスタックにデータを保存し、または、スタックからレジスタにデータを復元することができる。この場合、レジスタのリストを定義する開始および終了アーキテクチャレジスタも、上に示したものと同様の方式を使用して符号化することができる。第2のクラスの命令が第1のクラスのレジスタフィールドのスペア符号化のいくつかを用いて表される、第1のクラスの命令および第2のクラスの命令の定義は、そのようなリストベースの命令にも有用である。なぜなら、第1のクラスが複数のレジスタからなるリストを与え、第2のクラスが単一のレジスタのみを与える場合、リストの要素間の異なる潜在的な相互作用を記述するために、第1のクラスの演算が第2のクラスよりも多くのオペコードを利用できることが有用であり得るためである。
図8は、レジスタ符号化Rx、Ryの冗長性の利用の代替的な例を示す。この例では、命令は、命令内で明示的に識別されるRxおよびRy、ならびに、RxおよびRyの許容される任意の組み合わせによって符号化され得る。例えば、これは図2に示す符号化を使用することができる。しかしながら、図8に示すように、復号ステージ10は、RxとRyを比較し、RxおよびRyのいずれが大きいかを示すためにオペコード復号器154に提供される比較結果信号152を生成するレジスタ比較器150を含むことができる。オペコード復号器154は、RxおよびRyのいずれが大きいかに応じて、同じオペコードから異なる復号された命令156が生成されるように、信号152によって示される比較結果に応じて異なる方法で命令のオペコードを復号することができる。本質的に、RxおよびRyの相対順序付けは、オペコードを補完することができる少なくとも1ビットの追加情報を提供し、それによって、オペコードフィールド自体を1ビット小さくすることができ、またはより多くの異なる演算を、オペコードの所与の数のビットを使用してサポートすることができる。場合によっては、比較信号152からの追加情報は、オペコードの拡張ではなく、別個のフラグと考えることができることに留意されたい。
これは様々な方法で使用することができる。場合によっては、命令のRx>RyおよびRx<Ryの形式で表される演算は、基本的には同じタイプの演算に対応し得るが、演算は比較結果に基づいて何らかの形で変更される。この一例は、結果に影響を与える、算術演算(例えば、乗算)命令のための「絶対値」修飾子を導出することである。この場合、Rx<Ryは「結果の正の絶対値をとらない」ことを意味し、Rx>Ryの場合は「絶対値をとる」ことを意味する。Rx==Ryの場合は、それ自体と乗算された数はいずれにしても正であり、絶対値フラグが必要ないため、「とらない」の場合のみに入る。このとき、Rx<=Ryの場合は「絶対値」フラグを明らかであるとしてだけ定義することができ、Rx>Ryの場合はフラグを設定することができる。したがって、RxおよびRyの相対的な順序付けを使用することによって、命令内の絶対値フラグを符号化する必要はない。
代替的に、Rx>RyかつRx<Ryのときに実行される演算は完全に異なってもよい。一般に、演算フィールドから1ビットがとられる場合、これはRxとRyレジスタの順序付けによって補完することができ、それによってオペコードフィールドを解釈するための本質的に3つの異なる技法、すなわち、Rx>Ryに対するオペコードセット0、Rx<Ryに対するオペコードセット1、Rx=Ryに対するオペコードセット2が存在する(セット2は、上で説明したタイプへの単一入力オペコードである)。この手法は、より深い試験論理を必要とすることがあるが(比較器150によって提供される比較は、RxがRyよりも大きくなるように制約する符号化について示された図6の回路より多くの回路を必要とし得るため)、レジスタオペランドが見えるようになる前に復号は必要なく、そのため、これは、パイプラインのオペランド転送論理をより早期にアクティブにするのに役立ち得、異なる命令間の危険をより早期に検出することを可能にすることができるという利点がある。いずれの特定の演算が単一のオペコード符号化に結合されるかは、命令セット設計者が任意に選択することができる。
例えば、AND、OR、およびMOV演算を1つのオペコードポイントに結合することができる。RxがRyより小さい場合、オペコードがAND演算として扱われ、Rx AND Ryが返される。RxがRyより大きい場合、オペコードがOR演算として扱われ、Rx OR Ryが返される。RxおよびRyが等しい場合、いずれの場合も結果はMOV演算と等価なため、実際にはいずれを行うかは重要でなく、そのため、この事例はMOVと呼ばれる。次に、少なくとも半数がRx==Ryのケースを処理する必要がないすべての可換的演算を行うことができ、それらを対にして、共有されるオペコード番号にする。例えば、SUBは引数をどちらの順序でも受け入れる必要があるのでADDとSUBは対にすることはできないが、Rx+RxはRx*2を与え、Rx EOR Rxはゼロを与えるため、ADDとEORは対にすることができ、EOR(例えばRx−Rx)を使用せずに0の結果を得る他の方法が存在し、そのため、そのような事例を扱う必要はない(Rx*2はまた、1桁分の左シフトに等価であるため、冗長であり得る)。
図9は、図8に示す手法を使用することができる命令の別の例を示す。図9は、アーキテクチャレジスタRxおよびRyの2つのソースオペランドにいずれの比較条件を適用するかを条件フィールド(cond)が識別する比較命令を示す。これは可換的ではないが、オペランドの順序を変更し、等価な演算を得るための演算を変更することができる。
仮説的なCMP命令がある場合、RxおよびRyの2つの入力を比較することができる6つの基本的な方法がある、すなわち、より小さい(<)、より大きい(>)、以下(<=)、以上(>=)、等しい(==)、および不等(!=)。これらの6つの演算は、符号化のための3ビットに加えて、2つのレジスタインデックスRxおよびRyのビットを必要とし、総ビットカウントは(Nx+Ny+3)になり、ここでNxおよびNyはそれぞれRxおよびRyを指定するのに使用されるビット数である。可換性および等価性を使用することによって、これらをより効率的に符号化することができる。
(Nx+Ny)ビットによって符号化されたRxおよびRyの自由な選択があると仮定する。実際には、演算には6つではなく、3つの選択肢のみが必要である。
CMP(Rx<Ry)はCMP(Rx>=Ry)と等価であるため、これらの2つの命令のうちの1つだけを符号化すればよい。
CMP(Rx<=Ry)はCMP(Rx>Ry)と等価であるため、ここでもまた1つの選択肢だけを符号化することができる。
CMP(Rx==Ry)とCMP(Rx!=Ry)とは可換的であるため、これら両方を1つの演算値によって符号化することができ、Rx<RyかRx>Ryかに基づいて正しい演算を選択することができる。
しかし、この最後の事例では、Rx==Ryの場合、等価演算と不等価演算を区別することができない。しかし、これらは些細な事例であるため、ここでもそれらを、同じ答えを返す他の演算に変換することができる。そのため、
CMP(Rx==Rx)はCMP(Rx<=Rx)と同じように常に真であるため、代わりにCMP(Rx<=Rx)を符号化する。
CMP(Rx!=Rx)はCMP(Rx<=Rx)と同じように常に偽であるため、代わりにCMP(Rx<=Rx)を符号化する。
これらの組み合わせにより、比較演算を符号化するために2ビットのみを使用することが可能になり、合計で(Nx+Ny+2)ビットになる。
このような比較命令について、レジスタ指定子Rx、Ryを比較していずれのタイプの比較条件が使用されているかを識別する比較と、選択された比較条件に従ってレジスタに記憶されている実際のデータ値を比較する、パイプライン内で後に実施されるもう1つの比較との、2つの別個の比較が行われることに留意されたい。
図10は、第2の例を用いて符号化された命令を処理する方法を示す。ステップ200において、命令が受信され、レジスタフィールドRxおよびRyがレジスタ比較器150によって比較される。RxがRyよりも大きい場合、ステップ202において、オペコード復号器154は、アーキテクチャレジスタRxおよびRyに対応するレジスタを使用して、第1のタイプの処理演算を実行するように後続のパイプラインステージを制御するように復号された命令156を生成する。一方、RxがRyよりも小さい場合、ステップ204において、オペコード復号器154はオペコードを復号して、RxおよびRyに対応するレジスタを使用して第2のタイプの処理演算を実施するようにパイプラインの残りの部分を制御する復号された命令156を生成する。この第2のタイプの処理演算は、第1のタイプの処理演算と同じであってもよいが、(結果の絶対値をとるなどの)何らかの方法で変更されてもよく、または、まったく異なる演算であってもよい。Rx=Ryの場合、復号器はステップ202または204のいずれかに進み、第1のタイプの処理演算または第2のタイプの処理演算のいずれかを実行するように処理パイプラインを制御するか、またはステップ206において、Rxに対応する単一のレジスタを使用して実施される第3のタイプの処理演算に対応する復号された命令を生成することができる。別の代替案は、Rx=Ry符号化についての何らかの命令が無効であることであり、それによってこの場合、復号された命令は生成されず、未定義の命令例外がシグナリングされ得る。Rx=Ryについてとられる手法は、オペコードごとに異なってもよい。
代替的に、いくつかの命令について、Rx>RyまたはRx<Ryのときに第1のタイプの演算が選択されてもよく、Rx=Ryのときに第2のタイプの演算が選択されてもよい。例えば、減算命令は、Rx>RyまたはRx<Ryのいずれかに応じて異なる結果を生成するが、Rx=Ryのときの結果は常に0であり、他の演算によって生成することができ、そのため、Rx=RyのSUBオペコードの符号化は、別の演算、例えば単一入力オペランドのために再使用することができる。同様の手法は、Rx=Ryのときの結果が重要でない他の非可換的演算、例えばBIC、DIV、ORNなどに対してもとることができる。
図11は、使用することができる仮想マシンの実施態様を示す。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実施態様を提供することも可能である。これらの仮想マシン実施態様は、一般的に仮想マシンプログラム310をサポートするホストオペレーティングシステム320を実行するホストプロセッサ330上で実行される。通常、大規模で強力なプロセッサは、妥当な速度で実行する仮想マシンの実装を可能にする必要があるが、そのような手法は、互換性または再利用の理由のために別のプロセッサに対してネイティブなコードを実行したいという要望がある場合などの特定の状況において正当化され得る。仮想マシンプログラム310は、実際のハードウェアデバイスによるプログラムの実行によって与えられるのと同じ結果を与えるために、アプリケーションプログラム(またはオペレーティングシステム)300を実行することができる。したがって、上述したメモリアクセスの制御を含むプログラム命令は、仮想マシンプログラム310を使用してアプリケーションプログラム300内から実行することができる。
本出願において、「〜ように構成されている」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、規定の動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置が機能を実行するようにプログラムされてもよい。「〜ように構成されている」は、規定の動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
添付図面を参照して本発明の例示的な実施形態を詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲および精神から逸脱することなく、様々な変更および修正が当業者によって実施され得ることが理解されるべきである。

Claims (30)

  1. データ値を記憶するための複数のレジスタと、
    命令に応答して処理演算を実行する処理回路と
    を備える装置であって、
    第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する第1のクラスの命令のうちの1つに応答して、前記処理回路は、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応する第1のレジスタおよび第2のレジスタを使用して、対応する処理演算を実行するように構成され、
    前記第1の命令クラスの命令は、前記第1のアーキテクチャレジスタ番号を前記第2のアーキテクチャのレジスタ番号よりも大きくなるように制約する命令符号化を有する、装置。
  2. 前記第1のクラスの命令は、前記対応する処理演算が可換的演算である少なくとも1つの可換的命令を含む、請求項1に記載の装置。
  3. 前記第1のクラスの命令は、前記対応する処理演算が非可換的演算である少なくとも1つの非可換的命令を含む、請求項1および2のいずれか一項に記載の装置。
  4. 前記第1のクラスの命令は、前記第1のレジスタおよび前記第2のレジスタに記憶された第1のオペランドおよび第2のオペランドに適用される同じタイプの前記非可換的演算に対応する少なくとも1対の相補的な非可換的命令を含み、各対について、前記対のうちの1つの命令は、前記第1のオペランドおよび前記第2のオペランドを用いて前記非可換的演算を、前記対の他の命令と異なる順序で実行するように、前記処理回路を制御するためのものである、請求項1〜3のいずれか一項に記載の装置。
  5. 前記第1のクラスの命令は、前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号との間の連続範囲内のアーキテクチャレジスタ番号に対応する複数のレジスタを使用して処理演算を実行するように前記処理回路を制御するための少なくとも1つのレジスタ範囲指定命令を含む、請求項1〜4のいずれか一項に記載の装置。
  6. 前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号を識別するために前記第1のクラスの命令の前記命令符号化を復号するレジスタ復号回路を備える、請求項1〜5のいずれか一項に記載の装置。
  7. 前記処理回路は、2個のアーキテクチャレジスタを提供する命令セットアーキテクチャに従って命令を処理するように構成され、前記第1の命令クラスにおいて、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号が前記命令符号化の2N−1ビットを用いて表される、請求項1〜6のいずれか一項に記載の装置。
  8. 前記第1の命令クラスの前記命令符号化は、オペコードフィールドと、前記複数のレジスタの複数のスペアビットパターンが、前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号よりも大きい前記第1のアーキテクチャレジスタ番号と第2のアーキテクチャレジスタ番号との任意の有効な組み合わせに対応しない所定の符号化方式に従って前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号を表す複数のレジスタ識別ビットとを含み、
    前記命令セットアーキテクチャは、前記オペコードフィールドと、前記複数のレジスタ識別ビットが前記スペアビットパターンのうちの1つを有する前記複数のレジスタ識別ビットとを含む命令符号化を有する第2のクラスの命令を含み、
    前記第2のクラスの命令のうちの1つに応答して、前記処理回路は、前記命令の前記オペコードフィールドを、前記第1のクラスの命令のうちの1つの同一のオペコードフィールドとは別様に解釈するように構成される、請求項1〜7のいずれか一項に記載の装置。
  9. 前記第2のクラスの命令は、単一ソースアーキテクチャレジスタ番号によって識別されるレジスタを使用して対応する処理演算を実行するように前記処理回路を制御するための、前記単一ソースアーキテクチャレジスタ番号を識別する少なくとも1つの命令を含む、請求項8に記載の装置。
  10. 前記単一ソースアーキテクチャレジスタ番号は、前記レジスタ識別ビットのサブセットおよび前記オペコードフィールドのビットを使用して、前記第2のクラスの前記少なくとも1つの命令の前記命令符号化において表現される、請求項9に記載の装置。
  11. 前記第1のクラスの命令の前記命令符号化は、
    前記第2のアーキテクチャレジスタ番号の最上位ビットが0であるときに前記第1のアーキテクチャレジスタ番号に依存し、前記第2のアーキテクチャレジスタの最上位ビットが1であるときに、前記第1のアーキテクチャレジスタ番号のすべてのビットを反転した結果に依存する第1のレジスタフィールドと、
    前記第2のアーキテクチャレジスタ番号の前記最上位ビット以外の前記第2のアーキテクチャレジスタ番号の残りのビットに依存する値を有する第2のレジスタフィールドと
    を含む、請求項1〜10のいずれか一項に記載の装置。
  12. 前記第2のレジスタフィールドは、前記第2のアーキテクチャレジスタ番号の前記残りのビットと前記第1のアーキテクチャレジスタ番号の対応するビットとの、ビットごとの排他的論理和の結果に依存する値を有する、請求項11に記載の装置。
  13. 前記第2のレジスタフィールドは、前記第2のアーキテクチャレジスタ番号の前記最上位ビットが0である場合、前記第2のアーキテクチャレジスタ番号の前記残りのビットに依存し、前記第2のアーキテクチャレジスタ番号の最上位ビットが1である場合、前記第2のアーキテクチャレジスタ番号の前記残りのビットを反転した結果に依存する値を有する、請求項11に記載の装置。
  14. データ処理方法であって、
    命令に応答して処理演算を実行するように処理回路を制御するステップを含み、
    第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する第1のクラスの命令のうちの1つに応答して、前記処理回路は、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応する第1のレジスタおよび第2のレジスタを使用して、対応する処理演算を実行するように制御され、
    前記第1の命令クラスの命令は、前記第1のアーキテクチャレジスタ番号を前記第2のアーキテクチャのレジスタ番号よりも大きくなるように制約する命令符号化を有する、データ処理方法。
  15. 請求項1〜13のいずれか一項に記載の装置に対応する仮想マシン実行環境を提供するようにコンピュータを制御するコンピュータプログラムを記憶した、コンピュータ可読記憶媒体。
  16. データ値を記憶するための複数のレジスタと、
    命令に応答して処理演算を実行する処理回路と
    を備える装置であって、
    第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する命令符号化を有する命令に応答して、前記処理回路は、前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号との比較に基づいて、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応するレジスタを使用して、第1のタイプの処理演算を実行すべきか、または、第2のタイプの処理演算を実行すべきかを選択するように構成されている、装置。
  17. 前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号よりも大きい場合、前記処理回路は前記第1のタイプの処理演算を実行するように構成され、
    前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号よりも小さい場合、前記処理回路は前記第2のタイプの処理演算を実行するように構成される、請求項16に記載の装置。
  18. 前記第1のタイプの処理演算および前記第2のタイプの処理演算は、異なる可換的演算である、請求項17に記載の装置。
  19. 前記第1のタイプの処理演算および前記第2のタイプの処理演算のうちの1つは、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応する前記レジスタに記憶された第1のオペランドおよび第2のオペランドに対して実行される処理演算を含み、
    前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号に等しいとき、前記処理回路は、前記第1のタイプの処理演算および前記第2のタイプの処理演算のうちの前記一方を実行するように構成され、前記第1のオペランドおよび前記第2のオペランドは両方とも同じデータ値を含む、請求項17および18のいずれか一項に記載の装置。
  20. 前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号と等しい場合、前記処理回路は、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応するレジスタを使用して第3のタイプの処理演算を実行するように構成される、請求項17および18のいずれか一項に記載の装置。
  21. 前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号とが異なる場合、前記処理回路は前記第1のタイプの処理演算を実行するように構成され、
    前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号とが等しい場合、前記処理回路は前記第2のタイプの処理演算を実行するように構成される、請求項16に記載の装置。
  22. 前記第1のタイプの処理演算は、非可換的演算を含む、請求項21に記載の装置。
  23. 前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号とを比較するレジスタ番号比較回路と、
    前記命令のオペコードおよび前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号との前記比較の結果に基づいて実行されるべき処理演算のタイプを識別する復号回路と
    を備える、請求項16〜22のいずれか一項に記載の装置。
  24. 前記レジスタ番号比較回路は、前記比較の前記結果に応じて少なくとも1つの追加のオペコードビットを生成するように構成され、前記復号回路は、前記オペコードおよび前記少なくとも1つの追加のオペコードビットを復号して、実行される処理演算のタイプを識別するように構成される、請求項23に記載の装置。
  25. 前記第2のタイプの処理演算は、前記第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号に対応する前記レジスタに記憶された第1のオペランドおよび第2のオペランドに対して前記第1のタイプの処理演算を実行した結果と等価な値を生成することと、前記第1のタイプの処理演算の前記結果の絶対的な大きさを決定することとを含む、請求項17〜20のいずれか一項に記載の装置。
  26. 前記命令は、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応する前記レジスタに記憶された第1のオペランドおよび第2のオペランドを比較する比較命令を含み、前記第1のタイプの処理演算は、前記第1のオペランドと前記第2のオペランドとが等しいか否かの判定を含み、前記第2のタイプの処理演算は、前記第1のオペランドと前記第2のオペランドとが不等であるか否かの判定を含む、請求項17〜20のいずれか一項に記載の装置。
  27. 前記命令は、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応する前記レジスタに記憶された第1のオペランドおよび第2のオペランドを比較する比較命令を含み、前記比較命令は比較条件フィールドを有し、
    前記比較条件フィールドが第1の値を有するとき、前記比較回路は、前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号より大きい場合に前記第1のオペランドおよび前記第2のオペランドが等しいか否かを判定し、前記第1のアーキテクチャレジスタ番号が前記第2のアーキテクチャレジスタ番号よりも小さい場合に前記第1のオペランドおよび前記第2のオペランドが不等であるか否かを判定するように構成され、
    前記比較条件フィールドが第2の値を有するとき、前記処理回路は、前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号との前記比較にかかわらず、(i)前記第1のオペランドが前記第2のオペランドよりも大きいか否か、および(ii)前記第1のオペランドが前記第2のオペランド以下であるか否かのいずれかを判定するように構成され、
    前記比較条件フィールドが第3の値を有するとき、前記処理回路は、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号の前記比較にかかわらず、(i)前記第1のオペランドが前記第2のオペランド以上であるか否か、および(ii)前記第1のオペランドが前記第2のオペランドよりも小さいか否かを判定するように構成されている、請求項17〜20のいずれか一項に記載の装置。
  28. 前記比較条件フィールドは、2ビットフィールドを含む、請求項27に記載の装置。
  29. 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する命令符号化を有する命令に応答して、前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号とを比較するステップと、
    前記第1のアーキテクチャレジスタ番号と前記第2のアーキテクチャレジスタ番号との比較に基づいて、前記第1のアーキテクチャレジスタ番号および前記第2のアーキテクチャレジスタ番号に対応するレジスタを使用して、第1のタイプの処理演算を実行すべきか、または、第2のタイプの処理演算を実行すべきかを選択するステップと
    を含む、データ処理方法。
  30. 請求項16〜28のいずれか一項に記載の装置に対応する仮想マシン実行環境を提供するようにコンピュータを制御するコンピュータプログラムを記憶した、コンピュータ可読記憶媒体。
JP2018536878A 2016-01-22 2016-05-25 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する符号化命令 Active JP6803390B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/003,828 US10331449B2 (en) 2016-01-22 2016-01-22 Encoding instructions identifying first and second architectural register numbers
US15/003,828 2016-01-22
PCT/GB2016/051503 WO2017125700A1 (en) 2016-01-22 2016-05-25 Encoding instructions identifying first and second architectural register numbers

Publications (2)

Publication Number Publication Date
JP2019503010A true JP2019503010A (ja) 2019-01-31
JP6803390B2 JP6803390B2 (ja) 2020-12-23

Family

ID=56116465

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018536878A Active JP6803390B2 (ja) 2016-01-22 2016-05-25 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する符号化命令

Country Status (7)

Country Link
US (1) US10331449B2 (ja)
EP (1) EP3405863B1 (ja)
JP (1) JP6803390B2 (ja)
KR (1) KR102560426B1 (ja)
CN (1) CN108463801B (ja)
IL (1) IL260142B (ja)
WO (1) WO2017125700A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111443948B (zh) * 2020-03-30 2022-09-09 龙芯中科技术股份有限公司 指令执行方法、处理器和电子设备
CN113608785A (zh) * 2021-08-23 2021-11-05 北京奕斯伟计算技术有限公司 处理器核、处理器及指令处理方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6282633B1 (en) * 1998-11-13 2001-08-28 Tensilica, Inc. High data density RISC processor
US6957321B2 (en) 2002-06-19 2005-10-18 Intel Corporation Instruction set extension using operand bearing NOP instructions
US7596680B2 (en) 2003-09-15 2009-09-29 International Business Machines Corporation System and method for encoding and decoding architecture registers
US7263577B2 (en) * 2005-03-03 2007-08-28 Qualcomm Incorporated Power saving methods and apparatus to selectively enable comparators in a CAM renaming register file based on known processor state
US20070038984A1 (en) * 2005-08-12 2007-02-15 Gschwind Michael K Methods for generating code for an architecture encoding an extended register specification
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20110296140A1 (en) 2010-05-25 2011-12-01 National Chung Cheng University RISC processor register expansion method
US9405548B2 (en) * 2011-12-07 2016-08-02 International Business Machines Corporation Prioritizing instructions based on the number of delay cycles
CN105573962B (zh) * 2013-03-15 2018-10-16 甲骨文国际公司 单指令多数据处理器与相关方法
GB2522990B (en) * 2013-12-20 2016-08-03 Imagination Tech Ltd Processor with virtualized instruction set architecture and methods

Also Published As

Publication number Publication date
US20170212758A1 (en) 2017-07-27
WO2017125700A1 (en) 2017-07-27
US10331449B2 (en) 2019-06-25
JP6803390B2 (ja) 2020-12-23
IL260142B (en) 2020-06-30
EP3405863A1 (en) 2018-11-28
CN108463801B (zh) 2023-03-07
IL260142A (en) 2018-07-31
KR20180104652A (ko) 2018-09-21
CN108463801A (zh) 2018-08-28
EP3405863B1 (en) 2020-08-12
KR102560426B1 (ko) 2023-07-27

Similar Documents

Publication Publication Date Title
JP5646737B2 (ja) 条件付き比較命令
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
EP1267256A2 (en) Conditional execution of instructions with multiple destinations
CN107851013B (zh) 数据处理装置和方法
US11307855B2 (en) Register-provided-opcode instruction
CN108780395B (zh) 矢量预测指令
CN107851016B (zh) 向量算术指令
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
US7146491B2 (en) Apparatus and method for generating constant values
JP6803390B2 (ja) 第1のアーキテクチャレジスタ番号および第2のアーキテクチャレジスタ番号を識別する符号化命令
JP5732139B2 (ja) データ要素の条件付き選択
JP2001306321A (ja) プロセッサ
US11573801B1 (en) Method and apparatus for executing vector instructions with merging behavior
JP2001195252A (ja) マスク技術による無効で分岐効率向上を図るプロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190517

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200326

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200408

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200707

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200807

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201013

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: 20201106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201130

R150 Certificate of patent or registration of utility model

Ref document number: 6803390

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250