summaryrefslogtreecommitdiff
path: root/src/lj_ccall.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_ccall.h')
-rw-r--r--src/lj_ccall.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/lj_ccall.h b/src/lj_ccall.h
index 5985c4a9..62f963e1 100644
--- a/src/lj_ccall.h
+++ b/src/lj_ccall.h
@@ -51,12 +51,21 @@ typedef intptr_t GPRArg;
51#elif LJ_TARGET_ARM 51#elif LJ_TARGET_ARM
52 52
53#define CCALL_NARG_GPR 4 53#define CCALL_NARG_GPR 4
54#define CCALL_NARG_FPR 0
55#define CCALL_NRET_GPR 2 /* For softfp double. */ 54#define CCALL_NRET_GPR 2 /* For softfp double. */
55#if LJ_ABI_SOFTFP
56#define CCALL_NARG_FPR 0
56#define CCALL_NRET_FPR 0 57#define CCALL_NRET_FPR 0
58#else
59#define CCALL_NARG_FPR 8
60#define CCALL_NRET_FPR 4
61#endif
57#define CCALL_SPS_FREE 0 62#define CCALL_SPS_FREE 0
58 63
59typedef intptr_t GPRArg; 64typedef intptr_t GPRArg;
65typedef union FPRArg {
66 double d;
67 float f[2];
68} FPRArg;
60 69
61#elif LJ_TARGET_PPC 70#elif LJ_TARGET_PPC
62 71
@@ -122,7 +131,7 @@ LJ_STATIC_ASSERT(CCALL_NUM_FPR <= CCALL_MAX_FPR);
122 131
123/* -- C call state -------------------------------------------------------- */ 132/* -- C call state -------------------------------------------------------- */
124 133
125typedef struct CCallState { 134typedef LJ_ALIGN(8) struct CCallState {
126 void (*func)(void); /* Pointer to called function. */ 135 void (*func)(void); /* Pointer to called function. */
127 uint32_t spadj; /* Stack pointer adjustment. */ 136 uint32_t spadj; /* Stack pointer adjustment. */
128 uint8_t nsp; /* Number of stack slots. */ 137 uint8_t nsp; /* Number of stack slots. */
@@ -135,10 +144,10 @@ typedef struct CCallState {
135#elif LJ_TARGET_PPC 144#elif LJ_TARGET_PPC
136 uint8_t nfpr; /* Number of arguments in FPRs. */ 145 uint8_t nfpr; /* Number of arguments in FPRs. */
137#endif 146#endif
138#if CCALL_NUM_FPR
139#if LJ_32 147#if LJ_32
140 int32_t align1; 148 int32_t align1;
141#endif 149#endif
150#if CCALL_NUM_FPR
142 FPRArg fpr[CCALL_NUM_FPR]; /* Arguments/results in FPRs. */ 151 FPRArg fpr[CCALL_NUM_FPR]; /* Arguments/results in FPRs. */
143#endif 152#endif
144 GPRArg gpr[CCALL_NUM_GPR]; /* Arguments/results in GPRs. */ 153 GPRArg gpr[CCALL_NUM_GPR]; /* Arguments/results in GPRs. */