This is a rework of my previous patches improving performance of rte_hash_crc.
Summary of changes: * software implementation of CRC32 introduced; * in the runtime, algorithm can fall back to software version if CPU doesn't support SSE4.2; * best available algorithm is automatically detected upon application startup; * redundant compile checks removed from test utilities; * assembly code for emitting SSE4.2 instructions is used instead of built-in intrinsics; * rte_hash_crc() function performance significantly improved. v6 changes: * added 'const' qualifier to crc32c lookup tables declaration. v5 changes: * given up gcc's builtin SSE4.2 intrinsics; * add assembly code for emitting SSE4.2 instructions. v4 changes: * icc-specific compile checks removed. v3 changes: * setting default algorithm implementation as a constructor while application startup; * crc32 software implementation improved; * removed compile-time checks from test_hash_perf and test_hash. v2 changes: * added CRC32 software implementation; * added rte_hash_crc_set_alg() function to control availability of SSE4.2; * added fallback to sw crc32 in case SSE4.2 is not available, or if SSE4.2 is intentionally disabled. Initial version (v1) changes: * added rte_hash_crc_8byte() function to calculate CRC32 on 8-byte operand; * reworked rte_hash_crc() function which leverages both versions of CRC32 hash calculation functions with 4 and 8-byte operands. Yerden Zhumabekov (7): hash: add software CRC32 implementation hash: add assembly implementation of CRC32 intrinsics hash: replace built-in functions implementing SSE4.2 hash: add rte_hash_crc_8byte function hash: add fallback to software CRC32 implementation hash: rte_hash_crc() slices data into 8-byte pieces test: remove redundant compile checks app/test/test_hash.c | 7 - app/test/test_hash_perf.c | 11 - lib/librte_hash/rte_hash_crc.h | 459 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 448 insertions(+), 29 deletions(-) -- 1.7.9.5