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
+
+比較で入れ換えるとの否定は若干違うよね。