ROTATE
FF (a, b, c, d, in[i], round1consts[i%4]); ROTATE;
GG (a, b, c, d, in[round2indices[i]], round2consts[i%4]); ROTATE;
HH (a, b, c, d, in[round3indices[i]], round3consts[i%4]); ROTATE;
ROTATE;
ROTATE;
ROTATE;
ROTATE;
a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
#if defined(ROTATE)
rk[j] = tpe ^ ROTATE(tpd, 16) ^ ROTATE(tp9, 24) ^ ROTATE(tpb, 8);
#if defined(ROTATE)
rk[j] = tpe ^ ROTATE(tpd, 16) ^ ROTATE(tp9, 8) ^ ROTATE(tpb, 24);
#if defined(ROTATE)
t[i] = r2 ^ ROTATE(r2, 24) ^ ROTATE(r0, 24) ^ ROTATE(r0, 16) ^ ROTATE(r0, 8);
#if defined(ROTATE)
t[i] = r2 ^ ROTATE(r2, 24) ^ ROTATE(r0, 24) ^ ROTATE(r0, 16) ^ ROTATE(r0, 8);
#if defined(ROTATE)
t[i] = tpe ^ ROTATE(tpd, 16) ^ ROTATE(tp9, 8) ^ ROTATE(tpb, 24);
#if defined(ROTATE)
t[i] = tpe ^ ROTATE(tpd, 16) ^ ROTATE(tp9, 8) ^ ROTATE(tpb, 24);
x[a] += x[b], x[d] = ROTATE((x[d] ^ x[a]), 16), \
x[c] += x[d], x[b] = ROTATE((x[b] ^ x[c]), 12), \
x[a] += x[b], x[d] = ROTATE((x[d] ^ x[a]), 8), \
x[c] += x[d], x[b] = ROTATE((x[b] ^ x[c]), 7))
r = ROTATE(r, 29) & 0xffffffffL;
l = ROTATE(l, 29) & 0xffffffffL;
data[0] = ROTATE(l, 3) & 0xffffffffL;
data[1] = ROTATE(r, 3) & 0xffffffffL;
r = ROTATE(r, 29) & 0xffffffffL;
l = ROTATE(l, 29) & 0xffffffffL;
l = ROTATE(l, 3) & 0xffffffffL;
r = ROTATE(r, 3) & 0xffffffffL;
#ifndef ROTATE
t = ROTATE(t, 4); \
l = ROTATE(l, 3) & 0xffffffffL;
r = ROTATE(r, 3) & 0xffffffffL;
*(k++) = ROTATE(t2, 30) & 0xffffffffL;
*(k++) = ROTATE(t2, 26) & 0xffffffffL;
a = ROTATE(a, s); \
a = ROTATE(a, s); \
a = ROTATE(a, s); \
a = ROTATE(a, s); \
a = ROTATE(a, s); \
a = ROTATE(a, s); \
a = ROTATE(a, s); \
a = ROTATE(a, s) + e; \
c = ROTATE(c, 10); \
a = ROTATE(a, s) + e; \
c = ROTATE(c, 10); \
a = ROTATE(a, s) + e; \
c = ROTATE(c, 10); \
a = ROTATE(a, s) + e; \
c = ROTATE(c, 10); \
a = ROTATE(a, s) + e; \
c = ROTATE(c, 10); \
#define Sigma0(x) (ROTATE((x), 30) ^ ROTATE((x), 19) ^ ROTATE((x), 10))
#define Sigma1(x) (ROTATE((x), 26) ^ ROTATE((x), 21) ^ ROTATE((x), 7))
#define sigma0(x) (ROTATE((x), 25) ^ ROTATE((x), 14) ^ ((x) >> 3))
#define sigma1(x) (ROTATE((x), 15) ^ ROTATE((x), 13) ^ ((x) >> 10))
(f) += (e) + K_20_39 + ROTATE((a), 5) + F_20_39((b), (c), (d)); \
(b) = ROTATE((b), 30);
(f) += (e) + K_20_39 + ROTATE((a), 5) + F_20_39((b), (c), (d)); \
(b) = ROTATE((b), 30);
(f) += (e) + K_40_59 + ROTATE((a), 5) + F_40_59((b), (c), (d)); \
(b) = ROTATE((b), 30);
(f) = xa + (e) + K_60_79 + ROTATE((a), 5) + F_60_79((b), (c), (d)); \
(b) = ROTATE((b), 30);
E = D, D = C, C = ROTATE(B, 30), B = A; \
A = ROTATE(A, 5) + T + xi; \
E = D, D = C, C = ROTATE(B, 30), B = A; \
A = ROTATE(A, 5) + T; \
E = D, D = C, C = ROTATE(B, 30), B = A; \
A = ROTATE(A, 5) + T; \
E = D, D = C, C = ROTATE(B, 30), B = A; \
A = ROTATE(A, 5) + T; \
E = D, D = C, C = ROTATE(B, 30), B = A; \
A = ROTATE(A, 5) + T + xa; \
ix = (a) = ROTATE((a), 1))
(f) = xi + (e) + K_00_19 + ROTATE((a), 5) + F_00_19((b), (c), (d)); \
(b) = ROTATE((b), 30);
(f) += (e) + K_00_19 + ROTATE((a), 5) + F_00_19((b), (c), (d)); \
(b) = ROTATE((b), 30);
const SM3_WORD A12 = ROTATE(A, 12); \
const SM3_WORD SS1 = ROTATE(A12_SM, 7); \
B = ROTATE(B, 9); \
F = ROTATE(F, 19); \
#define P0(X) (X ^ ROTATE(X, 9) ^ ROTATE(X, 17))
#define P1(X) (X ^ ROTATE(X, 15) ^ ROTATE(X, 23))
(P1(W0 ^ W7 ^ ROTATE(W13, 15)) ^ ROTATE(W3, 7) ^ W10)
#if !defined(ROTATE)
#if defined(ROTATE) && !defined(STRICT_ALIGNMENT)
#if defined(ROTATE)
#define C1(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 1]], 8)
#define C2(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 2]], 16)
#define C3(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 3]], 24)
#define C4(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 4]], 32)
#define C5(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 5]], 40)
#define C6(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 6]], 48)
#define C7(K, i) ROTATE(Cx.q[K.c[(i) * 8 + 7]], 56)
(a)=((ROTATE(l,8)&0x00FF00FF)|(ROTATE(l,24)&0xFF00FF00)); \
(a)=ROTATE(l,16L); \
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
(a)=((ROTATE(l,8)&0x00FF00FF)|(ROTATE(l,24)&0xFF00FF00)); \
(a)=ROTATE(l,16L); \
X[(i)&0x0f]=(a)=ROTATE((a),1);
(f)=xa[i]+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
(b)=ROTATE((b),30);
(f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
(b)=ROTATE((b),30);
(f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
(b)=ROTATE((b),30);
(f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
(b)=ROTATE((b),30);
(f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
(b)=ROTATE((b),30);
(f)=X[(i)&0x0f]+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
(b)=ROTATE((b),30);
a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
l=ROTATE(l,3)&0xffffffffL;
r=ROTATE(r,3)&0xffffffffL;
r=ROTATE(r,29)&0xffffffffL;
l=ROTATE(l,29)&0xffffffffL;
data[0]=ROTATE(l,3)&0xffffffffL;
data[1]=ROTATE(r,3)&0xffffffffL;
r=ROTATE(r,29)&0xffffffffL;
l=ROTATE(l,29)&0xffffffffL;
t=ROTATE(t,4); \
t=ROTATE(t,4); \
t=ROTATE(t,4); \
t=ROTATE(t,6); \
t=ROTATE(t,6); \
t=ROTATE(t,4); \
*(k++)=ROTATE(t2,30)&0xffffffffL;
*(k++)=ROTATE(t2,26)&0xffffffffL;
putchar(ROTATE(ch, winner));
putchar(ROTATE(ch, rot));