diff --git a/src/lj_asm.c b/src/lj_asm.c index 038f4d1c..316e81d6 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c @@ -948,7 +948,7 @@ static void asm_collectargs(ASMState *as, IRIns *ir, const CCallInfo *ci, IRRef *args) { uint32_t n = CCI_NARGS(ci); - lua_assert(n <= CCI_NARGS_MAX); + lua_assert(n <= CCI_NARGS_MAX*2); /* Account for split args. */ if ((ci->flags & CCI_L)) { *args++ = ASMREF_L; n--; } while (n-- > 1) { ir = IR(ir->op1); diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h index 7c5f7188..a66573c0 100644 --- a/src/lj_asm_arm.h +++ b/src/lj_asm_arm.h @@ -464,7 +464,7 @@ static void asm_call(ASMState *as, IRIns *ir) static void asm_callx(ASMState *as, IRIns *ir) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; CCallInfo ci; IRRef func; IRIns *irf; @@ -2295,7 +2295,7 @@ static void asm_ir(ASMState *as, IRIns *ir) /* Ensure there are enough stack slots for call arguments. */ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; uint32_t i, nargs = (int)CCI_NARGS(ci); int nslots = 0, ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR, fprodd = 0; asm_collectargs(as, ir, ci, args); diff --git a/src/lj_asm_mips.h b/src/lj_asm_mips.h index 7d1a8c68..9fe7c9c3 100644 --- a/src/lj_asm_mips.h +++ b/src/lj_asm_mips.h @@ -337,7 +337,7 @@ static void asm_call(ASMState *as, IRIns *ir) static void asm_callx(ASMState *as, IRIns *ir) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; CCallInfo ci; IRRef func; IRIns *irf; @@ -1894,7 +1894,7 @@ static void asm_ir(ASMState *as, IRIns *ir) /* Ensure there are enough stack slots for call arguments. */ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; uint32_t i, nargs = (int)CCI_NARGS(ci); int nslots = 4, ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR; asm_collectargs(as, ir, ci, args); diff --git a/src/lj_asm_ppc.h b/src/lj_asm_ppc.h index 34bd721f..651fa318 100644 --- a/src/lj_asm_ppc.h +++ b/src/lj_asm_ppc.h @@ -340,7 +340,7 @@ static void asm_call(ASMState *as, IRIns *ir) static void asm_callx(ASMState *as, IRIns *ir) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; CCallInfo ci; IRRef func; IRIns *irf; @@ -2092,7 +2092,7 @@ static void asm_ir(ASMState *as, IRIns *ir) /* Ensure there are enough stack slots for call arguments. */ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; uint32_t i, nargs = (int)CCI_NARGS(ci); int nslots = 2, ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR; asm_collectargs(as, ir, ci, args); diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index 8bae1789..64441ccb 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h @@ -609,7 +609,7 @@ static void *asm_callx_func(ASMState *as, IRIns *irf, IRRef func) static void asm_callx(ASMState *as, IRIns *ir) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; CCallInfo ci; IRRef func; IRIns *irf; @@ -2742,7 +2742,7 @@ static void asm_ir(ASMState *as, IRIns *ir) /* Ensure there are enough stack slots for call arguments. */ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) { - IRRef args[CCI_NARGS_MAX]; + IRRef args[CCI_NARGS_MAX*2]; int nslots; asm_collectargs(as, ir, ci, args); nslots = asm_count_call_slots(as, ci, args);