diff options
-rw-r--r-- | src/lj_record.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index e283d1e5..42bcca1a 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -1986,6 +1986,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults) | |||
1986 | if (nresults >= 0) { /* Known fixed number of results. */ | 1986 | if (nresults >= 0) { /* Known fixed number of results. */ |
1987 | ptrdiff_t i; | 1987 | ptrdiff_t i; |
1988 | if (nvararg > 0) { | 1988 | if (nvararg > 0) { |
1989 | ptrdiff_t nload = nvararg >= nresults ? nresults : nvararg; | ||
1989 | TRef vbase; | 1990 | TRef vbase; |
1990 | if (nvararg >= nresults) | 1991 | if (nvararg >= nresults) |
1991 | emitir(IRTGI(IR_GE), fr, lj_ir_kint(J, frofs+8*(int32_t)nresults)); | 1992 | 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) | |||
1993 | emitir(IRTGI(IR_EQ), fr, lj_ir_kint(J, frame_ftsz(J->L->base-1))); | 1994 | emitir(IRTGI(IR_EQ), fr, lj_ir_kint(J, frame_ftsz(J->L->base-1))); |
1994 | vbase = emitir(IRTI(IR_SUB), REF_BASE, fr); | 1995 | vbase = emitir(IRTI(IR_SUB), REF_BASE, fr); |
1995 | vbase = emitir(IRT(IR_ADD, IRT_PTR), vbase, lj_ir_kint(J, frofs-8)); | 1996 | vbase = emitir(IRT(IR_ADD, IRT_PTR), vbase, lj_ir_kint(J, frofs-8)); |
1996 | for (i = 0; i < nvararg; i++) { | 1997 | for (i = 0; i < nload; i++) { |
1997 | IRType t = itype2irt(&J->L->base[i-1-nvararg]); | 1998 | IRType t = itype2irt(&J->L->base[i-1-nvararg]); |
1998 | TRef aref = emitir(IRT(IR_AREF, IRT_PTR), | 1999 | TRef aref = emitir(IRT(IR_AREF, IRT_PTR), |
1999 | vbase, lj_ir_kint(J, (int32_t)i)); | 2000 | vbase, lj_ir_kint(J, (int32_t)i)); |