diff options
| author | gingerBill <bill@gingerbill.org> | 2021-04-14 20:45:05 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-04-14 20:45:05 +0100 |
| commit | e19958152a7949860d77ebb53c4dd17c862fa893 (patch) | |
| tree | 91dbfc6219ffdee4d54236d7280410c8477c9091 /core/runtime | |
| parent | 05a181d719c57b6be73ab5cd726c2d418a8a9026 (diff) | |
Fix `floattidf`
Diffstat (limited to 'core/runtime')
| -rw-r--r-- | core/runtime/internal_linux.odin | 14 | ||||
| -rw-r--r-- | core/runtime/internal_windows.odin | 8 |
2 files changed, 11 insertions, 11 deletions
diff --git a/core/runtime/internal_linux.odin b/core/runtime/internal_linux.odin index 241ed0fdf..aecd7f601 100644 --- a/core/runtime/internal_linux.odin +++ b/core/runtime/internal_linux.odin @@ -103,7 +103,7 @@ floattidf :: proc(a: i128) -> f64 { s := a >> (N-1); a = (a ~ s) - s; sd: = N - _clz_i128(a); // number of significant digits - e := u32(sd - 1); // exponent + e := u32(sd - 1); // exponent if sd > DBL_MANT_DIG { switch sd { case DBL_MANT_DIG + 1: @@ -115,8 +115,8 @@ floattidf :: proc(a: i128) -> f64 { i128(u128(a) & (~u128(0) >> u128(N + DBL_MANT_DIG+2 - sd)) != 0); }; - a |= i128((a & 4) != 0); - a += 1; + a |= i128((a & 4) != 0); + a += 1; a >>= 2; if a & (1 << DBL_MANT_DIG) != 0 { @@ -127,9 +127,9 @@ floattidf :: proc(a: i128) -> f64 { a <<= u128(DBL_MANT_DIG - sd); } fb: [2]u32; - fb[1] = (u32(s) & 0x80000000) | // sign - ((e + 1023) << 20) | // exponent - ((u32(a) >> 32) & 0x000FFFFF); // mantissa-high - fb[1] = u32(a); // mantissa-low + fb[1] = (u32(s) & 0x80000000) | // sign + ((e + 1023) << 20) | // exponent + u32((u64(a) >> 32) & 0x000FFFFF); // mantissa-high + fb[1] = u32(a); // mantissa-low return transmute(f64)fb; } diff --git a/core/runtime/internal_windows.odin b/core/runtime/internal_windows.odin index 3be79fe19..79a4bcdcb 100644 --- a/core/runtime/internal_windows.odin +++ b/core/runtime/internal_windows.odin @@ -127,9 +127,9 @@ floattidf :: proc(a: i128) -> f64 { a <<= u128(DBL_MANT_DIG - sd); } fb: [2]u32; - fb[1] = (u32(s) & 0x80000000) | // sign - ((e + 1023) << 20) | // exponent - ((u32(a) >> 32) & 0x000FFFFF); // mantissa-high - fb[1] = u32(a); // mantissa-low + fb[1] = (u32(s) & 0x80000000) | // sign + ((e + 1023) << 20) | // exponent + u32((u64(a) >> 32) & 0x000FFFFF); // mantissa-high + fb[1] = u32(a); // mantissa-low return transmute(f64)fb; } |