JP3608446B2 - コンパイラ装置とプロセッサ - Google Patents

コンパイラ装置とプロセッサ Download PDF

Info

Publication number
JP3608446B2
JP3608446B2 JP24226299A JP24226299A JP3608446B2 JP 3608446 B2 JP3608446 B2 JP 3608446B2 JP 24226299 A JP24226299 A JP 24226299A JP 24226299 A JP24226299 A JP 24226299A JP 3608446 B2 JP3608446 B2 JP 3608446B2
Authority
JP
Japan
Prior art keywords
instruction
load
store
input value
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP24226299A
Other languages
English (en)
Other versions
JP2001067234A (ja
Inventor
聡 細井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP24226299A priority Critical patent/JP3608446B2/ja
Publication of JP2001067234A publication Critical patent/JP2001067234A/ja
Application granted granted Critical
Publication of JP3608446B2 publication Critical patent/JP3608446B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、計算機の実行の高速化のため、命令列を並べ替えて最適化処理を行うコンパイラ装置とコンパイラ装置によりコンパイルした命令列を実行するプロセッサに関する。 以下コンパイラ装置をコンパイラと記載している。
【0002】
【従来の技術と発明が解決しようとする課題】
近年のプロセッサの性能向上はめざましいが、演算速度ほどにはメモリのアクセス速度は向上しない。
【0003】
そのため、ロード命令のときのキャッシュミスヒットによるメモリアクセスの遅延やロード命令のときのキャッシュメモリ上のデータの転送待ちによる遅延がますます大きくなる傾向がある。
【0004】
従って、他の命令処理との並行処理を可能にするため、メモリアクセス時間の遅いロード命令はできるだけグループ化して先行してメモリアクセスをしておくことが必要となる。
【0005】
その為、ロード命令を先行化するコンパイラが必要となる。
【0006】
従来例のコンパイラ1の構成図を図7に示す。
【0007】
コンパイラ1は、ソースプログラム2から中間コードを生成する命令解析部11と、生成した中間コードの最適化処理(最適化処理とは、余分な命令の削除、重複した命令のまとめ、より高速な命令への変換など命令列の高速化のための処理をいう。)を行う命令最適化部A12と、その最適化結果に基づき目的プログラム3のコードを生成する命令変換部13より構成される。
【0008】
目的プログラム3の各命令は、プロセッサ4によりフェッチされ実行される。
【0009】
メモリアクセスの高速化のため、コンパイラ上で、ストア命令の前にロード命令を再配置して先行実行しようとすると、メモリ上のロード命令、ストア命令のオペランドアドレスがコンパイラ上では、不明の場合が発生し、ロード命令とストア命令のオペランドアドレスの重なり(以下エイリアスと呼ぶ)の解析が困難であった。
【0010】
例えば、C言語で記述したプログラムではポインタが多用されるため、コンパイラでは、ロード命令とストア命令のエイリアス関係を検出できなかった。
【0011】
しかし、実際のプログラムの実行上では、ほとんどロード命令とストア命令のオペランドアドレスが重なることはないため、ロード命令をストア命令の前に配置してロード命令のメモリアクセスによる遅延の影響を少なくできる可能性を活かせていなかった。
【0012】
本発明のコンパイラの目的は、エイリアス状態をチェックするエイリアスチェック命令を生成し、ストア命令の前にロード命令を配置することで、実行時のロード命令のアクセスを高速化することである。
【0013】
【課題を解決するための手段】
ソースプログラムから中間コードを生成する命令解析部と生成した中間コードの余分な命令の削除等を行う命令最適化部と実行可能な目的プログラムに変換する命令変換部とを備えたコンパイラであって、命令最適化部は、命令解析部で生成した中間コードの中からストア命令、ロード命令の組を抽出するストア・ロード命令抽出手段と、抽出したロード命令とストア命令のオペランドアドレス間の重なりを実行時に検出するためのエイリアスチェック命令を生成するエイリアスチェック命令生成手段と、エイリアスチェック命令、ロード命令、ストア命令の順に命令列を再配置し、エイリアスチェック命令実行時に、オペランドアドレス間の重なりが検出されたときには、ロード命令実行の補正を行い、重なりが検出されなかったときには、何も実行しない条件付命令をロード命令の元の位置に配置する命令配置手段とを有する構成である。
【0014】
この構成により、プロセッサによる目的プログラムの実行時にエイリアスチェック命令が、エイリアス状態をチェックするので、ロード命令のストア命令の前への移動の有効性の有無が確認できる。この結果、移動が有効であれば、ロード命令が先行実行できるので、命令実行の高速化が可能となる。また移動が無効であれば、先行して実行したロード命令は無効のため、ロード命令の内容を補正するための命令(ロード命令またはムーブ命令)を実行する。この補正をする命令により、ロード命令の先行実行の内容を補正できる。
【0015】
また、エイリアスチェック命令はストア命令のオペランドアドレスを設定する第1入力値と、ロード命令のオペランドアドレスを設定する第2入力値と、少なくとも1つ以上のロード命令のアドレスサイズの合計値と、少なくとも1つ以上のストア命令のアドレスサイズの合計値とを比較して等しいかまたは大きい方のアドレスサイズの合計値を設定する第3入力値とを有し、第1入力値と第2入力値との差の絶対値を計算し、計算した結果が第3入力値より小さいときはロード命令のオペランドアドレスとストア命令のオペランドアドレスとが重なっていることを示すチェック情報をオンにする構成である。
【0016】
この構成により、1つ以上のロード命令を1つ以上のストア命令の前に、まとめて移動できるのでロード命令の先行実行の効果が大きくなるエイリアスチェック命令を生成できる。
【0017】
また、1つのロード命令のデータサイズと、1つのストア命令のデータサイズとを比較して等しいときは、1をエイリアスチェック命令の第3入力値として設定し、等しくないときは、大きいデータサイズの値を第3入力値として設定する構成である。
【0018】
この構成により、1ロード命令と1ストア命令間では、データサイズの比較のみにより、ストア命令の前へのロード命令の先行実行の有効無効を判断するエイリアスチェック命令が、生成できる。
【0019】
また、コンパイラにより生成された目的プログラムを実行するプロセッサであって、コンパイラによって生成されたエイリアスチェック命令を実行する実行手段を有する構成である。
【0020】
この構成により、生成されたエイリアスチェック命令を実行できるプロセッサを使用して、先行実行のためにロード命令をストア命令の前に配置した目的プログラムを実行できる。
【0021】
【発明の実施の形態】
実施例のコンパイラ1の構成図を図1に示す。
【0022】
コンパイルラ1は,ソースプログラム2を解析し中間コードを生成する命令解析部11,命令の最適化処理を行う命令最適化部12,命令最適化部12の結果に基づき目的プログラム3のコードを生成する命令変換部13からなる。
【0023】
命令最適化部12は、命令最適化部Aと命令最適化部Bとからなる。
【0024】
命令最適化部Aは、従来と同様に余分な命令の削除、重複した命令のまとめ、より高速な命令への変換など命令列の高速化のための処理を行う。
【0025】
命令最適化部Bは、ロード命令とストア命令のエイリアス状態のチェックを行うエイリアスチェック命令の生成処理とエイリアスチェック命令、ロード命令、ストア命令等の命令列の配置処理を行うことで命令列の高速化のための処理を行う。
【0026】
プロセッサ4は、コンパイラ1で生成した目的プログラムを入力してエイリアスチェック命令を含む各命令を実行する。
【0027】
コンパイルラ1は,ソースプログラムを命令解析部11に入力すると、文法チェックを行いエラーがなければ、中間コードを生成する。
【0028】
生成された中間コードを命令最適化部12に入力し、最適化処理を行う。
【0029】
本発明の特徴である命令最適化部Bについて説明を行う。
【0030】
図2に命令最適化部Bの流れ図を示す。
(1) 中間コードの中から、ロード命令とストア命令のグループを検出する。(S1ステップ)
(2) 検出した命令を基に、エイリアスチェック命令生成処理を行う。(S2ステップ)
(3) エイリアスチェック命令に続けてストア命令の前にロード命令を配置する。(S3ステップ)
(4) エイリアスチェック命令の第3入力値が1か否かのチェックを行う。(S4ステップ)
(5) 第3入力値が1でなければ元のロード命令の位置に条件付ロード命令を配置する。(S5ステップ)
(6) 第3入力値が1のときは元のロード命令の位置に条件付ムーブ命令を配置する。(S6ステップ)
図3には、エイリアスチェック命令生成処理の流れ図を示す。
【0031】
エイリアスチェック命令とは、ロード命令とストア命令のオペランドアドレス(以下アドレスと略す。)のエイリアス状態をチェックする命令である。
【0032】
エイリアスチェック命令は、vailias a1,a2,x と表す。
【0033】
第1入力値a1:ストア命令のアドレス
第2入力値a2:ロード命令のアドレス
第3入力値x:所定値
プロセッサ4による目的プログラム3の命令実行時にプロセッサ4は、ストア命令のアドレス、ロード命令のアドレスとを比較して、所定値以上であれば、アドレスが重ならないことを示すチェック情報(以下コンディションコードccのzフラグと呼ぶ)をオフとする。そしてS3ステップで移動したロード命令の実行を有効とする。
【0034】
この時、元のロード命令の位置でのS5ステップで生成した条件付ロード命令またはS6ステップで生成した条件付ムーブ命令は、何も実行しない。
【0035】
また、ストア命令とロード命令のアドレスの差が所定値より小さければ、アドレスが重なっていることを示すccのzフラグをオンとして、移動したロード命令の実行を無効とみて、元のロード命令の位置で、条件付きロード命令により、再度同じロード命令を実行するか又は、条件付ムーブ命令により所定のレジスタにムーブすることにより、ロード命令の補正処理を実行する。
【0036】
コンパイラ1でのエイリアスチェック命令の生成について説明する。
【0037】
複数のロード命令を複数のストア命令を超えて移動させる例を示す。
(1) ストア命令のN個のグループを検索し、その基準アドレスを示すレジスタを第1入力値にセットする。(S21ステップ)
(2) ロード命令のM個のグループを検索し、その基準アドレスを示すレジスタを第2入力値にセットする。(S22ステップ)
(3) N=M=1か否かをチェックする。(S23ステップ )
(4) ストア命令のN個のグループと、ロード命令のM個のグループの各アドレスサイズの合計値を取得し、比較する。(S24ステップ)
(5) N=M=1ならロード命令とストア命令のデータサイズが等しいか否かをチェックする。(S25ステップ)
(6) N=M=1で、ロード命令とストア命令のデータサイズが等しいときは、第3入力値を1とする。(S26ステップ)
(7) N=M=1で、ロード命令とストア命令のデータサイズが等しくないときはデータサイズの大きな方の値を第3入力値としてセットする。(S27ステップ)
(8) ロード命令またはストア命令が複数命令であれば、アドレスサイズが等しい値かまたは大きい値の方の値を第3入力値としてセットする。(S28ステップ)
(9) 上記第1〜第3の入力値を基にエイリアスチェック命令を生成する。(S29ステップ)
以下に具体例を示す。
【0038】
図4に、実施例1のエイリアスチェック命令生成時の命令列を示す。
【0039】
また、図4a は生成前の命令列、図4b は、生成後の命令列を示す。
【0040】
まず生成前の命令列を基にエイリアスチェック命令を生成する。
【0041】
命令列が複数のロード命令、複数のストア命令の順番に配置されているとすると、エイリアスチェック命令の生成処理は次のように行う。
【0042】
ストア命令のグループを検索した結果、ストア命令のデータサイズが1バイトの命令とすると、グループのアドレスサイズは、アドレス〔r1〕から〔r1+1〕までの2バイトである。(図4a の▲2▼▲4▼)
従ってエイリアスチェック命令の第1入力値は、〔r1〕である。
【0043】
一方ロード命令は、データサイズ4バイトの命令とするとアドレスサイズは、アドレス〔r2〕から〔r2+11〕まの12バイトである。(図4a の▲1▼▲3▼▲5▼)
従ってエイリアスチェック命令の第2入力値は、〔r2〕である。
【0044】
次に、ストア命令のアドレスサイズ2バイトと、ロード命令のアドレスサイズ12バイトとを比較すると、ロード命令のアドレスサイズが大きいので、その値の12を第3入力値とする。
【0045】
図5に、実施例1のアドレスサイズの説明図を示す。
【0046】
実際にロード命令とストア命令の重なる範囲は、〔r2〕から〔r2+11〕の間である。しかし、エイリアスチェック命令は、〔r2−11〕から〔r2+11〕の間は、アドレスが重なると判断する。これは、〔r2−11 〕から〔r2+11〕に〔r1〕があるとエイリアスになる可能性があるため、その範囲に〔r1〕がないことを判断している。これにより命令を複数命令でなく1命令で処理することができるため、処理の高速化が可能となる。
【0047】
次に命令の配置処理について説明する。
【0048】
図4b には、エイリアスチェック命令生成後の命令列を示す。
【0049】
エイリアスチェック命令(図4b ▲1▼)の次に、複数のストア命令を飛び越して、グループ化した複数のロード命令を配置する。(図4b ▲2▼▲3▼▲4▼)
次に、ストア命令と元のロード命令の位置との配置関係を保ったまま、ロード命令に続けてストア命令等を配置する。(図4b ▲5▼▲7▼)
次に、元のロード命令の位置に条件付ロード命令を配置する。(図4b の▲6▼ ▲8▼)
以上により、命令配置処理は、終了する。
【0050】
このように配置した命令列を命令変換部13で、目的プログラム3に変換後、そのプログラムをプロセッサ4が実行すると、次のような動作を行う。
【0051】
エイリアスチェック命令の実行により、|r1−r2 |の値が第3入力値よりも小さければ、ccフラグのzフラグをオンとする。大きければオフとする。
【0052】
アドレス〔r2〕、〔r2+4〕、〔r2+8〕から各4バイトのデータをレジスタr30 、レジスタr31、レジスタr32にロードする。(図4b ▲2▼▲3▼▲4▼)
アドレス〔r1〕の示すアドレスにレジスタr10の示すデータをストアする。
(図4b ▲5▼)
条件付ロード命令になると、zフラグがオンの場合にのみ、アドレス〔r2+4〕から4バイトのデータをレジスタr31に再ロードする。(図4b の▲6▼)
zフラグがオフの場合は、何もせずに次の命令に進む。
アドレス〔r1+1〕の示すアドレスにレジスタr11の示すデータをストアする。(図4b ▲7▼)
条件付ロード命令になると、zフラグがオンの場合にのみ、
アドレス〔r2+8〕から4バイトのデータをレジスタr32にロードする。
(図4b ▲8▼)
zフラグがオフの場合は、何もせずに次の命令に進む。
【0053】
このように、コンパイラ1がエイリアスチェック命令を条件付ロード命令とペアで、生成することで、プロセッサが命令の実行を高速化できる。
【0054】
図6には、実施例2のエイリアスチェック命令生成時の命令列を示す。
【0055】
図6a には、生成前の命令列、図6b には、生成後の命令列を示す。
【0056】
エイリアスチェック命令生成前の命令列が1つのストア命令、1つのロード命令の順番に配置されている。
【0057】
エイリアスチェック命令の生成処理は次のように行う。
【0058】
ストア命令のグループを検索した結果、ストア命令がアドレス〔r1〕でデータ幅が4バイトの命令とするとエイリアスチェック命令の第1入力値は、〔r1〕である。(図6a ▲1▼)
一方ロード命令は、アドレス〔r2〕でデータ幅4バイトの命令のためエイリアスチェック命令の第2入力値は、〔r2〕である。(図6a ▲2▼)
次にストア命令のデータサイズとロード命令のデータサイズとを比較すると、両者が等しいので、第3入力値を1とする。
【0059】
次に命令の配置処理について説明する。
【0060】
図6b には、実施例2のエイリアスチェック命令生成時の命令列を示す。
【0061】
エイリアスチェック命令(図6b ▲1▼)の次に、ストア命令を飛び越して、ロ ード命令を配置する。(図6b ▲2▼)
次に、ストア命令と元のロード命令の位置との配置関係を保ったまま、ロード命令に続けてストア命令を配置する。(図6b ▲3▼)
次に元のロード命令の位置にチェックムーブ命令を配置する。(図6b ▲4▼)
以上により、命令の配置処理は、終了する。
【0062】
プロセッサ4により、上記の命令を実行するときは、エイリアスチェック命令の実行により、|r1−r2 |の値が1より小さければ、ccフラグのzフラグをオンとする。大きければオフとする。(図6b ▲1▼)
アドレス〔r2〕から4バイトをレジスタr3にロードし、レジスタr0をアドレス〔r1〕から4バイトにストアする。(図6b ▲2▼▲3▼)
チェックムーブ命令になると、zフラグがオンの場合にのみ、レジスタr0の内容をレジスタr3ヘ転送する。(図6b ▲4▼)
zフラグがオフの場合は、何もせずに次の命令に進む。
【0063】
このように、コンパイラ1がエイリアスチェック命令を条件付ムーブ命令とペアで、生成することで、プロセッサが命令の実行を高速化できる。
【0064】
【発明の効果】
本方式により、ロード命令のキャッシュミスヒットなどによるメモリアクセス遅延の影響を小さくすることができる。
【図面の簡単な説明】
【図1】実施例のコンパイラの構成図
【図2】実施例の命令最適化部Bの流れ図
【図3】実施例のエイリアスチェック命令生成処理の流れ図
【図4】実施例1のエイリアスチェック命令生成時の命令列
【図5】実施例1のアドレスサイズの説明図
【図6】実施例2のエイリアスチェック命令生成時の命令列
【図7】従来例のコンパイラの構成図
【符号の説明】
1 コンパイラ
2 ソースプログラム
3 目的プログラム
4 プロセッサ
11 命令解析部
12 命令最適化部
13 命令変換部

Claims (4)

  1. ソースプログラムから中間コードを生成する命令解析部と生成した中間コードの余分な命令の削除等を行う命令最適化部と実行可能な目的プログラムに変換する命令変換部とを備えたコンパイラ装置であって、
    命令最適化部は、命令解析部で生成した中間コードの中からストア命令、ロード命令の組を抽出するストア・ロード命令抽出手段と、
    抽出したロード命令とストア命令のオペランドアドレス間の重なりを実行時に検出するためのエイリアスチェック命令を生成するエイリアスチェック命令生成手段と、
    エイリアスチェック命令、ロード命令、ストア命令の順に命令列を再配置し、エイリアスチェック命令実行の結果、オペランドアドレス間の重なりが検出されたときにはロード命令の補正を行い、重なりが検出されなかったときには何も実行しないこととなる条件付命令をロード命令の元の位置に配置する命令配置手段とを有することを特徴とするコンパイラ装置
  2. エイリアスチェック命令生成手段は、
    実行時に、第1入力値と第2入力値との差の絶対値を計算し、計算した結果が第3入力値より小さいときはロード命令のオペランドアドレスとストア命令のオペランドアドレスとの重なりを示す命令について、
    ストア命令のオペランドアドレスを第1入力値として設定し、
    ロード命令のオペランドアドレスを第2入力値として設定し、
    少なくとも1つ以上のロード命令のアドレスサイズの合計値と、少なくとも1つ以上の ストア命令のアドレスサイズの合計値とを比較して等しいかまたは大きい方のアドレスサイズの合計値を第3入力値として設定することを特徴とする請求項1記載のコンパイラ装置。
  3. 1つのロード命令のデータサイズと、1つのストア命令のデータサイズとを比較して等しいときは、1をエイリアスチェック命令の第3入力値として設定し、等しくないときは、大きい方のデータサイズの値を第3入力値として設定することを特徴とする請求項2記載のコンパイラ装置
  4. コンパイラ装置によりエイリアスチェック命令、1つ以上のストア命令の前に再配置された1つ以上のロード命令、ストア命令、ロード命令の元の位置に条件付命令の順に配置されて生成された目的プログラムを実行するプロセッサであって、
    エイリアスチェック命令が、1つ以上のロード命令のオペランドアドレスと1つ以上のストア命令のオペランドアドレスとの重なりを検出したときには、チェック情報をオンにする動作を行い、
    条件付命令は、チェック情報がオンのときには、前記ロード命令実行の補正を行い、オフのときには、何も実行しないことを特徴とするプロセッサ。
JP24226299A 1999-08-27 1999-08-27 コンパイラ装置とプロセッサ Expired - Fee Related JP3608446B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP24226299A JP3608446B2 (ja) 1999-08-27 1999-08-27 コンパイラ装置とプロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP24226299A JP3608446B2 (ja) 1999-08-27 1999-08-27 コンパイラ装置とプロセッサ

Publications (2)

Publication Number Publication Date
JP2001067234A JP2001067234A (ja) 2001-03-16
JP3608446B2 true JP3608446B2 (ja) 2005-01-12

Family

ID=17086659

Family Applications (1)

Application Number Title Priority Date Filing Date
JP24226299A Expired - Fee Related JP3608446B2 (ja) 1999-08-27 1999-08-27 コンパイラ装置とプロセッサ

Country Status (1)

Country Link
JP (1) JP3608446B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7103881B2 (en) * 2002-12-10 2006-09-05 Intel Corporation Virtual machine to provide compiled code to processing elements embodied on a processor device

Also Published As

Publication number Publication date
JP2001067234A (ja) 2001-03-16

Similar Documents

Publication Publication Date Title
JP2938426B2 (ja) 順不同ロード命令とストア命令との干渉を検出回復するための方法及び装置
JP3093624B2 (ja) 投機例外を処理する方法及び装置
US4710866A (en) Method and apparatus for validating prefetched instruction
US4827402A (en) Branch advanced control apparatus for advanced control of a branch instruction in a data processing system
JPH02260033A (ja) ブランチ予測
JPH0557616B2 (ja)
US9003171B2 (en) Page fault prediction for processing vector instructions
JP2007531164A (ja) データスペキュレーションの明示的ソフトウェア制御のための方法及び構造
JPH08292886A (ja) ノン・フォルティング・ロード命令をインプリメントする方法及び装置
US6301654B1 (en) System and method for permitting out-of-order execution of load and store instructions
US7017026B2 (en) Generating lookahead tracked register value based on arithmetic operation indication
JP3130446B2 (ja) プログラム変換装置及びプロセッサ
US4757445A (en) Method and apparatus for validating prefetched instruction
JP4137735B2 (ja) 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム
JP3608446B2 (ja) コンパイラ装置とプロセッサ
JP3599499B2 (ja) 中央処理装置
JP5068552B2 (ja) プリフェッチ方法、及びキャッシュ機構用ユニット
WO1998011484A1 (fr) Processeur de commande a memoire d'historique
JPH07168719A (ja) 冗長式除去装置
US20240111537A1 (en) Store instruction merging with pattern detection
JPH0695306B2 (ja) 命令先取り装置
JPH0248733A (ja) 情報処理装置
JP3739556B2 (ja) 情報処理装置
JP2629479B2 (ja) 情報処理装置
JP5679263B2 (ja) 情報処理装置及びマイクロ命令処理方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040614

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040629

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040812

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041004

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20081022

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20081022

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20091022

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20091022

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20101022

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20101022

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20111022

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20111022

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20121022

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20121022

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20131022

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees