forked from mit-plv/fiat-crypto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathp448_solinas_64.c
1989 lines (1956 loc) · 85.6 KB
/
p448_solinas_64.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* Autogenerated: src/ExtractionOCaml/bedrock2_unsaturated_solinas --lang bedrock2 --static --no-wide-int --widen-carry --widen-bytes --split-multiret --no-select p448 64 8 '2^448 - 2^224 - 1' carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes */
/* curve description: p448 */
/* machine_wordsize = 64 (from "64") */
/* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes */
/* n = 8 (from "8") */
/* s-c = 2^448 - [(2^224, 1), (1, 1)] (from "2^448 - 2^224 - 1") */
/* tight_bounds_multiplier = 1 (from "") */
/* */
/* Computed values: */
/* carry_chain = [3, 7, 4, 0, 5, 1, 6, 2, 7, 3, 4, 0] */
/* eval z = z[0] + (z[1] << 56) + (z[2] << 112) + (z[3] << 168) + (z[4] << 224) + (z[5] << 0x118) + (z[6] << 0x150) + (z[7] << 0x188) */
/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) */
/* balance = [0x1fffffffffffffe, 0x1fffffffffffffe, 0x1fffffffffffffe, 0x1fffffffffffffe, 0x1fffffffffffffc, 0x1fffffffffffffe, 0x1fffffffffffffe, 0x1fffffffffffffe] */
#include <stdint.h>
#include <memory.h>
// LITTLE-ENDIAN memory access is REQUIRED
// the following two functions are required to work around -fstrict-aliasing
static inline uintptr_t _br2_load(uintptr_t a, size_t sz) {
uintptr_t r = 0;
memcpy(&r, (void*)a, sz);
return r;
}
static inline void _br2_store(uintptr_t a, uintptr_t v, size_t sz) {
memcpy((void*)a, &v, sz);
}
/*
* Input Bounds:
* in0: [[0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000]]
* in1: [[0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000]]
* Output Bounds:
* out0: [[0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000]]
*/
static
void internal_fiat_p448_carry_mul(uintptr_t out0, uintptr_t in0, uintptr_t in1) {
uintptr_t x7, x6, x5, x4, x3, x2, x1, x15, x14, x13, x12, x11, x10, x9, x0, x8, x46, x58, x213, x59, x214, x47, x212, x68, x217, x69, x218, x215, x216, x76, x221, x77, x222, x219, x220, x168, x225, x169, x226, x223, x224, x178, x229, x179, x230, x227, x228, x190, x233, x191, x234, x231, x232, x204, x237, x205, x238, x235, x239, x236, x96, x104, x243, x105, x244, x97, x242, x112, x247, x113, x248, x245, x246, x120, x251, x121, x252, x249, x250, x140, x255, x141, x256, x253, x254, x142, x259, x143, x260, x257, x258, x146, x263, x147, x264, x261, x262, x152, x267, x153, x268, x265, x266, x160, x271, x161, x272, x269, x270, x170, x275, x171, x276, x273, x274, x182, x279, x183, x280, x277, x278, x196, x283, x197, x284, x281, x28, x40, x287, x41, x288, x29, x286, x98, x291, x99, x292, x289, x290, x106, x295, x107, x296, x293, x294, x114, x299, x115, x300, x297, x298, x122, x303, x123, x304, x301, x302, x128, x307, x129, x308, x305, x306, x144, x311, x145, x312, x309, x310, x148, x315, x149, x316, x313, x314, x154, x319, x155, x320, x317, x318, x162, x323, x163, x324, x321, x322, x172, x327, x173, x328, x325, x326, x184, x331, x185, x332, x329, x330, x198, x335, x199, x336, x333, x30, x34, x339, x35, x340, x31, x338, x42, x343, x43, x344, x341, x342, x54, x347, x55, x348, x345, x346, x100, x351, x101, x352, x349, x350, x108, x355, x109, x356, x353, x354, x116, x359, x117, x360, x357, x358, x124, x363, x125, x364, x361, x362, x130, x367, x131, x368, x365, x366, x134, x371, x135, x372, x369, x370, x150, x375, x151, x376, x373, x374, x156, x379, x157, x380, x377, x378, x164, x383, x165, x384, x381, x382, x174, x387, x175, x388, x385, x386, x186, x391, x187, x392, x389, x390, x200, x395, x201, x396, x393, x32, x36, x399, x37, x400, x33, x398, x38, x403, x39, x404, x401, x402, x44, x407, x45, x408, x405, x406, x56, x411, x57, x412, x409, x410, x66, x415, x67, x416, x413, x414, x102, x419, x103, x420, x417, x418, x110, x423, x111, x424, x421, x422, x118, x427, x119, x428, x425, x426, x126, x431, x127, x432, x429, x430, x132, x435, x133, x436, x433, x434, x136, x439, x137, x440, x437, x438, x138, x443, x139, x444, x441, x442, x158, x447, x159, x448, x445, x446, x166, x451, x167, x452, x449, x450, x176, x455, x177, x456, x453, x454, x188, x459, x189, x460, x457, x458, x202, x463, x203, x464, x461, x16, x48, x467, x49, x468, x17, x466, x60, x471, x61, x472, x469, x470, x70, x475, x71, x476, x473, x474, x78, x479, x79, x480, x477, x478, x84, x483, x85, x484, x481, x482, x180, x487, x181, x488, x485, x486, x192, x491, x193, x492, x489, x490, x206, x495, x207, x496, x493, x18, x22, x499, x23, x500, x19, x498, x50, x503, x51, x504, x501, x502, x62, x507, x63, x508, x505, x506, x72, x511, x73, x512, x509, x510, x80, x515, x81, x516, x513, x514, x86, x519, x87, x520, x517, x518, x90, x523, x91, x524, x521, x522, x194, x527, x195, x528, x525, x526, x208, x531, x209, x532, x529, x20, x24, x535, x25, x536, x21, x534, x26, x539, x27, x540, x537, x538, x52, x543, x53, x544, x541, x542, x64, x547, x65, x548, x545, x546, x74, x551, x75, x552, x549, x550, x82, x555, x83, x556, x553, x554, x88, x559, x89, x560, x557, x558, x92, x563, x93, x564, x561, x562, x94, x567, x95, x568, x565, x566, x210, x571, x211, x572, x569, x462, x240, x575, x465, x285, x282, x574, x580, x576, x581, x579, x577, x570, x585, x573, x394, x582, x588, x397, x586, x584, x530, x590, x593, x533, x589, x587, x334, x595, x598, x337, x594, x592, x494, x600, x603, x497, x599, x597, x605, x578, x604, x602, x608, x241, x607, x610, x583, x591, x611, x613, x615, x617, x618, x596, x616, x621, x601, x622, x623, x609, x614, x619, x620, x606, x612, x624, x625, x626, x627, x628, x629, x630, x631;
x0 = _br2_load((in0)+((uintptr_t)0ULL), sizeof(uintptr_t));
x1 = _br2_load((in0)+((uintptr_t)8ULL), sizeof(uintptr_t));
x2 = _br2_load((in0)+((uintptr_t)16ULL), sizeof(uintptr_t));
x3 = _br2_load((in0)+((uintptr_t)24ULL), sizeof(uintptr_t));
x4 = _br2_load((in0)+((uintptr_t)32ULL), sizeof(uintptr_t));
x5 = _br2_load((in0)+((uintptr_t)40ULL), sizeof(uintptr_t));
x6 = _br2_load((in0)+((uintptr_t)48ULL), sizeof(uintptr_t));
x7 = _br2_load((in0)+((uintptr_t)56ULL), sizeof(uintptr_t));
/*skip*/
x8 = _br2_load((in1)+((uintptr_t)0ULL), sizeof(uintptr_t));
x9 = _br2_load((in1)+((uintptr_t)8ULL), sizeof(uintptr_t));
x10 = _br2_load((in1)+((uintptr_t)16ULL), sizeof(uintptr_t));
x11 = _br2_load((in1)+((uintptr_t)24ULL), sizeof(uintptr_t));
x12 = _br2_load((in1)+((uintptr_t)32ULL), sizeof(uintptr_t));
x13 = _br2_load((in1)+((uintptr_t)40ULL), sizeof(uintptr_t));
x14 = _br2_load((in1)+((uintptr_t)48ULL), sizeof(uintptr_t));
x15 = _br2_load((in1)+((uintptr_t)56ULL), sizeof(uintptr_t));
/*skip*/
/*skip*/
x16 = (x7)*(x15);
x17 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x15))>>32 : ((__uint128_t)(x7)*(x15))>>64;
x18 = (x7)*(x14);
x19 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x14))>>32 : ((__uint128_t)(x7)*(x14))>>64;
x20 = (x7)*(x13);
x21 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x13))>>32 : ((__uint128_t)(x7)*(x13))>>64;
x22 = (x6)*(x15);
x23 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x15))>>32 : ((__uint128_t)(x6)*(x15))>>64;
x24 = (x6)*(x14);
x25 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x14))>>32 : ((__uint128_t)(x6)*(x14))>>64;
x26 = (x5)*(x15);
x27 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x15))>>32 : ((__uint128_t)(x5)*(x15))>>64;
x28 = (x7)*(x15);
x29 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x15))>>32 : ((__uint128_t)(x7)*(x15))>>64;
x30 = (x7)*(x14);
x31 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x14))>>32 : ((__uint128_t)(x7)*(x14))>>64;
x32 = (x7)*(x13);
x33 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x13))>>32 : ((__uint128_t)(x7)*(x13))>>64;
x34 = (x6)*(x15);
x35 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x15))>>32 : ((__uint128_t)(x6)*(x15))>>64;
x36 = (x6)*(x14);
x37 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x14))>>32 : ((__uint128_t)(x6)*(x14))>>64;
x38 = (x5)*(x15);
x39 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x15))>>32 : ((__uint128_t)(x5)*(x15))>>64;
x40 = (x7)*(x15);
x41 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x15))>>32 : ((__uint128_t)(x7)*(x15))>>64;
x42 = (x7)*(x14);
x43 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x14))>>32 : ((__uint128_t)(x7)*(x14))>>64;
x44 = (x7)*(x13);
x45 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x13))>>32 : ((__uint128_t)(x7)*(x13))>>64;
x46 = (x7)*(x12);
x47 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x12))>>32 : ((__uint128_t)(x7)*(x12))>>64;
x48 = (x7)*(x11);
x49 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x11))>>32 : ((__uint128_t)(x7)*(x11))>>64;
x50 = (x7)*(x10);
x51 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x10))>>32 : ((__uint128_t)(x7)*(x10))>>64;
x52 = (x7)*(x9);
x53 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x9))>>32 : ((__uint128_t)(x7)*(x9))>>64;
x54 = (x6)*(x15);
x55 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x15))>>32 : ((__uint128_t)(x6)*(x15))>>64;
x56 = (x6)*(x14);
x57 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x14))>>32 : ((__uint128_t)(x6)*(x14))>>64;
x58 = (x6)*(x13);
x59 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x13))>>32 : ((__uint128_t)(x6)*(x13))>>64;
x60 = (x6)*(x12);
x61 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x12))>>32 : ((__uint128_t)(x6)*(x12))>>64;
x62 = (x6)*(x11);
x63 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x11))>>32 : ((__uint128_t)(x6)*(x11))>>64;
x64 = (x6)*(x10);
x65 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x10))>>32 : ((__uint128_t)(x6)*(x10))>>64;
x66 = (x5)*(x15);
x67 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x15))>>32 : ((__uint128_t)(x5)*(x15))>>64;
x68 = (x5)*(x14);
x69 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x14))>>32 : ((__uint128_t)(x5)*(x14))>>64;
x70 = (x5)*(x13);
x71 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x13))>>32 : ((__uint128_t)(x5)*(x13))>>64;
x72 = (x5)*(x12);
x73 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x12))>>32 : ((__uint128_t)(x5)*(x12))>>64;
x74 = (x5)*(x11);
x75 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x11))>>32 : ((__uint128_t)(x5)*(x11))>>64;
x76 = (x4)*(x15);
x77 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x15))>>32 : ((__uint128_t)(x4)*(x15))>>64;
x78 = (x4)*(x14);
x79 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x14))>>32 : ((__uint128_t)(x4)*(x14))>>64;
x80 = (x4)*(x13);
x81 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x13))>>32 : ((__uint128_t)(x4)*(x13))>>64;
x82 = (x4)*(x12);
x83 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x12))>>32 : ((__uint128_t)(x4)*(x12))>>64;
x84 = (x3)*(x15);
x85 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x15))>>32 : ((__uint128_t)(x3)*(x15))>>64;
x86 = (x3)*(x14);
x87 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x14))>>32 : ((__uint128_t)(x3)*(x14))>>64;
x88 = (x3)*(x13);
x89 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x13))>>32 : ((__uint128_t)(x3)*(x13))>>64;
x90 = (x2)*(x15);
x91 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x15))>>32 : ((__uint128_t)(x2)*(x15))>>64;
x92 = (x2)*(x14);
x93 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x14))>>32 : ((__uint128_t)(x2)*(x14))>>64;
x94 = (x1)*(x15);
x95 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x15))>>32 : ((__uint128_t)(x1)*(x15))>>64;
x96 = (x7)*(x12);
x97 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x12))>>32 : ((__uint128_t)(x7)*(x12))>>64;
x98 = (x7)*(x11);
x99 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x11))>>32 : ((__uint128_t)(x7)*(x11))>>64;
x100 = (x7)*(x10);
x101 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x10))>>32 : ((__uint128_t)(x7)*(x10))>>64;
x102 = (x7)*(x9);
x103 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x9))>>32 : ((__uint128_t)(x7)*(x9))>>64;
x104 = (x6)*(x13);
x105 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x13))>>32 : ((__uint128_t)(x6)*(x13))>>64;
x106 = (x6)*(x12);
x107 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x12))>>32 : ((__uint128_t)(x6)*(x12))>>64;
x108 = (x6)*(x11);
x109 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x11))>>32 : ((__uint128_t)(x6)*(x11))>>64;
x110 = (x6)*(x10);
x111 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x10))>>32 : ((__uint128_t)(x6)*(x10))>>64;
x112 = (x5)*(x14);
x113 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x14))>>32 : ((__uint128_t)(x5)*(x14))>>64;
x114 = (x5)*(x13);
x115 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x13))>>32 : ((__uint128_t)(x5)*(x13))>>64;
x116 = (x5)*(x12);
x117 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x12))>>32 : ((__uint128_t)(x5)*(x12))>>64;
x118 = (x5)*(x11);
x119 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x11))>>32 : ((__uint128_t)(x5)*(x11))>>64;
x120 = (x4)*(x15);
x121 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x15))>>32 : ((__uint128_t)(x4)*(x15))>>64;
x122 = (x4)*(x14);
x123 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x14))>>32 : ((__uint128_t)(x4)*(x14))>>64;
x124 = (x4)*(x13);
x125 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x13))>>32 : ((__uint128_t)(x4)*(x13))>>64;
x126 = (x4)*(x12);
x127 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x12))>>32 : ((__uint128_t)(x4)*(x12))>>64;
x128 = (x3)*(x15);
x129 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x15))>>32 : ((__uint128_t)(x3)*(x15))>>64;
x130 = (x3)*(x14);
x131 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x14))>>32 : ((__uint128_t)(x3)*(x14))>>64;
x132 = (x3)*(x13);
x133 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x13))>>32 : ((__uint128_t)(x3)*(x13))>>64;
x134 = (x2)*(x15);
x135 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x15))>>32 : ((__uint128_t)(x2)*(x15))>>64;
x136 = (x2)*(x14);
x137 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x14))>>32 : ((__uint128_t)(x2)*(x14))>>64;
x138 = (x1)*(x15);
x139 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x15))>>32 : ((__uint128_t)(x1)*(x15))>>64;
x140 = (x7)*(x8);
x141 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x8))>>32 : ((__uint128_t)(x7)*(x8))>>64;
x142 = (x6)*(x9);
x143 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x9))>>32 : ((__uint128_t)(x6)*(x9))>>64;
x144 = (x6)*(x8);
x145 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x8))>>32 : ((__uint128_t)(x6)*(x8))>>64;
x146 = (x5)*(x10);
x147 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x10))>>32 : ((__uint128_t)(x5)*(x10))>>64;
x148 = (x5)*(x9);
x149 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x9))>>32 : ((__uint128_t)(x5)*(x9))>>64;
x150 = (x5)*(x8);
x151 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x8))>>32 : ((__uint128_t)(x5)*(x8))>>64;
x152 = (x4)*(x11);
x153 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x11))>>32 : ((__uint128_t)(x4)*(x11))>>64;
x154 = (x4)*(x10);
x155 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x10))>>32 : ((__uint128_t)(x4)*(x10))>>64;
x156 = (x4)*(x9);
x157 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x9))>>32 : ((__uint128_t)(x4)*(x9))>>64;
x158 = (x4)*(x8);
x159 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x8))>>32 : ((__uint128_t)(x4)*(x8))>>64;
x160 = (x3)*(x12);
x161 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x12))>>32 : ((__uint128_t)(x3)*(x12))>>64;
x162 = (x3)*(x11);
x163 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x11))>>32 : ((__uint128_t)(x3)*(x11))>>64;
x164 = (x3)*(x10);
x165 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x10))>>32 : ((__uint128_t)(x3)*(x10))>>64;
x166 = (x3)*(x9);
x167 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x9))>>32 : ((__uint128_t)(x3)*(x9))>>64;
x168 = (x3)*(x8);
x169 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x8))>>32 : ((__uint128_t)(x3)*(x8))>>64;
x170 = (x2)*(x13);
x171 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x13))>>32 : ((__uint128_t)(x2)*(x13))>>64;
x172 = (x2)*(x12);
x173 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x12))>>32 : ((__uint128_t)(x2)*(x12))>>64;
x174 = (x2)*(x11);
x175 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x11))>>32 : ((__uint128_t)(x2)*(x11))>>64;
x176 = (x2)*(x10);
x177 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x10))>>32 : ((__uint128_t)(x2)*(x10))>>64;
x178 = (x2)*(x9);
x179 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x9))>>32 : ((__uint128_t)(x2)*(x9))>>64;
x180 = (x2)*(x8);
x181 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x8))>>32 : ((__uint128_t)(x2)*(x8))>>64;
x182 = (x1)*(x14);
x183 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x14))>>32 : ((__uint128_t)(x1)*(x14))>>64;
x184 = (x1)*(x13);
x185 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x13))>>32 : ((__uint128_t)(x1)*(x13))>>64;
x186 = (x1)*(x12);
x187 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x12))>>32 : ((__uint128_t)(x1)*(x12))>>64;
x188 = (x1)*(x11);
x189 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x11))>>32 : ((__uint128_t)(x1)*(x11))>>64;
x190 = (x1)*(x10);
x191 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x10))>>32 : ((__uint128_t)(x1)*(x10))>>64;
x192 = (x1)*(x9);
x193 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x9))>>32 : ((__uint128_t)(x1)*(x9))>>64;
x194 = (x1)*(x8);
x195 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x8))>>32 : ((__uint128_t)(x1)*(x8))>>64;
x196 = (x0)*(x15);
x197 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x15))>>32 : ((__uint128_t)(x0)*(x15))>>64;
x198 = (x0)*(x14);
x199 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x14))>>32 : ((__uint128_t)(x0)*(x14))>>64;
x200 = (x0)*(x13);
x201 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x13))>>32 : ((__uint128_t)(x0)*(x13))>>64;
x202 = (x0)*(x12);
x203 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x12))>>32 : ((__uint128_t)(x0)*(x12))>>64;
x204 = (x0)*(x11);
x205 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x11))>>32 : ((__uint128_t)(x0)*(x11))>>64;
x206 = (x0)*(x10);
x207 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x10))>>32 : ((__uint128_t)(x0)*(x10))>>64;
x208 = (x0)*(x9);
x209 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x9))>>32 : ((__uint128_t)(x0)*(x9))>>64;
x210 = (x0)*(x8);
x211 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x8))>>32 : ((__uint128_t)(x0)*(x8))>>64;
x212 = (x58)+(x46);
x213 = (x212)<(x58);
x214 = (x213)+(x59);
x215 = (x214)+(x47);
x216 = (x68)+(x212);
x217 = (x216)<(x68);
x218 = (x217)+(x69);
x219 = (x218)+(x215);
x220 = (x76)+(x216);
x221 = (x220)<(x76);
x222 = (x221)+(x77);
x223 = (x222)+(x219);
x224 = (x168)+(x220);
x225 = (x224)<(x168);
x226 = (x225)+(x169);
x227 = (x226)+(x223);
x228 = (x178)+(x224);
x229 = (x228)<(x178);
x230 = (x229)+(x179);
x231 = (x230)+(x227);
x232 = (x190)+(x228);
x233 = (x232)<(x190);
x234 = (x233)+(x191);
x235 = (x234)+(x231);
x236 = (x204)+(x232);
x237 = (x236)<(x204);
x238 = (x237)+(x205);
x239 = (x238)+(x235);
x240 = ((x236)>>((uintptr_t)56ULL))|((x239)<<((uintptr_t)8ULL));
x241 = (x236)&((uintptr_t)72057594037927935ULL);
x242 = (x104)+(x96);
x243 = (x242)<(x104);
x244 = (x243)+(x105);
x245 = (x244)+(x97);
x246 = (x112)+(x242);
x247 = (x246)<(x112);
x248 = (x247)+(x113);
x249 = (x248)+(x245);
x250 = (x120)+(x246);
x251 = (x250)<(x120);
x252 = (x251)+(x121);
x253 = (x252)+(x249);
x254 = (x140)+(x250);
x255 = (x254)<(x140);
x256 = (x255)+(x141);
x257 = (x256)+(x253);
x258 = (x142)+(x254);
x259 = (x258)<(x142);
x260 = (x259)+(x143);
x261 = (x260)+(x257);
x262 = (x146)+(x258);
x263 = (x262)<(x146);
x264 = (x263)+(x147);
x265 = (x264)+(x261);
x266 = (x152)+(x262);
x267 = (x266)<(x152);
x268 = (x267)+(x153);
x269 = (x268)+(x265);
x270 = (x160)+(x266);
x271 = (x270)<(x160);
x272 = (x271)+(x161);
x273 = (x272)+(x269);
x274 = (x170)+(x270);
x275 = (x274)<(x170);
x276 = (x275)+(x171);
x277 = (x276)+(x273);
x278 = (x182)+(x274);
x279 = (x278)<(x182);
x280 = (x279)+(x183);
x281 = (x280)+(x277);
x282 = (x196)+(x278);
x283 = (x282)<(x196);
x284 = (x283)+(x197);
x285 = (x284)+(x281);
x286 = (x40)+(x28);
x287 = (x286)<(x40);
x288 = (x287)+(x41);
x289 = (x288)+(x29);
x290 = (x98)+(x286);
x291 = (x290)<(x98);
x292 = (x291)+(x99);
x293 = (x292)+(x289);
x294 = (x106)+(x290);
x295 = (x294)<(x106);
x296 = (x295)+(x107);
x297 = (x296)+(x293);
x298 = (x114)+(x294);
x299 = (x298)<(x114);
x300 = (x299)+(x115);
x301 = (x300)+(x297);
x302 = (x122)+(x298);
x303 = (x302)<(x122);
x304 = (x303)+(x123);
x305 = (x304)+(x301);
x306 = (x128)+(x302);
x307 = (x306)<(x128);
x308 = (x307)+(x129);
x309 = (x308)+(x305);
x310 = (x144)+(x306);
x311 = (x310)<(x144);
x312 = (x311)+(x145);
x313 = (x312)+(x309);
x314 = (x148)+(x310);
x315 = (x314)<(x148);
x316 = (x315)+(x149);
x317 = (x316)+(x313);
x318 = (x154)+(x314);
x319 = (x318)<(x154);
x320 = (x319)+(x155);
x321 = (x320)+(x317);
x322 = (x162)+(x318);
x323 = (x322)<(x162);
x324 = (x323)+(x163);
x325 = (x324)+(x321);
x326 = (x172)+(x322);
x327 = (x326)<(x172);
x328 = (x327)+(x173);
x329 = (x328)+(x325);
x330 = (x184)+(x326);
x331 = (x330)<(x184);
x332 = (x331)+(x185);
x333 = (x332)+(x329);
x334 = (x198)+(x330);
x335 = (x334)<(x198);
x336 = (x335)+(x199);
x337 = (x336)+(x333);
x338 = (x34)+(x30);
x339 = (x338)<(x34);
x340 = (x339)+(x35);
x341 = (x340)+(x31);
x342 = (x42)+(x338);
x343 = (x342)<(x42);
x344 = (x343)+(x43);
x345 = (x344)+(x341);
x346 = (x54)+(x342);
x347 = (x346)<(x54);
x348 = (x347)+(x55);
x349 = (x348)+(x345);
x350 = (x100)+(x346);
x351 = (x350)<(x100);
x352 = (x351)+(x101);
x353 = (x352)+(x349);
x354 = (x108)+(x350);
x355 = (x354)<(x108);
x356 = (x355)+(x109);
x357 = (x356)+(x353);
x358 = (x116)+(x354);
x359 = (x358)<(x116);
x360 = (x359)+(x117);
x361 = (x360)+(x357);
x362 = (x124)+(x358);
x363 = (x362)<(x124);
x364 = (x363)+(x125);
x365 = (x364)+(x361);
x366 = (x130)+(x362);
x367 = (x366)<(x130);
x368 = (x367)+(x131);
x369 = (x368)+(x365);
x370 = (x134)+(x366);
x371 = (x370)<(x134);
x372 = (x371)+(x135);
x373 = (x372)+(x369);
x374 = (x150)+(x370);
x375 = (x374)<(x150);
x376 = (x375)+(x151);
x377 = (x376)+(x373);
x378 = (x156)+(x374);
x379 = (x378)<(x156);
x380 = (x379)+(x157);
x381 = (x380)+(x377);
x382 = (x164)+(x378);
x383 = (x382)<(x164);
x384 = (x383)+(x165);
x385 = (x384)+(x381);
x386 = (x174)+(x382);
x387 = (x386)<(x174);
x388 = (x387)+(x175);
x389 = (x388)+(x385);
x390 = (x186)+(x386);
x391 = (x390)<(x186);
x392 = (x391)+(x187);
x393 = (x392)+(x389);
x394 = (x200)+(x390);
x395 = (x394)<(x200);
x396 = (x395)+(x201);
x397 = (x396)+(x393);
x398 = (x36)+(x32);
x399 = (x398)<(x36);
x400 = (x399)+(x37);
x401 = (x400)+(x33);
x402 = (x38)+(x398);
x403 = (x402)<(x38);
x404 = (x403)+(x39);
x405 = (x404)+(x401);
x406 = (x44)+(x402);
x407 = (x406)<(x44);
x408 = (x407)+(x45);
x409 = (x408)+(x405);
x410 = (x56)+(x406);
x411 = (x410)<(x56);
x412 = (x411)+(x57);
x413 = (x412)+(x409);
x414 = (x66)+(x410);
x415 = (x414)<(x66);
x416 = (x415)+(x67);
x417 = (x416)+(x413);
x418 = (x102)+(x414);
x419 = (x418)<(x102);
x420 = (x419)+(x103);
x421 = (x420)+(x417);
x422 = (x110)+(x418);
x423 = (x422)<(x110);
x424 = (x423)+(x111);
x425 = (x424)+(x421);
x426 = (x118)+(x422);
x427 = (x426)<(x118);
x428 = (x427)+(x119);
x429 = (x428)+(x425);
x430 = (x126)+(x426);
x431 = (x430)<(x126);
x432 = (x431)+(x127);
x433 = (x432)+(x429);
x434 = (x132)+(x430);
x435 = (x434)<(x132);
x436 = (x435)+(x133);
x437 = (x436)+(x433);
x438 = (x136)+(x434);
x439 = (x438)<(x136);
x440 = (x439)+(x137);
x441 = (x440)+(x437);
x442 = (x138)+(x438);
x443 = (x442)<(x138);
x444 = (x443)+(x139);
x445 = (x444)+(x441);
x446 = (x158)+(x442);
x447 = (x446)<(x158);
x448 = (x447)+(x159);
x449 = (x448)+(x445);
x450 = (x166)+(x446);
x451 = (x450)<(x166);
x452 = (x451)+(x167);
x453 = (x452)+(x449);
x454 = (x176)+(x450);
x455 = (x454)<(x176);
x456 = (x455)+(x177);
x457 = (x456)+(x453);
x458 = (x188)+(x454);
x459 = (x458)<(x188);
x460 = (x459)+(x189);
x461 = (x460)+(x457);
x462 = (x202)+(x458);
x463 = (x462)<(x202);
x464 = (x463)+(x203);
x465 = (x464)+(x461);
x466 = (x48)+(x16);
x467 = (x466)<(x48);
x468 = (x467)+(x49);
x469 = (x468)+(x17);
x470 = (x60)+(x466);
x471 = (x470)<(x60);
x472 = (x471)+(x61);
x473 = (x472)+(x469);
x474 = (x70)+(x470);
x475 = (x474)<(x70);
x476 = (x475)+(x71);
x477 = (x476)+(x473);
x478 = (x78)+(x474);
x479 = (x478)<(x78);
x480 = (x479)+(x79);
x481 = (x480)+(x477);
x482 = (x84)+(x478);
x483 = (x482)<(x84);
x484 = (x483)+(x85);
x485 = (x484)+(x481);
x486 = (x180)+(x482);
x487 = (x486)<(x180);
x488 = (x487)+(x181);
x489 = (x488)+(x485);
x490 = (x192)+(x486);
x491 = (x490)<(x192);
x492 = (x491)+(x193);
x493 = (x492)+(x489);
x494 = (x206)+(x490);
x495 = (x494)<(x206);
x496 = (x495)+(x207);
x497 = (x496)+(x493);
x498 = (x22)+(x18);
x499 = (x498)<(x22);
x500 = (x499)+(x23);
x501 = (x500)+(x19);
x502 = (x50)+(x498);
x503 = (x502)<(x50);
x504 = (x503)+(x51);
x505 = (x504)+(x501);
x506 = (x62)+(x502);
x507 = (x506)<(x62);
x508 = (x507)+(x63);
x509 = (x508)+(x505);
x510 = (x72)+(x506);
x511 = (x510)<(x72);
x512 = (x511)+(x73);
x513 = (x512)+(x509);
x514 = (x80)+(x510);
x515 = (x514)<(x80);
x516 = (x515)+(x81);
x517 = (x516)+(x513);
x518 = (x86)+(x514);
x519 = (x518)<(x86);
x520 = (x519)+(x87);
x521 = (x520)+(x517);
x522 = (x90)+(x518);
x523 = (x522)<(x90);
x524 = (x523)+(x91);
x525 = (x524)+(x521);
x526 = (x194)+(x522);
x527 = (x526)<(x194);
x528 = (x527)+(x195);
x529 = (x528)+(x525);
x530 = (x208)+(x526);
x531 = (x530)<(x208);
x532 = (x531)+(x209);
x533 = (x532)+(x529);
x534 = (x24)+(x20);
x535 = (x534)<(x24);
x536 = (x535)+(x25);
x537 = (x536)+(x21);
x538 = (x26)+(x534);
x539 = (x538)<(x26);
x540 = (x539)+(x27);
x541 = (x540)+(x537);
x542 = (x52)+(x538);
x543 = (x542)<(x52);
x544 = (x543)+(x53);
x545 = (x544)+(x541);
x546 = (x64)+(x542);
x547 = (x546)<(x64);
x548 = (x547)+(x65);
x549 = (x548)+(x545);
x550 = (x74)+(x546);
x551 = (x550)<(x74);
x552 = (x551)+(x75);
x553 = (x552)+(x549);
x554 = (x82)+(x550);
x555 = (x554)<(x82);
x556 = (x555)+(x83);
x557 = (x556)+(x553);
x558 = (x88)+(x554);
x559 = (x558)<(x88);
x560 = (x559)+(x89);
x561 = (x560)+(x557);
x562 = (x92)+(x558);
x563 = (x562)<(x92);
x564 = (x563)+(x93);
x565 = (x564)+(x561);
x566 = (x94)+(x562);
x567 = (x566)<(x94);
x568 = (x567)+(x95);
x569 = (x568)+(x565);
x570 = (x210)+(x566);
x571 = (x570)<(x210);
x572 = (x571)+(x211);
x573 = (x572)+(x569);
x574 = (x240)+(x462);
x575 = (x574)<(x240);
x576 = (x575)+(x465);
x577 = ((x282)>>((uintptr_t)56ULL))|((x285)<<((uintptr_t)8ULL));
x578 = (x282)&((uintptr_t)72057594037927935ULL);
x579 = (x574)+(x577);
x580 = (x579)<(x574);
x581 = (x580)+(x576);
x582 = ((x579)>>((uintptr_t)56ULL))|((x581)<<((uintptr_t)8ULL));
x583 = (x579)&((uintptr_t)72057594037927935ULL);
x584 = (x570)+(x577);
x585 = (x584)<(x570);
x586 = (x585)+(x573);
x587 = (x582)+(x394);
x588 = (x587)<(x582);
x589 = (x588)+(x397);
x590 = ((x584)>>((uintptr_t)56ULL))|((x586)<<((uintptr_t)8ULL));
x591 = (x584)&((uintptr_t)72057594037927935ULL);
x592 = (x590)+(x530);
x593 = (x592)<(x590);
x594 = (x593)+(x533);
x595 = ((x587)>>((uintptr_t)56ULL))|((x589)<<((uintptr_t)8ULL));
x596 = (x587)&((uintptr_t)72057594037927935ULL);
x597 = (x595)+(x334);
x598 = (x597)<(x595);
x599 = (x598)+(x337);
x600 = ((x592)>>((uintptr_t)56ULL))|((x594)<<((uintptr_t)8ULL));
x601 = (x592)&((uintptr_t)72057594037927935ULL);
x602 = (x600)+(x494);
x603 = (x602)<(x600);
x604 = (x603)+(x497);
x605 = ((x597)>>((uintptr_t)56ULL))|((x599)<<((uintptr_t)8ULL));
x606 = (x597)&((uintptr_t)72057594037927935ULL);
x607 = (x605)+(x578);
x608 = ((x602)>>((uintptr_t)56ULL))|((x604)<<((uintptr_t)8ULL));
x609 = (x602)&((uintptr_t)72057594037927935ULL);
x610 = (x608)+(x241);
x611 = (x607)>>((uintptr_t)56ULL);
x612 = (x607)&((uintptr_t)72057594037927935ULL);
x613 = (x610)>>((uintptr_t)56ULL);
x614 = (x610)&((uintptr_t)72057594037927935ULL);
x615 = (x583)+(x611);
x616 = (x591)+(x611);
x617 = (x613)+(x615);
x618 = (x617)>>((uintptr_t)56ULL);
x619 = (x617)&((uintptr_t)72057594037927935ULL);
x620 = (x618)+(x596);
x621 = (x616)>>((uintptr_t)56ULL);
x622 = (x616)&((uintptr_t)72057594037927935ULL);
x623 = (x621)+(x601);
x624 = x622;
x625 = x623;
x626 = x609;
x627 = x614;
x628 = x619;
x629 = x620;
x630 = x606;
x631 = x612;
/*skip*/
_br2_store((out0)+((uintptr_t)0ULL), x624, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)8ULL), x625, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)16ULL), x626, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)24ULL), x627, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)32ULL), x628, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)40ULL), x629, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)48ULL), x630, sizeof(uintptr_t));
_br2_store((out0)+((uintptr_t)56ULL), x631, sizeof(uintptr_t));
/*skip*/
return;
}
/* NOTE: The following wrapper function is not covered by Coq proofs */
static void fiat_p448_carry_mul(uint64_t out1[8], const uint64_t arg1[8], const uint64_t arg2[8]) {
internal_fiat_p448_carry_mul((uintptr_t)out1, (uintptr_t)arg1, (uintptr_t)arg2);
}
/*
* Input Bounds:
* in0: [[0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000], [0x0 ~> 0x300000000000000]]
* Output Bounds:
* out0: [[0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000], [0x0 ~> 0x100000000000000]]
*/
static
void internal_fiat_p448_carry_square(uintptr_t out0, uintptr_t in0) {
uintptr_t x8, x13, x7, x9, x6, x14, x19, x5, x18, x24, x4, x23, x21, x20, x3, x16, x15, x2, x11, x10, x1, x12, x17, x22, x25, x26, x27, x28, x0, x53, x61, x142, x62, x143, x54, x141, x121, x146, x122, x147, x144, x145, x133, x150, x134, x151, x148, x152, x149, x55, x63, x156, x64, x157, x56, x155, x89, x160, x90, x161, x158, x159, x101, x164, x102, x165, x162, x163, x113, x168, x114, x169, x166, x167, x125, x172, x126, x173, x170, x37, x45, x176, x46, x177, x38, x175, x59, x180, x60, x181, x178, x179, x67, x184, x68, x185, x182, x183, x79, x188, x80, x189, x186, x187, x91, x192, x92, x193, x190, x191, x103, x196, x104, x197, x194, x195, x115, x200, x116, x201, x198, x199, x127, x204, x128, x205, x202, x39, x47, x208, x48, x209, x40, x207, x71, x212, x72, x213, x210, x211, x83, x216, x84, x217, x214, x215, x95, x220, x96, x221, x218, x219, x105, x224, x106, x225, x222, x223, x117, x228, x118, x229, x226, x227, x129, x232, x130, x233, x230, x41, x43, x236, x44, x237, x42, x235, x49, x240, x50, x241, x238, x239, x51, x244, x52, x245, x242, x243, x75, x248, x76, x249, x246, x247, x87, x252, x88, x253, x250, x251, x99, x256, x100, x257, x254, x255, x107, x260, x108, x261, x258, x259, x111, x264, x112, x265, x262, x263, x119, x268, x120, x269, x266, x267, x131, x272, x132, x273, x270, x29, x57, x276, x58, x277, x30, x275, x65, x280, x66, x281, x278, x279, x77, x284, x78, x285, x282, x283, x123, x288, x124, x289, x286, x287, x135, x292, x136, x293, x290, x31, x69, x296, x70, x297, x32, x295, x81, x300, x82, x301, x298, x299, x93, x304, x94, x305, x302, x303, x137, x308, x138, x309, x306, x33, x35, x312, x36, x313, x34, x311, x73, x316, x74, x317, x314, x315, x85, x320, x86, x321, x318, x319, x97, x324, x98, x325, x322, x323, x109, x328, x110, x329, x326, x327, x139, x332, x140, x333, x330, x271, x153, x336, x274, x174, x171, x335, x341, x337, x342, x340, x338, x331, x346, x334, x231, x343, x349, x234, x347, x345, x307, x351, x354, x310, x350, x348, x203, x356, x359, x206, x355, x353, x291, x361, x364, x294, x360, x358, x366, x339, x365, x363, x369, x154, x368, x371, x344, x352, x372, x374, x376, x378, x379, x357, x377, x382, x362, x383, x384, x370, x375, x380, x381, x367, x373, x385, x386, x387, x388, x389, x390, x391, x392;
x0 = _br2_load((in0)+((uintptr_t)0ULL), sizeof(uintptr_t));
x1 = _br2_load((in0)+((uintptr_t)8ULL), sizeof(uintptr_t));
x2 = _br2_load((in0)+((uintptr_t)16ULL), sizeof(uintptr_t));
x3 = _br2_load((in0)+((uintptr_t)24ULL), sizeof(uintptr_t));
x4 = _br2_load((in0)+((uintptr_t)32ULL), sizeof(uintptr_t));
x5 = _br2_load((in0)+((uintptr_t)40ULL), sizeof(uintptr_t));
x6 = _br2_load((in0)+((uintptr_t)48ULL), sizeof(uintptr_t));
x7 = _br2_load((in0)+((uintptr_t)56ULL), sizeof(uintptr_t));
/*skip*/
/*skip*/
x8 = x7;
x9 = x7;
x10 = (x8)*((uintptr_t)2ULL);
x11 = (x9)*((uintptr_t)2ULL);
x12 = (x7)*((uintptr_t)2ULL);
x13 = x6;
x14 = x6;
x15 = (x13)*((uintptr_t)2ULL);
x16 = (x14)*((uintptr_t)2ULL);
x17 = (x6)*((uintptr_t)2ULL);
x18 = x5;
x19 = x5;
x20 = (x18)*((uintptr_t)2ULL);
x21 = (x19)*((uintptr_t)2ULL);
x22 = (x5)*((uintptr_t)2ULL);
x23 = x4;
x24 = x4;
x25 = (x4)*((uintptr_t)2ULL);
x26 = (x3)*((uintptr_t)2ULL);
x27 = (x2)*((uintptr_t)2ULL);
x28 = (x1)*((uintptr_t)2ULL);
x29 = (x7)*(x8);
x30 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x8))>>32 : ((__uint128_t)(x7)*(x8))>>64;
x31 = (x6)*(x10);
x32 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x10))>>32 : ((__uint128_t)(x6)*(x10))>>64;
x33 = (x6)*(x13);
x34 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x13))>>32 : ((__uint128_t)(x6)*(x13))>>64;
x35 = (x5)*(x10);
x36 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x10))>>32 : ((__uint128_t)(x5)*(x10))>>64;
x37 = (x7)*(x8);
x38 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x8))>>32 : ((__uint128_t)(x7)*(x8))>>64;
x39 = (x6)*(x10);
x40 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x10))>>32 : ((__uint128_t)(x6)*(x10))>>64;
x41 = (x6)*(x13);
x42 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x13))>>32 : ((__uint128_t)(x6)*(x13))>>64;
x43 = (x5)*(x10);
x44 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x10))>>32 : ((__uint128_t)(x5)*(x10))>>64;
x45 = (x7)*(x9);
x46 = sizeof(intptr_t) == 4 ? ((uint64_t)(x7)*(x9))>>32 : ((__uint128_t)(x7)*(x9))>>64;
x47 = (x6)*(x11);
x48 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x11))>>32 : ((__uint128_t)(x6)*(x11))>>64;
x49 = (x6)*(x14);
x50 = sizeof(intptr_t) == 4 ? ((uint64_t)(x6)*(x14))>>32 : ((__uint128_t)(x6)*(x14))>>64;
x51 = (x5)*(x11);
x52 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x11))>>32 : ((__uint128_t)(x5)*(x11))>>64;
x53 = (x5)*(x16);
x54 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x16))>>32 : ((__uint128_t)(x5)*(x16))>>64;
x55 = (x5)*(x15);
x56 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x15))>>32 : ((__uint128_t)(x5)*(x15))>>64;
x57 = (x5)*(x19);
x58 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x19))>>32 : ((__uint128_t)(x5)*(x19))>>64;
x59 = (x5)*(x18);
x60 = sizeof(intptr_t) == 4 ? ((uint64_t)(x5)*(x18))>>32 : ((__uint128_t)(x5)*(x18))>>64;
x61 = (x4)*(x11);
x62 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x11))>>32 : ((__uint128_t)(x4)*(x11))>>64;
x63 = (x4)*(x10);
x64 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x10))>>32 : ((__uint128_t)(x4)*(x10))>>64;
x65 = (x4)*(x16);
x66 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x16))>>32 : ((__uint128_t)(x4)*(x16))>>64;
x67 = (x4)*(x15);
x68 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x15))>>32 : ((__uint128_t)(x4)*(x15))>>64;
x69 = (x4)*(x21);
x70 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x21))>>32 : ((__uint128_t)(x4)*(x21))>>64;
x71 = (x4)*(x20);
x72 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x20))>>32 : ((__uint128_t)(x4)*(x20))>>64;
x73 = (x4)*(x24);
x74 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x24))>>32 : ((__uint128_t)(x4)*(x24))>>64;
x75 = (x4)*(x23);
x76 = sizeof(intptr_t) == 4 ? ((uint64_t)(x4)*(x23))>>32 : ((__uint128_t)(x4)*(x23))>>64;
x77 = (x3)*(x11);
x78 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x11))>>32 : ((__uint128_t)(x3)*(x11))>>64;
x79 = (x3)*(x10);
x80 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x10))>>32 : ((__uint128_t)(x3)*(x10))>>64;
x81 = (x3)*(x16);
x82 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x16))>>32 : ((__uint128_t)(x3)*(x16))>>64;
x83 = (x3)*(x15);
x84 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x15))>>32 : ((__uint128_t)(x3)*(x15))>>64;
x85 = (x3)*(x21);
x86 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x21))>>32 : ((__uint128_t)(x3)*(x21))>>64;
x87 = (x3)*(x20);
x88 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x20))>>32 : ((__uint128_t)(x3)*(x20))>>64;
x89 = (x3)*(x25);
x90 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x25))>>32 : ((__uint128_t)(x3)*(x25))>>64;
x91 = (x3)*(x3);
x92 = sizeof(intptr_t) == 4 ? ((uint64_t)(x3)*(x3))>>32 : ((__uint128_t)(x3)*(x3))>>64;
x93 = (x2)*(x11);
x94 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x11))>>32 : ((__uint128_t)(x2)*(x11))>>64;
x95 = (x2)*(x10);
x96 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x10))>>32 : ((__uint128_t)(x2)*(x10))>>64;
x97 = (x2)*(x16);
x98 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x16))>>32 : ((__uint128_t)(x2)*(x16))>>64;
x99 = (x2)*(x15);
x100 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x15))>>32 : ((__uint128_t)(x2)*(x15))>>64;
x101 = (x2)*(x22);
x102 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x22))>>32 : ((__uint128_t)(x2)*(x22))>>64;
x103 = (x2)*(x25);
x104 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x25))>>32 : ((__uint128_t)(x2)*(x25))>>64;
x105 = (x2)*(x26);
x106 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x26))>>32 : ((__uint128_t)(x2)*(x26))>>64;
x107 = (x2)*(x2);
x108 = sizeof(intptr_t) == 4 ? ((uint64_t)(x2)*(x2))>>32 : ((__uint128_t)(x2)*(x2))>>64;
x109 = (x1)*(x11);
x110 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x11))>>32 : ((__uint128_t)(x1)*(x11))>>64;
x111 = (x1)*(x10);
x112 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x10))>>32 : ((__uint128_t)(x1)*(x10))>>64;
x113 = (x1)*(x17);
x114 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x17))>>32 : ((__uint128_t)(x1)*(x17))>>64;
x115 = (x1)*(x22);
x116 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x22))>>32 : ((__uint128_t)(x1)*(x22))>>64;
x117 = (x1)*(x25);
x118 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x25))>>32 : ((__uint128_t)(x1)*(x25))>>64;
x119 = (x1)*(x26);
x120 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x26))>>32 : ((__uint128_t)(x1)*(x26))>>64;
x121 = (x1)*(x27);
x122 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x27))>>32 : ((__uint128_t)(x1)*(x27))>>64;
x123 = (x1)*(x1);
x124 = sizeof(intptr_t) == 4 ? ((uint64_t)(x1)*(x1))>>32 : ((__uint128_t)(x1)*(x1))>>64;
x125 = (x0)*(x12);
x126 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x12))>>32 : ((__uint128_t)(x0)*(x12))>>64;
x127 = (x0)*(x17);
x128 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x17))>>32 : ((__uint128_t)(x0)*(x17))>>64;
x129 = (x0)*(x22);
x130 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x22))>>32 : ((__uint128_t)(x0)*(x22))>>64;
x131 = (x0)*(x25);
x132 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x25))>>32 : ((__uint128_t)(x0)*(x25))>>64;
x133 = (x0)*(x26);
x134 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x26))>>32 : ((__uint128_t)(x0)*(x26))>>64;
x135 = (x0)*(x27);
x136 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x27))>>32 : ((__uint128_t)(x0)*(x27))>>64;
x137 = (x0)*(x28);
x138 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x28))>>32 : ((__uint128_t)(x0)*(x28))>>64;
x139 = (x0)*(x0);
x140 = sizeof(intptr_t) == 4 ? ((uint64_t)(x0)*(x0))>>32 : ((__uint128_t)(x0)*(x0))>>64;
x141 = (x61)+(x53);
x142 = (x141)<(x61);
x143 = (x142)+(x62);
x144 = (x143)+(x54);
x145 = (x121)+(x141);
x146 = (x145)<(x121);
x147 = (x146)+(x122);
x148 = (x147)+(x144);
x149 = (x133)+(x145);
x150 = (x149)<(x133);
x151 = (x150)+(x134);
x152 = (x151)+(x148);
x153 = ((x149)>>((uintptr_t)56ULL))|((x152)<<((uintptr_t)8ULL));
x154 = (x149)&((uintptr_t)72057594037927935ULL);
x155 = (x63)+(x55);
x156 = (x155)<(x63);
x157 = (x156)+(x64);
x158 = (x157)+(x56);
x159 = (x89)+(x155);
x160 = (x159)<(x89);
x161 = (x160)+(x90);
x162 = (x161)+(x158);
x163 = (x101)+(x159);
x164 = (x163)<(x101);
x165 = (x164)+(x102);
x166 = (x165)+(x162);
x167 = (x113)+(x163);
x168 = (x167)<(x113);
x169 = (x168)+(x114);
x170 = (x169)+(x166);
x171 = (x125)+(x167);
x172 = (x171)<(x125);
x173 = (x172)+(x126);
x174 = (x173)+(x170);
x175 = (x45)+(x37);
x176 = (x175)<(x45);
x177 = (x176)+(x46);
x178 = (x177)+(x38);
x179 = (x59)+(x175);
x180 = (x179)<(x59);
x181 = (x180)+(x60);
x182 = (x181)+(x178);
x183 = (x67)+(x179);
x184 = (x183)<(x67);
x185 = (x184)+(x68);
x186 = (x185)+(x182);
x187 = (x79)+(x183);
x188 = (x187)<(x79);
x189 = (x188)+(x80);
x190 = (x189)+(x186);
x191 = (x91)+(x187);
x192 = (x191)<(x91);
x193 = (x192)+(x92);
x194 = (x193)+(x190);
x195 = (x103)+(x191);
x196 = (x195)<(x103);
x197 = (x196)+(x104);
x198 = (x197)+(x194);
x199 = (x115)+(x195);
x200 = (x199)<(x115);
x201 = (x200)+(x116);
x202 = (x201)+(x198);
x203 = (x127)+(x199);
x204 = (x203)<(x127);
x205 = (x204)+(x128);
x206 = (x205)+(x202);
x207 = (x47)+(x39);
x208 = (x207)<(x47);
x209 = (x208)+(x48);
x210 = (x209)+(x40);
x211 = (x71)+(x207);
x212 = (x211)<(x71);
x213 = (x212)+(x72);
x214 = (x213)+(x210);
x215 = (x83)+(x211);
x216 = (x215)<(x83);
x217 = (x216)+(x84);
x218 = (x217)+(x214);
x219 = (x95)+(x215);
x220 = (x219)<(x95);
x221 = (x220)+(x96);
x222 = (x221)+(x218);
x223 = (x105)+(x219);
x224 = (x223)<(x105);
x225 = (x224)+(x106);
x226 = (x225)+(x222);
x227 = (x117)+(x223);
x228 = (x227)<(x117);
x229 = (x228)+(x118);
x230 = (x229)+(x226);
x231 = (x129)+(x227);
x232 = (x231)<(x129);
x233 = (x232)+(x130);
x234 = (x233)+(x230);
x235 = (x43)+(x41);
x236 = (x235)<(x43);
x237 = (x236)+(x44);
x238 = (x237)+(x42);
x239 = (x49)+(x235);
x240 = (x239)<(x49);
x241 = (x240)+(x50);
x242 = (x241)+(x238);
x243 = (x51)+(x239);
x244 = (x243)<(x51);
x245 = (x244)+(x52);
x246 = (x245)+(x242);
x247 = (x75)+(x243);
x248 = (x247)<(x75);
x249 = (x248)+(x76);
x250 = (x249)+(x246);
x251 = (x87)+(x247);
x252 = (x251)<(x87);
x253 = (x252)+(x88);
x254 = (x253)+(x250);
x255 = (x99)+(x251);
x256 = (x255)<(x99);
x257 = (x256)+(x100);
x258 = (x257)+(x254);
x259 = (x107)+(x255);
x260 = (x259)<(x107);
x261 = (x260)+(x108);
x262 = (x261)+(x258);
x263 = (x111)+(x259);
x264 = (x263)<(x111);
x265 = (x264)+(x112);
x266 = (x265)+(x262);
x267 = (x119)+(x263);
x268 = (x267)<(x119);
x269 = (x268)+(x120);
x270 = (x269)+(x266);
x271 = (x131)+(x267);
x272 = (x271)<(x131);
x273 = (x272)+(x132);
x274 = (x273)+(x270);
x275 = (x57)+(x29);
x276 = (x275)<(x57);
x277 = (x276)+(x58);
x278 = (x277)+(x30);
x279 = (x65)+(x275);
x280 = (x279)<(x65);
x281 = (x280)+(x66);
x282 = (x281)+(x278);
x283 = (x77)+(x279);
x284 = (x283)<(x77);
x285 = (x284)+(x78);
x286 = (x285)+(x282);
x287 = (x123)+(x283);
x288 = (x287)<(x123);
x289 = (x288)+(x124);
x290 = (x289)+(x286);
x291 = (x135)+(x287);
x292 = (x291)<(x135);
x293 = (x292)+(x136);