This unifies emit_epilog() for x86-32 and x86-64 and makes it tidier.
Signed-off-by: Eduard - Gabriel Munteanu <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel