Some printf and Correct aspect ratio for Rice(s)
[mupen64plus-pandora.git] / source / gles2n64 / src / CRC.cpp
CommitLineData
34cf4058 1#include "Types.h"
2
3#define CRC32_POLYNOMIAL 0x04C11DB7
4
5#ifdef __CRC_OPT
6unsigned int CRCTable[ 256 * 4];
7#else
8unsigned int CRCTable[ 256 ];
9#endif
10
11u32 Reflect( u32 ref, char ch )
12{
13 u32 value = 0;
14
15 // Swap bit 0 for bit 7
16 // bit 1 for bit 6, etc.
17 for (int i = 1; i < (ch + 1); i++)
18 {
19 if(ref & 1)
20 value |= 1 << (ch - i);
21 ref >>= 1;
22 }
23 return value;
24}
25
26void CRC_BuildTable()
27{
28 u32 crc;
29
30 for (int i = 0; i < 256; i++)
31 {
32 crc = Reflect( i, 8 ) << 24;
33 for (int j = 0; j < 8; j++)
34 crc = (crc << 1) ^ (crc & (1 << 31) ? CRC32_POLYNOMIAL : 0);
35
36 CRCTable[i] = Reflect( crc, 32 );
37 }
38
39#ifdef __CRC_OPT
40 for (int i = 0; i < 256; i++)
41 {
42 for(int j = 0; j < 3; j++)
43 {
44 CRCTable[256*(j+1) + i] = (CRCTable[256*j + i]>>8) ^ CRCTable[CRCTable[256*j + i]&0xFF];
45 }
46 }
47#endif
48
49}
50
51u32 CRC_Calculate( u32 crc, void *buffer, u32 count )
52{
53 u8 *p;
54 u32 orig = crc;
55
56 p = (u8*) buffer;
57
58#ifdef __CRC_OPT
59 while(count > 3)
60 {
61 crc ^= *(unsigned int*) p; p += 4;
62 crc = CRCTable[3*256 + (crc&0xFF)]
63 ^ CRCTable[2*256 + ((crc>>8)&0xFF)]
64 ^ CRCTable[1*256 + ((crc>>16)&0xFF)]
65 ^ CRCTable[0*256 + ((crc>>24))];
66
67 count -= 4;
68 }
69#endif
70
71 while (count--)
72 crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
73
74 return crc ^ orig;
75}
76
77u32 CRC_CalculatePalette( u32 crc, void *buffer, u32 count )
78{
79 u8 *p;
80 u32 orig = crc;
81
82 p = (u8*) buffer;
83 while (count--)
84 {
85 crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
86 crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
87
88 p += 6;
89 }
90
91 return crc ^ orig;
92}
93