diff --git a/src/lj_ccall.c b/src/lj_ccall.c index a9b81aa5..499a01d8 100644 --- a/src/lj_ccall.c +++ b/src/lj_ccall.c @@ -337,7 +337,8 @@ if (LJ_TARGET_IOS && isva) { \ /* IOS: All variadic arguments are on the stack. */ \ } else if (isfp) { /* Try to pass argument in FPRs. */ \ - int n2 = ctype_isvector(d->info) ? 1 : n*isfp; \ + int n2 = ctype_isvector(d->info) ? 1 : \ + isfp == 1 ? n : (d->size >> (4-isfp)); \ if (nfpr + n2 <= CCALL_NARG_FPR) { \ dp = &cc->fpr[nfpr]; \ nfpr += n2; \