X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbemodule.c;h=24958988431efb60e9fcdd192aa5100b5bb27c2b;hb=ea40997bb109173b1ba75d01a958a3cf05a771c3;hp=31dc9d5b5e3c272467dc9f2899633715422a714b;hpb=35318abf8fecc5ea34abd92b1bf47646b2e9bbb4;p=libfirm diff --git a/ir/be/bemodule.c b/ir/be/bemodule.c index 31dc9d5b5..249589884 100644 --- a/ir/be/bemodule.c +++ b/ir/be/bemodule.c @@ -1,118 +1,186 @@ /* - * Author: Matthias Braun - * Date: 29.09.2005 - * Copyright: (c) Universitaet Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2008 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 Backend module interface. + * @author Matthias Braun + * @date 29.09.2005 + * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include +#include #include "bemodule_t.h" #include "xmalloc.h" +void be_init_abi(void); void be_init_sched(void); void be_init_blocksched(void); void be_init_spill(void); +void be_init_spilloptions(void); void be_init_listsched(void); -void be_init_schedrss(void); +void be_init_sched_rand(void); +void be_init_sched_normal(void); +void be_init_sched_regpress(void); +void be_init_sched_trace(void); +void be_init_sched_trivial(void); void be_init_chordal(void); -void be_init_copycoal(void); +void be_init_pbqp_coloring(void); +void be_init_chordal_main(void); +void be_init_chordal_common(void); +void be_init_copyopt(void); +void be_init_copyheur(void); void be_init_copyheur2(void); -void be_init_raextern(void); +void be_init_copyheur4(void); +void be_init_copyilp2(void); +void be_init_copynone(void); void be_init_copystat(void); +void be_init_daemelspill(void); +void be_init_dbgout(void); void be_init_arch_ia32(void); -void be_init_arch_ppc32(void); -void be_init_arch_mips(void); void be_init_arch_arm(void); +void be_init_arch_amd64(void); void be_init_arch_sta(void); -void be_init_ilpsched(void); +void be_init_arch_sparc(void); +void be_init_arch_TEMPLATE(void); void be_init_copyilp(void); -void be_init_javacoal(void); +void be_init_peephole(void); void be_init_ra(void); void be_init_spillbelady(void); -void be_init_spillmorgan(void); -void be_init_spillremat(void); -void be_init_ifg(void); +void be_init_ssaconstr(void); +void be_init_stabs(void); +void be_init_pref_alloc(void); +void be_init_irgmod(void); +void be_init_loopana(void); +void be_init_spillslots(void); +void be_init_live(void); +void be_init_state(void); +void be_init_pbqp(void); void be_quit_copystat(void); +void be_quit_pbqp(void); +/** + * Driver for module initialization. + * Call your module initialization function here. + */ void be_init_modules(void) { - static int run_once = 0; + static bool run_once = false; - if(run_once) + if (run_once) return; - run_once = 1; + run_once = true; + be_init_abi(); + be_init_irgmod(); + be_init_loopana(); + be_init_live(); + be_init_spillslots(); be_init_sched(); be_init_blocksched(); be_init_spill(); + be_init_spilloptions(); + be_init_dbgout(); + be_init_listsched(); - be_init_schedrss(); + be_init_sched_normal(); + be_init_sched_trace(); + be_init_sched_regpress(); + be_init_sched_rand(); + be_init_sched_trivial(); + + be_init_chordal_main(); + be_init_chordal_common(); be_init_chordal(); - be_init_copycoal(); + be_init_copyopt(); + be_init_copyheur4(); + be_init_copyheur(); be_init_copyheur2(); - be_init_raextern(); + be_init_copyilp2(); + be_init_pbqp_coloring(); + be_init_copynone(); be_init_copystat(); + be_init_peephole(); be_init_ra(); be_init_spillbelady(); - be_init_spillmorgan(); - be_init_ifg(); + be_init_daemelspill(); + be_init_ssaconstr(); + be_init_pref_alloc(); + be_init_state(); + be_init_stabs(); be_init_arch_ia32(); - be_init_arch_ppc32(); - be_init_arch_mips(); be_init_arch_arm(); - be_init_arch_sta(); + be_init_arch_sparc(); + be_init_arch_amd64(); + be_init_arch_TEMPLATE(); -#ifdef WITH_ILP - be_init_ilpsched(); be_init_copyilp(); - be_init_spillremat(); -#endif -#ifdef WITH_JVM - be_init_javacoal(); -#endif - -#ifdef WITH_STA +#if PLUGIN_IR_BE_STA be_init_arch_sta(); +#endif /* PLUGIN_IR_BE_STA */ + +#ifdef FIRM_GRGEN_BE + be_init_pbqp(); #endif } void be_quit_modules(void) { be_quit_copystat(); +#ifdef FIRM_GRGEN_BE + be_quit_pbqp(); +#endif } //--------------------------------------------------------------------------- -#ifdef WITH_LIBCORE typedef struct module_opt_data_t { void **var; be_module_list_entry_t * const *list_head; } module_opt_data_t; /** + * Searches in list for module option. If found, set option to given value and return true. * Beware: return value of 0 means error. */ static int set_opt_module(const char *name, lc_opt_type_t type, void *data, size_t length, ...) { - module_opt_data_t *moddata = data; - va_list args; - const char* opt; + module_opt_data_t *moddata = (module_opt_data_t*)data; + int res = 0; + va_list args; + const char *opt; const be_module_list_entry_t *module; - int res = 0; + (void) type; + (void) name; va_start(args, length); opt = va_arg(args, const char*); - for(module = *(moddata->list_head); module != NULL; module = module->next) { - if(strcmp(module->name, opt) == 0) { + for (module = *(moddata->list_head); module != NULL; module = module->next) { + if (strcmp(module->name, opt) == 0) { *(moddata->var) = module->data; res = 1; break; @@ -123,14 +191,20 @@ static int set_opt_module(const char *name, lc_opt_type_t type, void *data, return res; } -int dump_opt_module(char *buf, size_t buflen, const char *name, - lc_opt_type_t type, void *data, size_t length) +/** + * Dump the names of all registered module options. + */ +static int dump_opt_module(char *buf, size_t buflen, const char *name, + lc_opt_type_t type, void *data, size_t length) { - module_opt_data_t *moddata = data; + module_opt_data_t *moddata = (module_opt_data_t*)data; const be_module_list_entry_t *module; + (void) name; + (void) type; + (void) length; - for(module = *(moddata->list_head); module != NULL; module = module->next) { - if(module->data == *(moddata->var)) { + for (module = *(moddata->list_head); module != NULL; module = module->next) { + if (module->data == *(moddata->var)) { snprintf(buf, buflen, "%s", module->name); return strlen(buf); } @@ -140,49 +214,61 @@ int dump_opt_module(char *buf, size_t buflen, const char *name, return strlen(buf); } -int dump_opt_module_vals(char *buf, size_t buflen, const char *name, - lc_opt_type_t type, void *data, size_t len) +/** + * Dump the values of all register module options. + */ +static int dump_opt_module_vals(char *buf, size_t buflen, const char *name, + lc_opt_type_t type, void *data, size_t len) { - module_opt_data_t *moddata = data; + module_opt_data_t *moddata = (module_opt_data_t*)data; + char *p = buf; const be_module_list_entry_t *module; - char *p = buf; + (void) name; + (void) type; + (void) len; - for(module = *(moddata->list_head); module != NULL; module = module->next) { - size_t len = strlen(module->name); + for (module = *(moddata->list_head); module != NULL; module = module->next) { + size_t name_len = strlen(module->name); - if(module != *(moddata->list_head)) { - p = strncat(p, ", ", buflen - 1); + if (module != *(moddata->list_head)) { + p = strncat(p, ", ", buflen - 1); buflen -= 2; } p = strncat(p, module->name, buflen - 1); - if(len >= buflen) { + + if (name_len >= buflen) break; - } - buflen -= len; + + buflen -= name_len; } return strlen(buf); } - +/** + * Add a new module to list. + */ void be_add_module_to_list(be_module_list_entry_t **list_head, const char *name, void *module) { - be_module_list_entry_t *entry = xmalloc(sizeof(entry[0])); + be_module_list_entry_t *entry = XMALLOC(be_module_list_entry_t); entry->name = name; entry->data = module; entry->next = *list_head; - *list_head = entry; + *list_head = entry; } +/** + * Add an option for a module. + */ void be_add_module_list_opt(lc_opt_entry_t *grp, const char *name, const char *description, be_module_list_entry_t * const * list_head, void **var) { - module_opt_data_t *moddata = xmalloc(sizeof(moddata[0])); - moddata->var = var; + module_opt_data_t *moddata = XMALLOC(module_opt_data_t); + moddata->var = var; moddata->list_head = list_head; lc_opt_add_opt(grp, name, description, lc_opt_type_enum, @@ -190,5 +276,3 @@ void be_add_module_list_opt(lc_opt_entry_t *grp, const char *name, set_opt_module, dump_opt_module, dump_opt_module_vals, NULL); } - -#endif