comparison Changes @ 93:8f5d61239b93

*** empty log message ***
author kono
date Sun, 09 Mar 2003 18:31:00 +0900
parents e7f8515ba882
children 1ad7045741a7
comparison
equal deleted inserted replaced
92:e7f8515ba882 93:8f5d61239b93
2014 2014
2015 get_register は絶対失敗しないようにできるんじゃないか? 2015 get_register は絶対失敗しないようにできるんじゃないか?
2016 2016
2017 label があると、code_base cache はclearしないといけない。 2017 label があると、code_base cache はclearしないといけない。
2018 それを判断するには fwddef をhookする必要があるけど。 2018 それを判断するには fwddef をhookする必要があるけど。
2019
2020 Fri Mar 7 09:17:10 JST 2003
2021
2022 問題は、
2023 register allocation
2024
2025 function call/goto call
2026 の構成だな。goto の方は machine dependentなところは
2027 ほとんどない。register のsaveさえ必要ないから。
2028
2029 register allocation だけど。
2030 r0
2031 r1 frame pointer (or stack pointer )
2032 r30 jj
2033 r31 relocation register
2034 r0,r1,r2 システムで使う
2035 r0-r10 引数
2036 引数でないところは優先的に使う
2037 r20-r29 セーブして使う領域
2038
2039 r10-r19 はどうなんだろう? セーブしないのか?
2040
2041 ia32 の方でもfppのスタックを関数呼び出しのときに吐き出した方が
2042 良い。
2043
2044 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9
2045 r10 r11 r12 r13 r14 r15 r16
2046 r28 r29 r30 r31
2047
2048 なので、もののみごとに、17-27 までが使われてないね。
2049
2050 ということは、関す呼出し時には、保存されるレジスタはないと
2051 思った方が良いってこと? あるいは、r17-r28 は保存されると
2052 思って良いのかな。
2053
2054 Sat Mar 8 19:28:42 JST 2003
2055
2056 関数呼び出し時のレジスタセーブを避けるためには、関数呼び出し
2057 を優先して実行してやれば良い。関数呼び出しの結果は局所変数に
2058 セーブする。
2059 f(g(h(a)+1)+2)
2060 は、
2061 a1=h(a)
2062 a2=g(a1+1)
2063 f(a1+2)
2064 となる。そうすれば、関数呼び出しのときのスタックはかならず0になる。
2065
2066 でも、結局、引数は関数呼び出しの前にセーブするのね。だったら、
2067 そんなことしないで、セーブすれば良いのか。
2068