1386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 2386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * lfsr.c 3386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 4386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 5386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 6386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 7386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#include <stdio.h> 8386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#include "datatypes.h" 9386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 10386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariuint32_t 11386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariparity(uint32_t x) { 12386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 13386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x ^= (x >> 16); 14386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x ^= (x >> 8); 15386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x ^= (x >> 4); 16386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x ^= (x >> 2); 17386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x ^= (x >> 1); 18386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 19386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari return x & 1; 20386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 21386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 22386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 23386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* typedef struct { */ 24386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* uint32_t register[8]; */ 25386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* } lfsr_t; */ 26386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 27386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarivoid 28386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagaricompute_period(uint32_t feedback_polynomial) { 29386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int i; 30386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari v32_t lfsr; 31386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari v32_t mask; 32386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 33386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari mask.value = feedback_polynomial; 34386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari lfsr.value = 1; 35386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 36386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("polynomial: %s\t", v32_bit_string(mask)); 37386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 38386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=0; i < 256; i++) { 39386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* printf("%s\n", v32_bit_string(lfsr)); */ 40386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (parity(mask.value & lfsr.value)) 41386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari lfsr.value = ((lfsr.value << 1) | 1) & 0xff; 42386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari else 43386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari lfsr.value = (lfsr.value << 1) & 0xff; 44386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 45386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* now halt if we're back at the initial state */ 46386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (lfsr.value == 1) { 47386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("period: %d\n", i); 48386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari break; 49386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 50386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 51386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 52386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 53386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariuint32_t poly0 = 223; 54386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 55386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 56386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariuint32_t polynomials[39] = { 57386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari31, 58386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari47, 59386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari55, 60386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari59, 61386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari61, 62386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari79, 63386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari87, 64386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari91, 65386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari103, 66386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari107, 67386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari109, 68386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari115, 69386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari117, 70386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari121, 71386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari143, 72386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari151, 73386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari157, 74386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari167, 75386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari171, 76386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari173, 77386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari179, 78386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari181, 79386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari185, 80386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari199, 81386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari203, 82386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari205, 83386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari211, 84386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari213, 85386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari227, 86386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari229, 87386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari233, 88386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari241, 89386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari127, 90386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari191, 91386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari223, 92386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari239, 93386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari247, 94386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari251, 95386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari253 96386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari}; 97386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 98386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarichar binary_string[32]; 99386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 100386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarichar * 101386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariu32_bit_string(uint32_t x, unsigned int length) { 102386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari unsigned int mask; 103386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int index; 104386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 105386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari mask = 1 << length; 106386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari index = 0; 107386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (; mask > 0; mask >>= 1) 108386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if ((x & mask) == 0) 109386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari binary_string[index++] = '0'; 110386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari else 111386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari binary_string[index++] = '1'; 112386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 113386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari binary_string[index++] = 0; /* NULL terminate string */ 114386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari return binary_string; 115386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 116386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 117386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariextern int octet_weight[256]; 118386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 119386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariunsigned int 120386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariweight(uint32_t poly) { 121386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int wt = 0; 122386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 123386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* note: endian-ness makes no difference */ 124386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari wt += octet_weight[poly & 0xff]; 125386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari wt += octet_weight[(poly >> 8) & 0xff]; 126386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari wt += octet_weight[(poly >> 16) & 0xff]; 127386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari wt += octet_weight[(poly >> 24)]; 128386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 129386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari return wt; 130386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 131386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 132386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define MAX_PERIOD 65535 133386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 134386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_print 0 135386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 136386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariint 137386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariperiod(uint32_t poly) { 138386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int i; 139386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari uint32_t x; 140386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 141386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 142386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* set lfsr to 1 */ 143386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = 1; 144386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if debug_print 145386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("%d:\t%s\n", 0, u32_bit_string(x,8)); 146386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 147386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=1; i < MAX_PERIOD; i++) { 148386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (x & 1) 149386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = (x >> 1) ^ poly; 150386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari else 151386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = (x >> 1); 152386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 153386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if debug_print 154386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* print for a sanity check */ 155386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("%d:\t%s\n", i, u32_bit_string(x,8)); 156386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 157386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 158386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* check for return to original value */ 159386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (x == 1) 160386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari return i; 161386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 162386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari return i; 163386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 164386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 165386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 166386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * weight distribution computes the weight distribution of the 167386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * code generated by the polynomial poly 168386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 169386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 170386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define MAX_LEN 8 171386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define MAX_WEIGHT (1 << MAX_LEN) 172386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 173386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariint A[MAX_WEIGHT+1]; 174386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 175386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarivoid 176386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariweight_distribution2(uint32_t poly, int *A) { 177386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int i; 178386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari uint32_t x; 179386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 180386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* zeroize array */ 181386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=0; i < MAX_WEIGHT+1; i++) 182386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari A[i] = 0; 183386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 184386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* loop over all input sequences */ 185386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 186386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 187386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* set lfsr to 1 */ 188386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = 1; 189386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if debug_print 190386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("%d:\t%s\n", 0, u32_bit_string(x,8)); 191386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 192386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=1; i < MAX_PERIOD; i++) { 193386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (x & 1) 194386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = (x >> 1) ^ poly; 195386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari else 196386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = (x >> 1); 197386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 198386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if debug_print 199386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* print for a sanity check */ 200386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("%d:\t%s\n", i, u32_bit_string(x,8)); 201386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 202386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 203386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* increment weight */ 204386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari wt += (x & 1); 205386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 206386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* check for return to original value */ 207386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (x == 1) 208386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari break; 209386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 210386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 211386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* set zero */ 212386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari A[0] = 0; 213386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 214386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 215386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 216386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarivoid 217386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariweight_distribution(uint32_t poly, int *A) { 218386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int i; 219386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari uint32_t x; 220386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 221386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* zeroize array */ 222386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=0; i < MAX_WEIGHT+1; i++) 223386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari A[i] = 0; 224386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 225386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* set lfsr to 1 */ 226386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = 1; 227386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if debug_print 228386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("%d:\t%s\n", 0, u32_bit_string(x,8)); 229386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 230386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=1; i < MAX_PERIOD; i++) { 231386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (x & 1) 232386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = (x >> 1) ^ poly; 233386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari else 234386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari x = (x >> 1); 235386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 236386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if debug_print 237386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* print for a sanity check */ 238386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("%d:\t%s\n", i, u32_bit_string(x,8)); 239386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 240386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 241386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* compute weight, increment proper element */ 242386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari A[weight(x)]++; 243386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 244386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* check for return to original value */ 245386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (x == 1) 246386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari break; 247386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 248386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 249386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* set zero */ 250386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari A[0] = 0; 251386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 252386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 253386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 254386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 255386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 256386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariint 257386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarimain () { 258386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 259386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int i,j; 260386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari v32_t x; 261386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari v32_t p; 262386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 263386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* originally 0xaf */ 264386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari p.value = 0x9; 265386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 266386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("polynomial: %s\tperiod: %d\n", 267386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari u32_bit_string(p.value,8), period(p.value)); 268386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 269386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* compute weight distribution */ 270386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari weight_distribution(p.value, A); 271386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 272386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* print weight distribution */ 273386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=0; i <= 8; i++) { 274386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("A[%d]: %d\n", i, A[i]); 275386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 276386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 277386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#if 0 278386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (i=0; i < 39; i++) { 279386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("polynomial: %s\tperiod: %d\n", 280386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari u32_bit_string(polynomials[i],8), period(polynomials[i])); 281386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 282386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* compute weight distribution */ 283386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari weight_distribution(p.value, A); 284386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 285386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* print weight distribution */ 286386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (j=0; j <= 8; j++) { 287386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("A[%d]: %d\n", j, A[j]); 288386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 289386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 290386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 291386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 292386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari { 293386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int bits = 8; 294386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari uint32_t y; 295386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (y=0; y < (1 << bits); y++) { 296386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("polynomial: %s\tweight: %d\tperiod: %d\n", 297386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari u32_bit_string(y,bits), weight(y), period(y)); 298386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 299386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* compute weight distribution */ 300386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari weight_distribution(y, A); 301386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 302386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari /* print weight distribution */ 303386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari for (j=0; j <= 8; j++) { 304386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari printf("A[%d]: %d\n", j, A[j]); 305386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 306386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 307386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari } 308386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 309386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari return 0; 310386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} 311