changeset 595:cfd1eba00ce6

*** empty log message ***
author kono
date Sat, 21 Jan 2006 20:51:21 +0900
parents f49c825920c4
children 94d3a8c1b3e8
files Changes mc-code-arm.c
diffstat 2 files changed, 20 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Sat Jan 21 15:00:29 2006 +0900
+++ b/Changes	Sat Jan 21 20:51:21 2006 +0900
@@ -8570,8 +8570,22 @@
 いずれにせよ、environment は、設定した環境の中で不定の
 場所に陣どるので注意が必要。
 
-
-
-
-
-
+Sat Jan 21 18:06:10 JST 2006
+
+tosop のつまらないoptimizeのおかげでかなりはまりました。
+これよりは、assignment の方の
+    creg = hoge op hoge;
+    *lvalue = creg;
+を、
+    *lvalue = hoge op hoge;
+とする方をやりたいが....
+
+converter が、うまくないのは、1 pass だからだよね。multi-path
+通るようにできないかな?
+
+goto hoge(),env; で、env が 0 だったら、fp の切替えをしない
+って方が良くない? 出力コードは複雑になるが...
+
+
+
+
--- a/mc-code-arm.c	Sat Jan 21 15:00:29 2006 +0900
+++ b/mc-code-arm.c	Sat Jan 21 20:51:21 2006 +0900
@@ -2982,10 +2982,8 @@
 void
 tosop(int op,int creg,int oreg)
 {
-    int dx = -1;
     int ox = -1;
-    char *orn,*crn,*drn;
-    int creg0 = creg;
+    char *orn,*crn;
     // creg = creg op oreg
 
     use_int(creg);
@@ -3043,23 +3041,9 @@
     case MUL:
     case UMUL:
 	/* target!=source */
-#if 1
 	inc_inst(1);
 	printf("\tmul\t%s, %s, %s\n",crn,orn,crn);
 	break;
-#else
-	inc_inst(1);
-	drn = register_name(cadr(dx = get_register_var(0)));
-	if (car(dx)!=REGISTER) error(-1);
-	printf("\tmul\t%s, %s, %s\n",drn,crn,orn);
-	if (creg0==USE_CREG) {
-	    set_ireg(cadr(dx),0); dx = -1;
-	} else {
-	    printf("\tmov\t%s, %s\n",crn,drn);
-	}
-	if (dx!=-1) free_register(cadr(dx));
-	break;
-#endif
     case DIV:
 	code_int_lib("__divsi3",creg,oreg); break;
     case UDIV: