From 29dda5066f27d08ee50152689dd339acc6e453a8 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 10 Aug 2025 14:40:15 +0300 Subject: [PATCH] Stop doing cpuid repeatedly in runtime --- src/util/crc32c.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/util/crc32c.c b/src/util/crc32c.c index 4afdfd3e..6b658c3b 100644 --- a/src/util/crc32c.c +++ b/src/util/crc32c.c @@ -367,9 +367,13 @@ uint32_t crc32c(uint32_t crc, const void *buf, size_t len) #ifndef __x86_64__ return crc32c_sw(crc, buf, len); #else - int sse42; - SSE42(sse42); - return sse42 ? crc32c_hw(crc, buf, len) : crc32c_sw(crc, buf, len); + static int sse42 = 0; + if (!sse42) + { + SSE42(sse42); + sse42 = sse42 ? 2 : 1; + } + return sse42 == 2 ? crc32c_hw(crc, buf, len) : crc32c_sw(crc, buf, len); #endif }