7
7
#define LE_TABLE_SIZE (1 << CRC_LE_BITS)
8
8
#define BE_TABLE_SIZE (1 << CRC_BE_BITS)
9
9
10
- static uint32_t crc32table_le [LE_TABLE_SIZE ];
11
- static uint32_t crc32table_be [BE_TABLE_SIZE ];
10
+ static uint32_t crc32table_le [4 ][ LE_TABLE_SIZE ];
11
+ static uint32_t crc32table_be [4 ][ BE_TABLE_SIZE ];
12
12
13
13
/**
14
14
* crc32init_le() - allocate and initialize LE table data
@@ -22,12 +22,19 @@ static void crc32init_le(void)
22
22
unsigned i , j ;
23
23
uint32_t crc = 1 ;
24
24
25
- crc32table_le [0 ] = 0 ;
25
+ crc32table_le [0 ][ 0 ] = 0 ;
26
26
27
27
for (i = 1 << (CRC_LE_BITS - 1 ); i ; i >>= 1 ) {
28
28
crc = (crc >> 1 ) ^ ((crc & 1 ) ? CRCPOLY_LE : 0 );
29
29
for (j = 0 ; j < LE_TABLE_SIZE ; j += 2 * i )
30
- crc32table_le [i + j ] = crc ^ crc32table_le [j ];
30
+ crc32table_le [0 ][i + j ] = crc ^ crc32table_le [0 ][j ];
31
+ }
32
+ for (i = 0 ; i < LE_TABLE_SIZE ; i ++ ) {
33
+ crc = crc32table_le [0 ][i ];
34
+ for (j = 1 ; j < 4 ; j ++ ) {
35
+ crc = crc32table_le [0 ][crc & 0xff ] ^ (crc >> 8 );
36
+ crc32table_le [j ][i ] = crc ;
37
+ }
31
38
}
32
39
}
33
40
@@ -39,25 +46,35 @@ static void crc32init_be(void)
39
46
unsigned i , j ;
40
47
uint32_t crc = 0x80000000 ;
41
48
42
- crc32table_be [0 ] = 0 ;
49
+ crc32table_be [0 ][ 0 ] = 0 ;
43
50
44
51
for (i = 1 ; i < BE_TABLE_SIZE ; i <<= 1 ) {
45
52
crc = (crc << 1 ) ^ ((crc & 0x80000000 ) ? CRCPOLY_BE : 0 );
46
53
for (j = 0 ; j < i ; j ++ )
47
- crc32table_be [i + j ] = crc ^ crc32table_be [j ];
54
+ crc32table_be [0 ][i + j ] = crc ^ crc32table_be [0 ][j ];
55
+ }
56
+ for (i = 0 ; i < BE_TABLE_SIZE ; i ++ ) {
57
+ crc = crc32table_be [0 ][i ];
58
+ for (j = 1 ; j < 4 ; j ++ ) {
59
+ crc = crc32table_be [0 ][(crc >> 24 ) & 0xff ] ^ (crc << 8 );
60
+ crc32table_be [j ][i ] = crc ;
61
+ }
48
62
}
49
63
}
50
64
51
- static void output_table (uint32_t table [], int len , char * trans )
65
+ static void output_table (uint32_t table [4 ][ 256 ], int len , char * trans )
52
66
{
53
- int i ;
67
+ int i , j ;
54
68
55
- for (i = 0 ; i < len - 1 ; i ++ ) {
56
- if (i % ENTRIES_PER_LINE == 0 )
57
- printf ("\n" );
58
- printf ("%s(0x%8.8xL), " , trans , table [i ]);
69
+ for (j = 0 ; j < 4 ; j ++ ) {
70
+ printf ("{" );
71
+ for (i = 0 ; i < len - 1 ; i ++ ) {
72
+ if (i % ENTRIES_PER_LINE == 0 )
73
+ printf ("\n" );
74
+ printf ("%s(0x%8.8xL), " , trans , table [j ][i ]);
75
+ }
76
+ printf ("%s(0x%8.8xL)},\n" , trans , table [j ][len - 1 ]);
59
77
}
60
- printf ("%s(0x%8.8xL)\n" , trans , table [len - 1 ]);
61
78
}
62
79
63
80
int main (int argc , char * * argv )
@@ -66,14 +83,14 @@ int main(int argc, char** argv)
66
83
67
84
if (CRC_LE_BITS > 1 ) {
68
85
crc32init_le ();
69
- printf ("static const u32 crc32table_le[] = {" );
86
+ printf ("static const u32 crc32table_le[4][256 ] = {" );
70
87
output_table (crc32table_le , LE_TABLE_SIZE , "tole" );
71
88
printf ("};\n" );
72
89
}
73
90
74
91
if (CRC_BE_BITS > 1 ) {
75
92
crc32init_be ();
76
- printf ("static const u32 crc32table_be[] = {" );
93
+ printf ("static const u32 crc32table_be[4][256 ] = {" );
77
94
output_table (crc32table_be , BE_TABLE_SIZE , "tobe" );
78
95
printf ("};\n" );
79
96
}
0 commit comments