scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 1698b65a4afed1cd63d8232f101615df6db2e7a0
parent 732711fe948bca7542f04347fa6261c85f56fe1e
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Wed,  3 Nov 2021 08:40:36 +0100

cc2/qbe: Add support for register parameters

Diffstat:
Msrc/cmd/cc/cc1/decl.c | 1+
Msrc/cmd/cc/cc2/target/qbe/cgen.c | 2++
Msrc/cmd/cc/cc2/target/qbe/code.c | 2++
3 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/cmd/cc/cc1/decl.c b/src/cmd/cc/cc1/decl.c @@ -486,6 +486,7 @@ funbody(Symbol *sym, Symbol *pars[]) switch (yytoken) { case '{': case TYPE: + case SCLASS: case TYPEIDEN: if (curctx != PARAMCTX) errorp("nested function declaration"); diff --git a/src/cmd/cc/cc2/target/qbe/cgen.c b/src/cmd/cc/cc2/target/qbe/cgen.c @@ -318,6 +318,7 @@ static Node * lhs(Node *np, Node *new) { switch (np->op) { + case OREG: case OMEM: case OAUTO: *new = *np; @@ -477,6 +478,7 @@ rhs(Node *np, Node *ret) *ret = *np; return np; case OMEM: + case OREG: case OAUTO: return load(tp, np, ret); case ONEG: diff --git a/src/cmd/cc/cc2/target/qbe/code.c b/src/cmd/cc/cc2/target/qbe/code.c @@ -294,6 +294,8 @@ defglobal(Symbol *sym) void defpar(Symbol *sym) { + if (sym->kind == SREG) + sym->kind = SAUTO; sym->type.flags |= PARF; }