diff --git a/src/pike_memory.c b/src/pike_memory.c
index 2b477350e01e1f6013938519104978a7ba75e462..43e352fc11df1fcf9a494c2a00af6bece6880d67 100644
--- a/src/pike_memory.c
+++ b/src/pike_memory.c
@@ -154,8 +154,14 @@ unsigned INT32 hashmem(const unsigned char *a,INT32 len,INT32 mlen)
 #else
   for(mlen>>=3;--mlen>=0;)
   {
-    ret^=(ret<<7)+((((((*(a++)<<3)+*(a++))<<4)+*(a++))<<5)+*(a++));
-    ret^=(ret>>6)+((((((*(a++)<<3)+*(a++))<<4)+*(a++))<<5)+*(a++));
+    ret^=(ret<<7)+((((((*(a)<<3)+*(a+1))<<4)+*(a+2))<<5)+*(a+3));
+    ret^=(ret>>6)+((((((*(a+4)<<3)+*(a+5))<<4)+*(a+6))<<5)+*(a+7));
+    a+=8;
+
+    /*
+     * ret^=(ret<<7)+((((((*(a++)<<3)+*(a++))<<4)+*(a++))<<5)+*(a++));
+     * ret^=(ret>>6)+((((((*(a++)<<3)+*(a++))<<4)+*(a++))<<5)+*(a++));
+     */
   }
 #endif
   return ret;