root/lib/gen_crc64table.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. generate_crc64_table
  2. print_crc64_table
  3. main

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Generate lookup table for the table-driven CRC64 calculation.
   4  *
   5  * gen_crc64table is executed in kernel build time and generates
   6  * lib/crc64table.h. This header is included by lib/crc64.c for
   7  * the table-driven CRC64 calculation.
   8  *
   9  * See lib/crc64.c for more information about which specification
  10  * and polynomial arithmetic that gen_crc64table.c follows to
  11  * generate the lookup table.
  12  *
  13  * Copyright 2018 SUSE Linux.
  14  *   Author: Coly Li <colyli@suse.de>
  15  */
  16 #include <inttypes.h>
  17 #include <stdio.h>
  18 
  19 #define CRC64_ECMA182_POLY 0x42F0E1EBA9EA3693ULL
  20 
  21 static uint64_t crc64_table[256] = {0};
  22 
  23 static void generate_crc64_table(void)
  24 {
  25         uint64_t i, j, c, crc;
  26 
  27         for (i = 0; i < 256; i++) {
  28                 crc = 0;
  29                 c = i << 56;
  30 
  31                 for (j = 0; j < 8; j++) {
  32                         if ((crc ^ c) & 0x8000000000000000ULL)
  33                                 crc = (crc << 1) ^ CRC64_ECMA182_POLY;
  34                         else
  35                                 crc <<= 1;
  36                         c <<= 1;
  37                 }
  38 
  39                 crc64_table[i] = crc;
  40         }
  41 }
  42 
  43 static void print_crc64_table(void)
  44 {
  45         int i;
  46 
  47         printf("/* this file is generated - do not edit */\n\n");
  48         printf("#include <linux/types.h>\n");
  49         printf("#include <linux/cache.h>\n\n");
  50         printf("static const u64 ____cacheline_aligned crc64table[256] = {\n");
  51         for (i = 0; i < 256; i++) {
  52                 printf("\t0x%016" PRIx64 "ULL", crc64_table[i]);
  53                 if (i & 0x1)
  54                         printf(",\n");
  55                 else
  56                         printf(", ");
  57         }
  58         printf("};\n");
  59 }
  60 
  61 int main(int argc, char *argv[])
  62 {
  63         generate_crc64_table();
  64         print_crc64_table();
  65         return 0;
  66 }

/* [<][>][^][v][top][bottom][index][help] */