mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Avoid unnecessary vararg loads.
This commit is contained in:
parent
5b740046f8
commit
b69c02eb68
@ -1986,6 +1986,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
|
|||||||
if (nresults >= 0) { /* Known fixed number of results. */
|
if (nresults >= 0) { /* Known fixed number of results. */
|
||||||
ptrdiff_t i;
|
ptrdiff_t i;
|
||||||
if (nvararg > 0) {
|
if (nvararg > 0) {
|
||||||
|
ptrdiff_t nload = nvararg >= nresults ? nresults : nvararg;
|
||||||
TRef vbase;
|
TRef vbase;
|
||||||
if (nvararg >= nresults)
|
if (nvararg >= nresults)
|
||||||
emitir(IRTGI(IR_GE), fr, lj_ir_kint(J, frofs+8*(int32_t)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)));
|
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(IRTI(IR_SUB), REF_BASE, fr);
|
||||||
vbase = emitir(IRT(IR_ADD, IRT_PTR), vbase, lj_ir_kint(J, frofs-8));
|
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]);
|
IRType t = itype2irt(&J->L->base[i-1-nvararg]);
|
||||||
TRef aref = emitir(IRT(IR_AREF, IRT_PTR),
|
TRef aref = emitir(IRT(IR_AREF, IRT_PTR),
|
||||||
vbase, lj_ir_kint(J, (int32_t)i));
|
vbase, lj_ir_kint(J, (int32_t)i));
|
||||||
|
Loading…
Reference in New Issue
Block a user