Change some misuses of esp in x64 interpreter.

master
Mike Pall 2009-12-16 04:37:30 +01:00
parent d2156c7f73
commit 85d32aeb36
2 changed files with 36 additions and 36 deletions

View File

@ -150,28 +150,28 @@
| pop rbx; pop rsi; pop rdi; pop rbp
|.endmacro
|
|.define UNUSED1, aword [esp+dword*26]
|.define SAVE_PC, dword [esp+dword*25]
|.define SAVE_L, dword [esp+dword*24]
|.define SAVE_ERRF, dword [esp+dword*23]
|.define SAVE_NRES, dword [esp+dword*22]
|.define TMP2, dword [esp+dword*21]
|.define TMP1, dword [esp+dword*20]
|.define UNUSED1, aword [rsp+dword*26]
|.define SAVE_PC, dword [rsp+dword*25]
|.define SAVE_L, dword [rsp+dword*24]
|.define SAVE_ERRF, dword [rsp+dword*23]
|.define SAVE_NRES, dword [rsp+dword*22]
|.define TMP2, dword [rsp+dword*21]
|.define TMP1, dword [rsp+dword*20]
|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter
|.define SAVE_RET, aword [esp+aword*9] //<-- rsp entering interpreter.
|.define SAVE_R4, aword [esp+aword*8]
|.define SAVE_R3, aword [esp+aword*7]
|.define SAVE_R2, aword [esp+aword*6]
|.define SAVE_R1, aword [esp+aword*5] //<-- rsp after register saves.
|.define SAVE_CFRAME, aword [esp+aword*4]
|.define CSAVE_4, aword [esp+aword*3]
|.define CSAVE_3, aword [esp+aword*2]
|.define CSAVE_2, aword [esp+aword*1]
|.define CSAVE_1, aword [esp] //<-- rsp while in interpreter.
|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter.
|.define SAVE_R4, aword [rsp+aword*8]
|.define SAVE_R3, aword [rsp+aword*7]
|.define SAVE_R2, aword [rsp+aword*6]
|.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves.
|.define SAVE_CFRAME, aword [rsp+aword*4]
|.define CSAVE_4, aword [rsp+aword*3]
|.define CSAVE_3, aword [rsp+aword*2]
|.define CSAVE_2, aword [rsp+aword*1]
|.define CSAVE_1, aword [rsp] //<-- rsp while in interpreter.
|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by callee
|
|// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ).
|.define TMPQ, qword [esp]
|.define TMPQ, qword [rsp]
|.define NRESULTS, TMP2
|
|//-----------------------------------------------------------------------
@ -188,24 +188,24 @@
|.endmacro
|
|//----- 16 byte aligned,
|.define SAVE_RET, aword [esp+aword*9] //<-- rsp entering interpreter.
|.define SAVE_R4, aword [esp+aword*8]
|.define SAVE_R3, aword [esp+aword*7]
|.define SAVE_R2, aword [esp+aword*6]
|.define SAVE_R1, aword [esp+aword*5] //<-- rsp after register saves.
|.define SAVE_CFRAME, aword [esp+aword*4]
|.define UNUSED1, aword [esp+aword*3]
|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter.
|.define SAVE_R4, aword [rsp+aword*8]
|.define SAVE_R3, aword [rsp+aword*7]
|.define SAVE_R2, aword [rsp+aword*6]
|.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves.
|.define SAVE_CFRAME, aword [rsp+aword*4]
|.define UNUSED1, aword [rsp+aword*3]
|//----- ^^^ awords above, vvv dwords below
|.define SAVE_PC, dword [esp+dword*5]
|.define SAVE_L, dword [esp+dword*4]
|.define SAVE_ERRF, dword [esp+dword*3]
|.define SAVE_NRES, dword [esp+dword*2]
|.define TMP2, dword [esp+dword*1]
|.define TMP1, dword [esp] //<-- rsp while in interpreter.
|.define SAVE_PC, dword [rsp+dword*5]
|.define SAVE_L, dword [rsp+dword*4]
|.define SAVE_ERRF, dword [rsp+dword*3]
|.define SAVE_NRES, dword [rsp+dword*2]
|.define TMP2, dword [rsp+dword*1]
|.define TMP1, dword [rsp] //<-- rsp while in interpreter.
|//----- 16 byte aligned
|
|// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ).
|.define TMPQ, qword [esp]
|.define TMPQ, qword [rsp]
|.define NRESULTS, TMP2
|
|.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).
| mov KBASE, L:RB->cframe // Add our C frame to cframe chain.
| 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 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 RA, INARG_CP_FUNC
| 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!
| mov KBASE, L:RB->stack // Compute -savestack(L, L->top).

View File

@ -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,
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,
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,
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,
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,
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,