Explorar o código

- attempt to unroll one of the hash loops

Andrei Pelinescu-Onciul %!s(int64=18) %!d(string=hai) anos
pai
achega
e16f999c03
Modificáronse 1 ficheiros con 10 adicións e 2 borrados
  1. 10 2
      hashes.h

+ 10 - 2
hashes.h

@@ -44,8 +44,16 @@
 			(v)=(*(p)<<24)+((p)[1]<<16)+((p)[2]<<8)+(p)[3]; \
 			(h)+=(v)^((v)>>3); \
 		} \
-		(v)=0; \
-		for (;(p)<(end); (p)++){ (v)<<=8; (v)+=*(p);} \
+		switch((end)-(p)){\
+			case 3: \
+				(v)=(*(p)<<16)+((p)[1]<<8)+(p)[2]; break; \
+			case 2: \
+				(v)=(*(p)<<8)+p[1]; break; \
+			case 1: \
+				(v)=*p; break; \
+			default: \
+				(v)=0; break; \
+		} \
 		(h)+=(v)^((v)>>3); \
 	}while(0)