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