// ************************************************************************** //
//                                                                            //
//    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,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63;

thread ParallelPrefixTree_64 {
    // 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;
    x17 = x16 + x17;
    x19 = x18 + x19;
    x21 = x20 + x21;
    x23 = x22 + x23;
    x25 = x24 + x25;
    x27 = x26 + x27;
    x29 = x28 + x29;
    x31 = x30 + x31;
    x33 = x32 + x33;
    x35 = x34 + x35;
    x37 = x36 + x37;
    x39 = x38 + x39;
    x41 = x40 + x41;
    x43 = x42 + x43;
    x45 = x44 + x45;
    x47 = x46 + x47;
    x49 = x48 + x49;
    x51 = x50 + x51;
    x53 = x52 + x53;
    x55 = x54 + x55;
    x57 = x56 + x57;
    x59 = x58 + x59;
    x61 = x60 + x61;
    x63 = x62 + x63;
    // up-level 1
    x3 = x1 + x3;
    x7 = x5 + x7;
    x11 = x9 + x11;
    x15 = x13 + x15;
    x19 = x17 + x19;
    x23 = x21 + x23;
    x27 = x25 + x27;
    x31 = x29 + x31;
    x35 = x33 + x35;
    x39 = x37 + x39;
    x43 = x41 + x43;
    x47 = x45 + x47;
    x51 = x49 + x51;
    x55 = x53 + x55;
    x59 = x57 + x59;
    x63 = x61 + x63;
    // up-level 2
    x7 = x3 + x7;
    x15 = x11 + x15;
    x23 = x19 + x23;
    x31 = x27 + x31;
    x39 = x35 + x39;
    x47 = x43 + x47;
    x55 = x51 + x55;
    x63 = x59 + x63;
    // up-level 3
    x15 = x7 + x15;
    x31 = x23 + x31;
    x47 = x39 + x47;
    x63 = x55 + x63;
    // up-level 4
    x31 = x15 + x31;
    x63 = x47 + x63;
    // up-level 5
    x63 = x31 + x63;
    // up-level 6
    // down-level 7
    // down-level 8
    x47 = x31 + x47;
    // down-level 9
    x23 = x15 + x23;
    x39 = x31 + x39;
    x55 = x47 + x55;
    // down-level 10
    x11 = x7 + x11;
    x19 = x15 + x19;
    x27 = x23 + x27;
    x35 = x31 + x35;
    x43 = x39 + x43;
    x51 = x47 + x51;
    x59 = x55 + x59;
    // down-level 11
    x5 = x3 + x5;
    x9 = x7 + x9;
    x13 = x11 + x13;
    x17 = x15 + x17;
    x21 = x19 + x21;
    x25 = x23 + x25;
    x29 = x27 + x29;
    x33 = x31 + x33;
    x37 = x35 + x37;
    x41 = x39 + x41;
    x45 = x43 + x45;
    x49 = x47 + x49;
    x53 = x51 + x53;
    x57 = x55 + x57;
    x61 = x59 + x61;
    // down-level 12
    x2 = x1 + x2;
    x4 = x3 + x4;
    x6 = x5 + x6;
    x8 = x7 + x8;
    x10 = x9 + x10;
    x12 = x11 + x12;
    x14 = x13 + x14;
    x16 = x15 + x16;
    x18 = x17 + x18;
    x20 = x19 + x20;
    x22 = x21 + x22;
    x24 = x23 + x24;
    x26 = x25 + x26;
    x28 = x27 + x28;
    x30 = x29 + x30;
    x32 = x31 + x32;
    x34 = x33 + x34;
    x36 = x35 + x36;
    x38 = x37 + x38;
    x40 = x39 + x40;
    x42 = x41 + x42;
    x44 = x43 + x44;
    x46 = x45 + x46;
    x48 = x47 + x48;
    x50 = x49 + x50;
    x52 = x51 + x52;
    x54 = x53 + x54;
    x56 = x55 + x56;
    x58 = x57 + x58;
    x60 = x59 + x60;
    x62 = x61 + x62;
}