changeset 220:97246ddfe8ab

*** empty log message ***
author kono
date Sun, 25 Apr 2004 19:03:04 +0900
parents 6190d24e178c
children ceae585186d9
files Changes mc-code-powerpc.c mc-codegen.c mc.h
diffstat 4 files changed, 21 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Sun Apr 25 18:32:30 2004 +0900
+++ b/Changes	Sun Apr 25 19:03:04 2004 +0900
@@ -3987,3 +3987,11 @@
    (6) 生成したコードが正しいかどうかを調べる 
 で、(4) までできました。
 
+
+やっぱり、use_int とかって、なんとなくだめ。だめな
+理由があるんだろうなぁ。ほとんどバグはここから
+来るんだものね。
+
+use_int とかは、codegen でやったんじゃいけなくて、
+もっとも下のcode生成部分でやらないといけないんじゃない?
+それでいいのか?
--- a/mc-code-powerpc.c	Sun Apr 25 18:32:30 2004 +0900
+++ b/mc-code-powerpc.c	Sun Apr 25 19:03:04 2004 +0900
@@ -580,17 +580,14 @@
     int h,l,i;
     i = get_lregister0();
     if (i==-1) return -1;
-    if (regs[i]==0) {
-	h = get_register(); 
-	if (h==-1) return -1;
-	regv_h(i) = h;
-	l = get_register(); 
-	if (l==-1) { free_register(h); return -1; }
-	regv_l(i) = l;
-	regs[i]=USING_REG;
-	return i;
-    }
-    return -1;
+    h = get_register(); 
+    if (h==-1) return -1;
+    regv_h(i) = h;
+    l = get_register(); 
+    if (l==-1) { free_register(h); return -1; }
+    regv_l(i) = l;
+    regs[i]=USING_REG;
+    return i;
 }
 
 int
--- a/mc-codegen.c	Sun Apr 25 18:32:30 2004 +0900
+++ b/mc-codegen.c	Sun Apr 25 19:03:04 2004 +0900
@@ -1399,15 +1399,16 @@
             return;
     case DREGISTER:
     case FREGISTER:
+	    if (d) creg = use_double(creg); else creg = use_float(creg);
             g_expr(e4);
 	    if (creg!=cadr(e2)) {
-		if (d) creg = use_double(creg); else creg = use_float(creg);
 		code_dassign_dregister(cadr(e2),d,creg);
 	    }
             return;
     }
     g_expr(e2);
     emit_push();
+    if (d) creg = use_double(creg); else creg = use_float(creg);
     g_expr(e4);
     e2 = emit_pop(0);
     code_dassign(e2,creg,d);
@@ -1482,15 +1483,16 @@
 	    code_lassign_lvar(cadr(e2),creg);
             return;
     case LREGISTER:
+	    creg = use_longlong(creg);
             g_expr(e4);
 	    if (creg!=cadr(e2)) {
-		creg = use_longlong(creg);
 		code_lassign_lregister(cadr(e2),creg);
 	    }
             return;
     }
     g_expr(e2);
     emit_push();
+    creg = use_longlong(creg);
     g_expr(e4);
     e2 = emit_pop(0);
     code_lassign(e2,creg);
--- a/mc.h	Sun Apr 25 18:32:30 2004 +0900
+++ b/mc.h	Sun Apr 25 19:03:04 2004 +0900
@@ -11,7 +11,7 @@
 #endif
 
 #define FLOAT_CODE 1
-#define LONGLONG_CODE 1
+#define LONGLONG_CODE 0
 
 #define SIZE_INT   4