#include #include 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; }