diff options
author | Mike Pall <mike> | 2021-05-02 22:11:05 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2021-05-02 22:11:05 +0200 |
commit | 521b367567dc5d91d7f9ae29c257998953e24e53 (patch) | |
tree | 861bfa525eac0e4eb2bdb58a1bb52d33f47ec62c | |
parent | fcdb246506149b62fdc557e687d0ba98ecc9aed0 (diff) | |
download | luajit-521b367567dc5d91d7f9ae29c257998953e24e53.tar.gz luajit-521b367567dc5d91d7f9ae29c257998953e24e53.tar.bz2 luajit-521b367567dc5d91d7f9ae29c257998953e24e53.zip |
FFI/ARM64/OSX: Fix vararg call handling.
Thanks to Igor Munkin.
-rw-r--r-- | src/lj_ccall.c | 8 | ||||
-rw-r--r-- | src/lj_ccallback.c | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/lj_ccall.c b/src/lj_ccall.c index a91ffc7e..3c029823 100644 --- a/src/lj_ccall.c +++ b/src/lj_ccall.c | |||
@@ -334,7 +334,7 @@ | |||
334 | isfp = sz == 2*sizeof(float) ? 2 : 1; | 334 | isfp = sz == 2*sizeof(float) ? 2 : 1; |
335 | 335 | ||
336 | #define CCALL_HANDLE_REGARG \ | 336 | #define CCALL_HANDLE_REGARG \ |
337 | if (LJ_TARGET_IOS && isva) { \ | 337 | if (LJ_TARGET_OSX && isva) { \ |
338 | /* IOS: All variadic arguments are on the stack. */ \ | 338 | /* IOS: All variadic arguments are on the stack. */ \ |
339 | } else if (isfp) { /* Try to pass argument in FPRs. */ \ | 339 | } else if (isfp) { /* Try to pass argument in FPRs. */ \ |
340 | int n2 = ctype_isvector(d->info) ? 1 : \ | 340 | int n2 = ctype_isvector(d->info) ? 1 : \ |
@@ -345,10 +345,10 @@ | |||
345 | goto done; \ | 345 | goto done; \ |
346 | } else { \ | 346 | } else { \ |
347 | nfpr = CCALL_NARG_FPR; /* Prevent reordering. */ \ | 347 | nfpr = CCALL_NARG_FPR; /* Prevent reordering. */ \ |
348 | if (LJ_TARGET_IOS && d->size < 8) goto err_nyi; \ | 348 | if (LJ_TARGET_OSX && d->size < 8) goto err_nyi; \ |
349 | } \ | 349 | } \ |
350 | } else { /* Try to pass argument in GPRs. */ \ | 350 | } else { /* Try to pass argument in GPRs. */ \ |
351 | if (!LJ_TARGET_IOS && (d->info & CTF_ALIGN) > CTALIGN_PTR) \ | 351 | if (!LJ_TARGET_OSX && (d->info & CTF_ALIGN) > CTALIGN_PTR) \ |
352 | ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ | 352 | ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ |
353 | if (ngpr + n <= maxgpr) { \ | 353 | if (ngpr + n <= maxgpr) { \ |
354 | dp = &cc->gpr[ngpr]; \ | 354 | dp = &cc->gpr[ngpr]; \ |
@@ -356,7 +356,7 @@ | |||
356 | goto done; \ | 356 | goto done; \ |
357 | } else { \ | 357 | } else { \ |
358 | ngpr = maxgpr; /* Prevent reordering. */ \ | 358 | ngpr = maxgpr; /* Prevent reordering. */ \ |
359 | if (LJ_TARGET_IOS && d->size < 8) goto err_nyi; \ | 359 | if (LJ_TARGET_OSX && d->size < 8) goto err_nyi; \ |
360 | } \ | 360 | } \ |
361 | } | 361 | } |
362 | 362 | ||
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c index 8d6cb737..80d738c6 100644 --- a/src/lj_ccallback.c +++ b/src/lj_ccallback.c | |||
@@ -414,7 +414,7 @@ void lj_ccallback_mcode_free(CTState *cts) | |||
414 | nfpr = CCALL_NARG_FPR; /* Prevent reordering. */ \ | 414 | nfpr = CCALL_NARG_FPR; /* Prevent reordering. */ \ |
415 | } \ | 415 | } \ |
416 | } else { \ | 416 | } else { \ |
417 | if (!LJ_TARGET_IOS && n > 1) \ | 417 | if (!LJ_TARGET_OSX && n > 1) \ |
418 | ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ | 418 | ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ |
419 | if (ngpr + n <= maxgpr) { \ | 419 | if (ngpr + n <= maxgpr) { \ |
420 | sp = &cts->cb.gpr[ngpr]; \ | 420 | sp = &cts->cb.gpr[ngpr]; \ |