changeset 266:86e315702d9e

*** empty log message ***
author kono
date Mon, 17 May 2004 04:18:12 +0900
parents b47a106a9bce
children e7ab23c992e5
files Changes mc-code-mips.c
diffstat 2 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Mon May 17 03:21:32 2004 +0900
+++ b/Changes	Mon May 17 04:18:12 2004 +0900
@@ -3750,6 +3750,7 @@
 かぁ。(めんどくさいだけどさ)
 
 (本気? どれくらいかかる? 2-3日かなぁ...)
+     (実際には半年かかった...)
 
 getsym の数字の扱いはunsingedでするべきだよね。
 で、- があった時にoverflow を検出するのが良いよな。
@@ -4300,6 +4301,8 @@
 まぁ、前者の方が凝っているし、命令数的にも変わらないから、
 space factor 的に前者の方が速いんじゃないか?
 
+でも後者の方が簡単だよな。
+
 Mon May 17 01:09:02 JST 2004
 
 さて、アセンブルは通るようになりましたが...
@@ -4309,3 +4312,5 @@
 
 あと、int の後のdouble/longlong は、$3 のあと、$5,$6 と
 来るみたいですね。
+
+
--- a/mc-code-mips.c	Mon May 17 03:21:32 2004 +0900
+++ b/mc-code-mips.c	Mon May 17 04:18:12 2004 +0900
@@ -1042,7 +1042,7 @@
     if (sign) {
         return sz==1?"lb":sz==SIZE_OF_SHORT?"lh":"lw"; 
     } else {
-        return sz==1?"lbu":sz==SIZE_OF_SHORT?"lhu":"lwu"; 
+        return sz==1?"lbu":sz==SIZE_OF_SHORT?"lhu":"lhu"; 
     }
 }
 
@@ -2383,7 +2383,8 @@
 	printf("\taddu %s,%s,-%d\n",crn,crn,v);
 	break;
     case CMP:
-      printf("\tslt %s,%s,%d\n",crn,crn,v);
+        printf("\tslt %s,%s,%d\n",crn,crn,v);
+        cmpreg = creg;
 	break;
     case BOR:
 	printf("\tori %s,%s,%d\n",crn,crn,v);
@@ -2429,6 +2430,7 @@
     rn = register_name(reg = get_register());
     printf("\tli %s,%d\n",rn,e);
     printf("\tsltu %s,%s,%s\n",rn,register_name(csreg),rn);
+    cmpreg=csreg;
     free_register(reg);
 }
 
@@ -2861,7 +2863,8 @@
     if (chk) return;
     if (n->dsp != -1) {
 	n->dsp = -1;   /* initiallized flag */
-	printf(".globl\t%s\n",name);
+	if (n->sc!=STATIC)
+	    printf(".globl\t%s\n",name);
 	data_mode(name);
 	align(t);
 	printf("%s:\n",name); 
@@ -3017,7 +3020,7 @@
 
 /* floating point */
 
-#define  set_double(freg) regs[freg]=USING_DREG
+#define  set_double(freg) if (regs[freg]) {regs[freg]=USING_DREG;}
 
 void
 code_cmp_dregister(int e2,int d)