mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-03-19 18:00:23 +08:00
crcgen: utility program to generate CRC tables
Small utility program to generate CRC tables in both C and Perl formats. Note: we don't actually need a true CRC, which is what this generates. We may want to consider going to a "generalized CRC", meaning a randomly generated set of 8 bytewise permutations. These have the advantage of not being linear, while having the same software implementation as a true CRC. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
80d0fd371f
commit
395d381114
47
misc/crcgen.c
Normal file
47
misc/crcgen.c
Normal file
@ -0,0 +1,47 @@
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* Polynomial in bit-reversed notation */
|
||||
uint64_t poly;
|
||||
uint64_t crctab[256], v;
|
||||
int i, j;
|
||||
|
||||
poly = strtoumax(argv[1], NULL, 0);
|
||||
|
||||
printf("/* C */\n");
|
||||
printf("static const uint64_t crc64_tab[256] = {\n");
|
||||
for (i = 0; i < 256; i++) {
|
||||
v = i;
|
||||
for (j = 0; j < 8; j++)
|
||||
v = (v >> 1) ^ ((v & 1) ? poly : 0);
|
||||
crctab[i] = v;
|
||||
}
|
||||
|
||||
for (i = 0; i < 256; i += 2) {
|
||||
printf(" /* %02x */ UINT64_C(0x%016"PRIx64"), "
|
||||
"UINT64_C(0x%016"PRIx64")%s\n",
|
||||
i, crctab[i], crctab[i+1], (i == 254) ? "" : ",");
|
||||
}
|
||||
printf("};\n\n");
|
||||
|
||||
printf("# perl\n");
|
||||
printf("@crc64_tab = (\n");
|
||||
for (i = 0; i < 256; i += 2) {
|
||||
printf(" [0x%08"PRIx32", 0x%08"PRIx32"], "
|
||||
"[0x%08"PRIx32", 0x%08"PRIx32"]%-1s # %02x\n",
|
||||
(uint32_t)(crctab[i] >> 32),
|
||||
(uint32_t)(crctab[i]),
|
||||
(uint32_t)(crctab[i+1] >> 32),
|
||||
(uint32_t)(crctab[i+1]),
|
||||
(i == 254) ? "" : ",",
|
||||
i);
|
||||
}
|
||||
printf(");\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user