changeset 709:8b54c40081de

*** empty log message ***
author kono
date Wed, 24 Oct 2007 21:54:26 +0900
parents cd4aac9abd5e
children 4348f61a5e54
files Changes Makefile mc-code-ia32.c mc-code-powerpc.c mc-code-spu.c mc-inline.c mc.h
diffstat 7 files changed, 22 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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  とか使ったけど、本当は、
+削除出来るんだろ。
+
+
--- 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
-
--- 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
--- 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&&reg == 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;
 }
--- 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)) {
--- 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;
--- 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