2 * This file is part of libFirm.
3 * Copyright (C) 2012 University of Karlsruhe.
8 * @brief Interface for assembler output.
9 * @author Matthias Braun
15 #include "beemitter.h"
25 struct obstack emit_obst;
27 void be_emit_init(FILE *file)
30 obstack_init(&emit_obst);
33 void be_emit_exit(void)
35 obstack_free(&emit_obst, NULL);
38 void be_emit_irvprintf(const char *fmt, va_list args)
40 ir_obst_vprintf(&emit_obst, fmt, args);
43 void be_emit_irprintf(const char *fmt, ...)
48 be_emit_irvprintf(fmt, ap);
52 void be_emit_write_line(void)
54 size_t len = obstack_object_size(&emit_obst);
55 char *line = (char*)obstack_finish(&emit_obst);
57 fwrite(line, 1, len, emit_file);
58 obstack_free(&emit_obst, line);
61 void be_emit_pad_comment(void)
63 size_t len = obstack_object_size(&emit_obst);
67 be_emit_string_len(" ", 34 - len);
70 void be_emit_finish_line_gas(const ir_node *node)
75 if (node == NULL || !be_options.verbose_asm) {
81 be_emit_pad_comment();
82 be_emit_cstring("/* ");
83 be_emit_irprintf("%+F ", node);
85 dbg = get_irn_dbg_info(node);
86 loc = ir_retrieve_dbg_info(dbg);
88 be_emit_string(loc.file);
90 be_emit_irprintf(":%u", loc.line);
91 if (loc.column != 0) {
92 be_emit_irprintf(":%u", loc.column);
96 be_emit_cstring(" */\n");
100 void be_emit_nothing(ir_node const *const node)
105 void be_emit_node(ir_node const *const node)
107 be_dwarf_location(get_irn_dbg_info(node));
108 ir_op *const op = get_irn_op(node);
109 emit_func *const emit = get_generic_function_ptr(emit_func, op);
110 DEBUG_ONLY(if (!emit) panic("no emit handler for node %+F (%+G, graph %+F)\n", node, node, get_irn_irg(node));)