From 2352c57fcae96176725d0f3cdf67668d85aeb19b Mon Sep 17 00:00:00 2001 From: David Schleef Date: Thu, 14 May 2009 22:24:25 -0700 Subject: [PATCH] Add ability to optionally add a frame pointer --- orc/orcprogram-sse.c | 12 ++++++++++-- orc/x86.c | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/orc/orcprogram-sse.c b/orc/orcprogram-sse.c index d725e86..32584b7 100644 --- a/orc/orcprogram-sse.c +++ b/orc/orcprogram-sse.c @@ -58,6 +58,7 @@ orc_compiler_sse_init (OrcCompiler *compiler) #else compiler->is_64bit = FALSE; #endif + compiler->use_frame_pointer = FALSE; #if defined(HAVE_AMD64) || defined(HAVE_I386) compiler->target_flags = orc_sse_get_cpu_flags (); @@ -89,7 +90,9 @@ orc_compiler_sse_init (OrcCompiler *compiler) } compiler->valid_regs[X86_ECX] = 0; compiler->valid_regs[X86_ESP] = 0; - compiler->valid_regs[X86_EBP] = 0; + if (compiler->use_frame_pointer) { + compiler->valid_regs[X86_EBP] = 0; + } for(i=X86_XMM0;ivalid_regs[i] = 1; } @@ -111,8 +114,13 @@ orc_compiler_sse_init (OrcCompiler *compiler) if (compiler->is_64bit) { compiler->exec_reg = X86_EDI; } else { - compiler->exec_reg = X86_EBP; + if (compiler->use_frame_pointer) { + compiler->exec_reg = X86_EBX; + } else { + compiler->exec_reg = X86_EBP; + } } + compiler->valid_regs[compiler->exec_reg] = 0; switch (orc_program_get_max_var_size (compiler->program)) { case 1: diff --git a/orc/x86.c b/orc/x86.c index 2500eae..1f330bf 100644 --- a/orc/x86.c +++ b/orc/x86.c @@ -1011,7 +1011,10 @@ orc_x86_emit_prologue (OrcCompiler *compiler) } } else { orc_x86_emit_push (compiler, 4, X86_EBP); - orc_x86_emit_mov_memoffset_reg (compiler, 4, 8, X86_ESP, X86_EBP); + if (compiler->use_frame_pointer) { + orc_x86_emit_mov_reg_reg (compiler, 4, X86_ESP, X86_EBP); + } + orc_x86_emit_mov_memoffset_reg (compiler, 4, 8, X86_ESP, compiler->exec_reg); if (compiler->used_regs[X86_EDI]) { orc_x86_emit_push (compiler, 4, X86_EDI); } -- 2.7.4