From 1f72464c6451fcff16180d00af537225acc9b83c Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 23 Nov 2025 12:02:27 +0100 Subject: implement float varargs, and some other fixes --- amd64/isel.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'amd64/isel.c') diff --git a/amd64/isel.c b/amd64/isel.c index 9606c87..51a58db 100644 --- a/amd64/isel.c +++ b/amd64/isel.c @@ -141,6 +141,12 @@ selcall(struct function *fn, struct instr *ins, struct block *blk, int *curi) } else { union ref adr = mkaddr((struct addr){mkref(RREG, RSP), .disp = abi.stk}); *arg = mkinstr(Ostore8+ilog2(cls2siz[abi.ty.cls]), 0, adr, arg->r); + int iargsave = iarg; + if (isaddrcon(arg->r,1) || arg->r.t == RADDR) + arg->r = insertinstr(blk, iarg++, mkinstr(Ocopy, abi.ty.cls, arg->r)); + else + fixarg(&ins->r, ins, blk, &iarg); + *curi += iarg - iargsave; } } if (call->argstksiz) { -- cgit v1.2.3