JP3637922B2 - プロセッサにおけるさまざまな長さの文字列中のターミネーション文字を発見する方法および装置 - Google Patents
プロセッサにおけるさまざまな長さの文字列中のターミネーション文字を発見する方法および装置 Download PDFInfo
- Publication number
- JP3637922B2 JP3637922B2 JP50220095A JP50220095A JP3637922B2 JP 3637922 B2 JP3637922 B2 JP 3637922B2 JP 50220095 A JP50220095 A JP 50220095A JP 50220095 A JP50220095 A JP 50220095A JP 3637922 B2 JP3637922 B2 JP 3637922B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- character
- location
- found
- significant bit
- 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
- 238000000034 method Methods 0.000 title claims description 26
- 230000004044 response Effects 0.000 claims description 6
- 230000003362 replicative effect Effects 0.000 claims 1
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 229920000747 poly(lactic acid) Polymers 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/74—Selecting or encoding within a word the position of one or more bits having a specified value, e.g. most or least significant one or zero detection, priority encoders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Executing Machine-Instructions (AREA)
Description
本発明はターミネーション文字で終わるバイト列をコンピュータ上で処理する方法に関する。より詳細にはコンピュータで使うバイト列中のターミネーション文字を発見する命令に関する。
発明の背景
コンピュータで実行される通常のオペレーションは、メモリー内の1アドレス、「ソース」、からメモリー中の他のアドレス、「ターゲット」、へバイトまたは文字の列[string]をコピーすることである。バイト列は、不変長か可変長かのいずれかである。普通はバイト列が可変長のときは、代表例としてゼロバイトと呼ばれる空文字のようなターミネーション文字がバイト列の最後をマークするのに使われている。この場合バイト列は、その列の最初のバイトとターミネーション文字とのアドレスによって輪郭つけられるか、その他の方法で限定されているわけである。
コピーオペレーションが単一の命令としてコンピュータで行われるときは、終了するまでに通常複数のサイクルを経る。しかしRISCプロセッサはこのようなオペレーションを実行するのに、各命令が単一サイクルで実行される単一命令順序[an instruction sequence]を使う。
IBM社のRISC System/6000プロセッサでは、所定長さの列または所定のターミネーション文字列が、可変長のバイト列をコピーするのに使われている。この方法だと、列の最初から始まってターミネーション文字までにある所定数のバイトがコピーされる。「Load String And Compare Byte Indexed」(Iscbx)命令、すなわち「列をロードしてインデックスされたバイトを比較せよ」という命令が、記憶装置内の連続バイトを連続レジスタ中にロードするのに使われ、次にストアストリング命令[a store string instruction]がこれらのバイトをレジスタから再び記憶装置へと戻しコピーするのに使われる。しかしこの方法は命令を完遂するのに複数のサイクルを使うのが代表的である。このプロセッサにおける大半の他の命令は単一サイクルで実行されるように設計されているのであるから、これはハードウエアや例外的操作の複雑さを増大させることになる。
RISC System/6000のlscbx命令についてはIBM社発行の「AIX Virsion 3.2 for RISC System/6000,Assembler Language Reference」第2版(1992年1月)の第5−156〜第5−158に記載されている。RISC System/6000はIBM社所有の商標である。またIBMはInternational Business Machines Corporationの登録商標である。
Hewlett Packard Company社のPrecision Architecture(HP−PA)で使われている方法では、UNIT XOR命令によって、あるワードがゼロバイトを含むか否かを発見することができる。この方法によれば、排他的論理和のオペレーションが実行されるとハードウエア探知論理[hardware detection logic]がゼロバイト値を求めて得られた結果の各バイトをチェックする。得られたワード中のバイトのいずれかがゼロか否かを示すように状態結果[status result]をセットすることができる。しかしこの命令はゼロバイトのある場所を示すことはしない。ゼロバイトのある実際の場所を探知するにはもう一つの命令を使わなければならない。
しかもテストされているワードと使用禁止マスク領域につき論理和を正しく実行することによって、先頭バイトすなわちコピーされているバイト列の開始するアドレスの前にあるデータバイトを扱うのにもう一つ別の命令が使われる。先頭バイトにマスクを作りこれを使うことのオーバーヘッドは、小さいバイト列で実行されるコピーオペレーションにとって有益なものとなり得る。
Hewlett Packard Company社のPrecision ArchitectureおよびUNIT XOR命令に関する基本的解説は“PA−RISC 1.1 Architecture and Instruction Set Reference Manual",Hewlett Packard Company,Chapter 5,pgs.5−7,5−109(1990)参照のこと。
Advanced Micro Devices,Inc.(AMD)のAM29050マイクロプロセッサーで使われている方法では、任意ターミネーション状態[an arbitrary termination condition]につきチェックするため二つのレジスタ間のバイトごとの比較を行うのにCPBYTE命令が使われている。それら二つのレジスタの一方はチェックされている列部分を含み、他方はターミネーション文字の複製されたコピーを含む。比較結果はそのターミネーション文字が発見されたか否かを示す。PA−RISC 1.1方法による場合のように、追加の命令がターミネーション文字の在りか及びコピーされる列の開始アドレスを決定するのに使われる。
CPBYTE命令については“Am29050 Microprocessor,User's Manual",Advanced Micro Devices,Inc.,(1991),page 8−38参照のこと。
発明の概要
本発明は可変長のバイト列中の特定の文字ないし特定の値のアドレスを捜し出すための命令に関する。要するに本発明によれば、列の1部分に入るオフセットが指定され、その列部分が指定されたオフセットで始まる特定の文字の最初に発生するのを求めてサーチされる。その特定の文字が捜し出されたら、その特定文字が存在することが示され、その特定文字のアドレスまたはオフセットが保存されるかその他の方法で示される。特定文字が発見されなかったときは、特定文字不存在の表示がされ、既に調べ終わった列部分のすぐ次の文字を指摘するのに都合のよいアドレスまたはオフセットが保存されるかその他の方法で示される。いずれの場合も、保存その他の方法で示されるアドレスまたはオフセットは、例えばレジスタ、メモリーなどの記憶装置に保存することができる。
特定文字は典型的には、文字列とも呼ばれる可変長バイト列を終了させるのに使われるターミネーション文字である。ターミネーション文字の長さは1バイトまたは2以上のバイトである。ターミネーション文字が1バイト以上の長さのときは、その列内に並べられるのが好ましい。例えば0〜7とナンバー付けされたバイトを有する8バイト列にあっては、2バイトのターミネーション文字が0〜1、2〜3、4〜5または6〜7バイト中にあるのが好ましい。
典型的にはターミネーション文字は空文字である。空文字の値は通常、ASCIIにおける場合のようにゼロバイトであるが、これは言語特異的で、異なる言語によって値は異なるものとなる。
ターミネーション文字は所定の固定値であるか、または動的な任意値かである。動的なターミネーション文字の値はコピーオペレーション間で変化し得るが、所定の固定値をもったターミネーション文字は常に一定である。
ターミネーション文字が固定値のときは、上述の本発明はそのターミネーション文字を探知するように部分的に改変される。換言すれば、本発明に係るコンピュータはその具体的なターミネーション文字を探知するように設置される[hardwired]。
一方、ターミネーション文字が本発明のコンピュータのビルドプロセス[build process]中にあって知られていないとき、または使われる動的ターミネーション文字を許容することが望まれるときは、テストされている列のその部分を有するデータと基準値の各バイトがその具体的なターミネーション文字を含んでいる基準値間にブール論理和[a boolean exclusive−or]が行われる。もしそれが使われている回路技術で実行可能なら、この排他的論理和がその命令自体中で実行することができる。あるいはその命令が実行される前に実行することができる。
ターミネーション文字は典型的にはゼロバイトであるから、ゼロバイトを探知するように特別に設計された命令を有することが好ましい。この場合、ゼロバイト以外の文字を探知する命令を使用することが望まれるときは、排他的論理和オペレーションがその命令を実行する前に行われる。このようにターミネーション文字がゼロバイトのときは排他的論理和オペレーションのオーバーヘッドは発生しない。このアプローチは固定的なターミネーション文字一般にも適用される。
次のようにすれば本発明はソースからターゲットへバイト列をコピーするのに使うこともできる。すなわち本発明に係る命令を1回の呼出しで呼び出している間に、レジスタのサイズと同数のバイトを有する列の1部分につき特定の文字を求めてテストすることができる。本発明は1度に1個のバイトではなく、1レジスタ中の多数のバイトに実行することができ、それによって1度に1バイトしかコピーしないソフトウエアをはるかに凌ぐ改良をパフォーマンスにもたらす。
本発明は加算命令を実行するに匹敵する程度の時間で実行可能であり、特に本発明を実行するのに多数サイクル命令を実行するための特別機を必要とはしない。本発明は、他のロードしストアせよ命令と組合せることができ、それによってコピーオペレーションをこの命令順序を1回または2回以上実行することによって行うことができる。
本発明はまたHP−PAとかAm29050のようなアーキテクチャーのプロセッサーより以下のような数点で有利である。第1に、サーチされている列の部分中に入るオフセットを指定することによって、本発明は先頭バイトをマスキングしなくてもそれらを明示的に無視でき、それによってそうしたマスキングオペレーションに関連するオーバーヘッドを回避することができる。第2に、ターミネーション文字の存在場所を決定するのに、もう一つの別の命令を必要とすることがない。というのは本発明はその情報をその単一サイクルの処理能力内で決定することができるからである。これは処理時間を減少させる。
【図面の簡単な説明】
本発明につき上述の、及びその他の利点は、添付の図面に基づき行う以下の説明によって一層理解を深めることであろう。
図1は本発明のシステムを簡単に説明したブロックダイヤグラムである。
図2は図1のシステムのプロセッサのブロックダイヤグラムである。
図3は本発明に係る命令のフォーマットを示す。
図4は本発明に従ってバイトレジスタ中にある特定の文字を捜し出すためのステップの大略を示すフローチャートである。
図5は本発明に従ってバイトレジスタ中にある任意の文字を捜し出すためのステップの大略を示すフローチャートである。
図6は本発明を具現化するハードウエアの第1実施例である。
図7は本発明を具現化するハードウエアの第2実施例である。
図8Aおよび図8B、すなわち表1および表2は、各々4バイトおよび8バイトの真理表で、図6および図7の組合せ論理ユニットのためのブール論理を含むものである。
図9は本発明を具現化するハードウエアの第3実施例である。
図10、すなわち表3は、図9の組合せ論理ユニットのためのブール論理を含む4バイトの真理表である。
図11はソースアドレスからターゲットアドレスへのターミネーション文字中に終了するバイト列をコピーする本発明の命令を使うステップのフローチャートである。
発明の詳細な説明
図1の30は本発明を組み込むことができるタイプのコンピュータ全体を指す。コンピュータ30は、プロセッサ34、ランダムアクセスメモリー(RAM)36の形式で代表的には具現化されるメインメモリー、およびリードオンリーメモリー(ROM)38を含むことができるスタティックメモリー[static memory]を相互に接続する例えばシステムバスのようなシグナルパス32からなる。
プロセッサ34はロード/ストアアーキテクチャを有するマイクロプロセッサである。例えばこのプロセッサはSun Microsystems,Inc.から購入することができるSPARCマイクロプロセッサとか、IBM社から購入できるRISC System/6000マイクロプロセッサである。
図2に示すようにプロセッサ34はレジスタファイル40と、命令レジスタ41とを有する。あるいはプロセッサ34はステートビット記憶装置[statebit storage]42とキャッシュ[cache]46を有する。従来のロード/ストアアーキテクチャでは、データは計算することなくレジスタとメモリー間を移動し、計算はレジスタ内の値間で行われている。
レジスタファイル40は、レジスタ「ra」50a,レジスタ「rb」50b、レジスタ「rc」50cを含む複数の汎用レジスタ50を有する。これらのレジスタは、場合によって異なるが代表的には4バイトとか8バイトの特定のバイト長である。レジスタ内容のフォーマットは、使用されるメモリーアドレシングスキーム如何で異なる。Big Endianメモリーアドレシングでは、レジスタのバイト0は内容上最上位ビットを含む。すなわちレジスタ中のバイトは0から始まって左から右へ連続的に番号が振られている。Little Endianメモリーアドレシングでは、レジスタのバイト0は内容上最下位ビットを含む。すなわちレジスタ中のバイトは0から始まって右から左へ連続的に番号が振られている。好ましい実施例についてはBig Endianメモリーアドレシングを使ったレジスタに関して記載されている。しかしLittle Endianメモリーアドレシングを使ったレジスタに適用される実施例は当業者には自明なことであろう。
ステートビット記憶装置42は、命令を制御するためのステートビット51aなどの1または2以上のステートビット51を有している。このプロセッサは1または2以上のステートビット51を一定の条件コードまたは状態を示すためにセットすることができる。プロセッサ34は、ステートビット記憶装置42ではなくレジスタファイル40内のレジスタ50を使うことができる。
典型的にはプロセッサ34はキャッシュ46またはメモリー36から命令を引き出し、それを命令レジスタ41にストアする。図3は本発明を具現化するための命令のフォーマットを示す。典型的な命令52は演算コード[opcode]60,3つのレジスタ番号域、すなわちここではra規則子62、rb規則子64およびrc規則子66と、あってもなくてもよいがテストフィールド68とがある。
演算コード60は、「第1フィールド」とも呼ばれるが、プロセッサの命令セット内で一定の命令を特定する。演算コード60は直接または間接に特定の命令を同定する。例えば演算コード60は、本発明を具現化する命令に対応する「110000」のような二進数値たり得る。演算コード60の大きさは命令セットアーキテクチャ次第で決まるが典型的には6ビットフィールドである。
説明の便宜上、本発明の命令をここでは「FINDARBCHAR」または「FINDFIXEDCHAR」命令と呼ぶことにする。FINDARBCHAR命令は、任意の又は動的なターミネーション文字を取り扱うように明示的に設計されていることを別にすればFINDFIXEDCHAR命令と実質的に同一であるが、FINDFIXEDCHARはゼロバイトのような特定の固定的なターミネーション文字専用にされたものである。このようにターミネーション文字を変更する能力があることが望まれる場合とか、コンピュータを構築するときターミネーション文字が知られていない場合などでは、FINDARBCHAR命令が有利である。ターミネーション文字が動的なとき、典型的にはそれはレジスタ50に記憶される。
任意の又は動的なターミネーション文字のためにも、あるいはコンピュータを構築するときにターミネーション文字が未知であるときにFINDFIXEDCHAR命令を使うことができる。この場合は、FINDFIXEDCHAR命令はゼロバイトに等しいターミネーション文字用に設計される。FINDFIXEDCHAR命令が呼び出される前に、サーチされている列部分中に含まれているデータと、FINDFIXEDCHAR命令を呼び出す前のターミネーション文字にセットされた各バイトを有する同一長のマスク間とで排他的論理和[EXCLUSIVE−OR]が実行され、それによってターミネーション文字を含有するバイトをゼロバイトにセットする。FINDFIXEDCHARは次にそのゼロバイトを捜し出すのに使われ、それによってゼロバイトでないターミネーション文字を非明示的に取り扱う。FINDARBCHAR命令の場合は、上記の論理和は命令自体内で行われる。
「第2フィールド」とも呼ばれるra規則子62は、レジスタra50aを特定する。ra規則子62はレジスタra50aのためのレジスタファイル中に入るインデックス、オフセットまたはポインターたり得る。
「第3フィールド」とも呼ばれるrb規則子64は、レジスタrb50bを特定する。rb規則子64はra規則子62と同様である。
「第4フィールド」とも呼ばれるrc規則子66は、レジスタrc50cを特定する。rc規則子66はra規則子62およびrb規則子64と同様である。
3つのレジスタフィールド62、64、66の大きさはサポートされるレジスタ数によって決まる。典型的には5ビットフィールドである。
任意的に「第5フィールド」とも呼ばれるテストフィールド68は、どの条件コードがセットされるべきなのかを特定する。典型的にはこれらの条件コードはブランチ[branches]その他の命令を無効にするのに使われる。セットされるかもしれない多数のステートビット51があるとき、テストフィールド68はそれらのどれが使われるのかを選択する。
FINDFIXEDCHARまたはFINDARBCHARのアセンブリ言語命令は、FBYTE ra,rab,rcテストのように指定することができる。典型的には、より高いレベルのコピー命令を翻訳するときにコンパイラが、文字列のコピーを完遂するのに必要なあらゆる先行する、また後続する制御命令を含むFBYTE命令を作る。あるいはソースコード自体がコピーオペレーションを実行するアセンブリ言語で書かれたルーチンを呼び出す。
図4はFINDFIXEDCHAR命令の実行中に行われるステップの全体を示す。必須的に、ブロック100でgr[ra]の最下位ビット、すなわち「lsb's」とここで呼ぶもの、によって特定されたバイトアドレスで始まるgr[rb]のバイトを調べて特定の文字、すなわちターミネーション文字とか、その他の特定文字を捜し出す。使われる最下位ビット数はレジスタの大きさ、すなわちすべてのバイトのありかを記述するのに必要なビット数によって決まる。例えばレジスタが4バイトの長さであるとすれば、2ビットが場所0−3を記述するのに使われ、レジスタが8バイト長なら3ビットが場所0−7を記述するのに使われる。
特定文字がブロック102で捜し出されたら、ブロック104でgr[rc]、好ましくはそれの最下位ビットがそのターミネーション文字のバイトアドレスを特定するのに更新され、ブロック106で特定文字が発見されたことを表示手段を介して示す。例えばこの表示手段は、セットされる条件コード、または実行されるトラップである。ブロック104、106は順序を逆にして行われても構わない。ブロック102で特定文字を発見できなかったら、ブロック108で、gr[rc]、好ましくはそれの最下位ビットが調べ終わった列のバイトのすぐ後の列中にあるバイトのアドレスまたはこのアドレスを作るのに都合のよい値を特定するように更新される。ブロック110でその特定文字が発見されなかったことを表示する。例えばこの表示手段はセットされた条件コードであるか、実行されたトラップであることもある。ブロック108、110は逆に行われても構わない。
あるいは条件コードを表示手段として使うのなら、ブロック100の前に、特定文字が発見されなかったことを示すよう条件コードを初期化することができ、そしてその特定文字が発見されて初めて更新されるのであって、ブロック110で行われるステップが、ブロック102や108の後に行われるのではなく、ブロック100の前に行われ行われてしまうのでもよい。同様に、この条件コードは、ブロック100で調べられて特定文字が発見されたことを示すように初期化され、特定文字が発見されないときに初めて更新するようにすることもできる。すなわちブロック106で行われるステップをブロック102や104の後に行うのでなく、ブロック100より前に行ってしまうわけである。
条件コードは容易にテストすることができるステートビット51のような条件ビットであるのが好ましい。あるいは条件コードは特定文字が発見されたか否かを示す値をロードされるレジスタであってもよい。
図5はFINDARBCHAR命令の実行中に行われるステップの概略である。基本的にFINDFIXEDCHAR命令を実行するときに行われるのと同じステップであるが、ブロック250でgr[rb]の内容が、論理的にマスクフィールドのついた排他的論理和化されている点で異なる。マスクフィールドは調べている列部分と同じ長さ、すなわちgr[rb]と同じ大きさで、求められている特定のターミネーション文字の例の列を含んでいる。
図6〜図10は本発明に係るFINDFIXEDCHAR命令のハードウエアによる実施例を示す。図6、図7および図9においては、4バイトレジスタが使われているが、8バイトレジスタのような他の大きさのレジスタでも実施可能である。接続線上の斜線は信号またはデータの経路数を示す。図6、図7および図9は1バイト長のターミネーション文字の場合の実施例である。しかし当業者なら1バイト長以上の長さのターミネーション文字の場合にもこれら図6、図7および図9を変更して行うことが容易にできるであろう。
図6においてターミネーション文字がテストされている列部分に発見されないときは、定数「n」を付け加えることによって次の文字単位アドレスを別の命令が作ることができるようにgr[ra]の最下位ビットをクリアする。ここでnはレジスタgr[rb]内のバイト数である。あるいは図7において、ターミネーション文字が発見されないときは、そのFINDFIXEDCHAR命令内でgr[ra]の最下位ビットがクリアされ、そして定数「n」がそれに付け加えられるのでもよい。
図6において、3つのレジスタgr[ra]300、gr[rb]302、gr[rc]304が次のように接続されている。レジスタgr[rb]302の各バイト中のビットは、バイトをターミネーション文字と比較するため論理305に接続されている。この論理は例えば、1または2以上のORゲート306であるか、または補足された入力値を使うNANDゲート(図示せず)のようなOrゲートの同等物でもよい。
プログラム可能論理回路[Programmable Logic Array](PLA)のような組合せ論理ユニット[combinatorial logic unit](CLU)308が論理305の出力、ORゲート306として表されているものと、レジスタgr[ra]300の最下位ビットとを相互に接続する。レジスタgr[ra]の他のビットはレジスタgr[rc]304内の対応するビットに接続される。CLU308の出力はオフセット信号310と発見された信号312である。レジスタgr[rc]304の最下位ビットはオフセット信号310の値にセットされる。発見された信号312は、例えばステートビット51のようなインジケータ314へその内容を送ることによって条件コードをセットするのに使うことができる。
レジスタgr[ra]300の最下位ビットはレジスタgr[rb]302内のどのバイトがターミネーション文字のサーチを始めるかを表示し、またgr[ra]の他のビットはそのバイトの内容がメモリー中のどこにあるのかのアドレスを表示する。
オペレーションのときは、レジスタgr[rb]302内のバイトのビットは論理305を1文字につき1つのORゲート306として殆ど同時に通過する。得られた結果(t0〜t3)がCLU308に入る。レジスタgr[ra]300の最下位ビットもCLU308へ入力として入り、レジスタgr[ra]のその他のビットはレジスタgr[rc]304中の対応する場所にコピーされる。
CLU308はオフセット信号310と発見信号312の2つの出力を作り出す。発見信号312はターミネーション文字がレジスタgr[rb]302に発見されたか否かを特定する。ターミネーション文字が発見されたときは、オフセット信号310がそのターミネーション文字のgr[rb]302内のありかを特定する。そうでないときはオフセット信号310はゼロである。レジスタgr[rc]304の最下位ビットはオフセット信号310の値にセットされる。
図7に示す別の実施例ではターミネーション文字が発見されないときは、レジスタgr[ra]のアドレスがその列中の次の未だ調べられていないバイトのアドレスを特定するように更新される。この実施例では、3つのレジスタgr[ra]350,gr[rb]352,gr[rc]354が次のように相互に接続されている。レジスタgr[rb]352のバイトのビットは、1バイト1ターミネーション文字と比較するように論理355に接続される。この論理は例えば1または2以上のORゲート356またはOrゲート同等物がなり得る。
PLAのような組合せ論理ユニット(CLU)358が論理355の出力、ORゲート356として表されているものと、レジスタgr[ra]350の最下位ビットとを相互に接続する。レジスタgr[ra]のその他のビットは演算数を1づつ微増させるような加算演算を行える加算装置[addition unit](AU)360中に入力される。AU360は例えば加算器である。
CLU358はオフセット信号362と発見信号364を出力する。オフセット信号362の内容はレジスタgr[rc]354の最下位ビット中にコピーされる。
発見信号364の逆値[the inverse of the value]がAU360に入力として入れられる。AU360の出力はgr[rc]354の対応する最下位ビットに接続される。発見信号364はまたその値を例えばステートビット51のようなインジケータ366に送ることによって条件コードをセットするのに使うこともできる。
オペレーションに当たっては、レジスタgr[rb]352のバイト内のビットは論理355を殆ど同時に通って1バイトごとに1つのORゲートとして表される。得られた結果の(t0〜t3)はCLU358に送られる。レジスタgr[ra]350の最下位ビットはCLU358に第2の入力として送られ、レジスタgr[ra]のその他のビットはAU360に入力として送られる。
ターミネーション文字が発見されたときは、オフセット信号362がgr[rb]352内のそのターミネーション文字のありかを特定する。発見されないときはオフセット信号362はゼロで、gr[rb]352の最初のバイトのありかを特定する。レジスタgr[rc]354の最下位ビットはオフセット信号362の値にセットされる。
発見信号364の逆値がAU360に送られる。その発見された信号がゼロなら、ターミネーション文字が発見されないと表示し、そうするとAU360がAUへのその他の入力として特定されたアドレスに1を加え、gr[rc]中の対応する最上位ビット、すなわち最下位ビット以外のビットが結果にセットされる。発見された信号がターミネーション文字が発見されたことを示す1なら、AU360の出力はその他の入力として特定されたアドレスでgr[rc]中の対応する最上位ビットが結果にセットされる。
表1および表2は各々、図6および図7のPLAの304および358の真理値表である。表1は4バイトの真理値表で、表2は8バイトの真理値表である。これらの真理値表で「x」はその入力値が0か1かに拘わらず同じ出力が作られることを示す。
これらの真理値表の各々は、適当なゲートベルの相互接続仕様を作るSynopsis Corp.から購入できるSynopsisのような論理合成プログラムへの入力として使うことができる。
図9は本発明の実施例を具体化するためのハードウエアを示し、バイト列中の1つのエンドバイトが、ターミネーション文字が発見されるか特定のエンドバイトがサーチされるまでそのどちらが先に生ずるかに関係なくバイト列がターミネーション文字をサーチするように特定されることができる。4つのレジスタgr[ra]400,gr[rb]402,gr[rc]404,gr[rd]406が次のように相互接続されている。gr[ra]およびgr[rd]の最上位ビットが等しいときは、レジスタgr[rd]406の最下位ビットはレジスタgr[rb]342内のバイトをそのバイトを含めてターミネーション文字を求めるよう表示し、gr[rd]のその他のビットはそのバイトの内容のメモリー中のある場所のアドレスを表示する。gr[rd]によって特定されたバイトに到着する前にターミネーション文字が発見されたら、サーチは終了する。
レジスタgr[rd]の最下位ビットは入力として組合せ論理ユニット408中に送られる。最下位ビット以外のgr[rd]のビットは比較論理ユニット412に入力として接続される。最下位ビット以外のgr[ra]のビットも比較論理ユニット412に入力として接続される。比較論理ユニット412の結果はCLU408へ入力として送られる。gr[ra]400の最下位ビットもCLU408へ入力として送られる。
レジスタgr[rb]402のバイト中のビットは1バイトを1ターミネーション文字と比較するために論理419へ接続される。論理419は例えば1または2以上のORゲート420か、Orゲート同等物たり得る。例えばORゲート420のような論理402の出力もCLU408への入力となる。レジスタgr[ra]400のその他のビットはレジスタgr[rc]404内の対応するビットに接続される。
CLU408の出力は、オフセット信号422、発見信号424、ラースト信号426および好ましくは誤り信号428である。オフセット信号422はgr[rc]404の最下位ビットに接続される。使っている条件コードをセットするため、発見信号424をインジケータ1430に接続することができ、ラースト信号426をインジケータ2432に接続することができ、そして誤り信号428をインジケータ3433に接続することができる。インジケータ430、432、433は例えばステートビット51でもよい。あるいはインジケータ1、インジケータ2の両方を使わずにダンインジケータ[done indicator]とも呼ばれる1個のインジケータ434を使ってサーチが終了したことを表示することもできる。このダンインジケータは、発見信号424およびラースト信号426の各値に行われる論理和演算の結果に等しい値をもつ。ダンインジケータはターミネーション文字が発見されたか又はラースト文字が調べられたかのいずれかを指定することができるが、これら2状態のどちらが発生したのかは表示しない。また、誤り信号428は実施の設置においては無視されてしまうこともある。
演算に当たっては、最下位ビットよりもgr[rd]のビット406が、また、最下位ビットよりもgr[ra]のビット400が比較論理ユニット412に入力として入れられ、そこでこれら2値が比較され、それらが等しいか否かを表示し、等しいなら1を戻し等しくないなら0を戻す。サーチされているバイトのアドレスがサーチされるべき最後のバイトのアドレスを含んでいるときは、それらの値は等しい。比較論理ユニット412の出力は入力としてCLU408に入る。
レジスタgr[rb]402のバイト中のビットは、1バイトごとに1個の論理和ゲート420として表された論理419を事実上同時に通過する。結果(t0〜t3)がCLU408に入れられる。レジスタgr[ra]400およびgr[rd]406の最下位ビットも入力としてCLU408に入れられる。レジスタgr[ra]400の他のビットはレジスタgr[rc]404の対応する箇所にコピーされる。
図9において、CLU408は、オフセット信号422、発見信号424、ラースト信号426および誤り信号428の4つの出力を作る。誤り信号428はなくてもよいし、発見信号424とラースト信号426は1つのダン信号にまとめることができる。発見信号424はターミネーション文字がレジスタgr[rb]402中に発見されたか否かを示す。もしターミネーション文字が発見されたのであれば、オフセット信号422がそのターミネーション文字のgr[rb]402中の存在位置を示す。発見されなければオフセット信号422がgr[rb]402の最初のバイトを示す。gr[rc]404の最下位ビットがそのオフセット信号422の値にセットされる。
図9に示された実施例は図7について説明した排他的論理和の実施例を付加することによって動的ターミネーション文字を処理するように修正することができる。同様に、図9の実施例は図7について説明した付加ユニットを付けるように修正することもできる。
表3は図9のPLA408のための4バイト真理値表である。真理値表1および2と同様、真理値表3も論理合成プログラムへの入力として使用することができる。
「x」は、その入力値が0か1か同じ出力が作られることを示す。括弧内の値はエラー状態、すなわち終了アドレスが開始アドレスより小さいときを示す。一般にその他のデータ値はエラー状態が発生したときは無視されるが、プロセッサによってはそうしたエラーをチェックしないものもある。したがって表では出力はエラー状態について定義する。表中に示された値はエラーについての好ましい値であるが、その他のどんな値でも使うことができる。
図11はソースアドレスからターゲットアドレスへの空終了バイト列をコピーするためのFINDFIXEDCHAR命令を使うときに行われるステップを示す。図11もまたFINDARBCHAR命令を使うように修正することができる。
これらのステップはより高いレベルのコンピュータプログラミング言語では、コピー指示呼出しすなわちサブルーチン呼出しに応えて実行される。コピー指示は、ソースパラメータがターミネーション文字で終了するバイト列のアドレスを、またターゲットパラメータがその列がコピーされるべきアドレスを指定する場合には、例えばコピーせよ[COPY](ソース、ターゲット)と指示される。ソースアドレスおよびターゲットアドレスはレジスタその他の比較的容易にアクセスできる一時記憶装置に既にロードされていることが前提である。例えば、ソースアドレスがロードされるレジスタはgr[ra]と呼ばれる。
簡略化して説明すると、図11ではソースアドレスおよびターゲットアドレスの最下位ビット、すなわちレジスタ内のバイトオフセットを特定するビットは、同じである。そうでないときは追加的にアラインメント演算命令および桁送り命令が使われる。
基本的にバイトの列はレジスタに一杯のバイトを1度にコピーすることによってソースアドレスからターゲットアドレスへとコピーされる。レジスタ一杯のバイトはレジスタgr[rb]にロードされ、gr[ra]の最下位ビットで指定されたgr[rb]内のオフセットで始まる内容につきターミネーション文字如何が調べられる。ターミネーション文字が発見されたらgr[ra]の最下位ビットで指定された存在箇所とそのターミネーション文字の存在箇所との間のgr[rb]内容が包含的にターゲットアドレスで指定された適当なアドレスに記憶される。ターミネーション文字が発見されないときは、gr[ra]の最下位ビットで指定されたオフセットで開始するgr[rb]内容が、最後までターゲットアドレスで指定された適当なアドレス中にストアされgr[ra]が次のコピーされるべき文字のアドレスを指定するように更新される。
具体的には図11に示すように、ブロック550でデータがソースアドレスを使ってgr[rb]にロードされる。ブロック552でFINDFIXEDCHAR命令またはFINDARBCHAR命令が実行される。好ましくはソースアドレスつまりgr[ra]およびデータつまりgr[rb]はパラメータとして呼出しに入れられるのがよい。「ネクスト」とも呼ばれる汎用レジスタgr[rc]および、ここでは「テスト」と呼ばれるテストビットが出力パラメータとして使われる。
ターミネーション文字がブロック552で発見されたか否かを決定するためブロック554で調べられる。もし発見されたなら制御がブロック556へ送られ、発見されないなら制御はブロック558へ送られる。ブロック556では「n」がgr[rb]中のバイト数を指すとして、ソースのモジュロとn、すなわちnでソースを割った残りと、次のモジュロとnとの間のgr[rb]中のデータのバイトを、ターゲットアドレスにストアする。
ブロック558で、ソースに示されたバイトを含むその後のgr[rb]中のバイト数にカウントセットする。ブロック560で、ターゲットアドレスから開始してgr[rb]のバイト数のカウントをストアする。ブロック562で、ソースの最下位ビットをゼロにセットする。ブロック564でソースをnだけ微増する。ブロック566でターゲットをnだけ微増する。ブロック564と566は順序をどちらにしても実行可能である。次に制御をブロック550に移す。図11のステップは開始バイトは勿論gr[rb]中の末端バイトをも指定するように修正することができる。
Claims (23)
- 第1のレシスタ中に文字列の1部分を記憶し、
該第1のレジスタ中の存在場所を指摘する開始場所を指定し、
プロセッサーで命令を受け取り、
該命令に応えて次の処置を単一命令中で実行し、すなわち、
上記開始場所と同一場所またはそれより後の場所で上記第1のレジスタ中に記憶されている複数の文字と上記特定の文字とを同時に比較し、
その特定文字が発見されたら、該特定文字の存在場所を示すアドレスを1のレジスタ中に保存し、
その特定文字が発見されなければ、上記文字列の調べ終わった部分のすぐ次の文字列中の文字を指摘するアドレスを第2のレジスタに保存する、
というステップを有することを特徴とするプロセッサーにアクセスできるメモリー中に記憶された可変長文字列中にある特定の文字を発見する方法。 - 特定の文字が発見されたか否かをプロセッサーが表示するステップをさらに有することを特徴とする請求項1に記載の方法。
- 特定の文字が発見されたか否かの表示が条件コードをセットするステップも含むことを特徴とする請求項2に記載の方法。
- 特定の文字が予め定められた固定値であることを特徴とする請求項1に記載の方法。
- 特定の文字が動的値であることを特徴とする請求項1に記載の方法。
- 特定の文字が空文字であることを特徴とする請求項1に記載の方法。
- 特定の文字が1バイト長であることを特徴とする請求項1に記載の方法。
- 特定の文字が2バイト長以上であることを特徴とする請求項1に記載の方法。
- 命令を受け取ることが単一の命令しか受け取らないことを特徴とする請求項1に記載の方法。
- 第1のレジスタ中に文字列の1部分を記憶し、
該第1のレジスタ中の存在場所を指摘する開始場所を指定し、
上記第1のレジスタ中の存在場所を指摘する終端場所を指定し、該第1のレジスタ中に保存されている複数の文字を書き込む開始場所および終端場所を特定の文字と比較し、
プロセッサーで命令を受け取り、
該命令に応えて次の処置を単一命令中で実行し、すなわち、
上記開始場所と終端場所とを含むそれら場所間の複数の場所で上記第1のレジスタ中に記憶されている複数の文字と上記特定の文字とを同時に比較し、
その特定文字が発見されたら、該特定文字の存在場所を示すアドレスを1のレジスタ中に保存し、
その特定文字が発見されなければ、上記文字列の調べ終わった部分のすぐ次の文字列中の文字を指摘するアドレスを1のレジスタに保存する、
というステップを有することを特徴とするプロセッサーにアクセスできるメモリー中に記憶された可変長文字列中にある特定の文字を発見する方法。 - プロセッサーで命令を受け取り、
該命令に応えて、
サーチされている文字部分と動的文字を複製した連続を含む基準値[reference value]との間で排他的論理和演算を実行し、
該排他的論理和演算が何らかの文字の存在場所でゼロ結果を出すときは、そのゼロ結果の存在場所を示すアドレスをレジスタ中に保存し、排他的論理和演算がいずれの文字の存在場所でもゼロ結果を出さないときは、その文字列の調べ終わった部分のすぐ次の文字列中の文字を指摘するアドレスレジスタに保存する、
というステップを有することを特徴とする
プロセッサーで可変長文字列中にゼロ値によって表される文字以外の動的文字を発見する方法。 - 排他的論理和演算が調べたバイトの存在場所のいずれかにつきゼロ結果を出すか否かを表示するステップをさらに有することを特徴とする請求項12に記載の方法。
- ソースアドレスを使って文字列の1部分をロードし、
該文字列の1部分を第1のレジスタに記憶させ、
該第1のレジスタ中に存在場所を指摘する開始場所を指摘し、
プロセッサーで命令を受け取り、
該命令に応えて次の処置を単一命令中で実行し、すなわち、
上記開始場所と同一場所またはそれより後の場所で上記第1のレジスタ中に記憶されている複数の文字と上記特定の文字とを同時に比較し、
その特定文字が発見されたら、該特定文字の存在場所を示すアドレスを1のレジスタ中に保存し、
その特定文字が発見されなければ、上記文字列の調べ終った部分のすぐ次の文字列中の文字を指摘するアドレスを第2のレジスタに保存し、
その特定文字が発見されたら、ソースアドレスとそのターミネーション文字のアドレスとの間に文字列の部分のバイトをターゲットアドレスに保存し、
その特定のターミネーション文字が発見されなければ、その文字列のその部分の最後までソースアドレスによって特定されるバイトの開始端からのその文字列のその部分をターゲットアドレスに保存し、文字列のその部分の長さだけソースアドレスを微増させ、文字列のその部分の長さだけターゲットアドレスを微増させ、そしてソースアドレスの最下位ビットをゼロにセットする、
というステップを有することを特徴とするソースアドレスからターゲットアドレスに特定のターミネーション文字で終る可変長文字列を複製する方法。 - 第1のレジスタ中に文字列の1部分を記憶し、
該第1のレジスタ中の存在場所を指摘する開始場所を指定し、
プロセッサーで命令を受け取り、
該命令に応えて次の処置を単一命令中で実行し、すなわち、
上記開始場所と同一場所またはそれより後の場所で上記第1のレジスタ中に記憶されている複数の文字と上記特定の文字とを同時に比較し、
その特定文字が発見されたら、該第1のレジスタ中の該特定文字の存在場所に対応する最下位ビットを第3のレジスタ中に保存し、
その特定文字が発見されなければ、上記第1のレジスタ中の特定文字の存在場所に対応する最下位ビットを上記第3のレジスタにセットし、
その特定文字が発見されなければ、上記第1のレジスタの初めのアドレスに対応する最下位ビットを上記第3のレジスタにセットし、そして、
その特定文字が発見されたか否かを表示する、
というステップを有することを特徴とするプロセッサーにアクセスできるメモリー中に記憶された可変長文字列中にある特定の文字を発見する方法。 - 特定の文字を求めて第1のレジスタ中の複数の文字を調べる前に第1のレジスタの内容とその特定文字の複製された連続を有する基準値の内容とを排他的論理和演算するステップを有することを特徴とする請求項4に記載の方法。
- 1または2以上のデータ文字を保存することができる第1のレジスタと、
該第1のレジスタ中に入るオフセットを指定する最下位ビットと上記第1のレジスタの内容のメモリーのアドレスを指定する最上位ビットとを有する第2のレジスタと、
該第1のレジスタ中に入るオフセットを指定する最下位ビットと上記第2のレジスタの最上位ビットの内容のコピーを保持する最上位ビットとを有する第3のレジスタと、
特定文字と多数のバイトとを同時に比較するバイト比較論理であって、上記第1のレジスタの文字に結合される1または2以上のOR−GATESを有し、
これらOR−GATESは1文字が1個のOR−GATEに結合されるように、また1個のOR−GATEは1文字に結合されるように配列されたものと、
上記バイト比較論理の出力および上記第2のレジスタの最下位ビットに結合される入力を有する組合せ論理ユニットであって、上記第1のレジスタ中に入るオフセットを示し、かつ、上記第3のレジスタの最下位ビットに送られるオフセット信号出力と上記特定文字が発見されたか否かを示す発見信号出力とを出すもので、特定の文字を発見したときは上記オフセット信号出力が上記第1のレジスタ中に特定の文字の存在場所を特定するオフセットにセットされ、特定文字を発見しないときはゼロにセットされる組合せ論理ユニットと、
を有することを特徴とするコンピュータに可変長文字列中に特定の文字を発見する装置。 - ORゲートが1個の文字中のビットに接続され、第1のレジスタ中の各文字が1個のORゲートに接続されるように上記第1のレジスタに接続される1または2以上のORゲートであって、第1のレジスタのビットが接続されるORゲートに入力として接続されるものを上記論理が有することを特徴とする請求項17に記載の装置。
- 第2のレジスタの他のビットに接続される第1の入力と、発見した信号の出力の逆値に接続される第2の入力とを有し、さらに、上記第3のレジスタの他のビットに接続される出力を有する加算器をさらに有することとを特徴とする請求項17に記載の装置。
- データの1または2以上のバイトを保存することができる第1のレジスタと、
上記第1のレジスタ中に入る開始オフセットを指定する最下位ビットと、該第1のレジスタ中のデータに関連するメモリーのアドレスを開始するオフセットロケーションに指定するための最下位ビットを有する第2のレジスタと、
上記第1のレジスタ中に入るオフセットを指定するための最下位ビットと、上記第2のレジスタの最上位ビットの内容のコピーを保持するための最上位ビットとを有する第3のレジスタと、
上記第1のレジスタ中に入る終端のオフセットを指定するための最下位ビットと、第1のレジスタ中のデータに関連するメモリーのアドレスを上記終端のオフセットロケーションに指定するための他のビットとを有する第4のレジスタと、
ゼロ値にされたターミネーション文字と多数のバイトとを同時に比較するバイト比較論理であって、上記第1のレジスタのバイトに結合される1または2以上のOR−GATESを有し、これらOR−GATESは上記第1のレジスタ中のバイト各々が1個のOR−GATEに結合され、また各々のOR−GATEが単一バイトに結合されるように配列されたものと、
上記第4のレジスタの他のビットに結合される第1の入力と、上記第2のレジスタの他のビットに結合される第2の入力とを有するアドレス比較ユニットであって、上記第1および第2の入力が同じメモリーのアドレスを指定するか否かを決定すること、およびその決定の結果を表示する出力を出すことができるものと、
上記バイト比較論理の出力、上記第2のレジスタの最下位ビット、上記第4のレジスタの最下位ビットおよび上記比較論理ユニットの出力に結合される入力を有する組合せ論理ユニットであって、上記第1のレジスタ中に入るオフセットを示し、かつ、上記第3のレジスタの最下位ビットに送られるオフセット信号出力と、特定文字が発見されたか否かを示す発見信号出力とを出すもので、上記オフセット信号出力は特定文字が発見されたら上記第1のレジスタ中の特定文字の存在場所を指定するオフセットにセットされ、特定文字が発見されなければゼロにセットされるもので、第4のレジスタの最下位ビットに指定される最後のオフセットが調べられたか否かを示すラースト信号出力と、エラーが発生したか否かを示すエラー信号出力とを有することを特徴とするコンピュータで文字列中の特定の文字を発見する装置。 - 上記論理が上記第1のレジスタに接続された1または2以上のORゲートを、ORゲートが単一バイト中のビットに接続され第1のレジスタ中の各バイトが単一のORゲートに接続されるように備え、第1のレジスタのビットがそれらが接続されるORゲートに入力として接続されていることを特徴とする請求項19に記載の装置。
- 上記発見信号出力と上記ラースト信号出力とがそれらが接続されるORゲートに入力として接続されていることを特徴とする請求項19に記載の装置。
- 第1のレジスタに1または2以上の文字を記憶し、
第2のレジスタの第1の部分に上記第1のレジスタ中に記憶された第1の文字のアドレスを記憶し、
上記第2のレジスタの第2の部分に上記第1部分に記憶されたアドレスからのオフセットであって特定の文字を求めてサーチを開始する第1のレジスタ中のバイトのロケーションを示すものを記憶し、
上記第2のレジスタの第2部分に指定されたバイトロケーションに存在するか、またはそれより後に存在する第1のレジスタの中の複数の文字を同時にサーチし、
特定文字を発見したら、第3のレジスタに第1のレジスタ中のその特定文字の存在場所を示すアドレスを保存し、
特定文字を発見しなかったら、その文字列の調べ終わった部分のすぐ次の可変長文字列中の文字を指摘するアドレスを第3のレジスタに記憶する、
というステップを有することを特徴とする可変長文字列中に特定文字の発生したことを探知する方法。 - データの1または2以上の文字を保存することができる第1のレジスタと、
該第1のレジスタ中に入るオフセットを指定する最下位ビットを有する第2のレジスタであって第1のレジスタの内容のメモリーアドレスを指定する最上位ビットを有するものと、
上記第1のレジスタ中に入るオフセットを指定する最下位ビットを有する第3のレジスタであって、第2のレジスタの最上位ビットの内容のコピーを保持する最上位ビットを有するものと、
多数のバイトを特定文字と同時に比較するバイト比較論理であって、1出力と各構成部分が、第1のレジスタ中の文字中から得られるビットを入力として備え、また第1のレジスタ中の1個の構成部分に入力を供給するように配置された1または2以上の構成部分を有するものと、
バイト比較論理の出力および第2のレジスタの最下位ビットに接続される入力を有する組合せ論理ユニットであって、上記第1のレジスタ中に入るオフセットを示し上記第3のレジスタの最下位ビットに送られるオフセット信号出力と特定文字が発見されたか否かを示す発見信号出力とを出すもので、上記オフセット信号出力は特定文字が発見されたときは上記第1のレジスタ中に特定文字の存在場所を指定するオフセットにセットされ、特定文字が発見されないときはゼロにセットされるものと、
を有することを特徴とするコンピュータで可変長文字列中に特定の文字を発見する装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US7752893A | 1993-06-14 | 1993-06-14 | |
US08/077,528 | 1993-06-14 | ||
PCT/US1994/006752 WO1994029790A1 (en) | 1993-06-14 | 1994-06-13 | Method and apparatus for finding a termination character within a variable length character string or a processor |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08511640A JPH08511640A (ja) | 1996-12-03 |
JP3637922B2 true JP3637922B2 (ja) | 2005-04-13 |
Family
ID=22138606
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP50220095A Expired - Lifetime JP3637922B2 (ja) | 1993-06-14 | 1994-06-13 | プロセッサにおけるさまざまな長さの文字列中のターミネーション文字を発見する方法および装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US5495592A (ja) |
EP (1) | EP0704073A1 (ja) |
JP (1) | JP3637922B2 (ja) |
AU (1) | AU7108994A (ja) |
CA (1) | CA2162115A1 (ja) |
WO (1) | WO1994029790A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017112489A1 (en) * | 2015-12-22 | 2017-06-29 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4334294C1 (de) * | 1993-10-08 | 1995-04-20 | Ibm | Prozessor für Zeichenketten variabler Länge |
US5931940A (en) * | 1997-01-23 | 1999-08-03 | Unisys Corporation | Testing and string instructions for data stored on memory byte boundaries in a word oriented machine |
US7191318B2 (en) * | 2002-12-12 | 2007-03-13 | Alacritech, Inc. | Native copy instruction for file-access processor with copy-rule-based validation |
WO2008020271A1 (en) * | 2006-08-18 | 2008-02-21 | Freescale Semiconductor, Inc. | Method for performing plurality of bit operations and a device having plurality of bit operations capabilities |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
US20100211591A1 (en) * | 2009-02-16 | 2010-08-19 | Chuan-Hua Chang | Apparatus for processing strings simultaneously |
US9454367B2 (en) * | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9268566B2 (en) * | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9454366B2 (en) * | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10620956B2 (en) | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
US10564965B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
US10613862B2 (en) * | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4219874A (en) * | 1978-03-17 | 1980-08-26 | Gusev Valery | Data processing device for variable length multibyte data fields |
US4520439A (en) * | 1981-01-05 | 1985-05-28 | Sperry Corporation | Variable field partial write data merge |
US4654781A (en) * | 1981-10-02 | 1987-03-31 | Raytheon Company | Byte addressable memory for variable length instructions and data |
US4556951A (en) * | 1982-06-06 | 1985-12-03 | Digital Equipment Corporation | Central processor with instructions for processing sequences of characters |
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 |
US4747046A (en) * | 1985-06-28 | 1988-05-24 | Hewlett-Packard Company | Mechanism for comparing two registers and storing the result in a general purpose register without requiring a branch |
US4739471A (en) * | 1985-06-28 | 1988-04-19 | Hewlett-Packard Company | Method and means for moving bytes in a reduced instruction set computer |
KR940003700B1 (ko) * | 1986-02-14 | 1994-04-27 | 가부시기가이샤 히다찌세이사꾸쇼 | 검색방법 및 그 장치 |
US5073864A (en) * | 1987-02-10 | 1991-12-17 | Davin Computer Corporation | Parallel string processor and method for a minicomputer |
CA1327080C (en) * | 1987-05-26 | 1994-02-15 | Yoshiko Yamaguchi | Reduced instruction set computer (risc) type microprocessor |
KR890702109A (ko) * | 1987-08-20 | 1989-12-22 | 데이비드 메드빈 | 미니컴퓨터용 병렬 스트링 프로세서 및 방법 |
US5060143A (en) * | 1988-08-10 | 1991-10-22 | Bell Communications Research, Inc. | System for string searching including parallel comparison of candidate data block-by-block |
US5144072A (en) * | 1988-10-21 | 1992-09-01 | American Home Products Corporation | Anti-arrhythmic agents |
US5179711A (en) * | 1989-12-26 | 1993-01-12 | International Business Machines Corporation | Minimum identical consecutive run length data units compression method by searching consecutive data pair comparison results stored in a string |
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 |
US5228133A (en) * | 1990-10-01 | 1993-07-13 | Carl Oppedahl | Method to perform text search in application programs in computer by selecting a character and scanning the text string to/from the selected character offset position |
-
1994
- 1994-06-13 JP JP50220095A patent/JP3637922B2/ja not_active Expired - Lifetime
- 1994-06-13 WO PCT/US1994/006752 patent/WO1994029790A1/en not_active Application Discontinuation
- 1994-06-13 EP EP94920215A patent/EP0704073A1/en not_active Withdrawn
- 1994-06-13 CA CA002162115A patent/CA2162115A1/en not_active Abandoned
- 1994-06-13 AU AU71089/94A patent/AU7108994A/en not_active Abandoned
-
1995
- 1995-01-06 US US08/369,852 patent/US5495592A/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017112489A1 (en) * | 2015-12-22 | 2017-06-29 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
US10095517B2 (en) | 2015-12-22 | 2018-10-09 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
Also Published As
Publication number | Publication date |
---|---|
EP0704073A1 (en) | 1996-04-03 |
US5495592A (en) | 1996-02-27 |
WO1994029790A1 (en) | 1994-12-22 |
JPH08511640A (ja) | 1996-12-03 |
AU7108994A (en) | 1995-01-03 |
CA2162115A1 (en) | 1994-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3637922B2 (ja) | プロセッサにおけるさまざまな長さの文字列中のターミネーション文字を発見する方法および装置 | |
JP2846407B2 (ja) | 例外処理方法及び例外処理装置 | |
US5517651A (en) | Method and apparatus for loading a segment register in a microprocessor capable of operating in multiple modes | |
US5640503A (en) | Method and apparatus for verifying a target instruction before execution of the target instruction using a test operation instruction which identifies the target instruction | |
JP3602542B2 (ja) | スーパースカラマイクロプロセッサにおける分岐予測正確度向上のための装置および方法 | |
EP0730226A2 (en) | Hardware support for fast software emulation of unimplemented instructions | |
US20060036824A1 (en) | Managing the updating of storage keys | |
JPH06236268A (ja) | 命令の長さを判定する装置と方法 | |
WO1984001635A1 (en) | Accelerated instruction mapping external to source and target instruction streams for near realtime injection into the latter | |
JP2002024011A (ja) | プロセッサにおける命令の叙述された実行 | |
WO1991003784A1 (en) | Improved cpu pipeline having register file bypass on update/access address compare | |
EP0317473A2 (en) | Microcode branch based upon operand length and alignment | |
US5692146A (en) | Method of implementing fast 486TM microprocessor compatible string operations | |
US3611305A (en) | Data processor interrupt system | |
US20020112142A1 (en) | Implementation of a conditional move instruction in an out-of-order processor | |
US5564030A (en) | Circuit and method for detecting segment limit errors for code fetches | |
US4631672A (en) | Arithmetic control apparatus for a pipeline processing system | |
JP3822568B2 (ja) | イベント処理 | |
EP0509558A2 (en) | Information processing system with support means responsive to an overall system control | |
US5832533A (en) | Method and system for addressing registers in a data processing unit in an indexed addressing mode | |
US5896526A (en) | Programmable instruction trap system and method | |
EP0061586A2 (en) | Data processing apparatus with extended general purpose registers | |
US6055624A (en) | Millicode flags with specialized update and branch instructions | |
EP0257650B1 (en) | Microprocessor | |
EP0448127B1 (en) | Microprogram sequence controller |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040302 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20040528 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20040712 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040809 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040928 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040930 |
|
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: 20041116 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050104 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080121 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090121 Year of fee payment: 4 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090121 Year of fee payment: 4 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090121 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100121 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110121 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110121 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120121 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130121 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130121 Year of fee payment: 8 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |