Skip to content

Commit e231d19

Browse files
authored
Add clz and ctz unary operations for glue/i64 (#2155)
1 parent a924cc7 commit e231d19

File tree

5 files changed

+42
-20
lines changed

5 files changed

+42
-20
lines changed

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"dependencies": {
2424
"binaryen": "102.0.0-nightly.20211028",
25-
"long": "^5.1.0",
25+
"long": "^5.2.0",
2626
"source-map-support": "^0.5.20",
2727
"ts-node": "^10.4.0"
2828
},

src/glue/js/i64.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ declare function i64_new(lo: i32, hi?: i32): i64;
1313
declare function i64_low(value: i64): i32;
1414
declare function i64_high(value: i64): i32;
1515

16+
declare function i64_not(value: i64): i64;
17+
declare function i64_clz(value: i64): i32;
18+
declare function i64_ctz(value: i64): i32;
19+
1620
declare function i64_add(left: i64, right: i64): i64;
1721
declare function i64_sub(left: i64, right: i64): i64;
1822
declare function i64_mul(left: i64, right: i64): i64;
@@ -27,8 +31,6 @@ declare function i64_xor(left: i64, right: i64): i64;
2731
declare function i64_shl(left: i64, right: i64): i64;
2832
declare function i64_shr(left: i64, right: i64): i64;
2933
declare function i64_shr_u(left: i64, right: i64): i64;
30-
declare function i64_not(value: i64): i64;
31-
3234
declare function i64_eq(left: i64, right: i64): boolean;
3335
declare function i64_ne(left: i64, right: i64): boolean;
3436
declare function i64_gt(left: i64, right: i64): boolean;

src/glue/js/i64.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ global.i64_high = function i64_high(value) {
2727
return value.high;
2828
};
2929

30+
global.i64_not = function i64_not(value) {
31+
return value.not();
32+
};
33+
34+
global.i64_clz = function i64_clz(value) {
35+
return value.clz();
36+
};
37+
38+
global.i64_ctz = function i64_ctz(value) {
39+
return value.ctz();
40+
};
41+
3042
global.i64_add = function i64_add(left, right) {
3143
return left.add(right);
3244
};
@@ -104,10 +116,6 @@ global.i64_shr_u = function i64_shr_u(left, right) {
104116
return left.shru(right);
105117
};
106118

107-
global.i64_not = function i64_not(value) {
108-
return value.not();
109-
};
110-
111119
global.i64_eq = function i64_eq(left, right) {
112120
return left.eq(right);
113121
};

src/glue/wasm/i64.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ function i64_low(value: i64): i32 {
3232
return <i32>value;
3333
}
3434

35+
// @ts-ignore: decorator
36+
@global @inline
37+
function i64_not(value: i64): i64 {
38+
return ~value;
39+
}
40+
41+
// @ts-ignore: decorator
42+
@global @inline
43+
function i64_clz(value: i64): i32 {
44+
return <i32>clz(value);
45+
}
46+
47+
// @ts-ignore: decorator
48+
@global @inline
49+
function i64_ctz(value: i64): i32 {
50+
return <i32>ctz(value);
51+
}
52+
3553
// @ts-ignore: decorator
3654
@global @inline
3755
function i64_high(value: i64): i32 {
@@ -134,12 +152,6 @@ function i64_shr_u(left: i64, right: i64): i64 {
134152
return left >>> right;
135153
}
136154

137-
// @ts-ignore: decorator
138-
@global @inline
139-
function i64_not(value: i64): i64 {
140-
return ~value;
141-
}
142-
143155
// @ts-ignore: decorator
144156
@global @inline
145157
function i64_eq(left: i64, right: i64): bool {

0 commit comments

Comments
 (0)