The xor chain doesn't seem to have a huge effect on hash distribution.
The new version is so simple that gcc inlines it completely into the
callers, shrinks the binary size by half a kilobyte or so, and looks
marginally faster in synethetic tests.

$ x11perf -falseprecision -pointer

Before:
1000000 trep @   0.0412 msec ( 24275.0/sec): QueryPointer
After:
1000000 trep @   0.0374 msec ( 26737.0/sec): QueryPointer

Signed-off-by: Adam Jackson <a...@redhat.com>
---
 dix/resource.c |   18 +-----------------
 1 files changed, 1 insertions(+), 17 deletions(-)

diff --git a/dix/resource.c b/dix/resource.c
index 6bd2403..52519c9 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -335,23 +335,7 @@ InitClientResources(ClientPtr client)
 static int
 Hash(int client, XID id)
 {
-    id &= RESOURCE_ID_MASK;
-    switch (clientTable[client].hashsize)
-    {
-       case 6:
-           return ((int)(0x03F & (id ^ (id>>6) ^ (id>>12))));
-       case 7:
-           return ((int)(0x07F & (id ^ (id>>7) ^ (id>>13))));
-       case 8:
-           return ((int)(0x0FF & (id ^ (id>>8) ^ (id>>16))));
-       case 9:
-           return ((int)(0x1FF & (id ^ (id>>9))));
-       case 10:
-           return ((int)(0x3FF & (id ^ (id>>10))));
-       case 11:
-           return ((int)(0x7FF & (id ^ (id>>11))));
-    }
-    return -1;
+    return id & (clientTable[client].hashsize - 1);
 }
 
 static XID
-- 
1.7.3.4

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to