// ************************************************************************** // // // // 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 // // // // ************************************************************************** // [128]nat x; [128]nat y; [129]nat s; thread RadixBAddCarryLookahead128 { [128]bool g; [128]bool p; // preliminary sum digits s[0] = x[0] + y[0]; s[1] = x[1] + y[1]; s[2] = x[2] + y[2]; s[3] = x[3] + y[3]; s[4] = x[4] + y[4]; s[5] = x[5] + y[5]; s[6] = x[6] + y[6]; s[7] = x[7] + y[7]; s[8] = x[8] + y[8]; s[9] = x[9] + y[9]; s[10] = x[10] + y[10]; s[11] = x[11] + y[11]; s[12] = x[12] + y[12]; s[13] = x[13] + y[13]; s[14] = x[14] + y[14]; s[15] = x[15] + y[15]; s[16] = x[16] + y[16]; s[17] = x[17] + y[17]; s[18] = x[18] + y[18]; s[19] = x[19] + y[19]; s[20] = x[20] + y[20]; s[21] = x[21] + y[21]; s[22] = x[22] + y[22]; s[23] = x[23] + y[23]; s[24] = x[24] + y[24]; s[25] = x[25] + y[25]; s[26] = x[26] + y[26]; s[27] = x[27] + y[27]; s[28] = x[28] + y[28]; s[29] = x[29] + y[29]; s[30] = x[30] + y[30]; s[31] = x[31] + y[31]; s[32] = x[32] + y[32]; s[33] = x[33] + y[33]; s[34] = x[34] + y[34]; s[35] = x[35] + y[35]; s[36] = x[36] + y[36]; s[37] = x[37] + y[37]; s[38] = x[38] + y[38]; s[39] = x[39] + y[39]; s[40] = x[40] + y[40]; s[41] = x[41] + y[41]; s[42] = x[42] + y[42]; s[43] = x[43] + y[43]; s[44] = x[44] + y[44]; s[45] = x[45] + y[45]; s[46] = x[46] + y[46]; s[47] = x[47] + y[47]; s[48] = x[48] + y[48]; s[49] = x[49] + y[49]; s[50] = x[50] + y[50]; s[51] = x[51] + y[51]; s[52] = x[52] + y[52]; s[53] = x[53] + y[53]; s[54] = x[54] + y[54]; s[55] = x[55] + y[55]; s[56] = x[56] + y[56]; s[57] = x[57] + y[57]; s[58] = x[58] + y[58]; s[59] = x[59] + y[59]; s[60] = x[60] + y[60]; s[61] = x[61] + y[61]; s[62] = x[62] + y[62]; s[63] = x[63] + y[63]; s[64] = x[64] + y[64]; s[65] = x[65] + y[65]; s[66] = x[66] + y[66]; s[67] = x[67] + y[67]; s[68] = x[68] + y[68]; s[69] = x[69] + y[69]; s[70] = x[70] + y[70]; s[71] = x[71] + y[71]; s[72] = x[72] + y[72]; s[73] = x[73] + y[73]; s[74] = x[74] + y[74]; s[75] = x[75] + y[75]; s[76] = x[76] + y[76]; s[77] = x[77] + y[77]; s[78] = x[78] + y[78]; s[79] = x[79] + y[79]; s[80] = x[80] + y[80]; s[81] = x[81] + y[81]; s[82] = x[82] + y[82]; s[83] = x[83] + y[83]; s[84] = x[84] + y[84]; s[85] = x[85] + y[85]; s[86] = x[86] + y[86]; s[87] = x[87] + y[87]; s[88] = x[88] + y[88]; s[89] = x[89] + y[89]; s[90] = x[90] + y[90]; s[91] = x[91] + y[91]; s[92] = x[92] + y[92]; s[93] = x[93] + y[93]; s[94] = x[94] + y[94]; s[95] = x[95] + y[95]; s[96] = x[96] + y[96]; s[97] = x[97] + y[97]; s[98] = x[98] + y[98]; s[99] = x[99] + y[99]; s[100] = x[100] + y[100]; s[101] = x[101] + y[101]; s[102] = x[102] + y[102]; s[103] = x[103] + y[103]; s[104] = x[104] + y[104]; s[105] = x[105] + y[105]; s[106] = x[106] + y[106]; s[107] = x[107] + y[107]; s[108] = x[108] + y[108]; s[109] = x[109] + y[109]; s[110] = x[110] + y[110]; s[111] = x[111] + y[111]; s[112] = x[112] + y[112]; s[113] = x[113] + y[113]; s[114] = x[114] + y[114]; s[115] = x[115] + y[115]; s[116] = x[116] + y[116]; s[117] = x[117] + y[117]; s[118] = x[118] + y[118]; s[119] = x[119] + y[119]; s[120] = x[120] + y[120]; s[121] = x[121] + y[121]; s[122] = x[122] + y[122]; s[123] = x[123] + y[123]; s[124] = x[124] + y[124]; s[125] = x[125] + y[125]; s[126] = x[126] + y[126]; s[127] = x[127] + y[127]; // initial generate conditions g[0] = s[0]>255; g[1] = s[1]>255; g[2] = s[2]>255; g[3] = s[3]>255; g[4] = s[4]>255; g[5] = s[5]>255; g[6] = s[6]>255; g[7] = s[7]>255; g[8] = s[8]>255; g[9] = s[9]>255; g[10] = s[10]>255; g[11] = s[11]>255; g[12] = s[12]>255; g[13] = s[13]>255; g[14] = s[14]>255; g[15] = s[15]>255; g[16] = s[16]>255; g[17] = s[17]>255; g[18] = s[18]>255; g[19] = s[19]>255; g[20] = s[20]>255; g[21] = s[21]>255; g[22] = s[22]>255; g[23] = s[23]>255; g[24] = s[24]>255; g[25] = s[25]>255; g[26] = s[26]>255; g[27] = s[27]>255; g[28] = s[28]>255; g[29] = s[29]>255; g[30] = s[30]>255; g[31] = s[31]>255; g[32] = s[32]>255; g[33] = s[33]>255; g[34] = s[34]>255; g[35] = s[35]>255; g[36] = s[36]>255; g[37] = s[37]>255; g[38] = s[38]>255; g[39] = s[39]>255; g[40] = s[40]>255; g[41] = s[41]>255; g[42] = s[42]>255; g[43] = s[43]>255; g[44] = s[44]>255; g[45] = s[45]>255; g[46] = s[46]>255; g[47] = s[47]>255; g[48] = s[48]>255; g[49] = s[49]>255; g[50] = s[50]>255; g[51] = s[51]>255; g[52] = s[52]>255; g[53] = s[53]>255; g[54] = s[54]>255; g[55] = s[55]>255; g[56] = s[56]>255; g[57] = s[57]>255; g[58] = s[58]>255; g[59] = s[59]>255; g[60] = s[60]>255; g[61] = s[61]>255; g[62] = s[62]>255; g[63] = s[63]>255; g[64] = s[64]>255; g[65] = s[65]>255; g[66] = s[66]>255; g[67] = s[67]>255; g[68] = s[68]>255; g[69] = s[69]>255; g[70] = s[70]>255; g[71] = s[71]>255; g[72] = s[72]>255; g[73] = s[73]>255; g[74] = s[74]>255; g[75] = s[75]>255; g[76] = s[76]>255; g[77] = s[77]>255; g[78] = s[78]>255; g[79] = s[79]>255; g[80] = s[80]>255; g[81] = s[81]>255; g[82] = s[82]>255; g[83] = s[83]>255; g[84] = s[84]>255; g[85] = s[85]>255; g[86] = s[86]>255; g[87] = s[87]>255; g[88] = s[88]>255; g[89] = s[89]>255; g[90] = s[90]>255; g[91] = s[91]>255; g[92] = s[92]>255; g[93] = s[93]>255; g[94] = s[94]>255; g[95] = s[95]>255; g[96] = s[96]>255; g[97] = s[97]>255; g[98] = s[98]>255; g[99] = s[99]>255; g[100] = s[100]>255; g[101] = s[101]>255; g[102] = s[102]>255; g[103] = s[103]>255; g[104] = s[104]>255; g[105] = s[105]>255; g[106] = s[106]>255; g[107] = s[107]>255; g[108] = s[108]>255; g[109] = s[109]>255; g[110] = s[110]>255; g[111] = s[111]>255; g[112] = s[112]>255; g[113] = s[113]>255; g[114] = s[114]>255; g[115] = s[115]>255; g[116] = s[116]>255; g[117] = s[117]>255; g[118] = s[118]>255; g[119] = s[119]>255; g[120] = s[120]>255; g[121] = s[121]>255; g[122] = s[122]>255; g[123] = s[123]>255; g[124] = s[124]>255; g[125] = s[125]>255; g[126] = s[126]>255; g[127] = s[127]>255; // initial propagate conditions p[0] = s[0]==255; p[1] = s[1]==255; p[2] = s[2]==255; p[3] = s[3]==255; p[4] = s[4]==255; p[5] = s[5]==255; p[6] = s[6]==255; p[7] = s[7]==255; p[8] = s[8]==255; p[9] = s[9]==255; p[10] = s[10]==255; p[11] = s[11]==255; p[12] = s[12]==255; p[13] = s[13]==255; p[14] = s[14]==255; p[15] = s[15]==255; p[16] = s[16]==255; p[17] = s[17]==255; p[18] = s[18]==255; p[19] = s[19]==255; p[20] = s[20]==255; p[21] = s[21]==255; p[22] = s[22]==255; p[23] = s[23]==255; p[24] = s[24]==255; p[25] = s[25]==255; p[26] = s[26]==255; p[27] = s[27]==255; p[28] = s[28]==255; p[29] = s[29]==255; p[30] = s[30]==255; p[31] = s[31]==255; p[32] = s[32]==255; p[33] = s[33]==255; p[34] = s[34]==255; p[35] = s[35]==255; p[36] = s[36]==255; p[37] = s[37]==255; p[38] = s[38]==255; p[39] = s[39]==255; p[40] = s[40]==255; p[41] = s[41]==255; p[42] = s[42]==255; p[43] = s[43]==255; p[44] = s[44]==255; p[45] = s[45]==255; p[46] = s[46]==255; p[47] = s[47]==255; p[48] = s[48]==255; p[49] = s[49]==255; p[50] = s[50]==255; p[51] = s[51]==255; p[52] = s[52]==255; p[53] = s[53]==255; p[54] = s[54]==255; p[55] = s[55]==255; p[56] = s[56]==255; p[57] = s[57]==255; p[58] = s[58]==255; p[59] = s[59]==255; p[60] = s[60]==255; p[61] = s[61]==255; p[62] = s[62]==255; p[63] = s[63]==255; p[64] = s[64]==255; p[65] = s[65]==255; p[66] = s[66]==255; p[67] = s[67]==255; p[68] = s[68]==255; p[69] = s[69]==255; p[70] = s[70]==255; p[71] = s[71]==255; p[72] = s[72]==255; p[73] = s[73]==255; p[74] = s[74]==255; p[75] = s[75]==255; p[76] = s[76]==255; p[77] = s[77]==255; p[78] = s[78]==255; p[79] = s[79]==255; p[80] = s[80]==255; p[81] = s[81]==255; p[82] = s[82]==255; p[83] = s[83]==255; p[84] = s[84]==255; p[85] = s[85]==255; p[86] = s[86]==255; p[87] = s[87]==255; p[88] = s[88]==255; p[89] = s[89]==255; p[90] = s[90]==255; p[91] = s[91]==255; p[92] = s[92]==255; p[93] = s[93]==255; p[94] = s[94]==255; p[95] = s[95]==255; p[96] = s[96]==255; p[97] = s[97]==255; p[98] = s[98]==255; p[99] = s[99]==255; p[100] = s[100]==255; p[101] = s[101]==255; p[102] = s[102]==255; p[103] = s[103]==255; p[104] = s[104]==255; p[105] = s[105]==255; p[106] = s[106]==255; p[107] = s[107]==255; p[108] = s[108]==255; p[109] = s[109]==255; p[110] = s[110]==255; p[111] = s[111]==255; p[112] = s[112]==255; p[113] = s[113]==255; p[114] = s[114]==255; p[115] = s[115]==255; p[116] = s[116]==255; p[117] = s[117]==255; p[118] = s[118]==255; p[119] = s[119]==255; p[120] = s[120]==255; p[121] = s[121]==255; p[122] = s[122]==255; p[123] = s[123]==255; p[124] = s[124]==255; p[125] = s[125]==255; p[126] = s[126]==255; p[127] = s[127]==255; // carry propagation prefix tree // up-level 1 g[1] = g[0] & p[1] | g[1]; p[1] = p[1] & p[0]; g[3] = g[2] & p[3] | g[3]; p[3] = p[3] & p[2]; g[5] = g[4] & p[5] | g[5]; p[5] = p[5] & p[4]; g[7] = g[6] & p[7] | g[7]; p[7] = p[7] & p[6]; g[9] = g[8] & p[9] | g[9]; p[9] = p[9] & p[8]; g[11] = g[10] & p[11] | g[11]; p[11] = p[11] & p[10]; g[13] = g[12] & p[13] | g[13]; p[13] = p[13] & p[12]; g[15] = g[14] & p[15] | g[15]; p[15] = p[15] & p[14]; g[17] = g[16] & p[17] | g[17]; p[17] = p[17] & p[16]; g[19] = g[18] & p[19] | g[19]; p[19] = p[19] & p[18]; g[21] = g[20] & p[21] | g[21]; p[21] = p[21] & p[20]; g[23] = g[22] & p[23] | g[23]; p[23] = p[23] & p[22]; g[25] = g[24] & p[25] | g[25]; p[25] = p[25] & p[24]; g[27] = g[26] & p[27] | g[27]; p[27] = p[27] & p[26]; g[29] = g[28] & p[29] | g[29]; p[29] = p[29] & p[28]; g[31] = g[30] & p[31] | g[31]; p[31] = p[31] & p[30]; g[33] = g[32] & p[33] | g[33]; p[33] = p[33] & p[32]; g[35] = g[34] & p[35] | g[35]; p[35] = p[35] & p[34]; g[37] = g[36] & p[37] | g[37]; p[37] = p[37] & p[36]; g[39] = g[38] & p[39] | g[39]; p[39] = p[39] & p[38]; g[41] = g[40] & p[41] | g[41]; p[41] = p[41] & p[40]; g[43] = g[42] & p[43] | g[43]; p[43] = p[43] & p[42]; g[45] = g[44] & p[45] | g[45]; p[45] = p[45] & p[44]; g[47] = g[46] & p[47] | g[47]; p[47] = p[47] & p[46]; g[49] = g[48] & p[49] | g[49]; p[49] = p[49] & p[48]; g[51] = g[50] & p[51] | g[51]; p[51] = p[51] & p[50]; g[53] = g[52] & p[53] | g[53]; p[53] = p[53] & p[52]; g[55] = g[54] & p[55] | g[55]; p[55] = p[55] & p[54]; g[57] = g[56] & p[57] | g[57]; p[57] = p[57] & p[56]; g[59] = g[58] & p[59] | g[59]; p[59] = p[59] & p[58]; g[61] = g[60] & p[61] | g[61]; p[61] = p[61] & p[60]; g[63] = g[62] & p[63] | g[63]; p[63] = p[63] & p[62]; g[65] = g[64] & p[65] | g[65]; p[65] = p[65] & p[64]; g[67] = g[66] & p[67] | g[67]; p[67] = p[67] & p[66]; g[69] = g[68] & p[69] | g[69]; p[69] = p[69] & p[68]; g[71] = g[70] & p[71] | g[71]; p[71] = p[71] & p[70]; g[73] = g[72] & p[73] | g[73]; p[73] = p[73] & p[72]; g[75] = g[74] & p[75] | g[75]; p[75] = p[75] & p[74]; g[77] = g[76] & p[77] | g[77]; p[77] = p[77] & p[76]; g[79] = g[78] & p[79] | g[79]; p[79] = p[79] & p[78]; g[81] = g[80] & p[81] | g[81]; p[81] = p[81] & p[80]; g[83] = g[82] & p[83] | g[83]; p[83] = p[83] & p[82]; g[85] = g[84] & p[85] | g[85]; p[85] = p[85] & p[84]; g[87] = g[86] & p[87] | g[87]; p[87] = p[87] & p[86]; g[89] = g[88] & p[89] | g[89]; p[89] = p[89] & p[88]; g[91] = g[90] & p[91] | g[91]; p[91] = p[91] & p[90]; g[93] = g[92] & p[93] | g[93]; p[93] = p[93] & p[92]; g[95] = g[94] & p[95] | g[95]; p[95] = p[95] & p[94]; g[97] = g[96] & p[97] | g[97]; p[97] = p[97] & p[96]; g[99] = g[98] & p[99] | g[99]; p[99] = p[99] & p[98]; g[101] = g[100] & p[101] | g[101]; p[101] = p[101] & p[100]; g[103] = g[102] & p[103] | g[103]; p[103] = p[103] & p[102]; g[105] = g[104] & p[105] | g[105]; p[105] = p[105] & p[104]; g[107] = g[106] & p[107] | g[107]; p[107] = p[107] & p[106]; g[109] = g[108] & p[109] | g[109]; p[109] = p[109] & p[108]; g[111] = g[110] & p[111] | g[111]; p[111] = p[111] & p[110]; g[113] = g[112] & p[113] | g[113]; p[113] = p[113] & p[112]; g[115] = g[114] & p[115] | g[115]; p[115] = p[115] & p[114]; g[117] = g[116] & p[117] | g[117]; p[117] = p[117] & p[116]; g[119] = g[118] & p[119] | g[119]; p[119] = p[119] & p[118]; g[121] = g[120] & p[121] | g[121]; p[121] = p[121] & p[120]; g[123] = g[122] & p[123] | g[123]; p[123] = p[123] & p[122]; g[125] = g[124] & p[125] | g[125]; p[125] = p[125] & p[124]; g[127] = g[126] & p[127] | g[127]; p[127] = p[127] & p[126]; // up-level 2 g[3] = g[1] & p[3] | g[3]; p[3] = p[3] & p[1]; g[7] = g[5] & p[7] | g[7]; p[7] = p[7] & p[5]; g[11] = g[9] & p[11] | g[11]; p[11] = p[11] & p[9]; g[15] = g[13] & p[15] | g[15]; p[15] = p[15] & p[13]; g[19] = g[17] & p[19] | g[19]; p[19] = p[19] & p[17]; g[23] = g[21] & p[23] | g[23]; p[23] = p[23] & p[21]; g[27] = g[25] & p[27] | g[27]; p[27] = p[27] & p[25]; g[31] = g[29] & p[31] | g[31]; p[31] = p[31] & p[29]; g[35] = g[33] & p[35] | g[35]; p[35] = p[35] & p[33]; g[39] = g[37] & p[39] | g[39]; p[39] = p[39] & p[37]; g[43] = g[41] & p[43] | g[43]; p[43] = p[43] & p[41]; g[47] = g[45] & p[47] | g[47]; p[47] = p[47] & p[45]; g[51] = g[49] & p[51] | g[51]; p[51] = p[51] & p[49]; g[55] = g[53] & p[55] | g[55]; p[55] = p[55] & p[53]; g[59] = g[57] & p[59] | g[59]; p[59] = p[59] & p[57]; g[63] = g[61] & p[63] | g[63]; p[63] = p[63] & p[61]; g[67] = g[65] & p[67] | g[67]; p[67] = p[67] & p[65]; g[71] = g[69] & p[71] | g[71]; p[71] = p[71] & p[69]; g[75] = g[73] & p[75] | g[75]; p[75] = p[75] & p[73]; g[79] = g[77] & p[79] | g[79]; p[79] = p[79] & p[77]; g[83] = g[81] & p[83] | g[83]; p[83] = p[83] & p[81]; g[87] = g[85] & p[87] | g[87]; p[87] = p[87] & p[85]; g[91] = g[89] & p[91] | g[91]; p[91] = p[91] & p[89]; g[95] = g[93] & p[95] | g[95]; p[95] = p[95] & p[93]; g[99] = g[97] & p[99] | g[99]; p[99] = p[99] & p[97]; g[103] = g[101] & p[103] | g[103]; p[103] = p[103] & p[101]; g[107] = g[105] & p[107] | g[107]; p[107] = p[107] & p[105]; g[111] = g[109] & p[111] | g[111]; p[111] = p[111] & p[109]; g[115] = g[113] & p[115] | g[115]; p[115] = p[115] & p[113]; g[119] = g[117] & p[119] | g[119]; p[119] = p[119] & p[117]; g[123] = g[121] & p[123] | g[123]; p[123] = p[123] & p[121]; g[127] = g[125] & p[127] | g[127]; p[127] = p[127] & p[125]; // up-level 3 g[7] = g[3] & p[7] | g[7]; p[7] = p[7] & p[3]; g[15] = g[11] & p[15] | g[15]; p[15] = p[15] & p[11]; g[23] = g[19] & p[23] | g[23]; p[23] = p[23] & p[19]; g[31] = g[27] & p[31] | g[31]; p[31] = p[31] & p[27]; g[39] = g[35] & p[39] | g[39]; p[39] = p[39] & p[35]; g[47] = g[43] & p[47] | g[47]; p[47] = p[47] & p[43]; g[55] = g[51] & p[55] | g[55]; p[55] = p[55] & p[51]; g[63] = g[59] & p[63] | g[63]; p[63] = p[63] & p[59]; g[71] = g[67] & p[71] | g[71]; p[71] = p[71] & p[67]; g[79] = g[75] & p[79] | g[79]; p[79] = p[79] & p[75]; g[87] = g[83] & p[87] | g[87]; p[87] = p[87] & p[83]; g[95] = g[91] & p[95] | g[95]; p[95] = p[95] & p[91]; g[103] = g[99] & p[103] | g[103]; p[103] = p[103] & p[99]; g[111] = g[107] & p[111] | g[111]; p[111] = p[111] & p[107]; g[119] = g[115] & p[119] | g[119]; p[119] = p[119] & p[115]; g[127] = g[123] & p[127] | g[127]; p[127] = p[127] & p[123]; // up-level 4 g[15] = g[7] & p[15] | g[15]; p[15] = p[15] & p[7]; g[31] = g[23] & p[31] | g[31]; p[31] = p[31] & p[23]; g[47] = g[39] & p[47] | g[47]; p[47] = p[47] & p[39]; g[63] = g[55] & p[63] | g[63]; p[63] = p[63] & p[55]; g[79] = g[71] & p[79] | g[79]; p[79] = p[79] & p[71]; g[95] = g[87] & p[95] | g[95]; p[95] = p[95] & p[87]; g[111] = g[103] & p[111] | g[111]; p[111] = p[111] & p[103]; g[127] = g[119] & p[127] | g[127]; p[127] = p[127] & p[119]; // up-level 5 g[31] = g[15] & p[31] | g[31]; p[31] = p[31] & p[15]; g[63] = g[47] & p[63] | g[63]; p[63] = p[63] & p[47]; g[95] = g[79] & p[95] | g[95]; p[95] = p[95] & p[79]; g[127] = g[111] & p[127] | g[127]; p[127] = p[127] & p[111]; // up-level 6 g[63] = g[31] & p[63] | g[63]; p[63] = p[63] & p[31]; g[127] = g[95] & p[127] | g[127]; p[127] = p[127] & p[95]; // up-level 7 g[127] = g[63] & p[127] | g[127]; p[127] = p[127] & p[63]; // down-level 9 // down-level 10 g[95] = g[63] & p[95] | g[95]; p[95] = p[95] & p[63]; // down-level 11 g[47] = g[31] & p[47] | g[47]; p[47] = p[47] & p[31]; g[79] = g[63] & p[79] | g[79]; p[79] = p[79] & p[63]; g[111] = g[95] & p[111] | g[111]; p[111] = p[111] & p[95]; // down-level 12 g[23] = g[15] & p[23] | g[23]; p[23] = p[23] & p[15]; g[39] = g[31] & p[39] | g[39]; p[39] = p[39] & p[31]; g[55] = g[47] & p[55] | g[55]; p[55] = p[55] & p[47]; g[71] = g[63] & p[71] | g[71]; p[71] = p[71] & p[63]; g[87] = g[79] & p[87] | g[87]; p[87] = p[87] & p[79]; g[103] = g[95] & p[103] | g[103]; p[103] = p[103] & p[95]; g[119] = g[111] & p[119] | g[119]; p[119] = p[119] & p[111]; // down-level 13 g[11] = g[7] & p[11] | g[11]; p[11] = p[11] & p[7]; g[19] = g[15] & p[19] | g[19]; p[19] = p[19] & p[15]; g[27] = g[23] & p[27] | g[27]; p[27] = p[27] & p[23]; g[35] = g[31] & p[35] | g[35]; p[35] = p[35] & p[31]; g[43] = g[39] & p[43] | g[43]; p[43] = p[43] & p[39]; g[51] = g[47] & p[51] | g[51]; p[51] = p[51] & p[47]; g[59] = g[55] & p[59] | g[59]; p[59] = p[59] & p[55]; g[67] = g[63] & p[67] | g[67]; p[67] = p[67] & p[63]; g[75] = g[71] & p[75] | g[75]; p[75] = p[75] & p[71]; g[83] = g[79] & p[83] | g[83]; p[83] = p[83] & p[79]; g[91] = g[87] & p[91] | g[91]; p[91] = p[91] & p[87]; g[99] = g[95] & p[99] | g[99]; p[99] = p[99] & p[95]; g[107] = g[103] & p[107] | g[107]; p[107] = p[107] & p[103]; g[115] = g[111] & p[115] | g[115]; p[115] = p[115] & p[111]; g[123] = g[119] & p[123] | g[123]; p[123] = p[123] & p[119]; // down-level 14 g[5] = g[3] & p[5] | g[5]; p[5] = p[5] & p[3]; g[9] = g[7] & p[9] | g[9]; p[9] = p[9] & p[7]; g[13] = g[11] & p[13] | g[13]; p[13] = p[13] & p[11]; g[17] = g[15] & p[17] | g[17]; p[17] = p[17] & p[15]; g[21] = g[19] & p[21] | g[21]; p[21] = p[21] & p[19]; g[25] = g[23] & p[25] | g[25]; p[25] = p[25] & p[23]; g[29] = g[27] & p[29] | g[29]; p[29] = p[29] & p[27]; g[33] = g[31] & p[33] | g[33]; p[33] = p[33] & p[31]; g[37] = g[35] & p[37] | g[37]; p[37] = p[37] & p[35]; g[41] = g[39] & p[41] | g[41]; p[41] = p[41] & p[39]; g[45] = g[43] & p[45] | g[45]; p[45] = p[45] & p[43]; g[49] = g[47] & p[49] | g[49]; p[49] = p[49] & p[47]; g[53] = g[51] & p[53] | g[53]; p[53] = p[53] & p[51]; g[57] = g[55] & p[57] | g[57]; p[57] = p[57] & p[55]; g[61] = g[59] & p[61] | g[61]; p[61] = p[61] & p[59]; g[65] = g[63] & p[65] | g[65]; p[65] = p[65] & p[63]; g[69] = g[67] & p[69] | g[69]; p[69] = p[69] & p[67]; g[73] = g[71] & p[73] | g[73]; p[73] = p[73] & p[71]; g[77] = g[75] & p[77] | g[77]; p[77] = p[77] & p[75]; g[81] = g[79] & p[81] | g[81]; p[81] = p[81] & p[79]; g[85] = g[83] & p[85] | g[85]; p[85] = p[85] & p[83]; g[89] = g[87] & p[89] | g[89]; p[89] = p[89] & p[87]; g[93] = g[91] & p[93] | g[93]; p[93] = p[93] & p[91]; g[97] = g[95] & p[97] | g[97]; p[97] = p[97] & p[95]; g[101] = g[99] & p[101] | g[101]; p[101] = p[101] & p[99]; g[105] = g[103] & p[105] | g[105]; p[105] = p[105] & p[103]; g[109] = g[107] & p[109] | g[109]; p[109] = p[109] & p[107]; g[113] = g[111] & p[113] | g[113]; p[113] = p[113] & p[111]; g[117] = g[115] & p[117] | g[117]; p[117] = p[117] & p[115]; g[121] = g[119] & p[121] | g[121]; p[121] = p[121] & p[119]; g[125] = g[123] & p[125] | g[125]; p[125] = p[125] & p[123]; // down-level 15 g[2] = g[1] & p[2] | g[2]; p[2] = p[2] & p[1]; g[4] = g[3] & p[4] | g[4]; p[4] = p[4] & p[3]; g[6] = g[5] & p[6] | g[6]; p[6] = p[6] & p[5]; g[8] = g[7] & p[8] | g[8]; p[8] = p[8] & p[7]; g[10] = g[9] & p[10] | g[10]; p[10] = p[10] & p[9]; g[12] = g[11] & p[12] | g[12]; p[12] = p[12] & p[11]; g[14] = g[13] & p[14] | g[14]; p[14] = p[14] & p[13]; g[16] = g[15] & p[16] | g[16]; p[16] = p[16] & p[15]; g[18] = g[17] & p[18] | g[18]; p[18] = p[18] & p[17]; g[20] = g[19] & p[20] | g[20]; p[20] = p[20] & p[19]; g[22] = g[21] & p[22] | g[22]; p[22] = p[22] & p[21]; g[24] = g[23] & p[24] | g[24]; p[24] = p[24] & p[23]; g[26] = g[25] & p[26] | g[26]; p[26] = p[26] & p[25]; g[28] = g[27] & p[28] | g[28]; p[28] = p[28] & p[27]; g[30] = g[29] & p[30] | g[30]; p[30] = p[30] & p[29]; g[32] = g[31] & p[32] | g[32]; p[32] = p[32] & p[31]; g[34] = g[33] & p[34] | g[34]; p[34] = p[34] & p[33]; g[36] = g[35] & p[36] | g[36]; p[36] = p[36] & p[35]; g[38] = g[37] & p[38] | g[38]; p[38] = p[38] & p[37]; g[40] = g[39] & p[40] | g[40]; p[40] = p[40] & p[39]; g[42] = g[41] & p[42] | g[42]; p[42] = p[42] & p[41]; g[44] = g[43] & p[44] | g[44]; p[44] = p[44] & p[43]; g[46] = g[45] & p[46] | g[46]; p[46] = p[46] & p[45]; g[48] = g[47] & p[48] | g[48]; p[48] = p[48] & p[47]; g[50] = g[49] & p[50] | g[50]; p[50] = p[50] & p[49]; g[52] = g[51] & p[52] | g[52]; p[52] = p[52] & p[51]; g[54] = g[53] & p[54] | g[54]; p[54] = p[54] & p[53]; g[56] = g[55] & p[56] | g[56]; p[56] = p[56] & p[55]; g[58] = g[57] & p[58] | g[58]; p[58] = p[58] & p[57]; g[60] = g[59] & p[60] | g[60]; p[60] = p[60] & p[59]; g[62] = g[61] & p[62] | g[62]; p[62] = p[62] & p[61]; g[64] = g[63] & p[64] | g[64]; p[64] = p[64] & p[63]; g[66] = g[65] & p[66] | g[66]; p[66] = p[66] & p[65]; g[68] = g[67] & p[68] | g[68]; p[68] = p[68] & p[67]; g[70] = g[69] & p[70] | g[70]; p[70] = p[70] & p[69]; g[72] = g[71] & p[72] | g[72]; p[72] = p[72] & p[71]; g[74] = g[73] & p[74] | g[74]; p[74] = p[74] & p[73]; g[76] = g[75] & p[76] | g[76]; p[76] = p[76] & p[75]; g[78] = g[77] & p[78] | g[78]; p[78] = p[78] & p[77]; g[80] = g[79] & p[80] | g[80]; p[80] = p[80] & p[79]; g[82] = g[81] & p[82] | g[82]; p[82] = p[82] & p[81]; g[84] = g[83] & p[84] | g[84]; p[84] = p[84] & p[83]; g[86] = g[85] & p[86] | g[86]; p[86] = p[86] & p[85]; g[88] = g[87] & p[88] | g[88]; p[88] = p[88] & p[87]; g[90] = g[89] & p[90] | g[90]; p[90] = p[90] & p[89]; g[92] = g[91] & p[92] | g[92]; p[92] = p[92] & p[91]; g[94] = g[93] & p[94] | g[94]; p[94] = p[94] & p[93]; g[96] = g[95] & p[96] | g[96]; p[96] = p[96] & p[95]; g[98] = g[97] & p[98] | g[98]; p[98] = p[98] & p[97]; g[100] = g[99] & p[100] | g[100]; p[100] = p[100] & p[99]; g[102] = g[101] & p[102] | g[102]; p[102] = p[102] & p[101]; g[104] = g[103] & p[104] | g[104]; p[104] = p[104] & p[103]; g[106] = g[105] & p[106] | g[106]; p[106] = p[106] & p[105]; g[108] = g[107] & p[108] | g[108]; p[108] = p[108] & p[107]; g[110] = g[109] & p[110] | g[110]; p[110] = p[110] & p[109]; g[112] = g[111] & p[112] | g[112]; p[112] = p[112] & p[111]; g[114] = g[113] & p[114] | g[114]; p[114] = p[114] & p[113]; g[116] = g[115] & p[116] | g[116]; p[116] = p[116] & p[115]; g[118] = g[117] & p[118] | g[118]; p[118] = p[118] & p[117]; g[120] = g[119] & p[120] | g[120]; p[120] = p[120] & p[119]; g[122] = g[121] & p[122] | g[122]; p[122] = p[122] & p[121]; g[124] = g[123] & p[124] | g[124]; p[124] = p[124] & p[123]; g[126] = g[125] & p[126] | g[126]; p[126] = p[126] & p[125]; // compute final sum digits s[0] = s[0] % 256; s[1] = (s[1]+(g[0]?1:0)) % 256; s[2] = (s[2]+(g[1]?1:0)) % 256; s[3] = (s[3]+(g[2]?1:0)) % 256; s[4] = (s[4]+(g[3]?1:0)) % 256; s[5] = (s[5]+(g[4]?1:0)) % 256; s[6] = (s[6]+(g[5]?1:0)) % 256; s[7] = (s[7]+(g[6]?1:0)) % 256; s[8] = (s[8]+(g[7]?1:0)) % 256; s[9] = (s[9]+(g[8]?1:0)) % 256; s[10] = (s[10]+(g[9]?1:0)) % 256; s[11] = (s[11]+(g[10]?1:0)) % 256; s[12] = (s[12]+(g[11]?1:0)) % 256; s[13] = (s[13]+(g[12]?1:0)) % 256; s[14] = (s[14]+(g[13]?1:0)) % 256; s[15] = (s[15]+(g[14]?1:0)) % 256; s[16] = (s[16]+(g[15]?1:0)) % 256; s[17] = (s[17]+(g[16]?1:0)) % 256; s[18] = (s[18]+(g[17]?1:0)) % 256; s[19] = (s[19]+(g[18]?1:0)) % 256; s[20] = (s[20]+(g[19]?1:0)) % 256; s[21] = (s[21]+(g[20]?1:0)) % 256; s[22] = (s[22]+(g[21]?1:0)) % 256; s[23] = (s[23]+(g[22]?1:0)) % 256; s[24] = (s[24]+(g[23]?1:0)) % 256; s[25] = (s[25]+(g[24]?1:0)) % 256; s[26] = (s[26]+(g[25]?1:0)) % 256; s[27] = (s[27]+(g[26]?1:0)) % 256; s[28] = (s[28]+(g[27]?1:0)) % 256; s[29] = (s[29]+(g[28]?1:0)) % 256; s[30] = (s[30]+(g[29]?1:0)) % 256; s[31] = (s[31]+(g[30]?1:0)) % 256; s[32] = (s[32]+(g[31]?1:0)) % 256; s[33] = (s[33]+(g[32]?1:0)) % 256; s[34] = (s[34]+(g[33]?1:0)) % 256; s[35] = (s[35]+(g[34]?1:0)) % 256; s[36] = (s[36]+(g[35]?1:0)) % 256; s[37] = (s[37]+(g[36]?1:0)) % 256; s[38] = (s[38]+(g[37]?1:0)) % 256; s[39] = (s[39]+(g[38]?1:0)) % 256; s[40] = (s[40]+(g[39]?1:0)) % 256; s[41] = (s[41]+(g[40]?1:0)) % 256; s[42] = (s[42]+(g[41]?1:0)) % 256; s[43] = (s[43]+(g[42]?1:0)) % 256; s[44] = (s[44]+(g[43]?1:0)) % 256; s[45] = (s[45]+(g[44]?1:0)) % 256; s[46] = (s[46]+(g[45]?1:0)) % 256; s[47] = (s[47]+(g[46]?1:0)) % 256; s[48] = (s[48]+(g[47]?1:0)) % 256; s[49] = (s[49]+(g[48]?1:0)) % 256; s[50] = (s[50]+(g[49]?1:0)) % 256; s[51] = (s[51]+(g[50]?1:0)) % 256; s[52] = (s[52]+(g[51]?1:0)) % 256; s[53] = (s[53]+(g[52]?1:0)) % 256; s[54] = (s[54]+(g[53]?1:0)) % 256; s[55] = (s[55]+(g[54]?1:0)) % 256; s[56] = (s[56]+(g[55]?1:0)) % 256; s[57] = (s[57]+(g[56]?1:0)) % 256; s[58] = (s[58]+(g[57]?1:0)) % 256; s[59] = (s[59]+(g[58]?1:0)) % 256; s[60] = (s[60]+(g[59]?1:0)) % 256; s[61] = (s[61]+(g[60]?1:0)) % 256; s[62] = (s[62]+(g[61]?1:0)) % 256; s[63] = (s[63]+(g[62]?1:0)) % 256; s[64] = (s[64]+(g[63]?1:0)) % 256; s[65] = (s[65]+(g[64]?1:0)) % 256; s[66] = (s[66]+(g[65]?1:0)) % 256; s[67] = (s[67]+(g[66]?1:0)) % 256; s[68] = (s[68]+(g[67]?1:0)) % 256; s[69] = (s[69]+(g[68]?1:0)) % 256; s[70] = (s[70]+(g[69]?1:0)) % 256; s[71] = (s[71]+(g[70]?1:0)) % 256; s[72] = (s[72]+(g[71]?1:0)) % 256; s[73] = (s[73]+(g[72]?1:0)) % 256; s[74] = (s[74]+(g[73]?1:0)) % 256; s[75] = (s[75]+(g[74]?1:0)) % 256; s[76] = (s[76]+(g[75]?1:0)) % 256; s[77] = (s[77]+(g[76]?1:0)) % 256; s[78] = (s[78]+(g[77]?1:0)) % 256; s[79] = (s[79]+(g[78]?1:0)) % 256; s[80] = (s[80]+(g[79]?1:0)) % 256; s[81] = (s[81]+(g[80]?1:0)) % 256; s[82] = (s[82]+(g[81]?1:0)) % 256; s[83] = (s[83]+(g[82]?1:0)) % 256; s[84] = (s[84]+(g[83]?1:0)) % 256; s[85] = (s[85]+(g[84]?1:0)) % 256; s[86] = (s[86]+(g[85]?1:0)) % 256; s[87] = (s[87]+(g[86]?1:0)) % 256; s[88] = (s[88]+(g[87]?1:0)) % 256; s[89] = (s[89]+(g[88]?1:0)) % 256; s[90] = (s[90]+(g[89]?1:0)) % 256; s[91] = (s[91]+(g[90]?1:0)) % 256; s[92] = (s[92]+(g[91]?1:0)) % 256; s[93] = (s[93]+(g[92]?1:0)) % 256; s[94] = (s[94]+(g[93]?1:0)) % 256; s[95] = (s[95]+(g[94]?1:0)) % 256; s[96] = (s[96]+(g[95]?1:0)) % 256; s[97] = (s[97]+(g[96]?1:0)) % 256; s[98] = (s[98]+(g[97]?1:0)) % 256; s[99] = (s[99]+(g[98]?1:0)) % 256; s[100] = (s[100]+(g[99]?1:0)) % 256; s[101] = (s[101]+(g[100]?1:0)) % 256; s[102] = (s[102]+(g[101]?1:0)) % 256; s[103] = (s[103]+(g[102]?1:0)) % 256; s[104] = (s[104]+(g[103]?1:0)) % 256; s[105] = (s[105]+(g[104]?1:0)) % 256; s[106] = (s[106]+(g[105]?1:0)) % 256; s[107] = (s[107]+(g[106]?1:0)) % 256; s[108] = (s[108]+(g[107]?1:0)) % 256; s[109] = (s[109]+(g[108]?1:0)) % 256; s[110] = (s[110]+(g[109]?1:0)) % 256; s[111] = (s[111]+(g[110]?1:0)) % 256; s[112] = (s[112]+(g[111]?1:0)) % 256; s[113] = (s[113]+(g[112]?1:0)) % 256; s[114] = (s[114]+(g[113]?1:0)) % 256; s[115] = (s[115]+(g[114]?1:0)) % 256; s[116] = (s[116]+(g[115]?1:0)) % 256; s[117] = (s[117]+(g[116]?1:0)) % 256; s[118] = (s[118]+(g[117]?1:0)) % 256; s[119] = (s[119]+(g[118]?1:0)) % 256; s[120] = (s[120]+(g[119]?1:0)) % 256; s[121] = (s[121]+(g[120]?1:0)) % 256; s[122] = (s[122]+(g[121]?1:0)) % 256; s[123] = (s[123]+(g[122]?1:0)) % 256; s[124] = (s[124]+(g[123]?1:0)) % 256; s[125] = (s[125]+(g[124]?1:0)) % 256; s[126] = (s[126]+(g[125]?1:0)) % 256; s[127] = (s[127]+(g[126]?1:0)) % 256; s[128] = (g[127]?1:0); }