diff options
-rw-r--r-- | qbe.c | 114 |
1 files changed, 58 insertions, 56 deletions
@@ -96,7 +96,7 @@ switchcase(struct switchcases *cases, uint64_t i, struct value *v) c->body = v; } -/* functions */ +/* values */ struct value * mkblock(char *name) @@ -115,6 +115,63 @@ mkblock(char *name) return &b->label; } +struct value * +mkglobal(char *name, bool private) +{ + static uint64_t id; + struct value *v; + + v = xmalloc(sizeof(*v)); + v->kind = VALGLOBAL; + v->repr = &iptr; + v->name.str = name; + v->name.id = private ? ++id : 0; + + return v; +} + +char * +globalname(struct value *v) +{ + assert(v->kind == VALGLOBAL && !v->name.id); + return v->name.str; +} + +struct value * +mkintconst(struct repr *r, uint64_t n) +{ + struct value *v; + + v = xmalloc(sizeof(*v)); + v->kind = VALCONST; + v->repr = r; + v->i = n; + + return v; +} + +uint64_t +intconstvalue(struct value *v) +{ + assert(v->kind == VALCONST); + return v->i; +} + +static struct value * +mkfltconst(struct repr *r, double n) +{ + struct value *v; + + v = xmalloc(sizeof(*v)); + v->kind = VALCONST; + v->repr = r; + v->f = n; + + return v; +} + +/* functions */ + static void emittype(struct type *); static void emitvalue(struct value *); @@ -176,39 +233,6 @@ funcinstn(struct func *f, int op, struct repr *repr, struct value *args[]) #define funcinst(f, op, repr, ...) funcinstn(f, op, repr, (struct value *[]){__VA_ARGS__}) -struct value * -mkintconst(struct repr *r, uint64_t n) -{ - struct value *v; - - v = xmalloc(sizeof(*v)); - v->kind = VALCONST; - v->repr = r; - v->i = n; - - return v; -} - -uint64_t -intconstvalue(struct value *v) -{ - assert(v->kind == VALCONST); - return v->i; -} - -static struct value * -mkfltconst(struct repr *r, double n) -{ - struct value *v; - - v = xmalloc(sizeof(*v)); - v->kind = VALCONST; - v->repr = r; - v->f = n; - - return v; -} - static void funcalloc(struct func *f, struct decl *d) { @@ -352,28 +376,6 @@ funcload(struct func *f, struct type *t, struct lvalue lval) return funcbits(f, t, v, lval.bits); } -struct value * -mkglobal(char *name, bool private) -{ - static uint64_t id; - struct value *v; - - v = xmalloc(sizeof(*v)); - v->kind = VALGLOBAL; - v->repr = &iptr; - v->name.str = name; - v->name.id = private ? ++id : 0; - - return v; -} - -char * -globalname(struct value *v) -{ - assert(v->kind == VALGLOBAL && !v->name.id); - return v->name.str; -} - /* XXX: If a function declared without a prototype is declared with a parameter affected by default argument promotion, we need to emit a QBE |