aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2021-05-02 22:11:05 +0200
committerMike Pall <mike>2021-05-02 22:11:05 +0200
commit521b367567dc5d91d7f9ae29c257998953e24e53 (patch)
tree861bfa525eac0e4eb2bdb58a1bb52d33f47ec62c
parentfcdb246506149b62fdc557e687d0ba98ecc9aed0 (diff)
downloadluajit-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.c8
-rw-r--r--src/lj_ccallback.c2
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]; \