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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
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
の固定幅を正確にかつ効率的にシミュレーションするた
めの方法を提供すること。 【解決手段】 第1のビット幅の2進整数を含む少なく
とも1つのソースのオペランドに対するソースの演算
を、第1のビット幅よりも大きい第2のビット幅の2進
整数に対して整数演算を実行するプロセッサによって計
算するために対応するターゲットの演算に翻訳する方法
であって、方法が、ソースの演算を少なくとも1つのタ
ーゲットのオペランドを有するターゲットの演算に変換
するステップと、ターゲットのオペランドの未使用ビッ
トの値がターゲットの演算の値に影響を与えるかどう
か、および、ターゲットのオペランドのいずれかが、不
適切な値を持つ1つ以上の未使用ビットを有してもよい
かどうかを判定するステップと、判定ステップの結果が
真であった場合に、ターゲットの演算に対して補正演算
を加えて、これにより、ターゲットの演算を実行する前
に、不適切な値を持つ該1つ以上のビットのそれぞれの
値を補正するステップと、を包含する方法。
Description
ーゲットの演算に翻訳する方法に関する。本方法を用い
れば、例えば、目標マシン(コンピュータ等)固有の整
数ビット幅の倍数ではないビット幅を持つ整数値を効率
的に計算することができる。本方法の別の用途として
は、高級ハードウェア記述言語のシミュレーションが挙
げられる。さらに、本発明は、同方法を実行するコンピ
ュータプログラム、同プログラムを記憶した記憶媒体、
同プログラムによってプログラムされたコンピュータ、
および同方法によって生成された翻訳生成物にも関す
る。
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年)のよ
うなハードウェア記述言語を用いて、ハードウェア回路
の挙動を記述することができる。これらの言語は、適切
な数値型および演算子を提供することによって、整数算
術演算を伴う回路の記述をサポートしている。ハードウ
ェアを効率的に設計するために、通常各数値型は、その
型の整数値のビット幅をパラメータに有している。
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以外の値を持ち得るので、ある数値型が持つ値の
いくつかは有効な整数に対応しないことに留意された
い。
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)のようなプロ
グラミング言語で通常使用される抽象概念のレベルでハ
ードウェアを記述することができる。
なプログラミング言語は、複数種のアーキテクチャをプ
ログラムするために使用されることを想定して設計され
るので、その整数型および式のセマンティックスは通
常、プログラムを実行する目標アーキテクチャに左右さ
れる。例えば、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言語を拡張している。
hのようなプログラム言語系の高級ハードウェア記述言
語を使用することの利点の1つは、格段により高速に設
計の挙動を(汎用アーキテクチャ上で)シミュレーショ
ンできることである。例えば、上記のVHDL数値型の
特定の抽象レベルのために、シミュレーションに使用さ
れる目標マシンの整数算術演算を直接には使用できな
い。一般に、数値型の各ビット値を目標マシン上の独立
したバイト/ワードとして表現する必要があり、そこで
VHDL算術演算シミュレーションは、目標マシンの固
有の算術演算よりもはるかに遅くなり得る。Bachの
算術演算は、VHDL数値算術演算よりも目標マシンの
固有の算術演算に近いが、それでもビット幅の違いのた
めに目標マシンの固有の算術演算をそのままでは使用で
きない。したがって、ハードウェア記述に通常使用され
る算術演算の固定幅を正確にかつ効率的にシミュレーシ
ョンするための方法を開発する必要がある。
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ビット長であるとして定義され、その幅は目
標マシンのワードサイズの倍数である。その結果、コン
パイルされたコードの挙動は、目標マシンが変ると異な
る。
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)アプリケーションの効率的なシミュレーショ
ンのために固定小数点整数算術演算を標準的な整数算術
演算に翻訳するための方法を開示する。しかし、得られ
た整数算術演算式における値補正演算を最小限にする努
力は行われておらず、目標マシンのリソースが効率的に
使用されていない。
許0 626 641は、高級処理言語を機械語に変換
するための技術を開示する。これらの技術は、プログラ
ムがコンピュータによって実行される場合に、ユーザが
介入して演算の値がオーバーフローする恐れがないかど
うかを計算する必要がある。オーバーフローしそうであ
れば、値補正演算を行う。その値補正演算は、マスキン
グ演算、もしくは演算が符号なしかまたは符号付きかの
いずれであるかに依存する符号拡張演算を含む。
ると、第1のビット幅の2進整数を含む少なくとも1つ
のソースのオペランドに対するソースの演算を、上記第
1のビット幅よりも大きい第2のビット幅の2進整数に
対して整数演算を実行するプロセッサによって計算する
ために対応するターゲットの演算に翻訳する方法であっ
て、上記ソースの演算を少なくとも1つのターゲットの
オペランドを有するターゲットの演算に翻訳するステッ
プと、上記ターゲットのオペランドの未使用ビットの値
が上記ターゲットの演算の値に影響を与えるかどうか、
および、上記ターゲットのオペランドのいずれかが、不
適切な値を持つ1つ以上の未使用ビットを有してもよい
かどうかを判定するステップと、上記判定ステップの結
果が真であった場合に、上記ターゲットの演算に対して
補正演算を加えて、これにより、上記ターゲットの演算
を実行する前に、不適切な値を持つ該1つ以上のビット
のそれぞれの値を補正するステップと、を包含する方法
が提供される。
は、少なくとも1つの定数を含んでもよい。
は、少なくとも1つの変数を含んでもよい。
は、少なくとも1つのサブ演算を含んでもよい。
よい。上記判定ステップは、符号なし非マスクターゲッ
トのオペランドを特定するステップを包含し、上記補正
ステップは、マスクステップを含んでもよい。上記第1
のビット幅はwビットであってもよく、上記マスクステ
ップは、上記符号なし非マスクターゲットのオペランド
と(2w−1)の2進数表現とに対してビット単位AN
D演算を実行するステップを含んでもよい。上記判定ス
テップは、符号付き非符号拡張ターゲットのオペランド
を特定するステップを含んでもよく、上記補正ステップ
は、符号拡張ステップを含んでもよい。
く、上記補正ステップは単調演算を含んでもよい。
1の局面による方法を実行するコンピュータプログラム
が提供される。
2の局面によるコンピュータプログラムを記憶した記憶
媒体が提供される。
2の局面によるプログラムによってプログラムされたコ
ンピュータが提供される。
1の局面によるの方法によって生成された翻訳生成物が
提供される。
ット」は、ターゲットのオペランドのうちのビットであ
って、対応するソースの演算の値を表すために使用され
ていないビットを意味する。
使用ビットの値であって、その未使用ビットがターゲッ
トのオペランドに存在する場合に、対応のソースの演算
の値と異なる値に計算されるターゲットの演算を生じる
ような値である。
算式を計算する能力があるだけの所定のデバイスを使用
して、算術演算および任意のビット幅の整数を伴う関係
式の効率的な計算を行う方法を提供することができる。
ど)の整数算術演算を計算することのできる、目標マシ
ンと呼ばれる所定のデバイスまたは機構に対して、上記
の方法は、任意の幅の整数を伴う算術演算式を特定の幅
の整数を伴う効率的な算術演算に翻訳する。任意の幅の
整数算術演算を伴う式の言語は、ソース言語と称す。同
様に、特定の幅(例えば、w1、w2など)の整数算術演
算を伴う式の言語は、目標言語と称す。この方法を使用
して:・幅wを有する整数原子式(定数または変数な
ど)は、少なくともwビット幅である最短幅の目標言語
整数の幅を有する原子式によって表される。例えば、幅
5の符号なし原子式は、目標言語が幅16、32、48
などの整数を含む場合に幅16の原子式によって表され
る。
ることを表し、x→yは、ソース式xが目標式yに翻訳
されることを表す。
りいつでも使用される。例えば: 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ビット
符号なし値を表すと仮定する。
しても適用されるわけではなく、そのような演算が必要
な場合に適用される。例えば、式: ((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回の演算が使用される。
シン表現に翻訳するために使用されるマシン上のメモリ
ローケーション、またはレジスタ)の内部表現を使用し
て達成される。この目標式は、以下を含む: 1.目標マシン式の表現; 2.以下のさらなる情報を伴う:式の符号、元の式の幅
(有効幅と呼ぶ)、目標式の幅(表現幅と呼ぶ)、およ
びソース式の値を記憶するために使用されない目標式の
整数値におけるビットの可能な値についての情報(上位
ビット特性と呼ぶ)。ソース式の値を記憶するために使
用されない目標式の値におけるビットを未使用ビットと
呼ぶ。
重要なのが、上位ビット特性情報であり、これは、以下
の2つの特性が満足されるかどうかを示す: ・未使用ビットのすべてが0であることを示すマスク特
性。
最上位ビットと同じであることを示す符号拡張特性。
である、 ・式が符号なしの場合、ソース式の値は、目標式がマス
ク特性を有する場合かつその場合に限り、その目標式の
値と同じである。
目標式が符号拡張特性を有する場合かつその場合に限
り、その目標式の値と同じである。
追加タイプ情報を記憶することによって(目標マシン式
の表現を記憶するために必要なメモリローケーションと
は別)、上記のような翻訳方法は、以下の場合にのみ、
目標式中に適切な値補正演算を挿入することができる: 1.目標式の値が、ソース式の値と異なる(すなわち、
式が符号なしであり、かつマスク特性を有さない場合
か、または式が符号付きであり、かつ符号拡張特性を有
さない場合)、および 2.翻訳される演算が、そのオペランドの正しい目標式
値を必要とする。+および*のような所定の演算は、有
効ビットにおける値がソース式のビットにおける値と同
じである限り、ターゲットのオペランドに対する正しい
値を必要としない。その結果、それらのオペランドは、
目標式を構築する場合に値補正する必要がない。
対する正しい値が必要であり、そこでその値は、その適
切な上位ビット特性(式が符号なしの場合にマスクさ
れ、そうでなければ符号拡張される)が設定されない場
合に値補正される必要がある。
い)の結果が正しく、そこで適切な上位ビット特性が目
標式の追加タイプ情報中に設定され得るので、得られた
式について値補正がその後必要とならない。
入されるわけではないので、得られた目標式はさらに効
率的である。
数を伴う算術演算がプロセッサまたは所定のビット幅の
みの算術演算を効率的に計算できる任意のデバイス上で
計算される必要がある場合に使用され得る。このような
方法の産業上のアプリケーションは、以下を含む: ・ある特定の目標マシン上の算術演算回路の高級記述
(Bachまたは他を使用する)の効率的シミュレーシ
ョン。ハードウェアがBach高級言語で記述され、そ
して低級合成可能産業強度ハードウェア記述が自動的に
生成される。ハードウェア設計者は、低級言語(VHD
Lなど)の代わりに高級言語を使用するので、従来のハ
ードウェア設計プロセスよりも設計プロセスは格段に速
くなり、故に安価となる。本発明は、Bach設計フロ
ーのシミュレーション段階において使用され得る。その
段階では、実際のハードウェアが合成される前にBac
hハードウェア記述が確認される。これにより、シミュ
レーション段階を、元のままの方法を使用する場合より
も格段に速くでき、したがってハードウェア設計にかか
る時間を低減できる。
で使用されるものと異なるマシンを対象とする算術演算
の効率的なシミュレーションまたはコンパイル。例え
ば、特定のプロセッサ(遅いか、または実施段階の間に
容易に得られないようなもの)を対象とするプログラム
を、目標マシンアーキテクチャと異なるアーキテクチャ
を有するより速く、容易に得られるプロセッサ上でシミ
ュレーションできる。
の効率的なシミュレーションが必要となる埋め込みシス
テムの設計の効率的なシミュレーション。
の固有の整数算術演算が直接使用され、かつ値補正演算
の回数が低減するので効率的である。
でなく、したがってソース式の目標式への高速なコンパ
イルが必要であるアプリケーションにおいても使用でき
る。
の演算に翻訳する方法を提供する。ソースの演算は、そ
れぞれ第1のビット幅の2進整数を含む1つ以上のソー
スのオペランドに対して実行される。ターゲットの演算
は、第1のビット幅よりも大きな第2のビット幅の2進
整数に対して整数演算を実行するコンピュータ等のプロ
セッサによって計算される必要がある演算である。ソー
スの演算1は、少なくとも1つのターゲットのオペラン
ドを有するターゲットの演算に翻訳される。ステップ3
では、ターゲットのオペランドの未使用ビットの値がタ
ーゲットの演算の値に影響を与えるかどうかを判定し、
ステップ5では、いずれかのターゲットのオペランド
が、不適切な値を持つ1つ以上の未使用ビットを有して
もよいかどうかを判定する。ステップ3およびステップ
5の判定結果が、いずれも真であった場合、ステップ6
において、ターゲットの演算に対して補正演算を加え
て、これにより、ターゲットの演算を実行する前に、不
適切な値を持つ各ビットの値を補正する。
実施例を用いてさらに説明する。
符号で示す。
に翻訳する方法を例示する。ソースの演算は、第1のビ
ット幅の2進整数について実行され、算術演算または関
係演算を含むことがある。ターゲットの演算は、第1の
ビット幅よりも大きい第2のビット幅を有する整数につ
いて算術演算および/または論理演算を実行するコンピ
ュータなどのデバイスによって実行される。
テップ2は、ソースの演算を対応のターゲットの演算に
翻訳する。ステップ3は、ターゲットの演算のいずれか
の未使用ビットがターゲットの演算に影響を与え得るか
どうかを検出する。ここで、ターゲットの演算が「影
響」を受けるのは、未使用ビットが存在することによっ
て、ターゲットの演算の計算が対応のソースの演算の計
算と異なる結果となる場合である。どの未使用ビットも
ターゲットの演算に影響を与えなければ、ターゲットの
演算は、ステップ4において目標マシンによる後続の処
理のために出力される。
与え得る場合、ステップ5は、いずれかのターゲットの
オペランドが不適切な未使用ビットを有するかどうかを
検出する。例えば、ターゲットのオペランドのオペラン
ドはまた、ターゲットの演算の計算が影響を受けないよ
うな値にあらかじめ設定される未使用ビットを有するこ
とがある。この場合、制御は、ターゲットの演算を出力
するステップ4に遷移する。しかし、ターゲットのオペ
ランドが不適切な未使用ビットを有する場合、ステップ
6は、ステップ4でターゲットの演算を出力する前に補
正演算をターゲットの演算に加える。したがって、ター
ゲットの演算が目標マシンについて実行されるならば、
得られる計算はソースの演算の計算と同じであることを
確実にできる。
するために使用され得るコンピュータを例示する。コン
ピュータは、算術かつ論理ユニット11を含むマイクロ
プロセッサ10を含む。マイクロプロセッサは、翻訳の
ためのソースの演算を受信するための入力インターフェ
ース12および得られた翻訳生成物をターゲットの演算
の形態で供給するための出力インターフェース13を含
んで提供される。コンピュータは、図1に例示する方法
を実行するようにマイクロプロセッサ10を制御するた
めのプログラムを含む読み取り専用メモリ14を有す
る。コンピュータはまた、マイクロプロセッサ10の演
算の間に発生する値を一時的に記憶するためのランダム
アクセスメモリ15を有する。
本的な実施態様である。さらに高度な方法を以下により
詳細に説明する。以下の方法は、図1を参照して説明さ
れる「演算」に同等な「式」の翻訳を実行する。
以下を含むと考える: ・任意のビット幅の符号なし2進整数; ・任意のビット幅の符号付き2進整数。
進解釈を仮定する。例えば、符号なし2進数1101
は、整数13と解釈される;および符号付き整数に対し
て2の補数解釈を仮定する。例えば、符号付き2進数1
101は、整数−3と解釈される。
の式が形態に関して型を区別される: ・符号なし整数値に対してunsignedω、または
単にUω;または ・符号付き整数値に対してsignedω、または単に
Sω;ここで幅ωは、値におけるビット数を表すゼロで
ない正の整数である。通常、e (t)と書いてeが型tを
有することを示す。式の型は通常、前後から推定され得
る場合、または本論と関係しない場合には省略される。
か、または多くの式e1、e2、...、en(オペラン
ドと呼ぶ)に演算子(例えば、op)をかけたものから
なる複合物: op(e1、e2、...、en)。
算され、他方変数の値は、割り当て(変数からその型の
値へのマッピング)によって与えられる。複合式の値
は、演算子およびそのオペランドの計算に依存する。式
の計算は、副作用を有し得る:すなわち、変数の割り当
てを変更し得る。例えば、以下の初期割り当てが与えら
れ: x(S16)→10(S16) y(S16)→20(S16) そして演算子=、+、*についてはC言語のセマンティ
ックスを仮定すると、 (x(S16)=x(S16)+1,y(S16)=x(S16)*
y(S16)) の計算は,値220(S16)を返し、割り当てを以下のよ
うに変更する: x(S16)→11(S16) y(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のすべてのサブ式の幅が固有ビット幅で
ある場合かつその場合に限り目標言語に含まれる。ま
た、ソース言語を任意の幅を有する式のセットとして定
義する。
ース言語の式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を返す。目標式の内部表現からマシン
読み取り可能式を抽出するための機構は、使用される目
標マシンに依存し、ここでは議論しない。
てどのように表されるかを例示する。基本的には、nビ
ット整数が同じ符号のmビット目標整数によって表さ
れ、ここでmはn以上の最小固有ビット幅である。ソー
ス整数ビット26は、目標整数の最下位nビット27中
に記憶される。目標整数値中の最上位(m−n)ビット
28は、未使用ビットと呼ばれる。目標整数値の最下位
nビット27は、有効ビット列と呼ばれる。目標値の解
釈がソース値の解釈と同じであるためには: ・ソース整数値が符号なしである場合、目標整数値がマ
スクされる:目標整数値中の未使用ビットが0に設定さ
れる。
標整数値が符号拡張される:目標整数値の未使用ビット
が、有効ビット列中の最上位ビットに設定される。
れ、以下を含む: ・目標マシンに依存する目標式の内部表現29;および ・効率的な目標式を生成するために翻訳プロセスによっ
て使用される型情報30。
る目標式tの内部表現を示す。目標式の内部表現は、式
の目標マシン読み取り可能表現を返す抽出演算を有する
べきである。
構造である: sign:符号付きかまたは符号なしかであり得る式の
符号である。
の式の幅である。
でのその実際のビット幅である。整数式の表現幅は、そ
の有効幅以上である。式の型は、その表現幅がその有効
幅と同じである場合に、正確であるとされる。有効幅よ
りも上位の不正確な整数表現におけるビットを未使用ビ
ットと呼ぶ。
または上位ビット特性は、その未使用ビットについての
情報を与える。式の上位特性は: マスク:目標式は、どの割り当てに対しても、未使用ビ
ットがすべて0に設定される値に必ず計算される場合
に、マスク特性が与えられる。
ても、未使用ビットが有効ビット列における最上位ビッ
トと同じ値を有する値に必ず計算される場合に、符号拡
張特性を与えられる。
いに排他的でない。以下の例は、表現幅16および有効
幅9を有する整数値をいくつかリストする。
の解釈と同じ解釈を有する値に計算される場合、忠実で
あるとされる(同一の符号を仮定)。したがって、式が
忠実となるのは以下の場合である: ・符号なしであり、かつマスク特性を有する、または ・符号付きであり、かつ符号拡張特性を有する。
注釈をつけるのが都合のよい場合がある、なぜなら: ・式の符号および表現幅が、目標式のマシン読み取り可
能表現を抽出する演算によって必要とされ得る; ・有効幅および上位ビット特性を利用する目標式の内部
表現について最適化を図り得る。
マスキングおよび符号拡張の範囲を以下の2つの値によ
って与える:マスキング範囲:目標式eは、どの割り当
てについてもn以上の位置のビットが0である値に必ず
計算される場合に、nのマスキング範囲を有する。ここ
で、nは、eの表現幅よりも小さい。
10のマスキング範囲を有する。
17のマスキング範囲を有する。
についてもn以上の位置のビットがビットn−1に等し
い値に必ず計算される場合に、nの符号拡張範囲を有す
る。ここで、nは、eの表現幅よりも小さく、かつ0よ
り大きい。
11の符号拡張範囲を有する。
13の符号拡張範囲を有する。
は位置0にある。
た値が必要に応じてマスクまたは符号拡張されることを
保証する値補正演算を適用することによって、忠実にさ
れ得る。目標式表現についての以下の2つの演算が定義
されると仮定する:マスキング演算は、式tを受け取
り、式t’を返す。ここで、どの割り当てについてもt
およびt’の有効ビット列が同じであり、かつt’がマ
スク特性を有する。
を返す。ここで、どの割り当てについてもtおよびt’
の有効ビット列が同じであり、かつt’が符号拡張特性
を有する。
よび符号拡張演算に適用された式tを表すためにそれぞ
れ表記m(t)およびs(t)を使用する。また、式t
が与えられたとき、tが符号なしの場合にm(t)を返
し、tが符号付きの場合にs(t)を返す「忠実化」演
算を定義する。
目標式の計算は、tによって表される目標式の計算より
も時間/空間的により高価であることもあり、そこでソ
ース整数式の目標整数式への翻訳は、これらの演算を翻
訳されるサブ式のいずれにもそのまま適用するのではな
く、これらの演算の適用を最小限にする試みをすべきで
ある。
の式を計算する時間/空間のコストが値補正演算の計算
と同じであるように実行される。これは確かに、すでに
値補正された式の場合である。なぜなら、演算は単に元
の式を返すだけだからである。これは定数式の場合でも
ある。なぜなら、定数式は、定数値を直接的に補正し、
別の定数式(同じコストのもの)を返すことによって値
補正されるからである。式tは、m(t)の計算がtの
計算と同じコストを有する場合、容易にマスクされる。
同様に、式tは、s(t)の計算がtの計算と同じコス
トを有する場合、容易に符号拡張される。
び偽についての表現である)を返す副作用のない関係演
算子(<および<=など)をともなう整数式を翻訳する
場合、オペランドに対して値補正演算を必ずしも行う必
要はない。代わりに、以下の特性を満たすオペランドに
通常安価な単調演算を行うことで十分である: ・opS(s1,...,sn)は、opT(mn
(t1),...,mn(tn))が真を表すブール値を
計算する場合かつその場合に限り真を表すブール値を計
算する。
T(mn(t1),...,mn(tn))が偽を表すブ
ール値を計算する場合かつその場合に限り偽を表すブー
ル値を計算する。ここで、mn(t)は、目標式tに適
用された単調演算を表し、opSはソース言語における
n進関係演算、opTは目標言語における対応のn進関
係演算、s1,...,snはソース式、t1,...,
tnはそれらに対応の(必ずしも値補正されない)目標
式である。
要とすることがある。また、同じ関係演算子に適用可能
な単調演算がいくつかあり得る。
現への変換を説明する。まず、ソース式を目標式に翻訳
するための一般的機構を説明し、その後いくつかのC言
語風の演算子を伴う算術演算式の1セットに対するこの
処理を具体的に例示する。
における異なる演算子に依存する。その方法は、ソース
言語における演算子の以下の特性を使用する:特性1
は、演算の結果の未使用ビットの値を取り扱う。+、
−、および*などの所定の演算において、オペランドの
未使用ビットは、その結果の有効ビットに影響を与え
ず、そのようなオペランドのオペランドは、ソース式が
目標式に翻訳される場合には、値補正演算に適用されな
い。オペランドの未使用ビットは、その結果の有効ビッ
トに影響を与え得、そしてこの特定のオペランドは、値
補正される必要があるか、または関係演算の場合、すべ
てのオペランドは、有効な単調演算に適用される必要が
ある。
び有効ビットが演算の結果の未使用ビットにどのように
影響を与えるかを取り扱う。\および%などの所定の演
算において、その結果の値は忠実であることが保証さ
れ、そこで適切な上位ビット特性が、目標式の型情報内
に設定され得る。
拡張データ構造を使用する。
ペランドに適用する上記2つの特性を考慮する。
能を演算の結果に常に適用する公知の方法と異なること
を例示する。
スキングおよび符号拡張範囲を含むことができ、そして
これらの特性から、本発明の方法は、翻訳の間に必要と
される値補正機能の数を著しく低減させる。以下におい
ては単に、式のデータ構造内にマスクおよび符号拡張特
性を記憶させ、そしてこれら2つの特性が、本発明の方
法をどのように効率的に使用して効率的な目標式を生成
するのかを説明する。マスクおよび符号拡張特性の代わ
りにマスキングおよび符号拡張範囲を考慮する場合、本
発明の方法は、若干より効率的な式を生成する。例え
ば、以下の式のサブ式: (a(U5)&3(U5))+1(U5) は、以下のマスキング範囲を有する: a(U5)&3(U5) 2 1(U5) 1 そして、結果のマスキング範囲が1足すオペランドの最
大マスキング範囲である+演算子の特性を使用して、主
式のマスキング範囲が1+2=3であることを推論す
る。したがって、主式は、マスクされ、そして忠実であ
ることが分かる。その結果、値補正される必要は決して
ない。マスキング範囲を追跡するかわりに、マスク特性
を単に追跡する場合は、上記2つのサブ式がマスク特性
を有することから、主式がまたマスクされるとは推論で
きない。これが意味するところは、式は、更なるマスキ
ング演算を付加することによって値補正される必要があ
り得ることである。
標式表現は以下のように構築される: ステップ1 ソース式eにおける変数を有する上位ビッ
ト特性に関する表が構築される。この表は、上位ビット
特性マッピングと呼ばれ、以下の形態を有する:
数であり、そしてP0....Pnはそれらに対応する上
位ビット特性であり、その上位ビット特性は、以下のう
ちの1つである:マスク、符号拡張、またはなし(すな
わち3つの取り得る値である)。マスクおよび符号拡張
特性の両方が設定されるような上位ビット特性の組み合
わせは、この表において許されない。いくつかのデータ
構造を上位ビット特性マッピングの内部表現のために使
用でき、そして変数U0....Unを並べ替えることが
できる場合、適切な構造は、連想リストおよびソート2
進ツリーを含む。
確さに影響せず、例えば、すべての変数に上位ビット特
性を全く与えないような自明マッピングを使用すること
ができる。しかし、変数がソース式においてどのように
(およびどのくらいの頻度で)使用されるかに依存する
上位ビット特性マッピングを構築する発見的方法を開発
できる。そのため、この翻訳機構によって構築される目
標式は、より効率的となり得る可能性がある。
が構築される: ・ソース式と同じ符号; ・有効幅ω; ・表現幅rは、ω以上の最小固有幅となるよう選択され
る; ・上位ビット特性が全く設定されない(現時点で)。
情報ieは、eの型から構築される。
そして目標マシンの固有ビット幅が16、32、48な
どであると仮定すると、以下のデータを有する型情報が
構築される:
現のために使用できる。適切なデータ構造は、符号に対
してブールフィールド、有効および表現幅に対して2つ
の整数フィールド、および上位ビット特性に対して2つ
のブールフィールド(1つはマスク特性のため、他方は
符号拡張特性のため)を有する記録構造である。
に構築され、そして型情報における適切な上位ビット特
性フィールドが設定される。この再帰方法の基本ケース
は、ソース式eが原子式の場合である;再帰ケースは、
ソース式eが複合式の場合である。
標原子式が構築される。
数式<it>etが構築される。ここで、定数etの値
は、その解釈がesの解釈と同じとなるようなものであ
り、型情報itは、etにおける未使用ビットの値にした
がって設定された上位ビット特性を有する型情報i
e(上記ステップ2で構築された)である。
変数式が構築される。どのソース変数識別子に対して
も、一意の目標変数識別子が使用される。より形式的に
は、ソース変数識別子から目標変数識別子へのマッピン
グは、完全単射である。ステップ2において構築された
型情報ieの上位ビット特性フィールドは、ステップ1
において構築された上位ビット特性マッピングにおける
エントリにしたがって設定される。ソース変数に対する
上位ビット特性マッピングエントリがマスク特性である
ならば、マスクフィールドが設定される。同様に、エン
トリが符号拡張特性ならば、符号拡張フィールドが設定
される。エントリが、ソース変数に上位ビット特性が全
く割り当てられないことを示すならば、型情報ieの上
位ビット特性は全く設定されない。
op(e1,e2,...,en)31は、以下のように
目標式に変換される: 1.ソースのオペランドe1,e2,...,enは、再
帰的にこの方法を使用して、まず目標式t1,
t2,...,tnに翻訳される32。
マシンの演算33を使用して構築される: ・算術演算において使用される目標サブ式は、オペラン
ドの未使用ビットにおける値がその演算の結果の有効ビ
ットの値に影響し得る場合に、マスキング演算または符
号拡張演算に適用される。
する関係演算の場合、有効ビット列の値のみを使用し、
目標整数値におけるすべてのビットを使用する値を返す
単調演算を適用することで通常十分である。これの効率
的な例は、式eが与えられたときにe<<(r−w)を
返す演算である。ここで<<は、左シフト演算子であ
り、rおよびwは、eの表現および有効幅である。
調演算)をターゲットのオペランドの内部表現について
使用できる場合、最も安価な目標式を生じる演算が選択
される。
マスクされることが保証され得る場合にマスク上位ビッ
ト特性を設定することによって型情報ie(上記ステッ
プ2)から構築される;そして同様に、符号拡張上位ビ
ット特性は、演算の値が常に符号拡張されることが保証
され得る場合に設定される。このステップは、上記のよ
うに注目の算術演算子の第2の特性に依存する。
れ得るいくつかのデータ構造がある。適切な1つは、リ
ーフノードが原子式を表し、非リーフノードが演算子を
表すツリー構造である。
型情報を表すデータは、目標式の最終内部表現から取り
出される。
が定数、変数、および以下の演算子を伴う複合式を含む
と仮定する: ・単項演算子:!、〜、および−。これらの意味は、そ
れぞれC言語の単項演算子と同じである。なお、これら
の演算子のオペランドの型は、演算の値の型と同じであ
るという型規則を伴う。
*、/、%、&、|、∧、&&、||、==、!=、<
=、>=、<、>、<<、>>、>>、,および=,こ
れらのセマンティックスは、簡単のためにシフト(<<
および>>)がそれらの第1オペランドのビット幅より
大きい値によって定義されない点を除いてそれぞれのC
言語の2項演算子と同じである。また、以下の型ルール
を仮定する。
<、>>および,を除くすべての演算子のオペランド
は、それらが返す値と同じ型を有する; 2.関係演算子==、!=、<=、>=、<、および>
のオペランドは、同じタイプを有する; 3.<<および>>の第1オペランドは、それらが返す
値と同じ型を有する;<<および>>の第2オペランド
は、符号なしである; 4.第2オペランドは、それが返す値と同じ型を有す
る。
る。オペランドe2およびe3は、条件式によって返され
る値と同じ型を有する。
igned)および幅(w)をオペランドe1に与える
signed wまたはunsigned wのフォー
ムを有する。この演算の値は、オペランドe1が符号付
きかつwより幅が狭い場合、自動的に符号拡張される。
に簡単なマスキングおよび符号拡張演算が実施され得
る: マスキング 式<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)によっ
て示す。
合、型情報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から構築された型情報である。
フトされる前に符号付きrによって(論理シフトではな
く、算術演算右シフトを達成するために)型キャストさ
れる。最後の式は、その符号を維持するために符号なし
rによって型キャストされる。
用をm(e)で表す。
(e)を定義し、他方eが符号付きの場合、s(e)と
定義する。また、==、!=、<、<=、>および>=
を伴う関係演算の翻訳の間に必要な以下の単調演算を定
義する。
る式<it>tが与えられた場合、この演算は、以下を
返す: <i’t>(<it>t<< <iu>u) ここで、uはr−w、型情報i’tはit、有効幅r、お
よび表現幅rと同じ符号を有する。型情報iuは、符号
なしであり、有効幅rおよび表現幅rを有する。式eが
与えられた場合、この単調演算の適用をmn(e)で表
す。
算のより効率的な実施が可能であるが、上記の実施でも
本発明明細書中に記載される翻訳機構の正確さに対して
は十分である。
るために最適化変換を応用した技術を使用する。以下
は、演算に応用することのできる変換である:フォーム
tおよびmのマスク演算eは、以下のように最適化され
得る: ・tが定数kならば、eの値は、例えばlに計算され、
そしてeはlによって置換される。
でkは定数)ならば、kおよびmの値は、例えばlに計
算され、そしてeはt&lによって置換される。
のいずれか(または両方)が、例えばx’およびy’に
最適化され得る)ならば、eはx’&y’によって置換
される。同様の規則がフォームx|y、x∧y、z?
x:yの演算に対して適用される。
算eは、以下のように最適化され得る: ・tが定数kならば、eの値は、例えばlに計算され、
そしてeはlによって置換される。
数)ならば、k+uの値は、例えばlに計算され、そし
てeは(t<<l)>>uによって置換される。
または(y<<u)>>uのいずれか(または両方)
が、例えばx’およびy’に最適化され得る)ならば、
eはx’&y’によって置換される。同様の規則がフォ
ームx|y、x∧y、z?x:yの演算に対して適用さ
れる。
ように最適化され得る: ・tが定数kならば、eの値は、例えばlに計算され、
そしてeはlによって置換される。
数)ならば、k+uの値は、例えばlに計算され、そし
てeはt<<lによって置換される。
<uにいずれか(または両方)が、例えばx’および
y’に最適化され得る)ならば、eはx’&y’によっ
て置換される。同様の規則がフォームx|y、x∧y、
z?x:yの演算に対して適用される。
とが必要となることがあり得る。多くの式
e1,...,enが与えら得れた場合、e1,...,
enのうちで最も効率的に計算される可能性のある式を
表すために用語「e1,...,enのうちの最も安価な
もの」を使用する。また、eの計算およびそれに続く
e’の計算が最も効率的である可能性があるように式の
ペアについての用語:「(e1,e’1),...,(e
n,e’n)のうちの最も安価なものが(e1,
e’1),...,(en,e’n)における(e,
e’)の式のペアである」を定義する。目標式の効率の
良好な尺度は、その内部表現における演算子の数であ
る:最も安価な式は、演算子の数が最も少ない式であ
る。
あるのは、i2が符号なしの場合にマスク上位ビット特
性を設定することによって、およびi2が符号付きの場
合に符号拡張上位ビット特性を設定することによって、
i1をi2から構成する場合であるとする。
方法を説明する: ・上記のようにソース言語における定数および変数が目
標定数および変数に変換される。
れる: op(e1) まず、eの型から型情報itを構築し(itは上位ビット
特性を全く有さない)、次にオペランドe1を再帰的に
t1に変換する。式t1は、上記の内部表現によって表さ
れるので、その型化情報を用いて注釈をつけられる。必
要な目標式: <i’t>op(t’1) が次に構築される。ここで、演算子opが: !:式t’1は、t1の未使用ビットの値が!演算の結果
における有効ビット列に影響を与え得るので、マスクま
たは符号拡張される必要がある。したがって、式m(t
1)およびs(t1)が構築され、そしてt’1がその2
つのうちの安価な方となるよう選択される。型情報i’
tは、忠実にされた型情報itである。
る未使用ビットが〜演算の結果における有効ビット列に
影響を与えないので、単にtlである。型情報i’tは、
t1が符号拡張される場合かつその場合に限り符号拡張
特性を設定することによって、itから構築される。
かつ型情報i’tはitである。なぜなら、算術否定演算
−の値は、常にマスクおよび/または符号拡張されるこ
とが保証されないからである。
る場合: e1 op e2 まず、eの型から型情報itを構築し、オペランドe1お
よびe2をそれぞれt1およびt2に変換する。必要な目
標式は: <i’t>(t’1 op t’2) ここで、演算子opが: +、−、*:オペランドt’1およびt’2は、それぞれ
t1およびt2である。型情報i’tは、itである。
それぞれf(t1)およびf(t2)である。型情報i’
tは、忠実にされたitである。
(t1)およびs(t2)のうちのより安価な方である。
オペランドt’2は、m(t2)およびs(t2)のうち
のより安価な方である。型情報i’tは、忠実にされた
itである。
ぞれt1およびt2である。型情報i’tは、tlまたはt
2のいずれかがマスクされた場合にマスク特性を設定
し、次にtlおよびt2の両方が符号拡張された場合に符
号拡張特性を設定することによって、itから構築され
る。
それぞれt1およびt2である。型情報i’tは、tlおよ
びt2の両方がマスクされた場合にマスク特性を設定
し、次にtlおよびt2の両方が符号拡張された場合に符
号拡張特性を設定することによって、itから構築され
る。
のペアは、(m(t1),m(t2))、(s(t1),
s(t2))、および(mn(t1),mn(t2))の
うちの最も安価なものである。型情報i’tは、忠実に
されたitである。
(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
である。
れぞれ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から構築される。
れた場合: e1?e2:e3 まず、型情報itをeの型から構築し、次にオペランド
e1、e2、およびe3をそれぞれt1、t2,およびt3に
変換する。必要な目標式は: <i’t>(t’1?t2:t3) ここで、t’1は、m(t1)およびs(t1)の安価な
方である。型情報i’tは、t2およびt3の両方がマス
クされた場合にマスク特性を設定し、次にt2およびt3
の両方が符号拡張された場合に符号拡張特性を設定する
ことによって、itから構築される。
れる。stおよびrtをそれぞれItの有効幅および表現
幅として定義する。typesを必要な目標式の型とし
て定義する;すなわち、typetは、幅rtおよびty
pesの符号を有する。
る。s1およびr1をそれぞれt1の有効幅および表現幅
として定義する。
スク特性を設定し、次にt1が符号拡張された場合に符
号拡張特性を設定することによって、itから構築され
る。
は: <it>(typet)t1 である。
は: (a)rtがrlと同じならば、目標式は: <it (f(t1))>(typet)f(t1) であり、型情報it (f(t1))は、f(t1)がマスクされ
た場合にマスク特性を設定し、次にf(t1)が符号拡
張された場合に符号拡張特性を設定することによって、
itから構築される。これは、型情報it (f(t1))を忠実
にしない。なぜなら、f(t1)の符号は、typetに
おける符号と異なるからである。
式は: <i’t>(typet)f(t1) であり、ここでi’tは、忠実にされたitである。
テクチャによってシミュレーションされ得る目標式に翻
訳することによりこの方法を例示する: ((a(U5)+b(U5))*c(U5))/(d(U5)+
e(U5))。
数も「上位ビット特性なし」エントリと関連づける自明
上位ビット特性マッピングを構築する。
る。ソース式の型は符号なし5であり、目標アーキテク
チャは16ビットであり、以下の型情報が構築される:
るので、上記のデータは、この方法の再帰部分の間に各
サブ式に対して構築される。以下のように表記: <上位ビット特性>式を使用して、いくつかの特定の上
位ビット特性を注釈された所与の目標式を表す。
再帰的に構築される: 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) s01=c(U5) が、以下のようにt00およびt01に再帰的に翻訳され
る: i.ソース式s00から、2つのオペランド: s000=a(U5) s000=b(U5) が、単に各ソース変数に対する一意の目標変数を構築
し、以下を与えることによってt000およびt000に再帰
的に翻訳される: s000=<none>a(U5) s000=<none>b(U5)。
特性マッピングは、上記の変数には上位ビット特性を割
り当てず、そこでnoneを設定する。
で、2つのオペランドt000およびt0 01について値補正
演算子を適用する必要はない、そこで以下の目標式t00
が構築される: t00=<none>a(U16)+b(U16) 上位ビット特性は保証され得ず、そこでnoneを設定
する。
する一意の目標変数を単に構築し、以下を与えることに
よってt01へ再帰的に翻訳される: t01=<none>c(U16)。
特性マッピングは、上記変数に上位ビット特性を割り当
てず、そこでnoneを設定する。
で、2つのオペランドt00およびt01について値補正演
算子を適用する必要はない。そこで、以下の目標式t0
が構築される: t0=<none>((a(U16)+b(U16))*
c(U16))。
oneがセットされる。
ド: s10=d(U5) s11=e(U5) は、各ソース変数に対する一意の目標変数を単に構築
し、以下を与えることによってt10およびt11へ再帰的
に翻訳される: t10=<none>d(U16) t11=<none>e(U16)。
特性マッピングは、上記変数に上位ビット特性を割り当
てず、そこでnoneを設定する。
で、2つのオペランドt10およびt11について値補正演
算子を適用する必要はない。そこで、以下の目標式t1m
が構築される: t1=<none>(d(U5)+c(U5))。
oneを設定する。
標式t0およびt1は、以下を与えるマスキング値補正演
算に適用される: t0’=<masked>((a(U16)+b(U16))*c
(U16))&31(U16) t1’=<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))。
り出し、以下を与える: (((a(U16)+b(U16))*c(U16))&31(U16))/
((d(U16)+e(U1 6))&31(U16))。
算回路の高級記述の効率的なシミュレーションにおいて
使用される。図7は、Bachハードウェア設計フロー
の例を示す。ここでハードウェアは、Bach高級言語
で記述される。ハードウェア記述は、40で実施され、
Bachソースコードを生成する。ステップ41は、B
achハードウェア記述をシミュレーションし、上記の
方法を使用して、目標マシンの算術演算および/または
論理回路において実施される演算処理または式の翻訳を
提供する。シミュレーションの結果は、42で正確さに
ついて検査される。不正確であれば、新しいインプリメ
ンターションがステップ40において実行される。シミ
ュレーション結果が正確であるならば、ステップ43が
低級ハードウェア記述を生成し、次にその低級ハードウ
ェア記述は、公知または適切な技術を使用してシリコン
チップ44に変換される。
する能力があるだけの所定のデバイスを使用して、算術
演算および任意のビット幅の整数を伴う関係式の効率的
な計算を行う方法を提供することができる。
ど)の整数算術演算を計算することのできる、目標マシ
ンと呼ばれる所定のデバイスまたは機構に対して、上記
の方法は、任意の幅の整数を伴う算術演算式を特定の幅
の整数を伴う効率的な算術演算に翻訳する。
るフロー図である。
のコンピュータのブロック模式図である。
示する模式フロー図である。
標整数のビット構造を例示する図である。
る目標マシン式を表すための内部データ構造を例示する
図である。
する高級フロー図である。
および実施において図3の方法を使用する例を示す模式
フロー図である。
Claims (13)
- 【請求項1】 第1のビット幅の2進整数を含む少なく
とも1つのソースのオペランドに対するソースの演算
を、該第1のビット幅よりも大きい第2のビット幅の2
進整数に対して整数演算を実行するプロセッサによって
計算するために対応するターゲットの演算に翻訳する方
法であって、該方法が、 該ソースの演算を少なくとも1つのターゲットのオペラ
ンドを有するターゲットの演算に変換するステップと、 該ターゲットのオペランドの未使用ビットの値が該ター
ゲットの演算の値に影響を与えるかどうか、および、該
ターゲットのオペランドのいずれかが、不適切な値を持
つ1つ以上の未使用ビットを有してもよいかどうかを判
定するステップと、 該判定ステップの結果が真であった場合に、該ターゲッ
トの演算に対して補正演算を加えて、これにより、該タ
ーゲットの演算を実行する前に、不適切な値を持つ該1
つ以上のビットのそれぞれの値を補正するステップと、
を包含する、方法。 - 【請求項2】 前記少なくとも1つのソースのオペラン
ドが、少なくとも1つの定数を含む、請求項1に記載の
方法。 - 【請求項3】 前記少なくとも1つのソースのオペラン
ドが、少なくとも1つの変数を含む、請求項1に記載の
方法。 - 【請求項4】 前記少なくとも1つのソースのオペラン
ドが、少なくとも1つのサブ演算を含む、請求項1に記
載の方法。 - 【請求項5】 前記ソースの演算が、算術演算を含む、
請求項1に記載の方法。 - 【請求項6】 前記判定ステップが、符号なし非マスク
ターゲットのオペランドを特定するステップを包含し、
前記補正ステップが、マスクステップを包含する、請求
項5に記載の方法。 - 【請求項7】 前記第1のビット幅がwビットであり、
前記マスクステップが、前記符号なし非マスクターゲッ
トのオペランドと(2w−1)の2進数表現とに対して
ビット単位AND演算を実行するステップを包含する、
請求項6に記載の方法。 - 【請求項8】 前記判定ステップが、符号付き非符号拡
張ターゲットのオペランドを特定するステップを包含
し、前記補正ステップが、符号拡張ステップを包含す
る、請求項5に記載の方法。 - 【請求項9】 前記ソースの演算が関係演算を含み、前
記補正ステップが単調演算を含む、請求項1に記載の方
法。 - 【請求項10】 請求項1に記載の方法を実行するコン
ピュータプログラム。 - 【請求項11】 請求項10に記載のコンピュータプロ
グラムを記憶した記憶媒体。 - 【請求項12】 請求項10に記載のプログラムによっ
てプログラムされたコンピュータ。 - 【請求項13】 請求項1に記載の方法によって生成さ
れた翻訳生成物。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017146747A (ja) * | 2016-02-16 | 2017-08-24 | 日本電信電話株式会社 | 変換方法、変換プログラムおよび変換装置 |
Families Citing this family (4)
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)
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 |
-
1999
- 1999-10-05 GB GB9923379A patent/GB2355085A/en not_active Withdrawn
-
2000
- 2000-09-29 JP JP2000301391A patent/JP3755733B2/ja not_active Expired - Fee Related
- 2000-10-02 US US09/676,916 patent/US6817012B1/en not_active Expired - Fee Related
- 2000-10-04 DE DE60037229T patent/DE60037229T2/de not_active Expired - Lifetime
- 2000-10-04 EP EP00308712A patent/EP1091292B1/en not_active Expired - Lifetime
Cited By (1)
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 |