--- cc2/arch/qbe/code.c | 39 ++++++++++++++++++++++++--------------- cc2/cc2.h | 1 + cc2/symbol.c | 3 ++- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/cc2/arch/qbe/code.c b/cc2/arch/qbe/code.c index 037b1ab..89823d4 100644 --- a/cc2/arch/qbe/code.c +++ b/cc2/arch/qbe/code.c _AT_@ -6,6 +6,8 @@ #include "../../cc2.h" #include "../../../inc/sizes.h" +extern Symbol *locals; + /* * : is for user-defined Aggregate Types * $ is for globals (represented by a pointer) _AT_@ -103,34 +105,29 @@ emittree(Node *np) } } -static void +static char * size2asm(Type *tp) { - char *s; - /* In qbe we can ignore the aligment because it handles it */ if (tp->flags & STRF) { - s = "b\t"; + return "b"; } else { switch (tp->size) { case 1: - s = "b\t"; - break; + return "b"; case 2: - s = "h\t"; - break; + return "h"; case 4: - s = "w\t"; - break; + return "w"; case 8: - s = "l\t"; - break; + return "l"; default: abort(); } } - fputs(s, stdout); + + return NULL; } void _AT_@ -149,6 +146,7 @@ defglobal(Symbol *sym) void defpar(Symbol *sym) { + sym->type.flags |= PARF; } void _AT_@ -160,7 +158,8 @@ void data(Node *np) { putchar('\t'); - size2asm(&np->type); + fputs(size2asm(&np->type), stdout); + putchar('\t'); emittree(np); putchar(','); putchar('\n'); _AT_@ -169,9 +168,19 @@ data(Node *np) void writeout(void) { + Symbol *sym = locals; + if (curfun->kind == GLOB) fputs("export ", stdout); - printf("function %s(", symname(curfun)); + printf("function $%s(", symname(curfun)); + + if (sym && (sym->type.flags & PARF)) { + printf("%s %s", size2asm(&sym->type), symname(sym)); + sym = sym->next; + for (; sym && sym->type.flags & PARF; sym = sym->next) + printf(", %s %s", size2asm(&sym->type), symname(sym)); + } + puts("){"); puts("}"); } diff --git a/cc2/cc2.h b/cc2/cc2.h index e0de200..310fb6c 100644 --- a/cc2/cc2.h +++ b/cc2/cc2.h _AT_@ -5,6 +5,7 @@ enum tflags { STRF = 8, UNIONF = 16, FUNF = 32, + PARF = 64, INITF = 128 }; diff --git a/cc2/symbol.c b/cc2/symbol.c index 0a54ae1..a761abf 100644 --- a/cc2/symbol.c +++ b/cc2/symbol.c _AT_@ -11,8 +11,9 @@ #define NR_SYMHASH 64 +Symbol *locals; + static Symbol *symtab[NR_SYMHASH], *curlocal; -static Symbol *locals; static int infunction; -- 2.1.4Received on Thu Apr 14 2016 - 14:15:14 CEST
This archive was generated by hypermail 2.3.0 : Thu Apr 14 2016 - 14:24:15 CEST