Skip to content
Snippets Groups Projects
Select Git revision
  • eec2e89ae266e768e2baa4ceb0f67cedbaebfac4
  • 2.11.5-picodata default protected
  • ipotemin/trigger-binding
  • picodata-25.4
  • astrochuk/fiber-stack-addr
  • mlaletin/ci-tarantool-module protected
  • astrochuk/remove-rows
  • artshmelev/try-remove-condition-replicaset_connect_quorum
  • kusancho/fiber_stack_report
  • e.dmitriev/osx-arm-build-fix
  • nnk/warning-limit-and-iproto-executor
  • kdy/ci_build_with_tag protected
  • nnk/iproto-emergency-executor
  • nnk/add-vdbe-soft-limit
  • origin/picodata-25.3
  • artshmelev/debug-tls
  • v.klimenko/box_index_iterator_with_offset
  • picodata-25.3
  • funbringer/2.11.5-fix-select-param-having
  • max/new-cache2
  • nnk/expose-actual-vdbe-opcode-count
  • 2.11.5.283 protected
  • 2.11.5.266 protected
  • 2.11.5.265 protected
  • 2.11.5.254 protected
  • 2.11.5.253 protected
  • 2.11.5.233 protected
  • 2.11.5.230 protected
  • 2.11.5.228 protected
  • 2.11.5.226 protected
  • 2.11.5.225 protected
  • 2.11.5.223 protected
  • 2.11.5.221 protected
  • 2.11.5.220 protected
  • 2.11.5.219 protected
  • 2.11.5.218 protected
  • 2.11.5.217 protected
  • 2.11.5 protected
  • 2.11.2.159 protected
  • 2.11.4 protected
  • 2.11.2.155 protected
41 results

crc32_impl.c

Blame
  • crc32_impl.c 41.84 KiB
    /*-
     *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
     *  code or tables extracted from it, as desired without restriction.
     */
    
    /*
     *  First, the polynomial itself and its table of feedback terms.  The
     *  polynomial is
     *  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
     *
     *  Note that we take it "backwards" and put the highest-order term in
     *  the lowest-order bit.  The X^32 term is "implied"; the LSB is the
     *  X^31 term, etc.  The X^0 term (usually shown as "+1") results in
     *  the MSB being 1
     *
     *  Note that the usual hardware shift register implementation, which
     *  is what we're using (we're merely optimizing it by doing eight-bit
     *  chunks at a time) shifts bits into the lowest-order term.  In our
     *  implementation, that means shifting towards the right.  Why do we
     *  do it this way?  Because the calculated CRC must be transmitted in
     *  order from highest-order term to lowest-order term.  UARTs transmit
     *  characters in order from LSB to MSB.  By storing the CRC this way
     *  we hand it to the UART in the order low-byte to high-byte; the UART
     *  sends each low-bit to hight-bit; and the result is transmission bit
     *  by bit from highest- to lowest-order term without requiring any bit
     *  shuffling on our part.  Reception works similarly
     *
     *  The feedback terms table consists of 256, 32-bit entries.  Notes
     *
     *      The table can be generated at runtime if desired; code to do so
     *      is shown later.  It might not be obvious, but the feedback
     *      terms simply represent the results of eight shift/xor opera
     *      tions for all combinations of data and CRC register values
     *
     *      The values must be right-shifted by eight bits by the "updcrc
     *      logic; the shift must be unsigned (bring in zeroes).  On some
     *      hardware you could probably optimize the shift in assembler by
     *      using byte-swap instructions
     *      polynomial $edb88320
     *
     *
     * CRC32 code derived from work by Gary S. Brown.
     */
    
    #include <unistd.h>
    #include <stdint.h>
    
    static uint32_t crc32_table[] = {
    	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
    	0xe963a535, 0x9e6495a3,	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
    	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
    	0xf3b97148, 0x84be41de,	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
    	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,	0x14015c4f, 0x63066cd9,
    	0xfa0f3d63, 0x8d080df5,	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
    	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,	0x35b5a8fa, 0x42b2986c,
    	0xdbbbc9d6, 0xacbcf940,	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
    	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
    	0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
    	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,	0x76dc4190, 0x01db7106,
    	0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
    	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
    	0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
    	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
    	0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
    	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
    	0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
    	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
    	0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
    	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
    	0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,