// ************************************************************************** // // // // 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; int x,y; thread EvalPolynomial { int t0,t1,t2,t3,t4,t5,t6,t7,t8; t0 = +1; t1 = x; t2 = x; t3 = x; t4 = x; t5 = x; t6 = x; t7 = x; t8 = x; // up-level 0 t1 = t0 * t1; t3 = t2 * t3; t5 = t4 * t5; t7 = t6 * t7; // up-level 1 t3 = t1 * t3; t7 = t5 * t7; // up-level 2 t7 = t3 * t7; // up-level 3 // down-level 4 // down-level 5 t5 = t3 * t5; // down-level 6 t2 = t1 * t2; t4 = t3 * t4; t6 = t5 * t6; t8 = t7 * t8; // 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; // 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; // 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; }