diff Changes @ 450:eaf9e2746c83 simple-exp-in-parallel-assign

parallel assign for simple expr. (too complex solution) statement expression (GNU extension fix) non_lazy function reference in PowerPC
author kono
date Sun, 28 Nov 2004 03:28:38 +0900
parents c55363eff5e5
children 656ec59cd79f
line wrap: on
line diff
--- a/Changes	Thu Nov 25 16:56:26 2004 +0900
+++ b/Changes	Sun Nov 28 03:28:38 2004 +0900
@@ -6828,3 +6828,78 @@
 
 progress でなんとかすると、やっぱり、全部 save されちゃうね。
 toplogical sort しないとだめか。
+
+singleton が良い。multi ならば、どうせsaveするんだから。
+list5 はやらないとだめ。
+
+
+#define CHECK_HEAP(b) ({int _k=(int)(b);if(_k>heapsize)error(-1);_k;})
+#define car(e) (heap[(int)(CHECK_HEAP(e))])
+
+は、いいんだけどさ、これのコンパイルが間違っているみたいね。
+
+っていうか、expr() 中で docomp が実行されてコード生成されちゃうから
+まずよな。何とか、する方法としては... (うーん、思い付かないな。
+だめなんじゃないの?)
+
+単独のサブルーチンを生成して、そこへの関数呼び出しにすれば?
+code 生成系を足さないとできないか。
+	b hoge
+    haga:
+	fuga
+	st value
+	ret
+    hoge:
+	bl haga
+	value 
+まあ、いいんだけど、大半の場合は、必要ないんだよね。
+
+あぁ、これだと、({   goto exit0;  }) みたいなのがだめだ。
+	b L1
+    L2:
+	fuga
+	st value
+	j L3
+    L1:
+	.........
+	b L2
+    L3:
+	value 
+ですかぁ? はぁ。
+
+Sat Nov 27 08:51:01 JST 2004
+
+({}) で、init_vars がnestする可能性があるのを忘れてました。
+
+register stack が異なるので破綻しているみたい。
+
+    ## 	if (car(ns)==sc) {
+    ## (heap[(int)(({int _k=(int)(ns);if(_k>heapsize)error(-1);_k;}))])
+	    b	L_2215
+    L_2216:
+    # 3764: gexpr_init: creg=r11 freg=f14
+	    lwz r11,lo16(-16)(r30)
+	   ....
+    L_2215:
+	    lwz r11,lo16(28+L_2206)(r30)
+	    b	L_2216
+
+どうしようかなぁ。
+
+Sun Nov 28 02:41:11 JST 2004
+
+> L_code_postinc$non_lazy_ptr:
+>       .indirect_symbol _code_postinc
+>       .long   0
+
+なんだけど、PowerPC で、
+     関数として使われている is_function && sc==EXTRN1
+           binding helper 必要
+           non_lazy は不要
+と、
+     大域変数としてい使われている
+           binding helper 不要
+           non_lazy のみ必要
+を区別する必要があるみたいね。これは parse.c で追加する必要がある。
+
+もっとも、.long 0 が余計に出力されるだけだが。