1/* 7zCrcT8.c */
2
3#include "7zCrc.h"
4
5#define kCrcPoly 0xEDB88320
6#define CRC_NUM_TABLES 8
7
8UInt32 g_CrcTable[256 * CRC_NUM_TABLES];
9
10void MY_FAST_CALL CrcGenerateTable()
11{
12  UInt32 i;
13  for (i = 0; i < 256; i++)
14  {
15    UInt32 r = i;
16    int j;
17    for (j = 0; j < 8; j++)
18      r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1));
19    g_CrcTable[i] = r;
20  }
21  #if CRC_NUM_TABLES > 1
22  for (; i < 256 * CRC_NUM_TABLES; i++)
23  {
24    UInt32 r = g_CrcTable[i - 256];
25    g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8);
26  }
27  #endif
28}
29
30UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table);
31
32UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size)
33{
34  return CrcUpdateT8(v, data, size, g_CrcTable);
35}
36
37UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size)
38{
39  return CrcUpdateT8(CRC_INIT_VAL, data, size, g_CrcTable) ^ 0xFFFFFFFF;
40}
41