diff --git a/src/dsp/cpu.h b/src/dsp/cpu.h index 8dc0c0cb..913e857f 100644 --- a/src/dsp/cpu.h +++ b/src/dsp/cpu.h @@ -193,23 +193,25 @@ #include // NOLINT // clang-format off -#define WEBP_DSP_INIT(func) \ - do { \ - static volatile VP8CPUInfo func##_last_cpuinfo_used = \ - (VP8CPUInfo)&func##_last_cpuinfo_used; \ - static pthread_mutex_t func##_lock = PTHREAD_MUTEX_INITIALIZER; \ - if (pthread_mutex_lock(&func##_lock)) break; \ - if (func##_last_cpuinfo_used != VP8GetCPUInfo) func(); \ - func##_last_cpuinfo_used = VP8GetCPUInfo; \ - (void)pthread_mutex_unlock(&func##_lock); \ +#define WEBP_DSP_INIT_VARS(func) \ + static VP8CPUInfo func##_last_cpuinfo_used = \ + (VP8CPUInfo)&func##_last_cpuinfo_used; \ + static pthread_mutex_t func##_lock = PTHREAD_MUTEX_INITIALIZER +#define WEBP_DSP_INIT(func) \ + do { \ + if (pthread_mutex_lock(&func##_lock)) break; \ + if (func##_last_cpuinfo_used != VP8GetCPUInfo) func(); \ + func##_last_cpuinfo_used = VP8GetCPUInfo; \ + (void)pthread_mutex_unlock(&func##_lock); \ } while (0) // clang-format on #else // !(defined(WEBP_USE_THREAD) && !defined(_WIN32)) // clang-format off +#define WEBP_DSP_INIT_VARS(func) \ + static volatile VP8CPUInfo func##_last_cpuinfo_used = \ + (VP8CPUInfo)&func##_last_cpuinfo_used #define WEBP_DSP_INIT(func) \ do { \ - static volatile VP8CPUInfo func##_last_cpuinfo_used = \ - (VP8CPUInfo)&func##_last_cpuinfo_used; \ if (func##_last_cpuinfo_used == VP8GetCPUInfo) break; \ func(); \ func##_last_cpuinfo_used = VP8GetCPUInfo; \ @@ -225,6 +227,7 @@ } */ #define WEBP_DSP_INIT_FUNC(name) \ + WEBP_DSP_INIT_VARS(name##_body); \ static WEBP_TSAN_IGNORE_FUNCTION void name##_body(void); \ WEBP_TSAN_IGNORE_FUNCTION void name(void) { WEBP_DSP_INIT(name##_body); } \ static WEBP_TSAN_IGNORE_FUNCTION void name##_body(void)