]> Sergey Matveev's repositories - nnn.git/commitdiff
Use a static CRC8 table
authorArun Prakash Jana <engineerarun@gmail.com>
Tue, 5 Feb 2019 19:34:35 +0000 (01:04 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Tue, 5 Feb 2019 19:34:35 +0000 (01:04 +0530)
src/nnn.c

index 7702c01a9e3696ee0ce5932438a798760da8693a..7f6547de89b1bb48babac5b8739d11102b92abd2 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -331,9 +331,6 @@ static size_t g_tmpfplen; /* path to tmp files for copy without X, keybind help
 static uchar g_crc;
 static uchar BLK_SHIFT = 9;
 
-/* CRC data */
-static uchar crc8table[CRC8_TABLE_LEN] __attribute__ ((aligned));
-
 /* For use in functions which are isolated and don't return the buffer */
 static char g_buf[CMD_LEN_MAX] __attribute__ ((aligned));
 
@@ -481,6 +478,7 @@ static int (*nftw_fn) (const char *fpath, const struct stat *sb, int typeflag, s
  * CRC8 source:
  *   https://barrgroup.com/Embedded-Systems/How-To/CRC-Calculation-C-Code
  */
+#if 0 // using a static table
 static void crc8init()
 {
        uchar remainder, bit;
@@ -504,12 +502,34 @@ static void crc8init()
                crc8table[dividend] = remainder;
        }
 }
+#endif
 
 static uchar crc8fast(uchar const message[], size_t n)
 {
        static uchar data, remainder;
        static size_t byte;
 
+       /* CRC data */
+       static const uchar crc8table[CRC8_TABLE_LEN] __attribute__ ((aligned)) =
+       {
+                 0,  94, 188, 226,  97,  63, 221, 131, 194, 156, 126,  32, 163, 253,  31,  65,
+               157, 195,  33, 127, 252, 162,  64,  30,  95,   1, 227, 189,  62,  96, 130, 220,
+                35, 125, 159, 193,  66,  28, 254, 160, 225, 191,  93,   3, 128, 222,  60,  98,
+               190, 224,   2,  92, 223, 129,  99,  61, 124,  34, 192, 158,  29,  67, 161, 255,
+                70,  24, 250, 164,  39, 121, 155, 197, 132, 218,  56, 102, 229, 187,  89,   7,
+               219, 133, 103,  57, 186, 228,   6,  88,  25,  71, 165, 251, 120,  38, 196, 154,
+               101,  59, 217, 135,   4,  90, 184, 230, 167, 249,  27,  69, 198, 152, 122,  36,
+               248, 166,  68,  26, 153, 199,  37, 123,  58, 100, 134, 216,  91,   5, 231, 185,
+               140, 210,  48, 110, 237, 179,  81,  15,  78,  16, 242, 172,  47, 113, 147, 205,
+                17,  79, 173, 243, 112,  46, 204, 146, 211, 141, 111,  49, 178, 236,  14,  80,
+               175, 241,  19,  77, 206, 144, 114,  44, 109,  51, 209, 143,  12,  82, 176, 238,
+                50, 108, 142, 208,  83,  13, 239, 177, 240, 174,  76,  18, 145, 207,  45, 115,
+               202, 148, 118,  40, 171, 245,  23,  73,   8,  86, 180, 234, 105,  55, 213, 139,
+                87,   9, 235, 181,  54, 104, 138, 212, 149, 203,  41, 119, 244, 170,  72,  22,
+               233, 183,  85,  11, 136, 214,  52, 106,  43, 117, 151, 201,  74,  20, 246, 168,
+               116,  42, 200, 150,  21,  75, 169, 247, 182, 232,  10,  84, 215, 137, 107,  53,
+       };
+
        /* Divide the message by the polynomial, a byte at a time */
        for (remainder = byte = 0; byte < n; ++byte) {
                data = message[byte] ^ (remainder >> (WIDTH - 8));
@@ -1222,7 +1242,7 @@ static int xstrverscmp(const char * const s1, const char * const s2)
                /* S_Z */  S_N, S_F, S_Z
        };
 
-       static const int8_t result_type[] =
+       static const int8_t result_type[] __attribute__ ((aligned)) =
        {
                /* state   x/x  x/d  x/0  d/x  d/d  d/0  0/x  0/d  0/0  */
 
@@ -4185,7 +4205,9 @@ int main(int argc, char *argv[])
 
        /* Set locale */
        setlocale(LC_ALL, "");
+#if 0
        crc8init();
+#endif
 
        /* Bind TAB to cycling */
        rl_variable_bind("completion-ignore-case", "on");