JP3547052B2 - Cisc型からrisc型命令への変換のためのアライメント並びにデコーディング - Google Patents
Cisc型からrisc型命令への変換のためのアライメント並びにデコーディング Download PDFInfo
- Publication number
- JP3547052B2 JP3547052B2 JP51730693A JP51730693A JP3547052B2 JP 3547052 B2 JP3547052 B2 JP 3547052B2 JP 51730693 A JP51730693 A JP 51730693A JP 51730693 A JP51730693 A JP 51730693A JP 3547052 B2 JP3547052 B2 JP 3547052B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- bucket
- latch
- bytes
- last
- 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 - Lifetime
Links
- 238000006243 chemical reaction Methods 0.000 title description 4
- 238000000034 method Methods 0.000 claims description 38
- 238000000605 extraction Methods 0.000 claims description 24
- 150000001875 compounds Chemical class 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 5
- 230000010354 integration Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 47
- 238000006073 displacement reaction Methods 0.000 description 37
- 239000000284 extract Substances 0.000 description 16
- 230000006870 function Effects 0.000 description 16
- 230000008569 process Effects 0.000 description 16
- 239000000872 buffer Substances 0.000 description 10
- 102100040862 Dual specificity protein kinase CLK1 Human genes 0.000 description 5
- 101000749294 Homo sapiens Dual specificity protein kinase CLK1 Proteins 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 102100028007 Cystatin-SA Human genes 0.000 description 2
- 102100038387 Cystatin-SN Human genes 0.000 description 2
- 101000722958 Homo sapiens Cystatin-SA Proteins 0.000 description 2
- 101000884768 Homo sapiens Cystatin-SN Proteins 0.000 description 2
- 101000583148 Homo sapiens Membrane-associated phosphatidylinositol transfer protein 2 Proteins 0.000 description 2
- 101100502336 Komagataella pastoris FLD1 gene Proteins 0.000 description 2
- 102100030352 Membrane-associated phosphatidylinositol transfer protein 2 Human genes 0.000 description 2
- XULWNLNVIZGOMP-UHFFFAOYSA-L NIR-3 dye Chemical compound [K+].[K+].[O-]S(=O)(=O)CCCCN1C2=CC=C(C(O)=O)C=C2C(C)(C)C1=CC=CC=CC=CC1=[N+](CCCCS([O-])(=O)=O)C2=CC=C(S([O-])(=O)=O)C=C2C1(C)C XULWNLNVIZGOMP-UHFFFAOYSA-L 0.000 description 2
- 101100421128 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SEI1 gene Proteins 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 101100396930 Pseudomonas aeruginosa imm1 gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000012925 reference material Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
- G06F9/30152—Determining start or end of instruction; determining instruction length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30163—Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B82—NANOTECHNOLOGY
- B82Y—SPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
- B82Y10/00—Nanotechnology for information processing, storage or transmission, e.g. quantum computing or single electron logic
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
以下は同一承継人の出願に係る同時係属中の出願である。
米国出願番号07/802,816、1992年12月6日出願(代理人整理番号SP024)、発明の名称「RAMセル及び巡回冗長検査回路搭載ROM(A ROM with RAM Cell and Cyclic Redundancy check Circuit)」、米国出願番号07/817,810、1992年1月8日出願(代理人整理番号SP015)、発明の名称「高性能RISC型マイクロプロセッサ・アーキテクチャ(High Performance RISC Microprocessor Architecture)、米国出願番号07/817,809、1992年1月8日出願(代理人整理番号SP021)、発明の名称「拡張可能RISC型マイクロプロセッサ・アーキテクチャ(Extensible RISC Microprocessor Architecture)」。
上記の出願の開示は参照することにより本明細書に組み込まれているものとする。
発明の背景
1. 産業上の利用分野
本発明は一般的にはスーパースカラ方式のRISC型マイクロプロセッサに関し、より具体的には複合命令をRISCベースのハードウエアで実行できるようにするためのCISC型からRISC型へのマイクロプロセッサ命令のアライメント・ユニットとデコード・ユニットに関する。
2. 関連技術
可変長命令を使用する複合命令セット・コンピュータ(CISC型コンピュータ)は全て、命令ストリームの中で発生する各命令の長さを確定するという問題に直面している。命令は連続するバイトからなるデータとしてメモリの中に詰め込まれる。従って、命令のアドレスが与えられれば、第1命令の長さがわかっている場合次の命令の開始アドレスを確定することは可能である。
従来のプロセッサでは、この長さの確定が、実際の各命令実行のような、命令ストリームの処理における他のステージに比べて、性能に大きく影響することはない。その結果、かなり単純な回路が典型的に使用されている。一方、スーパースカラ型の縮小命令セット・コンピュータ(RISC)ははるかに高速で命令をプロセスできるが、複数の命令を並列で実行するためにはるかに高速でメモリから命令が抽出されなければならない。命令がメモリから抽出される速度によって課せられるこの制限要因はフライン・ボトルネック(Flynn Bottleneck)と呼ばれる。
各命令の長さを確定し、さらにその命令を命令ストリームから引き出すタスクは命令整列装置(IAU)と呼ばれる機能ユニットによって実行される。このブロックには命令の長さを確定するための、デコーダ・ロジックと、命令データをそのデコーダ・ロジックに合わせてアライメントするためのシフタが含まれなければならない。
インテル社(Intel)の80386マイクロプロセッサでは、命令の第1バイトが命令長全体に関して多くのことを暗示しており、最終の長さを知る前に追加バイトのチェックが必要になることがある。さらに、追加バイトから他の追加バイトを特定できることがある。従って、プロセスが本質的にシーケンシャルであるため、X86系の命令の長さを即時に確定するのは極めて困難である。
i486のプログラマ・リファレンス・ガイド(i486 Programmer's ReferenceGuide)に提供されている情報に基づき、i486に採用されているアライメント・ユニットに関して幾つかの結論を引き出すことができる。i486のIAUは命令の最初の数バイトだけを見るように設計されている。これらのバイトがその長さを十分には特定していない場合、これらの初期バイトが抽出されさらにそのプロセスが残りのバイトに対して繰り返される。このプロセスの繰り返しは毎回フル・サイクルを要する。従って、最悪の場合、命令が完全にアライメントされるには数サイクルかかることがある。
i486のIAUが追加サイクルを要するのはプレフィックス形や拡張型(2バイト)の演算コードが使われている場合などである。これらの演算コードは共にi486のプログラムでは共通のものである。その上、複合命令はまたディスプレースメント及びイミディエト・データから成り立っていることもある。i486ではこのデータを抽出するのに追加の時間が必要になる。
CISC型プロセッサ命令のフォーマット例は第1図に示す通りである。この例は可変長のi486CISC型命令の可能バイトを表している。命令はバイト境界上のメモリに格納されている。命令の長さは最短で1バイト、最長はプレフィックスを入れて15バイトである。命令の全長はPrefixes Opcode、ModR/M及びSIBのバイトによって確定される。
発明の概要
本発明は、Intel 80x86マイクロプロセッサのような複合命令セット・コンピュータ(CISC)、またはその他のCISC型プロセッサをエミュレートするように設計されたスーパースカラ型の縮小命令セット・コンピュータ(RISC)・プロセッサを有するマイクロプロセッサのサブシステム並びに方法である。
本発明におけるCISC型からRISC型への変換(translation)処理には2つの基本的なステップがある。CISC型命令は先ず命令ストリームから抽出され、そして次にRISC型プロセッサによって処理され得るナノ命令を生成するためにデコードされなければならない。これらのステップはそれぞれ命令アライメント・ユニット(IAU)と命令デコード・ユニット(IDU)によって実行される。
IAUは命令データ上の古い方から23番目までのバイトを調べることによって命令ストリームから個々のCISC型命令を抽出する働きをする。IAUは命令FIFOのボトム・ラインにあるバイトのいずれから始まって継続する8バイトを抽出する。各クロック・フェーズの間に、IAUは現在の命令の長さを確定し、この情報を使って2個のシフタを制御してその現在の命令をシフトアウトするのであるが、そのストリームには次に来る続きの命令が残っている。IAUは、その結果、サイクル当たり2命令というピーク・レートで、各クロック・フェーズの間にアライメントされた命令を出力する。このベスト・ケースの性能の例外については以下の項2.0と2.1で説明する。
CISC型命令がメモリから抽出された後、IDUがこれらのアライメントされた命令をナノ命令と呼ばれるRISC型命令と同じシーケンスに変換する働きをする。IDUはアライメントされた各命令はIAUからの出力であるとみなして、必要なナノ命令の数やタイプ、データ・オペランドのサイズ、さらに、アライメントされた命令を完了するのにメモリ・アクセスが必要か否かなどといった様々な要因を確定するためにその命令をデコードする。単純な命令は直接デコーダ・ハードウエアによってナノ命令に変換されるのに対し、より複雑なCISC型命令はマイクロコード・ルーチンと呼ばれる特殊命令セットのサブルーチンによってエミュレートされ、そのサブルーチンは次にナノ命令にデコードされる。この情報は、2つの命令につき完全な1サイクルで収集され、その次に命令バケットを形成すべく一つにまとめられるが、その中には両方のソース命令に対応するナノ命令が含まれている。このバケットは次にRISC型プロセッサによる実行のため命令実行ユニット(IEU)に転送される。ナノ命令バケットの実行は本発明の適用範囲外である。
本発明の前記、ならびにそれ以外の特徴並びに利点については、添付の図面に示すように、以下の本発明の好適な実施例のより詳細な説明から明らかになるであろう。
【図面の簡単な説明】
本発明は添付の図面を参考にすることにより、より良く理解されることであろう。
第1図は従来のCISC型命令のデータ構造フォーマットを示す。
第2図は本発明の命令プリフェッチ・バッファのブロック図を示す。
第3図は本発明の命令アライメント・ユニットのブロック図を示す。
第4図は本発明のIAUの命令抽出並びにアライメント方法を表す代表的なフローチャートを示す。
第5図は第3図のブロック図並びに第4図のフローチャートに関連する簡略タイミング図を示す。
第6図は本発明のSTACKのブロック図である。
第7A図は本発明の次命令検出器(NID)のブロック図である。
第7B図は本発明の残存次命令検出器(RNID)のブロック図である。
第8図は本発明のイミディエト・データ及びディスプレースメント検出器(IDDD)のブロック図である。
第9図は本発明のプレフィックス検出器(PD)のブロック図である。
第10図は本発明のプレフィックス数(PRFX_NO)デコーダのブロック図である。
第11図は本発明のナノ命令バケットのブロック図である。
第12図は本発明の命令デコード・ユニット(IDU)の代表的なブロック図である。
第13A〜13C図は本発明の命令ビット・マップを示す。
第14図は本発明のIDDDの命令デコーダのセクションの一例を示すブロック図である。
第15図は第14図に示した命令デコーダのデコーダ一式の代表的なブロック並びにロジック図を表わす。
第16A〜16C図は本発明のデコードFIFOの概念的なブロック図を示す。
第17図は本発明のナノ命令のフィールド・フォーマットの例を示す。
目次
好適な実施例の詳細な説明 7
1.0命令フェッチ・ユニット 8
2.0命令アライメント・ユニットの概略 9
2.1命令アライメント・ユニットのブロック図 11
3.0命令デコード・ユニットの概説 32
3.1マイクロコード・ディスパッチ・ロジック 34
3.2メールボックス 37
3.3ナノ命令フォーマット 38
3.4特殊命令 39
3.5命令のデコード・ユニットのブロック図 41
4.0デコードされた命令FIFO 52
好適な実施例の詳細な説明
本項で説明する基本的な概念については以下の参考文献により詳細に記述されている:「Superscalar Microprocessor Design」、Mike Johnson著、ニュージャージー州、イングルウッドクリフ所在のPrentice−Hall社より1991年出版。「Computer Architecture−A Quantitative Approach」、John L.Hennessy他著、カリフォルニア州、サンマテオ所在のMorganKaufmannPublishers社より1990年出版。「i486 Microprocessor Programmer's Reference Manual」及び「i486 Microprocessor Hardware Reference Manual」、カリフォルニア州、サンタクララ所在のIntel Corporationより1990年発行でオーダ番号はそれぞれ240486及び240552。これらの出版物の開示は参考することにより本明細書に組み込まれているものとする。
1.0命令フェッチ・ユニット
本発明の命令フェッチ・ユニット(IFU)は命令メモリや、命令キャッシュ等の中に格納された命令ストリームから命令バイトをフェッチし、さらにその命令バイトを実行のためにデコーダ部に供給するために使用される。命令アライメント・ユニットによってアライメントされるべき命令は従ってIFUから供給される。第2図に示すのはそのIFU内の3個の命令プリフェッチ・バッファ200のブロック図であり、それは主命令バッファ(MBUF)204、エミュレーション命令バッファ(EBUF)202、及び目標命令バッファ(TBUF)206から成っている。そのプリフェッチ命令バッファは命令キャッシュから128ビット(16バイト)の命令ストリームを単一サイクルでロードすることができる。このデータはIAUによって使用されるべく3個のバッファのうちの1個に保持される。
通常のプログラム実行中、MBUF 202は命令バイトをIAUに供給するために使用される。条件付きの制御フロー(即ち、条件付き分岐命令)に遭遇すると、MBUF202からの実行が継続している間、そのブランチのターゲット・アドレスに対応する命令はTBUF206に格納される。一度ブランチの決定が下されると、分岐しない場合はTBUF 206の廃棄、分岐する場合にはTBUF 206のMBUFへの転送、のいずれかが行なわれる。いずれの場合も、MBUFからの実行は続行する。
EBUF 204の動作は多少異なる。エミュレーション・モードに入ると、エミュレーション命令かもしくは例外によって、命令のフェッチングと実行がEBUF 204に転送される。(エミュレーション・モード及び例外処理については共に以下に詳細に説明する。)プロセッサがエミュレーション・モードになっている限り、実行はEBUF204から続行する。エミュレーション・ルーチンが終わると、実行はMBUF204に残っている命令データから続けられる。これにより、エミュレーション・ルーチン実行後、主命令データを再度フェッチする必要がなくなる。
2.0命令アライメント・ユニットの概略
本発明との組み合わせで命令アライメント・ユニットは、スーパースカラ型プロセッサの卓越したサイクル当たりの命令スループットを用いることによって、普通のケースを高速処理にするRISC戦略を用いる。
本発明において、「アライメントする」という用語は、後でデコードするために或る命令のバイトを命令ストリームで隣接するバイトと区別できるように位置付けることを意味する。IAUは、現在の命令のバイト数を確定することによって、現在の命令の終わりを次の命令の始まりと区別する。IAUは次に、IDUに入れられる最下位のバイトが現在の命令の第1バイトとなるように、現在の命令をアライメントする。バイトはいろいろ異なる順序でIDUに供給することもできる。
本発明のIAUのサブシステムはあらゆるクロック・レートにおいてサイクル当たり2命令の速度でほとんどの一般的な命令をアライメントすることができ、縮小クロック速度でこれと同じレートでその他のほとんどの命令をアライメントすることができる。プレフィックスを含む命令にアライメントに半サイクル余計に必要である。イミディエト・データ及びディスプレースメントのフィールドは並列で抽出されるために余分な時間は不要である。
さらに、IAUのアライメント・タイムは最悪のケースで1命令当たりわずか2.0サイクルであり、従来のCISC型プロセッサの一般的な命令の多くをアライメントするのに要する時間より短い。命令が一つ以上のプレフィックス(アライメントに要するサイクル合計の半分)を有し、その命令が長さの確定に完全に1サイクルを要するセットからのもので、且つその命令(プレフィックスを含まない)の長さが8バイトより長い場合(半サイクル余計に必要だから、結果として合計で完全な2サイクルになる)には最悪のケースが起こる。
幾つかの構造上の特徴によってこうした性能が実現される。第一に、IAUは、アライメント回路中のフェーズ・ラッチとマルチプレクサを交互に使用することによりクロックのフェーズ毎に完全なアライメント操作を実行するように設計されている。第二に、デコード・ロジックは各命令の長さを確定するために考慮に入れなければならないビット数に基づいてCISC型命令を2つのカテゴリーに分ける。即ち、少数ビットで指定された長さの命令は単一フェーズ(半サイクル)でアライメントされるのに対し、他の命令は典型的に、さらに1クロック・サイクルが必要である。最後に、IAUは命令ストリームから一回だけのシフトで8バイトまでを抽出できる。これにより、長い命令(i486では15バイトまで)を数少ないシフト命令でアライメントすることが可能になり、且つほとんどの命令が一回だけのシフトでアライメントできるようになる。
高速且つ正確にCISC型命令をデコードするために以下のタスクがIAUによって実行される。
プレフィックス・バイトの存在とその長さを検出する。
演算コード、ModR/M及びSIB(scale、index、base)のバイトを分離する。
命令の長さ(次の命令の記憶位置を示す)を検出する。
以下の情報を命令デコード・ユニット(IDU)に送る:
− 演算コード、即ち8ビットに任意の拡張3ビットを足したもの。2バイトの演算では、第1バイトは常にOF hexだから、2番目のバイトが演算コードとして送られる。
− ModR/Mバイト、SIBバイト、ディスプレースメント及びイミディエト・データ。
− プレフィックス数及びタイプに関する情報。
演算コード・バイトはその命令によって実行された演算を指定する。ModR/Mバイトは、命令がメモリのオペランドを参照する場合に用いられるアドレス形式を指定する。ModR/Mバイトはまた2番目のアドレッシング・バイト、即ち、SIB(scale、index、base)バイトを参照することもでき、そのSIBバイトはアドレッシング形式を十分に指定することが必要とすることがある。
2.1命令アライメント・ユニットのブロック図
IAUのブロック図は第3図に示す通りである。この図は2つの部分、即ち、メインデータパス302(破線で囲んだ部分)とプレデコーダ304(破線で囲んだ部分)とに分れる。命令のシフティングや抽出はメインデータパス302で起こるのに対し、長さの確定やデータパスの制御はプレデコーダ304によって処理される。
メインデータパス302は幾つかのシフタ、ラッチ及びマルチプレクサから成り立っている。抽出シフタ306はバイトで構成された命令データをIFUから受け取る。IFI0b_バス[127:0]とIFI1b_バス[55:0]の2本のバス(概ね303で示した)はIFUの命令データ出力を表している。IFUはIAUからの要求に答えてアドバンス・バッファ・リクエスト(ADVBUFREQ)ライン308上でこの命令情報を更新する。ADVBUFREQ信号の生成については以下に説明する。現在の命令に該当する8バイトのデータは抽出シフタから出力され且つバス307上の整列シフタ310に送られる。整列シフタは合計で16バイトの命令データを保持し且つフェーズ毎に8バイトまでシフトすることができる。シフトアウトによってプレフィックスが検出される場合、命令からプレフィックスを切り離すために整列シフタが使用される。整列シフタはまた、命令をより低位のバイトにアライメントし、さらにアライメント後にその命令全体をシフトアウトするために使用される。
その8バイトはバス309を介してイミディエト・データシフタ(IMMシフタ312)とディスプレースメント・シフタ(DISPシフタ314)にも送られる。IMMシフタ312は現在の命令からイミディエト・データを抽出し、DISPシフタ314はディスプレースメント・データを抽出する。これら2個のシフタへのデータはアライメントされた命令との同期を維持するためにΩサイクル遅延素子316によって遅延させられる。
整列シフタ310はバス311上のアライメントされた次の命令を2個の整列_IRラッチ318または320へ出力する。これらのラッチはシステム・クロックの対向フェーズ上で動作する。それによってサイクル毎に2つの命令がラッチされることになる。整列_IRラッチ318及び320はアライメントされた命令を2本の出力バス321上に出力する。そのラッチの1個が新規の値を受け取るフェーズ期間中に、他のラッチの出力(アライメントされた現在の命令)はマルチプレクサ(MUX 322)によって選択される。MUX 322はそのアライメントされた現在の命令をアライメントされた命令バス323に出力する。出力323はIAUの一次出力である。この出力は、現在の命令の長さを確定するためにプレデコーダ304によって使用され、且つ次の命令が抽出されるデータとして整列シフタ310にフィードバックされる。アライメントされた現在の命令はバス325、スタック334、さらに先のバス336を介して整列シフタ310にフィードバックされる。バス336はアライメントされた現在の命令に関する情報をΩサイクル・データ遅延316にも送る。
IMMシフタ312とDISPシフタ314はそれぞれイミディエト・データとディスプレースメント・データをシフトすることができる。何故ならば、それらはシフトするのに合計16バイトが必要だからである。Ωサイクル・データ遅延316はシフタへの命令バイトを1本のバス上に出力する。IMMシフタ312は現在の命令に対応するイミディエト・データをイミディエト・データバス340上に出力する。DISPシフタ314は現在の命令に対応するディスプレースメント・データをディスプレースメント・データバス342上に出力する。
プレデコーダ304は、次命令検出器(NID)324、イミディエト・データ及びディスプレースメント検出器(IDDD)326、及びプレフィックス検出器(PD)328の3つのデコーダ・ブロックから成り立っている。NIDとPDは整列シフタ及び抽出シフタを制御し、IDDDはIMMシフタ312とDISPシフタ314を制御する。
PD328は1つの命令中のプレフィックスの存在を検出するように設計されている。PD328は存在するプレフィックス数を確定し、且つ次の半サイクルで命令ストリームからプレフィックスを抽出するために、ライン331、MUX330、及びライン333を介して整列シフタ310とカウンタシフタ308にシフト制御信号を供給する。さらに、PD328はプレフィックス自体をデコードしてこのプレフィックス情報をIDUへの出力ライン329上に供給する。
PD328の基本アーキテクチャは4個の同一の検出装置(プレフィックスを4つまで検出するため)と、プレフィックス自体をデコードするための第2ブロックのロジックとで構成されている。CISC型フォーマットはプレフィックス発生の順序を定義するが、本発明では初めての4バイト位置のそれぞれにおける全てのプレフィックスの存在を検査する。さらに、デコーダの減速要求を利用すべく、プレフィックスの存在を検出する機能とプレフィックスをデコードする機能は別々になっている。PD328のアーキテクチャについて以下にさらに詳細に述べる。
IDDD 326は各命令からイミディエト・データとディスプレースメント・データを抽出するように設計されている。IDDDはそれらの存在に係わりなく常にこの2つのフィールドの抽出を試みる。IDDD326はIMMMシフタ312とDISシフタ314を1対のライン344と346上でそれぞれ制御する。IDUはアライメントされた命令をプロセスするのに半サイクルを要するが、イミディエト・データ及びディスプレースメント・データには無用のものである。従って、イミディエト・データ及びディスプレースメント・データは、IDDD326がシフト量の計算にもっと時間をかけられるようにするために、Ωサイクル・データ遅延316によって遅延させられる。何故ならば、同じフェーズでデコードとシフトを実行するNID 324と異なり、シフトはその次にくるフェーズで起こるからである。
NID324はプレデコーダの心臓部である。一度プレフィックスが取り除かれると、NID324は各命令の長さを確定する。NID324は制御ライン325、MUX330、さらにライン333を介して整列シフタ310とカウンタシフタ308を制御する。NIDは2つのサブブロック、サブセット次命令検出器(SNID702)と、さらに残存次命令検出器(RNID 704)とから成り立っており、RNID 704については第7A・7B図との関連において説明する。
その名が示すように、SNID702はCISC型命令セットのサブセットの長さを確定する。サブセット内の命令はSNIDによってサイクル当たり2命令の割合でアライメントされる。
RNID 704は残る全ての命令の長さを確定し、さらにあと半サイクルを必要とし、それによってデコード時間合計は完全な1サイクルになる。サブセットに命令が入っているかどうかの確定はSNIDによってなされ、さらにこの信号はSNIDかRNIDかいずれかの出力を選択するためにNID内で使用される。
新規の命令がアライメントされている場合、初めはサブセットの中に存在していると仮定され、それによってSNIDの出力が選択される。SNIDがその命令はRNIDによって処理されるべきものであると(この同じ半サイクル中に)判定した場合、信号がアサートされ、IAUが現在の命令をループし、それをさらに半サイクルの間保持する。この2番目の半サイクルの間に、RNIDの出力が選択され、且つ命令が適正にアライメントされる。
NIDのこのアーキテクチャには幾つかの利点がある。その一つは先に既に述べたが、サイクル時間が十分に長ければ、SNID・RNID間の選択が1回の半サイクルの間に実行でき、それによって全ての命令が単一フェーズ(プレフィックスや8バイトより長い命令を抽出する時間は含まない)内にアライメントされるようになることである。これにより、ハードウエアを追加せずに低サイクル・レートでサイクル当たりの性能を向上させることができる。
第2の利点は、選択信号をアライメント取消信号として使用できることである。何故ならば、選択信号はIAUがSNIDシフト出力を無視し、そして、さらに半サイクルの間現在の命令を保持するからである。特定命令の組み合わせまたは長さを予測し、続いてその予測が正しくなければ取消信号を生成するようにSNIDを設計することができる。例えば、この方法は一回の半サイクルで複数の命令をアライメントするために使用することができ、これによって性能がさらに向上する。
IAUもカウンタシフタ332から成り立っている。カウンタシフタ332はライン335を介して抽出シフタ306のシフト量を確定し、さらにADVBUFREQライン308を用いてIFUに追加のCISC型命令バイトを要求するために使用される。カウンタシフタ332の機能については次のIAUの動作フローチャートとタイミング図の例を検討することにより良く理解されるであろう。
第4図は本発明のIAUによって実行される命令バイト抽出とアライメントの概略フローチャートである。ステップ402に示すように、新規のデータがIFUのMBUF204(BUCKET_#0と呼ばれる)の最低ライン205に入力されると、抽出シフタ306は第1命令から始まる8バイトを抽出する。ステップ404に示すように、その8命令バイトは整列シフタ310をバイパスして整列_IRラッチ318及び320に渡される。ステップ406に示すように、IAUは次に整列_IRラッチ中にアライメントされた命令を保持しながら次のクロック・フェーズがくるのを待つ。
次のクロック・フェーズの間に、IAUはIDU、STACK 334、IDDD326、NID324、PD328及びΩサイクル・データ遅延316にアライメントされた命令を出力する。イミディエト・データとディスプレースメントに関する情報は次にバス340と342上のそれぞれのIDUへ出力される。このデータは、もし存在していたら、その前のフェーズでアライメントされた命令に対応する。これらのオペレーションは概ね第4図のステップ408に示す通りである。
プレフィックスが存在しているかを確定するために、次にIAUによって条件文409が入力される。この確定はPD(プレフィックスデコーダ)328によって行なわれる。条件文409を出る矢印「Yes」で示すように、PDによって1つ以上のプレフィックスが検出されれば、そのプロセスはステップ410へと進み、そこでIAUはMUX 330でPDの出力を選択する。ステップ412に示すように、そのデコードされたプレフィックス情報は次に対応するアライメントされた命令とともに次のフェーズでIDUに送られるべくラッチされる。条件文409を出る矢印「No」で示すように、プレフィックス命令バイトが検出されなければ、ステップ414に示すようにMUX 330でNID 324の出力が選択される。
一度ステップ412または414が完了すれば、ブロック416に示すように、抽出シフタ306を制御して、整列シフタ310とΩサイクル・データ遅延316に次の8バイトの命令データを供給するためにカウンタシフタ332の現在の出力が使用される。次に、IAUはMUX330の出力をシフト_Aと呼ばれる変数として用いる。この変数は整列シフタ310を制御して次の命令をアライメントするために用いられる。シフト_Aは、次のフェーズの間に用いるシフト量を計算するために、現在の抽出シフタのシフト量(BUF_カウントと呼ばれる)にも加えられる。この加算は、ステップ408に示すように、カウンタシフタ308において行なわれる。
IAUによって行なわれる次の操作のステップは、ステップ420に示すように、整列_IRラッチ内の整列シフタの出力をラッチすることである。ステップ422に示すように、IDDD326内のイミディエト・データとディスプレースメント・データの位置が計算され、さらにこのシフト量がΩサイクルだけ遅延させられる。次に、ステップ424に示すように、IAUはその前の半サイクルの間に計算されたシフト量を用い、現在IMMシフタ322とDISPシフタ314に入力中のデータをシフトする。最後に、このプロセスをステップ406から始めて繰り返して行ない、次のクロック・フェーズを待つ。408から422までのステップが命令ストリーム中に残存する命令バイトに対して繰り返される。
第5図に示すのは第3図のIAUに関連するタイミング図である。第5図の上部に2つの命令バケットが表示されている。バケット_#0及びバケット_#1とラベルの付いたこれらの2つの命令バケットはそれぞれ第3図に示したIFU(図示していない命令メモリから)によってIAUに供給される16命令バイトから成り立っている。命令のアライメントはいつもバケット_#0の右(即ち、一番下のバケット)から行なわれる。本実施例においては、バケット_#0及びバケット_#1がIFUのMBUF 204の一番下の2つのバケットである。他の配列も可能である。
本実施例において、IAUに送られた最初の3命令はOP0、OP1、OP2で、長さはそれぞれ5バイト、3バイト、11バイトである。命令OP2の最初の8バイトだけかバケット_#1に収まることに注意すること。残る3バイトはバケット_#1の始まりにラップされる。この実施例を簡素化するために、これらの3命令にはプレフィックス・バイトがないものと仮定する。プレフィックスが検出されれば、1命令のアライメントのために1フェーズの追加が必要になる。
命令はバケットのどの位置からでも開始できる。命令は一番下のバケットのいずれかの位置から始まって一度に8バイトまで抽出される。IAUは本実施例におけるOP2のような、2番目のバケットに入り込んでいる命令に対処するため、2つのバケットを調べる。
このタイミング図におけるトレース「1」は2つのシステム・クロックの一つ、CLK0である。本実施例において、このシステム・クロックは半サイクルが6ナノ秒になっている。別のシステム・クロックCLK1と対比して逆のフェーズを有するCLK0はT6で上がりT0で下がる。その場合、T0はCLK1の立ち上がりエッジであり、T6がCLK0の立ち上がりエッジである。説明をわかりやすくするために第5図において主な3つのクロック・フェーズには_1、_2、_3のラベルを付けてある。
このタイミング図におけるトレースの「2」と「3」は入力バスIFI1BとIFI0B上の命令データを表している。502に示すように、新規のバケット_#0は_1が始まるところのIFI0B上で使用可能になる。少し後に、OP0(B#0;7−0)で始まる最初の8バイトが504のところで抽出シフタ306によって抽出される。バケット_#0バイト7−0は有効であることが示されている。抽出シフタのタイミングはトレース「4」に示す通りである。
命令ストリームのCISC型からRISC型へのデコーディングが始まると、カウンタシフタ332はバケット_#0から最初の8バイトを抽出するために抽出シフタ306を制御する。カウンタシフタは命令のアライメントの進行についてバケットからさらにバイトをシフトし且つ抽出するように抽出シフタに信号を送る。バケット_#0から命令バイトが空になると、バケット_#1の内容がバケット_#0の中にシフトされ、バケット_#1は命令ストリームから補充される。最初の8バイト抽出後、抽出シフタは、命令長、プレフィックス長並びに先のシフトの情報に基づいて、ライン335上のカウンタシフタの制御のもとバイトを抽出してシフトする。
しかしながら、本実施例では、カウンタシフタは第1命令をアライメントすべくゼロにシフトするように抽出シフタに信号を送る。よって、抽出シフタは第1命令の最初の8バイトを整列シフタ310にシフトアウトする。整列シフタの信号のタイミングはタイミング図のトレース「5」に示す通りである。これらの8バイトは参照番号506で示した_1の時間帯の間整列シフタで有効になる。
バケット_#0の最初の8バイトは整列シフタをバイパスして2個の整列_IRラッチ318または320(第3図のトレース「6」と「7」に示すように)の中に格納される。クロック信号CLK0とCLK1のタイミングに基づいて、これらの整列_IRラッチは交互に命令バイトを受け取る。整列_IR0318はクロック信号CLK0のラッチで、即ちクロック信号CLK0がハイの時ラッチされる。整列_IR1320はクロック信号CLK1のラッチで、クロック信号CLK0がハイの時ラッチする。_1の終わり寄りの参照番号508で示すように、最初の8バイトは第1クロック信号CLK0のフェーズ終了前に整列_IR0にて有効になる。
MUX322はその前のフェーズでラッチを実行したラッチを選択する。本実施例では、従って、MUX322が2番目の完全フェーズ、_2の間にOP0の最初の8バイトを出力する。
その次に、OP0の最初の8バイトはNID324とスタック 334に流れる。NID324は、第1命令が5バイト長であることを検出してこの情報をライン325、MUX330、さらにライン333経由で整列シフタ及びカウンタシフタに送り返す。上述したように、同時に最初の8バイトはスタックを通って流れ、整列シフタにフィードバックされる。その結果、整列シフタは命令バイトを抽出シフタからと、そして間接的に自分自身から受け取ることになる。これはサイクル毎に最大8バイトをシフトするためには整列シフタには16バイトの入力が必要だからである。整列シフタがXバイトを右にシフトすると、最下位のXバイトを廃棄して次の8バイトのデータをラッチの318と320に渡す。この場合、スタック334は整列シフタ310にバイト0〜7を供給する。
整列シフタを取り囲むバイパス336は抽出シフタが命令ストリームから第1命令を抽出する初期のケースで使われる。プレフィックス・バイトを除いて、第1命令がアライメントされるため、整列シフタが初期のケースでシフトを行なう必要はない。
タイミング図の_2の期間中、抽出シフタはバケット_#0のバイト15〜8の8バイトをシフトアウトする。第5図の510を参照。これらのバイトは整列シフタに送られるが、その整列シフタは今や合計で16の処理対象の続きバイトを有している。整列シフタは抽出シフタの出力並びに_2期間中のラッチ318と320の有効出力を調べる。
_2の終わり近くで、整列シフタはNIDからの信号に基づき、バケット_#0のバイト12〜5を出力にシフトする。そのNIDからの信号は整列シフタに5バイト右にシフトするように指示するものである。それによって命令OP0に対応する最下位の5バイトが廃棄される。タイミング図のトレース「8」のシフト_5_バイト信号512を参照。残る命令データの8バイト、即ちバイト12〜5はその後整列シフタを通って流れる。バイト5は次の命令OP1の第1バイトであることに注意すること。
カウンタシフタ332は次に抽出シフタ306の8バイトをシフトする。何故ならば、最初の8バイトは今や整列_IRラッチから入手でき、よって次のバイトが必要だからである。フェーズ3が始まると、カウンタシフタは先のフェーズで整列シフタ310によってシフトアウトされたバイト数だけシフト量を増やすように抽出シフタに信号を送る。従ってカウンタシフタは先の抽出シフタのシフト量を格納し、さらにこの値に整列シフタのシフト量を加算するためのロジックから成り立っていなければならない。
整列シフタ用に新規の値がでてくる毎に、カウンタシフタはその量を旧シフト量に加算する。本実施例においては、_2の期間中カウンタシフタは8バイトをシフトしたことになる。従って、_3の期間中、カウンタシフタは抽出シフタに8+5または13バイトをシフトするように指示しなければならない。抽出シフタによるバイト出力はバイト20〜13である。整列_IRラッチは_3の期間中バイト12−5を出力し、よってバイト20〜5が整列シフタで使用可能になることに注意のこと。
_3の期間中、抽出シフタはバイト20〜13を出力する。しかしながら、バケット_#0はバイト15〜0しか含有していないため、バイト20〜16はバケット_#1から取ってこなければならない。タイミング図の514に示すように、バケット_#1は_3の始まりで有効になる。516に示すように、抽出シフタは続いてバケット_#1のバイト4〜0をシフトし、さらにバケット_#0のバイト15〜13をシフトする。この時点でバケット_#1が有効でなければ、IAUは有効になるまで待たなければならない。
上記のごとく、シフト_5_バイト信号が_2の期間中NIDによって生成された。518に示すように、この信号に従い、バケット_#0のバイト12〜5は整列シフタによってシフトアウトされ、さらに520に示すように、その後まもなく整列_IR1の中にラッチされる。
バイト12〜5は_3の始まりにMUX322によってスタック334とNID324に送られる。スタックは336に示すようにバイト12−5を整列シフタにフィードバックし、さらに522のトレース「9」に示すように、NIDはOP1の長さが3バイトであると確定して、_3の期間中の後半にシフト_3_バイト信号を出力する。整列シフタは3バイト(15−8)をシフトし、さらにこの量がカウンタシフタに加算される。
上述のプロセスがさらに繰り返される。一つの命令がバケット_#0を越える(即ち、バケット_#0が全部使われている)と、バケット_#1がバケット_#0になり、そして新規のバケット_#1がその後有効になる。
タイミング図のトレース「10」は命令ストリームからのバイト抽出のタイミングを示している。Buf_カウント#0ブロックは格納された抽出シフト量を表している。フェーズ毎にアライメントされたシフト量がBuf_カウント#0に加算され、その結果が次のフェーズで抽出シフト量になる(カウンタ_シフトとラベルのついたブロックを参照)。
タイミング図のトレース「11」は命令アライメントのタイミングを示す。IR_ラッチ_#0とIR_ラッチ_#1のラベルのついたブロックは対応する整列_IRラッチ内の命令が有効になる期間を表す。MUX1のラベルが付いた小さなブロックはMUX 322がその有効アライメント・ラッチを選択し始める時を表している。MUX 2のラベルが付いた小さなブロックはMUX 330がNID 324が確定したシフト量を選択し始める時を表す。最後に、整列_シフトのラベルが付いたブロックは整列シフタが命令を出力し始める時を表している。
プレフィックスは命令がアライメントされるのと同じ技法を使って抽出されるが、MUX 330はNID 324の出力ではなくPD 328の出力を選ぶ。
スタック334の一部分のブロック図は第6図に示す通りである。このスタックは並列に配置された、64個の1ビット・スタックから成り立っている、1ビット・スタック600はそれぞれ2個のラッチ602及び604、さらに3入力のMUX606とから成っている。アライメントされた命令はラッチ並びにINのラベルが付いたバス607上のMUXへ入力される。この2個のラッチのローディングはいずれかのクロック・フェーズで個別に行なわれる。さらに、MUX 606はいずれのラッチの出力を選択するか、またはINデータをバイパスして直接OUTのラベルが付いた出力610に送るかするために3本のMUX制御ライン608を有している。
IAUは定期的に別々の命令ストリームに転送することができる。スタックによってIAUがMUX322からの8バイトの命令データ・セット2組を格納できるようになる。この特徴は一般的にCISC型命令エミュレーションで使われるものである。IAUが複雑なCISC型命令のエミュレーション用のマイクロコード・ルーチンを処理するために分岐しなければならない時、CISC型命令のエミュレーションが完了すればIAUの状態が格納され、再開始される。
Ωサイクル・データ遅延316はイミディエト・データとディスプレースメントの情報を遅らせるために使用される。同じ半サイクル期間中に命令長とシフトを確定するのではなく、シフタの前にIAUに遅延を入れることによって次のフェーズでシフトを行なうためにイミディエト・データとディスプレースメント・ロジックが送られる。これらの動作がそのサイクルに渡って広げられるから、タイミング要件をそのロジックに合せるのが容易になる。IDDDブロック326はIMMシフタ312とDISPシフタ314を制御して命令からイミディエト・データ並びにディスプレースメント・データを抽出する。例えば、最初の3バイトの命令が演算コードでそれに4バイトのディスプレースメント並びに4バイトのイミディエト・データが続いていれば、シフタは適切なバイトをシフトアウトすることができるようになる。
シフタの312と314は、実際のデータ・サイズが8、16、或いは32ビットであろうが関係なく常に32ビットを出力し、それには32ビット出力の低位ビットの順に適正アライメントされたイミディエト・データ及びディスプレースメント・データが含まれている。IDUはそのイミディエト・データ及びディスプレースメント・データが有効であるか確定し、もし有効ならば、どれだけ有効データがあるかを確定する。
プレフィックス、イミディエト・データ、ディスプレースメント・データの長さの確定並びに命令の実際の長さの確定はアライメントされ、さらにデコードされている実際のCISC型命令セットの機能の一つである。当業者はCISC型命令セット自体、メーカーのユーザ・マニュアル、もしくはその他一般的な参考資料を調査することによってこうした情報を得ることができる。当業者はこれをどのように行なうか、また上述のIAUサブシステムを実現するために情報をランダム・ロジックにどのように転換するか、以下に述べるIDUサブシステムをどのように実現するか、さらにデータの流れ(flow)を制御するために使われる制御ロジック並びに制御信号をどのように生成するかについて容易に理解するだろう。
さらに、一度そうしたランダム・ロジックが生成されたら、市販のエンジニアリング・ソフトウエア・アプリケーション(例えば、カリフォルニア州サンノゼ市所在のCadence Design Systems社製のVerilog)を使ってロジックを検証することができるし、そうしたアプリケーションは制御信号や関連するランダム・ロジックのタイミングや生成を定義するのに役に立つ。ゲートやセルのレイアウトを生成して、そうした機能ブロックや制御ロジックの実現を最適化するために他の市販のエンジニアリング・ソフトウエア・アプリケーションを用いることができる。
i486の命令セットは、一つの命令の中で一緒に使われるとき順序が定義されている11個のプレフィックスをサポートしている。そのフォーマットはプレフィックスを単一命令に4個まで含めるように定義する。従って、本発明のプレフィックス検出器328は同一のプレフィックス検出回路4個を備えている。各々の回路がその11個のプレフィックス・コードのどれかを探索する。プレフィックス検出器に渡される最初の4バイトが評価され、さらに存在するプレフィックス数の合計を確定するために4個のプレフィックス検出回路の出力が一つにまとめられる。その結果はMUX 330に渡されるシフト量として使用される。
NIDのブロック図を第7図に示す。NIDについての以下の説明はi486命令のアライメント特有のものである。他のCISC型命令のアライメントは異なるNIDアーキテクチャを用いるのが適切である。以下に述べる技法は従って当業者にとって一つのガイドとはなるが、それによって本発明の適用範囲を限定するものと考えられるべきではない。
一つの命令の長さを確定するには4バイトだけあればよい。(上記のごとく、その4バイトは2つの演算コードバイトと、1つの任意のModR/Mバイト並びに1つのSIBバイトから成り立っている。)
第7A図に示すのはMUX 322から受け取った命令の最初の4バイトを表す4バイト(32ビット)・バス701である。その最初の2バイトはバス703上のSNID702に送られる。SNIDは、定義上、その最初の2バイトに基づいて識別される命令の最初のサブセットの長さを確定する。SNIDは半サイクルで命令のこのサブセットの長さを確定できる。サブセット命令の長さはバス705上のSNIDによって出力される。バスの幅はSNIDによって検出された命令バイトの最大数に相当する。SNIDはまたModR/Mバイトがその命令の中にあるかどうかを知らせるために1ビットのMOD検出(MOD_DET)出力ライン707を有している。さらに、SNIDは命令がサブセット形式でない制御ロジックを合図するために1ビットのNID_待ちライン709を有している(即ち、代わりにRNIDの出力を用いる)。従ってIAUは、NID_待ちが真の場合、命令をデコードするためにRNIDを半サイクル待たなければならない。
SNIDによってデコードされた命令のサブセットは最低1、2及び3入力のゲート(否定論理積、否定論理和及びインベンタ)を使って半サイクルでデコードすることができるCISC型命令であり、そのゲート遅延は256命令の16x16のカルノー図に基づいて最大で5である。ほとんどが1バイトの演算コード命令を含むカルノー図のブロックはこのようにして実現できる。残りの命令はゲート遅延がもっと長いロジック・アレイを使ってRNIDによってデコードされる。
RNID 704はバス701上の最初の4バイトを受け取る。RNIDはデコードするのに1フェーズ以上を要する残りの命令の長さを確定するためにデコードを実行する。RNIDはSNIDの出力に類似した出力を有する。
RNIDは命令長を検出してその結果をバス711上に出力する。1ビットのオーバー8出力712はその命令は長さが8バイト以上であることを示している。RNIDはまた、命令にModR/Mバイトを含んでいるかどうかを示す1ビットのMOD_DET出力714を有する。
SNIDまたはRNIDかのどちらかによってデコードされた長さはMUX706によって選択される。現在の命令のための選択_デコーダ(SELDECIR)と呼ばれる。MUX 706用の制御ライン708は1から11バイトである実際の長さを測定するためにMUX 706を2個のデコーダ間で切り替える。例えば、11バイト長の命令は、RNIDがオーバー8信号と3をバス711上に出力するようにする。その命令長(ln)はバス716上のMUX 330に送られ、整列シフタ310とカウンタシフタ332によって使用される。トップのMUX706によって出力された8ビットは整列シフタ及びカウンタシフタ用のシフト制御(イネーブル)として使われる。
ModR/Mバイトも同様に選択される。SELDECIR信号708は適切なMODラインを選んで、ModR/Mバイトを存在しているか否かを示すために第2MUX710を制御する。MODライン出力718はIDDDによって使用される。
SELDECIR信号708はNID_待ち信号709に基づいて生成される。SNIDの出力は、その結果が完全なものであるから、第1クロック・フェーズ期間中に選択される。NID_待ち信号709がその命令がデコードされていないことを示している場合、MUX706と710はRNIDの出力711を選択するために切り替えられ、その次のクロック・フェーズの始まりで使用可能になる。
RNID704は基本的に2個の並列デコーダを備えており、その1個は命令を1バイトの演算コードがあるかのようにデコードし、もう1個は2バイトの演算コードがあるかのようにデコードする。エスケープ検出(ESC_DET)入力信号は演算コードの長さが1バイトか2バイトかを示す。例えば、i486の命令セットでは、全2バイトの演算コード(エスケープバイトと呼ばれる)の第1バイトはその命令が2バイトの演算コードを有することを示す値0F hexを有している。RNIDはESC_DET信号に基づいて有効命令長を出力する。この信号は第1演算コードがエスケープ(0Fhex)であることを示し、それは即ち2バイトの演算コードであることを示しており、それによって第2バイト・デコーダをイネーブルにする。ESC_DET信号を生成するためのロジックのデコーディングについては当業者には明らかなはずである。
RNIDのブロック図は第7B図に示す通りである。RNIDは、第1演算コードバイトをデコードするRNID_1OPデコーダ752、第2演算コードバイトをデコードするRNID_2OPデコーダ754、存在する演算バイト数によって確定された2ケ所の位置のいずれかにModR/Mバイトをデコードする2個の同一のRNID_MODデコーダ756と758、及びRNID_SUM加算器760とを備えている。4個のRNIDデコーダ752〜758の出力に基づいて、RNID_SUM加算器760はバス762上に命令の全長を出力する。RNID_SUM加算器760は、命令の長さが8バイト以上であるかどうかを示すために、OVER8とラベルが付いた別の出力ライン764を有している。
命令の第1演算コードのバイト及びModR/Mバイトの3ビット(拡張ビットと呼ばれるビット[5:3])はバス766上のRNID_1OP752へ入力される。データ_SZと呼ばれるRNID_1OPへのさらに別の入力ライン768は命令のオペランド・サイズが16ビットか32ビットかを示す。データ・サイズは使用されるメモリ保護構成と、さらに、デフォルトのデータ・サイズを無効にするプレフィックスが存在しているか否かに基づいて確定される。RNID_1OPは、命令が1バイトの演算コードを有していると仮定し、さらにその情報と拡散3ビットに基づいて命令の長さを確定しようとする。
RNID_MODデコーダ754はバス770上のModR/Mバイトの命令入力をデコードする。RNID_MODデコーダはアドレス・サイズが16ビットか32ビットかを示すADD_SZのラベルが付いた別の入力バス772を有している。アドレス・サイズはデータ・サイズとは無関係である。
ESC_DET信号774はブロック760へも入力される。例えば、ESC_DET信号がロジックのHIGHであれば、RNID_SUMブロックは演算コードが実際に第2バイトになっていることを知る。
RNID_2OPデコーダ754は演算コードが2バイトであると仮定し、それゆえ演算コードの第2バイト(バス776参照)をデコードする。RNID_2OPデコーダはデータ・サイズを認識する入力768も有している。
デコーダ自体は演算コードの長さ、即ち1バイトなのか2バイトなのかを知らないし、且つModR/Mバイトは必ず演算コードの後に続くから、ここでも2バイトであると仮定して2バイトの演算コードに続くバイト(バス778参照)をデコードするために第2RNID_MODデコーダ758が使用される。2個のRNID_MODデコーダは同一であるが、命令ストリーム中の異なるバイトをデコードする。
さらにまた、ESC_DET信号774に基づいて、RNID_SUM 760は適切な演算コード及びModR/Mバイト・デコーダの出力並びにバス762上の命令の長さを選択する。オーバー8のラベルが付いた出力764は命令が8バイト以上か否かを示す。命令の長さが8バイト以上の場合、IR_NO[7:0]バス762が8を越える命令バイト数を示す。
RNID_1OPデコーダ752は9ビット幅の出力バス780を有する。1本のラインは命令が1バイト長であるか否かを示す。2本目のラインは命令が1バイト長で且つModR/Mバイトが存在していることを示しており、従って命令の長さを判定するにはModR/Mデコーダからの情報も含まれるべきものである。同様に、バス780の残りの出力ラインは次のバイト数を示す:2、2/MOD、3、3/MOD、4、5、及び5/MOD。命令が4バイト長であれば、ModR/Mバイトは存在しているはずがない。これはi486命令セット特有のことである。しかしながら、本発明はいかなる点においても特定のCISC型命令セットに限定されるものではない。当業者はどんなCISC型命令セットに対してもアライメント並びにデコードするために本発明の特徴を適用することができる。
RNID_2OPデコーダ754は6ビット幅の出力バス782を有する。1本のラインは命令が1バイト長であるか否かを示す。2本目のラインは命令が1バイト長であるか否かを示し、且つModR/Mバイトを含有しており、命令の長さを確定するには含まれるべきものである。同様に、バス782の残りの出力ラインは2、2/MOD、3、及び5/MODが存在することを示す。演算コードが2バイト長の場合、i486の命令セットがサポートする命令長は他に考えられない。
2個のデコーダRNID_MOD756及び758の出力784及び786によってRNID_SUM760はModR/Mバイトにより指定される5つの考えられる追加の長さを知る。各RNID_MODデコーダは5ビット幅の出力バスを有している。その考えられる5つの追加の長さは1、2、3、5及び6バイトである。全長を確定するのにModR/Mバイト自体が含まれている。残りのバイトはいずれもイミディエト・データまたはディスプレースメント・データから成り立っている。
第8図に示すのはIDDD326のブロック図である。IDDDはIMMシフタ312及びDISPシフタ314のシフト量を確定する。シフト量は、命令のModR/Mバイトによって確定される。
i486命令セットは2つの特殊命令、即ちenter_detect命令とjump_call_detect命令を含む。従って、IDDDはこれらの命令のデコーディング処理をするためにイミディエト特殊検出器(ISD)802と呼ばれるブロックを有する。ISDへの入力803は、命令の第1バイトである。2本の出力ラインEN_DETとJMP_CL_DET(820と822)は該当する命令の一つが検出されていることを示す。
MOD_DECデコーダ804と806は同一物でイミディエト・データとディスプレースメント・データをデコードする。ADD_SZ772に基づいて、デコーダ804は1バイトの演算コードと仮定してModR/Mバイトを調べ、デコーダ806は2バイトと仮定してModR/Mバイトを調べる。MOD_DEC804及び805への命令バイト入力はそれぞれ805及び807である。これらのデコーダは命令ストリームのディスプレースメントの位置とイミディエト・データの位置を確定する。2つの7ライン出力824と826はディスプレースメント及びイミディエト・データの開始位置を示す。即ち、ディスプレースメントは位置2か位置3から始まり、イミディエト・データは位置2、3、4、6或いは7から始まる。
MOD_DETライン707と714もまた選択ブロック812へ入力される。
選択ブロック812はEN_DET信号とJMP_CL_DET信号、MOD_DET結果とMOD_DEC結果、及びADD_SZとを組み合わせて、4個のバス832〜838上にその結果を出力する。ディスプレースメント1(DISP_1)バス832は1バイトの演算コードと仮定してディスプレースメント・シフトの結果を出力する。ディスプレースメント2(DISP_2)バス834は2バイトの演算コードと仮定してディスプレースメント・シフト結果を出力する。イミディエト1及び2(IMM_1とIMM_2)バス836及び838はそれぞれ1バイトと2バイトの演算コードと仮定してイミディエト・データ・シフトの情報を出力する。
MOD_SEL/DLYとラベルが付いた最後のブロック814は実際に適切なシフト量を選択してその結果を半サイクル遅延させる。MOD_SEL/DLY816によって実行された半サイクルの遅延は第3図に示した遅延316を表す。上述のESC_DET信号774はシフトの選択を行なうためにMOD_SEL/DLYブロックによって使用される。その結果は半サイクル遅れてクロック信号CLK0とCLK1とによってMOD_SEL/DLY814からクロックされる。イミディエト・データのシフト制御信号並びにディスプレースメントのシフト制御信号はシフト_D[3:0]バス840とシフト_I[7:0]バス842をそれぞれ介してDISPシフタとIMMシフタに送られる。CISC型命令内でのイミディエト・データとディスプレースメント・データの可能な位置数はシフト量を指定するのに必要なビット数を定義する。
プレフィックス検出器328のブロック図は第9図に示す通りである。プレフィックス検出器328はプレフィックス_数デコーダ(PRFX_NO)902、4個のプレフィックス_検出器デコーダ(PRFX_DEC904〜910)とプレフィックス_デコーダ(PRFX_SEL)912を備えている。
例えば、i486命令セットは11の考えられるプレフィックスを含む。幾つかの無効なプレフィックスの組み合わせがあるから、1命令につき合計で4つのプレフィックスを含むことができる。その4つのプレフィックスの順序もまた命令セットによって定義される。しかしながら、正しいプレフィックス順列のみを検出するためではなく、むしろ命令の最初の4バイトをそれぞれデコードするためにプレフィックス検出器は4個のプレフィックス検出器904〜910を使う。命令の最初の4バイトはバス901上のプレフィックス検出器へ入力される。検出器904から910はそれぞれ12ビット幅の出力バス(905、907、909及び911)を有する。プレフィックスが実際にデコードされていれば、12の出力からどのプレフィックスが存在しているかわかる。12番目のプレフィックスはロック解除と呼ばれ、これはi486のロックプレフィックスの機能上の補数であるが、エミュレーション・モード時のマイクロコード・ルーチンにのみ使用可能である。
整列_RUN制御信号920はプレフィックス・デコーダをイネーブル/ディスエーブルにするために組み込まれていることがあり、プレフィックスを全てマスク・アウトするために使用される。HOLD_PRFX制御信号922はプレフィックス情報をラッチし且つ保持するために使用される。一般的に、プレフィックス検出器328がプレフィックスの存在を示している場合の命令のアライメントでは、制御ロジックがプレフィックス情報をラッチしなければならない。プレフィックス情報はその後プレフィックスをシフト・アウトするために整列シフタ310によって使用される。その次のサイクルで、IAUは命令の長さを確定してアライメントし、さらにIDUに引き渡す。
PRFX_NOのデコーダ902は演算コードの最初の4バイトをデコードすることによりプレフィックスがどこにどれだけ存在しているかを示す。PRFX_NOデコーダ902の論理図は第10図に示す通りである。PRFX_NOデコーダは4個の同一のデコーダ1002〜1008並びに論理ゲート1010一式を備えている。4個のデコーダ1002〜1008は各々最初の4バイト(1010〜1013)の一つを調べてプレフィックスが存在しているかどうかを確定する。プレフィックス・バイトは演算コード・バイトに続くことができるから、論理ゲート1010は最初の演算コード・バイトの前にプレフィックス総数を示している結果を出力するために使用される。何故なら、演算コードに続くプレフィックスは次の命令の演算コードにのみ適用できるからである。
第1バイト(位置)がプレフィックスで第2位置にプレフィックスがなければ、プレフィックス総数は1である。また別の実施例として、プレフィックスが最初の3位置になければ、第4位置のプレフィックスはどうでもよい。一番下のNANDゲート1014から出力されたロジックHIGH(1)は4個のプレフィックスが存在することを示し、下から2番目のNANDゲート1015から出力されたHIGHは3個のプレフィックスの存在を示すといった具合である。4個のNANDゲートの出力はPREFIX_NOバス1018を形成するために結合され、バス1018は第1演算コードに先行する有効プレフィックス総数、即ちプレフィックス検出器328のシフト量出力を表す。
PRFX_NOデコーダ902はPrefix_Present(PRFX_P)出力バス1020(これも4ビット幅)も含んでいる。4本のPRFX_P出力ライン1020〜1023は、他の位置の出力が何であるかに係わらず、特定の位置にプレフィックスがあるか否かを示す。PRFX_P出力は4個のデコーダ(1002〜1008)の出力から直接採られる。
PRFX_NOデコーダの結果(第10図との関連で説明する)及びPRFX_DEC検出器904〜910からの情報はPRFX_SELデコーダ912によって結合される。プレフィックス情報は1個の13ビット出力バス924を形成するために結合され、バス924はプレフィックス信号があるか、及びどのプレフィックスが存在するかを示す。
3.0命令デコード・ユニットの概略
命令は全てIAUから命令デコード・ユニット(IDU)に引き渡され、直接RISC型の命令に変換される。IEUによって実行される命令は先ずIDUによって処理される。IDUは各命令がエミュレートされた命令なのか基本命令なのかを判断する。エミュレートされていれば、全て基本命令からなるマイクロコード・エミュレーション・ルーチンが処理される。基本命令であれば、直接ハードウエアによって1個から4個のナノ命令に変換されてIEUに送られる。IEUが実際に実行するのは、元々のCISC型かマイクロコードの命令ではなくて、これらのナノ命令である。
命令の分割には2つの主要な利点がある。その1は、簡単なオペレーションに対応しているだけでいいから、ハードウエアが小型ですむ。その2は変更が容易な複合マイクロコード・ルーチンでバグが発生しやすいため、バグはそれほど厄介な問題ではなくなる。
本発明に関連するIDUのマイクロコード・ルーチン対応のハードウエアには固有の特徴が幾つかある。マイクロコード命令はプロセッサ内に存在する様々なデータパス用の制御ビットから成り、ほとんど符号化されていないか全く符号化されていないというのが典型的である。これと対比して、本発明のマイクロコードは特定の複合命令セットをエミュレートするために設計された比較的高レベルの機械言語である。典型的なマイクロコードは直接プロセッサの機能ユニットへ送られるのに対し、本発明のマイクロコードは目標のCISC型(例えば、80×86)命令に使用されるのと同じデコーダ論理によって処理される。これによって、本発明のマイクロコードのコード密度が典型的なマイクロコードによって達成される場合よりはるかに優れたものになり、そして目標のCISC型命令セットと類似しているからマイクロコードの開発が容易になる。さらに、本発明はマイクロコードの改訂用にハードウエアで対応できるようになる。即ち、オンチップROMベースのマイクロコードはソフトウエア制御によって部分的もしくは全体的に外部RAMベースのマイクロコードに置き換えることができる。(1991年12月6日に出願された、同一承継人の出願に係る・同時係属出願中の、米国出願番号07/802,816、発明の名称「RAMセル及び巡回冗長検査回路搭載ROM」、代理人整理番号SP9024を参照。なお、当該出願の開示は参照することによって本明細書に組み込まれているものとする。)
マイクロコード・ルーチン言語は、あらゆるエミュレートされた複合命令に必要な機能に加え、例外処理に関連する様々な制御並びに保守機能を実行するために、RISC型コアによって実行される命令セットになるように設計されている。エミュレートされた命令は典型的にはエミュレートされていない(基本)命令ほどには性能に影響しないし、さらに例外(マイクロコード・ルーチンによって処理される)はめったに起こらないけれど、それでもなお両方を効率的に処理することが総体的なシステムのスループットにとって非常に重要なことである。この目標は様々な形式のマイクロコード・ルーチン対応のハードウエアを使用することによって達成される。本発明はマイクロコード対応のハードウエアの4つの領域、即ち、ディスパッチ論理、メイルボックス、ナノ命令フォーマット、及び特殊命令を備えている。
マイクロコード・ディスパッチ論理は目標CISC型命令ストリームからマイクロコード・ルーチンへ、そしてまた目標命令ストリームに戻るプログラム制御の効率的な転送を制御する。それはわずかなハードウエアを使用し、且つRISC型コアの命令実行ユニット(IEU)には見えない方法で、処理される。(IEUはRISC型命令を実行する。上述の「RISCコア」はIEUと同義語である。IEUについての詳細は当業者が本発明を実施するのに必要ではない。本発明の特徴はRISC型プロセッサ全般に適用できる。)
メールボックスは情報を体系的な方法で命令デコード・ハードウエアからマイクロコード・ルーチンに転送するために使用されるレジスタのシステムを備えている。これによってこのハードウエアが命令オペランドや同様のデータをマイクロコード・ルーチンに引き渡せるようになり、その結果、命令からこのデータを抽出するタスクを省くことになる。
ナノ命令フォーマットはIDUからIEUに引き渡す情報を記述する。ソースのCISC型命令から効率的に抽出されるようにするためにこのフォーマットが選択されているが、依存性の検査や機能ユニット制御には十分な情報をIEUに提供する。
最後に、特殊命令はRISC型ハードウエアを完全に制御できるようにし、ハードウエア固有のエミュレーション・タスクに対応するために備えられた追加の命令セットであり、且つCISC型命令セット専用である。
3.1マイクロコード・ディスパッチ論理
マイクロコードにディスパッチする第1のステップはマイクロコード・ルーチンのアドレスを確定することである。このステップには2つの重要要件がある。即ち、各マイクロコード・ルーチン毎に固有の開始アドレスがあることと、それらのアドレスは高速で生成されなければならないことである。取り扱い件数が少なければハードウエアがアドレスを定数として格納できるし且つそれらの間で選択することもほとんどないから、このやり方でかなり容易に例外処理のルーチンを実現できる。しかしながら、実行可能なアドレス全部を格納させるにはあまりにも数が多いため、エミュレートされた命令のアドレス確定はもっと難しい。
マイクロコード・ディスパッチ論理は直接その演算コードを各命令のディスパッチ・アドレスに基づかせることによって要件を満たしている。例えば、1バイトの演算コードがOHから1FFFHのアドレス空間にマップされる。その場合、16ビットのディスパッチ・アドレスの上位3ビットはゼロでなければならない。これらのマイクロコードのエントリ・ポイントは64バイト隔てられており、各エントリ・ポイント・アドレスの最下位の6ビットはゼロでなければならない。これによって7ビットが未定のまま残ることになるが、演算コードの7ビットから直接取り込むことができる。当業者には明確になるように、この方法によるアドレス生成はほとんどロジックを必要としない。例えば、演算コードから適正ビットを選択するためにマルチプレクサだけが使用される。
一度マイクロコード・ルーチンのディスパッチ・アドレスが確定されれば、マイクロコードはメモリからフェッチされなければならない。典型的には、マイクロコードはオンチップROM内に存在するが、必ずしもそうとは限らない。上記に引用した米国出願番号07/802,816に詳述されているように、各エントリ・ポイントはROMのルーチンが正しいか否かを表すROM無効ビットに対応している。このビットはROMへのアクセスと並行してフェッチされ、従来のキャッシュ・ヒット・インディケータと同様の働きをする。このビットがROMのエントリが有効であることを示していれば、マイクロコード・ルーチンはROMから継続してフェッチされ、普通に実行される。しかしながら、ビットがROMが無効であることを示していれば、マイクロコードはRAM等の外部メモリからフェッチされる。
オンチップ・マイクロコード・ルーチンのアドレス指定はIDU自身によって行なわれる。IDUはマイクロコードROMにアクセスするための16ビットのアドレスを生成する。アドレス指定されているROMエントリに対応するROM無効ビットがそのマイクロコードは無効であることを示していれば、主メモリ内にオフチップで存在する外部マイクロコードのアドレスが計算される。U_ベースレジスタは主メモリ内に存在する外部マイクロコードの上位16のアドレス・ビット(開始アドレスと呼ばれる)を保持する。IDUによってデコードされた16ビットのアドレスは、主メモリ内に存在する外部マイクロコードにアクセスするために、U_Baseレジスタの上位16ビットと連結される。主メモリ内に存在する外部マイクロコードの記憶場所が変更されれば、新規の主メモリの記憶場所を反映するためにU_Baseレジスタの内容を修正することができる。
この特徴によって、全てのマイクロコードに外部メモリ・アクセスの性能低下を強いることなく、あるルーチンを外部メモリ内の別のものと置き換えることによりマイクロコードの更新を行なえるようになる。RISC型チップの面積要件を減らしたり、マイクロコード開発援助のために、RISC型チップからROMを全て削除して外部RAMにマイクロコード全体を入れることもできるようになる。
タスクが終了するとマイクロコード・ルーチンが命令の主ストリームに戻るための手段を提供するのもこのディスパッチ論理である。この処理のために、個別のプログラム・カウンタ(PC's)及び命令バッファを維持する。通常動作中、主PCが外部メモリ内の各CISC型命令のアドレスを確定する。これらの命令を含むメモリのセクションはIFUによってフェッチされ、MBUFに格納される。
エミュレートされた命令または例外が検出されると、現在の命令のPC値と長さが一時バッファに格納される。一方、マイクロコード・ディスパッチ・アドレスは上述のように計算され、さらに命令がこのアドレスからEBUFにフェッチされる。マイクロコードの「リターン」命令が検出されるまでマイクロコードがEBUFから実行される。リターン命令検出時に予備のPC値が再ロードされ、MBUFから実行が継続される。MBUFやその他全ての関連レジスタはマイクロコード・ルーチンへの制御の転送中は保存されているから、CISC型プログラムへの戻りの転送は非常に高速で起こる。
命令エミュレーション・ルーチンと例外処理ルーチンの相違に対応するためにマイクロコード・ルーチンによって使用される2つのリターン命令がある。例外処理のためにマイクロコード・ルーチンが入力されると、そのルーチン終了後にプロセッサは割り込みが入ったまさにその状態に戻ることが重要である。しかしながら、命令をエミュレートするためにマイクロコード・ルーチンが入力されると、ルーチンはエミュレートされた命令に続く命令に戻りたがる。さもなければ、エミュレーション・ルーチンは2回目を実行する。これらの2つの機能は2つのリターン命令、即ち、aret及びeret、を使用して処理される。aret命令は、マイクロコードが入力されていれば、プロセッサをその状態に戻し、一方、eret命令は主PCを更新し且つ制御して目的ストリームの次の命令に戻るようにする。
3.2メールボックス
エミュレーション・ルーチンがうまく複合CISC型命令の機能を行なうためには、マイクロコードが、エミュレートされた命令によって参照されるオペランドにアクセスしやすいことが必要である。本発明において、このことは4個のメールボックス・レジスタを使用することによって行なわれる。これらのレジスタはその使われ方が特有である。即ち、マイクロコードに使用可能な、整数レジスタ・ファイル内の16個の一時レジスタ・セットの最初の4個であると定義されている。オリジナル命令からのオペランドか他の情報を要する各エミュレーション・ルーチンは、ルーチンに入る際に、1個以上のメールボックス・レジスタに格納されたこれらの値を見つけるはずである。IDUはエミュレートされた命令を検出すると、マイクロコード・ルーチン自体の実行開始前に、マイクロコードが予期する値を有するレジスタをロードするためにIEUによって使用される命令を生成する。
例えば、オペランドとして汎用レジスタのどれかを指定するLoad Machine Status Word(lmsw)命令のエミュレーションを考察してみよう。エミュレート対象の特定命令がlmsw axであると仮定し、それは「ax」レジスタから16ビットの状態ワードをロードするとする。命令で実際に指定されたレジスタいかんにかかわわらず同じマイクロコード・ルーチンが使用され、従ってこの命令のためにメインボックス#0には状態ワードがマイクロコード・エントリの前にロードされる。IDUはこの命令を検出すると、IEUが「ax」レジスタから「u0」レジスタに状態ワードを移動するようにmovu0,ax命令を生成するのであるが、それはメイルボックス#0と定義されている。このmov命令がIEUに送らられた後に、マイクロコード・ルーチンがフェッチされて送られる。従って、マイクロコードはエミュレートされた命令がlmsw u0であるかのように書き込まれ、オリジナルのCISC型命令で指定される全ての考えられるオペランドを正確に処理する。
3.3ナノ命令フォーマット
上述したように、CISC型命令はIDUによってナノ命令にデコードされるのであるが、その処理はIEUと呼ばれるRISC型プロセッサ・コアによって行なわれる。ナノ命令は「バケット」と呼ばれる4つのグループに分けてIDUからIEUに渡される。バケットの1つを第11図に示す。各バケットは2個のパケットとそのバケット全体に関する一般的な情報とで構成されている。パケット#0には常に順序通りに実行される3つのナノ命令が入っている。その3つのナノ命令はロード命令1102、ALUタイプ命令1104、格納命令1106である。パケット#1は単一のALUタイプ命令1108から成る。
IEUはサイクル当たり1個のピーク・レートでIDUからバケットを受け入れることができる。IDUはサイクル当たり2個のピーク・レートで基本命令を処理する。ほとんどの基本命令は単一のパケットに変換されているため、通常2つの基本命令は1個のバケットに入れられて一緒にIEUに渡される。このレートの一番大きな制約は基本命令がバケットの要件に適合していなければならないということである。その要件とは以下の通りである。
2つの基本命令のうち1つしかメモリ・オペランドを参照することはできない(バケット毎にロード/格納動作は1つしかない)、さらに両命令ともに単一のALUタイプ演算(2つのALUタイプ演算を要する1つの命令と対照して)から成っていなければならない。
この制約の片方か両方かが満たされなければ、基本命令の1つだけに該当するナノ命令の入ったバケットがIEUに送られ、残る命令は後から別のバケットで送られる。これらの制約はIEUの能力を正確に反映するものである。即ち、IEUは2個のALUと1個のロード/格納ユニットを備えているから、実際にはこれらの要件によって性能が限定されるわけではない。このタイプのIEUの例については、同一承継人の出願に係る同時係属中の、米国特許出願番号07/817,810、発明の名称「高性能RISC型マイクロプロセッサ・アーキテクチャ(High Performance RISC Microprocessor Architecture)」、1992年1月8日出願(代理人整理番号SP015/1397.0280001)、並びに米国特許出願番号07/817,809、発明の名称「拡張可能RISC型マイクロプロセッサ・アーキテクチャ(Extensible RISC Microprocessor Architecture)」、1992年1月8日出願(代理人整理番号SP021/1397.0300001)に開示している。なお、これらの開示は参照することにより本明細書に組み込まれているものとする。
3.4特殊命令
汎用命令を用いて実行するのが困難であったり不十分であるマイクロコード・ルーチンによって実行されなければならない機能は数多くある。さらに、従来のCISC型プロセッサに比べ当RISC型プロセッサのアーキテクチャは拡張されているため、特定の機能が有効である。かといって、そうした機能はCISC型プロセッサには何の意味もないし、従ってCISC型命令のどんな組み合わせを用いても実行できない。合わせて、こうした状況から「特殊命令」が生まれた。
特殊命令の第1カテゴリーの例はextract_desc_base命令である。この命令によって2個のマイクロコードの汎用レジスタから様々なビット・フィールドが抽出され、それらは連結され、さらにその結果がマイクロコードによる使用のために第3の汎用レジスタに入れられる。この命令を利用しないで同じ動作を実行するには、マイクロコードが幾つかのマスキングとシフトの動作を実行しなければならない上、一時的値を保持するために追加のレジスタの使用が必要となる。特殊命令によって、単一サイクルで1命令によってしかもスクラッチ・レジスタを使わずに、実行されるのと同じ機能が果たせるようになる。
特殊命令の第2カテゴリーの2つの例については既に述べた。即ち、マイクロコード・ルーチンを終了させるために用いられる2つのリターン命令、aretとeretである。これらの命令はマイクロコード環境でのみ意味があり、従ってCISC型のアーキテクチャには同等の命令とか命令順序といったものはない。本件において、特殊命令な性能上の理由だけでなく、機能補正の点からも必要だった。
特殊命令はマイクロコード・ルーチンにのみ使用可能であり、さらにエミュレートされた命令は目標のCISC型命令ストリームにしか発生しないから、エミュレートされた命令の演算コードは特殊命令のマイクロコード・モード時に再使用される。従って、目標のCISC型命令ストリームにこれらの演算コードの一つが発生する時、それはその命令のマイクロコード・エミュレーション・ルーチンが実行されるべきであるということを表しているにすぎない。しかしながら、その同じ演算コードがマイクロコード命令ストリームに発生する時、それは特殊命令の一つとして全く異なった機能を有している。この演算コードの再使用に対応するために、IDUは現在のプロセッサの状態を記録し、さらに命令を適正にデコードする。この演算コード再使用はIEUには見えない。
IDUは各CISC型命令(例えば、i486命令セットの)をデコードして各命令を幾つかのRISC型プロセッサ・ナノ命令に変換する。上述したように、複雑性や機能性いかんによって、各命令は0から4つのナノ命令に変換される。IDUは最高で1サイクルの割合で2個のCISC型命令をデコードして変換する。IDUの基本機能を要約するの以下の通りである。
* 半サイクルにつき1個のCISC型命令をデコードする。
* 第1フェーズで第1CISC型命令をデコードする。
* 第1CISC型命令のデコードされた結果を有効なものであるとして第2フェーズ終了まで保持する。
* 第2フェーズで第2CISC型命令をデコードする。
* 第3フェーズで可能ならば、2つの命令の出力を結合する。
* サイクル毎に4つのナノ命令から成るバケットを1個出力する。
3.5命令デコード・ユニットのブロック図
IDUのブロック図は第12図に示す通りである。IAUからのアライメントされた命令は32ビット幅([31:0]か4バイト)のバス1201上のIDUに到達する。そのアライメントされた命令は命令デコーダ1202によって受け取られる。IDU1202はCISC型からRISC型への変換を行なうためにアライメントされた命令の最初の4バイトを調べるだけである。
命令デコーダ1202は1クロック・フェーズ(半サイクル)で作動する。アライメントされた命令はそのデコーダを通り、そしてそこを出るデコードされた情報は多重化され、バス1203を介して半サイクル遅延ラッチ1204にフェッチされる。従って、そのデコードされた情報は1フェーズ・パイプライン遅延と同じことを経験することになる。
半サイクルの遅延後、そのデコードされた情報は使用された実際のレジスタ・コードを確定するためにバス1205を介してMUX1206に送られる。デコーディングのこの段階で、そのデコードされた情報はナノ命令にフォーマットされる。そのナノ命令は次にラェッチされる。2個の完全なナノ命令バケットがサイクル毎にラッチされる。2個のナノ命令バケットのラッチをそれぞれ第1IRバケット1208、第2IRバケット1210で図式的に示す。
IDUはバケット1208と1210を1個のバケット1212にまとめようとする。制御ゲート一式1214がまとめ作業を行なう。IDUは先ず各ナノ命令のタイプを調べ、結合可能なタイプかどうかを確定する。2つのラッチされた命令のロード(LD)動作のどちらが単一バケット1212のLD記憶場所1216に入っていいし、ラッチされた命令の格納(ST)動作のどちらが単一バケットのST記憶場所に入っていいし、A0動作のどちらがA0記憶場所1220に入ってもいい、さらにA0かA1の動作のいずれでもA1記憶場所1222に入っていいことに注意すること。
IDUは命令を全体的に扱う。IDUは2つの命令を1つのバケットに詰め込めなければ、一つの完全な命令を後に残す。例えば、第1IRラッチにはA0動作しかなく、第2IRラッチに4つの動作全てが入っている場合、IFUは第2IRラッチからA1を取り込まずA0動作に合併する。A0動作が単独で送られ、第2IRラッチの動作の集合は第1IRラッチに転送され次のフェーズ上に送られる。その期間中に第2IRラッチは再ロードされる。言い換えれば、第1IRラッチに格納された動作は常に送られ、第2IRラッチに格納された動作は可能ならば第1IRラッチの動作と一つにまとめられるということである。万一第1IRと第2IRがまとめられない場合には先のIDU並びにIAUのパイプライン・ステージは待機しなければならない。IDUが第1と第2のIRラッチ動作を合併できるのは下記の状況においてである。
1. 共にA0しか使用しない、もしくは
2. 片方はA0しか使用せず、他方はA0、LD及びSTのみを使用する。
先に説明した機能性及び基本論理の設計実務に基づいて、当業者は、第1と第2のIRラッチの内容を合併すべく、制御ゲートに必要な制御信号を生成するために組み合わせ論理を容易に設計できる。
IDUがエミュレーションを要する命令のサブセットに属する命令を識別するとエミュレーション・モードになる。エミュレーション・モードになると、エミュレーション・モード制御信号(EMUL_MODE)がIDUのデコーダに送られる。CISC型命令の直接デコーディングは中断し、識別された命令は対応するマイクロコード・ルーチンがデコーディングのためIDUに送られる。マイクロコード・ルーチンがサブセット命令のエミュレーションを終えると、IDUデコーダはCISC型命令のデコーディグを続けるため基本モードに戻る。基本的に、IDUは基本CISC型命令及びマイクロコード命令を同様に取り扱う。演算コードの解釈だけが変わる。
1バイト並びに2バイトの演算コード命令のデフォルト(基本)モードのカルノー図を第13A〜13C図に示す。カルノー図の左側と上部に示す数字は演算コード・ビットである。例えば、hex 0Fのコードのついた1バイトの演算コードは第1行第11列に相当し、それは「2バイト・エスケープ」命令である。
第13A〜13C図のカルノー図で影をつけたグレーの命令ボックスは基本命令で、白のボックスはエミュレートされなければならない命令である。
IDUの命令デコーダ1202のブロック図を第14図に示す。命令デコーダ1202はCISC型命令とマイクロコード・ルーチンをデコードするために用いられる複数のデコーダを含んでいる。
タイプジェネレータ(TYPE_GEN)デコーダ1402は整列_IRバス上の完全にアライメントされた最初の命令を受取り、命令のタイプフィールドを識別するために命令を一つずつデコードする。
識別されたタイプフィールドはIDUとの関連で先に説明したナノ命令の動作に対応する。タイプはバケット内の各動作(ロード、ALU0、格納、ALU1)を表す4ビットのフィールドで表わされる。TYPE_GENデコーダ1402は命令実行にはこれら4つの動作のどれが必要かを指定する。受け取った命令いかんで、CISC型命令を満たすには命令の1から4までのいずれかの番号が必要である。
例えば、1個のレジスタの内容をもう1個のレジスタの内容と合計する、加算演算はALUナノ命令を1回実行するだけでいい。一方、レジスタの内容と記憶場所の内容を足さなければならない命令では、ロード、ALUの動作と、続いて格納動作との合わせて3つのナノ命令の動作が必要となる。(データはメモリから読み出され、レジスタに加算され、さらにメモリに格納されなければならない。)より複雑なCISC型命令では4つのナノ命令全てが必要になる。
TYPE_GENデコーダ1402は3個のタイプデコーダを備えている。第1デコーダタイプ1は命令はModR/Mバイトの前に1バイトの演算コードを有していると仮定し、その仮定に基づいてタイプを計算する。第2デコーダタイプ2はその命令には2バイトの演算コードがあると仮定する。第1バイトはエスケープバイトであるが、それは演算コードである第2バイトとModR/Mバイトである第3バイトとの前にくる。第3デコーダタイプFはその命令は浮動小数点命令であると仮定し、その仮定に基づき命令をコードする。
TYPE_GENデコーダは4ビット幅のタイプ命令出力バス(タイプ1、タイプ2、タイプF)を3個有する。各ビットはバケット内の4つのナノ命令動作の一つに対応する。特定のタイプフィールドによってCISC型命令を実行するのにどのナノ命令が必要か指定される。例えば、4ビットが全てロジックのHIGHの場合、CISC型命令にはロード、格納の動作がそれぞれ1回と、ALU動作が2回必要である。
1、2、Fのラベルが付いたセクションを含む第14図の残りのデコーダはそれらがそれぞれ1バイトの演算コード、2バイトの演算コード、浮動小数点命令であると仮定してデコードする。無効結果が選択されることはめったにない。マルチプレクサは正しいデコーダの出力を選択する。
2つのALU動作(ALU0とALU1)には各々11ビット長の演算コード・フィールドがある。その11ビットは演算コードの8ビットと、隣接するModR/Mバイトからの3演算コード拡張ビットとから成る。IDUが処理するCISC型命令ではほとんどの場合、演算コード・ビットはナノ命令動作に直接コピーされる。しかしながら、CISC型命令のなかには演算コードの置き換えを必要とするものもある。この場合、IDU装置はCISC型演算コードを命令実行ユニット(IEU)にフィルタすることはめったにない。IEU内の機能ユニットのタイプ及び数がIDU内での演算コードの置き換えが特定のCISC型命令にとって必要か否かを左右するから、このことは当業者には明確になるであろう。
IEUがALU動作を処理するためには、指定されたALU動作を処理するのにどの機能ユニットが必要であるかという情報を受け取らなければならない。従って、IDUはF_OUNIT1、F_OUNIT2、及びF_OUNITFの3個のデコーダから成る機能ゼロユニット(F_OUNIT)デコーダ1410を含んでいる。デコーダの出力はA0のALU動作を処理するのにどの機能ユニットが必要かを表す複数バイトのフィールドである。A1のALU動作のためのデコーディングをする機能ユニットは同一ではあるが、別個のデコーダF_1ユニット1412によって取り扱われる。
CISC型命令は演算コードによって暗示されるレジスタを用いてオペレーションを実行することが多い。例えば、多くの命令がアキュムレータとしてAXレジスタを用いるべきであると暗示している。従って、そのCISC型命令の演算コードに基づいたレジスタ・インデックスを生成するために定数ジェネレータ(CST_GEN)デコーダ1414が含まれている。CST_GENデコーダは特定の演算コードに基づいて、どのレジスタが暗示されているかを明らかにする。ナノ命令の正しいソースやデスティネーション・レジスタ・インデックスを生成するための多重化については第15図との関連において以下に説明する。
追加の2ビットの制御信号である、TempCount(TC)は、CST_GENデコーダへ入力される。TC制御信号はダミー・レジスタとしてIEUが使うために、循環する4個の一時レジスタを表す2ビットのカウンタである。一時(もしくはダミー)レジスタは、暗示されたレジスタに加えて、CST_GENデコーダから受け継ぐレジスタのもう一つの値を示す。動作毎のレジスタを2個有するALU動作が2つあるため、定数ジェネレータ・デコーダは4つの定数フィールドを引き渡す。定数レジスタ・バスはそれぞれが20ビット幅で、各定数は計5ビットだから、IEU内の32個のレジスタの1個を選択することができる。
次に、概ねブロック1416で示した選択ジェネレータ(SEL_GEN)デコーダについて説明する。SEL_GENデコーダはフラグ要求変更(FG_NM)デコーダ1418を含む。FG_NMデコーダは1バイトの演算コード、2バイトの演算コード、及び浮動小数点命令用にデコードする。例えば、i486命令セットには計6個のフラグがある。フラグは命令によって変更してもいいが、これらのフラグは命令の実行が開始される前に有効になっていなければならない。FG_NMデコーダはフラグ毎に2つの信号を出力する。一方のビットはこの命令実行のためにフラグが必要か否かを示し、別のビットはこの命令が実際にフラグを変更するか否かを示す。
ALU0とALU1の動作に関するレジスタの無効情報はそれぞれ1420と1422で表したINVD1とINVD2のデコーダによってデコードされる。INVD1及びINVD2デコーダはSEL_GENデコーダ1416の一部でもある。INVD1及びINVD2のデコーダはIEU用の制御信号を生成する。これらの信号はALUレジスタを使用すべきか否かを示す。3個の考えられるレジスタ・インデックスは各ALU動作により指定される。その1つはソース及び/またはデスティネーション・レジスタとして使用し、残りの2つはソース・レジスタ指定だけに限定される。動作にはどのレジスタが必要かを指定するために4ビットのフィールドが使われる。
SEL_GENデコーダ1416はさらにCISC命令にはレジスタ・フィールドのどれが必要かを示すFLD_CNTデコーダ1424を含んでいる。FLD_CNTデコーダは2つのフィールドのどちらがソース・レジスタでどちらがデスティネーション・レジスタであるかを指定する。
ナノ命令ジェネレータ(NIR_GEN)デコーダは概ねブロック1426として示す通りである。データ・サイズ(DATA_SZ)及びアドレス・サイズ(ADDR_SZ)の入力制御信号はシステムが動作しているデフォルトの状態に対応している。最終のアドレス並びにオペランドのサイズをデコードするためには、デフォルト・モードが分かっていなければならないし、プレフィックス(IAUとの関連において先に説明した)の存在も分かっていなければならない。EMUL_MODE制御信号はNIR_GENデコーダへ入力されるが、他のデコーダによっても使用される。
エスケープ検出(ESC_DET)入力制御信号は、命令が2バイトの演算コードを有しているかを表すために、NIR_GENデコーダに送り込まれる。さらに、エミュレーション命令が検出されるとメールボックス・レジスタのローディングを起こすために、選択演算コード拡張(SEL_OP_EXT)入力制御信号が使われる。
浮動小数点レジスタ(FP_REG)入力制御信号は変換された浮動小数点レジスタ・インデックスをIDUに渡す。例えば、i486の浮動小数点フォーマットは浮動小数点数用の8個のレジスタを有しているが、それらのレジスタはスタックと同様にアクセスされる。スタック・アクセス方式、即ち、レジスタ0がスタックの一番上で、レジスタ1が上から2番目といった具合、を使ってこれらのレジスタをアクセスできる。このレジスタ・スタックは固定インデックスを有する8個の線形レジスタを使用することによってエミュレートされる。入力命令がレジスタ0を指定すれば、変換ブロック(図示せず)は周知の方法でスタック関連レジスタ・インデックスを線形レジスタ用のレジスタ・インデックスに変換する。これによりIDUがどのレジスタがスタックの一番上にあるかを記録することができるようになる。
システムがエミュレーション・モードに分岐すると、IDUはエミュートされている命令についての情報を保存する。IDUは、デスティネーションのレジスタインデックス(EM_RDEST)、ソース(EM_RDEST2)、ベースインデックス情報(EM_BSIDX)に加えて、命令のデータサイズ(EM_DSIZE)及びアドレスサイズ(EM_ASIZE)も保存する。この保存された情報は命令を適切にエミュレートするためにマイクロコード・ルーチンによって使用される。例えば、加算命令のエミュレーションを考えてみよう。マイクロコード・ルーチンは、どのアドレス・サイズをエミュレートするかを知るために、加算命令のアドレス・サイズを確定するのにEM_ASIZEをチェックすることがある。
NIR_GENデコーダ1426はサイズデコーダ1428を含む。SIZEデコーダ(即ち、SIZE1、SIZE2、SIZEF)によって生成されたフィールドは命令のアドレス・サイズ・オペランド・サイズ、さらにイミディエト・データ・サイズを表す。16ビットか32ビットのアドレス・サイズ、8ビットか16ビットか32ビットかのオペランド・サイズ、8ビットか16ビットか32ビットかのイミディエト・データ・フィールド・サイズが各命令用に抽出される。
もう一つのNIR_GENデコーダはロード情報(LD_INF)デコーダ1430と呼ばれる。LD_INFデコーダはロード及び格納の動作に対応する情報をデコードする。ロード情報は効果的なアドレス計算を行なうために使用される。CISC命令セットは通常多くの様々に異なるアドレス指定モードを支援するから、ロード情報のフィールド(LD_INF1、LD_INF2、LD_INFF)はCISC命令によってどのアドレス指定モードが使われているかを指定するために使用される。
i486の基本アドレス指定モードは、アドレスを確定するために足して一つにまとめられるセグメント・フィールドとオフセットを含んでいる。インデックス・レジスタのスケールに加えて(例えば、インデックス・レジスタがアレイ内の素子である場合)、インデックス・レジスタを指定できるし、素子を長さで1、2、4、または8バイトとして指定できる。従って、インデックス・レジスタがアドレスを確定するために加算される前に1、2、4、または8でインデックス・レジスタを基準化することができる。ベース並びにインデックスもLD_INFフィールドで指定できる。
ナノ命令演算コード(NIR_OPC)デコーダ1432はA1オペレーション(パケット1)用の演算コードを転送する。デコードされたフィールド(NIR_OPC1、NIR_OPC2、NIR_OPCF)は第1命令バイト(8ビット)と第2バイトからの3つの拡張ビットから成る。
雑演算コード(MISC_OPC)デコーダ1434は、命令が浮動小数点であるか、及びロード命令が実際に存在しているかどうかを表す。MISC_OPCデコーダによって生成されたフィールドは、浮動データの変換が必要かを示すことになる。この情報は命令のフォーマットに係わらず簡単に抽出されるから、このデコーダは多重化する必要がない。
パケット0のA0動作用の演算コードは演算コードデコーダ1436により指定される。A0演算コードは通常i486の入力演算コードから直接コピーされるが、命令によっては演算コードが別の演算コードで置き換えられることがある。(上記のように、NIR_GENデコーダにより生成された信号の機能性はデコードされているCISC型命令セットに特有であり、よってCISC型命令セット並びに本発明のナノ命令フォーマットを検討すると当業者には明確になるはずである。)
EXT_CODEデコーダ1440はModR/Mバイトから3ビットの演算コード拡張子を抽出する。
IN_ORDERデコーダ1442は命令が「順次正しく」実行されなければならないかを確定するために命令をデコードする。これによって、全ての先行命令の実行終了までこの命令に対して何もしないようにIEUに指示が出される。一度命令の実行が完了すると、それに続く命令の実行が開始される。
制御フロージャンプサイズデコーダ1444はアドレスを指定するジャンプのディスプレースメント・サイズを表す。CF_JV_SIZEとラベルをつけた、このフィールドはジャンプのアドレス・サイズを指定する。これはCISC型命令セットに使用されるアドレス指定方式のタイプに特有のものである。
DEC_MDEST1446とラベルをつけた1ビットのデコーダは命令のデスティネーションがメモリ・アドレスであるか否かを表す。
最後に、命令やデコーダはレジスタ・コード(インデックス)選択のために3個のレジスタコードデコーダ1438を含んでいる。i486の命令フォーマットは命令内の様々な場所にあるレジスタ・フィールドのインデックスを符号化する。これらのフィールドのインデックスはRCデコーダにより抽出される。ModR/Mバイトは2個のレジスタ・インデックスも有しており、それらは演算コード自体により指定されたデスティネーション/ソースとして使用される。レジスタコードデコーダ1438は3つのRCフィールド、RC1、RC、及びRC3を生成する。プロセッサがエミュレーション・モードでない場合、RC1及びRC2は以下のようにModR/Mバイトから抽出され、その命令は浮動少数点命令ではない。即ち、RC1=ModR/Mバイトのビット[2:0]で、RC2=ModR/Mバイトのビット[5:3]で、そしてRC3=演算コードのビット[2:0]。基本(エミュレーションでない)モードの浮動小数点命令では、RC1、RC2、RC3は以下のように割り当てられる。
RC1:ST(0)=スタックの1番上
RC2:ST(1)=スタックの2番目のアイテム=スタックの上から2番目
RC3:ST(i)=スタックからi番目のアイテムで、そこにおいて、iは演算コードの中に指定されている。
エミュレーション・モードでは、RC1、RC2、RC3は以下のように割り当てられる。
RC1:バイト3のビット[4:0]
RC2:バイト2のビット[1:0]及びバイト3のビット[7:5]
RC3:バイト2のビット[6:1]
第15図はCST_GEN、NIR_GEN、SEL_GENの各デコーダ(1414、1438、1424)の代表的なブロック並びに論理ゲート図を表すものである。この第15図は、ナノ命令オペレーションA0及びA1のソース並びにデスティネーション・レジスタ・インデックス、さらにロード命令のデスティネーション・レジスタ・インデックスを生成するために、1バイトの演算コード、2バイトの演算コード及び浮動小数点のデコードされた結果がどのように選択され、遅延させられ、さらに結合されるかを示す実施例であると理解されるべきものである。選択、遅延、さらに多重化の技法は、1バイトの演算コード、2バイトの演算コード及び浮動小数点の結果を個別に生成しない信号を除く、命令データ1202により生成される全ての信号に適用される。さらに、言い換えれば、この実施例により生成された結果はアプリケーション専用であり、i486命令を本発明のナノ命令フォーマットにデコードすることに適用される。しかしながら、これらの実施例を通じてこれまでに説明してきた原理はCISC型からRISC型への命令のアライメント及びデコーディングに概ね適用可能である。
先に説明したように、CST_GENデコーダ1414はCST1、CST2及びCSTFの3つの出力を生成し、その各々は4つの定数5ビットレジスタ・フィールド(計20ビット)から成り立っている。SEL_GENはもっと先の部分MUX1512でのマルチプレクサの選択のためにレジスタ・フィールド制御信号(FLD1、FLD2、FLD3)を生成する。CST1、CST2かCSTFの結果並びにFLD1、FLD2、及びFLDFの結果の選択についてはマルチプレクサ・ブロック1502に概ね示す通りである。3ビットのMUXセレクト線1504は、命令が1バイトの演算コード、2バイトの演算コード、或いは浮動小数点命令を有しているかどうかで結果を選択するために使用される。
Ωサイクル・パイプライン遅延ラッチ1504はマルチプレクサ1502によって選択された結果と、3つのレジスタ制御フィールドのRC1、RC2、RC3を遅延させるために使用される。Ωパイプライン遅延ラッチ1504への各入力は対向してクロックされた一対のラッチ1508に送られる。このラッチの内容はマルチプレクサ1510により選択される。この配列はIAUとの関連で先に説明したΩサイクル遅延316に類似している。
さらにその先の多重化のステージはブロック1512に示す通りである。マルチプレクサ1502によって選択された定数レジスタ・フィールドは、1514に概ね示すように、regc1からregc4まで個々にラベルをつけた4つの個別のフィールドとしてマルチプレクサ1512へ入力される。ブロック1512への入力としても示したのは、演算コード及びModR/Mバイトからの抽出レジスタフィールド、RC1、RC2及びRC3である。概ね1518に示した動作A1用のソース及びデスティネーションのレジスタ・インデックスa1_rd及びa1_rsだけでなく、概ね1516に表わした動作A0用のソース及びデスティネーションのレジスタ・インデックスa0_rd及びa0_rsを生成するためにFLD制御信号1520の制御の下ブロック1512の論理により、regcフィールド並びにRCフィールドが結合される。ロード命令のデスティネーション・レジスタ・インデックスである、インデックス1d_rdもブロック1512で選択される。
4.0デコード済み命令FIFO
本発明におけるデコードFIFO(DFIFO)のブロック図は第16A図に示す通りである。DFIFOは4個の完全なバケットを保持し、その各々には4つのナノ命令、2つのイミディエト・データ・フィールド、及び1つのディスプレースメント・フィールドが入っている。各バケットはDFIFOの1レベルのパイプライン・レジスタに対応している。これらのバケットはIDUで生成されてIEUが新規のバケットを要求する各サイクル期間中にDFIFOに押し出される。バケット内のナノ命令はパケット0及びパケット1と呼ばれる2つのグループに分けられる。パケット0はロード、ALU、及び/または格納の動作で構成され、その動作は1、2、もしくは3ナノ命令に対応している。パケット1は1ナノ命令に相当するALU動作のみである。この分割の結果、1個のパケットは2つのALU動作のみを含み、その1つだけがメモリを参照できる。その後に続く命令が共にメモリ・オペランドを要求する場合、それらの命令は別々のバケットに入れられなければならない。
第16B図から分かるように、各パケット及びバケット全体に関する、相当量の一般的な情報があるだけである。この情報は一般情報FIFOに格納される。デフォルトでは、1個のバケット内に入った4つのナノ命令がNIR0からNIR3への順序で実行される。NIR3はNIR0〜NIR2の前に実行されなければならないことを示すようにバケットの一般情報ビットの一つを設定することができる。この特徴により連続する命令を単一のバケットにまとめることが容易になる。何故なら、その順序はもはやバケット要件を満たす能力に影響しないからである。
第16C図はバケット0〜バケット4のイミディエト・データ及びディスプレースメントFIFOを示す。IMM0はパケット0に対応するイミディエト・データを表し、IMM1はパケット1に対応するイミディエト・データを表している。DISPはパケット0に対応するディスプレースメントを表わしている。DISPフィールドはアドレス計算の一部としてしか使用されないから、パケット1はDISP情報を使用しない。
上述の3タイプのナノ命令の具体例を第17図に示す。フィールドの記述並びに定義については添付A、ページ1〜10に述べる。これらの表は各バケットの内容についての情報を提供するものである。
本発明に基づく様々な実施例を先に記述してきたが、あくまで例として提示したものであり、それにより限定されるものではないことが理解されるはずである。従って、本発明の広さ並びに範囲については上記の例としての実施例によって制限されるべきものではなく、以下に記載の特許請求の範囲及びそれに相当するものに従ってのみ定められるべきことである。
Claims (21)
- 不定数の命令バイトにそれぞれ細分された複合命令ストリームからの複合の可変長のコンピュータ命令を抽出し、さらに複合命令の個々の命令バイトをアライメントするための方法であって、
(1) 複合命令ストリームの一部を受けるステップと、
(2) 抽出シフタを用いて、第1命令バイトで始まる命令バイトの第1セットを抽出するステップと、
(3) 前記命令バイトのセットを整列ラッチへ渡すステップと、
(4) アライメントされた命令バイトを前記整列ラッチから次命令検出器へ出力するステップと、
(5) 前記次命令検出器を用いて、前記命令バイトのセットに基づき第1命令の終端を確定するステップと、
(6) 次のセットの命令バイトを抽出して、整列シフタへ供給するよう前記抽出シフタを制御するステップと、
(7) 次の命令をアライメントして出力するように前記整列シフタを制御するステップと、
(8) 前記整列シフタの前記出力を前記整列ラッチにラッチするステップと、
(9) アライメントされた命令バイトを前記整列ラッチから命令デコード・ユニットへ出力するステップと、
(10) アライメントされた命令バイトを1つまたはそれ以上のナノ命令動作へデコードするステップと、
(11) 1つまたはそれ以上のナノ命令動作を命令バケットへ入れるステップと、
(12) 前記命令ラッチが空でないときには、前記命令バケットを第1命令ラッチまたは第2命令ラッチに記憶するステップと、
(13) 各ナノ命令ごとに、前記第1および第2命令ラッチの内容を最終命令バケットに統合するステップと
によって構成され、
前記統合するステップとして、前記第1命令ラッチのナノ命令動作を前記最終命令バケットに記憶するステップと、前記第1命令ラッチのナノ命令動作が前記最終命令バケットを満たさないときは、1つまたはそれ以上の前記第2命令ラッチのナノ命令動作を前記最終命令バケットに記憶するステップとを含むことを特徴とする方法。 - ステップ(10)の前記ナノ命令動作が、1群のロード、格納および算術・論理の動作フィールドを含み、
ステップ(11)の前記命令バケットが、事前に定められたロード、格納および算術・論理の動作フィールドを含み、
ステップ(13)の前記最終命令バケットが事前に定められたロード、格納および算術・論理の動作フィールドを含み、
前記ステップ(13)がさらに、前記第1命令ラッチの動作フィールドを前記最終命令バケットへロードするステップと、次に前記事前に定められた最終命令バケットの動作フィールドが前記第1命令ラッチの動作フィールドのロードのあと使用されないままであるときは、前記第2命令ラッチの動作フィールドの1つまたはそれ以上を前記最終命令バケットにロードするステップを含むことを特徴とする請求項1に記載の方法。 - さらに、前記最終命令バケットをナノ命令デコーダに出力することを特徴とする請求項2に記載の方法。
- さらに、
アライメントされた命令バイトを前記ラッチからプレフィックス検出器へ出力するステップと、
1つまたはそれ以上のプレフィックスバイトがあるかどうかを調べて、プレフィクス情報を提供するステップとを含み、
YESのときは
(i) 前記プレフィックス情報をラッチし、
NOのときは
(ii) 前記次命令検出器の出力を選ぶことを特徴とする請求項2に記載の方法。 - サブステップ(i)が、さらに対応するアライメントされた命令とともに前記ラッチしたプレフィックス情報を出力するステップを含むことを特徴とする請求項4に記載の方法。
- 不定数の命令バイトを有する複合命令セット・コンピュータ(CISC)を、縮小命令セット・コンピュータ(RISC)上で処理するためにナノ命令動作にデコードするためのシステムであって、
(a) 複合命令を受けるための第1手段と、
(b) 前記第1手段に結合され、前記複合命令を1つまたはそれ以上のナノ命令動作にデコードするための第2手段と、
(c) 前記第2手段に対応して、前記ナノ命令動作を命令バケットに入れるための第3手段と、
(d) 前記第3手段に対応して、前記第1命令ラッチが空でないときには、前記命令バケットを第1命令ラッチおよび第2命令ラッチのうちの1つに記憶するための第4手段と、
(e) 前記第4手段に対応して、前記第1および第2命令ラッチの内容を各ナノ命令ごとに最終命令バケットに統合するための第5手段とを含み、
前記統合するための第5手段は、前記第1命令ラッチのナノ命令動作を前記最終命令バケットに記憶し、前記第1命令ラッチのナノ命令動作が前記最終命令バケットを満たさないときは、1つまたはそれ以上の前記第2命令ラッチのナノ命令動作を前記最終命令バケットに記憶することを特徴とするシステム。 - 前記第2手段の前記ナノ命令動作が、1群のロード、格納および算術・論理の動作フィールドを含み、
前記第3手段の前記命令バケットが、事前に定められたロード、格納および算術・論理の動作フィールドを含み、
前記第5手段の前記最終命令バケットが事前に定められたロード、格納および算術・論理の動作フィールドを含み、
前記第5手段がさらに、前記第1命令ラッチの動作フィールドを前記最終命令バケットへロードするステップと、次に前記事前に定められた最終命令バケットの動作フィールドが前記第1命令ラッチの動作フィールドのロードのあと使用されないままであるときは、前記第2命令ラッチの動作フィールドの1つまたはそれ以上を前記最終命令バケットにロードするステップを含むことを特徴とする請求項6に記載のシステム。 - 前記命令および最終バケットがそれぞれ第1および第2命令パケットを含むことを特徴とする請求項6に記載のシステム。
- (i)前記第1および第2命令ラッチが、1つの算術・論理の動作だけを記憶するか
(ii)前記第1および第2命令ラッチのうちの一方が、1つの算術・論理の動作だけを記憶し、もう一方が1つのロード演算、1つの格納動作、および1つの算術・論理の動作だけを記憶する
ときに、前記第1および第2バケットの前記統合が行われることを特徴とする請求項7に記載のシステム。 - 前記第3手段がマルチプレクサを含むことを特徴とする請求項7に記載のシステム。
- 前記第4手段が1セットの制御ゲートを含むことを特徴とする請求項7に記載のシステム。
- 前記第1命令パケットが3つのナノ命令の動作フィールドを含むことを特徴とする請求項8に記載のシステム。
- 前記第2命令パケットが1つのナノ命令の動作フィールドを含むことを特徴とする請求項8に記載のシステム。
- 前記第1命令パケットの前記3つのナノ命令の動作フィールドが、ロードナノ命令動作フィールド、格納ナノ命令動作フィールド、および算術・論理ナノ命令の動作フィールドを含むことをを特徴とする請求項12に記載のシステム。
- 前記第2命令パケットの前記1つのナノ命令動作フィールドが算術・論理ナノ命令動作フィールドを含むことを特徴とする請求項13に記載のシステム。
- 不定数の命令バイトを有する複合命令セットコンピュータ(CISC)を、縮小命令セットコンピュータ(RISC)上で処理するためにナノ命令動作にデコードするための方法であって、
(1) 複合命令を受けるステップと、
(2) 前記複合命令を1つまたはそれ以上のナノ命令動作へデコードするステップと、
(3) 前記ナノ命令動作を命令バケットへ入れるステップと
(4) 第1命令ラッチが空でないときは、前記命令バケットを第1命令ラッチまたは第2命令ラッチに記憶するステップと、
(5) 前記第1命令ラッチおよび第2命令ラッチの内容を各ナノ命令ごとに最終命令バケットに統合するステップとを含み、
前記統合するステップとして、前記第1命令ラッチのナノ命令動作を前記最終命令バケットに記憶するステップと、前記第1命令ラッチのナノ命令動作が前記最終命令バケットを満たさないときは、1つまたはそれ以上の前記第2命令ラッチのナノ命令動作を前記最終命令バケットに記憶するステップとを含むことを特徴とする方法。 - ステップ(2)の前記ナノ命令動作が、1群のロード、格納および算術・論理の動作フィールドを含み、
ステップ(3)の前記命令バケットが、事前に定められたロード、格納および算術・論理の動作フィールドを含み、
ステップ(5)の前記最終命令バケットが事前に定められたロード、格納および算術・論理の動作フィールドを含み、
前記ステップ(5)がさらに、前記第1命令ラッチの動作フィールドを前記最終命令バケットへロードするステップと、次に前記事前に定められた最終命令バケットの動作フィールドが前記第1命令ラッチの動作フィールドのロードのあと使用されないままであるときは、前記第2命令ラッチの動作フィールドの1つまたはそれ以上を前記最終命令バケットにロードするステップを含むことを特徴とする請求項16に記載の方法。 - 前記統合するステップとして、さらに前記第1および第2命令ラッチの前記内容を、前記最終命令バケット内の第1および第2命令パケットに記憶するステップを含むことを特徴とする請求項17に記載の方法。
- 前記統合するステップとして、さらに前記第1および第2命令ラッチの前記内容を、前記最終命令バケット内の3つのナノ命令の動作フィールドに記憶するステップを含むことを特徴とする請求項18に記載の方法。
- 前記さらに記憶するステップとして、前記第1および第2命令ラッチの前記内容を、前記第2命令パケットの1つのナノ命令の動作フィールドに記憶するステップを含むことを特徴とする請求項19に記載の方法。
- 前記統合するステップとして、
(i) 前記第1および第2命令ラッチが、1つの算術・論理演算を記憶するだけであるかどうか、また
(ii) 前記第1および第2命令ラッチの一方が1つの算術・論理演算を記憶するだけであり、もう一方が1つのロード演算、1つの格納動作および1つの算術・論理だけを記憶するのかどうか
を確定することによって、前記第1および第2バケットの前記統合を行うことを特徴とする請求項17に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US857,599 | 1992-03-31 | ||
US07/857,599 US5438668A (en) | 1992-03-31 | 1992-03-31 | System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer |
PCT/JP1993/000417 WO1993020507A2 (en) | 1992-03-31 | 1993-03-30 | Cisc to risc instruction translation alignment and decoding |
Related Child Applications (8)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000007260A Division JP3544332B2 (ja) | 1992-03-31 | 2000-01-17 | コンピュータシステム |
JP2000007265A Division JP3544335B2 (ja) | 1992-03-31 | 2000-01-17 | 複合命令ストリームのアライメントシステム |
JP2000007261A Division JP2000215050A (ja) | 1992-03-31 | 2000-01-17 | プロセッサ |
JP2000007264A Division JP3544334B2 (ja) | 1992-03-31 | 2000-01-17 | 命令ストリームの変換方法 |
JP2000007262A Division JP2000215051A (ja) | 1992-03-31 | 2000-01-17 | 命令ストリ―ムの変換システム |
JP2000007263A Division JP3544333B2 (ja) | 1992-03-31 | 2000-01-17 | コンピュータシステム |
JP2000007259A Division JP3544331B2 (ja) | 1992-03-31 | 2000-01-17 | 命令ストリームの変換方法 |
JP2000007258A Division JP3544330B2 (ja) | 1992-03-31 | 2000-01-17 | 命令ストリームの変換システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07505968A JPH07505968A (ja) | 1995-06-29 |
JP3547052B2 true JP3547052B2 (ja) | 2004-07-28 |
Family
ID=25326342
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP51730693A Expired - Lifetime JP3547052B2 (ja) | 1992-03-31 | 1993-03-30 | Cisc型からrisc型命令への変換のためのアライメント並びにデコーディング |
JP2000007262A Withdrawn JP2000215051A (ja) | 1992-03-31 | 2000-01-17 | 命令ストリ―ムの変換システム |
JP2000007261A Withdrawn JP2000215050A (ja) | 1992-03-31 | 2000-01-17 | プロセッサ |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000007262A Withdrawn JP2000215051A (ja) | 1992-03-31 | 2000-01-17 | 命令ストリ―ムの変換システム |
JP2000007261A Withdrawn JP2000215050A (ja) | 1992-03-31 | 2000-01-17 | プロセッサ |
Country Status (6)
Country | Link |
---|---|
US (8) | US5438668A (ja) |
EP (2) | EP1028370B1 (ja) |
JP (3) | JP3547052B2 (ja) |
KR (2) | KR100343530B1 (ja) |
DE (2) | DE69333630T2 (ja) |
WO (1) | WO1993020507A2 (ja) |
Families Citing this family (243)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5226126A (en) * | 1989-02-24 | 1993-07-06 | Nexgen Microsystems | Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags |
US5781753A (en) | 1989-02-24 | 1998-07-14 | Advanced Micro Devices, Inc. | Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions |
US5768575A (en) * | 1989-02-24 | 1998-06-16 | Advanced Micro Devices, Inc. | Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions |
US5438668A (en) * | 1992-03-31 | 1995-08-01 | Seiko Epson Corporation | System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer |
US5628021A (en) * | 1992-12-31 | 1997-05-06 | Seiko Epson Corporation | System and method for assigning tags to control instruction processing in a superscalar processor |
US5463748A (en) | 1993-06-30 | 1995-10-31 | Intel Corporation | Instruction buffer for aligning instruction sets using boundary detection |
JP3248992B2 (ja) * | 1993-07-13 | 2002-01-21 | 富士通株式会社 | マルチプロセッサ |
US5903772A (en) * | 1993-10-29 | 1999-05-11 | Advanced Micro Devices, Inc. | Plural operand buses of intermediate widths coupling to narrower width integer and wider width floating point superscalar processing core |
EP0651321B1 (en) * | 1993-10-29 | 2001-11-14 | Advanced Micro Devices, Inc. | Superscalar microprocessors |
US5630082A (en) * | 1993-10-29 | 1997-05-13 | Advanced Micro Devices, Inc. | Apparatus and method for instruction queue scanning |
US5689672A (en) * | 1993-10-29 | 1997-11-18 | Advanced Micro Devices, Inc. | Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions |
EP0651320B1 (en) * | 1993-10-29 | 2001-05-23 | Advanced Micro Devices, Inc. | Superscalar instruction decoder |
DE69434669T2 (de) * | 1993-10-29 | 2006-10-12 | Advanced Micro Devices, Inc., Sunnyvale | Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge |
JPH07239780A (ja) * | 1994-01-06 | 1995-09-12 | Motohiro Kurisu | 1クロック可変長命令実行処理型命令読み込み電子計 算機 |
US5884057A (en) * | 1994-01-11 | 1999-03-16 | Exponential Technology, Inc. | Temporal re-alignment of a floating point pipeline to an integer pipeline for emulation of a load-operate architecture on a load/store processor |
US5600806A (en) * | 1994-03-01 | 1997-02-04 | Intel Corporation | Method and apparatus for aligning an instruction boundary in variable length macroinstructions with an instruction buffer |
JP3212213B2 (ja) * | 1994-03-16 | 2001-09-25 | 株式会社日立製作所 | データ処理装置 |
US5574927A (en) * | 1994-03-25 | 1996-11-12 | International Meta Systems, Inc. | RISC architecture computer configured for emulation of the instruction set of a target computer |
DE69423206T2 (de) * | 1994-04-28 | 2000-09-07 | Hewlett Packard Co | Rechnervorrichtung mit Mitteln zum Erzwingen der Ausführung von Befehlen in regelmässiger Folge |
US5559975A (en) | 1994-06-01 | 1996-09-24 | Advanced Micro Devices, Inc. | Program counter update mechanism |
JP2982618B2 (ja) * | 1994-06-28 | 1999-11-29 | 日本電気株式会社 | メモリ選択回路 |
US5598546A (en) * | 1994-08-31 | 1997-01-28 | Exponential Technology, Inc. | Dual-architecture super-scalar pipeline |
US5619663A (en) * | 1994-09-16 | 1997-04-08 | Philips Electronics North America Corp. | Computer instruction prefetch system |
US6496922B1 (en) * | 1994-10-31 | 2002-12-17 | Sun Microsystems, Inc. | Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation |
US5640526A (en) * | 1994-12-21 | 1997-06-17 | International Business Machines Corporation | Superscaler instruction pipeline having boundary indentification logic for variable length instructions |
US5832249A (en) * | 1995-01-25 | 1998-11-03 | Advanced Micro Devices, Inc. | High performance superscalar alignment unit |
US6006324A (en) | 1995-01-25 | 1999-12-21 | Advanced Micro Devices, Inc. | High performance superscalar alignment unit |
US5737550A (en) * | 1995-03-28 | 1998-04-07 | Advanced Micro Devices, Inc. | Cache memory to processor bus interface and method thereof |
US5751982A (en) * | 1995-03-31 | 1998-05-12 | Apple Computer, Inc. | Software emulation system with dynamic translation of emulated instructions for increased processing speed |
US5758114A (en) * | 1995-04-12 | 1998-05-26 | Advanced Micro Devices, Inc. | High speed instruction alignment unit for aligning variable byte-length instructions according to predecode information in a superscalar microprocessor |
US5991869A (en) * | 1995-04-12 | 1999-11-23 | Advanced Micro Devices, Inc. | Superscalar microprocessor including a high speed instruction alignment unit |
US5822558A (en) * | 1995-04-12 | 1998-10-13 | Advanced Micro Devices, Inc. | Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor |
US5815736A (en) * | 1995-05-26 | 1998-09-29 | National Semiconductor Corporation | Area and time efficient extraction circuit |
US6237074B1 (en) * | 1995-05-26 | 2001-05-22 | National Semiconductor Corp. | Tagged prefetch and instruction decoder for variable length instruction set and method of operation |
US5680578A (en) * | 1995-06-07 | 1997-10-21 | Advanced Micro Devices, Inc. | Microprocessor using an instruction field to specify expanded functionality and a computer system employing same |
JP3451595B2 (ja) * | 1995-06-07 | 2003-09-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ |
US5875315A (en) * | 1995-06-07 | 1999-02-23 | Advanced Micro Devices, Inc. | Parallel and scalable instruction scanning unit |
US5822778A (en) * | 1995-06-07 | 1998-10-13 | Advanced Micro Devices, Inc. | Microprocessor and method of using a segment override prefix instruction field to expand the register file |
US5768574A (en) * | 1995-06-07 | 1998-06-16 | Advanced Micro Devices, Inc. | Microprocessor using an instruction field to expand the condition flags and a computer system employing the microprocessor |
US5867701A (en) * | 1995-06-12 | 1999-02-02 | Intel Corporation | System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow |
US5678032A (en) * | 1995-09-06 | 1997-10-14 | Bull Hn Information Systems Inc. | Method of optimizing the execution of program instuctions by an emulator using a plurality of execution units |
EP0842466B1 (en) * | 1995-08-01 | 2010-08-18 | Bull HN Information Systems Inc. | Method for emulating program instructions |
US5781789A (en) * | 1995-08-31 | 1998-07-14 | Advanced Micro Devices, Inc. | Superscaler microprocessor employing a parallel mask decoder |
US5794063A (en) * | 1996-01-26 | 1998-08-11 | Advanced Micro Devices, Inc. | Instruction decoder including emulation using indirect specifiers |
US5809273A (en) * | 1996-01-26 | 1998-09-15 | Advanced Micro Devices, Inc. | Instruction predecode and multiple instruction decode |
US5926642A (en) * | 1995-10-06 | 1999-07-20 | Advanced Micro Devices, Inc. | RISC86 instruction set |
US6093213A (en) * | 1995-10-06 | 2000-07-25 | Advanced Micro Devices, Inc. | Flexible implementation of a system management mode (SMM) in a processor |
US5920713A (en) * | 1995-10-06 | 1999-07-06 | Advanced Micro Devices, Inc. | Instruction decoder including two-way emulation code branching |
EP0853779B1 (en) * | 1995-10-06 | 2003-08-13 | Advanced Micro Devices, Inc. | Instruction predecode and multiple instruction decode |
US5819056A (en) * | 1995-10-06 | 1998-10-06 | Advanced Micro Devices, Inc. | Instruction buffer organization method and system |
US5872947A (en) * | 1995-10-24 | 1999-02-16 | Advanced Micro Devices, Inc. | Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions |
US5768553A (en) * | 1995-10-30 | 1998-06-16 | Advanced Micro Devices, Inc. | Microprocessor using an instruction field to define DSP instructions |
US5796974A (en) * | 1995-11-07 | 1998-08-18 | Advanced Micro Devices, Inc. | Microcode patching apparatus and method |
US5790825A (en) * | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
US5809272A (en) * | 1995-11-29 | 1998-09-15 | Exponential Technology Inc. | Early instruction-length pre-decode of variable-length instructions in a superscalar processor |
US5778246A (en) * | 1995-12-27 | 1998-07-07 | Intel Corporation | Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline |
US5740392A (en) * | 1995-12-27 | 1998-04-14 | Intel Corporation | Method and apparatus for fast decoding of 00H and OFH mapped instructions |
US5710914A (en) * | 1995-12-29 | 1998-01-20 | Atmel Corporation | Digital signal processing method and system implementing pipelined read and write operations |
US5819080A (en) * | 1996-01-02 | 1998-10-06 | Advanced Micro Devices, Inc. | Microprocessor using an instruction field to specify condition flags for use with branch instructions and a computer system employing the microprocessor |
US5826089A (en) * | 1996-01-04 | 1998-10-20 | Advanced Micro Devices, Inc. | Instruction translation unit configured to translate from a first instruction set to a second instruction set |
KR100618756B1 (ko) * | 1996-01-24 | 2007-05-04 | 선 마이크로시스템즈 인코퍼레이티드 | 네트워크또는로컬메모리로부터수신된명령세트를실행하는프로세서및컴퓨터시스템 |
US6532531B1 (en) * | 1996-01-24 | 2003-03-11 | Sun Microsystems, Inc. | Method frame storage using multiple memory circuits |
US6105124A (en) * | 1996-01-26 | 2000-08-15 | Intel Corporation | Method and apparatus for merging binary translated basic blocks of instructions |
US5790821A (en) * | 1996-03-08 | 1998-08-04 | Advanced Micro Devices, Inc. | Control bit vector storage for storing control vectors corresponding to instruction operations in a microprocessor |
US5867681A (en) * | 1996-05-23 | 1999-02-02 | Lsi Logic Corporation | Microprocessor having register dependent immediate decompression |
US5822560A (en) * | 1996-05-23 | 1998-10-13 | Advanced Micro Devices, Inc. | Apparatus for efficient instruction execution via variable issue and variable control vectors per issue |
US5896519A (en) * | 1996-06-10 | 1999-04-20 | Lsi Logic Corporation | Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions |
US5905893A (en) * | 1996-06-10 | 1999-05-18 | Lsi Logic Corporation | Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set |
JP2000515275A (ja) * | 1996-07-16 | 2000-11-14 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 高速命令整列ユニットを含むスーパースカラマイクロプロセッサ |
US6049863A (en) * | 1996-07-24 | 2000-04-11 | Advanced Micro Devices, Inc. | Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor |
US5867680A (en) * | 1996-07-24 | 1999-02-02 | Advanced Micro Devices, Inc. | Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions |
US5958061A (en) * | 1996-07-24 | 1999-09-28 | Transmeta Corporation | Host microprocessor with apparatus for temporarily holding target processor state |
US6199152B1 (en) | 1996-08-22 | 2001-03-06 | Transmeta Corporation | Translated memory protection apparatus for an advanced microprocessor |
US5926832A (en) * | 1996-09-26 | 1999-07-20 | Transmeta Corporation | Method and apparatus for aliasing memory data in an advanced microprocessor |
US5890009A (en) * | 1996-12-12 | 1999-03-30 | International Business Machines Corporation | VLIW architecture and method for expanding a parcel |
US5870576A (en) * | 1996-12-16 | 1999-02-09 | Hewlett-Packard Company | Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures |
US5918031A (en) * | 1996-12-18 | 1999-06-29 | Intel Corporation | Computer utilizing special micro-operations for encoding of multiple variant code flows |
US5923862A (en) * | 1997-01-28 | 1999-07-13 | Samsung Electronics Co., Ltd. | Processor that decodes a multi-cycle instruction into single-cycle micro-instructions and schedules execution of the micro-instructions |
US5909567A (en) * | 1997-02-28 | 1999-06-01 | Advanced Micro Devices, Inc. | Apparatus and method for native mode processing in a RISC-based CISC processor |
US5852727A (en) * | 1997-03-10 | 1998-12-22 | Advanced Micro Devices, Inc. | Instruction scanning unit for locating instructions via parallel scanning of start and end byte information |
US5875336A (en) * | 1997-03-31 | 1999-02-23 | International Business Machines Corporation | Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system |
US6047368A (en) * | 1997-03-31 | 2000-04-04 | Sun Microsystems, Inc. | Processor architecture including grouping circuit |
US6009511A (en) * | 1997-06-11 | 1999-12-28 | Advanced Micro Devices, Inc. | Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers |
US5940602A (en) * | 1997-06-11 | 1999-08-17 | Advanced Micro Devices, Inc. | Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations |
US5933626A (en) * | 1997-06-12 | 1999-08-03 | Advanced Micro Devices, Inc. | Apparatus and method for tracing microprocessor instructions |
US5930491A (en) * | 1997-06-18 | 1999-07-27 | International Business Machines Corporation | Identification of related instructions resulting from external to internal translation by use of common ID field for each group |
US5978901A (en) * | 1997-08-21 | 1999-11-02 | Advanced Micro Devices, Inc. | Floating point and multimedia unit with data type reclassification capability |
US6230259B1 (en) | 1997-10-31 | 2001-05-08 | Advanced Micro Devices, Inc. | Transparent extended state save |
US5940626A (en) * | 1997-11-03 | 1999-08-17 | Teragen Corporation | Processor having an instruction set architecture implemented with hierarchically organized primitive operations |
US6438679B1 (en) | 1997-11-03 | 2002-08-20 | Brecis Communications | Multiple ISA support by a processor using primitive operations |
US6178482B1 (en) | 1997-11-03 | 2001-01-23 | Brecis Communications | Virtual register sets |
US6016539A (en) * | 1997-11-03 | 2000-01-18 | Teragen Corporation | Datapath control logic for processors having instruction set architectures implemented with hierarchically organized primitive operations |
US6067601A (en) * | 1997-11-03 | 2000-05-23 | Brecis Communications | Cache memory based instruction execution |
US5923894A (en) | 1997-11-03 | 1999-07-13 | Teragen Corporation | Adaptable input/output pin control |
US6216218B1 (en) | 1997-11-03 | 2001-04-10 | Donald L. Sollars | Processor having a datapath and control logic constituted with basis execution blocks |
US6157996A (en) * | 1997-11-13 | 2000-12-05 | Advanced Micro Devices, Inc. | Processor programably configurable to execute enhanced variable byte length instructions including predicated execution, three operand addressing, and increased register space |
US6021484A (en) * | 1997-11-14 | 2000-02-01 | Samsung Electronics Co., Ltd. | Dual instruction set architecture |
US6134649A (en) * | 1997-11-17 | 2000-10-17 | Advanced Micro Devices, Inc. | Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction |
US6167506A (en) * | 1997-11-17 | 2000-12-26 | Advanced Micro Devices, Inc. | Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location |
US6134650A (en) * | 1997-12-12 | 2000-10-17 | Advanced Micro Devices, Inc. | Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data |
US6061775A (en) * | 1997-12-12 | 2000-05-09 | Advanced Micro Devices, Inc. | Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types |
US6039765A (en) * | 1997-12-15 | 2000-03-21 | Motorola, Inc. | Computer instruction which generates multiple results of different data types to improve software emulation |
US6012138A (en) * | 1997-12-19 | 2000-01-04 | Lsi Logic Corporation | Dynamically variable length CPU pipeline for efficiently executing two instruction sets |
US6044460A (en) * | 1998-01-16 | 2000-03-28 | Lsi Logic Corporation | System and method for PC-relative address generation in a microprocessor with a pipeline architecture |
US5881260A (en) * | 1998-02-09 | 1999-03-09 | Hewlett-Packard Company | Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction |
US6425070B1 (en) * | 1998-03-18 | 2002-07-23 | Qualcomm, Inc. | Variable length instruction decoder |
KR100835148B1 (ko) * | 1998-03-18 | 2008-06-04 | 퀄컴 인코포레이티드 | 디지털 신호처리기 |
US6014735A (en) * | 1998-03-31 | 2000-01-11 | Intel Corporation | Instruction set extension using prefixes |
US6061786A (en) * | 1998-04-23 | 2000-05-09 | Advanced Micro Devices, Inc. | Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction |
US6141745A (en) * | 1998-04-30 | 2000-10-31 | Advanced Micro Devices, Inc. | Functional bit identifying a prefix byte via a particular state regardless of type of instruction |
US6175908B1 (en) | 1998-04-30 | 2001-01-16 | Advanced Micro Devices, Inc. | Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte |
US6275927B2 (en) * | 1998-09-21 | 2001-08-14 | Advanced Micro Devices. | Compressing variable-length instruction prefix bytes |
US6253309B1 (en) | 1998-09-21 | 2001-06-26 | Advanced Micro Devices, Inc. | Forcing regularity into a CISC instruction set by padding instructions |
US6460116B1 (en) | 1998-09-21 | 2002-10-01 | Advanced Micro Devices, Inc. | Using separate caches for variable and generated fixed-length instructions |
US6339822B1 (en) | 1998-10-02 | 2002-01-15 | Advanced Micro Devices, Inc. | Using padded instructions in a block-oriented cache |
US6240506B1 (en) | 1998-10-02 | 2001-05-29 | Advanced Micro Devices, Inc. | Expanding instructions with variable-length operands to a fixed length |
US6260134B1 (en) | 1998-11-02 | 2001-07-10 | Advanced Micro Devices, Inc. | Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte |
US7225436B1 (en) | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6332215B1 (en) | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US20050149694A1 (en) * | 1998-12-08 | 2005-07-07 | Mukesh Patel | Java hardware accelerator using microcode engine |
US6826749B2 (en) | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7275246B1 (en) | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US8127121B2 (en) * | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US6826748B1 (en) | 1999-01-28 | 2004-11-30 | Ati International Srl | Profiling program execution into registers of a computer |
US7111290B1 (en) * | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
US8065504B2 (en) * | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US6453407B1 (en) * | 1999-02-10 | 2002-09-17 | Infineon Technologies Ag | Configurable long instruction word architecture and instruction set |
US6581154B1 (en) * | 1999-02-17 | 2003-06-17 | Intel Corporation | Expanding microcode associated with full and partial width macroinstructions |
EP1050799A1 (en) | 1999-05-03 | 2000-11-08 | STMicroelectronics S.A. | Execution of a computer program |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
DE60024288T2 (de) | 1999-08-19 | 2006-08-17 | Manufacturing And Technology Conversion International, Inc. | Einen dampfreformer und eine brennstoffzelle enthaltendes integriertes system |
US7254806B1 (en) | 1999-08-30 | 2007-08-07 | Ati International Srl | Detecting reordered side-effects |
US7213129B1 (en) * | 1999-08-30 | 2007-05-01 | Intel Corporation | Method and system for a two stage pipelined instruction decode and alignment using previous instruction length |
US6460132B1 (en) | 1999-08-31 | 2002-10-01 | Advanced Micro Devices, Inc. | Massively parallel instruction predecoding |
US6405303B1 (en) | 1999-08-31 | 2002-06-11 | Advanced Micro Devices, Inc. | Massively parallel decoding and execution of variable-length instructions |
US6438664B1 (en) | 1999-10-27 | 2002-08-20 | Advanced Micro Devices, Inc. | Microcode patch device and method for patching microcode using match registers and patch routines |
WO2001050251A1 (en) * | 1999-12-31 | 2001-07-12 | Intel Corporation | External microcode |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
US6654872B1 (en) * | 2000-01-27 | 2003-11-25 | Ati International Srl | Variable length instruction alignment device and method |
US6542862B1 (en) * | 2000-02-18 | 2003-04-01 | Hewlett-Packard Development Company, L.P. | Determining register dependency in multiple architecture systems |
US7584234B2 (en) * | 2002-05-23 | 2009-09-01 | Qsigma, Inc. | Method and apparatus for narrow to very wide instruction generation for arithmetic circuitry |
US6968469B1 (en) | 2000-06-16 | 2005-11-22 | Transmeta Corporation | System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored |
US6877084B1 (en) | 2000-08-09 | 2005-04-05 | Advanced Micro Devices, Inc. | Central processing unit (CPU) accessing an extended register set in an extended register mode |
US6981132B2 (en) | 2000-08-09 | 2005-12-27 | Advanced Micro Devices, Inc. | Uniform register addressing using prefix byte |
US6633969B1 (en) | 2000-08-11 | 2003-10-14 | Lsi Logic Corporation | Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions |
SE0003398D0 (sv) * | 2000-09-22 | 2000-09-22 | Ericsson Telefon Ab L M | Optimization of a pipelined processor system |
EP1197847A3 (en) * | 2000-10-10 | 2003-05-21 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US7149878B1 (en) * | 2000-10-30 | 2006-12-12 | Mips Technologies, Inc. | Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values |
US6738792B1 (en) | 2001-03-09 | 2004-05-18 | Advanced Micro Devices, Inc. | Parallel mask generator |
JP4542722B2 (ja) * | 2001-04-25 | 2010-09-15 | 富士通株式会社 | 命令処理方法 |
US7107439B2 (en) * | 2001-08-10 | 2006-09-12 | Mips Technologies, Inc. | System and method of controlling software decompression through exceptions |
US8769508B2 (en) | 2001-08-24 | 2014-07-01 | Nazomi Communications Inc. | Virtual machine hardware for RISC and CISC processors |
US7107584B2 (en) * | 2001-10-23 | 2006-09-12 | Microsoft Corporation | Data alignment between native and non-native shared data structures |
US20030093775A1 (en) * | 2001-11-14 | 2003-05-15 | Ronald Hilton | Processing of self-modifying code under emulation |
US7092869B2 (en) * | 2001-11-14 | 2006-08-15 | Ronald Hilton | Memory address prediction under emulation |
US7493470B1 (en) | 2001-12-07 | 2009-02-17 | Arc International, Plc | Processor apparatus and methods optimized for control applications |
US7278137B1 (en) | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
CN1625731A (zh) * | 2002-01-31 | 2005-06-08 | Arc国际公司 | 具有多种长度指令集体系结构的可配置数据处理器 |
US7785340B2 (en) * | 2002-02-04 | 2010-08-31 | Boston Scientific Scimed, Inc. | Bonding sleeve for medical device |
US6977162B2 (en) * | 2002-03-01 | 2005-12-20 | Ravgen, Inc. | Rapid analysis of variations in a genome |
US6957321B2 (en) | 2002-06-19 | 2005-10-18 | Intel Corporation | Instruction set extension using operand bearing NOP instructions |
EP1387256B1 (en) | 2002-07-31 | 2018-11-21 | Texas Instruments Incorporated | Program counter adjustment based on the detection of an instruction prefix |
EP1387252B1 (en) * | 2002-07-31 | 2019-02-13 | Texas Instruments Incorporated | Instruction prefix to indicate system commands |
US7349934B2 (en) * | 2002-12-20 | 2008-03-25 | Texas Instruments Incorporated | Processor system and method with combined data left and right shift operation |
US7444471B1 (en) * | 2002-12-30 | 2008-10-28 | Transmeta Corporation | Method and system for using external storage to amortize CPU cycle utilization |
EP1447742A1 (en) | 2003-02-11 | 2004-08-18 | STMicroelectronics S.r.l. | Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor |
US20040193845A1 (en) * | 2003-03-24 | 2004-09-30 | Sun Microsystems, Inc. | Stall technique to facilitate atomicity in processor execution of helper set |
US7219218B2 (en) * | 2003-03-31 | 2007-05-15 | Sun Microsystems, Inc. | Vector technique for addressing helper instruction groups associated with complex instructions |
US7917734B2 (en) | 2003-06-30 | 2011-03-29 | Intel Corporation | Determining length of instruction with multiple byte escape code based on information from other than opcode byte |
US7707389B2 (en) * | 2003-10-31 | 2010-04-27 | Mips Technologies, Inc. | Multi-ISA instruction fetch unit for a processor, and applications thereof |
US7404178B2 (en) * | 2004-02-18 | 2008-07-22 | Hewlett-Packard Development Company, L.P. | ROM-embedded debugging of computer |
US7873815B2 (en) * | 2004-03-04 | 2011-01-18 | Qualcomm Incorporated | Digital signal processors with configurable dual-MAC and dual-ALU |
US20070266406A1 (en) * | 2004-11-09 | 2007-11-15 | Murali Aravamudan | Method and system for performing actions using a non-intrusive television with reduced text input |
US7895218B2 (en) * | 2004-11-09 | 2011-02-22 | Veveo, Inc. | Method and system for performing searches for television content using reduced text input |
US20060101504A1 (en) * | 2004-11-09 | 2006-05-11 | Veveo.Tv, Inc. | Method and system for performing searches for television content and channels using a non-intrusive television interface and with reduced text input |
US20060155961A1 (en) * | 2005-01-06 | 2006-07-13 | International Business Machines Corporation | Apparatus and method for reformatting instructions before reaching a dispatch point in a superscalar processor |
US7646886B2 (en) * | 2005-05-11 | 2010-01-12 | Lockheed Martin Corporation | Closely-spaced multiple targets detection using a regional window as a discriminant function |
US7543287B2 (en) * | 2005-06-30 | 2009-06-02 | Intel Corporation | Using a block device interface to invoke device controller functionality |
US7454492B2 (en) * | 2005-08-26 | 2008-11-18 | International Business Machines Corporation | Method and apparatus for configuring and modeling server information in an enterprise tooling environment |
US7779011B2 (en) | 2005-08-26 | 2010-08-17 | Veveo, Inc. | Method and system for dynamically processing ambiguous, reduced text search queries and highlighting results thereof |
US7788266B2 (en) | 2005-08-26 | 2010-08-31 | Veveo, Inc. | Method and system for processing ambiguous, multi-term search queries |
US20070074199A1 (en) * | 2005-09-27 | 2007-03-29 | Sebastian Schoenberg | Method and apparatus for delivering microcode updates through virtual machine operations |
US20070083736A1 (en) * | 2005-10-06 | 2007-04-12 | Aravindh Baktha | Instruction packer for digital signal processor |
US7644054B2 (en) * | 2005-11-23 | 2010-01-05 | Veveo, Inc. | System and method for finding desired results by incremental search using an ambiguous keypad with the input containing orthographic and typographic errors |
US7792666B2 (en) * | 2006-05-03 | 2010-09-07 | Sony Computer Entertainment Inc. | Translation block invalidation prehints in emulation of a target system on a host system |
US7835998B2 (en) | 2006-03-06 | 2010-11-16 | Veveo, Inc. | Methods and systems for selecting and presenting content on a first system based on user preferences learned on a second system |
US8073860B2 (en) | 2006-03-30 | 2011-12-06 | Veveo, Inc. | Method and system for incrementally selecting and providing relevant search engines in response to a user query |
WO2007124436A2 (en) | 2006-04-20 | 2007-11-01 | Veveo, Inc. | User interface methods and systems for selecting and presenting content based on relationships between the user and other members of an organization |
EP2062171A4 (en) * | 2006-09-14 | 2010-10-06 | Veveo Inc | METHOD AND SYSTEMS FOR THE DYNAMIC REORGANIZATION OF SEARCH RESULTS IN HIERARCHICALLY ORGANIZED CLAUSE CLUSTERS |
US7925986B2 (en) | 2006-10-06 | 2011-04-12 | Veveo, Inc. | Methods and systems for a linear character selection display interface for ambiguous text input |
WO2008063987A2 (en) | 2006-11-13 | 2008-05-29 | Veveo, Inc. | Method of and system for selecting and presenting content based on user identification |
US9177111B1 (en) | 2006-11-14 | 2015-11-03 | Hitachi Global Storage Technologies Netherlands B.V. | Systems and methods for protecting software |
WO2008148012A1 (en) | 2007-05-25 | 2008-12-04 | Veveo, Inc. | System and method for text disambiguation and context designation in incremental search |
US8060356B2 (en) | 2007-12-19 | 2011-11-15 | Sony Computer Entertainment Inc. | Processor emulation using fragment level translation |
US8281109B2 (en) | 2007-12-27 | 2012-10-02 | Intel Corporation | Compressed instruction format |
US8028153B2 (en) * | 2008-08-14 | 2011-09-27 | International Business Machines Corporation | Data dependent instruction decode |
CN101819517B (zh) * | 2009-05-19 | 2013-05-22 | 威盛电子股份有限公司 | 适用于微处理器的装置及方法 |
CN101853148B (zh) * | 2009-05-19 | 2014-04-23 | 威盛电子股份有限公司 | 适用于微处理器的装置及方法 |
US9166714B2 (en) | 2009-09-11 | 2015-10-20 | Veveo, Inc. | Method of and system for presenting enriched video viewing analytics |
TWI424445B (zh) * | 2009-12-29 | 2014-01-21 | Macronix Int Co Ltd | 指令解碼電路及其方法 |
US20110191332A1 (en) | 2010-02-04 | 2011-08-04 | Veveo, Inc. | Method of and System for Updating Locally Cached Content Descriptor Information |
WO2012103245A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines Inc. | Guest instruction block with near branching and far branching sequence construction to native instruction block |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
WO2012103209A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor |
WO2012103373A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Variable caching structure for managing physical storage |
WO2012103253A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
US9378019B2 (en) | 2011-04-07 | 2016-06-28 | Via Technologies, Inc. | Conditional load instructions in an out-of-order execution microprocessor |
US9176733B2 (en) | 2011-04-07 | 2015-11-03 | Via Technologies, Inc. | Load multiple and store multiple instructions in a microprocessor that emulates banked registers |
US9146742B2 (en) | 2011-04-07 | 2015-09-29 | Via Technologies, Inc. | Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA |
US9336180B2 (en) | 2011-04-07 | 2016-05-10 | Via Technologies, Inc. | Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode |
US9128701B2 (en) | 2011-04-07 | 2015-09-08 | Via Technologies, Inc. | Generating constant for microinstructions from modified immediate field during instruction translation |
US9645822B2 (en) | 2011-04-07 | 2017-05-09 | Via Technologies, Inc | Conditional store instructions in an out-of-order execution microprocessor |
US9043580B2 (en) | 2011-04-07 | 2015-05-26 | Via Technologies, Inc. | Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA) |
US9317288B2 (en) | 2011-04-07 | 2016-04-19 | Via Technologies, Inc. | Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US9141389B2 (en) | 2011-04-07 | 2015-09-22 | Via Technologies, Inc. | Heterogeneous ISA microprocessor with shared hardware ISA registers |
US8880851B2 (en) | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US8924695B2 (en) | 2011-04-07 | 2014-12-30 | Via Technologies, Inc. | Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor |
US9244686B2 (en) | 2011-04-07 | 2016-01-26 | Via Technologies, Inc. | Microprocessor that translates conditional load/store instructions into variable number of microinstructions |
US8880857B2 (en) * | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor |
US9032189B2 (en) | 2011-04-07 | 2015-05-12 | Via Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
US9898291B2 (en) | 2011-04-07 | 2018-02-20 | Via Technologies, Inc. | Microprocessor with arm and X86 instruction length decoders |
US9274795B2 (en) | 2011-04-07 | 2016-03-01 | Via Technologies, Inc. | Conditional non-branch instruction prediction |
US9292470B2 (en) | 2011-04-07 | 2016-03-22 | Via Technologies, Inc. | Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program |
US8806112B2 (en) | 2011-07-14 | 2014-08-12 | Lsi Corporation | Meta data handling within a flash media controller |
US8645618B2 (en) | 2011-07-14 | 2014-02-04 | Lsi Corporation | Flexible flash commands |
JP5932347B2 (ja) * | 2012-01-18 | 2016-06-08 | ピーエスフォー ルクスコ エスエイアールエルPS4 Luxco S.a.r.l. | 半導体装置 |
CN103279325B (zh) * | 2013-03-11 | 2015-12-09 | 浙江大学 | 加密文本数据时可提高SoC处理器指令运算效率的方法 |
CN109358948B (zh) | 2013-03-15 | 2022-03-25 | 英特尔公司 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
US20140281398A1 (en) * | 2013-03-16 | 2014-09-18 | William C. Rash | Instruction emulation processors, methods, and systems |
US9792112B2 (en) | 2013-08-28 | 2017-10-17 | Via Technologies, Inc. | Propagation of microcode patches to multiple cores in multicore microprocessor |
US9898303B2 (en) * | 2013-08-28 | 2018-02-20 | Via Technologies, Inc. | Multi-core hardware semaphore in non-architectural address space |
US9465432B2 (en) | 2013-08-28 | 2016-10-11 | Via Technologies, Inc. | Multi-core synchronization mechanism |
US10157164B2 (en) * | 2016-09-20 | 2018-12-18 | Qualcomm Incorporated | Hierarchical synthesis of computer machine instructions |
US11204768B2 (en) | 2019-11-06 | 2021-12-21 | Onnivation Llc | Instruction length based parallel instruction demarcator |
FR3106422B1 (fr) | 2020-01-20 | 2021-12-10 | Continental Automotive | Passerelle de communication de trames de données pour véhicule automobile |
Family Cites Families (114)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US510341A (en) * | 1893-12-05 | Composition and process of producing same for commutator-brushes | ||
US3346851A (en) * | 1964-07-08 | 1967-10-10 | Control Data Corp | Simultaneous multiprocessing computer system |
US3789365A (en) * | 1971-06-03 | 1974-01-29 | Bunker Ramo | Processor interrupt system |
US3771138A (en) * | 1971-08-31 | 1973-11-06 | Ibm | Apparatus and method for serializing instructions from two independent instruction streams |
US3916388A (en) * | 1974-05-30 | 1975-10-28 | Ibm | Shifting apparatus for automatic data alignment |
US4084235A (en) * | 1975-04-14 | 1978-04-11 | Honeywell Information Systems Inc. | Emulation apparatus |
US4034349A (en) * | 1976-01-29 | 1977-07-05 | Sperry Rand Corporation | Apparatus for processing interrupts in microprocessing systems |
AU529675B2 (en) * | 1977-12-07 | 1983-06-16 | Honeywell Information Systems Incorp. | Cache memory unit |
US4315314A (en) * | 1977-12-30 | 1982-02-09 | Rca Corporation | Priority vectored interrupt having means to supply branch address directly |
US4200927A (en) * | 1978-01-03 | 1980-04-29 | International Business Machines Corporation | Multi-instruction stream branch processing mechanism |
US4189768A (en) * | 1978-03-16 | 1980-02-19 | International Business Machines Corporation | Operand fetch control improvement |
US4189772A (en) * | 1978-03-16 | 1980-02-19 | International Business Machines Corporation | Operand alignment controls for VFL instructions |
US4236206A (en) * | 1978-10-25 | 1980-11-25 | Digital Equipment Corporation | Central processor unit for executing instructions of variable length |
US4228495A (en) * | 1978-12-19 | 1980-10-14 | Allen-Bradley Company | Multiprocessor numerical control system |
JPS6041768B2 (ja) * | 1979-01-19 | 1985-09-18 | 株式会社日立製作所 | デ−タ処理装置 |
US4296470A (en) * | 1979-06-21 | 1981-10-20 | International Business Machines Corp. | Link register storage and restore system for use in an instruction pre-fetch micro-processor interrupt system |
JPS5616248A (en) * | 1979-07-17 | 1981-02-17 | Matsushita Electric Ind Co Ltd | Processing system for interruption |
CA1174370A (en) * | 1980-05-19 | 1984-09-11 | Hidekazu Matsumoto | Data processing unit with pipelined operands |
JPS5743239A (en) * | 1980-08-27 | 1982-03-11 | Hitachi Ltd | Data processor |
JPS6028015B2 (ja) * | 1980-08-28 | 1985-07-02 | 日本電気株式会社 | 情報処理装置 |
US4434461A (en) * | 1980-09-15 | 1984-02-28 | Motorola, Inc. | Microprocessor with duplicate registers for processing interrupts |
JPS5757345A (en) * | 1980-09-24 | 1982-04-06 | Toshiba Corp | Data controller |
US4654781A (en) * | 1981-10-02 | 1987-03-31 | Raytheon Company | Byte addressable memory for variable length instructions and data |
JPS58151655A (ja) * | 1982-03-03 | 1983-09-08 | Fujitsu Ltd | 情報処理装置 |
US4514803A (en) * | 1982-04-26 | 1985-04-30 | International Business Machines Corporation | Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof |
JPS5932045A (ja) | 1982-08-16 | 1984-02-21 | Hitachi Ltd | 情報処理装置 |
US4587612A (en) * | 1982-10-22 | 1986-05-06 | International Business Machines Corporation | Accelerated instruction mapping external to source and target instruction streams for near realtime injection into the latter |
JPS59154546A (ja) * | 1983-02-24 | 1984-09-03 | Toshiba Corp | 情報処理装置 |
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 |
US4800486A (en) * | 1983-09-29 | 1989-01-24 | Tandem Computers Incorporated | Multiple data patch CPU architecture |
US4807115A (en) * | 1983-10-07 | 1989-02-21 | Cornell Research Foundation, Inc. | Instruction issuing mechanism for processors with multiple functional units |
GB8329509D0 (en) * | 1983-11-04 | 1983-12-07 | Inmos Ltd | Computer |
US4629989A (en) * | 1983-11-10 | 1986-12-16 | General Electric Company | Patient alignment system for NMR studies |
US4720779A (en) * | 1984-06-28 | 1988-01-19 | Burroughs Corporation | Stored logic program scanner for a data processor having internal plural data and instruction streams |
US4766564A (en) * | 1984-08-13 | 1988-08-23 | International Business Machines Corporation | Dual putaway/bypass busses for multiple arithmetic units |
US5025368A (en) * | 1984-12-27 | 1991-06-18 | Sony Corporation | Microprocessor with option area adjacent CPU core facilitating interfacing with peripheral devices |
US4714994A (en) * | 1985-04-30 | 1987-12-22 | International Business Machines Corp. | Instruction prefetch buffer control |
JPH0762823B2 (ja) * | 1985-05-22 | 1995-07-05 | 株式会社日立製作所 | デ−タ処理装置 |
US4739471A (en) * | 1985-06-28 | 1988-04-19 | Hewlett-Packard Company | Method and means for moving bytes in a reduced instruction set computer |
US4722049A (en) * | 1985-10-11 | 1988-01-26 | Unisys Corporation | Apparatus for out-of-order program execution |
JPS62152043A (ja) * | 1985-12-26 | 1987-07-07 | Nec Corp | 命令コ−ドアクセス制御方式 |
JPS62165242A (ja) * | 1986-01-17 | 1987-07-21 | Toshiba Corp | プロセツサ |
EP0239081B1 (en) * | 1986-03-26 | 1995-09-06 | Hitachi, Ltd. | Pipelined data processor capable of decoding and executing plural instructions in parallel |
US4903196A (en) * | 1986-05-02 | 1990-02-20 | International Business Machines Corporation | Method and apparatus for guaranteeing the logical integrity of data in the general purpose registers of a complex multi-execution unit uniprocessor |
JPS6324428A (ja) * | 1986-07-17 | 1988-02-01 | Mitsubishi Electric Corp | キヤツシユメモリ |
US4766566A (en) * | 1986-08-18 | 1988-08-23 | International Business Machines Corp. | Performance enhancement scheme for a RISC type VLSI processor using dual execution units for parallel instruction processing |
US4841476A (en) * | 1986-10-06 | 1989-06-20 | International Business Machines Corporation | Extended floating point operations supporting emulation of source instruction execution |
US5133072A (en) * | 1986-11-13 | 1992-07-21 | Hewlett-Packard Company | Method for improved code generation in reduced instruction set computers |
JPS63131230A (ja) * | 1986-11-21 | 1988-06-03 | Hitachi Ltd | 情報処理装置 |
IL84821A (en) * | 1986-12-15 | 1992-07-15 | United Technologies Corp | Reduced instruction set computing apparatus and methods |
US4992934A (en) * | 1986-12-15 | 1991-02-12 | United Technologies Corporation | Reduced instruction set computing apparatus and methods |
US4814976C1 (en) * | 1986-12-23 | 2002-06-04 | Mips Tech Inc | Risc computer with unaligned reference handling and method for the same |
JPS63163930A (ja) * | 1986-12-26 | 1988-07-07 | Toshiba Corp | アライメント補正方式 |
US5226170A (en) * | 1987-02-24 | 1993-07-06 | Digital Equipment Corporation | Interface between processor and special instruction processor in digital data processing system |
US4992938A (en) * | 1987-07-01 | 1991-02-12 | International Business Machines Corporation | Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers |
US4926323A (en) * | 1988-03-03 | 1990-05-15 | Advanced Micro Devices, Inc. | Streamlined instruction processor |
US4992930A (en) * | 1988-05-09 | 1991-02-12 | Bull Hn Information Systems Inc. | Synchronous cache memory system incorporating tie-breaker apparatus for maintaining cache coherency using a duplicate directory |
US5003462A (en) * | 1988-05-31 | 1991-03-26 | International Business Machines Corporation | Apparatus and method for implementing precise interrupts on a pipelined processor with multiple functional units with separate address translation interrupt means |
US4897810A (en) * | 1988-06-13 | 1990-01-30 | Advanced Micro Devices, Inc. | Asynchronous interrupt status bit circuit |
JP3034257B2 (ja) * | 1988-06-22 | 2000-04-17 | 大日本印刷株式会社 | シャドウマスク製版用パターン及び製造方法 |
US5019967A (en) * | 1988-07-20 | 1991-05-28 | Digital Equipment Corporation | Pipeline bubble compression in a computer system |
US5006980A (en) * | 1988-07-20 | 1991-04-09 | Digital Equipment Corporation | Pipelined digital CPU with deadlock resolution |
JPH0673105B2 (ja) * | 1988-08-11 | 1994-09-14 | 株式会社東芝 | 命令パイプライン方式のマイクロプロセッサ |
US5101341A (en) * | 1988-08-25 | 1992-03-31 | Edgcore Technology, Inc. | Pipelined system for reducing instruction access time by accumulating predecoded instruction bits a FIFO |
JPH0638676B2 (ja) * | 1988-09-19 | 1994-05-18 | 松下電工株式会社 | ワイヤレス送信制御システム |
JP2810068B2 (ja) * | 1988-11-11 | 1998-10-15 | 株式会社日立製作所 | プロセッサシステム、コンピュータシステム及び命令処理方法 |
GB8828817D0 (en) * | 1988-12-09 | 1989-01-18 | Int Computers Ltd | Data processing apparatus |
US5075840A (en) * | 1989-01-13 | 1991-12-24 | International Business Machines Corporation | Tightly coupled multiprocessor instruction synchronization |
US5127091A (en) * | 1989-01-13 | 1992-06-30 | International Business Machines Corporation | System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor |
WO1990008355A1 (en) * | 1989-01-17 | 1990-07-26 | Fujitsu Limited | Microprocessor |
US5148528A (en) * | 1989-02-03 | 1992-09-15 | Digital Equipment Corporation | Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length |
US4985825A (en) * | 1989-02-03 | 1991-01-15 | Digital Equipment Corporation | System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer |
US5113515A (en) * | 1989-02-03 | 1992-05-12 | Digital Equipment Corporation | Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer |
US5768575A (en) * | 1989-02-24 | 1998-06-16 | Advanced Micro Devices, Inc. | Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions |
US5226126A (en) * | 1989-02-24 | 1993-07-06 | Nexgen Microsystems | Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags |
GB2230116B (en) * | 1989-04-07 | 1993-02-17 | Intel Corp | An improvement for pipelined decoding of instructions in a pipelined processor |
CA2016068C (en) * | 1989-05-24 | 2000-04-04 | Robert W. Horst | Multiple instruction issue computer architecture |
JPH0314025A (ja) * | 1989-06-13 | 1991-01-22 | Nec Corp | 命令実行制御方式 |
EP0419105B1 (en) * | 1989-09-21 | 1997-08-13 | Texas Instruments Incorporated | Integrated circuit formed on a surface of a semiconductor substrate and method for constructing such an integrated circuit |
US5019937A (en) * | 1989-10-30 | 1991-05-28 | A. B. Chance Company | Circuit improvement apparatus having combination current limiting fuse and resettable vacuum switch to prevent single-phasing of three-phase loads |
JP2835103B2 (ja) * | 1989-11-01 | 1998-12-14 | 富士通株式会社 | 命令指定方法及び命令実行方式 |
US5487156A (en) * | 1989-12-15 | 1996-01-23 | Popescu; Valeri | Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched |
US5193206A (en) * | 1989-12-27 | 1993-03-09 | Motorola, Inc. | Reduce instruction set microprocessor |
US5168571A (en) * | 1990-01-24 | 1992-12-01 | International Business Machines Corporation | System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data |
US5230068A (en) * | 1990-02-26 | 1993-07-20 | Nexgen Microsystems | Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence |
EP0459232B1 (en) * | 1990-05-29 | 1998-12-09 | National Semiconductor Corporation | Partially decoded instruction cache and method therefor |
CA2038264C (en) | 1990-06-26 | 1995-06-27 | Richard James Eickemeyer | In-memory preprocessor for a scalable compound instruction set machine processor |
US5155843A (en) * | 1990-06-29 | 1992-10-13 | Digital Equipment Corporation | Error transition mode for multi-processor system |
US5778423A (en) * | 1990-06-29 | 1998-07-07 | Digital Equipment Corporation | Prefetch instruction for improving performance in reduced instruction set processor |
US5430862A (en) * | 1990-06-29 | 1995-07-04 | Bull Hn Information Systems Inc. | Emulation of CISC instructions by RISC instructions using two pipelined stages for overlapped CISC decoding and RISC execution |
US5163139A (en) * | 1990-08-29 | 1992-11-10 | Hitachi America, Ltd. | Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions |
EP0479390B1 (en) * | 1990-10-05 | 1999-01-07 | Koninklijke Philips Electronics N.V. | Processing device including a memory circuit and a group of functional units |
US5307492A (en) * | 1991-03-07 | 1994-04-26 | Digital Equipment Corporation | Mapping assembly language argument list references in translating code for different machine architectures |
US5307504A (en) * | 1991-03-07 | 1994-04-26 | Digital Equipment Corporation | System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events |
US5450575A (en) * | 1991-03-07 | 1995-09-12 | Digital Equipment Corporation | Use of stack depth to identify machine code mistakes |
US5507030A (en) * | 1991-03-07 | 1996-04-09 | Digitial Equipment Corporation | Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses |
EP0547247B1 (en) * | 1991-07-08 | 2001-04-04 | Seiko Epson Corporation | Extensible risc microprocessor architecture |
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
US5438668A (en) * | 1992-03-31 | 1995-08-01 | Seiko Epson Corporation | System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer |
US5335460A (en) * | 1992-04-27 | 1994-08-09 | Smith Jr Joseph H | Tilt to clean gutter system |
EP0651321B1 (en) * | 1993-10-29 | 2001-11-14 | Advanced Micro Devices, Inc. | Superscalar microprocessors |
US5574927A (en) * | 1994-03-25 | 1996-11-12 | International Meta Systems, Inc. | RISC architecture computer configured for emulation of the instruction set of a target computer |
US5819056A (en) * | 1995-10-06 | 1998-10-06 | Advanced Micro Devices, Inc. | Instruction buffer organization method and system |
US5778210A (en) * | 1996-01-11 | 1998-07-07 | Intel Corporation | Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time |
US6138271A (en) * | 1996-06-26 | 2000-10-24 | Rockwell Technologies, Llc | Operating system for embedded computers |
JP3274608B2 (ja) * | 1996-07-12 | 2002-04-15 | 日本電気株式会社 | 携帯端末装置 |
US5832205A (en) * | 1996-08-20 | 1998-11-03 | Transmeta Corporation | Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed |
US6442570B1 (en) * | 1997-10-27 | 2002-08-27 | Microsoft Corporation | Object identification and data communication during an object synchronization process |
AU3109399A (en) * | 1998-03-23 | 1999-10-18 | Claude Cajolet | Application program interfaces in an operating system |
US6253309B1 (en) * | 1998-09-21 | 2001-06-26 | Advanced Micro Devices, Inc. | Forcing regularity into a CISC instruction set by padding instructions |
US6862617B1 (en) * | 1998-10-12 | 2005-03-01 | Microsoft Corp. | System and method for synchronizing objects between two devices |
US7032213B1 (en) * | 1999-09-01 | 2006-04-18 | Microsoft Corporation | Fixing incompatible applications using a light debugger |
US6959330B1 (en) * | 2000-05-16 | 2005-10-25 | Palmsource, Inc. | Sync-time read only memory image binding for limited resource devices |
CN101426565B (zh) * | 2004-04-22 | 2012-04-18 | 西门子工业公司 | 包含膜生物反应器和消化有机物质的处理容器的过滤装置 |
-
1992
- 1992-03-31 US US07/857,599 patent/US5438668A/en not_active Expired - Lifetime
-
1993
- 1993-03-30 DE DE69333630T patent/DE69333630T2/de not_active Expired - Lifetime
- 1993-03-30 EP EP00108579A patent/EP1028370B1/en not_active Expired - Lifetime
- 1993-03-30 KR KR1019940703361A patent/KR100343530B1/ko not_active IP Right Cessation
- 1993-03-30 JP JP51730693A patent/JP3547052B2/ja not_active Expired - Lifetime
- 1993-03-30 KR KR10-2001-7005744A patent/KR100371929B1/ko not_active IP Right Cessation
- 1993-03-30 DE DE69329644T patent/DE69329644T2/de not_active Expired - Lifetime
- 1993-03-30 WO PCT/JP1993/000417 patent/WO1993020507A2/en active Application Filing
- 1993-03-30 EP EP93906870A patent/EP0636257B1/en not_active Expired - Lifetime
-
1995
- 1995-05-12 US US08/440,225 patent/US5546552A/en not_active Expired - Lifetime
- 1995-06-02 US US08/460,272 patent/US5619666A/en not_active Expired - Lifetime
-
1997
- 1997-01-16 US US08/784,339 patent/US5983334A/en not_active Expired - Lifetime
-
1999
- 1999-09-22 US US09/401,860 patent/US6263423B1/en not_active Expired - Fee Related
-
2000
- 2000-01-17 JP JP2000007262A patent/JP2000215051A/ja not_active Withdrawn
- 2000-01-17 JP JP2000007261A patent/JP2000215050A/ja not_active Withdrawn
-
2002
- 2002-02-04 US US10/061,295 patent/US6954847B2/en not_active Expired - Fee Related
-
2005
- 2005-06-28 US US11/167,289 patent/US7343473B2/en not_active Expired - Fee Related
-
2008
- 2008-03-11 US US12/046,318 patent/US7664935B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE69329644T2 (de) | 2001-03-01 |
US7343473B2 (en) | 2008-03-11 |
JP2000215051A (ja) | 2000-08-04 |
KR950701100A (ko) | 1995-02-20 |
EP1028370A2 (en) | 2000-08-16 |
US5619666A (en) | 1997-04-08 |
WO1993020507A2 (en) | 1993-10-14 |
US5546552A (en) | 1996-08-13 |
EP0636257A1 (en) | 1995-02-01 |
KR100343530B1 (ko) | 2002-11-27 |
JP2000215050A (ja) | 2000-08-04 |
US7664935B2 (en) | 2010-02-16 |
US20050251653A1 (en) | 2005-11-10 |
US5983334A (en) | 1999-11-09 |
EP1028370A3 (en) | 2002-02-20 |
DE69333630D1 (de) | 2004-10-21 |
US6954847B2 (en) | 2005-10-11 |
US20080162880A1 (en) | 2008-07-03 |
WO1993020507A3 (en) | 1994-01-06 |
EP1028370B1 (en) | 2004-09-15 |
JPH07505968A (ja) | 1995-06-29 |
DE69333630T2 (de) | 2005-09-22 |
US5438668A (en) | 1995-08-01 |
KR100371929B1 (ko) | 2003-02-12 |
DE69329644D1 (de) | 2000-12-14 |
EP0636257B1 (en) | 2000-11-08 |
US6263423B1 (en) | 2001-07-17 |
US20030084270A1 (en) | 2003-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3547052B2 (ja) | Cisc型からrisc型命令への変換のためのアライメント並びにデコーディング | |
US5568646A (en) | Multiple instruction set mapping | |
US5598546A (en) | Dual-architecture super-scalar pipeline | |
US20010010072A1 (en) | Instruction translator translating non-native instructions for a processor into native instructions therefor, instruction memory with such translator, and data processing apparatus using them | |
US6289445B2 (en) | Circuit and method for initiating exception routines using implicit exception checking | |
IL113153A (en) | Data processing with a set of multi-instructions | |
JPH03174626A (ja) | データ処理装置 | |
JPH07120284B2 (ja) | データ処理装置 | |
JP3544335B2 (ja) | 複合命令ストリームのアライメントシステム | |
EP4020174A1 (en) | Apparatus and method for complex matrix multiplication | |
JPH01214933A (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20040105 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040220 |
|
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: 20040406 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040409 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
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: 20080423 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090423 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100423 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110423 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110423 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120423 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120423 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130423 Year of fee payment: 9 |