[Coins-compiler-users] Cell/B.E. SPE のコンパイラ

アーカイブの一覧に戻る

山之上 卓 yaman****@cc*****
2008年 11月 16日 (日) 23:07:42 JST


北村様
 はじめまして。山之上です。
 鈴木先生から北村さんのことは伺っていました。
 ご指摘いただき、どうもありがとうございました。助かります。

山之上 卓
鹿児島大学学術情報基盤センター 情報メディア基盤部門 教授
情報セキュリティ対策支援室
yaman****@cc*****
http://yama-linux.cc.kagoshima-u.ac.jp/~yamanoue
+81-99-285-7187



-----Original Message-----
From: coins****@lists*****
[mailto:coins****@lists*****] On Behalf Of
kitamura
Sent: Sunday, November 16, 2008 10:42 PM
To: coins****@lists*****
Subject: [Coins-compiler-users] Cell/B.E. SPE のコンパイラ

山之上先生


北村と申します。(arm.tmd と mb.tmd を作成したものです。)

	浮動小数点演算で、レジスタだけで計算できるはずなのに、メモリを
	使っている。

の件ですが、レジスタ変数として使用するレジスタセットが定義されていない
ためです。

現状の

	(defregsetvar (I128 *reg-I128*))
	(defregsetvar (I32 *reg-I32*))

に加えて

	(defregsetvar (F32 *reg-F32*))

を追加すれば以下のようなコードが生成されました。


.L4:
        csflt   $3,$80,0
        fa      $81,$81,$3
        fesd    $3,$81
        stqd    $3,-48($sp)
        ila     $3,string.5
        ori     $4, $80, 0
        lqd     $5,-48($sp)
        brsl    $lr,printf
        nop


(一般的には I8-I64, F32, F64 すべてに対して defregsetvar で割り当てる
レジスタセットを宣言する必要があります。)


ご参考まで


 > <000301c947cf$b9df6ec0$2d9e4c40$@kagoshima-u.ac.jp>
 > From: yaman****@cc*****
 > Date: Sunday, 16 November 2008 18:43:04 +0900
 >
 > 中田先生、山之上です。
 >
 >  早速お返事いただき、どうもありがとうございました。
 >
 > (1)   について、ジャンプ最適化の流れについて良くわかりました。対策を練っ
てみ
 > ます。
 >
 > (2)   について、現在のやり方の方法が間違いとはいえないことがわかってうれ
しい
 > です。
 >
 >
 >
 > 今後もいろいろご指導いただけると幸いです。
 >
 >
 >
 > From: Ikuo Nakata [mailto:nakat****@kamak*****]
 > Sent: Sunday, November 16, 2008 9:02 AM
 > To: yaman****@symph*****
 > Cc: coins****@lists*****
 > Subject: Re: [Coins-compiler-users] Cell/B.E. SPE のコンパイラ
 >
 >
 >
 > 山之上様
 >
 >
 >
 > 中田です.
 >
 >
 >
 > COINS Cell Compiler
 >
 > を作っていただけるのは大変ありがたいです.
 >
 >
 >
 > On 2008/11/16, at 0:26, <yaman****@cc*****> wrote:
 >
 >
 >  現在抱えている問題の解決方法に関する助言や、TMD の書き方についての
 >  助言をいただけると幸いです。
 >
 >
 >
 > 問題点として
 >
 > (1)条件判定とその結果によるジャンプにおいて、余分な命令が残っている。
 >
 > (2)フレームサイズと浮動小数点のメモリ上の割り当て方法がよくわからな
い。現
 > 在、力ずくでやっている。
 >
 > があげられていますね.その具体的な内容は分かりませんが,ひょっとしたらご
参考
 > になるかも知れない
 >
 > ことを下記します.
 >
 >
 >
 > (1)について,余計なジャンプを取り除くのは
 >
 >      apply(JumpOpt.trig);
 >
 > を呼ぶことで行われていますが,それはEarlyRewritingの後でも,LateRewriting
の
 > 後でも
 >
 > 呼ばれています.ただし,LateRewritingの後では定数によるジャンプなどが最適
化
 > されません.
 >
 >
 >
 > 「コンパイラの基盤技術と実践 コンパイラ・インフラストラクチャCOINSを用い
 > て」
 >
 > の
 >
 >   12.5 定数による掛算/割算
 >
 > に,その変換をEarlyRewritingで行う,と書いてあるのはそのためです.
 >
 >
 >
 > ただし,EarlyRewritingで行うとその後で行われるSSA最適化との関係で
 >
 > 問題が生ずる場合がありますので,現在は定数になる場合だけEarlyRewritingで
行い
 >
 > それ以外はLateRewritingで行っています.そのことは正誤表
 >
 > http://www.coins-project.org/COINS-book/seigohyou.html
 >
 > に書かれています.
 >
 >
 >
 > (2)については,私も力ずくでやっています.その例が上記の本の227ページに
 >
 > 次のように書かれています.
 >
 >
 >
 > バックエンドでフレーム変数の場所(オフセット)を決めているのは
CodeGenerator
 >
 > のprocessFramesメソッドであり,それが最初に呼ばれるのはLateRewritingの
フェー
 > ズである.
 >
 > processFramesメソッドでは,既にオフセットの決まっている変数があったら,決
 > まっていない
 >
 > 変数に対してはそれ以降のオフセットを割当てる.また,フレーム変数を登録す
ると
 > きに
 >
 > オフセットを強制的に指定することも出来る.
 >
 >
 >
 > これらのことから,フレームの先頭部分を確保するには,LateRewriting以前の
 > フェーズで
 >
 > フレーム変数を登録し,そのときにオフセットを強制的に指定すればよいことが
分か
 > る.
 >
 > x86.tmdでは,EarlyRewritingフェーズでva_startが呼ばれていることが
 >
 > 分かったときに,その関数が可変引数関数であると判定している.ここでもその
方式
 > で,
 >
 > EarlyRewritingフェーズでva_startが呼ばれていることが
 >
 > 分かったときに,setVaStartCalledメソッドで,フレームの先頭の176バイトを確
保
 > することにする.
 >
 > それには,そのメソッドで以下の命令を実行すれば良い.
 >
 >
 >
 > func.localSymtab.addSymbol("__argSaveArea",
 >
 >     Storage.FRAME, Type.AGGREGATE, 16, -176, null);
 >
 >
 >
 > 中田 育男
 >
 > nakat****@kamak*****
 >

_______________________________________________
Coins-compiler-users mailing list
Coins****@lists*****
http://lists.sourceforge.jp/mailman/listinfo/coins-compiler-users




Coins-compiler-users メーリングリストの案内
アーカイブの一覧に戻る