mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-08 07:34:07 +00:00
x64/LJ_GC64: Fix JIT glue code in interpreter.
Thanks to Peter Cawley.
This commit is contained in:
parent
d7145616ae
commit
c24c8e5312
@ -2325,7 +2325,8 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
|->cont_stitch: // Trace stitching.
|
|->cont_stitch: // Trace stitching.
|
||||||
|.if JIT
|
|.if JIT
|
||||||
| // BASE = base, RC = result, RB = mbase
|
| // BASE = base, RC = result, RB = mbase
|
||||||
| mov ITYPEd, [RB-24] // Save previous trace number.
|
| mov TRACE:ITYPE, [RB-40] // Save previous trace.
|
||||||
|
| cleartp TRACE:ITYPE
|
||||||
| mov TMPRd, MULTRES
|
| mov TMPRd, MULTRES
|
||||||
| movzx RAd, PC_RA
|
| movzx RAd, PC_RA
|
||||||
| lea RA, [BASE+RA*8] // Call base.
|
| lea RA, [BASE+RA*8] // Call base.
|
||||||
@ -2347,11 +2348,10 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
| cmp RC, RA
|
| cmp RC, RA
|
||||||
| ja >9 // More results wanted?
|
| ja >9 // More results wanted?
|
||||||
|
|
|
|
||||||
| mov RA, [DISPATCH+DISPATCH_J(trace)]
|
| test TRACE:ITYPE, TRACE:ITYPE
|
||||||
| mov TRACE:RD, [RA+ITYPE*8]
|
|
||||||
| test TRACE:RD, TRACE:RD
|
|
||||||
| jz ->cont_nop
|
| jz ->cont_nop
|
||||||
| movzx RDd, word TRACE:RD->link
|
| movzx RBd, word TRACE:ITYPE->traceno
|
||||||
|
| movzx RDd, word TRACE:ITYPE->link
|
||||||
| cmp RDd, RBd
|
| cmp RDd, RBd
|
||||||
| je ->cont_nop // Blacklisted.
|
| je ->cont_nop // Blacklisted.
|
||||||
| test RDd, RDd
|
| test RDd, RDd
|
||||||
@ -2404,10 +2404,10 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
| mov [rbp-8], r15; mov [rbp-16], r14
|
| mov [rbp-8], r15; mov [rbp-16], r14
|
||||||
| // Caveat: DISPATCH is rbx.
|
| // Caveat: DISPATCH is rbx.
|
||||||
| mov DISPATCH, [ebp]
|
| mov DISPATCH, [ebp]
|
||||||
| mov RA, [DISPATCH+DISPATCH_GL(vmstate)] // Get trace number.
|
| mov RAd, [DISPATCH+DISPATCH_GL(vmstate)] // Get trace number.
|
||||||
| set_vmstate EXIT
|
| set_vmstate EXIT
|
||||||
| mov [DISPATCH+DISPATCH_J(exitno)], RC
|
| mov [DISPATCH+DISPATCH_J(exitno)], RCd
|
||||||
| mov [DISPATCH+DISPATCH_J(parent)], RA
|
| mov [DISPATCH+DISPATCH_J(parent)], RAd
|
||||||
|.if X64WIN
|
|.if X64WIN
|
||||||
| sub rsp, 16*8+4*8 // Room for SSE regs + save area.
|
| sub rsp, 16*8+4*8 // Room for SSE regs + save area.
|
||||||
|.else
|
|.else
|
||||||
@ -2433,7 +2433,7 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
| mov CARG2, rsp
|
| mov CARG2, rsp
|
||||||
|.endif
|
|.endif
|
||||||
| lea CARG1, [DISPATCH+GG_DISP2J]
|
| lea CARG1, [DISPATCH+GG_DISP2J]
|
||||||
| mov dword [DISPATCH+DISPATCH_GL(jit_base)], 0
|
| mov qword [DISPATCH+DISPATCH_GL(jit_base)], 0
|
||||||
| call extern lj_trace_exit // (jit_State *J, ExitState *ex)
|
| call extern lj_trace_exit // (jit_State *J, ExitState *ex)
|
||||||
| // MULTRES or negated error code returned in eax (RD).
|
| // MULTRES or negated error code returned in eax (RD).
|
||||||
| mov RA, L:RB->cframe
|
| mov RA, L:RB->cframe
|
||||||
@ -2480,7 +2480,7 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
| mov KBASE, LFUNC:KBASE->pc
|
| mov KBASE, LFUNC:KBASE->pc
|
||||||
| mov KBASE, [KBASE+PC2PROTO(k)]
|
| mov KBASE, [KBASE+PC2PROTO(k)]
|
||||||
| mov L:RB->base, BASE
|
| mov L:RB->base, BASE
|
||||||
| mov dword [DISPATCH+DISPATCH_GL(jit_base)], 0
|
| mov qword [DISPATCH+DISPATCH_GL(jit_base)], 0
|
||||||
| set_vmstate INTERP
|
| set_vmstate INTERP
|
||||||
| // Modified copy of ins_next which handles function header dispatch, too.
|
| // Modified copy of ins_next which handles function header dispatch, too.
|
||||||
| mov RCd, [PC]
|
| mov RCd, [PC]
|
||||||
@ -2504,7 +2504,7 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
| // Otherwise set KBASE for Lua function below fast function.
|
| // Otherwise set KBASE for Lua function below fast function.
|
||||||
| movzx RCd, byte [RC-3]
|
| movzx RCd, byte [RC-3]
|
||||||
| neg RC
|
| neg RC
|
||||||
| mov LFUNC:KBASE, [BASE+RC*8-24]
|
| mov LFUNC:KBASE, [BASE+RC*8-32]
|
||||||
| cleartp LFUNC:KBASE
|
| cleartp LFUNC:KBASE
|
||||||
| mov KBASE, LFUNC:KBASE->pc
|
| mov KBASE, LFUNC:KBASE->pc
|
||||||
| mov KBASE, [KBASE+PC2PROTO(k)]
|
| mov KBASE, [KBASE+PC2PROTO(k)]
|
||||||
@ -4050,7 +4050,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| mov RC, [RA-24] // Copy control var. fb[1] = fb[-3].
|
| mov RC, [RA-24] // Copy control var. fb[1] = fb[-3].
|
||||||
| mov [RA], RB
|
| mov [RA], RB
|
||||||
| mov [RA+8], RC
|
| mov [RA+8], RC
|
||||||
| mov LFUNC:RB, [RA-40] // Copy callable. fb[-1] = fb[-5]
|
| mov LFUNC:RB, [RA-40] // Copy callable. fb[-2] = fb[-5]
|
||||||
| mov [RA-16], LFUNC:RB
|
| mov [RA-16], LFUNC:RB
|
||||||
| mov NARGS:RDd, 2+1 // Handle like a regular 2-arg call.
|
| mov NARGS:RDd, 2+1 // Handle like a regular 2-arg call.
|
||||||
| checkfunc LFUNC:RB, ->vmeta_call
|
| checkfunc LFUNC:RB, ->vmeta_call
|
||||||
|
Loading…
Reference in New Issue
Block a user