diff mc-code-mips.c @ 254:5aaca4f9d96b

*** empty log message ***
author kono
date Wed, 12 May 2004 21:44:45 +0900
parents 7b2762739df6
children 8cd8d72286ae
line wrap: on
line diff
--- a/mc-code-mips.c	Wed May 12 19:48:42 2004 +0900
+++ b/mc-code-mips.c	Wed May 12 21:44:45 2004 +0900
@@ -878,7 +878,7 @@
 emit_init(void)
 {
     free_all_register();
-    max_reg_var=-1; max_freg_var=-1;
+    max_reg_var=0; max_freg_var=0;
     reg_sp = 0;
     freg_sp = 0;
     text_mode();
@@ -2519,18 +2519,20 @@
 }
 
 
+#define round16(i)   ((i+0xf)&~0xf)
 void
 leave(int control, char *name)
 {
     int retcont1=0,sz;
     int r1_offsetv;
     int lvar_offsetv;
-
-    if (max_freg_var>=0 && max_freg_var<=3) max_freg_var=3; 
+    int nireg,nfreg;
+
+    // if (max_freg_var>=0 && max_freg_var<=3) max_freg_var=3; 
     reg_save = 
-	(REAL_MAX_REGISTER-(REG_VAR_BASE-max_reg_var))*size_of_int;
+	(REAL_MAX_REGISTER-(REG_VAR_BASE-max_reg_var))*SIZE_OF_INT;
     freg_save = 
-	(REAL_MAX_FREGISTER-(FREG_VAR_BASE-max_freg_var))*size_of_float;
+	(REAL_MAX_FREGISTER-(FREG_VAR_BASE-max_freg_var))*SIZE_OF_FLOAT;
 
     if (control) {
 	code_set_return_register(1);
@@ -2552,7 +2554,7 @@
 	    sz = size(cadr(fnptr->ty));
 	    printf("\tli $4,%d\n",sz);
 	    printf("\tsubl $5,$4,$fp\n");
-	    printf("\tlw $3,(%d)($fp)\n",(my_func_args-1)*size_of_int);
+	    printf("\tlw $3,(%d)($fp)\n",(my_func_args-1)*SIZE_OF_INT);
 	    emit_copy(6,3,sz,0,1,1);
 	} else if (cadr(fnptr->ty)!=VOID) {
 	    if (creg!=RET_REGISTER)
@@ -2577,7 +2579,7 @@
     fprintf(asi,"$L_%d=%d\n",cprestore_label ,max_func_iargs);
 #endif
 
-    disp &= -size_of_int;
+    disp &= -SIZE_OF_INT;
     r1_offsetv = disp;
     printf(".set L_%d,%d\n",r1_offset_label,r1_offsetv);
     printf(".set L_%d,%d\n",lvar_offset_label,lvar_offsetv);
@@ -2592,7 +2594,14 @@
 
     printf("\t.align 2\n");
     printf("%s:\n",name);
-    printf("\t.frame $fp,%d,$31\n",0);
+    printf("\t.frame $fp,%d,$31\t",0);
+printf("# vars= %d, regs= %d/%d, args= %d, extra= %d\n",
+	round16(-disp),
+	max_reg_var+2,
+	max_freg_var,
+	round16(max_func_args*SIZE_OF_INT),
+	0
+);
     printf("\t.mask  0x%x,%d\n",code_mask(),0);
     printf("\t.fmask 0x%x,%d\n",code_fmask(),0);
 
@@ -2600,7 +2609,7 @@
     printf("\t.cpload $25\n");
     printf("\t.set reorder\n");
     printf("\tsubu $sp,$sp,$L_%d\n",-r1_offsetv);
-    printf("\t.cprestore %d\n",max_func_iargs);
+    printf("\t.cprestore %d\n",max_func_args*SIZE_OF_INT);
     code_register_save(reg_save,freg_save,disp);
     printf("\tj $L_%d\n",code_top_label);