-/* The main TEMPLATE backend driver file. */
-/* $Id$ */
+/*
+ * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
+/**
+ * @file
+ * @brief The main TEMPLATE backend driver file.
+ * @version $Id$
+ */
#ifdef HAVE_CONFIG_H
-#include <config.h>
+#include "config.h"
#endif
#include "pseudo_irg.h"
#include "bitset.h"
#include "debug.h"
-#include "../bearch.h" /* the general register allocator interface */
+#include "../bearch_t.h"
#include "../benode_t.h"
#include "../belower.h"
#include "../besched_t.h"
#include "bearch_TEMPLATE_t.h"
-#include "TEMPLATE_new_nodes.h" /* TEMPLATE nodes interface */
-#include "gen_TEMPLATE_regalloc_if.h" /* the generated interface (register type and class defenitions) */
+#include "TEMPLATE_new_nodes.h"
+#include "gen_TEMPLATE_regalloc_if.h"
#include "TEMPLATE_transform.h"
#include "TEMPLATE_emitter.h"
#include "TEMPLATE_map_regs.h"
}
}
-static const arch_register_t *TEMPLATE_get_irn_reg(const void *self, const ir_node *irn) {
+static
+const arch_register_t *TEMPLATE_get_irn_reg(const void *self,
+ const ir_node *irn) {
int pos = 0;
const arch_register_t *reg = NULL;
}
if (is_TEMPLATE_irn(irn)) {
- const arch_register_t **slots;
- slots = get_TEMPLATE_slots(irn);
+ const arch_register_t * const *slots;
+ slots = get_TEMPLATE_slots_const(irn);
reg = slots[pos];
}
else {
/* de-allocate code generator */
del_set(cg->reg_set);
- free(self);
+ free(cg);
}
static void *TEMPLATE_cg_init(be_irg_t *birg);
* Initializes the code generator.
*/
static void *TEMPLATE_cg_init(be_irg_t *birg) {
- TEMPLATE_isa_t *isa = (TEMPLATE_isa_t *)birg->main_env->arch_env->isa;
- TEMPLATE_code_gen_t *cg = xmalloc(sizeof(*cg));
+ const arch_env_t *arch_env = be_get_birg_arch_env(birg);
+ TEMPLATE_isa_t *isa = (TEMPLATE_isa_t *) arch_env->isa;
+ TEMPLATE_code_gen_t *cg = xmalloc(sizeof(*cg));
cg->impl = &TEMPLATE_code_gen_if;
- cg->irg = birg->irg;
+ cg->irg = be_get_birg_irg(birg);
cg->reg_set = new_set(TEMPLATE_cmp_irn_reg_assoc, 1024);
- cg->arch_env = birg->main_env->arch_env;
+ cg->arch_env = arch_env;
cg->isa = isa;
cg->birg = birg;
FIRM_DBG_REGISTER(cg->mod, "firm.be.TEMPLATE.cg");
&TEMPLATE_general_purpose_regs[REG_BP], /* base pointer register */
-1, /* stack direction */
NULL, /* main environment */
+ 7, /* costs for a spill instruction */
+ 5, /* costs for a reload instruction */
},
- {}, /* emitter environment */
+ { NULL, }, /* emitter environment */
};
/**
TEMPLATE_isa_t *isa = self;
/* emit now all global declarations */
- be_gas_emit_decls(&isa->emit, isa->arch_isa.main_env);
+ be_gas_emit_decls(&isa->emit, isa->arch_isa.main_env, 0);
be_emit_destroy_env(&isa->emit);
free(self);