Mercurial > hg > CbC > old > device
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);