aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2012-01-14 12:58:46 +0200
committerPekka Enberg <penberg@kernel.org>2012-01-14 13:00:43 +0200
commit3e8a1402e2d7c6df8b7841682e72e212f29bd659 (patch)
tree23645e68c5863d88ce2a9583869758ddb8873ad4
parent00ec60f2828bfcb765f96c5075d9ceb9ca8a0023 (diff)
downloadjato-3e8a1402e2d7c6df8b7841682e72e212f29bd659.tar.gz
x86-32: Remove forward declarations from emit_32.c
Same as commit 8319a7f ("x86-64: Remove forward declarations from emit_64.c") but for 32-bit. Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--arch/x86/emit_32.c51
1 files changed, 22 insertions, 29 deletions
diff --git a/arch/x86/emit_32.c b/arch/x86/emit_32.c
index d2e2dff9..95faf347 100644
--- a/arch/x86/emit_32.c
+++ b/arch/x86/emit_32.c
@@ -72,13 +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_push_membase(struct buffer *buf, enum machine_reg src_reg, unsigned long disp);
-
/*
* Common code emitters
*/
@@ -326,30 +319,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_leave(buf);
- emit_restore_regs(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_push_imm(buf, (unsigned long) cu);
- __emit_call(buf, &trace_invoke);
- __emit_add_imm_reg(buf, PTR_SIZE, MACH_REG_xSP);
-}
-
static void fixup_branch_target(uint8_t *target_p, void *target)
{
long cur = (long) (target - (void *) target_p) - 4;
@@ -656,6 +631,11 @@ void emit_prolog(struct buffer *buf, struct stack_frame *frame,
__emit_sub_imm_reg(buf, frame_size, MACH_REG_ESP);
}
+static void emit_restore_regs(struct buffer *buf)
+{
+ emit_restore_callee_save_regs(buf);
+}
+
void emit_epilog(struct buffer *buf)
{
emit_leave(buf);
@@ -663,14 +643,20 @@ void emit_epilog(struct buffer *buf)
emit_ret(buf);
}
-static void emit_push_imm(struct insn *insn, struct buffer *buf, struct basic_block *bb)
+/*
+ * 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_push_imm(buf, insn->operand.imm);
+ emit_leave(buf);
+ emit_restore_regs(buf);
+ __emit_jmp(buf, (unsigned long)&unwind);
}
-static void emit_restore_regs(struct buffer *buf)
+static void emit_push_imm(struct insn *insn, struct buffer *buf, struct basic_block *bb)
{
- emit_restore_callee_save_regs(buf);
+ __emit_push_imm(buf, insn->operand.imm);
}
static void emit_fld_membase(struct insn *insn, struct buffer *buf, struct basic_block *bb)
@@ -890,6 +876,13 @@ static void emit_mov_64_xmm_memindex(struct insn *insn, struct buffer *buf, stru
emit(buf, x86_encode_sib(insn->dest.shift, encode_reg(&insn->dest.index_reg), encode_reg(&insn->dest.base_reg)));
}
+void emit_trace_invoke(struct buffer *buf, struct compilation_unit *cu)
+{
+ __emit_push_imm(buf, (unsigned long) cu);
+ __emit_call(buf, &trace_invoke);
+ __emit_add_imm_reg(buf, PTR_SIZE, MACH_REG_xSP);
+}
+
void emit_trampoline(struct compilation_unit *cu,
void *call_target,
struct jit_trampoline *trampoline)