fix 18186 with adding importc _umul128 (#18200)

This commit is contained in:
slangmgh
2021-06-07 17:42:32 +08:00
committed by GitHub
parent e7816a3e77
commit e7aa41ff3f
2 changed files with 3 additions and 1 deletions

View File

@@ -867,10 +867,11 @@ when defined(sizeof_Int128):
return (hi, lo)
elif defined(vcc) and defined(cpu64):
proc umul128(x, y: uint64, z: ptr uint64): uint64 {.importc: "_umul128", header: "<intrin.h>".}
proc mul128*(x: uint64; y: uint64): uint64x2 {.inline.} =
var hi: uint64 = 0
var lo: uint64 = umul128(x, y, addr(hi))
return (hi, lo)
return uint64x2(hi: hi, lo: lo)
else:
proc lo32*(x: uint64): uint32 {.inline.} =

View File

@@ -147,6 +147,7 @@ when defined(sizeof_Int128):
return y1 or uint32(y0 > 1)
elif defined(vcc) and defined(cpu64):
proc umul128(x, y: uint64, z: ptr uint64): uint64 {.importc: "_umul128", header: "<intrin.h>".}
proc roundToOdd(g: uint64; cpHi: uint32): uint32 {.inline.} =
var p1: uint64 = 0
var p0: uint64 = umul128(g, cpHi, addr(p1))