# Author: Alecsandru Patrascu <alecsandru.patrascu@intel.com>

diff -r da483bda6efc Objects/bufferobject.c
--- a/Objects/bufferobject.c	Mon Aug 24 16:17:13 2015 -0400
+++ b/Objects/bufferobject.c	Wed Sep 02 10:02:49 2015 +0300
@@ -344,8 +344,61 @@
     }
     x = _Py_HashSecret.prefix;
     x ^= *p << 7;
-    while (--len >= 0)
+    while (len > 7) {        
         x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        len -= 8;
+    }
+    switch (len) {
+        case 7:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 6:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 5:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 4:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 3:
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 2:
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p;
+            break;
+        case 1:
+            x = (1000003*x) ^ *p;
+            break;
+    }
     x ^= size;
     x ^= _Py_HashSecret.suffix;
     if (x == -1)
diff -r da483bda6efc Objects/stringobject.c
--- a/Objects/stringobject.c	Mon Aug 24 16:17:13 2015 -0400
+++ b/Objects/stringobject.c	Wed Sep 02 10:02:49 2015 +0300
@@ -1283,8 +1283,61 @@
     p = (unsigned char *) a->ob_sval;
     x = _Py_HashSecret.prefix;
     x ^= *p << 7;
-    while (--len >= 0)
+    while (len > 7) {        
         x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        len -= 8;
+    }
+    switch (len) {
+        case 7:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 6:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 5:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 4:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 3:
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 2:
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p;
+            break;
+        case 1:
+            x = (1000003*x) ^ *p;
+            break;
+    }
     x ^= Py_SIZE(a);
     x ^= _Py_HashSecret.suffix;
     if (x == -1)
diff -r da483bda6efc Objects/unicodeobject.c
--- a/Objects/unicodeobject.c	Mon Aug 24 16:17:13 2015 -0400
+++ b/Objects/unicodeobject.c	Wed Sep 02 10:02:49 2015 +0300
@@ -6655,8 +6655,61 @@
     p = PyUnicode_AS_UNICODE(self);
     x = _Py_HashSecret.prefix;
     x ^= *p << 7;
-    while (--len >= 0)
+    while (len > 7) {        
         x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        x = (1000003*x) ^ *p++;
+        len -= 8;
+    }
+    switch (len) {
+        case 7:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 6:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 5:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 4:
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 3:
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p++;
+            x = (1000003*x) ^ *p;
+            break;
+        case 2:
+            x = (1000003*x) ^ *p++; 
+            x = (1000003*x) ^ *p;
+            break;
+        case 1:
+            x = (1000003*x) ^ *p;
+            break;
+    }
     x ^= PyUnicode_GET_SIZE(self);
     x ^= _Py_HashSecret.suffix;
     if (x == -1)
