Fixed some warning about unused variables.
[libfirm] / ir / be / beemitter.c
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief       Interface for assembler output.
23  * @author      Matthias Braun
24  * @date        12.03.2007
25  * @version     $Id$
26  */
27 #include "config.h"
28
29 #include "beemitter.h"
30 #include "irnode_t.h"
31 #include "irprintf.h"
32 #include "ident.h"
33 #include "tv.h"
34 #include "dbginfo.h"
35
36 FILE           *emit_file;
37 struct obstack  emit_obst;
38
39 void be_emit_init(FILE *file)
40 {
41         emit_file       = file;
42         obstack_init(&emit_obst);
43 }
44
45 void be_emit_exit(void)
46 {
47         obstack_free(&emit_obst, NULL);
48 }
49
50 void be_emit_ident(ident *id)
51 {
52         size_t      len = get_id_strlen(id);
53         const char *str = get_id_str(id);
54
55         be_emit_string_len(str, len);
56 }
57
58 void be_emit_tarval(ir_tarval *tv)
59 {
60         char buf[64];
61
62         tarval_snprintf(buf, sizeof(buf), tv);
63         be_emit_string(buf);
64 }
65
66 void be_emit_irvprintf(const char *fmt, va_list args)
67 {
68         char buf[256];
69
70         ir_vsnprintf(buf, sizeof(buf), fmt, args);
71         be_emit_string(buf);
72 }
73
74 void be_emit_irprintf(const char *fmt, ...)
75 {
76         va_list ap;
77
78         va_start(ap, fmt);
79         be_emit_irvprintf(fmt, ap);
80         va_end(ap);
81 }
82
83 void be_emit_write_line(void)
84 {
85         size_t  len  = obstack_object_size(&emit_obst);
86         char   *line = (char*)obstack_finish(&emit_obst);
87
88         fwrite(line, 1, len, emit_file);
89         obstack_free(&emit_obst, line);
90 }
91
92 void be_emit_pad_comment(void)
93 {
94         size_t len = obstack_object_size(&emit_obst);
95         if (len > 30)
96                 len = 30;
97         /* 34 spaces */
98         be_emit_string_len("                                  ", 34 - len);
99 }
100
101 void be_emit_finish_line_gas(const ir_node *node)
102 {
103         dbg_info   *dbg;
104         const char *sourcefile;
105         unsigned    lineno;
106
107         if (node == NULL) {
108                 be_emit_char('\n');
109                 be_emit_write_line();
110                 return;
111         }
112
113         be_emit_pad_comment();
114         be_emit_cstring("/* ");
115         be_emit_irprintf("%+F ", node);
116
117         dbg        = get_irn_dbg_info(node);
118         sourcefile = ir_retrieve_dbg_info(dbg, &lineno);
119         if (sourcefile != NULL) {
120                 be_emit_string(sourcefile);
121                 be_emit_irprintf(":%u", lineno);
122         }
123         be_emit_cstring(" */\n");
124         be_emit_write_line();
125 }