From c7e34f7e4ae6854b82f345f07589a646cf8376cf Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 7 Jan 2026 10:32:18 +0100 Subject: aarch64: vshifts, flt cvt --- aarch64/isel.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'aarch64/isel.c') diff --git a/aarch64/isel.c b/aarch64/isel.c index 65e61cf..5433add 100644 --- a/aarch64/isel.c +++ b/aarch64/isel.c @@ -109,7 +109,21 @@ fixarg(union ref *r, struct instr *ins, struct block *blk, int *curi) } else if (isfltcon(*r)) { enum irclass k = concls(*r), ki = KI32 + k-KF32; if (conht[r->i].f != 0.0) { - union ref gpr = insertinstr(blk, (*curi)++, mkinstr(Ocopy, ki, mkintcon(ki, conht[r->i].i))); + union { + vlong i64; + int i32; + float f32; + double f64; + } pun; + vlong i; + if (k == KF32) { + pun.f32 = conht[r->i].f; + i = pun.i32; + } else { + pun.f64 = conht[r->i].f; + i = pun.i64; + } + union ref gpr = insertinstr(blk, (*curi)++, mkinstr(Ocopy, ki, mkintcon(ki, i))); *r = insertinstr(blk, (*curi)++, mkinstr(Ocopy, k, gpr)); } else if (oiscmp(op)) { return; -- cgit v1.2.3