# HG changeset patch # User kono # Date 1193230466 -32400 # Node ID 8b54c40081de6da7e1c8274b2098f0b44d17e9f9 # Parent cd4aac9abd5e0f5756516e078777c554d0f1c201 *** empty log message *** diff -r cd4aac9abd5e -r 8b54c40081de Changes --- a/Changes Wed Oct 24 16:23:52 2007 +0900 +++ b/Changes Wed Oct 24 21:54:26 2007 +0900 @@ -9597,3 +9597,18 @@ Wed Oct 24 08:33:49 JST 2007 switch をparse mode で二回 inline 展開すると破綻するらしい。 + +Wed Oct 24 11:06:55 JST 2007 + +parse mode は出来ました。長かった... + +macro / inmode の干渉が macro_if で起きるとは意外でした。 + +pexpr で、stack がどんどん深くなるのは良くない... + +pexpr は、parse にappend するべきなんでしょう。reverse がうるさいが。 + +adhoc に code_save_register_stack とか使ったけど、本当は、 +削除出来るんだろ。 + + diff -r cd4aac9abd5e -r 8b54c40081de Makefile --- a/Makefile Wed Oct 24 16:23:52 2007 +0900 +++ b/Makefile Wed Oct 24 21:54:26 2007 +0900 @@ -281,4 +281,3 @@ # DO NOT DELETE - diff -r cd4aac9abd5e -r 8b54c40081de mc-code-ia32.c --- a/mc-code-ia32.c Wed Oct 24 16:23:52 2007 +0900 +++ b/mc-code-ia32.c Wed Oct 24 21:54:26 2007 +0900 @@ -2426,6 +2426,7 @@ jmp(int l) { printf("\tjmp\t_%d\n",l); + control = 0; /* align? */ /* this is not allowed because of ? operator diff -r cd4aac9abd5e -r 8b54c40081de mc-code-powerpc.c --- a/mc-code-powerpc.c Wed Oct 24 16:23:52 2007 +0900 +++ b/mc-code-powerpc.c Wed Oct 24 21:54:26 2007 +0900 @@ -2289,8 +2289,8 @@ } } } else if (is_longlong_reg(reg)) { - use_input_reg(regv_h(reg),0); - use_input_reg(regv_l(reg),0); + use_input_reg(regv_h(reg),mode); + use_input_reg(regv_l(reg),mode); } else if (is_float_reg(reg)) { if (freg&® == freg) { if (creg==freg) creg = ireg; @@ -2305,10 +2305,10 @@ int t=caddr(e3); int e4 = car(e3); reg_arg_list = list2(arg,reg_arg_list); - g_expr_u(assign_expr0(arg,e4,t,t)); if (car(arg)==REGISTER||car(arg)==DREGISTER|| car(arg)==FREGISTER||car(arg)==LREGISTER) use_input_reg(cadr(arg),1); + g_expr_u(assign_expr0(arg,e4,t,t)); car(e3) = arg; return reg_arg_list; } diff -r cd4aac9abd5e -r 8b54c40081de mc-code-spu.c --- a/mc-code-spu.c Wed Oct 24 16:23:52 2007 +0900 +++ b/mc-code-spu.c Wed Oct 24 21:54:26 2007 +0900 @@ -511,7 +511,7 @@ lvar_address(int l,int creg) { //int label,disp; - int disp; + int tmp = -1; char *trn; if (is_code(fnptr)) { diff -r cd4aac9abd5e -r 8b54c40081de mc-inline.c --- a/mc-inline.c Wed Oct 24 16:23:52 2007 +0900 +++ b/mc-inline.c Wed Oct 24 21:54:26 2007 +0900 @@ -1508,7 +1508,7 @@ } } // we need real local variable for this inline - arg = heap[pdisp+narg]=list3(LVAR,new_lvar(size(t)),0); + arg = heap[pdisp+narg]=list3(LVAR,new_lvar(size(t)),(int)anptr); inline_lvars = glist2(arg,inline_lvars); evals=list2(assign_expr0(arg,e4,anptr->ty,t),evals); return evals; diff -r cd4aac9abd5e -r 8b54c40081de mc.h --- a/mc.h Wed Oct 24 16:23:52 2007 +0900 +++ b/mc.h Wed Oct 24 21:54:26 2007 +0900 @@ -578,7 +578,7 @@ extern void print_expr(int e, FILE *vout); -#if 0 +#if 1 extern int heapsize; #define CHECK_HEAP(b) ({int _k=(int)(b);if(_k>heapsize||_k<=0)error(-1);_k;}) #else