// ************************************************************************** // // // // 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 // // // // ************************************************************************** // [65]int p; int x,y; thread EvalPolynomial { int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40,t41,t42,t43,t44,t45,t46,t47,t48,t49,t50,t51,t52,t53,t54,t55,t56,t57,t58,t59,t60,t61,t62,t63,t64; t0 = +1; t1 = x; t2 = x; t3 = x; t4 = x; t5 = x; t6 = x; t7 = x; t8 = x; t9 = x; t10 = x; t11 = x; t12 = x; t13 = x; t14 = x; t15 = x; t16 = x; t17 = x; t18 = x; t19 = x; t20 = x; t21 = x; t22 = x; t23 = x; t24 = x; t25 = x; t26 = x; t27 = x; t28 = x; t29 = x; t30 = x; t31 = x; t32 = x; t33 = x; t34 = x; t35 = x; t36 = x; t37 = x; t38 = x; t39 = x; t40 = x; t41 = x; t42 = x; t43 = x; t44 = x; t45 = x; t46 = x; t47 = x; t48 = x; t49 = x; t50 = x; t51 = x; t52 = x; t53 = x; t54 = x; t55 = x; t56 = x; t57 = x; t58 = x; t59 = x; t60 = x; t61 = x; t62 = x; t63 = x; t64 = x; // up-level 0 t1 = t0 * t1; t3 = t2 * t3; t5 = t4 * t5; t7 = t6 * t7; t9 = t8 * t9; t11 = t10 * t11; t13 = t12 * t13; t15 = t14 * t15; t17 = t16 * t17; t19 = t18 * t19; t21 = t20 * t21; t23 = t22 * t23; t25 = t24 * t25; t27 = t26 * t27; t29 = t28 * t29; t31 = t30 * t31; t33 = t32 * t33; t35 = t34 * t35; t37 = t36 * t37; t39 = t38 * t39; t41 = t40 * t41; t43 = t42 * t43; t45 = t44 * t45; t47 = t46 * t47; t49 = t48 * t49; t51 = t50 * t51; t53 = t52 * t53; t55 = t54 * t55; t57 = t56 * t57; t59 = t58 * t59; t61 = t60 * t61; t63 = t62 * t63; // up-level 1 t3 = t1 * t3; t7 = t5 * t7; t11 = t9 * t11; t15 = t13 * t15; t19 = t17 * t19; t23 = t21 * t23; t27 = t25 * t27; t31 = t29 * t31; t35 = t33 * t35; t39 = t37 * t39; t43 = t41 * t43; t47 = t45 * t47; t51 = t49 * t51; t55 = t53 * t55; t59 = t57 * t59; t63 = t61 * t63; // up-level 2 t7 = t3 * t7; t15 = t11 * t15; t23 = t19 * t23; t31 = t27 * t31; t39 = t35 * t39; t47 = t43 * t47; t55 = t51 * t55; t63 = t59 * t63; // up-level 3 t15 = t7 * t15; t31 = t23 * t31; t47 = t39 * t47; t63 = t55 * t63; // up-level 4 t31 = t15 * t31; t63 = t47 * t63; // up-level 5 t63 = t31 * t63; // up-level 6 // down-level 7 // down-level 8 t47 = t31 * t47; // down-level 9 t23 = t15 * t23; t39 = t31 * t39; t55 = t47 * t55; // down-level 10 t11 = t7 * t11; t19 = t15 * t19; t27 = t23 * t27; t35 = t31 * t35; t43 = t39 * t43; t51 = t47 * t51; t59 = t55 * t59; // down-level 11 t5 = t3 * t5; t9 = t7 * t9; t13 = t11 * t13; t17 = t15 * t17; t21 = t19 * t21; t25 = t23 * t25; t29 = t27 * t29; t33 = t31 * t33; t37 = t35 * t37; t41 = t39 * t41; t45 = t43 * t45; t49 = t47 * t49; t53 = t51 * t53; t57 = t55 * t57; t61 = t59 * t61; // down-level 12 t2 = t1 * t2; t4 = t3 * t4; t6 = t5 * t6; t8 = t7 * t8; t10 = t9 * t10; t12 = t11 * t12; t14 = t13 * t14; t16 = t15 * t16; t18 = t17 * t18; t20 = t19 * t20; t22 = t21 * t22; t24 = t23 * t24; t26 = t25 * t26; t28 = t27 * t28; t30 = t29 * t30; t32 = t31 * t32; t34 = t33 * t34; t36 = t35 * t36; t38 = t37 * t38; t40 = t39 * t40; t42 = t41 * t42; t44 = t43 * t44; t46 = t45 * t46; t48 = t47 * t48; t50 = t49 * t50; t52 = t51 * t52; t54 = t53 * t54; t56 = t55 * t56; t58 = t57 * t58; t60 = t59 * t60; t62 = t61 * t62; t64 = t63 * t64; // multiply p[i] with x^i t0 = p[0] * t0; t1 = p[1] * t1; t2 = p[2] * t2; t3 = p[3] * t3; t4 = p[4] * t4; t5 = p[5] * t5; t6 = p[6] * t6; t7 = p[7] * t7; t8 = p[8] * t8; t9 = p[9] * t9; t10 = p[10] * t10; t11 = p[11] * t11; t12 = p[12] * t12; t13 = p[13] * t13; t14 = p[14] * t14; t15 = p[15] * t15; t16 = p[16] * t16; t17 = p[17] * t17; t18 = p[18] * t18; t19 = p[19] * t19; t20 = p[20] * t20; t21 = p[21] * t21; t22 = p[22] * t22; t23 = p[23] * t23; t24 = p[24] * t24; t25 = p[25] * t25; t26 = p[26] * t26; t27 = p[27] * t27; t28 = p[28] * t28; t29 = p[29] * t29; t30 = p[30] * t30; t31 = p[31] * t31; t32 = p[32] * t32; t33 = p[33] * t33; t34 = p[34] * t34; t35 = p[35] * t35; t36 = p[36] * t36; t37 = p[37] * t37; t38 = p[38] * t38; t39 = p[39] * t39; t40 = p[40] * t40; t41 = p[41] * t41; t42 = p[42] * t42; t43 = p[43] * t43; t44 = p[44] * t44; t45 = p[45] * t45; t46 = p[46] * t46; t47 = p[47] * t47; t48 = p[48] * t48; t49 = p[49] * t49; t50 = p[50] * t50; t51 = p[51] * t51; t52 = p[52] * t52; t53 = p[53] * t53; t54 = p[54] * t54; t55 = p[55] * t55; t56 = p[56] * t56; t57 = p[57] * t57; t58 = p[58] * t58; t59 = p[59] * t59; t60 = p[60] * t60; t61 = p[61] * t61; t62 = p[62] * t62; t63 = p[63] * t63; t64 = p[64] * t64; // sum up p[i]*x^i by a binary tree // level 0 t0 = t0 + t1; t1 = t2 + t3; t2 = t4 + t5; t3 = t6 + t7; t4 = t8 + t9; t5 = t10 + t11; t6 = t12 + t13; t7 = t14 + t15; t8 = t16 + t17; t9 = t18 + t19; t10 = t20 + t21; t11 = t22 + t23; t12 = t24 + t25; t13 = t26 + t27; t14 = t28 + t29; t15 = t30 + t31; t16 = t32 + t33; t17 = t34 + t35; t18 = t36 + t37; t19 = t38 + t39; t20 = t40 + t41; t21 = t42 + t43; t22 = t44 + t45; t23 = t46 + t47; t24 = t48 + t49; t25 = t50 + t51; t26 = t52 + t53; t27 = t54 + t55; t28 = t56 + t57; t29 = t58 + t59; t30 = t60 + t61; t31 = t62 + t63; t32 = t64; // level 0 t0 = t0 + t1; t1 = t2 + t3; t2 = t4 + t5; t3 = t6 + t7; t4 = t8 + t9; t5 = t10 + t11; t6 = t12 + t13; t7 = t14 + t15; t8 = t16 + t17; t9 = t18 + t19; t10 = t20 + t21; t11 = t22 + t23; t12 = t24 + t25; t13 = t26 + t27; t14 = t28 + t29; t15 = t30 + t31; t16 = t32; // level 0 t0 = t0 + t1; t1 = t2 + t3; t2 = t4 + t5; t3 = t6 + t7; t4 = t8 + t9; t5 = t10 + t11; t6 = t12 + t13; t7 = t14 + t15; t8 = t16; // level 0 t0 = t0 + t1; t1 = t2 + t3; t2 = t4 + t5; t3 = t6 + t7; t4 = t8; // level 0 t0 = t0 + t1; t1 = t2 + t3; t2 = t4; // level 0 t0 = t0 + t1; t1 = t2; // level 0 t0 = t0 + t1; // final result y = t0; }