mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
908 B
42 lines
908 B
#ifndef CRC32_BRAID_COMB_P_H_ |
|
#define CRC32_BRAID_COMB_P_H_ |
|
|
|
/* |
|
Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, |
|
reflected. For speed, this requires that a not be zero. |
|
*/ |
|
static uint32_t multmodp(uint32_t a, uint32_t b) { |
|
uint32_t m, p; |
|
|
|
m = (uint32_t)1 << 31; |
|
p = 0; |
|
for (;;) { |
|
if (a & m) { |
|
p ^= b; |
|
if ((a & (m - 1)) == 0) |
|
break; |
|
} |
|
m >>= 1; |
|
b = b & 1 ? (b >> 1) ^ POLY : b >> 1; |
|
} |
|
return p; |
|
} |
|
|
|
/* |
|
Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been |
|
initialized. |
|
*/ |
|
static uint32_t x2nmodp(z_off64_t n, unsigned k) { |
|
uint32_t p; |
|
|
|
p = (uint32_t)1 << 31; /* x^0 == 1 */ |
|
while (n) { |
|
if (n & 1) |
|
p = multmodp(x2n_table[k & 31], p); |
|
n >>= 1; |
|
k++; |
|
} |
|
return p; |
|
} |
|
|
|
#endif /* CRC32_BRAID_COMB_P_H_ */
|
|
|