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