This unifies emit_epilog() for x86-32 and x86-64 and makes it tidier.

Signed-off-by: Eduard - Gabriel Munteanu <eduard.munte...@linux360.ro>
---
 arch/x86/emit-code.c |   24 ++++++++++--------------
 1 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/arch/x86/emit-code.c b/arch/x86/emit-code.c
index 499bff4..4e2745c 100644
--- a/arch/x86/emit-code.c
+++ b/arch/x86/emit-code.c
@@ -55,6 +55,7 @@ static void __emit_push_membase(struct buffer *buf,
                                unsigned long disp);
 static void __emit_push_reg(struct buffer *buf, enum machine_reg reg);
 static void emit_exception_test(struct buffer *buf, enum machine_reg reg);
+static void emit_restore_regs(struct buffer *buf);
 
 /************************
  * Common code emitters *
@@ -332,6 +333,13 @@ void backpatch_branch_target(struct buffer *buf,
        write_imm32(buf, backpatch_offset, relative_addr);
 }
 
+void emit_epilog(struct buffer *buf)
+{
+       emit_leave(buf);
+       emit_restore_regs(buf);
+       emit_ret(buf);
+}
+
 #ifdef CONFIG_X86_32
 
 /************************
@@ -722,22 +730,13 @@ static void emit_push_imm(struct buffer *buf, struct 
operand *operand)
        __emit_push_imm(buf, operand->imm);
 }
 
-static void __emit_epilog(struct buffer *buf)
+static void emit_restore_regs(struct buffer *buf)
 {
-       emit_leave(buf);
-
-       /* Restore callee saved registers */
        __emit_pop_reg(buf, REG_EBX);
        __emit_pop_reg(buf, REG_ESI);
        __emit_pop_reg(buf, REG_EDI);
 }
 
-void emit_epilog(struct buffer *buf)
-{
-       __emit_epilog(buf);
-       emit_ret(buf);
-}
-
 static void __emit_jmp(struct buffer *buf, unsigned long addr)
 {
        unsigned long current = (unsigned long)buffer_current(buf);
@@ -1591,11 +1590,8 @@ void emit_prolog(struct buffer *buf, unsigned long 
nr_locals)
                                     REG_RSP);
 }
 
-void emit_epilog(struct buffer *buf)
+static void emit_restore_regs(struct buffer *buf)
 {
-       emit_leave(buf);
-
-       /* Restore callee saved registers */
        __emit_pop_reg(buf, REG_R15);
        __emit_pop_reg(buf, REG_R14);
        __emit_pop_reg(buf, REG_R13);
-- 
1.6.0.6


------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to