aboutsummaryrefslogtreecommitdiffhomepage
path: root/x86_64/isel.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-12-20 20:42:17 +0100
committerlemon <lsof@mailbox.org>2025-12-20 20:42:17 +0100
commit8341b8fa4ede60ff92127825a0b2e6b29f5e4d83 (patch)
treef19ae7dfab7b5a67129c3aa908df145bee55acc0 /x86_64/isel.c
parentc0dcd732339bed30fed759388f5c7dad83ff8453 (diff)
isel: fix returning fixarg()'d temp
Diffstat (limited to 'x86_64/isel.c')
-rw-r--r--x86_64/isel.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/x86_64/isel.c b/x86_64/isel.c
index bc49d03..0392386 100644
--- a/x86_64/isel.c
+++ b/x86_64/isel.c
@@ -109,7 +109,7 @@ fixarg(union ref *r, struct instr *ins, struct block *blk, int *curi)
*r = mkref(RICON, sh & 255);
} else if (isstkslot(*r)) {
struct instr adr = mkinstr(Oadd, KPTR, mkref(RREG, RBP), mkintcon(KI32, -stkslots[r->i]));
- if (in_range(op, Ocopy, Omove))
+ if (op == Ocopy)
*ins = adr;
else
*r = insertinstr(blk, (*curi)++, adr);
@@ -605,14 +605,14 @@ seljmp(struct function *fn, struct block *blk)
if (blk->jmp.arg[0].bits) {
int curi;
union ref r = mkref(RREG, fn->abiret[0].reg);
- 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;
+ 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-1;
fixarg(&ins->r, ins, blk, &curi);
blk->jmp.arg[0] = r;
if (blk->jmp.arg[1].bits) {
r = mkref(RREG, fn->abiret[1].reg);
ins = &instrtab[insertinstr(blk, blk->ins.n, mkinstr(Omove, fn->abiret[1].ty.cls, r, blk->jmp.arg[1])).i];
- curi = blk->ins.n;
+ curi = blk->ins.n-1;
fixarg(&ins->r, ins, blk, &curi);
blk->jmp.arg[1] = r;
}