Mercurial > hg > CbC > old > device
diff Changes @ 93:8f5d61239b93
*** empty log message ***
author | kono |
---|---|
date | Sun, 09 Mar 2003 18:31:00 +0900 |
parents | e7f8515ba882 |
children | 1ad7045741a7 |
line wrap: on
line diff
--- a/Changes Fri Mar 07 06:10:41 2003 +0900 +++ b/Changes Sun Mar 09 18:31:00 2003 +0900 @@ -2016,3 +2016,53 @@ label があると、code_base cache はclearしないといけない。 それを判断するには fwddef をhookする必要があるけど。 + +Fri Mar 7 09:17:10 JST 2003 + +問題は、 + register allocation +と + function call/goto call +の構成だな。goto の方は machine dependentなところは +ほとんどない。register のsaveさえ必要ないから。 + +register allocation だけど。 + r0 + r1 frame pointer (or stack pointer ) + r30 jj + r31 relocation register + r0,r1,r2 システムで使う + r0-r10 引数 + 引数でないところは優先的に使う + r20-r29 セーブして使う領域 + +r10-r19 はどうなんだろう? セーブしないのか? + +ia32 の方でもfppのスタックを関数呼び出しのときに吐き出した方が +良い。 + +r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 +r10 r11 r12 r13 r14 r15 r16 +r28 r29 r30 r31 + +なので、もののみごとに、17-27 までが使われてないね。 + +ということは、関す呼出し時には、保存されるレジスタはないと +思った方が良いってこと? あるいは、r17-r28 は保存されると +思って良いのかな。 + +Sat Mar 8 19:28:42 JST 2003 + +関数呼び出し時のレジスタセーブを避けるためには、関数呼び出し +を優先して実行してやれば良い。関数呼び出しの結果は局所変数に +セーブする。 + f(g(h(a)+1)+2) +は、 + a1=h(a) + a2=g(a1+1) + f(a1+2) +となる。そうすれば、関数呼び出しのときのスタックはかならず0になる。 + +でも、結局、引数は関数呼び出しの前にセーブするのね。だったら、 +そんなことしないで、セーブすれば良いのか。 +