stop trying to assing vfp regs once we are done with the registers

This commit is contained in:
David Schneider
2013-11-13 14:26:57 +01:00
parent 37067ec503
commit 77f823e31f

View File

@@ -861,7 +861,7 @@ static int vfp_type_p (ffi_type *t)
return 0; return 0;
} }
static void place_vfp_arg (ffi_cif *cif, ffi_type *t) static int place_vfp_arg (ffi_cif *cif, ffi_type *t)
{ {
int reg = cif->vfp_reg_free; int reg = cif->vfp_reg_free;
int nregs = t->size / sizeof (float); int nregs = t->size / sizeof (float);
@@ -894,12 +894,13 @@ static void place_vfp_arg (ffi_cif *cif, ffi_type *t)
reg += 1; reg += 1;
cif->vfp_reg_free = reg; cif->vfp_reg_free = reg;
} }
return; return 0;
next_reg: ; next_reg: ;
} }
// done mark all regs as used // done, mark all regs as used
cif->vfp_reg_free = 16; cif->vfp_reg_free = 16;
cif->vfp_used = 0xFFFF; cif->vfp_used = 0xFFFF;
return 1;
} }
static void layout_vfp_args (ffi_cif *cif) static void layout_vfp_args (ffi_cif *cif)
@@ -914,7 +915,9 @@ static void layout_vfp_args (ffi_cif *cif)
for (i = 0; i < cif->nargs; i++) for (i = 0; i < cif->nargs; i++)
{ {
ffi_type *t = cif->arg_types[i]; ffi_type *t = cif->arg_types[i];
if (vfp_type_p (t)) if (vfp_type_p (t) && place_vfp_arg (cif, t) == 1)
place_vfp_arg (cif, t); {
break;
}
} }
} }