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


nat x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15;

thread ParallelPrefixTree_16 {
nat y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15;
    y0 = x0;
    y1 = x1;
    y2 = x2;
    y3 = x3;
    y4 = x4;
    y5 = x5;
    y6 = x6;
    y7 = x7;
    y8 = x8;
    y9 = x9;
    y10 = x10;
    y11 = x11;
    y12 = x12;
    y13 = x13;
    y14 = x14;
    y15 = x15;
    // up-level 0
    y1 = y0 + y1;
    y3 = y2 + y3;
    y5 = y4 + y5;
    y7 = y6 + y7;
    y9 = y8 + y9;
    y11 = y10 + y11;
    y13 = y12 + y13;
    y15 = y14 + y15;
    // up-level 1
    y3 = y1 + y3;
    y7 = y5 + y7;
    y11 = y9 + y11;
    y15 = y13 + y15;
    // up-level 2
    y7 = y3 + y7;
    y15 = y11 + y15;
    // up-level 3
    y15 = y7 + y15;
    // up-level 4
    // down-level 5
    // down-level 6
    y11 = y7 + y11;
    // down-level 7
    y5 = y3 + y5;
    y9 = y7 + y9;
    y13 = y11 + y13;
    // down-level 8
    y2 = y1 + y2;
    y4 = y3 + y4;
    y6 = y5 + y6;
    y8 = y7 + y8;
    y10 = y9 + y10;
    y12 = y11 + y12;
    y14 = y13 + y14;
    x0 = y0;
    x1 = y1;
    x2 = y2;
    x3 = y3;
    x4 = y4;
    x5 = y5;
    x6 = y6;
    x7 = y7;
    x8 = y8;
    x9 = y9;
    x10 = y10;
    x11 = y11;
    x12 = y12;
    x13 = y13;
    x14 = y14;
    x15 = y15;
}