fix 18186 with adding importc _umul128 (#18200)
This commit is contained in:
parent
e7816a3e77
commit
e7aa41ff3f
2 changed files with 3 additions and 1 deletions
|
|
@ -867,10 +867,11 @@ when defined(sizeof_Int128):
|
||||||
return (hi, lo)
|
return (hi, lo)
|
||||||
|
|
||||||
elif defined(vcc) and defined(cpu64):
|
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.} =
|
proc mul128*(x: uint64; y: uint64): uint64x2 {.inline.} =
|
||||||
var hi: uint64 = 0
|
var hi: uint64 = 0
|
||||||
var lo: uint64 = umul128(x, y, addr(hi))
|
var lo: uint64 = umul128(x, y, addr(hi))
|
||||||
return (hi, lo)
|
return uint64x2(hi: hi, lo: lo)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
proc lo32*(x: uint64): uint32 {.inline.} =
|
proc lo32*(x: uint64): uint32 {.inline.} =
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,7 @@ when defined(sizeof_Int128):
|
||||||
return y1 or uint32(y0 > 1)
|
return y1 or uint32(y0 > 1)
|
||||||
|
|
||||||
elif defined(vcc) and defined(cpu64):
|
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.} =
|
proc roundToOdd(g: uint64; cpHi: uint32): uint32 {.inline.} =
|
||||||
var p1: uint64 = 0
|
var p1: uint64 = 0
|
||||||
var p0: uint64 = umul128(g, cpHi, addr(p1))
|
var p0: uint64 = umul128(g, cpHi, addr(p1))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue