1*f6dc9357SAndroid Build Coastguard Worker /* XzCrc64Opt.c -- CRC64 calculation (optimized functions)
2*f6dc9357SAndroid Build Coastguard Worker 2023-12-08 : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker
4*f6dc9357SAndroid Build Coastguard Worker #include "Precomp.h"
5*f6dc9357SAndroid Build Coastguard Worker
6*f6dc9357SAndroid Build Coastguard Worker #include "CpuArch.h"
7*f6dc9357SAndroid Build Coastguard Worker
8*f6dc9357SAndroid Build Coastguard Worker #if !defined(Z7_CRC64_NUM_TABLES) || Z7_CRC64_NUM_TABLES > 1
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker // for debug only : define Z7_CRC64_DEBUG_BE to test big-endian code in little-endian cpu
11*f6dc9357SAndroid Build Coastguard Worker // #define Z7_CRC64_DEBUG_BE
12*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_DEBUG_BE
13*f6dc9357SAndroid Build Coastguard Worker #undef MY_CPU_LE
14*f6dc9357SAndroid Build Coastguard Worker #define MY_CPU_BE
15*f6dc9357SAndroid Build Coastguard Worker #endif
16*f6dc9357SAndroid Build Coastguard Worker
17*f6dc9357SAndroid Build Coastguard Worker #if defined(MY_CPU_64BIT)
18*f6dc9357SAndroid Build Coastguard Worker #define Z7_CRC64_USE_64BIT
19*f6dc9357SAndroid Build Coastguard Worker #endif
20*f6dc9357SAndroid Build Coastguard Worker
21*f6dc9357SAndroid Build Coastguard Worker // the value Z7_CRC64_NUM_TABLES_USE must be defined to same value as in XzCrc64.c
22*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_NUM_TABLES
23*f6dc9357SAndroid Build Coastguard Worker #define Z7_CRC64_NUM_TABLES_USE Z7_CRC64_NUM_TABLES
24*f6dc9357SAndroid Build Coastguard Worker #else
25*f6dc9357SAndroid Build Coastguard Worker #define Z7_CRC64_NUM_TABLES_USE 12
26*f6dc9357SAndroid Build Coastguard Worker #endif
27*f6dc9357SAndroid Build Coastguard Worker
28*f6dc9357SAndroid Build Coastguard Worker #if Z7_CRC64_NUM_TABLES_USE % 4 || \
29*f6dc9357SAndroid Build Coastguard Worker Z7_CRC64_NUM_TABLES_USE < 4 || \
30*f6dc9357SAndroid Build Coastguard Worker Z7_CRC64_NUM_TABLES_USE > 4 * 4
31*f6dc9357SAndroid Build Coastguard Worker #error Stop_Compiling_Bad_CRC64_NUM_TABLES
32*f6dc9357SAndroid Build Coastguard Worker #endif
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker
35*f6dc9357SAndroid Build Coastguard Worker #ifndef MY_CPU_BE
36*f6dc9357SAndroid Build Coastguard Worker
37*f6dc9357SAndroid Build Coastguard Worker #define CRC64_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8))
38*f6dc9357SAndroid Build Coastguard Worker
39*f6dc9357SAndroid Build Coastguard Worker #if defined(Z7_CRC64_USE_64BIT) && (Z7_CRC64_NUM_TABLES_USE % 8 == 0)
40*f6dc9357SAndroid Build Coastguard Worker
41*f6dc9357SAndroid Build Coastguard Worker #define Q64LE(n, d) \
42*f6dc9357SAndroid Build Coastguard Worker ( (table + ((n) * 8 + 7) * 0x100)[((d) ) & 0xFF] \
43*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 6) * 0x100)[((d) >> 1 * 8) & 0xFF] \
44*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 5) * 0x100)[((d) >> 2 * 8) & 0xFF] \
45*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 4) * 0x100)[((d) >> 3 * 8) & 0xFF] \
46*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 3) * 0x100)[((d) >> 4 * 8) & 0xFF] \
47*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 2) * 0x100)[((d) >> 5 * 8) & 0xFF] \
48*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 1) * 0x100)[((d) >> 6 * 8) & 0xFF] \
49*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 0) * 0x100)[((d) >> 7 * 8)] )
50*f6dc9357SAndroid Build Coastguard Worker
51*f6dc9357SAndroid Build Coastguard Worker #define R64(a) *((const UInt64 *)(const void *)p + (a))
52*f6dc9357SAndroid Build Coastguard Worker
53*f6dc9357SAndroid Build Coastguard Worker #else
54*f6dc9357SAndroid Build Coastguard Worker
55*f6dc9357SAndroid Build Coastguard Worker #define Q32LE(n, d) \
56*f6dc9357SAndroid Build Coastguard Worker ( (table + ((n) * 4 + 3) * 0x100)[((d) ) & 0xFF] \
57*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 4 + 2) * 0x100)[((d) >> 1 * 8) & 0xFF] \
58*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 4 + 1) * 0x100)[((d) >> 2 * 8) & 0xFF] \
59*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 4 + 0) * 0x100)[((d) >> 3 * 8)] )
60*f6dc9357SAndroid Build Coastguard Worker
61*f6dc9357SAndroid Build Coastguard Worker #define R32(a) *((const UInt32 *)(const void *)p + (a))
62*f6dc9357SAndroid Build Coastguard Worker
63*f6dc9357SAndroid Build Coastguard Worker #endif
64*f6dc9357SAndroid Build Coastguard Worker
65*f6dc9357SAndroid Build Coastguard Worker
66*f6dc9357SAndroid Build Coastguard Worker #define CRC64_FUNC_PRE_LE2(step) \
67*f6dc9357SAndroid Build Coastguard Worker UInt64 Z7_FASTCALL XzCrc64UpdateT ## step (UInt64 v, const void *data, size_t size, const UInt64 *table)
68*f6dc9357SAndroid Build Coastguard Worker
69*f6dc9357SAndroid Build Coastguard Worker #define CRC64_FUNC_PRE_LE(step) \
70*f6dc9357SAndroid Build Coastguard Worker CRC64_FUNC_PRE_LE2(step); \
71*f6dc9357SAndroid Build Coastguard Worker CRC64_FUNC_PRE_LE2(step)
72*f6dc9357SAndroid Build Coastguard Worker
CRC64_FUNC_PRE_LE(Z7_CRC64_NUM_TABLES_USE)73*f6dc9357SAndroid Build Coastguard Worker CRC64_FUNC_PRE_LE(Z7_CRC64_NUM_TABLES_USE)
74*f6dc9357SAndroid Build Coastguard Worker {
75*f6dc9357SAndroid Build Coastguard Worker const Byte *p = (const Byte *)data;
76*f6dc9357SAndroid Build Coastguard Worker const Byte *lim;
77*f6dc9357SAndroid Build Coastguard Worker for (; size && ((unsigned)(ptrdiff_t)p & (7 - (Z7_CRC64_NUM_TABLES_USE & 4))) != 0; size--, p++)
78*f6dc9357SAndroid Build Coastguard Worker v = CRC64_UPDATE_BYTE_2(v, *p);
79*f6dc9357SAndroid Build Coastguard Worker lim = p + size;
80*f6dc9357SAndroid Build Coastguard Worker if (size >= Z7_CRC64_NUM_TABLES_USE)
81*f6dc9357SAndroid Build Coastguard Worker {
82*f6dc9357SAndroid Build Coastguard Worker lim -= Z7_CRC64_NUM_TABLES_USE;
83*f6dc9357SAndroid Build Coastguard Worker do
84*f6dc9357SAndroid Build Coastguard Worker {
85*f6dc9357SAndroid Build Coastguard Worker #if Z7_CRC64_NUM_TABLES_USE == 4
86*f6dc9357SAndroid Build Coastguard Worker const UInt32 d = (UInt32)v ^ R32(0);
87*f6dc9357SAndroid Build Coastguard Worker v = (v >> 32) ^ Q32LE(0, d);
88*f6dc9357SAndroid Build Coastguard Worker #elif Z7_CRC64_NUM_TABLES_USE == 8
89*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_USE_64BIT
90*f6dc9357SAndroid Build Coastguard Worker v ^= R64(0);
91*f6dc9357SAndroid Build Coastguard Worker v = Q64LE(0, v);
92*f6dc9357SAndroid Build Coastguard Worker #else
93*f6dc9357SAndroid Build Coastguard Worker UInt32 v0, v1;
94*f6dc9357SAndroid Build Coastguard Worker v0 = (UInt32)v ^ R32(0);
95*f6dc9357SAndroid Build Coastguard Worker v1 = (UInt32)(v >> 32) ^ R32(1);
96*f6dc9357SAndroid Build Coastguard Worker v = Q32LE(1, v0) ^ Q32LE(0, v1);
97*f6dc9357SAndroid Build Coastguard Worker #endif
98*f6dc9357SAndroid Build Coastguard Worker #elif Z7_CRC64_NUM_TABLES_USE == 12
99*f6dc9357SAndroid Build Coastguard Worker UInt32 w;
100*f6dc9357SAndroid Build Coastguard Worker UInt32 v0, v1;
101*f6dc9357SAndroid Build Coastguard Worker v0 = (UInt32)v ^ R32(0);
102*f6dc9357SAndroid Build Coastguard Worker v1 = (UInt32)(v >> 32) ^ R32(1);
103*f6dc9357SAndroid Build Coastguard Worker w = R32(2);
104*f6dc9357SAndroid Build Coastguard Worker v = Q32LE(0, w);
105*f6dc9357SAndroid Build Coastguard Worker v ^= Q32LE(2, v0) ^ Q32LE(1, v1);
106*f6dc9357SAndroid Build Coastguard Worker #elif Z7_CRC64_NUM_TABLES_USE == 16
107*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_USE_64BIT
108*f6dc9357SAndroid Build Coastguard Worker UInt64 w;
109*f6dc9357SAndroid Build Coastguard Worker UInt64 x;
110*f6dc9357SAndroid Build Coastguard Worker w = R64(1); x = Q64LE(0, w);
111*f6dc9357SAndroid Build Coastguard Worker v ^= R64(0); v = x ^ Q64LE(1, v);
112*f6dc9357SAndroid Build Coastguard Worker #else
113*f6dc9357SAndroid Build Coastguard Worker UInt32 v0, v1;
114*f6dc9357SAndroid Build Coastguard Worker UInt32 r0, r1;
115*f6dc9357SAndroid Build Coastguard Worker v0 = (UInt32)v ^ R32(0);
116*f6dc9357SAndroid Build Coastguard Worker v1 = (UInt32)(v >> 32) ^ R32(1);
117*f6dc9357SAndroid Build Coastguard Worker r0 = R32(2);
118*f6dc9357SAndroid Build Coastguard Worker r1 = R32(3);
119*f6dc9357SAndroid Build Coastguard Worker v = Q32LE(1, r0) ^ Q32LE(0, r1);
120*f6dc9357SAndroid Build Coastguard Worker v ^= Q32LE(3, v0) ^ Q32LE(2, v1);
121*f6dc9357SAndroid Build Coastguard Worker #endif
122*f6dc9357SAndroid Build Coastguard Worker #else
123*f6dc9357SAndroid Build Coastguard Worker #error Stop_Compiling_Bad_CRC64_NUM_TABLES
124*f6dc9357SAndroid Build Coastguard Worker #endif
125*f6dc9357SAndroid Build Coastguard Worker p += Z7_CRC64_NUM_TABLES_USE;
126*f6dc9357SAndroid Build Coastguard Worker }
127*f6dc9357SAndroid Build Coastguard Worker while (p <= lim);
128*f6dc9357SAndroid Build Coastguard Worker lim += Z7_CRC64_NUM_TABLES_USE;
129*f6dc9357SAndroid Build Coastguard Worker }
130*f6dc9357SAndroid Build Coastguard Worker for (; p < lim; p++)
131*f6dc9357SAndroid Build Coastguard Worker v = CRC64_UPDATE_BYTE_2(v, *p);
132*f6dc9357SAndroid Build Coastguard Worker return v;
133*f6dc9357SAndroid Build Coastguard Worker }
134*f6dc9357SAndroid Build Coastguard Worker
135*f6dc9357SAndroid Build Coastguard Worker #undef CRC64_UPDATE_BYTE_2
136*f6dc9357SAndroid Build Coastguard Worker #undef R32
137*f6dc9357SAndroid Build Coastguard Worker #undef R64
138*f6dc9357SAndroid Build Coastguard Worker #undef Q32LE
139*f6dc9357SAndroid Build Coastguard Worker #undef Q64LE
140*f6dc9357SAndroid Build Coastguard Worker #undef CRC64_FUNC_PRE_LE
141*f6dc9357SAndroid Build Coastguard Worker #undef CRC64_FUNC_PRE_LE2
142*f6dc9357SAndroid Build Coastguard Worker
143*f6dc9357SAndroid Build Coastguard Worker #endif
144*f6dc9357SAndroid Build Coastguard Worker
145*f6dc9357SAndroid Build Coastguard Worker
146*f6dc9357SAndroid Build Coastguard Worker
147*f6dc9357SAndroid Build Coastguard Worker
148*f6dc9357SAndroid Build Coastguard Worker #ifndef MY_CPU_LE
149*f6dc9357SAndroid Build Coastguard Worker
150*f6dc9357SAndroid Build Coastguard Worker #define CRC64_UPDATE_BYTE_2_BE(crc, b) (table[((crc) >> 56) ^ (b)] ^ ((crc) << 8))
151*f6dc9357SAndroid Build Coastguard Worker
152*f6dc9357SAndroid Build Coastguard Worker #if defined(Z7_CRC64_USE_64BIT) && (Z7_CRC64_NUM_TABLES_USE % 8 == 0)
153*f6dc9357SAndroid Build Coastguard Worker
154*f6dc9357SAndroid Build Coastguard Worker #define Q64BE(n, d) \
155*f6dc9357SAndroid Build Coastguard Worker ( (table + ((n) * 8 + 0) * 0x100)[(Byte)(d)] \
156*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 1) * 0x100)[((d) >> 1 * 8) & 0xFF] \
157*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 2) * 0x100)[((d) >> 2 * 8) & 0xFF] \
158*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 3) * 0x100)[((d) >> 3 * 8) & 0xFF] \
159*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 4) * 0x100)[((d) >> 4 * 8) & 0xFF] \
160*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 5) * 0x100)[((d) >> 5 * 8) & 0xFF] \
161*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 6) * 0x100)[((d) >> 6 * 8) & 0xFF] \
162*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 8 + 7) * 0x100)[((d) >> 7 * 8)] )
163*f6dc9357SAndroid Build Coastguard Worker
164*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_DEBUG_BE
165*f6dc9357SAndroid Build Coastguard Worker #define R64BE(a) GetBe64a((const UInt64 *)(const void *)p + (a))
166*f6dc9357SAndroid Build Coastguard Worker #else
167*f6dc9357SAndroid Build Coastguard Worker #define R64BE(a) *((const UInt64 *)(const void *)p + (a))
168*f6dc9357SAndroid Build Coastguard Worker #endif
169*f6dc9357SAndroid Build Coastguard Worker
170*f6dc9357SAndroid Build Coastguard Worker #else
171*f6dc9357SAndroid Build Coastguard Worker
172*f6dc9357SAndroid Build Coastguard Worker #define Q32BE(n, d) \
173*f6dc9357SAndroid Build Coastguard Worker ( (table + ((n) * 4 + 0) * 0x100)[(Byte)(d)] \
174*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 4 + 1) * 0x100)[((d) >> 1 * 8) & 0xFF] \
175*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 4 + 2) * 0x100)[((d) >> 2 * 8) & 0xFF] \
176*f6dc9357SAndroid Build Coastguard Worker ^ (table + ((n) * 4 + 3) * 0x100)[((d) >> 3 * 8)] )
177*f6dc9357SAndroid Build Coastguard Worker
178*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_DEBUG_BE
179*f6dc9357SAndroid Build Coastguard Worker #define R32BE(a) GetBe32a((const UInt32 *)(const void *)p + (a))
180*f6dc9357SAndroid Build Coastguard Worker #else
181*f6dc9357SAndroid Build Coastguard Worker #define R32BE(a) *((const UInt32 *)(const void *)p + (a))
182*f6dc9357SAndroid Build Coastguard Worker #endif
183*f6dc9357SAndroid Build Coastguard Worker
184*f6dc9357SAndroid Build Coastguard Worker #endif
185*f6dc9357SAndroid Build Coastguard Worker
186*f6dc9357SAndroid Build Coastguard Worker #define CRC64_FUNC_PRE_BE2(step) \
187*f6dc9357SAndroid Build Coastguard Worker UInt64 Z7_FASTCALL XzCrc64UpdateBeT ## step (UInt64 v, const void *data, size_t size, const UInt64 *table)
188*f6dc9357SAndroid Build Coastguard Worker
189*f6dc9357SAndroid Build Coastguard Worker #define CRC64_FUNC_PRE_BE(step) \
190*f6dc9357SAndroid Build Coastguard Worker CRC64_FUNC_PRE_BE2(step); \
191*f6dc9357SAndroid Build Coastguard Worker CRC64_FUNC_PRE_BE2(step)
192*f6dc9357SAndroid Build Coastguard Worker
CRC64_FUNC_PRE_BE(Z7_CRC64_NUM_TABLES_USE)193*f6dc9357SAndroid Build Coastguard Worker CRC64_FUNC_PRE_BE(Z7_CRC64_NUM_TABLES_USE)
194*f6dc9357SAndroid Build Coastguard Worker {
195*f6dc9357SAndroid Build Coastguard Worker const Byte *p = (const Byte *)data;
196*f6dc9357SAndroid Build Coastguard Worker const Byte *lim;
197*f6dc9357SAndroid Build Coastguard Worker v = Z7_BSWAP64(v);
198*f6dc9357SAndroid Build Coastguard Worker for (; size && ((unsigned)(ptrdiff_t)p & (7 - (Z7_CRC64_NUM_TABLES_USE & 4))) != 0; size--, p++)
199*f6dc9357SAndroid Build Coastguard Worker v = CRC64_UPDATE_BYTE_2_BE(v, *p);
200*f6dc9357SAndroid Build Coastguard Worker lim = p + size;
201*f6dc9357SAndroid Build Coastguard Worker if (size >= Z7_CRC64_NUM_TABLES_USE)
202*f6dc9357SAndroid Build Coastguard Worker {
203*f6dc9357SAndroid Build Coastguard Worker lim -= Z7_CRC64_NUM_TABLES_USE;
204*f6dc9357SAndroid Build Coastguard Worker do
205*f6dc9357SAndroid Build Coastguard Worker {
206*f6dc9357SAndroid Build Coastguard Worker #if Z7_CRC64_NUM_TABLES_USE == 4
207*f6dc9357SAndroid Build Coastguard Worker const UInt32 d = (UInt32)(v >> 32) ^ R32BE(0);
208*f6dc9357SAndroid Build Coastguard Worker v = (v << 32) ^ Q32BE(0, d);
209*f6dc9357SAndroid Build Coastguard Worker #elif Z7_CRC64_NUM_TABLES_USE == 12
210*f6dc9357SAndroid Build Coastguard Worker const UInt32 d1 = (UInt32)(v >> 32) ^ R32BE(0);
211*f6dc9357SAndroid Build Coastguard Worker const UInt32 d0 = (UInt32)(v ) ^ R32BE(1);
212*f6dc9357SAndroid Build Coastguard Worker const UInt32 w = R32BE(2);
213*f6dc9357SAndroid Build Coastguard Worker v = Q32BE(0, w);
214*f6dc9357SAndroid Build Coastguard Worker v ^= Q32BE(2, d1) ^ Q32BE(1, d0);
215*f6dc9357SAndroid Build Coastguard Worker
216*f6dc9357SAndroid Build Coastguard Worker #elif Z7_CRC64_NUM_TABLES_USE == 8
217*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_USE_64BIT
218*f6dc9357SAndroid Build Coastguard Worker v ^= R64BE(0);
219*f6dc9357SAndroid Build Coastguard Worker v = Q64BE(0, v);
220*f6dc9357SAndroid Build Coastguard Worker #else
221*f6dc9357SAndroid Build Coastguard Worker const UInt32 d1 = (UInt32)(v >> 32) ^ R32BE(0);
222*f6dc9357SAndroid Build Coastguard Worker const UInt32 d0 = (UInt32)(v ) ^ R32BE(1);
223*f6dc9357SAndroid Build Coastguard Worker v = Q32BE(1, d1) ^ Q32BE(0, d0);
224*f6dc9357SAndroid Build Coastguard Worker #endif
225*f6dc9357SAndroid Build Coastguard Worker #elif Z7_CRC64_NUM_TABLES_USE == 16
226*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CRC64_USE_64BIT
227*f6dc9357SAndroid Build Coastguard Worker const UInt64 w = R64BE(1);
228*f6dc9357SAndroid Build Coastguard Worker v ^= R64BE(0);
229*f6dc9357SAndroid Build Coastguard Worker v = Q64BE(0, w) ^ Q64BE(1, v);
230*f6dc9357SAndroid Build Coastguard Worker #else
231*f6dc9357SAndroid Build Coastguard Worker const UInt32 d1 = (UInt32)(v >> 32) ^ R32BE(0);
232*f6dc9357SAndroid Build Coastguard Worker const UInt32 d0 = (UInt32)(v ) ^ R32BE(1);
233*f6dc9357SAndroid Build Coastguard Worker const UInt32 w1 = R32BE(2);
234*f6dc9357SAndroid Build Coastguard Worker const UInt32 w0 = R32BE(3);
235*f6dc9357SAndroid Build Coastguard Worker v = Q32BE(1, w1) ^ Q32BE(0, w0);
236*f6dc9357SAndroid Build Coastguard Worker v ^= Q32BE(3, d1) ^ Q32BE(2, d0);
237*f6dc9357SAndroid Build Coastguard Worker #endif
238*f6dc9357SAndroid Build Coastguard Worker #elif
239*f6dc9357SAndroid Build Coastguard Worker #error Stop_Compiling_Bad_CRC64_NUM_TABLES
240*f6dc9357SAndroid Build Coastguard Worker #endif
241*f6dc9357SAndroid Build Coastguard Worker p += Z7_CRC64_NUM_TABLES_USE;
242*f6dc9357SAndroid Build Coastguard Worker }
243*f6dc9357SAndroid Build Coastguard Worker while (p <= lim);
244*f6dc9357SAndroid Build Coastguard Worker lim += Z7_CRC64_NUM_TABLES_USE;
245*f6dc9357SAndroid Build Coastguard Worker }
246*f6dc9357SAndroid Build Coastguard Worker for (; p < lim; p++)
247*f6dc9357SAndroid Build Coastguard Worker v = CRC64_UPDATE_BYTE_2_BE(v, *p);
248*f6dc9357SAndroid Build Coastguard Worker return Z7_BSWAP64(v);
249*f6dc9357SAndroid Build Coastguard Worker }
250*f6dc9357SAndroid Build Coastguard Worker
251*f6dc9357SAndroid Build Coastguard Worker #undef CRC64_UPDATE_BYTE_2_BE
252*f6dc9357SAndroid Build Coastguard Worker #undef R32BE
253*f6dc9357SAndroid Build Coastguard Worker #undef R64BE
254*f6dc9357SAndroid Build Coastguard Worker #undef Q32BE
255*f6dc9357SAndroid Build Coastguard Worker #undef Q64BE
256*f6dc9357SAndroid Build Coastguard Worker #undef CRC64_FUNC_PRE_BE
257*f6dc9357SAndroid Build Coastguard Worker #undef CRC64_FUNC_PRE_BE2
258*f6dc9357SAndroid Build Coastguard Worker
259*f6dc9357SAndroid Build Coastguard Worker #endif
260*f6dc9357SAndroid Build Coastguard Worker #undef Z7_CRC64_NUM_TABLES_USE
261*f6dc9357SAndroid Build Coastguard Worker #endif
262