summary refs log tree commit diff
path: root/lisc/emit.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/emit.c')
-rw-r--r--lisc/emit.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/lisc/emit.c b/lisc/emit.c
index ab7a72a..316c5f0 100644
--- a/lisc/emit.c
+++ b/lisc/emit.c
@@ -315,6 +315,7 @@ emitfn(Fn *fn, FILE *f)
 	int *r, c, fs;
 
 	fprintf(f,
+		"\n"
 		".text\n"
 		".globl %s\n"
 		".type %s, @function\n"
@@ -366,3 +367,38 @@ emitfn(Fn *fn, FILE *f)
 	}
 
 }
+
+void
+emitdat(Dat *d, FILE *f)
+{
+	switch (d->type) {
+	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);
+		break;
+	}
+}