// ************************************************************************** // // // // 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 // // // // ************************************************************************** // int p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16; int x,y; thread EvalPolynomial { int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16; 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; // 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; // up-level 1 t3 = t1 * t3; t7 = t5 * t7; t11 = t9 * t11; t15 = t13 * t15; // up-level 2 t7 = t3 * t7; t15 = t11 * t15; // up-level 3 t15 = t7 * t15; // up-level 4 // down-level 5 // down-level 6 t11 = t7 * t11; // down-level 7 t5 = t3 * t5; t9 = t7 * t9; t13 = t11 * t13; // down-level 8 t2 = t1 * t2; t4 = t3 * t4; t6 = t5 * t6; t8 = t7 * t8; t10 = t9 * t10; t12 = t11 * t12; t14 = t13 * t14; t16 = t15 * t16; // multiply p[i] with x^i t0 = p0 * t0; t1 = p1 * t1; t2 = p2 * t2; t3 = p3 * t3; t4 = p4 * t4; t5 = p5 * t5; t6 = p6 * t6; t7 = p7 * t7; t8 = p8 * t8; t9 = p9 * t9; t10 = p10 * t10; t11 = p11 * t11; t12 = p12 * t12; t13 = p13 * t13; t14 = p14 * t14; t15 = p15 * t15; t16 = p16 * t16; // 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; // 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; }