diff options
author | Pekka Enberg <penberg@kernel.org> | 2012-01-14 12:58:46 +0200 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-01-14 13:00:43 +0200 |
commit | 3e8a1402e2d7c6df8b7841682e72e212f29bd659 (patch) | |
tree | 23645e68c5863d88ce2a9583869758ddb8873ad4 | |
parent | 00ec60f2828bfcb765f96c5075d9ceb9ca8a0023 (diff) | |
download | jato-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.c | 51 |
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) |