X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeemitter.h;h=b930bce6af0640c71181473e922d0882cd56d6b9;hb=0e4318adc38a54110c1b1f7f1d5edc0ee2c78170;hp=54fb49edfe558b49fff959e1f301be1e1fe84a1f;hpb=35d5830e185c74c565b01e2ff704737f744d2a6c;p=libfirm diff --git a/ir/be/beemitter.h b/ir/be/beemitter.h index 54fb49edf..b930bce6a 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,6 +23,8 @@ * @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 @@ -33,129 +35,104 @@ #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; /** * 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 a string to the (assembler) output. * - * @param env the emitter environment * @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 a null-terminated string to the (assembler) output. * - * @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); } /** * Emit a C string-constant to the (assembler) output. * - * @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) \ + be_emit_string_len(str, sizeof(str) - 1) /** * Initializes an emitter environment. * - * @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. * - * @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. * - * @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(ir_tarval *tv); /** * Emit the output of an ir_printf. * - * @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. * - * @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 * appends a gas-style comment with the node number and writes the line * - * @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