// ************************************************************************** // // // // eses eses // // eses eses // // eses eseses esesese eses Embedded Systems Group // // ese ese ese ese ese // // ese eseseses eseseses ese Department of Computer Science // // eses eses ese eses // // eses eseses eseseses eses University of Kaiserslautern // // eses eses // // // // ************************************************************************** // [11]nat x; [11]nat y; [22]nat p; thread RadixBMulDadda { nat t0,t1,t10,t100,t1000,t1001,t1002,t1003,t1004,t1005,t1006,t1007,t1008,t1009,t101,t1010,t1011,t1012,t1013,t1014,t1015,t1016,t1017,t1018,t1019,t102,t1020,t1021,t1022,t1023,t1024,t1025,t1026,t1027,t1028,t1029,t103,t1030,t1031,t1032,t1033,t1034,t1035,t1036,t1037,t1038,t104,t105,t106,t107,t108,t109,t11,t110,t111,t112,t113,t114,t115,t116,t117,t118,t119,t12,t120,t121,t122,t123,t124,t125,t126,t127,t128,t129,t13,t130,t131,t132,t133,t134,t135,t136,t137,t138,t139,t14,t140,t141,t142,t143,t144,t145,t146,t147,t148,t149,t15,t150,t151,t152,t153,t154,t155,t156,t157,t158,t159,t16,t160,t161,t162,t163,t164,t165,t166,t167,t168,t169,t17,t170,t171,t172,t173,t174,t175,t176,t177,t178,t179,t18,t180,t181,t182,t183,t184,t185,t186,t187,t188,t189,t19,t190,t191,t192,t193,t194,t195,t196,t197,t198,t199,t2,t20,t200,t201,t202,t203,t204,t205,t206,t207,t208,t209,t21,t210,t211,t212,t213,t214,t215,t216,t217,t218,t219,t22,t220,t221,t222,t223,t224,t225,t226,t227,t228,t229,t23,t230,t231,t232,t233,t234,t235,t236,t237,t238,t239,t24,t240,t241,t242,t243,t244,t245,t246,t247,t248,t249,t25,t250,t251,t252,t253,t254,t255,t256,t257,t258,t259,t26,t260,t261,t262,t263,t264,t265,t266,t267,t268,t269,t27,t270,t271,t272,t273,t274,t275,t276,t277,t278,t279,t28,t280,t281,t282,t283,t284,t285,t286,t287,t288,t289,t29,t290,t291,t292,t293,t294,t295,t296,t297,t298,t299,t3,t30,t300,t301,t302,t303,t304,t305,t306,t307,t308,t309,t31,t310,t311,t312,t313,t314,t315,t316,t317,t318,t319,t32,t320,t321,t322,t323,t324,t325,t326,t327,t328,t329,t33,t330,t331,t332,t333,t334,t335,t336,t337,t338,t339,t34,t340,t341,t342,t343,t344,t345,t346,t347,t348,t349,t35,t350,t351,t352,t353,t354,t355,t356,t357,t358,t359,t36,t360,t361,t362,t363,t364,t365,t366,t367,t368,t369,t37,t370,t371,t372,t373,t374,t375,t376,t377,t378,t379,t38,t380,t381,t382,t383,t384,t385,t386,t387,t388,t389,t39,t390,t391,t392,t393,t394,t395,t396,t397,t398,t399,t4,t40,t400,t401,t402,t403,t404,t405,t406,t407,t408,t409,t41,t410,t411,t412,t413,t414,t415,t416,t417,t418,t419,t42,t420,t421,t422,t423,t424,t425,t426,t427,t428,t429,t43,t430,t431,t432,t433,t434,t435,t436,t437,t438,t439,t44,t440,t441,t442,t443,t444,t445,t446,t447,t448,t449,t45,t450,t451,t452,t453,t454,t455,t456,t457,t458,t459,t46,t460,t461,t462,t463,t464,t465,t466,t467,t468,t469,t47,t470,t471,t472,t473,t474,t475,t476,t477,t478,t479,t48,t480,t481,t482,t483,t484,t485,t486,t487,t488,t489,t49,t490,t491,t492,t493,t494,t495,t496,t497,t498,t499,t5,t50,t500,t501,t502,t503,t504,t505,t506,t507,t508,t509,t51,t510,t511,t512,t513,t514,t515,t516,t517,t518,t519,t52,t520,t521,t522,t523,t524,t525,t526,t527,t528,t529,t53,t530,t531,t532,t533,t534,t535,t536,t537,t538,t539,t54,t540,t541,t542,t543,t544,t545,t546,t547,t548,t549,t55,t550,t551,t552,t553,t554,t555,t556,t557,t558,t559,t56,t560,t561,t562,t563,t564,t565,t566,t567,t568,t569,t57,t570,t571,t572,t573,t574,t575,t576,t577,t578,t579,t58,t580,t581,t582,t583,t584,t585,t586,t587,t588,t589,t59,t590,t591,t592,t593,t594,t595,t596,t597,t598,t599,t6,t60,t600,t601,t602,t603,t604,t605,t606,t607,t608,t609,t61,t610,t611,t612,t613,t614,t615,t616,t617,t618,t619,t62,t620,t621,t622,t623,t624,t625,t626,t627,t628,t629,t63,t630,t631,t632,t633,t634,t635,t636,t637,t638,t639,t64,t640,t641,t642,t643,t644,t645,t646,t647,t648,t649,t65,t650,t651,t652,t653,t654,t655,t656,t657,t658,t659,t66,t660,t661,t662,t663,t664,t665,t666,t667,t668,t669,t67,t670,t671,t672,t673,t674,t675,t676,t677,t678,t679,t68,t680,t681,t682,t683,t684,t685,t686,t687,t688,t689,t69,t690,t691,t692,t693,t694,t695,t696,t697,t698,t699,t7,t70,t700,t701,t702,t703,t704,t705,t706,t707,t708,t709,t71,t710,t711,t712,t713,t714,t715,t716,t717,t718,t719,t72,t720,t721,t722,t723,t724,t725,t726,t727,t728,t729,t73,t730,t731,t732,t733,t734,t735,t736,t737,t738,t739,t74,t740,t741,t742,t743,t744,t745,t746,t747,t748,t749,t75,t750,t751,t752,t753,t754,t755,t756,t757,t758,t759,t76,t760,t761,t762,t763,t764,t765,t766,t767,t768,t769,t77,t770,t771,t772,t773,t774,t775,t776,t777,t778,t779,t78,t780,t781,t782,t783,t784,t785,t786,t787,t788,t789,t79,t790,t791,t792,t793,t794,t795,t796,t797,t798,t799,t8,t80,t800,t801,t802,t803,t804,t805,t806,t807,t808,t809,t81,t810,t811,t812,t813,t814,t815,t816,t817,t818,t819,t82,t820,t821,t822,t823,t824,t825,t826,t827,t828,t829,t83,t830,t831,t832,t833,t834,t835,t836,t837,t838,t839,t84,t840,t841,t842,t843,t844,t845,t846,t847,t848,t849,t85,t850,t851,t852,t853,t854,t855,t856,t857,t858,t859,t86,t860,t861,t862,t863,t864,t865,t866,t867,t868,t869,t87,t870,t871,t872,t873,t874,t875,t876,t877,t878,t879,t88,t880,t881,t882,t883,t884,t885,t886,t887,t888,t889,t89,t890,t891,t892,t893,t894,t895,t896,t897,t898,t899,t9,t90,t900,t901,t902,t903,t904,t905,t906,t907,t908,t909,t91,t910,t911,t912,t913,t914,t915,t916,t917,t918,t919,t92,t920,t921,t922,t923,t924,t925,t926,t927,t928,t929,t93,t930,t931,t932,t933,t934,t935,t936,t937,t938,t939,t94,t940,t941,t942,t943,t944,t945,t946,t947,t948,t949,t95,t950,t951,t952,t953,t954,t955,t956,t957,t958,t959,t96,t960,t961,t962,t963,t964,t965,t966,t967,t968,t969,t97,t970,t971,t972,t973,t974,t975,t976,t977,t978,t979,t98,t980,t981,t982,t983,t984,t985,t986,t987,t988,t989,t99,t990,t991,t992,t993,t994,t995,t996,t997,t998,t999; bool t1039,t1040,t1041,t1042,t1043,t1044,t1045,t1046,t1047,t1048,t1049,t1050,t1051,t1052,t1053,t1054,t1055,t1056,t1057,t1058,t1059,t1060,t1061,t1062,t1063,t1064,t1065,t1066,t1067,t1068,t1069,t1070,t1071,t1072,t1073,t1074,t1075,t1076,t1077,t1078,t1079,t1080; t0 = x[0]; t1 = x[1]; t2 = x[2]; t3 = x[3]; t4 = x[4]; t5 = x[5]; t6 = x[6]; t7 = x[7]; t8 = x[8]; t9 = x[9]; t10 = x[10]; t11 = y[0]; t12 = y[1]; t13 = y[2]; t14 = y[3]; t15 = y[4]; t16 = y[5]; t17 = y[6]; t18 = y[7]; t19 = y[8]; t20 = y[9]; t21 = y[10]; // compute partial products t22 = t0 * t11; t23 = t22 / 256; t24 = t22 % 256; t25 = t0 * t12; t26 = t25 / 256; t27 = t25 % 256; t28 = t1 * t11; t29 = t28 / 256; t30 = t28 % 256; t31 = t0 * t13; t32 = t31 / 256; t33 = t31 % 256; t34 = t1 * t12; t35 = t34 / 256; t36 = t34 % 256; t37 = t2 * t11; t38 = t37 / 256; t39 = t37 % 256; t40 = t0 * t14; t41 = t40 / 256; t42 = t40 % 256; t43 = t1 * t13; t44 = t43 / 256; t45 = t43 % 256; t46 = t2 * t12; t47 = t46 / 256; t48 = t46 % 256; t49 = t3 * t11; t50 = t49 / 256; t51 = t49 % 256; t52 = t0 * t15; t53 = t52 / 256; t54 = t52 % 256; t55 = t1 * t14; t56 = t55 / 256; t57 = t55 % 256; t58 = t2 * t13; t59 = t58 / 256; t60 = t58 % 256; t61 = t3 * t12; t62 = t61 / 256; t63 = t61 % 256; t64 = t4 * t11; t65 = t64 / 256; t66 = t64 % 256; t67 = t0 * t16; t68 = t67 / 256; t69 = t67 % 256; t70 = t1 * t15; t71 = t70 / 256; t72 = t70 % 256; t73 = t2 * t14; t74 = t73 / 256; t75 = t73 % 256; t76 = t3 * t13; t77 = t76 / 256; t78 = t76 % 256; t79 = t4 * t12; t80 = t79 / 256; t81 = t79 % 256; t82 = t5 * t11; t83 = t82 / 256; t84 = t82 % 256; t85 = t0 * t17; t86 = t85 / 256; t87 = t85 % 256; t88 = t1 * t16; t89 = t88 / 256; t90 = t88 % 256; t91 = t2 * t15; t92 = t91 / 256; t93 = t91 % 256; t94 = t3 * t14; t95 = t94 / 256; t96 = t94 % 256; t97 = t4 * t13; t98 = t97 / 256; t99 = t97 % 256; t100 = t5 * t12; t101 = t100 / 256; t102 = t100 % 256; t103 = t6 * t11; t104 = t103 / 256; t105 = t103 % 256; t106 = t0 * t18; t107 = t106 / 256; t108 = t106 % 256; t109 = t1 * t17; t110 = t109 / 256; t111 = t109 % 256; t112 = t2 * t16; t113 = t112 / 256; t114 = t112 % 256; t115 = t3 * t15; t116 = t115 / 256; t117 = t115 % 256; t118 = t4 * t14; t119 = t118 / 256; t120 = t118 % 256; t121 = t5 * t13; t122 = t121 / 256; t123 = t121 % 256; t124 = t6 * t12; t125 = t124 / 256; t126 = t124 % 256; t127 = t7 * t11; t128 = t127 / 256; t129 = t127 % 256; t130 = t0 * t19; t131 = t130 / 256; t132 = t130 % 256; t133 = t1 * t18; t134 = t133 / 256; t135 = t133 % 256; t136 = t2 * t17; t137 = t136 / 256; t138 = t136 % 256; t139 = t3 * t16; t140 = t139 / 256; t141 = t139 % 256; t142 = t4 * t15; t143 = t142 / 256; t144 = t142 % 256; t145 = t5 * t14; t146 = t145 / 256; t147 = t145 % 256; t148 = t6 * t13; t149 = t148 / 256; t150 = t148 % 256; t151 = t7 * t12; t152 = t151 / 256; t153 = t151 % 256; t154 = t8 * t11; t155 = t154 / 256; t156 = t154 % 256; t157 = t0 * t20; t158 = t157 / 256; t159 = t157 % 256; t160 = t1 * t19; t161 = t160 / 256; t162 = t160 % 256; t163 = t2 * t18; t164 = t163 / 256; t165 = t163 % 256; t166 = t3 * t17; t167 = t166 / 256; t168 = t166 % 256; t169 = t4 * t16; t170 = t169 / 256; t171 = t169 % 256; t172 = t5 * t15; t173 = t172 / 256; t174 = t172 % 256; t175 = t6 * t14; t176 = t175 / 256; t177 = t175 % 256; t178 = t7 * t13; t179 = t178 / 256; t180 = t178 % 256; t181 = t8 * t12; t182 = t181 / 256; t183 = t181 % 256; t184 = t9 * t11; t185 = t184 / 256; t186 = t184 % 256; t187 = t0 * t21; t188 = t187 / 256; t189 = t187 % 256; t190 = t1 * t20; t191 = t190 / 256; t192 = t190 % 256; t193 = t2 * t19; t194 = t193 / 256; t195 = t193 % 256; t196 = t3 * t18; t197 = t196 / 256; t198 = t196 % 256; t199 = t4 * t17; t200 = t199 / 256; t201 = t199 % 256; t202 = t5 * t16; t203 = t202 / 256; t204 = t202 % 256; t205 = t6 * t15; t206 = t205 / 256; t207 = t205 % 256; t208 = t7 * t14; t209 = t208 / 256; t210 = t208 % 256; t211 = t8 * t13; t212 = t211 / 256; t213 = t211 % 256; t214 = t9 * t12; t215 = t214 / 256; t216 = t214 % 256; t217 = t10 * t11; t218 = t217 / 256; t219 = t217 % 256; t220 = t1 * t21; t221 = t220 / 256; t222 = t220 % 256; t223 = t2 * t20; t224 = t223 / 256; t225 = t223 % 256; t226 = t3 * t19; t227 = t226 / 256; t228 = t226 % 256; t229 = t4 * t18; t230 = t229 / 256; t231 = t229 % 256; t232 = t5 * t17; t233 = t232 / 256; t234 = t232 % 256; t235 = t6 * t16; t236 = t235 / 256; t237 = t235 % 256; t238 = t7 * t15; t239 = t238 / 256; t240 = t238 % 256; t241 = t8 * t14; t242 = t241 / 256; t243 = t241 % 256; t244 = t9 * t13; t245 = t244 / 256; t246 = t244 % 256; t247 = t10 * t12; t248 = t247 / 256; t249 = t247 % 256; t250 = t2 * t21; t251 = t250 / 256; t252 = t250 % 256; t253 = t3 * t20; t254 = t253 / 256; t255 = t253 % 256; t256 = t4 * t19; t257 = t256 / 256; t258 = t256 % 256; t259 = t5 * t18; t260 = t259 / 256; t261 = t259 % 256; t262 = t6 * t17; t263 = t262 / 256; t264 = t262 % 256; t265 = t7 * t16; t266 = t265 / 256; t267 = t265 % 256; t268 = t8 * t15; t269 = t268 / 256; t270 = t268 % 256; t271 = t9 * t14; t272 = t271 / 256; t273 = t271 % 256; t274 = t10 * t13; t275 = t274 / 256; t276 = t274 % 256; t277 = t3 * t21; t278 = t277 / 256; t279 = t277 % 256; t280 = t4 * t20; t281 = t280 / 256; t282 = t280 % 256; t283 = t5 * t19; t284 = t283 / 256; t285 = t283 % 256; t286 = t6 * t18; t287 = t286 / 256; t288 = t286 % 256; t289 = t7 * t17; t290 = t289 / 256; t291 = t289 % 256; t292 = t8 * t16; t293 = t292 / 256; t294 = t292 % 256; t295 = t9 * t15; t296 = t295 / 256; t297 = t295 % 256; t298 = t10 * t14; t299 = t298 / 256; t300 = t298 % 256; t301 = t4 * t21; t302 = t301 / 256; t303 = t301 % 256; t304 = t5 * t20; t305 = t304 / 256; t306 = t304 % 256; t307 = t6 * t19; t308 = t307 / 256; t309 = t307 % 256; t310 = t7 * t18; t311 = t310 / 256; t312 = t310 % 256; t313 = t8 * t17; t314 = t313 / 256; t315 = t313 % 256; t316 = t9 * t16; t317 = t316 / 256; t318 = t316 % 256; t319 = t10 * t15; t320 = t319 / 256; t321 = t319 % 256; t322 = t5 * t21; t323 = t322 / 256; t324 = t322 % 256; t325 = t6 * t20; t326 = t325 / 256; t327 = t325 % 256; t328 = t7 * t19; t329 = t328 / 256; t330 = t328 % 256; t331 = t8 * t18; t332 = t331 / 256; t333 = t331 % 256; t334 = t9 * t17; t335 = t334 / 256; t336 = t334 % 256; t337 = t10 * t16; t338 = t337 / 256; t339 = t337 % 256; t340 = t6 * t21; t341 = t340 / 256; t342 = t340 % 256; t343 = t7 * t20; t344 = t343 / 256; t345 = t343 % 256; t346 = t8 * t19; t347 = t346 / 256; t348 = t346 % 256; t349 = t9 * t18; t350 = t349 / 256; t351 = t349 % 256; t352 = t10 * t17; t353 = t352 / 256; t354 = t352 % 256; t355 = t7 * t21; t356 = t355 / 256; t357 = t355 % 256; t358 = t8 * t20; t359 = t358 / 256; t360 = t358 % 256; t361 = t9 * t19; t362 = t361 / 256; t363 = t361 % 256; t364 = t10 * t18; t365 = t364 / 256; t366 = t364 % 256; t367 = t8 * t21; t368 = t367 / 256; t369 = t367 % 256; t370 = t9 * t20; t371 = t370 / 256; t372 = t370 % 256; t373 = t10 * t19; t374 = t373 / 256; t375 = t373 % 256; t376 = t9 * t21; t377 = t376 / 256; t378 = t376 % 256; t379 = t10 * t20; t380 = t379 / 256; t381 = t379 % 256; t382 = t10 * t21; t383 = t382 / 256; t384 = t382 % 256; // reduce heights of each column to 19 t385 = t219 + t216 + t213; t386 = t385 / 256; t387 = t385 % 256; t388 = t240 + t237; t389 = t388 / 256; t390 = t388 % 256; t391 = t249 + t246 + t243; t392 = t391 / 256; t393 = t391 % 256; t394 = t276 + t273 + t270; t395 = t394 / 256; t396 = t394 % 256; // reduce heights of each column to 13 t397 = t129 + t126 + t123; t398 = t397 / 256; t399 = t397 % 256; t400 = t138 + t135; t401 = t400 / 256; t402 = t400 % 256; t403 = t147 + t144 + t141; t404 = t403 / 256; t405 = t403 % 256; t406 = t156 + t153 + t150; t407 = t406 / 256; t408 = t406 % 256; t409 = t149 + t146; t410 = t409 / 256; t411 = t409 % 256; t412 = t159 + t155 + t152; t413 = t412 / 256; t414 = t412 % 256; t415 = t168 + t165 + t162; t416 = t415 / 256; t417 = t415 % 256; t418 = t177 + t174 + t171; t419 = t418 / 256; t420 = t418 % 256; t421 = t186 + t183 + t180; t422 = t421 / 256; t423 = t421 % 256; t424 = t164 + t161; t425 = t424 / 256; t426 = t424 % 256; t427 = t173 + t170 + t167; t428 = t427 / 256; t429 = t427 % 256; t430 = t182 + t179 + t176; t431 = t430 / 256; t432 = t430 % 256; t433 = t192 + t189 + t185; t434 = t433 / 256; t435 = t433 % 256; t436 = t201 + t198 + t195; t437 = t436 / 256; t438 = t436 % 256; t439 = t210 + t207 + t204; t440 = t439 / 256; t441 = t439 % 256; t442 = t188 + t386 + t390; t443 = t442 / 256; t444 = t442 % 256; t445 = t197 + t194 + t191; t446 = t445 / 256; t447 = t445 % 256; t448 = t206 + t203 + t200; t449 = t448 / 256; t450 = t448 % 256; t451 = t215 + t212 + t209; t452 = t451 / 256; t453 = t451 % 256; t454 = t225 + t222 + t218; t455 = t454 / 256; t456 = t454 % 256; t457 = t234 + t231 + t228; t458 = t457 / 256; t459 = t457 % 256; t460 = t221 + t389 + t392; t461 = t460 / 256; t462 = t460 % 256; t463 = t230 + t227 + t224; t464 = t463 / 256; t465 = t463 % 256; t466 = t239 + t236 + t233; t467 = t466 / 256; t468 = t466 % 256; t469 = t248 + t245 + t242; t470 = t469 / 256; t471 = t469 % 256; t472 = t258 + t255 + t252; t473 = t472 / 256; t474 = t472 % 256; t475 = t267 + t264 + t261; t476 = t475 / 256; t477 = t475 % 256; t478 = t254 + t251; t479 = t478 / 256; t480 = t478 % 256; t481 = t263 + t260 + t257; t482 = t481 / 256; t483 = t481 % 256; t484 = t272 + t269 + t266; t485 = t484 / 256; t486 = t484 % 256; t487 = t282 + t279 + t275; t488 = t487 / 256; t489 = t487 % 256; t490 = t291 + t288 + t285; t491 = t490 / 256; t492 = t490 % 256; t493 = t300 + t297 + t294; t494 = t493 / 256; t495 = t493 % 256; t496 = t293 + t290 + t287; t497 = t496 / 256; t498 = t496 % 256; t499 = t303 + t299 + t296; t500 = t499 / 256; t501 = t499 % 256; t502 = t312 + t309 + t306; t503 = t502 / 256; t504 = t502 % 256; t505 = t321 + t318 + t315; t506 = t505 / 256; t507 = t505 % 256; t508 = t330 + t327 + t324; t509 = t508 / 256; t510 = t508 % 256; t511 = t339 + t336 + t333; t512 = t511 / 256; t513 = t511 % 256; // reduce heights of each column to 9 t514 = t84 + t81 + t78; t515 = t514 / 256; t516 = t514 % 256; t517 = t87 + t83; t518 = t517 / 256; t519 = t517 % 256; t520 = t96 + t93 + t90; t521 = t520 / 256; t522 = t520 % 256; t523 = t105 + t102 + t99; t524 = t523 / 256; t525 = t523 % 256; t526 = t92 + t89; t527 = t526 / 256; t528 = t526 % 256; t529 = t101 + t98 + t95; t530 = t529 / 256; t531 = t529 % 256; t532 = t111 + t108 + t104; t533 = t532 / 256; t534 = t532 % 256; t535 = t120 + t117 + t114; t536 = t535 / 256; t537 = t535 % 256; t538 = t398 + t402 + t405; t539 = t538 / 256; t540 = t538 % 256; t541 = t113 + t110 + t107; t542 = t541 / 256; t543 = t541 % 256; t544 = t122 + t119 + t116; t545 = t544 / 256; t546 = t544 % 256; t547 = t132 + t128 + t125; t548 = t547 / 256; t549 = t547 % 256; t550 = t414 + t417 + t420; t551 = t550 / 256; t552 = t550 % 256; t553 = t404 + t407 + t411; t554 = t553 / 256; t555 = t553 % 256; t556 = t134 + t131 + t401; t557 = t556 / 256; t558 = t556 % 256; t559 = t143 + t140 + t137; t560 = t559 / 256; t561 = t559 % 256; t562 = t432 + t435 + t438; t563 = t562 / 256; t564 = t562 % 256; t565 = t422 + t426 + t429; t566 = t565 / 256; t567 = t565 % 256; t568 = t413 + t416 + t419; t569 = t568 / 256; t570 = t568 % 256; t571 = t158 + t387 + t410; t572 = t571 / 256; t573 = t571 % 256; t574 = t450 + t453 + t456; t575 = t574 / 256; t576 = t574 % 256; t577 = t440 + t444 + t447; t578 = t577 / 256; t579 = t577 % 256; t580 = t431 + t434 + t437; t581 = t580 / 256; t582 = t580 % 256; t583 = t393 + t425 + t428; t584 = t583 / 256; t585 = t583 % 256; t586 = t468 + t471 + t474; t587 = t586 / 256; t588 = t586 % 256; t589 = t458 + t462 + t465; t590 = t589 / 256; t591 = t589 % 256; t592 = t449 + t452 + t455; t593 = t592 / 256; t594 = t592 % 256; t595 = t396 + t443 + t446; t596 = t595 / 256; t597 = t595 % 256; t598 = t486 + t489 + t492; t599 = t598 / 256; t600 = t598 % 256; t601 = t476 + t480 + t483; t602 = t601 / 256; t603 = t601 % 256; t604 = t467 + t470 + t473; t605 = t604 / 256; t606 = t604 % 256; t607 = t395 + t461 + t464; t608 = t607 / 256; t609 = t607 % 256; t610 = t498 + t501 + t504; t611 = t610 / 256; t612 = t610 % 256; t613 = t488 + t491 + t494; t614 = t613 / 256; t615 = t613 % 256; t616 = t479 + t482 + t485; t617 = t616 / 256; t618 = t616 % 256; t619 = t284 + t281 + t278; t620 = t619 / 256; t621 = t619 % 256; t622 = t503 + t506 + t510; t623 = t622 / 256; t624 = t622 % 256; t625 = t302 + t497 + t500; t626 = t625 / 256; t627 = t625 % 256; t628 = t311 + t308 + t305; t629 = t628 / 256; t630 = t628 % 256; t631 = t320 + t317 + t314; t632 = t631 / 256; t633 = t631 % 256; t634 = t326 + t323 + t509; t635 = t634 / 256; t636 = t634 % 256; t637 = t335 + t332 + t329; t638 = t637 / 256; t639 = t637 % 256; t640 = t345 + t342 + t338; t641 = t640 / 256; t642 = t640 % 256; t643 = t354 + t351 + t348; t644 = t643 / 256; t645 = t643 % 256; t646 = t357 + t353 + t350; t647 = t646 / 256; t648 = t646 % 256; t649 = t366 + t363 + t360; t650 = t649 / 256; t651 = t649 % 256; // reduce heights of each column to 6 t652 = t51 + t48; t653 = t652 / 256; t654 = t652 % 256; t655 = t57 + t54 + t50; t656 = t655 / 256; t657 = t655 % 256; t658 = t66 + t63 + t60; t659 = t658 / 256; t660 = t658 % 256; t661 = t56 + t53; t662 = t661 / 256; t663 = t661 % 256; t664 = t65 + t62 + t59; t665 = t664 / 256; t666 = t664 % 256; t667 = t75 + t72 + t69; t668 = t667 / 256; t669 = t667 % 256; t670 = t519 + t522 + t525; t671 = t670 / 256; t672 = t670 % 256; t673 = t71 + t68 + t515; t674 = t673 / 256; t675 = t673 % 256; t676 = t80 + t77 + t74; t677 = t676 / 256; t678 = t676 % 256; t679 = t531 + t534 + t537; t680 = t679 / 256; t681 = t679 % 256; t682 = t521 + t524 + t528; t683 = t682 / 256; t684 = t682 % 256; t685 = t86 + t399 + t518; t686 = t685 / 256; t687 = t685 % 256; t688 = t543 + t546 + t549; t689 = t688 / 256; t690 = t688 % 256; t691 = t533 + t536 + t540; t692 = t691 / 256; t693 = t691 % 256; t694 = t408 + t527 + t530; t695 = t694 / 256; t696 = t694 % 256; t697 = t555 + t558 + t561; t698 = t697 / 256; t699 = t697 % 256; t700 = t545 + t548 + t552; t701 = t700 / 256; t702 = t700 % 256; t703 = t423 + t539 + t542; t704 = t703 / 256; t705 = t703 % 256; t706 = t567 + t570 + t573; t707 = t706 / 256; t708 = t706 % 256; t709 = t557 + t560 + t564; t710 = t709 / 256; t711 = t709 % 256; t712 = t441 + t551 + t554; t713 = t712 / 256; t714 = t712 % 256; t715 = t579 + t582 + t585; t716 = t715 / 256; t717 = t715 % 256; t718 = t569 + t572 + t576; t719 = t718 / 256; t720 = t718 % 256; t721 = t459 + t563 + t566; t722 = t721 / 256; t723 = t721 % 256; t724 = t591 + t594 + t597; t725 = t724 / 256; t726 = t724 % 256; t727 = t581 + t584 + t588; t728 = t727 / 256; t729 = t727 % 256; t730 = t477 + t575 + t578; t731 = t730 / 256; t732 = t730 % 256; t733 = t603 + t606 + t609; t734 = t733 / 256; t735 = t733 % 256; t736 = t593 + t596 + t600; t737 = t736 / 256; t738 = t736 % 256; t739 = t495 + t587 + t590; t740 = t739 / 256; t741 = t739 % 256; t742 = t615 + t618 + t621; t743 = t742 / 256; t744 = t742 % 256; t745 = t605 + t608 + t612; t746 = t745 / 256; t747 = t745 % 256; t748 = t507 + t599 + t602; t749 = t748 / 256; t750 = t748 % 256; t751 = t627 + t630 + t633; t752 = t751 / 256; t753 = t751 % 256; t754 = t617 + t620 + t624; t755 = t754 / 256; t756 = t754 % 256; t757 = t513 + t611 + t614; t758 = t757 / 256; t759 = t757 % 256; t760 = t639 + t642 + t645; t761 = t760 / 256; t762 = t760 % 256; t763 = t629 + t632 + t636; t764 = t763 / 256; t765 = t763 % 256; t766 = t512 + t623 + t626; t767 = t766 / 256; t768 = t766 % 256; t769 = t644 + t648 + t651; t770 = t769 / 256; t771 = t769 % 256; t772 = t635 + t638 + t641; t773 = t772 / 256; t774 = t772 % 256; t775 = t347 + t344 + t341; t776 = t775 / 256; t777 = t775 % 256; t778 = t356 + t647 + t650; t779 = t778 / 256; t780 = t778 % 256; t781 = t365 + t362 + t359; t782 = t781 / 256; t783 = t781 % 256; t784 = t375 + t372 + t369; t785 = t784 / 256; t786 = t784 % 256; t787 = t381 + t378 + t374; t788 = t787 / 256; t789 = t787 % 256; // reduce heights of each column to 4 t790 = t39 + t36; t791 = t790 / 256; t792 = t790 % 256; t793 = t35 + t32; t794 = t793 / 256; t795 = t793 % 256; t796 = t45 + t42 + t38; t797 = t796 / 256; t798 = t796 % 256; t799 = t653 + t657 + t660; t800 = t799 / 256; t801 = t799 % 256; t802 = t47 + t44 + t41; t803 = t802 / 256; t804 = t802 % 256; t805 = t663 + t666 + t669; t806 = t805 / 256; t807 = t805 % 256; t808 = t516 + t656 + t659; t809 = t808 / 256; t810 = t808 % 256; t811 = t672 + t675 + t678; t812 = t811 / 256; t813 = t811 % 256; t814 = t662 + t665 + t668; t815 = t814 / 256; t816 = t814 % 256; t817 = t681 + t684 + t687; t818 = t817 / 256; t819 = t817 % 256; t820 = t671 + t674 + t677; t821 = t820 / 256; t822 = t820 % 256; t823 = t690 + t693 + t696; t824 = t823 / 256; t825 = t823 % 256; t826 = t680 + t683 + t686; t827 = t826 / 256; t828 = t826 % 256; t829 = t699 + t702 + t705; t830 = t829 / 256; t831 = t829 % 256; t832 = t689 + t692 + t695; t833 = t832 / 256; t834 = t832 % 256; t835 = t708 + t711 + t714; t836 = t835 / 256; t837 = t835 % 256; t838 = t698 + t701 + t704; t839 = t838 / 256; t840 = t838 % 256; t841 = t717 + t720 + t723; t842 = t841 / 256; t843 = t841 % 256; t844 = t707 + t710 + t713; t845 = t844 / 256; t846 = t844 % 256; t847 = t726 + t729 + t732; t848 = t847 / 256; t849 = t847 % 256; t850 = t716 + t719 + t722; t851 = t850 / 256; t852 = t850 % 256; t853 = t735 + t738 + t741; t854 = t853 / 256; t855 = t853 % 256; t856 = t725 + t728 + t731; t857 = t856 / 256; t858 = t856 % 256; t859 = t744 + t747 + t750; t860 = t859 / 256; t861 = t859 % 256; t862 = t734 + t737 + t740; t863 = t862 / 256; t864 = t862 % 256; t865 = t753 + t756 + t759; t866 = t865 / 256; t867 = t865 % 256; t868 = t743 + t746 + t749; t869 = t868 / 256; t870 = t868 % 256; t871 = t762 + t765 + t768; t872 = t871 / 256; t873 = t871 % 256; t874 = t752 + t755 + t758; t875 = t874 / 256; t876 = t874 % 256; t877 = t771 + t774 + t777; t878 = t877 / 256; t879 = t877 % 256; t880 = t761 + t764 + t767; t881 = t880 / 256; t882 = t880 % 256; t883 = t780 + t783 + t786; t884 = t883 / 256; t885 = t883 % 256; t886 = t770 + t773 + t776; t887 = t886 / 256; t888 = t886 % 256; t889 = t782 + t785 + t789; t890 = t889 / 256; t891 = t889 % 256; t892 = t371 + t368 + t779; t893 = t892 / 256; t894 = t892 % 256; t895 = t384 + t380 + t377; t896 = t895 / 256; t897 = t895 % 256; // reduce heights of each column to 3 t898 = t33 + t29; t899 = t898 / 256; t900 = t898 % 256; t901 = t654 + t791 + t795; t902 = t901 / 256; t903 = t901 % 256; t904 = t794 + t797 + t801; t905 = t904 / 256; t906 = t904 % 256; t907 = t800 + t803 + t807; t908 = t907 / 256; t909 = t907 % 256; t910 = t806 + t809 + t813; t911 = t910 / 256; t912 = t910 % 256; t913 = t812 + t815 + t819; t914 = t913 / 256; t915 = t913 % 256; t916 = t818 + t821 + t825; t917 = t916 / 256; t918 = t916 % 256; t919 = t824 + t827 + t831; t920 = t919 / 256; t921 = t919 % 256; t922 = t830 + t833 + t837; t923 = t922 / 256; t924 = t922 % 256; t925 = t836 + t839 + t843; t926 = t925 / 256; t927 = t925 % 256; t928 = t842 + t845 + t849; t929 = t928 / 256; t930 = t928 % 256; t931 = t848 + t851 + t855; t932 = t931 / 256; t933 = t931 % 256; t934 = t854 + t857 + t861; t935 = t934 / 256; t936 = t934 % 256; t937 = t860 + t863 + t867; t938 = t937 / 256; t939 = t937 % 256; t940 = t866 + t869 + t873; t941 = t940 / 256; t942 = t940 % 256; t943 = t872 + t875 + t879; t944 = t943 / 256; t945 = t943 % 256; t946 = t878 + t881 + t885; t947 = t946 / 256; t948 = t946 % 256; t949 = t884 + t887 + t891; t950 = t949 / 256; t951 = t949 % 256; t952 = t788 + t890 + t893; t953 = t952 / 256; t954 = t952 % 256; // reduce heights of each column to 2 t955 = t30 + t27; t956 = t955 / 256; t957 = t955 % 256; t958 = t26 + t792 + t900; t959 = t958 / 256; t960 = t958 % 256; t961 = t798 + t899 + t903; t962 = t961 / 256; t963 = t961 % 256; t964 = t804 + t902 + t906; t965 = t964 / 256; t966 = t964 % 256; t967 = t810 + t905 + t909; t968 = t967 / 256; t969 = t967 % 256; t970 = t816 + t908 + t912; t971 = t970 / 256; t972 = t970 % 256; t973 = t822 + t911 + t915; t974 = t973 / 256; t975 = t973 % 256; t976 = t828 + t914 + t918; t977 = t976 / 256; t978 = t976 % 256; t979 = t834 + t917 + t921; t980 = t979 / 256; t981 = t979 % 256; t982 = t840 + t920 + t924; t983 = t982 / 256; t984 = t982 % 256; t985 = t846 + t923 + t927; t986 = t985 / 256; t987 = t985 % 256; t988 = t852 + t926 + t930; t989 = t988 / 256; t990 = t988 % 256; t991 = t858 + t929 + t933; t992 = t991 / 256; t993 = t991 % 256; t994 = t864 + t932 + t936; t995 = t994 / 256; t996 = t994 % 256; t997 = t870 + t935 + t939; t998 = t997 / 256; t999 = t997 % 256; t1000 = t876 + t938 + t942; t1001 = t1000 / 256; t1002 = t1000 % 256; t1003 = t882 + t941 + t945; t1004 = t1003 / 256; t1005 = t1003 % 256; t1006 = t888 + t944 + t948; t1007 = t1006 / 256; t1008 = t1006 % 256; t1009 = t894 + t947 + t951; t1010 = t1009 / 256; t1011 = t1009 % 256; t1012 = t897 + t950 + t954; t1013 = t1012 / 256; t1014 = t1012 % 256; t1015 = t383 + t896 + t953; t1016 = t1015 / 256; t1017 = t1015 % 256; // preliminary addition of the two remaining numbers t1018 = t23 + t957; t1019 = t956 + t960; t1020 = t959 + t963; t1021 = t962 + t966; t1022 = t965 + t969; t1023 = t968 + t972; t1024 = t971 + t975; t1025 = t974 + t978; t1026 = t977 + t981; t1027 = t980 + t984; t1028 = t983 + t987; t1029 = t986 + t990; t1030 = t989 + t993; t1031 = t992 + t996; t1032 = t995 + t999; t1033 = t998 + t1002; t1034 = t1001 + t1005; t1035 = t1004 + t1008; t1036 = t1007 + t1011; t1037 = t1010 + t1014; t1038 = t1013 + t1017; // compute generate and propagate pairs t1039 = t1018 > 255; t1040 = t1018 == 255; t1041 = t1019 > 255; t1042 = t1019 == 255; t1043 = t1020 > 255; t1044 = t1020 == 255; t1045 = t1021 > 255; t1046 = t1021 == 255; t1047 = t1022 > 255; t1048 = t1022 == 255; t1049 = t1023 > 255; t1050 = t1023 == 255; t1051 = t1024 > 255; t1052 = t1024 == 255; t1053 = t1025 > 255; t1054 = t1025 == 255; t1055 = t1026 > 255; t1056 = t1026 == 255; t1057 = t1027 > 255; t1058 = t1027 == 255; t1059 = t1028 > 255; t1060 = t1028 == 255; t1061 = t1029 > 255; t1062 = t1029 == 255; t1063 = t1030 > 255; t1064 = t1030 == 255; t1065 = t1031 > 255; t1066 = t1031 == 255; t1067 = t1032 > 255; t1068 = t1032 == 255; t1069 = t1033 > 255; t1070 = t1033 == 255; t1071 = t1034 > 255; t1072 = t1034 == 255; t1073 = t1035 > 255; t1074 = t1035 == 255; t1075 = t1036 > 255; t1076 = t1036 == 255; t1077 = t1037 > 255; t1078 = t1037 == 255; t1079 = t1038 > 255; t1080 = t1038 == 255; // parallel prefix tree for computing carry bits // up-level 1 t1041 = t1042 & t1039 | t1041; t1042 = t1042 & t1040; t1045 = t1046 & t1043 | t1045; t1046 = t1046 & t1044; t1049 = t1050 & t1047 | t1049; t1050 = t1050 & t1048; t1053 = t1054 & t1051 | t1053; t1054 = t1054 & t1052; t1057 = t1058 & t1055 | t1057; t1058 = t1058 & t1056; t1061 = t1062 & t1059 | t1061; t1062 = t1062 & t1060; t1065 = t1066 & t1063 | t1065; t1066 = t1066 & t1064; t1069 = t1070 & t1067 | t1069; t1070 = t1070 & t1068; t1073 = t1074 & t1071 | t1073; t1074 = t1074 & t1072; t1077 = t1078 & t1075 | t1077; t1078 = t1078 & t1076; // up-level 2 t1045 = t1046 & t1041 | t1045; t1046 = t1046 & t1042; t1053 = t1054 & t1049 | t1053; t1054 = t1054 & t1050; t1061 = t1062 & t1057 | t1061; t1062 = t1062 & t1058; t1069 = t1070 & t1065 | t1069; t1070 = t1070 & t1066; t1077 = t1078 & t1073 | t1077; t1078 = t1078 & t1074; // up-level 3 t1053 = t1054 & t1045 | t1053; t1054 = t1054 & t1046; t1069 = t1070 & t1061 | t1069; t1070 = t1070 & t1062; // up-level 4 t1069 = t1070 & t1053 | t1069; t1070 = t1070 & t1054; // down-level 6 // down-level 7 t1077 = t1078 & t1069 | t1077; t1078 = t1078 & t1070; t1061 = t1062 & t1053 | t1061; t1062 = t1062 & t1054; t1077 = t1078 & t1069 | t1077; t1078 = t1078 & t1070; // down-level 8 t1049 = t1050 & t1045 | t1049; t1050 = t1050 & t1046; t1057 = t1058 & t1053 | t1057; t1058 = t1058 & t1054; t1065 = t1066 & t1077 | t1065; t1066 = t1066 & t1078; t1073 = t1074 & t1061 | t1073; t1074 = t1074 & t1062; // down-level 9 t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1043 = t1044 & t1041 | t1043; t1044 = t1044 & t1042; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1047 = t1048 & t1045 | t1047; t1048 = t1048 & t1046; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1051 = t1052 & t1049 | t1051; t1052 = t1052 & t1050; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1055 = t1056 & t1053 | t1055; t1056 = t1056 & t1054; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1059 = t1060 & t1057 | t1059; t1060 = t1060 & t1058; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1063 = t1064 & t1077 | t1063; t1064 = t1064 & t1078; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1067 = t1068 & t1065 | t1067; t1068 = t1068 & t1066; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1071 = t1072 & t1061 | t1071; t1072 = t1072 & t1062; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; t1075 = t1076 & t1073 | t1075; t1076 = t1076 & t1074; t1079 = t1080 & t1069 | t1079; t1080 = t1080 & t1070; // compute final sum digits as the digits of the product t1038 = t1038+(t1077?1:0); t1037 = t1037+(t1075?1:0); t1036 = t1036+(t1073?1:0); t1035 = t1035+(t1071?1:0); t1034 = t1034+(t1069?1:0); t1033 = t1033+(t1067?1:0); t1032 = t1032+(t1065?1:0); t1031 = t1031+(t1063?1:0); t1030 = t1030+(t1061?1:0); t1029 = t1029+(t1059?1:0); t1028 = t1028+(t1057?1:0); t1027 = t1027+(t1055?1:0); t1026 = t1026+(t1053?1:0); t1025 = t1025+(t1051?1:0); t1024 = t1024+(t1049?1:0); t1023 = t1023+(t1047?1:0); t1022 = t1022+(t1045?1:0); t1021 = t1021+(t1043?1:0); t1020 = t1020+(t1041?1:0); t1019 = t1019+(t1039?1:0); // get the product digits p[0] = t24; p[1] = t1018 % 256; p[2] = t1019 % 256; p[3] = t1020 % 256; p[4] = t1021 % 256; p[5] = t1022 % 256; p[6] = t1023 % 256; p[7] = t1024 % 256; p[8] = t1025 % 256; p[9] = t1026 % 256; p[10] = t1027 % 256; p[11] = t1028 % 256; p[12] = t1029 % 256; p[13] = t1030 % 256; p[14] = t1031 % 256; p[15] = t1032 % 256; p[16] = t1033 % 256; p[17] = t1034 % 256; p[18] = t1035 % 256; p[19] = t1036 % 256; p[20] = t1037 % 256; p[21] = t1038 % 256; }