#include "ircons_t.h"
#include "irgwalk.h"
#include "type.h"
+#include "irtools.h"
#include "../be_t.h"
#include "../bearch.h"
return NULL;
}
+static void firm_set_frame_entity(const void *self, const ir_node *irn, entity *ent)
+{
+}
+
static const arch_irn_ops_if_t firm_irn_ops_if = {
firm_get_irn_reg_req,
firm_set_irn_reg,
firm_classify,
firm_get_flags,
firm_get_frame_entity,
- firm_set_stack_bias
+ firm_set_frame_entity,
+ firm_set_stack_bias,
+ NULL, /* get_inverse */
+ NULL, /* get_op_estimated_cost */
+ NULL, /* possible_memory_operand */
+ NULL, /* perform_memory_operand */
};
static const arch_irn_ops_t firm_irn_ops = {
} firm_code_gen_t;
-static void clear_link(ir_node *irn, void *data)
-{
- set_irn_link(irn, NULL);
-}
-
static void firm_prepare_graph(void *self)
{
firm_code_gen_t *cg = self;
- irg_walk_graph(cg->irg, clear_link, localize_const_walker, NULL);
+ irg_walk_graph(cg->irg, firm_clear_link, localize_const_walker, NULL);
irg_walk_graph(cg->irg, NULL, prepare_walker, NULL);
}
return get_mode_size_bytes(mode);
}
+/**
+ * Returns the libFirm configuration parameter for this backend.
+ */
+static const backend_params *firm_get_libfirm_params(void) {
+ static arch_dep_params_t ad = {
+ 1, /* allow subs */
+ 0, /* Muls are fast enough on Firm */
+ 31, /* shift would be ok */
+ 0, /* no Mulhs */
+ 0, /* no Mulhu */
+ 0, /* no Mulh */
+ };
+ static backend_params p = {
+ NULL, /* no additional opcodes */
+ NULL, /* will be set later */
+ 0, /* no dword lowering */
+ NULL, /* no creator function */
+ NULL, /* context for create_intrinsic_fkt */
+ };
+
+ p.dep_param = &ad;
+ return &p;
+}
+
#ifdef WITH_LIBCORE
static void firm_register_options(lc_opt_entry_t *ent)
{
firm_get_code_generator_if,
firm_get_list_sched_selector,
firm_get_reg_class_alignment,
+ firm_get_libfirm_params,
#ifdef WITH_LIBCORE
firm_register_options,
#endif