From 32098921fda08aad6d67efff20d2e1b31b92fa63 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 24 Oct 2011 16:14:01 +0200 Subject: [PATCH] Fix handling of alignment arguments (nil) to CALLX. --- src/lj_asm_arm.h | 2 +- src/lj_asm_x86.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h index 786dd831..1963f3ba 100644 --- a/src/lj_asm_arm.h +++ b/src/lj_asm_arm.h @@ -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 { diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index 6767e0c7..2edfe6e6 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h @@ -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; } -- 2.11.4.GIT