浏览代码

- attempt to unroll one of the hash loops

Andrei Pelinescu-Onciul 18 年之前
父节点
当前提交
e16f999c03
共有 1 个文件被更改,包括 10 次插入2 次删除
  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)