Browse Source

Avoid unnecessary vararg loads.

Mike Pall 15 years ago
parent
commit
b69c02eb68
1 changed files with 2 additions and 1 deletions
  1. 2 1
      src/lj_record.c

+ 2 - 1
src/lj_record.c

@@ -1986,6 +1986,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
     if (nresults >= 0) {  /* Known fixed number of results. */
       ptrdiff_t i;
       if (nvararg > 0) {
+	ptrdiff_t nload = nvararg >= nresults ? nresults : nvararg;
 	TRef vbase;
 	if (nvararg >= nresults)
 	  emitir(IRTGI(IR_GE), fr, lj_ir_kint(J, frofs+8*(int32_t)nresults));
@@ -1993,7 +1994,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
 	  emitir(IRTGI(IR_EQ), fr, lj_ir_kint(J, frame_ftsz(J->L->base-1)));
 	vbase = emitir(IRTI(IR_SUB), REF_BASE, fr);
 	vbase = emitir(IRT(IR_ADD, IRT_PTR), vbase, lj_ir_kint(J, frofs-8));
-	for (i = 0; i < nvararg; i++) {
+	for (i = 0; i < nload; i++) {
 	  IRType t = itype2irt(&J->L->base[i-1-nvararg]);
 	  TRef aref = emitir(IRT(IR_AREF, IRT_PTR),
 			     vbase, lj_ir_kint(J, (int32_t)i));