aboutsummaryrefslogtreecommitdiff
path: root/src/vm_x86.dasc
diff options
context:
space:
mode:
authorMike Pall <mike>2023-08-29 02:12:13 +0200
committerMike Pall <mike>2023-08-29 02:12:13 +0200
commitcf903edb30e0cbd620ebd4bac02d4e2b4410fd02 (patch)
tree5480b7ecf44a9bd980a1fd91e7113fcafe1f15ca /src/vm_x86.dasc
parent7cc53f0b85f834dfba1516ea79d59db463e856fa (diff)
downloadluajit-cf903edb30e0cbd620ebd4bac02d4e2b4410fd02.tar.gz
luajit-cf903edb30e0cbd620ebd4bac02d4e2b4410fd02.tar.bz2
luajit-cf903edb30e0cbd620ebd4bac02d4e2b4410fd02.zip
FFI: Unify stack setup for C calls in interpreter.
Diffstat (limited to 'src/vm_x86.dasc')
-rw-r--r--src/vm_x86.dasc22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/vm_x86.dasc b/src/vm_x86.dasc
index bda9d7d7..c44a24ff 100644
--- a/src/vm_x86.dasc
+++ b/src/vm_x86.dasc
@@ -3314,19 +3314,25 @@ static void build_subroutines(BuildCtx *ctx)
3314 | 3314 |
3315 | // Copy stack slots. 3315 | // Copy stack slots.
3316 | movzx ecx, byte CCSTATE->nsp 3316 | movzx ecx, byte CCSTATE->nsp
3317 | sub ecx, 1 3317 |.if X64
3318 | sub ecx, 8
3318 | js >2 3319 | js >2
3319 |1: 3320 |1:
3320 |.if X64 3321 | mov rax, [CCSTATE+rcx+offsetof(CCallState, stack)]
3321 | mov rax, [CCSTATE+rcx*8+offsetof(CCallState, stack)] 3322 | mov [rsp+rcx+CCALL_SPS_EXTRA*8], rax
3322 | mov [rsp+rcx*8+CCALL_SPS_EXTRA*8], rax 3323 | sub ecx, 8
3324 | jns <1
3325 |2:
3323 |.else 3326 |.else
3324 | mov eax, [CCSTATE+ecx*4+offsetof(CCallState, stack)] 3327 | sub ecx, 4
3325 | mov [esp+ecx*4], eax 3328 | js >2
3326 |.endif 3329 |1:
3327 | sub ecx, 1 3330 | mov eax, [CCSTATE+ecx+offsetof(CCallState, stack)]
3331 | mov [esp+ecx], eax
3332 | sub ecx, 4
3328 | jns <1 3333 | jns <1
3329 |2: 3334 |2:
3335 |.endif
3330 | 3336 |
3331 |.if X64 3337 |.if X64
3332 | movzx eax, byte CCSTATE->nfpr 3338 | movzx eax, byte CCSTATE->nfpr