Allow LFSR to be used for sizes smaller than 2^3
authorAlex Pyrgiotis <apyrgio@grnet.gr>
Mon, 25 Feb 2013 16:42:29 +0000 (18:42 +0200)
committerFilippos Giannakos <philipgian@grnet.gr>
Mon, 11 Mar 2013 09:52:32 +0000 (11:52 +0200)
xseg/peers/user/bench-lfsr.c

index aede3f7..1fce6ec 100644 (file)
@@ -223,12 +223,11 @@ int lfsr_init(struct lfsr *lfsr, uint64_t size, uint64_t seed)
 
        lfsr->limit = size;
 
-       //i has number of bits of size
-       for (i = 0; size; i++)
-               size = size >> 1;
+       //`i` has required number of bits for LFSR
+       for (i = 3; size >= (1UL << i); i++) {}
 
-       //Too small or too big size to create an LFSR out of it
-       if (i < 3 || i > 63)
+       //Will not create LFSR longer than 63 bits
+       if (i > 63)
                return -1;
 
        //The all ones state is illegal. Due to the fact that our seed is
@@ -240,8 +239,7 @@ int lfsr_init(struct lfsr *lfsr, uint64_t size, uint64_t seed)
                        lfsr->state = global_seed >> (31 - i);
                else
                        lfsr->state = global_seed << (i - 31);
-       }
-       else {
+       } else {
                lfsr->state = seed;
        }