森田/日誌/2009-02-28
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
ThinkPad分解してCPU周りの埃を飛ばす。CPU温度の劇的な改善はならなかったが、96℃→76℃ぐらいまでは下がったかも。~
通常電圧のCPUをB5モバイルに積んでるだけあってパワフルだけど温度あがるなぁ……。不安定な動作が続くなら、排熱対策しないと。
-To do
--Cバックエンド部へ遅延スロット導入を。
-概要
--双方向リストinstructionへ命令を保存。
--導入予定関数一覧
---add_inst リストの最後尾に命令を追加
---print_inst 遅延スロット判定を行い命令を入れ替え、もしくはnopを挿入し、リストの先頭から命令を出力していく。この際リストのための領域をfreeする。
-ひとりごと
--リストの中にコメントをどうするか全く考えていなかった件。コメントのためだけに変数宣言するのも癪なんでどうするか考えます。
---一応、命令のchar *にコメント全文ぶち込むことで解決。だけど、コメントに関連する命令が遅延スロットに移動したとしてもコメントは移動されない。
---まぁ、これぐらいはご愛嬌ということで……
-遅延スロットに入れることが可能かどうか判定するアルゴリズム
--とんでもない勘違いをしていたことが発覚
---分岐命令以外の命令が参照するレジスタが書き換えられるとかぶっちゃけ意味がない。
--以下の判定をするだけでOKなことに気がついた。
---分岐命令が参照するレジスタを書き換える命令は、遅延スロットへ移動不可。また、その命令が参照するレジスタを書き換える命令も移動不可。
こんなことに気がつくまで3日かかる。なんという……~
-遅延スロット導入手順
--とりあえず命令をリストへぶち込む
--ラベルの出力が来たとき
---リストに入ってる命令を全部順番通りに出力(ラベルを超えた命令の移動を防ぐ)
--ブランチ命令が来たとき
---ブランチ命令で使用するレジスタとそれに関連するレジスタを書き換える命令にreferを立てて、referが下がっている命令を下から順番に二つ遅延スロットに移動。そして出力。
--ジャンプ命令が来たとき
---ジャンプ命令の上二つの命令を遅延スロットに移動。そして出力。
--hlt命令が来たとき
---リストに入ってる命令を全部順番通りに出力。
遅延スロットのための関数は完成。バックエンド部に導入しようと思ったが、ノード解析部でちょこちょこprintfが出てくるのがどうも……。~
全部、リストで管理したいが、jmp fooexitとかは今のままではリストに入れることができないのでちょっと考える。あとラベルもいったんリスト入れてから出力予定。printfを全部なくして、リストからのprintfのみにしたいので明日まわしか。~
~
''修正終了。''~
ラベル出力用関数を増やして、命令タイプにjal foo;とjmp fooexit;の二つを個別に割り当てることでリストが保持できる文字列が命令のみという仕様に対処。~
とりあえずデバッグしてきます。
''分割コンパイル……?''~
見事に詰まった。明日からちょっとCの分割コンパイル勉強してきます。makefile読まないと話にならん・。・
#comment
終了行:
ThinkPad分解してCPU周りの埃を飛ばす。CPU温度の劇的な改善はならなかったが、96℃→76℃ぐらいまでは下がったかも。~
通常電圧のCPUをB5モバイルに積んでるだけあってパワフルだけど温度あがるなぁ……。不安定な動作が続くなら、排熱対策しないと。
-To do
--Cバックエンド部へ遅延スロット導入を。
-概要
--双方向リストinstructionへ命令を保存。
--導入予定関数一覧
---add_inst リストの最後尾に命令を追加
---print_inst 遅延スロット判定を行い命令を入れ替え、もしくはnopを挿入し、リストの先頭から命令を出力していく。この際リストのための領域をfreeする。
-ひとりごと
--リストの中にコメントをどうするか全く考えていなかった件。コメントのためだけに変数宣言するのも癪なんでどうするか考えます。
---一応、命令のchar *にコメント全文ぶち込むことで解決。だけど、コメントに関連する命令が遅延スロットに移動したとしてもコメントは移動されない。
---まぁ、これぐらいはご愛嬌ということで……
-遅延スロットに入れることが可能かどうか判定するアルゴリズム
--とんでもない勘違いをしていたことが発覚
---分岐命令以外の命令が参照するレジスタが書き換えられるとかぶっちゃけ意味がない。
--以下の判定をするだけでOKなことに気がついた。
---分岐命令が参照するレジスタを書き換える命令は、遅延スロットへ移動不可。また、その命令が参照するレジスタを書き換える命令も移動不可。
こんなことに気がつくまで3日かかる。なんという……~
-遅延スロット導入手順
--とりあえず命令をリストへぶち込む
--ラベルの出力が来たとき
---リストに入ってる命令を全部順番通りに出力(ラベルを超えた命令の移動を防ぐ)
--ブランチ命令が来たとき
---ブランチ命令で使用するレジスタとそれに関連するレジスタを書き換える命令にreferを立てて、referが下がっている命令を下から順番に二つ遅延スロットに移動。そして出力。
--ジャンプ命令が来たとき
---ジャンプ命令の上二つの命令を遅延スロットに移動。そして出力。
--hlt命令が来たとき
---リストに入ってる命令を全部順番通りに出力。
遅延スロットのための関数は完成。バックエンド部に導入しようと思ったが、ノード解析部でちょこちょこprintfが出てくるのがどうも……。~
全部、リストで管理したいが、jmp fooexitとかは今のままではリストに入れることができないのでちょっと考える。あとラベルもいったんリスト入れてから出力予定。printfを全部なくして、リストからのprintfのみにしたいので明日まわしか。~
~
''修正終了。''~
ラベル出力用関数を増やして、命令タイプにjal foo;とjmp fooexit;の二つを個別に割り当てることでリストが保持できる文字列が命令のみという仕様に対処。~
とりあえずデバッグしてきます。
''分割コンパイル……?''~
見事に詰まった。明日からちょっとCの分割コンパイル勉強してきます。makefile読まないと話にならん・。・
#comment
ページ名: