[PATCH] resource: Micro-tune resource hash computation

Adam Jackson ajax at redhat.com
Mon Jan 10 14:31:28 PST 2011


We do actually call Hash() on resource lookup, so let's not make it more
expensive than necessary.  The compiler isnmay not be smart enough to
notice that we only ever have a power of two count of buckets, so
flatten the log2 math so it doesn't have to know.

Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 dix/resource.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/dix/resource.c b/dix/resource.c
index 9cdddba..d2cf0e4 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -343,19 +343,19 @@ static int
 Hash(int client, XID id)
 {
     id &= RESOURCE_ID_MASK;
-    switch (ilog2(clientTable[client].buckets))
+    switch (clientTable[client].buckets)
     {
-	case 6:
+	case 64:
 	    return ((int)(0x03F & (id ^ (id>>6) ^ (id>>12))));
-	case 7:
+	case 128:
 	    return ((int)(0x07F & (id ^ (id>>7) ^ (id>>13))));
-	case 8:
+	case 256:
 	    return ((int)(0x0FF & (id ^ (id>>8) ^ (id>>16))));
-	case 9:
+	case 512:
 	    return ((int)(0x1FF & (id ^ (id>>9))));
-	case 10:
+	case 1024:
 	    return ((int)(0x3FF & (id ^ (id>>10))));
-	case 11:
+	case 2048:
 	    return ((int)(0x7FF & (id ^ (id>>11))));
     }
     return -1;
-- 
1.7.3.4



More information about the xorg-devel mailing list