diff options
author | cooldome <cdome@bk.ru> | 2019-12-05 14:17:45 +0000 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-12-05 15:17:45 +0100 |
commit | 9b0e874687177af4f758b70994b3a08f963a75cd (patch) | |
tree | d9926adeb36e21f0ce42bd12394a5220781796c1 /compiler/int128.nim | |
parent | 26074f594d6e75e8679372fd00a47cdfc3e00e3a (diff) | |
download | Nim-9b0e874687177af4f758b70994b3a08f963a75cd.tar.gz |
fixes #12783 [backport] (#12810)
* fixes #12783 * Trigger build
Diffstat (limited to 'compiler/int128.nim')
-rw-r--r-- | compiler/int128.nim | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/compiler/int128.nim b/compiler/int128.nim index dcfdc7b4b..573cc6082 100644 --- a/compiler/int128.nim +++ b/compiler/int128.nim @@ -335,7 +335,6 @@ proc `*`(a: Int128, b: uint32): Int128 = result.udata[3] = cast[uint32](tmp3) + cast[uint32](tmp2 shr 32) proc `*`*(a: Int128, b: int32): Int128 = - let isNegative = isNegative(a) xor isNegative(b) result = a * cast[uint32](abs(b)) if b < 0: result = -result @@ -356,8 +355,6 @@ proc low64(a: Int128): uint64 = bitconcat(a.udata[1], a.udata[0]) proc `*`*(lhs,rhs: Int128): Int128 = - let isNegative = isNegative(lhs) xor isNegative(rhs) - let a = cast[uint64](lhs.udata[0]) b = cast[uint64](lhs.udata[1]) @@ -379,9 +376,6 @@ proc `*`*(lhs,rhs: Int128): Int128 = result = result + toInt128(a32 * b00) shl 32 result = result + toInt128(a00 * b32) shl 32 - if isNegative != isNegative(result): - assert(false, "overflow") - proc `*=`*(a: var Int128, b: Int128) = a = a * b @@ -684,6 +678,9 @@ when isMainModule: var ma = 100'i64 var mb = 13 + doAssert toInt128(ma) * toInt128(0) == toInt128(0) + doAssert toInt128(-ma) * toInt128(0) == toInt128(0) + # sign correctness doAssert divMod(toInt128( ma),toInt128( mb)) == (toInt128( ma div mb), toInt128( ma mod mb)) doAssert divMod(toInt128(-ma),toInt128( mb)) == (toInt128(-ma div mb), toInt128(-ma mod mb)) |