diff options
| author | kcbanner <kcbanner@gmail.com> | 2022-12-28 03:00:21 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-01-02 13:55:45 -0700 |
| commit | 6cab3c304eb2d45be6aceb48aa5bbd1fd1298fa3 (patch) | |
| tree | 62fed7f5ba14794931f9816abc767168a1302314 /lib | |
| parent | 676e4f3824054cf39c87d008909b0e57bb9bdcc8 (diff) | |
| download | zig-6cab3c304eb2d45be6aceb48aa5bbd1fd1298fa3.tar.gz zig-6cab3c304eb2d45be6aceb48aa5bbd1fd1298fa3.zip | |
cbe: be more explicit about x86 special cases
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/zig/system/x86.zig | 8 | ||||
| -rw-r--r-- | lib/zig.h | 12 |
2 files changed, 12 insertions, 8 deletions
diff --git a/lib/std/zig/system/x86.zig b/lib/std/zig/system/x86.zig index da09983ac7..9a9aa54975 100644 --- a/lib/std/zig/system/x86.zig +++ b/lib/std/zig/system/x86.zig @@ -528,7 +528,7 @@ const CpuidLeaf = packed struct { edx: u32, }; -extern fn zig_cpuid(leaf_id: u32, subid: u32, eax: *u32, ebx: *u32, ecx: *u32, edx: *u32) void; +extern fn zig_x86_cpuid(leaf_id: u32, subid: u32, eax: *u32, ebx: *u32, ecx: *u32, edx: *u32) void; fn cpuid(leaf_id: u32, subid: u32) CpuidLeaf { // valid for both x86 and x86_64 @@ -538,7 +538,7 @@ fn cpuid(leaf_id: u32, subid: u32) CpuidLeaf { var edx: u32 = undefined; if (builtin.zig_backend == .stage2_c) { - zig_cpuid(leaf_id, subid, &eax, &ebx, &ecx, &edx); + zig_x86_cpuid(leaf_id, subid, &eax, &ebx, &ecx, &edx); } else { asm volatile ("cpuid" : [_] "={eax}" (eax), @@ -553,12 +553,12 @@ fn cpuid(leaf_id: u32, subid: u32) CpuidLeaf { return .{ .eax = eax, .ebx = ebx, .ecx = ecx, .edx = edx }; } -extern fn zig_get_xcr0() u32; +extern fn zig_x86_get_xcr0() u32; // Read control register 0 (XCR0). Used to detect features such as AVX. fn getXCR0() u32 { if (builtin.zig_backend == .stage2_c) { - return zig_get_xcr0(); + return zig_x86_get_xcr0(); } return asm volatile ( @@ -8,7 +8,7 @@ #if _MSC_VER #include <intrin.h> -#else +#elif defined(__i386__) || defined(__x86_64__) #include <cpuid.h> #endif @@ -2345,11 +2345,13 @@ zig_msvc_atomics_128op(u128, nand) zig_msvc_atomics_128op(u128, min) zig_msvc_atomics_128op(u128, max) -#endif +#endif /* _MSC_VER && (_M_IX86 || _M_X64) */ /* ========================= Special Case Intrinsics ========================= */ -static inline void zig_cpuid(zig_u32 leaf_id, zig_u32 subid, zig_u32* eax, zig_u32* ebx, zig_u32* ecx, zig_u32* edx) { +#if (_MSC_VER && (_M_IX86 || _M_X64)) || defined(__i386__) || defined(__x86_64__) + +static inline void zig_x86_cpuid(zig_u32 leaf_id, zig_u32 subid, zig_u32* eax, zig_u32* ebx, zig_u32* ecx, zig_u32* edx) { #if _MSC_VER zig_u32 cpu_info[4]; __cpuidex(cpu_info, leaf_id, subid); @@ -2362,7 +2364,7 @@ static inline void zig_cpuid(zig_u32 leaf_id, zig_u32 subid, zig_u32* eax, zig_u #endif } -static inline zig_u32 zig_get_xcr0() { +static inline zig_u32 zig_x86_get_xcr0() { #if _MSC_VER return (zig_u32)_xgetbv(0); #else @@ -2372,3 +2374,5 @@ static inline zig_u32 zig_get_xcr0() { return eax; #endif } + +#endif |
