| ... | @@ -4195,7 +4195,17 @@ static inline void* zig_x86_64_windows_teb(void) { | ... | @@ -4195,7 +4195,17 @@ static inline void* zig_x86_64_windows_teb(void) { |
| 4195 | | 4195 | |
| 4196 | #endif | 4196 | #endif |
| 4197 | | 4197 | |
| 4198 | #if defined(zig_x86) | 4198 | #if defined(zig_loongarch) |
| | 4199 | |
| | 4200 | static inline void zig_loongarch_cpucfg(uint32_t word, uint32_t* result) { |
| | 4201 | #if defined(zig_gnuc_asm) |
| | 4202 | __asm__("cpucfg %[result], %[word]" : [result] "=r" (result) : [word] "r" (word)); |
| | 4203 | #else |
| | 4204 | *result = 0; |
| | 4205 | #endif |
| | 4206 | } |
| | 4207 | |
| | 4208 | #elif defined(zig_x86) |
| 4199 | | 4209 | |
| 4200 | static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax, uint32_t* ebx, uint32_t* ecx, uint32_t* edx) { | 4210 | static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax, uint32_t* ebx, uint32_t* ecx, uint32_t* edx) { |
| 4201 | #if defined(zig_msvc) | 4211 | #if defined(zig_msvc) |
| ... | @@ -4206,7 +4216,7 @@ static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax | ... | @@ -4206,7 +4216,7 @@ static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax |
| 4206 | *ecx = (uint32_t)cpu_info[2]; | 4216 | *ecx = (uint32_t)cpu_info[2]; |
| 4207 | *edx = (uint32_t)cpu_info[3]; | 4217 | *edx = (uint32_t)cpu_info[3]; |
| 4208 | #elif defined(zig_gnuc_asm) | 4218 | #elif defined(zig_gnuc_asm) |
| 4209 | __asm__("cpuid" : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) : "a"(leaf_id), "c"(subid)); | 4219 | __asm__("cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (leaf_id), "c" (subid)); |
| 4210 | #else | 4220 | #else |
| 4211 | *eax = 0; | 4221 | *eax = 0; |
| 4212 | *ebx = 0; | 4222 | *ebx = 0; |
| ... | @@ -4221,7 +4231,7 @@ static inline uint32_t zig_x86_get_xcr0(void) { | ... | @@ -4221,7 +4231,7 @@ static inline uint32_t zig_x86_get_xcr0(void) { |
| 4221 | #elif defined(zig_gnuc_asm) | 4231 | #elif defined(zig_gnuc_asm) |
| 4222 | uint32_t eax; | 4232 | uint32_t eax; |
| 4223 | uint32_t edx; | 4233 | uint32_t edx; |
| 4224 | __asm__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(0)); | 4234 | __asm__("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); |
| 4225 | return eax; | 4235 | return eax; |
| 4226 | #else | 4236 | #else |
| 4227 | *eax = 0; | 4237 | *eax = 0; |