// ************************************************************************** //
//                                                                            //
//    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                                             //
//                                                                            //
// ************************************************************************** //


[9]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;
    t0 = p[0];
    t1 = p[1];
    t2 = p[2];
    t3 = p[3];
    t4 = p[4];
    t5 = p[5];
    t6 = p[6];
    t7 = p[7];
    t8 = p[8];
    t9 = +1;
    t10 = x;
    t11 = x;
    t12 = x;
    t13 = x;
    t14 = x;
    t15 = x;
    t16 = x;
    t17 = x;
    // up-level 0
    t10 = t9 * t10;
    t12 = t11 * t12;
    t14 = t13 * t14;
    t16 = t15 * t16;
    // up-level 1
    t12 = t10 * t12;
    t16 = t14 * t16;
    // up-level 2
    t16 = t12 * t16;
    // up-level 3
    // down-level 4
    // down-level 5
    t14 = t12 * t14;
    // down-level 6
    t11 = t10 * t11;
    t13 = t12 * t13;
    t15 = t14 * t15;
    t17 = t16 * t17;
    // multiply p[i] with x^i
    t9 = t0 * t9;
    t10 = t1 * t10;
    t11 = t2 * t11;
    t12 = t3 * t12;
    t13 = t4 * t13;
    t14 = t5 * t14;
    t15 = t6 * t15;
    t16 = t7 * t16;
    t17 = t8 * t17;
    // sum up p[i]*x^i by a binary tree
    // level 0
    t9 = t9 + t10;
    t10 = t11 + t12;
    t11 = t13 + t14;
    t12 = t15 + t16;
    t13 = t17;
    // level 0
    t9 = t9 + t10;
    t10 = t11 + t12;
    t11 = t13;
    // level 0
    t9 = t9 + t10;
    t10 = t11;
    // level 0
    t9 = t9 + t10;
    // final result
    y = t9;
    }