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 も問題ない。
+
+でも、めんどくさいよ。めんどくさい。めんどくさいです。
+
+でも、やるしかない。
+