X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=driver%2Fgen_firm_asm.c;h=ad55deee592867c7bc4e9dad388bf337a9942b61;hb=22d24ddd2209686fa723a62ccc19b7c2eea2d172;hp=88f20b51d4313d495475632a61e85c58cb4035b6;hpb=d9f918c846087ee7fc1b97e83671181c1ecf2fff;p=cparser diff --git a/driver/gen_firm_asm.c b/driver/gen_firm_asm.c index 88f20b5..ad55dee 100644 --- a/driver/gen_firm_asm.c +++ b/driver/gen_firm_asm.c @@ -1,7 +1,7 @@ /* * Generate Firm assembler from Firm graphs. * - * (C) 2005-2006 Michael Beck beck@ipd.info.uni-karlsruhe.de + * (C) 2005-2009 Michael Beck beck@ipd.info.uni-karlsruhe.de */ #include #include @@ -39,11 +39,14 @@ typedef struct fix_ctx { */ static void name(FILE *f, const char *prefix, ir_node *n, const char *suffix) { - fprintf(f, "%s%s_%u%s", - prefix ? prefix : "", - get_op_name(get_irn_op(n)), - get_irn_idx(n), - suffix ? suffix : ""); + const char *op_name = get_op_name(get_irn_op(n)); + unsigned index = get_irn_idx(n); + if(prefix == NULL) + prefix = ""; + if(suffix == NULL) + suffix = ""; + + fprintf(f, "%s%s_%u%s", prefix, op_name, index, suffix); } /** @@ -66,16 +69,16 @@ static void generate_header(FILE *f, ir_graph *irg) if (get_method_n_ress(tp) == 0) fprintf(f, "void"); else - fprintf(f, get_type_name(get_method_res_type(tp, 0))); + fputs(get_type_name(get_method_res_type(tp, 0)), f); fprintf(f, " %s(", s); n = get_method_n_params(tp); if (n == 0) - fprintf(f, get_method_variadicity(tp) == variadicity_variadic ? "" : "void"); + fputs(get_method_variadicity(tp) == variadicity_variadic ? "" : "void", f); else { for (i = 0; i < n; ++i) { if (i > 0) fprintf(f, ", "); - fprintf(f, get_type_name(get_method_param_type(tp, i))); + fputs(get_type_name(get_method_param_type(tp, i)), f); } if (get_method_variadicity(tp) == variadicity_variadic) fprintf(f, ", ..."); @@ -243,10 +246,9 @@ static int generate_predef_node(FILE *f, ir_node *n) X(get_irg_start_block(irg)) X(get_irg_end(irg)) X(get_irg_end_block(irg)) + X(get_irg_initial_exec(irg)) X(get_irg_frame(irg)) - X(get_irg_globals(irg)) X(get_irg_tls(irg)) - X(get_irg_value_param_base(irg)) X(get_irg_initial_mem(irg)) X(get_irg_no_mem(irg)) else @@ -507,7 +509,7 @@ static void generate_code_Const(FILE *f, ir_node *n) else { def_mode: tarval_snprintf(buf, sizeof(buf), tv); - fprintf(f, "new_tarval_from_str(\"%s\", %d, ", buf, strlen(buf)); + fprintf(f, "new_tarval_from_str(\"%s\", %u, ", buf, (unsigned) strlen(buf)); fprintf(f, "mode_%s)", get_mode_name(mode)); } } @@ -528,9 +530,9 @@ static void generate_code_SymConst(FILE *f, ir_node *n) ident *id; ir_type *tp; ir_entity *ent; - ir_label_t label; symconst_kind kind = get_SymConst_kind(n); const char *k_name = "NULL"; + const char *str; switch (kind) { case symconst_addr_ent: @@ -539,7 +541,8 @@ static void generate_code_SymConst(FILE *f, ir_node *n) break; case symconst_addr_name: id = get_SymConst_name(n); - fprintf(f, " sym.ident_p = new_id_from_chars(\"%s\", %d);\n", get_id_str(id), get_id_strlen(id)); + str = get_id_str(id); + fprintf(f, " sym.ident_p = new_id_from_chars(\"%s\", %d);\n", str, get_id_strlen(id)); k_name = "symconst_addr_name"; break; case symconst_type_size: @@ -564,14 +567,10 @@ static void generate_code_SymConst(FILE *f, ir_node *n) break; case symconst_enum_const: id = get_SymConst_name(n); - fprintf(f, " sym.ident_p = new_id_from_chars(\"%s\", %d);\n", get_id_str(id), get_id_strlen(id)); + str = get_id_str(id); + fprintf(f, " sym.ident_p = new_id_from_chars(\"%s\", %d);\n", str, get_id_strlen(id)); k_name = "symconst_enum_const"; break; - case symconst_label: - label = get_SymConst_label(n); - fprintf(f, " sym.label = %lu;\n", label); - k_name = "symconst_label"; - break; } name(f, " ", n, " = new_r_SymConst(irg, "); name(f, NULL, get_nodes_block(n), ", sym, "); @@ -922,7 +921,7 @@ static void generate_code_Proj_Cond(FILE *f, ir_node *n) fprintf(f, "mode_b, %s);\n", proj_nr ? "pn_Cond_true" : "pn_Cond_false"); } else { - if (proj_nr == get_Cond_defaultProj(cond)) + if (proj_nr == get_Cond_default_proj(cond)) name(f, " ", n, " = new_r_defaultProj(irg, "); else name(f, " ", n, " = new_r_Proj(irg, "); @@ -965,11 +964,13 @@ static void generate_code_Proj(FILE *f, ir_node *n) case iro_Cond: generate_code_Proj_Cond(f, n); break; - default: + default: { + const char *mode_name = get_mode_name(get_irn_mode(n)); name(f, " ", n, " = new_r_Proj(irg, "); name(f, NULL, get_nodes_block(n), ", "); name(f, NULL, get_Proj_pred(n), ", "); - fprintf(f, "mode_%s, %ld);\n", get_mode_name(get_irn_mode(n)), get_Proj_proj(n)); + fprintf(f, "mode_%s, %ld);\n", mode_name, get_Proj_proj(n)); + } } }