# CRC32c function - Same code from : https://stackoverflow.com/a/17646775 - Fixed some alignment issues, replaced asm code with compiler intrinsics - Just copy sc_crc32.h and sc_crc32.c to your project. - Compile time switch to hardware version if supported (crc32c instruction on x64), fallback to software version if not available - See CmakeLists.txt, it just checks "-msse4.2" flag. Stackoverflow answer has runtime dispatch between hardware and software versions if you'd like that. - This is Crc32c algorithm, not Crc32 - A faster version might be possible with 'PCLMULQDQ' instruction as explained here [[link]](https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/crc-iscsi-polynomial-crc32-instruction-paper.pdf) ```cmake ## Cmake ## Only use hardware version in 64 bit architectures. if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") check_c_compiler_flag(-msse4.2 HAVE_CRC32_HARDWARE) if (${HAVE_CRC32_HARDWARE}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2 -DSC_HAVE_CRC32_HARDWARE") endif () endif() ``` ```c ```