Fixed some typos.
[libfirm] / ir / be / TEMPLATE / bearch_TEMPLATE.c
index 67eff55..035ee58 100644 (file)
@@ -55,7 +55,7 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
 static arch_irn_class_t TEMPLATE_classify(const ir_node *irn)
 {
        (void) irn;
-       return 0;
+       return arch_irn_class_none;
 }
 
 static ir_entity *TEMPLATE_get_frame_entity(const ir_node *node)
@@ -137,12 +137,16 @@ static void TEMPLATE_init_graph(ir_graph *irg)
 
 
 
-const arch_isa_if_t TEMPLATE_isa_if;
+extern const arch_isa_if_t TEMPLATE_isa_if;
 static TEMPLATE_isa_t TEMPLATE_isa_template = {
        {
                &TEMPLATE_isa_if,             /* isa interface implementation */
-               &TEMPLATE_gp_regs[REG_SP],  /* stack pointer register */
-               &TEMPLATE_gp_regs[REG_BP],  /* base pointer register */
+               N_TEMPLATE_REGISTERS,
+               TEMPLATE_registers,
+               N_TEMPLATE_CLASSES,
+               TEMPLATE_reg_classes,
+               &TEMPLATE_registers[REG_SP],  /* stack pointer register */
+               &TEMPLATE_registers[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 */
@@ -158,14 +162,7 @@ static TEMPLATE_isa_t TEMPLATE_isa_template = {
  */
 static arch_env_t *TEMPLATE_init(FILE *outfile)
 {
-       static int run_once = 0;
-       TEMPLATE_isa_t *isa;
-
-       if (run_once)
-               return NULL;
-       run_once = 1;
-
-       isa = XMALLOC(TEMPLATE_isa_t);
+       TEMPLATE_isa_t *isa = XMALLOC(TEMPLATE_isa_t);
        memcpy(isa, &TEMPLATE_isa_template, sizeof(*isa));
 
        be_emit_init(outfile);
@@ -176,14 +173,12 @@ static arch_env_t *TEMPLATE_init(FILE *outfile)
        return &isa->base;
 }
 
-
-
 /**
  * Closes the output file and frees the ISA structure.
  */
 static void TEMPLATE_done(void *self)
 {
-       TEMPLATE_isa_t *isa = self;
+       TEMPLATE_isa_t *isa = (TEMPLATE_isa_t*)self;
 
        /* emit now all global declarations */
        be_gas_emit_decls(isa->base.main_env);
@@ -192,20 +187,6 @@ static void TEMPLATE_done(void *self)
        free(self);
 }
 
-
-static unsigned TEMPLATE_get_n_reg_class(void)
-{
-       return N_CLASSES;
-}
-
-static const arch_register_class_t *TEMPLATE_get_reg_class(unsigned i)
-{
-       assert(i < N_CLASSES);
-       return &TEMPLATE_reg_classes[i];
-}
-
-
-
 /**
  * Get the register class which shall be used to store a value of a given mode.
  * @param self The this pointer.
@@ -270,7 +251,7 @@ static ir_type *TEMPLATE_get_between_type(void *self)
 static const arch_register_t *TEMPLATE_abi_prologue(void *self, ir_node **mem,
                                                     pmap *reg_map, int *stack_bias)
 {
-       TEMPLATE_abi_env_t *env      = self;
+       TEMPLATE_abi_env_t *env      = (TEMPLATE_abi_env_t*)self;
        const arch_env_t   *arch_env = be_get_irg_arch_env(env->irg);
        (void) reg_map;
        (void) mem;
@@ -342,7 +323,7 @@ static 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_fp_regs[REG_F0] : &TEMPLATE_gp_regs[REG_R0], ABI_CONTEXT_BOTH);
+                       mode_is_float(mode) ? &TEMPLATE_registers[REG_F0] : &TEMPLATE_registers[REG_R0], ABI_CONTEXT_BOTH);
        }
 }
 
@@ -357,6 +338,25 @@ static int TEMPLATE_get_reg_class_alignment(const arch_register_class_t *cls)
 
 static void TEMPLATE_lower_for_target(void)
 {
+       lower_params_t params = {
+               4,                                     /* def_ptr_alignment */
+               LF_COMPOUND_RETURN | LF_RETURN_HIDDEN, /* flags */
+               ADD_HIDDEN_ALWAYS_IN_FRONT,            /* hidden_params */
+               NULL,                                  /* find pointer type */
+               NULL,                                  /* ret_compound_in_regs */
+       };
+
+       /* lower compound param handling */
+       lower_calls_with_compounds(&params);
+}
+
+static int TEMPLATE_is_mux_allowed(ir_node *sel, ir_node *mux_false,
+                                   ir_node *mux_true)
+{
+       (void) sel;
+       (void) mux_false;
+       (void) mux_true;
+       return false;
 }
 
 /**
@@ -368,9 +368,8 @@ static const backend_params *TEMPLATE_get_backend_params(void)
                0,     /* no inline assembly */
                0,     /* no support for Rotl nodes */
                0,     /* 0: little-endian, 1: big-endian */
-               TEMPLATE_lower_for_target,  /* lowering for target */
                NULL,  /* architecture dependent settings, will be set later */
-               NULL,  /* parameter for if conversion */
+               TEMPLATE_is_mux_allowed,  /* parameter for if conversion */
                NULL,  /* float arithmetic mode */
                0,     /* no trampoline support: size 0 */
                0,     /* no trampoline support: align 0 */
@@ -402,10 +401,9 @@ static int TEMPLATE_is_valid_clobber(const char *clobber)
 
 const arch_isa_if_t TEMPLATE_isa_if = {
        TEMPLATE_init,
+       TEMPLATE_lower_for_target,
        TEMPLATE_done,
        NULL,                /* handle intrinsics */
-       TEMPLATE_get_n_reg_class,
-       TEMPLATE_get_reg_class,
        TEMPLATE_get_reg_class_for_mode,
        TEMPLATE_get_call_abi,
        TEMPLATE_get_reg_class_alignment,