blob: d22550e23f04db92f398230aa4922e353ded6e70 [file] [log] [blame]
James Kuszmaul64391362021-01-17 11:32:00 -08001#include "crc32c.h"
2#include "software.h"
3#include "../main/main.h"
4#include <rawrtcdc/config.h>
5#include <re.h>
6
7#if RAWRTCDC_ENABLE_SSE42_CRC32C
8# include "sse42.h"
9#endif
10
11#define DEBUG_MODULE "crc32c"
12//#define RAWRTC_DEBUG_MODULE_LEVEL 7 // Note: Uncomment this to debug this module only
13#include <rawrtcc/debug.h>
14
15/*
16 * Initialise CRC32-C.
17 */
18void rawrtc_crc32c_init(void) {
19#if RAWRTCDC_ENABLE_SSE42_CRC32C
20 if (rawrtc_crc32c_sse42_supported()) {
21 rawrtc_crc32c_init_sse42();
22 rawrtcdc_global.crc32c_handler = rawrtc_crc32c_sse42;
23 DEBUG_PRINTF("Initialised CRC32-C (sse42)\n");
24 return;
25 }
26#endif
27 rawrtcdc_global.crc32c_handler = rawrtc_crc32c_software;
28 DEBUG_PRINTF("Initialised CRC32-C (software)\n");
29}
30
31/*
32 * Compute CRC-32C using whatever method has been established.
33 */
34uint32_t rawrtc_crc32c(void const* buffer, size_t length) {
35 return rawrtcdc_global.crc32c_handler(buffer, length);
36}