aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ccallback.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_ccallback.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c
index 846827b1..03494a7a 100644
--- a/src/lj_ccallback.c
+++ b/src/lj_ccallback.c
@@ -419,6 +419,23 @@ void lj_ccallback_mcode_free(CTState *cts)
419 419
420#elif LJ_TARGET_PPC 420#elif LJ_TARGET_PPC
421 421
422#define CALLBACK_HANDLE_GPR \
423 if (n > 1) { \
424 lua_assert(((LJ_ABI_SOFTFP && ctype_isnum(cta->info)) || /* double. */ \
425 ctype_isinteger(cta->info)) && n == 2); /* int64_t. */ \
426 ngpr = (ngpr + 1u) & ~1u; /* Align int64_t to regpair. */ \
427 } \
428 if (ngpr + n <= maxgpr) { \
429 sp = &cts->cb.gpr[ngpr]; \
430 ngpr += n; \
431 goto done; \
432 }
433
434#if LJ_ABI_SOFTFP
435#define CALLBACK_HANDLE_REGARG \
436 CALLBACK_HANDLE_GPR \
437 UNUSED(isfp);
438#else
422#define CALLBACK_HANDLE_REGARG \ 439#define CALLBACK_HANDLE_REGARG \
423 if (isfp) { \ 440 if (isfp) { \
424 if (nfpr + 1 <= CCALL_NARG_FPR) { \ 441 if (nfpr + 1 <= CCALL_NARG_FPR) { \
@@ -427,20 +444,15 @@ void lj_ccallback_mcode_free(CTState *cts)
427 goto done; \ 444 goto done; \
428 } \ 445 } \
429 } else { /* Try to pass argument in GPRs. */ \ 446 } else { /* Try to pass argument in GPRs. */ \
430 if (n > 1) { \ 447 CALLBACK_HANDLE_GPR \
431 lua_assert(ctype_isinteger(cta->info) && n == 2); /* int64_t. */ \
432 ngpr = (ngpr + 1u) & ~1u; /* Align int64_t to regpair. */ \
433 } \
434 if (ngpr + n <= maxgpr) { \
435 sp = &cts->cb.gpr[ngpr]; \
436 ngpr += n; \
437 goto done; \
438 } \
439 } 448 }
449#endif
440 450
451#if !LJ_ABI_SOFTFP
441#define CALLBACK_HANDLE_RET \ 452#define CALLBACK_HANDLE_RET \
442 if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ 453 if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \
443 *(double *)dp = *(float *)dp; /* FPRs always hold doubles. */ 454 *(double *)dp = *(float *)dp; /* FPRs always hold doubles. */
455#endif
444 456
445#elif LJ_TARGET_MIPS32 457#elif LJ_TARGET_MIPS32
446 458