diff options
author | Michael Forney <mforney@mforney.org> | 2023-08-25 15:04:47 -0700 |
---|---|---|
committer | Quentin Carbonneaux <quentin@c9x.me> | 2023-08-26 15:16:45 +0200 |
commit | d6c9669c3c83ce9f570a9c3528110b666aba88f2 (patch) | |
tree | 53ff27d39d2929d1d52b307697f1d89bbabf61f4 /amd64 | |
parent | d41d91ddd851798349f37d9bb75ed2718bbe28f5 (diff) | |
download | roux-d6c9669c3c83ce9f570a9c3528110b666aba88f2.tar.gz |
Fix conversion from float/double to unsigned int
signed int can't represent all the values of unsigned int, so we need to do the conversion to signed long, and use the lower 32 bits as the result.
Diffstat (limited to 'amd64')
-rw-r--r-- | amd64/isel.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/amd64/isel.c b/amd64/isel.c index 0d2affc..d1e4d3b 100644 --- a/amd64/isel.c +++ b/amd64/isel.c @@ -357,8 +357,13 @@ sel(Ins i, ANum *an, Fn *fn) kc = Kd; tmp[4] = getcon(0xc3e0000000000000, fn); Oftoui: - if (k == Kw) + if (k == Kw) { + r0 = newtmp("ftou", Kl, fn); + emit(Ocopy, Kw, i.to, r0, R); + i.cls = Kl; + i.to = r0; goto Emit; + } r0 = newtmp("ftou", kc, fn); for (j=0; j<4; j++) tmp[j] = newtmp("ftou", Kl, fn); |