Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace your for loops with this since there wasting ticks #3

Open
ghost opened this issue May 2, 2018 · 0 comments
Open

Replace your for loops with this since there wasting ticks #3

ghost opened this issue May 2, 2018 · 0 comments

Comments

@ghost
Copy link

ghost commented May 2, 2018

#ifdef VECTORS4
typedef uint4 u;
#elif defined VECTORS2
typedef uint2 u;
#else
typedef uint u;
#endif
/*
__constant uint K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
__constant uint initH[8] = {
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
};
__constant uint paddy[24] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
};*/
#define FOUND (0x0F)
#define SETFOUND(Xnonce) output[atomic_inc(&output[FOUND])] = Xnonce
#ifdef BITALIGN
#pragma OPENCL EXTENSION cl_amd_media_ops : enable
#define rotr(x, y) amd_bitalign((u)x, (u)x, (u)y)
#else // BITALIGN
#define rotr(x, y) rotate((u)x, (u)(32 - y))
#endif

#ifdef BFI_INT
#define ch(x, y, z) amd_bytealign(x, y, z)
#define Ma(x, y, z) amd_bytealign( (z^x), (y), (x) )
#define Ma2(x, y, z) bitselect((u)x, (u)y, (u)z ^ (u)x)
#else // BFI_INT
#define ch(x, y, z) bitselect((u)z, (u)y, (u)x)
#define Ma(x, y, z) bitselect((u)x, (u)y, (u)z ^ (u)x)
#define Ma2(x, y, z) Ma(x, y, z)
#endif

#define E0(x) (rotr(x,2)^rotr(x,13)^rotr(x,22))
#define E1(x) (rotr(x,6)^rotr(x,11)^rotr(x,25))
#define O0(x) (rotr(x,7)^rotr(x,18)^(x>>3U))
#define O1(x) (rotr(x,17)^rotr(x,19)^(x>>10U))

#define a Vals[0]
#define b Vals[1]
#define c Vals[2]
#define d Vals[3]
#define e Vals[4]
#define f Vals[5]
#define g Vals[6]
#define h Vals[7]

__kernel
attribute((vec_type_hint(u)))
attribute((reqd_work_group_size(WORKSIZE, 1, 1)))

void search(

const uint state0, //H1 - a
const uint state1, //H2 - b
const uint state2, //H3 - c
const uint state3, //H4 - b
const uint state4, //H5 - e
const uint state5, //H6 - f
const uint state6, //H7 - g
const uint state7, //H8 - h

// second message block - the nonce is here, so we have to do it here
const uint merkend,//M0
const uint time, //M1
const uint target, //M2 (nonce is M3)
const uint html1, //M4
const uint html2, //M5
const uint html3, //M6
const uint html4, //M7
const uint html5, //M8
const uint html6, //M9
const uint html7, //M10
const uint html8, //M11
const uint html9, //M12
const uint html10, //M13
const uint html11, //M14
const uint html12, //M15

// final message block
const uint html13, //M2-0
const uint html14, //M2-1
const uint html15, //M2-3
const uint html16, //M2-4

// after this, 256 bits of 0
// 32 bits of F
// 32 bits of 00800000
// 32 bits of 0
// 32 bits of 000005A8
#ifndef GOFFSET
const u base,
#endif
volatile __global uint * output)

{

__private uint K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
__private uint initH[8] = {
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
};
__private uint paddy[24] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
};

#ifdef GOFFSET
const u nonce = (uint)(get_global_id(0));
#else
const u nonce = base + (uint)(get_global_id(0));
#endif

__private u Vals[8]; // TODO: try __private as this shouild be faster than a register copy
__private u Last[8];
__private u W[64];
__private u t1=0;
__private u t2=0;

/* // a=state0; copies saved in first line of hash
// b=state1;
// c=state2;
// d=state3;
// e=state4;
// f=state5;
// g=state6;
// h=state7;
W[0]=merkend; copies saved in hash
W[1]=time;
W[2]=target;
W[3]=nonce;
W[4]=html1;
W[5]=html2;
W[6]=html3;
W[7]=html4;
W[8]=html5;
W[9]=html6;
W[10]=html7;
W[11]=html8;
W[12]=html9;
W[13]=html10;
W[14]=html11;
W[15]=html12;*/

t1 = state7 + E1(state4) + ch(state4,state5,state6) + K[0] + merkend;t2 = E0(state0) + Ma(state0,state1,state2);h=state6;g=state5;f=state4;e=state3+t1;d=state2;c=state1;b=state0;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[1] + time;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[2] + target;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[3] + nonce;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[4] + html1;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[5] + html2;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[6] + html3;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[7] + html4;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[8] + html5;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[9] + html6;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[10] + html7;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[11] + html8;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[12] + html9;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[13] + html10;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[14] + html11;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[15] + html12;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[16] = O1(html11) + html6 + O0(time) + merkend;t1 = h + E1(e) + ch(e,f,g) + K[16] + W[16];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[17] = O1(html12) + html7 + O0(target) + time;t1 = h + E1(e) + ch(e,f,g) + K[17] + W[17];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[18] = O1(W[16]) + html8 + O0(nonce) + target;t1 = h + E1(e) + ch(e,f,g) + K[18] + W[18];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[19] = O1(W[17]) + html9 + O0(html1) + nonce;t1 = h + E1(e) + ch(e,f,g) + K[19] + W[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[20] = O1(W[18]) + html10 + O0(html2) + html1;t1 = h + E1(e) + ch(e,f,g) + K[20] + W[20];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[21] = O1(W[19]) + html11 + O0(html3) + html2;t1 = h + E1(e) + ch(e,f,g) + K[21] + W[21];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[22] = O1(W[20]) + html12 + O0(html4) + html3;t1 = h + E1(e) + ch(e,f,g) + K[22] + W[22];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[23] = O1(W[21]) + W[16] + O0(html5) + html4;t1 = h + E1(e) + ch(e,f,g) + K[23] + W[23];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[24] = O1(W[22]) + W[17] + O0(html6) + html5;t1 = h + E1(e) + ch(e,f,g) + K[24] + W[24];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[25] = O1(W[23]) + W[18] + O0(html7) + html6;t1 = h + E1(e) + ch(e,f,g) + K[25] + W[25];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[26] = O1(W[24]) + W[19] + O0(html8) + html7;t1 = h + E1(e) + ch(e,f,g) + K[26] + W[26];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[27] = O1(W[25]) + W[20] + O0(html9) + html8;t1 = h + E1(e) + ch(e,f,g) + K[27] + W[27];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[28] = O1(W[26]) + W[21] + O0(html10) + html9;t1 = h + E1(e) + ch(e,f,g) + K[28] + W[28];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[29] = O1(W[27]) + W[22] + O0(html11) + html10;t1 = h + E1(e) + ch(e,f,g) + K[29] + W[29];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[30] = O1(W[28]) + W[23] + O0(html12) + html11;t1 = h + E1(e) + ch(e,f,g) + K[30] + W[30];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[31] = O1(W[29]) + W[24] + O0(W[16]) + html12;t1 = h + E1(e) + ch(e,f,g) + K[31] + W[31];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[32] = O1(W[30]) + W[25] + O0(W[17]) + W[16];t1 = h + E1(e) + ch(e,f,g) + K[32] + W[32];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[33] = O1(W[31]) + W[26] + O0(W[18]) + W[17];t1 = h + E1(e) + ch(e,f,g) + K[33] + W[33];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[34] = O1(W[32]) + W[27] + O0(W[19]) + W[18];t1 = h + E1(e) + ch(e,f,g) + K[34] + W[34];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[35] = O1(W[33]) + W[28] + O0(W[20]) + W[19];t1 = h + E1(e) + ch(e,f,g) + K[35] + W[35];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[36] = O1(W[34]) + W[29] + O0(W[21]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[36] + W[36];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[37] = O1(W[35]) + W[30] + O0(W[22]) + W[21];t1 = h + E1(e) + ch(e,f,g) + K[37] + W[37];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[38] = O1(W[36]) + W[31] + O0(W[23]) + W[22];t1 = h + E1(e) + ch(e,f,g) + K[38] + W[38];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[39] = O1(W[37]) + W[32] + O0(W[24]) + W[23];t1 = h + E1(e) + ch(e,f,g) + K[39] + W[39];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[40] = O1(W[38]) + W[33] + O0(W[25]) + W[24];t1 = h + E1(e) + ch(e,f,g) + K[40] + W[40];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[41] = O1(W[39]) + W[34] + O0(W[26]) + W[25];t1 = h + E1(e) + ch(e,f,g) + K[41] + W[41];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[42] = O1(W[40]) + W[35] + O0(W[27]) + W[26];t1 = h + E1(e) + ch(e,f,g) + K[42] + W[42];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[43] = O1(W[41]) + W[36] + O0(W[28]) + W[27];t1 = h + E1(e) + ch(e,f,g) + K[43] + W[43];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[44] = O1(W[42]) + W[37] + O0(W[29]) + W[28];t1 = h + E1(e) + ch(e,f,g) + K[44] + W[44];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[45] = O1(W[43]) + W[38] + O0(W[30]) + W[29];t1 = h + E1(e) + ch(e,f,g) + K[45] + W[45];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[46] = O1(W[44]) + W[39] + O0(W[31]) + W[30];t1 = h + E1(e) + ch(e,f,g) + K[46] + W[46];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[47] = O1(W[45]) + W[40] + O0(W[32]) + W[31];t1 = h + E1(e) + ch(e,f,g) + K[47] + W[47];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[48] = O1(W[46]) + W[41] + O0(W[33]) + W[32];t1 = h + E1(e) + ch(e,f,g) + K[48] + W[48];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[49] = O1(W[47]) + W[42] + O0(W[34]) + W[33];t1 = h + E1(e) + ch(e,f,g) + K[49] + W[49];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[50] = O1(W[48]) + W[43] + O0(W[35]) + W[34];t1 = h + E1(e) + ch(e,f,g) + K[50] + W[50];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[51] = O1(W[49]) + W[44] + O0(W[36]) + W[35];t1 = h + E1(e) + ch(e,f,g) + K[51] + W[51];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[52] = O1(W[50]) + W[45] + O0(W[37]) + W[36];t1 = h + E1(e) + ch(e,f,g) + K[52] + W[52];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[53] = O1(W[51]) + W[46] + O0(W[38]) + W[37];t1 = h + E1(e) + ch(e,f,g) + K[53] + W[53];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[54] = O1(W[52]) + W[47] + O0(W[39]) + W[38];t1 = h + E1(e) + ch(e,f,g) + K[54] + W[54];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[55] = O1(W[53]) + W[48] + O0(W[40]) + W[39];t1 = h + E1(e) + ch(e,f,g) + K[55] + W[55];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[56] = O1(W[54]) + W[49] + O0(W[41]) + W[40];t1 = h + E1(e) + ch(e,f,g) + K[56] + W[56];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[57] = O1(W[55]) + W[50] + O0(W[42]) + W[41];t1 = h + E1(e) + ch(e,f,g) + K[57] + W[57];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[58] = O1(W[56]) + W[51] + O0(W[43]) + W[42];t1 = h + E1(e) + ch(e,f,g) + K[58] + W[58];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[59] = O1(W[57]) + W[52] + O0(W[44]) + W[43];t1 = h + E1(e) + ch(e,f,g) + K[59] + W[59];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[60] = O1(W[58]) + W[53] + O0(W[45]) + W[44];t1 = h + E1(e) + ch(e,f,g) + K[60] + W[60];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[61] = O1(W[59]) + W[54] + O0(W[46]) + W[45];t1 = h + E1(e) + ch(e,f,g) + K[61] + W[61];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[62] = O1(W[60]) + W[55] + O0(W[47]) + W[46];t1 = h + E1(e) + ch(e,f,g) + K[62] + W[62];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[63] = O1(W[61]) + W[56] + O0(W[48]) + W[47];t1 = h + E1(e) + ch(e,f,g) + K[63] + W[63];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

Last[0]=a+=state0;
Last[1]=b+=state1;
Last[2]=c+=state2;
Last[3]=d+=state3;
Last[4]=e+=state4;
Last[5]=f+=state5;
Last[6]=g+=state6;
Last[7]=h+=state7;

/* W[0]=html13;
W[1]=html14;
W[2]=html15;
W[3]=html16;
W[4]=paddy[0];
W[5]=paddy[1];
W[6]=paddy[2];
W[7]=paddy[3];
W[8]=paddy[4];
W[9]=paddy[5];
W[10]=paddy[6];
W[11]=paddy[7];
W[12]=paddy[8];
W[13]=paddy[9];
W[14]=paddy[10];
W[15]=paddy[11];
__constant uint paddy[24] = { as a lot of these are 0's we can save some additions of 0
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
values 0-7, 10, 13, 14, 15, 16, 17, 18 are all zeros and can be reomved from below TODO***
*/

t1 = h + E1(e) + ch(e,f,g) + K[0] + html13;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[1] + html14;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[2] + html15;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[3] + html16;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[4];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[5];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[6];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[7];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[8];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[9];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[10];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[11];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[12] + paddy[8];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[13] + paddy[9];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[14];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[15] + paddy[11];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[16] = O0(html14) + html13;t1 = h + E1(e) + ch(e,f,g) + K[16] + W[16];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[17] = O1(paddy[11]) + O0(html15) + html14;t1 = h + E1(e) + ch(e,f,g) + K[17] + W[17];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[18] = O1(W[16]) + O0(html16) + html15; t1 = h + E1(e) + ch(e,f,g) + K[18] + W[18];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[19] = O1(W[17]) + paddy[8] + html16; t1 = h + E1(e) + ch(e,f,g) + K[19] + W[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[20] = O1(W[18]) + paddy[9];t1 = h + E1(e) + ch(e,f,g) + K[20] + W[20];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[21] = O1(W[19]);t1 = h + E1(e) + ch(e,f,g) + K[21] + W[21];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[22] = O1(W[20]) + paddy[11];t1 = h + E1(e) + ch(e,f,g) + K[22] + W[22];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[23] = O1(W[21]) + W[16] ;t1 = h + E1(e) + ch(e,f,g) + K[23] + W[23];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[24] = O1(W[22]) + W[17] ;t1 = h + E1(e) + ch(e,f,g) + K[24] + W[24];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[25] = O1(W[23]) + W[18] ;t1 = h + E1(e) + ch(e,f,g) + K[25] + W[25];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[26] = O1(W[24]) + W[19] ;t1 = h + E1(e) + ch(e,f,g) + K[26] + W[26];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[27] = O1(W[25]) + W[20] + O0(paddy[8]);t1 = h + E1(e) + ch(e,f,g) + K[27] + W[27];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[28] = O1(W[26]) + W[21] + O0(paddy[9]) + paddy[8];t1 = h + E1(e) + ch(e,f,g) + K[28] + W[28];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[29] = O1(W[27]) + W[22] + paddy[9];t1 = h + E1(e) + ch(e,f,g) + K[29] + W[29];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[30] = O1(W[28]) + W[23] + O0(paddy[11]);t1 = h + E1(e) + ch(e,f,g) + K[30] + W[30];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[31] = O1(W[29]) + W[24] + O0(W[16]) + paddy[11];t1 = h + E1(e) + ch(e,f,g) + K[31] + W[31];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[32] = O1(W[30]) + W[25] + O0(W[17]) + W[16];t1 = h + E1(e) + ch(e,f,g) + K[32] + W[32];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[33] = O1(W[31]) + W[26] + O0(W[18]) + W[17];t1 = h + E1(e) + ch(e,f,g) + K[33] + W[33];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[34] = O1(W[32]) + W[27] + O0(W[19]) + W[18];t1 = h + E1(e) + ch(e,f,g) + K[34] + W[34];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[35] = O1(W[33]) + W[28] + O0(W[20]) + W[19];t1 = h + E1(e) + ch(e,f,g) + K[35] + W[35];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[36] = O1(W[34]) + W[29] + O0(W[21]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[36] + W[36];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[37] = O1(W[35]) + W[30] + O0(W[22]) + W[21];t1 = h + E1(e) + ch(e,f,g) + K[37] + W[37];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[38] = O1(W[36]) + W[31] + O0(W[23]) + W[22];t1 = h + E1(e) + ch(e,f,g) + K[38] + W[38];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[39] = O1(W[37]) + W[32] + O0(W[24]) + W[23];t1 = h + E1(e) + ch(e,f,g) + K[39] + W[39];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[40] = O1(W[38]) + W[33] + O0(W[25]) + W[24];t1 = h + E1(e) + ch(e,f,g) + K[40] + W[40];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[41] = O1(W[39]) + W[34] + O0(W[26]) + W[25];t1 = h + E1(e) + ch(e,f,g) + K[41] + W[41];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[42] = O1(W[40]) + W[35] + O0(W[27]) + W[26];t1 = h + E1(e) + ch(e,f,g) + K[42] + W[42];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[43] = O1(W[41]) + W[36] + O0(W[28]) + W[27];t1 = h + E1(e) + ch(e,f,g) + K[43] + W[43];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[44] = O1(W[42]) + W[37] + O0(W[29]) + W[28];t1 = h + E1(e) + ch(e,f,g) + K[44] + W[44];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[45] = O1(W[43]) + W[38] + O0(W[30]) + W[29];t1 = h + E1(e) + ch(e,f,g) + K[45] + W[45];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[46] = O1(W[44]) + W[39] + O0(W[31]) + W[30];t1 = h + E1(e) + ch(e,f,g) + K[46] + W[46];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[47] = O1(W[45]) + W[40] + O0(W[32]) + W[31];t1 = h + E1(e) + ch(e,f,g) + K[47] + W[47];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[48] = O1(W[46]) + W[41] + O0(W[33]) + W[32];t1 = h + E1(e) + ch(e,f,g) + K[48] + W[48];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[49] = O1(W[47]) + W[42] + O0(W[34]) + W[33];t1 = h + E1(e) + ch(e,f,g) + K[49] + W[49];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[50] = O1(W[48]) + W[43] + O0(W[35]) + W[34];t1 = h + E1(e) + ch(e,f,g) + K[50] + W[50];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[51] = O1(W[49]) + W[44] + O0(W[36]) + W[35];t1 = h + E1(e) + ch(e,f,g) + K[51] + W[51];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[52] = O1(W[50]) + W[45] + O0(W[37]) + W[36];t1 = h + E1(e) + ch(e,f,g) + K[52] + W[52];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[53] = O1(W[51]) + W[46] + O0(W[38]) + W[37];t1 = h + E1(e) + ch(e,f,g) + K[53] + W[53];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[54] = O1(W[52]) + W[47] + O0(W[39]) + W[38];t1 = h + E1(e) + ch(e,f,g) + K[54] + W[54];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[55] = O1(W[53]) + W[48] + O0(W[40]) + W[39];t1 = h + E1(e) + ch(e,f,g) + K[55] + W[55];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[56] = O1(W[54]) + W[49] + O0(W[41]) + W[40];t1 = h + E1(e) + ch(e,f,g) + K[56] + W[56];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[57] = O1(W[55]) + W[50] + O0(W[42]) + W[41];t1 = h + E1(e) + ch(e,f,g) + K[57] + W[57];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[58] = O1(W[56]) + W[51] + O0(W[43]) + W[42];t1 = h + E1(e) + ch(e,f,g) + K[58] + W[58];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[59] = O1(W[57]) + W[52] + O0(W[44]) + W[43];t1 = h + E1(e) + ch(e,f,g) + K[59] + W[59];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[60] = O1(W[58]) + W[53] + O0(W[45]) + W[44];t1 = h + E1(e) + ch(e,f,g) + K[60] + W[60];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[61] = O1(W[59]) + W[54] + O0(W[46]) + W[45];t1 = h + E1(e) + ch(e,f,g) + K[61] + W[61];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[62] = O1(W[60]) + W[55] + O0(W[47]) + W[46];t1 = h + E1(e) + ch(e,f,g) + K[62] + W[62];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[63] = O1(W[61]) + W[56] + O0(W[48]) + W[47];t1 = h + E1(e) + ch(e,f,g) + K[63] + W[63];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

W[0]=a+=Last[0];
W[1]=b+=Last[1];
W[2]=c+=Last[2];
W[3]=d+=Last[3];
W[4]=e+=Last[4];
W[5]=f+=Last[5];
W[6]=g+=Last[6];
W[7]=h+=Last[7];

W[8]=paddy[12];

// W[9]=paddy[13];
// W[10]=paddy[14];
// W[11]=paddy[15];
// W[12]=paddy[16];
// W[13]=paddy[17];
// W[14]=paddy[18];
W[15]=paddy[19];

// a=initH[0]; copies below can be avoided TODO
// b=initH[1];
// c=initH[2];
// d=initH[3];
// e=initH[4];
//f=initH[5];
// g=initH[6];
// h=initH[7];

/* __constant uint paddy[24] = { as a lot of these are 0's we can save some additions of 0
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
values 0-7, 10, 13, 14, 15, 16, 17, 18 are all zeros and can be reomved from below TODO***
*/

t1 = initH[7] + E1(initH[4]) + ch(initH[4],initH[5],initH[6]) + K[0] + W[0];t2 = E0(initH[0]) + Ma(initH[0],initH[1],initH[2]); h=initH[6];g=initH[5];f=initH[4];e=initH[3]+t1;d=initH[2];c=initH[1];b=initH[0];a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[1] + W[1];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[2] + W[2];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[3] + W[3];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[4] + W[4];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[5] + W[5];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[6] + W[6];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[7] + W[7];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[8] + paddy[12];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[9];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[10];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[11];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[12];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[13];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[14];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[15] + paddy[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[16] = O0(W[1]) + W[0];t1 = h + E1(e) + ch(e,f,g) + K[16] + W[16];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[17] = O1(paddy[19]) + O0(W[2]) + W[1];t1 = h + E1(e) + ch(e,f,g) + K[17] + W[17];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[18] = O1(W[16]) + O0(W[3]) + W[2];t1 = h + E1(e) + ch(e,f,g) + K[18] + W[18];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[19] = O1(W[17]) + O0(W[4]) + W[3];t1 = h + E1(e) + ch(e,f,g) + K[19] + W[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[20] = O1(W[18]) + O0(W[5]) + W[4];t1 = h + E1(e) + ch(e,f,g) + K[20] + W[20];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[21] = O1(W[19]) + O0(W[6]) + W[5];t1 = h + E1(e) + ch(e,f,g) + K[21] + W[21];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[22] = O1(W[20]) + paddy[19] + O0(W[7]) + W[6];t1 = h + E1(e) + ch(e,f,g) + K[22] + W[22];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[23] = O1(W[21]) + W[16] + O0(paddy[12]) + W[7];t1 = h + E1(e) + ch(e,f,g) + K[23] + W[23];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[24] = O1(W[22]) + W[17] + paddy[12];t1 = h + E1(e) + ch(e,f,g) + K[24] + W[24];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[25] = O1(W[23]) + W[18] ;t1 = h + E1(e) + ch(e,f,g) + K[25] + W[25];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[26] = O1(W[24]) + W[19] ;t1 = h + E1(e) + ch(e,f,g) + K[26] + W[26];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[27] = O1(W[25]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[27] + W[27];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[28] = O1(W[26]) + W[21] ;t1 = h + E1(e) + ch(e,f,g) + K[28] + W[28];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[29] = O1(W[27]) + W[22] ;t1 = h + E1(e) + ch(e,f,g) + K[29] + W[29];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[30] = O1(W[28]) + W[23] + O0(paddy[19]);t1 = h + E1(e) + ch(e,f,g) + K[30] + W[30];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[31] = O1(W[29]) + W[24] + O0(W[16]) + paddy[19];t1 = h + E1(e) + ch(e,f,g) + K[31] + W[31];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[32] = O1(W[30]) + W[25] + O0(W[17]) + W[16];t1 = h + E1(e) + ch(e,f,g) + K[32] + W[32];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[33] = O1(W[31]) + W[26] + O0(W[18]) + W[17];t1 = h + E1(e) + ch(e,f,g) + K[33] + W[33];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[34] = O1(W[32]) + W[27] + O0(W[19]) + W[18];t1 = h + E1(e) + ch(e,f,g) + K[34] + W[34];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[35] = O1(W[33]) + W[28] + O0(W[20]) + W[19];t1 = h + E1(e) + ch(e,f,g) + K[35] + W[35];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[36] = O1(W[34]) + W[29] + O0(W[21]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[36] + W[36];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[37] = O1(W[35]) + W[30] + O0(W[22]) + W[21];t1 = h + E1(e) + ch(e,f,g) + K[37] + W[37];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[38] = O1(W[36]) + W[31] + O0(W[23]) + W[22];t1 = h + E1(e) + ch(e,f,g) + K[38] + W[38];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[39] = O1(W[37]) + W[32] + O0(W[24]) + W[23];t1 = h + E1(e) + ch(e,f,g) + K[39] + W[39];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[40] = O1(W[38]) + W[33] + O0(W[25]) + W[24];t1 = h + E1(e) + ch(e,f,g) + K[40] + W[40];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[41] = O1(W[39]) + W[34] + O0(W[26]) + W[25];t1 = h + E1(e) + ch(e,f,g) + K[41] + W[41];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[42] = O1(W[40]) + W[35] + O0(W[27]) + W[26];t1 = h + E1(e) + ch(e,f,g) + K[42] + W[42];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[43] = O1(W[41]) + W[36] + O0(W[28]) + W[27];t1 = h + E1(e) + ch(e,f,g) + K[43] + W[43];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[44] = O1(W[42]) + W[37] + O0(W[29]) + W[28];t1 = h + E1(e) + ch(e,f,g) + K[44] + W[44];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[45] = O1(W[43]) + W[38] + O0(W[30]) + W[29];t1 = h + E1(e) + ch(e,f,g) + K[45] + W[45];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[46] = O1(W[44]) + W[39] + O0(W[31]) + W[30];t1 = h + E1(e) + ch(e,f,g) + K[46] + W[46];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[47] = O1(W[45]) + W[40] + O0(W[32]) + W[31];t1 = h + E1(e) + ch(e,f,g) + K[47] + W[47];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[48] = O1(W[46]) + W[41] + O0(W[33]) + W[32];t1 = h + E1(e) + ch(e,f,g) + K[48] + W[48];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[49] = O1(W[47]) + W[42] + O0(W[34]) + W[33];t1 = h + E1(e) + ch(e,f,g) + K[49] + W[49];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[50] = O1(W[48]) + W[43] + O0(W[35]) + W[34];t1 = h + E1(e) + ch(e,f,g) + K[50] + W[50];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[51] = O1(W[49]) + W[44] + O0(W[36]) + W[35];t1 = h + E1(e) + ch(e,f,g) + K[51] + W[51];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[52] = O1(W[50]) + W[45] + O0(W[37]) + W[36];t1 = h + E1(e) + ch(e,f,g) + K[52] + W[52];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[53] = O1(W[51]) + W[46] + O0(W[38]) + W[37];t1 = h + E1(e) + ch(e,f,g) + K[53] + W[53];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[54] = O1(W[52]) + W[47] + O0(W[39]) + W[38];t1 = h + E1(e) + ch(e,f,g) + K[54] + W[54];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[55] = O1(W[53]) + W[48] + O0(W[40]) + W[39];t1 = h + E1(e) + ch(e,f,g) + K[55] + W[55];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[56] = O1(W[54]) + W[49] + O0(W[41]) + W[40];t1 = h + E1(e) + ch(e,f,g) + K[56] + W[56];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[57] = O1(W[55]) + W[50] + O0(W[42]) + W[41];t1 = h + E1(e) + ch(e,f,g) + K[57] + W[57];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[58] = O1(W[56]) + W[51] + O0(W[43]) + W[42];t1 = h + E1(e) + ch(e,f,g) + K[58] + W[58];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[59] = O1(W[57]) + W[52] + O0(W[44]) + W[43];t1 = h + E1(e) + ch(e,f,g) + K[59] + W[59];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[60] = O1(W[58]) + W[53] + O0(W[45]) + W[44];t1 = h + E1(e) + ch(e,f,g) + K[60] + W[60];t2 = E0(a) + Ma(a,b,c);
if (((d+t1) + initH[7]) == 0)
{
h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

W[61] = O1(W[59]) + W[54] + O0(W[46]) + W[45];t1 = h + E1(e) + ch(e,f,g) + K[61] + W[61];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
// not sure of the endian so TODO here --->>> if (((d+t1) + initH[6]) <= target){
W[62] = O1(W[60]) + W[55] + O0(W[47]) + W[46];t1 = h + E1(e) + ch(e,f,g) + K[62] + W[62];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[63] = O1(W[61]) + W[56] + O0(W[48]) + W[47];t1 = h + E1(e) + ch(e,f,g) + K[63] + W[63];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

a+=initH[0];
b+=initH[1];
c+=initH[2];
d+=initH[3];
e+=initH[4];
f+=initH[5];
g+=initH[6];
h+=initH[7]; 



#if defined(VECTORS2)||defined(VECTORS4)
if (any(h==0)) { // 32 zeros at least
    if (h.x==0)
    SETFOUND(nonce.x);
if (h.y==0)
    SETFOUND(nonce.y);
#if defined(VECTORS4)
    if (h.z==0)
    SETFOUND(nonce.z);
if(h.w ==0)
    SETFOUND(nonce.w);

#endif
}

#else
    if (h==0) { // 32 zeros at least
    SETFOUND(nonce);
}

#endif

};

}

@ghost ghost changed the title Replace you for loops with this since there wasting ticks Replace your for loops with this since there wasting ticks May 2, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

0 participants