changeset 529:ad874ef77dde

use_input_reg...
author kono
date Thu, 29 Dec 2005 11:05:21 +0900
parents d6fff671793a
children 58aceee8e4b4
files .gdbinit Changes mc-code-arm.c mc-code-mips.c mc-code-powerpc.c mc-inline.c
diffstat 6 files changed, 26 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/.gdbinit	Thu Dec 29 01:10:01 2005 +0900
+++ b/.gdbinit	Thu Dec 29 11:05:21 2005 +0900
@@ -41,4 +41,5 @@
 # run  -s test/basic.c
 # run -s test/code-gen-all.c
 # run -s test/tmp7.c
-run -s test/inline.c
+# run -s test/inline.c
+run -s test/code-gen-inline.c
--- a/Changes	Thu Dec 29 01:10:01 2005 +0900
+++ b/Changes	Thu Dec 29 11:05:21 2005 +0900
@@ -7657,8 +7657,15 @@
 やっぱり、STRING は、"" で一つにして、複数つながる
 っていう構文にした方が良いね。
 
-    list(STRINNG,value,continue)
-
-みたいな感じ。
-
-
+    list(STRING,value,continue)
+
+みたいな感じ。でも、それだと変更が多い(何故か nptr にいれてた...)
+ので、やっぱり、append しました。
+
+Thu Dec 29 09:59:38 JST 2005
+
+PowerPC の get_lregister が失敗するのが、まだ、微妙に残ってる。
+足りないはずないんだけどね。input register も探させちゃうか。
+そういえば、最初は input register は使わない方針だったけど、
+今は使ってもいいんじゃないの?
+
--- a/mc-code-arm.c	Thu Dec 29 01:10:01 2005 +0900
+++ b/mc-code-arm.c	Thu Dec 29 11:05:21 2005 +0900
@@ -2310,7 +2310,7 @@
 	use_input_reg(regv_l(reg),0);
     } else if (is_float_reg(reg)) {
 	if (freg&&reg == freg) {
-	    if (creg==freg) creg = 0;
+	    if (creg==freg) creg = ireg;
 	    freg = 0;
 	} 
     }
--- a/mc-code-mips.c	Thu Dec 29 01:10:01 2005 +0900
+++ b/mc-code-mips.c	Thu Dec 29 11:05:21 2005 +0900
@@ -643,7 +643,7 @@
         }
     }
     /* 空いている場所がないなら、エラー (いったい誰が使ってるの?) */
-    error(HPERR); return creg;
+    error(RGERR); return creg;
 }
 
 #if 0
@@ -1916,7 +1916,7 @@
 	use_input_reg(regv_l(reg),0);
     } else if (is_float_reg(reg)) {
 	if (freg&&reg == freg) {
-	    if (creg==freg) creg = 0;
+	    if (creg==freg) creg = ireg;
 	    freg = 0;
 	} 
     }
--- a/mc-code-powerpc.c	Thu Dec 29 01:10:01 2005 +0900
+++ b/mc-code-powerpc.c	Thu Dec 29 11:05:21 2005 +0900
@@ -466,8 +466,8 @@
 
 void
 code_gexpr(int e){
-//     if (is_int_reg(creg) && creg!=ireg) error(-1);
-//    register_usage("code_gexpr");
+     if (is_int_reg(creg) && creg!=ireg) error(-1);
+     register_usage("code_gexpr");
 }
 
 
@@ -1812,7 +1812,7 @@
 		if (regv_h(lreg)>reg&&regs[regv_h(lreg)]==USING_REG) {
 		    free_register(regv_h(lreg));
 		}
-		if (creg==lreg) creg = 0;
+		if (creg==lreg) creg = ireg;
 		free_register(lreg);
 		lreg = 0;
 	    } else if (regv_h(lreg)==reg) {
@@ -1820,7 +1820,7 @@
 		if (regv_h(lreg)>reg&&regs[regv_l(lreg)]==USING_REG) {
 		    free_register(regv_l(lreg));
 		}
-		if (creg==lreg) creg = 0;
+		if (creg==lreg) creg = ireg;
 		free_register(lreg);
 		lreg = 0;
 	    }
@@ -1830,7 +1830,7 @@
 	use_input_reg(regv_l(reg),0);
     } else if (is_float_reg(reg)) {
 	if (freg&&reg == freg) {
-	    if (creg==freg) creg = 0;
+	    if (creg==freg) creg = ireg; 
 	    freg = 0;
 	} 
     }
--- a/mc-inline.c	Thu Dec 29 01:10:01 2005 +0900
+++ b/mc-inline.c	Thu Dec 29 11:05:21 2005 +0900
@@ -591,7 +591,7 @@
     switch(stmode) {
     case EXTRN: case EXTRN1: case STATIC:
 	    return pexpr(cadr(e));
-#if 0
+#if 1
     case REGISTER:
 	switch(n->ty) {
 	case ULONGLONG: case LONGLONG:
@@ -606,6 +606,7 @@
 	    else
 		error(TYERR);
 	}
+	break;
 #endif
     default:
 	v = list3(LVAR,new_lvar(size(n->ty)),(int)n);
@@ -785,21 +786,13 @@
     switch (car(e1)){
     case GVAR: case RGVAR: case CRGVAR: case CURGVAR: case SRGVAR:
     case SURGVAR: case REGISTER:
-#if FLOAT_CODE
     case DREGISTER: case FREGISTER:
     case FRGVAR: case  DRGVAR:
-#endif
-#if LONGLONG_CODE
     case LREGISTER:
     case LRGVAR: case LURGVAR:
-#endif
     case LABEL: case CONST: 
-#if FLOAT_CODE
     case DCONST: case FCONST:
-#endif
-#if LONGLONG_CODE
     case LCONST:
-#endif
     case STRING:
     case FNAME:
     case FLABEL:
@@ -807,12 +800,8 @@
 	return e1;
     case LVAR:
     case RLVAR: case CRLVAR: case CURLVAR: case SRLVAR: case SURLVAR:
-#if FLOAT_CODE
     case FRLVAR: case DRLVAR: 
-#endif
-#if LONGLONG_CODE
     case LRLVAR: case LURLVAR: 
-#endif
 	return e1;
     case IVAR:
 	return p_lvar(e1);
@@ -827,12 +816,8 @@
     case RINDIRECT:  case URINDIRECT:  
     case CRINDIRECT: case CURINDIRECT:
     case SRINDIRECT: case SURINDIRECT:
-#if FLOAT_CODE
     case FRINDIRECT: case DRINDIRECT: 
-#endif
-#if LONGLONG_CODE
     case LRINDIRECT: case LURINDIRECT:
-#endif
 	return prindirect(e1);
     case ADDRESS:
 	return paddress(e1);
@@ -1077,10 +1062,8 @@
 	    arg = heap[pdisp+narg]=list3(LVAR,new_lvar(size(t)),0);
 	    inline_lvars = glist2(arg,inline_lvars);
 	    //  should contain correct argument variable name
-	    if (anptr)
-		printf("## var %s\n",anptr->nm);
-	    else
-		printf("## var 0\n");
+	    // if (anptr) printf("## var %s\n",anptr->nm);
+	    // else printf("## var 0\n");
 	    g_expr_u(assign_expr0(arg,e4,t,t));
 	}
 	narg ++;