Re: [PATCH 1/2] bitreversal program

From: John Hubbard
Date: Tue May 20 2008 - 02:53:41 EST


Harvey Harrison wrote:

+static inline u32 gen_bit_rev(u32 x, u32 k)
{
- return byte_rev_table[byte];
+ if(k & 1)
+ x = (x & 0x55555555) << 1 | (x & 0xaaaaaaaa) >> 1;
+ if(k & 2)
+ x = (x & 0x33333333) << 2 | (x & 0xcccccccc) >> 2;
+ if(k & 4)
+ x = (x & 0x0f0f0f0f) << 4 | (x & 0xf0f0f0f0) >> 4;
+ if(k & 8)
+ x = (x & 0x00ff00ff) << 8 | (x & 0xff00ff00) >> 8;
+ if(k & 16)
+ x = (x & 0x0000ffff) << 16 | (x & 0xffff0000) >> 16;
+
+ return x;
}

Why is this better than a single 256 byte table?

Harvey


One reason it could be better, at least in some situations, is that the above is more likely to execute directly from the CPU's instruction cache. The table lookup appears more efficient at first, until you consider the memory caching hierarchy.

--John Hubbard
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/