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 /src | |
| 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.
Diffstat (limited to 'src')
| -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]; \ |
