gostr3411-94: small speedup
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Tue, 12 Nov 2019 13:50:02 +0000 (16:50 +0300)
committerJussi Kivilinna <jussi.kivilinna@iki.fi>
Thu, 21 Nov 2019 15:59:26 +0000 (17:59 +0200)
* cipher/gostr3411-94.c (do_p): unroll loop for a small spedup
--

Before:
 GOSTR3411_94   |     25.12 ns/B     37.96 MiB/s         - c/B
 GOSTR3411_CP   |     25.14 ns/B     37.93 MiB/s         - c/B
After:
 GOSTR3411_94   |     24.57 ns/B     38.81 MiB/s         - c/B
 GOSTR3411_CP   |     24.59 ns/B     38.79 MiB/s         - c/B

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
cipher/gostr3411-94.c

index ebf9e0a..c5a0aef 100644 (file)
@@ -83,17 +83,45 @@ do_p (u32 *p, u32 *u, u32 *v)
   for (k = 0; k < 8; k++)
     t[k] = u[k] ^ v[k];
 
-  for (k = 0; k < 4; k++)
-    {
-          p[k+0] = ((t[0] >> (8*k)) & 0xff) << 0 |
-                   ((t[2] >> (8*k)) & 0xff) << 8 |
-                   ((t[4] >> (8*k)) & 0xff) << 16 |
-                   ((t[6] >> (8*k)) & 0xff) << 24;
-          p[k+4] = ((t[1] >> (8*k)) & 0xff) << 0 |
-                   ((t[3] >> (8*k)) & 0xff) << 8 |
-                   ((t[5] >> (8*k)) & 0xff) << 16 |
-                   ((t[7] >> (8*k)) & 0xff) << 24;
-    }
+  k = 0;
+  p[k+0] = ((t[0] >> (8*k)) & 0xff) << 0 |
+           ((t[2] >> (8*k)) & 0xff) << 8 |
+           ((t[4] >> (8*k)) & 0xff) << 16 |
+           ((t[6] >> (8*k)) & 0xff) << 24;
+  p[k+4] = ((t[1] >> (8*k)) & 0xff) << 0 |
+           ((t[3] >> (8*k)) & 0xff) << 8 |
+           ((t[5] >> (8*k)) & 0xff) << 16 |
+           ((t[7] >> (8*k)) & 0xff) << 24;
+
+  k = 1;
+  p[k+0] = ((t[0] >> (8*k)) & 0xff) << 0 |
+           ((t[2] >> (8*k)) & 0xff) << 8 |
+           ((t[4] >> (8*k)) & 0xff) << 16 |
+           ((t[6] >> (8*k)) & 0xff) << 24;
+  p[k+4] = ((t[1] >> (8*k)) & 0xff) << 0 |
+           ((t[3] >> (8*k)) & 0xff) << 8 |
+           ((t[5] >> (8*k)) & 0xff) << 16 |
+           ((t[7] >> (8*k)) & 0xff) << 24;
+
+  k = 2;
+  p[k+0] = ((t[0] >> (8*k)) & 0xff) << 0 |
+           ((t[2] >> (8*k)) & 0xff) << 8 |
+           ((t[4] >> (8*k)) & 0xff) << 16 |
+           ((t[6] >> (8*k)) & 0xff) << 24;
+  p[k+4] = ((t[1] >> (8*k)) & 0xff) << 0 |
+           ((t[3] >> (8*k)) & 0xff) << 8 |
+           ((t[5] >> (8*k)) & 0xff) << 16 |
+           ((t[7] >> (8*k)) & 0xff) << 24;
+
+  k = 3;
+  p[k+0] = ((t[0] >> (8*k)) & 0xff) << 0 |
+           ((t[2] >> (8*k)) & 0xff) << 8 |
+           ((t[4] >> (8*k)) & 0xff) << 16 |
+           ((t[6] >> (8*k)) & 0xff) << 24;
+  p[k+4] = ((t[1] >> (8*k)) & 0xff) << 0 |
+           ((t[3] >> (8*k)) & 0xff) << 8 |
+           ((t[5] >> (8*k)) & 0xff) << 16 |
+           ((t[7] >> (8*k)) & 0xff) << 24;
 }
 
 static void