- const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
-
- const u32x w0 = w0l | w0r;
-
- u32x w_t[16];
-
- w_t[ 0] = w0;
- w_t[ 1] = w[ 1];
- w_t[ 2] = w[ 2];
- w_t[ 3] = w[ 3];
- w_t[ 4] = w[ 4];
- w_t[ 5] = w[ 5];
- w_t[ 6] = w[ 6];
- w_t[ 7] = w[ 7];
- w_t[ 8] = w[ 8];
- w_t[ 9] = w[ 9];
- w_t[10] = w[10];
- w_t[11] = w[11];
- w_t[12] = w[12];
- w_t[13] = w[13];
- w_t[14] = w[14];
- w_t[15] = w[15];
-
- u32x a = MYSQL323_A;
- u32x b = MYSQL323_B;
- u32x c = 0;
- u32x d = 0;
-
- u32x add = 7;
-
- #define ROUND(v) \
- { \
- a ^= (((a & 0x3f) + add) * (v)) + (a << 8); \
- b += (b << 8) ^ a; \
- add += v; \
- }
-
- int i;
- int j;
-
- for (i = 0, j = 0; i <= (int) pw_len - 4; i += 4, j += 1)
- {
- const u32x wj = w_t[j];
-
- ROUND ((wj >> 0) & 0xff);
- ROUND ((wj >> 8) & 0xff);
- ROUND ((wj >> 16) & 0xff);
- ROUND ((wj >> 24) & 0xff);
- }
-
- const u32x wj = w_t[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;
-
- COMPARE_M_SIMD (a, b, c, d);
+ 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;