JP4712247B2 - 整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システム - Google Patents
整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システム Download PDFInfo
- Publication number
- JP4712247B2 JP4712247B2 JP2001263425A JP2001263425A JP4712247B2 JP 4712247 B2 JP4712247 B2 JP 4712247B2 JP 2001263425 A JP2001263425 A JP 2001263425A JP 2001263425 A JP2001263425 A JP 2001263425A JP 4712247 B2 JP4712247 B2 JP 4712247B2
- Authority
- JP
- Japan
- Prior art keywords
- integer
- int
- code
- compiler
- object code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/52—Multiplying; Dividing
- G06F7/535—Dividing only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/535—Indexing scheme relating to groups G06F7/535 - G06F7/5375
- G06F2207/5356—Via reciprocal, i.e. calculate reciprocal only, or calculate reciprocal first and then the quotient from the reciprocal and the numerator
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Microcomputers (AREA)
Description
【発明の属する技術分野】
本発明は,整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システムに関し,特に,マイクロプロセッサの整数除算または整数剰余算に要する演算サイクル数を大幅に削減することができるコンパイラを有する開発システムに関する。
【0002】
【従来の技術】
マイクロプロセッサにとって,四則演算のうち除算や除算を伴う剰余算は,多くの演算サイクルを必要とする。例えば,32ビットの無符号演算の場合,一般的なプロセッサでは,足し算や引き算は1サイクル,乗算が2サイクルで実行可能であるのに対して,除算は18〜34サイクル程度を必要とする。
【0003】
除算が遅い理由は,除算器向けのアルゴリズムに短い演算サイクルで実現できるものがなく,筆算と同様の引き戻し法が採用されることが多いからである。筆算の引き戻し法では,被除数のビット数分の演算サイクルを必要とする。
【0004】
図1は,引き戻し法による除算の例を示す図である。6ビットの被除数「001110」を2ビットの除数「11」で割り算を行う場合,被除数から除数「11」を引いてみて,引くことができれば「1」,引くことができなければ「0」として,この演算サイクルを被除算の桁数回繰り返すことで,除算を完了する。即ち,図1中のサイクルS1〜S6の合計6サイクルにより,6ビットの被除算の演算を終了することができる。この方法では,被除数が32ビットの場合は,単純に32サイクルを必要とすることになる。
【0005】
別の除算例では,1サイクルに処理できるビット数を1ビットではなく,2ビット,3ビットに増やす方法がある。この場合は,被除数に対して一度に2ビット処理するためには,除数「11」×1,除数「11」×2,除数「11」×3を被除数から引くことができるか否かを判断して,それぞれ答えを,「01」「10」「11」とすることになる。従って,除算器のハードウエア構成がより複雑化し,それに伴い消費電力の増大を招く。
【0006】
別の除算例として,被除数の上位ビットの「0」の有無をチェックし,最初に「1」が検出されたところから,前述の引き戻し法による除算を行う方法もある。このようなリードゼロ法は,上位ビットの「0」をチェックするハードウエアが必要となると共に,実行サイクルが被除数によって異なることになり,除算演算のスケジュール管理が困難になるという問題を招いている。
【0007】
アプリケーションプログラムにおいて,除算演算を除数の逆数と被除数の乗算に置き換えてプログラムコードを作成することで,無駄な除算をなくすことが知られている。従って,アプリケーションプログラムを解析してアセンブリコード(オブジェクトコードに対応するコード)に変換するコンパイラが,この手法に従ってアプリケーションプログラム内の除算演算を除数の逆数と被除数の乗算に置き換えることが考えられる。
【0008】
しかし,コンパイラは,アプリケーションプログラムを記述したプログラマが除算演算の有効桁をどのようにしようとしているかを知ることができないので,このような置き換えは,あまり好ましいとはいえない。
【0009】
上記に加えて,マイクロプロセッサの高周波数化に伴い,除算器の構成を複雑にすることは余り好ましくない。高周波数化に伴い,1サイクルの周期が短くなり,複雑な構成の除算器ではサイクル内にその演算を終了することは困難になるからである。
【0010】
【発明が解決しようとする課題】
そこで,本発明の目的は,マイクロプロセッサの整数除算または整数剰余算に要する演算サイクル数を大幅に減らすことができるコンパイラを有するシステムを提供することにある。
【0011】
本発明の別の目的は,マイクロプロセッサの整数除算または整数剰余算に要する演算サイクル数を大幅に減らすことができるコンパイラを提供することにある。
【0012】
本発明の別の目的は,マイクロプロセッサの整数除算または整数剰余算に要する演算サイクル数を大幅に減らしたアセンブリコードを有するマイクロプロセッサを提供することにある。
【0013】
更に,本発明の別の目的は,マイクロプロセッサの整数除算または整数剰余算に要する演算サイクル数を大幅に減らしたアセンブリコードを有するマイクロプロセッサシステムを提供することにある。
【0014】
【課題を解決するための手段】
上記の目的を達成するために,本発明の第1の側面は,
Nビットで表される整数aを整数の定数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算する第1の手順と,当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを生成する第2の手順とを有するコンパイラと,
前記第1のレジスタと乗算器と加減器とを含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有するシステムである。
【0015】
上記発明によれば,ソースコードを,プロセッサが実行可能なアセンブリコードなどのオブジェクトコードに変換するコンパイラが,整数除算q=int(a÷b)に対して,
mb=int(m÷b)(但しm=2N)を演算し,
その定数mbを所定のレジスタに格納するオブジェクトコードを埋め込んで,更に,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを生成する。
【0016】
従って,コンパイラにより変換された整数除算q=int(a÷b)に対するオブジェクトコードには,レジスタへの格納と,乗算と,引き算と,Nビットシフト算(÷m)と,比較及び分岐とが含まれるのみである。かかるオブジェクトコードをプロセッサが実行すれば,通常の除算ステップがないので,大幅に演算サイクルを減らして整数除算q=int(a÷b)を処理することができる。
【0017】
上記の目的を達成するために,本発明の第2の側面は,
Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算する第1の手順と,当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを生成する第2の手順とを有するコンパイラと,
前記第1のレジスタと乗算器と加減器とを含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有するシステムである。
【0018】
上記発明によれば,ソースコードを,プロセッサが実行可能なアセンブリコードなどのオブジェクトコードに変換するコンパイラが,整数剰余算q=int(a mod b)に対して,
mb=int(m÷b)(但しm=2N)を演算し,
その定数mbを所定のレジスタに格納するオブジェクトコードを埋め込んで,更に,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを生成する。
【0019】
従って,コンパイラにより変換された整数剰余算q=int(a mod b)に対するオブジェクトコードには,レジスタへの格納と,乗算と,引き算と,Nビットシフト算(÷m)と,比較及び分岐とが含まれるのみである。かかるオブジェクトコードをプロセッサが実行すれば,通常の除算ステップがないので,大幅に演算サイクルを減らして整数剰余算q=int(a mod b)を処理することができる。
【0020】
上記の第1及び第2の側面において,より好ましい実施例では,乗算値a×mbが倍精度(a,mbがNビットの場合,乗算値が2Nビット)で上位及び下位のレジスタに格納された時の当該上位のレジスタ値を,qx=int(a×mb÷m)とすることで,前記Nビットシフト算(÷m)の演算サイクルをなくすことができる。
【0021】
上記の第1及び第2の側面において,より好ましい実施例では,コンパイラは,整数a,bが符号付整数であっても,同様に除算器を用いないオブジェクトコードに変換することができる。つまり,a,b両方が負の場合は,a,b両方の符号を正に変換して上記のオブジェクトコードを生成すれば良く,a,bの一方が負の場合は,負の符号を正に変換して上記演算を行いその後演算結果に負の符号を付加するオブジェクトコードにすれば良いからである。但し,整数aの符号ビットを判定するオブジェクトコードが必要になる。尚,整数bは定数であれば,コンパイラはその符号を確認することができ,除数bの符号に応じてオブジェクトコードを生成することができる。
【0022】
上記第1及び第2の側面の発明は,マイクロプロセッサの開発システムとして利用できる。マイクロプロセッサの開発段階では,評価用マイクロプロセッサと,それに命令コードであるオブジェクトコードを供給する命令コードメモリと,ソースプログラムをオブジェクトコードに変換するコンパイラとを有する開発システムにおいて,開発中のソースプログラムをオブジェクトコードに変換して評価用マイクロプロセッサに実行させ,所望の機能が達成されるか否かの評価を行う。このコンパイラにより変換されたオブジェクトコードであれば,整数除算または整数剰余算を,短い演算サイクルで実行することができる。
【0023】
上記第1及び第2の側面の発明は,通常のマイクロプロセッサを有するシステムとしても利用できる。このシステムによれば,コンパイラがソースプログラム内の整数除算または整数剰余算を,短い演算サイクルで実行可能なオブジェクトコードに変換することができ,マイクロプロセッサによる実行時間を大幅に削減することができる。
【0024】
【発明の実施の形態】
以下,図面を参照して本発明の実施の形態例を説明する。しかしながら,本発明の保護範囲は,以下の実施の形態例に限定されるものではなく,特許請求の範囲に記載された発明とその均等物にまで及ぶものである。
【0025】
図2は,本実施の形態例におけるマイクロプロセッサを有するシステムの全体構成図である。マイクロプロセッサの開発段階では,評価用マイクロプロセッサ10に外部のメモリ6に格納したアセンブリコードなどのオブジェクトコードを実行させて,所望の機能を達成することができるかの評価を行う。この評価用マイクロプロセッサは,量産用マイクロプロセッサと同等の機能回路と評価に必要な評価用回路とを有し,開発中のソースプログラム2をコンパイラ4で変換したオブジェクトコードを実行する。
【0026】
図2において,評価用マイクロプロセッサ10は,内部バス20を介して接続される演算部11と,汎用レジスタ22と,データが一時的に格納されるロード・ストア回路30とを有し,更に,プログラムカウンタ26と,ロードした命令コードを解読して命令に対応する制御信号S28を生成する命令解読器28とを有する。
【0027】
図2に示された評価用マイクロプロセッサ10は,実質的に量産用マイクロプロセッサをも示している。或いは,量産用マイクロプロセッサには,図2に示された評価用マイクロプロセッサ10に,オブジェクトコード(命令コード)を格納するメモリ6が内蔵される場合がある。いずれの場合も,評価用マイクロプロセッサ10の演算部11は,量産用マイクロプロセッサの演算部と同じ構成である。そして,その演算部11は,例えば乗算器14と,加減器16と,シフター18と,除算器12とを有する。
【0028】
本実施の形態例におけるマイクロプロセッサ10の特徴的な点は,後述する整数定数mbを格納するmbレジスタ24が設けられていることにある。かかるmbレジスタ24は,整数除算や整数剰余算を行う時に,オブジェクトコードの実行に伴って,コンパイラによりあらかじめ求められたmb値がロードされるレジスタである。従って,mbレジスタ24は,ハードウエア上の所定のアドレスに固定的に設けられていても良く,或いは,汎用レジスタ22内の特定のレジスタをmbレジスタに割り当てても良い。更に,mbレジスタをメモリ30内に割り当てても良い。そして,mbレジスタの数は複数に及ぶ場合もある。後述するとおり,本実施の形態では,この整数定数mbをコンパイラ4があらかじめ求めて,mbレジスタ24に格納することで,整数除算及び整数剰余算を,一般的な除算命令を実行して除算器が長い実行サイクルをかけて除算を行う場合よりも,短い実行サイクルで行うことができる。
【0029】
本実施の形態のシステムは,評価用マイクロプロセッサ10に加えて,開発中のソースプログラムファイル2と,そのソースプログラムを解釈してマイクロプロセッサが実行可能なアセンブリコードに変換するコンパイラ(一種のプログラム)4と,コンパイラ4により変換されたアセンブリコード(オブジェクトコード)を記憶する命令コードメモリ6とを有する。命令コードメモリ6は,マイクロプロセッサ10内の命令解読器28からアセンブリコードを読み出されるように,命令解読器28に接続されている。ここでアセンブリコードとは,本明細書ではマイクロプロセッサが実行可能なプログラムコードであり,オブジェクトコードと実質的に同じものをさす。従って,本明細書内では,コンパイラ4により変換されて命令コードメモリ6に格納されたアセンブリコードは,しばしばオブジェクトコードとも称する。
【0030】
マイクロプロセッサの開発段階では,C言語などの高級言語によるソースプログラム2にて,マイクロプロセッサが実行するプログラムを開発する。開発中のソースプログラム2は,コンパイラ4にてアセンブリコードに変換されて,命令コードメモリ6に格納される。そして,評価用マイクロプロセッサ10が,その命令コードメモリ6に格納されたアセンブリコードを実行し,所望の機能が達成されるか否かの評価が行われる。
【0031】
そして,ソースプログラムの開発が完了すると,コンパイラ4が変換したアセンブリコード(即ちオブジェクトコード)が量産用マイクロプロセッサの内蔵ROM若しくは外付けROMに焼き付けられ,ROM内蔵の量産用マイクロプロセッサ若しくは外付けROMを有するマイクロプロセッサシステムが生産される。
【0032】
また,本実施の形態のシステムは,マイクロプロセッサ開発用システムとしてではなく,通常のマイクロプロセッサを有するシステムとしても利用できる。その場合,アプリケーションであるソースプログラム2に対して,コンパイラ4がアセンブリコードに変換し,それがマイクロプロセッサ10により実行される。
【0033】
[整数除算]
さて,本実施の形態では,コンパイラ4が,Nビットで表される無符号の整数aを無符号の整数bで除す無符号整数除算q=int(a÷b)(int()は,括弧内の小数点以下を切り捨てる関数である)を,除算器による除算命令を含まないアセンブリコードに変換する。従って,ソースプログラム内の無符号整数除算命令が除算命令を伴わない一連のコードからなるアセンブリコードに変換されるので,そのアセンブリコードをマイクロプロセッサ10が実行すると,無符号整数除算命令が,少ない演算サイクル数で実行可能になる。
【0034】
具体的な原理は次の通りである。Nビットで表される無符号の整数aを無符号の整数bで除す無符号整数除算q=int(a÷b)を計算する時,整数bが定数であるならば,m=2Nを用いてmb値を
mb=int(m÷b)
として,
qx=int(a×mb÷m)
を導入すると,
求める除算値qは,
q=qx (a/b−qx<1,即ちa−qx×b<bの時) (1)
q=qx+1(a/b−qx≧1,即ちa−qx×b≧bの時) (2)
となる。つまり,除算値qは,qxと等しいか,qxに+1の補正を加えたqx+1に等しいかのいずれかである。
【0035】
除算値qがqxに等しい場合と,qx+1に等しい場合とが発生する理由のは,次の通りである。除算値qは,関数intにより実数a/bの小数点以下が切り捨てられている。従って,次の関係が成り立つ。
【0036】
0≦a/b−q<1 (3)
更に,qx値は,mb=int(m÷b)に1未満の誤差が発生し,
qx=int((a/m)×mb)
によりその1未満の誤差はqxに対してa/m倍の誤差になる。更に,qxの関数intにより1未満の誤差を有するので,結局,次の関係が成り立つ。
【0037】
0≦a/b−qx<1+a/m<2 (4)
そこで,除算値qと値qxとの間の誤差,q−qxは,
q−qx=(a/b−qx)−(a/b−q)
であり,この式に上記(3)(4)を代入して,
−1<q−qx<1+a/m<2 (但しa/m<1)
となる。即ち,q,qxは共に整数であるから,q−qxは0または1になり,従って,除算値qは,値qxと等しいか,qx+1に等しいかの2通りが存在することになる。
【0038】
結論として,
a/b−qx<1,即ちa−qx×b<bの時は,q=qx (1)
a/b−qx≧1,即ちa−qx×b≧bの時は,q=qx+1(2)
となる。
【0039】
そこで,コンパイラ4が,ソースプログラム2の中に整数除算q=int(a÷b)を検出したら,コンパイラ4がmb=int(m÷b)を演算し,求めたmb値をmbレジスタにセットするアセンブラコードを生成し,更に,コンパイラ4が,qx=int(a×mb÷m)を求めるアセンブラコードと,(rx=a−qx×b)を求めるアセンブラコードと,(rx=a−qx×b)とbとを比較して,上記(1)(2)に従って除算結果qを求めるアセンブラコードとを生成する。
【0040】
このようにして生成されたアセンブラコードには,(÷m)を除いて除算命令が含まれておらず,乗算,加算,減算のみで実行可能である。そして,(÷m)は1/2Nであるので,除算命令でなくシフト命令で実行可能である。更に付け加えれば,このシフト命令も,乗算命令(a×mb)を実行した結果が格納されるの上位ビットレジスタの値を採用することにより,省略することができる。
【0041】
図3は,本実施の形態における整数除算のコンパイル例を示す図である。上記の原理に従って,コンパイラ4は,ソースプログラム2内に整数除算q=int(a÷b)が検出されると,mb値を演算すると共に,図示されたアセンブリコードASMを生成する。
【0042】
ここに示されたアセンブリコードASMは,順番に説明すると,mb値(#mb)をmbレジスタに格納するコード(set),乗算コード(mul),減算コード(sub),比較コード(cmp),より大きいか否かの判断コード(bgt),加算コード(addi),そしてラベル(end)を有する。アセンブリコード内のr1〜r7は汎用レジスタを示し,mbはmbレジスタを示し,;以下はコメントである。このアセンブリコードの説明は,後述する。
【0043】
図4は,本実施の形態におけるコンパイラのフローチャート図である。コンパイラ4は,ソースコードの構文を解釈して,マイクロプロセッサが実行可能なアセンブリコードに変換する。図4に従って説明すると,ソースコードが終了するまで(S100),ソースコードの構文解析を行う(S102)。そして,整数除算が検出されるまでは(S104),構文解析したソースコードをアセンブリコードに変換を繰り返す(S106)。
【0044】
コンパイラは,ソースコード内に整数除算であるq=int(a÷b)(bは定数)を検出すると,mb=int(m/b)(m=2N)の演算を実行し(S108),更に,上記演算で求めたmb値をmbレジスタに格納するセットコード(set)を生成して,初期化ブロックに記述する(S114)。このセットコードは,図3中のコードc1に対応する。更に,コンパイラは,整数除算のq=int(a÷b)に対する7行のアセンブリコード(図3中のコードc3〜c9)を生成し,実行本体に記述する(S112)。
【0045】
図5は,図3に示されたアセンブリコードASMのフローチャート図である。図3のアセンブリコードに沿ってそれぞれのコードの機能について説明する。コードc1は,コンパイラがコンパイル時に求めたmb値#mbをmbレジスタに格納する命令コードである。このコードc1は,ソースプログラム内に複数の整数除算が存在する場合は,それぞれに対応したmbレジスタの設定を行うか,それぞれの整数除算のアセンブリコードの手前に埋め込まれる必要がある。
【0046】
次に,アセンブリコードASMは,整数除算に対応する7行のコードc3〜c9を有する。整数除算の実行時の前提として,整数aは汎用レジスタr1に,整数bは汎用レジスタr2にそれぞれ格納されているものとする。コードc3は,レジスタr1の被除数aとレジスタmbの定数#mbとを乗算して,その結果を汎用レジスタr4に格納させる命令コードである。レジスタr1の被除数aが32ビット,レジスタmbの定数#mbが32ビットであると,それらの乗算値は,64ビットが必要になる。従って,この命令コードc3を実行した結果,重算値(a×mb)は,汎用レジスタr4とr5の2つのレジスタに上位ビットと下位ビットに分かれて格納される。つまり,上位レジスタr4と下位レジスタr5に64ビットの乗算値(a×mb)が格納される。
【0047】
次のコードc4は,汎用レジスタr4のqxと同レジスタr2のbとの乗算値(qx×b)を汎用レジスタr6に格納する命令コードである。この場合,コードc3で求めたqxは,その上位ビットが汎用レジスタr4に下位ビットが同レジスタr5にそれぞれ格納されているが,汎用レジスタr4の上位ビットをqxとして利用することにより,(÷232)の32ビットシフト算を省略することができる。
【0048】
そして,次のコードc5は,汎用レジスタr1のaから同レジスタr7の(qx×b)を減算した値rxを,汎用レジスタr3に格納する減算命令コードである。次のコードc6は,レジスタr2のbとレジスタr3のrx=a−qx×bとの比較を行い,同時にrx−(a−qx×b)をインテジャー・コンディション・コードICCに設定する命令コードであり,コードc7でbのほうがrxと比較して大きいか否か(bigger than: bgt)を判断するコードであり,判断がyesであれば,ラベルendに飛び,判断がnoであれば,次のコードc8を実行することになる。コードc8は,汎用レジスタr4のqxに整数「1」を加算して,同レジスタr4に格納する加算命令コードである。
【0049】
以上のアセンブリコードを実行した結果,汎用レジスタr4には,整数除算値q(=qxまたはqx+1)が格納されることになる。このように,アセンブリコードASM内には,除算演算コード(div)が存在しないことが理解される。通常,乗算命令mulは2サイクル,減算命令sub,比較命令cmp,分岐命令bgt,加算命令addiはそれぞれ1サイクルであるので,図3のアセンブリコードc3〜c9までのマイクロプロセッサの演算サイクルは,合計で8サイクルになる。レジスタr4,r5のように上位ビットと下位ビットに分かれていない場合に,32ビットシフト命令を追加したとしても,合計で9サイクルになる。
【0050】
従って,32ビットの整数除算を1ビット単位の引き戻し演算で32サイクルを必要とする従来の除算命令よりも,大幅に演算サイクル数を少なくすることができる。
【0051】
図6は,本実施の形態におけるコンパイラの別のフローチャート図である。図4に示したコンパイラは,ソースコード内に整数除算を検出したらmb値を演算して,それをレジスタmbに格納するセット命令をC言語の実行本体内に記述した。図7は,C言語の実行本体と初期化ブロックとで構成され,初期化ブロックにてグローバル変数の定義などを行い,実行本体で命令コードを実行する。
【0052】
図6のコンパイラでは,ソースコード内に同じ整数bで除算する整数除算のみが存在する場合に有効であり,ステップS114にて,生成したsetコードを初期化ブロック内に記述することのみが,図4のステップS110と異なるだけである。それ以外は図4と同じである。
【0053】
従って,図6のコンパイラにより変換されたアセンブリコードでは,命令コードc1が,初期化ブロック内で実行されるので,それ以降の実行本体にて除算演算毎に命令コードc1を実行する必要がない。その分,マイクロプロセッサの実行サイクル数を減らすことが可能になる。
【0054】
[整数剰余算]
本実施の形態では,コンパイラ4が,Nビットで表される無符号の整数aを無符号の整数定数bで除した時の余りを求める無符号整数剰余算r=int(a mod b)(int()は,括弧内の小数点以下を切り捨てる関数である)を,除算器による除算命令を含まないアセンブリコードに変換する。従って,ソースプログラム内の無符号整数剰余算命令が除算命令を伴わない一連のコードからなるアセンブリコードに変換されるので,そのアセンブリコードをマイクロプロセッサ10が実行すると,無符号整数剰余算命令が,少ない演算サイクル数で実行可能になる。
【0055】
具体的な原理は次の通りである。Nビットで表される無符号の整数aを無符号の整数bで除した時の余りを求める無符号整数剰余算r=int(a mod b)を計算する時,整数bが定数であるならば,m=2Nを用いてmb値を
mb=int(m÷b)
として,
q=int(a÷b)
qx=int(a×mb÷m)
を導入すると,
求める剰余値rは,
r=a−q×b (5)
となる。そして,除数qはqxとの間に,式(1)(2)で示した関係を有するので,剰余値rは,式(5)に式(1)(2)を代入して,
r=a−qx×b (a−qx×b<bの時) (6)
r=a−(qx+1)×b
=a−qx×b−b (a−qx×b≧bの時) (7)
となる。従って,rx=a−qx×bとすれば,
r=rx (rx<bの時) (8)
r=rx−b (rx≧bの時) (9)
となる。
【0056】
そこで,コンパイラ4が,ソースコード内に整数剰余算r=int(a mod b)を検出したら,コンパイラがmb=int(m÷b)を演算し(但しm=2N),その定数mbを所定のレジスタに格納するオブジェクトコードを埋め込んで,更に,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを生成する。
【0057】
上記のオブジェクトコード内には,(÷m)以外は,乗算と除算しかないので,マイクロプロセッサは,乗算命令なしに整数剰余算を行うことができる。
【0058】
剰余算を変換するコンパイラのフローチャートは,図4または図6と同じであり,ステップS112において,剰余算r=int(a mod b)に対するアセンブリコードが生成する点で異なるのみである。
【0059】
図8は,本実施の形態のコンパイラにより変換された剰余算のアセンブリコードのフローチャート図である。更に,図9は,本実施の形態のコンパイラにより変換された剰余算のアセンブリコードの例を示す図である。図8と図9のコード番号c1〜c80とは,お互いに対応する。
【0060】
図8に従って説明すると,コンパイラが演算したmb値をレジスタmbに格納し(c1),更に,qx=int(a×mb÷m)を演算し(c3),rx=a−qx×bを演算し(c4,c5),rx<bか否かを判断し(c6),yesなら分岐してr=rxとし(c7),noならr=rx−bを演算する(c80)。図5と比較すると,図8のステップc1,c3,c4,c5,c6までが図5と同じであり,ステップc80のみが図5と異なる。
【0061】
それに応じて,図9のアセンブリコードASMの例は,コードc1〜c7までが,図3の整数除算のアセンブリコードASMと同じであり,最後の減算命令コードc80のみが異なる。つまり,減算命令コードc80では,汎用レジスタr3内のrxから同レジスタr2内のbを引いて,同レジスタr3に格納する命令コードになる。但し,剰余算結果は汎用レジスタr3に格納されることになる。図9のアセンブリコードASMにも,除算命令は含まれてなく,コードc2〜c80までに合計で8サイクルでマイクロプロセッサの実行が完了する。
【0062】
図10は,整数除算及び整数剰余算でq=qx+1になる例を示す図である。図10に示した例は,a=555101,b=7930の場合であり,この場合は,
q=int(555101÷7930)=70
qx=int(555101÷232×int(223÷7930))=69
となり,q=qx+1となる。図中に示したとおり,intを示す[]内での誤差により,qxの切り捨てられる誤差が1を越えてしまい,その結果q=qx+1となっています。
【0063】
上記の実施の形態では,無符号整数a,bの整数除算や整数剰余算について説明したが,符号付整数a,bの符号付整数除算や符号付整数剰余算でも,a<0,b<0の時にそれらを正に置き換えてから,上述した無符号整数除算,無符号整数剰余算を行い,最後に除算値または剰余値の符号を元に戻すようなアセンブリコードを生成すれば良い。
【0064】
即ち,Nビットで表現できる符号付整数a,bに対する符号付整数除算q=int(a÷b)の場合は,
q= int(−a÷−b) (a<0,b<0) (10)
q=−int( a÷−b) (a≧0,b<0) (11)
q=−int(−a÷ b) (a<0,b≧0) (12)
q= int( a÷ b) (a≧0,b≧0) (13)
として,図3のアセンブリコードに変換すれば良い。
【0065】
図11は,上記(10)(11)のb<0の場合に,本実施の形態のコンパイラが変換した符号付整数除算に対するアセンブリコードの例を示す。コンパイラは,符号付整数除算をソースコードの中から検出すると,除数bが正か負かを符号ビットから検出することができる。従って,b<0はあらかじめ判明しているので,a≧0か否かを判断し(コードc20,c21),a≧0が偽であれば(コードc21の分岐がno),図中40に示されたコードc3〜c8を実行し,ラベルendに分岐し(コードc23),a≧0が真であれば(コードc21の分岐がyes),ラベルL1以下の図中42に示されたコードc3〜c8を実行し,その後除算結果の汎用レジスタr4にマイナス符号を付加し(コードc24),符号付除算を終了する。
【0066】
即ち,図中42に記載された命令コードc3〜c8は,図3のコードc3〜c8と同じである。一方,a<0の場合の図中40に記載された命令コードc3〜c8は,コードc20で汎用レジスタr8に格納された−aを利用して同じ命令が行われるコードである。図中下線で示したとおり,図中42の命令コードとは,汎用レジスタr1の代わりにr8になっていることのみが異なる。
【0067】
従って,図11のアセンブリコードでは,図3の無符号整数除算と比較すると,最初の命令コードc20,c21と,分岐命令c23が追加されるか,若しくは最初の命令コードc20,c21と,最後のマイナス符号を付加する命令コードc24が追加されるかのいずれかである。従って,符号付整数除算は,無符号整数除算の場合に比較すると,3サイクルだけ追加されることになる。即ち,図11のアセンブリコードでは,8+3=11サイクルになる。
【0068】
尚,図11のアセンブリコードでは,アセンブラが求めたmb値が,コードc2の初期化ブロック内に記述されている。
【0069】
除数bがb≧0の場合も,図11と同じアセンブリコードが生成される。但し,汎用レジスタr2には−bではなく,bが格納されている。それ以外は,同じである。
【0070】
符号付整数剰余算においても,上記と同様の考え方でアセンブリコードを生成することができる。即ち,Nビットで表現できる符号付整数a,bに対する符号付整数剰余算r=int(a mod b)の場合は,
r= int(−a mod −b) (a<0,b<0) (14)
r=−int( a mod −b) (a≧0,b<0) (15)
r=−int(−a mod b) (a<0,b≧0) (16)
r= int( a mod b) (a≧0,b≧0) (17)
として,図9のアセンブリコードに変換すれば良い。
【0071】
当業者であれば,図11の命令コードc20,c21,c23,c24を付加して,上記(14)(15)の符号付整数剰余算のアセンブリコードを展開することは容易である。従って,詳細なアセンブリコードは省略する。
【0072】
図12は,ループ内の整数除算のコンパイル例を示す図である。C言語におけるfor文など,ソースプログラムにおいて同じ除算演算が繰り返し行われる場合がある。例えば,図12のソースコード50がその一例である。このソースコード50では,for文により,引数iが0から10000までq[i]=a[i]/bの整数除算が繰り返される。その繰り返し除算では,除数bはループ内では一定であるが,ソースプログラム内では定数ではなく変数である。従って,除数bは,ソースコード50のfor文を実行するまでに図示しないプログラムにより変動する値である。その為,コンパイラがソースコードをコンパイルするときは,その除数bは判明しておらず,コンパイラがコンパイル時にmb=m/bを演算することはできない。
【0073】
このような場合,本実施の形態のコンパイラは,図12のソースコード52のように,for文の手前で一旦mb=int(232/b)を演算するコードを挿入されるように,アセンブリコード54を作成する。ソースコード52のfor文内のq[i]=fast divide(a[i], b, mb)は,図3で示した除算命令を含まない整数除算を意味する。
【0074】
上記のコンパイラにより生成されるアセンブリコード54は,mb=int(232/b)を演算する除算コードc30をfor文の初期ブロック内に埋め込み,for文内の整数除算q[i]=a[i]/bに対しては,図中56に示すとおり,図3と同じ命令コードc2〜c9に変換される。つまり,除算コードc30はループ文の外に,整数除算に対するアセンブリコードはループ文の中に埋め込まれる。
【0075】
従って,このように変換されたアセンブリコード54は,マイクロプロセッサに実行されると,for文の実行前に,除算コードdivにより,定数m=232と変数bの除数mbの除算演算を1回のみ実行され,その後,命令コードc3〜c9が10000回実行される。10000回実行されるループ内の整数除算には,除算コードが含まれていない。
【0076】
このように,整数除算の除数bが変数の場合は,コンパイラがコンパイル時にmbを演算することはできないので,アセンブリコード内にそのmbを演算する除算コードを埋め込む必要がある。但し,その整数除算が複数回繰り返されるループ内にある場合は,ループ外でmbを演算する除算コードを埋め込めば,その除算コードが長いサイクル数を要する場合でも,1回の整数除算に対しては僅かなサイクル数とみなすことが可能になる。
【0077】
上記のコンパイル例は,ループ内の整数除算に限られず,ループ内の整数剰余算に対しても同様に適用することができる。その場合は,図12のアセンブリコード54内のコードc2〜c9が,図9のコードc2〜c9に置き換えられる。つまり,mb=232/bを演算する除算コードがfor文の初期ブロック内に埋め込まれ,for文内に図9のコードc2〜c9が埋め込まれる。
【0078】
上記実施の形態では,マイクロプロセッサの開発段階でのシステムを中心にして説明した。このような開発システムでは,通常コンパイラは,図示しない汎用コンピュータで実行されて,ソースプログラムをアセンブリコードに変換して,命令コードメモリ内に格納する。そして,その変換されたアセンブリコードが,開発中のマイクロプロセッサ(通常評価用マイクロプロセッサ)により実行され,所望の機能を実現できるか否かが評価される。
【0079】
そして,評価完了後は,アセンブリコードをソースコードとして記憶した内蔵メモリとそれを実行する演算回路とを有するマイクロプロセッサが量産される。或いは,評価完了後は,アセンブリコードをソースコードとして記憶した外付けメモリとそれを実行する演算回路を有するマイクロプロセッサとからなるシステムが量産される。
【0080】
しかしながら,本発明は上記開発システムに限定されず,コンパイラとマイクロプロセッサを含む汎用コンピュータシステムにも適用できる。その場合は,アプリケーションプログラムなどのソースプログラムが,汎用コンピュータシステムにより実行され,その実行時に,コンパイラが,ソースプログラム内の整数除算や整数剰余算を,除算命令コードを含まないオブジェクトコードに変換し,そのオブジェクトコードがマイクロプロセッサにより実行される。従って,実行サイクルを短くすることができる。
【0081】
以上,実施の形態例をまとめると以下の付記の通りである。
【0082】
(付記1)整数除算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
Nビットで表される整数aを整数の定数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算する第1の手順と,当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器とを含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。
【0083】
(付記2)整数除算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードを前記ループ文の外に生成する第1の手順と,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを前記ループ文の内に生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器と除算器を含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。
【0084】
(付記3)付記1または2において,
前記コンパイラの第2の手順におけるqx=int(a×mb÷m)を演算するプログラムコードは,乗算値a×mbが倍精度で上位及び下位のレジスタに格納された時の当該上位のレジスタ値を,qxとすることを特徴とするシステム。
【0085】
(付記4)付記1または2において,
整数a,bが符号付整数であって,
前記コンパイラの第2の手順で,前記整数a,b両方が負の場合は,a,b両方の符号を正に変換するオブジェクトコードを更に生成し,前記整数a,bの一方が負の場合は,当該負の符号を正に変換し,除算結果に負の符号を付加するオブジェクトコードを更に生成することを特徴とするシステム。
【0086】
(付記5)整数剰余算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算する第1の手順と,当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器とを含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。
【0087】
(付記6)整数剰余算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードを前記ループ文の外に生成する第1の手順と,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを前記ループ文の内に生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器と除算器を含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。
【0088】
(付記7)付記5または6において,
前記コンパイラの第2の手順におけるqx=int(a×mb÷m)を演算するプログラムコードは,乗算値a×mbが倍精度で上位及び下位のレジスタに格納された時の当該上位のレジスタ値を,qxとすることを特徴とするシステム。
【0089】
(付記8)付記5または6において,
整数a,bが符号付整数であって,
前記コンパイラの第2の手順で,前記整数a,b両方が負の場合は,a,b両方の符号を正に変換するオブジェクトコードを更に生成し,前記整数a,bの一方が負の場合は,当該負の符号を正に変換し,剰余算結果に負の符号を付加するオブジェクトコードを更に生成することを特徴とするシステム。
【0090】
(付記9)付記1乃至6のいずれかにおいて,
前記マイクロプロセッサが評価用マイクロプロセッサであることを特徴とするマイクロプロセッサの評価システム。
【0091】
(付記10)整数除算を有するソースプログラムをマイクロプロセッサが実行可能なオブジェクトコードに変換するコンパイラにおいて,
Nビットで表される整数aを整数の定数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
mb=int(m÷b)(但しm=2N)を演算する第1の手順と,
当該mbを前記マイクロプロセッサ内の第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを生成する第2の手順と
をコンピュータに実行させるプログラムコードを有するコンパイラ。
【0092】
(付記11)整数除算を有するソースプログラムをマイクロプロセッサが実行可能なオブジェクトコードに変換するコンパイラにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードを前記ループ文の外に生成する第1の手順と,
qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを前記ループ文の内に生成する第2の手順と
をコンピュータに実行させるプログラムコードを有するコンパイラ。
【0093】
(付記12)整数剰余算を有するソースプログラムをマイクロプロセッサが実行可能なオブジェクトコードに変換するコンパイラにおいて,
Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
mb=int(m÷b)(但しm=2N)を演算する第1の手順と,
当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを生成する第2の手順と
をコンピュータに実行させるプログラムコードを有するコンパイラ。
【0094】
(付記13)整数剰余算を有するソースプログラムをマイクロプロセッサが実行可能なオブジェクトコードに変換するコンパイラにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードを前記ループ文の外に生成する第1の手順と,
qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを前記ループ文の内に生成する第2の手順と
をコンピュータに実行させるプログラムコードを有するコンパイラ。
【0095】
(付記14)整数除算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサにおいて,
Nビットで表される整数aを整数の定数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを記憶するメモリと
前記第1のレジスタと乗算器と加減器とを含み前記メモリ内の前記オブジェクトコードを実行する演算回路と
を有することを特徴とするマイクロプロセッサ。
【0096】
(付記15)整数除算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
前記ループ文の外に埋め込まれ,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードと,
前記ループ文の中に埋め込まれ,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードとを記憶するメモリと,
前記第1のレジスタと乗算器と加減器と除算器を含み前記メモリ内の前記オブジェクトコードを実行する演算回路と
を有することを特徴とするマイクロプロセッサ。
【0097】
(付記16)整数剰余算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサにおいて,
Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを記憶するメモリと,
前記第1のレジスタと乗算器と加減器とを含み前記メモリ内の前記オブジェクトコードを実行する演算回路と
を有することを特徴とするマイクロプロセッサ。
【0098】
(付記17)整数剰余算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
前記ループ文の外に埋め込まれ,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードと,
前記ループ文の中に埋め込まれ,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードとを記憶するメモリと,
前記第1のレジスタと乗算器と加減器と除算器を含み前記メモリ内の前記オブジェクトコードを実行する演算回路と
を有することを特徴とするマイクロプロセッサ。
【0099】
(付記18)整数除算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサシステムにおいて,
Nビットで表される整数aを整数の定数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを記憶するメモリと
前記第1のレジスタと乗算器と加減器とを含み前記メモリ内の前記オブジェクトコードを実行する演算回路を有するマイクロプロセッサと
を有することを特徴とするマイクロプロセッサシステム。
【0100】
(付記19)整数除算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサシステムにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
前記ループ文の外に埋め込まれ,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードと,
前記ループ文の中に埋め込まれ,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードとを記憶するメモリと,
前記第1のレジスタと乗算器と加減器と除算器を含み前記メモリ内の前記オブジェクトコードを実行する演算回路を有するマイクロプロセッサと
を有することを特徴とするマイクロプロセッサシステム。
【0101】
(付記20)整数剰余算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサシステムにおいて,
Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを記憶するメモリと,
前記第1のレジスタと乗算器と加減器とを含み前記メモリ内の前記オブジェクトコードを実行する演算回路を有するマイクロプロセッサと
を有することを特徴とするマイクロプロセッサシステム。
【0102】
(付記21)整数剰余算を有するソースプログラムからコンパイラにより変換されたオブジェクトコードを実行するマイクロプロセッサシステムにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,
前記ループ文の外に埋め込まれ,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードと,
前記ループ文の中に埋め込まれ,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードとを記憶するメモリと,
前記第1のレジスタと乗算器と加減器と除算器を含み前記メモリ内の前記オブジェクトコードを実行する演算回路を有するマイクロプロセッサと
を有することを特徴とするマイクロプロセッサシステム。
【0103】
【発明の効果】
以上,本発明によれば,コンパイラが整数除算または整数剰余算を除算命令を含まないオブジェクトコードに変換することができるので,そのオブジェクトコードを実行するマイクロプロセッサの実行サイクルを大幅に削減することができる。
【図面の簡単な説明】
【図1】従来の引き戻し法による除算の例を示す図である。
【図2】本実施の形態例におけるマイクロプロセッサの開発システムの全体構成図である。
【図3】本実施の形態における整数除算のコンパイル例を示す図である。
【図4】本実施の形態におけるコンパイラのフローチャート図である。
【図5】図3に示されたアセンブリコードASMのフローチャート図である。
【図6】本実施の形態におけるコンパイラの別のフローチャート図である。
【図7】C言語の初期化ブロックと実行本体を示す図である。
【図8】本実施の形態のコンパイラにより変換された剰余算のアセンブリコードのフローチャート図である。
【図9】本実施の形態のコンパイラにより変換された剰余算のアセンブリコードの例を示す図である。
【図10】整数除算及び整数剰余算でq=qx+1になる例を示す図である。
【図11】本実施の形態のコンパイラにより除数b<0の符号付整数除算が変換されたアセンブリコードの例を示す。
【図12】ループ内の整数除算のコンパイル例を示す図である。
【符号の説明】
2 ソースコード,ソースプログラム
4 コンパイラ
6 命令コードメモリ,オブジェクトコードメモリ
10 マイクロプロセッサ
11 演算回路
24 第1のレジスタ
ASM アセンブリコード,オブジェクトコード
Claims (9)
- 整数除算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
Nビットで表される整数aを整数の定数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算する第1の手順と,当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器とを含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。 - 整数除算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数bで除す整数除算q=int(a÷b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードを前記ループ文の外に生成する第1の手順と,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,除算値qをrx<bの時にq=qxとしrx≧bの時にq=qx+1とするオブジェクトコードを前記ループ文の内に生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器と除算器を含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。 - 請求項1または2において,
前記コンパイラの第2の手順におけるqx=int(a×mb÷m)を演算するプログラムコードは,乗算値a×mbが倍精度で上位及び下位のレジスタに格納された時の当該上位のレジスタ値を,qxとすることを特徴とするシステム。 - 請求項1または2において,
整数a,bが符号付整数であって,
前記コンパイラの第2の手順で,前記整数a,b両方が負の場合は,a,b両方の符号を正に変換するオブジェクトコードを更に生成し,前記整数a,bの一方が負の場合は,当該負の符号を正に変換し,除算結果に負の符号を付加するオブジェクトコードを更に生成することを特徴とするシステム。 - 整数剰余算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算する第1の手順と,当該mbを第1のレジスタに格納し,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器とを含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。 - 整数剰余算を有するソースプログラムから変換されたオブジェクトコードを実行するシステムにおいて,
繰り返しループ文内に,Nビットで表される整数aを整数の定数bで除した時の除数を求める整数剰余算q=int(a mod b)(int()は括弧内の小数点以下を切り捨てる関数)を含むソースプログラムに対して,mb=int(m÷b)(但しm=2N)を演算して当該mbを第1のレジスタに格納するオブジェクトコードを前記ループ文の外に生成する第1の手順と,qx=int(a×mb÷m)を演算し,rx=a−qx×bを演算し,剰余値rをrx<bの時にr=rxとしrx≧bの時にr=rx−bとするオブジェクトコードを前記ループ文の内に生成する第2の手順とをコンピュータに実行させるプログラムコードを有するコンパイラと,
前記第1のレジスタと乗算器と加減器と除算器を含み当該コンパイラにより生成されたオブジェクトコードを実行する演算回路を有するマイクロプロセッサとを有することを特徴とするシステム。 - 請求項5または6において,
前記コンパイラの第2の手順におけるqx=int(a×mb÷m)を演算するプログラムコードは,乗算値a×mbが倍精度で上位及び下位のレジスタに格納された時の当該上位のレジスタ値を,qxとすることを特徴とするシステム。 - 請求項5または6において,
整数a,bが符号付整数であって,
前記コンパイラの第2の手順で,前記整数a,b両方が負の場合は,a,b両方の符号を正に変換するオブジェクトコードを更に生成し,前記整数a,bの一方が負の場合は,当該負の符号を正に変換し,剰余算結果に負の符号を付加するオブジェクトコードを更に生成することを特徴とするシステム。 - 請求項1乃至6のいずれかにおいて,
前記マイクロプロセッサが評価用マイクロプロセッサであることを特徴とするマイクロプロセッサの評価システム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001263425A JP4712247B2 (ja) | 2001-08-31 | 2001-08-31 | 整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システム |
US10/098,151 US6907442B2 (en) | 2001-08-31 | 2002-03-15 | Development system of microprocessor for application program including integer division or integer remainder operations |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001263425A JP4712247B2 (ja) | 2001-08-31 | 2001-08-31 | 整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003076557A JP2003076557A (ja) | 2003-03-14 |
JP4712247B2 true JP4712247B2 (ja) | 2011-06-29 |
Family
ID=19090182
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001263425A Expired - Fee Related JP4712247B2 (ja) | 2001-08-31 | 2001-08-31 | 整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システム |
Country Status (2)
Country | Link |
---|---|
US (1) | US6907442B2 (ja) |
JP (1) | JP4712247B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3886870B2 (ja) * | 2002-09-06 | 2007-02-28 | 株式会社ルネサステクノロジ | データ処理装置 |
US7321916B2 (en) | 2003-07-28 | 2008-01-22 | Intel Corporation | Methods and apparatus for extracting integer remainders |
JP4232838B2 (ja) * | 2007-03-29 | 2009-03-04 | 日本電気株式会社 | 再構成可能なsimd型プロセッサ |
TWI386845B (zh) * | 2008-09-12 | 2013-02-21 | Altek Corp | Error calculation of the integer division operation circuit |
CN112363687A (zh) * | 2020-11-27 | 2021-02-12 | Oppo广东移动通信有限公司 | 一种整数取模运算方法、装置及终端设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04348424A (ja) * | 1991-05-27 | 1992-12-03 | Hitachi Ltd | 整数除算方式 |
JPH06168105A (ja) * | 1992-11-30 | 1994-06-14 | Hitachi Ltd | 整数除算方式 |
US5754460A (en) * | 1995-05-26 | 1998-05-19 | National Semiconductor Corporation | Method for performing signed division |
US5696713A (en) * | 1995-08-21 | 1997-12-09 | International Business Machines Corporation | Method for faster division by known divisor while maintaining desired accuracy |
FR2777098B1 (fr) * | 1998-04-02 | 2001-04-13 | Sgs Thomson Microelectronics | Procede de realisation ameliore d'une division entiere |
JP2000357096A (ja) * | 1999-06-16 | 2000-12-26 | Sony Corp | プログラム変換方法及び装置、並びに、プログラム提供媒体 |
US6836784B2 (en) * | 2001-01-17 | 2004-12-28 | Matsushita Electric Industrial Co., Ltd. | Efficient greatest common divisor algorithm using multiprecision arithmetic |
-
2001
- 2001-08-31 JP JP2001263425A patent/JP4712247B2/ja not_active Expired - Fee Related
-
2002
- 2002-03-15 US US10/098,151 patent/US6907442B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003076557A (ja) | 2003-03-14 |
US6907442B2 (en) | 2005-06-14 |
US20030046672A1 (en) | 2003-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7949696B2 (en) | Floating-point number arithmetic circuit for handling immediate values | |
US8280941B2 (en) | Method and system for performing calculations using fixed point microprocessor hardware | |
JP3739403B2 (ja) | プロセッサのカスタム動作のための方法及び装置 | |
JP3505266B2 (ja) | プログラム実行装置 | |
CN109710211B (zh) | 浮点数据类型转换方法、装置、存储介质及计算机设备 | |
JP2018533799A (ja) | ベクトルの処理のためのレーン位置情報 | |
EP0487814A2 (en) | Overflow determination for three-operand alus in a scalable compound instruction set machine | |
US8965946B2 (en) | Data processing apparatus and method for performing a reciprocal operation on an input value to produce a result value | |
JP4476210B2 (ja) | 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法 | |
CN111936965A (zh) | 随机舍入逻辑 | |
US20070055723A1 (en) | Method and system for performing quad precision floating-point operations in microprocessors | |
JP4712247B2 (ja) | 整数除算または整数剰余算を含むアプリケーションプログラム向けのマイクロプロセッサの開発システム | |
JP2008510230A (ja) | 非循環命令パターンの認識の方法 | |
You et al. | Translating AArch64 floating-point instruction set to the x86-64 platform | |
US7219117B2 (en) | Methods and systems for computing floating-point intervals | |
US7647368B2 (en) | Data processing apparatus and method for performing data processing operations on floating point data elements | |
KR100887327B1 (ko) | 다양한 정밀도에 대한 고속 부동 소수점 연산을 수행하는방법, 프로그래밍 구조 및 기록 매체 | |
Bertin et al. | A floating-point library for integer processors | |
US7107435B2 (en) | System and method for using hardware assist functions to process multiple arbitrary sized data elements in a register | |
JP3727039B2 (ja) | コンパイラにおける乗算実施方法 | |
Sung et al. | Fixed-point C language for digital signal processing | |
Lefèvre | SIPE: Small integer plus exponent | |
Bohlender et al. | Proposal for accurate floating-point vector arithmetic | |
JP2708526B2 (ja) | 2進整数除算処理方法 | |
Lefèvre | Sipe: a Mini-Library for Very Low Precision Computations with Correct Rounding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080704 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20080731 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100525 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110322 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110323 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |