X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeemitter.h;h=57964cfdb3416692a1575e9092b31d4847883f55;hb=2669742071b00949c6a5102f39b7df7fd7d3e3fb;hp=54fb49edfe558b49fff959e1f301be1e1fe84a1f;hpb=35d5830e185c74c565b01e2ff704737f744d2a6c;p=libfirm diff --git a/ir/be/beemitter.h b/ir/be/beemitter.h index 54fb49edf..57964cfdb 100644 --- a/ir/be/beemitter.h +++ b/ir/be/beemitter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -23,35 +23,34 @@ * @author Matthias Braun * @date 12.03.2007 * @version $Id$ + * + * This is a framework for emitting data (usually the final assembly code) */ #ifndef FIRM_BE_BEEMITTER_H #define FIRM_BE_BEEMITTER_H +#include "firm_config.h" + #include #include #include "firm_types.h" #include "obst.h" #include "be.h" -/* framework for emitting data (usually the final assembly code) */ - -/** The emitter environment. */ -typedef struct be_emit_env_t { - FILE *F; /**< The handle of the (assembler) file that is written to. */ - struct obstack obst; /**< An obstack for temporary storage. */ - int linelength; /**< The length of the current line. */ -} be_emit_env_t; - -#define NULL_EMITTER { NULL, NULL_OBST, 0 } +/* don't use the following vars directly, they're only here for the inlines */ +extern FILE *emit_file; +extern struct obstack emit_obst; +extern int emit_linelength; /** * Emit a character to the (assembler) output. * * @param env the emitter environment */ -static INLINE void be_emit_char(be_emit_env_t *env, char c) { - obstack_1grow(&env->obst, c); - env->linelength++; +static INLINE void be_emit_char(char c) +{ + obstack_1grow(&emit_obst, c); + emit_linelength++; } /** @@ -61,11 +60,10 @@ static INLINE void be_emit_char(be_emit_env_t *env, char c) { * @param str the string * @param l the length of the given string */ -static INLINE void be_emit_string_len(be_emit_env_t *env, const char *str, - size_t l) +static INLINE void be_emit_string_len(const char *str, size_t l) { - obstack_grow(&env->obst, str, l); - env->linelength += l; + obstack_grow(&emit_obst, str, l); + emit_linelength += l; } /** @@ -74,10 +72,10 @@ static INLINE void be_emit_string_len(be_emit_env_t *env, const char *str, * @param env the emitter environment * @param str the null-terminated string */ -static INLINE void be_emit_string(be_emit_env_t *env, const char *str) +static INLINE void be_emit_string(const char *str) { size_t len = strlen(str); - be_emit_string_len(env, str, len); + be_emit_string_len(str, len); } /** @@ -86,7 +84,8 @@ static INLINE void be_emit_string(be_emit_env_t *env, const char *str) * @param env the emitter environment * @param str the null-terminated string constant */ -#define be_emit_cstring(env, str) do { be_emit_string_len(env, str, sizeof(str)-1); } while(0) +#define be_emit_cstring(str) \ + do { be_emit_string_len(str, sizeof(str)-1); } while(0) /** * Initializes an emitter environment. @@ -94,14 +93,14 @@ static INLINE void be_emit_string(be_emit_env_t *env, const char *str) * @param env the (uninitialized) emitter environment * @param F a file handle where the emitted file is written to. */ -void be_emit_init_env(be_emit_env_t *env, FILE *F); +void be_emit_init(FILE *F); /** * Destroys the given emitter environment. * * @param env the emitter environment */ -void be_emit_destroy_env(be_emit_env_t *env); +void be_emit_exit(void); /** * Emit an ident to the (assembler) output. @@ -109,7 +108,7 @@ void be_emit_destroy_env(be_emit_env_t *env); * @param env the emitter environment * @param id the ident to be emitted */ -void be_emit_ident(be_emit_env_t *env, ident *id); +void be_emit_ident(ident *id); /** * Emit a firm tarval. @@ -117,7 +116,7 @@ void be_emit_ident(be_emit_env_t *env, ident *id); * @param env the emitter environment * @param tv the tarval to be emitted */ -void be_emit_tarval(be_emit_env_t *env, tarval *tv); +void be_emit_tarval(tarval *tv); /** * Emit the output of an ir_printf. @@ -125,7 +124,7 @@ void be_emit_tarval(be_emit_env_t *env, tarval *tv); * @param env the emitter environment * @param fmt the ir_printf format */ -void be_emit_irprintf(be_emit_env_t *env, const char *fmt, ...); +void be_emit_irprintf(const char *fmt, ...); /** * Emit the output of an ir_vprintf. @@ -133,14 +132,14 @@ void be_emit_irprintf(be_emit_env_t *env, const char *fmt, ...); * @param env the emitter environment * @param fmt the ir_printf format */ -void be_emit_irvprintf(be_emit_env_t *env, const char *fmt, va_list args); +void be_emit_irvprintf(const char *fmt, va_list args); /** * Flush the line in the current line buffer to the emitter file. * * @param env the emitter environment */ -void be_emit_write_line(be_emit_env_t *env); +void be_emit_write_line(void); /** * Flush the line in the current line buffer to the emitter file and @@ -149,13 +148,13 @@ void be_emit_write_line(be_emit_env_t *env); * @param env the emitter environment * @param node the node to get the debug info from */ -void be_emit_finish_line_gas(be_emit_env_t *env, const ir_node *node); +void be_emit_finish_line_gas(const ir_node *node); /** * Emit spaces until the comment position is reached. * * @param env the emitter environment */ -void be_emit_pad_comment(be_emit_env_t *env); +void be_emit_pad_comment(void); -#endif /* FIRM_BE_BEEMITTER_H */ +#endif