# HG changeset patch # User kono # Date 947729410 -32400 # Node ID 535bf528d68f8701b38a12be13d43e2d4d898ab1 # Parent ca8e268dd7d4b88db3b38630e13827144bd54346 copy free jump diff -r ca8e268dd7d4 -r 535bf528d68f mc-nop-386.c --- a/mc-nop-386.c Thu Jan 13 10:54:33 2000 +0900 +++ b/mc-nop-386.c Thu Jan 13 11:10:10 2000 +0900 @@ -815,9 +815,9 @@ emit_push(); } /* compute arguments in reverse order */ -printf("# jump code_arg_offset=%d code_disp_offset=%d\n",code_arg_offset,code_disp_offset); +/* printf("# jump code_arg_offset=%d code_disp_offset=%d\n",code_arg_offset,code_disp_offset); */ regs = 0; - i=0; + i=MAX_REGISTER_VAR; for (e3=nargs; e3;e3 =cadr(e3)) { n=(NMTBL *)(e5=(cadr(e4 = caddr(e3)))); switch(car(e4)) { @@ -831,19 +831,23 @@ break; case RLVAR: case CRLVAR: - if (env==0) { - if (e5<0 && e5==car(e3)) { + if (env==0 && fnptr->sc==CODE) { +/* printf("# e5=%d car(e3)=%d\n",e5,car(e3)); */ + if (e5<=0 && e5==car(e3)) { /* The same positioned local variable. No need to copy */ reg_stack[reg_sp++] = -2; } + break; } g_expr(e4); emit_push(); break; case REGISTER: - if (i0 && rname[e5]==REG_ESI+ --i) { /* The same register variable. No need to copy */ reg_stack[reg_sp++] = e5; + break; } default: g_expr(e4); @@ -862,7 +866,7 @@ scode = fnptr->sc; fnptr->sc = CODE; scode_arg_offset = code_arg_offset; code_arg_offset = new_disp; -printf("# jump2 code_arg_offset=%d code_disp_offset=%d\n",code_arg_offset,code_disp_offset); +/* printf("# jump2 code_arg_offset=%d code_disp_offset=%d\n",code_arg_offset,code_disp_offset); */ /* copy arguments to destination environment if necessary */ nargs = reverse0(nargs); /* pop in normal order */ i=0; @@ -1305,7 +1309,7 @@ printf("\tsubl $%d,%%esp\n",-disp); } code_arg_offset = -args; -printf("# args %d code_arg_offset=%d code_disp_offset=%d\n",args,code_arg_offset,code_disp_offset); +/* printf("# args %d code_arg_offset=%d code_disp_offset=%d\n",args,code_arg_offset,code_disp_offset); */ } void