From 85d32aeb36bf6055b8e3696432458d07ccdb4006 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 16 Dec 2009 04:37:30 +0100 Subject: Change some misuses of esp in x64 interpreter. --- src/buildvm_x86.dasc | 68 ++++++++++++++++++++++++++-------------------------- src/buildvm_x86.h | 4 ++-- 2 files changed, 36 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index 7638cf9b..c781725f 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -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). diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index 09c77827..0d749cb9 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h @@ -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, -- cgit v1.2.3-55-g6feb