1 #include <Object/BigInt.d>
2 #include <__oo2c.h>
3 #include <setjmp.h>
4
Object_BigInt__NewInstance(OOC_INT32 size)5 static Object_BigInt__BigInt Object_BigInt__NewInstance(OOC_INT32 size) {
6 register OOC_INT64 i0,i1;
7 Object_BigInt__BigInt big;
8
9 i0 = (OOC_INT64)RT0__NewObject(_td_Object_BigInt__BigInt.baseTypes[0]);
10 big = (Object_BigInt__BigInt)i0;
11 i1 = size;
12 *(OOC_INT32*)(_check_pointer(i0, 2280)) = i1;
13 *(OOC_INT64*)((_check_pointer(i0, 2306))+8) = ((OOC_INT64)RT0__NewObject(_td_Object_BigInt__DigitArray.baseTypes[0], (_abs(i1))));
14 return (Object_BigInt__BigInt)i0;
15 ;
16 }
17
Object_BigInt__Normalize(Object_BigInt__BigInt big)18 static void Object_BigInt__Normalize(Object_BigInt__BigInt big) {
19 register OOC_INT64 i0,i1,i2,i3,i4;
20 OOC_INT32 j;
21 OOC_INT32 i;
22
23 i0 = (OOC_INT64)big;
24 i1 = *(OOC_INT32*)(_check_pointer(i0, 2446));
25 i1 = _abs(i1);
26 j = i1;
27 i = i1;
28 i2 = i1!=0;
29 if (i2) goto l3;
30 i2=0u;
31 goto l5;
32 l3:
33 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 2490))+8);
34 i2 = _check_pointer(i2, 2496);
35 i3 = OOC_ARRAY_LENGTH(i2, 0);
36 i2 = *(OOC_INT16*)(i2+(_check_index((i1-1), i3, OOC_UINT32, 2496))*2);
37 i2 = i2==0;
38
39 l5:
40 if (i2) goto l7;
41 i2=i1;
42 goto l17;
43 l7:
44 i2=i1;
45 l8_loop:
46 i2 = i2-1;
47 i = i2;
48 i3 = i2!=0;
49 if (i3) goto l11;
50 i3=0u;
51 goto l13;
52 l11:
53 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 2490))+8);
54 i3 = _check_pointer(i3, 2496);
55 i4 = OOC_ARRAY_LENGTH(i3, 0);
56 i3 = *(OOC_INT16*)(i3+(_check_index((i2-1), i4, OOC_UINT32, 2496))*2);
57 i3 = i3==0;
58
59 l13:
60 if (i3) goto l8_loop;
61 l17:
62 i1 = i2!=i1;
63 if (!i1) goto l24;
64 i1 = *(OOC_INT32*)(_check_pointer(i0, 2567));
65 i1 = i1<0;
66 if (i1) goto l22;
67 i1=i2;
68 goto l23;
69 l22:
70 i1 = -i2;
71 i = i1;
72
73 l23:
74 *(OOC_INT32*)(_check_pointer(i0, 2620)) = i1;
75 l24:
76 return;
77 ;
78 }
79
Object_BigInt__AddAbs(Object_BigInt__BigInt a,Object_BigInt__BigInt b)80 static Object_BigInt__BigInt Object_BigInt__AddAbs(Object_BigInt__BigInt a, Object_BigInt__BigInt b) {
81 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
82 Object_BigInt__BigInt z;
83 OOC_INT32 sizeA;
84 OOC_INT32 sizeB;
85 OOC_INT32 carry;
86 OOC_INT32 i;
87
88 i0 = (OOC_INT64)a;
89 i1 = (OOC_INT64)b;
90 i2 = *(OOC_INT32*)(_check_pointer(i0, 3200));
91 i3 = *(OOC_INT32*)(_check_pointer(i1, 3214));
92 i2 = (_abs(i2))<(_abs(i3));
93 if (!i2) goto l4;
94 z = (Object_BigInt__BigInt)i0;
95 a = (Object_BigInt__BigInt)i1;
96 b = (Object_BigInt__BigInt)i0;
97 {register OOC_INT64 h0=i0;i0=i1;i1=h0;}
98 l4:
99 i2 = *(OOC_INT32*)(_check_pointer(i0, 3284));
100 i2 = _abs(i2);
101 sizeA = i2;
102 i3 = *(OOC_INT32*)(_check_pointer(i1, 3306));
103 i3 = _abs(i3);
104 sizeB = i3;
105 i4 = (OOC_INT64)Object_BigInt__NewInstance((i2+1));
106 z = (Object_BigInt__BigInt)i4;
107 carry = 0;
108 i = 0;
109 i5 = 0!=i3;
110 if (i5) goto l7;
111 i1=0;i3=0;
112 goto l13;
113 l7:
114 i5=0;i6=0;
115 l8_loop:
116 i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 3417))+8);
117 i7 = _check_pointer(i7, 3423);
118 i8 = OOC_ARRAY_LENGTH(i7, 0);
119 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 3428))+8);
120 i9 = _check_pointer(i9, 3434);
121 i10 = OOC_ARRAY_LENGTH(i9, 0);
122 i7 = *(OOC_INT16*)(i7+(_check_index(i6, i8, OOC_UINT32, 3423))*2);
123 i8 = *(OOC_INT16*)(i9+(_check_index(i6, i10, OOC_UINT32, 3434))*2);
124 i5 = i5+(i7+i8);
125 carry = i5;
126 i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 3447))+8);
127 i7 = _check_pointer(i7, 3453);
128 i8 = OOC_ARRAY_LENGTH(i7, 0);
129 *(OOC_INT16*)(i7+(_check_index(i6, i8, OOC_UINT32, 3453))*2) = (_mod(i5,32768));
130 i5 = i5>>15;
131 carry = i5;
132 i6 = i6+1;
133 i = i6;
134 i7 = i6!=i3;
135 if (i7) goto l8_loop;
136 l12:
137 i1=i6;i3=i5;
138 l13:
139 i5 = i1!=i2;
140 if (i5) goto l16;
141 i0=i1;i1=i3;
142 goto l22;
143 l16:
144 {register OOC_INT64 h0=i1;i1=i3;i3=h0;}
145 l17_loop:
146 i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 3581))+8);
147 i5 = _check_pointer(i5, 3587);
148 i6 = OOC_ARRAY_LENGTH(i5, 0);
149 i5 = *(OOC_INT16*)(i5+(_check_index(i3, i6, OOC_UINT32, 3587))*2);
150 i1 = i1+i5;
151 carry = i1;
152 i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 3600))+8);
153 i5 = _check_pointer(i5, 3606);
154 i6 = OOC_ARRAY_LENGTH(i5, 0);
155 *(OOC_INT16*)(i5+(_check_index(i3, i6, OOC_UINT32, 3606))*2) = (_mod(i1,32768));
156 i1 = i1>>15;
157 carry = i1;
158 i3 = i3+1;
159 i = i3;
160 i5 = i3!=i2;
161 if (i5) goto l17_loop;
162 l21:
163 i0=i3;
164 l22:
165 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 3695))+8);
166 i2 = _check_pointer(i2, 3701);
167 i3 = OOC_ARRAY_LENGTH(i2, 0);
168 *(OOC_INT16*)(i2+(_check_index(i0, i3, OOC_UINT32, 3701))*2) = i1;
169 Object_BigInt__Normalize((Object_BigInt__BigInt)i4);
170 return (Object_BigInt__BigInt)i4;
171 ;
172 }
173
Object_BigInt__NewInt(OOC_INT32 _int)174 Object_BigInt__BigInt Object_BigInt__NewInt(OOC_INT32 _int) {
175 register OOC_INT64 i0,i1,i2,i3,i4,i5;
176 OOC_INT32 sign;
177 Object_BigInt__BigInt big;
178 OOC_INT32 size;
179
180 i0 = _int;
181 i1 = i0==0;
182 if (i1) goto l23;
183 sign = 1;
184 i1 = i0<0;
185 if (i1) goto l5;
186 i1=1;
187 goto l14;
188 l5:
189 i1 = i0==(-2147483647-1);
190 if (i1) goto l8;
191 i0 = -i0;
192 _int = i0;
193 sign = (-1);
194 i1=(-1);
195 goto l14;
196 l8:
197 i1 = (OOC_INT64)Object_BigInt__NewInt((i0+1));
198 big = (Object_BigInt__BigInt)i1;
199 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 4148))+8);
200 i2 = _check_pointer(i2, 4154);
201 i3 = OOC_ARRAY_LENGTH(i2, 0);
202 i2 = *(OOC_INT16*)(i2+(_check_index(0, i3, OOC_UINT8, 4154))*2);
203 i2 = i2==32767;
204 if (i2) goto l11;
205 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 4277))+8);
206 i2 = _check_pointer(i2, 4283);
207 i3 = OOC_ARRAY_LENGTH(i2, 0);
208 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 4277))+8);
209 i4 = _check_pointer(i4, 4283);
210 i5 = OOC_ARRAY_LENGTH(i4, 0);
211 i4 = *(OOC_INT16*)(i4+(_check_index(0, i5, OOC_UINT8, 4283))*2);
212 *(OOC_INT16*)(i2+(_check_index(0, i3, OOC_UINT8, 4283))*2) = (i4+1);
213
214 goto l12;
215 l11:
216 i2 = (OOC_INT64)Object_BigInt__one;
217 i1 = (OOC_INT64)Object_BigInt__AddAbs((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i2);
218 big = (Object_BigInt__BigInt)i1;
219 i2 = *(OOC_INT32*)(_check_pointer(i1, 4236));
220 *(OOC_INT32*)(_check_pointer(i1, 4223)) = (-i2);
221
222 l12:
223 return (Object_BigInt__BigInt)i1;
224 i1=1;
225 l14:
226 i2 = (OOC_INT64)Object_BigInt__NewInstance(3);
227 big = (Object_BigInt__BigInt)i2;
228 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 4567))+8);
229 i3 = _check_pointer(i3, 4573);
230 i4 = OOC_ARRAY_LENGTH(i3, 0);
231 *(OOC_INT16*)(i3+(_check_index(0, i4, OOC_UINT8, 4573))*2) = (_mod(i0,32768));
232 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 4612))+8);
233 i3 = _check_pointer(i3, 4618);
234 i4 = OOC_ARRAY_LENGTH(i3, 0);
235 *(OOC_INT16*)(i3+(_check_index(1, i4, OOC_UINT8, 4618))*2) = (_mod((i0>>15),32768));
236 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 4668))+8);
237 i3 = _check_pointer(i3, 4674);
238 i4 = OOC_ARRAY_LENGTH(i3, 0);
239 *(OOC_INT16*)(i3+(_check_index(2, i4, OOC_UINT8, 4674))*2) = (i0>>30);
240 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 4724))+8);
241 i0 = _check_pointer(i0, 4730);
242 i3 = OOC_ARRAY_LENGTH(i0, 0);
243 i0 = *(OOC_INT16*)(i0+(_check_index(2, i3, OOC_UINT8, 4730))*2);
244 i0 = i0!=0;
245 if (i0) goto l21;
246 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 4783))+8);
247 i0 = _check_pointer(i0, 4789);
248 i3 = OOC_ARRAY_LENGTH(i0, 0);
249 i0 = *(OOC_INT16*)(i0+(_check_index(1, i3, OOC_UINT8, 4789))*2);
250 i0 = i0!=0;
251 if (i0) goto l19;
252 size = 1;
253 i0=1;
254 goto l22;
255 l19:
256 size = 2;
257 i0=2;
258 goto l22;
259 l21:
260 size = 3;
261 i0=3;
262 l22:
263 *(OOC_INT32*)(_check_pointer(i2, 5176)) = (i0*i1);
264 return (Object_BigInt__BigInt)i2;
265 goto l24;
266 l23:
267 i0 = (OOC_INT64)Object_BigInt__zero;
268 return (Object_BigInt__BigInt)i0;
269 l24:
270 _failed_function(3779); return 0;
271 ;
272 }
273
Object_BigInt__BigIntDesc_Copy(Object_BigInt__BigInt a)274 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Copy(Object_BigInt__BigInt a) {
275 register OOC_INT64 i0,i1,i2;
276 OOC_INT32 size;
277 Object_BigInt__BigInt z;
278
279 i0 = (OOC_INT64)a;
280 i1 = *(OOC_INT32*)(_check_pointer(i0, 5342));
281 i1 = _abs(i1);
282 size = i1;
283 i2 = *(OOC_INT32*)(_check_pointer(i0, 5372));
284 i2 = (OOC_INT64)Object_BigInt__NewInstance(i2);
285 z = (Object_BigInt__BigInt)i2;
286 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 5398))+8);
287 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 5414))+8);
288 _move_block((_check_pointer(i0, 5404)),(_check_pointer(i2, 5420)),(i1*2));
289 i0 = (OOC_INT64)z;
290 return (Object_BigInt__BigInt)i0;
291 ;
292 }
293
Object_BigInt__BigIntDesc_HashCode(Object_BigInt__BigInt a)294 OOC_INT32 Object_BigInt__BigIntDesc_HashCode(Object_BigInt__BigInt a) {
295 register OOC_INT64 i0,i1,i2,i3,i4,i5;
296 OOC_INT32 len;
297 OOC_INT32 x;
298 OOC_INT32 p;
299
300 i0 = (OOC_INT64)a;
301 i1 = *(OOC_INT32*)(_check_pointer(i0, 5588));
302 i1 = _abs(i1);
303 len = i1;
304 i2 = i1==0;
305 if (i2) goto l12;
306 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 5659))+8);
307 i2 = _check_pointer(i2, 5665);
308 i3 = OOC_ARRAY_LENGTH(i2, 0);
309 i2 = *(OOC_INT16*)(i2+(_check_index(0, i3, OOC_UINT8, 5665))*2);
310 i2 = _ash(i2,7);
311 x = i2;
312 p = 0;
313 i3 = 0!=i1;
314 if (i3) goto l5;
315 i0=i2;
316 goto l11;
317 l5:
318 i3=0;
319 l6_loop:
320 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 5840))+8);
321 i4 = _check_pointer(i4, 5846);
322 i5 = OOC_ARRAY_LENGTH(i4, 0);
323 i4 = *(OOC_INT16*)(i4+(_check_index(i3, i5, OOC_UINT32, 5846))*2);
324 i2 = _type_cast_fast(OOC_INT32, OOC_UINT32, ((_type_cast_fast(OOC_UINT32, OOC_INT32, (1000003*i2)))^(_type_cast_fast(OOC_UINT32, OOC_INT16, i4))));
325 x = i2;
326 i3 = i3+1;
327 p = i3;
328 i4 = i3!=i1;
329 if (i4) goto l6_loop;
330 l10:
331 i0=i2;
332 l11:
333 return (_type_cast_fast(OOC_INT32, OOC_UINT32, ((_type_cast_fast(OOC_UINT32, OOC_INT32, i0))^(_type_cast_fast(OOC_UINT32, OOC_INT32, i1)))));
334 goto l13;
335 l12:
336 return 0;
337 l13:
338 _failed_function(5491); return 0;
339 ;
340 }
341
Object_BigInt__BigIntDesc_Equals(Object_BigInt__BigInt a,Object__Object b)342 OOC_CHAR8 Object_BigInt__BigIntDesc_Equals(Object_BigInt__BigInt a, Object__Object b) {
343 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
344 OOC_INT32 i;
345
346 i0 = (OOC_INT64)b;
347 i1 = i0==(OOC_INT64)0;
348 if (!i1) goto l3;
349 return 0u;
350 l3:
351 i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 6149)))), &_td_Object_BigInt__BigIntDesc);
352 if (i1) goto l6;
353 return 0u;
354 goto l22;
355 l6:
356 i1 = (OOC_INT64)a;
357 i2 = *(OOC_INT32*)(_check_pointer(i1, 6172));
358 i3 = *(OOC_INT32*)(_check_pointer(i0, 6181));
359 i2 = i2!=i3;
360 if (i2) goto l20;
361 i2 = *(OOC_INT32*)(_check_pointer(i1, 6253));
362 i = 0;
363 i2 = _abs(i2);
364 i3 = 0<i2;
365 if (!i3) goto l19;
366 i3=0;
367 l11_loop:
368 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 6280))+8);
369 i4 = _check_pointer(i4, 6286);
370 i5 = OOC_ARRAY_LENGTH(i4, 0);
371 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6293))+8);
372 i6 = _check_pointer(i6, 6299);
373 i7 = OOC_ARRAY_LENGTH(i6, 0);
374 i4 = *(OOC_INT16*)(i4+(_check_index(i3, i5, OOC_UINT32, 6286))*2);
375 i5 = *(OOC_INT16*)(i6+(_check_index(i3, i7, OOC_UINT32, 6299))*2);
376 i4 = i4!=i5;
377 if (!i4) goto l14;
378 return 0u;
379 l14:
380 i3 = i3+1;
381 i = i3;
382 i4 = i3<i2;
383 if (i4) goto l11_loop;
384 l19:
385 return 1u;
386 goto l22;
387 l20:
388 return 0u;
389 l22:
390 _failed_function(6016); return 0;
391 ;
392 }
393
Object_BigInt__BigIntDesc_IsZero(Object_BigInt__BigInt a)394 OOC_CHAR8 Object_BigInt__BigIntDesc_IsZero(Object_BigInt__BigInt a) {
395 register OOC_INT64 i0;
396
397 i0 = (OOC_INT64)a;
398 i0 = *(OOC_INT32*)(_check_pointer(i0, 6511));
399 return (i0==0);
400 ;
401 }
402
Object_BigInt__BigIntDesc_NonZero(Object_BigInt__BigInt a)403 OOC_CHAR8 Object_BigInt__BigIntDesc_NonZero(Object_BigInt__BigInt a) {
404 register OOC_INT64 i0;
405
406 i0 = (OOC_INT64)a;
407 i0 = *(OOC_INT32*)(_check_pointer(i0, 6602));
408 return (i0!=0);
409 ;
410 }
411
Object_BigInt__BigIntDesc_ToLongInt(Object_BigInt__BigInt a)412 OOC_INT32 Object_BigInt__BigIntDesc_ToLongInt(Object_BigInt__BigInt a) {
413 register OOC_INT64 i0,i1,i2,i3,i4;
414 OOC_INT32 _int;
415 OOC_INT32 i;
416
417 _int = 0;
418 i0 = (OOC_INT64)a;
419 i1 = *(OOC_INT32*)(_check_pointer(i0, 6742));
420 i1 = (_abs(i1))-1;
421 i = i1;
422 i2 = i1>=0;
423 if (i2) goto l3;
424 i1=0;
425 goto l9;
426 l3:
427 i2=i1;i1=0;
428 l4_loop:
429 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6788))+8);
430 i3 = _check_pointer(i3, 6794);
431 i4 = OOC_ARRAY_LENGTH(i3, 0);
432 i3 = *(OOC_INT16*)(i3+(_check_index(i2, i4, OOC_UINT32, 6794))*2);
433 i1 = (i1*32768)+i3;
434 _int = i1;
435 i2 = i2+(-1);
436 i = i2;
437 i3 = i2>=0;
438 if (i3) goto l4_loop;
439 l9:
440 i0 = *(OOC_INT32*)(_check_pointer(i0, 6817));
441 i0 = i0<0;
442 if (i0) goto l12;
443 return i1;
444 goto l13;
445 l12:
446 return (-i1);
447 l13:
448 _failed_function(6652); return 0;
449 ;
450 }
451
Object_BigInt__BigIntDesc_Sign(Object_BigInt__BigInt a)452 OOC_INT32 Object_BigInt__BigIntDesc_Sign(Object_BigInt__BigInt a) {
453 register OOC_INT64 i0,i1;
454
455 i0 = (OOC_INT64)a;
456 i1 = *(OOC_INT32*)(_check_pointer(i0, 6963));
457 i1 = i1>0;
458 if (i1) goto l7;
459 i0 = *(OOC_INT32*)(_check_pointer(i0, 7007));
460 i0 = i0<0;
461 if (i0) goto l5;
462 return 0;
463 goto l8;
464 l5:
465 return (-1);
466 goto l8;
467 l7:
468 return 1;
469 l8:
470 _failed_function(6928); return 0;
471 ;
472 }
473
Object_BigInt__BigIntDesc_Cmp(Object_BigInt__BigInt a,Object__Object b)474 OOC_INT32 Object_BigInt__BigIntDesc_Cmp(Object_BigInt__BigInt a, Object__Object b) {
475 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
476 OOC_INT32 i;
477 OOC_INT32 res;
478
479 i0 = (OOC_INT64)b;
480 i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 7188)))), &_td_Object_BigInt__BigIntDesc);
481 if (i1) goto l3;
482 _failed_with(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 7182)))), 7182);
483 goto l33;
484 l3:
485 i1 = (OOC_INT64)a;
486 i2 = *(OOC_INT32*)(_check_pointer(i1, 7211));
487 i3 = *(OOC_INT32*)(_check_pointer(i0, 7220));
488 i2 = i2<i3;
489 if (i2) goto l31;
490 i2 = *(OOC_INT32*)(_check_pointer(i0, 7274));
491 i3 = *(OOC_INT32*)(_check_pointer(i1, 7265));
492 i2 = i3>i2;
493 if (i2) goto l29;
494 i2 = *(OOC_INT32*)(_check_pointer(i1, 7333));
495 i2 = _abs(i2);
496
497 l8_loop:
498 i2 = i2-1;
499 i = i2;
500 i3 = i2<0;
501 if (i3) goto l11;
502 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 7401))+8);
503 i4 = _check_pointer(i4, 7407);
504 i5 = OOC_ARRAY_LENGTH(i4, 0);
505 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 7414))+8);
506 i6 = _check_pointer(i6, 7420);
507 i7 = OOC_ARRAY_LENGTH(i6, 0);
508 i4 = *(OOC_INT16*)(i4+(_check_index(i2, i5, OOC_UINT32, 7407))*2);
509 i5 = *(OOC_INT16*)(i6+(_check_index(i2, i7, OOC_UINT32, 7420))*2);
510 i4 = i4!=i5;
511
512 goto l13;
513 l11:
514 i4=1u;
515 l13:
516 if (!i4) goto l8_loop;
517 l17:
518 if (i3) goto l23;
519 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 7486))+8);
520 i3 = _check_pointer(i3, 7492);
521 i4 = OOC_ARRAY_LENGTH(i3, 0);
522 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 7499))+8);
523 i0 = _check_pointer(i0, 7505);
524 i5 = OOC_ARRAY_LENGTH(i0, 0);
525 i3 = *(OOC_INT16*)(i3+(_check_index(i2, i4, OOC_UINT32, 7492))*2);
526 i0 = *(OOC_INT16*)(i0+(_check_index(i2, i5, OOC_UINT32, 7505))*2);
527 i0 = i3<i0;
528 if (i0) goto l21;
529 res = 1;
530
531 goto l24;
532 l21:
533 res = (-1);
534
535 goto l24;
536 l23:
537 return 0;
538 l24:
539 i0 = *(OOC_INT32*)(_check_pointer(i1, 7595));
540 i0 = i0<0;
541 if (i0) goto l27;
542 i0 = res;
543 return i0;
544 goto l33;
545 l27:
546 i0 = res;
547 return (-i0);
548 goto l33;
549 l29:
550 return 1;
551 goto l33;
552 l31:
553 return (-1);
554 l33:
555 _failed_function(7109); return 0;
556 ;
557 }
558
Object_BigInt__BigIntDesc_Abs(Object_BigInt__BigInt a)559 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Abs(Object_BigInt__BigInt a) {
560 register OOC_INT64 i0,i1,i2;
561 OOC_INT32 size;
562 Object_BigInt__BigInt z;
563
564 i0 = (OOC_INT64)a;
565 i1 = *(OOC_INT32*)(_check_pointer(i0, 7809));
566 i1 = i1>=0;
567 if (i1) goto l3;
568 i1 = *(OOC_INT32*)(_check_pointer(i0, 7867));
569 i1 = -i1;
570 size = i1;
571 i2 = (OOC_INT64)Object_BigInt__NewInstance(i1);
572 z = (Object_BigInt__BigInt)i2;
573 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 7924))+8);
574 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 7959))+8);
575 _move_block((_check_pointer(i0, 7930)),(_check_pointer(i2, 7965)),(i1*2));
576 i0 = (OOC_INT64)z;
577 return (Object_BigInt__BigInt)i0;
578 goto l4;
579 l3:
580 return (Object_BigInt__BigInt)i0;
581 l4:
582 _failed_function(7736); return 0;
583 ;
584 }
585
Object_BigInt__BigIntDesc_Neg(Object_BigInt__BigInt a)586 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Neg(Object_BigInt__BigInt a) {
587 register OOC_INT64 i0,i1;
588 Object_BigInt__BigInt z;
589
590 i0 = (OOC_INT64)a;
591 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_Copy((Object_BigInt__BigInt)i0);
592 z = (Object_BigInt__BigInt)i0;
593 i1 = *(OOC_INT32*)(_check_pointer(i0, 8145));
594 *(OOC_INT32*)(_check_pointer(i0, 8134)) = (-i1);
595 return (Object_BigInt__BigInt)i0;
596 ;
597 }
598
Object_BigInt__SubAbs(Object_BigInt__BigInt a,Object_BigInt__BigInt b)599 static Object_BigInt__BigInt Object_BigInt__SubAbs(Object_BigInt__BigInt a, Object_BigInt__BigInt b) {
600 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11;
601 OOC_INT32 sign;
602 Object_BigInt__BigInt z;
603 OOC_INT32 i;
604 OOC_INT32 sizeA;
605 OOC_INT32 sizeB;
606 OOC_INT32 borrow;
607
608 sign = 1;
609 i0 = (OOC_INT64)a;
610 i1 = (OOC_INT64)b;
611 i2 = *(OOC_INT32*)(_check_pointer(i0, 8372));
612 i3 = *(OOC_INT32*)(_check_pointer(i1, 8386));
613 i2 = (_abs(i2))<(_abs(i3));
614 if (i2) goto l32;
615 i2 = *(OOC_INT32*)(_check_pointer(i1, 8477));
616 i3 = *(OOC_INT32*)(_check_pointer(i0, 8463));
617 i2 = (_abs(i3))==(_abs(i2));
618 if (i2) goto l5;
619 i2=1;
620 goto l33;
621 l5:
622 i2 = *(OOC_INT32*)(_check_pointer(i0, 8558));
623 i2 = (_abs(i2))-1;
624 i = i2;
625 i3 = i2>=0;
626 if (i3) goto l8;
627 i3=0u;
628 goto l10;
629 l8:
630 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8593))+8);
631 i3 = _check_pointer(i3, 8599);
632 i4 = OOC_ARRAY_LENGTH(i3, 0);
633 i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8606))+8);
634 i5 = _check_pointer(i5, 8612);
635 i6 = OOC_ARRAY_LENGTH(i5, 0);
636 i3 = *(OOC_INT16*)(i3+(_check_index(i2, i4, OOC_UINT32, 8599))*2);
637 i4 = *(OOC_INT16*)(i5+(_check_index(i2, i6, OOC_UINT32, 8612))*2);
638 i3 = i3==i4;
639
640 l10:
641 if (!i3) goto l22;
642 l13_loop:
643 i2 = i2-1;
644 i = i2;
645 i3 = i2>=0;
646 if (i3) goto l16;
647 i3=0u;
648 goto l18;
649 l16:
650 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8593))+8);
651 i3 = _check_pointer(i3, 8599);
652 i4 = OOC_ARRAY_LENGTH(i3, 0);
653 i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8606))+8);
654 i5 = _check_pointer(i5, 8612);
655 i6 = OOC_ARRAY_LENGTH(i5, 0);
656 i3 = *(OOC_INT16*)(i3+(_check_index(i2, i4, OOC_UINT32, 8599))*2);
657 i4 = *(OOC_INT16*)(i5+(_check_index(i2, i6, OOC_UINT32, 8612))*2);
658 i3 = i3==i4;
659
660 l18:
661 if (i3) goto l13_loop;
662 l22:
663 i3 = i2<0;
664 if (i3) goto l29;
665 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8704))+8);
666 i3 = _check_pointer(i3, 8710);
667 i4 = OOC_ARRAY_LENGTH(i3, 0);
668 i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8717))+8);
669 i5 = _check_pointer(i5, 8723);
670 i6 = OOC_ARRAY_LENGTH(i5, 0);
671 i3 = *(OOC_INT16*)(i3+(_check_index(i2, i4, OOC_UINT32, 8710))*2);
672 i2 = *(OOC_INT16*)(i5+(_check_index(i2, i6, OOC_UINT32, 8723))*2);
673 i2 = i3<i2;
674 if (i2) goto l27;
675 i2=1;
676 goto l33;
677 l27:
678 z = (Object_BigInt__BigInt)i0;
679 a = (Object_BigInt__BigInt)i1;
680 b = (Object_BigInt__BigInt)i0;
681 sign = (-1);
682 {register OOC_INT64 h0=i0;i0=i1;i1=h0;}i2=(-1);
683 goto l33;
684 l29:
685 i2 = (OOC_INT64)Object_BigInt__zero;
686 return (Object_BigInt__BigInt)i2;
687 i2=1;
688 goto l33;
689 l32:
690 z = (Object_BigInt__BigInt)i0;
691 a = (Object_BigInt__BigInt)i1;
692 b = (Object_BigInt__BigInt)i0;
693 sign = (-1);
694 {register OOC_INT64 h0=i0;i0=i1;i1=h0;}i2=(-1);
695 l33:
696 i3 = *(OOC_INT32*)(_check_pointer(i0, 8823));
697 i3 = _abs(i3);
698 sizeA = i3;
699 i4 = *(OOC_INT32*)(_check_pointer(i1, 8845));
700 i4 = _abs(i4);
701 sizeB = i4;
702 i5 = (OOC_INT64)Object_BigInt__NewInstance(i3);
703 z = (Object_BigInt__BigInt)i5;
704 borrow = 0;
705 i = 0;
706 i6 = 0!=i4;
707 if (i6) goto l36;
708 i1=0;i4=0;
709 goto l42;
710 l36:
711 i6=0;i7=0;
712 l37_loop:
713 i8 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8958))+8);
714 i8 = _check_pointer(i8, 8964);
715 i9 = OOC_ARRAY_LENGTH(i8, 0);
716 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8969))+8);
717 i10 = _check_pointer(i10, 8975);
718 i11 = OOC_ARRAY_LENGTH(i10, 0);
719 i8 = *(OOC_INT16*)(i8+(_check_index(i6, i9, OOC_UINT32, 8964))*2);
720 i9 = *(OOC_INT16*)(i10+(_check_index(i6, i11, OOC_UINT32, 8975))*2);
721 i7 = (i8-i9)-i7;
722 borrow = i7;
723 i8 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 8994))+8);
724 i8 = _check_pointer(i8, 9000);
725 i9 = OOC_ARRAY_LENGTH(i8, 0);
726 *(OOC_INT16*)(i8+(_check_index(i6, i9, OOC_UINT32, 9000))*2) = (_mod(i7,32768));
727 i7 = _mod((i7>>15),2);
728 borrow = i7;
729 i6 = i6+1;
730 i = i6;
731 i8 = i6!=i4;
732 if (i8) goto l37_loop;
733 l41:
734 i1=i6;i4=i7;
735 l42:
736 i6 = i1!=i3;
737 if (i6) goto l46_loop;
738 i0=i4;
739 goto l51;
740 l46_loop:
741 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 9165))+8);
742 i6 = _check_pointer(i6, 9171);
743 i7 = OOC_ARRAY_LENGTH(i6, 0);
744 i6 = *(OOC_INT16*)(i6+(_check_index(i1, i7, OOC_UINT32, 9171))*2);
745 i4 = i6-i4;
746 borrow = i4;
747 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 9190))+8);
748 i6 = _check_pointer(i6, 9196);
749 i7 = OOC_ARRAY_LENGTH(i6, 0);
750 *(OOC_INT16*)(i6+(_check_index(i1, i7, OOC_UINT32, 9196))*2) = (_mod(i4,32768));
751 i4 = _mod((i4>>15),2);
752 borrow = i4;
753 i1 = i1+1;
754 i = i1;
755 i6 = i1!=i3;
756 if (i6) goto l46_loop;
757 l50:
758 i0=i4;
759 l51:
760 _assert((i0==0), 127, 9295);
761 i0 = i2<0;
762 if (!i0) goto l54;
763 i0 = *(OOC_INT32*)(_check_pointer(i5, 9356));
764 *(OOC_INT32*)(_check_pointer(i5, 9345)) = (-i0);
765 l54:
766 Object_BigInt__Normalize((Object_BigInt__BigInt)i5);
767 return (Object_BigInt__BigInt)i5;
768 ;
769 }
770
Object_BigInt__MulAbs(Object_BigInt__BigInt a,Object_BigInt__BigInt b)771 static Object_BigInt__BigInt Object_BigInt__MulAbs(Object_BigInt__BigInt a, Object_BigInt__BigInt b) {
772 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14;
773 OOC_INT32 sizeA;
774 OOC_INT32 sizeB;
775 Object_BigInt__BigInt z;
776 OOC_INT32 i;
777 OOC_INT32 f;
778 OOC_INT32 carry;
779 OOC_INT32 j;
780
781 i0 = (OOC_INT64)a;
782 i1 = *(OOC_INT32*)(_check_pointer(i0, 9655));
783 i1 = _abs(i1);
784 sizeA = i1;
785 i2 = (OOC_INT64)b;
786 i3 = *(OOC_INT32*)(_check_pointer(i2, 9677));
787 i3 = _abs(i3);
788 sizeB = i3;
789 i4 = i1+i3;
790 i5 = (OOC_INT64)Object_BigInt__NewInstance(i4);
791 z = (Object_BigInt__BigInt)i5;
792 i = 0;
793 i6 = 0<i4;
794 if (!i6) goto l8;
795 i6=0;
796 l3_loop:
797 i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 9767))+8);
798 i7 = _check_pointer(i7, 9773);
799 i8 = OOC_ARRAY_LENGTH(i7, 0);
800 *(OOC_INT16*)(i7+(_check_index(i6, i8, OOC_UINT32, 9773))*2) = 0;
801 i6 = i6+1;
802 i = i6;
803 i7 = i6<i4;
804 if (i7) goto l3_loop;
805 l8:
806 i = 0;
807 i4 = 0!=i1;
808 if (!i4) goto l33;
809 i4 = 0!=i3;
810 i6=0;
811 l11_loop:
812 i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 9846))+8);
813 i7 = _check_pointer(i7, 9852);
814 i8 = OOC_ARRAY_LENGTH(i7, 0);
815 i7 = *(OOC_INT16*)(i7+(_check_index(i6, i8, OOC_UINT32, 9852))*2);
816 f = i7;
817 carry = 0;
818 j = 0;
819 if (i4) goto l14;
820 i7=0;i8=0;
821 goto l20;
822 l14:
823 i8=0;i9=0;
824 l15_loop:
825 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 9937))+8);
826 i10 = _check_pointer(i10, 9943);
827 i11 = i6+i9;
828 i12 = OOC_ARRAY_LENGTH(i10, 0);
829 i13 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 9950))+8);
830 i13 = _check_pointer(i13, 9956);
831 i14 = OOC_ARRAY_LENGTH(i13, 0);
832 i13 = *(OOC_INT16*)(i13+(_check_index(i9, i14, OOC_UINT32, 9956))*2);
833 i10 = *(OOC_INT16*)(i10+(_check_index(i11, i12, OOC_UINT32, 9943))*2);
834 i8 = i8+(i10+(i13*i7));
835 carry = i8;
836 _assert((i8>=0), 127, 9972);
837 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 10001))+8);
838 i10 = _check_pointer(i10, 10007);
839 i12 = OOC_ARRAY_LENGTH(i10, 0);
840 *(OOC_INT16*)(i10+(_check_index(i11, i12, OOC_UINT32, 10007))*2) = (_mod(i8,32768));
841 i8 = i8>>15;
842 carry = i8;
843 i9 = i9+1;
844 j = i9;
845 i10 = i9!=i3;
846 if (i10) goto l15_loop;
847 l19:
848 i7=i8;i8=i9;
849 l20:
850 i9 = i7!=0;
851 if (!i9) goto l28;
852 l23_loop:
853 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 10146))+8);
854 i9 = _check_pointer(i9, 10152);
855 i10 = i6+i8;
856 i11 = OOC_ARRAY_LENGTH(i9, 0);
857 i9 = *(OOC_INT16*)(i9+(_check_index(i10, i11, OOC_UINT32, 10152))*2);
858 i7 = i7+i9;
859 carry = i7;
860 _assert((i7>=0), 127, 10168);
861 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i5, 10197))+8);
862 i9 = _check_pointer(i9, 10203);
863 i11 = OOC_ARRAY_LENGTH(i9, 0);
864 *(OOC_INT16*)(i9+(_check_index(i10, i11, OOC_UINT32, 10203))*2) = (_mod(i7,32768));
865 i7 = i7>>15;
866 carry = i7;
867 i8 = i8+1;
868 j = i8;
869 i9 = i7!=0;
870 if (i9) goto l23_loop;
871 l28:
872 i6 = i6+1;
873 i = i6;
874 i7 = i6!=i1;
875 if (i7) goto l11_loop;
876 l33:
877 Object_BigInt__Normalize((Object_BigInt__BigInt)i5);
878 return (Object_BigInt__BigInt)i5;
879 ;
880 }
881
Object_BigInt__BigIntDesc_Add(Object_BigInt__BigInt a,Object_BigInt__BigInt b)882 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Add(Object_BigInt__BigInt a, Object_BigInt__BigInt b) {
883 register OOC_INT64 i0,i1,i2;
884 Object_BigInt__BigInt z;
885
886 i0 = (OOC_INT64)a;
887 i1 = *(OOC_INT32*)(_check_pointer(i0, 10451));
888 i1 = i1<0;
889 if (i1) goto l7;
890 i1 = (OOC_INT64)b;
891 i2 = *(OOC_INT32*)(_check_pointer(i1, 10637));
892 i2 = i2<0;
893 if (i2) goto l5;
894 i0 = (OOC_INT64)Object_BigInt__AddAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
895 return (Object_BigInt__BigInt)i0;
896 goto l12;
897 l5:
898 i0 = (OOC_INT64)Object_BigInt__SubAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
899 return (Object_BigInt__BigInt)i0;
900 goto l12;
901 l7:
902 i1 = (OOC_INT64)b;
903 i2 = *(OOC_INT32*)(_check_pointer(i1, 10478));
904 i2 = i2<0;
905 if (i2) goto l10;
906 i0 = (OOC_INT64)Object_BigInt__SubAbs((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0);
907 return (Object_BigInt__BigInt)i0;
908 goto l12;
909 l10:
910 i0 = (OOC_INT64)Object_BigInt__AddAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
911 z = (Object_BigInt__BigInt)i0;
912 i1 = *(OOC_INT32*)(_check_pointer(i0, 10541));
913 *(OOC_INT32*)(_check_pointer(i0, 10530)) = (-i1);
914 return (Object_BigInt__BigInt)i0;
915 l12:
916 _failed_function(10387); return 0;
917 ;
918 }
919
Object_BigInt__BigIntDesc_Sub(Object_BigInt__BigInt a,Object_BigInt__BigInt b)920 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Sub(Object_BigInt__BigInt a, Object_BigInt__BigInt b) {
921 register OOC_INT64 i0,i1,i2;
922 Object_BigInt__BigInt z;
923
924 i0 = (OOC_INT64)a;
925 i1 = *(OOC_INT32*)(_check_pointer(i0, 10840));
926 i1 = i1<0;
927 if (i1) goto l7;
928 i1 = (OOC_INT64)b;
929 i2 = *(OOC_INT32*)(_check_pointer(i1, 11020));
930 i2 = i2<0;
931 if (i2) goto l5;
932 i0 = (OOC_INT64)Object_BigInt__SubAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
933 return (Object_BigInt__BigInt)i0;
934 goto l12;
935 l5:
936 i0 = (OOC_INT64)Object_BigInt__AddAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
937 return (Object_BigInt__BigInt)i0;
938 goto l12;
939 l7:
940 i1 = (OOC_INT64)b;
941 i2 = *(OOC_INT32*)(_check_pointer(i1, 10867));
942 i2 = i2<0;
943 if (i2) goto l10;
944 i0 = (OOC_INT64)Object_BigInt__AddAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
945 z = (Object_BigInt__BigInt)i0;
946
947 goto l11;
948 l10:
949 i0 = (OOC_INT64)Object_BigInt__SubAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
950 z = (Object_BigInt__BigInt)i0;
951
952 l11:
953 i1 = *(OOC_INT32*)(_check_pointer(i0, 10977));
954 *(OOC_INT32*)(_check_pointer(i0, 10966)) = (-i1);
955 return (Object_BigInt__BigInt)i0;
956 l12:
957 _failed_function(10776); return 0;
958 ;
959 }
960
Object_BigInt__BigIntDesc_Mul(Object_BigInt__BigInt a,Object_BigInt__BigInt b)961 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Mul(Object_BigInt__BigInt a, Object_BigInt__BigInt b) {
962 register OOC_INT64 i0,i1,i2;
963 Object_BigInt__BigInt z;
964
965 i0 = (OOC_INT64)b;
966 i1 = (OOC_INT64)a;
967 i2 = (OOC_INT64)Object_BigInt__MulAbs((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0);
968 z = (Object_BigInt__BigInt)i2;
969 i1 = *(OOC_INT32*)(_check_pointer(i1, 11247));
970 i0 = *(OOC_INT32*)(_check_pointer(i0, 11262));
971 i0 = (i1<0)!=(i0<0);
972 if (!i0) goto l4;
973 i0 = *(OOC_INT32*)(_check_pointer(i2, 11297));
974 *(OOC_INT32*)(_check_pointer(i2, 11286)) = (-i0);
975 l4:
976 return (Object_BigInt__BigInt)i2;
977 ;
978 }
979
Object_BigInt__InplaceDivRem1(OOC_INT16 pout[],OOC_LEN pout_0d,OOC_INT16 pin[],OOC_LEN pin_0d,OOC_INT32 size,OOC_INT16 n)980 static OOC_INT16 Object_BigInt__InplaceDivRem1(OOC_INT16 pout[], OOC_LEN pout_0d, OOC_INT16 pin[], OOC_LEN pin_0d, OOC_INT32 size, OOC_INT16 n) {
981 register OOC_INT64 i0,i1,i2,i3;
982
983 i0 = n;
984 i1 = i0>0;
985 if (i1) goto l3;
986 i1=0u;
987 goto l4;
988 l3:
989 i1 = i0<32768;
990
991 l4:
992 _assert(i1, 127, 11923);
993 i1 = size;
994 i1 = i1>0;
995 if (i1) goto l7;
996 i0=0;
997 goto l13;
998 l7:
999 i1=0;
1000 l8_loop:
1001 i2 = size;
1002 i2 = i2-1;
1003 size = i2;
1004 i3 = *(OOC_INT16*)((OOC_INT64)pin+(_check_index(i2, pin_0d, OOC_UINT32, 12040))*2);
1005 i1 = (i1*32768)+i3;
1006 i3 = _div(i1,i0);
1007 *(OOC_INT16*)((OOC_INT64)pout+(_check_index(i2, pout_0d, OOC_UINT32, 12081))*2) = i3;
1008 i1 = i1-(i3*i0);
1009 i2 = i2>0;
1010 if (i2) goto l8_loop;
1011 l12:
1012 i0=i1;
1013 l13:
1014 return i0;
1015 ;
1016 }
1017
Object_BigInt__DivRem1(Object_BigInt__BigInt a,OOC_INT16 n,OOC_INT16 * rem)1018 static Object_BigInt__BigInt Object_BigInt__DivRem1(Object_BigInt__BigInt a, OOC_INT16 n, OOC_INT16 *rem) {
1019 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6;
1020 OOC_INT32 size;
1021 Object_BigInt__BigInt z;
1022
1023 i0 = n;
1024 i1 = i0>0;
1025 if (i1) goto l3;
1026 i1=0u;
1027 goto l4;
1028 l3:
1029 i1 = i0<32768;
1030
1031 l4:
1032 _assert(i1, 127, 12474);
1033 i1 = (OOC_INT64)a;
1034 i2 = *(OOC_INT32*)(_check_pointer(i1, 12522));
1035 i2 = _abs(i2);
1036 size = i2;
1037 i3 = (OOC_INT64)Object_BigInt__NewInstance(i2);
1038 z = (Object_BigInt__BigInt)i3;
1039 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 12595))+8);
1040 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 12595))+8);
1041 i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i3, 12585))+8);
1042 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i3, 12585))+8);
1043 i4 = OOC_ARRAY_LENGTH((_check_pointer(i4, 12601)), 0);
1044 i5 = OOC_ARRAY_LENGTH((_check_pointer(i5, 12591)), 0);
1045 i0 = Object_BigInt__InplaceDivRem1((void*)(_check_pointer(i6, 12591)), i5, (void*)(_check_pointer(i1, 12601)), i4, i2, i0);
1046 *rem = i0;
1047 Object_BigInt__Normalize((Object_BigInt__BigInt)i3);
1048 return (Object_BigInt__BigInt)i3;
1049 ;
1050 }
1051
Object_BigInt__MulAdd1(Object_BigInt__BigInt a,OOC_INT16 n,OOC_INT16 add)1052 static Object_BigInt__BigInt Object_BigInt__MulAdd1(Object_BigInt__BigInt a, OOC_INT16 n, OOC_INT16 add) {
1053 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
1054 OOC_INT32 sizeA;
1055 Object_BigInt__BigInt z;
1056 OOC_INT32 carry;
1057 OOC_INT32 i;
1058
1059 i0 = (OOC_INT64)a;
1060 i1 = *(OOC_INT32*)(_check_pointer(i0, 12869));
1061 i1 = _abs(i1);
1062 sizeA = i1;
1063 i2 = (OOC_INT64)Object_BigInt__NewInstance((i1+1));
1064 z = (Object_BigInt__BigInt)i2;
1065 i3 = add;
1066 carry = i3;
1067 i = 0;
1068 i4 = 0!=i1;
1069 if (i4) goto l3;
1070 i1=i3;i0=0;
1071 goto l9;
1072 l3:
1073 i4 = n;
1074 i5=0;
1075 l4_loop:
1076 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 12986))+8);
1077 i6 = _check_pointer(i6, 12992);
1078 i7 = OOC_ARRAY_LENGTH(i6, 0);
1079 i6 = *(OOC_INT16*)(i6+(_check_index(i5, i7, OOC_UINT32, 12992))*2);
1080 i3 = i3+(i6*i4);
1081 carry = i3;
1082 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 13008))+8);
1083 i6 = _check_pointer(i6, 13014);
1084 i7 = OOC_ARRAY_LENGTH(i6, 0);
1085 *(OOC_INT16*)(i6+(_check_index(i5, i7, OOC_UINT32, 13014))*2) = (_mod(i3,32768));
1086 i3 = i3>>15;
1087 carry = i3;
1088 i5 = i5+1;
1089 i = i5;
1090 i6 = i5!=i1;
1091 if (i6) goto l4_loop;
1092 l8:
1093 i0=i5;i1=i3;
1094 l9:
1095 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 13103))+8);
1096 i3 = _check_pointer(i3, 13109);
1097 i4 = OOC_ARRAY_LENGTH(i3, 0);
1098 *(OOC_INT16*)(i3+(_check_index(i0, i4, OOC_UINT32, 13109))*2) = i1;
1099 Object_BigInt__Normalize((Object_BigInt__BigInt)i2);
1100 return (Object_BigInt__BigInt)i2;
1101 ;
1102 }
1103
Object_BigInt__DivRemAbs(Object_BigInt__BigInt v1,Object_BigInt__BigInt _w1,Object_BigInt__BigInt * rem)1104 static Object_BigInt__BigInt Object_BigInt__DivRemAbs(Object_BigInt__BigInt v1, Object_BigInt__BigInt _w1, Object_BigInt__BigInt *rem) {
1105 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,i17,i18,i19,i20;
1106 OOC_INT32 sizeV;
1107 OOC_INT32 sizeW;
1108 OOC_INT16 d;
1109 Object_BigInt__BigInt v;
1110 Object_BigInt__BigInt w;
1111 Object_BigInt__BigInt a;
1112 OOC_INT32 j;
1113 OOC_INT32 k;
1114 OOC_INT16 vj;
1115 OOC_INT32 carry;
1116 OOC_INT32 q;
1117 OOC_INT32 i;
1118 OOC_INT32 z;
1119 OOC_INT16 zz;
1120
1121 i0 = (OOC_INT64)v1;
1122 i1 = *(OOC_INT32*)(_check_pointer(i0, 13445));
1123 i1 = _abs(i1);
1124 sizeV = i1;
1125 i2 = (OOC_INT64)_w1;
1126 i3 = *(OOC_INT32*)(_check_pointer(i2, 13468));
1127 i3 = _abs(i3);
1128 sizeW = i3;
1129 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 13508))+8);
1130 i4 = _check_pointer(i4, 13514);
1131 i5 = i3-1;
1132 i6 = OOC_ARRAY_LENGTH(i4, 0);
1133 i4 = *(OOC_INT16*)(i4+(_check_index(i5, i6, OOC_UINT32, 13514))*2);
1134 i4 = _div(32768,(i4+1));
1135 d = i4;
1136 i0 = (OOC_INT64)Object_BigInt__MulAdd1((Object_BigInt__BigInt)i0, i4, 0);
1137 v = (Object_BigInt__BigInt)i0;
1138 i4 = d;
1139 i2 = (OOC_INT64)Object_BigInt__MulAdd1((Object_BigInt__BigInt)i2, i4, 0);
1140 w = (Object_BigInt__BigInt)i2;
1141 i1 = i1>=i3;
1142 if (i1) goto l3;
1143 i1=0u;
1144 goto l4;
1145 l3:
1146 i1 = i3>1;
1147
1148 l4:
1149 _assert(i1, 127, 13595);
1150 i1 = *(OOC_INT32*)(_check_pointer(i2, 13659));
1151 _assert((i3==(_abs(i1))), 127, 13639);
1152 i1 = *(OOC_INT32*)(_check_pointer(i0, 13686));
1153 i1 = _abs(i1);
1154 sizeV = i1;
1155 i4 = (OOC_INT64)Object_BigInt__NewInstance(((i1-i3)+1));
1156 a = (Object_BigInt__BigInt)i4;
1157 j = i1;
1158 i6 = *(OOC_INT32*)(_check_pointer(i4, 13758));
1159 i6 = i6-1;
1160 k = i6;
1161 i7 = i6>=0;
1162 if (!i7) goto l70;
1163 i7 = i3-2;
1164 i8 = 0<i3;
1165 i9=i6;i6=i1;
1166 l7_loop:
1167 i10 = i6>=i1;
1168 if (i10) goto l10;
1169 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 13859))+8);
1170 i10 = _check_pointer(i10, 13865);
1171 i11 = OOC_ARRAY_LENGTH(i10, 0);
1172 i10 = *(OOC_INT16*)(i10+(_check_index(i6, i11, OOC_UINT32, 13865))*2);
1173 vj = i10;
1174
1175 goto l11;
1176 l10:
1177 vj = 0;
1178 i10=0;
1179 l11:
1180 carry = 0;
1181 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 13916))+8);
1182 i11 = _check_pointer(i11, 13922);
1183 i12 = OOC_ARRAY_LENGTH(i11, 0);
1184 i11 = *(OOC_INT16*)(i11+(_check_index(i5, i12, OOC_UINT32, 13922))*2);
1185 i12 = i10*32768;
1186 i13 = i6-1;
1187 i10 = i10==i11;
1188 if (i10) goto l14;
1189 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 13999))+8);
1190 i10 = _check_pointer(i10, 14005);
1191 i11 = OOC_ARRAY_LENGTH(i10, 0);
1192 i14 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14017))+8);
1193 i14 = _check_pointer(i14, 14023);
1194 i15 = OOC_ARRAY_LENGTH(i14, 0);
1195 i10 = *(OOC_INT16*)(i10+(_check_index(i13, i11, OOC_UINT32, 14005))*2);
1196 i11 = *(OOC_INT16*)(i14+(_check_index(i5, i15, OOC_UINT32, 14023))*2);
1197 i10 = _div((i12+i10),i11);
1198 q = i10;
1199
1200 goto l15;
1201 l14:
1202 q = 32767;
1203 i10=32767;
1204 l15:
1205 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14059))+8);
1206 i11 = _check_pointer(i11, 14065);
1207 i14 = OOC_ARRAY_LENGTH(i11, 0);
1208 i15 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14111))+8);
1209 i15 = _check_pointer(i15, 14117);
1210 i16 = OOC_ARRAY_LENGTH(i15, 0);
1211 i17 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14142))+8);
1212 i17 = _check_pointer(i17, 14148);
1213 i18 = OOC_ARRAY_LENGTH(i17, 0);
1214 i19 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14168))+8);
1215 i19 = _check_pointer(i19, 14174);
1216 i20 = OOC_ARRAY_LENGTH(i19, 0);
1217 i15 = *(OOC_INT16*)(i15+(_check_index(i13, i16, OOC_UINT32, 14117))*2);
1218 i16 = *(OOC_INT16*)(i17+(_check_index(i5, i18, OOC_UINT32, 14148))*2);
1219 i6 = i6-2;
1220 i11 = *(OOC_INT16*)(i11+(_check_index(i7, i14, OOC_UINT32, 14065))*2);
1221 i14 = *(OOC_INT16*)(i19+(_check_index(i6, i20, OOC_UINT32, 14174))*2);
1222 i11 = (i11*i10)>((((i12+i15)-(i10*i16))*32768)+i14);
1223 if (i11) goto l19_loop;
1224 i6=i10;
1225 goto l24;
1226 l19_loop:
1227 i10 = i10-1;
1228 q = i10;
1229 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14059))+8);
1230 i11 = _check_pointer(i11, 14065);
1231 i14 = OOC_ARRAY_LENGTH(i11, 0);
1232 i15 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14111))+8);
1233 i15 = _check_pointer(i15, 14117);
1234 i16 = OOC_ARRAY_LENGTH(i15, 0);
1235 i17 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14142))+8);
1236 i17 = _check_pointer(i17, 14148);
1237 i18 = OOC_ARRAY_LENGTH(i17, 0);
1238 i19 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14168))+8);
1239 i19 = _check_pointer(i19, 14174);
1240 i20 = OOC_ARRAY_LENGTH(i19, 0);
1241 i15 = *(OOC_INT16*)(i15+(_check_index(i13, i16, OOC_UINT32, 14117))*2);
1242 i16 = *(OOC_INT16*)(i17+(_check_index(i5, i18, OOC_UINT32, 14148))*2);
1243 i11 = *(OOC_INT16*)(i11+(_check_index(i7, i14, OOC_UINT32, 14065))*2);
1244 i14 = *(OOC_INT16*)(i19+(_check_index(i6, i20, OOC_UINT32, 14174))*2);
1245 i11 = (i11*i10)>((((i12+i15)-(i10*i16))*32768)+i14);
1246 if (i11) goto l19_loop;
1247 l23:
1248 i6=i10;
1249 l24:
1250 i = 0;
1251 if (i8) goto l27;
1252 i10=0u;
1253 goto l29;
1254 l27:
1255 i10 = i9<i1;
1256
1257 l29:
1258 if (i10) goto l31;
1259 i10=0;i11=0;
1260 goto l41;
1261 l31:
1262 i10=0;i11=0;
1263 l32_loop:
1264 i12 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14283))+8);
1265 i12 = _check_pointer(i12, 14289);
1266 i14 = OOC_ARRAY_LENGTH(i12, 0);
1267 i12 = *(OOC_INT16*)(i12+(_check_index(i10, i14, OOC_UINT32, 14289))*2);
1268 i12 = i12*i6;
1269 z = i12;
1270 i14 = i12>>15;
1271 zz = i14;
1272 i15 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14349))+8);
1273 i15 = _check_pointer(i15, 14355);
1274 i16 = i10+i9;
1275 i17 = OOC_ARRAY_LENGTH(i15, 0);
1276 i15 = *(OOC_INT16*)(i15+(_check_index(i16, i17, OOC_UINT32, 14355))*2);
1277 i11 = i11+((i15-i12)+(i14*32768));
1278 carry = i11;
1279 i12 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14392))+8);
1280 i12 = _check_pointer(i12, 14398);
1281 i15 = OOC_ARRAY_LENGTH(i12, 0);
1282 *(OOC_INT16*)(i12+(_check_index(i16, i15, OOC_UINT32, 14398))*2) = (_mod(i11,32768));
1283 i11 = (_ash(i11,(-15)))-i14;
1284 carry = i11;
1285 i10 = i10+1;
1286 i = i10;
1287 i12 = i10<i3;
1288 if (i12) goto l35;
1289 i12=0u;
1290 goto l37;
1291 l35:
1292 i12 = (i10+i9)<i1;
1293
1294 l37:
1295 if (i12) goto l32_loop;
1296 l41:
1297 i10 = i10+i9;
1298 i12 = i10<i1;
1299 if (i12) goto l44;
1300 i10=i11;
1301 goto l45;
1302 l44:
1303 i12 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14567))+8);
1304 i12 = _check_pointer(i12, 14573);
1305 i14 = OOC_ARRAY_LENGTH(i12, 0);
1306 i12 = *(OOC_INT16*)(i12+(_check_index(i10, i14, OOC_UINT32, 14573))*2);
1307 i11 = i11+i12;
1308 carry = i11;
1309 i12 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14590))+8);
1310 i12 = _check_pointer(i12, 14596);
1311 i14 = OOC_ARRAY_LENGTH(i12, 0);
1312 *(OOC_INT16*)(i12+(_check_index(i10, i14, OOC_UINT32, 14596))*2) = 0;
1313 i10=i11;
1314 l45:
1315 i11 = i10==0;
1316 if (i11) goto l64;
1317 _assert((i10==(-1)), 127, 14697);
1318 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 14726))+8);
1319 i10 = _check_pointer(i10, 14732);
1320 i11 = OOC_ARRAY_LENGTH(i10, 0);
1321 *(OOC_INT16*)(i10+(_check_index(i9, i11, OOC_UINT32, 14732))*2) = (i6-1);
1322 carry = 0;
1323 i = 0;
1324 if (i8) goto l50;
1325 i6=0u;
1326 goto l52;
1327 l50:
1328 i6 = i9<i1;
1329
1330 l52:
1331 if (!i6) goto l65;
1332 i6=0;i10=0;
1333 l54_loop:
1334 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14854))+8);
1335 i11 = _check_pointer(i11, 14860);
1336 i12 = i10+i9;
1337 i14 = OOC_ARRAY_LENGTH(i11, 0);
1338 i15 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 14869))+8);
1339 i15 = _check_pointer(i15, 14875);
1340 i16 = OOC_ARRAY_LENGTH(i15, 0);
1341 i11 = *(OOC_INT16*)(i11+(_check_index(i12, i14, OOC_UINT32, 14860))*2);
1342 i14 = *(OOC_INT16*)(i15+(_check_index(i10, i16, OOC_UINT32, 14875))*2);
1343 i6 = i6+(i11+i14);
1344 carry = i6;
1345 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 14892))+8);
1346 i11 = _check_pointer(i11, 14898);
1347 i14 = OOC_ARRAY_LENGTH(i11, 0);
1348 *(OOC_INT16*)(i11+(_check_index(i12, i14, OOC_UINT32, 14898))*2) = (_mod(i6,32768));
1349 i6 = _ash(i6,(-15));
1350 carry = i6;
1351 i10 = i10+1;
1352 i = i10;
1353 i11 = i10<i3;
1354 if (i11) goto l57;
1355 i11=0u;
1356 goto l59;
1357 l57:
1358 i11 = (i10+i9)<i1;
1359
1360 l59:
1361 if (i11) goto l54_loop;
1362 goto l65;
1363 l64:
1364 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 14655))+8);
1365 i10 = _check_pointer(i10, 14661);
1366 i11 = OOC_ARRAY_LENGTH(i10, 0);
1367 *(OOC_INT16*)(i10+(_check_index(i9, i11, OOC_UINT32, 14661))*2) = i6;
1368 l65:
1369 j = i13;
1370 i6 = i9-1;
1371 k = i6;
1372 i9 = i6>=0;
1373 if (!i9) goto l70;
1374 i9=i6;i6=i13;
1375 goto l7_loop;
1376 l70:
1377 Object_BigInt__Normalize((Object_BigInt__BigInt)i4);
1378 i1 = d;
1379 i0 = (OOC_INT64)Object_BigInt__DivRem1((Object_BigInt__BigInt)i0, i1, (void*)(OOC_INT64)&d);
1380 *rem = (Object_BigInt__BigInt)i0;
1381 return (Object_BigInt__BigInt)i4;
1382 ;
1383 }
1384
Object_BigInt__DivRem(Object_BigInt__BigInt a,Object_BigInt__BigInt b,Object_BigInt__BigInt * div,Object_BigInt__BigInt * rem)1385 static void Object_BigInt__DivRem(Object_BigInt__BigInt a, Object_BigInt__BigInt b, Object_BigInt__BigInt *div, Object_BigInt__BigInt *rem) {
1386 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
1387 OOC_INT32 sizeA;
1388 OOC_INT32 sizeB;
1389 OOC_INT16 remDigit;
1390 Object_BigInt__BigInt z;
1391
1392 i0 = (OOC_INT64)a;
1393 i1 = *(OOC_INT32*)(_check_pointer(i0, 15286));
1394 i1 = _abs(i1);
1395 sizeA = i1;
1396 i2 = (OOC_INT64)b;
1397 i3 = *(OOC_INT32*)(_check_pointer(i2, 15308));
1398 i3 = _abs(i3);
1399 sizeB = i3;
1400 _assert((i3!=0), 127, 15352);
1401 i4 = i1<i3;
1402 if (i4) goto l7;
1403 i4 = i1==i3;
1404 if (i4) goto l5;
1405 i1=0u;
1406 goto l9;
1407 l5:
1408 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 15478))+8);
1409 i4 = _check_pointer(i4, 15484);
1410 i5 = OOC_ARRAY_LENGTH(i4, 0);
1411 i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 15497))+8);
1412 i6 = _check_pointer(i6, 15503);
1413 i7 = OOC_ARRAY_LENGTH(i6, 0);
1414 i1 = *(OOC_INT16*)(i4+(_check_index((i1-1), i5, OOC_UINT32, 15484))*2);
1415 i4 = *(OOC_INT16*)(i6+(_check_index((i3-1), i7, OOC_UINT32, 15503))*2);
1416 i1 = i1<i4;
1417
1418 goto l9;
1419 l7:
1420 i1=1u;
1421 l9:
1422 if (i1) goto l25;
1423 i1 = i3==1;
1424 if (i1) goto l13;
1425 i1 = (OOC_INT64)Object_BigInt__DivRemAbs((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i2, (void*)(OOC_INT64)rem);
1426 z = (Object_BigInt__BigInt)i1;
1427
1428 goto l14;
1429 l13:
1430 remDigit = 0;
1431 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 15660))+8);
1432 i1 = _check_pointer(i1, 15666);
1433 i3 = OOC_ARRAY_LENGTH(i1, 0);
1434 i1 = *(OOC_INT16*)(i1+(_check_index(0, i3, OOC_UINT8, 15666))*2);
1435 i1 = (OOC_INT64)Object_BigInt__DivRem1((Object_BigInt__BigInt)i0, i1, (void*)(OOC_INT64)&remDigit);
1436 z = (Object_BigInt__BigInt)i1;
1437 i3 = remDigit;
1438 i3 = (OOC_INT64)Object_BigInt__NewInt(i3);
1439 *rem = (Object_BigInt__BigInt)i3;
1440
1441 l14:
1442 i2 = *(OOC_INT32*)(_check_pointer(i2, 15931));
1443 i3 = *(OOC_INT32*)(_check_pointer(i0, 15916));
1444 i2 = (i3<0)!=(i2<0);
1445 if (!i2) goto l17;
1446 i2 = *(OOC_INT32*)(_check_pointer(i1, 15961));
1447 *(OOC_INT32*)(_check_pointer(i1, 15950)) = (-i2);
1448 l17:
1449 i0 = *(OOC_INT32*)(_check_pointer(i0, 15990));
1450 i0 = i0<0;
1451 if (i0) goto l20;
1452 i0=0u;
1453 goto l22;
1454 l20:
1455 i0 = (OOC_INT64)*rem;
1456 i0 = *(OOC_INT32*)(_check_pointer(i0, 16007));
1457 i0 = i0!=0;
1458
1459 l22:
1460 if (!i0) goto l24;
1461 i0 = (OOC_INT64)*rem;
1462 i2 = *(OOC_INT32*)(_check_pointer(i0, 16040));
1463 *(OOC_INT32*)(_check_pointer(i0, 16027)) = (-i2);
1464 l24:
1465 *div = (Object_BigInt__BigInt)i1;
1466 goto l26;
1467 l25:
1468 i1 = (OOC_INT64)Object_BigInt__zero;
1469 *div = (Object_BigInt__BigInt)i1;
1470 *rem = (Object_BigInt__BigInt)i0;
1471 l26:
1472 return;
1473 ;
1474 }
1475
Object_BigInt__BigIntDesc_DivMod(Object_BigInt__BigInt v,Object_BigInt__BigInt w,Object_BigInt__BigInt * div,Object_BigInt__BigInt * mod)1476 void Object_BigInt__BigIntDesc_DivMod(Object_BigInt__BigInt v, Object_BigInt__BigInt w, Object_BigInt__BigInt *div, Object_BigInt__BigInt *mod) {
1477 register OOC_INT64 i0,i1,i2;
1478
1479 i0 = (OOC_INT64)w;
1480 i1 = (OOC_INT64)v;
1481 Object_BigInt__DivRem((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0, (void*)(OOC_INT64)div, (void*)(OOC_INT64)mod);
1482 i1 = (OOC_INT64)*mod;
1483 i2 = *(OOC_INT32*)(_check_pointer(i1, 16210));
1484 i2 = i2<0;
1485 if (i2) goto l3;
1486 i2=0u;
1487 goto l5;
1488 l3:
1489 i2 = *(OOC_INT32*)(_check_pointer(i0, 16225));
1490 i2 = i2>0;
1491
1492 l5:
1493 if (i2) goto l11;
1494 i2 = *(OOC_INT32*)(_check_pointer(i1, 16243));
1495 i2 = i2>0;
1496 if (i2) goto l9;
1497 i2=0u;
1498 goto l13;
1499 l9:
1500 i2 = *(OOC_INT32*)(_check_pointer(i0, 16258));
1501 i2 = i2<0;
1502
1503 goto l13;
1504 l11:
1505 i2=1u;
1506 l13:
1507 if (!i2) goto l15;
1508 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_Add((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0);
1509 *mod = (Object_BigInt__BigInt)i0;
1510 i0 = (OOC_INT64)*div;
1511 i1 = (OOC_INT64)Object_BigInt__one;
1512 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_Sub((Object_BigInt__BigInt)i0, (Object_BigInt__BigInt)i1);
1513 *div = (Object_BigInt__BigInt)i0;
1514 l15:
1515 return;
1516 ;
1517 }
1518
Object_BigInt__BigIntDesc_Div(Object_BigInt__BigInt v,Object_BigInt__BigInt w)1519 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Div(Object_BigInt__BigInt v, Object_BigInt__BigInt w) {
1520 register OOC_INT64 i0,i1;
1521 Object_BigInt__BigInt mod;
1522 Object_BigInt__BigInt div;
1523
1524 i0 = (OOC_INT64)w;
1525 i1 = (OOC_INT64)v;
1526 Object_BigInt__BigIntDesc_DivMod((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0, (void*)(OOC_INT64)&div, (void*)(OOC_INT64)&mod);
1527 i0 = (OOC_INT64)div;
1528 return (Object_BigInt__BigInt)i0;
1529 ;
1530 }
1531
Object_BigInt__BigIntDesc_Mod(Object_BigInt__BigInt v,Object_BigInt__BigInt w)1532 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Mod(Object_BigInt__BigInt v, Object_BigInt__BigInt w) {
1533 register OOC_INT64 i0,i1;
1534 Object_BigInt__BigInt mod;
1535 Object_BigInt__BigInt div;
1536
1537 i0 = (OOC_INT64)w;
1538 i1 = (OOC_INT64)v;
1539 Object_BigInt__BigIntDesc_DivMod((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0, (void*)(OOC_INT64)&div, (void*)(OOC_INT64)&mod);
1540 i0 = (OOC_INT64)mod;
1541 return (Object_BigInt__BigInt)i0;
1542 ;
1543 }
1544
Object_BigInt__BigIntDesc_Format(Object_BigInt__BigInt a,OOC_INT16 outputBase)1545 Object__String8 Object_BigInt__BigIntDesc_Format(Object_BigInt__BigInt a, OOC_INT16 outputBase) {
1546 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14;
1547 OOC_INT32 sizeA;
1548 OOC_INT32 i;
1549 OOC_INT32 bits;
1550 OOC_CHAR8 *str;
1551 OOC_INT32 pos;
1552 OOC_INT32 baseBits;
1553 OOC_INT32 accum;
1554 OOC_INT32 accumBits;
1555 OOC_INT32 d;
1556 OOC_CHAR8 c;
1557 OOC_INT16 powbase;
1558 OOC_INT32 power;
1559 OOC_INT32 newpow;
1560 Object_BigInt__BigInt scratch;
1561 OOC_INT32 size;
1562 OOC_INT32 ntostore;
1563 OOC_INT16 rem;
1564 OOC_INT16 nextrem;
1565
1566 i0 = (OOC_INT64)a;
1567 i1 = *(OOC_INT32*)(_check_pointer(i0, 17053));
1568 i1 = _abs(i1);
1569 sizeA = i1;
1570 i2 = outputBase;
1571 i3 = i2>=2;
1572 if (i3) goto l3;
1573 i3=0u;
1574 goto l4;
1575 l3:
1576 i3 = i2<=36;
1577
1578 l4:
1579 _assert(i3, 127, 17065);
1580 bits = 0;
1581 i3 = i2>1;
1582 if (i3) goto l7;
1583 i3=0;
1584 goto l13;
1585 l7:
1586 i4=i2;i3=0;
1587 l8_loop:
1588 i3 = i3+1;
1589 bits = i3;
1590 i4 = i4>>1;
1591 i5 = i4>1;
1592 if (i5) goto l8_loop;
1593 l13:
1594 i3 = 5+(_div((((i1*15)+i3)-1),i3));
1595 i = i3;
1596 i4 = (OOC_INT64)RT0__NewObject(_td_Object_BigInt__16933.baseTypes[0], i3);
1597 str = (void*)i4;
1598 pos = i3;
1599 i5 = i1==0;
1600 if (i5) goto l84;
1601 i5 = *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(i2, 37, OOC_UINT16, 17445)));
1602 i5 = i5>0;
1603 if (i5) goto l52;
1604 powbase = i2;
1605 power = 1;
1606 i5=i2;i6=1;
1607 l18_loop:
1608 i7 = i5*i2;
1609 newpow = i7;
1610 i8 = i7>32768;
1611 if (i8) goto l22;
1612 powbase = i7;
1613 i5 = i6+1;
1614 power = i5;
1615 i6=i5;i5=i7;
1616 goto l18_loop;
1617 l22:
1618 i7 = (OOC_INT64)Object_BigInt__BigIntDesc_Copy((Object_BigInt__BigInt)i0);
1619 scratch = (Object_BigInt__BigInt)i7;
1620 i8 = i6>0;
1621 size = i1;
1622
1623 l23_loop:
1624 ntostore = i6;
1625 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 18852))+8);
1626 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 18852))+8);
1627 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 18836))+8);
1628 i12 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 18836))+8);
1629 i11 = OOC_ARRAY_LENGTH((_check_pointer(i11, 18842)), 0);
1630 i9 = OOC_ARRAY_LENGTH((_check_pointer(i9, 18858)), 0);
1631 i9 = Object_BigInt__InplaceDivRem1((void*)(_check_pointer(i12, 18842)), i11, (void*)(_check_pointer(i10, 18858)), i9, i1, i5);
1632 rem = i9;
1633 i10 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 18889))+8);
1634 i10 = _check_pointer(i10, 18895);
1635 i11 = OOC_ARRAY_LENGTH(i10, 0);
1636 i12 = i1-1;
1637 i10 = *(OOC_INT16*)(i10+(_check_index(i12, i11, OOC_UINT32, 18895))*2);
1638 i10 = i10==0;
1639 if (!i10) goto l27;
1640 size = i12;
1641 i1=i12;
1642 l27:
1643 _assert(i8, 127, 18988);
1644 i10 = i1==0;
1645 i11=i6;{register OOC_INT64 h0=i3;i3=i9;i9=h0;}
1646 l28_loop:
1647 i12 = _div(i3,i2);
1648 i3 = i3-(i12*i2);
1649 nextrem = i12;
1650 d = i3;
1651 i13 = i3<10;
1652 if (i13) goto l31;
1653 i3 = i3+55;
1654 c = i3;
1655
1656 goto l32;
1657 l31:
1658 i3 = i3+48;
1659 c = i3;
1660
1661 l32:
1662 i9 = i9-1;
1663 pos = i9;
1664 i13 = _check_pointer(i4, 19249);
1665 i14 = OOC_ARRAY_LENGTH(i13, 0);
1666 *(OOC_UINT8*)(i13+(_check_index(i9, i14, OOC_UINT32, 19249))) = i3;
1667 rem = i12;
1668 i3 = i11-1;
1669 ntostore = i3;
1670 i11 = i3==0;
1671 if (i11) goto l38;
1672 if (i10) goto l36;
1673 i11=0u;
1674 goto l40;
1675 l36:
1676 i11 = i12==0;
1677
1678 goto l40;
1679 l38:
1680 i11=1u;
1681 l40:
1682 if (i11) goto l44;
1683 i11=i3;i3=i12;
1684 goto l28_loop;
1685 l44:
1686 if (i10) goto l47;
1687 i3=i9;
1688 goto l23_loop;
1689 l47:
1690 i0 = *(OOC_INT32*)(_check_pointer(i0, 19526));
1691 i0 = i0<0;
1692 if (i0) goto l50;
1693 i0=i9;
1694 goto l51;
1695 l50:
1696 i0 = i9-1;
1697 pos = i0;
1698 i1 = _check_pointer(i4, 19571);
1699 i2 = OOC_ARRAY_LENGTH(i1, 0);
1700 *(OOC_UINT8*)(i1+(_check_index(i0, i2, OOC_UINT32, 19571))) = 45u;
1701
1702 l51:
1703 i1 = OOC_ARRAY_LENGTH((_check_pointer(i4, 19635)), 0);
1704 i2 = OOC_ARRAY_LENGTH((_check_pointer(i4, 19650)), 0);
1705 i0 = (OOC_INT64)Object__NewLatin1Region((void*)(_check_pointer(i4, 19635)), i1, i0, i2);
1706 return (Object__String8)i0;
1707 goto l85;
1708 l52:
1709 i5 = *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(i2, 37, OOC_UINT16, 17494)));
1710 baseBits = i5;
1711 accum = 0;
1712 accumBits = 0;
1713 i = 0;
1714 i6 = 0!=i1;
1715 if (i6) goto l55;
1716 i1=i3;
1717 goto l78;
1718 l55:
1719 i6 = -i5;
1720 i7 = i1-1;
1721 i10=i3;i3=0;i8=0;i9=0;
1722 l56_loop:
1723 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 17620))+8);
1724 i11 = _check_pointer(i11, 17626);
1725 i12 = OOC_ARRAY_LENGTH(i11, 0);
1726 i11 = *(OOC_INT16*)(i11+(_check_index(i8, i12, OOC_UINT32, 17626))*2);
1727 i3 = i3+(_ash(i11,i9));
1728 accum = i3;
1729 i9 = i9+15;
1730 accumBits = i9;
1731 i11 = i8<i7;
1732 _assert((i9>=i5), 127, 17683);
1733 {register OOC_INT64 h0=i9;i9=i10;i10=h0;}
1734 l57_loop:
1735 i12 = _mod(i3,i2);
1736 d = i12;
1737 i13 = i12<10;
1738 if (i13) goto l60;
1739 i12 = i12+55;
1740 c = i12;
1741
1742 goto l61;
1743 l60:
1744 i12 = i12+48;
1745 c = i12;
1746
1747 l61:
1748 i9 = i9-1;
1749 pos = i9;
1750 i13 = _check_pointer(i4, 17959);
1751 i14 = OOC_ARRAY_LENGTH(i13, 0);
1752 *(OOC_UINT8*)(i13+(_check_index(i9, i14, OOC_UINT32, 17959))) = i12;
1753 i10 = i10-i5;
1754 accumBits = i10;
1755 i3 = _ash(i3,i6);
1756 accum = i3;
1757 i12 = i10<i5;
1758 if (i12) goto l64;
1759 i12=0u;
1760 goto l66;
1761 l64:
1762 i12=i11;
1763 l66:
1764 if (i12) goto l68;
1765 i12 = i3==0;
1766
1767 goto l70;
1768 l68:
1769 i12=1u;
1770 l70:
1771 if (!i12) goto l57_loop;
1772 l73:
1773 i8 = i8+1;
1774 i = i8;
1775 i11 = i8!=i1;
1776 if (!i11) goto l77;
1777 {register OOC_INT64 h0=i9;i9=i10;i10=h0;}
1778 goto l56_loop;
1779 l77:
1780 i1=i9;
1781 l78:
1782 i0 = *(OOC_INT32*)(_check_pointer(i0, 18156));
1783 i0 = i0<0;
1784 if (i0) goto l81;
1785 i0=i1;
1786 goto l82;
1787 l81:
1788 i0 = i1-1;
1789 pos = i0;
1790 i1 = _check_pointer(i4, 18201);
1791 i2 = OOC_ARRAY_LENGTH(i1, 0);
1792 *(OOC_UINT8*)(i1+(_check_index(i0, i2, OOC_UINT32, 18201))) = 45u;
1793
1794 l82:
1795 i1 = OOC_ARRAY_LENGTH((_check_pointer(i4, 18265)), 0);
1796 i2 = OOC_ARRAY_LENGTH((_check_pointer(i4, 18280)), 0);
1797 i0 = (OOC_INT64)Object__NewLatin1Region((void*)(_check_pointer(i4, 18265)), i1, i0, i2);
1798 return (Object__String8)i0;
1799 goto l85;
1800 l84:
1801 i0 = (OOC_INT64)Object__NewLatin1((OOC_CHAR8*)"0", 2);
1802 return (Object__String8)i0;
1803 l85:
1804 _failed_function(16650); return 0;
1805 ;
1806 }
1807
Object_BigInt__BigIntDesc_ToString(Object_BigInt__BigInt a)1808 Object__String8 Object_BigInt__BigIntDesc_ToString(Object_BigInt__BigInt a) {
1809 register OOC_INT64 i0;
1810
1811 i0 = (OOC_INT64)a;
1812 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_Format((Object_BigInt__BigInt)i0, 10);
1813 return (Object__String8)i0;
1814 ;
1815 }
1816
Object_BigInt__NewLatin1Region(const OOC_CHAR8 str[],OOC_LEN str_0d,OOC_INT32 start,OOC_INT32 end,OOC_INT32 inputBase)1817 Object_BigInt__BigInt Object_BigInt__NewLatin1Region(const OOC_CHAR8 str[], OOC_LEN str_0d, OOC_INT32 start, OOC_INT32 end, OOC_INT32 inputBase) {
1818 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
1819 OOC_INT32 sign;
1820 Object_BigInt__BigInt z;
1821 OOC_INT32 firstDigit;
1822 OOC_INT32 d;
1823
1824 sign = 1;
1825 i0 = inputBase;
1826 i1 = 2<=i0;
1827 if (i1) goto l3;
1828 i1=0u;
1829 goto l4;
1830 l3:
1831 i1 = i0<=36;
1832
1833 l4:
1834 _assert(i1, 127, 20168);
1835 i1 = start;
1836 i2 = end;
1837 i3 = i1!=i2;
1838 if (i3) goto l7;
1839 i1=0u;
1840 goto l9;
1841 l7:
1842 i1 = *(OOC_UINT8*)((OOC_INT64)str+(_check_index(i1, str_0d, OOC_UINT32, 20301)));
1843 i1 = CharClass__IsWhiteSpace(i1);
1844
1845 l9:
1846 if (!i1) goto l19;
1847 l10_loop:
1848 i1 = start;
1849 i1 = i1+1;
1850 start = i1;
1851 i3 = i1!=i2;
1852 if (i3) goto l13;
1853 i1=0u;
1854 goto l15;
1855 l13:
1856 i1 = *(OOC_UINT8*)((OOC_INT64)str+(_check_index(i1, str_0d, OOC_UINT32, 20301)));
1857 i1 = CharClass__IsWhiteSpace(i1);
1858
1859 l15:
1860 if (i1) goto l10_loop;
1861 l19:
1862 i1 = start;
1863 i3 = i1!=i2;
1864 if (i3) goto l22;
1865 i1=1;
1866 goto l30;
1867 l22:
1868 i3 = *(OOC_UINT8*)((OOC_INT64)str+(_check_index(i1, str_0d, OOC_UINT32, 20402)));
1869 i3 = i3==45u;
1870 if (i3) goto l28;
1871 i3 = *(OOC_UINT8*)((OOC_INT64)str+(_check_index(i1, str_0d, OOC_UINT32, 20478)));
1872 i3 = i3==43u;
1873 if (!i3) goto l27;
1874 start = (i1+1);
1875 l27:
1876 i1=1;
1877 goto l30;
1878 l28:
1879 sign = (-1);
1880 start = (i1+1);
1881 i1=(-1);
1882 l30:
1883 i3 = (OOC_INT64)Object_BigInt__NewInstance(0);
1884 z = (Object_BigInt__BigInt)i3;
1885 i4 = start;
1886 firstDigit = i4;
1887 i5 = i4!=i2;
1888 if (i5) goto l34_loop;
1889 i0=i3;
1890 goto l59;
1891 l34_loop:
1892 i5 = start;
1893 i6 = *(OOC_UINT8*)((OOC_INT64)str+(_check_index(i5, str_0d, OOC_UINT32, 20634)));
1894 d = i6;
1895 i7 = (OOC_UINT8)i6<=(OOC_UINT8)57;
1896 if (i7) goto l45;
1897 i7 = (OOC_UINT8)i6>=(OOC_UINT8)97;
1898 if (i7) goto l43;
1899 i7 = (OOC_UINT8)i6>=(OOC_UINT8)65;
1900 if (!i7) goto l46;
1901 i6 = i6-55;
1902 d = i6;
1903
1904 goto l46;
1905 l43:
1906 i6 = i6-87;
1907 d = i6;
1908
1909 goto l46;
1910 l45:
1911 i6 = i6-48;
1912 d = i6;
1913
1914 l46:
1915 i7 = i6>=0;
1916 if (i7) goto l49;
1917 i7=0u;
1918 goto l51;
1919 l49:
1920 i7 = i6<32768;
1921
1922 l51:
1923 if (i7) goto l53;
1924 return (Object_BigInt__BigInt)(OOC_INT64)0;
1925
1926 goto l54;
1927 l53:
1928 i3 = (OOC_INT64)Object_BigInt__MulAdd1((Object_BigInt__BigInt)i3, i0, i6);
1929 z = (Object_BigInt__BigInt)i3;
1930
1931 l54:
1932 i5 = i5+1;
1933 start = i5;
1934 i5 = i5!=i2;
1935 if (i5) goto l34_loop;
1936 l58:
1937 i0=i3;
1938 l59:
1939 i2 = *(OOC_INT32*)(_check_pointer(i0, 21068));
1940 *(OOC_INT32*)(_check_pointer(i0, 21053)) = (i1*i2);
1941 i1 = start;
1942 i1 = i1!=i4;
1943 if (i1) goto l62;
1944 return (Object_BigInt__BigInt)(OOC_INT64)0;
1945 goto l63;
1946 l62:
1947 return (Object_BigInt__BigInt)i0;
1948 l63:
1949 _failed_function(19790); return 0;
1950 ;
1951 }
1952
Object_BigInt__NewLatin1(const OOC_CHAR8 str[],OOC_LEN str_0d,OOC_INT32 inputBase)1953 Object_BigInt__BigInt Object_BigInt__NewLatin1(const OOC_CHAR8 str[], OOC_LEN str_0d, OOC_INT32 inputBase) {
1954 register OOC_INT64 i0,i1;
1955
1956 i0 = Strings__Length((void*)(OOC_INT64)str, str_0d);
1957 i1 = inputBase;
1958 i0 = (OOC_INT64)Object_BigInt__NewLatin1Region((void*)(OOC_INT64)str, str_0d, 0, i0, i1);
1959 return (Object_BigInt__BigInt)i0;
1960 ;
1961 }
1962
Object_BigInt__New(Object__String str,OOC_INT32 inputBase)1963 Object_BigInt__BigInt Object_BigInt__New(Object__String str, OOC_INT32 inputBase) {
1964 register OOC_INT64 i0,i1,i2,i3;
1965 Object__String8 str8;
1966 Object__CharsLatin1 chars;
1967
1968 i0 = (OOC_INT64)str;
1969 i1 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 21566)))), Object__StringDesc_ToString8)),Object__StringDesc_ToString8)((Object__String)i0, 63u);
1970 str8 = (Object__String8)i1;
1971 i1 = (OOC_INT64)Object__String8Desc_CharsLatin1((Object__String8)i1);
1972 chars = (Object__CharsLatin1)i1;
1973 i2 = OOC_ARRAY_LENGTH((_check_pointer(i1, 21648)), 0);
1974 i0 = *(OOC_INT32*)(_check_pointer(i0, 21657));
1975 i3 = inputBase;
1976 i0 = (OOC_INT64)Object_BigInt__NewLatin1Region((void*)(_check_pointer(i1, 21648)), i2, 0, i0, i3);
1977 return (Object_BigInt__BigInt)i0;
1978 ;
1979 }
1980
Object_BigInt__BigIntDesc_Invert(Object_BigInt__BigInt a)1981 Object_BigInt__BigInt Object_BigInt__BigIntDesc_Invert(Object_BigInt__BigInt a) {
1982 register OOC_INT64 i0,i1;
1983
1984 i0 = (OOC_INT64)Object_BigInt__one;
1985 i1 = (OOC_INT64)a;
1986 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_Add((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i0);
1987 a = (Object_BigInt__BigInt)i0;
1988 i1 = *(OOC_INT32*)(_check_pointer(i0, 21837));
1989 *(OOC_INT32*)(_check_pointer(i0, 21826)) = (-i1);
1990 return (Object_BigInt__BigInt)i0;
1991 ;
1992 }
1993
Object_BigInt__BigIntDesc_LShift(Object_BigInt__BigInt a,OOC_INT32 n)1994 Object_BigInt__BigInt Object_BigInt__BigIntDesc_LShift(Object_BigInt__BigInt a, OOC_INT32 n) {
1995 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
1996 OOC_INT32 wordShift;
1997 OOC_INT32 remShift;
1998 OOC_INT32 oldSize;
1999 OOC_INT32 newSize;
2000 Object_BigInt__BigInt z;
2001 OOC_INT32 i;
2002 OOC_INT32 accum;
2003 OOC_INT32 j;
2004
2005 i0 = n;
2006 _assert((i0>=0), 127, 22023);
2007 i1 = _div(i0,15);
2008 wordShift = i1;
2009 i0 = _mod(i0,15);
2010 remShift = i0;
2011 i2 = (OOC_INT64)a;
2012 i3 = *(OOC_INT32*)(_check_pointer(i2, 22123));
2013 i3 = _abs(i3);
2014 oldSize = i3;
2015 i4 = i3+i1;
2016 newSize = i4;
2017 i5 = i0!=0;
2018 if (!i5) goto l4;
2019 i4 = i4+1;
2020 newSize = i4;
2021
2022 l4:
2023 i6 = (OOC_INT64)Object_BigInt__NewInstance(i4);
2024 z = (Object_BigInt__BigInt)i6;
2025 i7 = *(OOC_INT32*)(_check_pointer(i2, 22262));
2026 i7 = i7<0;
2027 if (!i7) goto l7;
2028 i7 = *(OOC_INT32*)(_check_pointer(i6, 22296));
2029 *(OOC_INT32*)(_check_pointer(i6, 22285)) = (-i7);
2030 l7:
2031 i = 0;
2032 i7 = 0!=i1;
2033 if (i7) goto l10;
2034 i1=0;
2035 goto l16;
2036 l10:
2037 i7=0;
2038 l11_loop:
2039 i8 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i6, 22360))+8);
2040 i8 = _check_pointer(i8, 22366);
2041 i9 = OOC_ARRAY_LENGTH(i8, 0);
2042 *(OOC_INT16*)(i8+(_check_index(i7, i9, OOC_UINT32, 22366))*2) = 0;
2043 i7 = i7+1;
2044 i = i7;
2045 i8 = i7!=i1;
2046 if (i8) goto l11_loop;
2047 l15:
2048 i1=i7;
2049 l16:
2050 accum = 0;
2051 j = 0;
2052 i7 = 0!=i3;
2053 if (i7) goto l19;
2054 i0=0;
2055 goto l26;
2056 l19:
2057 i8=i1;i1=0;i7=0;
2058 l20_loop:
2059 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 22476))+8);
2060 i9 = _check_pointer(i9, 22482);
2061 i10 = OOC_ARRAY_LENGTH(i9, 0);
2062 i9 = *(OOC_INT16*)(i9+(_check_index(i7, i10, OOC_UINT32, 22482))*2);
2063 i1 = i1+(_ash(i9,i0));
2064 accum = i1;
2065 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i6, 22506))+8);
2066 i9 = _check_pointer(i9, 22512);
2067 i10 = OOC_ARRAY_LENGTH(i9, 0);
2068 *(OOC_INT16*)(i9+(_check_index(i8, i10, OOC_UINT32, 22512))*2) = (_mod(i1,32768));
2069 i1 = i1>>15;
2070 accum = i1;
2071 i8 = i8+1;
2072 i = i8;
2073 i7 = i7+1;
2074 j = i7;
2075 i9 = i7!=i3;
2076 if (i9) goto l20_loop;
2077 l24:
2078 i0=i1;
2079 l26:
2080 if (i5) goto l28;
2081 _assert((i0==0), 127, 22694);
2082 goto l29;
2083 l28:
2084 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i6, 22644))+8);
2085 i1 = _check_pointer(i1, 22650);
2086 i2 = OOC_ARRAY_LENGTH(i1, 0);
2087 *(OOC_INT16*)(i1+(_check_index((i4-1), i2, OOC_UINT32, 22650))*2) = i0;
2088 l29:
2089 Object_BigInt__Normalize((Object_BigInt__BigInt)i6);
2090 return (Object_BigInt__BigInt)i6;
2091 ;
2092 }
2093
Object_BigInt__BigIntDesc_RShift(Object_BigInt__BigInt a,OOC_INT32 n)2094 Object_BigInt__BigInt Object_BigInt__BigIntDesc_RShift(Object_BigInt__BigInt a, OOC_INT32 n) {
2095 register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16;
2096 OOC_INT32 wordShift;
2097 OOC_INT32 newSize;
2098 OOC_INT32 loShift;
2099 OOC_INT32 hiShift;
2100 OOC_UINT32 loMask;
2101 OOC_UINT32 hiMask;
2102 Object_BigInt__BigInt z;
2103 OOC_INT32 i;
2104 OOC_INT32 j;
2105
2106 i0 = n;
2107 _assert((i0>=0), 127, 22936);
2108 i1 = (OOC_INT64)a;
2109 i2 = *(OOC_INT32*)(_check_pointer(i1, 22961));
2110 i2 = i2<0;
2111 if (i2) goto l18;
2112 i2 = _div(i0,15);
2113 wordShift = i2;
2114 i3 = *(OOC_INT32*)(_check_pointer(i1, 23108));
2115 i3 = i3-i2;
2116 newSize = i3;
2117 i4 = i3<=0;
2118 if (i4) goto l16;
2119 i0 = _mod(i0,15);
2120 i4 = 15-i0;
2121 loShift = i0;
2122 i5 = (_ash(1,i4))-1;
2123 hiShift = i4;
2124 i6 = _type_cast_fast(OOC_UINT32, OOC_INT32, i5);
2125 loMask = i6;
2126 i5 = _type_cast_fast(OOC_UINT32, OOC_INT32, (32767-i5));
2127 hiMask = i5;
2128 i7 = (OOC_INT64)Object_BigInt__NewInstance(i3);
2129 z = (Object_BigInt__BigInt)i7;
2130 i = 0;
2131 j = i2;
2132 i8 = 0<i3;
2133 if (!i8) goto l15;
2134 i0 = -i0;
2135 i8=i2;i2=0;
2136 l7_loop:
2137 i9 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 23476))+8);
2138 i9 = _check_pointer(i9, 23482);
2139 i10 = OOC_ARRAY_LENGTH(i9, 0);
2140 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 23526))+8);
2141 i11 = _check_pointer(i11, 23532);
2142 i12 = OOC_ARRAY_LENGTH(i11, 0);
2143 i11 = *(OOC_INT16*)(i11+(_check_index(i8, i12, OOC_UINT32, 23532))*2);
2144 *(OOC_INT16*)(i9+(_check_index(i2, i10, OOC_UINT32, 23482))*2) = (_type_cast_fast(OOC_INT32, OOC_UINT32, ((_type_cast_fast(OOC_UINT32, OOC_INT32, (_ash(i11,i0))))&i6)));
2145 i8 = i8+1;
2146 i9 = i2+1;
2147 i10 = i9<i3;
2148 if (!i10) goto l10;
2149 i11 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 23609))+8);
2150 i11 = _check_pointer(i11, 23615);
2151 i12 = OOC_ARRAY_LENGTH(i11, 0);
2152 i13 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i7, 23609))+8);
2153 i13 = _check_pointer(i13, 23615);
2154 i14 = OOC_ARRAY_LENGTH(i13, 0);
2155 i15 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 23657))+8);
2156 i15 = _check_pointer(i15, 23663);
2157 i16 = OOC_ARRAY_LENGTH(i15, 0);
2158 i15 = *(OOC_INT16*)(i15+(_check_index(i8, i16, OOC_UINT32, 23663))*2);
2159 i13 = *(OOC_INT16*)(i13+(_check_index(i2, i14, OOC_UINT32, 23615))*2);
2160 *(OOC_INT16*)(i11+(_check_index(i2, i12, OOC_UINT32, 23615))*2) = (i13+(_type_cast_fast(OOC_INT32, OOC_UINT32, ((_type_cast_fast(OOC_UINT32, OOC_INT32, (_ash(i15,i4))))&i5))));
2161 l10:
2162 i = i9;
2163 j = i8;
2164 if (!i10) goto l15;
2165 i2=i9;
2166 goto l7_loop;
2167 l15:
2168 Object_BigInt__Normalize((Object_BigInt__BigInt)i7);
2169 return (Object_BigInt__BigInt)i7;
2170 goto l19;
2171 l16:
2172 i0 = (OOC_INT64)Object_BigInt__zero;
2173 return (Object_BigInt__BigInt)i0;
2174 goto l19;
2175 l18:
2176 i1 = (OOC_INT64)Object_BigInt__BigIntDesc_Invert((Object_BigInt__BigInt)i1);
2177 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_RShift((Object_BigInt__BigInt)i1, i0);
2178 i0 = (OOC_INT64)Object_BigInt__BigIntDesc_Invert((Object_BigInt__BigInt)i0);
2179 return (Object_BigInt__BigInt)i0;
2180 l19:
2181 _failed_function(22791); return 0;
2182 ;
2183 }
2184
Object_BigInt__BigIntDesc_Store(Object_BigInt__BigInt a,ADT_Storable__Writer w)2185 void Object_BigInt__BigIntDesc_Store(Object_BigInt__BigInt a, ADT_Storable__Writer w) {
2186 register OOC_INT64 i0,i1,i2,i3,i4,i5;
2187 OOC_INT32 i;
2188
2189 i0 = (OOC_INT64)a;
2190 i1 = (OOC_INT64)w;
2191 i2 = *(OOC_INT32*)(_check_pointer(i0, 23942));
2192 OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 23931)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
2193 i2 = *(OOC_INT32*)(_check_pointer(i0, 23973));
2194 i = 0;
2195 i2 = _abs(i2);
2196 i3 = 0<i2;
2197 if (!i3) goto l8;
2198 i3=0;
2199 l3_loop:
2200 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 24003))+8);
2201 i4 = _check_pointer(i4, 24009);
2202 i5 = OOC_ARRAY_LENGTH(i4, 0);
2203 i4 = *(OOC_INT16*)(i4+(_check_index(i3, i5, OOC_UINT32, 24009))*2);
2204 OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 23992)))), IO_BinaryRider__WriterDesc_WriteInt)),IO_BinaryRider__WriterDesc_WriteInt)((IO_BinaryRider__Writer)i1, i4);
2205 i3 = i3+1;
2206 i = i3;
2207 i4 = i3<i2;
2208 if (i4) goto l3_loop;
2209 l8:
2210 return;
2211 ;
2212 }
2213
Object_BigInt__BigIntDesc_Load(Object_BigInt__BigInt a,ADT_Storable__Reader r)2214 void Object_BigInt__BigIntDesc_Load(Object_BigInt__BigInt a, ADT_Storable__Reader r) {
2215 register OOC_INT64 i0,i1,i2,i3,i4,i5;
2216 OOC_INT32 i;
2217
2218 i0 = (OOC_INT64)a;
2219 i1 = (OOC_INT64)r;
2220 OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 24138)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(_check_pointer(i0, 24148)));
2221 i2 = *(OOC_INT32*)(_check_pointer(i0, 24178));
2222 *(OOC_INT64*)((_check_pointer(i0, 24165))+8) = ((OOC_INT64)RT0__NewObject(_td_Object_BigInt__DigitArray.baseTypes[0], (_abs(i2))));
2223 i2 = *(OOC_INT32*)(_check_pointer(i0, 24210));
2224 i = 0;
2225 i2 = _abs(i2);
2226 i3 = 0<i2;
2227 if (!i3) goto l8;
2228 i3=0;
2229 l3_loop:
2230 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 24239))+8);
2231 i4 = _check_pointer(i4, 24245);
2232 i5 = OOC_ARRAY_LENGTH(i4, 0);
2233 OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 24229)))), IO_BinaryRider__ReaderDesc_ReadInt)),IO_BinaryRider__ReaderDesc_ReadInt)((IO_BinaryRider__Reader)i1, (void*)(i4+(_check_index(i3, i5, OOC_UINT32, 24245))*2));
2234 i3 = i3+1;
2235 i = i3;
2236 i4 = i3<i2;
2237 if (i4) goto l3_loop;
2238 l8:
2239 return;
2240 ;
2241 }
2242
Object_BigInt__Init(void)2243 static void Object_BigInt__Init(void) {
2244 register OOC_INT64 i0,i1;
2245 OOC_INT32 i;
2246
2247 i = 0;
2248 i0=0;
2249 l1_loop:
2250 *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(i0, 37, OOC_UINT32, 24373))) = (-1);
2251 i0 = i0+1;
2252 i = i0;
2253 i1 = i0<=36;
2254 if (i1) goto l1_loop;
2255 l5:
2256 *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(2, 37, OOC_UINT8, 24405))) = 1;
2257 *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(4, 37, OOC_UINT8, 24428))) = 2;
2258 *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(8, 37, OOC_UINT8, 24451))) = 3;
2259 *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(16, 37, OOC_UINT8, 24474))) = 4;
2260 *(OOC_INT8*)((OOC_INT64)Object_BigInt__powerOf2+(_check_index(32, 37, OOC_UINT8, 24497))) = 5;
2261 i0 = (OOC_INT64)Object_BigInt__NewInstance(0);
2262 Object_BigInt__zero = (Object_BigInt__BigInt)i0;
2263 i0 = (OOC_INT64)Object_BigInt__NewInstance(1);
2264 Object_BigInt__one = (Object_BigInt__BigInt)i0;
2265 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 24571))+8);
2266 i0 = _check_pointer(i0, 24577);
2267 i1 = OOC_ARRAY_LENGTH(i0, 0);
2268 *(OOC_INT16*)(i0+(_check_index(0, i1, OOC_UINT8, 24577))*2) = 1;
2269 return;
2270 ;
2271 }
2272
OOC_Object_BigInt_init(void)2273 void OOC_Object_BigInt_init(void) {
2274
2275 Object_BigInt__Init();
2276 return;
2277 ;
2278 }
2279
OOC_Object_BigInt_destroy(void)2280 void OOC_Object_BigInt_destroy(void) {
2281 }
2282
2283 /* --- */
2284