// ************************************************************************** //
//                                                                            //
//    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 {
    // up-level 0
    x1 = x0 + x1;
    x3 = x2 + x3;
    x5 = x4 + x5;
    x7 = x6 + x7;
    x9 = x8 + x9;
    x11 = x10 + x11;
    x13 = x12 + x13;
    x15 = x14 + x15;
    // up-level 1
    x3 = x1 + x3;
    x7 = x5 + x7;
    x11 = x9 + x11;
    x15 = x13 + x15;
    // up-level 2
    x7 = x3 + x7;
    x15 = x11 + x15;
    // up-level 3
    x15 = x7 + x15;
    // up-level 4
    // down-level 5
    // down-level 6
    x11 = x7 + x11;
    // down-level 7
    x5 = x3 + x5;
    x9 = x7 + x9;
    x13 = x11 + x13;
    // down-level 8
    x2 = x1 + x2;
    x4 = x3 + x4;
    x6 = x5 + x6;
    x8 = x7 + x8;
    x10 = x9 + x10;
    x12 = x11 + x12;
    x14 = x13 + x14;
}