- const u32 w0r = words_buf_r[il_pos];
-
- const u32 w0 = w0l | w0r;
-
- u32 a = MYSQL323_A;
- u32 b = MYSQL323_B;
-
- u32 add = 7;
-
- #define ROUND(v) \
- { \
- a ^= (((a & 0x3f) + add) * (v)) + (a << 8); \
- b += (b << 8) ^ a; \
- add += v; \
- }
-
- if (pw_len >= 4)
- {
- ROUND ((w0 >> 0) & 0xff);
- ROUND ((w0 >> 8) & 0xff);
- ROUND ((w0 >> 16) & 0xff);
- ROUND ((w0 >> 24) & 0xff);
- }
- else if (pw_len == 3)
- {
- ROUND ((w0 >> 0) & 0xff);
- ROUND ((w0 >> 8) & 0xff);
- ROUND ((w0 >> 16) & 0xff);
- }
- else if (pw_len == 2)
- {
- ROUND ((w0 >> 0) & 0xff);
- ROUND ((w0 >> 8) & 0xff);
- }
- else if (pw_len == 1)
- {
- ROUND ((w0 >> 0) & 0xff);
- }
-
- int i;
- int j;
-
- for (i = 4, j = 1; i <= (int) pw_len - 4; i += 4, j += 1)
- {
- const u32 wj = w[j];
-
- ROUND ((wj >> 0) & 0xff);
- ROUND ((wj >> 8) & 0xff);
- ROUND ((wj >> 16) & 0xff);
- ROUND ((wj >> 24) & 0xff);
- }
-
- const u32 wj = w[j];
-
- const u32 left = pw_len - i;
-
- if (left == 3)
- {
- ROUND ((wj >> 0) & 0xff);
- ROUND ((wj >> 8) & 0xff);
- ROUND ((wj >> 16) & 0xff);
- }
- else if (left == 2)
- {
- ROUND ((wj >> 0) & 0xff);
- ROUND ((wj >> 8) & 0xff);
- }
- else if (left == 1)
- {
- ROUND ((wj >> 0) & 0xff);
- }
-
- a &= 0x7fffffff;
- b &= 0x7fffffff;
-
- const u32 r0 = a;
- const u32 r1 = b;
- const u32 r2 = 0;
- const u32 r3 = 0;
-
- #include COMPARE_M
+ case 1:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 2:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 3:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 4:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 5:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 6:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 7:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 8:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 9:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 10:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 11:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff); ROUND ((w[2] >> 16) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 12:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 13:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
+ ROUND ((w[3] >> 0) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 14:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
+ ROUND ((w[3] >> 0) & 0xff); ROUND ((w[3] >> 8) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 15:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
+ ROUND ((w[3] >> 0) & 0xff); ROUND ((w[3] >> 8) & 0xff); ROUND ((w[3] >> 16) & 0xff);
+ CODE_POST_M;
+ break;
+
+ case 16:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ ROUND ((w[1] >> 0) & 0xff); ROUND ((w[1] >> 8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
+ ROUND ((w[2] >> 0) & 0xff); ROUND ((w[2] >> 8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
+ ROUND ((w[3] >> 0) & 0xff); ROUND ((w[3] >> 8) & 0xff); ROUND ((w[3] >> 16) & 0xff); ROUND ((w[3] >> 24) & 0xff);
+ CODE_POST_M;
+ break;
+
+ default:
+ CODE_PRE;
+ ROUND ((w0 >> 0) & 0xff); ROUND ((w0 >> 8) & 0xff); ROUND ((w0 >> 16) & 0xff); ROUND ((w0 >> 24) & 0xff);
+ CODE_LOOP (pw_len - 4);
+ CODE_POST_M;
+ break;