| 16 | namespace crc32c { |
| 17 | |
| 18 | uint32_t Extend(uint32_t crc, const uint8_t* data, size_t count) { |
| 19 | #if HAVE_SSE42 && (defined(_M_X64) || defined(__x86_64__)) |
| 20 | static bool can_use_sse42 = CanUseSse42(); |
| 21 | if (can_use_sse42) return ExtendSse42(crc, data, count); |
| 22 | #elif HAVE_ARM64_CRC32C |
| 23 | static bool can_use_arm64_crc32 = CanUseArm64Crc32(); |
| 24 | if (can_use_arm64_crc32) return ExtendArm64(crc, data, count); |
| 25 | #endif // HAVE_SSE42 && (defined(_M_X64) || defined(__x86_64__)) |
| 26 | |
| 27 | return ExtendPortable(crc, data, count); |
| 28 | } |
| 29 | |
| 30 | extern "C" uint32_t crc32c_extend(uint32_t crc, const uint8_t* data, |
| 31 | size_t count) { |