X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeemitter.c;h=490cc0bbce4bab3f0e56b9ae7471e7cfbab799f0;hb=fef8dc3eff6468d7d65485af8e1ac9884c504e1a;hp=9b2d6a08fd242c782b5f9886258cc06d16fd6087;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/be/beemitter.c b/ir/be/beemitter.c index 9b2d6a08f..490cc0bbc 100644 --- a/ir/be/beemitter.c +++ b/ir/be/beemitter.c @@ -25,7 +25,10 @@ */ #include "config.h" +#include "bedwarf.h" #include "beemitter.h" +#include "be_t.h" +#include "error.h" #include "irnode_t.h" #include "irprintf.h" #include "ident.h" @@ -46,28 +49,9 @@ void be_emit_exit(void) obstack_free(&emit_obst, NULL); } -void be_emit_ident(ident *id) -{ - size_t len = get_id_strlen(id); - const char *str = get_id_str(id); - - be_emit_string_len(str, len); -} - -void be_emit_tarval(ir_tarval *tv) -{ - char buf[64]; - - tarval_snprintf(buf, sizeof(buf), tv); - be_emit_string(buf); -} - void be_emit_irvprintf(const char *fmt, va_list args) { - char buf[256]; - - ir_vsnprintf(buf, sizeof(buf), fmt, args); - be_emit_string(buf); + ir_obst_vprintf(&emit_obst, fmt, args); } void be_emit_irprintf(const char *fmt, ...) @@ -99,11 +83,10 @@ void be_emit_pad_comment(void) void be_emit_finish_line_gas(const ir_node *node) { - dbg_info *dbg; - const char *sourcefile; - unsigned lineno; + dbg_info *dbg; + src_loc_t loc; - if (node == NULL) { + if (node == NULL || !be_options.verbose_asm) { be_emit_char('\n'); be_emit_write_line(); return; @@ -113,12 +96,31 @@ void be_emit_finish_line_gas(const ir_node *node) be_emit_cstring("/* "); be_emit_irprintf("%+F ", node); - dbg = get_irn_dbg_info(node); - sourcefile = ir_retrieve_dbg_info(dbg, &lineno); - if (sourcefile != NULL) { - be_emit_string(sourcefile); - be_emit_irprintf(":%u", lineno); + dbg = get_irn_dbg_info(node); + loc = ir_retrieve_dbg_info(dbg); + if (loc.file) { + be_emit_string(loc.file); + if (loc.line != 0) { + be_emit_irprintf(":%u", loc.line); + if (loc.column != 0) { + be_emit_irprintf(":%u", loc.column); + } + } } be_emit_cstring(" */\n"); be_emit_write_line(); } + +void be_emit_nothing(ir_node const *const node) +{ + (void)node; +} + +void be_emit_node(ir_node const *const node) +{ + be_dwarf_location(get_irn_dbg_info(node)); + ir_op *const op = get_irn_op(node); + emit_func *const emit = get_generic_function_ptr(emit_func, op); + DEBUG_ONLY(if (!emit) panic("no emit handler for node %+F (%+G, graph %+F)\n", node, node, get_irn_irg(node));) + emit(node); +}