JPH09330210A - コンパイラにおける乗算実施方法 - Google Patents

コンパイラにおける乗算実施方法

Info

Publication number
JPH09330210A
JPH09330210A JP9047683A JP4768397A JPH09330210A JP H09330210 A JPH09330210 A JP H09330210A JP 9047683 A JP9047683 A JP 9047683A JP 4768397 A JP4768397 A JP 4768397A JP H09330210 A JPH09330210 A JP H09330210A
Authority
JP
Japan
Prior art keywords
src
instruction
sequence
multiplication
value
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
JP9047683A
Other languages
English (en)
Other versions
JP3727039B2 (ja
Inventor
Sullivan Brian
ブライアン・サリバン
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JPH09330210A publication Critical patent/JPH09330210A/ja
Application granted granted Critical
Publication of JP3727039B2 publication Critical patent/JP3727039B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • 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

Abstract

(57)【要約】 【課題】定数による乗算のような整数乗算演算をコンパ
イラにおいて実行するALU命令の効率的シーケンスを
生成する方法および装置を提供する。 【解決手段】特定の定数の各々を乗ずる乗算演算を実行
する命令シーケンスを表す1つの整数をあらかじめ定め
られた演算規則に従って生成し、それら整数をルックア
ップ・テーブルに記憶する。コンパイラは、乗数である
特定定数を入力値として受け取り、それを上記ルックア
ップ・テーブルへのインデックスとして使用し、インデ
ックス付けされたテーブル位置にある整数を上記ルック
アップ・テーブルから取り出し、取り出した整数を上記
あらかじめ定められた演算規則の逆算に従って上記命令
シーケンスに展開し、展開した命令シーケンスによって
上記入力値に関する乗算演算を実行し、上記乗算演算の
結果を出力する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータに関
するもので、特に、ソース・コード・コンパイルの際に
コンピュータによって実行される乗算演算に関するもの
である。
【0002】
【従来の技術】既知の定数Xによる整数乗算が、整数乗
算に関するハードウェア命令を持たないプロセッサ上で
短いシーケンスの命令を使用して実行されることが多
い。(以下、演算論理機構をArithmetic and Logical Un
itの頭文字をとって「ALU」と呼称する)。従来技術
のアプローチは、コンパイル段階でこれらのシーケンス
を探索する探索アルゴリズムの使用を伴う。探索アルゴ
リズムが非常に複雑であるので、コンパイラの探索の範
囲を狭くするのに役立つように種々の発見的手法(Heuri
sitics)が使用される。あいにく、これらの発見的手法
は、コンパイラが乗算を実施するため効率の悪いALU
命令シーケンスを使用する原因となることが多い。その
ような場合、コンパイラによって作成される実行可能プ
ログラムは、最適でない形態で動作する。
【0003】更に、特定の整数定数に関して、コンパイ
ル時探索アルゴリズムは、乗算を実施する合理的ALU
命令シーケンスを見出すことができない。そのような場
合には、乗算シーケンスは実行時サブルーチンを使用し
て実行されなければならない。実行時のサブルーチンの
使用は、アプリケーションの処理性能を極めて悪化させ
る。
【0004】整数乗算および除算演算を実行する種々の
技術が提案されてきた。例えば、T.Granlund, P. Montg
omery両氏は、その著"Division By Invariant Integers
using Multiplication, Association of Computing Ma
chinery, 0-89791-662x/94/0006(1994)"で、整数乗算を
使用する任意の非ゼロ整数定数および実行時不変式とし
て除算用コード・シーケンスを提示する整数除算を達成
するアルゴリズムを開示している。このアルゴリズム
は、整数積の上方半分が迅速にアクセスできることを必
要とする2の補数アーキテクチャを仮定する。
【0005】R. Bernstein氏は,その著" Multiplicatio
n by Integer Constants, Software- Practice and Exp
erience, vol. 16(7), pp. 641-652, John Wiley & Son
s,Ltd.(1986)"で、レジスタの内容に整数定数を乗算す
るため、「加算」、「減算」および「シフト」のシーケ
ンスを見出す方法を開示している。Bernstein氏は,、所
望の限度までのすべての数について小さい星連鎖シーケ
ンスのテーブルを構築するための(上記文献において引
用されている)Knuth氏によって提案された方法を考察し
ている。Bernstein氏は、そのようなテーブルを記憶す
るために必要な空間が膨大であり、Knuth氏によって提
案された方法が命令セットのタイミングに敏感であり、
そのような方法を使用して構築されるテーブルは目標コ
ンピュータの命令セットに依存するものとなると結論づ
けている。このように、既存の技術は整数乗算演算のた
めテーブルを使用することを奨励していない。
【0006】
【発明が解決しようとする課題】かくして、整数乗算演
算を実行するためALU命令の効率的なシーケンスを生
成する問題を解決する技術の提供が求められている。
【0007】
【課題を解決するための手段】本発明は、定数による乗
算のような整数乗算演算を実行するALU命令の効率的
シーケンスを生成する問題を解決する。本発明は、目標
アーキテクチャに関して最も効率的な命令シーケンスを
保有するルックアップ・テーブルを使用して、既知の定
数Xによる整数乗算を実現する。本発明は、短いシーケ
ンスのALU命令を記憶するために使用することができ
るコンパクトな符号化手段を提供する。ヒューレット・
パッカード社のPA−RISCアーキテクチャに関して
は、そのようなコンパクトな符号化手段は、最高8個ま
での(64ビット未満の)ALU命令からなるシーケンス
を記憶することができる。
【0008】本発明が構築するルックアップ・テーブル
を使用することによって、既知の定数による整数乗算を
実行するために必要なALU命令の最も効率的なシーケ
ンスをコンパイラは常に生成することができる。本発明
の好ましい実施形態において、既知の定数オペランドは
ルックアップ・テーブルへのインデックスとして使用さ
れ、そこから1つの64ビット整数が取り出される。次
に、この64ビット整数が、Xによる整数乗算を実行す
る短いALU命令シーケンスに展開される。特定の整数
Xについて最も効率的なシーケンスのALU命令を計算
することは計算量の観点から非常に高価であるけれど
も、ルックアップ・テーブルの値は特定のアーキテクチ
ャについてただ一度だけ決定すればよい。
【0009】発明の課題を解決する手段として、本発明
は、コンパイラにおいて乗算演算を実行する命令シーケ
ンスを含むルックアップ・テーブルを作成するステッ
プ、上記コンパイラへの入力値を提供するステップ、上
記入力値を上記ルックアップ・テーブルへのインデック
スとして使用するステップ、上記入力値によってインデ
ックス付けされたテーブル位置にある整数を上記ルック
アップ・テーブルから取り出すステップ、上記取り出し
た整数を上記命令シーケンスに変換するステップ、上記
コンパイラを用いて上記命令シーケンスを実行して、上
記入力値に関する乗算演算を実行するステップ、および
上記乗算演算の結果を出力値として提供するステップか
らなるコンパイラにおける乗算実施方法を含む。
【0010】
【発明の実施の形態】本発明は、定数の乗算のような整
数乗算演算を実行するためALU命令の効率的なシーケ
ンスを生成する問題を解決する。所与の整数Xに関して
ALU命令の最も効率的なシーケンスを決定するために
使用されるコンパイル時の簡単なルックアップ・テーブ
ルを提供する。
【0011】図1は、単一プロセッサ・コンピュータの
アーキテクチャ10を示す。プロセッサ11は、システ
ム・バス15と通信するキャッシュ12を含む。システ
ム・メモリ13および1つまたは複数のI/O装置14
もまたシステム・バスと通信する。コンパイル操作にお
いて、ユーザは、コンピュータ上で動くプログラムであ
るコンパイラにソース・コード・プログラムを入力す
る。コンパイラは、ソース・コードを受け取り、コード
を処理して、(図のコンピュータ・アーキテクチャ10
のような)目標コンピュータのアーキテクチャに対して
最適化された実行可能ファイルを生成する。
【0012】図2は、例えば図1で示されたコンピュー
タ・アーキテクチャ10と関連して使用される場合があ
るソフトウェア・コンパイラ20を示す。コンパイラ・
フロントエンド・コンポーネント21が、ソース・コー
ド・ファイル100を読み取り、それを高水準中間表示
形式(HLIR)110に翻訳する。高水準最適化プログ
ラム(HLO)22が、高水準中間表示形式110を一層
効率的な形式に最適化する。コード生成ルーチン23
が、最適化された高水準中間表示形式を低水準中間表示
形式(LLIR)120に変換する。低水準最適化ルーチ
ン(LLO)24が、低水準中間表示形式120を一層効
率的な(機械による実行可能な)形式に変換する。最後
に、オブジェクト・ファイル生成ルーチン25が、最適
化された低水準中間表示形式をオブジェクト・ファイル
141に書き出す。オブジェクト・ファイル141は、
他のオブジェクト・ファイル140とともにリンカ26
によって処理され、コンピュータ10上で実行させるこ
とができる実行可能ファイル150が生成される。現代
のコンピュータ・アーキテクチャにおいては、コンパイ
ラは多くのタスクを実行する。例えば、コンパイラは、
Cのような高水準言語を一連の機械命令に翻訳する。コ
ンパイラによって実行される諸タスクの中の1つは、乗
算のような整数演算を伴う高水準式の処理を行うことで
ある。
【0013】乗算演算は非常に一般的である。例えば、
Vが変数であるとして59×Vのような乗算演算を含む
式がプログラムの中にあるかもしれない。そのような場
合、コンパイラはそのような乗算演算を実行する方法を
決定しなければならない。既存のコンパイラは、上記の
例のような乗算の場合、59が出力であるようにシフト
加算(shift and add)命令を合成する方法を決定するた
めに発見的手法を使用する。その後、1つの入力Vが命
令の1つのシーケンスに対して提示され、最終的な命令
の出力がV×59となる。
【0014】上で示したように、コンパイラによって使
用される実行時アルゴリズムの1つは、発見的手法を使
用して探索する探索アルゴリズムである。本発明は、探
索を実行する代わりに、入力値をテーブルへのインデッ
クスとして使用し(すなわち、例えば59という入力値
を例えばテーブルの中の59番目のエレメントへのイン
デックスとして使用し)、そこから整数を取り出し、そ
の整数に対してあらかじめ定められた演算シーケンスを
実行することによって整数をいくつかのより小さい整数
に展開する。これらのより小さい整数の各々は、例えば
加算(add)、シフト(shift)、減算(subtract)のような1
つの命令に対応付けされる。更に、監視文字を使用し
て、プロセスが停止しなければならない位置が標示され
る。コンパイラが監視文字に出会う前に生成する最後の
命令の結果が、所望の結果(すなわちV×59)である。
しかし、本発明の代替的実施形態においては、あらかじ
め決められた最大実行命令数を受けとることがプロセス
の終了を示すようにすることもできる。そのようなケー
スでは、監視文字は必要とされない。
【0015】整数演算シーケンスを見出すための探索に
要する1回のコストが計算上高価な指数アルゴリズムで
あるため、各整数毎にすべての解を事前計算するオフラ
イン処理を使用して、本発明のテーブルは構築される。
テーブルは、目標アーキテクチャに関して最も短く最も
最適な命令シーケンスを単一の整数として記憶する。次
に、この単一整数がコンパイラによって展開され、特定
の定数に関する最適な命令シーケンスが取り出される。
【0016】各シーケンスは基本的には1つの整数に圧
縮することができるので、テーブルに必要な記憶容量は
最小限のものである。-216(すなわち-65,536)から+2
16(すなわち+65,536)までのすべての整数に関して解が
与えられる本発明の好ましい実施形態において、必要と
されることは、テーブルにインデックスを付け、記憶さ
れた整数を取り出し、整数を最高8個の命令シーケンス
に分解し、1つの変数値を入力してそれに特定の既知の
定数を乗ずる整数乗算演算を実行することだけである。
テーブルをより大きくまたはより小さくすることは可能
である。PA−RISCアーキテクチャにとって64ビ
ット整数が自然なサイズであるので、64ビットの整数
が有用である。しかし、そのように制限しなければなら
ないわけではなく、例えば120ビットまたはそれ以上
のサイズを使用することは可能である。
【0017】本発明は、ある特定の所与の定数整数に関
して1つのシーケンスを事前計算する。例えば、5を乗
算することが必要であれば、"SHIFT 2 and ADD"(2回シ
フトして加算の意味であり本明細書において以下同様の
表記法を用いる)を使用して、オリジナルのソース・オ
ペランドを2回シフトすなわち4倍し、その結果にオリ
ジナルのソース・オペランドが加算され、4プラス1倍
すなわち5倍される。同様に、"SHIFT 3 and ADD"によ
って9が、"SHIFT 1 and ADD"によって3が生成され
る。
【0018】前述の整数演算を実行するために必要な命
令のすべては、典型的には、実行時コードを用いてルッ
クアップ・テーブルとして記憶するには大き過ぎる。各
命令が、オリジナルのソース・オペランドであろうと実
行に従って生成される一時的オペランデあろうと種々の
オペランドを使用することができるような8個の命令が
あるとすれば、そのためのルックアップ・テーブルを提
供することは難しい。数と8個の命令の間の対応付は通
常難しく、膨大な量の記憶空間が必要となる。本発明の
1つの利点は、テーブルがコンパイラと関連づけられる
ということである。従って、コンパイル時に、特定の乗
算演算を実行する最適な方法を決定するために費やす時
間は少ない。これは、コンパイラのコンパイル速度の向
上に貢献する。
【0019】更に、単一整数毎に完全に最適なシーケン
スを生成することが必要であるので、本発明のルックア
ップ・テーブルを生成するプロセスはオフラインで実施
することができる。対照的に、既知のコンパイラは、発
見的手法を使用して特定の整数による乗算の方法を決定
することを試み、結果として1つのシーケンスにたどり
着くことができるかもしれない。しかし、1つの乗算演
算を実行することができる何百ものシーケンスが存在す
るので、そのようなシーケンスが最善のシーケンスでな
い可能性がある。ルックアップ・テーブルを提供するこ
とによって、本発明は、生成される命令のツリーの高さ
を最小にし、それによって、特定のアーキテクチャに関
するいくつかの命令を並列して発することができる。従
って、2つまたはそれ以上のALUが存在すれば、その
複数のALUが並列して動作し後刻最終結果を組み合わ
せるように、特定のアーキテクチャにとって理想的なテ
ーブル、少なくとも2つの命令を同時に発することがで
きるシーケンスを生成することが可能である。
【0020】乗算はコンパイラが実行すべき基本動作で
あるので、本発明はコンパイラの低水準最適化ルーチン
と関連する。特定の整数による乗算の方法に関するサブ
ルーチンを提供することが必要とされる場合、本発明の
テーブルはコンパイラがハードディスクから読むことが
できる補助ファイルであるようにすることもできる。ま
た、頻繁にアクセスされるならば、テーブルはキャッシ
ュに記憶してもよい。
【0021】図3は、本発明に従って整数乗算または除
算シーケンスを記憶するためのコンパクトな符号化を実
施するコンパイル・システムのブロック図である。この
コンパクトな符号化は以下のように行われる。先ず、整
数乗算結果を計算するため所与のアーキテクチャ上で使
用可能なすべてのALU命令コード(opcode)が列挙され
る(ステップ200)。ヒューレット・パッカード社のP
A−RISCアーキテクチャに関する限り、これらの命
令コードは、add、sub、sh1add、 sh2add、 sh3add、 n
egおよびshlである。但し、命令コードnegは、PA−R
ISCアーキテクチャではゼロにハード的に設定されて
いるr0からの減算を使用して実施され、shlについては
特別の形式の命令コードか実際には使用される。
【0022】上記の命令コードは、3つのオペランドを
持つ命令コードと2つのオペランドを持つ命令コードに
分類される(ステップ210)。3オペランド命令コード
は、2つの入力を受け取り、1つの出力を生成する命令
コードであり、add、sub、sh1add、sh2add、sh3addを含
む。2オペランド命令コードは、1つの入力を受け取
り、1つの出力を生成する命令コードであり、negを含
む。左シフト命令コードshlは、汎用レジスタ入力、定
数整数入力および出力を持つ3オペランド命令コードで
ある。しかし、shlは、本発明の目的のため、命令コー
ドshl1、shl2、shl3、shl4,...shl30、shl31というよう
に1から31までの定数整数入力を持つ31種の2オペ
ランド命令コードとして取り扱われる。更に、最初の命
令コードnopは、ALU命令のシーケンスの終了にマー
クをつける監視文字として予約される(220)。本発明
の好ましい実施形態であるPA−RISC上での実施の
ため、次の表1のようにALU命令コードおよびそれら
に特定の命令コード番号が与えられる。
【0023】
【表1】 nop = 0, shl7 = 13, shl2O = 26, sh3add = 1, shl8 = 14, shl2l = 27, sh2add = 2, shl9 = 15, shl22 = 28, sh1add = 3, shIlO = 16, shl23 = 29, sub = 4, shl11 = 17, shl24 = 30, add = 5, shl12 = 18, shl25 = 31, neg = 6, shl13 = 19, shl26 = 32, shl1 = 7, shl14 = 20, shl27 = 33, shl2 = 8, shl15 = 21, shl28 = 34, shl3 = 9, shl16 = 22, shl29 = 35, shl4 = 10, shl17 = 23, shl3O = 36, shl5 = 11, shl18 = 24, shl31 = 37, shl6 = 12, shl19 = 25.
【0024】次に、2つの入力および1つの出力を持つ
3オペランド命令コードの範囲が記録される(ステップ
230)。残りは、入力も出力オペランドもない監視文
字命令コードを除いて、1つの入力および1つの出力を
持つ2オペランド命令コードである。本発明のPA‐R
ISC実施形態においては、2入力および1出力を持つ
3オペランド命令コードの範囲は、1(sh1add)から5(a
dd)までの番号が与えられた命令コードである。
【0025】ある1つのALU命令シーケンスに関し
て、本発明は、シーケンスの最初の命令は、レベル1命
令と呼び、8番目の命令はレベル8命令と呼ぶ。同様
に、1命令(からなる)シーケンスはレベル1シーケン
ス、8命令(からなる)シーケンスはレベル8シーケンス
と呼ぶ。
【0026】レベル1命令に関して可能な入力はただ1
つであり、それは乗算演算で使用される未知の変数値で
ある。この未知の値をUと呼ぶ。かくして、ALU命令
シーケンスへの64ビット整数の展開が実行される際
(ステップ240)、命令を形成するため単一の入力値U
を使用することができる。ALU命令が展開されるにつ
れ、展開される各レベル毎に使用可能な1つの入力が追
加される。レベル1命令の結果はL1と呼ぶ。同様に、
レベル2命令の結果はL2と呼ぶ。
【0027】コンパクト符号化方式は、あらゆるレベル
でそのレベルで可能なすべての命令を列挙することが可
能であるという特性を持つ。レベル1のadd命令に関し
ては、次のような符号がただ1つ使用可能である。add
U,U,L1PA−RISC実施形態に関する限り、レベル1
において、監視文字用に1つおよび各命令コード毎に1
つ、計38のユニークな符号が存在する。
【0028】次のレベルでは、入力としてオリジナルの
未知の値Uかまたはレベル1命令によって新たに計算さ
れた結果のいずれかを使用することが可能である。従っ
て、addのような2入力命令コードについては、2×2
すなわち4つの可能な符号が存在する。各レベルで異な
る符号を挙げる時add命令が交換的性質を持つという事
実を利用することは必要でない。レベル2add命令に関
して、次の4つの異なる符号が使用可能である。 add U,U,L2 add U,L1,L2 add L1,U,L2 add L1,L1,L2 本発明のPA−RISC実施形態に関する限り、レベル
2において85のユニークな符号が存在する。これらの
符号は、レベルの二乗(22=4)をとり、この値を2入力を
持つ命令コードの数に乗ずる(5×4=20)ことによっ
て、計算することができる。すなわち、本発明のPA−
RISC実施形態においては20の可能な命令がある。
1入力を持つ命令の数がこの値に加えられる。各々が2
つの可能な入力を持つ命令は37−5=32あり、従っ
て、32×2=64の1入力命令がある。シーケンス監
視文字命令のため1が合計に加えられる。
【0029】次の表2は、各レベルについてのユニーク
な符号の数を示す。
【0030】
【表2】 当該レベルでのレベル 2入力命令 1入力命令 監視命令 ユニークな符号の数 1 12x5=5 1x32=32 1 5+ 32+1=38 2 22x5=20 2x32=64 1 20+ 64+1=85 3 32x5=45 3x32=96 1 45+ 96+1=142 4 42x5=80 4x32=128 1 80+128+1=209 5 52x5=125 5x32=160 1 125+160+1=286 6 62x5=180 6x32=192 1 180+192+1=373 7 72x5=245 7x32=224 1 245+224+1=470 8 82x5=320 8x32=256 1 320+256+1=577
【0031】一旦すべての可能な符号がわかれば(ステ
ップ260)、整数をALU命令シーケンスに展開する
ことができる。
【0032】図4ないし図6は、本発明に従って整数を
ALU命令シーケンスに変換するアルゴリズムを示す。
64ビットの整数を最高8つまでのALU命令からなる
シーケンスに変換するアルゴリズムは次の通りである。
Xによる整数乗算を実行するALU命令シーケンスを表
現するオリジナルの64ビット整数をS0と呼ぶ(ステ
ップ300)。図3を参照して上述されたようにレベル
・テーブルを計算する(ステップ310)。上記のレベル
・テーブルにおける各レベルでの符号化のための値は、
E1=38, E2=85, E3 =142, E4=209....E8 =577のように表
す。次の式に基づいて、8つの命令を記憶するために必
要とされるビット数を計算することができる。 ceiling (log2(E1×E2....×E8)) 次の表3の剰余と被除数を計算する(ステップ320)。
以下の計算では、除算演算は整数の商を生成する、すな
わち除算演算から生じる端数部分は破棄されると仮定す
る。
【0033】
【表3】
【0034】剰余R1ないしR8の各々は、該当するレベ
ルでの命令を表す。R1はレベル1のために使用される
命令番号を表し、R8はレベル8に使用される命令番号
を表す。剰余は命令に対応付けされる(ステップ33
0)。剰余R1からレベル1命令への対応付(ステップ3
40)はそれほど重要でない。レベル1については剰余
1の値は命令コード番号である。Uの値は、レベル1
命令に対するすべての入力に関して使用される。
【0035】剰余R2からレベル2命令への対応付け(ス
テップ350)は次の通りである。剰余R2が0に等しい
場合、ALU命令シーケンスの終了に目印をつける監視
文字にその剰余を対応付けする。ゼロでなければQ2
2−1とする。Q2の値が22×5未満であれば、2入
力命令コードを使用することとして(ステップ360)、
2/22+1を対応するALU命令コード番号とし、Q2
rem2の値を第1の入力値とし、(Q2/2)rem2
の値を第2の入力値とする(ステップ370)。但し、上
記剰余の値が0であればUを入力として使用し、上記剰
余の値が1であればL1を入力として使用する。Q2
値が22×5以上であれば、P2=Q2−22×5として、
1入力命令コードを使用することとして(ステップ36
0)、P2/2+6を対応する命令コード番号を表す整数
とし、P2rem2をその入力の値とする(ステップ38
0)。
【0036】剰余R3からレベル3命令への対応付け(ス
テップ390)は次の通りである。剰余R3が0に等しい
場合、ALU命令シーケンスの終了に目印をつける監視
文字にその剰余を対応付けする。ゼロでなければQ3
3−1に等しくする。Q3の値が32×5未満であれ
ば、2入力命令コードを使用することとして(ステップ
400)、Q3/32+1を対応するALU命令コード番号
を表す整数とし(ステップ420)、Q3rem3の値を
第1の入力値とし、(Q3/3)rem3の値を第2の入
力値とし、上記剰余の値が0であればUを入力として使
用し、上記剰余の値が1であればL1を入力として使用
し、上記剰余の値が2であればL2を入力として使用す
る(ステップ420)。Q3の値が32×5以上であれば、
3=Q3−32×5として、1入力命令コードを使用する
こととして(ステップ400)、P3/3+6を対応する
命令コードを表す整数とし、P3rem3をその入力の
値とする(ステップ410)。
【0037】レベル4ないし8に関する対応付けは、本
質的に上述のレベル2および3に関するものと同じであ
る。どのレベルにおいても監視命令が命令として出現す
れば(ステップ430)、それはALU命令の終了の標示
である(ステップ440)。それ以上の展開は必要でな
い。生成される乗算結果は、常に、シーケンスの最後の
命令によって生成される結果である(ステップ460)。
さもなければ、最後の命令に出会うまでプロセスは続行
する(ステップ450)。本発明のこの実施形態におい
て、仮に8つの命令に出会った後なお監視文字に出会わ
ないとすれば、シーケンスは終了する。
【0038】上述の通り、既知の定数による整数乗算を
実施する効率的なALU命令シーケンを探索するために
時間を費やすことがないので、本発明は一層迅速なコン
パイル時間を提供する。本発明は、所与の定数に関して
事前に計算された解をコンパイラが探し出すことを可能
にする。本発明は、また、多数の定数に対して命令のよ
り効率的なシーケンスが与えられるので、より速い実行
時処理性能を提供する。本発明は、また、一層複雑な探
索アルゴリズムを使用して、ALU命令の短いシーケン
スを見つけ出すことを可能にする。なぜならば、本発明
は、探索アルゴリズムからの結果を記憶するルックアッ
プ・テーブルを使用するからである。
【0039】以下に、本発明の好ましい実施形態である
PA−RISCアーキテクチャに関する種々の乗算演算
のサンプルを示す。5を乗ずる乗算の好ましいシーケン
スは、次の通り。 SH2ADD%src,%src,%t1 ; %t1=%src*5 icost=1, dcost=1, count=1 6を乗ずる乗算の好ましいシーケンスは、次の通り。 SH1ADD%src,%src,%t1 ; %t1=%src*3 SHL1%t1,%t2; %t2= %src*6 icost=2, dcost=1, count=1 7を乗ずる乗算の好ましいシーケンスは、次の通り。 SH2ADD%src,%src,%t1 ; %t1=%src*5 SH1ADD%src,%t1,%t2; %t2=%src*7 icost=2, dcost=2, count=5 8を乗ずる乗算の好ましいシーケンスは、次の通り。 SHL3%src,%t1; %t1=%src*8 icost=1, dcost=O, count=1 9を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1 ; %t1=%src*9 icost=1, dcost=1, count=1 10を乗ずる乗算の好ましいシーケンスは、次の通り。 SH2ADD%src,%src,%t1 ; %t1=%src*5 SHL1%t1,%t2; %t2=%src*10 icost=2, dcost=1, count=1 11を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1 ; %t1=%src*9 SH1ADD%src,%t1,%t2; %t2=%src*11 icost=2, dcost=2, count=3 12を乗ずる乗算の好ましいシーケンスは、次の通り。 SH1ADD%src,%src,%t1 ; %t1=%src*3 SHL2%t1,%t2; %t2=%src*12 icost=2, dcost=1, count=1
【0040】13を乗ずる乗算の好ましいシーケンス
は、次の通り。 SH3ADD%src,%src,%t1 ; %t1=%src*9 SH2ADD%src,%t1,%t2; %t2=%src*13 icost=2, dcost=2, count=3 14を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1 ; %t1=%src*9 SH2ADD%src,%t1,%t2; %t2=%src*5 ADD%t1,%t2%t3; %t3=%src*14 icost=3, dcost=2, count=15 15を乗ずる乗算の好ましいシーケンスは、次の通り。 SH2ADD%src,%src,%t1; %t1=%src*5 SH1ADD%t1,%t1,%t2; %t2=%src*15 icost=2, dcost=2, count=3 16を乗ずる乗算の好ましいシーケンスは、次の通り。 SHL4%src,%t1; %t1=%src*16 icost=1, dcost=1, count=1 17を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH3ADD%src,%t1,%t2; %t2=%src*17 icost=2, dcost=2, count=7 18を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SHL1%t1,%t2; %t2=%src*18 icost=2, dcost=1, count=1 19を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH1ADD%t1,%t1,%t2; %t2=%src*19 icost=2, dcost=2, count=1
【0041】20を乗ずる乗算の好ましいシーケンス
は、次の通り。 SH2ADD%src,%src,%t1; %t1=%src*5 SHL2%t1,%t2; %t2=%src*20 icost=2, dcost=1, count=1 21を乗ずる乗算の好ましいシーケンスは、次の通り。 SH2ADD%src,%src,%t1 ; %t1=%src*5 SH2ADD%t1,%src,%t2; %t2=%src*21 icost=2, dcost=2, count=1 123を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH2ADD%src,%src,%t2 ; %t2=%src*5 SUB%t2,%t1,%t3; %t3=%src*123 icost=3, dcost=2, count=1 1671を乗ずる乗算の好ましいシーケンスは、次の通
り。 SHL10%src,%t1; %t1=%src*1024 SH3ADD%src,%src,%t2; %t2=%src*9 SUB%src,%t1,%t3; %t3=%src*1023 SH3ADD%t2,%t2,%t4; %t4=%src*81 SH3ADD%t4,%t3,%t5; %t5=%src*1671 icost=5, dcost=2, count=1 23517を乗ずる乗算の好ましいシーケンスは、次の
通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH3ADD%t1,%t1,%t2; %t2=%src*81 SH3ADD%src,%t1,%t3; %t3=%src*17 SH3ADD%t2,%src,%t4; %t4=%src*649 SH2ADD%t4,%t3,%t5; %t5=%src*2613 SH3ADD%t5,%t5,%t6; %t6=%src*23517 icost=6, dcost=4, count=115
【0042】2を乗ずる乗算の好ましいシーケンスは、
次の通り。 SHL1%src,%t1 ; %t1=%src*2 icost=1, dcost=O, count=1 3を乗ずる乗算の好ましいシーケンスは、次の通り。 SH1ADD%src,%src,%t1 ; %t1= %src*3 icost=1, dcost=1, count=1 6を乗ずる乗算の好ましいシーケンスは、次の通り。 SH1ADD%src,%src,%t1 ; %t1= %src*3 SHL1%t1,%t2 ; %t2=%src*6 icost=2, dcost=1, count=1 11を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH1ADD%src,%t1,%t2 ; %t2= %src*11 icost=2, dcost=2, count=3 22を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH1ADD%src,%t1,%t2 ; %t2= %src*11 SHL1%t2,%t3 ; %t3=%src*22 icost=3, dcost=2, count=8 43を乗ずる乗算の好ましいシーケンスは、次の通り。 SH2ADD%src,%src,%t1; %t1=%src*5 SH1ADD%src,%src,%t2; %t2=%src*3 SH3ADD%t1,%t2,%t3; %t3=%src*43 icost=3, dcost=2, count=2 86を乗ずる乗算の好ましいシーケンスは、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH2ADD%src,%src,%t2; %t2=%src*5 SH3ADD%t1,%t1,%t3; %t3=%src*81 ADD%t2,%t3,%t4; %t4=%src*86 icost=4, dcost=2, count=8
【0043】171を乗ずる乗算の好ましいシーケンス
は、次の通り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH3ADD%t1,%t1,%t2; %t2=%src*81 SH1ADD%t2,%t1,%t3; %t3=%src*171 icost=3, dcost=3. count=2 173を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH2ADD%src,%src,%t1; %t1=%src*5 SH2ADD%t1,%src,%t2; %t2=%src*21 SH3ADD%t2,%t1,%t3; %t3=%src*173 icost=3, dcost=3, count=1 342を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH3ADD%t1,%t1,%t2; %t2=%src*81 SH1ADD%t2,%t1,%t3; %t3=%src*171 SHL1%t3,%t4; %t4=src*342 icost=4, dcost=3, count=11 346を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH3ADD%src,%src,%t1; %t1=%src*9 SHL8%src,%t2; %t2=src*256 SH2ADD%t1,%t1,%t3; %t3=src*45 SH1ADD%t3,%t2,%t4; %t4=%src*346 icost=4, dcost=3, count=8 683を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH3ADD%src,%t1,%t2; %t2=%src*17 SH3ADD%t1,%t1,%t3; %t3=%src*81 SH1ADD%t1,%t2,%t4; %t4=%src*35 SH3ADD%t3,%t4,%t5; %t5=%src*683 icost=5, dcost=3, count=158
【0044】1867を乗ずる乗算の好ましいシーケン
スは、次の通り。 SHL6%src,%t1; %t1=%src*64 SUB%t1,%src,%t2; %t2=%src*-63 SH1ADD%t2,%t2,%t4; %t4=%src*-189 SH3ADD%t3,%t4,%t5; %t5=%src*1867 icost=5, dcost=3, count=1 1366を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH3ADD%src,%src,%t1; %t1=%src*9 SHL10%src,%t2; %t2=%src*1024 H3ADD%t1,%t1,%t3; %t3=%src*81 SH1ADD%t1,%t2,%t4; %t4=%src*1024 SH2ADD%t3,%t4,%t5; %t5=%src*1366 icost=5, dcost=3, count=17 3734を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH3ADD%src,%src,%t1; %t1=%src*9 SH1ADD%src,%t1,%t2; %t2=%src*11 SH1ADD%t1,%t2,%t3; %t3=%src*29 SHL7%t3,%t4; %t4=%src*3712 SH1ADD%t2,%t4,%t5; %t5=%src*3734 icost=5, dcost=5, count=5 2731を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH2ADD%src,%src,%t1; %t1=%src*5 SHL5%t1,%t2; %t2=%src*320 SH1ADD%t1,%src,%t3; %t3=%src*11 SH2ADD%t1,%t2,%t4; %t4=%src*340 SH3ADD%t4,%t3,%t5; %t5=%src*2731 icost=5, dcost=3, count=2
【0045】10452を乗ずる乗算の好ましいシーケ
ンスは、次の通り。 SHL6%src,%t1; %t1=%src*64 SH3ADD%t1,%src,%t2; %t2=%src*513 SH1ADD%t1,%t1,%t3; %t3=%src*192 SH2ADD%t2,%t2,%t4; %t4=%src*2565 SH2ADD%t4,%t3,%t5; %t5=%src*10452 icost=5, dcost=3, count=1 5462を乗ずる乗算の好ましいシーケンスは、次の通
り。 SH2ADD%src,%src,%t1; %t1=%src*5 SH2ADD%t1,%src,%t2; %t2=%src*21 SHL8%t2,%t3; %t3=%src*5376 SH1ADD%t2,%src,%t4; %t4=%src*43 SH1ADD%t4,%t3,%t5; %t5=%src*5462 icost=5, dcost=4, count=12 59を乗ずる乗算の好ましいシーケンスは、次の通り。 SHL6%src,%t1; %t1=%src*64 SH2ADD%src,%src,%t2; %t2=%src*5 SUB%t2,%t1,%t3; %t3=%src*59
【0046】以上、本発明を好ましい実施形態を参照し
て記述したが、本発明の理念および有効範囲を逸脱する
ことなく種々の修正または変更を行うことが可能である
点は容易に認められることであろう。
【0047】本発明には、例として次のような実施様態
が含まれる。 (1)コンパイラにおける乗算演算を実施する方法であ
って、上記コンパイラにおける上記乗算演算を実行する
命令シーケンスを含むルックアップ・テーブルを作成す
るステップと、上記コンパイラへの入力値を提供するス
テップと、上記入力値を上記ルックアップ・テーブルへ
のインデックスとして使用するステップと、上記入力値
によってインデックス付けされたテーブル位置にある整
数を上記ルックアップ・テーブルから取り出すステップ
と、上記取り出した整数を上記命令シーケンスに変換す
るステップと、上記コンパイラを用いて上記命令シーケ
ンスを実行して、上記入力値に関する乗算演算を実行す
るステップと、上記乗算演算の結果を出力値として提供
するステップと、を含むコンパイラにおける乗算実施方
法。 (2)上記命令シーケンスの終了を示す監視命令を上記
命令シーケンスに含めるステップを更に含む、上記
(1)に記載のコンパイラにおける乗算実施方法。 (3)上記監視命令に出会う前に実行される最後の命令
によって生成される結果を上記出力値として提供するス
テップを更に含む、上記(2)に記載のコンパイラにお
ける乗算実施方法。
【0048】(4)コンパイラにおける乗算演算を実施
する装置であって、上記コンパイラにおける上記乗算演
算を実行する命令シーケンスを含み、上記コンパイラに
よって使用されるルックアップ・テーブルと、上記コン
パイラへの入力値を使用して上記ルックアップ・テーブ
ルへインデックス付けする手段と、上記入力値によって
インデックス付けされたテーブル位置にある整数を上記
ルックアップ・テーブルから取り出す手段と、上記取り
出した整数を上記命令シーケンスに変換する手段と、を
備え、上記コンパイラが上記命令シーケンスを実行し
て、上記入力値に関する乗算演算を実行し乗算演算の結
果の出力値を提供する、コンパイラにおける乗算実施装
置。 (5)上記命令シーケンスの終了を示す監視命令を更に
備える、上記(4)に記載のコンパイラにおける乗算実
施装置。 (6)上記監視命令に出会う前に実行される最後の命令
によって生成される結果を上記出力値として上記コンパ
イラが提供する、上記(5)に記載のコンパイラにおけ
る乗算実施装置。
【0049】(7)コンパイラにおける乗算演算を実施
する方法であって、所与のアーキテクチャ上で乗算結果
を計算するために使用可能な各ALU命令コードを列挙
するステップと、上記命令シーケンスの第N番目の命令
がレベルN命令であり、N個の命令からなるシーケンス
をレベルN命令シーケンスとして、各レベル毎に上記A
LU命令コードを符号化してルックアップ・テーブルに
書き込むステップと、を含むコンパイラにおける乗算演
算実施方法。 (8)上記命令コードを、2つの入力を受け取り1つの
出力を生成する命令コード、および1つの入力を受け取
り1つの出力を生成する命令コードに分類するステップ
と、ALU命令シーケンスの終了にマークをつける監視
文字として上記命令コードの1つを予約するステップ
と、2入力および1出力を持つ命令コードの範囲を数え
上げて記録するステップと、を含む上記(7)に記載の
コンパイラにおける乗算演算実施方法。 (9)上記コンパイラを使用して、入力値によって上記
ルックアップ・テーブルにインデックス付けするステッ
プと、インデックス付けされたルックアップ・テーブル
位置にある上記符号化されたALU命令を、対応するA
LU命令シーケンスに展開するステップと、を含む上記
(7)に記載のコンパイラにおける乗算演算実施方法。 (10)符号化する上記ステップが、上記レベルに対応
する数を二乗した値に、2入力を持つ命令コードの数を
乗算し、その結果の積に1入力を持つ命令コードの数を
加算し、その合計に監視文字を定義するための1を加え
ることを含む、上記(7)に記載のコンパイラにおける
乗算演算実施方法。 (11)すべての可能な符号化を確定した後ALU命令
シーケンスの各々を表す整数を生成するステップを更に
含む上記(7)に記載のコンパイラにおける乗算演算実
施方法。
【0050】(12)コンパイラにおける乗算演算を実
施する装置であって、所与のアーキテクチャ上で乗算結
果を計算するため使用可能な各ALU命令コードを列挙
する手段と、上記命令シーケンスの第N番目の命令がレ
ベルN命令であり、N個の命令からなるシーケンスをレ
ベルN命令シーケンスとして、各レベル毎に符号化され
た上記ALU命令コードを記憶するルックアップ・テー
ブルと、を備えるコンパイラにおける乗算演算実施装
置。 (13)上記命令コードが、2つの入力を受け取り1つ
の出力を生成する命令コード、および1つの入力を受け
取り1つの出力を生成する命令コードに分類され、AL
U命令シーケンスの終了にマークをつける監視文字とし
て上記命令コードの1つが予約され、2入力および1出
力を持つ命令コードの範囲が数え上げられ記録される、
上記(12)に記載のコンパイラにおける乗算演算実施
装置。 (14)上記ルックアップ・テーブルにインデックス付
けするため上記コンパイラによって使用される入力値
と、インデックス付けされたルックアップ・テーブル位
置にある上記符号化されたALU命令を、対応するAL
U命令シーケンスに展開する手段と、を更に備える上記
(12)に記載のコンパイラにおける乗算演算実施装
置。 (15)上記レベルに対応する数を二乗した値に、2入
力を持つ命令コードの数を乗算し、その結果の積に1入
力を持つ命令コードの数を加算し、その合計に監視文字
用の1を加えることによって上記ALU命令コードが符
号化される、上記(13)に記載のコンパイラにおける
乗算演算実施装置。 (16)すべての可能な符号化を確定した後ALU命令
シーケンスの各々を表す整数を生成する手段を更に備え
る上記(12)に記載のコンパイラにおける乗算演算実
施装置。
【0051】(17)1つの整数をALU命令シーケン
スに展開する方法であって、入力値Uを使用して、該入
力値に定数値Xを乗ずる乗算演算を実行するALU命令
シーケンスを表す整数をS0と名付けるステップと、上
記命令シーケンスの第N番目の命令がレベルN命令であ
り、N個の命令からなるシーケンスをレベルN命令シー
ケンスとして、各レベルにおけるALU命令符号化値を
含むレベル・テーブルを計算するステップと、剰余の各
々がALU命令を表す剰余および被除数を計算するステ
ップと、上記剰余を上記ALU命令に対応づけるステッ
プと、上記ALU命令シーケンスを実行して乗算結果を
生成するステップと、を含む乗算命令シーケンス展開方
法。 (18)上記第1の剰余R1の値が命令コード番号であ
り、Uの値がすべてのレベル1命令に対する入力である
ように上記第1の剰余R1からレベル1命令への対応付
けを行うステップを更に含む、上記(17)に記載の乗
算命令シーケンス展開方法。 (19)第2の剰余R2が0に等しい場合、ALU命令
シーケンスの終了に目印をつける監視文字にその剰余を
対応付けし、ゼロでなければQ2=R2−1とし、Q2
値が22×5未満であれば、2入力命令コードを使用する
こととして、Q2/22+1が対応するALU命令コード
番号であり、Q2rem2の値が第1の入力値であり、
(Q2/2)rem2の値が第2の入力値であり、上記剰
余の値が第1の値であればUを入力として使用し、上記
剰余の値が第2の値であればレベル1演算結果L1を入
力として使用し、第2の剰余R2が0に等しくない場
合、P2=Q2−22×5として、1入力命令コードを使用
することとして、P2/2+6を対応する命令コード番
号とし、P2rem2をその入力の値とするように、第
2の剰余R2からレベル2命令への対応付けを行うステ
ップを含む、上記(17)に記載の乗算命令シーケンス
展開方法。 (20)第N番目のの剰余RNが0に等しい場合、AL
U命令シーケンスの終了に目印をつける監視文字にその
剰余を対応付けし、ゼロでなければQN=RN−1とし、
Nの値が2N×5未満であれば、2入力命令コードを使
用することとして、QN/N2+1が対応するALU命令
コード番号であり、QNremNの値が第1の入力値で
あり、(QN/N)remNの値が第2の入力値であり、
上記剰余の値が第1の値であればUを入力として使用
し、上記剰余の値が第2の値であればレベル1演算結果
L1を入力として使用し、第N番目の剰余RNが0に等
しくない場合、PN=QN-1−N2×5として、1入力命令
コードを使用することとして、PN/N+6を対応する
命令コード番号とし、PNremNをその入力の値とす
るように、第N番目の剰余RNからレベルN命令への対
応付けを行うステップを含む、上記(17)に記載の乗
算命令シーケンス展開方法。
【0052】(21)1つの整数をALU命令シーケン
スに展開する装置であって、上記命令シーケンスの第N
番目の命令がレベルN命令であり、N個の命令からなる
シーケンスをレベルN命令シーケンスとして、各レベル
におけるALU命令符号化値を含むレベル・テーブル
と、入力値Uを使用して、該入力値に定数値Xを乗ずる
乗算演算を実行するALU命令シーケンスを表す整数を
0と名付ける手段と、剰余の各々がALU命令を表す
剰余および被除数を計算する手段と、上記剰余を上記A
LU命令に対応づける手段と、上記ALU命令シーケン
スを実行して乗算結果を生成する手段と、を備える乗算
命令シーケンス展開装置。 (22)上記第1の剰余R1の値が命令コード番号であ
り、Uの値がすべてのレベル1命令に対する入力である
ように、上記第1の剰余R1からレベル1命令への対応
付けを行う手段を更に備える、上記(21)に記載の乗
算命令シーケンス展開装置。 (23)第2の剰余R2が0に等しい場合、ALU命令
シーケンスの終了に目印をつける監視文字にその剰余を
対応付けし、ゼロでなければQ2=R2−1とし、Q2
値が22×5未満であれば、2入力命令コードを使用する
こととして、Q2/22+1が対応するALU命令コード
番号であり、Q2rem2の値が第1の入力値であり、
(Q2/2)rem2の値が第2の入力値とし、上記剰余
の値が第1の値であればUを入力として使用し、上記剰
余の値が第2の値であればレベル1演算結果L1を入力
として使用し、第2の剰余R2が0に等しくない場合、
2=Q2−22×5として、1入力命令コードを使用する
こととして、P2/2+6が対応する命令コード番号で
あり、P2rem2がその入力の値であるように、第2
の剰余R2からレベル2命令への対応付けを行う手段を
更に備える、上記(21)に記載の乗算命令シーケンス
展開装置。 (24)第N番目のの剰余RNが0に等しい場合、AL
U命令シーケンスの終了に目印をつける監視文字にその
剰余を対応付けし、ゼロでなければQN=RN−1とし、
Nの値が2N×5未満であれば、2入力命令コードを使
用することとして、QN/N2+1が対応するALU命令
コード番号であり、QNremNの値が第1の入力値で
あり、(QN/N)remNの値が第2の入力値であり、
上記剰余の値が第1の値であればUを入力として使用
し、上記剰余の値が第2の値であればレベル1演算結果
L1を入力として使用し、第N番目の剰余RNが0に等
しくない場合、PN=QN-1−N2×5として、1入力命令
コードを使用することとして、PN/N+6が対応する
命令コード番号であり、PNremNがその入力の値で
あるように、第N番目の剰余RNからレベルN命令への
対応付けを行う手段を更に備える上記(21)に記載の
乗算命令シーケンス展開装置。
【0053】
【発明の効果】既知の定数による整数乗算を実施する効
率的なALU命令シーケンを探索するために時間を費や
す必要がないので、本発明は迅速なコンパイル時間を実
現する。本発明は、また、多数の定数に対して効率的な
命令シーケンスを与えられるので、迅速な実行時処理性
能を提供する。
【図面の簡単な説明】
【図1】単一プロセッサのコンピュータ・アーキテクチ
ャを示すブロック図である。
【図2】図1で示されたコンピュータ・アーキテクチャ
と関連して使用される場合があるソフトウェア・コンパ
イラのブロック図である。
【図3】本発明に従って整数乗算または除算シーケンス
を記憶するコンパクトな符号化方式を実施するコンパイ
ル・システムの動作の流れ図である。
【図4】図5および図6とともに、本発明に従って整数
をALU命令シーケンスに変換するアルゴリズムの動作
の流れ図である。
【図5】図4および図6とともに、本発明に従って整数
をALU命令シーケンスに変換するアルゴリズムの動作
の流れ図である。
【図6】図4および図5とともに、本発明に従って整数
をALU命令シーケンスに変換するアルゴリズムの動作
の流れ図である。
【符号の説明】
10 コンピュータ・アーキテクチャ 11 プロセッサ 12 キャッシュ 13 メモリ 14 入出力 15 システム・バス 21 コンパイラ・フロントエンド・コンポーネン
ト 22 高水準オブジェクト(HLO) 23 コード生成ルーチン 24 低水準最適化ルーチン(LLO) 25 オブジェクト・ファイル生成ルーチン 26 リンカ 100 ソース・コード 110 高水準中間表示形式(HLIR) 120 低水準中間表示形式(LLIR) 140、141 オブジェクト・ファイル 150 実行可能ファイル

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】コンパイラにおける乗算演算を実施する方
    法であって、 上記コンパイラにおける上記乗算演算を実行する命令シ
    ーケンスを含むルックアップ・テーブルを作成するステ
    ップと、 上記コンパイラへの入力値を提供するステップと、 上記入力値を上記ルックアップ・テーブルへのインデッ
    クスとして使用するステップと、 上記入力値によってインデックス付けされたテーブル位
    置にある整数を上記ルックアップ・テーブルから取り出
    すステップと、 上記取り出した整数を上記命令シーケンスに変換するス
    テップと、 上記コンパイラを用いて上記命令シーケンスを実行し
    て、上記入力値に関する乗算演算を実行するステップ
    と、 上記乗算演算の結果を出力値として提供するステップ
    と、 を含むコンパイラにおける乗算実施方法。
JP04768397A 1996-03-18 1997-03-03 コンパイラにおける乗算実施方法 Expired - Lifetime JP3727039B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/618,276 US5764990A (en) 1996-03-18 1996-03-18 Compact encoding for storing integer multiplication Sequences
US618,276 1996-03-18

Publications (2)

Publication Number Publication Date
JPH09330210A true JPH09330210A (ja) 1997-12-22
JP3727039B2 JP3727039B2 (ja) 2005-12-14

Family

ID=24477045

Family Applications (1)

Application Number Title Priority Date Filing Date
JP04768397A Expired - Lifetime JP3727039B2 (ja) 1996-03-18 1997-03-03 コンパイラにおける乗算実施方法

Country Status (2)

Country Link
US (1) US5764990A (ja)
JP (1) JP3727039B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6341300B1 (en) 1999-01-29 2002-01-22 Sun Microsystems, Inc. Parallel fixed point square root and reciprocal square root computation unit in a processor
US6351760B1 (en) 1999-01-29 2002-02-26 Sun Microsystems, Inc. Division unit in a processor using a piece-wise quadratic approximation technique
US7395300B2 (en) * 2004-01-27 2008-07-01 Broadcom Corporation System, and method for calculating product of constant and mixed number power of two

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5170475A (en) * 1989-03-06 1992-12-08 Motorola, Inc. Data processor having instructions for interpolating between memory-resident data values respectively
US5184317A (en) * 1989-06-14 1993-02-02 Pickett Lester C Method and apparatus for generating mathematical functions
US5337415A (en) * 1992-12-04 1994-08-09 Hewlett-Packard Company Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency
US5687360A (en) * 1995-04-28 1997-11-11 Intel Corporation Branch predictor using multiple prediction heuristics and a heuristic identifier in the branch instruction

Also Published As

Publication number Publication date
US5764990A (en) 1998-06-09
JP3727039B2 (ja) 2005-12-14

Similar Documents

Publication Publication Date Title
CN110036368B (zh) 用于执行算术运算以累加浮点数的装置及方法
Bernstein Multiplication by integer constants
US6192516B1 (en) Interpreter generation and implementation utilizing interpreter states and register caching
JP2011165216A (ja) 複数の入力命令をベクトル化する方法及び装置
JP7096828B2 (ja) 入力オペランド値を処理するための装置及び方法
JPH02217926A (ja) コード生成方法
US7406589B2 (en) Processor having efficient function estimate instructions
US7051060B2 (en) Operand conversion optimization
Magenheimer et al. Integer multiplication and division on the HP precision architecture
US7478363B2 (en) Method for translating a given source program into an object program containing computing expressions
US20060184602A1 (en) Data processing apparatus and method for performing a reciprocal operation on an input value to produce a result value
KR20080096306A (ko) 규칙에 기반하여 스케일링 쉬프트의 최적의 위치를 찾는컴파일 방법 및 시스템
US6202203B1 (en) Method of, system for, and computer program product for providing global value numbering
US5805489A (en) Digital microprocessor device having variable-delay division hardware
JP3727039B2 (ja) コンパイラにおける乗算実施方法
EP3921942A1 (en) Encoding special value in anchored-data element
US5696713A (en) Method for faster division by known divisor while maintaining desired accuracy
US20060253522A1 (en) Large number mutpilication method and device
CN116382782A (zh) 向量运算方法、向量运算器、电子设备和存储介质
US7114151B2 (en) Code conversion method and apparatus
JP6897213B2 (ja) コード生成装置、コード生成方法及びコード生成プログラム
WO2020161470A1 (en) Anchored data element conversion
GB2355085A (en) Translating a source operation to a target operation
Van de Snepscheut Inversion of a recursive tree traversal
JP4327533B2 (ja) 演算処理プログラム、演算処理方法、および演算処理装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050428

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050510

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050803

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050926

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20091007

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20101007

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20111007

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20121007

Year of fee payment: 7