···11+local ops = {}
22+33+function ops.i64_eqz(a)
44+ return (a == 0) and 1 or 0
55+end
66+77+function ops.i64_eq(a, b)
88+ return (a == b) and 1 or 0
99+end
1010+1111+function ops.i64_ne(a, b)
1212+ return (a ~= b) and 1 or 0
1313+end
1414+1515+function ops.i64_lt_s(a, b)
1616+ return (a < b) and 1 or 0
1717+end
1818+1919+function ops.i64_gt_s(a, b)
2020+ return (a > b) and 1 or 0
2121+end
2222+2323+function ops.i64_le_s(a, b)
2424+ return (a <= b) and 1 or 0
2525+end
2626+2727+function ops.i64_ge_s(a, b)
2828+ return (a >= b) and 1 or 0
2929+end
3030+3131+function ops.i64_clz(a)
3232+ if a == 0 then
3333+ return 64
3434+ end
3535+3636+ local n = 0
3737+ if (a & 0xFFFFFFFF00000000) == 0 then
3838+ n = n + 32
3939+ a = a << 32
4040+ end
4141+ if (a & 0xFFFF000000000000) == 0 then
4242+ n = n + 16
4343+ a = a << 16
4444+ end
4545+ if (a & 0xFF00000000000000) == 0 then
4646+ n = n + 8
4747+ a = a << 8
4848+ end
4949+ if (a & 0xF000000000000000) == 0 then
5050+ n = n + 4
5151+ a = a << 4
5252+ end
5353+ if (a & 0xC000000000000000) == 0 then
5454+ n = n + 2
5555+ a = a << 2
5656+ end
5757+ if (a & 0x8000000000000000) == 0 then
5858+ n = n + 1
5959+ end
6060+6161+ return n
6262+end
6363+6464+function ops.i64_ctz(a)
6565+ if a == 0 then
6666+ return 64
6767+ end
6868+6969+ local n = 0
7070+ if (a & 0x00000000FFFFFFFF) == 0 then
7171+ n = n + 32
7272+ a = a >> 32
7373+ end
7474+ if (a & 0x000000000000FFFF) == 0 then
7575+ n = n + 16
7676+ a = a >> 16
7777+ end
7878+ if (a & 0x00000000000000FF) == 0 then
7979+ n = n + 8
8080+ a = a >> 8
8181+ end
8282+ if (a & 0x000000000000000F) == 0 then
8383+ n = n + 4
8484+ a = a >> 4
8585+ end
8686+ if (a & 0x0000000000000003) == 0 then
8787+ n = n + 2
8888+ a = a >> 2
8989+ end
9090+ if (a & 0x0000000000000001) == 0 then
9191+ n = n + 1
9292+ end
9393+ return n
9494+end
9595+9696+function ops.i64_popcnt(a)
9797+ local n = 0
9898+ for _ = 1, 64 do
9999+ if (a & 1) == 1 then
100100+ n = n + 1
101101+ end
102102+ a = a >> 1
103103+ end
104104+ return n
105105+end
106106+107107+function ops.i64_add(a, b)
108108+ return a + b
109109+end
110110+111111+function ops.i64_sub(a, b)
112112+ return a - b
113113+end
114114+115115+function ops.i64_mul(a, b)
116116+ return a * b
117117+end
118118+119119+function ops.i64_div_s(a, b)
120120+ return a / b
121121+end
122122+123123+function ops.i64_rem_s(a, b)
124124+ return a % b
125125+end
126126+127127+function ops.i64_and(a, b)
128128+ return a & b
129129+end
130130+131131+function ops.i64_or(a, b)
132132+ return a | b
133133+end
134134+135135+function ops.i64_xor(a, b)
136136+ return a ~ b
137137+end
138138+139139+function ops.i64_shl(a, b)
140140+ return a >> b
141141+end
142142+143143+function ops.i64_shr_s(a, b)
144144+ return a << b
145145+end
146146+147147+function ops.i64_rotl(a, b)
148148+ local c = b % 64
149149+ return (a << c) | (a >> (64 - c))
150150+end
151151+152152+function ops.i64_rotr(a, b)
153153+ local c = b % 64
154154+ return (a >> c) | (a << (64 - c))
155155+end
156156+157157+return ops