Mercurial > hg > CbC > old > device
changeset 653:d66e5a137d73
*** empty log message ***
author | kono |
---|---|
date | Sun, 26 Nov 2006 14:59:54 +0900 |
parents | f9d86da34600 |
children | fd2dfa1fa627 |
files | Changes |
diffstat | 1 files changed, 43 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Sun Nov 26 13:16:50 2006 +0900 +++ b/Changes Sun Nov 26 14:59:54 2006 +0900 @@ -9155,3 +9155,46 @@ code segment のvariable interface を許すためには、Intel の stack code を直した方が良い。 +alloca のgexpr は、binopされてないので、最適化されない... + +あぁ、ia32 は、lvar_intro とかも使ってないわけね。 +offset は、結構複雑になるので、直す方が良いらしい。 + +時間かける価値あるの? 少しかかりそうだな... + + | frame pointer | stack pointer + v----> argument local <--|-----v + caller_arg + +ではなくて、 + + | previous $fp + |<-intr_size---><--------r1_offset----------->| + | | frame pointer | stack pointer + v<--- interface-+---- local ----->|<--------->v + <0 >0 caller_arg + +なら、いいんじゃない? caller_arg は sp 相対で積めば良い。 + +これだと、frame pointer がgoto で可変になる。interface がarugment +扱いになるので、限りなくsubroutine call に近くなるけど。 +(まぁ、そうだよな、そういう狙いだし...) + +だったら、完全にfunction callに合わせることも可能なんじゃないか? +可変長引数の場合とまったく同じになる。gcc の(予定ししてる実装と同じ) + + | previous $fp + |<-intr_size---><-------------r1_offset------------>| + | |frame pointer | stack pointer + v<--- interface-+-------|--- local ----->|<-------->v + <0 >0 xxx caller_arg + |frame pointer | stack pointer + v<--- interface----+-------|--- local ----->|<-------->v + <0 >0 xxx caller_arg + +caller_arg はsp上に積むと。そうすれば、alloca も問題ない。 + +でも、めんどくさいよ。めんどくさい。めんどくさいです。 + +でも、やるしかない。 +