From 204df19d79833382bbee0ed110502919dc7341f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 1 Dec 2024 18:50:06 +0100 Subject: [PATCH] zig.h: Avoid depending on cpuid.h for zig_x86_cpuid(). Just use inline assembly instead, which is what that header does. Also make sure we have a dummy implementation when inline assembly is unavailable. --- lib/zig.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/zig.h b/lib/zig.h index aa694586b1..8877b45bd3 100644 --- a/lib/zig.h +++ b/lib/zig.h @@ -79,8 +79,6 @@ #if defined(zig_msvc) #include -#elif defined(zig_x86) -#include #endif #if __STDC_VERSION__ >= 202311L @@ -4058,19 +4056,29 @@ static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax *ebx = (uint32_t)cpu_info[1]; *ecx = (uint32_t)cpu_info[2]; *edx = (uint32_t)cpu_info[3]; +#elif defined(zig_gnuc) || defined(zig_tinyc) || defined(zig_slimcc) + __asm__("cpuid" : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) : "a"(leaf_id), "c"(subid)); #else - __cpuid_count(leaf_id, subid, *eax, *ebx, *ecx, *edx); + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; #endif } static inline uint32_t zig_x86_get_xcr0(void) { #if defined(zig_msvc) return (uint32_t)_xgetbv(0); -#else +#elif defined(zig_gnuc) || defined(zig_tinyc) || defined(zig_slimcc) uint32_t eax; uint32_t edx; __asm__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(0)); return eax; +#else + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; #endif }