# crc32-s390x **Repository Path**: ercengsha/crc32-s390x ## Basic Information - **Project Name**: crc32-s390x - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-28 - **Last Updated**: 2025-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README crc32-s390x =========== A library of functions for accelerating CRC32 calculations using the Vector Galois Field Multiply instruction family instructions introduced in the z13. The Vector Extension Facility for z/Architecture provides two instructions to perform a binary Galois field multiplication. Both instructions (VGFM and VGFMA) can operate on different element sizes. For the 32-bit CRC computation, doublewords are used throughout the implementation. Quick start ----------- Type make to generate a static library libcrc32\_s390x.a. The library provides functions to compute CRC-32 (IEEE 802.3) and CRC-32C (Castagnoli), with optional bit reflection (with the `*_le` versions of the functions). Function prototypes are declared in crc32-s390x.h. A sample program crc32-cli.c shows how the library is used. Testing ------- The correctness of the hardware-accelerated implementation is verified with the pure-software Rocksoft Model CRC algorithm. There are four variants of the test, each of which exercise one type of CRC on random data with random alignment and buffer sizes, in an infinite loop: ./crc32_be_test ./crc32_le_test ./crc32c_be_test ./crc32c_le_test If the hardware-accelerated algorithm ever returns a different result than the Rocksoft Model, the test will print messages to indicate the errors. Performance ----------- The performance of the hardware-accelerated implemention is compared with the slicing-by-8 algorithm. Testing 500000 iterations of a CRC of 32kB of data showed a 70-times speed-up: $ time ./crc32_sw_bench 32768 500000 CRC: a98177aa real 0m21.862s user 0m21.859s sys 0m0.002s $ time ./crc32_vx_bench 32768 500000 CRC: a98177aa real 0m0.323s user 0m0.323s sys 0m0.000s