projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
adapted to some new backend structures
[libfirm]
/
ir
/
be
/
mips
/
bearch_mips.c
diff --git
a/ir/be/mips/bearch_mips.c
b/ir/be/mips/bearch_mips.c
index
a40fa99
..
b4f7214
100644
(file)
--- 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;
}
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.
/**
* 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_classify,
mips_get_flags,
mips_get_frame_entity,
+ mips_set_frame_entity,
mips_set_frame_offset,
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 = {
};
mips_irn_ops_t mips_irn_ops = {
@@
-448,10
+458,11
@@
static void mips_prepare_graph(void *self) {
/**
* Called immediately before emit phase.
*/
/**
* 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;
}
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;
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_before_sched, /* before scheduling hook */
mips_before_ra, /* before register allocation hook */
mips_after_ra,
+ mips_finish_irg,
mips_emit_and_done
};
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, /* will be set later */
1, /* need dword lowering */
NULL, /* but yet no creator function */
+ NULL, /* context for create_intrinsic_fkt */
};
p.dep_param = &ad;
};
p.dep_param = &ad;