Browse Source

Fix handling of alignment arguments (nil) to CALLX.

Mike Pall 14 years ago
parent
commit
32098921fd
2 changed files with 3 additions and 3 deletions
  1. 1 1
      src/lj_asm_arm.h
  2. 2 2
      src/lj_asm_x86.h

+ 1 - 1
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 {

+ 2 - 2
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;
   }