diff --git a/rv64/emit.c b/rv64/emit.c index 92a2b68..f4b3236 100644 --- a/rv64/emit.c +++ b/rv64/emit.c @@ -232,7 +232,14 @@ loadaddr(Con *c, char *rn, FILE *f) char off[32]; switch (c->sym.type) { - default: + case SGlo: + fprintf(f, "\tlui %s, %%hi(", rn); + emitaddr(c, f); + fprintf(f, ")\n\taddi %s, %s, %%lo(", rn, rn); + emitaddr(c, f); + fputs(")\n", f); + break; + case SExt: fprintf(f, "\tla %s, ", rn); emitaddr(c, f); fputc('\n', f);