Fix handling of alignment arguments (nil) to CALLX.

This commit is contained in:
Mike Pall 2011-10-24 16:14:01 +02:00
parent cb1dd159e3
commit 32098921fd
2 changed files with 3 additions and 3 deletions

View File

@ -1739,7 +1739,7 @@ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci)
int nslots = 0, ngpr = REGARG_NUMGPR;
asm_collectargs(as, ir, ci, args);
for (i = 0; i < nargs; i++)
if (!LJ_SOFTFP && irt_isfp(IR(args[i])->t)) {
if (!LJ_SOFTFP && args[i] && irt_isnum(IR(args[i])->t)) {
ngpr &= ~1;
if (ngpr > 0) ngpr -= 2; else nslots += 2;
} else {

View File

@ -2618,7 +2618,7 @@ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci)
uint32_t i;
int ngpr = 6, nfpr = 8;
for (i = 0; i < nargs; i++)
if (irt_isfp(IR(args[i])->t)) {
if (args[i] && irt_isfp(IR(args[i])->t)) {
if (nfpr > 0) nfpr--; else nslots += 2;
} else {
if (ngpr > 0) ngpr--; else nslots += 2;
@ -2633,7 +2633,7 @@ static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci)
} else {
uint32_t i;
for (i = 0; i < nargs; i++)
nslots += irt_isnum(IR(args[i])->t) ? 2 : 1;
nslots += (args[i] && irt_isnum(IR(args[i])->t)) ? 2 : 1;
if (nslots > as->evenspill) /* Leave room for args. */
as->evenspill = nslots;
}