JP2001154842A - ソースの演算をターゲットの演算に翻訳する方法、同方法に関するコンピュータプログラム、記憶媒体、コンピュータ、および翻訳生成物 - Google Patents

ソースの演算をターゲットの演算に翻訳する方法、同方法に関するコンピュータプログラム、記憶媒体、コンピュータ、および翻訳生成物

Info

Publication number
JP2001154842A
JP2001154842A JP2000301391A JP2000301391A JP2001154842A JP 2001154842 A JP2001154842 A JP 2001154842A JP 2000301391 A JP2000301391 A JP 2000301391A JP 2000301391 A JP2000301391 A JP 2000301391A JP 2001154842 A JP2001154842 A JP 2001154842A
Authority
JP
Japan
Prior art keywords
target
expression
source
value
operand
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2000301391A
Other languages
English (en)
Other versions
JP3755733B2 (ja
Inventor
Vincent Zammit
ザミット ビンセント
Andrew Kay
ケイ アンドリュー
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.)
Sharp Corp
Original Assignee
Sharp Corp
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 Sharp Corp filed Critical Sharp Corp
Publication of JP2001154842A publication Critical patent/JP2001154842A/ja
Application granted granted Critical
Publication of JP3755733B2 publication Critical patent/JP3755733B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 ハードウェア記述に通常使用される算術演算
の固定幅を正確にかつ効率的にシミュレーションするた
めの方法を提供すること。 【解決手段】 第1のビット幅の2進整数を含む少なく
とも1つのソースのオペランドに対するソースの演算
を、第1のビット幅よりも大きい第2のビット幅の2進
整数に対して整数演算を実行するプロセッサによって計
算するために対応するターゲットの演算に翻訳する方法
であって、方法が、ソースの演算を少なくとも1つのタ
ーゲットのオペランドを有するターゲットの演算に変換
するステップと、ターゲットのオペランドの未使用ビッ
トの値がターゲットの演算の値に影響を与えるかどう
か、および、ターゲットのオペランドのいずれかが、不
適切な値を持つ1つ以上の未使用ビットを有してもよい
かどうかを判定するステップと、判定ステップの結果が
真であった場合に、ターゲットの演算に対して補正演算
を加えて、これにより、ターゲットの演算を実行する前
に、不適切な値を持つ該1つ以上のビットのそれぞれの
値を補正するステップと、を包含する方法。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソースの演算をタ
ーゲットの演算に翻訳する方法に関する。本方法を用い
れば、例えば、目標マシン(コンピュータ等)固有の整
数ビット幅の倍数ではないビット幅を持つ整数値を効率
的に計算することができる。本方法の別の用途として
は、高級ハードウェア記述言語のシミュレーションが挙
げられる。さらに、本発明は、同方法を実行するコンピ
ュータプログラム、同プログラムを記憶した記憶媒体、
同プログラムによってプログラムされたコンピュータ、
および同方法によって生成された翻訳生成物にも関す
る。
【0002】
【従来の技術】VHDL(IEEE Computer
Society, IEEE Standard V
HDL Language Reference Ma
nual, New York, USA, 1994
年6月, IEEE Std1076 1993)や、
Verilog HDL(IEEE Computer
Society, IEEE Standard H
ardware Description Langu
age Based on the Verilog
Hardware Description Lang
uage, New York, USA, 1996
年, IEEE Std 1364 1995年)のよ
うなハードウェア記述言語を用いて、ハードウェア回路
の挙動を記述することができる。これらの言語は、適切
な数値型および演算子を提供することによって、整数算
術演算を伴う回路の記述をサポートしている。ハードウ
ェアを効率的に設計するために、通常各数値型は、その
型の整数値のビット幅をパラメータに有している。
【0003】例えば、IEEE 1076.3 NUM
ERIC_STD VHDL ライブラリ(IEEE
Computer Society. IEEE St
andard Hardware Descripti
on Language Based on the
Verilog Hardware Descript
ion Language, New York, U
SA, 1996年.IEEE Std 1364 1
995年)では、ビットベクトルSTD_LOGIC
VECTORの型に基づくUNSIGNED(符号な
し)およびSIGNED(符号付き)整数型が規定され
ている。ビットベクトルは、0値、1値、および、その
他の状態(「U(無限)」、「Z(高インピーダン
ス)」等)を含むビット値の固定長リストである。ビッ
トベクトルの長さ(および、その数値型の長さ)は固定
であるが、ハードウェア設計においては、(それぞれ長
さの異なる)いくつかの型のビットベクトルを用いるこ
とが可能である。VHDL数値型の個々のビットは0お
よび1以外の値を持ち得るので、ある数値型が持つ値の
いくつかは有効な整数に対応しないことに留意された
い。
【0004】Bach言語(Akihisa Yama
da, Koichi Nishida, Ryoji
Sakurai, Andrew Kay, Tos
hio NomuraおよびTakashi Kamb
e, Hardware synthesis wit
h the BACH system, Intern
ational Symposium on Circ
uits and Systems, 1999, G
B2 317 245)のような高級ハードウェア記述
言語を用いれば、C言語(Brian W. Kern
ihanおよびDennis M. Ritchie,
The C ProgrammingLanguag
e, Prentice−Hall, USA, se
cond edition, 1988)のようなプロ
グラミング言語で通常使用される抽象概念のレベルでハ
ードウェアを記述することができる。
【0005】
【発明が解決しようとする課題】C言語、および一般的
なプログラミング言語は、複数種のアーキテクチャをプ
ログラムするために使用されることを想定して設計され
るので、その整数型および式のセマンティックスは通
常、プログラムを実行する目標アーキテクチャに左右さ
れる。例えば、C言語(Brian W. Kerni
hanおよびDennis M. Ritchie,
The C Programming Languag
e, Prentice−Hall, USA, se
cond edition, 1988)は、intお
よびunsigned int型を供給するが、これら
はそれぞれ、目標マシンに固有のビット幅を与えられた
符号付きおよび符号なし整数に対応する。C言語の整数
型は柔軟性に乏しいのでハードウェアの効率的な設計に
C言語は向かない。そこで、Bachハードウェア記述
言語は、符号付きおよび符号なしwビットの整数を表す
intwおよびunsigned intwのような固
定幅の整数型によってC言語を拡張している。
【0006】VHDLのような低級のものよりもBac
hのようなプログラム言語系の高級ハードウェア記述言
語を使用することの利点の1つは、格段により高速に設
計の挙動を(汎用アーキテクチャ上で)シミュレーショ
ンできることである。例えば、上記のVHDL数値型の
特定の抽象レベルのために、シミュレーションに使用さ
れる目標マシンの整数算術演算を直接には使用できな
い。一般に、数値型の各ビット値を目標マシン上の独立
したバイト/ワードとして表現する必要があり、そこで
VHDL算術演算シミュレーションは、目標マシンの固
有の算術演算よりもはるかに遅くなり得る。Bachの
算術演算は、VHDL数値算術演算よりも目標マシンの
固有の算術演算に近いが、それでもビット幅の違いのた
めに目標マシンの固有の算術演算をそのままでは使用で
きない。したがって、ハードウェア記述に通常使用され
る算術演算の固定幅を正確にかつ効率的にシミュレーシ
ョンするための方法を開発する必要がある。
【0007】Valen−Cコンパイラ(Gradua
te School of Information
Science and Electrical En
gineering (Kyushu Univers
ity)、AdvancedSoftware Tec
hnology and Mechatronics
Research Institute of Kyo
to、 Institute of Systems
and Information Technolog
ies (Kyushu)、およびMitsubish
i Electric Corporation.Va
len−C Complier Developmen
t Document (英語版1.01).Info
rmation Technology promot
ion Agency、日本、1998年4月)のよう
なリターゲタブル可能コンパイラを使用すれば、入力ソ
ースプログラムを異なる目標マシンのアセンブリ/機械
語にコンパイルすることができる。Valen−Cコン
パイラの入力言語は、ANSI C言語をやはり固定幅
整数型によって拡張したValen−Cプログラミング
言語である。プログラマは、intwという語の整数型
を特定することができる。ここでwは、その型の幅を表
す任意のゼロでない自然数である。しかし、Valen
−C整数算術演算のセマンティックスは、やはり目標ア
ーキテクチャに依存し、整数型intwは実際には、少
なくともwビット長であるとして定義され、その幅は目
標マシンのワードサイズの倍数である。その結果、コン
パイルされたコードの挙動は、目標マシンが変ると異な
る。
【0008】De Costerら、「Code ge
neration for compiled bit
−time simulation of DSP a
pplications」、11th Internat
ional Symposium on System
Synthesis (ISSS ’98)1998
年12月2〜4日、Hsinch、Taiwan(IE
EE Computer Society Publi
cations)、9〜14頁は、デジタル信号処理
(DSP)アプリケーションの効率的なシミュレーショ
ンのために固定小数点整数算術演算を標準的な整数算術
演算に翻訳するための方法を開示する。しかし、得られ
た整数算術演算式における値補正演算を最小限にする努
力は行われておらず、目標マシンのリソースが効率的に
使用されていない。
【0009】欧州特許0 626 640および欧州特
許0 626 641は、高級処理言語を機械語に変換
するための技術を開示する。これらの技術は、プログラ
ムがコンピュータによって実行される場合に、ユーザが
介入して演算の値がオーバーフローする恐れがないかど
うかを計算する必要がある。オーバーフローしそうであ
れば、値補正演算を行う。その値補正演算は、マスキン
グ演算、もしくは演算が符号なしかまたは符号付きかの
いずれであるかに依存する符号拡張演算を含む。
【0010】
【課題を解決するための手段】本発明の第1の局面によ
ると、第1のビット幅の2進整数を含む少なくとも1つ
のソースのオペランドに対するソースの演算を、上記第
1のビット幅よりも大きい第2のビット幅の2進整数に
対して整数演算を実行するプロセッサによって計算する
ために対応するターゲットの演算に翻訳する方法であっ
て、上記ソースの演算を少なくとも1つのターゲットの
オペランドを有するターゲットの演算に翻訳するステッ
プと、上記ターゲットのオペランドの未使用ビットの値
が上記ターゲットの演算の値に影響を与えるかどうか、
および、上記ターゲットのオペランドのいずれかが、不
適切な値を持つ1つ以上の未使用ビットを有してもよい
かどうかを判定するステップと、上記判定ステップの結
果が真であった場合に、上記ターゲットの演算に対して
補正演算を加えて、これにより、上記ターゲットの演算
を実行する前に、不適切な値を持つ該1つ以上のビット
のそれぞれの値を補正するステップと、を包含する方法
が提供される。
【0011】上記少なくとも1つのソースのオペランド
は、少なくとも1つの定数を含んでもよい。
【0012】上記少なくとも1つのソースのオペランド
は、少なくとも1つの変数を含んでもよい。
【0013】上記少なくとも1つのソースのオペランド
は、少なくとも1つのサブ演算を含んでもよい。
【0014】上記ソースの演算は、算術演算を含んでも
よい。上記判定ステップは、符号なし非マスクターゲッ
トのオペランドを特定するステップを包含し、上記補正
ステップは、マスクステップを含んでもよい。上記第1
のビット幅はwビットであってもよく、上記マスクステ
ップは、上記符号なし非マスクターゲットのオペランド
と(2w−1)の2進数表現とに対してビット単位AN
D演算を実行するステップを含んでもよい。上記判定ス
テップは、符号付き非符号拡張ターゲットのオペランド
を特定するステップを含んでもよく、上記補正ステップ
は、符号拡張ステップを含んでもよい。
【0015】上記ソースの演算は関係演算を含んでもよ
く、上記補正ステップは単調演算を含んでもよい。
【0016】本発明の第2の局面によると、本発明の第
1の局面による方法を実行するコンピュータプログラム
が提供される。
【0017】本発明の第3の局面によると、本発明の第
2の局面によるコンピュータプログラムを記憶した記憶
媒体が提供される。
【0018】本発明の第4の局面によると、本発明の第
2の局面によるプログラムによってプログラムされたコ
ンピュータが提供される。
【0019】本発明の第5の局面によると、本発明の第
1の局面によるの方法によって生成された翻訳生成物が
提供される。
【0020】ターゲットのオペランドの用語「未使用ビ
ット」は、ターゲットのオペランドのうちのビットであ
って、対応するソースの演算の値を表すために使用され
ていないビットを意味する。
【0021】未使用ビットの用語「不適切な値」は、未
使用ビットの値であって、その未使用ビットがターゲッ
トのオペランドに存在する場合に、対応のソースの演算
の値と異なる値に計算されるターゲットの演算を生じる
ような値である。
【0022】このように、所定のビット幅の整数算術演
算式を計算する能力があるだけの所定のデバイスを使用
して、算術演算および任意のビット幅の整数を伴う関係
式の効率的な計算を行う方法を提供することができる。
【0023】いくつかの特定の幅(例えば、w1、w2
ど)の整数算術演算を計算することのできる、目標マシ
ンと呼ばれる所定のデバイスまたは機構に対して、上記
の方法は、任意の幅の整数を伴う算術演算式を特定の幅
の整数を伴う効率的な算術演算に翻訳する。任意の幅の
整数算術演算を伴う式の言語は、ソース言語と称す。同
様に、特定の幅(例えば、w1、w2など)の整数算術演
算を伴う式の言語は、目標言語と称す。この方法を使用
して:・幅wを有する整数原子式(定数または変数な
ど)は、少なくともwビット幅である最短幅の目標言語
整数の幅を有する原子式によって表される。例えば、幅
5の符号なし原子式は、目標言語が幅16、32、48
などの整数を含む場合に幅16の原子式によって表され
る。
【0024】20(U5)→20(U16) ・表記x(Uw)は、その式が幅wの符号なし整数型を有す
ることを表し、x→yは、ソース式xが目標式yに翻訳
されることを表す。
【0025】・目標言語における算術演算は、可能な限
りいつでも使用される。例えば: a(U5)+b(U5)→a(U16)+b(U16) ・ソース言語および目標言語における幅が異なるので、
ターゲットの演算の値は、ソース言語における値と異な
ることがある: 20(U5)+30(U5)=18(U5)、他方20(U16)+30
(U16)=50(U16) そこで、目標式における演算の値が必要な場合に確実に
ソース式における演算の値と同じにするために値補正演
算が必要になることがある: a(U5)+b(U5)→(a(U16)+b(U16))&31(U16) ここで&は、ビット単位AND演算子である。演算x
(U16)&31(U16)は、式x (U16)に含まれた16ビット
値を補正する。ここでx(U16)&31(U16)は、5ビット
符号なし値を表すと仮定する。
【0026】値補正演算は、翻訳されるどのサブ式に対
しても適用されるわけではなく、そのような演算が必要
な場合に適用される。例えば、式: ((a(U5)+b(U5))*c(U5))/(d(U5)+e(U5)) はそのまま、以下の式に翻訳されるのではなく: ((((a(U16)+b(U16))&31(U16))*c(U16)
&31(U16))/((d(U16)+e(U16))&31(U16)
&31(U16)) ここでは、8回の目標マシン演算が使用されるが、さら
に効率を上げるには以下の式に翻訳される: (((a(U16)+b(U16))*c(U16))&31(U16))/
((d(U16)+e(U16))&31(U16)) ここでは、6回の演算が使用される。
【0027】・これは、目標式(ソース式表現を目標マ
シン表現に翻訳するために使用されるマシン上のメモリ
ローケーション、またはレジスタ)の内部表現を使用し
て達成される。この目標式は、以下を含む: 1.目標マシン式の表現; 2.以下のさらなる情報を伴う:式の符号、元の式の幅
(有効幅と呼ぶ)、目標式の幅(表現幅と呼ぶ)、およ
びソース式の値を記憶するために使用されない目標式の
整数値におけるビットの可能な値についての情報(上位
ビット特性と呼ぶ)。ソース式の値を記憶するために使
用されない目標式の値におけるビットを未使用ビットと
呼ぶ。
【0028】この情報は、追加タイプ情報と呼ぶ。特に
重要なのが、上位ビット特性情報であり、これは、以下
の2つの特性が満足されるかどうかを示す: ・未使用ビットのすべてが0であることを示すマスク特
性。
【0029】・未使用ビットのすべてがソース式の値の
最上位ビットと同じであることを示す符号拡張特性。
【0030】これら2つの特性は以下の理由により重要
である、 ・式が符号なしの場合、ソース式の値は、目標式がマス
ク特性を有する場合かつその場合に限り、その目標式の
値と同じである。
【0031】・式が符号付きの場合、ソース式の値は、
目標式が符号拡張特性を有する場合かつその場合に限
り、その目標式の値と同じである。
【0032】さらなるメモリローケーションを使用して
追加タイプ情報を記憶することによって(目標マシン式
の表現を記憶するために必要なメモリローケーションと
は別)、上記のような翻訳方法は、以下の場合にのみ、
目標式中に適切な値補正演算を挿入することができる: 1.目標式の値が、ソース式の値と異なる(すなわち、
式が符号なしであり、かつマスク特性を有さない場合
か、または式が符号付きであり、かつ符号拡張特性を有
さない場合)、および 2.翻訳される演算が、そのオペランドの正しい目標式
値を必要とする。+および*のような所定の演算は、有
効ビットにおける値がソース式のビットにおける値と同
じである限り、ターゲットのオペランドに対する正しい
値を必要としない。その結果、それらのオペランドは、
目標式を構築する場合に値補正する必要がない。
【0033】\のような他の演算は、そのオペランドに
対する正しい値が必要であり、そこでその値は、その適
切な上位ビット特性(式が符号なしの場合にマスクさ
れ、そうでなければ符号拡張される)が設定されない場
合に値補正される必要がある。
【0034】所定の演算(\など、+および*ではな
い)の結果が正しく、そこで適切な上位ビット特性が目
標式の追加タイプ情報中に設定され得るので、得られた
式について値補正がその後必要とならない。
【0035】値補正演算は、そのまますべての演算に挿
入されるわけではないので、得られた目標式はさらに効
率的である。
【0036】上記のような方法は、任意のビット幅の整
数を伴う算術演算がプロセッサまたは所定のビット幅の
みの算術演算を効率的に計算できる任意のデバイス上で
計算される必要がある場合に使用され得る。このような
方法の産業上のアプリケーションは、以下を含む: ・ある特定の目標マシン上の算術演算回路の高級記述
(Bachまたは他を使用する)の効率的シミュレーシ
ョン。ハードウェアがBach高級言語で記述され、そ
して低級合成可能産業強度ハードウェア記述が自動的に
生成される。ハードウェア設計者は、低級言語(VHD
Lなど)の代わりに高級言語を使用するので、従来のハ
ードウェア設計プロセスよりも設計プロセスは格段に速
くなり、故に安価となる。本発明は、Bach設計フロ
ーのシミュレーション段階において使用され得る。その
段階では、実際のハードウェアが合成される前にBac
hハードウェア記述が確認される。これにより、シミュ
レーション段階を、元のままの方法を使用する場合より
も格段に速くでき、したがってハードウェア設計にかか
る時間を低減できる。
【0037】・固有の整数算術演算がシミュレーション
で使用されるものと異なるマシンを対象とする算術演算
の効率的なシミュレーションまたはコンパイル。例え
ば、特定のプロセッサ(遅いか、または実施段階の間に
容易に得られないようなもの)を対象とするプログラム
を、目標マシンアーキテクチャと異なるアーキテクチャ
を有するより速く、容易に得られるプロセッサ上でシミ
ュレーションできる。
【0038】・ハードウェアおよびソフトウェアの両方
の効率的なシミュレーションが必要となる埋め込みシス
テムの設計の効率的なシミュレーション。
【0039】容易に得られる利点は、以下を含む: ・上記の方法によって生成された目標式は、目標マシン
の固有の整数算術演算が直接使用され、かつ値補正演算
の回数が低減するので効率的である。
【0040】・翻訳方法それ自体は、時間/空間が高価
でなく、したがってソース式の目標式への高速なコンパ
イルが必要であるアプリケーションにおいても使用でき
る。
【0041】本発明によればソースの演算をターゲット
の演算に翻訳する方法を提供する。ソースの演算は、そ
れぞれ第1のビット幅の2進整数を含む1つ以上のソー
スのオペランドに対して実行される。ターゲットの演算
は、第1のビット幅よりも大きな第2のビット幅の2進
整数に対して整数演算を実行するコンピュータ等のプロ
セッサによって計算される必要がある演算である。ソー
スの演算1は、少なくとも1つのターゲットのオペラン
ドを有するターゲットの演算に翻訳される。ステップ3
では、ターゲットのオペランドの未使用ビットの値がタ
ーゲットの演算の値に影響を与えるかどうかを判定し、
ステップ5では、いずれかのターゲットのオペランド
が、不適切な値を持つ1つ以上の未使用ビットを有して
もよいかどうかを判定する。ステップ3およびステップ
5の判定結果が、いずれも真であった場合、ステップ6
において、ターゲットの演算に対して補正演算を加え
て、これにより、ターゲットの演算を実行する前に、不
適切な値を持つ各ビットの値を補正する。
【0042】
【発明の実施の形態】本発明を、添付の図面を参照し、
実施例を用いてさらに説明する。
【0043】図面全体を通して同様の部分は同様の参照
符号で示す。
【0044】図1は、ソースの演算をターゲットの演算
に翻訳する方法を例示する。ソースの演算は、第1のビ
ット幅の2進整数について実行され、算術演算または関
係演算を含むことがある。ターゲットの演算は、第1の
ビット幅よりも大きい第2のビット幅を有する整数につ
いて算術演算および/または論理演算を実行するコンピ
ュータなどのデバイスによって実行される。
【0045】ステップ1は、ソースの演算を入力し、ス
テップ2は、ソースの演算を対応のターゲットの演算に
翻訳する。ステップ3は、ターゲットの演算のいずれか
の未使用ビットがターゲットの演算に影響を与え得るか
どうかを検出する。ここで、ターゲットの演算が「影
響」を受けるのは、未使用ビットが存在することによっ
て、ターゲットの演算の計算が対応のソースの演算の計
算と異なる結果となる場合である。どの未使用ビットも
ターゲットの演算に影響を与えなければ、ターゲットの
演算は、ステップ4において目標マシンによる後続の処
理のために出力される。
【0046】未使用ビットがターゲットの演算に影響を
与え得る場合、ステップ5は、いずれかのターゲットの
オペランドが不適切な未使用ビットを有するかどうかを
検出する。例えば、ターゲットのオペランドのオペラン
ドはまた、ターゲットの演算の計算が影響を受けないよ
うな値にあらかじめ設定される未使用ビットを有するこ
とがある。この場合、制御は、ターゲットの演算を出力
するステップ4に遷移する。しかし、ターゲットのオペ
ランドが不適切な未使用ビットを有する場合、ステップ
6は、ステップ4でターゲットの演算を出力する前に補
正演算をターゲットの演算に加える。したがって、ター
ゲットの演算が目標マシンについて実行されるならば、
得られる計算はソースの演算の計算と同じであることを
確実にできる。
【0047】図2は、図1に例示される翻訳方法を実行
するために使用され得るコンピュータを例示する。コン
ピュータは、算術かつ論理ユニット11を含むマイクロ
プロセッサ10を含む。マイクロプロセッサは、翻訳の
ためのソースの演算を受信するための入力インターフェ
ース12および得られた翻訳生成物をターゲットの演算
の形態で供給するための出力インターフェース13を含
んで提供される。コンピュータは、図1に例示する方法
を実行するようにマイクロプロセッサ10を制御するた
めのプログラムを含む読み取り専用メモリ14を有す
る。コンピュータはまた、マイクロプロセッサ10の演
算の間に発生する値を一時的に記憶するためのランダム
アクセスメモリ15を有する。
【0048】図1に例示する方法は、本発明の非常に基
本的な実施態様である。さらに高度な方法を以下により
詳細に説明する。以下の方法は、図1を参照して説明さ
れる「演算」に同等な「式」の翻訳を実行する。
【0049】算術演算式は値を計算し、値のセットは、
以下を含むと考える: ・任意のビット幅の符号なし2進整数; ・任意のビット幅の符号付き2進整数。
【0050】符号なし整数に対して標準的な符号なし2
進解釈を仮定する。例えば、符号なし2進数1101
は、整数13と解釈される;および符号付き整数に対し
て2の補数解釈を仮定する。例えば、符号付き2進数1
101は、整数−3と解釈される。
【0051】値式の異なる型を区別するために、すべて
の式が形態に関して型を区別される: ・符号なし整数値に対してunsignedω、または
単にUω;または ・符号付き整数値に対してsignedω、または単に
Sω;ここで幅ωは、値におけるビット数を表すゼロで
ない正の整数である。通常、e (t)と書いてeが型tを
有することを示す。式の型は通常、前後から推定され得
る場合、または本論と関係しない場合には省略される。
【0052】式は、定数および変数などの原子である
か、または多くの式e1、e2、...、en(オペラン
ドと呼ぶ)に演算子(例えば、op)をかけたものから
なる複合物: op(e1、e2、...、en)。
【0053】定数は、固定値(故にその名がある)に計
算され、他方変数の値は、割り当て(変数からその型の
値へのマッピング)によって与えられる。複合式の値
は、演算子およびそのオペランドの計算に依存する。式
の計算は、副作用を有し得る:すなわち、変数の割り当
てを変更し得る。例えば、以下の初期割り当てが与えら
れ: x(S16)→10(S16)(S16)→20(S16) そして演算子=、+、*についてはC言語のセマンティ
ックスを仮定すると、 (x(S16)=x(S16)+1,y(S16)=x(S16)
(S16)) の計算は,値220(S16)を返し、割り当てを以下のよ
うに変更する: x(S16)→11(S16)(S16)=220(S16) その目的は、任意のビット幅の算術演算サブ式を伴う式
を、所定のビット幅:ω1、ω2、...だけを伴う算術
演算式を効率的に計算できる目標マシンを使用して計算
できることである。既存の方法(例えば、Giles
BrassardおよびPaul Bratley、A
lgorithmics:Theoryand Pra
ctice、Prentice−hall、USA、1
998年を参照)を使用すれば、特定の幅の1つの倍数
の幅を有する整数について、目標マシン上で効率的に算
術演算を計算できる。これらの方法を使用して、所与の
目標マシンが無限数の幅:ω1、ω2、...2ω1、2
ω2、...3ω1、3ω2、...などを伴う整数算術
演算を効率的に計算できると仮定し得る。これらのビッ
ト幅を目標マシンの固有ビット幅と称する。目標マシン
によって直接計算され得る式のセットを以下のステート
メントによってより形式的に定義される目標言語と称
す:式eは、eのすべてのサブ式の幅が固有ビット幅で
ある場合かつその場合に限り目標言語に含まれる。ま
た、ソース言語を任意の幅を有する式のセットとして定
義する。
【0054】図3は、所与の目標マシン21を用いてソ
ース言語の式20を計算できる方法の概観を与える。こ
の方法の核心は、型補正ソース式23を受け取り、目標
式の内部表現24を返す翻訳機構22である。式は、例
えば、算術2進演算のオペランドの型がその演算によっ
て返される値の型と同じであるといったような多くの言
語依存型ルールに従う場合に、型が正しい。したがっ
て、ソース式は、型適正式にまず型変換されると仮定す
る。型変換機構は、ソース言語のセマンティックスに依
存し、ここでは議論しない(C言語の式の型変換機構に
ついては(Brian W. Kernighanおよ
びDennis M. Ritchie,The C
Programming Language, Pre
ntice−Hall, USA, second e
dition, 1988年)の付録A6を参照)。型
適正ソース式が与えられると、翻訳機構22は、目標マ
シン読み取り可能式25が抽出および計算され得る目標
式の内部表現24を返す。目標式の内部表現からマシン
読み取り可能式を抽出するための機構は、使用される目
標マシンに依存し、ここでは議論しない。
【0055】図4は、ソース整数値が目標整数値によっ
てどのように表されるかを例示する。基本的には、nビ
ット整数が同じ符号のmビット目標整数によって表さ
れ、ここでmはn以上の最小固有ビット幅である。ソー
ス整数ビット26は、目標整数の最下位nビット27中
に記憶される。目標整数値中の最上位(m−n)ビット
28は、未使用ビットと呼ばれる。目標整数値の最下位
nビット27は、有効ビット列と呼ばれる。目標値の解
釈がソース値の解釈と同じであるためには: ・ソース整数値が符号なしである場合、目標整数値がマ
スクされる:目標整数値中の未使用ビットが0に設定さ
れる。
【0056】・ソース整数値が符号付きである場合、目
標整数値が符号拡張される:目標整数値の未使用ビット
が、有効ビット列中の最上位ビットに設定される。
【0057】目標言語式の内部表現は、図5に例示さ
れ、以下を含む: ・目標マシンに依存する目標式の内部表現29;および ・効率的な目標式を生成するために翻訳プロセスによっ
て使用される型情報30。
【0058】表記<i>tを使用して、型情報iを有す
る目標式tの内部表現を示す。目標式の内部表現は、式
の目標マシン読み取り可能表現を返す抽出演算を有する
べきである。
【0059】型情報30は、以下の機能を有するデータ
構造である: sign:符号付きかまたは符号なしかであり得る式の
符号である。
【0060】有効幅:目標式の有効幅は、それが表す元
の式の幅である。
【0061】表現幅:目標式の表現幅は、目標マシン上
でのその実際のビット幅である。整数式の表現幅は、そ
の有効幅以上である。式の型は、その表現幅がその有効
幅と同じである場合に、正確であるとされる。有効幅よ
りも上位の不正確な整数表現におけるビットを未使用ビ
ットと呼ぶ。
【0062】上位ビット値:不正確な式の上位ビット値
または上位ビット特性は、その未使用ビットについての
情報を与える。式の上位特性は: マスク:目標式は、どの割り当てに対しても、未使用ビ
ットがすべて0に設定される値に必ず計算される場合
に、マスク特性が与えられる。
【0063】符号拡張:目標式は、どの割り当てに対し
ても、未使用ビットが有効ビット列における最上位ビッ
トと同じ値を有する値に必ず計算される場合に、符号拡
張特性を与えられる。
【0064】これらの特性は、以下の例に示すように互
いに排他的でない。以下の例は、表現幅16および有効
幅9を有する整数値をいくつかリストする。
【0065】
【表1】 目標式は、どの割り当てに対しても、その有効ビット列
の解釈と同じ解釈を有する値に計算される場合、忠実で
あるとされる(同一の符号を仮定)。したがって、式が
忠実となるのは以下の場合である: ・符号なしであり、かつマスク特性を有する、または ・符号付きであり、かつ符号拡張特性を有する。
【0066】目標式の各サブ式に型情報を用いてさらに
注釈をつけるのが都合のよい場合がある、なぜなら: ・式の符号および表現幅が、目標式のマシン読み取り可
能表現を抽出する演算によって必要とされ得る; ・有効幅および上位ビット特性を利用する目標式の内部
表現について最適化を図り得る。
【0067】式の上位ビット値を一般化して、その式の
マスキングおよび符号拡張の範囲を以下の2つの値によ
って与える:マスキング範囲:目標式eは、どの割り当
てについてもn以上の位置のビットが0である値に必ず
計算される場合に、nのマスキング範囲を有する。ここ
で、nは、eの表現幅よりも小さい。
【0068】00000001010100011は、
10のマスキング範囲を有する。
【0069】11111000000101010は、
17のマスキング範囲を有する。
【0070】符号拡張範囲:目標式eは、どの割り当て
についてもn以上の位置のビットがビットn−1に等し
い値に必ず計算される場合に、nの符号拡張範囲を有す
る。ここで、nは、eの表現幅よりも小さく、かつ0よ
り大きい。
【0071】00000001010100011は、
11の符号拡張範囲を有する。
【0072】11111000000101010は、
13の符号拡張範囲を有する。
【0073】なお、従来通り、ビット列の最下位ビット
は位置0にある。
【0074】整数式の表現は、その式によって計算され
た値が必要に応じてマスクまたは符号拡張されることを
保証する値補正演算を適用することによって、忠実にさ
れ得る。目標式表現についての以下の2つの演算が定義
されると仮定する:マスキング演算は、式tを受け取
り、式t’を返す。ここで、どの割り当てについてもt
およびt’の有効ビット列が同じであり、かつt’がマ
スク特性を有する。
【0075】符号拡張演算は、式tを受け取り、式t’
を返す。ここで、どの割り当てについてもtおよびt’
の有効ビット列が同じであり、かつt’が符号拡張特性
を有する。
【0076】式tが与えられたとき、マスキング演算お
よび符号拡張演算に適用された式tを表すためにそれぞ
れ表記m(t)およびs(t)を使用する。また、式t
が与えられたとき、tが符号なしの場合にm(t)を返
し、tが符号付きの場合にs(t)を返す「忠実化」演
算を定義する。
【0077】m(t)およびs(t)によって表される
目標式の計算は、tによって表される目標式の計算より
も時間/空間的により高価であることもあり、そこでソ
ース整数式の目標整数式への翻訳は、これらの演算を翻
訳されるサブ式のいずれにもそのまま適用するのではな
く、これらの演算の適用を最小限にする試みをすべきで
ある。
【0078】所定の場合には、値補正演算は、ある特定
の式を計算する時間/空間のコストが値補正演算の計算
と同じであるように実行される。これは確かに、すでに
値補正された式の場合である。なぜなら、演算は単に元
の式を返すだけだからである。これは定数式の場合でも
ある。なぜなら、定数式は、定数値を直接的に補正し、
別の定数式(同じコストのもの)を返すことによって値
補正されるからである。式tは、m(t)の計算がtの
計算と同じコストを有する場合、容易にマスクされる。
同様に、式tは、s(t)の計算がtの計算と同じコス
トを有する場合、容易に符号拡張される。
【0079】ブール値(これは、2つの真理値:真およ
び偽についての表現である)を返す副作用のない関係演
算子(<および<=など)をともなう整数式を翻訳する
場合、オペランドに対して値補正演算を必ずしも行う必
要はない。代わりに、以下の特性を満たすオペランドに
通常安価な単調演算を行うことで十分である: ・opS(s1,...,sn)は、opT(mn
(t1),...,mn(tn))が真を表すブール値を
計算する場合かつその場合に限り真を表すブール値を計
算する。
【0080】・opS(s1,...,sn)は、op
T(mn(t1),...,mn(tn))が偽を表すブ
ール値を計算する場合かつその場合に限り偽を表すブー
ル値を計算する。ここで、mn(t)は、目標式tに適
用された単調演算を表し、opSはソース言語における
n進関係演算、opTは目標言語における対応のn進関
係演算、s1,...,snはソース式、t1,...,
nはそれらに対応の(必ずしも値補正されない)目標
式である。
【0081】異なる関係演算子は、異なる単調演算を必
要とすることがある。また、同じ関係演算子に適用可能
な単調演算がいくつかあり得る。
【0082】ここで、型補正ソース式の目標式の内部表
現への変換を説明する。まず、ソース式を目標式に翻訳
するための一般的機構を説明し、その後いくつかのC言
語風の演算子を伴う算術演算式の1セットに対するこの
処理を具体的に例示する。
【0083】ソース式の目標式への変換は、ソース言語
における異なる演算子に依存する。その方法は、ソース
言語における演算子の以下の特性を使用する:特性1
は、演算の結果の未使用ビットの値を取り扱う。+、
−、および*などの所定の演算において、オペランドの
未使用ビットは、その結果の有効ビットに影響を与え
ず、そのようなオペランドのオペランドは、ソース式が
目標式に翻訳される場合には、値補正演算に適用されな
い。オペランドの未使用ビットは、その結果の有効ビッ
トに影響を与え得、そしてこの特定のオペランドは、値
補正される必要があるか、または関係演算の場合、すべ
てのオペランドは、有効な単調演算に適用される必要が
ある。
【0084】特性2は、オペランドの未使用ビットおよ
び有効ビットが演算の結果の未使用ビットにどのように
影響を与えるかを取り扱う。\および%などの所定の演
算において、その結果の値は忠実であることが保証さ
れ、そこで適切な上位ビット特性が、目標式の型情報内
に設定され得る。
【0085】基本的に、ここで説明される方法は、 ・式の上位ビット値を含む算術演算または論理式を表す
拡張データ構造を使用する。
【0086】・必要な場合のみに値補正機能を演算のオ
ペランドに適用する上記2つの特性を考慮する。
【0087】これらの点は、本発明の方法が、値補正機
能を演算の結果に常に適用する公知の方法と異なること
を例示する。
【0088】例えば、データ構造を拡張すれば、式のマ
スキングおよび符号拡張範囲を含むことができ、そして
これらの特性から、本発明の方法は、翻訳の間に必要と
される値補正機能の数を著しく低減させる。以下におい
ては単に、式のデータ構造内にマスクおよび符号拡張特
性を記憶させ、そしてこれら2つの特性が、本発明の方
法をどのように効率的に使用して効率的な目標式を生成
するのかを説明する。マスクおよび符号拡張特性の代わ
りにマスキングおよび符号拡張範囲を考慮する場合、本
発明の方法は、若干より効率的な式を生成する。例え
ば、以下の式のサブ式: (a(U5)&3(U5))+1(U5) は、以下のマスキング範囲を有する: a(U5)&3(U5) 2 1(U5) 1 そして、結果のマスキング範囲が1足すオペランドの最
大マスキング範囲である+演算子の特性を使用して、主
式のマスキング範囲が1+2=3であることを推論す
る。したがって、主式は、マスクされ、そして忠実であ
ることが分かる。その結果、値補正される必要は決して
ない。マスキング範囲を追跡するかわりに、マスク特性
を単に追跡する場合は、上記2つのサブ式がマスク特性
を有することから、主式がまたマスクされるとは推論で
きない。これが意味するところは、式は、更なるマスキ
ング演算を付加することによって値補正される必要があ
り得ることである。
【0089】幅ωのソース式表現eが与えられると、目
標式表現は以下のように構築される: ステップ1 ソース式eにおける変数を有する上位ビッ
ト特性に関する表が構築される。この表は、上位ビット
特性マッピングと呼ばれ、以下の形態を有する:
【0090】
【表2】 ここで、U0....Unはすべてソース式eにおける変
数であり、そしてP0....Pnはそれらに対応する上
位ビット特性であり、その上位ビット特性は、以下のう
ちの1つである:マスク、符号拡張、またはなし(すな
わち3つの取り得る値である)。マスクおよび符号拡張
特性の両方が設定されるような上位ビット特性の組み合
わせは、この表において許されない。いくつかのデータ
構造を上位ビット特性マッピングの内部表現のために使
用でき、そして変数U0....Unを並べ替えることが
できる場合、適切な構造は、連想リストおよびソート2
進ツリーを含む。
【0091】上位ビット特性マッピングは翻訳機構の正
確さに影響せず、例えば、すべての変数に上位ビット特
性を全く与えないような自明マッピングを使用すること
ができる。しかし、変数がソース式においてどのように
(およびどのくらいの頻度で)使用されるかに依存する
上位ビット特性マッピングを構築する発見的方法を開発
できる。そのため、この翻訳機構によって構築される目
標式は、より効率的となり得る可能性がある。
【0092】ステップ2 以下のデータを有する型情報
が構築される: ・ソース式と同じ符号; ・有効幅ω; ・表現幅rは、ω以上の最小固有幅となるよう選択され
る; ・上位ビット特性が全く設定されない(現時点で)。
【0093】この型情報は、ieによって示される。型
情報ieは、eの型から構築される。
【0094】例えば、符号付き5ビット式が与えられ、
そして目標マシンの固有ビット幅が16、32、48な
どであると仮定すると、以下のデータを有する型情報が
構築される:
【0095】
【表3】 再度、いくつかの基本データ構造を上記型情報の内部表
現のために使用できる。適切なデータ構造は、符号に対
してブールフィールド、有効および表現幅に対して2つ
の整数フィールド、および上位ビット特性に対して2つ
のブールフィールド(1つはマスク特性のため、他方は
符号拡張特性のため)を有する記録構造である。
【0096】ステップ3 目標式の内部表現は、再帰的
に構築され、そして型情報における適切な上位ビット特
性フィールドが設定される。この再帰方法の基本ケース
は、ソース式eが原子式の場合である;再帰ケースは、
ソース式eが複合式の場合である。
【0097】基本ケース:eが原子式ならば、対応の目
標原子式が構築される。
【0098】1.eがソース定数式esならば、目標定
数式<it>etが構築される。ここで、定数etの値
は、その解釈がesの解釈と同じとなるようなものであ
り、型情報itは、etにおける未使用ビットの値にした
がって設定された上位ビット特性を有する型情報i
e(上記ステップ2で構築された)である。
【0099】2.eがソース変数式であるならば、目標
変数式が構築される。どのソース変数識別子に対して
も、一意の目標変数識別子が使用される。より形式的に
は、ソース変数識別子から目標変数識別子へのマッピン
グは、完全単射である。ステップ2において構築された
型情報ieの上位ビット特性フィールドは、ステップ1
において構築された上位ビット特性マッピングにおける
エントリにしたがって設定される。ソース変数に対する
上位ビット特性マッピングエントリがマスク特性である
ならば、マスクフィールドが設定される。同様に、エン
トリが符号拡張特性ならば、符号拡張フィールドが設定
される。エントリが、ソース変数に上位ビット特性が全
く割り当てられないことを示すならば、型情報ieの上
位ビット特性は全く設定されない。
【0100】再帰:図6に示されるようなソース複合式
op(e1,e2,...,en)31は、以下のように
目標式に変換される: 1.ソースのオペランドe1,e2,...,enは、再
帰的にこの方法を使用して、まず目標式t1
2,...,tnに翻訳される32。
【0101】2.次に目標式24は、以下のような目標
マシンの演算33を使用して構築される: ・算術演算において使用される目標サブ式は、オペラン
ドの未使用ビットにおける値がその演算の結果の有効ビ
ットの値に影響し得る場合に、マスキング演算または符
号拡張演算に適用される。
【0102】・単に2つ以上の式(<など)の値を比較
する関係演算の場合、有効ビット列の値のみを使用し、
目標整数値におけるすべてのビットを使用する値を返す
単調演算を適用することで通常十分である。これの効率
的な例は、式eが与えられたときにe<<(r−w)を
返す演算である。ここで<<は、左シフト演算子であ
り、rおよびwは、eの表現および有効幅である。
【0103】・異なる演算(マスキング、符号拡張、単
調演算)をターゲットのオペランドの内部表現について
使用できる場合、最も安価な目標式を生じる演算が選択
される。
【0104】・目標式の型情報itは、演算の値が常に
マスクされることが保証され得る場合にマスク上位ビッ
ト特性を設定することによって型情報ie(上記ステッ
プ2)から構築される;そして同様に、符号拡張上位ビ
ット特性は、演算の値が常に符号拡張されることが保証
され得る場合に設定される。このステップは、上記のよ
うに注目の算術演算子の第2の特性に依存する。
【0105】再度、内部的に目標式を表すために使用さ
れ得るいくつかのデータ構造がある。適切な1つは、リ
ーフノードが原子式を表し、非リーフノードが演算子を
表すツリー構造である。
【0106】最後に、図3および5に示されるように、
型情報を表すデータは、目標式の最終内部表現から取り
出される。
【0107】以下の例において、ソースおよび目標言語
が定数、変数、および以下の演算子を伴う複合式を含む
と仮定する: ・単項演算子:!、〜、および−。これらの意味は、そ
れぞれC言語の単項演算子と同じである。なお、これら
の演算子のオペランドの型は、演算の値の型と同じであ
るという型規則を伴う。
【0108】・2項インフィックス演算子:+、−、
*、/、%、&、|、∧、&&、||、==、!=、<
=、>=、<、>、<<、>>、>>、,および=,こ
れらのセマンティックスは、簡単のためにシフト(<<
および>>)がそれらの第1オペランドのビット幅より
大きい値によって定義されない点を除いてそれぞれのC
言語の2項演算子と同じである。また、以下の型ルール
を仮定する。
【0109】1.==、!=、<=、>=、<、>、<
<、>>および,を除くすべての演算子のオペランド
は、それらが返す値と同じ型を有する; 2.関係演算子==、!=、<=、>=、<、および>
のオペランドは、同じタイプを有する; 3.<<および>>の第1オペランドは、それらが返す
値と同じ型を有する;<<および>>の第2オペランド
は、符号なしである; 4.第2オペランドは、それが返す値と同じ型を有す
る。
【0110】・以下のフォームの条件文: e1?e2:e3 このセマンティックスは、C言語の条件式と同じであ
る。オペランドe2およびe3は、条件式によって返され
る値と同じ型を有する。
【0111】・以下のフォームの型キャスト: (type)e1 ここでtypeは、新しい符号(signまたはuns
igned)および幅(w)をオペランドe1に与える
signed wまたはunsigned wのフォー
ムを有する。この演算の値は、オペランドe1が符号付
きかつwより幅が狭い場合、自動的に符号拡張される。
【0112】上記の演算子が与えられると、以下のよう
に簡単なマスキングおよび符号拡張演算が実施され得
る: マスキング 式<it>tが与えられる場合、型情報it
がマスク特性を有するならば、この演算は、単に<it
>tを返す。そうでない場合、式の有効幅がwであり、
かつその表現幅がrならば、最下位wビットが1であ
り、かつ最上位r−wビットが0であるrビット整数を
用いて式の値をマスクする必要がある。この整数をmと
呼ぶ。mに関連する型情報imは、it、有効幅rおよび
表現幅rと同じ符号を有する。したがって、必要な式
は: <i’t>(<it>t&<im>m) ここでi’tは、マスク特性をitに設定し、その符号拡
張特性を非設定にして得られた型情報である。式eが与
えられる場合、マスキング演算の適用をm(e)によっ
て示す。
【0113】符号拡張 式<it>tが与えられる場
合、型情報itが符号拡張特性を有するならば、この演
算は、単に<it>tを返す。そうでない場合、式の有
効幅がwであり、かつその表現幅がrならば、tの値を
r−w位置だけ左シフトし、次にr−w位置だけ算術演
算右シフトするによって符号拡張できる(なお、算術右
シフトは、そのオペランドの最上位ビットを保存す
る)。定数r−wをuで示す。uに関連した型情報iu
は、符号なしであり、有効幅rおよび表現幅rを有す
る。itが符号付きならば、必要な式は: <i’’t>((<i’t>(<it>t<< <iu
u))>> <iu>u) ここでi’tは、有効フィールドをrに設定して正確に
された型情報itである。i’’tは、符号拡張上位ビッ
ト特性を設定し、マスク特性を非設定にすることによっ
てitから構築された型情報である。
【0114】itが符号なしならば、サブ式: (<i’t>(<it>t<< <iu>u))は、右シ
フトされる前に符号付きrによって(論理シフトではな
く、算術演算右シフトを達成するために)型キャストさ
れる。最後の式は、その符号を維持するために符号なし
rによって型キャストされる。
【0115】式eが与えられた場合、符号拡張演算の適
用をm(e)で表す。
【0116】式eが符号なしの場合、m(e)としてf
(e)を定義し、他方eが符号付きの場合、s(e)と
定義する。また、==、!=、<、<=、>および>=
を伴う関係演算の翻訳の間に必要な以下の単調演算を定
義する。
【0117】単調演算 有効幅wおよび表現幅rを有す
る式<it>tが与えられた場合、この演算は、以下を
返す: <i’t>(<it>t<< <iu>u) ここで、uはr−w、型情報i’tはit、有効幅r、お
よび表現幅rと同じ符号を有する。型情報iuは、符号
なしであり、有効幅rおよび表現幅rを有する。式eが
与えられた場合、この単調演算の適用をmn(e)で表
す。
【0118】マスキング、符号拡張、および上記単調演
算のより効率的な実施が可能であるが、上記の実施でも
本発明明細書中に記載される翻訳機構の正確さに対して
は十分である。
【0119】より効率的な実施には、式の効率を向上す
るために最適化変換を応用した技術を使用する。以下
は、演算に応用することのできる変換である:フォーム
tおよびmのマスク演算eは、以下のように最適化され
得る: ・tが定数kならば、eの値は、例えばlに計算され、
そしてeはlによって置換される。
【0120】・tがフォームx&kまたはk&x(ここ
でkは定数)ならば、kおよびmの値は、例えばlに計
算され、そしてeはt&lによって置換される。
【0121】・tがx&y(ここでx&mまたはy&m
のいずれか(または両方)が、例えばx’およびy’に
最適化され得る)ならば、eはx’&y’によって置換
される。同様の規則がフォームx|y、x∧y、z?
x:yの演算に対して適用される。
【0122】フォーム(t<<u)>>uの符号拡張演
算eは、以下のように最適化され得る: ・tが定数kならば、eの値は、例えばlに計算され、
そしてeはlによって置換される。
【0123】・tがフォームx<<k(ここでkは定
数)ならば、k+uの値は、例えばlに計算され、そし
てeは(t<<l)>>uによって置換される。
【0124】・tがx&y(ここで(x<<u)>>u
または(y<<u)>>uのいずれか(または両方)
が、例えばx’およびy’に最適化され得る)ならば、
eはx’&y’によって置換される。同様の規則がフォ
ームx|y、x∧y、z?x:yの演算に対して適用さ
れる。
【0125】フォームt<<uの単調演算eは、以下の
ように最適化され得る: ・tが定数kならば、eの値は、例えばlに計算され、
そしてeはlによって置換される。
【0126】・tがフォームx<<k(ここでkは定
数)ならば、k+uの値は、例えばlに計算され、そし
てeはt<<lによって置換される。
【0127】・tがx&y(ここでx<<uまたはy<
<uにいずれか(または両方)が、例えばx’および
y’に最適化され得る)ならば、eはx’&y’によっ
て置換される。同様の規則がフォームx|y、x∧y、
z?x:yの演算に対して適用される。
【0128】多くの式から最も効率的な式を選択するこ
とが必要となることがあり得る。多くの式
1,...,enが与えら得れた場合、e1,...,
nのうちで最も効率的に計算される可能性のある式を
表すために用語「e1,...,enのうちの最も安価な
もの」を使用する。また、eの計算およびそれに続く
e’の計算が最も効率的である可能性があるように式の
ペアについての用語:「(e1,e’1),...,(e
n,e’n)のうちの最も安価なものが(e1
e’1),...,(en,e’n)における(e,
e’)の式のペアである」を定義する。目標式の効率の
良好な尺度は、その内部表現における演算子の数であ
る:最も安価な式は、演算子の数が最も少ない式であ
る。
【0129】ある型情報i1が忠実にされた型情報i2
あるのは、i2が符号なしの場合にマスク上位ビット特
性を設定することによって、およびi2が符号付きの場
合に符号拡張上位ビット特性を設定することによって、
1をi2から構成する場合であるとする。
【0130】ここでソース式を目標式に翻訳するための
方法を説明する: ・上記のようにソース言語における定数および変数が目
標定数および変数に変換される。
【0131】・以下のフォームの単項演算子eが与えら
れる: op(e1) まず、eの型から型情報itを構築し(itは上位ビット
特性を全く有さない)、次にオペランドe1を再帰的に
1に変換する。式t1は、上記の内部表現によって表さ
れるので、その型化情報を用いて注釈をつけられる。必
要な目標式: <i’t>op(t’1) が次に構築される。ここで、演算子opが: !:式t’1は、t1の未使用ビットの値が!演算の結果
における有効ビット列に影響を与え得るので、マスクま
たは符号拡張される必要がある。したがって、式m(t
1)およびs(t1)が構築され、そしてt’1がその2
つのうちの安価な方となるよう選択される。型情報i’
tは、忠実にされた型情報itである。
【0132】〜:必要なオペランドt’1は、t1におけ
る未使用ビットが〜演算の結果における有効ビット列に
影響を与えないので、単にtlである。型情報i’tは、
1が符号拡張される場合かつその場合に限り符号拡張
特性を設定することによって、itから構築される。
【0133】−:必要なオペランドt’1はt1であり、
かつ型情報i’tはitである。なぜなら、算術否定演算
−の値は、常にマスクおよび/または符号拡張されるこ
とが保証されないからである。
【0134】・以下のフォームの2進演算eが与えられ
る場合: e1 op e2 まず、eの型から型情報itを構築し、オペランドe1
よびe2をそれぞれt1およびt2に変換する。必要な目
標式は: <i’t>(t’1 op t’2) ここで、演算子opが: +、−、*:オペランドt’1およびt’2は、それぞれ
1およびt2である。型情報i’tは、itである。
【0135】/、%:オペランドt’1およびt’2は、
それぞれf(t1)およびf(t2)である。型情報i’
tは、忠実にされたitである。
【0136】&&、||:オペランドt’1は、m
(t1)およびs(t2)のうちのより安価な方である。
オペランドt’2は、m(t2)およびs(t2)のうち
のより安価な方である。型情報i’tは、忠実にされた
tである。
【0137】&:オペランドt’1およびt’2は、それ
ぞれt1およびt2である。型情報i’tは、tlまたはt
2のいずれかがマスクされた場合にマスク特性を設定
し、次にtlおよびt2の両方が符号拡張された場合に符
号拡張特性を設定することによって、itから構築され
る。
【0138】|、∧:オペランドt’1およびt’2は、
それぞれt1およびt2である。型情報i’tは、tlおよ
びt2の両方がマスクされた場合にマスク特性を設定
し、次にtlおよびt2の両方が符号拡張された場合に符
号拡張特性を設定することによって、itから構築され
る。
【0139】==、!=:オペランド(t’1,t’2
のペアは、(m(t1),m(t2))、(s(t1),
s(t2))、および(mn(t1),mn(t2))の
うちの最も安価なものである。型情報i’tは、忠実に
されたitである。
【0140】<=、>=、<、>:オペランド
(t’1,t’2)のペアは、(f(t1),f
(t2))、および(mn(t1),mn(t2))のう
ちの安価な方である。型情報itは、忠実にされたit
ある。 <<:第1オペランドt’1は、式t1であり、第2オペ
ランドt’2は、f(t2)である。型情報i’tは、it
である。
【0141】>>:オペランドt’1およびt’2は、そ
れぞれf(t1)およびf(t2)である。型情報i’t
は、忠実にされたitである。 =:第1オペランドt’1は、単に式t1である。第2オ
ペランドt’2は、t’1がマスクされた場合にm
(t2)となり、t’1が符号拡張された場合にs
(t2)となり、その他の場合はt2となる。型情報i’
tは、t’2がマスクされた場合にマスク特性を設定し、
次にt’2が符号拡張された場合に符号拡張特性を設定
することによって、itから構築される。 ,:オペランドt’1およびt’2は、t1およびt2であ
る。型情報i’tは、t2がマスクされた場合にマスク特
性を設定し、次にt2が符号拡張された場合に符号拡張
特性を設定することによって、itから構築される。
【0142】・以下のフォームの条件付き式eが与えら
れた場合: e1?e2:e3 まず、型情報itをeの型から構築し、次にオペランド
1、e2、およびe3をそれぞれt1、t2,およびt3
変換する。必要な目標式は: <i’t>(t’1?t2:t3) ここで、t’1は、m(t1)およびs(t1)の安価な
方である。型情報i’tは、t2およびt3の両方がマス
クされた場合にマスク特性を設定し、次にt2およびt3
の両方が符号拡張された場合に符号拡張特性を設定する
ことによって、itから構築される。
【0143】・以下のフォームの型キャスト式e: (types)e1 は、以下に示すように必要な目標式に変換される。
【0144】1.型情報itは、型typesから構築さ
れる。stおよびrtをそれぞれItの有効幅および表現
幅として定義する。typesを必要な目標式の型とし
て定義する;すなわち、typetは、幅rtおよびty
pesの符号を有する。
【0145】2.オペランドe1は、式t1に変換され
る。s1およびr1をそれぞれt1の有効幅および表現幅
として定義する。
【0146】3.stがs1と同じならば、目標式は: <it (t1)>(typet)t1 であり、ここでit (t1)は、tiがマスクされた場合にマ
スク特性を設定し、次にt1が符号拡張された場合に符
号拡張特性を設定することによって、itから構築され
る。
【0147】4.stがslより小さいならば、目標式
は: <it>(typet)t1 である。
【0148】5.stがs1より大きいならば、目標式
は: (a)rtがrlと同じならば、目標式は: <it (f(t1))>(typet)f(t1) であり、型情報it (f(t1))は、f(t1)がマスクされ
た場合にマスク特性を設定し、次にf(t1)が符号拡
張された場合に符号拡張特性を設定することによって、
tから構築される。これは、型情報it (f(t1))を忠実
にしない。なぜなら、f(t1)の符号は、typet
おける符号と異なるからである。
【0149】(b)rtがrlよりも大きいならば、目標
式は: <i’t>(typet)f(t1) であり、ここでi’tは、忠実にされたitである。
【0150】ここで以下のソース式を16ビットアーキ
テクチャによってシミュレーションされ得る目標式に翻
訳することによりこの方法を例示する: ((a(U5)+b(U5))*c(U5))/(d(U5)
(U5))。
【0151】所与のソース式は、元から型適正である。
【0152】ステップ1:ソース式におけるいずれの変
数も「上位ビット特性なし」エントリと関連づける自明
上位ビット特性マッピングを構築する。
【0153】ステップ2:型情報データ構造が構築され
る。ソース式の型は符号なし5であり、目標アーキテク
チャは16ビットであり、以下の型情報が構築される:
【0154】
【表4】 所与のソース式におけるすべてのサブ式が同じ型を有す
るので、上記のデータは、この方法の再帰部分の間に各
サブ式に対して構築される。以下のように表記: <上位ビット特性>式を使用して、いくつかの特定の上
位ビット特性を注釈された所与の目標式を表す。
【0155】ステップ3:目標ソース式が以下のように
再帰的に構築される: 1.ソース式sから: ((a(U5)+b(U5))*c(U5))/(d(U5)+e(U5)) 2つのオペランド: s0=((a(U5)+b(U5))*c(U5)) s1=(d(U5)+e(U5)) が、以下のようにt0およびt1に再帰的に翻訳される: (a)ソース式s0から、2つのオペランド: s00=a(U5)+b(U5)01=c(U5) が、以下のようにt00およびt01に再帰的に翻訳され
る: i.ソース式s00から、2つのオペランド: s000=a(U5)000=b(U5) が、単に各ソース変数に対する一意の目標変数を構築
し、以下を与えることによってt000およびt000に再帰
的に翻訳される: s000=<none>a(U5)000=<none>b(U5)
【0156】ステップ2において構築された上位ビット
特性マッピングは、上記の変数には上位ビット特性を割
り当てず、そこでnoneを設定する。
【0157】ii.s00に関する演算子は+であるの
で、2つのオペランドt000およびt0 01について値補正
演算子を適用する必要はない、そこで以下の目標式t00
が構築される: t00=<none>a(U16)+b(U16) 上位ビット特性は保証され得ず、そこでnoneを設定
する。
【0158】iii.ソース式s01が、ソース変数に対
する一意の目標変数を単に構築し、以下を与えることに
よってt01へ再帰的に翻訳される: t01=<none>c(U16)
【0159】ステップ2において構築された上位ビット
特性マッピングは、上記変数に上位ビット特性を割り当
てず、そこでnoneを設定する。
【0160】(b)s0に関する演算子は*であるの
で、2つのオペランドt00およびt01について値補正演
算子を適用する必要はない。そこで、以下の目標式t0
が構築される: t0=<none>((a(U16)+b(U16))*
(U16))。
【0161】上位ビット特性は保証され得ず、そこでn
oneがセットされる。
【0162】(c)ソース式s1から、2つのオペラン
ド: s10=d(U5)11=e(U5) は、各ソース変数に対する一意の目標変数を単に構築
し、以下を与えることによってt10およびt11へ再帰的
に翻訳される: t10=<none>d(U16)11=<none>e(U16)
【0163】ステップ2において構築された上位ビット
特性マッピングは、上記変数に上位ビット特性を割り当
てず、そこでnoneを設定する。
【0164】(d)s1に関する演算子は+であるの
で、2つのオペランドt10およびt11について値補正演
算子を適用する必要はない。そこで、以下の目標式t1m
が構築される: t1=<none>(d(U5)+c(U5))。
【0165】上位ビット特性は保証され得ず、そこでn
oneを設定する。
【0166】2.sに関する演算子は/であるので、目
標式t0およびt1は、以下を与えるマスキング値補正演
算に適用される: t0’=<masked>((a(U16)+b(U16))*c
(U16))&31(U16)1’=<masked>(d(U16)+e(U16))&31
(U16) そして、目標式: t=<none> (((a(U16)+b(U16))*c(U16))&31(U16))/
((d(U16)+e(U16))&31(U16)) が構築される。マスク特性は、符号なし演算の結果にお
いて保証され得るので、マスク上位ビット特性が設定さ
れ、以下の目標式tの最終の内部表現を与える: <masked> (((a(U16)+b(U16))*c(U16))&31(U16))/
((d(U16)+e(U16))&31(U16))。
【0167】最後の段階は、上記式から追加型情報を取
り出し、以下を与える: (((a(U16)+b(U16))*c(U16))&31(U16))/
((d(U16)+e(U1 6))&31(U16))。
【0168】この技術は、特定の目標マシン上の算術演
算回路の高級記述の効率的なシミュレーションにおいて
使用される。図7は、Bachハードウェア設計フロー
の例を示す。ここでハードウェアは、Bach高級言語
で記述される。ハードウェア記述は、40で実施され、
Bachソースコードを生成する。ステップ41は、B
achハードウェア記述をシミュレーションし、上記の
方法を使用して、目標マシンの算術演算および/または
論理回路において実施される演算処理または式の翻訳を
提供する。シミュレーションの結果は、42で正確さに
ついて検査される。不正確であれば、新しいインプリメ
ンターションがステップ40において実行される。シミ
ュレーション結果が正確であるならば、ステップ43が
低級ハードウェア記述を生成し、次にその低級ハードウ
ェア記述は、公知または適切な技術を使用してシリコン
チップ44に変換される。
【0169】
【発明の効果】所定のビット幅の整数算術演算式を計算
する能力があるだけの所定のデバイスを使用して、算術
演算および任意のビット幅の整数を伴う関係式の効率的
な計算を行う方法を提供することができる。
【0170】いくつかの特定の幅(例えば、w1、w2
ど)の整数算術演算を計算することのできる、目標マシ
ンと呼ばれる所定のデバイスまたは機構に対して、上記
の方法は、任意の幅の整数を伴う算術演算式を特定の幅
の整数を伴う効率的な算術演算に翻訳する。
【図面の簡単な説明】
【図1】図1は、本発明の実施態様の翻訳方法を例示す
るフロー図である。
【図2】図2は、図1に例示される方法を実行するため
のコンピュータのブロック模式図である。
【図3】図3は、本発明の別の実施態様の翻訳方法を例
示する模式フロー図である。
【図4】図4は、ソース整数およびそれが翻訳された目
標整数のビット構造を例示する図である。
【図5】図5は、図3に示される方法において使用され
る目標マシン式を表すための内部データ構造を例示する
図である。
【図6】図6は、複合ソース式の目標式への翻訳を例示
する高級フロー図である。
【図7】図7は、集積回路の形態のハードウェアの設計
および実施において図3の方法を使用する例を示す模式
フロー図である。

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 第1のビット幅の2進整数を含む少なく
    とも1つのソースのオペランドに対するソースの演算
    を、該第1のビット幅よりも大きい第2のビット幅の2
    進整数に対して整数演算を実行するプロセッサによって
    計算するために対応するターゲットの演算に翻訳する方
    法であって、該方法が、 該ソースの演算を少なくとも1つのターゲットのオペラ
    ンドを有するターゲットの演算に変換するステップと、 該ターゲットのオペランドの未使用ビットの値が該ター
    ゲットの演算の値に影響を与えるかどうか、および、該
    ターゲットのオペランドのいずれかが、不適切な値を持
    つ1つ以上の未使用ビットを有してもよいかどうかを判
    定するステップと、 該判定ステップの結果が真であった場合に、該ターゲッ
    トの演算に対して補正演算を加えて、これにより、該タ
    ーゲットの演算を実行する前に、不適切な値を持つ該1
    つ以上のビットのそれぞれの値を補正するステップと、
    を包含する、方法。
  2. 【請求項2】 前記少なくとも1つのソースのオペラン
    ドが、少なくとも1つの定数を含む、請求項1に記載の
    方法。
  3. 【請求項3】 前記少なくとも1つのソースのオペラン
    ドが、少なくとも1つの変数を含む、請求項1に記載の
    方法。
  4. 【請求項4】 前記少なくとも1つのソースのオペラン
    ドが、少なくとも1つのサブ演算を含む、請求項1に記
    載の方法。
  5. 【請求項5】 前記ソースの演算が、算術演算を含む、
    請求項1に記載の方法。
  6. 【請求項6】 前記判定ステップが、符号なし非マスク
    ターゲットのオペランドを特定するステップを包含し、
    前記補正ステップが、マスクステップを包含する、請求
    項5に記載の方法。
  7. 【請求項7】 前記第1のビット幅がwビットであり、
    前記マスクステップが、前記符号なし非マスクターゲッ
    トのオペランドと(2w−1)の2進数表現とに対して
    ビット単位AND演算を実行するステップを包含する、
    請求項6に記載の方法。
  8. 【請求項8】 前記判定ステップが、符号付き非符号拡
    張ターゲットのオペランドを特定するステップを包含
    し、前記補正ステップが、符号拡張ステップを包含す
    る、請求項5に記載の方法。
  9. 【請求項9】 前記ソースの演算が関係演算を含み、前
    記補正ステップが単調演算を含む、請求項1に記載の方
    法。
  10. 【請求項10】 請求項1に記載の方法を実行するコン
    ピュータプログラム。
  11. 【請求項11】 請求項10に記載のコンピュータプロ
    グラムを記憶した記憶媒体。
  12. 【請求項12】 請求項10に記載のプログラムによっ
    てプログラムされたコンピュータ。
  13. 【請求項13】 請求項1に記載の方法によって生成さ
    れた翻訳生成物。
JP2000301391A 1999-10-05 2000-09-29 ソースの演算をターゲットの演算に翻訳する方法、記憶媒体、コンピュータ Expired - Fee Related JP3755733B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9923379.3 1999-10-05
GB9923379A GB2355085A (en) 1999-10-05 1999-10-05 Translating a source operation to a target operation

Publications (2)

Publication Number Publication Date
JP2001154842A true JP2001154842A (ja) 2001-06-08
JP3755733B2 JP3755733B2 (ja) 2006-03-15

Family

ID=10862048

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000301391A Expired - Fee Related JP3755733B2 (ja) 1999-10-05 2000-09-29 ソースの演算をターゲットの演算に翻訳する方法、記憶媒体、コンピュータ

Country Status (5)

Country Link
US (1) US6817012B1 (ja)
EP (1) EP1091292B1 (ja)
JP (1) JP3755733B2 (ja)
DE (1) DE60037229T2 (ja)
GB (1) GB2355085A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017146747A (ja) * 2016-02-16 2017-08-24 日本電信電話株式会社 変換方法、変換プログラムおよび変換装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7320065B2 (en) * 2001-04-26 2008-01-15 Eleven Engineering Incorporated Multithread embedded processor with input/output capability
US7000226B2 (en) * 2002-01-02 2006-02-14 Intel Corporation Exception masking in binary translation
US7770147B1 (en) * 2004-03-08 2010-08-03 Adaptec, Inc. Automatic generators for verilog programming
US7783467B2 (en) * 2005-12-10 2010-08-24 Electronics And Telecommunications Research Institute Method for digital system modeling by using higher software simulator

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0871108B1 (en) * 1991-03-11 2000-09-13 MIPS Technologies, Inc. Backward-compatible computer architecture with extended word size and address space
US5440702A (en) * 1992-10-16 1995-08-08 Delco Electronics Corporation Data processing system with condition code architecture for executing single instruction range checking and limiting operations
US5418959A (en) * 1992-11-30 1995-05-23 Intel Corporation Instruction operation size optimization
JP2847688B2 (ja) * 1993-05-27 1999-01-20 松下電器産業株式会社 プログラム変換装置およびプロセッサ
EP1229440B1 (en) * 1993-05-27 2007-05-02 Matsushita Electric Industrial Co., Ltd. Program converting unit and processor improved in address management
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
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017146747A (ja) * 2016-02-16 2017-08-24 日本電信電話株式会社 変換方法、変換プログラムおよび変換装置

Also Published As

Publication number Publication date
DE60037229T2 (de) 2008-10-16
EP1091292B1 (en) 2007-11-28
JP3755733B2 (ja) 2006-03-15
US6817012B1 (en) 2004-11-09
GB2355085A (en) 2001-04-11
EP1091292A3 (en) 2004-07-07
EP1091292A2 (en) 2001-04-11
GB9923379D0 (en) 1999-12-08
DE60037229D1 (de) 2008-01-10

Similar Documents

Publication Publication Date Title
US7313773B1 (en) Method and device for simulator generation based on semantic to behavioral translation
US6807651B2 (en) Procedure for optimizing mergeability and datapath widths of data flow graphs
Busaba et al. The IBM z900 decimal arithmetic unit
US6848085B2 (en) System for converting hardware designs in high-level programming languages to hardware implementations
US5805462A (en) Automatic synthesis of integrated circuits employing boolean decomposition
US7565631B1 (en) Method and system for translating software binaries and assembly code onto hardware
US7885792B2 (en) Programming Environment
US20030145304A1 (en) Algorithm-to-hardware system and method for creating a digital circuit
JPH0773227A (ja) 論理回路の自動設計方法、そのシステム及びその装置並びに乗算器
US7500220B1 (en) Shared code management
JP3755733B2 (ja) ソースの演算をターゲットの演算に翻訳する方法、記憶媒体、コンピュータ
Bernauer et al. How to Automatise Proofs of Operator Statements: Moore–Penrose Inverse; A Case Study
Verma et al. Towards the automatic exploration of arithmetic-circuit architectures
JP2001142695A (ja) 記憶場所への定数のロード方法、宛先記憶場所への定数のロード方法、レジスタへの定数のロード方法、符号ビット数の決定方法、2進数の正規化方法、及びコンピュータシステム内の命令
Srivastava et al. C in Depth
REDDY DESIGN AND IMPLEMENTATION OF AREA EFFICIENT MULTIPLY-ACCUMULATE UNIT
JP2002312176A (ja) 変換プログラム、コンパイラ、コンピュータ装置、プログラム変換方法及び記憶媒体
Chen Compilation of combinational logic units for universal AHPL
Kloos et al. Transformational development of circuit descriptions for binary adders
Anand et al. Accelerating and Visualizing Modulo Arithmetic using Multiple Radices
LaMeres Packages
Srinivasan et al. Gemini: A Functional Programming Language for Hardware Description
CN118211537A (zh) 缩位运算的并行加速方法、系统、电子设备及可读介质
Gulla An Alternative Approach to Rounding Issues in Precision Computing with Accumulators, with Less Memory Consumption: a Proposal for Vectorizing a Branched Instruction Set
Titzer et al. A declarative approach to generating machine code tools

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040721

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050915

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050920

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051003

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051215

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110106

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120106

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees