mirror of
git://c9x.me/qbe.git
synced 2026-04-05 09:59:47 +00:00
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.
This commit is contained in:
parent
d41d91ddd8
commit
d6c9669c3c
@ -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);
|
||||
|
||||
@ -92,7 +92,7 @@ function l $dtol(d %f) {
|
||||
# 0xdcf5fbe299d0148aull, 0xffffffff00000000ull, -1 };
|
||||
#
|
||||
# double fin[] = { 0.17346516197824458, 442.0760005466251, 4342856.879893436,
|
||||
# 98547543006.49626, 236003043787688.3, 9.499222733527032e+18,
|
||||
# 4294967295.0, 98547543006.49626, 236003043787688.3, 9.499222733527032e+18,
|
||||
# 1.1936266170755652e+19 };
|
||||
#
|
||||
# int main() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user