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 {
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;
} 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;
}