Mercurial > hg > CbC > old > device
diff Changes @ 94:1ad7045741a7 dbinop
float dbinop fix
author | kono |
---|---|
date | Wed, 12 Mar 2003 15:28:44 +0900 |
parents | 8f5d61239b93 |
children | 7d8de41390d8 |
line wrap: on
line diff
--- a/Changes Sun Mar 09 18:31:00 2003 +0900 +++ b/Changes Wed Mar 12 15:28:44 2003 +0900 @@ -2066,3 +2066,51 @@ でも、結局、引数は関数呼び出しの前にセーブするのね。だったら、 そんなことしないで、セーブすれば良いのか。 +Mon Mar 10 11:42:40 JST 2003 + +で、レジスタのセーブなんだけど、mc-codegen.c を変更しない +とすれば、引数のリストを使って変更していくのが良い。 +関数呼び出しは基本的には並列代入になる。並列代入でき +てもできなくても、セーブする必要はある。今の並列代入 +ルーチンのできは良くないので、「同じかどうか」だけ +判断するのが良いのではないか? + +関数呼び出しの前に式用にレジスタに積まれた値はセーブした +方が良い。セーブした後はlvarとしてアクセスすることになる。 +スタックでもいいけど。 +そうすると、stack 配列には、 + + レジスタ レジスタ番号 (>0) + スタック -1 + lvar lvar番号 + +の三種類が入ることになる。それに合わせてtosop/assopを書き直 +す必要がある。emit_pop だけでいいかも。スタックを止めちまう +のも手ではあるが、ia32の方で効率が悪い。やっぱり三種類サポー +トするのが良いだろう。 + +(けっこういろいろあるなぁ... どこから手を付けるか...) + +Tue Mar 11 14:23:57 JST 2003 + +save_stacks すると、レジスタはほとんど使われなくなって +しまう。が、コードの見通しは良くなる。 + +定数を右辺に持って行くとsave_stacksでsaveする量が減る。が以 +外にめんどくさいね。反射律が成り立たない演算子に関しては。tosop +の定数版とか作ることになるので... あとスタックに積む順序が逆 +になってしまう。まぁ、もとの版では行われていたことだが... +CMPではrexpr で反転して論理を逆転させる方が簡単か。SUBでは、 +ADD + (-CONST) にする方が良いね。 + + je _xxx +したあと、current register のregv[]が残ってしまう。これは、 +変だよね。gexpr_init で regv が残るのは、case 文の比較だけ。 +あとは全部0にして良い。(まぁ、害は無いんだけど) + +(case 文のjumpは、switch 文が終る時に処理すれば、index jump +にすることができるね) + +Wed Mar 12 12:58:47 JST 2003 + +比較で入れ換えるとの否定は若干違うよね。