summary refs log tree commit diff stats
path: root/compiler/int128.nim
diff options
context:
space:
mode:
authorcooldome <cdome@bk.ru>2019-12-05 14:17:45 +0000
committerAndreas Rumpf <rumpf_a@web.de>2019-12-05 15:17:45 +0100
commit9b0e874687177af4f758b70994b3a08f963a75cd (patch)
treed9926adeb36e21f0ce42bd12394a5220781796c1 /compiler/int128.nim
parent26074f594d6e75e8679372fd00a47cdfc3e00e3a (diff)
downloadNim-9b0e874687177af4f758b70994b3a08f963a75cd.tar.gz
fixes #12783 [backport] (#12810)
* fixes #12783

* Trigger build
Diffstat (limited to 'compiler/int128.nim')
-rw-r--r--compiler/int128.nim9
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))