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になる。
+
+でも、結局、引数は関数呼び出しの前にセーブするのね。だったら、
+そんなことしないで、セーブすれば良いのか。
+