DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
-static arch_irn_class_t TEMPLATE_classify(const ir_node *irn)
-{
- (void) irn;
- return arch_irn_class_none;
-}
-
static ir_entity *TEMPLATE_get_frame_entity(const ir_node *node)
{
(void) node;
/* fill register allocator interface */
static const arch_irn_ops_t TEMPLATE_irn_ops = {
- TEMPLATE_classify,
TEMPLATE_get_frame_entity,
TEMPLATE_set_frame_offset,
TEMPLATE_get_sp_bias,
},
};
-/**
- * Initializes the backend ISA
- */
-static arch_env_t *TEMPLATE_init(const be_main_env_t *env)
+static void TEMPLATE_init(void)
{
- TEMPLATE_isa_t *isa = XMALLOC(TEMPLATE_isa_t);
- *isa = TEMPLATE_isa_template;
-
TEMPLATE_register_init();
TEMPLATE_create_opcodes(&TEMPLATE_irn_ops);
+}
+
+static void TEMPLATE_finish(void)
+{
+ TEMPLATE_free_opcodes();
+}
+
+static arch_env_t *TEMPLATE_begin_codegeneration(const be_main_env_t *env)
+{
+ TEMPLATE_isa_t *isa = XMALLOC(TEMPLATE_isa_t);
+ *isa = TEMPLATE_isa_template;
be_emit_init(env->file_handle);
be_gas_begin_compilation_unit(env);
/**
* Closes the output file and frees the ISA structure.
*/
-static void TEMPLATE_done(void *self)
+static void TEMPLATE_end_codegeneration(void *self)
{
TEMPLATE_isa_t *isa = (TEMPLATE_isa_t*)self;
* @param method_type The type of the method (procedure) in question.
* @param abi The abi object to be modified
*/
-static void TEMPLATE_get_call_abi(const void *self, ir_type *method_type,
- be_abi_call_t *abi)
+static void TEMPLATE_get_call_abi(ir_type *method_type, be_abi_call_t *abi)
{
ir_type *tp;
ir_mode *mode;
int i, n = get_method_n_params(method_type);
be_abi_call_flags_t call_flags;
- (void) self;
/* set abi flags for calls */
- call_flags.bits.store_args_sequential = 1;
- call_flags.bits.try_omit_fp = 1;
- call_flags.bits.fp_free = 0;
- call_flags.bits.call_has_imm = 1;
+ call_flags.bits.call_has_imm = true;
/* set stack parameter passing style */
be_abi_call_set_flags(abi, call_flags, &TEMPLATE_abi_callbacks);
const arch_isa_if_t TEMPLATE_isa_if = {
TEMPLATE_init,
- TEMPLATE_lower_for_target,
- TEMPLATE_done,
- NULL, /* handle intrinsics */
- TEMPLATE_get_call_abi,
+ TEMPLATE_finish,
TEMPLATE_get_backend_params,
- NULL, /* mark remat */
+ TEMPLATE_lower_for_target,
TEMPLATE_parse_asm_constraint,
TEMPLATE_is_valid_clobber,
+ TEMPLATE_begin_codegeneration,
+ TEMPLATE_end_codegeneration,
TEMPLATE_init_graph,
- NULL, /* get_pic_base */
- NULL, /* before_abi */
+ TEMPLATE_get_call_abi,
+ NULL, /* mark remat */
+ NULL, /* get_pic_base */
+ be_new_spill,
+ be_new_reload,
+ TEMPLATE_register_saved_by,
+
+ NULL, /* handle intrinsics */
+ NULL, /* before_abi */
TEMPLATE_prepare_graph,
TEMPLATE_before_ra,
TEMPLATE_finish_irg,
TEMPLATE_emit_routine,
- TEMPLATE_register_saved_by,
- be_new_spill,
- be_new_reload,
};
BE_REGISTER_MODULE_CONSTRUCTOR(be_init_arch_TEMPLATE)