JP3837113B2 - 部分的ビット入替 - Google Patents

部分的ビット入替 Download PDF

Info

Publication number
JP3837113B2
JP3837113B2 JP2002568190A JP2002568190A JP3837113B2 JP 3837113 B2 JP3837113 B2 JP 3837113B2 JP 2002568190 A JP2002568190 A JP 2002568190A JP 2002568190 A JP2002568190 A JP 2002568190A JP 3837113 B2 JP3837113 B2 JP 3837113B2
Authority
JP
Japan
Prior art keywords
register
bit
bits
instruction
destination
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.)
Expired - Fee Related
Application number
JP2002568190A
Other languages
English (en)
Other versions
JP2004524621A (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 JP2004524621A publication Critical patent/JP2004524621A/ja
Application granted granted Critical
Publication of JP3837113B2 publication Critical patent/JP3837113B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • CCHEMISTRY; METALLURGY
    • C04CEMENTS; CONCRETE; ARTIFICIAL STONE; CERAMICS; REFRACTORIES
    • C04BLIME, MAGNESIA; SLAG; CEMENTS; COMPOSITIONS THEREOF, e.g. MORTARS, CONCRETE OR LIKE BUILDING MATERIALS; ARTIFICIAL STONE; CERAMICS; REFRACTORIES; TREATMENT OF NATURAL STONE
    • C04B2237/00Aspects relating to ceramic laminates or to joining of ceramic articles with other articles by heating
    • C04B2237/30Composition of layers of ceramic laminates or of ceramic or metallic articles to be joined by heating, e.g. Si substrates
    • C04B2237/32Ceramic
    • C04B2237/36Non-oxidic
    • C04B2237/366Aluminium nitride
    • 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

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)
  • Complex Calculations (AREA)

Description

【技術分野】
【0001】
本発明は、マイクロプロセッサにおいて部分的ビット入替を実行するための技術に関する。
【背景技術】
【0002】
産業傾向がより大きくより複雑なインストラクション・セットに傾いていくにつれ、縮小インストラクション・セットコンピュータ(RISC)アーキテクチャが開発された。インストラクション・セット設計の単純化によって、RISCアーキテクチャは、パイプライン化(pipelining)及びキャッシング(caching)等の技術の使用を容易にして、その結果、システム性能を増大させている。
RISCアーキテクチャは、通常、インストラクション形式に少しのバリエーションしか持たない固定長インストラクション(例えば16ビット、32ビット又は64ビット)を持つ。インストラクション・セットアーキテクチャ(ISA)の各インストラクションは、常に同じ記憶位置にソースレジスタを持つ。例えば、32ビットのISAは、常にビット16−20及び21−25に指定されたソースレジスタを持つ。こうすることで、指定されたレジスタが、いかなる複雑なインストラクションを解読することもなく、すべてのインストラクションに対して取り出されることが可能になる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
暗号化システム(「暗号システム」)は、トランザクションを保護し、通信を暗号化し、ユーザを認証し、かつ情報を守るためにますます使用されている。
デジタル・エンクリプション・スタンダード(DES)のような多くの秘密鍵暗号方式は、計算が比較的単純で、かつデータのブロック上で一連のXOR、ローテーション及び入替えを実行するハードウェア・ソリューションを縮小することが可能である。
【0004】
一観点によれば、部分的ビット入替を実行するためのインストラクションがインストラクション・セット・アーキテクチャに提供される。該インストラクションは、部分的入替のインストラクションとしてインストラクションを識別するためのオペレーション・コードと、入替オペレーション仕様とを含んでいる。入替オペレーション仕様は、ディスティネーション・レジスタを識別するディスティネーション指示子と、
前の部分的な値のソース指示子と、ディスティネーション・サブセット指定子と、制御指定子とを含んでいる。ディスティネーション・サブセット指定子は、ディスティネーション・レジスタの1または複数のディスティネーション・ビットを識別し、制御指定子は、識別されたディスティネーション・ビットの各々に関するソースを識別する。インストラクションは、入替オペレーション仕様によって定義される部分的なビットの入れ替えを実行することによって処理される。
【0005】
実施形態においては、ディスティネーション指示子がディスティネーション・レジスタを絶対的または明示的に識別する。ディスティネーション・レジスタは、マイクロプロセッサの乗算/除算ユニット内のアキュムレータ、もしくは、汎用レジスタとして構成される。同様に、部分的な値のソース指示子は、部分的な値のソースレジスタを絶対的または明示的に識別するよう構成される。前の部分的な値のソース・レジスタは、アキュムレータ及び/又は汎用レジスタとして構成される。さらに、ディスティネーション・レジスタ及び前の部分的な値のソース・レジスタは、同一のレジスタとして構成されてもよい。
【0006】
いくつかの実施形態においては、ディスティネーション・サブセット指定子は、ディスティネーション・レジスタ内のビットの連続するブロックを識別する。該ビットの連続するブロックは、ディスティネーション・レジスタの最下位ビットを含んでいる。種々の実施形態において、ビットの連続するブロックには1〜6又はそれ以上のビットが含まれている。
制御サブセット指示子は、1又は複数のソース・ビット識別子を含み、また、マスク及びデフォルト・ビットを含んでいる。さらに、制御サブセット指示子は、インストラクション内にフィールドとして記憶され、又は、汎用レジスタ内に記憶される。
実施形態においては、部分的入替のインストラクション・セットをRISCインストラクション・セット内に提供する。
1以上の実施例の詳細を、添附図面及び以下において説明する。他の機能及び利点は、その説明及び図面、並びに特許請求の範囲から明白になるであろう。
【発明を実施するための最良の形態】
【0007】
デジタル暗号化基準(DES)(及び、DESに置き換えられる改良型の暗号化基準(AES)のいくつかの候補)等の暗号化オペレーションは、データ値のビット入替をある程度実行している。これらのオペレーションは、汎用のマイクロプロセッサのインストラクション・セットアーキテクチャに完全にはマッピングしないが、ハードウエア内に有効に具現化されている。しかしながら、National Institute of Standards and Technologyは、新しいAES基準を作成している段階である。したがって、将来どのようなアルゴリズムが使用されるのか、明確ではない。少なくともこの点から、ブロック暗号等の暗号化アルゴリズムの実行を増大するために、ビット入替のサポート手段を有するマイクロプロセッサの提供が望まれている。
【0008】
図1を参照して、多項式乗算を実現するために使用される典型的なマイクロプロセッサのアーキテクチャは、インストラクションがクロック・サイクル毎に発行され、かつ例えば4クロック・サイクルのような固定時間の中で実行される5段パイプラインを含む。各インストラクションの実行は、インストラクションフェッチ(IF)ステージ1001、レジスタ読み取り(RD)ステージ1002、算術/論理ユニット(ALU)ステージ1003、メモリ(MEM)ステージ1004、及びライトバック(書き戻し)(WB)ステージ1005の5ステージに分割される。IFステージ1001では、指定されたインストラクションが、インストラクションキャッシュから取り出される。取り出されたインストラクションの一部が、インストラクションを実行するのに使用されるソースレジスタを指定するために使用される。読み取りレジスタ(RD)ステージ1002では、システムが、指定されたソース・レジスタの内容を取り出す。これらの取り出された値は、ALUステージ1003内の算術演算あるいは論理演算を実行するために使用される。MEMステージ1004では、実行インストラクションが、データキャッシュ内のメモリを読み出し/書き込む。最後に、WBステージ1005では、インストラクションの実行によって得られた値が、レジスタにライトバックされる。
【0009】
浮動小数点計算及び整数の乗算/除算のようないくつかの演算は、必ずしも単一クロック・サイクルで実行できるとは限らないので、いくつかのインストラクションはただインストラクションの実行を始めるためだけのものである。十分なクロック・サイクルが経過した後、別のインストラクションが結果を取り出すために使用される。例えば、整数乗算インストラクションが5つのクロック・サイクルを取る場合、1つのインストラクションが乗算計算を開始し、乗算が完成した後、別のインストラクションがその乗算の結果をレジスタに取り込む。結果が要求される時までに乗算が完了していない場合、結果が利用可能となるまで、パイプラインは時間を引き延ばす。
【0010】
図2は、典型的なRISCアーキテクチャを例示している。プロセッサ・コア2000(又は「マイクロプロセッサ・コア」とも呼ばれる)は、実行ユニット2010、乗算/除算ユニット(MDU)2020、システム制御コプロセッサ(CPO)2030、メモリ管理ユニット2040、キャッシュ・コントローラ2050、及びバス・インターフェース・ユニット(BIU)2060を含む。図2において、MDU2020は、乗算/除算の結合ユニットであるが、乗算ユニットと除算ユニットとが別々のユニットである実施形態であってもよい。
【0011】
実行ユニット2010は、プロセッサ・コア2000内のインストラクションを実行するための主要なメカニズムである。実行ユニット2010は、レジスタ・ファイル2011及び算術論理ユニット(ALU)2012を含む。1つの実施例では、レジスタ・ファイル2011が、例えば、スカラ整数演算及びアドレス計算に使用することができる32個の32ビット汎用レジスタを含む。2つの読み取りポート及び1つの書き込みポートを含むレジスタ・ファイル2011は、パイプライン内の演算待ち時間を最小限にするために完全にバイパスされる。ALU2012は、加算、減算及びシフトのような論理と算術の両方の演算をサポートする。
【0012】
MDU2020は、3つのレジスタ(ACX2021、HI2022、及びLO2023)を含み、これらレジスタは種々のオペレーションに使用される。一実施形態においては、これら3つのレジスタは、一体として72ビット値のものとして使用される。一実施形態においては、LOレジスタ2023及びHIレジスタ2022はそれぞれ32ビット幅であり、MDU2020専用の出力レジスタとして機能する。一実施形態においては、ACXレジスタ2021は、HIレジスタ及びLOレジスタによって提供される以上の完全精度の8ビットを提供する。この正確なビット数は実施形態に依存するものであるが、好適な最小サイズは2ビットである。32ビットのデータ経路を有するプロセッサに関しては、ACXレジスタの好適な最大サイズは32ビットである。これに対して、64ビットのデータ経路を有するプロセッサに関しては、ACXレジスタの好適な最大サイズは64ビットである。このため、32ビット幅のHIレジスタ及びLOレジスタを備えたプロセッサにおいては、ACX/HI/LOの組み合わせは、連続する64ビット以上の値を保持することができる。
MDU2020は、以下に説明されるDIV、DIVU、MADD、MADDU、MFHI、MFLO、MSUB、MSUBU、MTHI、MTLO、MUL、MULT、MULTU、MFLHXU、MTLHX、MADDP、MULTP、及びPPERMのようなインストラクションの幾つか又は全てを含む様々なオペレーションを実行するために使用される。
【0013】
インストラクションMUL、MULT及びMULTUは、2つの32ビットの数を互いに乗算するために使用される。その結果は、MULに対しては指定されたレジスタに、MULT及びMULTUに対してはHI/LOレジスタに格納される。例えば、インストラクション「MUL$7、$6、$5」は、レジスタ$6及び$5の内容を互いに乗算し、その結果をレジスタ$7に格納する。インストラクション「MULT$6、$5」は、レジスタ$6及び$5の内容を互いに乗算し、その結果をHI/LOレジスタに格納する。MULTUインストラクションは、MULTと同じ演算を実行するが、MULTUは正負符号なしのオペランドに適応され、MULTは正負符号付きオペランドに適応される。さらに、MULTUインストラクションは、ACXレジスタをすべてゼロにクリアする。
【0014】
インストラクションDIV及びDIVUは、除算演算を実行し、その結果をACX/HI/LOレジスタに格納する。例えば、「DIV$6、$5」は、レジスタ$6の内容をレジスタ$5の内容で除算し、その結果をACX/HI/LOレジスタに格納する。DIVUインストラクションは、その同じ演算を、正負符号なしのオペランド上で実行する。
【0015】
インストラクションMSUB、MSUBU、MADD、及びMADDUは、2つのレジスタの内容を乗算し、次に、ACX/HI/LOレジスタの内容を加算するか、減算するために使用される。例えば、「MSUB$6、$5」は、レジスタ$6及び$5の内容を互いに乗算し、その結果からACX/HI/LOレジスタの内容を減算し、次に、その値をACX/HI/LOレジスタに格納する。MADDインストラクションは、同様に2つのレジスタの内容を乗算し、その結果をACX/HI/LOレジスタに加算し、その結果をACX/HI/LOレジスタに格納する。MSUBU及びMADDUは、正負符号なしのオペランド上で、同じ演算を実行する。いくつかの実施例では、ACXレジスタがいくつかの演算で使用されず、そのような演算に付随するACXレジスタの内容は定義されない。
【0016】
MFHI、MFLO、MTHI、MTLO、MFLHXU、及びMTLHXインストラクションは、ACX/HI/LOレジスタと汎用レジスタとの間で、データを移動するために使用される。第1のインストラクションMFHIは、HIレジスタの内容を汎用レジスタに取り込む。例えば、「MFHI$5」は、HIレジスタの内容をレジスタ$5に取り込む。同様に、MFLOは、LOレジスタの内容を汎用レジスタに取り込む。反対に、インストラクションMTHI及びMTLOは、汎用レジスタの内容をHI又はLOのレジスタに取り込むために使用される。例えば、「MTHI$5」は、レジスタ$5の内容をHIレジスタに取り込む。
【0017】
1つの実施例では、ACXレジスタの内容は、ダイレクトにアクセス可能ではない。ACXレジスタに間接的にアクセスするために、ACX/HI/LOレジスタに格納された値は、左又は右へシフトされる。例えば、「MFLHXU$5」は、LOレジスタの内容をレジスタ$5に取り込んで、ACX、HI及びLOレジスタの内容を1レジスタ位置だけ右へシフトさせる。従って、そのオペレーションが実行された後は、ACXレジスタはゼロで、HIレジスタはACXレジスタの前の内容を保持し、LOレジスタはHIレジスタの前の内容を保持し、$5レジスタはLOレジスタの前の内容を保持する。8ビットのACXレジスタの内容が32ビットのレジスタに取り込まれるので、8ビットの値は、HIレジスタを取り込む前に、32ビットにゼロ拡張される。
【0018】
MTLHXは逆の演算を実行する。例えば、「MTLHX$5」は、HIレジスタの前の内容をACXレジスタに取り込み、LOレジスタの前の内容をHIレジスタに取り込み、$5レジスタの内容をLOレジスタに取り込む。
【0019】
PPERM演算は、レジスタ中で指定されるような入替えを実行し、その結果をACX/HI/LOレジスタに格納する。例えば、「PPERM$5、$6」は、ACX/HI/LOレジスタを6ビット左にシフトさせる。それから、レジスタ$6によって指定されるように、下位6ビットがレジスタ$5から選定される。ACX/HI/LOレジスタの下位ビットを満たすために、レジスタ$5のどのビットが使用されるかを選定するために、レジスタ$6の32ビットの内容が用いられる。レジスタ$5には32ビットがあるので、32ビットのうちの特定の1つを指定するためには5ビットが必要とされる。例えば、「01101」は、数13に対する2進数である。従って、これらの5つのビットは、ビット13を指定する。同様に、「00000」は0に対する2進数で、「11111」は31に対する2進数である。従って、32ビットはすべて、5ビットの指定子(スペシファイア)を用いて指定され、6ビットは30ビット(すなわち6つの5ビット指定子)を用いて指定される。
【0020】
レジスタ$6は、以下のようにACX/HI/LOの下位ビットを満たすために使用される$5のビットを指定する。つまり、ビット0−4はビット0のソースを指定するために使用され、ビット5−9はビット1を指定するために使用され、ビット10−14はビット2を指定するために使用され、ビット15−19はビット3を指定するために使用され、ビット20−24はビット4を指定するために使用され、そしてビット25−29はビット5を指定するために使用される。残りのビット30−31は未使用である。従って、説明されたようなし指定子を使用して、$5レジスタからの指定されたビットでLOレジスタの最下位の6ビットを満たすためのインストラクションが実行される。
【0021】
最後に、MULTPは2進の多項式乗算を実行するために使用され、MADDPは2進の多項式乗算を実行してその結果をACX/HI/LOレジスタに加算するために使用される。これらの演算はMULT及びMADDに類似しているが、2進の多項式オペランド上で作動する。
【0022】
MULTP及びMADDPの多項式のオペランドは、32ビットのレジスタ内にコード化され、このとき、各ビットは多項式の係数を表す。例えば、多項式「x+x+1」は、x及びxの係数が「0」で、残りの係数が「1」であるので、「10011」としてコード化される。MULTPインストラクションは、2つのオペランド上で2進の多項式乗算を実行する。例えば、
(x+x+1)(x+1)=x+x+x+2x+1
多項式をモジュロ2で減じると、x+X+x+1を生じる。多項式が上記の2進の表現でコード化される場合、同じ乗算が、(10011)(11)=110101として表わされる。
【0023】
MADDPインストラクションは、MULTPのように乗算を実行して、その結果をACX/HI/LOレジスタに加算する。多項式加算はビットXORを使用して実行される。例えば、2進の多項式加算(x+x+1)+(X+1)は、x+2x+2となる。係数をモジュロ2で減じると、「10000」として表わされるxとなる。
【0024】
図3を参照すると、MDU2020は、2つの32ビットのオペランドRS及びRTを受け取る。これらのオペランドを使用して、MDU2020は要求された演算を実行し、レジスタACX2021、HI2022、及びLO2023に結果を格納する。これらの演算を実行するために使用される主要なデータ経路は、図3で示される。RShold(RSホールド)レジスタ3010及びRThold(RTホールド)レジスタ3012は、RS及びRTのオペランドを保持するために使用される。マルチプレクサ3020、3022及び3024は、RS及びRTオペランドをダイレクトに使用するべきか、RSholdレジスタ3010及びRTholdレジスタ3012に格納された値を使用するべきであるかどうかを選定するために使用される。なお、マルチプレクサ3022は、RTの下位及び上位ビット、又はRTholdレジスタ3012に格納された値、の間の選定を行うために使用される。
【0025】
RTholdレジスタ3012は、マルチプレクサ3022に接続される。マルチプレクサ3022は、RThold3012の上位ビット、RThold3012の下位ビット、RTオペランドの上位ビット、又はRTオペランドの下位ビットを選定することにより16ビットの結果を生じる。マルチプレクサ3022からの出力は、ブース・レコーダ(booth recoder)3040によって処理され、レジスタRTB3042に格納される。ブース・レコーディング(booth recoding)は、マルチプライヤアレイが、正負符号付きオペランドと正負符号なしオペランドを同様に処理することを可能にする技術である。レジスタRIB3042の出力は、アレイ・ユニット3030への入力SEL3034になる。
【0026】
アレイ・ユニット3030は、図4に関連して以下に説明されるような算術乗算及び2進の多項式乗算を実行するために使用される。アレイ・ユニット3030は、入力として、ACC1 3031、ACC2 3032、M3033、SEL3034、及びRThold3012を得る。入力ACC1 3031及びACC2 3032は、乗算を実行し、その結果の値を、累計された結果に加算又は減算を実行する演算用に使用される累計された結果である。入力SEL3034(レジスタRTB3042によって決定される)、及びM3033(レジスタRShold 3010によって決定される)は、算術演算のためのオペランドを形成する。入力RThold3012(あるいはRThold3012の上位又は下位ビット)及びM3033(RShold3010によって決定される)は、多項式演算及び入替え用のオペランドを形成する。これらの入力の組合せは、詳細に下に説明されるような様々な計算を実行するために使用される。
【0027】
アレイ・ユニット3030はまた、2つの出力であるResultC 3035及びResultS3036を含む。算術演算を実行する際に、桁上げ保留(キャリー・セーブ)加算器(CSA)が乗算アレイを構築するために使用される。桁上げ保留加算器は、2つの出力を生成するために合計と桁上を別々に計算する。従って、ResultC 3035及びResultS 3036は、それぞれ、CSAマルチプライヤアレイの桁上出力及び合計出力を表す。1つの実施例では、ACC1 3031、ACC2 3032、ResultC 3035、及びResultS 3036が、各々72ビット長で、残りの入力は多くても32ビット長である。入力ACC1 3031及びACC2 3032は、マルチプレクサ3037及び3038を用いて選定される。
【0028】
マルチプレクサ3050及び3052は、レジスタCPAA 3054及びCPAB3056への入力としての値を選定するために使用される。例えば、マルチプレクサ3050は、ResultC 3035、CPA 3058の出力、又はマルチプレクサ3020(つまりオペランドRS若しくはRShold3010)の出力、を選定するために使用される。同様に、マルチプレクサ3052は、ResultS3036、値ゼロ、及びマルチプレクサ3024(つまり、オペランドRT、若しくはCPAA 3054及びCPAB 3056の出力)の出力の間を選定するために使用される。これらのレジスタは、桁上げ伝搬(キャリー・プロパゲイト)加算器(CPA)3058への入力を格納する。CPA3058は、乗算演算(乗算)を完了し、また以下に説明されるような反復除算演算(除算)を実行するために使用される。
【0029】
レジスタRDM3060は、CPA3058の結果出力を格納する。最後に、マルチプレクサ3070及び3072は、どの値が、レジスタACX、HI及びLOに取り込まれるべき結果を形成するかを選定する。マルチプレクサ3070は、ACX/HI/LOレジスタか、RDM3060か、又は、CPA3058の結果かを選定するために使用される。マルチプレクサ3072は、マルチプレクサ3070によって選定された結果の様々な入替えを、代わりに取り込むために使用される。マルチプレクサ3072は、(連結されると72ビット値を形成する)次のような値の選定を可能にすることによって、ACX/HI/LOレジスタの様々なロテーション及び取り込みを実行するために使用される。次のような値とは、(1)マルチプレクサ3070の72ビット出力であるahl、(2)マルチプレクサ3070の上位8ビット、RShold3010の内容、及びマルチプレクサ3070の下位32ビットであるarl、(3)マルチプレクサ3070の上位40ビット及びRShold3010の内容であるahr、(4)マルチプレクサ3070の下位40ビット及びRShold3010の内容であるhlr、(5)マルチプレクサ3070(32個の先行ゼロを備えた)の上位40ビットである0ah、である。
【0030】
いくつかのオペレーション(演算)により、結果用のレジスタACX、HI及びLOに記憶された値が上書きされる。このため、別の結果レジスタ3080を用いて、該レジスタにアキュムレータACX無しで、上位及び下位結果を格納する。
【0031】
以下に説明されるデータ経路は、6つの主要部分、すなわち(1)入力のレジスタリング及び選定、(2)ブース・レコーディング、(3)マルチプライヤアレイ及び入替えロジック、(4)桁上げ伝搬加算器、(5)結果のレジスタリング及び選定、及び(6)結果を示すための別個の32ビット出力レジスタ、を含む。
【0032】
入力のレジスタリング及び選定は、RS及びRTオペランドを保持するためにRShold及びRTholdレジスタを用いて実行される。マルチプレクサは、これらのオペランドをダイレクトに使用するべきか、登録されたバージョンを使用するべきであるかどうかを選定する。ブース・レコーディングは、マルチプライヤアレイ及び入替えロジックに入力を提供するために、一度にRTオペランドの半分で実行される。
【0033】
ブース・レコーディングは、マルチプライヤ・アレイが正負符号付き及び正負符号なしのオペランドを、同じものとして処理することを可能にする技術である。この技術は、次の最も高い2のべき乗からの減算としてオペランドを「レコード(recode)」する。例えば、7は、以下のようにブース・レコードされる。
8−1=1000−0001=100
ただし、は−1を表すものとする。Hennessy及びPattersonは、その全体が参考文献としてここに組み込まれるが、Morgan Kaufmann出版社(1996年)の「ComputerArchitecture: A Quantitative Approach(コンピュータ・アーキテクチャの定量的アプローチ)」の付録Aの中で、ブース・レコーディングについて説明している。
【0034】
アレイ・ユニット3030のうちの1つのアレイは、算術乗算を実行し、またアレイ・ユニット3030の1つのアレイは、2進の多項式乗算を実行する。1つの実施例では、両方のアレイが32ビット掛ける16ビット(32x16)で、RTオペランドのサイズに依存して、一回又は二回、使用される(つまり、RTが16ビット長である場合は、適切なアレイが一回使用され、32ビット長である場合は二回使用される)。CPAは乗算を完了するため、そして反復除算を実行するために使用される。他の実施例は、除算の実行用に、より高速のメカニズムを含む。
【0035】
算術乗算アレイは、ここに組み込まれたMorgan Kaufmann出版社(1996年)の「ComputerArchitecture: A Quantitative Approach(コンピュータ・アーキテクチャの定量的アプローチ)」の中で、Hennessy及びPattersonによって記載された技術のうちの任意のものを用いて実現される。例えば、Hennessy及びPattersonによる付録Aは、演算マルチプライヤを加速するためのいくつかの方法を記載している。記載された技術のうちのいかなるものも、以下に説明される多項式乗算の拡張のための基本原理として使用可能である。
【0036】
図4を参照すると、アレイ・ユニット3030は、並列の2つのマルチプライヤ(Marray4100及びMParray4200)、及び入替えロジック4300を含む。第1のアレイであるMarray4100は、図5を参照して下に説明されるような算術乗算を実行する。Marray4100は、上に説明されたような入力、つまりACC1 3031、ACC2 3032、M3033、及びSEL3034を使用する。その出力は、ResultC3035及びResultS3036を含む。第2のアレイであるMParray4200は、図6を参照して以下に説明されるような2進の多項式乗算を実行する。MParray4200は、上に説明されたような入力、つまりRThold3012の下位ビット又はRShold3012の上位ビット、RShold3010、及びACC1 3031を使用する。MParray4200の出力はResultC3036である。最後に、入替えロジック4300は、RThold3012に格納された値に基づいて、RShold3010の下位ビット上で、様々な入替えを実行するために使用される。
【0037】
マルチプレクサ4310は、Marray4100の出力ResultSとゼロとの間で選択を行って、ResultS3036を提供する。マルチプレクサ4315及び4320は、Marray4100によって生成されたResultC、ACCIの25ビットとMParray4200によって生成された47ビットのResultの組み合わせ、及び、入替ロジック4300によって生成された結果の間で選択を行って、ResultC3035を提供する。
【0038】
図5を参照して、Marray4100は、2つの72ビット幅のオペランドACC1及びACC2の加算をサポートするよう修正された、32ビット掛ける16ビットのウォーレス・ツリー(Wallace tree)マルチプライヤアレイである。ACC1及びACC2のオペランドは、72ビット値の桁上げ保留表示を保持する。乗算を遂行するためにすでに(つまり桁上げ選択加算器(CSA)による)加算が実行されているので、乗算の中間結果に加算されるようにするための追加の加算器が、すべてのACC1及びACC2に含まれる。Marray4100は、桁上げ保留表示で72ビット幅の結果を生成する。32x16ビットが1つのサイクル当たり処理されるので、32x32ビットの乗算には、アレイを通る2つの経路が必要である。
【0039】
Marray4100は、桁上げ保留加算器のアレイから構築されたウォーレス・ツリーとして実現される。これらのアレイの幅は変化する。この設計は、データ経路のスタイルを使用するのではなく、自動化された桁及び経路を使用して実現される。前のアレイ・パスからの累積加算値がアレイに遅れて入力されるので、累積加算値はレジスタからダイレクトに来る必要はない。ブース・レコーディングは、乗算をより効率的に処理するために、重なり合う三重項の方法を使用することにより実行される。ブース・レコーディングの出力は、−2、−1、0、1、又は2を乗じたオペランドMを、4の各累乗に対して加算すべきかどうかを伝える。最上レベルのCSA入力上のマルチプレクサは、対応するMの倍数を選定するために使用される。
【0040】
Marray4100は、ブース・レコーディングからの8つの積に加えて、特別な1つの部分積を累計する。後者は、マルチプレクサからの「0」及び「lx」の選択を用いて、32ビットの正負符号なしの計算に対して使用される。ウォーレス・ツリー内では、2の補数結果を正確に累計するために、オペランドが正負符号拡張される。
【0041】
図6を参照すると、対応する正負符号なしの算術演算と同様に、2進の多項式に基づいた乗算演算が処理される。1つの実施例では、MParray4200は、例えばACC1というオペランド上で、排他的論理和(XOR)を用いて加算も実行する32x16ビット・アレイである。Marray4100と同様に、32x16ビットが1つのサイクル当たり処理されるので、32x32ビットの乗算には、アレイを通る2つの経路が必要である。第1のサイクルでは、ACC1はゼロ(MULTP演算に対して)又は前の結果(MADDP演算に対して)である。第2のサイクルでは、ACC1は、第1のサイクルからの出力の上位ビットである。
【0042】
MParray4200は、2つのオペランド(例えば、OpA及びOpB)を乗算するが、このとき、OpAとOpBの1ビットとの論理積(AND)を得ることにより形成される各行毎に1つのアレイを用いる。例えば、第1行は、OpAとOpBのビット0との論理積である。行2は、OpAとOpBのビット1との論理積である。各々の連続する行の結果は、左側に1ビットシフトされる。最後の結果は、各列の排他的論理和(XOR)を得ることにより形成される。2進の多項式演算で加算を実行するためにビットXORが使用されるので、アキュムレータ行が、MADDPのようなインストラクションをサポートするアレイMParray4200に加えられる。
【0043】
再び図1を参照する。MDU2020は、パイプラインの実行ステージ1003の第1のサイクルで計算をスタートさせる。インストラクションがパイプライン内のメモリ・ステージ1004を通過する前に計算が完了する場合、その結果はその点で保持される。インストラクションがパイプライン内のメモリ・ステージ1004を通過する時に演算が完了すれば、そのインストラクションがコミットされ、その結果はACX/HI/LOレジスタにダイレクトに書き込まれる。
MDU2020は、環境のパイプラインから切り離されている、つまり、環境によって失速(stall)することがない。それは、MDU2020がパイプラインの失速中でもその演算を継続するということである。このようにして、多重サイクルMDU演算は、システムの失速及び(又は)他の非MDUインストラクションによって、部分的にマスクされることができる。
【0044】
図7Aは、32x16ビット乗算用のMDU2020を通るパイプラインの流れを示す。RS及びRTは遅れて到着するので、第1のサイクルがブース・レコーディングに対して使用される。第2のサイクルは、アレイが実行されるところであり、第3サイクルは、CPA3058が演算を完了するところである。結果はMFxxインストラクションによる読み取りに対して常にアクセス可能なので、32x16乗算は失速することなく実行される。汎用レジスタ(GPR)にその結果をダイレクトに戻す32x16MULは、1つのサイクルの間に失速する可能性がある。
【0045】
図7Bを参照する。32x32ビット乗算に対しては、アレイが2度使用され、それは32x16ビット乗算にさらに1つのクロック・サイクルを追加する。第1のアレイ・パスがオペランドRTの第1の部分に対して完了しつつある時、ブース・レコーディングがオペランドの第2の部分上で実行される。従って、ブース・レコードされたRTの部分は、第1のパスが完了するとすぐに、アレイを通して第2のパスを始めることができる。その後、乗算結果はCPA3058を用いて計算される。
【0046】
図7Cを参照する。単純な非回復型(non−restoring)除算アルゴリズムが正のオペランドに対して使用される。もし必要ならば、第1のサイクルはRSを負にするために使用される。タイミングの理由により、RSが正であっても、このサイクルは実行される。次いで、32、25、18、又は10のサイクルの繰返しの加算/減算の演算が実行される。その実際の数は、正のRSオペランド上の先行ゼロの総数に基づく。剰余が負だったならば、最終の剰余の調整が必要となる。タイミングの理由のために、剰余調整が必要でなくても、このサイクルは実行される。最後に、商及び(又は)剰余の上で必要ならば、正負符号の調整が実行される。両方のオペランドが正の場合、このサイクルはスキップされる。
【0047】
1つの実施例では、ターゲットのアプリケーションが高速の除算を要求する。除算の性能を増大させるために、多くの技術が使用される。例えばSweeney、Robertson、及びTocher(SRT)アルゴリズム、又はそのいくつかのバリエーションが使用される。
【0048】
図8を参照する。乗算演算は有限状態マシーンを用いて実現される。乗算はIDLE状態8010で始まる。始動信号がアサートされるまで、マルチプライヤは停止状態にとどまる。その後、マルチプライヤは、オペランドRTが32ビットか、又は16ビットの値を保持しているかどうかに応じて、ARR1状態8020又はARR2A状態8030のいずれかに移動する。16ビットの値がRTに格納される場合、システムは、第1のアレイ・パスが実行される状態ARR2A 8030に移動する。その後、マルチプライヤは、第2のアレイ・パスが実行される状態ARR2B 8040に移動する。16ビットの値がオペランドRTに格納される場合、乗算は、状態ARR1 8020で、アレイ・ユニットを通る。
【0049】
この実施例では、マルチプライヤがパイプライン化される。1つの乗算は、アレイ・ユニットに流され、別のものはCPAに流される。従って、実行すべき追加の乗算が無い場合、マルチプライヤは、ARRl 8020又はARR2B 8040から、状態CPA8050へ移動するか、あるいは、第2の乗算を始める。もし追加の乗算が必要でない場合、マルチプライヤはCPA8050を通り、それからIDLE8010に戻るか、又は上に説明されるような新しい乗算を始める。
【0050】
第1の乗算がCPAを通る準備ができた時に、第2の乗算が実行される準備ができたならば、マルチプライヤはCPA1 8060(32xl6乗算用の)又はCPA2A 8070(32x32乗算用の)のいずれかに移動する。状態CPA1 8060では、第1の乗算がCPAを通り、第2の乗算がアレイ・ユニットを通る。その後、マルチプライヤは第2の乗算を終了させるために状態CPA8050に移動する。
【0051】
第2の乗算が32ビットの乗算である場合、状態CPA2A 5070では、第1の乗算がCPAを通り、第2の乗算がアレイ・ユニットを通る。その後、マルチプライヤは、32x32の乗算を完了するために状態ARR2B 8040に移動する。このパイプラインのアプローチは、2サイクルの待ち時間で、すべてのクロック・サイクル毎に32x16の乗算が行われることを可能にする。また、32x32の乗算は、3サイクルの待ち時間で、クロック・サイクルの1つおきに得られる。
【0052】
図9を参照する。反復除算演算が有限状態マシーンを用いて実現される。1つの実施例では、MDUがIDLE状態9010で始まる。除算演算を始めるための信号が受信されると、MDUは、演算が正負符号付きである場合はDIV1 9020へ移動するか、又は演算が正負符号なしである場合はDIV1U 9030へ移動する。状態DIV1 9020及びERLY 9040は、正負符号を必要に応じて調整して、除算用の正負符号付きオペランドを準備するために使用される。状態DIV1U 9030及びERLYU 9050は、正負符号なしの除算演算を準備するために使用される。状態ERLY 9040及びERLYU 9050では、必要な除算の反復数を調整するために、オペランドRSにおいて先行ゼロが検知される。
【0053】
反復除算が状態DIV9060及びDIVU9070で実行される。除算は、一連の反復する加算/減算及びシフトを用いて実行される。最後に、剰余は、状態REM9080及びREMU9090で完成される。オペランドのどちらかが負である場合、正負符号の調整が状態SGN9100で実行される。
【0054】
再び図4を参照する。1つの実施例において、入替えロジック4300が、上に説明されたPPERMインストラクションをサポートするために使用される。入替えロジック4300は、RThold3012の値に基づいて、RShold3010の32ビットのうちのいずれをも選定するために、使用される6つのシングル・ビット32:1セレクタから成る。このロジックは、データ経路モジュールの中でダイレクトに実現される。
【0055】
例えば、入替ロジック4300は、インストラクション「PPERM$5、$6」を実行するために使用される。入替ロジック4300は、どのビットをRShold3010からの出力として含むべきであるかを識別するために、RThold 3012によって決定される6つの5ビット・セレクタを使用する。例えば、レジスタ$5が下位ビット「010101」を保持している場合、セレクタ「00010」(レジスタ$6の下位ビットに対応する)は、「1」を保持しているビット2(つまり右から3番目のビット)を選定することになる。RThold3012が下位ビット「0001000011」(レジスタ$6の下位10ビットに対応する)を保持している場合、ビット2(「1」を保持している)及びビット3(「0」を保持している)が選定され、「10」をもたらす。入替えロジック4300は、この方法を使用して、6つのビットを生成するために、RThold3012に基づいてRShold3010からビットを選定する。その結果生じる6つのビットは、結果を形成するためにACC1の下位66ビットに連結される。これは、ACC1の下位66ビットを効果的に左側へ6ビットシフトし、下位6ビットを入替えロジック4300の出力と置き換える。
【0056】
上に説明されたPPERMインストラクションは、ハードウェア内でのビットの入れ替え支援を提供するために使用される1つの技術である。厳密に数学的な意味では、ビットの入れ替えは、1対1の写像として、レジスタ又はメモリ位置内の順序付けられた1グループのビットを任意に順序付けし直すことから成る。ここで説明されるような入れ替えは、1対多数の写像及び1対1の写像も可能である、より一般的な操作である。十分なハードウェアが使用される場合、いかなる入れ替えも、単一のクロック・サイクルにおいて実行可能である。しかしながら、固定された入れ替え以外であれば、どうしても、入れ替えが実行される前に、かなりの量の状態(state)が設定されなければならない。例えば、ビットが、32ビット値から、拡張された48ビット値に置き換えられる場合、48個のディスティネーション・ビットの各々が、対応するソース・ビットを指し示すための5ビットのデータを必要とする。こうして、240ビットの状態が、そのオペレーションを完全に指示するために必要となる。
【0057】
入れ替えを指定するのに必要な状態の量は、入れ替えられるディスティネーション・ビットの数を減少させることにより減少する。部分的な入れ替えオペレーションは、増大しないインストラクション・セットと共に使用されるシフト及びマスクのアルゴリズムに比べて増大される性能を提供しつつ、複数のクロック・サイクルに渡って完了される広範囲な入れ替えを可能にする。(1)入れ替えるディスティネーション・ビットのサブセット、(2)入れ替えるディスティネーション・ビットのサブセット内の各ビットのソースについての記述、(3)ディスティネーション・レジスタにコピーされる部分ビット列、及び(4)ディスティネーション・レジスタ、といった入力を用いる、部分的な入替えインストラクションが提供される。
【0058】
ディスティネーション・ビットは、様々な程度の経済性に応じて、いくつかの方法で指定される。例えば、ディスティネーション・ビットは、各ディスティネーション・ビット毎に、その位置を指定するための少なくとも5−ビットの値を用いる、自由形式のフォーマットで指定される。また、ディスティネーション・ビットは、1つのインストラクション当たり少なくとも5ビットを要求して、明示的に制御されたビットからスタートする1つの連続するグループとして指定される。さらに、ディスティネーション・ビットは、標準的なインストラクションシーケンスとして実行される完全な入替え操作でもって、暗黙的に制御されたビットからスタートする連続するグループとして指定される。
【0059】
PPERMインストラクションは、マイクロプロセッサの乗算又は乗算/除算ユニットにおいて、部分的なビットの入替えのハードウェア実施例を提供する。上に説明されたPPERMインストラクションに加えて、部分的なビットの入替えのいくつかの代案となる実施例が望ましい。
【0060】
図10Aを参照する。4つのオペランドを用いる部分的入替オペレーションが指定される。rdオペランドは結果を格納するためのディスティネーション・レジスタを指定する。rsオペランドは、部分的な入れ替えを実行するための、ソース・ビットとして使用される入力ワードを指定する。rtオペランドは、ディスティネーション・レジスタにコピーされる部分ビット列を格納するレジスタを識別する。最後に、ruオペランドは、実行されることになっている部分的な入替えを指定するための制御入力として使用される。
【0061】
図10Bを参照する。オペランドruによって指定される制御レジスタは、ソース・ビットを指定するための4つの5ビット値と、4つのディスティネーション・ビットのうちのどれを入れ替えるべきであるかを指定するマスクと、デフォルト・ビットと、ディスティネーション・ニブルとを用いて、実現される。ディスティネーション・ニブルは、結果として入れ替えられるビットを配置するために、ディスティネーション・レジスタ内の特定の4ビット・フィールドを指定するために使用される。例えば、ディスティネーション・ニブルが0である場合、ディスティネーション・レジスタの下位4ビットが置き換えられる。
【0062】
4つのソース・ビットの識別子は、ディスティネーション・レジスタ(rdによって指定される)内の対応するビットを置き換えるために、入力ワード(rsによって指定される)のうちのどのビットが使用されるかを指定する。これらのソース・ビット識別子は、ディスティネーション・ニブルによって指定されたように、配置されるべき4ビット・フィールドを形成する。例えば、ソース・ビット0が「00010」である場合、rsのビット2が4ビット・フィールドの下位ビットである。rsが「1010」を保持している場合、「0」(ビット2は右から3番目のビットである)が、ディスティネーション・ニブルの下位ビットを形成する。
【0063】
マスクは、対応するソース・ビットを入れ替えるべきかどうかを指定するために使用される。例えば、「00111」というマスクは、ソース・ビット0、1、及び2によって指定される入れ替えを単に実行する。対応するマスク・ビットが0である場合、デフォルト・ビットがディスティネーション・ニブルの中で使用される。この例において、ソース・ビット3に対応するマスク・ビットが「0」であるので、デフォルト・ビットの値がディスティネーション・ニブルの上位ビットに対して使用される。マスク及びデフォルト・ビットの使用は、所要の結果値が複数のソース・ワードから集められたビットの入れ替えである場合に有用である。ここで、デフォルト・ビットは、ゼロ、1、又はマスクによる入替え用に選択されなかったディスティネーション・ビットの値は変更せずに残すことにするという指示である。オペレーション用に選定されなかったディスティネーション・レジスタのすべてのニブルの値は、オペランドrtによって指定されたレジスタからコピーされる。
【0064】
図11Aを参照する。部分的な入れ替えの別の実施例では、より少数のレジスタしか、部分的入替インストラクションを指定するのに使用されない。この実施例では、ディスティネーション・オペランドrd及びソース・オペランドrsが指定される。上で説明されたような、制御レジスタを使用する代わりに、2つのソース・ビット指示子が、そのインストラクションの中に含まれる。このインストラクション・フォーマットを用いることで、インストラクションは、入れ替えを行う上で、より少数のビットしか指定しない。しかしながら、インストラクションの繰返し割合は、より高い。
【0065】
このインストラクション・フォーマットの中に、使用されるマスク又はスタートの指示子があるので、部分的入替のソース・レジスタが暗黙的にディスティネーション・レジスタであり、インストラクションは、ソースからの2つの追加のビットでマージするよりもむしろ、前の値の上で2つのビットによって、暗黙的なシフトあるいはローテイト(rotate)を実行する。その値が現在のソース(rs)レジスタから導き出せない値のビットに対するマスクがない場合、明示的なシフト/ローテイトのインストラクションを用いて、また、シングルビットの部分的入替えインストラクションを用いて、処理がなされる。
【0066】
図11Bを参照する。シングルビットの部分的入替インストラクションは、図11Aに関して説明した2つのビットのフォーマットに類似するフォーマットを含む。この実施例では、選定されたソース・ビットと下位ビットを置き換えるよりもむしろ、シングル・ビットがインストラクション・フィールド内で指定され、暗黙的な1つのビットのシフトが実行される。
【0067】
図12Aを参照する。部分的入替はまた、乗算/除算ユニットのアキュムレータを使用して実行される。例えば、図12Aで示されるインストラクション・フォーマットは、ソース・レジスタ・オペランドrs、制御ワード・オペランドrt、及びディスティネーション・クイブル(5ビット・フィールド識別子)を含む。MDU2030のHI/LOレジスタが、ソース・データ・レジスタ及びディスティネーション・レジスタにコピーされる部分ビット列のソースとして暗黙的に使用される。
【0068】
図12Bを参照する。制御ワードが、図10Bに関して上で説明したように、デフォルト・ビット、マスク、及びソース・ビットを保持する。しかしながら、この実施例では、ディスティネーション・クイブル(ニブルに対立するものとして)が、制御ワード内に追加のソース・ビット識別子用のスペースを残しながら、インストラクションの中で指定される。このフォーマットにおけるインストラクションは、HI/LOレジスタ・ペアで作動し、拡張入替(例えば32ビットの値が48ビットの値に拡張される)をより効率的にするために使用される。
【0069】
図13Aを参照する。部分的入替はまた、乗算器あるいは乗算/除算ユニットのアキュムレータを使用して、マスク無しで、実行される。例えば、図13Aで示されるインストラクション・フォーマットは、ソース・レジスタ・オペランドrs及び制御ワード・オペランドrtを含む。MDU200のHI/LOレジスタが、ディスティネーション・レジスタにコピーされる部分ビット列のソースとして暗黙的に使用される。図13Bを参照すると、制御ワードは、図10Bに関して上述したような6つのソース・ビットの記述を保持している。
【0070】
部分的入替の別の実施例は、1つ以上の制御ワード・オペランドを使用することによって、指定されたビットの数を増大させる。例えば、1つの実施例は、2つの制御ワードが指定されること以外は、図10Aで説明したようなインストラクションの符号化、及び図10Bで説明したような制御ワードの符号化を使用する。この実施例は、ディスティネーション・レジスタにコピーされる部分ビット列のソースの代わりに、第2の制御ワード・オペランドを指定するためにオペランドrtを使用するが、別のレジスタ、例えばHI/LOレジスタとして暗黙的に指定される。追加の実施例は、(i)図13Bに説明したような2つの制御ワード・オペランドを提供するために、図13Aのインストラクションの符号化を変更することによって、12ビットの入れ替え、及び(ii)図12Bに関して説明したような2つの制御ワード・オペランドを使用する10ビットの入れ替えを可能とする。
【0071】
ハードウェア(例えば、マイクロプロセッサあるいはマイクロコントローラ内の)を使用するマルチプライヤの実施例に加えて、ソフトウェア(つまりコンピュータ読み取り可能なプログラムコード)を格納するように設定された、例えば、コンピュータが使用可能な(例えば、読み取り可能な)記憶媒体内に配列されたソフトウェアにおいても、マルチプライヤが具現化される。そのプログラム・コードは、ここに開示されたシステム及び技術の機能又は構成を、あるいはその両方を可能にする。例えば、これは、汎用プログラミング言語(例えばC、C++)、Verilog−HDL、VHDL、AHDL(AlteraHDL)などを含むハードウェア記述言語(HDL)、又は他の利用可能なプログラミング及び/又は回路(つまり回路図)キャプチャのツールの使用を通して達成されることができる。プログラム・コードは、半導体、磁気ディスク、光ディスク(例えばCD−ROM、DVD−ROW)、及びコンピュータ使用可能な(例えば、読み取り可能な)伝送記憶媒体(例えば、搬送波、あるいはデジタル、オプティカル又はアナログ・ベースの記憶媒体を含む他の記憶媒体)において具現化されるコンピュータ・データ信号のようなものを含む任意のよく知られたコンピュータ使用可能な記憶媒体内に配列されることができる。従って、コードは、インターネット及びイントラネットを含む通信ネットワーク上で伝送されることができる。
【0072】
上に説明したシステム及び技術によって、達成される機能、及び/又は提供される構造が、プログラム・コードで実現されるコア(例えばマイクロプロセッサ・コア)内で表されることができ、またICの製品の一部としてハードウェアに変換されることが、理解されるべきである。また、そのシステム及び技術は、ハードウェア及びソフトウェアの組合せとして実現されてもよい。従って、他の実施例も、特許請求の範囲内である。
【図面の簡単な説明】
【0073】
【図1】RISCアーキテクチャで使用される典型的な5ステージのパイプラインのブロック図である。
【図21149563387421_0】実行ユニット及び乗算/除算ユニットを含むプロセッサ・コアのブロック図である。
【図31149563387421_1】2進の多項式算術をサポートする乗算ユニットの1つの実施例内のデータ経路のダイアグラムである。
【図4】一実施例中で算術及び2進の多項式の乗算をサポートするマルチプライヤアレイのブロック図である。
【図5】図4で示した実施例の中で使用される算術マルチプライヤアレイのブロック図である。
【図6】図4で示した実施例の中で使用される2進の多項式マルチプライヤアレイのブロック図である。
【図7A】一実施例において、16ビット乗算による32ビットの演算を示すタイミング図である。
【図7B】一実施例において、32ビット乗算による32ビットの演算を示すタイミング図である。
【図7C】一実施例において、除算の演算を示すタイミング図である。
【図8】乗算インストラクションを実行するためのステップを実現する有限状態マシーンの図である。
【図9】除算インストラクションを実行するためのステップを実現する有限状態マシーンの図である。
【図10A】4つのオペランドを有する一例の部分的入替インストラクションのインストラクションの符号化の図である。
【図10B】図10Aに示すような部分的入替インストラクションにするオペランドとして使用するための例示的な制御ワード符号化フォーマットの図である。
【図11A】制御ワードオペランドを使用しない例示的な部分的入替インストラクションのインストラクション符号化の図である。
【図11B】制御ワードオペランドを使用しない例示的な部分的入替インストラクションのインストラクション符号化の図である。
【図12A】乗算/除算ユニットのレジスタを暗黙的に使用する例示的な部分的入替インストラクションのインストラクション符号化の図である。
【図12B】図12Aに示したような部分的入替インストラクションに対するオペランドとして使用する制御ワード符号化フォーマットの図である。
【図13A】乗算/除算ユニットのレジスタを暗黙的に使用する他の部分的入替インストラクションのインストラクション符号化の図である。
【図13B】図13Aに示したような部分的入替インストラクションに対するオペランドとして使用する制御ワード符号化フォーマットの図である。

Claims (18)

  1. インストラクションを用いて部分的なビットの入れ替えを実行するための方法において、
    データ・ストアからオペレーションを実行するためのインストラクションを取り出すステップと、
    インストラクションが部分的なビット入れ替え処理であることを示すオペレーション・コードを含んでいる場合に、
    インストラクションに含まれるディスティネーション指示子に基づいて、処理結果を格納するディスティネーション・レジスタを特定するステップと、
    インストラクションに含まれる指示子に基づき、入れ替え用のソース・ビットとして使用するソース・レジスタを特定するステップと、
    インストラクションに含まれる部分ビット列ソース指示子に基づき、ディスティネーション・レジスタにコピーされる部分ビット列を格納する部分ビット列レジスタを特定するステップと、
    インストラクションに含まれる制御指示子に基づき、入れ替えビット位置を指定する制御レジスタを特定するステップと、
    特定された制御レジスタの内容に基づいて、特定されたソース・レジスタ中のビット・データを読み出して、特定されたディスティネーション・レジスタの所定のビット位置にコピーし、該所定のビット位置以外の位置に、特定された部分ビット列レジスタから部分ビット列を読み出してコピーするステップと
    からなることを特徴とする方法。
  2. 請求項1記載の方法において、ディスティネーション指示子が暗黙的にディスティネーション・レジスタを識別することを特徴とする方法。
  3. 請求項2記載の方法において、ディスティネーション・レジスタが乗算ユニット・アキュムレータを含むことを特徴とする方法。
  4. 請求項1記載の方法において、ディスティネーション指示子が明示的に汎用レジスタを指定することを特徴とする方法。
  5. 請求項1記載の方法において、部分ビット列ソース指示子が、暗黙的に部分ビット列を記憶するレジスタを識別することを特徴とする方法。
  6. 請求項5記載の方法において、部分ビット列レジスタが乗算ユニット・アキュムレータを含むことを特徴とする方法。
  7. 請求項1記載の方法において、部分ビット列ソース指示子が明示的に汎用レジスタを指定することを特徴とする方法。
  8. 請求項1記載の方法において、ディスティネーション指示子及び部分ビット列ソース指示子はそれぞれ、同じレジスタを識別することを特徴とする方法。
  9. 請求項8記載の方法において、識別されたレジスタが汎用レジスタであることを特徴とする方法。
  10. 請求項8記載の方法において、識別されたレジスタが乗算ユニット・アキュムレータを含むことを特徴とする方法。
  11. 請求項1記載の方法において、ソース・レジスタ中のビット・データが記憶されるディスティネーション・レジスタの所定のビット位置は、ディスティネーション・レジスタ内のビットの連続するブロックであることを特徴とする方法。
  12. 請求項11記載の方法において、ビットの連続するブロックは、ディスティネーション・レジスタの最下位ビットを含むことを特徴とする方法。
  13. 請求項12記載の方法において、ビットの連続するブロックは、12個以下のビットを含むことを特徴とする方法。
  14. 請求項1記載の方法において、制御指示子が1つ以上のソース・ビット識別子を含むことを特徴とする方法。
  15. 請求項14記載の方法において、制御指示子がさらに、
    入替データを受け取るためにビットを選定するマスクと、
    入替データを受け取るためにマスクによって選定されていないビットに割り当てられるデフォルト値を識別するデフォルト・ビットと
    を含むことを特徴とする方法。
  16. 請求項14記載の方法において、1つ以上のソース・ビット識別子の各々が、インストラクション内のフィールドであることを特徴とする方法。
  17. 請求項14記載の方法において、1つ以上のソース・ビット識別子の各々が、制御レジスタに格納されていることを特徴とする方法。
  18. 請求項1記載の方法において、インストラクションがインストラクション・セットの一部であり、該インストラクション・セットがRISCインストラクション・セットを含むことを特徴とする方法。
JP2002568190A 2001-02-21 2002-02-15 部分的ビット入替 Expired - Fee Related JP3837113B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/788,683 US7237097B2 (en) 2001-02-21 2001-02-21 Partial bitwise permutations
PCT/US2002/004427 WO2002069135A1 (en) 2001-02-21 2002-02-15 Partial bitwise permutations

Publications (2)

Publication Number Publication Date
JP2004524621A JP2004524621A (ja) 2004-08-12
JP3837113B2 true JP3837113B2 (ja) 2006-10-25

Family

ID=25145241

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002568190A Expired - Fee Related JP3837113B2 (ja) 2001-02-21 2002-02-15 部分的ビット入替

Country Status (5)

Country Link
US (1) US7237097B2 (ja)
EP (1) EP1379939B1 (ja)
JP (1) JP3837113B2 (ja)
CN (1) CN100437467C (ja)
WO (1) WO2002069135A1 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7181484B2 (en) 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US6975250B2 (en) * 2002-05-28 2005-12-13 Broadcom Corporation Methods and systems for data manipulation
US20040086114A1 (en) * 2002-11-06 2004-05-06 Sun Microsystems, Inc. System and method for implementing DES permutation functions
CN100353702C (zh) * 2004-01-20 2007-12-05 海信集团有限公司 可重构密码协处理器的可重构置换模块
US7873810B2 (en) * 2004-10-01 2011-01-18 Mips Technologies, Inc. Microprocessor instruction using address index values to enable access of a virtual buffer in circular fashion
US7315937B2 (en) * 2004-10-01 2008-01-01 Mips Technologies, Inc. Microprocessor instructions for efficient bit stream extractions
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
US20070124631A1 (en) * 2005-11-08 2007-05-31 Boggs Darrell D Bit field selection instruction
US9146706B2 (en) * 2006-05-05 2015-09-29 Qualcomm Incorporated Controlled-precision iterative arithmetic logic unit
JP5055993B2 (ja) * 2006-12-11 2012-10-24 ソニー株式会社 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
US9135008B2 (en) 2009-09-24 2015-09-15 Freescale Semiconductor, Inc. Device and method for performing conditional bitwise set/clear/toggle manipulations in a general purpose register
US9003170B2 (en) * 2009-12-22 2015-04-07 Intel Corporation Bit range isolation instructions, methods, and apparatus
KR101281275B1 (ko) 2011-09-01 2013-07-03 서울대학교산학협력단 부울 함수 표현을 이용한 블록암호 암/복호화 과정의 난독화 방법 및 이를 위한 장치
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
US9619236B2 (en) 2011-12-23 2017-04-11 Intel Corporation Apparatus and method of improved insert instructions
US20170235516A1 (en) * 2011-12-23 2017-08-17 Intel Corporation Apparatus and method for shuffling floating point or integer values
CN104025040B (zh) * 2011-12-23 2017-11-21 英特尔公司 用于混洗浮点或整数值的装置和方法
WO2013095637A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method of improved permute instructions
WO2013095611A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for performing a permute operation
US20140013082A1 (en) * 2011-12-30 2014-01-09 Intel Corporation Reconfigurable device for repositioning data within a data word
CN103186363B (zh) * 2013-03-26 2015-09-30 北京经纬恒润科技有限公司 一种数值编辑方法及系统
US9645820B2 (en) 2013-06-27 2017-05-09 Intel Corporation Apparatus and method to reserve and permute bits in a mask register
FR3021428B1 (fr) * 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
US20160179548A1 (en) * 2014-12-22 2016-06-23 Intel Corporation Instruction and logic to perform an inverse centrifuge operation
US9959247B1 (en) 2017-02-17 2018-05-01 Google Llc Permuting in a matrix-vector processor
US10521338B2 (en) * 2017-06-05 2019-12-31 Arm Ltd. Method, system and device for memory device operation

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2253415A5 (ja) * 1973-12-04 1975-06-27 Cii
US4085447A (en) * 1976-09-07 1978-04-18 Sperry Rand Corporation Right justified mask transfer apparatus
US4928223A (en) 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
US4569016A (en) * 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
US4949250A (en) 1988-03-18 1990-08-14 Digital Equipment Corporation Method and apparatus for executing instructions for a vector processing system
JP2646778B2 (ja) * 1990-01-17 1997-08-27 日本電気株式会社 ディジタル信号処理装置
US5765011A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams
US5493687A (en) 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
US5471628A (en) * 1992-06-30 1995-11-28 International Business Machines Corporation Multi-function permutation switch for rotating and manipulating an order of bits of an input data byte in either cyclic or non-cyclic mode
JPH0720778A (ja) 1993-07-02 1995-01-24 Fujitsu Ltd 剰余計算装置、テーブル作成装置および乗算剰余計算装置
US6067615A (en) 1993-11-30 2000-05-23 Trw Inc. Reconfigurable processor for executing successive function sequences in a processor operation
US5673407A (en) 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
US5781457A (en) 1994-03-08 1998-07-14 Exponential Technology, Inc. Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU
FR2723223B1 (fr) * 1994-07-29 1996-08-30 Sgs Thomson Microelectronics Procede de brouillage numerique et application a un circuit programmable
US5748979A (en) 1995-04-05 1998-05-05 Xilinx Inc Reprogrammable instruction set accelerator using a plurality of programmable execution units and an instruction page table
US5696937A (en) 1995-04-28 1997-12-09 Unisys Corporation Cache controller utilizing a state machine for controlling invalidations in a network with dual system busses
GB9509987D0 (en) 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
US6381690B1 (en) * 1995-08-01 2002-04-30 Hewlett-Packard Company Processor for performing subword permutations and combinations
US6295599B1 (en) * 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5768172A (en) 1995-10-04 1998-06-16 Apple Computer, Inc. Graphic software functions without branch instructions
US5819117A (en) 1995-10-10 1998-10-06 Microunity Systems Engineering, Inc. Method and system for facilitating byte ordering interfacing of a computer system
US6041403A (en) * 1996-09-27 2000-03-21 Intel Corporation Method and apparatus for generating a microinstruction responsive to the specification of an operand, in addition to a microinstruction based on the opcode, of a macroinstruction
US5729554A (en) 1996-10-01 1998-03-17 Hewlett-Packard Co. Speculative execution of test patterns in a random test generator
US5909572A (en) * 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
JPH10171350A (ja) 1996-12-10 1998-06-26 Hitachi Ltd ハッシュ値生成方法および装置
FR2758195B1 (fr) 1997-01-09 1999-02-26 Sgs Thomson Microelectronics Coprocesseur d'arithmetique modulaire comprenant deux circuits de multiplication operant en parallele
US6154834A (en) 1997-05-27 2000-11-28 Intel Corporation Detachable processor module containing external microcode expansion memory
US6009450A (en) 1997-12-24 1999-12-28 Motorola, Inc. Finite field inverse circuit
US6044389A (en) * 1997-12-29 2000-03-28 Quantum Corporation System for computing the multiplicative inverse of a field element for galois fields without using tables
US6138229A (en) 1998-05-29 2000-10-24 Motorola, Inc. Customizable instruction set processor with non-configurable/configurable decoding units and non-configurable/configurable execution units
US6141786A (en) * 1998-06-04 2000-10-31 Intenational Business Machines Corporation Method and apparatus for performing arithmetic operations on Galois fields and their extensions
US6199087B1 (en) 1998-06-25 2001-03-06 Hewlett-Packard Company Apparatus and method for efficient arithmetic in finite fields through alternative representation
US6199088B1 (en) * 1998-06-30 2001-03-06 Quantum Corp. Circuit for determining multiplicative inverses in certain galois fields
DE19907575A1 (de) 1999-02-23 2000-08-24 Philips Corp Intellectual Pty Schaltungsanordnung zum Liefern eines Speisestromes
JP2001147799A (ja) * 1999-10-01 2001-05-29 Hitachi Ltd データ移動方法および条件付転送論理ならびにデータの配列換え方法およびデータのコピー方法
US6430684B1 (en) * 1999-10-29 2002-08-06 Texas Instruments Incorporated Processor circuits, systems, and methods with efficient granularity shift and/or merge instruction(s)
US6615366B1 (en) 1999-12-21 2003-09-02 Intel Corporation Microprocessor with dual execution core operable in high reliability mode
US6715066B1 (en) * 2000-04-07 2004-03-30 Sun Microsystems, Inc. System and method for arranging bits of a data word in accordance with a mask
US6618804B1 (en) * 2000-04-07 2003-09-09 Sun Microsystems, Inc. System and method for rearranging bits of a data word in accordance with a mask using sorting
AU2001288209A1 (en) 2000-05-05 2001-11-26 Ruby B. Lee A method and system for performing permutations using permutation instructions based on modified omega and flip stages
US6625737B1 (en) 2000-09-20 2003-09-23 Mips Technologies Inc. System for prediction and control of power consumption in digital system

Also Published As

Publication number Publication date
JP2004524621A (ja) 2004-08-12
EP1379939A4 (en) 2008-08-20
CN100437467C (zh) 2008-11-26
EP1379939A1 (en) 2004-01-14
CN1503936A (zh) 2004-06-09
WO2002069135A1 (en) 2002-09-06
US7237097B2 (en) 2007-06-26
EP1379939B1 (en) 2011-09-21
US20020116602A1 (en) 2002-08-22
WO2002069135A9 (en) 2003-10-09

Similar Documents

Publication Publication Date Title
JP3837113B2 (ja) 部分的ビット入替
JP5231336B2 (ja) 拡張精度アキュムレータ
US7599981B2 (en) Binary polynomial multiplier
US6922716B2 (en) Method and apparatus for vector processing
JP4477279B2 (ja) 結合された積和演算器を備えたデジタル信号プロセッサ
US8473719B2 (en) Data packet arithmetic logic devices and methods
JP2009282992A (ja) 多項式演算オペレーション
JP3750820B2 (ja) パック・データの乗加算演算を実行する装置
WO2006029152A2 (en) Multiply instructions for modular exponentiation
JP2006146644A (ja) プロセッサ
US8463837B2 (en) Method and apparatus for efficient bi-linear interpolation and motion compensation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20051201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051206

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060303

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060310

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060606

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060728

R150 Certificate of patent or registration of utility model

Ref document number: 3837113

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090804

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100804

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110804

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110804

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120804

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120804

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130804

Year of fee payment: 7

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

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

LAPS Cancellation because of no payment of annual fees