aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ccallback.c
diff options
context:
space:
mode:
authorMike Pall <mike>2015-12-18 21:38:03 +0100
committerMike Pall <mike>2015-12-18 21:38:03 +0100
commit0345f361531c756367257eb2f147c707e1710218 (patch)
tree65dfb35f899caab0dc1f21eed8a0988e1ff2dcab /src/lj_ccallback.c
parent3f5c72421e282a2a4d8614064f13097678b80be1 (diff)
downloadluajit-0345f361531c756367257eb2f147c707e1710218.tar.gz
luajit-0345f361531c756367257eb2f147c707e1710218.tar.bz2
luajit-0345f361531c756367257eb2f147c707e1710218.zip
MIPS soft-float, part 2: Add soft-float FFI support.
Diffstat (limited to 'src/lj_ccallback.c')
-rw-r--r--src/lj_ccallback.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c
index 065c329f..539c9e3d 100644
--- a/src/lj_ccallback.c
+++ b/src/lj_ccallback.c
@@ -427,6 +427,15 @@ void lj_ccallback_mcode_free(CTState *cts)
427 427
428#elif LJ_TARGET_MIPS 428#elif LJ_TARGET_MIPS
429 429
430#define CALLBACK_HANDLE_GPR \
431 if (n > 1) ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \
432 if (ngpr + n <= maxgpr) { \
433 sp = &cts->cb.gpr[ngpr]; \
434 ngpr += n; \
435 goto done; \
436 }
437
438#if !LJ_ABI_SOFTFP /* MIPS32 hard-float */
430#define CALLBACK_HANDLE_REGARG \ 439#define CALLBACK_HANDLE_REGARG \
431 if (isfp && nfpr < CCALL_NARG_FPR) { /* Try to pass argument in FPRs. */ \ 440 if (isfp && nfpr < CCALL_NARG_FPR) { /* Try to pass argument in FPRs. */ \
432 sp = (void *)((uint8_t *)&cts->cb.fpr[nfpr] + ((LJ_BE && n==1) ? 4 : 0)); \ 441 sp = (void *)((uint8_t *)&cts->cb.fpr[nfpr] + ((LJ_BE && n==1) ? 4 : 0)); \
@@ -434,13 +443,13 @@ void lj_ccallback_mcode_free(CTState *cts)
434 goto done; \ 443 goto done; \
435 } else { /* Try to pass argument in GPRs. */ \ 444 } else { /* Try to pass argument in GPRs. */ \
436 nfpr = CCALL_NARG_FPR; \ 445 nfpr = CCALL_NARG_FPR; \
437 if (n > 1) ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ 446 CALLBACK_HANDLE_GPR \
438 if (ngpr + n <= maxgpr) { \
439 sp = &cts->cb.gpr[ngpr]; \
440 ngpr += n; \
441 goto done; \
442 } \
443 } 447 }
448#else /* MIPS32 soft-float */
449#define CALLBACK_HANDLE_REGARG \
450 CALLBACK_HANDLE_GPR \
451 UNUSED(isfp);
452#endif
444 453
445#define CALLBACK_HANDLE_RET \ 454#define CALLBACK_HANDLE_RET \
446 if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ 455 if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \