2 * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
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.
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.
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
22 * @brief Interface for assembler output.
23 * @author Matthias Braun
31 #include "beemitter.h"
36 void be_emit_init_env(be_emit_env_t *env, FILE *F)
38 memset(env, 0, sizeof(env[0]));
41 obstack_init(&env->obst);
45 void be_emit_destroy_env(be_emit_env_t *env)
47 obstack_free(&env->obst, NULL);
50 void be_emit_ident(be_emit_env_t *env, ident *id)
52 size_t len = get_id_strlen(id);
53 const char *str = get_id_str(id);
55 be_emit_string_len(env, str, len);
58 void be_emit_tarval(be_emit_env_t *env, tarval *tv)
62 tarval_snprintf(buf, sizeof(buf), tv);
63 be_emit_string(env, buf);
66 void be_emit_irvprintf(be_emit_env_t *env, const char *fmt, va_list args)
70 ir_vsnprintf(buf, sizeof(buf), fmt, args);
71 be_emit_string(env, buf);
74 void be_emit_irprintf(be_emit_env_t *env, const char *fmt, ...)
79 be_emit_irvprintf(env, fmt, ap);
83 void be_emit_write_line(be_emit_env_t *env)
85 char *finished_line = obstack_finish(&env->obst);
87 fwrite(finished_line, env->linelength, 1, env->F);
89 obstack_free(&env->obst, finished_line);
92 void be_emit_pad_comment(be_emit_env_t *env)
94 while(env->linelength <= 30) {
95 be_emit_char(env, ' ');
97 be_emit_cstring(env, " ");
100 void be_emit_finish_line_gas(be_emit_env_t *env, const ir_node *node)
103 const char *sourcefile;
107 be_emit_char(env, '\n');
108 be_emit_write_line(env);
112 be_emit_pad_comment(env);
113 be_emit_cstring(env, "/* ");
114 be_emit_irprintf(env, "%+F ", node);
116 dbg = get_irn_dbg_info(node);
117 sourcefile = be_retrieve_dbg_info(dbg, &lineno);
118 if(sourcefile != NULL) {
119 be_emit_string(env, sourcefile);
120 be_emit_irprintf(env, ":%u", lineno);
122 be_emit_cstring(env, " */\n");
123 be_emit_write_line(env);