aboutsummaryrefslogtreecommitdiffhomepage
path: root/amd64/isel.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2023-06-20 19:05:00 +0200
committerlemon <lsof@mailbox.org>2023-06-20 19:05:00 +0200
commit3abdb713474bd282b9ce322abf7ec3609af2eb12 (patch)
treec1e7d0d281f453855b97d59f4432c47039ae4c6f /amd64/isel.c
parentc32792b810bd8a523a0a461ecc41adc367a82e7d (diff)
fix regression wiht ret args not being fixed
Diffstat (limited to 'amd64/isel.c')
-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;
}
}