diff options
Diffstat (limited to 'src/lj_ccall.h')
-rw-r--r-- | src/lj_ccall.h | 15 |
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 | ||
59 | typedef intptr_t GPRArg; | 64 | typedef intptr_t GPRArg; |
65 | typedef 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 | ||
125 | typedef struct CCallState { | 134 | typedef 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. */ |