Change some misuses of esp in x64 interpreter.
This commit is contained in:
parent
d2156c7f73
commit
85d32aeb36
@ -150,28 +150,28 @@
|
|||||||
| pop rbx; pop rsi; pop rdi; pop rbp
|
| pop rbx; pop rsi; pop rdi; pop rbp
|
||||||
|.endmacro
|
|.endmacro
|
||||||
|
|
|
|
||||||
|.define UNUSED1, aword [esp+dword*26]
|
|.define UNUSED1, aword [rsp+dword*26]
|
||||||
|.define SAVE_PC, dword [esp+dword*25]
|
|.define SAVE_PC, dword [rsp+dword*25]
|
||||||
|.define SAVE_L, dword [esp+dword*24]
|
|.define SAVE_L, dword [rsp+dword*24]
|
||||||
|.define SAVE_ERRF, dword [esp+dword*23]
|
|.define SAVE_ERRF, dword [rsp+dword*23]
|
||||||
|.define SAVE_NRES, dword [esp+dword*22]
|
|.define SAVE_NRES, dword [rsp+dword*22]
|
||||||
|.define TMP2, dword [esp+dword*21]
|
|.define TMP2, dword [rsp+dword*21]
|
||||||
|.define TMP1, dword [esp+dword*20]
|
|.define TMP1, dword [rsp+dword*20]
|
||||||
|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter
|
|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter
|
||||||
|.define SAVE_RET, aword [esp+aword*9] //<-- rsp entering interpreter.
|
|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter.
|
||||||
|.define SAVE_R4, aword [esp+aword*8]
|
|.define SAVE_R4, aword [rsp+aword*8]
|
||||||
|.define SAVE_R3, aword [esp+aword*7]
|
|.define SAVE_R3, aword [rsp+aword*7]
|
||||||
|.define SAVE_R2, aword [esp+aword*6]
|
|.define SAVE_R2, aword [rsp+aword*6]
|
||||||
|.define SAVE_R1, aword [esp+aword*5] //<-- rsp after register saves.
|
|.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves.
|
||||||
|.define SAVE_CFRAME, aword [esp+aword*4]
|
|.define SAVE_CFRAME, aword [rsp+aword*4]
|
||||||
|.define CSAVE_4, aword [esp+aword*3]
|
|.define CSAVE_4, aword [rsp+aword*3]
|
||||||
|.define CSAVE_3, aword [esp+aword*2]
|
|.define CSAVE_3, aword [rsp+aword*2]
|
||||||
|.define CSAVE_2, aword [esp+aword*1]
|
|.define CSAVE_2, aword [rsp+aword*1]
|
||||||
|.define CSAVE_1, aword [esp] //<-- rsp while in interpreter.
|
|.define CSAVE_1, aword [rsp] //<-- rsp while in interpreter.
|
||||||
|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by callee
|
|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by callee
|
||||||
|
|
|
|
||||||
|// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ).
|
|// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ).
|
||||||
|.define TMPQ, qword [esp]
|
|.define TMPQ, qword [rsp]
|
||||||
|.define NRESULTS, TMP2
|
|.define NRESULTS, TMP2
|
||||||
|
|
|
|
||||||
|//-----------------------------------------------------------------------
|
|//-----------------------------------------------------------------------
|
||||||
@ -188,24 +188,24 @@
|
|||||||
|.endmacro
|
|.endmacro
|
||||||
|
|
|
|
||||||
|//----- 16 byte aligned,
|
|//----- 16 byte aligned,
|
||||||
|.define SAVE_RET, aword [esp+aword*9] //<-- rsp entering interpreter.
|
|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter.
|
||||||
|.define SAVE_R4, aword [esp+aword*8]
|
|.define SAVE_R4, aword [rsp+aword*8]
|
||||||
|.define SAVE_R3, aword [esp+aword*7]
|
|.define SAVE_R3, aword [rsp+aword*7]
|
||||||
|.define SAVE_R2, aword [esp+aword*6]
|
|.define SAVE_R2, aword [rsp+aword*6]
|
||||||
|.define SAVE_R1, aword [esp+aword*5] //<-- rsp after register saves.
|
|.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves.
|
||||||
|.define SAVE_CFRAME, aword [esp+aword*4]
|
|.define SAVE_CFRAME, aword [rsp+aword*4]
|
||||||
|.define UNUSED1, aword [esp+aword*3]
|
|.define UNUSED1, aword [rsp+aword*3]
|
||||||
|//----- ^^^ awords above, vvv dwords below
|
|//----- ^^^ awords above, vvv dwords below
|
||||||
|.define SAVE_PC, dword [esp+dword*5]
|
|.define SAVE_PC, dword [rsp+dword*5]
|
||||||
|.define SAVE_L, dword [esp+dword*4]
|
|.define SAVE_L, dword [rsp+dword*4]
|
||||||
|.define SAVE_ERRF, dword [esp+dword*3]
|
|.define SAVE_ERRF, dword [rsp+dword*3]
|
||||||
|.define SAVE_NRES, dword [esp+dword*2]
|
|.define SAVE_NRES, dword [rsp+dword*2]
|
||||||
|.define TMP2, dword [esp+dword*1]
|
|.define TMP2, dword [rsp+dword*1]
|
||||||
|.define TMP1, dword [esp] //<-- rsp while in interpreter.
|
|.define TMP1, dword [rsp] //<-- rsp while in interpreter.
|
||||||
|//----- 16 byte aligned
|
|//----- 16 byte aligned
|
||||||
|
|
|
|
||||||
|// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ).
|
|// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ).
|
||||||
|.define TMPQ, qword [esp]
|
|.define TMPQ, qword [rsp]
|
||||||
|.define NRESULTS, TMP2
|
|.define NRESULTS, TMP2
|
||||||
|
|
|
|
||||||
|.endif
|
|.endif
|
||||||
@ -667,7 +667,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov)
|
|||||||
|2: // Entry point for vm_cpcall below (RA = base, RB = L, PC = ftype).
|
|2: // Entry point for vm_cpcall below (RA = base, RB = L, PC = ftype).
|
||||||
| mov KBASE, L:RB->cframe // Add our C frame to cframe chain.
|
| mov KBASE, L:RB->cframe // Add our C frame to cframe chain.
|
||||||
| mov SAVE_CFRAME, KBASE // Caveat: overlaps INARG_BASE!
|
| mov SAVE_CFRAME, KBASE // Caveat: overlaps INARG_BASE!
|
||||||
| mov SAVE_PC, esp // Any value outside of bytecode is ok.
|
| mov SAVE_PC, L:RB // Any value outside of bytecode is ok.
|
||||||
| mov L:RB->cframe, esp
|
| mov L:RB->cframe, esp
|
||||||
|
|
|
|
||||||
| mov DISPATCH, L:RB->glref // Setup pointer to dispatch table.
|
| mov DISPATCH, L:RB->glref // Setup pointer to dispatch table.
|
||||||
@ -697,7 +697,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov)
|
|||||||
| mov RC, INARG_CP_UD
|
| mov RC, INARG_CP_UD
|
||||||
| mov RA, INARG_CP_FUNC
|
| mov RA, INARG_CP_FUNC
|
||||||
| mov BASE, INARG_CP_CALL
|
| mov BASE, INARG_CP_CALL
|
||||||
| mov SAVE_PC, esp // Any value outside of bytecode is ok.
|
| mov SAVE_PC, L:RB // Any value outside of bytecode is ok.
|
||||||
|
|
|
|
||||||
| // Caveat: INARG_P_* and INARG_CP_* overlap!
|
| // Caveat: INARG_P_* and INARG_CP_* overlap!
|
||||||
| mov KBASE, L:RB->stack // Compute -savestack(L, L->top).
|
| mov KBASE, L:RB->stack // Compute -savestack(L, L->top).
|
||||||
|
@ -57,11 +57,11 @@ static const unsigned char build_actionlist[12304] = {
|
|||||||
209,139,114,252,252,137,68,36,20,252,247,198,237,15,132,244,17,252,233,244,
|
209,139,114,252,252,137,68,36,20,252,247,198,237,15,132,244,17,252,233,244,
|
||||||
18,248,27,85,87,86,83,131,252,236,28,190,237,252,233,244,247,248,28,255,85,
|
18,248,27,85,87,86,83,131,252,236,28,190,237,252,233,244,247,248,28,255,85,
|
||||||
87,86,83,131,252,236,28,190,237,248,1,139,108,36,48,139,76,36,52,248,2,139,
|
87,86,83,131,252,236,28,190,237,248,1,139,108,36,48,139,76,36,52,248,2,139,
|
||||||
189,233,137,124,36,52,137,100,36,24,137,165,233,139,157,233,129,195,239,248,
|
189,233,137,124,36,52,137,108,36,24,137,165,233,139,157,233,129,195,239,248,
|
||||||
3,199,131,233,237,139,149,233,1,206,41,214,139,133,233,41,200,193,232,3,131,
|
3,199,131,233,237,139,149,233,1,206,41,214,139,133,233,41,200,193,232,3,131,
|
||||||
192,1,139,105,252,248,129,121,253,252,252,239,15,133,244,29,252,255,165,233,
|
192,1,139,105,252,248,129,121,253,252,252,239,15,133,244,29,252,255,165,233,
|
||||||
248,30,85,87,86,83,131,252,236,28,139,108,36,48,139,68,36,60,139,76,36,56,
|
248,30,85,87,86,83,131,252,236,28,139,108,36,48,139,68,36,60,139,76,36,56,
|
||||||
139,84,36,52,137,100,36,24,139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,
|
139,84,36,52,137,108,36,24,139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,
|
||||||
124,36,56,137,68,36,8,137,76,36,4,137,44,36,139,189,233,137,124,36,52,137,
|
124,36,56,137,68,36,8,137,76,36,4,137,44,36,139,189,233,137,124,36,52,137,
|
||||||
165,233,252,255,210,133,192,15,132,244,21,255,137,193,190,237,252,233,244,
|
165,233,252,255,210,133,192,15,132,244,21,255,137,193,190,237,252,233,244,
|
||||||
2,248,25,1,209,131,230,252,248,137,213,41,252,242,199,68,193,252,252,237,
|
2,248,25,1,209,131,230,252,248,137,213,41,252,242,199,68,193,252,252,237,
|
||||||
|
Loading…
Reference in New Issue
Block a user