From: Wolfgang Bumiller Date: Sat, 23 Nov 2013 10:58:20 +0000 (+0100) Subject: crc16 slice-by-8 table generator code included for reference X-Git-Tag: xonotic-v0.8.0~82^2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=0860b7a68ba19ec6ddf245192d8877c01b48611b;p=xonotic%2Fgmqcc.git crc16 slice-by-8 table generator code included for reference --- diff --git a/util.c b/util.c index 19377b1..761d753 100644 --- a/util.c +++ b/util.c @@ -449,6 +449,40 @@ uint16_t util_crc16(uint16_t current, const char *k, size_t len) { return h; } +#if 0 +/* for reference: table generated with this: */ +/* compile with cc -std=c99 */ +int main(void) { + for (unsigned i = 0; i < 0x100; ++i) { + uint16_t x = i << 8; + for (int j = 0; j < 8; ++j) + x = (x << 1) ^ ((x & 0x8000) ? 0x1021 : 0); + tab[0][i] = x; + } + for (unsigned i = 0; i < 0x100; ++i) { + uint16_t c = tab[0][i]; + for (unsigned j = 1; j < 8; ++j) { + c = tab[0][c >> 8] ^ (c << 8); + tab[j][i] = c; + } + } + + printf("static const uint16_t util_crc16_table[8][256] = {"); + for (int i = 0; i < 8; ++i) { + printf("{\n"); + for (int j = 0; j < 0x100; ++j) { + printf((j & 7) ? " " : " "); + printf((j != 0x100-1) ? "0x%04X," : "0x%04X", tab[i][j]); + if ((j & 7) == 7) + printf("\n"); + } + printf((i != 7) ? "}," : "}"); + } + printf("};\n"); + return 0; +} +#endif + /* * modifier is the match to make and the transposition from it, while add is the upper-value that determines the * transposition from uppercase to lower case.