diff options
Diffstat (limited to 'src/lj_ccall.c')
-rw-r--r-- | src/lj_ccall.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lj_ccall.c b/src/lj_ccall.c index 85d8af9c..da7b4738 100644 --- a/src/lj_ccall.c +++ b/src/lj_ccall.c | |||
@@ -164,6 +164,47 @@ | |||
164 | } \ | 164 | } \ |
165 | } | 165 | } |
166 | 166 | ||
167 | #elif LJ_TARGET_ARM | ||
168 | /* -- ARM calling conventions --------------------------------------------- */ | ||
169 | |||
170 | #define CCALL_HANDLE_STRUCTRET \ | ||
171 | /* Return structs of size <= 4 in a GPR. */ \ | ||
172 | cc->retref = !(sz <= 4); \ | ||
173 | if (cc->retref) cc->gpr[ngpr++] = (GPRArg)dp; | ||
174 | |||
175 | #define CCALL_HANDLE_COMPLEXRET \ | ||
176 | cc->retref = 1; /* Return all complex values by reference. */ \ | ||
177 | cc->gpr[ngpr++] = (GPRArg)dp; | ||
178 | |||
179 | #define CCALL_HANDLE_COMPLEXRET2 \ | ||
180 | UNUSED(dp); /* Nothing to do. */ | ||
181 | |||
182 | #define CCALL_HANDLE_STRUCTARG \ | ||
183 | /* Pass all structs by value in registers and/or on the stack. */ | ||
184 | |||
185 | #define CCALL_HANDLE_COMPLEXARG \ | ||
186 | /* Pass complex by value in 2 or 4 GPRs. */ | ||
187 | |||
188 | /* ARM has a softfp ABI. */ | ||
189 | #define CCALL_HANDLE_REGARG \ | ||
190 | if ((d->info & CTF_ALIGN) > CTALIGN_PTR) { \ | ||
191 | if (ngpr < maxgpr) \ | ||
192 | ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ | ||
193 | else \ | ||
194 | nsp = (nsp + 1u) & ~1u; /* Align argument on stack. */ \ | ||
195 | } \ | ||
196 | if (ngpr < maxgpr) { \ | ||
197 | dp = &cc->gpr[ngpr]; \ | ||
198 | if (ngpr + n > maxgpr) { \ | ||
199 | nsp += ngpr + n - maxgpr; /* Assumes contiguous gpr/stack fields. */ \ | ||
200 | if (nsp > CCALL_MAXSTACK) goto err_nyi; /* Too many arguments. */ \ | ||
201 | ngpr = maxgpr; \ | ||
202 | } else { \ | ||
203 | ngpr += n; \ | ||
204 | } \ | ||
205 | goto done; \ | ||
206 | } | ||
207 | |||
167 | #elif LJ_TARGET_PPCSPE | 208 | #elif LJ_TARGET_PPCSPE |
168 | /* -- PPC/SPE calling conventions ----------------------------------------- */ | 209 | /* -- PPC/SPE calling conventions ----------------------------------------- */ |
169 | 210 | ||