aboutsummaryrefslogtreecommitdiffhomepage
path: root/amd64
diff options
context:
space:
mode:
Diffstat (limited to 'amd64')
-rw-r--r--amd64/isel.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/amd64/isel.c b/amd64/isel.c
index 3c0b9e7..2273c99 100644
--- a/amd64/isel.c
+++ b/amd64/isel.c
@@ -382,12 +382,17 @@ seljmp(struct function *fn, struct block *blk)
}
} else if (blk->jmp.t == Jret) {
if (blk->jmp.arg[0].t) {
+ int curi;
union ref r = mkref(RREG, fn->abiret[0].reg);
- insertinstr(blk, blk->ins.n, mkinstr(Omove, fn->abiret[0].ty.cls, r , blk->jmp.arg[0]));
+ struct instr *ins = &instrtab[insertinstr(blk, blk->ins.n, mkinstr(Omove, fn->abiret[0].ty.cls, r , blk->jmp.arg[0])).i];
+ curi = blk->ins.n;
+ fixarg(&ins->r, ins, blk, &curi);
blk->jmp.arg[0] = r;
if (blk->jmp.arg[1].t) {
r = mkref(RREG, fn->abiret[1].reg);
- insertinstr(blk, blk->ins.n, mkinstr(Omove, fn->abiret[1].ty.cls, r, blk->jmp.arg[1]));
+ ins = &instrtab[insertinstr(blk, blk->ins.n, mkinstr(Omove, fn->abiret[1].ty.cls, r, blk->jmp.arg[1])).i];
+ curi = blk->ins.n;
+ fixarg(&ins->r, ins, blk, &curi);
blk->jmp.arg[1] = r;
}
}