Fix crc32.c to compile local functions only if used.
This commit is contained in:
parent
e9a52aa129
commit
296967c7b7
126
crc32.c
126
crc32.c
@ -101,11 +101,41 @@
|
||||
/* Local functions. */
|
||||
local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
|
||||
local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
|
||||
#ifdef W
|
||||
local z_word_t byte_swap OF((z_word_t word));
|
||||
local z_crc_t crc_word OF((z_word_t data));
|
||||
local z_word_t crc_word_big OF((z_word_t data));
|
||||
#endif /* W */
|
||||
|
||||
/* If available, use the ARM processor CRC32 instruction. */
|
||||
#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
|
||||
# define ARMCRC32
|
||||
#endif
|
||||
|
||||
#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
|
||||
/*
|
||||
Swap the bytes in a z_word_t to convert between little and big endian. Any
|
||||
self-respecting compiler will optimize this to a single machine byte-swap
|
||||
instruction, if one is available. This assumes that word_t is either 32 bits
|
||||
or 64 bits.
|
||||
*/
|
||||
local z_word_t byte_swap(word)
|
||||
z_word_t word;
|
||||
{
|
||||
# if W == 8
|
||||
return
|
||||
(word & 0xff00000000000000) >> 56 |
|
||||
(word & 0xff000000000000) >> 40 |
|
||||
(word & 0xff0000000000) >> 24 |
|
||||
(word & 0xff00000000) >> 8 |
|
||||
(word & 0xff000000) << 8 |
|
||||
(word & 0xff0000) << 24 |
|
||||
(word & 0xff00) << 40 |
|
||||
(word & 0xff) << 56;
|
||||
# else /* W == 4 */
|
||||
return
|
||||
(word & 0xff000000) >> 24 |
|
||||
(word & 0xff0000) >> 8 |
|
||||
(word & 0xff00) << 8 |
|
||||
(word & 0xff) << 24;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* CRC polynomial. */
|
||||
#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */
|
||||
@ -549,62 +579,6 @@ local z_crc_t x2nmodp(n, k)
|
||||
return p;
|
||||
}
|
||||
|
||||
#ifdef W
|
||||
|
||||
/*
|
||||
Swap the bytes in a z_word_t to convert between little and big endian. Any
|
||||
self-respecting compiler will optimize this to a single machine byte-swap
|
||||
instruction, if one is available. This assumes that word_t is either 32 bits
|
||||
or 64 bits.
|
||||
*/
|
||||
local z_word_t byte_swap(word)
|
||||
z_word_t word;
|
||||
{
|
||||
#if W == 8
|
||||
return
|
||||
(word & 0xff00000000000000) >> 56 |
|
||||
(word & 0xff000000000000) >> 40 |
|
||||
(word & 0xff0000000000) >> 24 |
|
||||
(word & 0xff00000000) >> 8 |
|
||||
(word & 0xff000000) << 8 |
|
||||
(word & 0xff0000) << 24 |
|
||||
(word & 0xff00) << 40 |
|
||||
(word & 0xff) << 56;
|
||||
#else /* W == 4 */
|
||||
return
|
||||
(word & 0xff000000) >> 24 |
|
||||
(word & 0xff0000) >> 8 |
|
||||
(word & 0xff00) << 8 |
|
||||
(word & 0xff) << 24;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
Return the CRC of the W bytes in the word_t data, taking the
|
||||
least-significant byte of the word as the first byte of data, without any pre
|
||||
or post conditioning. This is used to combine the CRCs of each braid.
|
||||
*/
|
||||
local z_crc_t crc_word(data)
|
||||
z_word_t data;
|
||||
{
|
||||
int k;
|
||||
for (k = 0; k < W; k++)
|
||||
data = (data >> 8) ^ crc_table[data & 0xff];
|
||||
return (z_crc_t)data;
|
||||
}
|
||||
|
||||
local z_word_t crc_word_big(data)
|
||||
z_word_t data;
|
||||
{
|
||||
int k;
|
||||
for (k = 0; k < W; k++)
|
||||
data = (data << 8) ^
|
||||
crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
|
||||
return data;
|
||||
}
|
||||
|
||||
#endif /* W */
|
||||
|
||||
/* =========================================================================
|
||||
* This function can be used by asm versions of crc32(), and to force the
|
||||
* generation of the CRC tables in a threaded application.
|
||||
@ -626,7 +600,7 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
|
||||
* -march=armv8-a+crc, or -march=native if the compile machine has the crc32
|
||||
* instructions.
|
||||
*/
|
||||
#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
|
||||
#ifdef ARMCRC32
|
||||
|
||||
/*
|
||||
Constants empirically determined to maximize speed. These values are from
|
||||
@ -733,6 +707,34 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||
|
||||
#else
|
||||
|
||||
#ifdef W
|
||||
|
||||
/*
|
||||
Return the CRC of the W bytes in the word_t data, taking the
|
||||
least-significant byte of the word as the first byte of data, without any pre
|
||||
or post conditioning. This is used to combine the CRCs of each braid.
|
||||
*/
|
||||
local z_crc_t crc_word(data)
|
||||
z_word_t data;
|
||||
{
|
||||
int k;
|
||||
for (k = 0; k < W; k++)
|
||||
data = (data >> 8) ^ crc_table[data & 0xff];
|
||||
return (z_crc_t)data;
|
||||
}
|
||||
|
||||
local z_word_t crc_word_big(data)
|
||||
z_word_t data;
|
||||
{
|
||||
int k;
|
||||
for (k = 0; k < W; k++)
|
||||
data = (data << 8) ^
|
||||
crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
|
||||
return data;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* ========================================================================= */
|
||||
unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||
unsigned long crc;
|
||||
|
Loading…
Reference in New Issue
Block a user