@@ -8,15 +8,30 @@ function mk(lo, hi) {
8
8
] ;
9
9
}
10
10
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
+ ] ;
20
35
21
36
function neg_signed ( x ) {
22
37
return ( x & - 2147483648 ) !== 0 ;
@@ -30,23 +45,35 @@ function succ(param) {
30
45
var x_lo = param [ 1 ] ;
31
46
var x_hi = param [ 0 ] ;
32
47
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
+ ] ;
36
55
}
37
56
38
57
function neg ( param ) {
39
58
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
+ ] ;
43
66
}
44
67
45
68
function add_aux ( param , y_lo , y_hi ) {
46
69
var x_lo = param [ 1 ] ;
47
70
var lo = x_lo + y_lo | 0 ;
48
71
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
+ ] ;
50
77
}
51
78
52
79
function add ( self , param ) {
@@ -103,10 +130,16 @@ function lsl_(x, numBits) {
103
130
}
104
131
var lo = x [ 1 ] ;
105
132
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
+ ] ;
109
137
}
138
+ var hi = ( lo >>> ( 32 - numBits | 0 ) ) | ( x [ 0 ] << numBits ) ;
139
+ return [
140
+ hi ,
141
+ ( ( lo << numBits ) >>> 0 )
142
+ ] ;
110
143
}
111
144
112
145
function lsr_ ( x , numBits ) {
@@ -116,24 +149,42 @@ function lsr_(x, numBits) {
116
149
var hi = x [ 0 ] ;
117
150
var offset = numBits - 32 | 0 ;
118
151
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
+ ] ;
124
156
}
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
+ ] ;
125
170
}
126
171
127
172
function asr_ ( x , numBits ) {
128
173
if ( numBits === 0 ) {
129
174
return x ;
130
175
}
131
176
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
+ ] ;
136
182
}
183
+ var lo = ( hi << ( 32 - numBits | 0 ) ) | ( x [ 1 ] >>> numBits ) ;
184
+ return [
185
+ ( hi >> numBits ) ,
186
+ ( lo >>> 0 )
187
+ ] ;
137
188
}
138
189
139
190
function is_zero ( param ) {
@@ -223,7 +274,10 @@ function mul(_this, _other) {
223
274
c48 = c48 + ( c32 >>> 16 ) ;
224
275
c32 = c32 & 65535 ;
225
276
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
+ ] ;
227
281
}
228
282
229
283
}
@@ -236,15 +290,24 @@ function mul(_this, _other) {
236
290
}
237
291
238
292
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
+ ] ;
240
297
}
241
298
242
299
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
+ ] ;
244
304
}
245
305
246
306
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
+ ] ;
248
311
}
249
312
250
313
function ge ( param , param$1 ) {
@@ -304,15 +367,22 @@ function to_float(param) {
304
367
function of_float ( x ) {
305
368
if ( isNaN ( x ) || ! isFinite ( x ) ) {
306
369
return zero ;
307
- } else if ( x <= - 9.22337203685477581e+18 ) {
370
+ }
371
+ if ( x <= - 9.22337203685477581e+18 ) {
308
372
return min_int ;
309
- } else if ( x + 1 >= 9.22337203685477581e+18 ) {
373
+ }
374
+ if ( x + 1 >= 9.22337203685477581e+18 ) {
310
375
return max_int ;
311
- } else if ( x < 0 ) {
376
+ }
377
+ if ( x < 0 ) {
312
378
return neg ( of_float ( - x ) ) ;
313
- } else {
314
- return mk ( x % 4294967296 | 0 , x / 4294967296 | 0 ) ;
315
379
}
380
+ var hi = x / 4294967296 | 0 ;
381
+ var lo = x % 4294967296 | 0 ;
382
+ return [
383
+ hi ,
384
+ ( lo >>> 0 )
385
+ ] ;
316
386
}
317
387
318
388
function isSafeInteger ( param ) {
@@ -499,7 +569,10 @@ function compare(self, other) {
499
569
}
500
570
501
571
function of_int32 ( lo ) {
502
- return mk ( lo , lo < 0 ? - 1 : 0 ) ;
572
+ return [
573
+ lo < 0 ? - 1 : 0 ,
574
+ ( lo >>> 0 )
575
+ ] ;
503
576
}
504
577
505
578
function to_int32 ( x ) {
@@ -543,7 +616,10 @@ function float_of_bits(x) {
543
616
544
617
function bits_of_float ( x ) {
545
618
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
+ ] ;
547
623
}
548
624
549
625
export {
0 commit comments