bug fix (#14149) [backport:1.2]

Co-authored-by: cooldome <ariabushenko@bk.ru>
This commit is contained in:
cooldome
2020-04-28 17:02:14 +01:00
committed by GitHub
parent e63fc95bd4
commit 289d48e5fe

View File

@@ -99,7 +99,10 @@ proc hiXorLo(a, b: uint64): uint64 {.inline.} =
elif defined(gcc) or defined(llvm_gcc) or defined(clang):
{.emit: """__uint128_t r = a; r *= b; `result` = (r >> 64) ^ r;""".}
elif defined(windows) and not defined(tcc):
{.emit: """a = _umul128(a, b, &b); `result` = a ^ b;""".}
proc umul128(a, b: uint64, c: ptr uint64): uint64 {.importc: "_umul128", header: "intrin.h".}
var b = b
let c = umul128(a, b, addr b)
result = c xor b
else:
result = hiXorLoFallback64(a, b)