// ************************************************************************** // // // // 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 // // // // ************************************************************************** // [33]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; 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; // 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; // 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; // up-level 2 t7 = t3 * t7; t15 = t11 * t15; t23 = t19 * t23; t31 = t27 * t31; // up-level 3 t15 = t7 * t15; t31 = t23 * t31; // up-level 4 t31 = t15 * t31; // up-level 5 // down-level 6 // down-level 7 t23 = t15 * t23; // down-level 8 t11 = t7 * t11; t19 = t15 * t19; t27 = t23 * t27; // down-level 9 t5 = t3 * t5; t9 = t7 * t9; t13 = t11 * t13; t17 = t15 * t17; t21 = t19 * t21; t25 = t23 * t25; t29 = t27 * t29; // down-level 10 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; // 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; // 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; // 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; }