aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2012-01-14 12:45:47 +0200
committerPekka Enberg <penberg@kernel.org>2012-01-14 12:45:47 +0200
commit8319a7fe0d1066aba4f101a58a384f45b2418c83 (patch)
tree01c367a558c879d120d2209240989f61f0589ee9
parent27dcbf7848a8e85c5a8de3e1b37a0fcfffa9b481 (diff)
downloadjato-8319a7fe0d1066aba4f101a58a384f45b2418c83.tar.gz
x86-64: Remove forward declarations from emit_64.c
Move code around so that we can drop forward declarations. Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--arch/x86/emit_64.c61
1 files changed, 26 insertions, 35 deletions
diff --git a/arch/x86/emit_64.c b/arch/x86/emit_64.c
index c9998806..8f469aeb 100644
--- a/arch/x86/emit_64.c
+++ b/arch/x86/emit_64.c
@@ -72,15 +72,6 @@ struct emitter {
#define DECL_EMITTER(_insn_type, _fn) \
[_insn_type] = { .emit_fn = _fn }
-static void __emit_add_imm_reg(struct buffer *buf, long imm, enum machine_reg reg);
-static void __emit_mov_reg_reg(struct buffer *buf, enum machine_reg src, enum machine_reg dst);
-static void emit_indirect_jump_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);
-
-static void emit_save_regparm(struct buffer *buf);
-static void emit_restore_regparm(struct buffer *buf);
-
/*
* Common code emitters
*/
@@ -334,33 +325,12 @@ static void __emit_jmp(struct buffer *buf, unsigned long addr)
emit_imm32(buf, addr - current - BRANCH_INSN_SIZE);
}
-/*
- * FIXME: We use different stack layout on 32-bit and 64-bit so prolog, epilog,
- * and unwind sequences are slightly different.
- */
-void emit_unwind(struct buffer *buf)
-{
- emit_restore_regs(buf);
- emit_leave(buf);
- __emit_jmp(buf, (unsigned long)&unwind);
-}
-
static void __emit_mov_imm_reg(struct buffer *buf, long imm, enum machine_reg reg)
{
emit(buf, 0xb8 + x86_encode_reg(reg));
emit_imm32(buf, imm);
}
-void emit_trace_invoke(struct buffer *buf, struct compilation_unit *cu)
-{
- emit_save_regparm(buf);
-
- __emit_mov_imm_reg(buf, (unsigned long) cu, MACH_REG_RDI);
- __emit_call(buf, &trace_invoke);
-
- emit_restore_regparm(buf);
-}
-
static void fixup_branch_target(uint8_t *target_p, void *target)
{
long cur = (long) (target - (void *) target_p) - 4;
@@ -1259,6 +1229,14 @@ void emit_prolog(struct buffer *buf, struct stack_frame *frame,
__emit_push_reg(buf, MACH_REG_RDI);
}
+static void emit_restore_regs(struct buffer *buf)
+{
+ /* Clear *this from stack. */
+ __emit_add_imm_reg(buf, 0x08, MACH_REG_RSP);
+
+ emit_restore_callee_save_regs(buf);
+}
+
void emit_epilog(struct buffer *buf)
{
emit_restore_regs(buf);
@@ -1266,12 +1244,15 @@ void emit_epilog(struct buffer *buf)
emit_ret(buf);
}
-static void emit_restore_regs(struct buffer *buf)
+/*
+ * FIXME: We use different stack layout on 32-bit and 64-bit so prolog, epilog,
+ * and unwind sequences are slightly different.
+ */
+void emit_unwind(struct buffer *buf)
{
- /* Clear *this from stack. */
- __emit_add_imm_reg(buf, 0x08, MACH_REG_RSP);
-
- emit_restore_callee_save_regs(buf);
+ emit_restore_regs(buf);
+ emit_leave(buf);
+ __emit_jmp(buf, (unsigned long)&unwind);
}
static void emit_save_regparm(struct buffer *buf)
@@ -1312,6 +1293,16 @@ static void emit_restore_regparm(struct buffer *buf)
__emit_pop_reg(buf, MACH_REG_RDI);
}
+void emit_trace_invoke(struct buffer *buf, struct compilation_unit *cu)
+{
+ emit_save_regparm(buf);
+
+ __emit_mov_imm_reg(buf, (unsigned long) cu, MACH_REG_RDI);
+ __emit_call(buf, &trace_invoke);
+
+ emit_restore_regparm(buf);
+}
+
void emit_trampoline(struct compilation_unit *cu,
void *call_target,
struct jit_trampoline *trampoline)