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