// ************************************************************************** // // // // 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; nat y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36,y37,y38,y39,y40,y41,y42,y43,y44,y45,y46,y47,y48,y49,y50,y51,y52,y53,y54,y55,y56,y57,y58,y59,y60,y61,y62,y63; nat s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,s23,s24,s25,s26,s27,s28,s29,s30,s31,s32,s33,s34,s35,s36,s37,s38,s39,s40,s41,s42,s43,s44,s45,s46,s47,s48,s49,s50,s51,s52,s53,s54,s55,s56,s57,s58,s59,s60,s61,s62,s63,s64; thread RadixBAddCarryLookahead64 { bool g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11,g12,g13,g14,g15,g16,g17,g18,g19,g20,g21,g22,g23,g24,g25,g26,g27,g28,g29,g30,g31,g32,g33,g34,g35,g36,g37,g38,g39,g40,g41,g42,g43,g44,g45,g46,g47,g48,g49,g50,g51,g52,g53,g54,g55,g56,g57,g58,g59,g60,g61,g62,g63; bool p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63; // preliminary sum digits s0 = x0 + y0; s1 = x1 + y1; s2 = x2 + y2; s3 = x3 + y3; s4 = x4 + y4; s5 = x5 + y5; s6 = x6 + y6; s7 = x7 + y7; s8 = x8 + y8; s9 = x9 + y9; s10 = x10 + y10; s11 = x11 + y11; s12 = x12 + y12; s13 = x13 + y13; s14 = x14 + y14; s15 = x15 + y15; s16 = x16 + y16; s17 = x17 + y17; s18 = x18 + y18; s19 = x19 + y19; s20 = x20 + y20; s21 = x21 + y21; s22 = x22 + y22; s23 = x23 + y23; s24 = x24 + y24; s25 = x25 + y25; s26 = x26 + y26; s27 = x27 + y27; s28 = x28 + y28; s29 = x29 + y29; s30 = x30 + y30; s31 = x31 + y31; s32 = x32 + y32; s33 = x33 + y33; s34 = x34 + y34; s35 = x35 + y35; s36 = x36 + y36; s37 = x37 + y37; s38 = x38 + y38; s39 = x39 + y39; s40 = x40 + y40; s41 = x41 + y41; s42 = x42 + y42; s43 = x43 + y43; s44 = x44 + y44; s45 = x45 + y45; s46 = x46 + y46; s47 = x47 + y47; s48 = x48 + y48; s49 = x49 + y49; s50 = x50 + y50; s51 = x51 + y51; s52 = x52 + y52; s53 = x53 + y53; s54 = x54 + y54; s55 = x55 + y55; s56 = x56 + y56; s57 = x57 + y57; s58 = x58 + y58; s59 = x59 + y59; s60 = x60 + y60; s61 = x61 + y61; s62 = x62 + y62; s63 = x63 + y63; // initial generate conditions g0 = s0>255; g1 = s1>255; g2 = s2>255; g3 = s3>255; g4 = s4>255; g5 = s5>255; g6 = s6>255; g7 = s7>255; g8 = s8>255; g9 = s9>255; g10 = s10>255; g11 = s11>255; g12 = s12>255; g13 = s13>255; g14 = s14>255; g15 = s15>255; g16 = s16>255; g17 = s17>255; g18 = s18>255; g19 = s19>255; g20 = s20>255; g21 = s21>255; g22 = s22>255; g23 = s23>255; g24 = s24>255; g25 = s25>255; g26 = s26>255; g27 = s27>255; g28 = s28>255; g29 = s29>255; g30 = s30>255; g31 = s31>255; g32 = s32>255; g33 = s33>255; g34 = s34>255; g35 = s35>255; g36 = s36>255; g37 = s37>255; g38 = s38>255; g39 = s39>255; g40 = s40>255; g41 = s41>255; g42 = s42>255; g43 = s43>255; g44 = s44>255; g45 = s45>255; g46 = s46>255; g47 = s47>255; g48 = s48>255; g49 = s49>255; g50 = s50>255; g51 = s51>255; g52 = s52>255; g53 = s53>255; g54 = s54>255; g55 = s55>255; g56 = s56>255; g57 = s57>255; g58 = s58>255; g59 = s59>255; g60 = s60>255; g61 = s61>255; g62 = s62>255; g63 = s63>255; // initial propagate conditions p0 = s0==255; p1 = s1==255; p2 = s2==255; p3 = s3==255; p4 = s4==255; p5 = s5==255; p6 = s6==255; p7 = s7==255; p8 = s8==255; p9 = s9==255; p10 = s10==255; p11 = s11==255; p12 = s12==255; p13 = s13==255; p14 = s14==255; p15 = s15==255; p16 = s16==255; p17 = s17==255; p18 = s18==255; p19 = s19==255; p20 = s20==255; p21 = s21==255; p22 = s22==255; p23 = s23==255; p24 = s24==255; p25 = s25==255; p26 = s26==255; p27 = s27==255; p28 = s28==255; p29 = s29==255; p30 = s30==255; p31 = s31==255; p32 = s32==255; p33 = s33==255; p34 = s34==255; p35 = s35==255; p36 = s36==255; p37 = s37==255; p38 = s38==255; p39 = s39==255; p40 = s40==255; p41 = s41==255; p42 = s42==255; p43 = s43==255; p44 = s44==255; p45 = s45==255; p46 = s46==255; p47 = s47==255; p48 = s48==255; p49 = s49==255; p50 = s50==255; p51 = s51==255; p52 = s52==255; p53 = s53==255; p54 = s54==255; p55 = s55==255; p56 = s56==255; p57 = s57==255; p58 = s58==255; p59 = s59==255; p60 = s60==255; p61 = s61==255; p62 = s62==255; p63 = s63==255; // carry propagation prefix tree // up-level 1 g1 = g0 & p1 | g1; p1 = p1 & p0; g3 = g2 & p3 | g3; p3 = p3 & p2; g5 = g4 & p5 | g5; p5 = p5 & p4; g7 = g6 & p7 | g7; p7 = p7 & p6; g9 = g8 & p9 | g9; p9 = p9 & p8; g11 = g10 & p11 | g11; p11 = p11 & p10; g13 = g12 & p13 | g13; p13 = p13 & p12; g15 = g14 & p15 | g15; p15 = p15 & p14; g17 = g16 & p17 | g17; p17 = p17 & p16; g19 = g18 & p19 | g19; p19 = p19 & p18; g21 = g20 & p21 | g21; p21 = p21 & p20; g23 = g22 & p23 | g23; p23 = p23 & p22; g25 = g24 & p25 | g25; p25 = p25 & p24; g27 = g26 & p27 | g27; p27 = p27 & p26; g29 = g28 & p29 | g29; p29 = p29 & p28; g31 = g30 & p31 | g31; p31 = p31 & p30; g33 = g32 & p33 | g33; p33 = p33 & p32; g35 = g34 & p35 | g35; p35 = p35 & p34; g37 = g36 & p37 | g37; p37 = p37 & p36; g39 = g38 & p39 | g39; p39 = p39 & p38; g41 = g40 & p41 | g41; p41 = p41 & p40; g43 = g42 & p43 | g43; p43 = p43 & p42; g45 = g44 & p45 | g45; p45 = p45 & p44; g47 = g46 & p47 | g47; p47 = p47 & p46; g49 = g48 & p49 | g49; p49 = p49 & p48; g51 = g50 & p51 | g51; p51 = p51 & p50; g53 = g52 & p53 | g53; p53 = p53 & p52; g55 = g54 & p55 | g55; p55 = p55 & p54; g57 = g56 & p57 | g57; p57 = p57 & p56; g59 = g58 & p59 | g59; p59 = p59 & p58; g61 = g60 & p61 | g61; p61 = p61 & p60; g63 = g62 & p63 | g63; p63 = p63 & p62; // up-level 2 g3 = g1 & p3 | g3; p3 = p3 & p1; g7 = g5 & p7 | g7; p7 = p7 & p5; g11 = g9 & p11 | g11; p11 = p11 & p9; g15 = g13 & p15 | g15; p15 = p15 & p13; g19 = g17 & p19 | g19; p19 = p19 & p17; g23 = g21 & p23 | g23; p23 = p23 & p21; g27 = g25 & p27 | g27; p27 = p27 & p25; g31 = g29 & p31 | g31; p31 = p31 & p29; g35 = g33 & p35 | g35; p35 = p35 & p33; g39 = g37 & p39 | g39; p39 = p39 & p37; g43 = g41 & p43 | g43; p43 = p43 & p41; g47 = g45 & p47 | g47; p47 = p47 & p45; g51 = g49 & p51 | g51; p51 = p51 & p49; g55 = g53 & p55 | g55; p55 = p55 & p53; g59 = g57 & p59 | g59; p59 = p59 & p57; g63 = g61 & p63 | g63; p63 = p63 & p61; // up-level 3 g7 = g3 & p7 | g7; p7 = p7 & p3; g15 = g11 & p15 | g15; p15 = p15 & p11; g23 = g19 & p23 | g23; p23 = p23 & p19; g31 = g27 & p31 | g31; p31 = p31 & p27; g39 = g35 & p39 | g39; p39 = p39 & p35; g47 = g43 & p47 | g47; p47 = p47 & p43; g55 = g51 & p55 | g55; p55 = p55 & p51; g63 = g59 & p63 | g63; p63 = p63 & p59; // up-level 4 g15 = g7 & p15 | g15; p15 = p15 & p7; g31 = g23 & p31 | g31; p31 = p31 & p23; g47 = g39 & p47 | g47; p47 = p47 & p39; g63 = g55 & p63 | g63; p63 = p63 & p55; // up-level 5 g31 = g15 & p31 | g31; p31 = p31 & p15; g63 = g47 & p63 | g63; p63 = p63 & p47; // up-level 6 g63 = g31 & p63 | g63; p63 = p63 & p31; // down-level 8 // down-level 9 g47 = g31 & p47 | g47; p47 = p47 & p31; // down-level 10 g23 = g15 & p23 | g23; p23 = p23 & p15; g39 = g31 & p39 | g39; p39 = p39 & p31; g55 = g47 & p55 | g55; p55 = p55 & p47; // down-level 11 g11 = g7 & p11 | g11; p11 = p11 & p7; g19 = g15 & p19 | g19; p19 = p19 & p15; g27 = g23 & p27 | g27; p27 = p27 & p23; g35 = g31 & p35 | g35; p35 = p35 & p31; g43 = g39 & p43 | g43; p43 = p43 & p39; g51 = g47 & p51 | g51; p51 = p51 & p47; g59 = g55 & p59 | g59; p59 = p59 & p55; // down-level 12 g5 = g3 & p5 | g5; p5 = p5 & p3; g9 = g7 & p9 | g9; p9 = p9 & p7; g13 = g11 & p13 | g13; p13 = p13 & p11; g17 = g15 & p17 | g17; p17 = p17 & p15; g21 = g19 & p21 | g21; p21 = p21 & p19; g25 = g23 & p25 | g25; p25 = p25 & p23; g29 = g27 & p29 | g29; p29 = p29 & p27; g33 = g31 & p33 | g33; p33 = p33 & p31; g37 = g35 & p37 | g37; p37 = p37 & p35; g41 = g39 & p41 | g41; p41 = p41 & p39; g45 = g43 & p45 | g45; p45 = p45 & p43; g49 = g47 & p49 | g49; p49 = p49 & p47; g53 = g51 & p53 | g53; p53 = p53 & p51; g57 = g55 & p57 | g57; p57 = p57 & p55; g61 = g59 & p61 | g61; p61 = p61 & p59; // down-level 13 g2 = g1 & p2 | g2; p2 = p2 & p1; g4 = g3 & p4 | g4; p4 = p4 & p3; g6 = g5 & p6 | g6; p6 = p6 & p5; g8 = g7 & p8 | g8; p8 = p8 & p7; g10 = g9 & p10 | g10; p10 = p10 & p9; g12 = g11 & p12 | g12; p12 = p12 & p11; g14 = g13 & p14 | g14; p14 = p14 & p13; g16 = g15 & p16 | g16; p16 = p16 & p15; g18 = g17 & p18 | g18; p18 = p18 & p17; g20 = g19 & p20 | g20; p20 = p20 & p19; g22 = g21 & p22 | g22; p22 = p22 & p21; g24 = g23 & p24 | g24; p24 = p24 & p23; g26 = g25 & p26 | g26; p26 = p26 & p25; g28 = g27 & p28 | g28; p28 = p28 & p27; g30 = g29 & p30 | g30; p30 = p30 & p29; g32 = g31 & p32 | g32; p32 = p32 & p31; g34 = g33 & p34 | g34; p34 = p34 & p33; g36 = g35 & p36 | g36; p36 = p36 & p35; g38 = g37 & p38 | g38; p38 = p38 & p37; g40 = g39 & p40 | g40; p40 = p40 & p39; g42 = g41 & p42 | g42; p42 = p42 & p41; g44 = g43 & p44 | g44; p44 = p44 & p43; g46 = g45 & p46 | g46; p46 = p46 & p45; g48 = g47 & p48 | g48; p48 = p48 & p47; g50 = g49 & p50 | g50; p50 = p50 & p49; g52 = g51 & p52 | g52; p52 = p52 & p51; g54 = g53 & p54 | g54; p54 = p54 & p53; g56 = g55 & p56 | g56; p56 = p56 & p55; g58 = g57 & p58 | g58; p58 = p58 & p57; g60 = g59 & p60 | g60; p60 = p60 & p59; g62 = g61 & p62 | g62; p62 = p62 & p61; // compute final sum digits s0 = s0 % 256; s1 = (s1 + (nat) (g0&(bool)1)) % 256; s2 = (s2 + (nat) (g1&(bool)1)) % 256; s3 = (s3 + (nat) (g2&(bool)1)) % 256; s4 = (s4 + (nat) (g3&(bool)1)) % 256; s5 = (s5 + (nat) (g4&(bool)1)) % 256; s6 = (s6 + (nat) (g5&(bool)1)) % 256; s7 = (s7 + (nat) (g6&(bool)1)) % 256; s8 = (s8 + (nat) (g7&(bool)1)) % 256; s9 = (s9 + (nat) (g8&(bool)1)) % 256; s10 = (s10 + (nat) (g9&(bool)1)) % 256; s11 = (s11 + (nat) (g10&(bool)1)) % 256; s12 = (s12 + (nat) (g11&(bool)1)) % 256; s13 = (s13 + (nat) (g12&(bool)1)) % 256; s14 = (s14 + (nat) (g13&(bool)1)) % 256; s15 = (s15 + (nat) (g14&(bool)1)) % 256; s16 = (s16 + (nat) (g15&(bool)1)) % 256; s17 = (s17 + (nat) (g16&(bool)1)) % 256; s18 = (s18 + (nat) (g17&(bool)1)) % 256; s19 = (s19 + (nat) (g18&(bool)1)) % 256; s20 = (s20 + (nat) (g19&(bool)1)) % 256; s21 = (s21 + (nat) (g20&(bool)1)) % 256; s22 = (s22 + (nat) (g21&(bool)1)) % 256; s23 = (s23 + (nat) (g22&(bool)1)) % 256; s24 = (s24 + (nat) (g23&(bool)1)) % 256; s25 = (s25 + (nat) (g24&(bool)1)) % 256; s26 = (s26 + (nat) (g25&(bool)1)) % 256; s27 = (s27 + (nat) (g26&(bool)1)) % 256; s28 = (s28 + (nat) (g27&(bool)1)) % 256; s29 = (s29 + (nat) (g28&(bool)1)) % 256; s30 = (s30 + (nat) (g29&(bool)1)) % 256; s31 = (s31 + (nat) (g30&(bool)1)) % 256; s32 = (s32 + (nat) (g31&(bool)1)) % 256; s33 = (s33 + (nat) (g32&(bool)1)) % 256; s34 = (s34 + (nat) (g33&(bool)1)) % 256; s35 = (s35 + (nat) (g34&(bool)1)) % 256; s36 = (s36 + (nat) (g35&(bool)1)) % 256; s37 = (s37 + (nat) (g36&(bool)1)) % 256; s38 = (s38 + (nat) (g37&(bool)1)) % 256; s39 = (s39 + (nat) (g38&(bool)1)) % 256; s40 = (s40 + (nat) (g39&(bool)1)) % 256; s41 = (s41 + (nat) (g40&(bool)1)) % 256; s42 = (s42 + (nat) (g41&(bool)1)) % 256; s43 = (s43 + (nat) (g42&(bool)1)) % 256; s44 = (s44 + (nat) (g43&(bool)1)) % 256; s45 = (s45 + (nat) (g44&(bool)1)) % 256; s46 = (s46 + (nat) (g45&(bool)1)) % 256; s47 = (s47 + (nat) (g46&(bool)1)) % 256; s48 = (s48 + (nat) (g47&(bool)1)) % 256; s49 = (s49 + (nat) (g48&(bool)1)) % 256; s50 = (s50 + (nat) (g49&(bool)1)) % 256; s51 = (s51 + (nat) (g50&(bool)1)) % 256; s52 = (s52 + (nat) (g51&(bool)1)) % 256; s53 = (s53 + (nat) (g52&(bool)1)) % 256; s54 = (s54 + (nat) (g53&(bool)1)) % 256; s55 = (s55 + (nat) (g54&(bool)1)) % 256; s56 = (s56 + (nat) (g55&(bool)1)) % 256; s57 = (s57 + (nat) (g56&(bool)1)) % 256; s58 = (s58 + (nat) (g57&(bool)1)) % 256; s59 = (s59 + (nat) (g58&(bool)1)) % 256; s60 = (s60 + (nat) (g59&(bool)1)) % 256; s61 = (s61 + (nat) (g60&(bool)1)) % 256; s62 = (s62 + (nat) (g61&(bool)1)) % 256; s63 = (s63 + (nat) (g62&(bool)1)) % 256; s64 = (nat) (g63&(bool)1); }