diff options
Diffstat (limited to 'lisc/emit.c')
-rw-r--r-- | lisc/emit.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/lisc/emit.c b/lisc/emit.c index 316c5f0..95d2346 100644 --- a/lisc/emit.c +++ b/lisc/emit.c @@ -315,7 +315,6 @@ emitfn(Fn *fn, FILE *f) int *r, c, fs; fprintf(f, - "\n" ".text\n" ".globl %s\n" ".type %s, @function\n" @@ -371,34 +370,34 @@ emitfn(Fn *fn, FILE *f) void emitdat(Dat *d, FILE *f) { + static char *dtoa[] = { + [DAlign] = ".align", + [DB] = "\t.byte", + [DH] = "\t.value", + [DW] = "\t.long", + [DL] = "\t.quad" + }; + switch (d->type) { + case DStart: + fprintf(f, ".data\n"); + break; + case DEnd: + fprintf(f, "\n"); + break; case DName: fprintf(f, - "\n" - ".data\n" ".globl %s\n" ".type %s, @object\n" "%s:\n", d->u.str, d->u.str, d->u.str ); break; - case DAlign: - fprintf(f, ".align %"PRId64"\n", d->u.num); - break; case DA: fprintf(f, "\t.string \"%s\"\n", d->u.str); break; - case DB: - fprintf(f, "\t.byte %"PRId64"\n", d->u.num); - break; - case DH: - fprintf(f, "\t.value %"PRId64"\n", d->u.num); - break; - case DW: - fprintf(f, "\t.long %"PRId64"\n", d->u.num); - break; - case DL: - fprintf(f, "\t.quad %"PRId64"\n", d->u.num); + default: + fprintf(f, "%s %"PRId64"\n", dtoa[d->type], d->u.num); break; } } |