]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Avoid unnecessary vararg loads.
authorMike Pall <mike>
Tue, 14 Sep 2010 14:48:25 +0000 (16:48 +0200)
committerMike Pall <mike>
Tue, 14 Sep 2010 14:48:25 +0000 (16:48 +0200)
src/lj_record.c

index e283d1e5d3ae286ca49c83611b261dcd1c06987a..42bcca1a40b72c7842a6573c98858f4a02de2cac 100644 (file)
@@ -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));