remove the unused/strange concept of a pseudo-irg
[libfirm] / ir / be / TEMPLATE / bearch_TEMPLATE.c
index db44a5e..34d200a 100644 (file)
@@ -24,7 +24,6 @@
  */
 #include "config.h"
 
-#include "pseudo_irg.h"
 #include "irgwalk.h"
 #include "irprog.h"
 #include "irprintf.h"
 
 DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
 
-/**************************************************
- *                         _ _              _  __
- *                        | | |            (_)/ _|
- *  _ __ ___  __ _    __ _| | | ___   ___   _| |_
- * | '__/ _ \/ _` |  / _` | | |/ _ \ / __| | |  _|
- * | | |  __/ (_| | | (_| | | | (_) | (__  | | |
- * |_|  \___|\__, |  \__,_|_|_|\___/ \___| |_|_|
- *            __/ |
- *           |___/
- **************************************************/
-
 static arch_irn_class_t TEMPLATE_classify(const ir_node *irn)
 {
        (void) irn;
@@ -77,13 +65,6 @@ static ir_entity *TEMPLATE_get_frame_entity(const ir_node *node)
        return NULL;
 }
 
-static void TEMPLATE_set_frame_entity(ir_node *node, ir_entity *ent)
-{
-       (void) node;
-       (void) ent;
-       /* TODO: set the ir_entity assigned to the frame */
-}
-
 /**
  * This function is called by the generic backend to correct offsets for
  * nodes accessing the stack.
@@ -107,7 +88,6 @@ static const arch_irn_ops_t TEMPLATE_irn_ops = {
        get_TEMPLATE_in_req,
        TEMPLATE_classify,
        TEMPLATE_get_frame_entity,
-       TEMPLATE_set_frame_entity,
        TEMPLATE_set_frame_offset,
        TEMPLATE_get_sp_bias,
        NULL,    /* get_inverse             */
@@ -116,16 +96,7 @@ static const arch_irn_ops_t TEMPLATE_irn_ops = {
        NULL,    /* perform_memory_operand  */
 };
 
-/**************************************************
- *                _                         _  __
- *               | |                       (_)/ _|
- *   ___ ___   __| | ___  __ _  ___ _ __    _| |_
- *  / __/ _ \ / _` |/ _ \/ _` |/ _ \ '_ \  | |  _|
- * | (_| (_) | (_| |  __/ (_| |  __/ | | | | | |
- *  \___\___/ \__,_|\___|\__, |\___|_| |_| |_|_|
- *                        __/ |
- *                       |___/
- **************************************************/
+
 
 /**
  * Transforms the standard firm graph into
@@ -135,7 +106,8 @@ static void TEMPLATE_prepare_graph(void *self)
 {
        TEMPLATE_code_gen_t *cg = self;
 
-       irg_walk_blkwise_graph(cg->irg, NULL, TEMPLATE_transform_node, cg);
+       /* transform nodes into assembler instructions */
+       TEMPLATE_transform_graph(cg);
 }
 
 
@@ -145,10 +117,7 @@ static void TEMPLATE_prepare_graph(void *self)
  */
 static void TEMPLATE_finish_irg(void *self)
 {
-       TEMPLATE_code_gen_t *cg = self;
-       ir_graph            *irg = cg->irg;
-
-       dump_ir_block_graph_sched(irg, "-TEMPLATE-finished");
+       (void) self;
 }
 
 
@@ -175,13 +144,13 @@ static void TEMPLATE_emit_and_done(void *self)
        TEMPLATE_code_gen_t *cg = self;
        ir_graph           *irg = cg->irg;
 
-       TEMPLATE_gen_routine(cg, irg);
+       TEMPLATE_emit_routine(irg);
 
        /* de-allocate code generator */
        free(cg);
 }
 
-static void *TEMPLATE_cg_init(be_irg_t *birg);
+static void *TEMPLATE_cg_init(ir_graph *irg);
 
 static const arch_code_generator_if_t TEMPLATE_code_gen_if = {
        TEMPLATE_cg_init,
@@ -198,56 +167,46 @@ static const arch_code_generator_if_t TEMPLATE_code_gen_if = {
 /**
  * Initializes the code generator.
  */
-static void *TEMPLATE_cg_init(be_irg_t *birg)
+static void *TEMPLATE_cg_init(ir_graph *irg)
 {
-       const arch_env_t    *arch_env = be_get_birg_arch_env(birg);
+       const arch_env_t    *arch_env = be_get_irg_arch_env(irg);
        TEMPLATE_isa_t      *isa      = (TEMPLATE_isa_t *) arch_env;
        TEMPLATE_code_gen_t *cg       = XMALLOC(TEMPLATE_code_gen_t);
 
-       cg->impl     = &TEMPLATE_code_gen_if;
-       cg->irg      = be_get_birg_irg(birg);
-       cg->isa      = isa;
-       cg->birg     = birg;
+       cg->impl = &TEMPLATE_code_gen_if;
+       cg->irg  = irg;
+       cg->isa  = isa;
 
        return (arch_code_generator_t *)cg;
 }
 
 
 
-/*****************************************************************
- *  ____             _                  _   _____  _____
- * |  _ \           | |                | | |_   _|/ ____|  /\
- * | |_) | __ _  ___| | _____ _ __   __| |   | | | (___   /  \
- * |  _ < / _` |/ __| |/ / _ \ '_ \ / _` |   | |  \___ \ / /\ \
- * | |_) | (_| | (__|   <  __/ | | | (_| |  _| |_ ____) / ____ \
- * |____/ \__,_|\___|_|\_\___|_| |_|\__,_| |_____|_____/_/    \_\
- *
- *****************************************************************/
-
 const arch_isa_if_t TEMPLATE_isa_if;
 static TEMPLATE_isa_t TEMPLATE_isa_template = {
        {
                &TEMPLATE_isa_if,             /* isa interface implementation */
-               &TEMPLATE_general_purpose_regs[REG_SP],  /* stack pointer register */
-               &TEMPLATE_general_purpose_regs[REG_BP],  /* base pointer register */
-               &TEMPLATE_reg_classes[CLASS_TEMPLATE_general_purpose],  /* link pointer register class */
+               &TEMPLATE_gp_regs[REG_SP],  /* stack pointer register */
+               &TEMPLATE_gp_regs[REG_BP],  /* base pointer register */
+               &TEMPLATE_reg_classes[CLASS_TEMPLATE_gp],  /* link pointer register class */
                -1,                          /* stack direction */
                2,                           /* power of two stack alignment for calls, 2^2 == 4 */
                NULL,                        /* main environment */
                7,                           /* costs for a spill instruction */
                5,                           /* costs for a reload instruction */
+               false,                       /* no custom abi handling */
        },
 };
 
 /**
- * Initializes the backend ISA and opens the output file.
+ * Initializes the backend ISA
  */
 static arch_env_t *TEMPLATE_init(FILE *outfile)
 {
        static int run_once = 0;
        TEMPLATE_isa_t *isa;
 
-       if(run_once)
+       if (run_once)
                return NULL;
        run_once = 1;
 
@@ -272,7 +231,7 @@ static void TEMPLATE_done(void *self)
        TEMPLATE_isa_t *isa = self;
 
        /* emit now all global declarations */
-       be_gas_emit_decls(isa->arch_env.main_env, 0);
+       be_gas_emit_decls(isa->arch_env.main_env);
 
        be_emit_exit();
        free(self);
@@ -298,12 +257,12 @@ static const arch_register_class_t *TEMPLATE_get_reg_class(unsigned i)
  * @param mode The mode in question.
  * @return A register class which can hold values of the given mode.
  */
-const arch_register_class_t *TEMPLATE_get_reg_class_for_mode(const ir_mode *mode)
+static const arch_register_class_t *TEMPLATE_get_reg_class_for_mode(const ir_mode *mode)
 {
        if (mode_is_float(mode))
-               return &TEMPLATE_reg_classes[CLASS_TEMPLATE_floating_point];
+               return &TEMPLATE_reg_classes[CLASS_TEMPLATE_fp];
        else
-               return &TEMPLATE_reg_classes[CLASS_TEMPLATE_general_purpose];
+               return &TEMPLATE_reg_classes[CLASS_TEMPLATE_gp];
 }
 
 
@@ -335,10 +294,10 @@ static ir_type *TEMPLATE_get_between_type(void *self)
        static ir_entity *old_bp_ent = NULL;
        (void) self;
 
-       if(!between_type) {
+       if (!between_type) {
                ir_entity *ret_addr_ent;
-               ir_type *ret_addr_type = new_type_primitive(new_id_from_str("return_addr"), mode_P);
-               ir_type *old_bp_type   = new_type_primitive(new_id_from_str("bp"), mode_P);
+               ir_type *ret_addr_type = new_type_primitive(mode_P);
+               ir_type *old_bp_type   = new_type_primitive(mode_P);
 
                between_type           = new_type_class(new_id_from_str("TEMPLATE_between_type"));
                old_bp_ent             = new_entity(between_type, new_id_from_str("old_bp"), old_bp_type);
@@ -363,7 +322,7 @@ static const arch_register_t *TEMPLATE_abi_prologue(void *self, ir_node **mem,
        (void) mem;
        (void) stack_bias;
 
-       if(env->flags.try_omit_fp)
+       if (env->flags.try_omit_fp)
                return env->arch_env->sp;
        return env->arch_env->bp;
 }
@@ -392,8 +351,8 @@ static const be_abi_callbacks_t TEMPLATE_abi_callbacks = {
  * @param method_type The type of the method (procedure) in question.
  * @param abi         The abi object to be modified
  */
-void TEMPLATE_get_call_abi(const void *self, ir_type *method_type,
-                           be_abi_call_t *abi)
+static void TEMPLATE_get_call_abi(const void *self, ir_type *method_type,
+                                  be_abi_call_t *abi)
 {
        ir_type  *tp;
        ir_mode  *mode;
@@ -414,12 +373,12 @@ void TEMPLATE_get_call_abi(const void *self, ir_type *method_type,
        for (i = 0; i < n; i++) {
                /* TODO: implement register parameter: */
                /* reg = get reg for param i;          */
-               /* be_abi_call_param_reg(abi, i, reg); */
+               /* be_abi_call_param_reg(abi, i, reg, ABI_CONTEXT_BOTH); */
 
                /* default: all parameters on stack */
                tp   = get_method_param_type(method_type, i);
                mode = get_type_mode(tp);
-               be_abi_call_param_stack(abi, i, mode, 4, 0, 0);
+               be_abi_call_param_stack(abi, i, mode, 4, 0, 0, ABI_CONTEXT_BOTH);
        }
 
        /* TODO: set correct return register */
@@ -429,15 +388,15 @@ void TEMPLATE_get_call_abi(const void *self, ir_type *method_type,
                mode = get_type_mode(tp);
 
                be_abi_call_res_reg(abi, 0,
-                       mode_is_float(mode) ? &TEMPLATE_floating_point_regs[REG_F0] : &TEMPLATE_general_purpose_regs[REG_R0]);
+                       mode_is_float(mode) ? &TEMPLATE_fp_regs[REG_F0] : &TEMPLATE_gp_regs[REG_R0], ABI_CONTEXT_BOTH);
        }
 }
 
-int TEMPLATE_to_appear_in_schedule(void *block_env, const ir_node *irn)
+static int TEMPLATE_to_appear_in_schedule(void *block_env, const ir_node *irn)
 {
        (void) block_env;
 
-       if(!is_TEMPLATE_irn(irn))
+       if (!is_TEMPLATE_irn(irn))
                return -1;
 
        return 1;
@@ -488,7 +447,8 @@ static int TEMPLATE_get_reg_class_alignment(const arch_register_class_t *cls)
 /**
  * Returns the libFirm configuration parameter for this backend.
  */
-static const backend_params *TEMPLATE_get_backend_params(void) {
+static const backend_params *TEMPLATE_get_backend_params(void)
+{
        static backend_params p = {
                0,     /* no dword lowering */
                0,     /* no inline assembly */
@@ -510,7 +470,6 @@ static const be_execution_unit_t ***TEMPLATE_get_allowed_execution_units(
 {
        (void) irn;
        /* TODO */
-       assert(0);
        return NULL;
 }
 
@@ -518,7 +477,6 @@ static const be_machine_t *TEMPLATE_get_machine(const void *self)
 {
        (void) self;
        /* TODO */
-       assert(0);
        return NULL;
 }
 
@@ -563,10 +521,10 @@ const arch_isa_if_t TEMPLATE_isa_if = {
        TEMPLATE_is_valid_clobber
 };
 
+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_arch_TEMPLATE);
 void be_init_arch_TEMPLATE(void)
 {
        be_register_isa_if("TEMPLATE", &TEMPLATE_isa_if);
        FIRM_DBG_REGISTER(dbg, "firm.be.TEMPLATE.cg");
        TEMPLATE_init_transform();
 }
-BE_REGISTER_MODULE_CONSTRUCTOR(be_init_arch_TEMPLATE);