From a15c16577304adce42f446dbca78374269f7cf51 Mon Sep 17 00:00:00 2001
From: Jens Steube <jens.steube@gmail.com>
Date: Fri, 16 Feb 2018 11:38:08 +0100
Subject: [PATCH] Revert the pos == 0 change due to some unexpected results on
 nvidia

---
 OpenCL/inc_hash_md4.cl       | 316 +++++++------------
 OpenCL/inc_hash_md5.cl       | 316 +++++++------------
 OpenCL/inc_hash_ripemd160.cl | 316 +++++++------------
 OpenCL/inc_hash_sha1.cl      | 316 +++++++------------
 OpenCL/inc_hash_sha224.cl    | 316 +++++++------------
 OpenCL/inc_hash_sha256.cl    | 316 +++++++------------
 OpenCL/inc_hash_sha384.cl    | 588 +++++++++++++----------------------
 OpenCL/inc_hash_sha512.cl    | 588 +++++++++++++----------------------
 OpenCL/inc_hash_whirlpool.cl | 316 +++++++------------
 9 files changed, 1216 insertions(+), 2172 deletions(-)

diff --git a/OpenCL/inc_hash_md4.cl b/OpenCL/inc_hash_md4.cl
index 591957235..063ac6a9e 100644
--- a/OpenCL/inc_hash_md4.cl
+++ b/OpenCL/inc_hash_md4.cl
@@ -114,117 +114,71 @@ DECLSPEC void md4_update_64 (md4_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2[4], u3
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      md4_transform (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_le_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_le_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_le_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_le_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    md4_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      md4_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -1280,117 +1234,71 @@ DECLSPEC void md4_update_vector_64 (md4_ctx_vector_t *ctx, u32x w0[4], u32x w1[4
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      md4_transform_vector (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_le (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_le (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_le (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_le (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    md4_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      md4_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_md5.cl b/OpenCL/inc_hash_md5.cl
index 93204c2b5..1950a9876 100644
--- a/OpenCL/inc_hash_md5.cl
+++ b/OpenCL/inc_hash_md5.cl
@@ -150,117 +150,71 @@ DECLSPEC void md5_update_64 (md5_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2[4], u3
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      md5_transform (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_le_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_le_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_le_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_le_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    md5_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      md5_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -1352,117 +1306,71 @@ DECLSPEC void md5_update_vector_64 (md5_ctx_vector_t *ctx, u32x w0[4], u32x w1[4
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      md5_transform_vector (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_le (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_le (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_le (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_le (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    md5_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      md5_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_ripemd160.cl b/OpenCL/inc_hash_ripemd160.cl
index dd8a785b8..c50338e7e 100644
--- a/OpenCL/inc_hash_ripemd160.cl
+++ b/OpenCL/inc_hash_ripemd160.cl
@@ -248,117 +248,71 @@ DECLSPEC void ripemd160_update_64 (ripemd160_ctx_t *ctx, u32 w0[4], u32 w1[4], u
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      ripemd160_transform (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_le_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_le_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_le_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_le_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    ripemd160_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      ripemd160_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -1549,117 +1503,71 @@ DECLSPEC void ripemd160_update_vector_64 (ripemd160_ctx_vector_t *ctx, u32x w0[4
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      ripemd160_transform_vector (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_le (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_le (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_le (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_le (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    ripemd160_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      ripemd160_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_sha1.cl b/OpenCL/inc_hash_sha1.cl
index e4143253f..8caa33dbe 100644
--- a/OpenCL/inc_hash_sha1.cl
+++ b/OpenCL/inc_hash_sha1.cl
@@ -180,117 +180,71 @@ DECLSPEC void sha1_update_64 (sha1_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2[4],
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      sha1_transform (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    sha1_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      sha1_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -1649,117 +1603,71 @@ DECLSPEC void sha1_update_vector_64 (sha1_ctx_vector_t *ctx, u32x w0[4], u32x w1
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      sha1_transform_vector (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    sha1_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      sha1_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_sha224.cl b/OpenCL/inc_hash_sha224.cl
index f014778a9..1bda36364 100644
--- a/OpenCL/inc_hash_sha224.cl
+++ b/OpenCL/inc_hash_sha224.cl
@@ -165,117 +165,71 @@ DECLSPEC void sha224_update_64 (sha224_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2[
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      sha224_transform (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    sha224_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      sha224_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -1366,117 +1320,71 @@ DECLSPEC void sha224_update_vector_64 (sha224_ctx_vector_t *ctx, u32x w0[4], u32
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      sha224_transform_vector (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    sha224_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      sha224_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_sha256.cl b/OpenCL/inc_hash_sha256.cl
index 917f62468..49e107024 100644
--- a/OpenCL/inc_hash_sha256.cl
+++ b/OpenCL/inc_hash_sha256.cl
@@ -165,117 +165,71 @@ DECLSPEC void sha256_update_64 (sha256_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2[
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      sha256_transform (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    sha256_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      sha256_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -1366,117 +1320,71 @@ DECLSPEC void sha256_update_vector_64 (sha256_ctx_vector_t *ctx, u32x w0[4], u32
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      sha256_transform_vector (w0, w1, w2, w3, ctx->h);
+    switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    sha256_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
 
-      sha256_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_sha384.cl b/OpenCL/inc_hash_sha384.cl
index 1c80a3cf7..310844a5f 100644
--- a/OpenCL/inc_hash_sha384.cl
+++ b/OpenCL/inc_hash_sha384.cl
@@ -189,201 +189,123 @@ DECLSPEC void sha384_update_128 (sha384_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 128)
   {
-    if (len < 128)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-      ctx->w4[0] = w4[0];
-      ctx->w4[1] = w4[1];
-      ctx->w4[2] = w4[2];
-      ctx->w4[3] = w4[3];
-      ctx->w5[0] = w5[0];
-      ctx->w5[1] = w5[1];
-      ctx->w5[2] = w5[2];
-      ctx->w5[3] = w5[3];
-      ctx->w6[0] = w6[0];
-      ctx->w6[1] = w6[1];
-      ctx->w6[2] = w6[2];
-      ctx->w6[3] = w6[3];
-      ctx->w7[0] = w7[0];
-      ctx->w7[1] = w7[1];
-      ctx->w7[2] = w7[2];
-      ctx->w7[3] = w7[3];
-    }
-    else
-    {
-      sha384_transform (w0, w1, w2, w3, w4, w5, w6, w7, ctx->h);
+    switch_buffer_by_offset_8x4_be_S (w0, w1, w2, w3, w4, w5, w6, w7, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-      ctx->w4[0] = 0;
-      ctx->w4[1] = 0;
-      ctx->w4[2] = 0;
-      ctx->w4[3] = 0;
-      ctx->w5[0] = 0;
-      ctx->w5[1] = 0;
-      ctx->w5[2] = 0;
-      ctx->w5[3] = 0;
-      ctx->w6[0] = 0;
-      ctx->w6[1] = 0;
-      ctx->w6[2] = 0;
-      ctx->w6[3] = 0;
-      ctx->w7[0] = 0;
-      ctx->w7[1] = 0;
-      ctx->w7[2] = 0;
-      ctx->w7[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
   }
   else
   {
-    if ((pos + len) < 128)
-    {
-      switch_buffer_by_offset_8x4_be_S (w0, w1, w2, w3, w4, w5, w6, w7, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
+    u32 c4[4] = { 0 };
+    u32 c5[4] = { 0 };
+    u32 c6[4] = { 0 };
+    u32 c7[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
-      u32 c4[4] = { 0 };
-      u32 c5[4] = { 0 };
-      u32 c6[4] = { 0 };
-      u32 c7[4] = { 0 };
+    switch_buffer_by_offset_8x4_carry_be_S (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
 
-      switch_buffer_by_offset_8x4_carry_be_S (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
+    sha384_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
 
-      sha384_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-      ctx->w4[0] = c4[0];
-      ctx->w4[1] = c4[1];
-      ctx->w4[2] = c4[2];
-      ctx->w4[3] = c4[3];
-      ctx->w5[0] = c5[0];
-      ctx->w5[1] = c5[1];
-      ctx->w5[2] = c5[2];
-      ctx->w5[3] = c5[3];
-      ctx->w6[0] = c6[0];
-      ctx->w6[1] = c6[1];
-      ctx->w6[2] = c6[2];
-      ctx->w6[3] = c6[3];
-      ctx->w7[0] = c7[0];
-      ctx->w7[1] = c7[1];
-      ctx->w7[2] = c7[2];
-      ctx->w7[3] = c7[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
+    ctx->w4[0] = c4[0];
+    ctx->w4[1] = c4[1];
+    ctx->w4[2] = c4[2];
+    ctx->w4[3] = c4[3];
+    ctx->w5[0] = c5[0];
+    ctx->w5[1] = c5[1];
+    ctx->w5[2] = c5[2];
+    ctx->w5[3] = c5[3];
+    ctx->w6[0] = c6[0];
+    ctx->w6[1] = c6[1];
+    ctx->w6[2] = c6[2];
+    ctx->w6[3] = c6[3];
+    ctx->w7[0] = c7[0];
+    ctx->w7[1] = c7[1];
+    ctx->w7[2] = c7[2];
+    ctx->w7[3] = c7[3];
   }
 }
 
@@ -2094,201 +2016,123 @@ DECLSPEC void sha384_update_vector_128 (sha384_ctx_vector_t *ctx, u32x w0[4], u3
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 128)
   {
-    if (len < 128)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-      ctx->w4[0] = w4[0];
-      ctx->w4[1] = w4[1];
-      ctx->w4[2] = w4[2];
-      ctx->w4[3] = w4[3];
-      ctx->w5[0] = w5[0];
-      ctx->w5[1] = w5[1];
-      ctx->w5[2] = w5[2];
-      ctx->w5[3] = w5[3];
-      ctx->w6[0] = w6[0];
-      ctx->w6[1] = w6[1];
-      ctx->w6[2] = w6[2];
-      ctx->w6[3] = w6[3];
-      ctx->w7[0] = w7[0];
-      ctx->w7[1] = w7[1];
-      ctx->w7[2] = w7[2];
-      ctx->w7[3] = w7[3];
-    }
-    else
-    {
-      sha384_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, ctx->h);
+    switch_buffer_by_offset_8x4_be (w0, w1, w2, w3, w4, w5, w6, w7, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-      ctx->w4[0] = 0;
-      ctx->w4[1] = 0;
-      ctx->w4[2] = 0;
-      ctx->w4[3] = 0;
-      ctx->w5[0] = 0;
-      ctx->w5[1] = 0;
-      ctx->w5[2] = 0;
-      ctx->w5[3] = 0;
-      ctx->w6[0] = 0;
-      ctx->w6[1] = 0;
-      ctx->w6[2] = 0;
-      ctx->w6[3] = 0;
-      ctx->w7[0] = 0;
-      ctx->w7[1] = 0;
-      ctx->w7[2] = 0;
-      ctx->w7[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
   }
   else
   {
-    if ((pos + len) < 128)
-    {
-      switch_buffer_by_offset_8x4_be (w0, w1, w2, w3, w4, w5, w6, w7, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
+    u32x c4[4] = { 0 };
+    u32x c5[4] = { 0 };
+    u32x c6[4] = { 0 };
+    u32x c7[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
-      u32x c4[4] = { 0 };
-      u32x c5[4] = { 0 };
-      u32x c6[4] = { 0 };
-      u32x c7[4] = { 0 };
+    switch_buffer_by_offset_8x4_carry_be (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
 
-      switch_buffer_by_offset_8x4_carry_be (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
+    sha384_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
 
-      sha384_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-      ctx->w4[0] = c4[0];
-      ctx->w4[1] = c4[1];
-      ctx->w4[2] = c4[2];
-      ctx->w4[3] = c4[3];
-      ctx->w5[0] = c5[0];
-      ctx->w5[1] = c5[1];
-      ctx->w5[2] = c5[2];
-      ctx->w5[3] = c5[3];
-      ctx->w6[0] = c6[0];
-      ctx->w6[1] = c6[1];
-      ctx->w6[2] = c6[2];
-      ctx->w6[3] = c6[3];
-      ctx->w7[0] = c7[0];
-      ctx->w7[1] = c7[1];
-      ctx->w7[2] = c7[2];
-      ctx->w7[3] = c7[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
+    ctx->w4[0] = c4[0];
+    ctx->w4[1] = c4[1];
+    ctx->w4[2] = c4[2];
+    ctx->w4[3] = c4[3];
+    ctx->w5[0] = c5[0];
+    ctx->w5[1] = c5[1];
+    ctx->w5[2] = c5[2];
+    ctx->w5[3] = c5[3];
+    ctx->w6[0] = c6[0];
+    ctx->w6[1] = c6[1];
+    ctx->w6[2] = c6[2];
+    ctx->w6[3] = c6[3];
+    ctx->w7[0] = c7[0];
+    ctx->w7[1] = c7[1];
+    ctx->w7[2] = c7[2];
+    ctx->w7[3] = c7[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_sha512.cl b/OpenCL/inc_hash_sha512.cl
index c7ab37e47..b94677d16 100644
--- a/OpenCL/inc_hash_sha512.cl
+++ b/OpenCL/inc_hash_sha512.cl
@@ -189,201 +189,123 @@ DECLSPEC void sha512_update_128 (sha512_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 128)
   {
-    if (len < 128)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-      ctx->w4[0] = w4[0];
-      ctx->w4[1] = w4[1];
-      ctx->w4[2] = w4[2];
-      ctx->w4[3] = w4[3];
-      ctx->w5[0] = w5[0];
-      ctx->w5[1] = w5[1];
-      ctx->w5[2] = w5[2];
-      ctx->w5[3] = w5[3];
-      ctx->w6[0] = w6[0];
-      ctx->w6[1] = w6[1];
-      ctx->w6[2] = w6[2];
-      ctx->w6[3] = w6[3];
-      ctx->w7[0] = w7[0];
-      ctx->w7[1] = w7[1];
-      ctx->w7[2] = w7[2];
-      ctx->w7[3] = w7[3];
-    }
-    else
-    {
-      sha512_transform (w0, w1, w2, w3, w4, w5, w6, w7, ctx->h);
+    switch_buffer_by_offset_8x4_be_S (w0, w1, w2, w3, w4, w5, w6, w7, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-      ctx->w4[0] = 0;
-      ctx->w4[1] = 0;
-      ctx->w4[2] = 0;
-      ctx->w4[3] = 0;
-      ctx->w5[0] = 0;
-      ctx->w5[1] = 0;
-      ctx->w5[2] = 0;
-      ctx->w5[3] = 0;
-      ctx->w6[0] = 0;
-      ctx->w6[1] = 0;
-      ctx->w6[2] = 0;
-      ctx->w6[3] = 0;
-      ctx->w7[0] = 0;
-      ctx->w7[1] = 0;
-      ctx->w7[2] = 0;
-      ctx->w7[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
   }
   else
   {
-    if ((pos + len) < 128)
-    {
-      switch_buffer_by_offset_8x4_be_S (w0, w1, w2, w3, w4, w5, w6, w7, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
+    u32 c4[4] = { 0 };
+    u32 c5[4] = { 0 };
+    u32 c6[4] = { 0 };
+    u32 c7[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
-      u32 c4[4] = { 0 };
-      u32 c5[4] = { 0 };
-      u32 c6[4] = { 0 };
-      u32 c7[4] = { 0 };
+    switch_buffer_by_offset_8x4_carry_be_S (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
 
-      switch_buffer_by_offset_8x4_carry_be_S (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
+    sha512_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
 
-      sha512_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-      ctx->w4[0] = c4[0];
-      ctx->w4[1] = c4[1];
-      ctx->w4[2] = c4[2];
-      ctx->w4[3] = c4[3];
-      ctx->w5[0] = c5[0];
-      ctx->w5[1] = c5[1];
-      ctx->w5[2] = c5[2];
-      ctx->w5[3] = c5[3];
-      ctx->w6[0] = c6[0];
-      ctx->w6[1] = c6[1];
-      ctx->w6[2] = c6[2];
-      ctx->w6[3] = c6[3];
-      ctx->w7[0] = c7[0];
-      ctx->w7[1] = c7[1];
-      ctx->w7[2] = c7[2];
-      ctx->w7[3] = c7[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
+    ctx->w4[0] = c4[0];
+    ctx->w4[1] = c4[1];
+    ctx->w4[2] = c4[2];
+    ctx->w4[3] = c4[3];
+    ctx->w5[0] = c5[0];
+    ctx->w5[1] = c5[1];
+    ctx->w5[2] = c5[2];
+    ctx->w5[3] = c5[3];
+    ctx->w6[0] = c6[0];
+    ctx->w6[1] = c6[1];
+    ctx->w6[2] = c6[2];
+    ctx->w6[3] = c6[3];
+    ctx->w7[0] = c7[0];
+    ctx->w7[1] = c7[1];
+    ctx->w7[2] = c7[2];
+    ctx->w7[3] = c7[3];
   }
 }
 
@@ -2094,201 +2016,123 @@ DECLSPEC void sha512_update_vector_128 (sha512_ctx_vector_t *ctx, u32x w0[4], u3
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 128)
   {
-    if (len < 128)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-      ctx->w4[0] = w4[0];
-      ctx->w4[1] = w4[1];
-      ctx->w4[2] = w4[2];
-      ctx->w4[3] = w4[3];
-      ctx->w5[0] = w5[0];
-      ctx->w5[1] = w5[1];
-      ctx->w5[2] = w5[2];
-      ctx->w5[3] = w5[3];
-      ctx->w6[0] = w6[0];
-      ctx->w6[1] = w6[1];
-      ctx->w6[2] = w6[2];
-      ctx->w6[3] = w6[3];
-      ctx->w7[0] = w7[0];
-      ctx->w7[1] = w7[1];
-      ctx->w7[2] = w7[2];
-      ctx->w7[3] = w7[3];
-    }
-    else
-    {
-      sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, ctx->h);
+    switch_buffer_by_offset_8x4_be (w0, w1, w2, w3, w4, w5, w6, w7, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-      ctx->w4[0] = 0;
-      ctx->w4[1] = 0;
-      ctx->w4[2] = 0;
-      ctx->w4[3] = 0;
-      ctx->w5[0] = 0;
-      ctx->w5[1] = 0;
-      ctx->w5[2] = 0;
-      ctx->w5[3] = 0;
-      ctx->w6[0] = 0;
-      ctx->w6[1] = 0;
-      ctx->w6[2] = 0;
-      ctx->w6[3] = 0;
-      ctx->w7[0] = 0;
-      ctx->w7[1] = 0;
-      ctx->w7[2] = 0;
-      ctx->w7[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
   }
   else
   {
-    if ((pos + len) < 128)
-    {
-      switch_buffer_by_offset_8x4_be (w0, w1, w2, w3, w4, w5, w6, w7, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
+    u32x c4[4] = { 0 };
+    u32x c5[4] = { 0 };
+    u32x c6[4] = { 0 };
+    u32x c7[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
-      u32x c4[4] = { 0 };
-      u32x c5[4] = { 0 };
-      u32x c6[4] = { 0 };
-      u32x c7[4] = { 0 };
+    switch_buffer_by_offset_8x4_carry_be (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
 
-      switch_buffer_by_offset_8x4_carry_be (w0, w1, w2, w3, w4, w5, w6, w7, c0, c1, c2, c3, c4, c5, c6, c7, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
+    ctx->w4[0] |= w4[0];
+    ctx->w4[1] |= w4[1];
+    ctx->w4[2] |= w4[2];
+    ctx->w4[3] |= w4[3];
+    ctx->w5[0] |= w5[0];
+    ctx->w5[1] |= w5[1];
+    ctx->w5[2] |= w5[2];
+    ctx->w5[3] |= w5[3];
+    ctx->w6[0] |= w6[0];
+    ctx->w6[1] |= w6[1];
+    ctx->w6[2] |= w6[2];
+    ctx->w6[3] |= w6[3];
+    ctx->w7[0] |= w7[0];
+    ctx->w7[1] |= w7[1];
+    ctx->w7[2] |= w7[2];
+    ctx->w7[3] |= w7[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-      ctx->w4[0] |= w4[0];
-      ctx->w4[1] |= w4[1];
-      ctx->w4[2] |= w4[2];
-      ctx->w4[3] |= w4[3];
-      ctx->w5[0] |= w5[0];
-      ctx->w5[1] |= w5[1];
-      ctx->w5[2] |= w5[2];
-      ctx->w5[3] |= w5[3];
-      ctx->w6[0] |= w6[0];
-      ctx->w6[1] |= w6[1];
-      ctx->w6[2] |= w6[2];
-      ctx->w6[3] |= w6[3];
-      ctx->w7[0] |= w7[0];
-      ctx->w7[1] |= w7[1];
-      ctx->w7[2] |= w7[2];
-      ctx->w7[3] |= w7[3];
+    sha512_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
 
-      sha512_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-      ctx->w4[0] = c4[0];
-      ctx->w4[1] = c4[1];
-      ctx->w4[2] = c4[2];
-      ctx->w4[3] = c4[3];
-      ctx->w5[0] = c5[0];
-      ctx->w5[1] = c5[1];
-      ctx->w5[2] = c5[2];
-      ctx->w5[3] = c5[3];
-      ctx->w6[0] = c6[0];
-      ctx->w6[1] = c6[1];
-      ctx->w6[2] = c6[2];
-      ctx->w6[3] = c6[3];
-      ctx->w7[0] = c7[0];
-      ctx->w7[1] = c7[1];
-      ctx->w7[2] = c7[2];
-      ctx->w7[3] = c7[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
+    ctx->w4[0] = c4[0];
+    ctx->w4[1] = c4[1];
+    ctx->w4[2] = c4[2];
+    ctx->w4[3] = c4[3];
+    ctx->w5[0] = c5[0];
+    ctx->w5[1] = c5[1];
+    ctx->w5[2] = c5[2];
+    ctx->w5[3] = c5[3];
+    ctx->w6[0] = c6[0];
+    ctx->w6[1] = c6[1];
+    ctx->w6[2] = c6[2];
+    ctx->w6[3] = c6[3];
+    ctx->w7[0] = c7[0];
+    ctx->w7[1] = c7[1];
+    ctx->w7[2] = c7[2];
+    ctx->w7[3] = c7[3];
   }
 }
 
diff --git a/OpenCL/inc_hash_whirlpool.cl b/OpenCL/inc_hash_whirlpool.cl
index 960c4c551..ffbe7d5f6 100644
--- a/OpenCL/inc_hash_whirlpool.cl
+++ b/OpenCL/inc_hash_whirlpool.cl
@@ -1348,117 +1348,71 @@ DECLSPEC void whirlpool_update_64 (whirlpool_ctx_t *ctx, u32 w0[4], u32 w1[4], u
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      whirlpool_transform (w0, w1, w2, w3, ctx->h, ctx->s_Ch, ctx->s_Cl);
+    switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be_S (w0, w1, w2, w3, pos);
+    u32 c0[4] = { 0 };
+    u32 c1[4] = { 0 };
+    u32 c2[4] = { 0 };
+    u32 c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32 c0[4] = { 0 };
-      u32 c1[4] = { 0 };
-      u32 c2[4] = { 0 };
-      u32 c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be_S (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    whirlpool_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h, ctx->s_Ch, ctx->s_Cl);
 
-      whirlpool_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h, ctx->s_Ch, ctx->s_Cl);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }
 
@@ -2653,117 +2607,71 @@ DECLSPEC void whirlpool_update_vector_64 (whirlpool_ctx_vector_t *ctx, u32x w0[4
 
   ctx->len += len;
 
-  if (pos == 0)
+  if ((pos + len) < 64)
   {
-    if (len < 64)
-    {
-      ctx->w0[0] = w0[0];
-      ctx->w0[1] = w0[1];
-      ctx->w0[2] = w0[2];
-      ctx->w0[3] = w0[3];
-      ctx->w1[0] = w1[0];
-      ctx->w1[1] = w1[1];
-      ctx->w1[2] = w1[2];
-      ctx->w1[3] = w1[3];
-      ctx->w2[0] = w2[0];
-      ctx->w2[1] = w2[1];
-      ctx->w2[2] = w2[2];
-      ctx->w2[3] = w2[3];
-      ctx->w3[0] = w3[0];
-      ctx->w3[1] = w3[1];
-      ctx->w3[2] = w3[2];
-      ctx->w3[3] = w3[3];
-    }
-    else
-    {
-      whirlpool_transform_vector (w0, w1, w2, w3, ctx->h, ctx->s_Ch, ctx->s_Cl);
+    switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
 
-      ctx->w0[0] = 0;
-      ctx->w0[1] = 0;
-      ctx->w0[2] = 0;
-      ctx->w0[3] = 0;
-      ctx->w1[0] = 0;
-      ctx->w1[1] = 0;
-      ctx->w1[2] = 0;
-      ctx->w1[3] = 0;
-      ctx->w2[0] = 0;
-      ctx->w2[1] = 0;
-      ctx->w2[2] = 0;
-      ctx->w2[3] = 0;
-      ctx->w3[0] = 0;
-      ctx->w3[1] = 0;
-      ctx->w3[2] = 0;
-      ctx->w3[3] = 0;
-    }
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
   }
   else
   {
-    if ((pos + len) < 64)
-    {
-      switch_buffer_by_offset_be (w0, w1, w2, w3, pos);
+    u32x c0[4] = { 0 };
+    u32x c1[4] = { 0 };
+    u32x c2[4] = { 0 };
+    u32x c3[4] = { 0 };
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
-    }
-    else
-    {
-      u32x c0[4] = { 0 };
-      u32x c1[4] = { 0 };
-      u32x c2[4] = { 0 };
-      u32x c3[4] = { 0 };
+    switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
 
-      switch_buffer_by_offset_carry_be (w0, w1, w2, w3, c0, c1, c2, c3, pos);
+    ctx->w0[0] |= w0[0];
+    ctx->w0[1] |= w0[1];
+    ctx->w0[2] |= w0[2];
+    ctx->w0[3] |= w0[3];
+    ctx->w1[0] |= w1[0];
+    ctx->w1[1] |= w1[1];
+    ctx->w1[2] |= w1[2];
+    ctx->w1[3] |= w1[3];
+    ctx->w2[0] |= w2[0];
+    ctx->w2[1] |= w2[1];
+    ctx->w2[2] |= w2[2];
+    ctx->w2[3] |= w2[3];
+    ctx->w3[0] |= w3[0];
+    ctx->w3[1] |= w3[1];
+    ctx->w3[2] |= w3[2];
+    ctx->w3[3] |= w3[3];
 
-      ctx->w0[0] |= w0[0];
-      ctx->w0[1] |= w0[1];
-      ctx->w0[2] |= w0[2];
-      ctx->w0[3] |= w0[3];
-      ctx->w1[0] |= w1[0];
-      ctx->w1[1] |= w1[1];
-      ctx->w1[2] |= w1[2];
-      ctx->w1[3] |= w1[3];
-      ctx->w2[0] |= w2[0];
-      ctx->w2[1] |= w2[1];
-      ctx->w2[2] |= w2[2];
-      ctx->w2[3] |= w2[3];
-      ctx->w3[0] |= w3[0];
-      ctx->w3[1] |= w3[1];
-      ctx->w3[2] |= w3[2];
-      ctx->w3[3] |= w3[3];
+    whirlpool_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h, ctx->s_Ch, ctx->s_Cl);
 
-      whirlpool_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h, ctx->s_Ch, ctx->s_Cl);
-
-      ctx->w0[0] = c0[0];
-      ctx->w0[1] = c0[1];
-      ctx->w0[2] = c0[2];
-      ctx->w0[3] = c0[3];
-      ctx->w1[0] = c1[0];
-      ctx->w1[1] = c1[1];
-      ctx->w1[2] = c1[2];
-      ctx->w1[3] = c1[3];
-      ctx->w2[0] = c2[0];
-      ctx->w2[1] = c2[1];
-      ctx->w2[2] = c2[2];
-      ctx->w2[3] = c2[3];
-      ctx->w3[0] = c3[0];
-      ctx->w3[1] = c3[1];
-      ctx->w3[2] = c3[2];
-      ctx->w3[3] = c3[3];
-    }
+    ctx->w0[0] = c0[0];
+    ctx->w0[1] = c0[1];
+    ctx->w0[2] = c0[2];
+    ctx->w0[3] = c0[3];
+    ctx->w1[0] = c1[0];
+    ctx->w1[1] = c1[1];
+    ctx->w1[2] = c1[2];
+    ctx->w1[3] = c1[3];
+    ctx->w2[0] = c2[0];
+    ctx->w2[1] = c2[1];
+    ctx->w2[2] = c2[2];
+    ctx->w2[3] = c2[3];
+    ctx->w3[0] = c3[0];
+    ctx->w3[1] = c3[1];
+    ctx->w3[2] = c3[2];
+    ctx->w3[3] = c3[3];
   }
 }