| |
|
| /* Several design constants */ |
/* Several design constants */ |
| |
|
| const ull C0=0x1248842112488421I64; |
const ull C0=U64C(0x1248842112488421); |
| const ull C1=0x1248124812481248I64; |
const ull C1=U64C(0x1248124812481248); |
| const ull C3=0x4812481248124812I64; |
const ull C3=U64C(0x4812481248124812); |
| |
|
| /* ------------------------------------------------------------------------- */ |
/* ------------------------------------------------------------------------- */ |
| /* Internal State Update... Building Block */ |
/* Internal State Update... Building Block */ |
| /* ------------------------------------------------------------------------- */ |
/* ------------------------------------------------------------------------- */ |
| #define Mir1_STATE_UPDATE \ |
#define Mir1_STATE_UPDATE \ |
| Int r0, r1, t0, t1, p0, p1, s, m0, m1, m2, m3; \ |
Int r0, r1, t0, t1, p0, p1, s, m0, m1, m2, m3; \ |
| t0.v = p.x0.v << 1; \ |
t0.v = ctx->x0.v << 1; \ |
| p1.v = p.x3.v | C3; \ |
p1.v = ctx->x3.v | C3; \ |
| p0.v = p.x1.v | C1; \ |
p0.v = ctx->x1.v | C1; \ |
| t1.v = p.x2.v << 1; \ |
t1.v = ctx->x2.v << 1; \ |
| m2.v = p1.v * t0.v; \ |
m2.v = p1.v * t0.v; \ |
| m3.v = p0.v * t0.v; \ |
m3.v = p0.v * t0.v; \ |
| m0.v = p0.v * t1.v; \ |
m0.v = p0.v * t1.v; \ |
| m1.v = p1.v * t1.v; \ |
m1.v = p1.v * t1.v; \ |
| r0.v = p.x0.v & p.x1.v; \ |
r0.v = ctx->x0.v & ctx->x1.v; \ |
| p.a.b.b0 ^= p.S[p.b.b.b0]; \ |
ctx->a.b.b0 ^= ctx->S[ctx->b.b.b0]; \ |
| p.a.b.b1 ^= p.S[p.b.b.b1]; \ |
ctx->a.b.b1 ^= ctx->S[ctx->b.b.b1]; \ |
| r1.v = r0.v & p.x2.v; \ |
r1.v = r0.v & ctx->x2.v; \ |
| p.a.b.b2 ^= p.S[p.b.b.b2]; \ |
ctx->a.b.b2 ^= ctx->S[ctx->b.b.b2]; \ |
| p.a.b.b3 ^= p.S[p.b.b.b3]; \ |
ctx->a.b.b3 ^= ctx->S[ctx->b.b.b3]; \ |
| s.v = r1.v & p.x3.v; \ |
s.v = r1.v & ctx->x3.v; \ |
| p.a.b.b4 ^= p.S[p.b.b.b4]; \ |
ctx->a.b.b4 ^= ctx->S[ctx->b.b.b4]; \ |
| p.a.b.b5 ^= p.S[p.b.b.b5]; \ |
ctx->a.b.b5 ^= ctx->S[ctx->b.b.b5]; \ |
| s.v = (s.v + C0) ^ s.v; \ |
s.v = (s.v + C0) ^ s.v; \ |
| p.a.b.b6 ^= p.S[p.b.b.b6]; \ |
ctx->a.b.b6 ^= ctx->S[ctx->b.b.b6]; \ |
| p.a.b.b7 ^= p.S[p.b.b.b7]; \ |
ctx->a.b.b7 ^= ctx->S[ctx->b.b.b7]; \ |
| p.x3.v += (s.v & r1.v) + m3.v; \ |
ctx->x3.v += (s.v & r1.v) + m3.v; \ |
| p.x2.v += (s.v & r0.v) + m2.v; \ |
ctx->x2.v += (s.v & r0.v) + m2.v; \ |
| r0.v = (p.b.v << 29); \ |
r0.v = (ctx->b.v << 29); \ |
| p.x1.v += (s.v & p.x0.v) + m1.v; \ |
ctx->x1.v += (s.v & ctx->x0.v) + m1.v; \ |
| r0.v |= (p.b.v >> 35); \ |
r0.v |= (ctx->b.v >> 35); \ |
| p.x0.v += s.v + m0.v; \ |
ctx->x0.v += s.v + m0.v; \ |
| r0.v += p.x1.w.w1; \ |
r0.v += ctx->x1.w.w1; \ |
| r0.w.w1 += p.x3.w.w1; \ |
r0.w.w1 += ctx->x3.w.w1; \ |
| p.b.w.w0 = p.a.w.w0 ^ p.x0.w.w1; \ |
ctx->b.w.w0 = ctx->a.w.w0 ^ ctx->x0.w.w1; \ |
| p.b.w.w1 = p.a.w.w1 ^ p.x2.w.w1; \ |
ctx->b.w.w1 = ctx->a.w.w1 ^ ctx->x2.w.w1; \ |
| p.a.v = r0.v + p.b.v; |
ctx->a.v = r0.v + ctx->b.v; |
| |
|
| |
|
| #endif |
#endif |