diff options
Diffstat (limited to 'rv64/emit.c')
| -rw-r--r-- | rv64/emit.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/rv64/emit.c b/rv64/emit.c index 39b55ea..c1f29ac 100644 --- a/rv64/emit.c +++ b/rv64/emit.c @@ -444,7 +444,7 @@ rv64_emitfn(Fn *fn, FILE *f) static int id0; int lbl, neg, off, frame, *pr, r; Blk *b, *s; - Ins *i; + Ins *i, ii; emitfnlnk(fn->name, &fn->lnk, f); @@ -549,6 +549,11 @@ rv64_emitfn(Fn *fn, FILE *f) b->s2 = s; neg = 1; } + if (rtype(b->jmp.arg) == RSlot) { + ii.arg[0] = b->jmp.arg; + emitf("lw t6, %M0", &ii, fn, f); + b->jmp.arg = TMP(T6); + } assert(isreg(b->jmp.arg)); fprintf(f, "\tb%sz %s, .L%d\n", |
