diff options
author | Mike Pall <mike> | 2023-08-29 02:12:13 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2023-08-29 02:12:13 +0200 |
commit | cf903edb30e0cbd620ebd4bac02d4e2b4410fd02 (patch) | |
tree | 5480b7ecf44a9bd980a1fd91e7113fcafe1f15ca /src/vm_x86.dasc | |
parent | 7cc53f0b85f834dfba1516ea79d59db463e856fa (diff) | |
download | luajit-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.dasc | 22 |
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 |