-
Notifications
You must be signed in to change notification settings - Fork 1
/
int127Math.cash
40 lines (35 loc) · 1.2 KB
/
int127Math.cash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
library Int127Math {
function addint64returnint127(int a, int b) returns (int, int) {
int constant maxInt64 = 9223372036854775807;
int s1 = addmod(a, b, maxInt64);
int s0 = adddiv(a, b, maxInt64);
return s0, s1;
}
// fails on int127 overflow
function addint127(int a0, int a1, int b0, int b1) returns (int, int) {
int constant maxInt64 = 9223372036854775807;
int s1 = addmod(a, b, maxInt64);
int s0 = a0 + b0 + adddiv(a, b, maxInt64);
return s0, s1;
}
function subint64returnint127(int a, int b) returns (int, int) {
return addint64returnint127(a, -b);
}
// fails on int127 overflow
function subint127(int a0, int a1, int b0, int b1) returns (int, int) {
return addint127(a0, a1, -b0, -b1);
}
function mulint64returnint127(int a, int b) returns (int, int) {
int constant maxInt64 = 9223372036854775807;
int s1 = mulmod(a, b, maxInt64);
int s0 = muldiv(a, b, maxInt64);
return s0, s1;
}
// fails on int127 overflow
function mulint127(int a0, int a1, int b0, int b1) returns (int, int) {
int constant maxInt64 = 9223372036854775807;
int s1 = mulmod(a, b, maxInt64);
int s0 = a0 * b0 + muldiv(a, b, maxInt64);
return s0, s1;
}
}