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