aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qbe.c114
1 files changed, 58 insertions, 56 deletions
diff --git a/qbe.c b/qbe.c
index 33f6921..69f1e4f 100644
--- a/qbe.c
+++ b/qbe.c
@@ -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