diff --git a/lib/std/varints.nim b/lib/std/varints.nim index 88144a06c1..7adab9c37c 100644 --- a/lib/std/varints.nim +++ b/lib/std/varints.nim @@ -107,15 +107,9 @@ proc writeVu64*(z: var openArray[byte], x: uint64): int = varintWrite32(toOpenArray(z, 5, 8), y) return 9 -proc sar(a, b: int64): int64 {.noinit.} = - {.emit: [result, " = ", a, " >> ", b, ";"].} - -proc sal(a, b: int64): int64 {.noinit.} = - {.emit: [result, " = ", a, " << ", b, ";"].} - proc encodeZigzag*(x: int64): uint64 {.inline.} = - uint64(sal(x, 1)) xor uint64(sar(x, 63)) + let xu = uint64(x) + (xu shl 1) xor (xu shr 63) proc decodeZigzag*(x: uint64): int64 {.inline.} = - let casted = cast[int64](x) - result = (`shr`(casted, 1)) xor (-(casted and 1)) + cast[int64]((x shr 1) xor (x shl 63))