Skip to content

Commit 8f6d0ad

Browse files
committed
tweak
1 parent b04ed8a commit 8f6d0ad

File tree

3 files changed

+231
-79
lines changed

3 files changed

+231
-79
lines changed

jscomp/runtime/caml_int64.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ external unsafe_to_int64 : t -> int64 = "%identity"
5151
external unsafe_of_int64 : int64 -> t = "%identity"
5252

5353

54-
let mk ~lo ~hi = {lo = lo >>>~ 0 ; hi}
54+
let [@inline] mk ~lo ~hi = {lo = lo >>>~ 0 ; hi}
5555
let min_int = mk ~lo: 0 ~hi:(0x80000000)
5656
(* The high bits are signed 0x80000000 |~ 0 *)
5757

lib/es6/caml_int64.js

Lines changed: 115 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,30 @@ function mk(lo, hi) {
88
];
99
}
1010

11-
var min_int = mk(0, -2147483648);
12-
13-
var max_int = mk(-1, 2147483647);
14-
15-
var one = mk(1, 0);
16-
17-
var zero = mk(0, 0);
18-
19-
var neg_one = mk(-1, -1);
11+
var min_int = [
12+
-2147483648,
13+
0
14+
];
15+
16+
var max_int = [
17+
2147483647,
18+
4294967295
19+
];
20+
21+
var one = [
22+
0,
23+
1
24+
];
25+
26+
var zero = [
27+
0,
28+
0
29+
];
30+
31+
var neg_one = [
32+
-1,
33+
4294967295
34+
];
2035

2136
function neg_signed(x) {
2237
return (x & -2147483648) !== 0;
@@ -30,23 +45,35 @@ function succ(param) {
3045
var x_lo = param[1];
3146
var x_hi = param[0];
3247
var lo = x_lo + 1 | 0;
33-
return mk(lo, x_hi + (
34-
lo === 0 ? 1 : 0
35-
) | 0);
48+
var hi = x_hi + (
49+
lo === 0 ? 1 : 0
50+
) | 0;
51+
return [
52+
hi,
53+
(lo >>> 0)
54+
];
3655
}
3756

3857
function neg(param) {
3958
var other_lo = (param[1] ^ -1) + 1 | 0;
40-
return mk(other_lo, (param[0] ^ -1) + (
41-
other_lo === 0 ? 1 : 0
42-
) | 0);
59+
var hi = (param[0] ^ -1) + (
60+
other_lo === 0 ? 1 : 0
61+
) | 0;
62+
return [
63+
hi,
64+
(other_lo >>> 0)
65+
];
4366
}
4467

4568
function add_aux(param, y_lo, y_hi) {
4669
var x_lo = param[1];
4770
var lo = x_lo + y_lo | 0;
4871
var overflow = neg_signed(x_lo) && (neg_signed(y_lo) || non_neg_signed(lo)) || neg_signed(y_lo) && non_neg_signed(lo) ? 1 : 0;
49-
return mk(lo, param[0] + y_hi + overflow | 0);
72+
var hi = param[0] + y_hi + overflow | 0;
73+
return [
74+
hi,
75+
(lo >>> 0)
76+
];
5077
}
5178

5279
function add(self, param) {
@@ -103,10 +130,16 @@ function lsl_(x, numBits) {
103130
}
104131
var lo = x[1];
105132
if (numBits >= 32) {
106-
return mk(0, (lo << (numBits - 32 | 0)));
107-
} else {
108-
return mk((lo << numBits), (lo >>> (32 - numBits | 0)) | (x[0] << numBits));
133+
return [
134+
(lo << (numBits - 32 | 0)),
135+
0
136+
];
109137
}
138+
var hi = (lo >>> (32 - numBits | 0)) | (x[0] << numBits);
139+
return [
140+
hi,
141+
((lo << numBits) >>> 0)
142+
];
110143
}
111144

112145
function lsr_(x, numBits) {
@@ -116,24 +149,42 @@ function lsr_(x, numBits) {
116149
var hi = x[0];
117150
var offset = numBits - 32 | 0;
118151
if (offset === 0) {
119-
return mk(hi, 0);
120-
} else if (offset > 0) {
121-
return mk((hi >>> offset), 0);
122-
} else {
123-
return mk((hi << (-offset | 0)) | (x[1] >>> numBits), (hi >>> numBits));
152+
return [
153+
0,
154+
(hi >>> 0)
155+
];
124156
}
157+
if (offset > 0) {
158+
var lo = (hi >>> offset);
159+
return [
160+
0,
161+
(lo >>> 0)
162+
];
163+
}
164+
var hi$1 = (hi >>> numBits);
165+
var lo$1 = (hi << (-offset | 0)) | (x[1] >>> numBits);
166+
return [
167+
hi$1,
168+
(lo$1 >>> 0)
169+
];
125170
}
126171

127172
function asr_(x, numBits) {
128173
if (numBits === 0) {
129174
return x;
130175
}
131176
var hi = x[0];
132-
if (numBits < 32) {
133-
return mk((hi << (32 - numBits | 0)) | (x[1] >>> numBits), (hi >> numBits));
134-
} else {
135-
return mk((hi >> (numBits - 32 | 0)), hi >= 0 ? 0 : -1);
177+
if (numBits >= 32) {
178+
return [
179+
hi >= 0 ? 0 : -1,
180+
((hi >> (numBits - 32 | 0)) >>> 0)
181+
];
136182
}
183+
var lo = (hi << (32 - numBits | 0)) | (x[1] >>> numBits);
184+
return [
185+
(hi >> numBits),
186+
(lo >>> 0)
187+
];
137188
}
138189

139190
function is_zero(param) {
@@ -223,7 +274,10 @@ function mul(_this, _other) {
223274
c48 = c48 + (c32 >>> 16);
224275
c32 = c32 & 65535;
225276
c48 = c48 + (a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48) & 65535;
226-
return mk(c00 & 65535 | ((c16 & 65535) << 16), c32 | (c48 << 16));
277+
return [
278+
c32 | (c48 << 16),
279+
((c00 & 65535 | ((c16 & 65535) << 16)) >>> 0)
280+
];
227281
}
228282

229283
}
@@ -236,15 +290,24 @@ function mul(_this, _other) {
236290
}
237291

238292
function xor(param, param$1) {
239-
return mk(param[1] ^ param$1[1], param[0] ^ param$1[0]);
293+
return [
294+
param[0] ^ param$1[0],
295+
((param[1] ^ param$1[1]) >>> 0)
296+
];
240297
}
241298

242299
function or_(param, param$1) {
243-
return mk(param[1] | param$1[1], param[0] | param$1[0]);
300+
return [
301+
param[0] | param$1[0],
302+
((param[1] | param$1[1]) >>> 0)
303+
];
244304
}
245305

246306
function and_(param, param$1) {
247-
return mk(param[1] & param$1[1], param[0] & param$1[0]);
307+
return [
308+
param[0] & param$1[0],
309+
((param[1] & param$1[1]) >>> 0)
310+
];
248311
}
249312

250313
function ge(param, param$1) {
@@ -304,15 +367,22 @@ function to_float(param) {
304367
function of_float(x) {
305368
if (isNaN(x) || !isFinite(x)) {
306369
return zero;
307-
} else if (x <= -9.22337203685477581e+18) {
370+
}
371+
if (x <= -9.22337203685477581e+18) {
308372
return min_int;
309-
} else if (x + 1 >= 9.22337203685477581e+18) {
373+
}
374+
if (x + 1 >= 9.22337203685477581e+18) {
310375
return max_int;
311-
} else if (x < 0) {
376+
}
377+
if (x < 0) {
312378
return neg(of_float(-x));
313-
} else {
314-
return mk(x % 4294967296 | 0, x / 4294967296 | 0);
315379
}
380+
var hi = x / 4294967296 | 0;
381+
var lo = x % 4294967296 | 0;
382+
return [
383+
hi,
384+
(lo >>> 0)
385+
];
316386
}
317387

318388
function isSafeInteger(param) {
@@ -499,7 +569,10 @@ function compare(self, other) {
499569
}
500570

501571
function of_int32(lo) {
502-
return mk(lo, lo < 0 ? -1 : 0);
572+
return [
573+
lo < 0 ? -1 : 0,
574+
(lo >>> 0)
575+
];
503576
}
504577

505578
function to_int32(x) {
@@ -543,7 +616,10 @@ function float_of_bits(x) {
543616

544617
function bits_of_float(x) {
545618
var match = (function(x){return new Int32Array(new Float64Array([x]).buffer)})(x);
546-
return mk(match[0], match[1]);
619+
return [
620+
match[1],
621+
(match[0] >>> 0)
622+
];
547623
}
548624

549625
export {

0 commit comments

Comments
 (0)