aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-14 16:48:25 +0200
committerMike Pall <mike>2010-09-14 16:48:25 +0200
commitb69c02eb68b91af7f45c45fcc6a70526d4d62797 (patch)
treefe516f2907cff24f7eec77d427c0ecd14d9af7af
parent5b740046f8cadde4e60199a7bc09a451a384ca70 (diff)
downloadluajit-b69c02eb68b91af7f45c45fcc6a70526d4d62797.tar.gz
luajit-b69c02eb68b91af7f45c45fcc6a70526d4d62797.tar.bz2
luajit-b69c02eb68b91af7f45c45fcc6a70526d4d62797.zip
Avoid unnecessary vararg loads.
-rw-r--r--src/lj_record.c3
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));