X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fmips%2Fbearch_mips.c;h=b4f72149a77b4c98bb25668ab55620078a039924;hb=11dd35912fd6ad1f7637137c4c3f9e0628b8387f;hp=a40fa99248026259d0f1a755df4f26329a70362b;hpb=2601105986be688124e6023d41304d0e27be4442;p=libfirm diff --git a/ir/be/mips/bearch_mips.c b/ir/be/mips/bearch_mips.c index a40fa9924..b4f72149a 100644 --- a/ir/be/mips/bearch_mips.c +++ b/ir/be/mips/bearch_mips.c @@ -237,6 +237,12 @@ static entity *mips_get_frame_entity(const void *self, const ir_node *irn) { return NULL; } +static void mips_set_frame_entity(const void *self, ir_node *irn, entity *ent) { + mips_attr_t *attr = get_mips_attr(irn); + assert(is_mips_load_r(irn) || is_mips_store_r(irn)); + attr->stack_entity = ent; +} + /** * This function is called by the generic backend to correct offsets for * nodes accessing the stack. @@ -257,8 +263,12 @@ static const arch_irn_ops_if_t mips_irn_ops_if = { mips_classify, mips_get_flags, mips_get_frame_entity, + mips_set_frame_entity, mips_set_frame_offset, - NULL + NULL, /* get_inverse */ + NULL, /* get_op_estimated_cost */ + NULL, /* possible_memory_operand */ + NULL, /* perform_memory_operand */ }; mips_irn_ops_t mips_irn_ops = { @@ -448,10 +458,11 @@ static void mips_prepare_graph(void *self) { /** * Called immediately before emit phase. */ -static void mips_finish_irg(ir_graph *irg, mips_code_gen_t *cg) { - /* TODO: - fix offsets for nodes accessing stack - - ... - */ +static void mips_finish_irg(void *self) { + mips_code_gen_t *cg = self; + ir_graph *irg = cg->irg; + + dump_ir_block_graph_sched(irg, "-mips-finished"); } @@ -487,8 +498,6 @@ static void mips_emit_and_done(void *self) { cg->emit_decls = 0; } - mips_finish_irg(irg, cg); - dump_ir_block_graph_sched(irg, "-mips-finished"); mips_gen_routine(out, irg, cg); cur_reg_set = NULL; @@ -511,6 +520,7 @@ static const arch_code_generator_if_t mips_code_gen_if = { mips_before_sched, /* before scheduling hook */ mips_before_ra, /* before register allocation hook */ mips_after_ra, + mips_finish_irg, mips_emit_and_done }; @@ -935,6 +945,7 @@ static const backend_params *mips_get_libfirm_params(void) { NULL, /* will be set later */ 1, /* need dword lowering */ NULL, /* but yet no creator function */ + NULL, /* context for create_intrinsic_fkt */ }; p.dep_param = &ad;