diff options
Diffstat (limited to 'compiler/int128.nim')
-rw-r--r-- | compiler/int128.nim | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/compiler/int128.nim b/compiler/int128.nim index ebcd226ec..067edeeed 100644 --- a/compiler/int128.nim +++ b/compiler/int128.nim @@ -29,27 +29,27 @@ template high*(t: typedesc[Int128]): Int128 = Max proc `$`*(a: Int128): string -proc toInt128*[T: SomeInteger](arg: T): Int128 = - when T is SomeUnsignedInt: +proc toInt128*[T: SomeInteger | bool](arg: T): Int128 = + when T is bool: result.sdata(0) = int32(arg) + elif T is SomeUnsignedInt: when sizeof(arg) <= 4: result.udata[0] = uint32(arg) else: result.udata[0] = uint32(arg and T(0xffffffff)) result.udata[1] = uint32(arg shr 32) + elif sizeof(arg) <= 4: + result.sdata(0) = int32(arg) + if arg < 0: # sign extend + result.sdata(1) = -1 + result.sdata(2) = -1 + result.sdata(3) = -1 else: - when sizeof(arg) <= 4: - result.sdata(0) = int32(arg) - if arg < 0: # sign extend - result.sdata(1) = -1 - result.sdata(2) = -1 - result.sdata(3) = -1 - else: - let tmp = int64(arg) - result.udata[0] = uint32(tmp and 0xffffffff) - result.sdata(1) = int32(tmp shr 32) - if arg < 0: # sign extend - result.sdata(2) = -1 - result.sdata(3) = -1 + let tmp = int64(arg) + result.udata[0] = uint32(tmp and 0xffffffff) + result.sdata(1) = int32(tmp shr 32) + if arg < 0: # sign extend + result.sdata(2) = -1 + result.sdata(3) = -1 template isNegative(arg: Int128): bool = arg.sdata(3) < 0 |