Mercurial > hg > CbC > old > device
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 が余計に出力されるだけだが。