SPLINTS = $(addsuffix .splint, $(SOURCES))
CPARSERS = $(addsuffix .cparser, $(SOURCES))
CPARSEROS = $(SOURCES:%.c=build/cpb/%.o)
+CPARSEROS_E = $(SOURCES:%.c=build/cpbe/%.o)
CPARSEROS2 = $(SOURCES:%.c=build/cpb2/%.o)
Q = @
@echo "===> DEPEND"
@rm -f $@ && touch $@ && makedepend -p "$@ build/" -Y -f $@ -- $(CPPFLAGS) -- $(SOURCES) 2> /dev/null && rm $@.bak
-DIRS = build build/adt build/driver build/cpb build/cpb/adt build/cpb/driver build/cpb2 build/cpb2/adt build/cpb2/driver
+DIRS = build build/adt build/driver build/cpb build/cpb/adt build/cpb/driver build/cpb2 build/cpb2/adt build/cpb2/driver build/cpbe build/cpbe/adt build/cpbe/driver
UNUSED := $(shell mkdir -p $(DIRS))
$(GOAL): $(OBJECTS)
bootstrap: build/cpb build/cpb/adt build/cpb/driver $(CPARSEROS) cparser.bootstrap
+bootstrape: build/cpb build/cpb/adt build/cpb/driver $(CPARSEROS_E) cparser.bootstrape
+
bootstrap2: build/cpb2 build/cpb2/adt build/cpb2/driver $(CPARSEROS2) cparser.bootstrap2
%.c.splint: %.c
build/cpb/%.o: %.c build/cparser
@echo '===> CPARSER $<'
- $(Q)./build/cparser $(CPPFLAGS) -Wall -g3 -c $< -o $@
+ $(Q)./build/cparser $(CPPFLAGS) -std=c99 -Wall -g3 -c $< -o $@
+
+build/cpbe/%.o: %.c
+ @echo '===> ECCP $<'
+ $(Q)eccp $(CPPFLAGS) -std=c99 -Wall -c $< -o $@
build/cpb2/%.o: %.c cparser.bootstrap
@echo '===> CPARSER.BOOTSTRAP $<'
@echo "===> LD $@"
$(Q)./build/cparser $(CPARSEROS) $(LFLAGS) -o $@
+cparser.bootstrape: $(CPARSEROS_E)
+ @echo "===> LD $@"
+ $(Q)gcc $(CPARSEROS_E) $(LFLAGS) -o $@
+
cparser.bootstrap2: $(CPARSEROS2)
@echo "===> LD $@"
$(Q)./cparser.bootstrap $(CPARSEROS2) $(LFLAGS) -o $@
case TYPE_COMPOUND_STRUCT:
return create_compound_type(&type->compound, NULL, NULL, NULL,
true, COMPOUND_IS_STRUCT);
- break;
case TYPE_COMPOUND_UNION:
return create_compound_type(&type->compound, NULL, NULL, NULL,
true, COMPOUND_IS_UNION);
break;
case OS_SUPPORT_LINUX:
create_ld_ident = create_ld_ident_linux_elf;
- s = "ia32-gasmode=linux"; break;
+ s = "ia32-gasmode=elf";
break;
case OS_SUPPORT_MACHO:
create_ld_ident = create_ld_ident_macho;
- s = "ia32-gasmode=macho"; break;
+ s = "ia32-gasmode=macho";
break;
}
- firm_be_option(s);
+ int res = firm_be_option(s);
+ (void) res;
+ assert(res);
/* create idents for all known runtime functions */
for (size_t i = 0; i < sizeof(rts_data) / sizeof(rts_data[0]); ++i) {
normalize_one_return(irg);
#endif
-
#if 0
if (firm_opt.modes) {
/* convert all modes into integer if possible */
arch_mode_conversion(irg, predefs.mode_uint);
}
#endif
+
timer_push(TV_SCALAR_REPLACE);
scalar_replacement_opt(irg);
timer_pop();
CHECK_ONE(firm_opt.check_all, irg);
}
+#if 1
if (firm_opt.luffig) {
opt_ldst2(irg);
DUMP_ONE_C(firm_dump.ir_graph && firm_dump.all_phases, irg, "ldst2");
CHECK_ONE(firm_opt.check_all, irg);
}
+#endif
timer_push(TV_CF_OPT);
optimize_cf(irg);
}
if (firm_opt.do_inline) {
- inline_functions(500, 50);
+ inline_functions(5000, 500);
DUMP_ALL_C(firm_dump.ir_graph && firm_dump.all_phases, "inl");
CHECK_ALL(firm_opt.check_all);
}
if (firm_opt.cond_eval) {
for (i = 0; i < get_irp_n_irgs(); i++) {
+ if (firm_opt.luffig) {
+ opt_ldst2(irg);
+ DUMP_ONE_C(firm_dump.ir_graph && firm_dump.all_phases, irg, "ldst2");
+ CHECK_ONE(firm_opt.check_all, irg);
+ }
+
irg = get_irp_irg(i);
timer_push(TV_COND_EVAL);
opt_cond_eval(irg);
puts(")\n");
}
+static void set_be_option(const char *arg)
+{
+ int res = firm_be_option(arg);
+ (void) res;
+ assert(res);
+}
+
+static void set_option(const char *arg)
+{
+ int res = firm_option(arg);
+ (void) res;
+ assert(res);
+}
+
int main(int argc, char **argv)
{
initialize_firm();
/* apply optimisation level */
switch(opt_level) {
case 0:
- firm_option("no-opt");
+ set_option("no-opt");
break;
case 1:
- firm_option("no-inline");
+ set_option("no-inline");
break;
default:
case 4:
- firm_option("strict-aliasing");
+ set_option("strict-aliasing");
/* fallthrough */
case 3:
- firm_option("cond-eval");
- firm_option("if-conv");
+ set_option("cond-eval");
+ set_option("if-conv");
/* fallthrough */
case 2:
- firm_option("inline");
- firm_option("deconv");
- firm_be_option("omitfp");
+ set_option("inline");
+ set_option("deconv");
+ set_be_option("omitfp");
break;
}
if(option[0] == 'o') {
GET_ARG_AFTER(outname, "-o");
} else if(option[0] == 'g') {
- firm_be_option("stabs=yes");
- firm_be_option("omitfp=no");
- firm_be_option("ia32-nooptcc=yes");
+ set_be_option("debuginfo=stabs");
+ set_be_option("omitfp=no");
+ set_be_option("ia32-nooptcc=yes");
} else if(SINGLE_OPTION('c')) {
mode = CompileAssemble;
} else if(SINGLE_OPTION('E')) {
if(strcmp(opt, "syntax-only") == 0) {
mode = ParseOnly;
} else if(strcmp(opt, "omit-frame-pointer") == 0) {
- firm_be_option("omitfp");
+ set_be_option("omitfp");
} else if(strcmp(opt, "no-omit-frame-pointer") == 0) {
- firm_be_option("omitfp=no");
+ set_be_option("omitfp=no");
} else {
int res = firm_option(opt);
if (res == 0) {
if (res == 0)
argument_errors = true;
} else if(strcmp(opt, "omit-leaf-frame-pointer") == 0) {
- int res = firm_be_option("omitleaffp=1");
- if (res == 0)
- argument_errors = true;
+ set_be_option("omitleaffp=1");
} else if(strcmp(opt, "no-omit-leaf-frame-pointer") == 0) {
- int res = firm_be_option("omitleaffp=0");
- if (res == 0)
- argument_errors = true;
+ set_be_option("omitleaffp=0");
} else {
char *endptr;
long int value = strtol(opt, &endptr, 10);
input = arg;
}
} else if(strcmp(option, "pg") == 0) {
- firm_be_option("-b gprof");
+ set_be_option("-b gprof");
obstack_printf(&ldflags_obst, " -pg");
} else if(strcmp(option, "pedantic") == 0) {
fprintf(stderr, "warning: ignoring gcc option '%s'\n", arg);
attribute->have_arguments = false;
return attribute;
- return attribute;
}
/**